diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md index af8009482557a21c8d439d35ac36d778eda0373c..f38f69cace2c267ee7cab6e6983e5df35177ae17 100644 --- a/docs/ChangeLog.md +++ b/docs/ChangeLog.md @@ -1,3 +1,124 @@ +# Phytium FreeRTOS SDK 2023-07-03 ChangeLog + +Change Log sinc 2023-07-02 + +## third-party + +- letter-shell adapt to new psci api + +# Phytium FreeRTOS SDK 2023-06-28 ChangeLog + +Change Log sinc 2023-6-27 + +## example + +- add atomic test example + +# Phytium FreeRTOS SDK 2023-06-26 ChangeLog + +Change Log sinc 2023-6-24 + +## third-party + +- remove freertos boot.s, use fboot.s in standalone folder + +# Phytium FreeRTOS SDK 2023-06-19 ChangeLog + +Change Log sinc 2023-6-7 + +## driver + +- eth/xmac: add new function FXmacRecvSemaphoreHandler,which can notify the receiving thread of incoming packets. +- eth/xmac: add new macro definition FXMAC_OS_CONFIG_RX_POLL_RECV,which can select poll mode. +- add new code logic,which can disable the RXCOMPL interrupt. +- modify interrupt registration function:FXmacRecvHandler->FXmacRecvSemaphoreHandler,which means using interrupt mode to notify the rx thread of the receipt of the packet. +- the value of max_fr_size have been modified:FXMAC_MAX_FRAME_SIZE-18->FXMAC_MAX_FRAME_SIZE. +## example + +- update network/lwip_startup sdkconfig: CONFIG_LWIP_TCPIP_TASK_PRIO 6->5. +- the above changes will ensure a more stable and higher bandwidth when we run our iperf tests. +- all sdkconfigs and *_aarch*_eg_configs have been updated while using tools: build_all. + +## third-party + +- add new callback function ethernetif_poll,which can poll network packets. +- modified the initial value of the member variable mtu of netif,which are more in line with the theoretical definition of mtu. + +# Phytium FreeRTOS SDK 2023-06-06 ChangeLog + +Change Log sinc 2023-6-5 + +## example + +-fix generic timer operation in wdt example + +## make + +- modify aarch32/gcc/fvectors.S filename in standalone_dependence.mk + +## third-party + +-fix generic timer operation in freertos_configs.c + +# Phytium FreeRTOS SDK 2023-05-09 ChangeLog + +Change Log sinc 2023-4-18 + +## example + +-add lvgl indev driver and modify the format the whole media example + +# Phytium FreeRTOS SDK 2023-4-18 ChangeLog + +Change Log sinc 2023-4-10 + +## third-party + +- freertos/portable modify config for the priority icc_pmr set and icc_rpr get + +# Phytium FreeRTOS SDK 2023-4-10 ChangeLog + +Change Log since 2023-03-30 + +## example + +- lwip instructions has been updated by which we can choose driver type manually. +- update README.md : add new description about lwip probe instructions. + +# Phytium FreeRTOS SDK 2023-4-7 ChangeLog + +Change Log sinc 2023-3-16 + +## third-party + +- update cherryusb to 0.8.0 +- modify cherryusb (ready to merge to cherryusb baseline) + - reconstruct xhci driver + - modify usbh_bus usage to support use multiple usb controller + - modify enumration proccedure to support enumrate usb 3.0 device (e.g mass storage) + - implment for usb 3.0 hub + +## example + +- modify cherryusb host example +- modify fatfs usb mass storage part + +# Phytium FreeRTOS SDK 2023-4-3 ChangeLog + +Change Log sinc 2023-3-15 + +## driver + +- driver/media add the multi-display driver + +## example + +- media add config and example for the multi-display + +## third-party + +- lvgl-8.3/port modify config for the multi-display + # Phytium FreeRTOS SDK 2023-3-16 ChangeLog Change Log sinc 2023-3-15 @@ -155,6 +276,7 @@ Change Log sinc 2023-1-30 # Phytium FreeRTOS SDK 2023-1-6 ChangeLog + Change Log sinc 2023-1-5 ## third-party diff --git a/drivers/Kconfig b/drivers/Kconfig index 01d83bad3e78b64029dd8bd566f789acb3eeee2f..7a9305dbf4ba8df46b071fd055a7181859da70b7 100644 --- a/drivers/Kconfig +++ b/drivers/Kconfig @@ -113,3 +113,9 @@ menu "Freertos Timer Drivers" default n endmenu +menu "Freertos Media Drivers" + config FREERTOS_USE_MEDIA + bool + prompt "Use Freertos media driver" + default n +endmenu diff --git a/drivers/dma/fgdma/fgdma_os.c b/drivers/dma/fgdma/fgdma_os.c index 92e530c82c7a1e5a1c17e62cfabafa5bc2d8909d..e6201e92b833d2a9e85ed20afac5546035333db9 100644 --- a/drivers/dma/fgdma/fgdma_os.c +++ b/drivers/dma/fgdma/fgdma_os.c @@ -83,7 +83,7 @@ static void FGdmaOsSetupInterrupt(FGdma *const ctrl) FGdmaConfig *config = &ctrl->config; uintptr base_addr = config->base_addr; u32 cpu_id = 0; - int irq_id = (int)config->irq_num; + u32 irq_id = config->irq_num[0]; GetCpuId(&cpu_id); FGDMA_INFO("cpu_id is cpu_id %d", cpu_id); diff --git a/drivers/drivers.mk b/drivers/drivers.mk index d5080f21979dafc78b1cfd53f34fcd3eed02f539..34cfe1af19c8920283f1bc536a88ac93dfbf2722 100644 --- a/drivers/drivers.mk +++ b/drivers/drivers.mk @@ -79,3 +79,9 @@ ifdef CONFIG_FREERTOS_USE_CAN SRC_DIR += $(OS_DRIVER_CUR_DIR)/can INC_DIR += $(OS_DRIVER_CUR_DIR)/can endif + +ifdef CONFIG_FREERTOS_USE_MEDIA + SRC_DIR += $(OS_DRIVER_CUR_DIR)/media + INC_DIR += $(OS_DRIVER_CUR_DIR)/media +endif + diff --git a/drivers/eth/xmac/fxmac_os.c b/drivers/eth/xmac/fxmac_os.c index 7e9ca1e13d46db11f75bd76506f9bc537b995afb..5b91252b01b41ddb43d82788c5908e6425385060 100644 --- a/drivers/eth/xmac/fxmac_os.c +++ b/drivers/eth/xmac/fxmac_os.c @@ -35,7 +35,7 @@ #ifdef __aarch64__ #include "faarch64.h" #else - #include "fcp15.h" + #include "faarch32.h" #endif #include "FreeRTOS.h" @@ -263,11 +263,11 @@ FError FXmacSgsend(FXmacOs *instance_p, struct pbuf *p) if (instance_p->config & FXMAC_OS_CONFIG_JUMBO) { - max_fr_size = FXMAC_MAX_FRAME_SIZE_JUMBO - 18; + max_fr_size = FXMAC_MAX_FRAME_SIZE_JUMBO; } else { - max_fr_size = FXMAC_MAX_FRAME_SIZE - 18; + max_fr_size = FXMAC_MAX_FRAME_SIZE; } if (q->len > max_fr_size) @@ -406,7 +406,16 @@ void SetupRxBds(FXmacOs *instance_p, FXmacBdRing *rxring) instance_p->buffer.rx_pbufs_storage[bdindex] = (uintptr)p; } } - +void FXmacRecvSemaphoreHandler(void *arg) +{ + struct LwipPort *xmac_netif_p; + FXmacOs *instance_p; + + instance_p = (FXmacOs *)arg; + xmac_netif_p = (struct LwipPort *)instance_p->stack_pointer; + sys_sem_signal(&(xmac_netif_p->sem_rx_data_available)); + +} void FXmacRecvHandler(void *arg) { struct pbuf *p; @@ -449,7 +458,7 @@ void FXmacRecvHandler(void *arg) */ if (instance_p->config & FXMAC_OS_CONFIG_JUMBO) { - rx_bytes = FXMAC_GET_RX_FRAME_SIZE(&(instance_p->instance), curbdptr); + rx_bytes = FXMAC_GET_RX_FRAME_SIZE(curbdptr); } else { @@ -480,14 +489,16 @@ void FXmacRecvHandler(void *arg) /* free up the BD's */ FXmacBdRingFree(rxring, bd_processed, rxbdset); SetupRxBds(instance_p, rxring); - - sys_sem_signal(&xmac_netif_p->sem_rx_data_available); - } return; } +void FXmacOsRecvHandler(FXmacOs *instance_p) +{ + FXmacRecvHandler(instance_p); +} + void CleanDmaTxdescs(FXmacOs *instance_p) { FXmacBd bdtemplate; @@ -1093,7 +1104,7 @@ static void FXmacSetupIsr(FXmacOs *instance_p) InterruptSetTargetCpus(instance_p->instance.config.queue_irq_num[0], cpu_id); /* Setup callbacks */ FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_DMASEND, FXmacSendHandler, instance_p); - FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_DMARECV, FXmacRecvHandler, instance_p); + FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_DMARECV, FXmacRecvSemaphoreHandler, instance_p); FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_ERROR, FXmacErrorHandler, instance_p); FXmacSetHandler(&instance_p->instance, FXMAC_HANDLER_LINKCHANGE, FXmacLinkChange, instance_p); InterruptSetPriority(instance_p->instance.config.queue_irq_num[0], XMAC_OS_IRQ_PRIORITY_VALUE); @@ -1212,6 +1223,11 @@ FError FXmacOsInit(FXmacOs *instance_p) FXmacSetOptions(xmac_p, FXMAC_JUMBO_ENABLE_OPTION, 0); } + if (instance_p->config & FXMAC_OS_CONFIG_RX_POLL_RECV) + { + xmac_p->mask &= (~FXMAC_IXR_RXCOMPL_MASK); + } + if (instance_p->config & FXMAC_OS_CONFIG_MULTICAST_ADDRESS_FILITER) { FXmacSetOptions(xmac_p, FXMAC_MULTICAST_OPTION, 0); diff --git a/drivers/eth/xmac/fxmac_os.h b/drivers/eth/xmac/fxmac_os.h index 4b3f26b1b88122b40c4e5e95090bf456ce366cfd..785671257909e15ba692ba5b2a047aded43e6b2a 100644 --- a/drivers/eth/xmac/fxmac_os.h +++ b/drivers/eth/xmac/fxmac_os.h @@ -53,7 +53,7 @@ extern "C" { #define FXMAC_OS_CONFIG_MULTICAST_ADDRESS_FILITER BIT(1) /* Allow multicast address filtering */ #define FXMAC_OS_CONFIG_COPY_ALL_FRAMES BIT(2) /* enable copy all frames */ #define FXMAC_OS_CONFIG_CLOSE_FCS_CHECK BIT(3) /* close fcs check */ - +#define FXMAC_OS_CONFIG_RX_POLL_RECV BIT(4) /* select poll mode */ /* Phy */ #define FXMAC_PHY_SPEED_10M 10 #define FXMAC_PHY_SPEED_100M 100 @@ -133,6 +133,7 @@ void *FXmacOsRx(FXmacOs *instance_p); FError FXmacOsTx(FXmacOs *instance_p, void *tx_buf); void FXmacOsStop(FXmacOs *instance_p); void FXmacOsStart(FXmacOs *instance_p); +void FXmacOsRecvHandler(FXmacOs *instance_p); enum lwip_port_link_status FXmacPhyReconnect(struct LwipPort *xmac_netif_p); #ifdef __cplusplus diff --git a/drivers/media/fmedia_os.c b/drivers/media/fmedia_os.c new file mode 100644 index 0000000000000000000000000000000000000000..e09f5b7e71997bc0ff856727cc5366776e46f701 --- /dev/null +++ b/drivers/media/fmedia_os.c @@ -0,0 +1,130 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: fmedia_os.c + * Date: 2022-09-15 14:20:19 + * LastEditTime: 2022-09-21 16:59:51 + * Description:  This file is for providing the media driver + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + */ +#include +#include +#include +#include +#include "ftypes.h" +#include "fdebug.h" +#include "fparameters_comm.h" +#include "fmedia_os.h" +#include "fdcdp.h" +#include "fdp_hw.h" +#include "fdp.h" +#include "fdc_common_hw.h" + +/***************** Macros (Inline Functions) Definitions *********************/ + +#define FMEDIA_DEBUG_TAG "FFreeRTOSMEDIA" +#define FMEDIA_ERROR(format, ...) FT_DEBUG_PRINT_E(FMEDIA_DEBUG_TAG, format, ##__VA_ARGS__) +#define FMEDIA_INFO(format, ...) FT_DEBUG_PRINT_I(FMEDIA_DEBUG_TAG, format, ##__VA_ARGS__) +#define FMEDIA_DEBUG(format, ...) FT_DEBUG_PRINT_D(FMEDIA_DEBUG_TAG, format, ##__VA_ARGS__) + +static FFreeRTOSMedia os_media; +/************************** Function Prototypes ******************************/ + +/** + * @name: FFreeRTOSMediaHwInit + * @msg: init the media,dc and dp + * @param {u32} channel is the dc channel + * @param {u32} width is the width + * @param {u32} height is the height + * @param {u32} multi_mode is multi display mode,0:clone,1:hor,2:ver + * @param {u32} color_depth is the color depth + * @param {u32} refresh_rate is the refresh rate of screen + * @return err code information, 0 indicates success,others indicates failed + */ +FFreeRTOSMedia *FFreeRTOSMediaHwInit(u32 channel, u32 width, u32 height, u32 multi_mode,u32 color_depth,u32 refresh_rate) +{ + FError ret = FT_SUCCESS; + FFreeRTOSMedia *instance_p = &os_media; + u32 mode_id = FDcResToModeNum(width, height); + + FDcDpCfgInitialize(&instance_p->dcdp_ctrl); + ret = FDcDpGetDefaultConfig(&instance_p->dcdp_ctrl); + if (ret != FMEDIA_DP_SUCCESS) + { + FMEDIA_ERROR("Get default failed"); + goto err_exit; + } + ret = FDcDpSetBasicParam(&instance_p->dcdp_ctrl,mode_id,color_depth,refresh_rate); + if (ret != FMEDIA_DP_SUCCESS) + { + FMEDIA_ERROR("Set basic parameters failed"); + goto err_exit; + } + ret = FDcDpInitial(&instance_p->dcdp_ctrl, channel, mode_id, multi_mode); + if (ret != FMEDIA_DP_SUCCESS) + { + FMEDIA_ERROR("DcDp initial failed"); + goto err_exit; + } + +err_exit: + return (FT_SUCCESS == ret) ? instance_p : NULL; /* exit with NULL if failed */ +} + + +/** + * @name: FFreeRTOSMediaHpdReInit + * @msg: hpd init the media,dc and dp + * @param {u32} channel is the dc channel + * @param {u32} width is the width + * @param {u32} height is the height + * @param {u32} multi_mode is multi display mode,0:clone,1:hor,2:ver + * @param {u32} color_depth is the color depth + * @param {u32} refresh_rate is the refresh rate of screen + * @return err code information, 0 indicates success,others indicates failed + */ +FError FFreeRTOSMediaHpdReInit(u32 channel,u32 width, u32 height,u32 multi_mode,u32 color_depth,u32 refresh_rate) +{ + FError ret = FT_SUCCESS; + FFreeRTOSMedia *instance_p = &os_media; + u32 mode_id = FDcResToModeNum(width, height); + + if (FDpChannelRegRead(instance_p->dcdp_ctrl.dp_instance_p[channel].config.dp_channe_base_addr, FDPTX_LINK_BW_SET) != 0) + { + FMEDIA_DEBUG("DP have been setted, do not need reconnected\r\n"); + instance_p->dcdp_ctrl.connect_flg[channel] = 0; + } + else + { + FMEDIA_DEBUG(" Reconnected\r\n"); + FDcDpCfgInitialize(&instance_p->dcdp_ctrl); + ret = FDcDpGetDefaultConfig(&instance_p->dcdp_ctrl); + if (ret != FMEDIA_DP_SUCCESS) + { + FMEDIA_ERROR("Get default failed"); + } + ret = FDcDpSetBasicParam(&instance_p->dcdp_ctrl, mode_id,color_depth,refresh_rate); + if (ret != FMEDIA_DP_SUCCESS) + { + FMEDIA_ERROR("Set basic parameters failed"); + } + ret = FDcDpInitial(&instance_p->dcdp_ctrl, channel, mode_id,multi_mode); + instance_p->dcdp_ctrl.connect_flg[channel] = 0; + } + + return ret; +} diff --git a/drivers/media/fmedia_os.h b/drivers/media/fmedia_os.h new file mode 100644 index 0000000000000000000000000000000000000000..046deec54e870b19958c0b6f09ae3b6520c4bdeb --- /dev/null +++ b/drivers/media/fmedia_os.h @@ -0,0 +1,60 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: fmedia_os.h + * Date: 2022-08-24 16:42:19 + * LastEditTime: 2022-08-26 17:59:12 + * Description:  This file is for defining the media config and function + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + */ + +#ifndef FMEDIA_OS_H +#define FMEDIA_OS_H + +#include +#include +#include "fdcdp.h" +#include "ftypes.h" +#include "fparameters.h" +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/* freertos media interrupt priority */ +#define FREERTOS_MEDIA_IRQ_PRIORITY IRQ_PRIORITY_VALUE_14 + +typedef struct +{ + FDcDp dcdp_ctrl; + EventGroupHandle_t media_event; +} FFreeRTOSMedia; + +/*init the media and return the meidia instance*/ +FFreeRTOSMedia *FFreeRTOSMediaHwInit(u32 channel, u32 width, u32 height, u32 multi_mode,u32 color_depth,u32 refresh_rate); + +/*hpd event to check and reinit the media*/ +FError FFreeRTOSMediaHpdReInit(u32 channel, u32 width, u32 height, u32 multi_mode,u32 color_depth,u32 refresh_rate); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/example/freertos_feature/eventgroup/configs/d2000_aarch32_eg_configs b/example/freertos_feature/eventgroup/configs/d2000_aarch32_eg_configs index 7e29042ff8b031df88bd83376c11a1765c5e9fd2..e3dff1de8b4434beedce1dfa575b001d0d91329f 100644 --- a/example/freertos_feature/eventgroup/configs/d2000_aarch32_eg_configs +++ b/example/freertos_feature/eventgroup/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/configs/d2000_aarch64_eg_configs b/example/freertos_feature/eventgroup/configs/d2000_aarch64_eg_configs index e828c1d2319c9093f169bfe945b60bd5209bbfd9..7a3a457fb5a28f294781423cfb4c6b285c8274c4 100644 --- a/example/freertos_feature/eventgroup/configs/d2000_aarch64_eg_configs +++ b/example/freertos_feature/eventgroup/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/eventgroup/configs/e2000d_aarch32_eg_configs index ae0d73ad8283636539db9d3fed3450fc19a16658..08c4aa6496dbb8f66715d217838e026b0f8f961b 100644 --- a/example/freertos_feature/eventgroup/configs/e2000d_aarch32_eg_configs +++ b/example/freertos_feature/eventgroup/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/eventgroup/configs/e2000d_aarch64_eg_configs index 1efdb2f82aa464ff232212a5addcaceed0c61d44..d0b44c3ec8c0ef8b1ca7ddae7b9e39397c074881 100644 --- a/example/freertos_feature/eventgroup/configs/e2000d_aarch64_eg_configs +++ b/example/freertos_feature/eventgroup/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/eventgroup/configs/e2000q_aarch32_eg_configs index b83ee82194669f7843cf8c3ef3ddc790dbbbc471..fde5d946f796bf5b5528876ab5d6ad2853e83cac 100644 --- a/example/freertos_feature/eventgroup/configs/e2000q_aarch32_eg_configs +++ b/example/freertos_feature/eventgroup/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/eventgroup/configs/e2000q_aarch64_eg_configs index 627f536cbef9606a6fbf8e6eae27c8764f3f8329..5a103ef8357ccc921bde8ac820d30bb45f2aa2ea 100644 --- a/example/freertos_feature/eventgroup/configs/e2000q_aarch64_eg_configs +++ b/example/freertos_feature/eventgroup/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/eventgroup/configs/ft2004_aarch32_eg_configs index 05b202751817c7bd10ec6a993247bbf884cf1db4..431b56560023b360658e2909b2f12381c1f045d3 100644 --- a/example/freertos_feature/eventgroup/configs/ft2004_aarch32_eg_configs +++ b/example/freertos_feature/eventgroup/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/eventgroup/configs/ft2004_aarch64_eg_configs index 6c5b8bcd5728ee683e9d73b0d61dbf6470da4b99..a6f755fc4985e16479c2810e9ec4f24a038fee5a 100644 --- a/example/freertos_feature/eventgroup/configs/ft2004_aarch64_eg_configs +++ b/example/freertos_feature/eventgroup/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/sdkconfig b/example/freertos_feature/eventgroup/sdkconfig index 627f536cbef9606a6fbf8e6eae27c8764f3f8329..5a103ef8357ccc921bde8ac820d30bb45f2aa2ea 100644 --- a/example/freertos_feature/eventgroup/sdkconfig +++ b/example/freertos_feature/eventgroup/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/eventgroup/sdkconfig.h b/example/freertos_feature/eventgroup/sdkconfig.h index 1ef8877b024e062b37a12922af3be3b4e800ede0..0177a1cfdf0a4b03303447ffe378dba834824d85 100644 --- a/example/freertos_feature/eventgroup/sdkconfig.h +++ b/example/freertos_feature/eventgroup/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -/* CONFIG_USE_SYS_TICK is not set */ /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -71,18 +70,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -180,6 +187,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -202,6 +214,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/freertos_feature/interrupt/configs/d2000_aarch32_eg_configs b/example/freertos_feature/interrupt/configs/d2000_aarch32_eg_configs index 7e29042ff8b031df88bd83376c11a1765c5e9fd2..e3dff1de8b4434beedce1dfa575b001d0d91329f 100644 --- a/example/freertos_feature/interrupt/configs/d2000_aarch32_eg_configs +++ b/example/freertos_feature/interrupt/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/configs/d2000_aarch64_eg_configs b/example/freertos_feature/interrupt/configs/d2000_aarch64_eg_configs index e828c1d2319c9093f169bfe945b60bd5209bbfd9..7a3a457fb5a28f294781423cfb4c6b285c8274c4 100644 --- a/example/freertos_feature/interrupt/configs/d2000_aarch64_eg_configs +++ b/example/freertos_feature/interrupt/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/interrupt/configs/e2000d_aarch32_eg_configs index 43747998983b5576c18e71acd5b45a3d339c1cf1..daa4c527709aa3b698725409595bcc010e3b97e2 100644 --- a/example/freertos_feature/interrupt/configs/e2000d_aarch32_eg_configs +++ b/example/freertos_feature/interrupt/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/interrupt/configs/e2000d_aarch64_eg_configs index 14936cd4d82f26b6ddc704bb7e68743baf11c9af..867f31e04612d6edce0c47ee9cf55f8f84694a96 100644 --- a/example/freertos_feature/interrupt/configs/e2000d_aarch64_eg_configs +++ b/example/freertos_feature/interrupt/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/interrupt/configs/e2000q_aarch32_eg_configs index 10e6ae4258014ca420d4401b6077f4943a596d6c..a6e2c591f1efea405503ef98141d1a39a89b95be 100644 --- a/example/freertos_feature/interrupt/configs/e2000q_aarch32_eg_configs +++ b/example/freertos_feature/interrupt/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/interrupt/configs/e2000q_aarch64_eg_configs index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/interrupt/configs/e2000q_aarch64_eg_configs +++ b/example/freertos_feature/interrupt/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/interrupt/configs/ft2004_aarch32_eg_configs index 05b202751817c7bd10ec6a993247bbf884cf1db4..431b56560023b360658e2909b2f12381c1f045d3 100644 --- a/example/freertos_feature/interrupt/configs/ft2004_aarch32_eg_configs +++ b/example/freertos_feature/interrupt/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/interrupt/configs/ft2004_aarch64_eg_configs index 6c5b8bcd5728ee683e9d73b0d61dbf6470da4b99..a6f755fc4985e16479c2810e9ec4f24a038fee5a 100644 --- a/example/freertos_feature/interrupt/configs/ft2004_aarch64_eg_configs +++ b/example/freertos_feature/interrupt/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/sdkconfig b/example/freertos_feature/interrupt/sdkconfig index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/interrupt/sdkconfig +++ b/example/freertos_feature/interrupt/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/interrupt/sdkconfig.h b/example/freertos_feature/interrupt/sdkconfig.h index 1179d14a4a68b36202bd563aba16cf680bb70c6b..80b336e9ab75b27f3d1cd4e345236e9079a56e09 100644 --- a/example/freertos_feature/interrupt/sdkconfig.h +++ b/example/freertos_feature/interrupt/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -71,18 +70,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -180,6 +187,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -202,6 +214,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/freertos_feature/queue/configs/d2000_aarch32_eg_configs b/example/freertos_feature/queue/configs/d2000_aarch32_eg_configs index 7e29042ff8b031df88bd83376c11a1765c5e9fd2..e3dff1de8b4434beedce1dfa575b001d0d91329f 100644 --- a/example/freertos_feature/queue/configs/d2000_aarch32_eg_configs +++ b/example/freertos_feature/queue/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/configs/d2000_aarch64_eg_configs b/example/freertos_feature/queue/configs/d2000_aarch64_eg_configs index e828c1d2319c9093f169bfe945b60bd5209bbfd9..7a3a457fb5a28f294781423cfb4c6b285c8274c4 100644 --- a/example/freertos_feature/queue/configs/d2000_aarch64_eg_configs +++ b/example/freertos_feature/queue/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/queue/configs/e2000d_aarch32_eg_configs index ae0d73ad8283636539db9d3fed3450fc19a16658..08c4aa6496dbb8f66715d217838e026b0f8f961b 100644 --- a/example/freertos_feature/queue/configs/e2000d_aarch32_eg_configs +++ b/example/freertos_feature/queue/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/queue/configs/e2000d_aarch64_eg_configs index 1efdb2f82aa464ff232212a5addcaceed0c61d44..d0b44c3ec8c0ef8b1ca7ddae7b9e39397c074881 100644 --- a/example/freertos_feature/queue/configs/e2000d_aarch64_eg_configs +++ b/example/freertos_feature/queue/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/queue/configs/e2000q_aarch32_eg_configs index 10e6ae4258014ca420d4401b6077f4943a596d6c..a6e2c591f1efea405503ef98141d1a39a89b95be 100644 --- a/example/freertos_feature/queue/configs/e2000q_aarch32_eg_configs +++ b/example/freertos_feature/queue/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/queue/configs/e2000q_aarch64_eg_configs index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/queue/configs/e2000q_aarch64_eg_configs +++ b/example/freertos_feature/queue/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/queue/configs/ft2004_aarch32_eg_configs index 05b202751817c7bd10ec6a993247bbf884cf1db4..431b56560023b360658e2909b2f12381c1f045d3 100644 --- a/example/freertos_feature/queue/configs/ft2004_aarch32_eg_configs +++ b/example/freertos_feature/queue/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/queue/configs/ft2004_aarch64_eg_configs index 6c5b8bcd5728ee683e9d73b0d61dbf6470da4b99..a6f755fc4985e16479c2810e9ec4f24a038fee5a 100644 --- a/example/freertos_feature/queue/configs/ft2004_aarch64_eg_configs +++ b/example/freertos_feature/queue/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/sdkconfig b/example/freertos_feature/queue/sdkconfig index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/queue/sdkconfig +++ b/example/freertos_feature/queue/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/queue/sdkconfig.h b/example/freertos_feature/queue/sdkconfig.h index 1179d14a4a68b36202bd563aba16cf680bb70c6b..80b336e9ab75b27f3d1cd4e345236e9079a56e09 100644 --- a/example/freertos_feature/queue/sdkconfig.h +++ b/example/freertos_feature/queue/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -71,18 +70,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -180,6 +187,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -202,6 +214,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/freertos_feature/resource/configs/d2000_aarch32_eg_configs b/example/freertos_feature/resource/configs/d2000_aarch32_eg_configs index 7e29042ff8b031df88bd83376c11a1765c5e9fd2..e3dff1de8b4434beedce1dfa575b001d0d91329f 100644 --- a/example/freertos_feature/resource/configs/d2000_aarch32_eg_configs +++ b/example/freertos_feature/resource/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/configs/d2000_aarch64_eg_configs b/example/freertos_feature/resource/configs/d2000_aarch64_eg_configs index e828c1d2319c9093f169bfe945b60bd5209bbfd9..7a3a457fb5a28f294781423cfb4c6b285c8274c4 100644 --- a/example/freertos_feature/resource/configs/d2000_aarch64_eg_configs +++ b/example/freertos_feature/resource/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/resource/configs/e2000d_aarch32_eg_configs index ae0d73ad8283636539db9d3fed3450fc19a16658..08c4aa6496dbb8f66715d217838e026b0f8f961b 100644 --- a/example/freertos_feature/resource/configs/e2000d_aarch32_eg_configs +++ b/example/freertos_feature/resource/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/resource/configs/e2000d_aarch64_eg_configs index 1efdb2f82aa464ff232212a5addcaceed0c61d44..d0b44c3ec8c0ef8b1ca7ddae7b9e39397c074881 100644 --- a/example/freertos_feature/resource/configs/e2000d_aarch64_eg_configs +++ b/example/freertos_feature/resource/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/resource/configs/e2000q_aarch32_eg_configs index 10e6ae4258014ca420d4401b6077f4943a596d6c..a6e2c591f1efea405503ef98141d1a39a89b95be 100644 --- a/example/freertos_feature/resource/configs/e2000q_aarch32_eg_configs +++ b/example/freertos_feature/resource/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/resource/configs/e2000q_aarch64_eg_configs index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/resource/configs/e2000q_aarch64_eg_configs +++ b/example/freertos_feature/resource/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/resource/configs/ft2004_aarch32_eg_configs index 05b202751817c7bd10ec6a993247bbf884cf1db4..431b56560023b360658e2909b2f12381c1f045d3 100644 --- a/example/freertos_feature/resource/configs/ft2004_aarch32_eg_configs +++ b/example/freertos_feature/resource/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/resource/configs/ft2004_aarch64_eg_configs index 6c5b8bcd5728ee683e9d73b0d61dbf6470da4b99..a6f755fc4985e16479c2810e9ec4f24a038fee5a 100644 --- a/example/freertos_feature/resource/configs/ft2004_aarch64_eg_configs +++ b/example/freertos_feature/resource/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/sdkconfig b/example/freertos_feature/resource/sdkconfig index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/resource/sdkconfig +++ b/example/freertos_feature/resource/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/resource/sdkconfig.h b/example/freertos_feature/resource/sdkconfig.h index 1179d14a4a68b36202bd563aba16cf680bb70c6b..80b336e9ab75b27f3d1cd4e345236e9079a56e09 100644 --- a/example/freertos_feature/resource/sdkconfig.h +++ b/example/freertos_feature/resource/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -71,18 +70,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -180,6 +187,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -202,6 +214,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/freertos_feature/software_timer/configs/d2000_aarch32_eg_configs b/example/freertos_feature/software_timer/configs/d2000_aarch32_eg_configs index 7e29042ff8b031df88bd83376c11a1765c5e9fd2..e3dff1de8b4434beedce1dfa575b001d0d91329f 100644 --- a/example/freertos_feature/software_timer/configs/d2000_aarch32_eg_configs +++ b/example/freertos_feature/software_timer/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/configs/d2000_aarch64_eg_configs b/example/freertos_feature/software_timer/configs/d2000_aarch64_eg_configs index e828c1d2319c9093f169bfe945b60bd5209bbfd9..7a3a457fb5a28f294781423cfb4c6b285c8274c4 100644 --- a/example/freertos_feature/software_timer/configs/d2000_aarch64_eg_configs +++ b/example/freertos_feature/software_timer/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/software_timer/configs/e2000d_aarch32_eg_configs index ae0d73ad8283636539db9d3fed3450fc19a16658..08c4aa6496dbb8f66715d217838e026b0f8f961b 100644 --- a/example/freertos_feature/software_timer/configs/e2000d_aarch32_eg_configs +++ b/example/freertos_feature/software_timer/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/software_timer/configs/e2000d_aarch64_eg_configs index 1efdb2f82aa464ff232212a5addcaceed0c61d44..d0b44c3ec8c0ef8b1ca7ddae7b9e39397c074881 100644 --- a/example/freertos_feature/software_timer/configs/e2000d_aarch64_eg_configs +++ b/example/freertos_feature/software_timer/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/software_timer/configs/e2000q_aarch32_eg_configs index 10e6ae4258014ca420d4401b6077f4943a596d6c..a6e2c591f1efea405503ef98141d1a39a89b95be 100644 --- a/example/freertos_feature/software_timer/configs/e2000q_aarch32_eg_configs +++ b/example/freertos_feature/software_timer/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/software_timer/configs/e2000q_aarch64_eg_configs index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/software_timer/configs/e2000q_aarch64_eg_configs +++ b/example/freertos_feature/software_timer/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/software_timer/configs/ft2004_aarch32_eg_configs index 05b202751817c7bd10ec6a993247bbf884cf1db4..431b56560023b360658e2909b2f12381c1f045d3 100644 --- a/example/freertos_feature/software_timer/configs/ft2004_aarch32_eg_configs +++ b/example/freertos_feature/software_timer/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/software_timer/configs/ft2004_aarch64_eg_configs index 6c5b8bcd5728ee683e9d73b0d61dbf6470da4b99..a6f755fc4985e16479c2810e9ec4f24a038fee5a 100644 --- a/example/freertos_feature/software_timer/configs/ft2004_aarch64_eg_configs +++ b/example/freertos_feature/software_timer/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/sdkconfig b/example/freertos_feature/software_timer/sdkconfig index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/software_timer/sdkconfig +++ b/example/freertos_feature/software_timer/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/software_timer/sdkconfig.h b/example/freertos_feature/software_timer/sdkconfig.h index 1179d14a4a68b36202bd563aba16cf680bb70c6b..80b336e9ab75b27f3d1cd4e345236e9079a56e09 100644 --- a/example/freertos_feature/software_timer/sdkconfig.h +++ b/example/freertos_feature/software_timer/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -71,18 +70,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -180,6 +187,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -202,6 +214,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/freertos_feature/task/configs/d2000_aarch32_eg_configs b/example/freertos_feature/task/configs/d2000_aarch32_eg_configs index 7e29042ff8b031df88bd83376c11a1765c5e9fd2..58f2f171571e2d4bb9f44de52bf940e6507c654f 100644 --- a/example/freertos_feature/task/configs/d2000_aarch32_eg_configs +++ b/example/freertos_feature/task/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -249,7 +266,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/configs/d2000_aarch64_eg_configs b/example/freertos_feature/task/configs/d2000_aarch64_eg_configs index e828c1d2319c9093f169bfe945b60bd5209bbfd9..964f0051021b2818f91863c6aa35fab3e9ace74e 100644 --- a/example/freertos_feature/task/configs/d2000_aarch64_eg_configs +++ b/example/freertos_feature/task/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -245,7 +262,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/task/configs/e2000d_aarch32_eg_configs index ae0d73ad8283636539db9d3fed3450fc19a16658..dc58a78e1d123b81cd73cb930fb94c25098a01d6 100644 --- a/example/freertos_feature/task/configs/e2000d_aarch32_eg_configs +++ b/example/freertos_feature/task/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -249,7 +266,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/task/configs/e2000d_aarch64_eg_configs index 1efdb2f82aa464ff232212a5addcaceed0c61d44..f0a5fdcd22eed21e4064d44f5999a0d2f670d3a5 100644 --- a/example/freertos_feature/task/configs/e2000d_aarch64_eg_configs +++ b/example/freertos_feature/task/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -245,7 +262,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/task/configs/e2000q_aarch32_eg_configs index 70129a8ac9f5a2e2d020809ddadf3c17cc3a2971..b5e68af2a23805985a59f2b71807a95325df7c2d 100644 --- a/example/freertos_feature/task/configs/e2000q_aarch32_eg_configs +++ b/example/freertos_feature/task/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -249,7 +266,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/task/configs/e2000q_aarch64_eg_configs index b6038be7e58ff3bfcd984c3cbded969d9a1a1254..580323de8aa089e800c64beaad6430369e3d50e4 100644 --- a/example/freertos_feature/task/configs/e2000q_aarch64_eg_configs +++ b/example/freertos_feature/task/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -245,7 +262,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/task/configs/ft2004_aarch32_eg_configs index 05b202751817c7bd10ec6a993247bbf884cf1db4..d9c330144ca55db27d96c1fe9ed1ba8631ac5ead 100644 --- a/example/freertos_feature/task/configs/ft2004_aarch32_eg_configs +++ b/example/freertos_feature/task/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -249,7 +266,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/task/configs/ft2004_aarch64_eg_configs index 6c5b8bcd5728ee683e9d73b0d61dbf6470da4b99..26b9548da240a44a6214c77d937a8c58c7e48466 100644 --- a/example/freertos_feature/task/configs/ft2004_aarch64_eg_configs +++ b/example/freertos_feature/task/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -245,7 +262,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/sdkconfig b/example/freertos_feature/task/sdkconfig index b6038be7e58ff3bfcd984c3cbded969d9a1a1254..580323de8aa089e800c64beaad6430369e3d50e4 100644 --- a/example/freertos_feature/task/sdkconfig +++ b/example/freertos_feature/task/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # @@ -245,7 +262,7 @@ CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 -CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=5 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 diff --git a/example/freertos_feature/task/sdkconfig.h b/example/freertos_feature/task/sdkconfig.h index 23d2c02ee8f57f78319b963022a2d7c1e28b5d4e..ac815420e52691ec69113589f1d1459ed58e7deb 100644 --- a/example/freertos_feature/task/sdkconfig.h +++ b/example/freertos_feature/task/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -/* CONFIG_USE_SYS_TICK is not set */ /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -71,18 +70,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -180,6 +187,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -202,6 +214,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ @@ -214,7 +227,7 @@ #define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 #define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024 #define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32 -#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 +#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 5 #define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 #define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 #define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 diff --git a/example/freertos_feature/task_notify/configs/d2000_aarch32_eg_configs b/example/freertos_feature/task_notify/configs/d2000_aarch32_eg_configs index 7e29042ff8b031df88bd83376c11a1765c5e9fd2..e3dff1de8b4434beedce1dfa575b001d0d91329f 100644 --- a/example/freertos_feature/task_notify/configs/d2000_aarch32_eg_configs +++ b/example/freertos_feature/task_notify/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/configs/d2000_aarch64_eg_configs b/example/freertos_feature/task_notify/configs/d2000_aarch64_eg_configs index e828c1d2319c9093f169bfe945b60bd5209bbfd9..7a3a457fb5a28f294781423cfb4c6b285c8274c4 100644 --- a/example/freertos_feature/task_notify/configs/d2000_aarch64_eg_configs +++ b/example/freertos_feature/task_notify/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/configs/e2000d_aarch32_eg_configs b/example/freertos_feature/task_notify/configs/e2000d_aarch32_eg_configs index ae0d73ad8283636539db9d3fed3450fc19a16658..08c4aa6496dbb8f66715d217838e026b0f8f961b 100644 --- a/example/freertos_feature/task_notify/configs/e2000d_aarch32_eg_configs +++ b/example/freertos_feature/task_notify/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/configs/e2000d_aarch64_eg_configs b/example/freertos_feature/task_notify/configs/e2000d_aarch64_eg_configs index 1efdb2f82aa464ff232212a5addcaceed0c61d44..d0b44c3ec8c0ef8b1ca7ddae7b9e39397c074881 100644 --- a/example/freertos_feature/task_notify/configs/e2000d_aarch64_eg_configs +++ b/example/freertos_feature/task_notify/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/configs/e2000q_aarch32_eg_configs b/example/freertos_feature/task_notify/configs/e2000q_aarch32_eg_configs index b83ee82194669f7843cf8c3ef3ddc790dbbbc471..fde5d946f796bf5b5528876ab5d6ad2853e83cac 100644 --- a/example/freertos_feature/task_notify/configs/e2000q_aarch32_eg_configs +++ b/example/freertos_feature/task_notify/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/configs/e2000q_aarch64_eg_configs b/example/freertos_feature/task_notify/configs/e2000q_aarch64_eg_configs index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/task_notify/configs/e2000q_aarch64_eg_configs +++ b/example/freertos_feature/task_notify/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/configs/ft2004_aarch32_eg_configs b/example/freertos_feature/task_notify/configs/ft2004_aarch32_eg_configs index 05b202751817c7bd10ec6a993247bbf884cf1db4..431b56560023b360658e2909b2f12381c1f045d3 100644 --- a/example/freertos_feature/task_notify/configs/ft2004_aarch32_eg_configs +++ b/example/freertos_feature/task_notify/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/configs/ft2004_aarch64_eg_configs b/example/freertos_feature/task_notify/configs/ft2004_aarch64_eg_configs index 6c5b8bcd5728ee683e9d73b0d61dbf6470da4b99..a6f755fc4985e16479c2810e9ec4f24a038fee5a 100644 --- a/example/freertos_feature/task_notify/configs/ft2004_aarch64_eg_configs +++ b/example/freertos_feature/task_notify/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/sdkconfig b/example/freertos_feature/task_notify/sdkconfig index 8ea8169ba217813d5b3596ada75a387263413ad6..28bf8eec3b54ef823a5f30e7ec16bb04c83aa3f8 100644 --- a/example/freertos_feature/task_notify/sdkconfig +++ b/example/freertos_feature/task_notify/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/freertos_feature/task_notify/sdkconfig.h b/example/freertos_feature/task_notify/sdkconfig.h index 1179d14a4a68b36202bd563aba16cf680bb70c6b..80b336e9ab75b27f3d1cd4e345236e9079a56e09 100644 --- a/example/freertos_feature/task_notify/sdkconfig.h +++ b/example/freertos_feature/task_notify/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -71,18 +70,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -180,6 +187,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -202,6 +214,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/network/lwip_startup/README.md b/example/network/lwip_startup/README.md index 934b0d4ba85159c3117fee53fb103161e86ac656..d33a1f2e12a5eb79b2d61c1b0f15e20a20d72ce2 100644 --- a/example/network/lwip_startup/README.md +++ b/example/network/lwip_startup/README.md @@ -142,44 +142,36 @@ bootelf -p 0x90100000 - 以E2000D/Q demo 板为例,开发者输入以下命令则可以初始化网卡: ``` -lwip probe 0 1 1 192.168.4.10 192.168.4.1 255.255.255.0 +lwip probe 0 0 1 0 192.168.4.10 192.168.4.1 255.255.255.0 ``` -- 命令定义为:"lwip probe " -- 为mac控制器 -- 为gmii 控制器类型,0 is rgmii ,1 is sgmii -- 1为使能dhcp 功能,0为关闭dhcp 功能 -- 为ipv4 地址,示例为: 192.168.4.10 -- 为网关 ,示例为: 192.168.4.1 -- 为子网掩码,示例为255.255.255.0 +命令定义为: +``` +lwip probe +``` +- driver id 为驱动类型 , 0为xmac ,1为gmac +- device id 为mac控制器 +- interface id 为gmii 控制器类型,0 is rgmii ,1 is sgmii +- dhcp_en 1为使能dhcp 功能,0为关闭dhcp 功能 +- ipaddr 为ipv4 地址,示例为: 192.168.4.10 +- gateway 为网关 ,示例为: 192.168.4. +- netmask 为子网掩码,示例为255.255.255.0 - 效果图如下 ![](./pic/lwip_probe.png) +![](./pic/ping.png) +![](./pic/ping_ipv6.png) - -### 2.4.3 ipv4 实验效果 - -- 在ipv4 工作模式下,可以使用ping 的方式测试当前程序是否正常工作,如下图所示: - -![](./pic/ipv4_test.png) - -### 2.4.4 ipv6 实验效果 - -- 在ipv6 工作模式下,可以使用ping 的方式测试当前程序是否正常工作,如下图所示: - -![](./pic/ipv6_test.png) - - -### 2.4.4 dhcp 实验效果 - -- 打开dhcp功能之后,如下图所示: - +- 使能dhcp模式后,输入以下指令,开启dhcp网卡测试 +``` +lwip probe 0 0 1 1 +``` ![](./pic/dhcp_test.png) +![](./pic/dhcp_ping.png) -#### 2.4.2 提供 ## 3. 如何解决问题 diff --git a/example/network/lwip_startup/configs/d2000_aarch32_eg_configs b/example/network/lwip_startup/configs/d2000_aarch32_eg_configs index 22fbe65e1039bc2f56502b8a6cd1bc086b5d0ea5..abd743463d0a6b75d04a050bc8ec7755c992e6cc 100644 --- a/example/network/lwip_startup/configs/d2000_aarch32_eg_configs +++ b/example/network/lwip_startup/configs/d2000_aarch32_eg_configs @@ -25,7 +25,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -228,6 +238,12 @@ CONFIG_FREERTOS_USE_GMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,7 +256,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -248,11 +264,20 @@ CONFIG_USE_LWIP=y # # CONFIG_LWIP_FXMAC is not set CONFIG_LWIP_FGMAC=y +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -271,38 +296,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -311,36 +336,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -354,32 +379,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -395,12 +421,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -411,7 +437,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -419,10 +445,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -438,7 +463,7 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration @@ -482,6 +507,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/configs/d2000_aarch64_eg_configs b/example/network/lwip_startup/configs/d2000_aarch64_eg_configs index 7456a1d98e235a2f4ff709d1ed0ab3f5d74a7024..e6da13ca25c42b257a58791a022fe37c1d6e8e1a 100644 --- a/example/network/lwip_startup/configs/d2000_aarch64_eg_configs +++ b/example/network/lwip_startup/configs/d2000_aarch64_eg_configs @@ -25,7 +25,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -224,6 +234,12 @@ CONFIG_FREERTOS_USE_GMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,7 +252,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -244,11 +260,20 @@ CONFIG_USE_LWIP=y # # CONFIG_LWIP_FXMAC is not set CONFIG_LWIP_FGMAC=y +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -267,38 +292,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -307,36 +332,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -350,32 +375,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -391,12 +417,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -407,7 +433,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -415,10 +441,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -434,7 +459,7 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration @@ -478,6 +503,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/configs/e2000d_aarch32_eg_configs b/example/network/lwip_startup/configs/e2000d_aarch32_eg_configs index ddbeb0c86ab49a34fdb39b0950501e5862483d3b..22f5711c2f6b507b72ac09f5d2a15252d6a3289b 100644 --- a/example/network/lwip_startup/configs/e2000d_aarch32_eg_configs +++ b/example/network/lwip_startup/configs/e2000d_aarch32_eg_configs @@ -28,7 +28,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -99,18 +98,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -232,6 +242,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -244,7 +260,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -252,11 +268,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -275,70 +300,70 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # # CONFIG_LWIP_DHCP_ENABLE is not set -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -352,32 +377,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -393,10 +419,10 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set -# end of PPP +# end of Ppp # # Checksums @@ -407,13 +433,12 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # # CONFIG_LWIP_IPV6 is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -429,13 +454,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -473,6 +498,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/configs/e2000d_aarch64_eg_configs b/example/network/lwip_startup/configs/e2000d_aarch64_eg_configs index 382a01409116036195afd87fd9965a91adc4d8b0..acea14e6aec8ca3f47b7878f22bd519c8167fe44 100644 --- a/example/network/lwip_startup/configs/e2000d_aarch64_eg_configs +++ b/example/network/lwip_startup/configs/e2000d_aarch64_eg_configs @@ -28,7 +28,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -99,18 +98,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -228,6 +238,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,7 +256,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -248,11 +264,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -271,70 +296,70 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # # CONFIG_LWIP_DHCP_ENABLE is not set -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -348,32 +373,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -389,10 +415,10 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set -# end of PPP +# end of Ppp # # Checksums @@ -403,13 +429,12 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # # CONFIG_LWIP_IPV6 is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -425,13 +450,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -469,6 +494,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/configs/e2000q_aarch32_eg_configs b/example/network/lwip_startup/configs/e2000q_aarch32_eg_configs index b5a11862442bef3d07648a4790d10e497c23cc4d..5ca4989bb6108974a35b9c1ea58fcc59caa5e4b7 100644 --- a/example/network/lwip_startup/configs/e2000q_aarch32_eg_configs +++ b/example/network/lwip_startup/configs/e2000q_aarch32_eg_configs @@ -28,7 +28,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -99,18 +98,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -232,6 +242,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -244,7 +260,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -252,11 +268,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -275,70 +300,70 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # # CONFIG_LWIP_DHCP_ENABLE is not set -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -352,32 +377,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -393,10 +419,10 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set -# end of PPP +# end of Ppp # # Checksums @@ -407,13 +433,12 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # # CONFIG_LWIP_IPV6 is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -429,13 +454,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -473,6 +498,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/configs/e2000q_aarch64_eg_configs b/example/network/lwip_startup/configs/e2000q_aarch64_eg_configs index d95b535f02ed8c8a98343c92e2de450e037f52aa..7e660c8bfbe2400aa378a1ce7b94dd6cd62b9d41 100644 --- a/example/network/lwip_startup/configs/e2000q_aarch64_eg_configs +++ b/example/network/lwip_startup/configs/e2000q_aarch64_eg_configs @@ -28,7 +28,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -99,18 +98,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -228,6 +238,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,7 +256,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -248,11 +264,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -271,70 +296,70 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # # CONFIG_LWIP_DHCP_ENABLE is not set -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -348,32 +373,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -389,10 +415,10 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set -# end of PPP +# end of Ppp # # Checksums @@ -403,13 +429,12 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # # CONFIG_LWIP_IPV6 is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -425,13 +450,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -469,6 +494,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/configs/ft2004_aarch32_eg_configs b/example/network/lwip_startup/configs/ft2004_aarch32_eg_configs index 6dcc53020cc370ba08c177527a0d1e0464c7f3d2..30a2b44da0edf37925709838fc649f1410bb2563 100644 --- a/example/network/lwip_startup/configs/ft2004_aarch32_eg_configs +++ b/example/network/lwip_startup/configs/ft2004_aarch32_eg_configs @@ -25,7 +25,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -228,6 +238,12 @@ CONFIG_FREERTOS_USE_GMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,7 +256,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -248,11 +264,20 @@ CONFIG_USE_LWIP=y # # CONFIG_LWIP_FXMAC is not set CONFIG_LWIP_FGMAC=y +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -271,38 +296,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -311,36 +336,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -354,32 +379,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -395,12 +421,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -411,7 +437,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -419,10 +445,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -438,7 +463,7 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration @@ -482,6 +507,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/configs/ft2004_aarch64_eg_configs b/example/network/lwip_startup/configs/ft2004_aarch64_eg_configs index 536005a8db1ad916cf9f42e689452951050f2a55..206a09d1886c0db55ca13becd0fc2534993d6166 100644 --- a/example/network/lwip_startup/configs/ft2004_aarch64_eg_configs +++ b/example/network/lwip_startup/configs/ft2004_aarch64_eg_configs @@ -25,7 +25,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -224,6 +234,12 @@ CONFIG_FREERTOS_USE_GMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,7 +252,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -244,11 +260,20 @@ CONFIG_USE_LWIP=y # # CONFIG_LWIP_FXMAC is not set CONFIG_LWIP_FGMAC=y +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -267,38 +292,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -307,36 +332,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -350,32 +375,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -391,12 +417,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -407,7 +433,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -415,10 +441,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -434,7 +459,7 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration @@ -478,6 +503,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/pic/dhcp_ping.png b/example/network/lwip_startup/pic/dhcp_ping.png new file mode 100644 index 0000000000000000000000000000000000000000..7230601263d685cb2a0f0208188c5185f0213adc Binary files /dev/null and b/example/network/lwip_startup/pic/dhcp_ping.png differ diff --git a/example/network/lwip_startup/pic/dhcp_test.png b/example/network/lwip_startup/pic/dhcp_test.png index 1c0daf1f46c587e1c117dbc5fb524aa25a2df1ea..090eb8fef61751f7acb3637e78ce6c1cb96ed264 100644 Binary files a/example/network/lwip_startup/pic/dhcp_test.png and b/example/network/lwip_startup/pic/dhcp_test.png differ diff --git a/example/network/lwip_startup/pic/ipv4_test.png b/example/network/lwip_startup/pic/ipv4_test.png deleted file mode 100644 index 813c88d5dd7c450b5a896325bc48023272cf0a4b..0000000000000000000000000000000000000000 Binary files a/example/network/lwip_startup/pic/ipv4_test.png and /dev/null differ diff --git a/example/network/lwip_startup/pic/ipv6_test.png b/example/network/lwip_startup/pic/ipv6_test.png deleted file mode 100644 index a1373011a0c9d6ca1192f219dd49c997547a317c..0000000000000000000000000000000000000000 Binary files a/example/network/lwip_startup/pic/ipv6_test.png and /dev/null differ diff --git a/example/network/lwip_startup/pic/lwip_probe.png b/example/network/lwip_startup/pic/lwip_probe.png index 161a2bd48fa544932252825ec705056b83d75734..643368ba89b10b068d8e29b61beeed2788301ec2 100644 Binary files a/example/network/lwip_startup/pic/lwip_probe.png and b/example/network/lwip_startup/pic/lwip_probe.png differ diff --git a/example/network/lwip_startup/pic/ping_ipv6.png b/example/network/lwip_startup/pic/ping_ipv6.png index 072035ef90e64cc8c4dbcb8350900e6bac0beb11..901ff28ba80d18b4dabbe37e8fe58e4ef45f7b69 100644 Binary files a/example/network/lwip_startup/pic/ping_ipv6.png and b/example/network/lwip_startup/pic/ping_ipv6.png differ diff --git a/example/network/lwip_startup/pic/select_demo.png b/example/network/lwip_startup/pic/select_demo.png deleted file mode 100644 index bdfe19f08b88c110a92a4273ae89f74ea2fcc20e..0000000000000000000000000000000000000000 Binary files a/example/network/lwip_startup/pic/select_demo.png and /dev/null differ diff --git a/example/network/lwip_startup/pic/xmac_dhcp_menuconfig.png b/example/network/lwip_startup/pic/xmac_dhcp_menuconfig.png deleted file mode 100644 index e55d4680896c8e3b4dc20b143ddd0f4ca260e492..0000000000000000000000000000000000000000 Binary files a/example/network/lwip_startup/pic/xmac_dhcp_menuconfig.png and /dev/null differ diff --git a/example/network/lwip_startup/pic/xmac_ipv4_menuconfig.png b/example/network/lwip_startup/pic/xmac_ipv4_menuconfig.png deleted file mode 100644 index 1a50ea64e91afb611dcdcb345a5d9954447d6478..0000000000000000000000000000000000000000 Binary files a/example/network/lwip_startup/pic/xmac_ipv4_menuconfig.png and /dev/null differ diff --git a/example/network/lwip_startup/pic/xmac_ipv6_menuconfig.png b/example/network/lwip_startup/pic/xmac_ipv6_menuconfig.png deleted file mode 100644 index 18defa998a975736c4323d5d930c958a5b5ccaec..0000000000000000000000000000000000000000 Binary files a/example/network/lwip_startup/pic/xmac_ipv6_menuconfig.png and /dev/null differ diff --git a/example/network/lwip_startup/sdkconfig b/example/network/lwip_startup/sdkconfig index d95b535f02ed8c8a98343c92e2de450e037f52aa..7e660c8bfbe2400aa378a1ce7b94dd6cd62b9d41 100644 --- a/example/network/lwip_startup/sdkconfig +++ b/example/network/lwip_startup/sdkconfig @@ -28,7 +28,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -99,18 +98,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -228,6 +238,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,7 +256,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -248,11 +264,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -271,70 +296,70 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # # CONFIG_LWIP_DHCP_ENABLE is not set -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -348,32 +373,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -389,10 +415,10 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set -# end of PPP +# end of Ppp # # Checksums @@ -403,13 +429,12 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # # CONFIG_LWIP_IPV6 is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -425,13 +450,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -469,6 +494,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/lwip_startup/sdkconfig.h b/example/network/lwip_startup/sdkconfig.h index 29faca22103b1e59cf30303a8d4bc67c194e02ff..54de41849f3eb36a23bd7d0e70a87b382277fa68 100644 --- a/example/network/lwip_startup/sdkconfig.h +++ b/example/network/lwip_startup/sdkconfig.h @@ -26,7 +26,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -89,18 +88,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ #define CONFIG_LOG_DEBUG /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -198,6 +205,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -206,16 +218,24 @@ /* LWIP Freertos Port Configuration */ -/* LWIP Configuration */ +/* Lwip configuration */ /* LWIP Port Configuration */ #define CONFIG_LWIP_FXMAC /* CONFIG_LWIP_FGMAC is not set */ +/* CONFIG_LWIP_RX_POLL is not set */ /* end of LWIP Port Configuration */ /* CONFIG_LWIP_NO_SYS is not set */ #define CONFIG_LWIP_LOCAL_HOSTNAME "phytium" +/* Lwip_app */ + +/* CONFIG_USE_LWIP_APP_LWIPERF is not set */ +/* CONFIG_USE_LWIP_APP_PING is not set */ +/* CONFIG_USE_LWIP_APP_TFTP is not set */ +/* end of Lwip_app */ + /* Memory configuration */ /* CONFIG_LWIP_USE_MEM_POOL is not set */ @@ -231,61 +251,61 @@ #define CONFIG_PBUF_POOL_SIZE 1 /* end of Pbuf options */ -/* ARP */ +/* Arp */ #define CONFIG_ARP_QUEUEING_EN -/* end of ARP */ +/* end of Arp */ -/* IPV4 */ +/* Ipv4 */ /* CONFIG_USE_IPV4_ONLY is not set */ #define CONFIG_LWIP_IP4_REASSEMBLY #define CONFIG_LWIP_IP4_FRAG /* CONFIG_LWIP_IP_FORWARD is not set */ #define CONFIG_IP_REASS_MAX_PBUFS 16 -/* end of IPV4 */ +/* end of Ipv4 */ -/* ICMP */ +/* Icmp */ #define CONFIG_LWIP_ICMP #define CONFIG_LWIP_MULTICAST_PING #define CONFIG_LWIP_BROADCAST_PING -/* end of ICMP */ +/* end of Icmp */ -/* LWIP RAW API */ +/* Lwip raw api */ #define CONFIG_LWIP_RAW_API_EN #define CONFIG_LWIP_MAX_RAW_PCBS 16 -/* end of LWIP RAW API */ +/* end of Lwip raw api */ -/* DHCP */ +/* Dhcp */ /* CONFIG_LWIP_DHCP_ENABLE is not set */ -/* end of DHCP */ +/* end of Dhcp */ -/* AUTOIP */ +/* Autoip */ /* CONFIG_LWIP_AUTOIP is not set */ -/* end of AUTOIP */ +/* end of Autoip */ -/* IGMP */ +/* Igmp */ #define CONFIG_LWIP_IGMP_EN -/* end of IGMP */ +/* end of Igmp */ -/* DNS */ +/* Dns */ #define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES -/* end of DNS */ +/* end of Dns */ -/* UDP */ +/* Udp */ #define CONFIG_LWIP_MAX_UDP_PCBS 16 #define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6 /* CONFIG_LWIP_NETBUF_RECVINFO is not set */ -/* end of UDP */ +/* end of Udp */ -/* TCP */ +/* Tcp */ #define CONFIG_LWIP_TCP_WND_DEFAULT 5744 #define CONFIG_LWIP_TCP_MAXRTX 12 @@ -299,29 +319,30 @@ /* CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set */ #define CONFIG_LWIP_TCP_TMR_INTERVAL 250 #define CONFIG_LWIP_TCP_MSL 60000 +/* CONFIG_LWIP_WND_SCALE is not set */ #define CONFIG_LWIP_TCP_RTO_TIME 1500 #define CONFIG_LWIP_MAX_ACTIVE_TCP 16 #define CONFIG_LWIP_MAX_LISTENING_TCP 16 #define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION #define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6 -/* end of TCP */ +/* end of Tcp */ -/* Network_Interface */ +/* Network_interface */ /* CONFIG_LWIP_NETIF_API is not set */ /* CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set */ -/* end of Network_Interface */ +/* end of Network_interface */ -/* LOOPIF */ +/* Loopif */ #define CONFIG_LWIP_NETIF_LOOPBACK #define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8 -/* end of LOOPIF */ +/* end of Loopif */ -/* SLIPIF */ +/* Slipif */ /* CONFIG_LWIP_SLIP_SUPPORT is not set */ -/* end of SLIPIF */ +/* end of Slipif */ #define CONFIG_LWIP_TCPIP_CORE_LOCKING /* Socket */ @@ -333,10 +354,10 @@ /* end of Socket */ /* CONFIG_LWIP_STATS is not set */ -/* PPP */ +/* Ppp */ /* CONFIG_LWIP_PPP_SUPPORT is not set */ -/* end of PPP */ +/* end of Ppp */ /* Checksums */ @@ -345,12 +366,11 @@ #define CONFIG_LWIP_CHECKSUM_CHECK_ICMP /* end of Checksums */ -/* IPV6 */ +/* Ipv6 */ /* CONFIG_LWIP_IPV6 is not set */ -/* end of IPV6 */ +/* end of Ipv6 */ #define CONFIG_LWIP_DEBUG -/* CONFIG_LWIP_DEBUG_ESP_LOG is not set */ #define CONFIG_LWIP_NETIF_DEBUG /* CONFIG_LWIP_PBUF_DEBUG is not set */ /* CONFIG_LWIP_ETHARP_DEBUG is not set */ @@ -366,12 +386,12 @@ /* CONFIG_LWIP_UDP_DEBUG is not set */ /* CONFIG_LWIP_SNTP_DEBUG is not set */ /* CONFIG_LWIP_DNS_DEBUG is not set */ -/* end of LWIP Configuration */ +/* end of Lwip configuration */ /* Tcp/ip task resource configuration */ #define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072 -#define CONFIG_LWIP_TCPIP_TASK_PRIO 6 +#define CONFIG_LWIP_TCPIP_TASK_PRIO 5 #define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32 /* end of Tcp/ip task resource configuration */ @@ -405,6 +425,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/network/lwip_startup/src/lwip_test.c b/example/network/lwip_startup/src/lwip_test.c index b8ecc83d3ca26edd3c72e0ee6df2c22fc8b543ea..3a8eb810d47993ba2542fddc67bf1f82319d1c96 100644 --- a/example/network/lwip_startup/src/lwip_test.c +++ b/example/network/lwip_startup/src/lwip_test.c @@ -164,7 +164,7 @@ void LwipTestCreate(void *args) (UserConfig *)args, 0)) { printf("Error adding N/W interface.\n\r"); - return ; + goto failed; } printf("LwipPortAdd is over.\n\r"); @@ -217,46 +217,59 @@ void LwipTest(void *args) static int LwipDeviceSet(int argc, char *argv[]) { - u32 id = 0, type = 0; - const char *ipaddr = NULL; - const char *gateway = NULL; - const char *netmask = NULL; + u32 id = 0, interface_type = 0, driver_type = 0; memset(&input_config, 0, sizeof(input_config)); LWIP_PORT_CONFIG_DEFAULT_INIT(input_config.lwip_mac_config); if (!strcmp(argv[1], "probe")) { - switch (argc) + if (argc < 6) + { + printf("Input error: Too few parameters!\n"); + printf("All parameters will be set to 0!\n"); + } + else { - case 8: - netmask = argv[7]; - case 7: - gateway = argv[6]; - case 6: - ipaddr = argv[5]; - input_config.input_address.ipaddr = ipaddr; - input_config.input_address.gateway = gateway; - input_config.input_address.netmask = netmask; - case 5: - input_config.dhcp_en = (u32)simple_strtoul(argv[4], NULL, 10); - case 4: - type = (u32)simple_strtoul(argv[3], NULL, 10); - case 3: - id = (u32)simple_strtoul(argv[2], NULL, 10); - break; - default: - break; + driver_type = (u32)simple_strtoul(argv[2], NULL, 10); + id = (u32)simple_strtoul(argv[3], NULL, 10); + interface_type = (u32)simple_strtoul(argv[4], NULL, 10); + input_config.dhcp_en = (u32)simple_strtoul(argv[5], NULL, 10); + if (input_config.dhcp_en == 0) + { + if (argc == 9) + { + input_config.input_address.ipaddr = argv[6]; + input_config.input_address.gateway = argv[7]; + input_config.input_address.netmask = argv[8]; + } + else + { + printf("Input error: Missing parameters!\n"); + printf("All Ip address will be set to 0!\n"); + } + + } + else + { + if (argc == 9) + { + input_config.input_address.ipaddr = argv[6]; + input_config.input_address.gateway = argv[7]; + input_config.input_address.netmask = argv[8]; + } + + printf("Dhcp Open: All IP addresses will be determined by the dhcp server!\n"); + } } - printf("types %d.\r\n", type); - printf("id %d.\r\n", id); #if defined(CONFIG_TARGET_E2000) - FXmacPhyGpioInit(id, type); + FXmacPhyGpioInit(id, interface_type); #endif + input_config.lwip_mac_config.mac_instance = id; input_config.lwip_mac_config.name[0] = 'e'; itoa(id, &input_config.lwip_mac_config.name[1], 10); - if (type == 0) + if (interface_type == 0) { input_config.lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_RGMII; } @@ -264,7 +277,15 @@ static int LwipDeviceSet(int argc, char *argv[]) { input_config.lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_SGMII; } - + if (driver_type == 0) + { + input_config.lwip_mac_config.driver_type = LWIP_PORT_TYPE_XMAC; + } + else + { + input_config.lwip_mac_config.driver_type = LWIP_PORT_TYPE_GMAC; + } + LwipTest(&input_config); } else if (!strcmp(argv[1], "deinit")) @@ -292,7 +313,8 @@ static int LwipDeviceSet(int argc, char *argv[]) } else { - printf("Please enter lwip probe \r\n") ; + printf("Please enter lwip probe \r\n") ; + printf(" -- driver id is driver type set, 0 is xmac ,1 is gmac \r\n"); printf(" -- device id is mac instance number \r\n"); printf(" -- interface id is media independent interface , 0 is rgmii ,1 is sgmii \r\n"); printf(" -- dhcp_en is dhcp function set ,1 is enable ,0 is disable .But this depends on whether the protocol stack supports it "); diff --git a/example/network/sockets/udp_multicast/README.md b/example/network/sockets/udp_multicast/README.md index 09856eeed3e79c885572bcf5fa5d07205aedb81a..4d0f0684a5c2da7c77cc222aec1979214c707dd3 100644 --- a/example/network/sockets/udp_multicast/README.md +++ b/example/network/sockets/udp_multicast/README.md @@ -40,11 +40,13 @@ 本例程支持的硬件平台包括 - E2000D/E2000Q +- D2000 对应的配置项是 - CONFIG_TARGET_E2000D - CONFIG_TARGET_E2000Q +- CONFIG_TARGET_D2000 ### 2.2 SDK配置方法 @@ -129,16 +131,20 @@ bootelf -p 0x90100000 - 以E2000D/Q demo 板为例,开发者输入以下命令则可以初始化网卡: ``` -lwip probe 0 1 1 192.168.4.10 192.168.4.1 255.255.255.0 +lwip probe 0 0 1 0 192.168.4.10 192.168.4.1 255.255.255.0 ``` -- 命令定义为:"lwip probe " -- 为mac控制器 -- 为gmii 控制器类型,0 is rgmii ,1 is sgmii -- 1为使能dhcp 功能,0为关闭dhcp 功能 -- 为ipv4 地址,示例为: 192.168.4.10 -- 为网关 ,示例为: 192.168.4.1 -- 为子网掩码,示例为255.255.255.0 +命令定义为: +``` +lwip probe +``` +- driver id 为驱动类型 , 0为xmac ,1为gmac +- device id 为mac控制器 +- interface id 为gmii 控制器类型,0 is rgmii ,1 is sgmii +- dhcp_en 1为使能dhcp 功能,0为关闭dhcp 功能 +- ipaddr 为ipv4 地址,示例为: 192.168.4.10 +- gateway 为网关 ,示例为: 192.168.4. +- netmask 为子网掩码,示例为255.255.255.0 - 效果图如下 diff --git a/example/network/sockets/udp_multicast/configs/d2000_aarch32_eg_configs b/example/network/sockets/udp_multicast/configs/d2000_aarch32_eg_configs index c4b386f1438a1c8c744ae79baebf21361ebcb74a..62542321b89362165558ca59073426c3cd3f0f89 100644 --- a/example/network/sockets/udp_multicast/configs/d2000_aarch32_eg_configs +++ b/example/network/sockets/udp_multicast/configs/d2000_aarch32_eg_configs @@ -34,7 +34,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -104,18 +103,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -237,6 +247,12 @@ CONFIG_FREERTOS_USE_GMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -249,7 +265,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -257,11 +273,20 @@ CONFIG_USE_LWIP=y # # CONFIG_LWIP_FXMAC is not set CONFIG_LWIP_FGMAC=y +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -280,38 +305,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -320,36 +345,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -363,32 +388,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -404,12 +430,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -420,7 +446,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -428,10 +454,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -447,7 +472,7 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration @@ -491,6 +516,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/configs/d2000_aarch64_eg_configs b/example/network/sockets/udp_multicast/configs/d2000_aarch64_eg_configs index a1e60964092f62bdef95cb4c7a5320cbb32bc7f6..0180486baeb83db9d97ec13a8797ac255cd5128a 100644 --- a/example/network/sockets/udp_multicast/configs/d2000_aarch64_eg_configs +++ b/example/network/sockets/udp_multicast/configs/d2000_aarch64_eg_configs @@ -34,7 +34,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -104,18 +103,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -233,6 +243,12 @@ CONFIG_FREERTOS_USE_GMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -245,7 +261,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -253,11 +269,20 @@ CONFIG_USE_LWIP=y # # CONFIG_LWIP_FXMAC is not set CONFIG_LWIP_FGMAC=y +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -276,38 +301,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -316,36 +341,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -359,32 +384,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -400,12 +426,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -416,7 +442,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -424,10 +450,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -443,7 +468,7 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration @@ -487,6 +512,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/configs/e2000d_aarch32_eg_configs b/example/network/sockets/udp_multicast/configs/e2000d_aarch32_eg_configs index 4ed4741fe1bd152379c63f742687c67a4143472b..455517088a76fda066adb3e44dbd2bad704c4239 100644 --- a/example/network/sockets/udp_multicast/configs/e2000d_aarch32_eg_configs +++ b/example/network/sockets/udp_multicast/configs/e2000d_aarch32_eg_configs @@ -42,7 +42,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -113,18 +112,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -246,6 +256,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -258,7 +274,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -266,11 +282,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -289,38 +314,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=45 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y # CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -329,36 +354,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -372,32 +397,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -413,12 +439,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -429,7 +455,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -437,10 +463,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -456,13 +481,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -500,6 +525,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/configs/e2000d_aarch64_eg_configs b/example/network/sockets/udp_multicast/configs/e2000d_aarch64_eg_configs index 52af883e13b55748376849857819b15afa670fdc..5e409b19c1dd55aa29b501011004bcc6449b1db6 100644 --- a/example/network/sockets/udp_multicast/configs/e2000d_aarch64_eg_configs +++ b/example/network/sockets/udp_multicast/configs/e2000d_aarch64_eg_configs @@ -42,7 +42,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -113,18 +112,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -242,6 +252,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -254,7 +270,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -262,11 +278,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -285,38 +310,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=45 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y # CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -325,36 +350,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -368,32 +393,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -409,12 +435,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -425,7 +451,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -433,10 +459,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y CONFIG_LWIP_IP6_REASSEMBLY=y -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -452,13 +477,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -496,6 +521,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/configs/e2000q_aarch32_eg_configs b/example/network/sockets/udp_multicast/configs/e2000q_aarch32_eg_configs index 272a5e869bc6b3ff5f35db79191cf6dfd4389e74..e27cbd5e0e0f7ac0c90db049f2f8cfaf2b765154 100644 --- a/example/network/sockets/udp_multicast/configs/e2000q_aarch32_eg_configs +++ b/example/network/sockets/udp_multicast/configs/e2000q_aarch32_eg_configs @@ -42,7 +42,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -113,18 +112,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -246,6 +256,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -258,7 +274,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -266,11 +282,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -289,38 +314,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=45 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y # CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -329,36 +354,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -372,32 +397,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -413,12 +439,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -429,7 +455,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -437,10 +463,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -456,13 +481,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -500,6 +525,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/configs/e2000q_aarch64_eg_configs b/example/network/sockets/udp_multicast/configs/e2000q_aarch64_eg_configs index 191c6b54c992e5f7bd339b5552eb6b3fe49dd1d6..c6db6094255f2d6fe3e93dd1aa220ed4491e88df 100644 --- a/example/network/sockets/udp_multicast/configs/e2000q_aarch64_eg_configs +++ b/example/network/sockets/udp_multicast/configs/e2000q_aarch64_eg_configs @@ -42,7 +42,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -113,18 +112,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -242,6 +252,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -254,7 +270,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -262,11 +278,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -285,38 +310,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=45 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y # CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -325,36 +350,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -368,32 +393,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -409,12 +435,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -425,7 +451,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -433,10 +459,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y CONFIG_LWIP_IP6_REASSEMBLY=y -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -452,13 +477,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -496,6 +521,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/configs/ft2004_aarch32_eg_configs b/example/network/sockets/udp_multicast/configs/ft2004_aarch32_eg_configs index ae6c8d1cb62c1c9848332c52c7ba74d4f2c059f9..e3abb89d4ebface2da23bde4c6dbbed26afd7e5e 100644 --- a/example/network/sockets/udp_multicast/configs/ft2004_aarch32_eg_configs +++ b/example/network/sockets/udp_multicast/configs/ft2004_aarch32_eg_configs @@ -34,7 +34,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -104,18 +103,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -237,6 +247,12 @@ CONFIG_FREERTOS_USE_GMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -249,7 +265,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -257,11 +273,20 @@ CONFIG_USE_LWIP=y # # CONFIG_LWIP_FXMAC is not set CONFIG_LWIP_FGMAC=y +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -280,38 +305,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -320,36 +345,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -363,32 +388,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -404,12 +430,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -420,7 +446,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -428,10 +454,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -447,7 +472,7 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration @@ -491,6 +516,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/configs/ft2004_aarch64_eg_configs b/example/network/sockets/udp_multicast/configs/ft2004_aarch64_eg_configs index c3a540bae868d9463837031df08249a633730fe4..a678f961eb1ca8064955689c9627aa7fd7e87aa7 100644 --- a/example/network/sockets/udp_multicast/configs/ft2004_aarch64_eg_configs +++ b/example/network/sockets/udp_multicast/configs/ft2004_aarch64_eg_configs @@ -34,7 +34,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -104,18 +103,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -233,6 +243,12 @@ CONFIG_FREERTOS_USE_GMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -245,7 +261,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -253,11 +269,20 @@ CONFIG_USE_LWIP=y # # CONFIG_LWIP_FXMAC is not set CONFIG_LWIP_FGMAC=y +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -276,38 +301,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=16 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y CONFIG_LWIP_BROADCAST_PING=y -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -316,36 +341,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -359,32 +384,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -400,12 +426,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -416,7 +442,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -424,10 +450,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y # CONFIG_LWIP_IP6_REASSEMBLY is not set -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -443,7 +468,7 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration @@ -487,6 +512,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/pic/lwip_probe.png b/example/network/sockets/udp_multicast/pic/lwip_probe.png index 161a2bd48fa544932252825ec705056b83d75734..643368ba89b10b068d8e29b61beeed2788301ec2 100644 Binary files a/example/network/sockets/udp_multicast/pic/lwip_probe.png and b/example/network/sockets/udp_multicast/pic/lwip_probe.png differ diff --git a/example/network/sockets/udp_multicast/pic/ping.png b/example/network/sockets/udp_multicast/pic/ping.png deleted file mode 100644 index 4df451934d172b9bd0870228ad29d0d6c45937eb..0000000000000000000000000000000000000000 Binary files a/example/network/sockets/udp_multicast/pic/ping.png and /dev/null differ diff --git a/example/network/sockets/udp_multicast/pic/ping_ipv6.png b/example/network/sockets/udp_multicast/pic/ping_ipv6.png deleted file mode 100644 index 56641587499a902694192d1f61b997dc39394ca3..0000000000000000000000000000000000000000 Binary files a/example/network/sockets/udp_multicast/pic/ping_ipv6.png and /dev/null differ diff --git a/example/network/sockets/udp_multicast/sdkconfig b/example/network/sockets/udp_multicast/sdkconfig index 191c6b54c992e5f7bd339b5552eb6b3fe49dd1d6..c6db6094255f2d6fe3e93dd1aa220ed4491e88df 100644 --- a/example/network/sockets/udp_multicast/sdkconfig +++ b/example/network/sockets/udp_multicast/sdkconfig @@ -42,7 +42,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -113,18 +112,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -242,6 +252,12 @@ CONFIG_FREERTOS_USE_XMAC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -254,7 +270,7 @@ CONFIG_USE_LWIP=y # # -# LWIP Configuration +# Lwip configuration # # @@ -262,11 +278,20 @@ CONFIG_USE_LWIP=y # CONFIG_LWIP_FXMAC=y # CONFIG_LWIP_FGMAC is not set +# CONFIG_LWIP_RX_POLL is not set # end of LWIP Port Configuration # CONFIG_LWIP_NO_SYS is not set CONFIG_LWIP_LOCAL_HOSTNAME="phytium" +# +# Lwip_app +# +# CONFIG_USE_LWIP_APP_LWIPERF is not set +# CONFIG_USE_LWIP_APP_PING is not set +# CONFIG_USE_LWIP_APP_TFTP is not set +# end of Lwip_app + # # Memory configuration # @@ -285,38 +310,38 @@ CONFIG_PBUF_POOL_SIZE=1 # end of Pbuf options # -# ARP +# Arp # CONFIG_ARP_QUEUEING_EN=y -# end of ARP +# end of Arp # -# IPV4 +# Ipv4 # # CONFIG_USE_IPV4_ONLY is not set CONFIG_LWIP_IP4_REASSEMBLY=y CONFIG_LWIP_IP4_FRAG=y # CONFIG_LWIP_IP_FORWARD is not set CONFIG_IP_REASS_MAX_PBUFS=45 -# end of IPV4 +# end of Ipv4 # -# ICMP +# Icmp # CONFIG_LWIP_ICMP=y CONFIG_LWIP_MULTICAST_PING=y # CONFIG_LWIP_BROADCAST_PING is not set -# end of ICMP +# end of Icmp # -# LWIP RAW API +# Lwip raw api # CONFIG_LWIP_RAW_API_EN=y CONFIG_LWIP_MAX_RAW_PCBS=16 -# end of LWIP RAW API +# end of Lwip raw api # -# DHCP +# Dhcp # CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set @@ -325,36 +350,36 @@ CONFIG_LWIP_DHCP_ENABLE=y # CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set CONFIG_LWIP_DHCP_OPTIONS_LEN=68 CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID=y -# end of DHCP +# end of Dhcp # -# AUTOIP +# Autoip # # CONFIG_LWIP_AUTOIP is not set -# end of AUTOIP +# end of Autoip # -# IGMP +# Igmp # CONFIG_LWIP_IGMP_EN=y -# end of IGMP +# end of Igmp # -# DNS +# Dns # CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES=y -# end of DNS +# end of Dns # -# UDP +# Udp # CONFIG_LWIP_MAX_UDP_PCBS=16 CONFIG_LWIP_UDP_RECVMBOX_SIZE=6 # CONFIG_LWIP_NETBUF_RECVINFO is not set -# end of UDP +# end of Udp # -# TCP +# Tcp # CONFIG_LWIP_TCP_WND_DEFAULT=5744 CONFIG_LWIP_TCP_MAXRTX=12 @@ -368,32 +393,33 @@ CONFIG_LWIP_TCP_OVERSIZE_MSS=y # CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set CONFIG_LWIP_TCP_TMR_INTERVAL=250 CONFIG_LWIP_TCP_MSL=60000 +# CONFIG_LWIP_WND_SCALE is not set CONFIG_LWIP_TCP_RTO_TIME=1500 CONFIG_LWIP_MAX_ACTIVE_TCP=16 CONFIG_LWIP_MAX_LISTENING_TCP=16 CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION=y CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 -# end of TCP +# end of Tcp # -# Network_Interface +# Network_interface # # CONFIG_LWIP_NETIF_API is not set # CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set -# end of Network_Interface +# end of Network_interface # -# LOOPIF +# Loopif # CONFIG_LWIP_NETIF_LOOPBACK=y CONFIG_LWIP_LOOPBACK_MAX_PBUFS=8 -# end of LOOPIF +# end of Loopif # -# SLIPIF +# Slipif # # CONFIG_LWIP_SLIP_SUPPORT is not set -# end of SLIPIF +# end of Slipif CONFIG_LWIP_TCPIP_CORE_LOCKING=y @@ -409,12 +435,12 @@ CONFIG_LWIP_SO_REUSE_RXTOALL=y # CONFIG_LWIP_STATS is not set # -# PPP +# Ppp # # CONFIG_LWIP_PPP_SUPPORT is not set CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 -# end of PPP +# end of Ppp # # Checksums @@ -425,7 +451,7 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y # end of Checksums # -# IPV6 +# Ipv6 # CONFIG_LWIP_IPV6=y # CONFIG_LWIP_IPV6_AUTOCONFIG is not set @@ -433,10 +459,9 @@ CONFIG_LWIP_IPV6_NUM_ADDRESSES=3 # CONFIG_LWIP_IPV6_FORWARD is not set CONFIG_LWIP_IP6_FRAG=y CONFIG_LWIP_IP6_REASSEMBLY=y -# end of IPV6 +# end of Ipv6 CONFIG_LWIP_DEBUG=y -# CONFIG_LWIP_DEBUG_ESP_LOG is not set CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_PBUF_DEBUG is not set # CONFIG_LWIP_ETHARP_DEBUG is not set @@ -452,13 +477,13 @@ CONFIG_LWIP_NETIF_DEBUG=y # CONFIG_LWIP_UDP_DEBUG is not set # CONFIG_LWIP_SNTP_DEBUG is not set # CONFIG_LWIP_DNS_DEBUG is not set -# end of LWIP Configuration +# end of Lwip configuration # # Tcp/ip task resource configuration # CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 -CONFIG_LWIP_TCPIP_TASK_PRIO=6 +CONFIG_LWIP_TCPIP_TASK_PRIO=5 CONFIG_LWIP_TCPIP_RECVMBOX_SIZE=32 # end of Tcp/ip task resource configuration @@ -496,6 +521,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/network/sockets/udp_multicast/sdkconfig.h b/example/network/sockets/udp_multicast/sdkconfig.h index 211930eca3502f71f832cc11ab439e2b4098f503..bd313ceaf7dc1de7673e76affc2ea0eeccfbaaa1 100644 --- a/example/network/sockets/udp_multicast/sdkconfig.h +++ b/example/network/sockets/udp_multicast/sdkconfig.h @@ -39,7 +39,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -102,18 +101,26 @@ /* Building Option */ +/* Sdk common configuration */ + #define CONFIG_LOG_VERBOS /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -211,6 +218,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -219,16 +231,24 @@ /* LWIP Freertos Port Configuration */ -/* LWIP Configuration */ +/* Lwip configuration */ /* LWIP Port Configuration */ #define CONFIG_LWIP_FXMAC /* CONFIG_LWIP_FGMAC is not set */ +/* CONFIG_LWIP_RX_POLL is not set */ /* end of LWIP Port Configuration */ /* CONFIG_LWIP_NO_SYS is not set */ #define CONFIG_LWIP_LOCAL_HOSTNAME "phytium" +/* Lwip_app */ + +/* CONFIG_USE_LWIP_APP_LWIPERF is not set */ +/* CONFIG_USE_LWIP_APP_PING is not set */ +/* CONFIG_USE_LWIP_APP_TFTP is not set */ +/* end of Lwip_app */ + /* Memory configuration */ /* CONFIG_LWIP_USE_MEM_POOL is not set */ @@ -244,34 +264,34 @@ #define CONFIG_PBUF_POOL_SIZE 1 /* end of Pbuf options */ -/* ARP */ +/* Arp */ #define CONFIG_ARP_QUEUEING_EN -/* end of ARP */ +/* end of Arp */ -/* IPV4 */ +/* Ipv4 */ /* CONFIG_USE_IPV4_ONLY is not set */ #define CONFIG_LWIP_IP4_REASSEMBLY #define CONFIG_LWIP_IP4_FRAG /* CONFIG_LWIP_IP_FORWARD is not set */ #define CONFIG_IP_REASS_MAX_PBUFS 45 -/* end of IPV4 */ +/* end of Ipv4 */ -/* ICMP */ +/* Icmp */ #define CONFIG_LWIP_ICMP #define CONFIG_LWIP_MULTICAST_PING /* CONFIG_LWIP_BROADCAST_PING is not set */ -/* end of ICMP */ +/* end of Icmp */ -/* LWIP RAW API */ +/* Lwip raw api */ #define CONFIG_LWIP_RAW_API_EN #define CONFIG_LWIP_MAX_RAW_PCBS 16 -/* end of LWIP RAW API */ +/* end of Lwip raw api */ -/* DHCP */ +/* Dhcp */ #define CONFIG_LWIP_DHCP_ENABLE /* CONFIG_LWIP_DHCP_DOES_ARP_CHECK is not set */ @@ -280,31 +300,31 @@ /* CONFIG_LWIP_DHCP_RESTORE_LAST_IP is not set */ #define CONFIG_LWIP_DHCP_OPTIONS_LEN 68 #define CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID -/* end of DHCP */ +/* end of Dhcp */ -/* AUTOIP */ +/* Autoip */ /* CONFIG_LWIP_AUTOIP is not set */ -/* end of AUTOIP */ +/* end of Autoip */ -/* IGMP */ +/* Igmp */ #define CONFIG_LWIP_IGMP_EN -/* end of IGMP */ +/* end of Igmp */ -/* DNS */ +/* Dns */ #define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES -/* end of DNS */ +/* end of Dns */ -/* UDP */ +/* Udp */ #define CONFIG_LWIP_MAX_UDP_PCBS 16 #define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6 /* CONFIG_LWIP_NETBUF_RECVINFO is not set */ -/* end of UDP */ +/* end of Udp */ -/* TCP */ +/* Tcp */ #define CONFIG_LWIP_TCP_WND_DEFAULT 5744 #define CONFIG_LWIP_TCP_MAXRTX 12 @@ -318,29 +338,30 @@ /* CONFIG_LWIP_TCP_OVERSIZE_DISABLE is not set */ #define CONFIG_LWIP_TCP_TMR_INTERVAL 250 #define CONFIG_LWIP_TCP_MSL 60000 +/* CONFIG_LWIP_WND_SCALE is not set */ #define CONFIG_LWIP_TCP_RTO_TIME 1500 #define CONFIG_LWIP_MAX_ACTIVE_TCP 16 #define CONFIG_LWIP_MAX_LISTENING_TCP 16 #define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION #define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6 -/* end of TCP */ +/* end of Tcp */ -/* Network_Interface */ +/* Network_interface */ /* CONFIG_LWIP_NETIF_API is not set */ /* CONFIG_LWIP_NETIF_STATUS_CALLBACK is not set */ -/* end of Network_Interface */ +/* end of Network_interface */ -/* LOOPIF */ +/* Loopif */ #define CONFIG_LWIP_NETIF_LOOPBACK #define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8 -/* end of LOOPIF */ +/* end of Loopif */ -/* SLIPIF */ +/* Slipif */ /* CONFIG_LWIP_SLIP_SUPPORT is not set */ -/* end of SLIPIF */ +/* end of Slipif */ #define CONFIG_LWIP_TCPIP_CORE_LOCKING /* Socket */ @@ -352,12 +373,12 @@ /* end of Socket */ /* CONFIG_LWIP_STATS is not set */ -/* PPP */ +/* Ppp */ /* CONFIG_LWIP_PPP_SUPPORT is not set */ #define CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE 3 #define CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS 5 -/* end of PPP */ +/* end of Ppp */ /* Checksums */ @@ -366,7 +387,7 @@ #define CONFIG_LWIP_CHECKSUM_CHECK_ICMP /* end of Checksums */ -/* IPV6 */ +/* Ipv6 */ #define CONFIG_LWIP_IPV6 /* CONFIG_LWIP_IPV6_AUTOCONFIG is not set */ @@ -374,9 +395,8 @@ /* CONFIG_LWIP_IPV6_FORWARD is not set */ #define CONFIG_LWIP_IP6_FRAG #define CONFIG_LWIP_IP6_REASSEMBLY -/* end of IPV6 */ +/* end of Ipv6 */ #define CONFIG_LWIP_DEBUG -/* CONFIG_LWIP_DEBUG_ESP_LOG is not set */ #define CONFIG_LWIP_NETIF_DEBUG /* CONFIG_LWIP_PBUF_DEBUG is not set */ /* CONFIG_LWIP_ETHARP_DEBUG is not set */ @@ -392,12 +412,12 @@ /* CONFIG_LWIP_UDP_DEBUG is not set */ /* CONFIG_LWIP_SNTP_DEBUG is not set */ /* CONFIG_LWIP_DNS_DEBUG is not set */ -/* end of LWIP Configuration */ +/* end of Lwip configuration */ /* Tcp/ip task resource configuration */ #define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072 -#define CONFIG_LWIP_TCPIP_TASK_PRIO 6 +#define CONFIG_LWIP_TCPIP_TASK_PRIO 5 #define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32 /* end of Tcp/ip task resource configuration */ @@ -431,6 +451,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/network/sockets/udp_multicast/src/lwip_test.c b/example/network/sockets/udp_multicast/src/lwip_test.c index dc88a18402036a40c363dbdb461265020712cdeb..a6ac54a3897eac2fc1427ada0f7e9bb625ba86b3 100644 --- a/example/network/sockets/udp_multicast/src/lwip_test.c +++ b/example/network/sockets/udp_multicast/src/lwip_test.c @@ -160,7 +160,7 @@ void LwipTestCreate(void *args) (UserConfig *)args, 0)) { printf("Error adding N/W interface.\r\n"); - return ; + goto failed; } printf("LwipPortAdd is over.\r\n"); @@ -213,46 +213,59 @@ void LwipTest(void *args) static int LwipDeviceSet(int argc, char *argv[]) { - u32 id = 0, type = 0; - const char *ipaddr = NULL; - const char *gateway = NULL; - const char *netmask = NULL; + u32 id = 0, interface_type = 0, driver_type = 0; memset(&input_config, 0, sizeof(input_config)); LWIP_PORT_CONFIG_DEFAULT_INIT(input_config.lwip_mac_config); if (!strcmp(argv[1], "probe")) { - switch (argc) + if (argc < 6) { - case 8: - netmask = argv[7]; - case 7: - gateway = argv[6]; - case 6: - ipaddr = argv[5]; - input_config.input_address.ipaddr = ipaddr; - input_config.input_address.gateway = gateway; - input_config.input_address.netmask = netmask; - case 5: - input_config.dhcp_en = (u32)simple_strtoul(argv[4], NULL, 10); - case 4: - type = (u32)simple_strtoul(argv[3], NULL, 10); - case 3: - id = (u32)simple_strtoul(argv[2], NULL, 10); - break; - default: - break; + printf("Input error: Too few parameters!\n"); + printf("All parameters will be set to 0!\n"); + } + else + { + driver_type = (u32)simple_strtoul(argv[2], NULL, 10); + id = (u32)simple_strtoul(argv[3], NULL, 10); + interface_type = (u32)simple_strtoul(argv[4], NULL, 10); + input_config.dhcp_en = (u32)simple_strtoul(argv[5], NULL, 10); + if (input_config.dhcp_en == 0) + { + if (argc == 9) + { + input_config.input_address.ipaddr = argv[6]; + input_config.input_address.gateway = argv[7]; + input_config.input_address.netmask = argv[8]; + } + else + { + printf("Input error: Missing parameters!\n"); + printf("All Ip address will be set to 0!\n"); + } + + } + else + { + if (argc == 9) + { + input_config.input_address.ipaddr = argv[6]; + input_config.input_address.gateway = argv[7]; + input_config.input_address.netmask = argv[8]; + } + + printf("Dhcp Open: All IP addresses will be determined by the dhcp server!\n"); + } } - printf("types %d\n", type); - printf("id %d\n", id); #if defined(CONFIG_TARGET_E2000) - FXmacPhyGpioInit(id, type); + FXmacPhyGpioInit(id, interface_type); #endif + input_config.lwip_mac_config.mac_instance = id; input_config.lwip_mac_config.name[0] = 'e'; itoa(id, &input_config.lwip_mac_config.name[1], 10); - if (type == 0) + if (interface_type == 0) { input_config.lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_RGMII; } @@ -260,7 +273,15 @@ static int LwipDeviceSet(int argc, char *argv[]) { input_config.lwip_mac_config.mii_interface = LWIP_PORT_INTERFACE_SGMII; } - + if (driver_type == 0) + { + input_config.lwip_mac_config.driver_type = LWIP_PORT_TYPE_XMAC; + } + else + { + input_config.lwip_mac_config.driver_type = LWIP_PORT_TYPE_GMAC; + } + LwipTest(&input_config); } else if (!strcmp(argv[1], "deinit")) @@ -288,7 +309,8 @@ static int LwipDeviceSet(int argc, char *argv[]) } else { - printf("Please enter lwip probe \r\n") ; + printf("Please enter lwip probe \r\n") ; + printf(" -- driver id is driver type set, 0 is xmac ,1 is gmac \r\n"); printf(" -- device id is mac instance number \r\n"); printf(" -- interface id is media independent interface , 0 is rgmii ,1 is sgmii \r\n"); printf(" -- dhcp_en is dhcp function set ,1 is enable ,0 is disable .But this depends on whether the protocol stack supports it "); diff --git a/example/peripheral/adc/configs/e2000d_aarch32_eg_configs b/example/peripheral/adc/configs/e2000d_aarch32_eg_configs index 73fd6a993991382171286c558dd40e8362543749..64829d6fa19d592f489c30bbb1b292a72219d053 100644 --- a/example/peripheral/adc/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/adc/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_ADC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/adc/configs/e2000d_aarch64_eg_configs b/example/peripheral/adc/configs/e2000d_aarch64_eg_configs index 40374c48b74e4a0b3e630e0d6bc824f35d5e6561..f458f77d12c08902a7462b85bd0188eacec659fa 100644 --- a/example/peripheral/adc/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/adc/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_ADC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/adc/sdkconfig b/example/peripheral/adc/sdkconfig index 40374c48b74e4a0b3e630e0d6bc824f35d5e6561..f458f77d12c08902a7462b85bd0188eacec659fa 100644 --- a/example/peripheral/adc/sdkconfig +++ b/example/peripheral/adc/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_ADC=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/adc/sdkconfig.h b/example/peripheral/adc/sdkconfig.h index fe77dd5b6e85f336b3e80fd9d1fc790f4479bb8a..151484cd55638fa9e5563d8bdd2e15a9a1b2e8f7 100644 --- a/example/peripheral/adc/sdkconfig.h +++ b/example/peripheral/adc/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -76,18 +75,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -185,6 +192,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -207,6 +219,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/can/README.md b/example/peripheral/can/README.md index db190b516cc7c84e49f4a15d0056737b8592d8ee..6870bd216acf42fe95de84108300877d42b73e5d 100644 --- a/example/peripheral/can/README.md +++ b/example/peripheral/can/README.md @@ -35,7 +35,7 @@ ## 2. 如何使用例程 本例程需要用到 -- Phytium开发板(E2000D/E2000Q) +- Phytium开发板(E2000D/E2000Q/D2000/FT2000-4) - [Phytium freeRTOS SDK](https://gitee.com/phytium_embedded/phytium-free-rtos-sdk) - [Phytium standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk) ### 2.1 硬件配置方法 diff --git a/example/peripheral/can/configs/d2000_aarch32_eg_configs b/example/peripheral/can/configs/d2000_aarch32_eg_configs index 0048e11c939264e627a59ec781295207bc47c12f..cad52ee3841eefc3193f7d025635967354d92245 100644 --- a/example/peripheral/can/configs/d2000_aarch32_eg_configs +++ b/example/peripheral/can/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/configs/d2000_aarch64_eg_configs b/example/peripheral/can/configs/d2000_aarch64_eg_configs index ebfaea05823c3d1f488029b18665cfce1b044303..b201641f3ffbe13cc44b70e305a1ad73dbff157f 100644 --- a/example/peripheral/can/configs/d2000_aarch64_eg_configs +++ b/example/peripheral/can/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/configs/e2000d_aarch32_eg_configs b/example/peripheral/can/configs/e2000d_aarch32_eg_configs index aff6d75cc6fa978a0dae3f0efb2d9a418e7f220e..50c52dbe47e8519bf13340145302f5ee0a816945 100644 --- a/example/peripheral/can/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/can/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -219,6 +229,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -244,6 +260,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/configs/e2000d_aarch64_eg_configs b/example/peripheral/can/configs/e2000d_aarch64_eg_configs index 9c3cf90544f6c1b19ebcbf6def7ac59ce5ea2281..6743ad28779acd57bc386c7f58dba4a4625d6b46 100644 --- a/example/peripheral/can/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/can/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -215,6 +225,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,6 +256,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/configs/e2000q_aarch32_eg_configs b/example/peripheral/can/configs/e2000q_aarch32_eg_configs index 65cbe46676580db3123e136bd72435b8d45d8ccd..8d71d5c2256aeabc9f7d4c65c5bdc3a84a0b5119 100644 --- a/example/peripheral/can/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/can/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -219,6 +229,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -244,6 +260,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/configs/e2000q_aarch64_eg_configs b/example/peripheral/can/configs/e2000q_aarch64_eg_configs index 09528fe1748e735044744782a1687980d66e7eb2..947150f61f8061751dc780e8e2bbfd778d49860d 100644 --- a/example/peripheral/can/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/can/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -215,6 +225,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,6 +256,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/configs/ft2004_aarch32_eg_configs b/example/peripheral/can/configs/ft2004_aarch32_eg_configs index 8ebd7f884133c00258d31fc5ad2c40cdd65d5e08..c243af4aadea516baa8760e25becbcabba37f87c 100644 --- a/example/peripheral/can/configs/ft2004_aarch32_eg_configs +++ b/example/peripheral/can/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/configs/ft2004_aarch64_eg_configs b/example/peripheral/can/configs/ft2004_aarch64_eg_configs index 8d34fac80663c02313ec7277381a9d0147b522ec..6a2a229fe200563181f85cb76c5558563a115c6e 100644 --- a/example/peripheral/can/configs/ft2004_aarch64_eg_configs +++ b/example/peripheral/can/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/sdkconfig b/example/peripheral/can/sdkconfig index 09528fe1748e735044744782a1687980d66e7eb2..947150f61f8061751dc780e8e2bbfd778d49860d 100644 --- a/example/peripheral/can/sdkconfig +++ b/example/peripheral/can/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -215,6 +225,12 @@ CONFIG_FREERTOS_USE_CAN=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,6 +256,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/can/sdkconfig.h b/example/peripheral/can/sdkconfig.h index f5022f221ef0f1a7c5ea33c33dfecc1dbba9b337..cd3c521624b9d942f318b02ecf024a32f7941cfe 100644 --- a/example/peripheral/can/sdkconfig.h +++ b/example/peripheral/can/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -77,18 +76,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -186,6 +193,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -208,6 +220,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/dma/ddma/configs/e2000d_aarch32_eg_configs b/example/peripheral/dma/ddma/configs/e2000d_aarch32_eg_configs index 91c7f367ea5804f10c867f753909054215f05515..2bf7be8d9aa8d4748cee4aba5b8c06c5a291ca91 100644 --- a/example/peripheral/dma/ddma/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/dma/ddma/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -81,18 +80,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_FDDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/ddma/configs/e2000d_aarch64_eg_configs b/example/peripheral/dma/ddma/configs/e2000d_aarch64_eg_configs index cdea2b9fc0693151a438e5548e3759f1ea67e719..2f79af3a6c179aac922a22df4c1b829f6e6a2b71 100644 --- a/example/peripheral/dma/ddma/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/dma/ddma/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -81,18 +80,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -210,6 +220,12 @@ CONFIG_FREERTOS_USE_FDDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -235,6 +251,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/ddma/configs/e2000q_aarch32_eg_configs b/example/peripheral/dma/ddma/configs/e2000q_aarch32_eg_configs index 76d1219446a574ec0e5cda542e30ac0bb0ebe39c..4f02d9152a772b072ae3829267f62cf378c0d814 100644 --- a/example/peripheral/dma/ddma/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/dma/ddma/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -81,18 +80,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_FDDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/ddma/configs/e2000q_aarch64_eg_configs b/example/peripheral/dma/ddma/configs/e2000q_aarch64_eg_configs index 5cc178ee3c5e0bcc99fd5c1632ece8cdd32f398a..f7d7ea58d7a8300c534f054635765c87c573d174 100644 --- a/example/peripheral/dma/ddma/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/dma/ddma/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -81,18 +80,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -210,6 +220,12 @@ CONFIG_FREERTOS_USE_FDDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -235,6 +251,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/ddma/sdkconfig b/example/peripheral/dma/ddma/sdkconfig index 5cc178ee3c5e0bcc99fd5c1632ece8cdd32f398a..f7d7ea58d7a8300c534f054635765c87c573d174 100644 --- a/example/peripheral/dma/ddma/sdkconfig +++ b/example/peripheral/dma/ddma/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -81,18 +80,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -210,6 +220,12 @@ CONFIG_FREERTOS_USE_FDDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -235,6 +251,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/ddma/sdkconfig.h b/example/peripheral/dma/ddma/sdkconfig.h index 04b2e7dd9956a682064a3c3342db09ba4e5ebf24..99d2ec045e3a619b3324150e00c1ce8e12b0bfcf 100644 --- a/example/peripheral/dma/ddma/sdkconfig.h +++ b/example/peripheral/dma/ddma/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -74,18 +73,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -183,6 +190,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -205,6 +217,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/dma/gdma/configs/e2000d_aarch32_eg_configs b/example/peripheral/dma/gdma/configs/e2000d_aarch32_eg_configs index 61153addda803477c5a4bbaa0ae72ab12a100a93..47c5f73e64c27a10e72744dbc2ab101853ff42b1 100644 --- a/example/peripheral/dma/gdma/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/dma/gdma/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -213,6 +223,12 @@ CONFIG_FREERTOS_USE_FGDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -238,6 +254,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/gdma/configs/e2000d_aarch64_eg_configs b/example/peripheral/dma/gdma/configs/e2000d_aarch64_eg_configs index 006b15623575d6b7c4ab1ab7c8d08db729bea30a..f048ca7168b6ffff206356633c64f9bbf07d2bb3 100644 --- a/example/peripheral/dma/gdma/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/dma/gdma/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -209,6 +219,12 @@ CONFIG_FREERTOS_USE_FGDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -234,6 +250,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/gdma/configs/e2000q_aarch32_eg_configs b/example/peripheral/dma/gdma/configs/e2000q_aarch32_eg_configs index 62660af6dc87bf7819a4e70a614c7de474cee642..5a0486716604b05390aa4d387915619c01595791 100644 --- a/example/peripheral/dma/gdma/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/dma/gdma/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -213,6 +223,12 @@ CONFIG_FREERTOS_USE_FGDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -238,6 +254,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/gdma/configs/e2000q_aarch64_eg_configs b/example/peripheral/dma/gdma/configs/e2000q_aarch64_eg_configs index 08b6dd2462631dd5a92e7d415bfef498ef6d1712..80a2dad50e73ef45cca36c42fc36b192b9b9f45b 100644 --- a/example/peripheral/dma/gdma/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/dma/gdma/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -209,6 +219,12 @@ CONFIG_FREERTOS_USE_FGDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -234,6 +250,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/gdma/sdkconfig b/example/peripheral/dma/gdma/sdkconfig index 08b6dd2462631dd5a92e7d415bfef498ef6d1712..80a2dad50e73ef45cca36c42fc36b192b9b9f45b 100644 --- a/example/peripheral/dma/gdma/sdkconfig +++ b/example/peripheral/dma/gdma/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -209,6 +219,12 @@ CONFIG_FREERTOS_USE_FGDMA=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -234,6 +250,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/dma/gdma/sdkconfig.h b/example/peripheral/dma/gdma/sdkconfig.h index 4f3f9af4a8e049a34fcba4bffa2fb2573353d95d..830d1aee903471ba3cf7e621d59497e99a715ea1 100644 --- a/example/peripheral/dma/gdma/sdkconfig.h +++ b/example/peripheral/dma/gdma/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -73,18 +72,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ #define CONFIG_LOG_EXTRA_INFO /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -182,6 +189,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -204,6 +216,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/gpio/configs/e2000d_aarch32_eg_configs b/example/peripheral/gpio/configs/e2000d_aarch32_eg_configs index 598a1db91fbe10683c845964cfe4d57cfab47da3..fdce99f6da1a66ad5e748b2a6bee86d673e73b1a 100644 --- a/example/peripheral/gpio/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/gpio/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,18 +78,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -212,6 +222,12 @@ CONFIG_FREERTOS_USE_GPIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -237,6 +253,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/gpio/configs/e2000d_aarch64_eg_configs b/example/peripheral/gpio/configs/e2000d_aarch64_eg_configs index 1284f1be5cff4fe00329ee545f17a0690700673d..5deefca66eeac027d2c1020937af9296c529f5a9 100644 --- a/example/peripheral/gpio/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/gpio/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,18 +78,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_GPIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +249,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/gpio/configs/e2000q_aarch32_eg_configs b/example/peripheral/gpio/configs/e2000q_aarch32_eg_configs index 1ddf23f15b762826db9b3c34c83847086c113bcb..e823f2d7fd12364c1b01baab3ef7f638dfcc5dc6 100644 --- a/example/peripheral/gpio/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/gpio/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,18 +78,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -212,6 +222,12 @@ CONFIG_FREERTOS_USE_GPIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -237,6 +253,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/gpio/configs/e2000q_aarch64_eg_configs b/example/peripheral/gpio/configs/e2000q_aarch64_eg_configs index be8f0c2ea5b21d0074266a9ecd2ef32fd437a27e..0c2ae14a68c43de176b2a7640ff6f526986345f9 100644 --- a/example/peripheral/gpio/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/gpio/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,18 +78,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_GPIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +249,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/gpio/sdkconfig b/example/peripheral/gpio/sdkconfig index be8f0c2ea5b21d0074266a9ecd2ef32fd437a27e..0c2ae14a68c43de176b2a7640ff6f526986345f9 100644 --- a/example/peripheral/gpio/sdkconfig +++ b/example/peripheral/gpio/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,18 +78,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_GPIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +249,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/gpio/sdkconfig.h b/example/peripheral/gpio/sdkconfig.h index cf8946daf9da356ab8c5e5c3ba6d27e84280b22d..221d7ad385719f75e1f29debb92a676c8d9ce39b 100644 --- a/example/peripheral/gpio/sdkconfig.h +++ b/example/peripheral/gpio/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -72,18 +71,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ #define CONFIG_LOG_EXTRA_INFO /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -181,6 +188,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -203,6 +215,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/i2c/configs/d2000_aarch32_eg_configs b/example/peripheral/i2c/configs/d2000_aarch32_eg_configs index 86491040fcc921b775bc5ce5d78806e8713e8911..8ec1a35c92812428ed27970c309fbe85ba14c864 100644 --- a/example/peripheral/i2c/configs/d2000_aarch32_eg_configs +++ b/example/peripheral/i2c/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_I2C=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/i2c/configs/d2000_aarch64_eg_configs b/example/peripheral/i2c/configs/d2000_aarch64_eg_configs index f65782ad0da97a3f2759df71a9b34215e1198c7a..6904217b49cc51889f799e7bb9602aff61ae170f 100644 --- a/example/peripheral/i2c/configs/d2000_aarch64_eg_configs +++ b/example/peripheral/i2c/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y # CONFIG_USE_L3CACHE is not set CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_I2C=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/i2c/configs/e2000d_aarch32_eg_configs b/example/peripheral/i2c/configs/e2000d_aarch32_eg_configs index 1c63fb90e889d56a42f46f3304eb7b10f0f55fa4..d7d79696f52ac2d41b73f021d5c6cd28d434e929 100644 --- a/example/peripheral/i2c/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/i2c/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -219,6 +229,12 @@ CONFIG_FREERTOS_USE_MIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -244,6 +260,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/i2c/configs/e2000d_aarch64_eg_configs b/example/peripheral/i2c/configs/e2000d_aarch64_eg_configs index 48928e771e4715688a40c44e013f2d1f2df34d6f..01f22e8ebbe6d04384a5ce85e276710355662000 100644 --- a/example/peripheral/i2c/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/i2c/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -215,6 +225,12 @@ CONFIG_FREERTOS_USE_MIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,6 +256,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/i2c/configs/e2000q_aarch32_eg_configs b/example/peripheral/i2c/configs/e2000q_aarch32_eg_configs index 36d8874b69ff3b4c255519a202356c8255806ab5..161f5a4f0f0fd6d4d24d1c4b33132c9fab081805 100644 --- a/example/peripheral/i2c/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/i2c/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -219,6 +229,12 @@ CONFIG_FREERTOS_USE_MIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -244,6 +260,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/i2c/configs/e2000q_aarch64_eg_configs b/example/peripheral/i2c/configs/e2000q_aarch64_eg_configs index a6c646a6fd4c9df3e9c1658f387c3e2d5d996c3a..2a84a25568ab69db6561f9d0ec1d8b17a9dd1ef5 100644 --- a/example/peripheral/i2c/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/i2c/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -215,6 +225,12 @@ CONFIG_FREERTOS_USE_MIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,6 +256,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/i2c/sdkconfig b/example/peripheral/i2c/sdkconfig index a6c646a6fd4c9df3e9c1658f387c3e2d5d996c3a..2a84a25568ab69db6561f9d0ec1d8b17a9dd1ef5 100644 --- a/example/peripheral/i2c/sdkconfig +++ b/example/peripheral/i2c/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,18 +85,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -215,6 +225,12 @@ CONFIG_FREERTOS_USE_MIO=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -240,6 +256,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/i2c/sdkconfig.h b/example/peripheral/i2c/sdkconfig.h index 7d28e515ab6eef5c7f0c5f937b4b739496175709..cb0047d262483eb67349e9ffc1514d39f1797fdc 100644 --- a/example/peripheral/i2c/sdkconfig.h +++ b/example/peripheral/i2c/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -77,18 +76,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -186,6 +193,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -208,6 +220,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/media/lvgl_demo/Kconfig b/example/peripheral/media/lvgl_demo/Kconfig new file mode 100644 index 0000000000000000000000000000000000000000..0277fb8553f2132f097012a78633194f6173c156 --- /dev/null +++ b/example/peripheral/media/lvgl_demo/Kconfig @@ -0,0 +1,19 @@ +# +# For a description of the syntax of this configuration file, +# see tools/kconfiglib/kconfig-language.txt. +# + + +mainmenu "Phytium Freertos Configuration" + + menu "Freertos Configuration" + config TARGET_NAME + string "Build Target Name" + default "freertos" + help + Build Target name for the demo + +endmenu + +source "$(FREERTOS_SDK_ROOT)/Kconfig" + diff --git a/example/peripheral/media/lvgl_demo/README.md b/example/peripheral/media/lvgl_demo/README.md new file mode 100644 index 0000000000000000000000000000000000000000..69da2b7c692bf6f7d817258f31d39522ea1ec08d --- /dev/null +++ b/example/peripheral/media/lvgl_demo/README.md @@ -0,0 +1,155 @@ +# media lvgl demo测试 + +## 1. 例程介绍 + +>介绍例程的用途,使用场景,相关基本概念,描述用户可以使用例程完成哪些工作 + +DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数据,按照 Display 协议处理后送给 DP PHY 接入显示器。 + +本司E2000系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 +本例程主要展示本司E2000系列芯片DC显示驱动功能以及lvgl中benchmark, stress以及widgets例程的操作。 + +lvgl中benchmark是一个基准测试,用来测试硬件平台的性能和驱动支持buufer刷新能力,主要是测试屏幕刷新的流畅度以及帧率。 + +lvgl中stress例程属于压力测试,在demo配置中,例程会创建较多组件来测试硬件运行lvgl的能力,以及驱动的稳定性。 + +lvgl中widgets属于组件测试,将lvgl中库组件组合运行,此demo属于大型demo,对内存消耗较大,lv_mem_size建议设置较大值,例如64*1024。 + +本例程支持的cmd包括 + +- md,读取一段内存的值 +- mw,修改一段内存的值 +- reboot, 重启baremetal运行环境 +- test, 展示如何通过shell获取用户输入参数 + +## 2. 如何使用例程 + +>描述开发平台准备,使用例程配置,构建和下载镜像的过程
+ +本例程需要用到 + +- Phytium开发板(E2000Q) +- 显示器及连接线 +- [Phytium Standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk) + +### 2.1 硬件配置方法 + +>哪些硬件平台是支持的,需要哪些外设,例程与开发板哪些IO口相关等(建议附录开发板照片,展示哪些IO口被引出)
+ +本例程支持的硬件平台包括 + +- E2000Q AARCH32/AARCH64 +- E2000D AARCH32/AARCH64 + +本例程所需的硬件设备包括 + +- 通过DP线将显示器与E2000板卡连接 +- 利用串口调试线连接板卡和调试电脑,波特率设为 115200-8-1-N + +### 2.2 SDK配置方法 + +>依赖哪些驱动、库和第三方组件,如何完成配置(列出需要使能的关键配置项)
+ + +- 本例子已经提供好具体的编译指令,以下进行介绍: + 1. make 将目录下的工程进行编译 + 2. make clean 将目录下的工程进行清理 + 3. make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址 + 4. make load_e2000q_aarch64 将预设64bit e2000q 下的配置加载至工程中 + 5. make load_e2000q_aarch32 将预设32bit e2000q 下的配置加载至工程中 + 6. make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中 + 7. make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中 + 8. make menuconfig 配置目录下的参数变量 + 9. make build_all 编译目录下的项目工程 + 10. make backup_kconfig 将目录下的sdkconfig 备份到./configs下 + +- 具体使用方法为: + - 在当前目录下 + - 执行以上指令 + +### 2.3 构建和下载 + +>描述构建、烧录下载镜像的过程,列出相关的命令
+ +#### 2.3.1 构建过程 + +- 在host侧完成配置 + +>配置成E2000,对于其它平台,使用对应的默认配置 +``` +$ make load_e2000q_aarch32 +$ make menuconfig + +- 在host侧完成构建 +``` +- 选择即将要运行的例程 + +![demo_select](fig/demo_select.png) + +选定demo例程后, 利用2.2 SDK配置方法进行编译下载,默认demo为benchmark,色深设置为32 + +目前在menuconfig中支持配置demo选择以及色深设置,其余设置值为third-party/lvgl-8.3/lv_conf.c设置默认值 + +在使用过程中, 使用者可根据实际硬件情况以及需要,在third-party/lvgl-8.3/lv_conf.c中进行相应组件配置。 + +#### 2.3.2 下载过程 + +- host侧设置重启host侧tftp服务器 +``` +sudo service tftpd-hpa restart +``` +- 开发板侧使用bootelf命令跳转 +``` +setenv ipaddr 192.168.4.20 +setenv serverip 192.168.4.50 +setenv gatewayip 192.168.4.1 +tftpboot 0x90100000 baremetal.elf +bootelf -p 0x90100000 +``` +### 2.4 输出与实验现象 + +>描述输入输出情况,列出存在哪些输出,对应的输出是什么(建议附录相关现象图片)
+ +- 启动进入letter shell界面,按TAB键打印Command list + +![letter show](fig/letter_shell.jpg) + +![media_cmd](fig/media_cmd.png) + +#### 2.4.1 初始化硬件设备控制器 + +Media init 2 640 480 2 32 60 + +2 : 通道号 +640 : 宽 +480 : 高 +2 :模式(克隆,水平,垂直) +32 :色深 +60 :刷新率 + +![init](fig/media_init.png) + +#### 2.4.2 example测试 + +Media demo + +![demo_cmd](fig/demo_cmd.png) + +![benchmark](fig/lvgl_benchmark.jpg) + +![stress](fig/lvgl_stress.jpg) + +![widgets](fig/lvgl_widgets.jpg) + + +## 3. 如何解决问题 + +>主要记录使用例程中可能会遇到的问题,给出相应的解决方案
+ +## 4. 修改历史记录 + +>记录例程的重大修改记录,标明修改发生的版本号
+ +- 2022-12-6 :v0.0.1 添加example +- 2023-03-03: v0.0.2 添加多屏 + diff --git a/example/peripheral/media/lvgl_demo/configs/e2000d_aarch32_eg_configs b/example/peripheral/media/lvgl_demo/configs/e2000d_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..1379c81977ca4ed73272d0395ea56e3411d3199d --- /dev/null +++ b/example/peripheral/media/lvgl_demo/configs/e2000d_aarch32_eg_configs @@ -0,0 +1,579 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +CONFIG_BOOT_WITH_FLUSH_CACHE=y +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +CONFIG_LV_CONF_MINIMAL=y + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=128 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +CONFIG_LV_USE_DEMO_BENCHMARK=y +# CONFIG_LV_DEMO_BENCHMARK_RGB565A8 is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_demo/configs/e2000d_aarch64_eg_configs b/example/peripheral/media/lvgl_demo/configs/e2000d_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..d6398d8e9310115b9be0d6f71b899df66d170854 --- /dev/null +++ b/example/peripheral/media/lvgl_demo/configs/e2000d_aarch64_eg_configs @@ -0,0 +1,575 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +CONFIG_BOOT_WITH_FLUSH_CACHE=y +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +CONFIG_LV_CONF_MINIMAL=y + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=128 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +CONFIG_LV_USE_DEMO_BENCHMARK=y +# CONFIG_LV_DEMO_BENCHMARK_RGB565A8 is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_demo/configs/e2000q_aarch32_eg_configs b/example/peripheral/media/lvgl_demo/configs/e2000q_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..07111ff63da16b02c0d5b8f1ff3aaf6dd444e479 --- /dev/null +++ b/example/peripheral/media/lvgl_demo/configs/e2000q_aarch32_eg_configs @@ -0,0 +1,579 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +CONFIG_BOOT_WITH_FLUSH_CACHE=y +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +CONFIG_LV_CONF_MINIMAL=y + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=128 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +CONFIG_LV_USE_DEMO_BENCHMARK=y +# CONFIG_LV_DEMO_BENCHMARK_RGB565A8 is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_demo/configs/e2000q_aarch64_eg_configs b/example/peripheral/media/lvgl_demo/configs/e2000q_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..d9d7ce1d1b89f61fff22231e5561f09418f259ee --- /dev/null +++ b/example/peripheral/media/lvgl_demo/configs/e2000q_aarch64_eg_configs @@ -0,0 +1,575 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +CONFIG_BOOT_WITH_FLUSH_CACHE=y +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +CONFIG_LV_CONF_MINIMAL=y + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=128 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +CONFIG_LV_USE_DEMO_BENCHMARK=y +# CONFIG_LV_DEMO_BENCHMARK_RGB565A8 is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_demo/fig/demo_cmd.png b/example/peripheral/media/lvgl_demo/fig/demo_cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..5351b0dfb9656a94ad6e2bc8f1cf87935b5c5aa3 Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/demo_cmd.png differ diff --git a/example/peripheral/media/lvgl_demo/fig/demo_select.png b/example/peripheral/media/lvgl_demo/fig/demo_select.png new file mode 100644 index 0000000000000000000000000000000000000000..5b69566ff19de9583ab00635c60af4655e6d0f93 Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/demo_select.png differ diff --git a/example/peripheral/media/lvgl_demo/fig/fmedia_lib.jpg b/example/peripheral/media/lvgl_demo/fig/fmedia_lib.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1e418ef5b01281dd387c2d2e278910f14fadb7a Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/fmedia_lib.jpg differ diff --git a/example/peripheral/media/lvgl_demo/fig/letter_shell.jpg b/example/peripheral/media/lvgl_demo/fig/letter_shell.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40b389813866a3a2693fc10ac0469577580ab173 Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/letter_shell.jpg differ diff --git a/example/peripheral/media/lvgl_demo/fig/lvgl_benchmark.jpg b/example/peripheral/media/lvgl_demo/fig/lvgl_benchmark.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d42fcecb14576f1e48f1c4485332c92ba381cead Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/lvgl_benchmark.jpg differ diff --git a/example/peripheral/media/lvgl_demo/fig/lvgl_stress.jpg b/example/peripheral/media/lvgl_demo/fig/lvgl_stress.jpg new file mode 100644 index 0000000000000000000000000000000000000000..12a10df352dc74cab7691c75ed2bdf284bc93566 Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/lvgl_stress.jpg differ diff --git a/example/peripheral/media/lvgl_demo/fig/lvgl_widgets.jpg b/example/peripheral/media/lvgl_demo/fig/lvgl_widgets.jpg new file mode 100644 index 0000000000000000000000000000000000000000..526c047e6b7c0b8b9906ad740c1ebb873933a043 Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/lvgl_widgets.jpg differ diff --git a/example/peripheral/media/lvgl_demo/fig/media_cmd.png b/example/peripheral/media/lvgl_demo/fig/media_cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..1a00c0e15863b2ec158d5f0782aa5126d9704a80 Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/media_cmd.png differ diff --git a/example/peripheral/media/lvgl_demo/fig/media_init.png b/example/peripheral/media/lvgl_demo/fig/media_init.png new file mode 100644 index 0000000000000000000000000000000000000000..66cc70d91981cb55dfc7d27059de727ab01879a9 Binary files /dev/null and b/example/peripheral/media/lvgl_demo/fig/media_init.png differ diff --git a/example/peripheral/media/lvgl_demo/inc/lv_demo_creat.h b/example/peripheral/media/lvgl_demo/inc/lv_demo_creat.h new file mode 100644 index 0000000000000000000000000000000000000000..1f3ec19ed7be8be0dc7d6ce477ff031a492d435d --- /dev/null +++ b/example/peripheral/media/lvgl_demo/inc/lv_demo_creat.h @@ -0,0 +1,66 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * FilePath: lv_demo_creat.h + * Date: 2023-02-05 18:27:47 + * LastEditTime: 2023-03-20 11:02:47 + * Description: This file is for providing the lvgl demo config + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/03/20 Modify the format and establish the version + */ + + +#ifndef LV_DEMO_CREAT_H +#define LV_DEMO_CREAT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#else +#include "lvgl-8.3/lvgl.h" +#endif + +/*creat the media demo init task*/ +BaseType_t FFreeRTOSlVGLDemoCreate(void); + +/*creat the media init task*/ +BaseType_t FFreeRTOSMediaInitCreate(void *args); + +#if LV_USE_DEMO_BENCHMARK +/*the benchmark demo of lvgl*/ +void benchmark(void); +#endif + +#if LV_USE_DEMO_WIDGETS +/*the widgets demo*/ +void widgets(void); +#endif + +#if LV_USE_DEMO_STRESS +/*the stress demo*/ +void stress(void); +#endif + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*LV_PORT_DISP_TEMPL_H*/ \ No newline at end of file diff --git a/example/peripheral/media/lvgl_demo/main.c b/example/peripheral/media/lvgl_demo/main.c new file mode 100644 index 0000000000000000000000000000000000000000..fcada8ae1f17eb2651d964217a45ec8e9c57721b --- /dev/null +++ b/example/peripheral/media/lvgl_demo/main.c @@ -0,0 +1,47 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: main.c + * Date: 2022-08-25 16:22:40 + * LastEditTime: 2022-12-20 15:40:40 + * Description: This file is for providing the shell entrance + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + * 1.1 Wangzq 2023/03/03 Add the multi-display config + */ + +#include "shell.h" +#include "shell_port.h" +#include + +int main(void) +{ + BaseType_t ret; + + ret = LSUserShellTask(); + if (ret != pdPASS) + { + goto FAIL_EXIT; + } + + vTaskStartScheduler(); /* 启动任务,开启调度 */ + while (1) + ; /* 正常不会执行到这里 */ + +FAIL_EXIT: + printf("failed 0x%x \r\n", ret); + return 0; +} diff --git a/example/peripheral/media/lvgl_demo/makefile b/example/peripheral/media/lvgl_demo/makefile new file mode 100644 index 0000000000000000000000000000000000000000..5863e71fa4797e1e3b1efec2fb551595b6c34460 --- /dev/null +++ b/example/peripheral/media/lvgl_demo/makefile @@ -0,0 +1,32 @@ +export PROJECT_DIR ?= $(shell pwd) + +export USR_SRC_DIR = $(PROJECT_DIR) \ + ./src\ + +export USR_INC_DIR = $(PROJECT_DIR) \ + ./inc\ + +# 用户定义的编译目标文件上传路径 +ifeq ($(OS),Windows_NT) + USR_BOOT_DIR ?= $(subst \,/, $(PHYTIUM_DEV_PATH))/tftp +else + USR_BOOT_DIR ?= /mnt/d/tftboot +endif + + +# 设置启动镜像名 +BOOT_IMG_NAME ?= freertos + +# 指定编译freertos项目使用的makefile +include $(FREERTOS_SDK_ROOT)/make/build_freertos.mk + +# 完成编译 +boot: + make -j + @cp ./$(CONFIG_TARGET_NAME).elf $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).elf +ifdef CONFIG_OUTPUT_BINARY + @cp ./$(CONFIG_TARGET_NAME).bin $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).bin +endif + @ls $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).* -l + + diff --git a/example/peripheral/media/lvgl_demo/sdkconfig b/example/peripheral/media/lvgl_demo/sdkconfig new file mode 100644 index 0000000000000000000000000000000000000000..d9d7ce1d1b89f61fff22231e5561f09418f259ee --- /dev/null +++ b/example/peripheral/media/lvgl_demo/sdkconfig @@ -0,0 +1,575 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +CONFIG_BOOT_WITH_FLUSH_CACHE=y +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +CONFIG_LV_CONF_MINIMAL=y + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=128 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +CONFIG_LV_USE_DEMO_BENCHMARK=y +# CONFIG_LV_DEMO_BENCHMARK_RGB565A8 is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_demo/sdkconfig.h b/example/peripheral/media/lvgl_demo/sdkconfig.h new file mode 100644 index 0000000000000000000000000000000000000000..d816cf135095045ef973d349e89ecf87f63c6036 --- /dev/null +++ b/example/peripheral/media/lvgl_demo/sdkconfig.h @@ -0,0 +1,516 @@ +#ifndef SDK_CONFIG_H__ +#define SDK_CONFIG_H__ + +/* Freertos Configuration */ + +#define CONFIG_TARGET_NAME "freertos" +/* end of Freertos Configuration */ + +/* Standalone Setting */ + +#define CONFIG_USE_FREERTOS + +/* Arch Configuration */ + +/* CONFIG_TARGET_ARMV8_AARCH32 is not set */ +#define CONFIG_TARGET_ARMV8_AARCH64 +#define CONFIG_USE_CACHE +#define CONFIG_USE_MMU +/* CONFIG_MMU_DEBUG_PRINTS is not set */ +#define CONFIG_BOOT_WITH_FLUSH_CACHE +/* end of Arch Configuration */ + +/* Board Configuration */ + +/* CONFIG_TARGET_F2000_4 is not set */ +/* CONFIG_TARGET_D2000 is not set */ +#define CONFIG_TARGET_E2000Q +/* CONFIG_TARGET_E2000D is not set */ +/* CONFIG_TARGET_E2000S is not set */ +#define CONFIG_TARGET_E2000 +#define CONFIG_DEFAULT_DEBUG_PRINT_UART1 +/* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ +/* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* end of Board Configuration */ + +/* Components Configuration */ + +/* CONFIG_USE_SPI is not set */ +/* CONFIG_USE_QSPI is not set */ +#define CONFIG_USE_GIC +#define CONFIG_ENABLE_GICV3 +#define CONFIG_USE_SERIAL + +/* Usart Configuration */ + +#define CONFIG_ENABLE_Pl011_UART +/* end of Usart Configuration */ +/* CONFIG_USE_GPIO is not set */ +/* CONFIG_USE_ETH is not set */ +/* CONFIG_USE_CAN is not set */ +/* CONFIG_USE_I2C is not set */ +/* CONFIG_USE_TIMER is not set */ +/* CONFIG_USE_MIO is not set */ +/* CONFIG_USE_SDMMC is not set */ +/* CONFIG_USE_PCIE is not set */ +/* CONFIG_USE_WDT is not set */ +/* CONFIG_USE_DMA is not set */ +/* CONFIG_USE_NAND is not set */ +/* CONFIG_USE_RTC is not set */ +/* CONFIG_USE_SATA is not set */ +/* CONFIG_USE_USB is not set */ +/* CONFIG_USE_ADC is not set */ +/* CONFIG_USE_PWM is not set */ +/* CONFIG_USE_IPC is not set */ +#define CONFIG_USE_MEDIA + +/* Media Configuration */ + +/* CONFIG_ENABLE_FDC_DP is not set */ +#define CONFIG_ENABLE_FDC_DP_USE_LIB +/* end of Media Configuration */ +/* CONFIG_USE_SCMI_MHU is not set */ +/* end of Components Configuration */ +#define CONFIG_USE_NEW_LIBC +/* end of Standalone Setting */ + +/* Building Option */ + +/* SDK common configuration */ + +/* CONFIG_LOG_VERBOS is not set */ +#define CONFIG_LOG_DEBUG +/* CONFIG_LOG_INFO is not set */ +/* CONFIG_LOG_WARN is not set */ +/* CONFIG_LOG_ERROR is not set */ +/* CONFIG_LOG_NONE is not set */ +/* CONFIG_LOG_EXTRA_INFO is not set */ +/* CONFIG_LOG_DISPALY_CORE_NUM is not set */ +/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of SDK common configuration */ + +/* Linker Options */ + +/* CONFIG_AARCH32_RAM_LD is not set */ +#define CONFIG_AARCH64_RAM_LD +/* CONFIG_USER_DEFINED_LD is not set */ +#define CONFIG_LINK_SCRIPT_ROM +#define CONFIG_ROM_START_UP_ADDR 0x80100000 +#define CONFIG_ROM_SIZE_MB 2 +#define CONFIG_LINK_SCRIPT_RAM +#define CONFIG_RAM_START_UP_ADDR 0x81000000 +#define CONFIG_RAM_SIZE_MB 64 +#define CONFIG_HEAP_SIZE 1 +#define CONFIG_STACK_SIZE 0x100000 +#define CONFIG_FPU_STACK_SIZE 0x1000 +/* end of Linker Options */ + +/* Compiler Options */ + +/* Cross-Compiler Setting */ + +#define CONFIG_GCC_OPTIMIZE_LEVEL 0 +/* CONFIG_USE_EXT_COMPILER is not set */ +/* CONFIG_USE_KLIN_SYS is not set */ +/* end of Cross-Compiler Setting */ +#define CONFIG_OUTPUT_BINARY +/* end of Compiler Options */ +/* end of Building Option */ + +/* Component Configuration */ + +/* Freertos Uart Drivers */ + +#define CONFIG_FREERTOS_USE_UART +/* end of Freertos Uart Drivers */ + +/* Freertos Pwm Drivers */ + +/* CONFIG_FREERTOS_USE_PWM is not set */ +/* end of Freertos Pwm Drivers */ + +/* Freertos Qspi Drivers */ + +/* CONFIG_FREERTOS_USE_QSPI is not set */ +/* end of Freertos Qspi Drivers */ + +/* Freertos Wdt Drivers */ + +/* CONFIG_FREERTOS_USE_WDT is not set */ +/* end of Freertos Wdt Drivers */ + +/* Freertos Eth Drivers */ + +/* CONFIG_FREERTOS_USE_XMAC is not set */ +/* CONFIG_FREERTOS_USE_GMAC is not set */ +/* end of Freertos Eth Drivers */ + +/* Freertos Gpio Drivers */ + +/* CONFIG_FREERTOS_USE_GPIO is not set */ +/* end of Freertos Gpio Drivers */ + +/* Freertos Spim Drivers */ + +/* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* end of Freertos Spim Drivers */ + +/* Freertos DMA Drivers */ + +/* CONFIG_FREERTOS_USE_FDDMA is not set */ +/* CONFIG_FREERTOS_USE_FGDMA is not set */ +/* end of Freertos DMA Drivers */ + +/* Freertos Adc Drivers */ + +/* CONFIG_FREERTOS_USE_ADC is not set */ +/* end of Freertos Adc Drivers */ + +/* Freertos Can Drivers */ + +/* CONFIG_FREERTOS_USE_CAN is not set */ +/* end of Freertos Can Drivers */ + +/* Freertos I2c Drivers */ + +/* CONFIG_FREERTOS_USE_I2C is not set */ +/* end of Freertos I2c Drivers */ + +/* Freertos Mio Drivers */ + +/* CONFIG_FREERTOS_USE_MIO is not set */ +/* end of Freertos Mio Drivers */ + +/* Freertos Timer Drivers */ + +/* CONFIG_FREERTOS_USE_TIMER is not set */ +/* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +#define CONFIG_FREERTOS_USE_MEDIA +/* end of Freertos Media Drivers */ +/* end of Component Configuration */ + +/* Third-Party Configuration */ + +/* CONFIG_USE_LWIP is not set */ +#define CONFIG_USE_BACKTRACE +/* CONFIG_USE_FATFS_0_1_4 is not set */ +/* CONFIG_USE_SFUD is not set */ +/* CONFIG_USE_SPIFFS is not set */ +/* CONFIG_USE_AMP is not set */ +#define CONFIG_USE_LETTER_SHELL + +/* Letter Shell Configuration */ + +#define CONFIG_LS_PL011_UART +#define CONFIG_DEFAULT_LETTER_SHELL_USE_UART1 +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */ +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */ +/* end of Letter Shell Configuration */ +/* CONFIG_USE_TLSF is not set */ +/* CONFIG_USE_SDMMC_CMD is not set */ +/* CONFIG_USE_CHERRY_USB is not set */ +#define CONFIG_USE_LVGL + +/* LVGL configuration */ + +#define CONFIG_LV_CONF_SKIP +#define CONFIG_LV_CONF_MINIMAL + +/* Color settings */ + +#define CONFIG_LV_COLOR_DEPTH_32 +/* CONFIG_LV_COLOR_DEPTH_16 is not set */ +/* CONFIG_LV_COLOR_DEPTH_8 is not set */ +/* CONFIG_LV_COLOR_DEPTH_1 is not set */ +#define CONFIG_LV_COLOR_DEPTH 32 +#define CONFIG_LV_COLOR_MIX_ROUND_OFS 128 +#define CONFIG_LV_COLOR_CHROMA_KEY_HEX 0x00FF00 +/* end of Color settings */ + +/* Memory settings */ + +/* CONFIG_LV_MEM_CUSTOM is not set */ +#define CONFIG_LV_MEM_SIZE_KILOBYTES 32 +#define CONFIG_LV_MEM_ADDR 0x0 +#define CONFIG_LV_MEM_BUF_MAX_NUM 16 +/* CONFIG_LV_MEMCPY_MEMSET_STD is not set */ +/* end of Memory settings */ + +/* HAL Settings */ + +/* CONFIG_LV_TICK_CUSTOM is not set */ +#define CONFIG_LV_DPI_DEF 130 +/* end of HAL Settings */ + +/* Feature configuration */ + +/* Drawing */ + +#define CONFIG_LV_DRAW_COMPLEX +#define CONFIG_LV_SHADOW_CACHE_SIZE 0 +#define CONFIG_LV_CIRCLE_CACHE_SIZE 4 +#define CONFIG_LV_LAYER_SIMPLE_BUF_SIZE 24576 +#define CONFIG_LV_IMG_CACHE_DEF_SIZE 0 +#define CONFIG_LV_GRADIENT_MAX_STOPS 2 +#define CONFIG_LV_GRAD_CACHE_DEF_SIZE 0 +/* CONFIG_LV_DITHER_GRADIENT is not set */ +#define CONFIG_LV_DISP_ROT_MAX_BUF 10240 +/* end of Drawing */ + +/* GPU */ + +/* CONFIG_LV_USE_GPU_ARM2D is not set */ +/* CONFIG_LV_USE_GPU_STM32_DMA2D is not set */ +/* CONFIG_LV_USE_GPU_SWM341_DMA2D is not set */ +/* CONFIG_LV_USE_GPU_NXP_PXP is not set */ +/* CONFIG_LV_USE_GPU_NXP_VG_LITE is not set */ +/* CONFIG_LV_USE_GPU_SDL is not set */ +/* end of GPU */ + +/* Logging */ + +/* CONFIG_LV_USE_LOG is not set */ +/* end of Logging */ + +/* Asserts */ + +#define CONFIG_LV_USE_ASSERT_NULL +#define CONFIG_LV_USE_ASSERT_MALLOC +/* CONFIG_LV_USE_ASSERT_STYLE is not set */ +/* CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set */ +/* CONFIG_LV_USE_ASSERT_OBJ is not set */ +#define CONFIG_LV_ASSERT_HANDLER_INCLUDE "assert.h" +/* end of Asserts */ + +/* Others */ + +/* CONFIG_LV_USE_PERF_MONITOR is not set */ +/* CONFIG_LV_USE_MEM_MONITOR is not set */ +/* CONFIG_LV_USE_REFR_DEBUG is not set */ +/* CONFIG_LV_SPRINTF_CUSTOM is not set */ +/* CONFIG_LV_SPRINTF_USE_FLOAT is not set */ +#define CONFIG_LV_USE_USER_DATA +/* CONFIG_LV_ENABLE_GC is not set */ +/* end of Others */ + +/* Compiler settings */ + +/* CONFIG_LV_BIG_ENDIAN_SYSTEM is not set */ +#define CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 +/* CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set */ +/* CONFIG_LV_USE_LARGE_COORD is not set */ +/* end of Compiler settings */ +/* end of Feature configuration */ + +/* Font usage */ + +/* Enable built-in fonts */ + +/* CONFIG_LV_FONT_MONTSERRAT_8 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_10 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_12 is not set */ +#define CONFIG_LV_FONT_MONTSERRAT_14 +/* CONFIG_LV_FONT_MONTSERRAT_16 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_18 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_20 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_22 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_24 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_26 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_28 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_30 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_32 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_34 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_36 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_38 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_40 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_42 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_44 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_46 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_48 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set */ +/* CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set */ +/* CONFIG_LV_FONT_SIMSUN_16_CJK is not set */ +/* CONFIG_LV_FONT_UNSCII_8 is not set */ +/* CONFIG_LV_FONT_UNSCII_16 is not set */ +/* end of Enable built-in fonts */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set */ +#define CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14 +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set */ +/* CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set */ +/* CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set */ +/* CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set */ +/* CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set */ +/* CONFIG_LV_FONT_FMT_TXT_LARGE is not set */ +/* CONFIG_LV_USE_FONT_COMPRESSED is not set */ +/* CONFIG_LV_USE_FONT_SUBPX is not set */ +#define CONFIG_LV_USE_FONT_PLACEHOLDER +/* end of Font usage */ + +/* Text Settings */ + +#define CONFIG_LV_TXT_ENC_UTF8 +/* CONFIG_LV_TXT_ENC_ASCII is not set */ +#define CONFIG_LV_TXT_BREAK_CHARS " ,.;:-_" +#define CONFIG_LV_TXT_LINE_BREAK_LONG_LEN 0 +#define CONFIG_LV_TXT_COLOR_CMD "#" +/* CONFIG_LV_USE_BIDI is not set */ +/* CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set */ +/* end of Text Settings */ + +/* Widget usage */ + +#define CONFIG_LV_USE_ARC +#define CONFIG_LV_USE_BAR +#define CONFIG_LV_USE_BTN +#define CONFIG_LV_USE_BTNMATRIX +#define CONFIG_LV_USE_CANVAS +#define CONFIG_LV_USE_CHECKBOX +#define CONFIG_LV_USE_DROPDOWN +#define CONFIG_LV_USE_IMG +#define CONFIG_LV_USE_LABEL +#define CONFIG_LV_LABEL_TEXT_SELECTION +#define CONFIG_LV_LABEL_LONG_TXT_HINT +#define CONFIG_LV_USE_LINE +#define CONFIG_LV_USE_ROLLER +#define CONFIG_LV_ROLLER_INF_PAGES 7 +#define CONFIG_LV_USE_SLIDER +#define CONFIG_LV_USE_SWITCH +#define CONFIG_LV_USE_TEXTAREA +#define CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 +#define CONFIG_LV_USE_TABLE +/* end of Widget usage */ + +/* Extra Widgets */ + +#define CONFIG_LV_USE_ANIMIMG +#define CONFIG_LV_USE_CALENDAR +/* CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set */ +#define CONFIG_LV_USE_CALENDAR_HEADER_ARROW +#define CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN +#define CONFIG_LV_USE_CHART +#define CONFIG_LV_USE_COLORWHEEL +#define CONFIG_LV_USE_IMGBTN +#define CONFIG_LV_USE_KEYBOARD +#define CONFIG_LV_USE_LED +#define CONFIG_LV_USE_LIST +#define CONFIG_LV_USE_MENU +#define CONFIG_LV_USE_METER +#define CONFIG_LV_USE_MSGBOX +#define CONFIG_LV_USE_SPAN +#define CONFIG_LV_SPAN_SNIPPET_STACK_SIZE 64 +#define CONFIG_LV_USE_SPINBOX +#define CONFIG_LV_USE_SPINNER +#define CONFIG_LV_USE_TABVIEW +#define CONFIG_LV_USE_TILEVIEW +#define CONFIG_LV_USE_WIN +/* end of Extra Widgets */ + +/* Themes */ + +#define CONFIG_LV_USE_THEME_DEFAULT +/* CONFIG_LV_THEME_DEFAULT_DARK is not set */ +#define CONFIG_LV_THEME_DEFAULT_GROW +#define CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME 80 +#define CONFIG_LV_USE_THEME_BASIC +/* CONFIG_LV_USE_THEME_MONO is not set */ +/* end of Themes */ + +/* Layouts */ + +#define CONFIG_LV_USE_FLEX +#define CONFIG_LV_USE_GRID +/* end of Layouts */ + +/* 3rd Party Libraries */ + +/* CONFIG_LV_USE_FS_STDIO is not set */ +/* CONFIG_LV_USE_FS_POSIX is not set */ +/* CONFIG_LV_USE_FS_WIN32 is not set */ +/* CONFIG_LV_USE_FS_FATFS is not set */ +/* CONFIG_LV_USE_PNG is not set */ +/* CONFIG_LV_USE_BMP is not set */ +/* CONFIG_LV_USE_SJPG is not set */ +/* CONFIG_LV_USE_GIF is not set */ +/* CONFIG_LV_USE_QRCODE is not set */ +/* CONFIG_LV_USE_FREETYPE is not set */ +/* CONFIG_LV_USE_RLOTTIE is not set */ +/* CONFIG_LV_USE_FFMPEG is not set */ +/* end of 3rd Party Libraries */ + +/* Others */ + +#define CONFIG_LV_USE_SNAPSHOT +/* CONFIG_LV_USE_MONKEY is not set */ +/* CONFIG_LV_USE_GRIDNAV is not set */ +/* CONFIG_LV_USE_FRAGMENT is not set */ +/* CONFIG_LV_USE_IMGFONT is not set */ +/* CONFIG_LV_USE_MSG is not set */ +/* CONFIG_LV_USE_IME_PINYIN is not set */ +/* end of Others */ + +/* Examples */ + +#define CONFIG_LV_BUILD_EXAMPLES +/* end of Examples */ + +/* Demos */ + +/* CONFIG_LV_USE_DEMO_WIDGETS is not set */ +/* CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set */ +#define CONFIG_LV_USE_DEMO_BENCHMARK +/* CONFIG_LV_DEMO_BENCHMARK_RGB565A8 is not set */ +/* CONFIG_LV_USE_DEMO_STRESS is not set */ +/* CONFIG_LV_USE_DEMO_MUSIC is not set */ +/* end of Demos */ +/* end of LVGL configuration */ +/* end of Third-Party Configuration */ + +/* Kernel Configuration */ + +#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER +#define CONFIG_FREERTOS_HZ 1000 +#define CONFIG_FREERTOS_MAX_PRIORITIES 32 +#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13 +#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11 +#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 +#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024 +#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32 +#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 +#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 +#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 +#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 +#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS +#define CONFIG_FREERTOS_USE_TRACE_FACILITY +#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS +/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */ +#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240 +#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1 +/* end of Kernel Configuration */ + +#endif diff --git a/example/peripheral/media/lvgl_demo/src/cmd.c b/example/peripheral/media/lvgl_demo/src/cmd.c new file mode 100644 index 0000000000000000000000000000000000000000..22e009f1722143cf5e39eae578fd3645bfdb7875 --- /dev/null +++ b/example/peripheral/media/lvgl_demo/src/cmd.c @@ -0,0 +1,131 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: cmd.c + * Date: 2022-08-25 16:22:40 + * LastEditTime: 2023-03-20 15:40:40 + * Description: This file is for providing the demo commond + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + * 1.1 Wangzq 2023/03/20 Add the multi-display config + */ +#include +#include +#include "strto.h" +#include "sdkconfig.h" +#include "FreeRTOS.h" +#include "../src/shell.h" + +#include "fdc_common_hw.h" +#include "fdcdp.h" +#include "fdp_hw.h" + +#include "lv_port_disp.h" +#include "lv_obj.h" +#include "lv_conf.h" +#include "lv_demo_creat.h" + +static InputParm input_config; + +static void FFreeRTOSMediaCmdUsage(void) +{ + printf("Usage:\r\n"); + printf(" Media init 0/1/2, channel 0 ,channel 1 , channel 0 and channel 1 \r\n"); + printf(" -- the resolution of width\r\n"); + printf(" -- the resolution of height\r\n"); + printf(" -- the sigle screen or multi-display \r\n"); + printf(" -- the color_depth of screen ,default color_depth is 32\r\n"); + printf(" -- the refresh_rate of screen ,default refresh_rate is 60\r\n"); + printf(" Media demo \r\n"); + printf(" -- a test demo for user to comprehend the driver\r\n"); + printf(" Media deinit \r\n"); + printf(" -- deinit the channel\r\n"); +} + +static int MediaCmdEntry(int argc, char *argv[]) +{ + u32 id ; + static boolean inited = FALSE; + if (argc < 2) + { + FFreeRTOSMediaCmdUsage(); + return -1; + } + if (!strcmp(argv[1], "init")) + { + if (argc >= 3) + { + input_config.channel = (u32)simple_strtoul(argv[2], NULL, 10); + if (input_config.channel > FDCDP_INSTANCE_NUM) + { + printf("please insert the correct num,such as 0,1 or 2 \r\n"); + } + input_config.width = (u32)simple_strtoul(argv[3], NULL, 10); + input_config.height = (u32)simple_strtoul(argv[4], NULL, 10); + input_config.multi_mode = (u32)simple_strtoul(argv[5], NULL, 10); + input_config.color_depth = (u32)simple_strtoul(argv[6], NULL, 10); + input_config.refresh_rate = (u32)simple_strtoul(argv[7], NULL, 10); + } + else + { + input_config.channel = 0; + input_config.width = 1024; + input_config.height = 768; + input_config.multi_mode = 0; + input_config.color_depth = 32; + input_config.refresh_rate = 60; + } + BaseType_t task_ret = FFreeRTOSMediaInitCreate(&input_config); + if (pdPASS != task_ret) + { + return -2; + } + inited = TRUE; + } + + if (!strcmp(argv[1], "demo")) + { + if (inited != TRUE) + { + printf("please ensure the media has been inited \r\n"); + return -2; + } + BaseType_t task_ret = FFreeRTOSlVGLDemoCreate(); + + if (pdPASS != task_ret) + { + return -2; + } + } + if (!strcmp(argv[1], "deinit")) + { + if (inited != TRUE) + { + printf("please ensure the media has been inited \r\n"); + return -2; + } + if (argc >= 3) + { + id = (u32)simple_strtoul(argv[2], NULL, 10); + } + FFreeRTOSMediaChannelDeinit(id); + } + + return 0; +} + +SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), Media, MediaCmdEntry, test freertos media driver); \ No newline at end of file diff --git a/example/peripheral/media/lvgl_demo/src/lv_demo_creat.c b/example/peripheral/media/lvgl_demo/src/lv_demo_creat.c new file mode 100644 index 0000000000000000000000000000000000000000..57464c661f7975d7cb93d81d5a17774216b4a8d3 --- /dev/null +++ b/example/peripheral/media/lvgl_demo/src/lv_demo_creat.c @@ -0,0 +1,272 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * FilePath: lv_demo_creat.c + * Date: 2023-02-05 18:27:47 + * LastEditTime: 2023-03-20 11:02:47 + * Description: This file is for providing the port of creating lvgl demo + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/03/20 Modify the format and establish the version + */ + +#include +#include +#include "FreeRTOSConfig.h" +#include "FreeRTOS.h" +#include "task.h" +#include "timers.h" +#include "fassert.h" +#include "fkernel.h" + +#include "../lvgl.h" +#include "lv_conf.h" +#include "lv_demo_creat.h" +#include "lv_port_disp.h" + + +#if LV_USE_DEMO_BENCHMARK + #include "lv_demo_benchmark.h" +#endif + +#if LV_USE_DEMO_STRESS + #include "lv_demo_stress.h" +#endif + +#if LV_USE_DEMO_WIDGETS + #include "lv_demo_widgets.h" +#endif + +/************************** Constant Definitions *****************************/ +#define LVGL_HEART_TIMER_PERIOD (pdMS_TO_TICKS(1UL)) +#define LVGL_CONTINUE_TIMER 10000000 +/************************** Variable Definitions *****************************/ +static TimerHandle_t xLvglHeartTimer; +static TaskHandle_t demo_task; +static TaskHandle_t init_task; +static TaskHandle_t hpd_task ; +static InputParm *input_config; + +extern void FFreeRTOSDispdEnableUpdate(void); +extern void FFreeRTOSDispdDisableUpdate(void); +/************************** Function Prototypes ******************************/ +static void LvglHeartTimerCallback(TimerHandle_t xTimer) +{ + lv_tick_inc(1); +} + +#if LV_USE_DEMO_BENCHMARK + +static void on_benchmark_finished(void) +{ + FFreeRTOSDispdEnableUpdate(); + printf("task is over\r\n"); +} + +void benchmark(void) +{ + lv_init(); + FFreeRTOSPortInit(); + + FFreeRTOSDispdDisableUpdate(); + lv_demo_benchmark_set_finished_cb(&on_benchmark_finished); + lv_demo_benchmark_set_max_speed(true); + lv_demo_benchmark(); + FFreeRTOSDispdEnableUpdate(); + + while (1) + { + if (lv_disp_get_inactive_time(NULL) < LVGL_CONTINUE_TIMER) + { + lv_timer_handler(); //! run lv task + } + else + { + printf("task is over \r\n"); + break; + } + vTaskDelay(1); + } +} + +#endif + +#if LV_USE_DEMO_STRESS +void stress(void) +{ + lv_init(); + FFreeRTOSPortInit(); + + lv_demo_stress(); + /* loop once to allow objects to be created */ + while (1) + { + if (lv_disp_get_inactive_time(NULL) < LVGL_CONTINUE_TIMER) + { + lv_timer_handler(); //! run lv task + + } + else + { + printf("task is over \n"); + break; + } + vTaskDelay(1); + } +} + +#endif + +#if LV_USE_DEMO_WIDGETS +void widgets(void) +{ + lv_init(); + FFreeRTOSPortInit(); + + lv_demo_widgets(); + while (1) + { + if (lv_disp_get_inactive_time(NULL) < LVGL_CONTINUE_TIMER) + { + lv_timer_handler(); //! run lv task + } + else + { + printf("task is over \n"); + break; + } + vTaskDelay(1); + } +} +#endif + +/** + * @name: FFreeRTOSLVGLDemoTask + * @msg: run the lvgl demo + * @return Null + */ +static void FFreeRTOSLVGLDemoTask(void) +{ + for (;;) + { +#if LV_USE_DEMO_BENCHMARK + benchmark(); +#endif +#if LV_USE_DEMO_STRESS + stress(); +#endif +#if LV_USE_DEMO_WIDGETS + widgets(); +#endif + vTaskDelay(1); + } +} + +/** + * @name: FFreeRTOSMediaInitTask + * @msg: init the lvgl device + * @param {void *} pvParameters is the parameters of demo + * @return Null + */ +static void FFreeRTOSMediaInitTask(void *pvParameters) +{ + FASSERT(NULL != pvParameters); + InputParm *input_config = (InputParm *)pvParameters ; + FFreeRTOSMediaDeviceInit(input_config->channel, input_config->width, input_config->height, input_config->multi_mode, input_config->color_depth, input_config->refresh_rate); + vTaskDelete(NULL); +} + +/** + * @name: FFreeRTOSMediaHpdTask + * @msg: handle the hpd event + * @param {void *} pvParameters is the parameters of demo + * @return Null + */ +static void FFreeRTOSMediaHpdTask(void *pvParameters) +{ + FASSERT(NULL != pvParameters); + InputParm *input_config = (InputParm *)pvParameters ; + FFreeRTOSMediaHpdHandle(input_config->channel, input_config->width, input_config->height, input_config->multi_mode, input_config->color_depth, input_config->refresh_rate); + vTaskDelete(NULL); +} + +/** + * @name: FFreeRTOSMediaInitCreate + * @msg: creat the media init task + * @param {void *} args is the parameters of init function + * @return xReturn,pdPASS:success,others:creat failed + */ +BaseType_t FFreeRTOSMediaInitCreate(void *args) +{ + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + /* enter critical region */ + taskENTER_CRITICAL(); + /* Media init task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaInitTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSMediaInitTask", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + (void *)args, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ + (TaskHandle_t *)&init_task); /* 任务控制 */ + /* Hpd task control */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSMediaHpdTask", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + (void *)args, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ + (TaskHandle_t *)&hpd_task); + return xReturn; +} + +/** + * @name: FFreeRTOSlVGLDemoCreate + * @msg: creat the media demo init task + * @return xReturn,pdPASS:success,others:creat failed + */ +BaseType_t FFreeRTOSlVGLDemoCreate(void) +{ + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + BaseType_t timer_started = pdPASS; + taskENTER_CRITICAL(); + /* lvgl demo task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSLVGLDemoTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSLVGLDemoTask", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + NULL, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 3, /* 任务的优先级 */ + (TaskHandle_t *)&demo_task); /* 任务控制 */ + xLvglHeartTimer = xTimerCreate("LVGL Heart Software Timer", /* Text name for the software timer - not used by FreeRTOS. */ + LVGL_HEART_TIMER_PERIOD, /* The software timer's period in ticks. */ + pdTRUE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */ + NULL, /* This example use the timer id. */ + LvglHeartTimerCallback); /* The callback function to be used by the software timer being created. */ + if (xLvglHeartTimer != NULL) + { + timer_started = xTimerStart(xLvglHeartTimer, 0); + if (timer_started != pdPASS) + { + vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n"); + } + } + else + { + vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n"); + } + /* exit critical region */ + taskEXIT_CRITICAL(); + + return xReturn; +} + + diff --git a/example/peripheral/media/lvgl_indev/Kconfig b/example/peripheral/media/lvgl_indev/Kconfig new file mode 100644 index 0000000000000000000000000000000000000000..0277fb8553f2132f097012a78633194f6173c156 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/Kconfig @@ -0,0 +1,19 @@ +# +# For a description of the syntax of this configuration file, +# see tools/kconfiglib/kconfig-language.txt. +# + + +mainmenu "Phytium Freertos Configuration" + + menu "Freertos Configuration" + config TARGET_NAME + string "Build Target Name" + default "freertos" + help + Build Target name for the demo + +endmenu + +source "$(FREERTOS_SDK_ROOT)/Kconfig" + diff --git a/example/peripheral/media/lvgl_indev/README.md b/example/peripheral/media/lvgl_indev/README.md new file mode 100644 index 0000000000000000000000000000000000000000..00f413d02ec7f151a3deec825ddd8d77fe14d1a0 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/README.md @@ -0,0 +1,180 @@ +# media lvgl demo测试跑通benchmark + +## 1. 例程介绍 + +>介绍例程的用途,使用场景,相关基本概念,描述用户可以使用例程完成哪些工作 + +DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数据,按照 Display 协议处理后送给 DP PHY 接入显示器。 + +本司E2000系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 +本例程主要展示本司E2000系列芯片DC显示驱动功能以及驱动外设的能力,当前支持的设备有鼠标以及键盘 + +本例程支持的cmd包括 + +- md,读取一段内存的值 +- mw,修改一段内存的值 +- reboot, 重启baremetal运行环境 +- test, 展示如何通过shell获取用户输入参数 + +## 2. 如何使用例程 + +>描述开发平台准备,使用例程配置,构建和下载镜像的过程
+ +本例程需要用到 + +- Phytium开发板(E2000Q,E2000D) +- 显示器及连接线 +- [Phytium Standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk) + +### 2.1 硬件配置方法 + +>哪些硬件平台是支持的,需要哪些外设,例程与开发板哪些IO口相关等(建议附录开发板照片,展示哪些IO口被引出)
+ +本例程支持的硬件平台包括 + +- E2000Q AARCH32/AARCH64 +- E2000D AARCH32/AARCH64 + +本例程所需的硬件设备包括 + +- 通过DP线将显示器与E2000板卡连接 +- 利用串口调试线连接板卡和调试电脑,波特率设为 115200-8-1-N + +### 2.2 SDK配置方法 + +>依赖哪些驱动、库和第三方组件,如何完成配置(列出需要使能的关键配置项)
+ + +- 本例子已经提供好具体的编译指令,以下进行介绍: + 1. make 将目录下的工程进行编译 + 2. make clean 将目录下的工程进行清理 + 3. make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址 + 4. make load_e2000q_aarch64 将预设64bit e2000q 下的配置加载至工程中 + 5. make load_e2000q_aarch32 将预设32bit e2000q 下的配置加载至工程中 + 6. make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中 + 7. make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中 + 8. make menuconfig 配置目录下的参数变量 + 9. make build_all 编译目录下的项目工程 + 10. make backup_kconfig 将目录下的sdkconfig 备份到./configs下 + +- 具体使用方法为: + - 在当前目录下 + - 执行以上指令 + +### 2.3 构建和下载 + +>描述构建、烧录下载镜像的过程,列出相关的命令
+ +#### 2.3.1 构建过程 + +- 在host侧完成配置 + +>配置成E2000,对于其它平台,使用对应的默认配置 +``` +$ make load_e2000q_aarch32 +$ make menuconfig + +- 在host侧完成构建 +``` +目前在menuconfig中支持配置色深,色深设置为32,其余设置值为third-party/lvgl-8.3/lv_conf.c设置默认值 + +在使用过程中, 使用者可根据实际硬件情况以及需要,在third-party/lvgl-8.3/lv_conf.c中进行相应组件配置。 + +#### 2.3.2 下载过程 + +- host侧设置重启host侧tftp服务器 +``` +sudo service tftpd-hpa restart +``` +- 开发板侧使用bootelf命令跳转 +``` +setenv ipaddr 192.168.4.20 +setenv serverip 192.168.4.50 +setenv gatewayip 192.168.4.1 +tftpboot 0x90100000 baremetal.elf +bootelf -p 0x90100000 +``` +### 2.4 输出与实验现象 + +>描述输入输出情况,列出存在哪些输出,对应的输出是什么(建议附录相关现象图片)
+ +- 启动进入letter shell界面,按TAB键打印Command list + +![letter show](fig/letter_shell.jpg) + +![media_cmd](fig/media_cmd.png) + +#### 2.4.1 初始化硬件设备控制器 + +初始化DP: + +Media init 2 640 480 2 32 60 + +注:此色深32应与lvgl中的色深参数相等,否则可能出现画面填充错位的现象 + +2 : 通道号 +640 : 宽 +480 : 高 +2 :模式(克隆,水平,垂直) +32 :色深 +60 :刷新率 + +![init](fig/media_init.png) + +初始化键盘: + +Media init_kb 0 + +![init_keyboard](fig/media_init_keyboard.png) + +初始化鼠标: + +Media init_ms 1 + +![init_mouse](fig/media_init_mouse.png) + +注:在测试过程中,请将键盘接到usb 0 口,鼠标接到usb 1口,同时先init 键盘,再 init 鼠标,因为 +usb 驱动中采用枚举方式查找设备。keyborad_name = "/usb0/kbd0"; mouse_name = "/usb1/mouse1"; + +![device index](fig/media_device.png) + +查看设备: + +Media lsusb + +根据串口打印输出,选择相应的命令,例如: + +Media lsusb 0 -t + +查看当前挂载设备信息 + +![lsusb](fig/media_lsusb.png) + +去初始化: + +Media deinit 0 + +对相应dp口进行去初始化操作,可以设置为0:通道0;1:通道1;2:双通道 + +#### 2.4.2 example测试 + +Media demo + +输入以上命令后,鼠标和键盘均能正常使用 + +![media_indev](fig/media_indev.jpg) + +## 3. 如何解决问题 + +>主要记录使用例程中可能会遇到的问题,给出相应的解决方案
+ +若出现找不到设备的情况,串口会持续打印输出,无法找到设备,请检查接口顺序是否接正确,初始化是否成功,ls列出当前设备挂载信息 +与程序中name 进行对比修改。 + +## 4. 修改历史记录 + +>记录例程的重大修改记录,标明修改发生的版本号
+ +- 2022-12-6 :v0.0.1 添加example +- 2023-03-03: v0.0.2 添加多屏 + diff --git a/example/peripheral/media/lvgl_indev/configs/e2000d_aarch32_eg_configs b/example/peripheral/media/lvgl_indev/configs/e2000d_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..a83defd2845659195b40a2678e3f44f5326b9ef3 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/configs/e2000d_aarch32_eg_configs @@ -0,0 +1,594 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +CONFIG_USE_CHERRY_USB=y + +# +# CherryUSB Configuration +# +CONFIG_CHERRY_USB_PORT_XHCI=y +# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set +CONFIG_CHERRYUSB_HOST=y +# CONFIG_CHERRYUSB_DEVICE is not set +CONFIG_CHERRY_USB_HOST_HUB=y +CONFIG_CHERRY_USB_HOST_MSC=y +CONFIG_CHERRY_USB_HOST_HID=y +CONFIG_CHERRY_USB_HOST_VEDIO=y +CONFIG_CHERRY_USB_HOST_CDC=y +CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y +# end of CherryUSB Configuration + +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +# CONFIG_LV_CONF_MINIMAL is not set + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=0 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +# CONFIG_LV_USE_DEMO_BENCHMARK is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_indev/configs/e2000d_aarch64_eg_configs b/example/peripheral/media/lvgl_indev/configs/e2000d_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..248181bbe3bf70d50ceca6e19d806b9e708c7033 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/configs/e2000d_aarch64_eg_configs @@ -0,0 +1,590 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +CONFIG_USE_CHERRY_USB=y + +# +# CherryUSB Configuration +# +CONFIG_CHERRY_USB_PORT_XHCI=y +# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set +CONFIG_CHERRYUSB_HOST=y +# CONFIG_CHERRYUSB_DEVICE is not set +CONFIG_CHERRY_USB_HOST_HUB=y +CONFIG_CHERRY_USB_HOST_MSC=y +CONFIG_CHERRY_USB_HOST_HID=y +CONFIG_CHERRY_USB_HOST_VEDIO=y +CONFIG_CHERRY_USB_HOST_CDC=y +CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y +# end of CherryUSB Configuration + +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +# CONFIG_LV_CONF_MINIMAL is not set + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=0 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +# CONFIG_LV_USE_DEMO_BENCHMARK is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_indev/configs/e2000q_aarch32_eg_configs b/example/peripheral/media/lvgl_indev/configs/e2000q_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..75c3d26bf27688f474885a7f668e4a993810c98d --- /dev/null +++ b/example/peripheral/media/lvgl_indev/configs/e2000q_aarch32_eg_configs @@ -0,0 +1,594 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +CONFIG_USE_CHERRY_USB=y + +# +# CherryUSB Configuration +# +CONFIG_CHERRY_USB_PORT_XHCI=y +# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set +CONFIG_CHERRYUSB_HOST=y +# CONFIG_CHERRYUSB_DEVICE is not set +CONFIG_CHERRY_USB_HOST_HUB=y +CONFIG_CHERRY_USB_HOST_MSC=y +CONFIG_CHERRY_USB_HOST_HID=y +CONFIG_CHERRY_USB_HOST_VEDIO=y +CONFIG_CHERRY_USB_HOST_CDC=y +CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y +# end of CherryUSB Configuration + +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +# CONFIG_LV_CONF_MINIMAL is not set + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=0 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +# CONFIG_LV_USE_DEMO_BENCHMARK is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_indev/configs/e2000q_aarch64_eg_configs b/example/peripheral/media/lvgl_indev/configs/e2000q_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..c71ace5a7dccf4ab8f7f2c6a4e87605bc4462c9f --- /dev/null +++ b/example/peripheral/media/lvgl_indev/configs/e2000q_aarch64_eg_configs @@ -0,0 +1,590 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +CONFIG_USE_CHERRY_USB=y + +# +# CherryUSB Configuration +# +CONFIG_CHERRY_USB_PORT_XHCI=y +# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set +CONFIG_CHERRYUSB_HOST=y +# CONFIG_CHERRYUSB_DEVICE is not set +CONFIG_CHERRY_USB_HOST_HUB=y +CONFIG_CHERRY_USB_HOST_MSC=y +CONFIG_CHERRY_USB_HOST_HID=y +CONFIG_CHERRY_USB_HOST_VEDIO=y +CONFIG_CHERRY_USB_HOST_CDC=y +CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y +# end of CherryUSB Configuration + +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +# CONFIG_LV_CONF_MINIMAL is not set + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=0 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +# CONFIG_LV_USE_DEMO_BENCHMARK is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_indev/fig/fmedia_lib.jpg b/example/peripheral/media/lvgl_indev/fig/fmedia_lib.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1e418ef5b01281dd387c2d2e278910f14fadb7a Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/fmedia_lib.jpg differ diff --git a/example/peripheral/media/lvgl_indev/fig/letter_shell.jpg b/example/peripheral/media/lvgl_indev/fig/letter_shell.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40b389813866a3a2693fc10ac0469577580ab173 Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/letter_shell.jpg differ diff --git a/example/peripheral/media/lvgl_indev/fig/media_cmd.png b/example/peripheral/media/lvgl_indev/fig/media_cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..e1057d81dfc6612a6b90d90ed80305e3e5c15751 Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/media_cmd.png differ diff --git a/example/peripheral/media/lvgl_indev/fig/media_device.png b/example/peripheral/media/lvgl_indev/fig/media_device.png new file mode 100644 index 0000000000000000000000000000000000000000..1c17f32d0f1a0c4223ab6c72c4c4e3108d5a6f81 Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/media_device.png differ diff --git a/example/peripheral/media/lvgl_indev/fig/media_indev.jpg b/example/peripheral/media/lvgl_indev/fig/media_indev.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da8153ba7fc92e4c06ba6ac301cad5bc5a92765f Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/media_indev.jpg differ diff --git a/example/peripheral/media/lvgl_indev/fig/media_init.png b/example/peripheral/media/lvgl_indev/fig/media_init.png new file mode 100644 index 0000000000000000000000000000000000000000..66cc70d91981cb55dfc7d27059de727ab01879a9 Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/media_init.png differ diff --git a/example/peripheral/media/lvgl_indev/fig/media_init_keyboard.png b/example/peripheral/media/lvgl_indev/fig/media_init_keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..502bf8e5663a3b6ca4f6dab96619205850292954 Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/media_init_keyboard.png differ diff --git a/example/peripheral/media/lvgl_indev/fig/media_init_mouse.png b/example/peripheral/media/lvgl_indev/fig/media_init_mouse.png new file mode 100644 index 0000000000000000000000000000000000000000..906dcace4bdaee4047addce7b5ad20c77232b5c2 Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/media_init_mouse.png differ diff --git a/example/peripheral/media/lvgl_indev/fig/media_lsusb.png b/example/peripheral/media/lvgl_indev/fig/media_lsusb.png new file mode 100644 index 0000000000000000000000000000000000000000..2e5d7b82b697bfc77525ba18aea43ca41bafbe67 Binary files /dev/null and b/example/peripheral/media/lvgl_indev/fig/media_lsusb.png differ diff --git a/example/peripheral/media/lvgl_indev/inc/lv_indev_port.h b/example/peripheral/media/lvgl_indev/inc/lv_indev_port.h new file mode 100644 index 0000000000000000000000000000000000000000..ea636fefab5e5d4f4cd1240b7bdf9834e8916d8b --- /dev/null +++ b/example/peripheral/media/lvgl_indev/inc/lv_indev_port.h @@ -0,0 +1,51 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: cmd.c + * Date: 2022-04-20 14:22:40 + * LastEditTime: 2023-04-20 15:40:40 + * Description: This file is for providing the indev config + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/04/20 add the device + */ + +#ifndef LV_INDEV_PORT_H +#define LV_INDEV_PORT_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lvgl.h" +#include "ftypes.h" + + +/********************** + * GLOBAL PROTOTYPES + **********************/ +void lv_port_kb_init(u32 id); + +void lv_port_ms_init(u32 id); +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + + +#endif /*Disable/Enable content*/ diff --git a/example/peripheral/media/lvgl_indev/inc/lv_indev_test.h b/example/peripheral/media/lvgl_indev/inc/lv_indev_test.h new file mode 100644 index 0000000000000000000000000000000000000000..64d7451dc082419830ab63bcefd28fd0372062c9 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/inc/lv_indev_test.h @@ -0,0 +1,63 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * FilePath: lv_indev_test.h + * Date: 2023-02-05 18:27:47 + * LastEditTime: 2023-03-20 11:02:47 + * Description: This file is for providing the lvgl demo config + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/03/20 Modify the format and establish the version + */ + + +#ifndef LV_INDEV_TEST_H +#define LV_INDEV_TEST_H + +#ifdef __cplusplus +extern "C" { +#endif + +/********************* + * INCLUDES + *********************/ +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#else +#include "lvgl-8.3/lvgl.h" +#endif + +/*creat the media demo init task*/ +BaseType_t FFreeRTOSDemoCreate(void); + +/*init the keyboard*/ +BaseType_t FFreeRTOSInitKbCreate(u32 id); + +/*init the mouse*/ +BaseType_t FFreeRTOSInitMsCreate(u32 id); + +/*creat the media init task*/ +BaseType_t FFreeRTOSMediaInitCreate(void *args); + +/*list the usb device*/ +BaseType_t FFreeRTOSListUsbDev(int argc, char *argv[]); + +/*the lvgl demo*/ +void lv_demo_indev(void); + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif \ No newline at end of file diff --git a/example/peripheral/media/lvgl_indev/inc/usb_config.h b/example/peripheral/media/lvgl_indev/inc/usb_config.h new file mode 100644 index 0000000000000000000000000000000000000000..3cce59fdd809b0b3551651639bf4e8bd5ca9b069 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/inc/usb_config.h @@ -0,0 +1,159 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: usb_config.h + * Date: 2022-09-19 17:28:44 + * LastEditTime: 2022-09-19 17:28:45 + * Description:  This file is for usb hc xhci configuration. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 zhugengyu 2022/9/19 init commit + * 1.1 liqiaozhong 2023/2/10 update to v0.7.0 + */ + +#ifndef USB_CONFIG_H +#define USB_CONFIG_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* ================ USB common Configuration ================ */ +void *usb_hc_malloc(size_t size); +void usb_hc_free(); +void *usb_hc_malloc_align(size_t align, size_t size); + +#define usb_malloc(size) usb_hc_malloc(size) +#define usb_free(ptr) usb_hc_free(ptr) +#define usb_align(align, size) usb_hc_malloc_align(align, size) + +#ifndef CONFIG_USB_DBG_LEVEL + #define CONFIG_USB_DBG_LEVEL USB_DBG_ERROR +#endif + +#ifndef CONFIG_USB_PRINTF + #define CONFIG_USB_PRINTF printf +#endif + +/* Enable print with color */ +#define CONFIG_USB_PRINTF_COLOR_ENABLE + +/* data align size when use dma */ +#ifndef CONFIG_USB_ALIGN_SIZE + #define CONFIG_USB_ALIGN_SIZE 4 +#endif + +/* attribute data into no cache ram */ +#define USB_NOCACHE_RAM_SECTION __attribute__((section(".noncacheable"))) + +/* ================= USB Device Stack Configuration ================ */ + +/* Ep0 max transfer buffer, specially for receiving data from ep0 out */ +#define CONFIG_USBDEV_REQUEST_BUFFER_LEN 256 + + +#ifndef CONFIG_USBDEV_MSC_BLOCK_SIZE + #define CONFIG_USBDEV_MSC_BLOCK_SIZE 512 +#endif + +#ifndef CONFIG_USBDEV_MSC_MANUFACTURER_STRING + #define CONFIG_USBDEV_MSC_MANUFACTURER_STRING "" +#endif + +#ifndef CONFIG_USBDEV_MSC_PRODUCT_STRING + #define CONFIG_USBDEV_MSC_PRODUCT_STRING "" +#endif + +#ifndef CONFIG_USBDEV_MSC_VERSION_STRING + #define CONFIG_USBDEV_MSC_VERSION_STRING "0.01" +#endif + +// #define CONFIG_USBHOST_GET_STRING_DESC +#define CONFIG_USBHOST_GET_DEVICE_DESC + +// #define CONFIG_USBDEV_MSC_THREAD +#define CONFIG_INPUT_MOUSE_WHEEL + +#ifdef CONFIG_USBDEV_MSC_THREAD + #ifndef CONFIG_USBDEV_MSC_STACKSIZE + #define CONFIG_USBDEV_MSC_STACKSIZE 2048 + #endif + + #ifndef CONFIG_USBDEV_MSC_PRIO + #define CONFIG_USBDEV_MSC_PRIO 4 + #endif +#endif + +#ifndef CONFIG_USBDEV_AUDIO_VERSION + #define CONFIG_USBDEV_AUDIO_VERSION 0x0100 +#endif + +#ifndef CONFIG_USBDEV_AUDIO_MAX_CHANNEL + #define CONFIG_USBDEV_AUDIO_MAX_CHANNEL 8 +#endif + +/* ================ USB HOST Stack Configuration ================== */ + +#define CONFIG_USBHOST_MAX_RHPORTS 2 +#define CONFIG_USBHOST_MAX_EXTHUBS 2 +#define CONFIG_USBHOST_MAX_EHPORTS 4 +#define CONFIG_USBHOST_MAX_INTERFACES 6 +#define CONFIG_USBHOST_MAX_INTF_ALTSETTINGS 1 +#define CONFIG_USBHOST_MAX_ENDPOINTS 4 + +#define CONFIG_USBHOST_DEV_NAMELEN 16 + +#ifndef CONFIG_USBHOST_PSC_PRIO + #define CONFIG_USBHOST_PSC_PRIO 4 +#endif +#ifndef CONFIG_USBHOST_PSC_STACKSIZE + #define CONFIG_USBHOST_PSC_STACKSIZE 4096 +#endif + +/* Ep0 max transfer buffer */ +#define CONFIG_USBHOST_REQUEST_BUFFER_LEN 512 + +#ifndef CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT + #define CONFIG_USBHOST_CONTROL_TRANSFER_TIMEOUT 500 +#endif + +#ifndef CONFIG_USBHOST_MSC_TIMEOUT + #define CONFIG_USBHOST_MSC_TIMEOUT 5000 +#endif + +/* do not try to enumrate one interface */ +#ifndef CONFIG_USBHOST_ENUM_FIRST_INTERFACE_ONLY + #define CONFIG_USBHOST_ENUM_FIRST_INTERFACE_ONLY +#endif + +/* ================ USB Device Port Configuration ================*/ + +#define CONFIG_XHCI_PAGE_SIZE 4096U +#define CONFIG_XHCI_PAGE_SHIFT 12U + +/* ================ USB Host Port Configuration ==================*/ + +#define CONFIG_USBHOST_PIPE_NUM 10 + +/* ================ XHCI Configuration ================ */ +#define CONFIG_USBHOST_XHCI +#define CONFIG_USBHOST_XHCI_NUM 2 + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/example/peripheral/media/lvgl_indev/main.c b/example/peripheral/media/lvgl_indev/main.c new file mode 100644 index 0000000000000000000000000000000000000000..fcada8ae1f17eb2651d964217a45ec8e9c57721b --- /dev/null +++ b/example/peripheral/media/lvgl_indev/main.c @@ -0,0 +1,47 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: main.c + * Date: 2022-08-25 16:22:40 + * LastEditTime: 2022-12-20 15:40:40 + * Description: This file is for providing the shell entrance + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + * 1.1 Wangzq 2023/03/03 Add the multi-display config + */ + +#include "shell.h" +#include "shell_port.h" +#include + +int main(void) +{ + BaseType_t ret; + + ret = LSUserShellTask(); + if (ret != pdPASS) + { + goto FAIL_EXIT; + } + + vTaskStartScheduler(); /* 启动任务,开启调度 */ + while (1) + ; /* 正常不会执行到这里 */ + +FAIL_EXIT: + printf("failed 0x%x \r\n", ret); + return 0; +} diff --git a/example/peripheral/media/lvgl_indev/makefile b/example/peripheral/media/lvgl_indev/makefile new file mode 100644 index 0000000000000000000000000000000000000000..5863e71fa4797e1e3b1efec2fb551595b6c34460 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/makefile @@ -0,0 +1,32 @@ +export PROJECT_DIR ?= $(shell pwd) + +export USR_SRC_DIR = $(PROJECT_DIR) \ + ./src\ + +export USR_INC_DIR = $(PROJECT_DIR) \ + ./inc\ + +# 用户定义的编译目标文件上传路径 +ifeq ($(OS),Windows_NT) + USR_BOOT_DIR ?= $(subst \,/, $(PHYTIUM_DEV_PATH))/tftp +else + USR_BOOT_DIR ?= /mnt/d/tftboot +endif + + +# 设置启动镜像名 +BOOT_IMG_NAME ?= freertos + +# 指定编译freertos项目使用的makefile +include $(FREERTOS_SDK_ROOT)/make/build_freertos.mk + +# 完成编译 +boot: + make -j + @cp ./$(CONFIG_TARGET_NAME).elf $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).elf +ifdef CONFIG_OUTPUT_BINARY + @cp ./$(CONFIG_TARGET_NAME).bin $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).bin +endif + @ls $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).* -l + + diff --git a/example/peripheral/media/lvgl_indev/sdkconfig b/example/peripheral/media/lvgl_indev/sdkconfig new file mode 100644 index 0000000000000000000000000000000000000000..c71ace5a7dccf4ab8f7f2c6a4e87605bc4462c9f --- /dev/null +++ b/example/peripheral/media/lvgl_indev/sdkconfig @@ -0,0 +1,590 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +CONFIG_USE_CHERRY_USB=y + +# +# CherryUSB Configuration +# +CONFIG_CHERRY_USB_PORT_XHCI=y +# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set +CONFIG_CHERRYUSB_HOST=y +# CONFIG_CHERRYUSB_DEVICE is not set +CONFIG_CHERRY_USB_HOST_HUB=y +CONFIG_CHERRY_USB_HOST_MSC=y +CONFIG_CHERRY_USB_HOST_HID=y +CONFIG_CHERRY_USB_HOST_VEDIO=y +CONFIG_CHERRY_USB_HOST_CDC=y +CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y +# end of CherryUSB Configuration + +CONFIG_USE_LVGL=y + +# +# LVGL configuration +# +CONFIG_LV_CONF_SKIP=y +# CONFIG_LV_CONF_MINIMAL is not set + +# +# Color settings +# +CONFIG_LV_COLOR_DEPTH_32=y +# CONFIG_LV_COLOR_DEPTH_16 is not set +# CONFIG_LV_COLOR_DEPTH_8 is not set +# CONFIG_LV_COLOR_DEPTH_1 is not set +CONFIG_LV_COLOR_DEPTH=32 +CONFIG_LV_COLOR_MIX_ROUND_OFS=0 +CONFIG_LV_COLOR_CHROMA_KEY_HEX=0x00FF00 +# end of Color settings + +# +# Memory settings +# +# CONFIG_LV_MEM_CUSTOM is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=32 +CONFIG_LV_MEM_ADDR=0x0 +CONFIG_LV_MEM_BUF_MAX_NUM=16 +# CONFIG_LV_MEMCPY_MEMSET_STD is not set +# end of Memory settings + +# +# HAL Settings +# +# CONFIG_LV_TICK_CUSTOM is not set +CONFIG_LV_DPI_DEF=130 +# end of HAL Settings + +# +# Feature configuration +# + +# +# Drawing +# +CONFIG_LV_DRAW_COMPLEX=y +CONFIG_LV_SHADOW_CACHE_SIZE=0 +CONFIG_LV_CIRCLE_CACHE_SIZE=4 +CONFIG_LV_LAYER_SIMPLE_BUF_SIZE=24576 +CONFIG_LV_IMG_CACHE_DEF_SIZE=0 +CONFIG_LV_GRADIENT_MAX_STOPS=2 +CONFIG_LV_GRAD_CACHE_DEF_SIZE=0 +# CONFIG_LV_DITHER_GRADIENT is not set +CONFIG_LV_DISP_ROT_MAX_BUF=10240 +# end of Drawing + +# +# GPU +# +# CONFIG_LV_USE_GPU_ARM2D is not set +# CONFIG_LV_USE_GPU_STM32_DMA2D is not set +# CONFIG_LV_USE_GPU_SWM341_DMA2D is not set +# CONFIG_LV_USE_GPU_NXP_PXP is not set +# CONFIG_LV_USE_GPU_NXP_VG_LITE is not set +# CONFIG_LV_USE_GPU_SDL is not set +# end of GPU + +# +# Logging +# +# CONFIG_LV_USE_LOG is not set +# end of Logging + +# +# Asserts +# +CONFIG_LV_USE_ASSERT_NULL=y +CONFIG_LV_USE_ASSERT_MALLOC=y +# CONFIG_LV_USE_ASSERT_STYLE is not set +# CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set +# CONFIG_LV_USE_ASSERT_OBJ is not set +CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" +# end of Asserts + +# +# Others +# +# CONFIG_LV_USE_PERF_MONITOR is not set +# CONFIG_LV_USE_MEM_MONITOR is not set +# CONFIG_LV_USE_REFR_DEBUG is not set +# CONFIG_LV_SPRINTF_CUSTOM is not set +# CONFIG_LV_SPRINTF_USE_FLOAT is not set +CONFIG_LV_USE_USER_DATA=y +# CONFIG_LV_ENABLE_GC is not set +# end of Others + +# +# Compiler settings +# +# CONFIG_LV_BIG_ENDIAN_SYSTEM is not set +CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 +# CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set +# CONFIG_LV_USE_LARGE_COORD is not set +# end of Compiler settings +# end of Feature configuration + +# +# Font usage +# + +# +# Enable built-in fonts +# +# CONFIG_LV_FONT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_MONTSERRAT_10 is not set +# CONFIG_LV_FONT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_MONTSERRAT_14=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_UNSCII_8 is not set +# CONFIG_LV_FONT_UNSCII_16 is not set +# end of Enable built-in fonts + +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set +CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set +# CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set +# CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set +# CONFIG_LV_FONT_FMT_TXT_LARGE is not set +# CONFIG_LV_USE_FONT_COMPRESSED is not set +# CONFIG_LV_USE_FONT_SUBPX is not set +CONFIG_LV_USE_FONT_PLACEHOLDER=y +# end of Font usage + +# +# Text Settings +# +CONFIG_LV_TXT_ENC_UTF8=y +# CONFIG_LV_TXT_ENC_ASCII is not set +CONFIG_LV_TXT_BREAK_CHARS=" ,.;:-_" +CONFIG_LV_TXT_LINE_BREAK_LONG_LEN=0 +CONFIG_LV_TXT_COLOR_CMD="#" +# CONFIG_LV_USE_BIDI is not set +# CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set +# end of Text Settings + +# +# Widget usage +# +CONFIG_LV_USE_ARC=y +CONFIG_LV_USE_BAR=y +CONFIG_LV_USE_BTN=y +CONFIG_LV_USE_BTNMATRIX=y +CONFIG_LV_USE_CANVAS=y +CONFIG_LV_USE_CHECKBOX=y +CONFIG_LV_USE_DROPDOWN=y +CONFIG_LV_USE_IMG=y +CONFIG_LV_USE_LABEL=y +CONFIG_LV_LABEL_TEXT_SELECTION=y +CONFIG_LV_LABEL_LONG_TXT_HINT=y +CONFIG_LV_USE_LINE=y +CONFIG_LV_USE_ROLLER=y +CONFIG_LV_ROLLER_INF_PAGES=7 +CONFIG_LV_USE_SLIDER=y +CONFIG_LV_USE_SWITCH=y +CONFIG_LV_USE_TEXTAREA=y +CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME=1500 +CONFIG_LV_USE_TABLE=y +# end of Widget usage + +# +# Extra Widgets +# +CONFIG_LV_USE_ANIMIMG=y +CONFIG_LV_USE_CALENDAR=y +# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set +CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y +CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +CONFIG_LV_USE_CHART=y +CONFIG_LV_USE_COLORWHEEL=y +CONFIG_LV_USE_IMGBTN=y +CONFIG_LV_USE_KEYBOARD=y +CONFIG_LV_USE_LED=y +CONFIG_LV_USE_LIST=y +CONFIG_LV_USE_MENU=y +CONFIG_LV_USE_METER=y +CONFIG_LV_USE_MSGBOX=y +CONFIG_LV_USE_SPAN=y +CONFIG_LV_SPAN_SNIPPET_STACK_SIZE=64 +CONFIG_LV_USE_SPINBOX=y +CONFIG_LV_USE_SPINNER=y +CONFIG_LV_USE_TABVIEW=y +CONFIG_LV_USE_TILEVIEW=y +CONFIG_LV_USE_WIN=y +# end of Extra Widgets + +# +# Themes +# +CONFIG_LV_USE_THEME_DEFAULT=y +# CONFIG_LV_THEME_DEFAULT_DARK is not set +CONFIG_LV_THEME_DEFAULT_GROW=y +CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME=80 +CONFIG_LV_USE_THEME_BASIC=y +# CONFIG_LV_USE_THEME_MONO is not set +# end of Themes + +# +# Layouts +# +CONFIG_LV_USE_FLEX=y +CONFIG_LV_USE_GRID=y +# end of Layouts + +# +# 3rd Party Libraries +# +# CONFIG_LV_USE_FS_STDIO is not set +# CONFIG_LV_USE_FS_POSIX is not set +# CONFIG_LV_USE_FS_WIN32 is not set +# CONFIG_LV_USE_FS_FATFS is not set +# CONFIG_LV_USE_PNG is not set +# CONFIG_LV_USE_BMP is not set +# CONFIG_LV_USE_SJPG is not set +# CONFIG_LV_USE_GIF is not set +# CONFIG_LV_USE_QRCODE is not set +# CONFIG_LV_USE_FREETYPE is not set +# CONFIG_LV_USE_RLOTTIE is not set +# CONFIG_LV_USE_FFMPEG is not set +# end of 3rd Party Libraries + +# +# Others +# +CONFIG_LV_USE_SNAPSHOT=y +# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_GRIDNAV is not set +# CONFIG_LV_USE_FRAGMENT is not set +# CONFIG_LV_USE_IMGFONT is not set +# CONFIG_LV_USE_MSG is not set +# CONFIG_LV_USE_IME_PINYIN is not set +# end of Others + +# +# Examples +# +CONFIG_LV_BUILD_EXAMPLES=y +# end of Examples + +# +# Demos +# +# CONFIG_LV_USE_DEMO_WIDGETS is not set +# CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set +# CONFIG_LV_USE_DEMO_BENCHMARK is not set +# CONFIG_LV_USE_DEMO_STRESS is not set +# CONFIG_LV_USE_DEMO_MUSIC is not set +# end of Demos +# end of LVGL configuration +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/lvgl_indev/sdkconfig.h b/example/peripheral/media/lvgl_indev/sdkconfig.h new file mode 100644 index 0000000000000000000000000000000000000000..0e6d478dc7e7e81a7e9caeb684c5fe2e2f7fb62d --- /dev/null +++ b/example/peripheral/media/lvgl_indev/sdkconfig.h @@ -0,0 +1,529 @@ +#ifndef SDK_CONFIG_H__ +#define SDK_CONFIG_H__ + +/* Freertos Configuration */ + +#define CONFIG_TARGET_NAME "freertos" +/* end of Freertos Configuration */ + +/* Standalone Setting */ + +#define CONFIG_USE_FREERTOS + +/* Arch Configuration */ + +/* CONFIG_TARGET_ARMV8_AARCH32 is not set */ +#define CONFIG_TARGET_ARMV8_AARCH64 +#define CONFIG_USE_CACHE +#define CONFIG_USE_MMU +/* CONFIG_MMU_DEBUG_PRINTS is not set */ +/* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ +/* end of Arch Configuration */ + +/* Board Configuration */ + +/* CONFIG_TARGET_F2000_4 is not set */ +/* CONFIG_TARGET_D2000 is not set */ +#define CONFIG_TARGET_E2000Q +/* CONFIG_TARGET_E2000D is not set */ +/* CONFIG_TARGET_E2000S is not set */ +#define CONFIG_TARGET_E2000 +#define CONFIG_DEFAULT_DEBUG_PRINT_UART1 +/* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ +/* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* end of Board Configuration */ + +/* Components Configuration */ + +/* CONFIG_USE_SPI is not set */ +/* CONFIG_USE_QSPI is not set */ +#define CONFIG_USE_GIC +#define CONFIG_ENABLE_GICV3 +#define CONFIG_USE_SERIAL + +/* Usart Configuration */ + +#define CONFIG_ENABLE_Pl011_UART +/* end of Usart Configuration */ +/* CONFIG_USE_GPIO is not set */ +/* CONFIG_USE_ETH is not set */ +/* CONFIG_USE_CAN is not set */ +/* CONFIG_USE_I2C is not set */ +/* CONFIG_USE_TIMER is not set */ +/* CONFIG_USE_MIO is not set */ +/* CONFIG_USE_SDMMC is not set */ +/* CONFIG_USE_PCIE is not set */ +/* CONFIG_USE_WDT is not set */ +/* CONFIG_USE_DMA is not set */ +/* CONFIG_USE_NAND is not set */ +/* CONFIG_USE_RTC is not set */ +/* CONFIG_USE_SATA is not set */ +/* CONFIG_USE_USB is not set */ +/* CONFIG_USE_ADC is not set */ +/* CONFIG_USE_PWM is not set */ +/* CONFIG_USE_IPC is not set */ +#define CONFIG_USE_MEDIA + +/* Media Configuration */ + +/* CONFIG_ENABLE_FDC_DP is not set */ +#define CONFIG_ENABLE_FDC_DP_USE_LIB +/* end of Media Configuration */ +/* CONFIG_USE_SCMI_MHU is not set */ +/* end of Components Configuration */ +#define CONFIG_USE_NEW_LIBC +/* end of Standalone Setting */ + +/* Building Option */ + +/* SDK common configuration */ + +/* CONFIG_LOG_VERBOS is not set */ +#define CONFIG_LOG_DEBUG +/* CONFIG_LOG_INFO is not set */ +/* CONFIG_LOG_WARN is not set */ +/* CONFIG_LOG_ERROR is not set */ +/* CONFIG_LOG_NONE is not set */ +/* CONFIG_LOG_EXTRA_INFO is not set */ +/* CONFIG_LOG_DISPALY_CORE_NUM is not set */ +/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of SDK common configuration */ + +/* Linker Options */ + +/* CONFIG_AARCH32_RAM_LD is not set */ +#define CONFIG_AARCH64_RAM_LD +/* CONFIG_USER_DEFINED_LD is not set */ +#define CONFIG_LINK_SCRIPT_ROM +#define CONFIG_ROM_START_UP_ADDR 0x80100000 +#define CONFIG_ROM_SIZE_MB 2 +#define CONFIG_LINK_SCRIPT_RAM +#define CONFIG_RAM_START_UP_ADDR 0x81000000 +#define CONFIG_RAM_SIZE_MB 64 +#define CONFIG_HEAP_SIZE 1 +#define CONFIG_STACK_SIZE 0x100000 +#define CONFIG_FPU_STACK_SIZE 0x1000 +/* end of Linker Options */ + +/* Compiler Options */ + +/* Cross-Compiler Setting */ + +#define CONFIG_GCC_OPTIMIZE_LEVEL 0 +/* CONFIG_USE_EXT_COMPILER is not set */ +/* CONFIG_USE_KLIN_SYS is not set */ +/* end of Cross-Compiler Setting */ +#define CONFIG_OUTPUT_BINARY +/* end of Compiler Options */ +/* end of Building Option */ + +/* Component Configuration */ + +/* Freertos Uart Drivers */ + +#define CONFIG_FREERTOS_USE_UART +/* end of Freertos Uart Drivers */ + +/* Freertos Pwm Drivers */ + +/* CONFIG_FREERTOS_USE_PWM is not set */ +/* end of Freertos Pwm Drivers */ + +/* Freertos Qspi Drivers */ + +/* CONFIG_FREERTOS_USE_QSPI is not set */ +/* end of Freertos Qspi Drivers */ + +/* Freertos Wdt Drivers */ + +/* CONFIG_FREERTOS_USE_WDT is not set */ +/* end of Freertos Wdt Drivers */ + +/* Freertos Eth Drivers */ + +/* CONFIG_FREERTOS_USE_XMAC is not set */ +/* CONFIG_FREERTOS_USE_GMAC is not set */ +/* end of Freertos Eth Drivers */ + +/* Freertos Gpio Drivers */ + +/* CONFIG_FREERTOS_USE_GPIO is not set */ +/* end of Freertos Gpio Drivers */ + +/* Freertos Spim Drivers */ + +/* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* end of Freertos Spim Drivers */ + +/* Freertos DMA Drivers */ + +/* CONFIG_FREERTOS_USE_FDDMA is not set */ +/* CONFIG_FREERTOS_USE_FGDMA is not set */ +/* end of Freertos DMA Drivers */ + +/* Freertos Adc Drivers */ + +/* CONFIG_FREERTOS_USE_ADC is not set */ +/* end of Freertos Adc Drivers */ + +/* Freertos Can Drivers */ + +/* CONFIG_FREERTOS_USE_CAN is not set */ +/* end of Freertos Can Drivers */ + +/* Freertos I2c Drivers */ + +/* CONFIG_FREERTOS_USE_I2C is not set */ +/* end of Freertos I2c Drivers */ + +/* Freertos Mio Drivers */ + +/* CONFIG_FREERTOS_USE_MIO is not set */ +/* end of Freertos Mio Drivers */ + +/* Freertos Timer Drivers */ + +/* CONFIG_FREERTOS_USE_TIMER is not set */ +/* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +#define CONFIG_FREERTOS_USE_MEDIA +/* end of Freertos Media Drivers */ +/* end of Component Configuration */ + +/* Third-Party Configuration */ + +/* CONFIG_USE_LWIP is not set */ +#define CONFIG_USE_BACKTRACE +/* CONFIG_USE_FATFS_0_1_4 is not set */ +/* CONFIG_USE_SFUD is not set */ +/* CONFIG_USE_SPIFFS is not set */ +/* CONFIG_USE_AMP is not set */ +#define CONFIG_USE_LETTER_SHELL + +/* Letter Shell Configuration */ + +#define CONFIG_LS_PL011_UART +#define CONFIG_DEFAULT_LETTER_SHELL_USE_UART1 +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */ +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */ +/* end of Letter Shell Configuration */ +#define CONFIG_USE_TLSF +/* CONFIG_USE_SDMMC_CMD is not set */ +#define CONFIG_USE_CHERRY_USB + +/* CherryUSB Configuration */ + +#define CONFIG_CHERRY_USB_PORT_XHCI +/* CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set */ +#define CONFIG_CHERRYUSB_HOST +/* CONFIG_CHERRYUSB_DEVICE is not set */ +#define CONFIG_CHERRY_USB_HOST_HUB +#define CONFIG_CHERRY_USB_HOST_MSC +#define CONFIG_CHERRY_USB_HOST_HID +#define CONFIG_CHERRY_USB_HOST_VEDIO +#define CONFIG_CHERRY_USB_HOST_CDC +#define CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS +/* end of CherryUSB Configuration */ +#define CONFIG_USE_LVGL + +/* LVGL configuration */ + +#define CONFIG_LV_CONF_SKIP +/* CONFIG_LV_CONF_MINIMAL is not set */ + +/* Color settings */ + +#define CONFIG_LV_COLOR_DEPTH_32 +/* CONFIG_LV_COLOR_DEPTH_16 is not set */ +/* CONFIG_LV_COLOR_DEPTH_8 is not set */ +/* CONFIG_LV_COLOR_DEPTH_1 is not set */ +#define CONFIG_LV_COLOR_DEPTH 32 +#define CONFIG_LV_COLOR_MIX_ROUND_OFS 0 +#define CONFIG_LV_COLOR_CHROMA_KEY_HEX 0x00FF00 +/* end of Color settings */ + +/* Memory settings */ + +/* CONFIG_LV_MEM_CUSTOM is not set */ +#define CONFIG_LV_MEM_SIZE_KILOBYTES 32 +#define CONFIG_LV_MEM_ADDR 0x0 +#define CONFIG_LV_MEM_BUF_MAX_NUM 16 +/* CONFIG_LV_MEMCPY_MEMSET_STD is not set */ +/* end of Memory settings */ + +/* HAL Settings */ + +/* CONFIG_LV_TICK_CUSTOM is not set */ +#define CONFIG_LV_DPI_DEF 130 +/* end of HAL Settings */ + +/* Feature configuration */ + +/* Drawing */ + +#define CONFIG_LV_DRAW_COMPLEX +#define CONFIG_LV_SHADOW_CACHE_SIZE 0 +#define CONFIG_LV_CIRCLE_CACHE_SIZE 4 +#define CONFIG_LV_LAYER_SIMPLE_BUF_SIZE 24576 +#define CONFIG_LV_IMG_CACHE_DEF_SIZE 0 +#define CONFIG_LV_GRADIENT_MAX_STOPS 2 +#define CONFIG_LV_GRAD_CACHE_DEF_SIZE 0 +/* CONFIG_LV_DITHER_GRADIENT is not set */ +#define CONFIG_LV_DISP_ROT_MAX_BUF 10240 +/* end of Drawing */ + +/* GPU */ + +/* CONFIG_LV_USE_GPU_ARM2D is not set */ +/* CONFIG_LV_USE_GPU_STM32_DMA2D is not set */ +/* CONFIG_LV_USE_GPU_SWM341_DMA2D is not set */ +/* CONFIG_LV_USE_GPU_NXP_PXP is not set */ +/* CONFIG_LV_USE_GPU_NXP_VG_LITE is not set */ +/* CONFIG_LV_USE_GPU_SDL is not set */ +/* end of GPU */ + +/* Logging */ + +/* CONFIG_LV_USE_LOG is not set */ +/* end of Logging */ + +/* Asserts */ + +#define CONFIG_LV_USE_ASSERT_NULL +#define CONFIG_LV_USE_ASSERT_MALLOC +/* CONFIG_LV_USE_ASSERT_STYLE is not set */ +/* CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set */ +/* CONFIG_LV_USE_ASSERT_OBJ is not set */ +#define CONFIG_LV_ASSERT_HANDLER_INCLUDE "assert.h" +/* end of Asserts */ + +/* Others */ + +/* CONFIG_LV_USE_PERF_MONITOR is not set */ +/* CONFIG_LV_USE_MEM_MONITOR is not set */ +/* CONFIG_LV_USE_REFR_DEBUG is not set */ +/* CONFIG_LV_SPRINTF_CUSTOM is not set */ +/* CONFIG_LV_SPRINTF_USE_FLOAT is not set */ +#define CONFIG_LV_USE_USER_DATA +/* CONFIG_LV_ENABLE_GC is not set */ +/* end of Others */ + +/* Compiler settings */ + +/* CONFIG_LV_BIG_ENDIAN_SYSTEM is not set */ +#define CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 +/* CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM is not set */ +/* CONFIG_LV_USE_LARGE_COORD is not set */ +/* end of Compiler settings */ +/* end of Feature configuration */ + +/* Font usage */ + +/* Enable built-in fonts */ + +/* CONFIG_LV_FONT_MONTSERRAT_8 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_10 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_12 is not set */ +#define CONFIG_LV_FONT_MONTSERRAT_14 +/* CONFIG_LV_FONT_MONTSERRAT_16 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_18 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_20 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_22 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_24 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_26 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_28 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_30 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_32 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_34 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_36 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_38 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_40 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_42 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_44 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_46 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_48 is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_12_SUBPX is not set */ +/* CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set */ +/* CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set */ +/* CONFIG_LV_FONT_SIMSUN_16_CJK is not set */ +/* CONFIG_LV_FONT_UNSCII_8 is not set */ +/* CONFIG_LV_FONT_UNSCII_16 is not set */ +/* end of Enable built-in fonts */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set */ +#define CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14 +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_18 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_20 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_22 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_24 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_26 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_30 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_32 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_34 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_36 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_38 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_40 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_42 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_44 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_46 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX is not set */ +/* CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set */ +/* CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set */ +/* CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set */ +/* CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set */ +/* CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set */ +/* CONFIG_LV_FONT_FMT_TXT_LARGE is not set */ +/* CONFIG_LV_USE_FONT_COMPRESSED is not set */ +/* CONFIG_LV_USE_FONT_SUBPX is not set */ +#define CONFIG_LV_USE_FONT_PLACEHOLDER +/* end of Font usage */ + +/* Text Settings */ + +#define CONFIG_LV_TXT_ENC_UTF8 +/* CONFIG_LV_TXT_ENC_ASCII is not set */ +#define CONFIG_LV_TXT_BREAK_CHARS " ,.;:-_" +#define CONFIG_LV_TXT_LINE_BREAK_LONG_LEN 0 +#define CONFIG_LV_TXT_COLOR_CMD "#" +/* CONFIG_LV_USE_BIDI is not set */ +/* CONFIG_LV_USE_ARABIC_PERSIAN_CHARS is not set */ +/* end of Text Settings */ + +/* Widget usage */ + +#define CONFIG_LV_USE_ARC +#define CONFIG_LV_USE_BAR +#define CONFIG_LV_USE_BTN +#define CONFIG_LV_USE_BTNMATRIX +#define CONFIG_LV_USE_CANVAS +#define CONFIG_LV_USE_CHECKBOX +#define CONFIG_LV_USE_DROPDOWN +#define CONFIG_LV_USE_IMG +#define CONFIG_LV_USE_LABEL +#define CONFIG_LV_LABEL_TEXT_SELECTION +#define CONFIG_LV_LABEL_LONG_TXT_HINT +#define CONFIG_LV_USE_LINE +#define CONFIG_LV_USE_ROLLER +#define CONFIG_LV_ROLLER_INF_PAGES 7 +#define CONFIG_LV_USE_SLIDER +#define CONFIG_LV_USE_SWITCH +#define CONFIG_LV_USE_TEXTAREA +#define CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 +#define CONFIG_LV_USE_TABLE +/* end of Widget usage */ + +/* Extra Widgets */ + +#define CONFIG_LV_USE_ANIMIMG +#define CONFIG_LV_USE_CALENDAR +/* CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set */ +#define CONFIG_LV_USE_CALENDAR_HEADER_ARROW +#define CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN +#define CONFIG_LV_USE_CHART +#define CONFIG_LV_USE_COLORWHEEL +#define CONFIG_LV_USE_IMGBTN +#define CONFIG_LV_USE_KEYBOARD +#define CONFIG_LV_USE_LED +#define CONFIG_LV_USE_LIST +#define CONFIG_LV_USE_MENU +#define CONFIG_LV_USE_METER +#define CONFIG_LV_USE_MSGBOX +#define CONFIG_LV_USE_SPAN +#define CONFIG_LV_SPAN_SNIPPET_STACK_SIZE 64 +#define CONFIG_LV_USE_SPINBOX +#define CONFIG_LV_USE_SPINNER +#define CONFIG_LV_USE_TABVIEW +#define CONFIG_LV_USE_TILEVIEW +#define CONFIG_LV_USE_WIN +/* end of Extra Widgets */ + +/* Themes */ + +#define CONFIG_LV_USE_THEME_DEFAULT +/* CONFIG_LV_THEME_DEFAULT_DARK is not set */ +#define CONFIG_LV_THEME_DEFAULT_GROW +#define CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME 80 +#define CONFIG_LV_USE_THEME_BASIC +/* CONFIG_LV_USE_THEME_MONO is not set */ +/* end of Themes */ + +/* Layouts */ + +#define CONFIG_LV_USE_FLEX +#define CONFIG_LV_USE_GRID +/* end of Layouts */ + +/* 3rd Party Libraries */ + +/* CONFIG_LV_USE_FS_STDIO is not set */ +/* CONFIG_LV_USE_FS_POSIX is not set */ +/* CONFIG_LV_USE_FS_WIN32 is not set */ +/* CONFIG_LV_USE_FS_FATFS is not set */ +/* CONFIG_LV_USE_PNG is not set */ +/* CONFIG_LV_USE_BMP is not set */ +/* CONFIG_LV_USE_SJPG is not set */ +/* CONFIG_LV_USE_GIF is not set */ +/* CONFIG_LV_USE_QRCODE is not set */ +/* CONFIG_LV_USE_FREETYPE is not set */ +/* CONFIG_LV_USE_RLOTTIE is not set */ +/* CONFIG_LV_USE_FFMPEG is not set */ +/* end of 3rd Party Libraries */ + +/* Others */ + +#define CONFIG_LV_USE_SNAPSHOT +/* CONFIG_LV_USE_MONKEY is not set */ +/* CONFIG_LV_USE_GRIDNAV is not set */ +/* CONFIG_LV_USE_FRAGMENT is not set */ +/* CONFIG_LV_USE_IMGFONT is not set */ +/* CONFIG_LV_USE_MSG is not set */ +/* CONFIG_LV_USE_IME_PINYIN is not set */ +/* end of Others */ + +/* Examples */ + +#define CONFIG_LV_BUILD_EXAMPLES +/* end of Examples */ + +/* Demos */ + +/* CONFIG_LV_USE_DEMO_WIDGETS is not set */ +/* CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER is not set */ +/* CONFIG_LV_USE_DEMO_BENCHMARK is not set */ +/* CONFIG_LV_USE_DEMO_STRESS is not set */ +/* CONFIG_LV_USE_DEMO_MUSIC is not set */ +/* end of Demos */ +/* end of LVGL configuration */ +/* end of Third-Party Configuration */ + +/* Kernel Configuration */ + +#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER +#define CONFIG_FREERTOS_HZ 1000 +#define CONFIG_FREERTOS_MAX_PRIORITIES 32 +#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13 +#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11 +#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 +#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024 +#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32 +#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 +#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 +#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 +#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 +#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS +#define CONFIG_FREERTOS_USE_TRACE_FACILITY +#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS +/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */ +#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240 +#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1 +/* end of Kernel Configuration */ + +#endif diff --git a/example/peripheral/media/lvgl_indev/src/cmd.c b/example/peripheral/media/lvgl_indev/src/cmd.c new file mode 100644 index 0000000000000000000000000000000000000000..88ff483a0347b20c0d459a757e8fa8d79d7e338e --- /dev/null +++ b/example/peripheral/media/lvgl_indev/src/cmd.c @@ -0,0 +1,181 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: cmd.c + * Date: 2022-08-25 16:22:40 + * LastEditTime: 2023-03-20 15:40:40 + * Description: This file is for providing the demo commond + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + * 1.1 Wangzq 2023/03/20 Add the multi-display config + */ +#include +#include +#include "strto.h" +#include "sdkconfig.h" +#include "FreeRTOS.h" +#include "../src/shell.h" + +#include "fdc_common_hw.h" +#include "fdcdp.h" +#include "fdp_hw.h" + +#include "lv_port_disp.h" +#include "lv_obj.h" +#include "lv_conf.h" +#include "lv_indev_test.h" + +static InputParm input_config; + +static void FFreeRTOSMediaCmdUsage(void) +{ + printf("Usage:\r\n"); + printf(" Media init 0/1/2, channel 0 ,channel 1 , channel 0 and channel 1 \r\n"); + printf(" -- the resolution of width\r\n"); + printf(" -- the resolution of height\r\n"); + printf(" -- the sigle screen or multi-display \r\n"); + printf(" -- the color_depth of screen ,default color_depth is 32\r\n"); + printf(" -- the refresh_rate of screen ,default refresh_rate is 60\r\n"); + printf(" Media init_kb \r\n"); + printf(" -- init the keyborad,test id is 0\r\n"); + printf(" Media init_ms \r\n"); + printf(" -- init the mouse,test id is 1\r\n"); + printf(" Media demo \r\n"); + printf(" -- a test demo to use keyboard and mouse\r\n"); + printf(" Media lsusb \r\n"); + printf(" -- list the usb device\r\n"); +} + +static int MediaCmdEntry(int argc, char *argv[]) +{ + u32 id ; + u32 usb_id = 0; + u32 channel; + static boolean inited = FALSE; + if (argc < 2) + { + FFreeRTOSMediaCmdUsage(); + return -1; + } + if (!strcmp(argv[1], "init")) + { + if (argc >= 3) + { + input_config.channel = (u32)simple_strtoul(argv[2], NULL, 10); + if (input_config.channel > FDCDP_INSTANCE_NUM) + { + printf("Please insert the correct num,such as 0,1 or 2 \r\n"); + } + input_config.width = (u32)simple_strtoul(argv[3], NULL, 10); + input_config.height = (u32)simple_strtoul(argv[4], NULL, 10); + input_config.multi_mode = (u32)simple_strtoul(argv[5], NULL, 10); + input_config.color_depth = (u32)simple_strtoul(argv[6], NULL, 10); + input_config.refresh_rate = (u32)simple_strtoul(argv[7], NULL, 10); + } + else + { + input_config.channel = 0; + input_config.width = 1024; + input_config.height = 768; + input_config.multi_mode = 0; + input_config.color_depth = 32; + input_config.refresh_rate = 60; + } + BaseType_t task_ret = FFreeRTOSMediaInitCreate(&input_config); + if (pdPASS != task_ret) + { + return -2; + } + inited = TRUE; + } + if (!strcmp(argv[1], "init_kb")) + { + if (argc < 3) + { + return -2; + } + if (inited != TRUE) + { + printf("please ensure the media has been inited \r\n"); + return -2; + } + usb_id = (uint8_t)simple_strtoul(argv[2], NULL, 10); + BaseType_t task_ret = FFreeRTOSInitKbCreate(usb_id); + + if (pdPASS != task_ret) + { + return -2; + } + } + if (!strcmp(argv[1], "init_ms")) + { + if (argc < 3) + { + return -2; + } + if (inited != TRUE) + { + printf("please ensure the media has been inited \r\n"); + return -2; + } + usb_id = (uint8_t)simple_strtoul(argv[2], NULL, 10); + BaseType_t task_ret = FFreeRTOSInitMsCreate(usb_id); + + if (pdPASS != task_ret) + { + return -2; + } + } + if (!strcmp(argv[1], "demo")) + { + if (inited != TRUE) + { + printf("please ensure the media has been inited \r\n"); + return -2; + } + BaseType_t task_ret = FFreeRTOSDemoCreate(); + + if (pdPASS != task_ret) + { + return -2; + } + } + if (!strcmp(argv[1], "deinit")) + { + if (inited != TRUE) + { + printf("please ensure the media has been inited \r\n"); + return -2; + } + if (argc < 3) + { + return -2; + } + + channel = (uint8_t)simple_strtoul(argv[2], NULL, 10); + FFreeRTOSMediaChannelDeinit(channel); + } + + if (!strcmp(argv[1], "lsusb")) + { + FFreeRTOSListUsbDev(argc - 1, &argv[1]); + } + return 0; + +} + +SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), Media, MediaCmdEntry, test freertos media driver); \ No newline at end of file diff --git a/example/peripheral/media/lvgl_indev/src/img_clothes.c b/example/peripheral/media/lvgl_indev/src/img_clothes.c new file mode 100644 index 0000000000000000000000000000000000000000..4d9945a477e41888c3722fcf4e021f3677cc40b7 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/src/img_clothes.c @@ -0,0 +1,199 @@ +#include "../../../lvgl.h" + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_IMG_CLOTHES +#define LV_ATTRIBUTE_IMG_IMG_CLOTHES +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMG_CLOTHES uint8_t img_clothes_map[] = { +#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8 + /*Pixel format: Blue: 2 bit, Green: 3 bit, Red: 3 bit, Alpha 8 bit */ + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x07, 0xff, 0x50, 0xff, 0x9b, 0xff, 0xd0, 0xff, 0xe8, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xd7, 0xef, 0xd2, 0xef, 0x8d, 0xef, 0x8d, 0xef, 0xd6, 0xef, 0xfb, 0xef, 0xff, 0xef, 0xff, 0xef, 0xfb, 0xef, 0xfb, 0xef, 0xff, 0xef, 0xff, 0xef, 0xfb, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0xff, 0xe3, 0xff, 0xc8, 0xff, 0x9b, 0xff, 0x4f, 0xff, 0x07, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x50, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xd2, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x53, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x03, 0xff, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xad, 0xff, 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0xff, 0x03, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xd1, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x54, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xad, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x54, 0xff, 0x00, + 0xff, 0x07, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xad, 0xff, 0x8d, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xff, 0x07, + 0xff, 0x54, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0x8d, 0xff, 0x64, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5c, + 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x49, 0xff, 0x45, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0x69, 0xff, 0x69, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xb2, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, + 0xff, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0xd2, 0xff, 0xf6, 0xff, 0xb1, 0xff, 0x44, 0xff, 0x44, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0xf6, 0xff, 0xfe, 0xff, 0xb6, 0xff, 0x01, 0xff, 0x25, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x20, 0xff, 0x44, 0xff, 0x20, 0xff, 0x64, 0xff, 0xd1, 0xff, 0xd2, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0x49, 0xff, 0x05, 0xff, 0x05, 0xff, 0x01, 0xff, 0x49, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4a, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x64, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x6e, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x01, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0x49, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x93, 0xff, 0x72, 0xff, 0x92, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x92, 0xff, 0x72, 0xff, 0x92, 0xff, 0x72, 0xff, 0x72, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x01, 0xff, 0x05, 0xff, 0x25, 0xff, 0x05, 0xff, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6d, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0x6d, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x01, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x01, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x01, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x8d, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x92, 0xff, 0x72, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x8d, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd2, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x49, 0xff, 0x8d, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xb1, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x01, 0xff, 0x01, 0xff, 0x49, 0xff, 0x8d, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xb1, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x01, 0xff, 0x01, 0xff, 0x49, 0xff, 0x8d, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xd2, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x49, 0xff, 0x8d, 0xff, 0xb1, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x49, 0xff, 0x8e, 0xff, 0xb1, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x8e, 0xff, 0xd2, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x49, 0xff, 0x92, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x69, 0xff, 0x92, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xf6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xf6, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xd6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xd2, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd2, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd1, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb2, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd1, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xad, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0xd7, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd1, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0x8d, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xb1, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0x69, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0x69, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0x69, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0x69, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd1, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xad, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, + 0xff, 0xcb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0x69, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb1, 0xff, 0xf6, 0xff, 0xf6, 0xff, 0xad, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, + 0xff, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xb2, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xad, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, + 0xff, 0x54, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xfa, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xd2, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xad, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5c, + 0xff, 0x07, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xf6, 0xff, 0xad, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xff, 0x07, + 0xff, 0x00, 0xff, 0x54, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x24, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xad, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x54, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x05, 0xff, 0x05, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x04, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x24, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x6d, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8b, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x03, 0xff, 0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x24, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x20, 0xff, 0x20, 0xff, 0x20, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x92, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x00, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x03, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x53, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xff, 0xff, 0x69, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x24, 0xff, 0x24, 0xff, 0x24, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x92, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xd1, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x54, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x07, 0xff, 0x5b, 0xff, 0xac, 0xff, 0xdf, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xf2, 0xff, 0xff, 0xff, 0x8d, 0xff, 0x00, 0xff, 0x24, 0xff, 0x24, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x20, 0xff, 0x24, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf6, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdf, 0xff, 0xac, 0xff, 0x5b, 0xff, 0x07, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, +#endif +#if LV_COLOR_DEPTH == 16 + /*Pixel format: Blue: 5 bit, Green: 6 bit, Red: 5 bit, Alpha 8 bit*/ + 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x9e, 0xf7, 0x07, 0x7e, 0xf7, 0x50, 0x7e, 0xf7, 0x9b, 0x7e, 0xf7, 0xd0, 0x7e, 0xf7, 0xe8, 0x7e, 0xf7, 0xef, 0x7e, 0xf7, 0xef, 0x7e, 0xf7, 0xef, 0x7d, 0xf7, 0xef, 0x7d, 0xf7, 0xef, 0x7d, 0xf7, 0xef, 0x9e, 0xf7, 0xef, 0x7d, 0xef, 0xef, 0x74, 0xc5, 0xef, 0x2d, 0xb4, 0xef, 0xc9, 0x8a, 0xef, 0x2b, 0x8b, 0xef, 0x31, 0xcd, 0xef, 0x55, 0xee, 0xef, 0x3a, 0xff, 0xef, 0x19, 0xff, 0xef, 0x15, 0xe6, 0xef, 0x56, 0xe6, 0xef, 0xd8, 0xfe, 0xef, 0xf8, 0xfe, 0xef, 0x77, 0xee, 0xef, 0x5d, 0xef, 0xef, 0x7d, 0xf7, 0xef, 0x5d, 0xf7, 0xef, 0x5d, 0xf7, 0xef, 0x5d, 0xf7, 0xef, 0x7d, 0xf7, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xef, 0x7d, 0xef, 0xe3, 0x7d, 0xef, 0xc8, 0x7d, 0xef, 0x9b, 0x5d, 0xef, 0x4f, 0x5d, 0xef, 0x07, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, + 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xf7, 0x00, 0x5d, 0xf7, 0x00, 0x7d, 0xf7, 0x50, 0x7d, 0xf7, 0xdb, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x99, 0xde, 0xff, 0x15, 0xe6, 0xff, 0x35, 0xee, 0xff, 0x0d, 0xbc, 0xff, 0x92, 0xe5, 0xff, 0x19, 0xff, 0xff, 0x19, 0xff, 0xff, 0xb7, 0xfe, 0xff, 0xf3, 0xed, 0xff, 0xb2, 0xe5, 0xff, 0xf8, 0xfe, 0xff, 0xf8, 0xfe, 0xff, 0x90, 0xac, 0xff, 0x3d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xdb, 0x5c, 0xef, 0x53, 0x3c, 0xef, 0x00, 0x3c, 0xef, 0x00, 0x3c, 0xef, 0x00, 0x3c, 0xef, 0x00, + 0x5d, 0xef, 0x00, 0x7d, 0xf7, 0x00, 0x7d, 0xf7, 0x03, 0x7d, 0xf7, 0x88, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0xfa, 0xfe, 0xff, 0x7b, 0xff, 0xff, 0xd7, 0xfe, 0xff, 0x76, 0xfe, 0xff, 0x19, 0xff, 0xff, 0xd8, 0xfe, 0xff, 0x75, 0xf6, 0xff, 0xf3, 0xed, 0xff, 0x91, 0xdd, 0xff, 0x72, 0xdd, 0xff, 0x4a, 0xa3, 0xff, 0x8b, 0x9b, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0x88, 0x3c, 0xef, 0x03, 0x3c, 0xef, 0x00, 0x3c, 0xef, 0x00, + 0x5d, 0xef, 0x00, 0x7d, 0xf7, 0x00, 0x7d, 0xf7, 0x88, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xef, 0xff, 0x7d, 0xef, 0xff, 0x1b, 0xf7, 0xff, 0x1a, 0xff, 0xff, 0x3a, 0xff, 0xff, 0xb7, 0xfe, 0xff, 0xb7, 0xfe, 0xff, 0xb7, 0xfe, 0xff, 0x96, 0xf6, 0xff, 0x75, 0xf6, 0xff, 0x34, 0xee, 0xff, 0xb1, 0xe5, 0xff, 0x0b, 0xb4, 0xff, 0x0b, 0xbc, 0xff, 0xce, 0xcc, 0xff, 0xba, 0xe6, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0x88, 0x3c, 0xef, 0x00, 0x3c, 0xef, 0x00, + 0x5d, 0xef, 0x00, 0x7d, 0xf7, 0x54, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x7d, 0xef, 0xff, 0xfa, 0xee, 0xff, 0xb4, 0xdd, 0xff, 0x31, 0xdd, 0xff, 0x96, 0xfe, 0xff, 0xd7, 0xfe, 0xff, 0xd7, 0xfe, 0xff, 0x96, 0xf6, 0xff, 0x55, 0xee, 0xff, 0x55, 0xee, 0xff, 0x91, 0xdd, 0xff, 0x49, 0x9b, 0xff, 0x50, 0xdd, 0xff, 0x70, 0xdd, 0xff, 0xd5, 0xd5, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x3d, 0xef, 0x54, 0x3d, 0xef, 0x00, + 0x5d, 0xef, 0x07, 0x7d, 0xf7, 0xe3, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x7d, 0xef, 0xff, 0x37, 0xd6, 0xff, 0xcf, 0xcc, 0xff, 0x34, 0xf6, 0xff, 0x55, 0xf6, 0xff, 0xf8, 0xfe, 0xff, 0x76, 0xf6, 0xff, 0x96, 0xf6, 0xff, 0x34, 0xee, 0xff, 0x8a, 0x9b, 0xff, 0x08, 0x8b, 0xff, 0x91, 0xe5, 0xff, 0x90, 0xe5, 0xff, 0xef, 0xcc, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xe4, 0x3d, 0xef, 0x07, + 0x5d, 0xef, 0x54, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0xbe, 0xff, 0xff, 0x5d, 0xef, 0xff, 0x50, 0xbc, 0xff, 0x90, 0xdc, 0xff, 0xd2, 0xed, 0xff, 0x54, 0xee, 0xff, 0x75, 0xf6, 0xff, 0x13, 0xe6, 0xff, 0xe8, 0x8a, 0xff, 0x83, 0x59, 0xff, 0xce, 0xc4, 0xff, 0xd1, 0xe5, 0xff, 0x90, 0xe5, 0xff, 0x6c, 0xc4, 0xff, 0x73, 0xcd, 0xff, 0xba, 0xde, 0xff, 0x1c, 0xe7, 0xff, 0x9e, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3d, 0xef, 0x5c, + 0x7d, 0xf7, 0x9f, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xef, 0xff, 0xbe, 0xff, 0xff, 0x7e, 0xf7, 0xff, 0xb7, 0xb5, 0xff, 0x2b, 0x42, 0xff, 0x86, 0x39, 0xff, 0x70, 0xdd, 0xff, 0xd6, 0xfe, 0xff, 0x13, 0xee, 0xff, 0x0f, 0xcd, 0xff, 0x46, 0x72, 0xff, 0x05, 0x62, 0xff, 0xce, 0xc4, 0xff, 0xd2, 0xe5, 0xff, 0xf2, 0xe5, 0xff, 0x90, 0xe5, 0xff, 0x8c, 0xcc, 0xff, 0x4b, 0xc4, 0xff, 0xb1, 0xe5, 0xff, 0x90, 0xa4, 0xff, 0x12, 0x84, 0xff, 0xfb, 0xe6, 0xff, 0xbe, 0xff, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xac, + 0x7d, 0xf7, 0xd0, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0x7e, 0xf7, 0xff, 0xb8, 0xbd, 0xff, 0xce, 0x52, 0xff, 0xc7, 0x10, 0xff, 0x45, 0x00, 0xff, 0xa4, 0x18, 0xff, 0x6d, 0xb4, 0xff, 0x71, 0xd5, 0xff, 0x8b, 0x93, 0xff, 0xc2, 0x38, 0xff, 0xe1, 0x40, 0xff, 0x0f, 0xcd, 0xff, 0x91, 0xdd, 0xff, 0xb1, 0xe5, 0xff, 0xf2, 0xed, 0xff, 0x70, 0xdd, 0xff, 0xed, 0xd4, 0xff, 0xed, 0xd4, 0xff, 0xb4, 0xfe, 0xff, 0xb0, 0xac, 0xff, 0x25, 0x00, 0xff, 0x89, 0x29, 0xff, 0xb4, 0x94, 0xff, 0x3c, 0xef, 0xff, 0xbe, 0xff, 0xff, 0x7d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3d, 0xef, 0xe0, + 0x7e, 0xf7, 0xe7, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9e, 0xff, 0xff, 0x5d, 0xef, 0xff, 0xf5, 0x9c, 0xff, 0xae, 0x4a, 0xff, 0xe8, 0x18, 0xff, 0xc8, 0x10, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x86, 0x08, 0xff, 0x62, 0x18, 0xff, 0xc1, 0x30, 0xff, 0x20, 0x20, 0xff, 0x22, 0x59, 0xff, 0xca, 0xb3, 0xff, 0x8c, 0xc4, 0xff, 0x2f, 0xd5, 0xff, 0x13, 0xee, 0xff, 0xd1, 0xe5, 0xff, 0x90, 0xdd, 0xff, 0xb1, 0xe5, 0xff, 0x12, 0xee, 0xff, 0x94, 0xf6, 0xff, 0x6c, 0x52, 0xff, 0xc7, 0x10, 0xff, 0xa6, 0x08, 0xff, 0x86, 0x08, 0xff, 0xca, 0x31, 0xff, 0xb4, 0x9c, 0xff, 0x5d, 0xef, 0xff, 0x9e, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3d, 0xef, 0xf8, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0xbe, 0xff, 0xff, 0x1c, 0xe7, 0xff, 0x6d, 0x4a, 0xff, 0xc7, 0x10, 0xff, 0xe8, 0x10, 0xff, 0x09, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0xe8, 0x18, 0xff, 0x44, 0x00, 0xff, 0x00, 0x00, 0xff, 0x63, 0x59, 0xff, 0x2a, 0xc4, 0xff, 0x11, 0xf6, 0xff, 0x12, 0xee, 0xff, 0xd1, 0xe5, 0xff, 0x12, 0xee, 0xff, 0xf2, 0xed, 0xff, 0x53, 0xf6, 0xff, 0xd6, 0xfe, 0xff, 0x55, 0xee, 0xff, 0xed, 0x62, 0xff, 0xc7, 0x10, 0xff, 0xe7, 0x10, 0xff, 0xe7, 0x10, 0xff, 0xe7, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x86, 0x08, 0xff, 0x4b, 0x42, 0xff, 0x39, 0xc6, 0xff, 0xbe, 0xff, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0x91, 0x6b, 0xff, 0xc8, 0x10, 0xff, 0x29, 0x21, 0xff, 0x29, 0x21, 0xff, 0x29, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x49, 0x21, 0xff, 0xe8, 0x18, 0xff, 0xa6, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x0b, 0x73, 0xff, 0x31, 0xc5, 0xff, 0x54, 0xee, 0xff, 0x54, 0xf6, 0xff, 0x74, 0xf6, 0xff, 0x55, 0xee, 0xff, 0x15, 0xde, 0xff, 0x30, 0x94, 0xff, 0xca, 0x39, 0xff, 0xc8, 0x10, 0xff, 0xe7, 0x10, 0xff, 0xe8, 0x18, 0xff, 0xe8, 0x18, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x86, 0x08, 0xff, 0xc6, 0x10, 0xff, 0xf4, 0xa4, 0xff, 0xbe, 0xff, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0x5a, 0xce, 0xff, 0x4a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0xeb, 0x39, 0xff, 0x4c, 0x4a, 0xff, 0x4c, 0x4a, 0xff, 0x0b, 0x42, 0xff, 0x6a, 0x29, 0xff, 0x09, 0x11, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0x49, 0x21, 0xff, 0x29, 0x21, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0xe8, 0x18, 0xff, 0x86, 0x08, 0xff, 0xe7, 0x18, 0xff, 0x7a, 0xce, 0xff, 0x9e, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7d, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0x74, 0x8c, 0xff, 0xe8, 0x10, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x19, 0xff, 0x2a, 0x19, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x49, 0x21, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0xa7, 0x08, 0xff, 0x70, 0x6b, 0xff, 0xbe, 0xff, 0xff, 0x7d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xbf, 0xff, 0xff, 0x30, 0x63, 0xff, 0x09, 0x19, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x21, 0xff, 0x49, 0x21, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x8a, 0x29, 0xff, 0xdb, 0xde, 0xff, 0x9e, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x6d, 0x42, 0xff, 0x29, 0x19, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0xc8, 0x10, 0xff, 0x56, 0xad, 0xff, 0xbe, 0xff, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x3d, 0xe7, 0xff, 0xec, 0x39, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x8b, 0x29, 0xff, 0x8b, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x19, 0xff, 0x09, 0x19, 0xff, 0x08, 0x19, 0xff, 0xa7, 0x10, 0xff, 0xd1, 0x73, 0xff, 0xbe, 0xff, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0xbe, 0xff, 0xff, 0x1c, 0xe7, 0xff, 0xcb, 0x31, 0xff, 0x09, 0x19, 0xff, 0x08, 0x19, 0xff, 0x49, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8b, 0x29, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0xa7, 0x08, 0xff, 0xad, 0x52, 0xff, 0x9d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x3d, 0xef, 0xff, 0x0c, 0x3a, 0xff, 0x08, 0x19, 0xff, 0xe8, 0x18, 0xff, 0xc7, 0x10, 0xff, 0x29, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6d, 0x3a, 0xff, 0x8e, 0x42, 0xff, 0x4d, 0x3a, 0xff, 0x4d, 0x3a, 0xff, 0x2c, 0x32, 0xff, 0x4d, 0x3a, 0xff, 0x4d, 0x3a, 0xff, 0x2d, 0x3a, 0xff, 0xae, 0x42, 0xff, 0x2d, 0x32, 0xff, 0x6d, 0x42, 0xff, 0x8e, 0x42, 0xff, 0x4d, 0x3a, 0xff, 0x6d, 0x3a, 0xff, 0x0c, 0x32, 0xff, 0x4d, 0x3a, 0xff, 0xab, 0x29, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x08, 0x19, 0xff, 0xe8, 0x18, 0xff, 0xe8, 0x18, 0xff, 0xc7, 0x10, 0xff, 0x4c, 0x42, 0xff, 0x5d, 0xef, 0xff, 0x7d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7d, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x4d, 0x42, 0xff, 0x08, 0x19, 0xff, 0xe8, 0x18, 0xff, 0x85, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x8b, 0x29, 0xff, 0x8a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x30, 0x53, 0xff, 0x74, 0x74, 0xff, 0xb1, 0x63, 0xff, 0x74, 0x74, 0xff, 0x54, 0x74, 0xff, 0x54, 0x74, 0xff, 0x33, 0x6c, 0xff, 0x74, 0x74, 0xff, 0xf2, 0x63, 0xff, 0xb1, 0x5b, 0xff, 0xd2, 0x63, 0xff, 0x74, 0x74, 0xff, 0xb2, 0x63, 0xff, 0x74, 0x74, 0xff, 0x53, 0x74, 0xff, 0xf2, 0x63, 0xff, 0xab, 0x29, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0xe8, 0x18, 0xff, 0xa6, 0x10, 0xff, 0xc7, 0x10, 0xff, 0xe7, 0x10, 0xff, 0xa7, 0x10, 0xff, 0xeb, 0x39, 0xff, 0x1c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xff, 0xff, 0x1c, 0xe7, 0xff, 0x0c, 0x3a, 0xff, 0x29, 0x19, 0xff, 0x09, 0x19, 0xff, 0xc7, 0x10, 0xff, 0xa6, 0x10, 0xff, 0x8a, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4d, 0x3a, 0xff, 0xef, 0x52, 0xff, 0xce, 0x4a, 0xff, 0xce, 0x4a, 0xff, 0xce, 0x4a, 0xff, 0xce, 0x4a, 0xff, 0xce, 0x4a, 0xff, 0xce, 0x52, 0xff, 0xae, 0x4a, 0xff, 0xae, 0x4a, 0xff, 0xae, 0x4a, 0xff, 0xef, 0x52, 0xff, 0xae, 0x4a, 0xff, 0xae, 0x4a, 0xff, 0xce, 0x4a, 0xff, 0x6d, 0x42, 0xff, 0xab, 0x29, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x29, 0x19, 0xff, 0x85, 0x10, 0xff, 0x65, 0x08, 0xff, 0xa6, 0x10, 0xff, 0xe7, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x89, 0x29, 0xff, 0xfb, 0xe6, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0xbe, 0xff, 0xff, 0xf9, 0xc5, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x08, 0x19, 0xff, 0xa6, 0x10, 0xff, 0x08, 0x19, 0xff, 0x8a, 0x21, 0xff, 0x8b, 0x21, 0xff, 0x8d, 0x4a, 0xff, 0xeb, 0x31, 0xff, 0xeb, 0x31, 0xff, 0xec, 0x31, 0xff, 0xcb, 0x31, 0xff, 0xcb, 0x31, 0xff, 0xeb, 0x31, 0xff, 0xeb, 0x31, 0xff, 0x0c, 0x3a, 0xff, 0x0c, 0x3a, 0xff, 0x0c, 0x3a, 0xff, 0x0c, 0x3a, 0xff, 0x0c, 0x3a, 0xff, 0xeb, 0x31, 0xff, 0xeb, 0x31, 0xff, 0xcb, 0x31, 0xff, 0x8a, 0x29, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0xe7, 0x18, 0xff, 0x64, 0x08, 0xff, 0x86, 0x10, 0xff, 0xe7, 0x18, 0xff, 0x08, 0x19, 0xff, 0xc7, 0x10, 0xff, 0x48, 0x21, 0xff, 0x9a, 0xd6, 0xff, 0x5d, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0x94, 0x94, 0xff, 0x29, 0x19, 0xff, 0x8a, 0x21, 0xff, 0x29, 0x21, 0xff, 0x08, 0x19, 0xff, 0xa6, 0x10, 0xff, 0xc6, 0x10, 0xff, 0x6a, 0x21, 0xff, 0x8b, 0x29, 0xff, 0x8c, 0x4a, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x2c, 0x3a, 0xff, 0x6c, 0x4a, 0xff, 0xeb, 0x41, 0xff, 0xcb, 0x31, 0xff, 0x4a, 0x19, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x85, 0x10, 0xff, 0x85, 0x08, 0xff, 0xe7, 0x10, 0xff, 0x08, 0x19, 0xff, 0xe8, 0x18, 0xff, 0xe7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x19, 0xc6, 0xff, 0x7d, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xbe, 0xff, 0xff, 0x91, 0x73, 0xff, 0xe9, 0x10, 0xff, 0x6a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x08, 0x19, 0xff, 0xc6, 0x10, 0xff, 0x85, 0x10, 0xff, 0x49, 0x21, 0xff, 0xab, 0x29, 0xff, 0x8d, 0x4a, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0xab, 0x31, 0xff, 0xac, 0x62, 0xff, 0x0d, 0x63, 0xff, 0xcc, 0x62, 0xff, 0x6c, 0x52, 0xff, 0xcb, 0x31, 0xff, 0xeb, 0x31, 0xff, 0xec, 0x31, 0xff, 0xeb, 0x31, 0xff, 0xeb, 0x31, 0xff, 0xcb, 0x31, 0xff, 0xcb, 0x31, 0xff, 0xcb, 0x31, 0xff, 0x8a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x84, 0x10, 0xff, 0x85, 0x10, 0xff, 0xe8, 0x10, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0xa7, 0x10, 0xff, 0xf5, 0xa4, 0xff, 0x7d, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x74, 0xcd, 0xff, 0xcc, 0x62, 0xff, 0x6a, 0x29, 0xff, 0xe8, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x86, 0x08, 0xff, 0x64, 0x08, 0xff, 0xe7, 0x18, 0xff, 0x6a, 0x21, 0xff, 0x8d, 0x4a, 0xff, 0x8b, 0x29, 0xff, 0x6a, 0x21, 0xff, 0xad, 0x4a, 0xff, 0x4c, 0x42, 0xff, 0x2c, 0x42, 0xff, 0x4c, 0x42, 0xff, 0x8d, 0x4a, 0xff, 0xce, 0x52, 0xff, 0x2c, 0x3a, 0xff, 0x4c, 0x3a, 0xff, 0x4d, 0x42, 0xff, 0x4c, 0x42, 0xff, 0x0c, 0x3a, 0xff, 0x0b, 0x32, 0xff, 0x4c, 0x42, 0xff, 0xcb, 0x31, 0xff, 0x6a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x85, 0x10, 0xff, 0x65, 0x08, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0xa7, 0x08, 0xff, 0x4f, 0x63, 0xff, 0x7d, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0xf4, 0xe5, 0xff, 0xf1, 0xf5, 0xff, 0xb3, 0xdd, 0xff, 0x13, 0xbd, 0xff, 0x91, 0xa4, 0xff, 0xcd, 0x9b, 0xff, 0x45, 0x39, 0xff, 0xc7, 0x10, 0xff, 0x4a, 0x21, 0xff, 0x6c, 0x42, 0xff, 0x0e, 0x63, 0xff, 0xcb, 0x29, 0xff, 0x6d, 0x42, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x19, 0xff, 0xab, 0x29, 0xff, 0x6c, 0x4a, 0xff, 0x89, 0x29, 0xff, 0xaa, 0x31, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0xcb, 0x29, 0xff, 0x2b, 0x3a, 0xff, 0xcb, 0x31, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x19, 0xff, 0xa5, 0x10, 0xff, 0x64, 0x08, 0xff, 0xc7, 0x10, 0xff, 0xe8, 0x18, 0xff, 0xe8, 0x18, 0xff, 0xc7, 0x10, 0xff, 0x86, 0x08, 0xff, 0x2e, 0x6b, 0xff, 0x3c, 0xef, 0xff, 0x1c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xb3, 0xdd, 0xff, 0xb0, 0xed, 0xff, 0x94, 0xfe, 0xff, 0x18, 0xff, 0xff, 0x17, 0xff, 0xff, 0x90, 0xed, 0xff, 0x86, 0x41, 0xff, 0xe7, 0x18, 0xff, 0x6a, 0x21, 0xff, 0x4c, 0x42, 0xff, 0xf1, 0x7b, 0xff, 0xee, 0x5a, 0xff, 0x6d, 0x42, 0xff, 0xab, 0x29, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0xec, 0x31, 0xff, 0xcb, 0x5a, 0xff, 0xeb, 0x5a, 0xff, 0x0c, 0x63, 0xff, 0x4b, 0x42, 0xff, 0xab, 0x29, 0xff, 0xaa, 0x29, 0xff, 0x8c, 0x4a, 0xff, 0xac, 0x52, 0xff, 0xcb, 0x31, 0xff, 0x49, 0x21, 0xff, 0xe8, 0x18, 0xff, 0x47, 0x29, 0xff, 0x06, 0x29, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x68, 0x29, 0xff, 0x0a, 0x42, 0xff, 0x6b, 0x93, 0xff, 0xf0, 0xcc, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x93, 0xdd, 0xff, 0x6f, 0xe5, 0xff, 0x74, 0xf6, 0xff, 0xf8, 0xfe, 0xff, 0xd6, 0xfe, 0xff, 0x0e, 0xd5, 0xff, 0xe9, 0x41, 0xff, 0xe8, 0x18, 0xff, 0x49, 0x21, 0xff, 0x2c, 0x42, 0xff, 0xd0, 0x73, 0xff, 0x8f, 0x73, 0xff, 0x4c, 0x42, 0xff, 0xab, 0x29, 0xff, 0x6a, 0x21, 0xff, 0x4c, 0x42, 0xff, 0xad, 0x4a, 0xff, 0x6c, 0x42, 0xff, 0x6d, 0x4a, 0xff, 0x8d, 0x4a, 0xff, 0x6d, 0x42, 0xff, 0xad, 0x52, 0xff, 0xcb, 0x31, 0xff, 0x8c, 0x4a, 0xff, 0x8c, 0x4a, 0xff, 0x8a, 0x29, 0xff, 0x08, 0x19, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x4a, 0xff, 0x09, 0x83, 0xff, 0xef, 0xc4, 0xff, 0xb3, 0xd5, 0xff, 0xf3, 0xe5, 0xff, 0x12, 0xee, 0xff, 0x8f, 0xed, 0xff, 0xcf, 0xc4, 0xff, 0xfb, 0xe6, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x93, 0xdd, 0xff, 0x6f, 0xe5, 0xff, 0x94, 0xf6, 0xff, 0xd7, 0xfe, 0xff, 0x74, 0xf6, 0xff, 0x6c, 0xc4, 0xff, 0x2b, 0x4a, 0xff, 0xe8, 0x18, 0xff, 0x28, 0x21, 0xff, 0x8d, 0x4a, 0xff, 0x6f, 0x6b, 0xff, 0x4e, 0x63, 0xff, 0xad, 0x52, 0xff, 0xab, 0x29, 0xff, 0x6a, 0x21, 0xff, 0x4c, 0x42, 0xff, 0xab, 0x29, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x19, 0xff, 0x2c, 0x3a, 0xff, 0x6c, 0x42, 0xff, 0xcd, 0x52, 0xff, 0xcc, 0x52, 0xff, 0x49, 0x21, 0xff, 0xa6, 0x10, 0xff, 0xa6, 0x10, 0xff, 0xe8, 0x41, 0xff, 0x09, 0x83, 0xff, 0x90, 0xe5, 0xff, 0x95, 0xfe, 0xff, 0x95, 0xfe, 0xff, 0x33, 0xf6, 0xff, 0x2e, 0xdd, 0xff, 0x8e, 0xc4, 0xff, 0xfb, 0xe6, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xb4, 0xdd, 0xff, 0x6f, 0xe5, 0xff, 0x54, 0xf6, 0xff, 0xb6, 0xfe, 0xff, 0xf2, 0xed, 0xff, 0xeb, 0xb3, 0xff, 0xad, 0x52, 0xff, 0x08, 0x19, 0xff, 0x28, 0x21, 0xff, 0x8d, 0x4a, 0xff, 0xcb, 0x31, 0xff, 0xaa, 0x29, 0xff, 0x8d, 0x4a, 0xff, 0x8b, 0x29, 0xff, 0x6a, 0x21, 0xff, 0x4c, 0x42, 0xff, 0xab, 0x29, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x2c, 0x42, 0xff, 0x0b, 0x3a, 0xff, 0x8a, 0x29, 0xff, 0xea, 0x39, 0xff, 0x48, 0x21, 0xff, 0x65, 0x08, 0xff, 0x85, 0x08, 0xff, 0xc8, 0x41, 0xff, 0xe9, 0x7a, 0xff, 0xcd, 0xd4, 0xff, 0x33, 0xf6, 0xff, 0x54, 0xf6, 0xff, 0x13, 0xee, 0xff, 0x2f, 0xe5, 0xff, 0x8e, 0xbc, 0xff, 0xdb, 0xe6, 0xff, 0xfb, 0xe6, 0xff, 0x1b, 0xe7, 0xff, 0x1c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xd4, 0xdd, 0xff, 0xb0, 0xed, 0xff, 0x13, 0xf6, 0xff, 0xf2, 0xed, 0xff, 0x4f, 0xe5, 0xff, 0xcb, 0xa3, 0xff, 0x70, 0x6b, 0xff, 0x08, 0x19, 0xff, 0x08, 0x21, 0xff, 0x4c, 0x42, 0xff, 0x29, 0x21, 0xff, 0x29, 0x19, 0xff, 0x4c, 0x42, 0xff, 0xab, 0x29, 0xff, 0x6a, 0x29, 0xff, 0x4c, 0x42, 0xff, 0x8d, 0x4a, 0xff, 0x6c, 0x42, 0xff, 0x2c, 0x3a, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x0c, 0x3a, 0xff, 0x8a, 0x29, 0xff, 0x29, 0x19, 0xff, 0x8a, 0x29, 0xff, 0x48, 0x21, 0xff, 0x85, 0x10, 0xff, 0x65, 0x08, 0xff, 0x09, 0x4a, 0xff, 0xea, 0x72, 0xff, 0x4c, 0xc4, 0xff, 0xd2, 0xed, 0xff, 0x33, 0xf6, 0xff, 0xf2, 0xed, 0xff, 0x4f, 0xe5, 0xff, 0xcf, 0xc4, 0xff, 0xdb, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1b, 0xe7, 0xff, 0x1c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x92, 0xdd, 0xff, 0x12, 0xf6, 0xff, 0x33, 0xf6, 0xff, 0x90, 0xed, 0xff, 0x0e, 0xdd, 0xff, 0x4d, 0xb4, 0xff, 0x90, 0x6b, 0xff, 0x08, 0x19, 0xff, 0x08, 0x21, 0xff, 0x4c, 0x42, 0xff, 0x49, 0x21, 0xff, 0x29, 0x19, 0xff, 0x6c, 0x4a, 0xff, 0x0a, 0x42, 0xff, 0xca, 0x41, 0xff, 0xec, 0x5a, 0xff, 0xc9, 0x39, 0xff, 0xab, 0x29, 0xff, 0x8a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x0b, 0x3a, 0xff, 0x69, 0x21, 0xff, 0x08, 0x19, 0xff, 0x89, 0x29, 0xff, 0x48, 0x21, 0xff, 0xa6, 0x10, 0xff, 0x65, 0x08, 0xff, 0x09, 0x4a, 0xff, 0x2b, 0x7b, 0xff, 0xaa, 0xab, 0xff, 0x70, 0xe5, 0xff, 0xd1, 0xed, 0xff, 0xd1, 0xed, 0xff, 0xb0, 0xed, 0xff, 0xef, 0xcc, 0xff, 0xdb, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0x71, 0xe5, 0xff, 0x74, 0xfe, 0xff, 0x74, 0xf6, 0xff, 0xf2, 0xed, 0xff, 0xb1, 0xed, 0xff, 0xf0, 0xcc, 0xff, 0xce, 0x52, 0xff, 0x29, 0x19, 0xff, 0x08, 0x21, 0xff, 0x2b, 0x42, 0xff, 0x49, 0x21, 0xff, 0x09, 0x19, 0xff, 0x4c, 0x4a, 0xff, 0xea, 0x41, 0xff, 0x89, 0x39, 0xff, 0x6c, 0x52, 0xff, 0xca, 0x39, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0xeb, 0x39, 0xff, 0x29, 0x21, 0xff, 0xc7, 0x10, 0xff, 0x89, 0x29, 0xff, 0x48, 0x21, 0xff, 0xa6, 0x10, 0xff, 0xa7, 0x10, 0xff, 0x09, 0x4a, 0xff, 0x6c, 0x7b, 0xff, 0xab, 0xab, 0xff, 0xcd, 0xd4, 0xff, 0xee, 0xdc, 0xff, 0xd2, 0xed, 0xff, 0x12, 0xf6, 0xff, 0xce, 0xcc, 0xff, 0x9a, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1b, 0xe7, 0xff, 0x1c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xfb, 0xee, 0xff, 0x50, 0xe5, 0xff, 0x53, 0xfe, 0xff, 0x74, 0xf6, 0xff, 0xf2, 0xed, 0xff, 0x12, 0xf6, 0xff, 0x10, 0xd5, 0xff, 0x0b, 0x42, 0xff, 0x4a, 0x21, 0xff, 0x08, 0x21, 0xff, 0x2b, 0x42, 0xff, 0x29, 0x19, 0xff, 0x09, 0x19, 0xff, 0x2b, 0x42, 0xff, 0x4b, 0x4a, 0xff, 0x4b, 0x4a, 0xff, 0xcc, 0x5a, 0xff, 0x4b, 0x42, 0xff, 0x4c, 0x42, 0xff, 0x0b, 0x3a, 0xff, 0x0b, 0x3a, 0xff, 0x0b, 0x42, 0xff, 0x4c, 0x4a, 0xff, 0x28, 0x21, 0xff, 0xa7, 0x10, 0xff, 0x89, 0x29, 0xff, 0x28, 0x21, 0xff, 0xc7, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x09, 0x4a, 0xff, 0x6c, 0x83, 0xff, 0x4d, 0xbc, 0xff, 0x91, 0xed, 0xff, 0x4f, 0xe5, 0xff, 0x13, 0xf6, 0xff, 0x54, 0xf6, 0xff, 0xee, 0xd4, 0xff, 0x58, 0xd6, 0xff, 0x1c, 0xe7, 0xff, 0x1b, 0xe7, 0xff, 0x1c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xb9, 0xe6, 0xff, 0x2f, 0xe5, 0xff, 0x53, 0xfe, 0xff, 0x74, 0xfe, 0xff, 0xf2, 0xed, 0xff, 0xd2, 0xed, 0xff, 0x30, 0xd5, 0xff, 0x0b, 0x42, 0xff, 0x4a, 0x21, 0xff, 0x08, 0x21, 0xff, 0x0b, 0x42, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x49, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x29, 0xff, 0x8c, 0x4a, 0xff, 0x2c, 0x42, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x29, 0xff, 0xaa, 0x29, 0xff, 0x8a, 0x29, 0xff, 0x48, 0x29, 0xff, 0x27, 0x21, 0xff, 0xa9, 0x31, 0xff, 0x48, 0x21, 0xff, 0xc7, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x2a, 0x4a, 0xff, 0xad, 0x83, 0xff, 0x8d, 0xc4, 0xff, 0x13, 0xf6, 0xff, 0xd2, 0xed, 0xff, 0x54, 0xf6, 0xff, 0x95, 0xfe, 0xff, 0x0e, 0xdd, 0xff, 0x17, 0xd6, 0xff, 0x1c, 0xe7, 0xff, 0x1b, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x78, 0xe6, 0xff, 0x0e, 0xe5, 0xff, 0x74, 0xfe, 0xff, 0x95, 0xfe, 0xff, 0x33, 0xf6, 0xff, 0x91, 0xed, 0xff, 0x30, 0xd5, 0xff, 0x2c, 0x4a, 0xff, 0x4a, 0x21, 0xff, 0x08, 0x21, 0xff, 0xea, 0x39, 0xff, 0x09, 0x19, 0xff, 0x08, 0x11, 0xff, 0x49, 0x21, 0xff, 0x89, 0x29, 0xff, 0x49, 0x29, 0xff, 0xaa, 0x29, 0xff, 0xea, 0x39, 0xff, 0xca, 0x31, 0xff, 0xe9, 0x10, 0xff, 0x09, 0x19, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x19, 0xff, 0x69, 0x29, 0xff, 0x47, 0x29, 0xff, 0x89, 0x29, 0xff, 0x48, 0x21, 0xff, 0xe7, 0x10, 0xff, 0x86, 0x08, 0xff, 0x6a, 0x52, 0xff, 0xee, 0x8b, 0xff, 0xce, 0xc4, 0xff, 0xd1, 0xed, 0xff, 0xf2, 0xed, 0xff, 0x95, 0xf6, 0xff, 0x95, 0xfe, 0xff, 0xed, 0xdc, 0xff, 0xd5, 0xcd, 0xff, 0x1c, 0xe7, 0xff, 0x1b, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x78, 0xe6, 0xff, 0xee, 0xdc, 0xff, 0x54, 0xf6, 0xff, 0xb6, 0xfe, 0xff, 0x54, 0xf6, 0xff, 0x70, 0xe5, 0xff, 0x0f, 0xd5, 0xff, 0x4c, 0x4a, 0xff, 0x4a, 0x21, 0xff, 0x28, 0x21, 0xff, 0x4b, 0x4a, 0xff, 0x2b, 0x42, 0xff, 0x0b, 0x3a, 0xff, 0x4b, 0x52, 0xff, 0x6c, 0x4a, 0xff, 0x0b, 0x4a, 0xff, 0x2b, 0x4a, 0xff, 0x2a, 0x3a, 0xff, 0x4b, 0x42, 0xff, 0xca, 0x31, 0xff, 0xeb, 0x39, 0xff, 0x0b, 0x3a, 0xff, 0xcb, 0x31, 0xff, 0xca, 0x39, 0xff, 0xa9, 0x39, 0xff, 0xa9, 0x31, 0xff, 0x69, 0x29, 0xff, 0xe8, 0x18, 0xff, 0xa6, 0x10, 0xff, 0x0c, 0x6b, 0xff, 0x30, 0x94, 0xff, 0xae, 0xc4, 0xff, 0xb0, 0xed, 0xff, 0x13, 0xee, 0xff, 0x95, 0xfe, 0xff, 0x74, 0xf6, 0xff, 0xad, 0xd4, 0xff, 0x74, 0xc5, 0xff, 0x1c, 0xe7, 0xff, 0x1b, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xba, 0xe6, 0xff, 0xad, 0xd4, 0xff, 0xf2, 0xf5, 0xff, 0x75, 0xfe, 0xff, 0x74, 0xf6, 0xff, 0x90, 0xe5, 0xff, 0xce, 0xd4, 0xff, 0x4b, 0x4a, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x21, 0xff, 0x69, 0x29, 0xff, 0xcb, 0x39, 0xff, 0xcb, 0x31, 0xff, 0xaa, 0x31, 0xff, 0xaa, 0x31, 0xff, 0xab, 0x31, 0xff, 0x8a, 0x29, 0xff, 0xaa, 0x29, 0xff, 0x8a, 0x29, 0xff, 0xaa, 0x31, 0xff, 0xa9, 0x31, 0xff, 0x69, 0x29, 0xff, 0x8a, 0x29, 0xff, 0xaa, 0x31, 0xff, 0x89, 0x29, 0xff, 0x28, 0x21, 0xff, 0x29, 0x21, 0xff, 0x29, 0x21, 0xff, 0xc6, 0x10, 0xff, 0x6e, 0x73, 0xff, 0x91, 0x9c, 0xff, 0x8e, 0xbc, 0xff, 0x6f, 0xe5, 0xff, 0x13, 0xee, 0xff, 0x74, 0xf6, 0xff, 0x33, 0xf6, 0xff, 0x4b, 0xcc, 0xff, 0x33, 0xbd, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0xce, 0xd4, 0xff, 0xd1, 0xed, 0xff, 0x74, 0xf6, 0xff, 0x74, 0xf6, 0xff, 0x70, 0xe5, 0xff, 0xad, 0xcc, 0xff, 0x4b, 0x52, 0xff, 0x4a, 0x19, 0xff, 0x49, 0x21, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x09, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0xe8, 0x18, 0xff, 0xc7, 0x10, 0xff, 0x65, 0x08, 0xff, 0xe7, 0x10, 0xff, 0x29, 0x19, 0xff, 0x09, 0x19, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0xe7, 0x18, 0xff, 0xa6, 0x10, 0xff, 0xae, 0x7b, 0xff, 0xd2, 0xa4, 0xff, 0x6d, 0xbc, 0xff, 0x2f, 0xe5, 0xff, 0x13, 0xf6, 0xff, 0x54, 0xf6, 0xff, 0xf2, 0xf5, 0xff, 0x0a, 0xcc, 0xff, 0x33, 0xbd, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xef, 0xff, 0x10, 0xd5, 0xff, 0x4f, 0xe5, 0xff, 0x54, 0xf6, 0xff, 0x54, 0xf6, 0xff, 0x6f, 0xe5, 0xff, 0x6c, 0xc4, 0xff, 0x4b, 0x52, 0xff, 0x2a, 0x19, 0xff, 0x49, 0x21, 0xff, 0x08, 0x19, 0xff, 0x29, 0x21, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x09, 0x19, 0xff, 0x49, 0x19, 0xff, 0x49, 0x21, 0xff, 0x29, 0x21, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0xa6, 0x10, 0xff, 0x86, 0x10, 0xff, 0x08, 0x19, 0xff, 0x29, 0x21, 0xff, 0xe8, 0x18, 0xff, 0xe7, 0x18, 0xff, 0xc7, 0x18, 0xff, 0xc7, 0x10, 0xff, 0xcf, 0x83, 0xff, 0x13, 0xad, 0xff, 0x0c, 0xb4, 0xff, 0x2f, 0xdd, 0xff, 0x33, 0xf6, 0xff, 0x34, 0xf6, 0xff, 0xb1, 0xed, 0xff, 0xea, 0xc3, 0xff, 0x54, 0xc5, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x53, 0xd5, 0xff, 0xcd, 0xdc, 0xff, 0x33, 0xf6, 0xff, 0x54, 0xf6, 0xff, 0x6f, 0xe5, 0xff, 0x0b, 0xbc, 0xff, 0x68, 0x31, 0xff, 0x4a, 0x19, 0xff, 0x6a, 0x21, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x21, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0xe8, 0x18, 0xff, 0x45, 0x08, 0xff, 0xa6, 0x10, 0xff, 0x49, 0x21, 0xff, 0x08, 0x19, 0xff, 0xc7, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x10, 0x8c, 0xff, 0x34, 0xb5, 0xff, 0xec, 0xa3, 0xff, 0x0e, 0xdd, 0xff, 0x34, 0xf6, 0xff, 0x33, 0xf6, 0xff, 0x6f, 0xed, 0xff, 0xa9, 0xbb, 0xff, 0xb6, 0xc5, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0xf6, 0xd5, 0xff, 0x8c, 0xd4, 0xff, 0xf2, 0xed, 0xff, 0x33, 0xf6, 0xff, 0x4f, 0xe5, 0xff, 0x6a, 0xa3, 0xff, 0x27, 0x21, 0xff, 0x29, 0x19, 0xff, 0x6a, 0x21, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x28, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0xa6, 0x10, 0xff, 0x85, 0x08, 0xff, 0x08, 0x19, 0xff, 0x6a, 0x21, 0xff, 0x29, 0x19, 0xff, 0xe7, 0x18, 0xff, 0xc7, 0x10, 0xff, 0xef, 0x83, 0xff, 0x75, 0xbd, 0xff, 0x2e, 0xac, 0xff, 0xac, 0xd4, 0xff, 0x33, 0xf6, 0xff, 0x33, 0xf6, 0xff, 0x0e, 0xe5, 0xff, 0x89, 0xb3, 0xff, 0x17, 0xce, 0xff, 0xfb, 0xe6, 0xff, 0xfc, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x99, 0xde, 0xff, 0x4c, 0xcc, 0xff, 0x90, 0xed, 0xff, 0xf1, 0xed, 0xff, 0x2e, 0xe5, 0xff, 0xa8, 0x82, 0xff, 0xa6, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x49, 0x21, 0xff, 0x28, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0xe8, 0x18, 0xff, 0xe7, 0x10, 0xff, 0x29, 0x21, 0xff, 0x09, 0x19, 0xff, 0x85, 0x08, 0xff, 0x85, 0x08, 0xff, 0x08, 0x19, 0xff, 0x49, 0x21, 0xff, 0xe7, 0x18, 0xff, 0xc7, 0x10, 0xff, 0xaf, 0x7b, 0xff, 0xb6, 0xbd, 0xff, 0x70, 0xac, 0xff, 0x4b, 0xcc, 0xff, 0x13, 0xf6, 0xff, 0xf2, 0xf5, 0xff, 0xcd, 0xdc, 0xff, 0x8a, 0xab, 0xff, 0x59, 0xd6, 0xff, 0xdb, 0xe6, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7e, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x3d, 0xef, 0xff, 0x6e, 0xc4, 0xff, 0xee, 0xe4, 0xff, 0xf2, 0xed, 0xff, 0x2e, 0xe5, 0xff, 0x26, 0x72, 0xff, 0x08, 0x19, 0xff, 0x49, 0x21, 0xff, 0xe7, 0x18, 0xff, 0x49, 0x21, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0x49, 0x21, 0xff, 0x29, 0x19, 0xff, 0x28, 0x19, 0xff, 0xe8, 0x18, 0xff, 0xc7, 0x10, 0xff, 0x29, 0x19, 0xff, 0x4a, 0x21, 0xff, 0xc7, 0x10, 0xff, 0x44, 0x08, 0xff, 0x65, 0x08, 0xff, 0x08, 0x19, 0xff, 0x28, 0x19, 0xff, 0xe8, 0x10, 0xff, 0xaf, 0x7b, 0xff, 0xd6, 0xbd, 0xff, 0xd2, 0xb4, 0xff, 0x2b, 0xc4, 0xff, 0x12, 0xee, 0xff, 0xf2, 0xf5, 0xff, 0x4b, 0xd4, 0xff, 0xec, 0xab, 0xff, 0x9a, 0xd6, 0xff, 0xdb, 0xe6, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7d, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x7e, 0xef, 0xff, 0xf1, 0xc4, 0xff, 0x6b, 0xd4, 0xff, 0x12, 0xf6, 0xff, 0x4f, 0xe5, 0xff, 0xe6, 0x61, 0xff, 0x29, 0x19, 0xff, 0xab, 0x29, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x21, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0xe7, 0x10, 0xff, 0xe8, 0x10, 0xff, 0x49, 0x21, 0xff, 0x4a, 0x21, 0xff, 0xc7, 0x10, 0xff, 0x44, 0x08, 0xff, 0x65, 0x08, 0xff, 0x29, 0x21, 0xff, 0x09, 0x19, 0xff, 0x4e, 0x6b, 0xff, 0xd6, 0xc5, 0xff, 0x34, 0xb5, 0xff, 0x2b, 0xc4, 0xff, 0xf2, 0xed, 0xff, 0xf2, 0xed, 0xff, 0x2a, 0xcc, 0xff, 0x4f, 0xb4, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xe6, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7d, 0xf7, 0xec, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x7e, 0xef, 0xff, 0x74, 0xcd, 0xff, 0x2b, 0xc4, 0xff, 0x12, 0xf6, 0xff, 0x90, 0xed, 0xff, 0x07, 0x6a, 0xff, 0x08, 0x11, 0xff, 0x6a, 0x21, 0xff, 0x8a, 0x21, 0xff, 0x49, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x21, 0xff, 0x29, 0x19, 0xff, 0x09, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x19, 0xff, 0xe7, 0x10, 0xff, 0xe7, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x49, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x19, 0xff, 0xc7, 0x10, 0xff, 0x86, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x6f, 0x73, 0xff, 0xd6, 0xc5, 0xff, 0x95, 0xbd, 0xff, 0x0b, 0xbc, 0xff, 0xb1, 0xed, 0xff, 0xb1, 0xed, 0xff, 0xc9, 0xbb, 0xff, 0xf2, 0xbc, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xe6, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, + 0x7d, 0xf7, 0xe0, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x7e, 0xef, 0xff, 0xf7, 0xd5, 0xff, 0xeb, 0xbb, 0xff, 0x13, 0xf6, 0xff, 0xb1, 0xed, 0xff, 0xe6, 0x61, 0xff, 0x09, 0x11, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x8b, 0x21, 0xff, 0x49, 0x21, 0xff, 0x28, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0xe8, 0x18, 0xff, 0xc6, 0x10, 0xff, 0xc6, 0x10, 0xff, 0xe7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x49, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x6a, 0x21, 0xff, 0x29, 0x21, 0xff, 0x86, 0x08, 0xff, 0x6f, 0x73, 0xff, 0xd6, 0xc5, 0xff, 0xd6, 0xbd, 0xff, 0x0c, 0xbc, 0xff, 0x90, 0xe5, 0xff, 0x90, 0xed, 0xff, 0x48, 0xab, 0xff, 0x75, 0xc5, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xf8, + 0x7e, 0xf7, 0xcb, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x7e, 0xef, 0xff, 0x58, 0xd6, 0xff, 0xaa, 0xb3, 0xff, 0x12, 0xf6, 0xff, 0x74, 0xfe, 0xff, 0x27, 0x62, 0xff, 0xa7, 0x08, 0xff, 0x6a, 0x21, 0xff, 0xe8, 0x18, 0xff, 0xe8, 0x18, 0xff, 0x08, 0x19, 0xff, 0xe7, 0x10, 0xff, 0x28, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0x49, 0x21, 0xff, 0xe8, 0x18, 0xff, 0xa6, 0x10, 0xff, 0xa6, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0xc7, 0x10, 0xff, 0x4c, 0x4a, 0xff, 0xb6, 0xbd, 0xff, 0xf7, 0xc5, 0xff, 0xcb, 0xab, 0xff, 0x70, 0xe5, 0xff, 0x50, 0xe5, 0xff, 0x08, 0xa3, 0xff, 0xd6, 0xc5, 0xff, 0xda, 0xde, 0xff, 0xda, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xe0, + 0x7e, 0xf7, 0x9f, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0xba, 0xde, 0xff, 0x2c, 0xc4, 0xff, 0xf2, 0xf5, 0xff, 0xf7, 0xfe, 0xff, 0xed, 0xa3, 0xff, 0xc7, 0x10, 0xff, 0x6a, 0x21, 0xff, 0x49, 0x21, 0xff, 0xc7, 0x10, 0xff, 0xa6, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0x28, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x21, 0xff, 0x29, 0x19, 0xff, 0xe8, 0x18, 0xff, 0xc7, 0x10, 0xff, 0xa6, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x09, 0x19, 0xff, 0xeb, 0x39, 0xff, 0x95, 0xbd, 0xff, 0x18, 0xc6, 0xff, 0x0d, 0xb4, 0xff, 0xb1, 0xed, 0xff, 0x0e, 0xe5, 0xff, 0xe8, 0x9a, 0xff, 0x18, 0xce, 0xff, 0xba, 0xde, 0xff, 0xba, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xac, + 0x7e, 0xf7, 0x54, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0xdb, 0xe6, 0xff, 0xad, 0xcc, 0xff, 0xf2, 0xf5, 0xff, 0xf7, 0xfe, 0xff, 0xb3, 0xdd, 0xff, 0xe6, 0x18, 0xff, 0x4a, 0x19, 0xff, 0x4a, 0x21, 0xff, 0x49, 0x21, 0xff, 0x08, 0x19, 0xff, 0xa6, 0x10, 0xff, 0xc7, 0x10, 0xff, 0xe8, 0x10, 0xff, 0x08, 0x19, 0xff, 0x28, 0x19, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0xe7, 0x18, 0xff, 0xc7, 0x10, 0xff, 0xe7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x28, 0x19, 0xff, 0xe8, 0x10, 0xff, 0xaa, 0x31, 0xff, 0x75, 0xb5, 0xff, 0x18, 0xce, 0xff, 0x6e, 0xbc, 0xff, 0xf2, 0xf5, 0xff, 0xcd, 0xdc, 0xff, 0x28, 0xa3, 0xff, 0x59, 0xd6, 0xff, 0xba, 0xde, 0xff, 0xba, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0x5c, + 0x7e, 0xf7, 0x07, 0x7e, 0xf7, 0xe3, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x3c, 0xef, 0xff, 0xef, 0xd4, 0xff, 0x91, 0xed, 0xff, 0xb7, 0xfe, 0xff, 0xd7, 0xfe, 0xff, 0xec, 0x72, 0xff, 0x09, 0x11, 0xff, 0x6a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0xc7, 0x10, 0xff, 0xc7, 0x10, 0xff, 0xc7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x21, 0xff, 0x49, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0x49, 0x19, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0x08, 0x19, 0xff, 0xe7, 0x10, 0xff, 0x47, 0x29, 0xff, 0x54, 0xb5, 0xff, 0x18, 0xc6, 0xff, 0x31, 0xcd, 0xff, 0x54, 0xfe, 0xff, 0xad, 0xdc, 0xff, 0x69, 0xa3, 0xff, 0x79, 0xd6, 0xff, 0xdb, 0xde, 0xff, 0xba, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xe4, 0x5d, 0xef, 0x07, + 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x54, 0x7e, 0xf7, 0xff, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x92, 0xdd, 0xff, 0x90, 0xed, 0xff, 0xb7, 0xfe, 0xff, 0xf8, 0xfe, 0xff, 0x35, 0xee, 0xff, 0xa8, 0x39, 0xff, 0xe7, 0x10, 0xff, 0x08, 0x19, 0xff, 0x29, 0x19, 0xff, 0x29, 0x19, 0xff, 0xc7, 0x10, 0xff, 0xe7, 0x10, 0xff, 0x08, 0x11, 0xff, 0x08, 0x19, 0xff, 0x49, 0x19, 0xff, 0x49, 0x19, 0xff, 0x49, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x4a, 0x21, 0xff, 0x29, 0x19, 0xff, 0x08, 0x19, 0xff, 0xe7, 0x18, 0xff, 0xc6, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x62, 0x10, 0xff, 0x82, 0x18, 0xff, 0xf3, 0xa4, 0xff, 0xb6, 0xbd, 0xff, 0x10, 0xc5, 0xff, 0xb6, 0xfe, 0xff, 0x0e, 0xe5, 0xff, 0x49, 0xa3, 0xff, 0x99, 0xd6, 0xff, 0xdb, 0xde, 0xff, 0xda, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0x54, 0x5d, 0xef, 0x00, + 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x8b, 0x7e, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x92, 0xd5, 0xff, 0xb0, 0xed, 0xff, 0x96, 0xfe, 0xff, 0xb7, 0xfe, 0xff, 0x18, 0xff, 0xff, 0xed, 0x9b, 0xff, 0x20, 0x08, 0xff, 0x82, 0x10, 0xff, 0x83, 0x10, 0xff, 0x84, 0x08, 0xff, 0x64, 0x08, 0xff, 0x85, 0x10, 0xff, 0xc6, 0x10, 0xff, 0xc6, 0x10, 0xff, 0xc6, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x10, 0xff, 0xc5, 0x10, 0xff, 0xa4, 0x10, 0xff, 0x83, 0x10, 0xff, 0x83, 0x10, 0xff, 0x62, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0xb2, 0x9c, 0xff, 0x71, 0x94, 0xff, 0xa3, 0x18, 0xff, 0xa9, 0x5a, 0xff, 0xc5, 0x51, 0xff, 0x0b, 0x63, 0xff, 0xba, 0xd6, 0xff, 0xdb, 0xe6, 0xff, 0xda, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0x8b, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, + 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x03, 0x7e, 0xf7, 0x93, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0xb3, 0xdd, 0xff, 0xb1, 0xed, 0xff, 0x75, 0xf6, 0xff, 0xb7, 0xfe, 0xff, 0xb7, 0xfe, 0xff, 0xf5, 0xe5, 0xff, 0xc3, 0x20, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x40, 0x08, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x61, 0x10, 0xff, 0x82, 0x10, 0xff, 0x82, 0x10, 0xff, 0x81, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x08, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x41, 0x08, 0xff, 0xef, 0x83, 0xff, 0x73, 0xc5, 0xff, 0xed, 0x9b, 0xff, 0x89, 0x62, 0xff, 0x20, 0x08, 0xff, 0x51, 0x74, 0xff, 0x1c, 0xe7, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0x3c, 0xef, 0xff, 0x5d, 0xef, 0x94, 0x5d, 0xef, 0x03, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, + 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7d, 0xf7, 0x00, 0x7d, 0xf7, 0x53, 0x7d, 0xf7, 0xdb, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0xb4, 0xdd, 0xff, 0xb1, 0xed, 0xff, 0x76, 0xf6, 0xff, 0x77, 0xfe, 0xff, 0xd3, 0xf5, 0xff, 0xd8, 0xfe, 0xff, 0x69, 0x62, 0xff, 0x20, 0x00, 0xff, 0x61, 0x10, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x21, 0x08, 0xff, 0x21, 0x08, 0xff, 0x41, 0x08, 0xff, 0x82, 0x10, 0xff, 0xa3, 0x18, 0xff, 0xa2, 0x18, 0xff, 0x82, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x08, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x61, 0x08, 0xff, 0x21, 0x08, 0xff, 0x8d, 0x83, 0xff, 0x96, 0xfe, 0xff, 0xf7, 0xfe, 0xff, 0x74, 0xfe, 0xff, 0xca, 0xb3, 0xff, 0x70, 0x94, 0xff, 0x1c, 0xe7, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xfb, 0xe6, 0xff, 0x1c, 0xe7, 0xff, 0x3c, 0xe7, 0xdb, 0x3c, 0xef, 0x54, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, + 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7e, 0xf7, 0x00, 0x7d, 0xf7, 0x00, 0x7d, 0xf7, 0x00, 0x7d, 0xf7, 0x07, 0x7d, 0xf7, 0x5b, 0x7d, 0xf7, 0xac, 0x7d, 0xf7, 0xdf, 0x5d, 0xef, 0xfb, 0x5d, 0xef, 0xff, 0x5d, 0xef, 0xff, 0xb4, 0xdd, 0xff, 0xd2, 0xed, 0xff, 0x77, 0xfe, 0xff, 0x56, 0xfe, 0xff, 0x6e, 0xd4, 0xff, 0xb7, 0xfe, 0xff, 0x0b, 0x7b, 0xff, 0x20, 0x00, 0xff, 0xa2, 0x10, 0xff, 0x82, 0x10, 0xff, 0x82, 0x10, 0xff, 0x62, 0x10, 0xff, 0x61, 0x10, 0xff, 0x61, 0x10, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x82, 0x10, 0xff, 0x82, 0x10, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x41, 0x08, 0xff, 0x61, 0x08, 0xff, 0x61, 0x08, 0xff, 0x61, 0x08, 0xff, 0x41, 0x08, 0xff, 0x6f, 0xb4, 0xff, 0xd7, 0xfe, 0xff, 0x96, 0xf6, 0xff, 0x33, 0xf6, 0xff, 0xac, 0xd4, 0xff, 0xd1, 0xbc, 0xff, 0xfc, 0xe6, 0xff, 0xdb, 0xde, 0xfb, 0xdb, 0xe6, 0xdf, 0xfb, 0xe6, 0xac, 0x1c, 0xe7, 0x5b, 0x3c, 0xe7, 0x07, 0x3c, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, 0x5d, 0xef, 0x00, +#endif +#if LV_COLOR_DEPTH == 32 + /*Pixel format: Blue: 8 bit, Green: 8 bit, Red: 8 bit, Alpha: 8 bit*/ + 0xed, 0xeb, 0xed, 0x00, 0xed, 0xec, 0xee, 0x00, 0xed, 0xec, 0xee, 0x00, 0xed, 0xec, 0xee, 0x00, 0xed, 0xed, 0xef, 0x00, 0xee, 0xef, 0xf0, 0x07, 0xed, 0xee, 0xf0, 0x50, 0xed, 0xee, 0xf1, 0x9b, 0xed, 0xee, 0xf1, 0xd0, 0xed, 0xee, 0xf1, 0xe8, 0xed, 0xee, 0xf1, 0xef, 0xed, 0xee, 0xf1, 0xef, 0xed, 0xee, 0xf0, 0xef, 0xec, 0xee, 0xef, 0xef, 0xec, 0xee, 0xef, 0xef, 0xec, 0xee, 0xef, 0xef, 0xed, 0xef, 0xef, 0xef, 0xea, 0xec, 0xeb, 0xef, 0xa3, 0xad, 0xbd, 0xef, 0x6c, 0x86, 0xb3, 0xef, 0x47, 0x57, 0x89, 0xef, 0x57, 0x64, 0x89, 0xef, 0x8b, 0xa3, 0xcc, 0xef, 0xac, 0xc7, 0xe9, 0xef, 0xcd, 0xe3, 0xf9, 0xef, 0xca, 0xe1, 0xfb, 0xef, 0xa7, 0xc2, 0xe2, 0xef, 0xae, 0xc7, 0xe3, 0xef, 0xc3, 0xda, 0xf7, 0xef, 0xc1, 0xdb, 0xfa, 0xef, 0xbc, 0xcd, 0xea, 0xef, 0xe7, 0xe7, 0xea, 0xef, 0xea, 0xeb, 0xed, 0xef, 0xea, 0xea, 0xee, 0xef, 0xea, 0xea, 0xed, 0xef, 0xea, 0xea, 0xee, 0xef, 0xea, 0xeb, 0xee, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xef, 0xea, 0xeb, 0xec, 0xe3, 0xea, 0xeb, 0xec, 0xc8, 0xe9, 0xeb, 0xec, 0x9b, 0xea, 0xea, 0xeb, 0x4f, 0xe9, 0xea, 0xeb, 0x07, 0xe8, 0xea, 0xea, 0x00, 0xe8, 0xea, 0xea, 0x00, 0xe7, 0xe9, 0xea, 0x00, 0xe7, 0xe9, 0xea, 0x00, 0xe7, 0xe9, 0xe9, 0x00, + 0xea, 0xe9, 0xeb, 0x00, 0xeb, 0xea, 0xec, 0x00, 0xeb, 0xea, 0xed, 0x00, 0xeb, 0xea, 0xed, 0x00, 0xeb, 0xeb, 0xed, 0x50, 0xec, 0xed, 0xf0, 0xdb, 0xeb, 0xed, 0xf1, 0xff, 0xeb, 0xed, 0xf0, 0xff, 0xeb, 0xec, 0xf0, 0xff, 0xeb, 0xec, 0xf0, 0xff, 0xeb, 0xec, 0xf0, 0xff, 0xeb, 0xec, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xea, 0xec, 0xed, 0xff, 0xea, 0xec, 0xed, 0xff, 0xe9, 0xec, 0xed, 0xff, 0xef, 0xf0, 0xf0, 0xff, 0xca, 0xd0, 0xd8, 0xff, 0xa8, 0xc0, 0xe1, 0xff, 0xab, 0xc6, 0xec, 0xff, 0x66, 0x80, 0xb7, 0xff, 0x93, 0xb0, 0xdd, 0xff, 0xc6, 0xdf, 0xf9, 0xff, 0xc9, 0xe0, 0xfc, 0xff, 0xb6, 0xd5, 0xf7, 0xff, 0x98, 0xbe, 0xe6, 0xff, 0x8f, 0xb5, 0xe0, 0xff, 0xbf, 0xdd, 0xfd, 0xff, 0xc4, 0xdc, 0xfb, 0xff, 0x81, 0x8f, 0xac, 0xff, 0xe6, 0xe6, 0xe8, 0xff, 0xe6, 0xe7, 0xeb, 0xff, 0xe6, 0xe7, 0xea, 0xff, 0xe6, 0xe8, 0xeb, 0xff, 0xe7, 0xe8, 0xec, 0xff, 0xe7, 0xe8, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe6, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe7, 0xe9, 0xff, 0xe6, 0xe7, 0xe8, 0xdb, 0xe4, 0xe7, 0xe8, 0x53, 0xe4, 0xe6, 0xe7, 0x00, 0xe3, 0xe5, 0xe7, 0x00, 0xe3, 0xe6, 0xe7, 0x00, 0xe3, 0xe5, 0xe6, 0x00, + 0xeb, 0xea, 0xec, 0x00, 0xec, 0xeb, 0xed, 0x00, 0xec, 0xeb, 0xed, 0x03, 0xec, 0xeb, 0xed, 0x88, 0xed, 0xec, 0xed, 0xff, 0xed, 0xee, 0xf0, 0xff, 0xec, 0xee, 0xf1, 0xff, 0xec, 0xed, 0xf1, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xec, 0xed, 0xf0, 0xff, 0xec, 0xed, 0xf0, 0xff, 0xec, 0xed, 0xef, 0xff, 0xeb, 0xec, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xea, 0xec, 0xed, 0xff, 0xea, 0xec, 0xed, 0xff, 0xec, 0xed, 0xed, 0xff, 0xdf, 0xe3, 0xeb, 0xff, 0xd0, 0xde, 0xf8, 0xff, 0xda, 0xec, 0xff, 0xff, 0xbb, 0xd7, 0xfa, 0xff, 0xae, 0xcd, 0xf6, 0xff, 0xc7, 0xdf, 0xfc, 0xff, 0xbd, 0xd9, 0xf9, 0xff, 0xaa, 0xce, 0xf3, 0xff, 0x99, 0xbe, 0xe6, 0xff, 0x87, 0xaf, 0xdb, 0xff, 0x90, 0xad, 0xd7, 0xff, 0x54, 0x6a, 0x9f, 0xff, 0x59, 0x71, 0x98, 0xff, 0xe7, 0xe9, 0xeb, 0xff, 0xe6, 0xe7, 0xeb, 0xff, 0xe5, 0xe7, 0xea, 0xff, 0xe6, 0xe7, 0xea, 0xff, 0xe6, 0xe7, 0xea, 0xff, 0xe6, 0xe8, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe4, 0xe6, 0xe7, 0x88, 0xe4, 0xe6, 0xe7, 0x03, 0xe4, 0xe6, 0xe7, 0x00, 0xe4, 0xe6, 0xe7, 0x00, + 0xec, 0xea, 0xec, 0x00, 0xec, 0xeb, 0xed, 0x00, 0xec, 0xeb, 0xed, 0x88, 0xec, 0xeb, 0xed, 0xff, 0xed, 0xec, 0xee, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xee, 0xf0, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xec, 0xee, 0xef, 0xff, 0xec, 0xee, 0xef, 0xff, 0xec, 0xed, 0xf0, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xeb, 0xec, 0xf0, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xed, 0xee, 0xff, 0xeb, 0xec, 0xed, 0xff, 0xec, 0xeb, 0xec, 0xff, 0xeb, 0xec, 0xec, 0xff, 0xdb, 0xe1, 0xef, 0xff, 0xd1, 0xe2, 0xff, 0xff, 0xd1, 0xe3, 0xff, 0xff, 0xb9, 0xd4, 0xfb, 0xff, 0xb7, 0xd3, 0xf9, 0xff, 0xbb, 0xd6, 0xfa, 0xff, 0xae, 0xd1, 0xf3, 0xff, 0xa8, 0xcc, 0xee, 0xff, 0xa1, 0xc4, 0xe7, 0xff, 0x8a, 0xb3, 0xdd, 0xff, 0x58, 0x7f, 0xb3, 0xff, 0x5a, 0x82, 0xb9, 0xff, 0x6f, 0x97, 0xc7, 0xff, 0xce, 0xd4, 0xdd, 0xff, 0xe7, 0xe7, 0xea, 0xff, 0xe3, 0xe4, 0xe8, 0xff, 0xe4, 0xe5, 0xe8, 0xff, 0xe4, 0xe6, 0xe8, 0xff, 0xe4, 0xe7, 0xe8, 0xff, 0xe6, 0xe7, 0xe9, 0xff, 0xe7, 0xe8, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe8, 0xe9, 0xff, 0xe5, 0xe8, 0xe8, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0x88, 0xe4, 0xe6, 0xe7, 0x00, 0xe4, 0xe6, 0xe7, 0x00, + 0xec, 0xea, 0xec, 0x00, 0xec, 0xeb, 0xed, 0x54, 0xec, 0xeb, 0xed, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xed, 0xec, 0xee, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xee, 0xef, 0xff, 0xec, 0xee, 0xef, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xec, 0xed, 0xef, 0xff, 0xeb, 0xed, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xeb, 0xeb, 0xed, 0xff, 0xe9, 0xea, 0xeb, 0xff, 0xeb, 0xec, 0xeb, 0xff, 0xd3, 0xdb, 0xea, 0xff, 0xa2, 0xb5, 0xdc, 0xff, 0x8c, 0xa6, 0xd6, 0xff, 0xb0, 0xcf, 0xf6, 0xff, 0xba, 0xd8, 0xfa, 0xff, 0xbc, 0xd8, 0xf8, 0xff, 0xb2, 0xd1, 0xf2, 0xff, 0xa6, 0xc9, 0xec, 0xff, 0xa7, 0xc9, 0xec, 0xff, 0x88, 0xb1, 0xdc, 0xff, 0x47, 0x6a, 0x9b, 0xff, 0x7d, 0xa7, 0xd6, 0xff, 0x81, 0xad, 0xdb, 0xff, 0xa5, 0xb9, 0xd1, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe2, 0xe3, 0xe7, 0xff, 0xe2, 0xe3, 0xe7, 0xff, 0xe3, 0xe4, 0xe8, 0xff, 0xe3, 0xe5, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe6, 0xe7, 0xe8, 0xff, 0xe6, 0xe7, 0xe8, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe4, 0xe7, 0xe8, 0xff, 0xe5, 0xe6, 0xe7, 0x54, 0xe5, 0xe5, 0xe7, 0x00, + 0xec, 0xea, 0xec, 0x07, 0xec, 0xeb, 0xed, 0xe3, 0xec, 0xeb, 0xed, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xed, 0xec, 0xee, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xef, 0xf0, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xec, 0xed, 0xf0, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xec, 0xee, 0xef, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xeb, 0xee, 0xee, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xea, 0xea, 0xec, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xeb, 0xec, 0xec, 0xff, 0xbb, 0xc3, 0xcf, 0xff, 0x79, 0x99, 0xcb, 0xff, 0xa1, 0xc4, 0xed, 0xff, 0xaa, 0xca, 0xee, 0xff, 0xc1, 0xdc, 0xf7, 0xff, 0xb0, 0xcd, 0xed, 0xff, 0xb2, 0xcf, 0xee, 0xff, 0x9f, 0xc6, 0xeb, 0xff, 0x4e, 0x70, 0x9c, 0xff, 0x40, 0x60, 0x8c, 0xff, 0x85, 0xb0, 0xdd, 0xff, 0x82, 0xaf, 0xdd, 0xff, 0x7c, 0x9e, 0xc5, 0xff, 0xe4, 0xe3, 0xe5, 0xff, 0xe7, 0xe7, 0xe9, 0xff, 0xe4, 0xe5, 0xe8, 0xff, 0xe3, 0xe4, 0xe8, 0xff, 0xe3, 0xe4, 0xe8, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe6, 0xe6, 0xe8, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe4, 0xe7, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xe4, 0xe6, 0xe5, 0xe7, 0x07, + 0xec, 0xea, 0xec, 0x54, 0xec, 0xeb, 0xed, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xed, 0xec, 0xee, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xee, 0xf0, 0xff, 0xed, 0xef, 0xf0, 0xff, 0xed, 0xef, 0xef, 0xff, 0xec, 0xee, 0xef, 0xff, 0xec, 0xef, 0xf0, 0xff, 0xec, 0xee, 0xee, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xe9, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xf1, 0xf3, 0xf5, 0xff, 0xea, 0xea, 0xe9, 0xff, 0x82, 0x8a, 0xba, 0xff, 0x7d, 0x91, 0xdb, 0xff, 0x94, 0xb7, 0xe5, 0xff, 0xa4, 0xca, 0xeb, 0xff, 0xac, 0xcd, 0xee, 0xff, 0x9b, 0xbf, 0xe3, 0xff, 0x41, 0x5d, 0x86, 0xff, 0x18, 0x2f, 0x57, 0xff, 0x6f, 0x97, 0xc1, 0xff, 0x8b, 0xb7, 0xe1, 0xff, 0x84, 0xb2, 0xde, 0xff, 0x5f, 0x8e, 0xc1, 0xff, 0x98, 0xad, 0xca, 0xff, 0xd1, 0xd5, 0xdc, 0xff, 0xe0, 0xdf, 0xe2, 0xff, 0xed, 0xf0, 0xf4, 0xff, 0xe7, 0xe9, 0xeb, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xea, 0xe8, 0xea, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe6, 0xe8, 0xff, 0xe6, 0xe6, 0xe8, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe5, 0xe5, 0xe7, 0x5c, + 0xec, 0xeb, 0xed, 0x9f, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xef, 0xf0, 0xff, 0xed, 0xef, 0xf0, 0xff, 0xec, 0xee, 0xef, 0xff, 0xec, 0xee, 0xf0, 0xff, 0xec, 0xee, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xeb, 0xed, 0xff, 0xea, 0xeb, 0xec, 0xff, 0xf0, 0xf3, 0xf5, 0xff, 0xee, 0xee, 0xf0, 0xff, 0xbc, 0xb3, 0xb2, 0xff, 0x5a, 0x45, 0x43, 0xff, 0x32, 0x2f, 0x3b, 0xff, 0x84, 0xab, 0xdb, 0xff, 0xb3, 0xd8, 0xf8, 0xff, 0x9a, 0xc2, 0xe6, 0xff, 0x76, 0xa0, 0xc9, 0xff, 0x30, 0x49, 0x6e, 0xff, 0x2a, 0x40, 0x63, 0xff, 0x73, 0x9a, 0xc4, 0xff, 0x8e, 0xb8, 0xe0, 0xff, 0x91, 0xbc, 0xe4, 0xff, 0x82, 0xb2, 0xde, 0xff, 0x5f, 0x90, 0xc6, 0xff, 0x59, 0x8a, 0xc3, 0xff, 0x87, 0xb6, 0xdd, 0xff, 0x81, 0x90, 0xa4, 0xff, 0x90, 0x82, 0x81, 0xff, 0xdb, 0xdb, 0xde, 0xff, 0xf0, 0xf3, 0xf5, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe7, 0xe6, 0xe8, 0xff, 0xe7, 0xe6, 0xe8, 0xff, 0xe6, 0xe6, 0xe8, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe4, 0xe7, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xac, + 0xec, 0xeb, 0xed, 0xd0, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xee, 0xf1, 0xff, 0xed, 0xee, 0xf1, 0xff, 0xec, 0xef, 0xef, 0xff, 0xec, 0xee, 0xf1, 0xff, 0xeb, 0xec, 0xf0, 0xff, 0xed, 0xef, 0xf1, 0xff, 0xf5, 0xf7, 0xf9, 0xff, 0xee, 0xee, 0xf0, 0xff, 0xc0, 0xb6, 0xb5, 0xff, 0x71, 0x57, 0x52, 0xff, 0x39, 0x18, 0x11, 0xff, 0x28, 0x09, 0x02, 0xff, 0x23, 0x15, 0x18, 0xff, 0x6a, 0x8b, 0xb3, 0xff, 0x89, 0xac, 0xd4, 0xff, 0x55, 0x71, 0x94, 0xff, 0x0d, 0x1a, 0x39, 0xff, 0x0b, 0x1c, 0x43, 0xff, 0x78, 0xa1, 0xcc, 0xff, 0x87, 0xb1, 0xdb, 0xff, 0x8a, 0xb5, 0xde, 0xff, 0x93, 0xbe, 0xe6, 0xff, 0x7d, 0xae, 0xda, 0xff, 0x6a, 0x9d, 0xd0, 0xff, 0x6c, 0x9e, 0xd4, 0xff, 0x9e, 0xd4, 0xfd, 0xff, 0x81, 0x94, 0xa8, 0xff, 0x2a, 0x06, 0x00, 0xff, 0x48, 0x30, 0x2b, 0xff, 0x9d, 0x95, 0x94, 0xff, 0xe3, 0xe6, 0xe8, 0xff, 0xf1, 0xf5, 0xf6, 0xff, 0xe8, 0xeb, 0xec, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe6, 0xe8, 0xff, 0xe7, 0xe6, 0xe8, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe5, 0xe6, 0xe8, 0xe0, + 0xed, 0xeb, 0xed, 0xe7, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xee, 0xf0, 0xff, 0xed, 0xee, 0xf1, 0xff, 0xed, 0xef, 0xf1, 0xff, 0xec, 0xee, 0xf1, 0xff, 0xec, 0xec, 0xf1, 0xff, 0xef, 0xf2, 0xf6, 0xff, 0xe7, 0xe7, 0xe9, 0xff, 0xaa, 0x9d, 0x9a, 0xff, 0x6f, 0x53, 0x4b, 0xff, 0x43, 0x1e, 0x15, 0xff, 0x3e, 0x1a, 0x10, 0xff, 0x42, 0x21, 0x18, 0xff, 0x41, 0x20, 0x17, 0xff, 0x2e, 0x11, 0x0a, 0xff, 0x14, 0x0d, 0x16, 0xff, 0x0c, 0x18, 0x34, 0xff, 0x00, 0x03, 0x1f, 0xff, 0x11, 0x25, 0x55, 0xff, 0x4f, 0x79, 0xb1, 0xff, 0x64, 0x8f, 0xc3, 0xff, 0x79, 0xa6, 0xd4, 0xff, 0x95, 0xc0, 0xe8, 0xff, 0x8b, 0xb9, 0xe2, 0xff, 0x7d, 0xaf, 0xda, 0xff, 0x86, 0xb5, 0xdf, 0xff, 0x8f, 0xc0, 0xeb, 0xff, 0xa3, 0xcf, 0xf2, 0xff, 0x5e, 0x4c, 0x4d, 0xff, 0x3a, 0x18, 0x0d, 0xff, 0x33, 0x14, 0x0c, 0xff, 0x2d, 0x0f, 0x06, 0xff, 0x50, 0x3a, 0x34, 0xff, 0x9f, 0x96, 0x96, 0xff, 0xe8, 0xea, 0xec, 0xff, 0xef, 0xf2, 0xf3, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe8, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe7, 0xe6, 0xe8, 0xff, 0xe7, 0xe7, 0xe8, 0xff, 0xe7, 0xe6, 0xe8, 0xf8, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xee, 0xf0, 0xff, 0xed, 0xee, 0xf1, 0xff, 0xed, 0xee, 0xf1, 0xff, 0xed, 0xee, 0xf2, 0xff, 0xf1, 0xf3, 0xf6, 0xff, 0xe3, 0xe2, 0xe3, 0xff, 0x6a, 0x4e, 0x47, 0xff, 0x3c, 0x18, 0x0e, 0xff, 0x3f, 0x1b, 0x12, 0xff, 0x48, 0x22, 0x1a, 0xff, 0x47, 0x24, 0x1b, 0xff, 0x48, 0x25, 0x1c, 0xff, 0x48, 0x24, 0x1b, 0xff, 0x3e, 0x1d, 0x16, 0xff, 0x1d, 0x07, 0x04, 0xff, 0x04, 0x00, 0x01, 0xff, 0x1a, 0x2d, 0x55, 0xff, 0x51, 0x83, 0xbf, 0xff, 0x8c, 0xc0, 0xed, 0xff, 0x93, 0xbf, 0xe9, 0xff, 0x8c, 0xb9, 0xe3, 0xff, 0x93, 0xc1, 0xe8, 0xff, 0x8d, 0xbc, 0xe5, 0xff, 0x9b, 0xc9, 0xee, 0xff, 0xad, 0xd9, 0xfd, 0xff, 0xa6, 0xc9, 0xe8, 0xff, 0x68, 0x5d, 0x64, 0xff, 0x3b, 0x18, 0x0e, 0xff, 0x3b, 0x1d, 0x14, 0xff, 0x3b, 0x1c, 0x13, 0xff, 0x3c, 0x1d, 0x13, 0xff, 0x37, 0x17, 0x0d, 0xff, 0x2f, 0x10, 0x08, 0xff, 0x5a, 0x47, 0x42, 0xff, 0xc5, 0xc3, 0xc4, 0xff, 0xf2, 0xf6, 0xf7, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf1, 0xff, 0xee, 0xef, 0xf1, 0xff, 0xf5, 0xf6, 0xf8, 0xff, 0x88, 0x71, 0x6c, 0xff, 0x3d, 0x17, 0x0e, 0xff, 0x4a, 0x25, 0x1d, 0xff, 0x4b, 0x26, 0x1e, 0xff, 0x4b, 0x26, 0x1e, 0xff, 0x4d, 0x28, 0x1f, 0xff, 0x4e, 0x29, 0x20, 0xff, 0x4e, 0x2a, 0x20, 0xff, 0x4b, 0x27, 0x1d, 0xff, 0x3e, 0x1e, 0x17, 0xff, 0x2e, 0x13, 0x0d, 0xff, 0x34, 0x1d, 0x1a, 0xff, 0x5c, 0x5f, 0x6e, 0xff, 0x8b, 0xa6, 0xc2, 0xff, 0xa4, 0xc7, 0xe6, 0xff, 0xa2, 0xc9, 0xed, 0xff, 0xa3, 0xcd, 0xef, 0xff, 0xa6, 0xca, 0xea, 0xff, 0xaa, 0xc1, 0xd6, 0xff, 0x81, 0x85, 0x92, 0xff, 0x54, 0x3a, 0x37, 0xff, 0x3d, 0x18, 0x0d, 0xff, 0x3c, 0x1c, 0x14, 0xff, 0x3e, 0x1e, 0x15, 0xff, 0x3f, 0x1d, 0x15, 0xff, 0x40, 0x1f, 0x16, 0xff, 0x42, 0x21, 0x18, 0xff, 0x41, 0x20, 0x16, 0xff, 0x2f, 0x10, 0x07, 0xff, 0x32, 0x18, 0x13, 0xff, 0xa4, 0x9d, 0x9e, 0xff, 0xf1, 0xf4, 0xf6, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe7, 0xe9, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf5, 0xf5, 0xf7, 0xff, 0xd1, 0xc9, 0xca, 0xff, 0x4d, 0x29, 0x1f, 0xff, 0x4c, 0x27, 0x1e, 0xff, 0x50, 0x2d, 0x23, 0xff, 0x50, 0x2c, 0x22, 0xff, 0x4f, 0x2c, 0x21, 0xff, 0x4f, 0x2b, 0x21, 0xff, 0x4e, 0x2a, 0x21, 0xff, 0x51, 0x2d, 0x23, 0xff, 0x53, 0x2f, 0x23, 0xff, 0x53, 0x2f, 0x24, 0xff, 0x52, 0x2d, 0x23, 0xff, 0x50, 0x2b, 0x20, 0xff, 0x4c, 0x24, 0x17, 0xff, 0x4c, 0x28, 0x1f, 0xff, 0x58, 0x3c, 0x37, 0xff, 0x60, 0x4a, 0x49, 0xff, 0x5f, 0x4a, 0x4b, 0xff, 0x5b, 0x42, 0x3f, 0xff, 0x50, 0x2e, 0x27, 0xff, 0x48, 0x1f, 0x14, 0xff, 0x4a, 0x24, 0x19, 0xff, 0x4c, 0x28, 0x1f, 0xff, 0x4c, 0x27, 0x20, 0xff, 0x4b, 0x25, 0x1e, 0xff, 0x49, 0x24, 0x1c, 0xff, 0x44, 0x22, 0x19, 0xff, 0x42, 0x21, 0x18, 0xff, 0x41, 0x1f, 0x16, 0xff, 0x3f, 0x1e, 0x15, 0xff, 0x32, 0x12, 0x0b, 0xff, 0x38, 0x1d, 0x17, 0xff, 0xd0, 0xcc, 0xcc, 0xff, 0xee, 0xf1, 0xf3, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xec, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf9, 0xfa, 0xfd, 0xff, 0xa0, 0x8e, 0x8c, 0xff, 0x44, 0x1e, 0x13, 0xff, 0x4e, 0x2b, 0x20, 0xff, 0x53, 0x30, 0x23, 0xff, 0x52, 0x2e, 0x23, 0xff, 0x52, 0x2e, 0x23, 0xff, 0x51, 0x2d, 0x22, 0xff, 0x50, 0x2c, 0x21, 0xff, 0x50, 0x2c, 0x22, 0xff, 0x51, 0x2d, 0x22, 0xff, 0x51, 0x2d, 0x22, 0xff, 0x51, 0x2e, 0x23, 0xff, 0x51, 0x2d, 0x23, 0xff, 0x50, 0x2c, 0x22, 0xff, 0x50, 0x2c, 0x21, 0xff, 0x4e, 0x28, 0x1d, 0xff, 0x4c, 0x26, 0x1a, 0xff, 0x4d, 0x26, 0x1b, 0xff, 0x4f, 0x29, 0x1e, 0xff, 0x4f, 0x2a, 0x20, 0xff, 0x4f, 0x2a, 0x20, 0xff, 0x4d, 0x29, 0x20, 0xff, 0x4d, 0x29, 0x20, 0xff, 0x4d, 0x28, 0x1f, 0xff, 0x4c, 0x27, 0x1e, 0xff, 0x4b, 0x27, 0x1d, 0xff, 0x49, 0x25, 0x1c, 0xff, 0x49, 0x25, 0x1c, 0xff, 0x48, 0x24, 0x1c, 0xff, 0x48, 0x24, 0x1b, 0xff, 0x43, 0x22, 0x19, 0xff, 0x37, 0x16, 0x0c, 0xff, 0x82, 0x6e, 0x68, 0xff, 0xf0, 0xf4, 0xf6, 0xff, 0xe9, 0xeb, 0xec, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf6, 0xf6, 0xf9, 0xff, 0x7e, 0x65, 0x5e, 0xff, 0x47, 0x21, 0x16, 0xff, 0x4f, 0x2c, 0x20, 0xff, 0x53, 0x30, 0x23, 0xff, 0x52, 0x2f, 0x24, 0xff, 0x52, 0x2f, 0x23, 0xff, 0x53, 0x30, 0x23, 0xff, 0x51, 0x2f, 0x21, 0xff, 0x50, 0x2d, 0x20, 0xff, 0x51, 0x2e, 0x21, 0xff, 0x51, 0x2d, 0x22, 0xff, 0x52, 0x2e, 0x23, 0xff, 0x52, 0x2d, 0x24, 0xff, 0x51, 0x2d, 0x24, 0xff, 0x51, 0x2d, 0x23, 0xff, 0x52, 0x2e, 0x24, 0xff, 0x51, 0x2d, 0x23, 0xff, 0x52, 0x2e, 0x24, 0xff, 0x51, 0x2d, 0x23, 0xff, 0x51, 0x2d, 0x23, 0xff, 0x50, 0x2d, 0x22, 0xff, 0x50, 0x2c, 0x21, 0xff, 0x51, 0x2e, 0x21, 0xff, 0x50, 0x2e, 0x21, 0xff, 0x50, 0x2d, 0x20, 0xff, 0x51, 0x2d, 0x22, 0xff, 0x4f, 0x2b, 0x21, 0xff, 0x4d, 0x29, 0x1f, 0xff, 0x4a, 0x26, 0x1d, 0xff, 0x4a, 0x27, 0x1d, 0xff, 0x46, 0x23, 0x1a, 0xff, 0x40, 0x1f, 0x15, 0xff, 0x4f, 0x30, 0x28, 0xff, 0xda, 0xd9, 0xda, 0xff, 0xed, 0xef, 0xf0, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf2, 0xf1, 0xf3, 0xff, 0xec, 0xeb, 0xed, 0xff, 0x69, 0x4b, 0x44, 0xff, 0x4b, 0x25, 0x1b, 0xff, 0x4e, 0x2b, 0x20, 0xff, 0x54, 0x30, 0x23, 0xff, 0x54, 0x30, 0x24, 0xff, 0x53, 0x30, 0x23, 0xff, 0x54, 0x30, 0x24, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x23, 0xff, 0x52, 0x2f, 0x23, 0xff, 0x52, 0x2e, 0x22, 0xff, 0x51, 0x2e, 0x23, 0xff, 0x51, 0x2d, 0x23, 0xff, 0x52, 0x2e, 0x24, 0xff, 0x52, 0x2e, 0x23, 0xff, 0x52, 0x2f, 0x23, 0xff, 0x51, 0x2e, 0x22, 0xff, 0x52, 0x2e, 0x24, 0xff, 0x52, 0x2e, 0x24, 0xff, 0x52, 0x2f, 0x23, 0xff, 0x53, 0x30, 0x23, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x51, 0x2e, 0x22, 0xff, 0x50, 0x2c, 0x21, 0xff, 0x4d, 0x29, 0x1e, 0xff, 0x4b, 0x27, 0x1d, 0xff, 0x47, 0x24, 0x1c, 0xff, 0x43, 0x22, 0x19, 0xff, 0x3d, 0x1a, 0x11, 0xff, 0xb3, 0xaa, 0xa8, 0xff, 0xf1, 0xf5, 0xf6, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf3, 0xf2, 0xf4, 0xff, 0xe5, 0xe3, 0xe4, 0xff, 0x5d, 0x3d, 0x35, 0xff, 0x4a, 0x25, 0x1b, 0xff, 0x4b, 0x27, 0x1e, 0xff, 0x53, 0x2e, 0x23, 0xff, 0x57, 0x31, 0x25, 0xff, 0x55, 0x30, 0x24, 0xff, 0x56, 0x30, 0x24, 0xff, 0x56, 0x30, 0x24, 0xff, 0x53, 0x30, 0x24, 0xff, 0x53, 0x2f, 0x23, 0xff, 0x52, 0x2f, 0x23, 0xff, 0x53, 0x30, 0x23, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x24, 0xff, 0x52, 0x2f, 0x23, 0xff, 0x53, 0x30, 0x23, 0xff, 0x53, 0x30, 0x23, 0xff, 0x52, 0x30, 0x22, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x53, 0x2f, 0x24, 0xff, 0x53, 0x30, 0x23, 0xff, 0x55, 0x30, 0x24, 0xff, 0x55, 0x30, 0x23, 0xff, 0x54, 0x30, 0x24, 0xff, 0x53, 0x30, 0x24, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x51, 0x2e, 0x21, 0xff, 0x4d, 0x29, 0x1f, 0xff, 0x49, 0x26, 0x1c, 0xff, 0x45, 0x22, 0x1a, 0xff, 0x42, 0x21, 0x18, 0xff, 0x3a, 0x16, 0x0d, 0xff, 0x88, 0x77, 0x73, 0xff, 0xf1, 0xf5, 0xf7, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf3, 0xf3, 0xf5, 0xff, 0xe4, 0xe0, 0xe1, 0xff, 0x5a, 0x3a, 0x31, 0xff, 0x46, 0x21, 0x18, 0xff, 0x44, 0x21, 0x1a, 0xff, 0x4a, 0x27, 0x1d, 0xff, 0x55, 0x30, 0x24, 0xff, 0x56, 0x30, 0x24, 0xff, 0x56, 0x30, 0x24, 0xff, 0x56, 0x31, 0x25, 0xff, 0x52, 0x2d, 0x21, 0xff, 0x4e, 0x2a, 0x1e, 0xff, 0x4f, 0x2a, 0x1f, 0xff, 0x50, 0x2c, 0x1f, 0xff, 0x4f, 0x2c, 0x20, 0xff, 0x4e, 0x2a, 0x20, 0xff, 0x4f, 0x2b, 0x20, 0xff, 0x4f, 0x2c, 0x1f, 0xff, 0x4f, 0x2b, 0x1e, 0xff, 0x51, 0x2c, 0x20, 0xff, 0x4f, 0x2b, 0x1f, 0xff, 0x4e, 0x29, 0x1f, 0xff, 0x50, 0x2c, 0x20, 0xff, 0x4f, 0x2c, 0x1f, 0xff, 0x52, 0x2c, 0x20, 0xff, 0x53, 0x2c, 0x21, 0xff, 0x54, 0x30, 0x24, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x51, 0x2e, 0x22, 0xff, 0x51, 0x2d, 0x21, 0xff, 0x4d, 0x29, 0x20, 0xff, 0x43, 0x21, 0x19, 0xff, 0x42, 0x20, 0x17, 0xff, 0x42, 0x21, 0x18, 0xff, 0x37, 0x16, 0x0c, 0xff, 0x6c, 0x56, 0x50, 0xff, 0xec, 0xef, 0xf1, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf2, 0xf2, 0xf4, 0xff, 0xe8, 0xe5, 0xe6, 0xff, 0x60, 0x40, 0x38, 0xff, 0x43, 0x1f, 0x16, 0xff, 0x3e, 0x1d, 0x17, 0xff, 0x35, 0x17, 0x11, 0xff, 0x49, 0x26, 0x1d, 0xff, 0x56, 0x30, 0x24, 0xff, 0x54, 0x30, 0x23, 0xff, 0x52, 0x2e, 0x21, 0xff, 0x6c, 0x4b, 0x3b, 0xff, 0x6e, 0x51, 0x3f, 0xff, 0x68, 0x49, 0x39, 0xff, 0x68, 0x49, 0x39, 0xff, 0x63, 0x44, 0x34, 0xff, 0x68, 0x49, 0x38, 0xff, 0x68, 0x49, 0x39, 0xff, 0x65, 0x45, 0x35, 0xff, 0x71, 0x54, 0x41, 0xff, 0x65, 0x44, 0x34, 0xff, 0x6c, 0x4e, 0x3d, 0xff, 0x6f, 0x51, 0x40, 0xff, 0x67, 0x48, 0x39, 0xff, 0x6a, 0x4c, 0x3b, 0xff, 0x60, 0x3f, 0x30, 0xff, 0x69, 0x49, 0x39, 0xff, 0x57, 0x33, 0x26, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x51, 0x2d, 0x21, 0xff, 0x49, 0x27, 0x1d, 0xff, 0x40, 0x1f, 0x16, 0xff, 0x3f, 0x1e, 0x15, 0xff, 0x3e, 0x1e, 0x15, 0xff, 0x37, 0x17, 0x0d, 0xff, 0x5f, 0x48, 0x42, 0xff, 0xe7, 0xe8, 0xeb, 0xff, 0xe8, 0xeb, 0xec, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, + 0xec, 0xec, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf1, 0xf1, 0xf3, 0xff, 0xeb, 0xea, 0xec, 0xff, 0x66, 0x48, 0x41, 0xff, 0x44, 0x1f, 0x16, 0xff, 0x3d, 0x1c, 0x16, 0xff, 0x29, 0x0f, 0x0d, 0xff, 0x36, 0x1a, 0x13, 0xff, 0x55, 0x31, 0x25, 0xff, 0x54, 0x31, 0x23, 0xff, 0x4e, 0x2a, 0x1e, 0xff, 0x82, 0x66, 0x52, 0xff, 0xa2, 0x8e, 0x73, 0xff, 0x8c, 0x75, 0x5e, 0xff, 0x9f, 0x8b, 0x71, 0xff, 0x9e, 0x8a, 0x70, 0xff, 0x9e, 0x89, 0x6f, 0xff, 0x9a, 0x84, 0x6b, 0xff, 0x9f, 0x8b, 0x70, 0xff, 0x94, 0x7d, 0x64, 0xff, 0x8b, 0x74, 0x5c, 0xff, 0x90, 0x78, 0x60, 0xff, 0xa0, 0x8b, 0x71, 0xff, 0x8d, 0x74, 0x5e, 0xff, 0xa0, 0x8c, 0x72, 0xff, 0x9c, 0x88, 0x6e, 0xff, 0x92, 0x7b, 0x63, 0xff, 0x59, 0x34, 0x28, 0xff, 0x53, 0x2f, 0x22, 0xff, 0x53, 0x30, 0x23, 0xff, 0x4f, 0x2c, 0x1f, 0xff, 0x3d, 0x1e, 0x17, 0xff, 0x34, 0x16, 0x10, 0xff, 0x36, 0x18, 0x12, 0xff, 0x39, 0x1b, 0x13, 0xff, 0x36, 0x16, 0x0d, 0xff, 0x56, 0x3e, 0x38, 0xff, 0xe1, 0xe2, 0xe5, 0xff, 0xe7, 0xea, 0xeb, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xee, 0xf0, 0xff, 0xf1, 0xf1, 0xf5, 0xff, 0xe2, 0xe1, 0xe4, 0xff, 0x60, 0x40, 0x38, 0xff, 0x4a, 0x25, 0x1b, 0xff, 0x46, 0x22, 0x1c, 0xff, 0x36, 0x17, 0x14, 0xff, 0x32, 0x16, 0x12, 0xff, 0x52, 0x2f, 0x23, 0xff, 0x55, 0x31, 0x24, 0xff, 0x53, 0x2d, 0x21, 0xff, 0x67, 0x47, 0x3b, 0xff, 0x78, 0x5e, 0x50, 0xff, 0x71, 0x57, 0x4a, 0xff, 0x71, 0x58, 0x4b, 0xff, 0x72, 0x59, 0x4b, 0xff, 0x72, 0x59, 0x4b, 0xff, 0x72, 0x59, 0x4c, 0xff, 0x73, 0x5a, 0x4d, 0xff, 0x70, 0x55, 0x49, 0xff, 0x6e, 0x54, 0x48, 0xff, 0x6e, 0x53, 0x47, 0xff, 0x75, 0x5d, 0x4f, 0xff, 0x70, 0x56, 0x49, 0xff, 0x70, 0x56, 0x48, 0xff, 0x6f, 0x57, 0x49, 0xff, 0x67, 0x4d, 0x40, 0xff, 0x57, 0x33, 0x27, 0xff, 0x54, 0x2f, 0x22, 0xff, 0x52, 0x2f, 0x21, 0xff, 0x46, 0x23, 0x1b, 0xff, 0x2a, 0x12, 0x0f, 0xff, 0x27, 0x0d, 0x0b, 0xff, 0x31, 0x13, 0x10, 0xff, 0x3a, 0x1b, 0x14, 0xff, 0x38, 0x18, 0x0f, 0xff, 0x4c, 0x32, 0x2c, 0xff, 0xdb, 0xdb, 0xdd, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf3, 0xf6, 0xf9, 0xff, 0xc5, 0xbd, 0xbe, 0xff, 0x4f, 0x2b, 0x20, 0xff, 0x50, 0x2c, 0x22, 0xff, 0x4b, 0x27, 0x1e, 0xff, 0x41, 0x1f, 0x18, 0xff, 0x2f, 0x13, 0x10, 0xff, 0x43, 0x22, 0x1b, 0xff, 0x54, 0x2f, 0x23, 0xff, 0x55, 0x2f, 0x24, 0xff, 0x69, 0x51, 0x4b, 0xff, 0x5c, 0x3d, 0x33, 0xff, 0x5c, 0x3d, 0x33, 0xff, 0x5d, 0x3e, 0x34, 0xff, 0x5b, 0x3a, 0x30, 0xff, 0x59, 0x38, 0x2e, 0xff, 0x5b, 0x3b, 0x30, 0xff, 0x5c, 0x3d, 0x32, 0xff, 0x5d, 0x3f, 0x35, 0xff, 0x5e, 0x3f, 0x36, 0xff, 0x5f, 0x40, 0x37, 0xff, 0x5e, 0x3f, 0x36, 0xff, 0x5f, 0x41, 0x37, 0xff, 0x5b, 0x3d, 0x32, 0xff, 0x59, 0x3b, 0x30, 0xff, 0x58, 0x3a, 0x30, 0xff, 0x54, 0x31, 0x25, 0xff, 0x51, 0x2e, 0x21, 0xff, 0x4e, 0x2a, 0x1f, 0xff, 0x38, 0x1b, 0x15, 0xff, 0x1f, 0x0b, 0x09, 0xff, 0x2d, 0x11, 0x0f, 0xff, 0x3b, 0x1b, 0x15, 0xff, 0x41, 0x20, 0x17, 0xff, 0x3a, 0x1a, 0x11, 0xff, 0x43, 0x28, 0x21, 0xff, 0xd2, 0xd1, 0xd4, 0xff, 0xe7, 0xe9, 0xed, 0xff, 0xe3, 0xe5, 0xe6, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe9, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf5, 0xf8, 0xfd, 0xff, 0xa1, 0x8f, 0x8d, 0xff, 0x4b, 0x25, 0x18, 0xff, 0x54, 0x30, 0x24, 0xff, 0x4b, 0x26, 0x1e, 0xff, 0x42, 0x20, 0x17, 0xff, 0x31, 0x16, 0x11, 0xff, 0x33, 0x17, 0x13, 0xff, 0x51, 0x2c, 0x23, 0xff, 0x56, 0x31, 0x26, 0xff, 0x64, 0x4f, 0x47, 0xff, 0x50, 0x2c, 0x1f, 0xff, 0x4f, 0x2c, 0x1e, 0xff, 0x4f, 0x2b, 0x1e, 0xff, 0x60, 0x46, 0x3c, 0xff, 0x62, 0x4c, 0x45, 0xff, 0x59, 0x3e, 0x3f, 0xff, 0x57, 0x3a, 0x32, 0xff, 0x4d, 0x27, 0x19, 0xff, 0x50, 0x2b, 0x1e, 0xff, 0x50, 0x2b, 0x1e, 0xff, 0x4e, 0x29, 0x1d, 0xff, 0x4f, 0x2a, 0x1e, 0xff, 0x4f, 0x2a, 0x1e, 0xff, 0x50, 0x2b, 0x1e, 0xff, 0x51, 0x2c, 0x1f, 0xff, 0x53, 0x30, 0x23, 0xff, 0x51, 0x2e, 0x21, 0xff, 0x4a, 0x27, 0x1d, 0xff, 0x28, 0x12, 0x0e, 0xff, 0x29, 0x10, 0x0c, 0xff, 0x3b, 0x1b, 0x14, 0xff, 0x41, 0x20, 0x18, 0xff, 0x3f, 0x1e, 0x15, 0xff, 0x3b, 0x1b, 0x12, 0xff, 0x3d, 0x1f, 0x17, 0xff, 0xc5, 0xc0, 0xc3, 0xff, 0xe9, 0xeb, 0xef, 0xff, 0xe3, 0xe4, 0xe7, 0xff, 0xe3, 0xe5, 0xe7, 0xff, 0xe4, 0xe7, 0xe7, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xef, 0xf1, 0xff, 0xf3, 0xf6, 0xfb, 0xff, 0x88, 0x71, 0x6e, 0xff, 0x45, 0x1c, 0x0e, 0xff, 0x50, 0x2b, 0x20, 0xff, 0x4c, 0x27, 0x1f, 0xff, 0x43, 0x21, 0x19, 0xff, 0x34, 0x17, 0x12, 0xff, 0x26, 0x10, 0x0d, 0xff, 0x48, 0x27, 0x1e, 0xff, 0x56, 0x33, 0x25, 0xff, 0x66, 0x51, 0x4a, 0xff, 0x53, 0x2e, 0x23, 0xff, 0x53, 0x30, 0x21, 0xff, 0x56, 0x35, 0x31, 0xff, 0x64, 0x55, 0x62, 0xff, 0x69, 0x5f, 0x5e, 0xff, 0x60, 0x58, 0x63, 0xff, 0x61, 0x4e, 0x50, 0xff, 0x5a, 0x39, 0x2d, 0xff, 0x5c, 0x3d, 0x33, 0xff, 0x5d, 0x3e, 0x33, 0xff, 0x5b, 0x3d, 0x32, 0xff, 0x5c, 0x3d, 0x32, 0xff, 0x59, 0x3a, 0x2f, 0xff, 0x59, 0x39, 0x30, 0xff, 0x57, 0x38, 0x2d, 0xff, 0x53, 0x30, 0x24, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x4a, 0x28, 0x1e, 0xff, 0x21, 0x10, 0x0d, 0xff, 0x2b, 0x11, 0x0d, 0xff, 0x3d, 0x1e, 0x14, 0xff, 0x40, 0x20, 0x17, 0xff, 0x42, 0x21, 0x18, 0xff, 0x40, 0x20, 0x16, 0xff, 0x38, 0x16, 0x0e, 0xff, 0xa7, 0x9d, 0x9d, 0xff, 0xec, 0xee, 0xf2, 0xff, 0xe3, 0xe4, 0xe8, 0xff, 0xe3, 0xe5, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xee, 0xf1, 0xff, 0xf1, 0xf2, 0xf4, 0xff, 0x9e, 0xad, 0xc9, 0xff, 0x5e, 0x57, 0x64, 0xff, 0x4e, 0x2d, 0x27, 0xff, 0x42, 0x1d, 0x13, 0xff, 0x3a, 0x17, 0x0e, 0xff, 0x31, 0x10, 0x09, 0xff, 0x1e, 0x0b, 0x08, 0xff, 0x38, 0x1b, 0x16, 0xff, 0x51, 0x2c, 0x22, 0xff, 0x66, 0x50, 0x4a, 0xff, 0x55, 0x31, 0x28, 0xff, 0x50, 0x2c, 0x1f, 0xff, 0x6a, 0x53, 0x4a, 0xff, 0x63, 0x4a, 0x41, 0xff, 0x60, 0x46, 0x3e, 0xff, 0x61, 0x47, 0x40, 0xff, 0x68, 0x4f, 0x47, 0xff, 0x71, 0x5a, 0x52, 0xff, 0x62, 0x43, 0x39, 0xff, 0x64, 0x47, 0x3c, 0xff, 0x65, 0x49, 0x3f, 0xff, 0x64, 0x47, 0x3f, 0xff, 0x5f, 0x42, 0x3a, 0xff, 0x5c, 0x3f, 0x34, 0xff, 0x5f, 0x49, 0x41, 0xff, 0x57, 0x3a, 0x30, 0xff, 0x50, 0x2b, 0x20, 0xff, 0x49, 0x27, 0x1d, 0xff, 0x26, 0x11, 0x0d, 0xff, 0x25, 0x0d, 0x0a, 0xff, 0x39, 0x1a, 0x13, 0xff, 0x3f, 0x20, 0x16, 0xff, 0x43, 0x22, 0x19, 0xff, 0x45, 0x23, 0x1a, 0xff, 0x38, 0x16, 0x0c, 0xff, 0x7b, 0x68, 0x64, 0xff, 0xe9, 0xec, 0xf1, 0xff, 0xe3, 0xe4, 0xe8, 0xff, 0xe3, 0xe5, 0xe8, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xee, 0xf1, 0xff, 0xef, 0xee, 0xf1, 0xff, 0x9f, 0xbb, 0xe1, 0xff, 0x89, 0xbb, 0xee, 0xff, 0x96, 0xb6, 0xd6, 0xff, 0x96, 0xa1, 0xb6, 0xff, 0x89, 0x90, 0xa3, 0xff, 0x67, 0x79, 0x97, 0xff, 0x2c, 0x28, 0x36, 0xff, 0x37, 0x18, 0x13, 0xff, 0x4d, 0x2a, 0x22, 0xff, 0x63, 0x4c, 0x44, 0xff, 0x73, 0x61, 0x5d, 0xff, 0x5a, 0x37, 0x2c, 0xff, 0x66, 0x4d, 0x44, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x51, 0x2c, 0x1f, 0xff, 0x4f, 0x2a, 0x1c, 0xff, 0x56, 0x34, 0x28, 0xff, 0x62, 0x4d, 0x46, 0xff, 0x4b, 0x30, 0x2b, 0xff, 0x4e, 0x34, 0x31, 0xff, 0x50, 0x2e, 0x22, 0xff, 0x4f, 0x2a, 0x1d, 0xff, 0x51, 0x2e, 0x22, 0xff, 0x55, 0x37, 0x2c, 0xff, 0x5b, 0x44, 0x3c, 0xff, 0x57, 0x39, 0x31, 0xff, 0x4e, 0x29, 0x1f, 0xff, 0x46, 0x25, 0x1c, 0xff, 0x28, 0x13, 0x10, 0xff, 0x23, 0x0c, 0x09, 0xff, 0x35, 0x18, 0x10, 0xff, 0x3e, 0x1d, 0x15, 0xff, 0x3f, 0x1e, 0x15, 0xff, 0x3c, 0x1a, 0x0f, 0xff, 0x33, 0x10, 0x07, 0xff, 0x6f, 0x65, 0x6b, 0xff, 0xe2, 0xe6, 0xea, 0xff, 0xe1, 0xe2, 0xe6, 0xff, 0xe3, 0xe4, 0xe8, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf0, 0xff, 0xee, 0xee, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0x9b, 0xb6, 0xda, 0xff, 0x81, 0xb3, 0xe6, 0xff, 0xa4, 0xd1, 0xf8, 0xff, 0xc0, 0xe2, 0xff, 0xff, 0xbb, 0xe1, 0xff, 0xff, 0x7e, 0xb1, 0xe6, 0xff, 0x34, 0x30, 0x43, 0xff, 0x3c, 0x1c, 0x16, 0xff, 0x50, 0x2d, 0x23, 0xff, 0x61, 0x48, 0x40, 0xff, 0x86, 0x7e, 0x7b, 0xff, 0x71, 0x5d, 0x57, 0xff, 0x65, 0x4b, 0x43, 0xff, 0x56, 0x35, 0x29, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x51, 0x2e, 0x22, 0xff, 0x5e, 0x3e, 0x33, 0xff, 0x57, 0x57, 0x55, 0xff, 0x55, 0x5b, 0x5c, 0xff, 0x5d, 0x60, 0x63, 0xff, 0x5c, 0x4a, 0x42, 0xff, 0x57, 0x33, 0x26, 0xff, 0x53, 0x35, 0x2a, 0xff, 0x64, 0x52, 0x4c, 0xff, 0x63, 0x53, 0x4d, 0xff, 0x55, 0x37, 0x2d, 0xff, 0x4b, 0x27, 0x1d, 0xff, 0x40, 0x1e, 0x16, 0xff, 0x35, 0x27, 0x28, 0xff, 0x31, 0x22, 0x25, 0xff, 0x37, 0x19, 0x13, 0xff, 0x3d, 0x20, 0x1b, 0xff, 0x44, 0x2b, 0x28, 0xff, 0x50, 0x40, 0x42, 0xff, 0x5a, 0x6d, 0x8d, 0xff, 0x7f, 0x9e, 0xc8, 0xff, 0xdd, 0xdf, 0xe0, 0xff, 0xdd, 0xdf, 0xe3, 0xff, 0xe1, 0xe2, 0xe6, 0xff, 0xe4, 0xe5, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xee, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xee, 0xee, 0xf1, 0xff, 0xf0, 0xf0, 0xef, 0xff, 0x98, 0xb2, 0xd6, 0xff, 0x7b, 0xae, 0xe3, 0xff, 0xa2, 0xcd, 0xf2, 0xff, 0xbe, 0xdb, 0xfa, 0xff, 0xb1, 0xd7, 0xf7, 0xff, 0x72, 0x9f, 0xcf, 0xff, 0x4a, 0x3b, 0x44, 0xff, 0x3e, 0x1d, 0x18, 0xff, 0x4b, 0x2a, 0x21, 0xff, 0x60, 0x46, 0x3e, 0xff, 0x80, 0x77, 0x74, 0xff, 0x7a, 0x71, 0x6e, 0xff, 0x64, 0x4a, 0x43, 0xff, 0x56, 0x34, 0x29, 0xff, 0x51, 0x2c, 0x1f, 0xff, 0x63, 0x48, 0x3f, 0xff, 0x6a, 0x53, 0x4b, 0xff, 0x61, 0x4b, 0x43, 0xff, 0x65, 0x4d, 0x45, 0xff, 0x68, 0x4f, 0x46, 0xff, 0x67, 0x4d, 0x43, 0xff, 0x6c, 0x55, 0x4d, 0xff, 0x55, 0x3a, 0x2f, 0xff, 0x64, 0x50, 0x48, 0xff, 0x62, 0x51, 0x4b, 0xff, 0x4e, 0x32, 0x28, 0xff, 0x42, 0x20, 0x18, 0xff, 0x3a, 0x19, 0x13, 0xff, 0x43, 0x40, 0x47, 0xff, 0x48, 0x60, 0x82, 0xff, 0x7c, 0x9c, 0xc2, 0xff, 0x99, 0xb4, 0xd2, 0xff, 0x9b, 0xbd, 0xdf, 0xff, 0x91, 0xc0, 0xeb, 0xff, 0x79, 0xaf, 0xe7, 0xff, 0x78, 0x98, 0xc4, 0xff, 0xdb, 0xdc, 0xdf, 0xff, 0xdb, 0xde, 0xe2, 0xff, 0xde, 0xe0, 0xe4, 0xff, 0xe2, 0xe4, 0xe7, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xee, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xee, 0xee, 0xf0, 0xff, 0xf1, 0xf0, 0xef, 0xff, 0x98, 0xb1, 0xd5, 0xff, 0x79, 0xad, 0xe1, 0xff, 0xa4, 0xcf, 0xf2, 0xff, 0xb9, 0xd9, 0xf8, 0xff, 0xa3, 0xce, 0xf3, 0xff, 0x64, 0x8e, 0xbe, 0xff, 0x5b, 0x46, 0x49, 0xff, 0x3e, 0x1e, 0x1a, 0xff, 0x44, 0x24, 0x1e, 0xff, 0x69, 0x50, 0x49, 0xff, 0x79, 0x6d, 0x69, 0xff, 0x72, 0x68, 0x63, 0xff, 0x6b, 0x55, 0x4f, 0xff, 0x56, 0x33, 0x27, 0xff, 0x51, 0x2c, 0x1f, 0xff, 0x62, 0x47, 0x3e, 0xff, 0x57, 0x33, 0x29, 0xff, 0x53, 0x2b, 0x1e, 0xff, 0x53, 0x2d, 0x20, 0xff, 0x50, 0x2c, 0x1f, 0xff, 0x4e, 0x28, 0x1b, 0xff, 0x5e, 0x44, 0x3b, 0xff, 0x5d, 0x4c, 0x43, 0xff, 0x65, 0x59, 0x53, 0xff, 0x63, 0x58, 0x53, 0xff, 0x47, 0x2a, 0x23, 0xff, 0x33, 0x14, 0x0f, 0xff, 0x32, 0x16, 0x11, 0xff, 0x3e, 0x3e, 0x44, 0xff, 0x49, 0x61, 0x83, 0xff, 0x7d, 0xaf, 0xe2, 0xff, 0xa8, 0xd1, 0xf8, 0xff, 0xa7, 0xd1, 0xf5, 0xff, 0x96, 0xc4, 0xed, 0xff, 0x74, 0xa6, 0xdc, 0xff, 0x70, 0x8f, 0xbd, 0xff, 0xda, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xe2, 0xff, 0xdd, 0xdf, 0xe4, 0xff, 0xe1, 0xe2, 0xe6, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xee, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xee, 0xee, 0xf0, 0xff, 0xf1, 0xf0, 0xef, 0xff, 0x9e, 0xb6, 0xd7, 0xff, 0x78, 0xab, 0xe1, 0xff, 0x9f, 0xca, 0xf0, 0xff, 0xae, 0xd4, 0xf5, 0xff, 0x91, 0xbe, 0xec, 0xff, 0x5a, 0x7d, 0xae, 0xff, 0x6b, 0x56, 0x54, 0xff, 0x41, 0x20, 0x1a, 0xff, 0x42, 0x23, 0x1e, 0xff, 0x67, 0x4f, 0x48, 0xff, 0x58, 0x3a, 0x30, 0xff, 0x54, 0x35, 0x2c, 0xff, 0x67, 0x52, 0x4a, 0xff, 0x56, 0x32, 0x26, 0xff, 0x52, 0x2c, 0x1f, 0xff, 0x63, 0x47, 0x3d, 0xff, 0x57, 0x34, 0x28, 0xff, 0x51, 0x2d, 0x1f, 0xff, 0x53, 0x2e, 0x21, 0xff, 0x52, 0x2f, 0x22, 0xff, 0x50, 0x2c, 0x1f, 0xff, 0x60, 0x45, 0x3e, 0xff, 0x5b, 0x41, 0x37, 0xff, 0x51, 0x32, 0x27, 0xff, 0x54, 0x3d, 0x36, 0xff, 0x41, 0x27, 0x24, 0xff, 0x2c, 0x0e, 0x0c, 0xff, 0x2a, 0x0f, 0x0c, 0xff, 0x3d, 0x39, 0x40, 0xff, 0x4a, 0x5c, 0x77, 0xff, 0x6a, 0x9a, 0xcf, 0xff, 0x98, 0xc4, 0xef, 0xff, 0x9f, 0xc9, 0xee, 0xff, 0x96, 0xc2, 0xec, 0xff, 0x76, 0xa6, 0xde, 0xff, 0x72, 0x90, 0xbc, 0xff, 0xda, 0xda, 0xdd, 0xff, 0xdb, 0xde, 0xe2, 0xff, 0xdc, 0xdf, 0xe3, 0xff, 0xe0, 0xe2, 0xe5, 0xff, 0xe3, 0xe5, 0xe7, 0xff, 0xe7, 0xe8, 0xe9, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xed, 0xee, 0xf1, 0xff, 0xf1, 0xf0, 0xf0, 0xff, 0xa0, 0xb9, 0xd9, 0xff, 0x83, 0xb4, 0xe9, 0xff, 0x96, 0xc1, 0xee, 0xff, 0x92, 0xbd, 0xeb, 0xff, 0x78, 0xa7, 0xdd, 0xff, 0x5b, 0x77, 0xa3, 0xff, 0x7f, 0x6b, 0x67, 0xff, 0x42, 0x20, 0x19, 0xff, 0x3f, 0x22, 0x1f, 0xff, 0x5e, 0x47, 0x42, 0xff, 0x4a, 0x26, 0x1d, 0xff, 0x4a, 0x24, 0x19, 0xff, 0x62, 0x49, 0x40, 0xff, 0x57, 0x33, 0x27, 0xff, 0x51, 0x2d, 0x26, 0xff, 0x60, 0x49, 0x44, 0xff, 0x65, 0x4f, 0x47, 0xff, 0x64, 0x4b, 0x44, 0xff, 0x5e, 0x43, 0x3b, 0xff, 0x51, 0x2e, 0x21, 0xff, 0x51, 0x2d, 0x20, 0xff, 0x5d, 0x42, 0x39, 0xff, 0x52, 0x31, 0x27, 0xff, 0x4a, 0x23, 0x18, 0xff, 0x4d, 0x32, 0x2b, 0xff, 0x40, 0x28, 0x24, 0xff, 0x2c, 0x10, 0x0d, 0xff, 0x2a, 0x0e, 0x0b, 0xff, 0x4a, 0x41, 0x45, 0xff, 0x50, 0x5e, 0x73, 0xff, 0x60, 0x8a, 0xbe, 0xff, 0x8d, 0xba, 0xe8, 0xff, 0x99, 0xc3, 0xed, 0xff, 0x8e, 0xbb, 0xe8, 0xff, 0x79, 0xaa, 0xe2, 0xff, 0x7b, 0x99, 0xc3, 0xff, 0xd9, 0xda, 0xdc, 0xff, 0xdb, 0xdd, 0xe1, 0xff, 0xdc, 0xdf, 0xe3, 0xff, 0xdf, 0xe1, 0xe5, 0xff, 0xe3, 0xe5, 0xe6, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf0, 0xff, 0xed, 0xee, 0xf1, 0xff, 0xee, 0xed, 0xee, 0xff, 0x94, 0xb1, 0xd9, 0xff, 0x93, 0xc0, 0xf0, 0xff, 0x99, 0xc4, 0xf1, 0xff, 0x84, 0xb0, 0xe5, 0xff, 0x73, 0x9f, 0xda, 0xff, 0x6b, 0x88, 0xb2, 0xff, 0x83, 0x70, 0x6b, 0xff, 0x44, 0x20, 0x18, 0xff, 0x3e, 0x21, 0x1d, 0xff, 0x5d, 0x47, 0x43, 0xff, 0x4b, 0x27, 0x1e, 0xff, 0x49, 0x24, 0x19, 0xff, 0x63, 0x4e, 0x47, 0xff, 0x54, 0x42, 0x41, 0xff, 0x51, 0x39, 0x3f, 0xff, 0x63, 0x5b, 0x59, 0xff, 0x4a, 0x37, 0x36, 0xff, 0x56, 0x34, 0x29, 0xff, 0x53, 0x31, 0x24, 0xff, 0x50, 0x2d, 0x20, 0xff, 0x51, 0x2c, 0x20, 0xff, 0x5a, 0x3f, 0x37, 0xff, 0x4a, 0x2c, 0x23, 0xff, 0x43, 0x1f, 0x15, 0xff, 0x49, 0x2f, 0x29, 0xff, 0x40, 0x29, 0x24, 0xff, 0x31, 0x15, 0x11, 0xff, 0x29, 0x0e, 0x0b, 0xff, 0x49, 0x41, 0x45, 0xff, 0x5b, 0x65, 0x75, 0xff, 0x53, 0x76, 0xa5, 0xff, 0x7f, 0xad, 0xe0, 0xff, 0x8b, 0xb7, 0xe6, 0xff, 0x87, 0xb7, 0xe5, 0xff, 0x82, 0xb4, 0xe7, 0xff, 0x7c, 0x9c, 0xc6, 0xff, 0xd8, 0xd9, 0xdb, 0xff, 0xdb, 0xdd, 0xe1, 0xff, 0xdd, 0xdf, 0xe3, 0xff, 0xdf, 0xe1, 0xe5, 0xff, 0xe2, 0xe4, 0xe6, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xe9, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf1, 0xff, 0xef, 0xef, 0xf1, 0xff, 0xe3, 0xe5, 0xeb, 0xff, 0x8a, 0xad, 0xdd, 0xff, 0xa0, 0xcb, 0xf6, 0xff, 0xa2, 0xcb, 0xf4, 0xff, 0x94, 0xbd, 0xeb, 0xff, 0x88, 0xb5, 0xe9, 0xff, 0x7d, 0x9d, 0xc9, 0xff, 0x6f, 0x57, 0x52, 0xff, 0x49, 0x23, 0x1b, 0xff, 0x3d, 0x20, 0x1d, 0xff, 0x5a, 0x46, 0x40, 0xff, 0x49, 0x27, 0x1d, 0xff, 0x47, 0x22, 0x18, 0xff, 0x5f, 0x4a, 0x45, 0xff, 0x4d, 0x3e, 0x42, 0xff, 0x48, 0x32, 0x37, 0xff, 0x5d, 0x4d, 0x4f, 0xff, 0x4e, 0x39, 0x38, 0xff, 0x51, 0x2c, 0x20, 0xff, 0x4f, 0x2a, 0x1e, 0xff, 0x4d, 0x29, 0x1d, 0xff, 0x4f, 0x29, 0x1d, 0xff, 0x59, 0x3e, 0x37, 0xff, 0x45, 0x26, 0x1f, 0xff, 0x3b, 0x18, 0x0f, 0xff, 0x47, 0x2f, 0x2a, 0xff, 0x3e, 0x27, 0x23, 0xff, 0x31, 0x16, 0x12, 0xff, 0x35, 0x16, 0x10, 0xff, 0x48, 0x3f, 0x45, 0xff, 0x63, 0x6d, 0x7b, 0xff, 0x56, 0x76, 0xa7, 0xff, 0x6a, 0x98, 0xd3, 0xff, 0x71, 0x9e, 0xda, 0xff, 0x8d, 0xba, 0xe9, 0xff, 0x91, 0xc1, 0xee, 0xff, 0x74, 0x9a, 0xca, 0xff, 0xd0, 0xd2, 0xd7, 0xff, 0xdb, 0xdd, 0xe1, 0xff, 0xdc, 0xdf, 0xe3, 0xff, 0xdf, 0xe1, 0xe5, 0xff, 0xe3, 0xe4, 0xe6, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xea, 0xe9, 0xeb, 0xff, 0xea, 0xe9, 0xeb, 0xff, + 0xed, 0xec, 0xee, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf1, 0xf0, 0xf2, 0xff, 0xd7, 0xdc, 0xe6, 0xff, 0x7d, 0xa8, 0xde, 0xff, 0x9b, 0xc8, 0xf5, 0xff, 0xa1, 0xcb, 0xf4, 0xff, 0x92, 0xbb, 0xea, 0xff, 0x94, 0xbf, 0xef, 0xff, 0x80, 0xa2, 0xcd, 0xff, 0x5c, 0x42, 0x41, 0xff, 0x4e, 0x28, 0x1e, 0xff, 0x3e, 0x20, 0x1d, 0xff, 0x57, 0x44, 0x3f, 0xff, 0x48, 0x25, 0x1c, 0xff, 0x45, 0x20, 0x17, 0xff, 0x5a, 0x45, 0x40, 0xff, 0x59, 0x4a, 0x48, 0xff, 0x5a, 0x49, 0x4c, 0xff, 0x64, 0x58, 0x57, 0xff, 0x5a, 0x4a, 0x44, 0xff, 0x5f, 0x48, 0x40, 0xff, 0x5b, 0x42, 0x3b, 0xff, 0x56, 0x40, 0x3b, 0xff, 0x5a, 0x42, 0x3d, 0xff, 0x5f, 0x4a, 0x45, 0xff, 0x44, 0x24, 0x1f, 0xff, 0x35, 0x14, 0x0d, 0xff, 0x48, 0x2f, 0x2a, 0xff, 0x3e, 0x26, 0x22, 0xff, 0x35, 0x18, 0x13, 0xff, 0x37, 0x18, 0x11, 0xff, 0x4b, 0x41, 0x46, 0xff, 0x64, 0x6e, 0x7d, 0xff, 0x66, 0x8a, 0xba, 0xff, 0x85, 0xb0, 0xe5, 0xff, 0x7c, 0xa9, 0xde, 0xff, 0x98, 0xc2, 0xee, 0xff, 0x9e, 0xc9, 0xf2, 0xff, 0x71, 0x9b, 0xd0, 0xff, 0xc2, 0xc9, 0xd3, 0xff, 0xdd, 0xdf, 0xe2, 0xff, 0xdc, 0xdf, 0xe3, 0xff, 0xdf, 0xe1, 0xe5, 0xff, 0xe3, 0xe4, 0xe5, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xea, 0xe9, 0xeb, 0xff, 0xea, 0xe9, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xca, 0xd3, 0xe2, 0xff, 0x77, 0xa5, 0xdf, 0xff, 0x9c, 0xc8, 0xf5, 0xff, 0xa1, 0xcb, 0xf5, 0xff, 0x92, 0xbc, 0xeb, 0xff, 0x8e, 0xba, 0xea, 0xff, 0x80, 0xa5, 0xd0, 0xff, 0x58, 0x40, 0x41, 0xff, 0x4e, 0x28, 0x1e, 0xff, 0x3d, 0x20, 0x1d, 0xff, 0x55, 0x41, 0x3e, 0xff, 0x48, 0x26, 0x1c, 0xff, 0x44, 0x22, 0x18, 0xff, 0x43, 0x22, 0x19, 0xff, 0x4a, 0x29, 0x20, 0xff, 0x4f, 0x2d, 0x21, 0xff, 0x51, 0x31, 0x25, 0xff, 0x62, 0x51, 0x48, 0xff, 0x5d, 0x46, 0x3f, 0xff, 0x4e, 0x2d, 0x23, 0xff, 0x4f, 0x2f, 0x27, 0xff, 0x54, 0x34, 0x2a, 0xff, 0x53, 0x31, 0x26, 0xff, 0x43, 0x29, 0x2a, 0xff, 0x37, 0x24, 0x20, 0xff, 0x4b, 0x36, 0x31, 0xff, 0x3f, 0x27, 0x23, 0xff, 0x37, 0x1a, 0x14, 0xff, 0x36, 0x17, 0x0f, 0xff, 0x4f, 0x46, 0x49, 0xff, 0x69, 0x74, 0x81, 0xff, 0x6c, 0x91, 0xbe, 0xff, 0x95, 0xc0, 0xed, 0xff, 0x8f, 0xba, 0xe6, 0xff, 0xa3, 0xca, 0xf0, 0xff, 0xa9, 0xd1, 0xf6, 0xff, 0x72, 0xa0, 0xd6, 0xff, 0xb6, 0xbf, 0xce, 0xff, 0xdd, 0xe0, 0xe2, 0xff, 0xdc, 0xdf, 0xe3, 0xff, 0xdf, 0xe1, 0xe4, 0xff, 0xe3, 0xe5, 0xe6, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xea, 0xeb, 0xff, 0xe9, 0xe9, 0xeb, 0xff, 0xea, 0xe9, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xef, 0xf1, 0xff, 0xf3, 0xf2, 0xf2, 0xff, 0xc2, 0xcd, 0xdf, 0xff, 0x72, 0xa1, 0xdd, 0xff, 0xa3, 0xcd, 0xf5, 0xff, 0xa5, 0xcf, 0xf6, 0xff, 0x99, 0xc3, 0xef, 0xff, 0x85, 0xb2, 0xe5, 0xff, 0x81, 0xa6, 0xd4, 0xff, 0x5f, 0x46, 0x46, 0xff, 0x4f, 0x28, 0x1e, 0xff, 0x40, 0x22, 0x1e, 0xff, 0x52, 0x3e, 0x3b, 0xff, 0x47, 0x22, 0x18, 0xff, 0x42, 0x1f, 0x14, 0xff, 0x47, 0x29, 0x20, 0xff, 0x4b, 0x30, 0x2a, 0xff, 0x4b, 0x29, 0x26, 0xff, 0x51, 0x34, 0x2b, 0xff, 0x4f, 0x3e, 0x36, 0xff, 0x52, 0x37, 0x2f, 0xff, 0x45, 0x1e, 0x14, 0xff, 0x48, 0x22, 0x18, 0xff, 0x4f, 0x29, 0x1d, 0xff, 0x4e, 0x28, 0x1c, 0xff, 0x49, 0x2b, 0x27, 0xff, 0x3a, 0x27, 0x27, 0xff, 0x45, 0x2f, 0x2a, 0xff, 0x43, 0x28, 0x24, 0xff, 0x39, 0x1b, 0x14, 0xff, 0x2f, 0x12, 0x0b, 0xff, 0x54, 0x4e, 0x53, 0xff, 0x73, 0x7c, 0x89, 0xff, 0x74, 0x98, 0xc3, 0xff, 0x8c, 0xb9, 0xea, 0xff, 0x93, 0xbd, 0xe8, 0xff, 0xa8, 0xcf, 0xf3, 0xff, 0xa6, 0xcf, 0xf5, 0xff, 0x6a, 0x9b, 0xd5, 0xff, 0xab, 0xb7, 0xc9, 0xff, 0xdf, 0xe1, 0xe2, 0xff, 0xdc, 0xdf, 0xe3, 0xff, 0xdf, 0xe1, 0xe4, 0xff, 0xe3, 0xe5, 0xe6, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xef, 0xf1, 0xff, 0xf3, 0xf2, 0xf1, 0xff, 0xc4, 0xce, 0xdf, 0xff, 0x6d, 0x9d, 0xdb, 0xff, 0xa0, 0xc9, 0xf4, 0xff, 0xad, 0xd3, 0xf7, 0xff, 0x9f, 0xc9, 0xf3, 0xff, 0x80, 0xae, 0xe2, 0xff, 0x77, 0xa0, 0xd1, 0xff, 0x5e, 0x47, 0x48, 0xff, 0x4f, 0x28, 0x1d, 0xff, 0x44, 0x23, 0x1d, 0xff, 0x56, 0x48, 0x46, 0xff, 0x56, 0x43, 0x41, 0xff, 0x56, 0x3f, 0x3b, 0xff, 0x59, 0x47, 0x4f, 0xff, 0x5e, 0x4d, 0x4c, 0xff, 0x57, 0x40, 0x46, 0xff, 0x55, 0x44, 0x45, 0xff, 0x52, 0x43, 0x3b, 0xff, 0x5a, 0x48, 0x43, 0xff, 0x53, 0x39, 0x34, 0xff, 0x57, 0x3d, 0x36, 0xff, 0x5a, 0x3f, 0x37, 0xff, 0x56, 0x3a, 0x33, 0xff, 0x51, 0x3a, 0x3a, 0xff, 0x46, 0x36, 0x37, 0xff, 0x45, 0x35, 0x31, 0xff, 0x4a, 0x2c, 0x27, 0xff, 0x3d, 0x1e, 0x18, 0xff, 0x30, 0x13, 0x0d, 0xff, 0x63, 0x60, 0x65, 0xff, 0x7d, 0x85, 0x90, 0xff, 0x72, 0x96, 0xbf, 0xff, 0x84, 0xb3, 0xe7, 0xff, 0x96, 0xbf, 0xeb, 0xff, 0xaa, 0xd0, 0xf5, 0xff, 0xa4, 0xcd, 0xf4, 0xff, 0x65, 0x95, 0xd2, 0xff, 0xa1, 0xae, 0xc3, 0xff, 0xe0, 0xe2, 0xe3, 0xff, 0xdc, 0xdf, 0xe2, 0xff, 0xde, 0xe1, 0xe3, 0xff, 0xe3, 0xe4, 0xe5, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe9, 0xea, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf1, 0xf1, 0xf0, 0xff, 0xcf, 0xd5, 0xe1, 0xff, 0x68, 0x96, 0xd4, 0xff, 0x90, 0xbe, 0xef, 0xff, 0xa5, 0xce, 0xf6, 0xff, 0xa2, 0xcc, 0xf3, 0xff, 0x82, 0xb1, 0xe2, 0xff, 0x70, 0x98, 0xcd, 0xff, 0x59, 0x47, 0x4b, 0xff, 0x50, 0x29, 0x1d, 0xff, 0x46, 0x25, 0x1d, 0xff, 0x49, 0x2d, 0x28, 0xff, 0x56, 0x3a, 0x35, 0xff, 0x56, 0x39, 0x33, 0xff, 0x53, 0x36, 0x31, 0xff, 0x54, 0x36, 0x2e, 0xff, 0x55, 0x36, 0x2e, 0xff, 0x50, 0x32, 0x2b, 0xff, 0x50, 0x34, 0x2c, 0xff, 0x4e, 0x32, 0x2c, 0xff, 0x50, 0x35, 0x2d, 0xff, 0x4c, 0x33, 0x2e, 0xff, 0x47, 0x2e, 0x2a, 0xff, 0x4f, 0x31, 0x2c, 0xff, 0x54, 0x34, 0x2e, 0xff, 0x4c, 0x2f, 0x28, 0xff, 0x3f, 0x26, 0x20, 0xff, 0x46, 0x26, 0x1f, 0xff, 0x46, 0x25, 0x1f, 0xff, 0x34, 0x17, 0x10, 0xff, 0x6d, 0x6b, 0x72, 0xff, 0x88, 0x8f, 0x99, 0xff, 0x6e, 0x91, 0xbc, 0xff, 0x7c, 0xad, 0xe3, 0xff, 0x96, 0xc0, 0xec, 0xff, 0xa4, 0xcb, 0xf4, 0xff, 0x9b, 0xc6, 0xf2, 0xff, 0x59, 0x88, 0xc9, 0xff, 0x98, 0xa5, 0xbc, 0xff, 0xe1, 0xe2, 0xe3, 0xff, 0xdd, 0xe0, 0xe1, 0xff, 0xdf, 0xe1, 0xe2, 0xff, 0xe2, 0xe3, 0xe4, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xee, 0xed, 0xef, 0xff, 0xee, 0xed, 0xef, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xef, 0xef, 0xff, 0xe1, 0xe3, 0xe7, 0xff, 0x72, 0x99, 0xcf, 0xff, 0x86, 0xb8, 0xec, 0xff, 0xa3, 0xcb, 0xf4, 0xff, 0xa1, 0xcb, 0xf2, 0xff, 0x7d, 0xad, 0xdf, 0xff, 0x6b, 0x94, 0xc9, 0xff, 0x59, 0x4a, 0x4f, 0xff, 0x4f, 0x28, 0x1c, 0xff, 0x49, 0x27, 0x20, 0xff, 0x40, 0x1f, 0x18, 0xff, 0x48, 0x24, 0x1a, 0xff, 0x48, 0x23, 0x19, 0xff, 0x47, 0x22, 0x18, 0xff, 0x48, 0x23, 0x19, 0xff, 0x4b, 0x26, 0x1c, 0xff, 0x4c, 0x27, 0x1d, 0xff, 0x48, 0x23, 0x1a, 0xff, 0x42, 0x1f, 0x16, 0xff, 0x42, 0x1e, 0x15, 0xff, 0x38, 0x18, 0x11, 0xff, 0x27, 0x0d, 0x0a, 0xff, 0x3b, 0x1b, 0x13, 0xff, 0x4a, 0x24, 0x1b, 0xff, 0x47, 0x22, 0x1a, 0xff, 0x37, 0x18, 0x10, 0xff, 0x3e, 0x1f, 0x17, 0xff, 0x3a, 0x1d, 0x18, 0xff, 0x2e, 0x13, 0x0f, 0xff, 0x74, 0x74, 0x7b, 0xff, 0x93, 0x99, 0xa2, 0xff, 0x69, 0x8b, 0xba, 0xff, 0x75, 0xa5, 0xdd, 0xff, 0x96, 0xc1, 0xed, 0xff, 0xa1, 0xc9, 0xf3, 0xff, 0x8e, 0xbd, 0xee, 0xff, 0x51, 0x81, 0xc5, 0xff, 0x96, 0xa4, 0xbc, 0xff, 0xe2, 0xe2, 0xe1, 0xff, 0xde, 0xdf, 0xe1, 0xff, 0xdf, 0xe1, 0xe2, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xec, 0xff, 0x82, 0xa0, 0xcd, 0xff, 0x75, 0xa9, 0xe3, 0xff, 0x9d, 0xc8, 0xf1, 0xff, 0x9f, 0xc8, 0xf0, 0xff, 0x7b, 0xab, 0xe0, 0xff, 0x64, 0x8d, 0xc3, 0xff, 0x59, 0x4a, 0x4e, 0xff, 0x4d, 0x26, 0x1b, 0xff, 0x4c, 0x29, 0x22, 0xff, 0x3f, 0x20, 0x1a, 0xff, 0x49, 0x26, 0x1d, 0xff, 0x48, 0x25, 0x1b, 0xff, 0x47, 0x23, 0x1b, 0xff, 0x46, 0x22, 0x1a, 0xff, 0x4a, 0x27, 0x1c, 0xff, 0x4c, 0x28, 0x1f, 0xff, 0x4a, 0x25, 0x1d, 0xff, 0x41, 0x20, 0x17, 0xff, 0x40, 0x1f, 0x16, 0xff, 0x43, 0x21, 0x18, 0xff, 0x31, 0x13, 0x0e, 0xff, 0x2f, 0x12, 0x0d, 0xff, 0x43, 0x21, 0x18, 0xff, 0x4a, 0x25, 0x1d, 0xff, 0x3d, 0x1d, 0x15, 0xff, 0x3b, 0x1d, 0x16, 0xff, 0x37, 0x1a, 0x15, 0xff, 0x35, 0x18, 0x13, 0xff, 0x79, 0x7a, 0x81, 0xff, 0x9c, 0xa0, 0xa9, 0xff, 0x63, 0x82, 0xaf, 0xff, 0x75, 0xa4, 0xdb, 0xff, 0x9b, 0xc5, 0xef, 0xff, 0x9d, 0xc5, 0xf0, 0xff, 0x86, 0xb6, 0xea, 0xff, 0x4d, 0x7e, 0xc2, 0xff, 0x9d, 0xaa, 0xbe, 0xff, 0xe0, 0xe1, 0xe2, 0xff, 0xde, 0xdf, 0xe1, 0xff, 0xdf, 0xe1, 0xe2, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xed, 0xef, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xec, 0xec, 0xed, 0xff, 0xf2, 0xf0, 0xee, 0xff, 0x95, 0xaa, 0xce, 0xff, 0x66, 0x9a, 0xd9, 0xff, 0x99, 0xc4, 0xf0, 0xff, 0x9f, 0xca, 0xf1, 0xff, 0x7c, 0xac, 0xe0, 0xff, 0x5a, 0x80, 0xb5, 0xff, 0x3e, 0x2e, 0x30, 0xff, 0x4d, 0x27, 0x1c, 0xff, 0x4f, 0x2c, 0x22, 0xff, 0x3e, 0x1f, 0x19, 0xff, 0x49, 0x25, 0x1c, 0xff, 0x46, 0x25, 0x1a, 0xff, 0x43, 0x21, 0x18, 0xff, 0x42, 0x21, 0x18, 0xff, 0x45, 0x23, 0x19, 0xff, 0x49, 0x25, 0x1c, 0xff, 0x4a, 0x26, 0x1d, 0xff, 0x48, 0x25, 0x1b, 0xff, 0x47, 0x24, 0x1c, 0xff, 0x4b, 0x27, 0x1e, 0xff, 0x3f, 0x1d, 0x16, 0xff, 0x25, 0x0a, 0x0a, 0xff, 0x31, 0x15, 0x10, 0xff, 0x4b, 0x27, 0x1e, 0xff, 0x43, 0x22, 0x1a, 0xff, 0x36, 0x19, 0x13, 0xff, 0x35, 0x18, 0x14, 0xff, 0x3f, 0x22, 0x1b, 0xff, 0x7e, 0x80, 0x88, 0xff, 0xa2, 0xa6, 0xad, 0xff, 0x62, 0x7d, 0xa4, 0xff, 0x6f, 0x9f, 0xd8, 0xff, 0x9d, 0xc6, 0xf0, 0xff, 0x9c, 0xc4, 0xef, 0xff, 0x7a, 0xad, 0xe5, 0xff, 0x48, 0x74, 0xb7, 0xff, 0xad, 0xb5, 0xc3, 0xff, 0xde, 0xdf, 0xe0, 0xff, 0xdd, 0xdf, 0xe0, 0xff, 0xdf, 0xe1, 0xe2, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xf0, 0xee, 0xf0, 0xff, 0xee, 0xed, 0xef, 0xff, 0xeb, 0xeb, 0xed, 0xff, 0xf2, 0xef, 0xee, 0xff, 0xaf, 0xbd, 0xd4, 0xff, 0x5d, 0x8f, 0xd0, 0xff, 0x8e, 0xbc, 0xec, 0xff, 0x96, 0xc4, 0xef, 0xff, 0x77, 0xa9, 0xe0, 0xff, 0x4d, 0x6d, 0x9f, 0xff, 0x3c, 0x24, 0x1e, 0xff, 0x49, 0x26, 0x1b, 0xff, 0x52, 0x2e, 0x22, 0xff, 0x3d, 0x1f, 0x18, 0xff, 0x47, 0x24, 0x1b, 0xff, 0x47, 0x25, 0x1a, 0xff, 0x42, 0x22, 0x18, 0xff, 0x41, 0x20, 0x18, 0xff, 0x44, 0x23, 0x1a, 0xff, 0x49, 0x26, 0x1c, 0xff, 0x48, 0x26, 0x1c, 0xff, 0x49, 0x26, 0x1c, 0xff, 0x4a, 0x27, 0x1c, 0xff, 0x48, 0x24, 0x1a, 0xff, 0x4b, 0x27, 0x1d, 0xff, 0x34, 0x16, 0x11, 0xff, 0x2b, 0x10, 0x0c, 0xff, 0x40, 0x20, 0x17, 0xff, 0x4f, 0x2b, 0x21, 0xff, 0x49, 0x26, 0x1c, 0xff, 0x38, 0x1b, 0x15, 0xff, 0x36, 0x19, 0x12, 0xff, 0x7c, 0x7c, 0x81, 0xff, 0xaa, 0xae, 0xb5, 0xff, 0x6f, 0x83, 0xa5, 0xff, 0x63, 0x93, 0xcf, 0xff, 0x9a, 0xc3, 0xee, 0xff, 0x9a, 0xc3, 0xf0, 0xff, 0x6f, 0xa0, 0xde, 0xff, 0x4c, 0x72, 0xb1, 0xff, 0xbc, 0xc1, 0xc9, 0xff, 0xdb, 0xdc, 0xdf, 0xff, 0xdd, 0xde, 0xe1, 0xff, 0xde, 0xe0, 0xe1, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xf0, 0xef, 0xf1, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xed, 0xef, 0xff, 0xeb, 0xeb, 0xed, 0xff, 0xef, 0xee, 0xed, 0xff, 0xca, 0xd0, 0xdc, 0xff, 0x5f, 0x8a, 0xc8, 0xff, 0x83, 0xb2, 0xe9, 0xff, 0x8a, 0xbb, 0xea, 0xff, 0x72, 0xa5, 0xe0, 0xff, 0x3e, 0x54, 0x82, 0xff, 0x31, 0x15, 0x0d, 0xff, 0x35, 0x18, 0x11, 0xff, 0x4c, 0x29, 0x1e, 0xff, 0x41, 0x23, 0x1a, 0xff, 0x43, 0x22, 0x1a, 0xff, 0x4a, 0x26, 0x1c, 0xff, 0x45, 0x23, 0x1a, 0xff, 0x47, 0x24, 0x1b, 0xff, 0x4a, 0x27, 0x1d, 0xff, 0x48, 0x25, 0x1b, 0xff, 0x46, 0x24, 0x1a, 0xff, 0x46, 0x25, 0x1b, 0xff, 0x3f, 0x1e, 0x15, 0xff, 0x3b, 0x1b, 0x12, 0xff, 0x4a, 0x26, 0x1d, 0xff, 0x45, 0x22, 0x19, 0xff, 0x2c, 0x0f, 0x0c, 0xff, 0x2c, 0x10, 0x0b, 0xff, 0x43, 0x22, 0x19, 0xff, 0x4a, 0x28, 0x1f, 0xff, 0x3b, 0x1e, 0x18, 0xff, 0x39, 0x19, 0x10, 0xff, 0x7b, 0x76, 0x79, 0xff, 0xaf, 0xb4, 0xba, 0xff, 0x7e, 0x8d, 0xa8, 0xff, 0x5b, 0x8a, 0xc8, 0xff, 0x98, 0xc2, 0xee, 0xff, 0x93, 0xbe, 0xed, 0xff, 0x66, 0x97, 0xd8, 0xff, 0x51, 0x71, 0xaa, 0xff, 0xc7, 0xca, 0xce, 0xff, 0xd8, 0xda, 0xde, 0xff, 0xdc, 0xde, 0xe1, 0xff, 0xde, 0xe0, 0xe1, 0xff, 0xe0, 0xe2, 0xe3, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xed, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xed, 0xef, 0xff, 0xec, 0xec, 0xed, 0xff, 0xeb, 0xea, 0xeb, 0xff, 0xe5, 0xe4, 0xe7, 0xff, 0x6d, 0x8c, 0xc2, 0xff, 0x6d, 0x9d, 0xdd, 0xff, 0x8d, 0xbb, 0xeb, 0xff, 0x71, 0xa3, 0xdf, 0xff, 0x31, 0x43, 0x6d, 0xff, 0x44, 0x21, 0x15, 0xff, 0x4c, 0x2a, 0x1f, 0xff, 0x3c, 0x1e, 0x16, 0xff, 0x49, 0x28, 0x1d, 0xff, 0x41, 0x20, 0x18, 0xff, 0x49, 0x26, 0x1b, 0xff, 0x43, 0x21, 0x18, 0xff, 0x45, 0x23, 0x1a, 0xff, 0x4c, 0x28, 0x1e, 0xff, 0x4c, 0x28, 0x1e, 0xff, 0x46, 0x24, 0x1a, 0xff, 0x43, 0x23, 0x18, 0xff, 0x3e, 0x1e, 0x15, 0xff, 0x36, 0x18, 0x10, 0xff, 0x47, 0x24, 0x1b, 0xff, 0x4e, 0x29, 0x1f, 0xff, 0x39, 0x19, 0x13, 0xff, 0x1f, 0x07, 0x06, 0xff, 0x2a, 0x0e, 0x0b, 0xff, 0x3e, 0x1f, 0x17, 0xff, 0x42, 0x23, 0x1b, 0xff, 0x3f, 0x1c, 0x12, 0xff, 0x7a, 0x75, 0x78, 0xff, 0xb1, 0xb7, 0xbb, 0xff, 0x90, 0x9a, 0xad, 0xff, 0x57, 0x84, 0xc1, 0xff, 0x94, 0xc0, 0xec, 0xff, 0x93, 0xbe, 0xed, 0xff, 0x58, 0x89, 0xcd, 0xff, 0x61, 0x7b, 0xab, 0xff, 0xd1, 0xd2, 0xd3, 0xff, 0xd7, 0xd9, 0xdd, 0xff, 0xdb, 0xdd, 0xe1, 0xff, 0xde, 0xe0, 0xe1, 0xff, 0xe0, 0xe3, 0xe4, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xec, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xed, 0xef, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xea, 0xe9, 0xeb, 0xff, 0xf0, 0xed, 0xeb, 0xff, 0x87, 0x9c, 0xc4, 0xff, 0x5c, 0x8c, 0xce, 0xff, 0x94, 0xc1, 0xee, 0xff, 0x76, 0xa8, 0xe3, 0xff, 0x2d, 0x3d, 0x64, 0xff, 0x47, 0x25, 0x16, 0xff, 0x5c, 0x35, 0x27, 0xff, 0x47, 0x25, 0x1c, 0xff, 0x42, 0x22, 0x19, 0xff, 0x43, 0x22, 0x1a, 0xff, 0x4a, 0x26, 0x1c, 0xff, 0x46, 0x23, 0x1a, 0xff, 0x44, 0x21, 0x19, 0xff, 0x4a, 0x26, 0x1c, 0xff, 0x4d, 0x29, 0x1f, 0xff, 0x4a, 0x26, 0x1d, 0xff, 0x43, 0x21, 0x18, 0xff, 0x42, 0x20, 0x17, 0xff, 0x3c, 0x1c, 0x13, 0xff, 0x3d, 0x1e, 0x14, 0xff, 0x4c, 0x28, 0x1e, 0xff, 0x4d, 0x29, 0x1e, 0xff, 0x39, 0x1a, 0x14, 0xff, 0x1d, 0x07, 0x06, 0xff, 0x25, 0x0d, 0x0a, 0xff, 0x47, 0x26, 0x1d, 0xff, 0x46, 0x22, 0x17, 0xff, 0x71, 0x68, 0x6b, 0xff, 0xb2, 0xb8, 0xbe, 0xff, 0x9e, 0xa6, 0xb3, 0xff, 0x59, 0x83, 0xbd, 0xff, 0x8f, 0xbb, 0xe9, 0xff, 0x92, 0xbd, 0xec, 0xff, 0x54, 0x84, 0xc9, 0xff, 0x76, 0x8a, 0xae, 0xff, 0xd6, 0xd7, 0xd7, 0xff, 0xd6, 0xd9, 0xdd, 0xff, 0xdc, 0xdd, 0xe1, 0xff, 0xdd, 0xe0, 0xe1, 0xff, 0xe0, 0xe2, 0xe3, 0xff, 0xe3, 0xe5, 0xe6, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xec, 0xeb, 0xed, 0xec, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xed, 0xec, 0xee, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xed, 0xee, 0xff, 0xeb, 0xeb, 0xed, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xf1, 0xee, 0xec, 0xff, 0xa0, 0xae, 0xc8, 0xff, 0x58, 0x83, 0xc2, 0xff, 0x94, 0xc0, 0xed, 0xff, 0x7d, 0xaf, 0xe8, 0xff, 0x35, 0x42, 0x65, 0xff, 0x44, 0x21, 0x14, 0xff, 0x4f, 0x2b, 0x1f, 0xff, 0x54, 0x2f, 0x23, 0xff, 0x49, 0x27, 0x1b, 0xff, 0x47, 0x26, 0x1c, 0xff, 0x4a, 0x26, 0x1d, 0xff, 0x4a, 0x25, 0x1c, 0xff, 0x46, 0x22, 0x1a, 0xff, 0x47, 0x23, 0x1a, 0xff, 0x4b, 0x27, 0x1d, 0xff, 0x4d, 0x28, 0x1e, 0xff, 0x46, 0x23, 0x19, 0xff, 0x3b, 0x1c, 0x13, 0xff, 0x3a, 0x1b, 0x12, 0xff, 0x38, 0x1a, 0x11, 0xff, 0x43, 0x22, 0x18, 0xff, 0x4b, 0x28, 0x1e, 0xff, 0x4e, 0x2a, 0x1f, 0xff, 0x45, 0x23, 0x1a, 0xff, 0x35, 0x18, 0x12, 0xff, 0x2d, 0x12, 0x0f, 0xff, 0x3a, 0x1a, 0x11, 0xff, 0x78, 0x6e, 0x70, 0xff, 0xb1, 0xb7, 0xbe, 0xff, 0xa9, 0xb0, 0xb9, 0xff, 0x59, 0x80, 0xb7, 0xff, 0x89, 0xb6, 0xe5, 0xff, 0x88, 0xb5, 0xe7, 0xff, 0x4a, 0x77, 0xbc, 0xff, 0x90, 0x9d, 0xb6, 0xff, 0xd7, 0xd8, 0xd9, 0xff, 0xd6, 0xd8, 0xdd, 0xff, 0xdc, 0xdd, 0xe0, 0xff, 0xde, 0xe0, 0xe1, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe3, 0xe5, 0xe6, 0xff, 0xe6, 0xe8, 0xe9, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe8, 0xea, 0xeb, 0xff, + 0xec, 0xeb, 0xed, 0xe0, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xed, 0xec, 0xee, 0xff, 0xf0, 0xee, 0xf0, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xec, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xef, 0xed, 0xec, 0xff, 0xb6, 0xbd, 0xcd, 0xff, 0x55, 0x7d, 0xb9, 0xff, 0x96, 0xc2, 0xf0, 0xff, 0x86, 0xb6, 0xeb, 0xff, 0x34, 0x3e, 0x5f, 0xff, 0x45, 0x21, 0x14, 0xff, 0x47, 0x24, 0x1a, 0xff, 0x46, 0x24, 0x1a, 0xff, 0x57, 0x31, 0x24, 0xff, 0x4a, 0x28, 0x1d, 0xff, 0x44, 0x23, 0x18, 0xff, 0x46, 0x24, 0x1a, 0xff, 0x43, 0x21, 0x18, 0xff, 0x43, 0x21, 0x19, 0xff, 0x45, 0x23, 0x1a, 0xff, 0x49, 0x26, 0x1c, 0xff, 0x4c, 0x27, 0x1e, 0xff, 0x40, 0x1e, 0x16, 0xff, 0x33, 0x17, 0x0f, 0xff, 0x34, 0x17, 0x10, 0xff, 0x39, 0x1b, 0x13, 0xff, 0x43, 0x21, 0x17, 0xff, 0x4b, 0x27, 0x1e, 0xff, 0x50, 0x2c, 0x20, 0xff, 0x50, 0x2b, 0x20, 0xff, 0x48, 0x25, 0x1d, 0xff, 0x30, 0x11, 0x0b, 0xff, 0x75, 0x6d, 0x6f, 0xff, 0xb1, 0xb8, 0xbe, 0xff, 0xb4, 0xb7, 0xbc, 0xff, 0x60, 0x82, 0xb5, 0xff, 0x83, 0xaf, 0xe2, 0xff, 0x84, 0xb0, 0xe5, 0xff, 0x40, 0x69, 0xac, 0xff, 0xa5, 0xad, 0xbd, 0xff, 0xd6, 0xd8, 0xd9, 0xff, 0xd5, 0xd8, 0xdc, 0xff, 0xdb, 0xdd, 0xdf, 0xff, 0xde, 0xe0, 0xe1, 0xff, 0xe0, 0xe2, 0xe3, 0xff, 0xe3, 0xe5, 0xe6, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xf8, + 0xed, 0xeb, 0xed, 0xcb, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xec, 0xeb, 0xed, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xee, 0xee, 0xf0, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xeb, 0xec, 0xff, 0xe9, 0xe8, 0xea, 0xff, 0xed, 0xeb, 0xeb, 0xff, 0xc4, 0xc8, 0xd4, 0xff, 0x4f, 0x75, 0xb4, 0xff, 0x93, 0xc0, 0xef, 0xff, 0xa1, 0xcc, 0xf8, 0xff, 0x37, 0x43, 0x64, 0xff, 0x36, 0x16, 0x0a, 0xff, 0x4f, 0x2b, 0x1f, 0xff, 0x3e, 0x1e, 0x16, 0xff, 0x3f, 0x1e, 0x16, 0xff, 0x44, 0x22, 0x1a, 0xff, 0x3c, 0x1c, 0x14, 0xff, 0x44, 0x23, 0x19, 0xff, 0x42, 0x21, 0x17, 0xff, 0x40, 0x20, 0x17, 0xff, 0x44, 0x22, 0x19, 0xff, 0x48, 0x26, 0x1b, 0xff, 0x4b, 0x28, 0x1d, 0xff, 0x4b, 0x27, 0x1d, 0xff, 0x3e, 0x1d, 0x16, 0xff, 0x31, 0x14, 0x0f, 0xff, 0x30, 0x13, 0x0e, 0xff, 0x38, 0x19, 0x11, 0xff, 0x43, 0x21, 0x19, 0xff, 0x49, 0x26, 0x1c, 0xff, 0x49, 0x24, 0x1b, 0xff, 0x42, 0x21, 0x18, 0xff, 0x3a, 0x18, 0x0f, 0xff, 0x5d, 0x4a, 0x46, 0xff, 0xb0, 0xb6, 0xbc, 0xff, 0xb9, 0xbc, 0xbf, 0xff, 0x5c, 0x7a, 0xaa, 0xff, 0x80, 0xad, 0xe2, 0xff, 0x7d, 0xa9, 0xe1, 0xff, 0x3e, 0x60, 0xa0, 0xff, 0xb2, 0xb9, 0xc3, 0xff, 0xd4, 0xd7, 0xd9, 0xff, 0xd4, 0xd7, 0xdb, 0xff, 0xda, 0xdc, 0xde, 0xff, 0xde, 0xe0, 0xe1, 0xff, 0xe0, 0xe2, 0xe3, 0xff, 0xe2, 0xe4, 0xe5, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xe0, + 0xed, 0xeb, 0xed, 0x9f, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xef, 0xee, 0xf0, 0xff, 0xed, 0xee, 0xef, 0xff, 0xec, 0xed, 0xee, 0xff, 0xea, 0xeb, 0xed, 0xff, 0xe9, 0xe9, 0xea, 0xff, 0xec, 0xea, 0xeb, 0xff, 0xd0, 0xd3, 0xdb, 0xff, 0x5e, 0x84, 0xbd, 0xff, 0x94, 0xbe, 0xef, 0xff, 0xba, 0xdd, 0xff, 0xff, 0x66, 0x7b, 0x9d, 0xff, 0x38, 0x19, 0x0f, 0xff, 0x51, 0x2d, 0x1f, 0xff, 0x4b, 0x27, 0x1d, 0xff, 0x3a, 0x1a, 0x14, 0xff, 0x32, 0x14, 0x0f, 0xff, 0x39, 0x1a, 0x12, 0xff, 0x41, 0x1f, 0x16, 0xff, 0x42, 0x21, 0x18, 0xff, 0x42, 0x21, 0x18, 0xff, 0x44, 0x23, 0x19, 0xff, 0x48, 0x25, 0x1b, 0xff, 0x48, 0x24, 0x1b, 0xff, 0x4a, 0x27, 0x1d, 0xff, 0x48, 0x24, 0x1b, 0xff, 0x3e, 0x1e, 0x16, 0xff, 0x36, 0x18, 0x11, 0xff, 0x33, 0x16, 0x0f, 0xff, 0x38, 0x19, 0x12, 0xff, 0x44, 0x21, 0x18, 0xff, 0x47, 0x25, 0x1b, 0xff, 0x46, 0x24, 0x1a, 0xff, 0x46, 0x21, 0x17, 0xff, 0x55, 0x3d, 0x37, 0xff, 0xac, 0xb1, 0xb7, 0xff, 0xbe, 0xc0, 0xc4, 0xff, 0x65, 0x80, 0xae, 0xff, 0x85, 0xb3, 0xe6, 0xff, 0x74, 0xa1, 0xdd, 0xff, 0x3e, 0x5e, 0x9b, 0xff, 0xbd, 0xc2, 0xc9, 0xff, 0xd4, 0xd6, 0xd9, 0xff, 0xd2, 0xd6, 0xd9, 0xff, 0xda, 0xdc, 0xde, 0xff, 0xde, 0xe0, 0xe1, 0xff, 0xe0, 0xe2, 0xe3, 0xff, 0xe2, 0xe4, 0xe5, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xac, + 0xed, 0xeb, 0xed, 0x54, 0xee, 0xed, 0xef, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xed, 0xec, 0xee, 0xff, 0xee, 0xef, 0xf0, 0xff, 0xec, 0xef, 0xf0, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xe9, 0xec, 0xec, 0xff, 0xe8, 0xe9, 0xea, 0xff, 0xeb, 0xe9, 0xea, 0xff, 0xd8, 0xda, 0xe0, 0xff, 0x6b, 0x94, 0xca, 0xff, 0x91, 0xbc, 0xef, 0xff, 0xbc, 0xdd, 0xff, 0xff, 0x98, 0xb3, 0xd8, 0xff, 0x34, 0x1c, 0x19, 0xff, 0x4e, 0x2a, 0x1b, 0xff, 0x4e, 0x29, 0x1f, 0xff, 0x4a, 0x27, 0x1d, 0xff, 0x44, 0x22, 0x19, 0xff, 0x32, 0x14, 0x0f, 0xff, 0x39, 0x1a, 0x12, 0xff, 0x3e, 0x1d, 0x14, 0xff, 0x41, 0x20, 0x16, 0xff, 0x44, 0x23, 0x18, 0xff, 0x43, 0x22, 0x18, 0xff, 0x48, 0x25, 0x1b, 0xff, 0x4a, 0x26, 0x1c, 0xff, 0x49, 0x26, 0x1c, 0xff, 0x48, 0x24, 0x1b, 0xff, 0x42, 0x21, 0x18, 0xff, 0x3c, 0x1c, 0x15, 0xff, 0x37, 0x19, 0x12, 0xff, 0x3a, 0x1b, 0x12, 0xff, 0x42, 0x22, 0x18, 0xff, 0x44, 0x23, 0x19, 0xff, 0x3e, 0x1c, 0x13, 0xff, 0x4e, 0x34, 0x2d, 0xff, 0xaa, 0xae, 0xb3, 0xff, 0xc0, 0xc1, 0xc5, 0xff, 0x71, 0x8c, 0xb6, 0xff, 0x92, 0xbd, 0xef, 0xff, 0x6c, 0x9a, 0xd8, 0xff, 0x44, 0x64, 0x9e, 0xff, 0xc7, 0xca, 0xcf, 0xff, 0xd4, 0xd6, 0xda, 0xff, 0xd3, 0xd6, 0xd8, 0xff, 0xda, 0xdd, 0xde, 0xff, 0xde, 0xe0, 0xe1, 0xff, 0xe0, 0xe2, 0xe3, 0xff, 0xe2, 0xe4, 0xe5, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0x5c, + 0xee, 0xec, 0xee, 0x07, 0xee, 0xed, 0xef, 0xe3, 0xee, 0xed, 0xef, 0xff, 0xed, 0xec, 0xee, 0xff, 0xec, 0xec, 0xee, 0xff, 0xed, 0xef, 0xf0, 0xff, 0xec, 0xee, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xe9, 0xec, 0xed, 0xff, 0xe8, 0xe9, 0xeb, 0xff, 0xe9, 0xe8, 0xe9, 0xff, 0xe3, 0xe3, 0xe5, 0xff, 0x79, 0x9c, 0xcf, 0xff, 0x85, 0xb2, 0xe7, 0xff, 0xb5, 0xd6, 0xfa, 0xff, 0xb8, 0xd9, 0xfc, 0xff, 0x60, 0x5e, 0x6f, 0xff, 0x47, 0x20, 0x12, 0xff, 0x50, 0x2b, 0x1f, 0xff, 0x4d, 0x28, 0x1e, 0xff, 0x47, 0x26, 0x1a, 0xff, 0x41, 0x20, 0x17, 0xff, 0x38, 0x1a, 0x12, 0xff, 0x3a, 0x1a, 0x12, 0xff, 0x37, 0x19, 0x10, 0xff, 0x3f, 0x1f, 0x16, 0xff, 0x47, 0x24, 0x1a, 0xff, 0x47, 0x24, 0x1b, 0xff, 0x48, 0x25, 0x1c, 0xff, 0x4a, 0x26, 0x1d, 0xff, 0x4a, 0x27, 0x1c, 0xff, 0x49, 0x26, 0x1b, 0xff, 0x49, 0x25, 0x1c, 0xff, 0x49, 0x27, 0x1c, 0xff, 0x47, 0x25, 0x1a, 0xff, 0x3f, 0x1f, 0x15, 0xff, 0x40, 0x1f, 0x16, 0xff, 0x3b, 0x1b, 0x12, 0xff, 0x3b, 0x29, 0x25, 0xff, 0xa4, 0xa9, 0xaf, 0xff, 0xbf, 0xc0, 0xc4, 0xff, 0x85, 0xa3, 0xc9, 0xff, 0xa2, 0xca, 0xf7, 0xff, 0x69, 0x96, 0xd6, 0xff, 0x4a, 0x6b, 0xa4, 0xff, 0xcb, 0xce, 0xd3, 0xff, 0xd5, 0xd8, 0xdb, 0xff, 0xd4, 0xd6, 0xd9, 0xff, 0xdb, 0xdd, 0xde, 0xff, 0xdf, 0xe0, 0xe1, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe2, 0xe4, 0xe5, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0xe4, 0xe7, 0xe9, 0xea, 0x07, + 0xee, 0xec, 0xee, 0x00, 0xee, 0xed, 0xef, 0x54, 0xee, 0xed, 0xef, 0xff, 0xed, 0xec, 0xee, 0xff, 0xec, 0xec, 0xee, 0xff, 0xed, 0xef, 0xf0, 0xff, 0xec, 0xee, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xe8, 0xe9, 0xff, 0xec, 0xea, 0xe8, 0xff, 0x94, 0xaf, 0xd5, 0xff, 0x81, 0xb1, 0xe6, 0xff, 0xb5, 0xd6, 0xf8, 0xff, 0xbe, 0xdb, 0xfc, 0xff, 0xac, 0xc6, 0xeb, 0xff, 0x3f, 0x33, 0x38, 0xff, 0x37, 0x1b, 0x11, 0xff, 0x42, 0x22, 0x18, 0xff, 0x46, 0x24, 0x19, 0xff, 0x46, 0x23, 0x18, 0xff, 0x37, 0x18, 0x11, 0xff, 0x3b, 0x1b, 0x12, 0xff, 0x3f, 0x1f, 0x14, 0xff, 0x43, 0x22, 0x17, 0xff, 0x49, 0x27, 0x1c, 0xff, 0x4a, 0x27, 0x1c, 0xff, 0x4c, 0x27, 0x1d, 0xff, 0x4e, 0x28, 0x1e, 0xff, 0x4e, 0x28, 0x1e, 0xff, 0x4d, 0x28, 0x1e, 0xff, 0x4a, 0x26, 0x1c, 0xff, 0x42, 0x22, 0x18, 0xff, 0x39, 0x1d, 0x15, 0xff, 0x2e, 0x18, 0x11, 0xff, 0x26, 0x16, 0x11, 0xff, 0x14, 0x0d, 0x0d, 0xff, 0x11, 0x12, 0x15, 0xff, 0x9a, 0x9d, 0xa3, 0xff, 0xb0, 0xb3, 0xb9, 0xff, 0x83, 0xa2, 0xc3, 0xff, 0xad, 0xd4, 0xff, 0xff, 0x72, 0xa1, 0xe4, 0xff, 0x4a, 0x6a, 0xa1, 0xff, 0xcb, 0xcf, 0xd1, 0xff, 0xd6, 0xd9, 0xdb, 0xff, 0xd4, 0xd7, 0xda, 0xff, 0xdb, 0xdd, 0xde, 0xff, 0xdf, 0xe1, 0xe2, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe2, 0xe4, 0xe5, 0xff, 0xe4, 0xe6, 0xe7, 0xff, 0xe7, 0xe9, 0xea, 0xff, 0xe7, 0xe9, 0xea, 0x54, 0xe7, 0xe9, 0xea, 0x00, + 0xee, 0xed, 0xef, 0x00, 0xee, 0xed, 0xef, 0x00, 0xed, 0xec, 0xee, 0x8b, 0xed, 0xec, 0xee, 0xff, 0xec, 0xec, 0xed, 0xff, 0xec, 0xee, 0xef, 0xff, 0xec, 0xee, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xea, 0xea, 0xe8, 0xff, 0x93, 0xaf, 0xd4, 0xff, 0x84, 0xb4, 0xe6, 0xff, 0xad, 0xd2, 0xf5, 0xff, 0xb9, 0xd5, 0xf7, 0xff, 0xc4, 0xe0, 0xff, 0xff, 0x69, 0x7b, 0x99, 0xff, 0x02, 0x03, 0x05, 0xff, 0x13, 0x0f, 0x0f, 0xff, 0x1a, 0x10, 0x0e, 0xff, 0x1e, 0x0f, 0x0c, 0xff, 0x1f, 0x0e, 0x0b, 0xff, 0x27, 0x12, 0x0d, 0xff, 0x2e, 0x17, 0x0f, 0xff, 0x2e, 0x17, 0x10, 0xff, 0x30, 0x18, 0x11, 0xff, 0x34, 0x1c, 0x15, 0xff, 0x2f, 0x1a, 0x14, 0xff, 0x29, 0x18, 0x13, 0xff, 0x22, 0x14, 0x10, 0xff, 0x1c, 0x12, 0x0f, 0xff, 0x16, 0x10, 0x0e, 0xff, 0x10, 0x0d, 0x0d, 0xff, 0x0b, 0x0b, 0x0d, 0xff, 0x09, 0x0c, 0x0d, 0xff, 0x08, 0x0c, 0x0d, 0xff, 0x09, 0x0c, 0x0e, 0xff, 0x0a, 0x0c, 0x0e, 0xff, 0x90, 0x94, 0x99, 0xff, 0x89, 0x8b, 0x8d, 0xff, 0x15, 0x15, 0x18, 0xff, 0x49, 0x54, 0x5c, 0xff, 0x27, 0x38, 0x50, 0xff, 0x56, 0x60, 0x61, 0xff, 0xd0, 0xd3, 0xd0, 0xff, 0xd7, 0xda, 0xde, 0xff, 0xd4, 0xd8, 0xdb, 0xff, 0xdb, 0xde, 0xde, 0xff, 0xdf, 0xe1, 0xe2, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe2, 0xe4, 0xe5, 0xff, 0xe5, 0xe7, 0xe8, 0xff, 0xe7, 0xe9, 0xea, 0x8b, 0xe7, 0xe9, 0xea, 0x00, 0xe7, 0xe9, 0xea, 0x00, + 0xed, 0xec, 0xee, 0x00, 0xee, 0xed, 0xef, 0x00, 0xed, 0xec, 0xee, 0x03, 0xed, 0xeb, 0xed, 0x93, 0xeb, 0xeb, 0xed, 0xff, 0xec, 0xee, 0xef, 0xff, 0xec, 0xee, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xe8, 0xe9, 0xeb, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe8, 0xe8, 0xe7, 0xff, 0x9a, 0xb6, 0xd8, 0xff, 0x89, 0xb5, 0xe7, 0xff, 0xa9, 0xcb, 0xf2, 0xff, 0xb9, 0xd4, 0xf6, 0xff, 0xb7, 0xd3, 0xfd, 0xff, 0xa8, 0xbd, 0xe4, 0xff, 0x16, 0x19, 0x22, 0xff, 0x05, 0x07, 0x08, 0xff, 0x06, 0x07, 0x0a, 0xff, 0x04, 0x07, 0x09, 0xff, 0x06, 0x08, 0x0a, 0xff, 0x06, 0x08, 0x0a, 0xff, 0x07, 0x08, 0x0a, 0xff, 0x08, 0x09, 0x0b, 0xff, 0x0a, 0x0c, 0x0e, 0xff, 0x0d, 0x10, 0x12, 0xff, 0x0d, 0x10, 0x12, 0xff, 0x0c, 0x10, 0x12, 0xff, 0x0b, 0x0e, 0x10, 0xff, 0x08, 0x0c, 0x0d, 0xff, 0x07, 0x0b, 0x0c, 0xff, 0x08, 0x0c, 0x0e, 0xff, 0x0b, 0x0d, 0x10, 0xff, 0x0a, 0x0d, 0x0e, 0xff, 0x0a, 0x0c, 0x0d, 0xff, 0x0b, 0x0d, 0x0e, 0xff, 0x06, 0x07, 0x0a, 0xff, 0x79, 0x7d, 0x80, 0xff, 0x9c, 0xad, 0xc4, 0xff, 0x67, 0x7b, 0x95, 0xff, 0x45, 0x4f, 0x5e, 0xff, 0x03, 0x04, 0x08, 0xff, 0x86, 0x88, 0x72, 0xff, 0xdd, 0xdf, 0xdd, 0xff, 0xd5, 0xd9, 0xdb, 0xff, 0xd5, 0xd8, 0xdb, 0xff, 0xdb, 0xdd, 0xe0, 0xff, 0xdf, 0xe1, 0xe2, 0xff, 0xe1, 0xe3, 0xe4, 0xff, 0xe2, 0xe4, 0xe5, 0xff, 0xe5, 0xe7, 0xe8, 0x94, 0xe7, 0xe9, 0xea, 0x03, 0xe7, 0xe9, 0xea, 0x00, 0xe7, 0xe9, 0xea, 0x00, + 0xed, 0xeb, 0xed, 0x00, 0xed, 0xec, 0xee, 0x00, 0xed, 0xec, 0xee, 0x00, 0xec, 0xeb, 0xed, 0x00, 0xeb, 0xeb, 0xed, 0x53, 0xec, 0xee, 0xef, 0xdb, 0xec, 0xee, 0xef, 0xff, 0xeb, 0xed, 0xee, 0xff, 0xea, 0xec, 0xed, 0xff, 0xe8, 0xea, 0xeb, 0xff, 0xe8, 0xe7, 0xe9, 0xff, 0xe9, 0xe8, 0xe7, 0xff, 0x9d, 0xb6, 0xd6, 0xff, 0x8c, 0xb6, 0xe6, 0xff, 0xb0, 0xce, 0xf3, 0xff, 0xb5, 0xce, 0xf5, 0xff, 0x99, 0xb8, 0xf1, 0xff, 0xc2, 0xd8, 0xff, 0xff, 0x45, 0x4e, 0x61, 0xff, 0x04, 0x05, 0x04, 0xff, 0x0b, 0x0c, 0x0e, 0xff, 0x09, 0x09, 0x0b, 0xff, 0x07, 0x08, 0x09, 0xff, 0x06, 0x07, 0x08, 0xff, 0x05, 0x06, 0x07, 0xff, 0x06, 0x05, 0x07, 0xff, 0x07, 0x07, 0x09, 0xff, 0x0f, 0x0f, 0x10, 0xff, 0x16, 0x16, 0x18, 0xff, 0x11, 0x13, 0x15, 0xff, 0x10, 0x12, 0x13, 0xff, 0x0b, 0x0d, 0x0e, 0xff, 0x09, 0x0c, 0x0e, 0xff, 0x09, 0x0c, 0x0f, 0xff, 0x09, 0x0b, 0x0c, 0xff, 0x08, 0x0a, 0x0b, 0xff, 0x08, 0x0a, 0x0b, 0xff, 0x09, 0x0b, 0x0c, 0xff, 0x05, 0x05, 0x06, 0xff, 0x67, 0x71, 0x7f, 0xff, 0xb1, 0xcf, 0xf9, 0xff, 0xb6, 0xdc, 0xff, 0xff, 0xa0, 0xcd, 0xfa, 0xff, 0x51, 0x7a, 0xb1, 0xff, 0x83, 0x8b, 0x92, 0xff, 0xde, 0xdf, 0xdf, 0xff, 0xd5, 0xd9, 0xda, 0xff, 0xd6, 0xd9, 0xdc, 0xff, 0xdb, 0xde, 0xe1, 0xff, 0xe0, 0xe2, 0xe2, 0xff, 0xe1, 0xe3, 0xe4, 0xdb, 0xe3, 0xe5, 0xe6, 0x54, 0xe5, 0xe7, 0xe8, 0x00, 0xe6, 0xe8, 0xe9, 0x00, 0xe7, 0xe9, 0xea, 0x00, 0xe7, 0xe9, 0xea, 0x00, + 0xed, 0xeb, 0xed, 0x00, 0xed, 0xec, 0xee, 0x00, 0xed, 0xec, 0xee, 0x00, 0xec, 0xeb, 0xed, 0x00, 0xeb, 0xeb, 0xed, 0x00, 0xec, 0xee, 0xef, 0x07, 0xeb, 0xed, 0xee, 0x5b, 0xeb, 0xed, 0xee, 0xac, 0xea, 0xec, 0xed, 0xdf, 0xe8, 0xea, 0xeb, 0xfb, 0xe8, 0xe8, 0xe9, 0xff, 0xe9, 0xe8, 0xe8, 0xff, 0xa1, 0xb6, 0xd5, 0xff, 0x91, 0xb7, 0xe6, 0xff, 0xb6, 0xcd, 0xf6, 0xff, 0xb0, 0xc7, 0xf6, 0xff, 0x6d, 0x8b, 0xd3, 0xff, 0xbb, 0xd4, 0xfe, 0xff, 0x57, 0x62, 0x7b, 0xff, 0x02, 0x03, 0x02, 0xff, 0x11, 0x13, 0x14, 0xff, 0x0f, 0x11, 0x12, 0xff, 0x0d, 0x0f, 0x10, 0xff, 0x0d, 0x0e, 0x10, 0xff, 0x0b, 0x0d, 0x0e, 0xff, 0x0b, 0x0c, 0x0d, 0xff, 0x09, 0x0a, 0x0b, 0xff, 0x09, 0x08, 0x0a, 0xff, 0x0b, 0x09, 0x0b, 0xff, 0x0f, 0x10, 0x11, 0xff, 0x11, 0x11, 0x12, 0xff, 0x08, 0x09, 0x0a, 0xff, 0x05, 0x07, 0x08, 0xff, 0x07, 0x09, 0x0b, 0xff, 0x07, 0x0a, 0x0b, 0xff, 0x09, 0x0b, 0x0c, 0xff, 0x09, 0x0b, 0x0c, 0xff, 0x0a, 0x0b, 0x0c, 0xff, 0x08, 0x0a, 0x0c, 0xff, 0x77, 0x8d, 0xaf, 0xff, 0xba, 0xd7, 0xfd, 0xff, 0xaf, 0xd0, 0xf4, 0xff, 0x96, 0xc4, 0xee, 0xff, 0x61, 0x94, 0xd1, 0xff, 0x86, 0x99, 0xb8, 0xff, 0xdd, 0xdd, 0xdd, 0xff, 0xd5, 0xd9, 0xda, 0xfb, 0xd8, 0xda, 0xdd, 0xdf, 0xdc, 0xde, 0xe1, 0xac, 0xde, 0xe1, 0xe2, 0x5b, 0xe1, 0xe3, 0xe4, 0x07, 0xe3, 0xe5, 0xe6, 0x00, 0xe5, 0xe7, 0xe8, 0x00, 0xe6, 0xe8, 0xe9, 0x00, 0xe7, 0xe9, 0xea, 0x00, 0xe7, 0xe9, 0xea, 0x00, +#endif +}; + +const lv_img_dsc_t img_clothes = { + .header.always_zero = 0, + .header.w = 56, + .header.h = 56, + .data_size = 3136 * LV_IMG_PX_SIZE_ALPHA_BYTE, + .header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA, + .data = img_clothes_map, +}; + diff --git a/example/peripheral/media/lvgl_indev/src/img_cursor.c b/example/peripheral/media/lvgl_indev/src/img_cursor.c new file mode 100644 index 0000000000000000000000000000000000000000..dfbad812e9976383ee028a7c8bee9ef3382b415f --- /dev/null +++ b/example/peripheral/media/lvgl_indev/src/img_cursor.c @@ -0,0 +1,90 @@ +#include "../../../lvgl.h" + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_LV_SHUBIAO +#define LV_ATTRIBUTE_IMG_LV_SHUBIAO +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_LV_SHUBIAO uint8_t lv_shubiao_map[] = { + 0x00, 0x00, 0x00, 0x00, 0x33, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xd8, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0x84, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xef, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xfe, 0xbc, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xf2, 0x7b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xfe, 0xc4, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xf4, 0x7e, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xe0, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xb0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf2, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xbd, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x65, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x82, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x9f, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x48, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xab, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcc, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x89, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x90, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x73, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xc6, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0x73, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x8c, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xe9, 0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb9, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xff, 0x79, 0x70, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xff, 0xb7, 0x25, 0x1c, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xff, 0xe9, 0x68, 0x07, 0x02, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xfb, 0xb1, 0x23, 0x00, 0x00, 0x99, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xff, 0xeb, 0x65, 0x00, 0x00, 0x00, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xfd, 0xae, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0xe9, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x02, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0x78, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x9a, 0xfa, 0x7b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xb8, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x99, 0xd3, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x46, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0x48, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xa4, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x76, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x7d, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x86, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xca, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0xff, 0xff, 0xff, 0xff, 0xdb, 0x56, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0xe1, 0xff, 0xd5, 0x52, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x72, 0x51, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +const lv_img_dsc_t lv_shubiao = { + .header.cf = LV_IMG_CF_ALPHA_8BIT, + .header.always_zero = 0, + .header.reserved = 0, + .header.w = 36, + .header.h = 68, + .data_size = 2448, + .data = lv_shubiao_map, +}; diff --git a/example/peripheral/media/lvgl_indev/src/img_demo_widgets_avatar.c b/example/peripheral/media/lvgl_indev/src/img_demo_widgets_avatar.c new file mode 100644 index 0000000000000000000000000000000000000000..ad6a14283b30e03549fcaef377d6cd1f74fa5519 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/src/img_demo_widgets_avatar.c @@ -0,0 +1,493 @@ +#include "../../../lvgl.h" + + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_IMG_DEMO_WIDGETS_AVATAR +#define LV_ATTRIBUTE_IMG_IMG_DEMO_WIDGETS_AVATAR +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMG_DEMO_WIDGETS_AVATAR uint8_t img_demo_widgets_avatar_map[] = { +#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8 + /*Pixel format: Blue: 2 bit, Green: 3 bit, Red: 3 bit, Alpha 8 bit */ + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x08, 0xff, 0x18, 0xff, 0x20, 0xff, 0x2b, 0xff, 0x2b, 0xff, 0x2b, 0xff, 0x2b, 0xff, 0x20, 0xff, 0x10, 0xff, 0x08, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x3b, 0xff, 0x43, 0xff, 0x53, 0xff, 0x6b, 0xff, 0x7c, 0xff, 0x9c, 0xff, 0xb4, 0xff, 0xcf, 0xff, 0xe7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xdf, 0xff, 0xc7, 0xff, 0xac, 0xff, 0x94, 0xff, 0x74, 0xff, 0x63, 0xff, 0x4b, 0xff, 0x3b, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x3b, 0xff, 0x5b, 0xff, 0xa4, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xa4, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xa4, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x74, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xff, 0x6b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x63, 0xff, 0xac, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x6b, 0xff, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x25, 0x00, 0x25, 0x00, 0x29, 0x00, 0x25, 0x00, 0x4e, 0x00, 0x72, 0x00, 0xff, 0x6b, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x63, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xdb, 0x00, 0xdf, 0x00, 0xbb, 0x00, 0x97, 0x00, 0x97, 0x00, 0x73, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x2a, 0x00, 0x29, 0x00, 0x29, 0x00, 0x49, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x25, 0x00, 0x29, 0x00, 0xff, 0x6b, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xdf, 0x00, 0xff, 0x00, 0xdf, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xdf, 0x00, 0x97, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x05, 0x00, 0x01, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0xff, 0x63, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xdf, 0x00, 0xdf, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xdb, 0x00, 0xbb, 0x00, 0xb7, 0x00, 0x97, 0x00, 0x73, 0x00, 0x72, 0x00, 0x29, 0x00, 0x05, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x49, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x49, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x49, 0x00, 0xff, 0x5b, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x74, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xbb, 0x00, 0x77, 0x00, 0x72, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x52, 0x00, 0x77, 0x00, 0x4e, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x25, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x49, 0x00, 0x4a, 0x00, 0x2a, 0x00, 0x4e, 0x00, 0x4a, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4a, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x63, 0xff, 0x00, 0xff, 0x00, 0xdf, 0x00, 0xff, 0x00, 0xdb, 0x00, 0xbb, 0x00, 0x77, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x72, 0x00, 0x97, 0x00, 0x97, 0x00, 0x92, 0x00, 0x72, 0x00, 0x49, 0x00, 0x29, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4a, 0x00, 0x4a, 0x00, 0x4e, 0x00, 0x4a, 0x00, 0x29, 0x00, 0xff, 0x5b, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0xff, 0x00, 0xff, 0x00, 0xdf, 0x00, 0xdf, 0x00, 0xbb, 0x00, 0xbb, 0x00, 0x97, 0x00, 0x97, 0x00, 0x97, 0x00, 0x72, 0x00, 0x72, 0x00, 0x72, 0x00, 0x72, 0x00, 0x72, 0x00, 0x49, 0x00, 0x25, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x4e, 0x00, 0x4a, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4a, 0x00, 0x4a, 0x00, 0x4a, 0x00, 0x4a, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xdf, 0x00, 0xdf, 0x00, 0xdf, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0x97, 0x00, 0x72, 0x00, 0x72, 0x00, 0x77, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4a, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x49, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4a, 0x00, 0x29, 0x00, 0xff, 0x08, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xda, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xdf, 0x00, 0xdf, 0x00, 0xff, 0x00, 0xdb, 0x00, 0x97, 0x00, 0x72, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4e, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4a, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0xff, 0x20, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x08, 0xbb, 0x00, 0x97, 0x00, 0x6e, 0x00, 0x97, 0x00, 0xdb, 0x00, 0xdf, 0x00, 0xff, 0x00, 0xbb, 0x00, 0x97, 0x00, 0x72, 0x00, 0x72, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4a, 0x00, 0x29, 0x00, 0x29, 0x00, 0xff, 0x63, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xad, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x20, 0x4e, 0x00, 0x4a, 0x00, 0x97, 0x00, 0xdf, 0x00, 0xdb, 0x00, 0xbb, 0x00, 0xbb, 0x00, 0xbb, 0x00, 0xbb, 0x00, 0x97, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4a, 0x00, 0xff, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xb2, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x5b, 0x96, 0x00, 0x96, 0x00, 0xbb, 0x00, 0xdf, 0x00, 0xdb, 0x00, 0x97, 0x00, 0x96, 0x00, 0xbb, 0x00, 0xbb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0xff, 0x08, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xbb, 0x00, 0xdb, 0x00, 0xff, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xbb, 0x00, 0xbb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0x29, 0x00, 0xff, 0x10, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0xdb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xdf, 0x00, 0xdb, 0x00, 0xbb, 0x00, 0xdb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x29, 0x00, 0xff, 0x18, 0xff, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x97, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x92, 0xff, 0xb2, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xb2, 0xff, 0x92, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0xff, 0x00, 0xdf, 0x00, 0xbb, 0x00, 0x97, 0x00, 0xb7, 0x00, 0xbb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x18, 0xff, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x96, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0x92, 0x00, 0x72, 0x00, 0xbb, 0x00, 0xdb, 0x00, 0xbb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x18, 0xff, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x69, 0xff, 0x97, 0xff, 0x92, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0xb2, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0x6e, 0x00, 0x97, 0x00, 0x97, 0x00, 0xdb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x10, 0xff, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x92, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x97, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x69, 0xff, 0x8e, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0x92, 0x00, 0x92, 0x00, 0xdf, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x08, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x9b, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x49, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x4e, 0xff, 0x92, 0xff, 0x97, 0xff, 0x72, 0xff, 0x96, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x69, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0x92, 0x00, 0xdb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x72, 0xff, 0x2e, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x97, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x69, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x8e, 0xff, 0xb7, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xdb, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x52, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x72, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0xb2, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x97, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x43, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x92, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x96, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x72, 0xff, 0x97, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x2b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x72, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x10, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x10, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x52, 0xff, 0x2a, 0xff, 0x72, 0xff, 0x52, 0xff, 0x2e, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x52, 0xff, 0x77, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x92, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x92, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x2e, 0xff, 0x4e, 0xff, 0x73, 0xff, 0x72, 0xff, 0x73, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x9b, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x72, 0xff, 0xb7, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x72, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x52, 0xff, 0x72, 0xff, 0x2e, 0xff, 0x72, 0xff, 0x77, 0xff, 0x2a, 0xff, 0x2e, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xb2, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x97, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x93, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x92, 0xff, 0x72, 0xff, 0x49, 0xff, 0x29, 0xff, 0x6e, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x72, 0xff, 0x97, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x9b, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x97, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x92, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x73, 0xff, 0x77, 0xff, 0x77, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x8e, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x49, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x45, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x77, 0xff, 0xbb, 0xff, 0x73, 0xff, 0x97, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x4e, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x73, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x72, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x77, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x4a, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x8e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0x49, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x72, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7c, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x29, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x73, 0xff, 0xbf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x01, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x92, 0xff, 0x4d, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x00, 0xff, 0x29, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x00, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x77, 0xff, 0x77, 0xff, 0x52, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x01, 0xff, 0x01, 0xff, 0x00, 0xff, 0x21, 0xff, 0x01, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x4a, 0xff, 0x2a, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x52, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x53, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x01, 0xff, 0x00, 0xff, 0x21, 0xff, 0x21, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x2a, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x4d, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x24, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x00, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x49, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x52, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x97, 0xff, 0xbf, 0xff, 0x9b, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x72, 0xff, 0x72, 0xff, 0x93, 0xff, 0x92, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x00, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x52, 0xff, 0x73, 0xff, 0x77, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x21, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0x49, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x74, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x73, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x73, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x21, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x49, 0xff, 0x49, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x21, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x97, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x2e, 0xff, 0x2a, 0xff, 0x97, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x20, 0xff, 0x00, 0xff, 0x25, 0xff, 0x20, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x73, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbf, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x01, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x77, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x77, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x4a, 0xff, 0x01, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x52, 0xff, 0x73, 0xff, 0x97, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x73, 0xff, 0x2a, 0xff, 0x77, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x77, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x8d, 0xff, 0x8d, 0xff, 0x69, 0xff, 0x69, 0xff, 0x6d, 0xff, 0x69, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x20, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x73, 0xff, 0x77, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x52, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x49, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0x69, 0xff, 0x89, 0xff, 0x8d, 0xff, 0xad, 0xff, 0xae, 0xff, 0xae, 0xff, 0xae, 0xff, 0xae, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xae, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x72, 0xff, 0x4e, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0x92, 0xff, 0x49, 0xff, 0x6a, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x69, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0x69, 0xff, 0x89, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x89, 0xff, 0xad, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xae, 0xff, 0x8d, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x77, 0xff, 0x4e, 0xff, 0x52, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xad, 0xff, 0xad, 0xff, 0xad, 0xff, 0xad, 0xff, 0xad, 0xff, 0xad, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xae, 0xff, 0x89, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x43, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0x89, 0xff, 0xad, 0xff, 0xae, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xae, 0xff, 0x89, 0xff, 0x69, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x20, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x2a, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0xad, 0xff, 0xad, 0xff, 0xae, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd2, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x89, 0xff, 0x69, 0xff, 0x69, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x20, 0xff, 0x25, 0xff, 0x20, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x29, 0xff, 0x00, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x77, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x69, 0xff, 0x01, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x89, 0xff, 0xad, 0xff, 0xad, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xda, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xae, 0xff, 0x89, 0xff, 0x69, 0xff, 0x69, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x00, 0xff, 0x20, 0xff, 0x20, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x29, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x73, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x49, 0xff, 0x00, 0xff, 0x01, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x69, 0xff, 0xad, 0xff, 0xad, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xda, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xad, 0xff, 0x89, 0xff, 0x69, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x20, 0xff, 0x21, 0xff, 0x20, 0xff, 0x00, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x77, 0xff, 0x77, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x52, 0xff, 0x29, 0xff, 0x4e, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x49, 0xff, 0x01, 0xff, 0x01, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xad, 0xff, 0xce, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x69, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x73, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x73, 0xff, 0x9b, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x69, 0xff, 0xad, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xae, 0xff, 0x8d, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x73, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x77, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x77, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x69, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x45, 0xff, 0x45, 0xff, 0x89, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x73, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x20, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0xae, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x49, 0xff, 0x45, 0xff, 0x89, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xda, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x21, 0xff, 0x25, 0xff, 0x29, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8c, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x49, 0xff, 0x69, 0xff, 0xad, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x29, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xda, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x21, 0xff, 0x49, 0xff, 0x49, 0xff, 0x05, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x73, 0xff, 0x2e, 0xff, 0x52, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x89, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xda, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x20, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x05, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x2a, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x45, 0xff, 0xad, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x6d, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x00, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x21, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x01, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x97, 0xff, 0x73, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x45, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0x8e, 0xff, 0x8d, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x76, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x69, 0xff, 0xf6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x69, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x52, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x8e, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x69, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbf, 0xff, 0x97, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x69, 0xff, 0x8e, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x8d, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x6e, 0xff, 0x8e, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x73, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0x96, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x69, 0xff, 0xae, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x89, 0xff, 0x69, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x69, 0xff, 0x69, 0xff, 0x49, 0xff, 0x6d, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x76, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xd2, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x89, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6d, 0xff, 0x69, 0xff, 0x49, 0xff, 0x69, 0xff, 0x69, 0xff, 0x6d, 0xff, 0x8e, 0xff, 0x92, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x4d, 0xff, 0x29, 0xff, 0x25, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x69, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x25, 0xff, 0x01, 0xff, 0x20, 0xff, 0x65, 0xff, 0xad, 0xff, 0xd2, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xd7, 0xff, 0xb2, 0xff, 0x89, 0xff, 0x45, 0xff, 0x20, 0xff, 0x24, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x45, 0xff, 0x65, 0xff, 0xad, 0xff, 0xf6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0x89, 0xff, 0x45, 0xff, 0x20, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x69, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x20, 0xff, 0x21, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x76, 0xff, 0x76, 0xff, 0x76, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x52, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x69, 0xff, 0x6e, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x45, 0xff, 0x45, 0xff, 0x65, 0xff, 0xd2, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0x8d, 0xff, 0x40, 0xff, 0x24, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x49, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xf7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x76, 0xff, 0x72, 0xff, 0x72, 0xff, 0x76, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6d, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x20, 0xff, 0x6e, 0xff, 0x8e, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x69, 0xff, 0x69, 0xff, 0x65, 0xff, 0xad, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0x65, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xae, 0xff, 0xd2, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x6d, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xae, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x76, 0xff, 0x76, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x77, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x89, 0xff, 0xb2, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xda, 0xff, 0xd6, 0xff, 0xae, 0xff, 0x8d, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x01, 0xff, 0x01, 0xff, 0x25, 0xff, 0x01, 0xff, 0x21, 0xff, 0x25, 0xff, 0x45, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xae, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x69, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x76, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x92, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x96, 0xff, 0x97, 0xff, 0x97, 0xff, 0x96, 0xff, 0x92, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x05, 0xff, 0x49, 0xff, 0x97, 0xff, 0xb7, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x01, 0xff, 0x45, 0xff, 0xad, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x01, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xad, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x69, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x00, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x76, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x77, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x25, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xae, 0xff, 0xae, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x25, 0xff, 0x05, 0xff, 0x01, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x45, 0xff, 0x69, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x21, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x45, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x92, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x08, 0xff, 0x00, + 0xff, 0x00, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x76, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x96, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0x97, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x00, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0x49, 0xff, 0x92, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xae, 0xff, 0xae, 0xff, 0xf6, 0xff, 0xb2, 0xff, 0x25, 0xff, 0x01, 0xff, 0x49, 0xff, 0xb7, 0xff, 0xff, 0xff, 0x97, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0x6d, 0xff, 0x69, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x69, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4d, 0xff, 0x6e, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x76, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x72, 0xff, 0x52, 0xff, 0x72, 0xff, 0x52, 0xff, 0x72, 0xff, 0x97, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x97, 0xff, 0x72, 0xff, 0x92, 0xff, 0x92, 0xff, 0x96, 0xff, 0x96, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x00, 0xff, 0x92, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x29, 0xff, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x49, 0xff, 0x8e, 0xff, 0x45, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0x45, 0xff, 0x00, 0xff, 0x69, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x6d, 0xff, 0x69, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x21, 0xff, 0x25, 0xff, 0x49, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x69, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x96, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x96, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x45, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x25, 0xff, 0x29, 0xff, 0x72, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x4a, 0xff, 0x01, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0x69, 0xff, 0x00, 0xff, 0x45, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x29, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x8e, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x45, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x72, 0xff, 0x69, 0xff, 0x69, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x96, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x01, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x96, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x76, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x9b, 0xff, 0x96, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x69, 0xff, 0x6d, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x69, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x69, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x6d, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x92, 0xff, 0x97, 0xff, 0x96, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x96, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x43, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x96, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x76, 0xff, 0xbb, 0xff, 0x76, 0xff, 0x72, 0xff, 0x92, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x92, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x69, 0xff, 0x69, 0xff, 0x69, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd2, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x92, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x96, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x52, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x76, 0xff, 0x72, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x76, 0xff, 0x97, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x69, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x49, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xda, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd2, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x72, 0xff, 0x6d, 0xff, 0x92, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x92, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x97, 0xff, 0x97, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x74, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x8d, 0xff, 0x69, 0xff, 0x49, 0xff, 0x8d, 0xff, 0x45, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xda, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x72, 0xff, 0xb7, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0x96, 0xff, 0x97, 0xff, 0xb7, 0xff, 0x97, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x53, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x69, 0xff, 0x92, 0xff, 0x45, 0xff, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xda, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x96, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x77, 0xff, 0x52, 0xff, 0x97, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x72, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x52, 0xff, 0x76, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x69, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x96, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x72, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x72, 0xff, 0x97, 0xff, 0x96, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x96, 0xff, 0x96, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x76, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x52, 0xff, 0x97, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x8d, 0xff, 0xd7, 0xff, 0x92, 0xff, 0x21, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x72, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x92, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x69, 0xff, 0x6d, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x21, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x96, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x72, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x97, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x76, 0xff, 0x97, 0xff, 0x97, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0xb2, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x77, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x76, 0xff, 0x97, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x6d, 0xff, 0x8d, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0x8e, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x92, 0xff, 0x96, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x97, 0xff, 0xff, 0xff, 0x77, 0xff, 0x52, 0xff, 0x77, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0xda, 0xff, 0xbb, 0xff, 0x49, 0xff, 0x49, 0xff, 0x69, 0xff, 0x69, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xbb, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x92, 0xff, 0x96, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x96, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x73, 0xff, 0x52, 0xff, 0x52, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0x77, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xb2, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x25, 0xff, 0x69, 0xff, 0x69, 0xff, 0x45, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x96, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x96, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x72, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x77, 0xff, 0x97, 0xff, 0x73, 0xff, 0x72, 0xff, 0x73, 0xff, 0x73, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x69, 0xff, 0x8d, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x69, 0xff, 0x25, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xda, 0xff, 0xfb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x49, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0x97, 0xff, 0x96, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x96, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x77, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x96, 0xff, 0x92, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x8e, 0xff, 0x92, 0xff, 0xda, 0xff, 0xff, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x20, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x4d, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0x92, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x73, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x96, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x69, 0xff, 0x45, 0xff, 0x6e, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xb2, 0xff, 0x49, 0xff, 0x8e, 0xff, 0x92, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x45, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x96, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x72, 0xff, 0x96, 0xff, 0x96, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x29, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x72, 0xff, 0x72, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x52, 0xff, 0x72, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x72, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x52, 0xff, 0x73, 0xff, 0x73, 0xff, 0x77, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x6d, 0xff, 0x45, 0xff, 0x69, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x6d, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0x6e, 0xff, 0x6d, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0x96, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0x96, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x6e, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x72, 0xff, 0x2e, 0xff, 0x77, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x97, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0x72, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x69, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb2, 0xff, 0x6d, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x45, 0xff, 0x21, 0xff, 0x69, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xad, 0xff, 0x8d, 0xff, 0x8d, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x92, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x72, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x97, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x74, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x77, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x52, 0xff, 0x52, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x72, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x6e, 0xff, 0x45, 0xff, 0x49, 0xff, 0x6d, 0xff, 0x6e, 0xff, 0xb6, 0xff, 0x92, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x69, 0xff, 0x92, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0x89, 0xff, 0x69, 0xff, 0x65, 0xff, 0x45, 0xff, 0x40, 0xff, 0x89, 0xff, 0xad, 0xff, 0xb2, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x6e, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x92, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x96, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x73, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x9b, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x77, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x77, 0xff, 0x92, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x45, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x45, 0xff, 0x45, 0xff, 0x25, 0xff, 0x49, 0xff, 0xdb, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd2, 0xff, 0xcd, 0xff, 0xad, 0xff, 0xae, 0xff, 0xd2, 0xff, 0xae, 0xff, 0x89, 0xff, 0x8d, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x49, 0xff, 0x92, 0xff, 0xdb, 0xff, 0x96, 0xff, 0x00, 0xff, 0x6e, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x4d, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x4e, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x4a, 0xff, 0x96, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x77, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x52, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x96, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x45, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x45, 0xff, 0x45, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xad, 0xff, 0xad, 0xff, 0xd2, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x72, 0xff, 0x96, 0xff, 0x96, 0xff, 0x00, 0xff, 0x92, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0x96, 0xff, 0xdf, 0xff, 0x6e, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x49, 0xff, 0x72, 0xff, 0x96, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x4d, 0xff, 0x29, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x77, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x97, 0xff, 0xbf, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x73, 0xff, 0x9b, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x8e, 0xff, 0x92, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x45, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x69, 0xff, 0x20, 0xff, 0x92, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x49, 0xff, 0x72, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x00, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x92, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x4e, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x72, 0xff, 0x92, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x77, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x92, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x45, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6d, 0xff, 0x69, 0xff, 0xad, 0xff, 0x8d, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x92, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x4e, 0xff, 0x96, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x01, 0xff, 0x25, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x96, 0xff, 0x92, 0xff, 0x6e, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x72, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x4e, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x01, 0xff, 0x72, 0xff, 0xbb, 0xff, 0x49, 0xff, 0x4a, 0xff, 0x72, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x4e, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x74, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x9b, 0xff, 0xbf, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x72, 0xff, 0x52, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x69, 0xff, 0x69, 0xff, 0x92, 0xff, 0x96, 0xff, 0x69, 0xff, 0x45, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x69, 0xff, 0x8d, 0xff, 0x8d, 0xff, 0xd2, 0xff, 0x69, 0xff, 0x45, 0xff, 0x6d, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb6, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x96, 0xff, 0x96, 0xff, 0x92, 0xff, 0x92, 0xff, 0x72, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0x49, 0xff, 0x00, 0xff, 0xbb, 0xff, 0xb6, 0xff, 0x49, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x96, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x96, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x05, 0xff, 0x72, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x05, 0xff, 0x49, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x05, 0xff, 0x4e, 0xff, 0x96, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x4e, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x72, 0xff, 0x52, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x9b, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x92, 0xff, 0x92, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x00, 0xff, 0x20, 0xff, 0x45, 0xff, 0x6d, 0xff, 0xad, 0xff, 0xd6, 0xff, 0x8e, 0xff, 0x24, 0xff, 0x8e, 0xff, 0x8e, 0xff, 0x92, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x00, 0xff, 0x4e, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x92, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x72, 0xff, 0xdf, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x29, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x29, 0xff, 0x25, 0xff, 0x97, 0xff, 0x72, 0xff, 0x05, 0xff, 0x49, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x96, 0xff, 0x96, 0xff, 0x29, 0xff, 0x72, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x74, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x52, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x77, 0xff, 0x53, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x49, 0xff, 0x8e, 0xff, 0x92, 0xff, 0x69, 0xff, 0x25, 0xff, 0x69, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x92, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0x49, 0xff, 0x45, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x25, 0xff, 0xd6, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x97, 0xff, 0x92, 0xff, 0x6e, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x00, 0xff, 0x49, 0xff, 0x72, 0xff, 0x01, 0xff, 0x92, 0xff, 0xdb, 0xff, 0x49, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x29, 0xff, 0x25, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x29, 0xff, 0x29, 0xff, 0x72, 0xff, 0x72, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x96, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x77, 0xff, 0x72, 0xff, 0x97, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x69, 0xff, 0x6d, 0xff, 0x92, 0xff, 0x45, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xad, 0xff, 0x45, 0xff, 0x49, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x00, 0xff, 0x00, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x97, 0xff, 0x96, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x00, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x72, 0xff, 0x96, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x00, 0xff, 0x97, 0xff, 0x92, 0xff, 0x05, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x25, 0xff, 0x4e, 0xff, 0xdf, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x72, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x74, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x73, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x97, 0xff, 0x77, 0xff, 0x73, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x92, 0xff, 0x72, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0x25, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xda, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xfb, 0xff, 0x92, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x4d, 0xff, 0x29, 0xff, 0x49, 0xff, 0x92, 0xff, 0xb2, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x96, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0x92, 0xff, 0x72, 0xff, 0x92, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x96, 0xff, 0x96, 0xff, 0x96, 0xff, 0x96, 0xff, 0x01, 0xff, 0x25, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0x49, 0xff, 0x49, 0xff, 0x96, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x96, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x97, 0xff, 0xbb, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0x73, 0xff, 0x97, 0xff, 0x77, 0xff, 0x77, 0xff, 0x77, 0xff, 0x52, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x97, 0xff, 0x97, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x00, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x96, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x96, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x49, 0xff, 0x49, 0xff, 0x92, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xda, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x72, 0xff, 0x05, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x72, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x63, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x73, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x72, 0xff, 0x97, 0xff, 0x77, 0xff, 0x76, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x97, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x96, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x92, 0xff, 0x72, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x4d, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x00, 0xff, 0x01, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x05, 0xff, 0x49, 0xff, 0x72, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x73, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x97, 0xff, 0x97, 0xff, 0x77, 0xff, 0x52, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x4d, 0xff, 0x6e, 0xff, 0xb6, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x96, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x72, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0xdb, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x01, 0xff, 0x25, 0xff, 0x05, 0xff, 0x49, 0xff, 0x92, 0xff, 0x25, 0xff, 0x00, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x05, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x00, 0xff, 0x20, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x73, 0xff, 0x97, 0xff, 0x72, 0xff, 0x77, 0xff, 0x9b, 0xff, 0x72, 0xff, 0x52, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0x92, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0x92, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0xff, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x01, 0xff, 0x72, 0xff, 0xff, 0xff, 0x6e, 0xff, 0x00, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x29, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x77, 0xff, 0x77, 0xff, 0x97, 0xff, 0x52, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x29, 0xff, 0x4e, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x92, 0xff, 0xdf, 0xff, 0xb6, 0xff, 0x4e, 0xff, 0x92, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x29, 0xff, 0x72, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x05, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x77, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x97, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xae, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x72, 0xff, 0x72, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb6, 0xff, 0xda, 0xff, 0xb6, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xbb, 0xff, 0x49, 0xff, 0x4d, 0xff, 0x49, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x29, 0xff, 0x05, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x72, 0xff, 0x76, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x52, 0xff, 0x77, 0xff, 0x77, 0xff, 0x52, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0xff, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0xbb, 0xff, 0x97, 0xff, 0x72, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x4d, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x29, 0xff, 0x49, 0xff, 0xb6, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x01, 0xff, 0x49, 0xff, 0x72, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4d, 0xff, 0x97, 0xff, 0x4e, 0xff, 0x05, 0xff, 0x25, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x10, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x52, 0xff, 0x72, 0xff, 0x72, 0xff, 0x96, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x69, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x97, 0xff, 0x96, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x4a, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x72, 0xff, 0x25, 0xff, 0x49, 0xff, 0xb6, 0xff, 0xff, 0xff, 0x72, 0xff, 0x29, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x00, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xff, 0x52, 0xff, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x97, 0xff, 0x96, 0xff, 0x72, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0x97, 0xff, 0x6e, 0xff, 0x05, 0xff, 0x29, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x49, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x96, 0xff, 0x72, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4d, 0xff, 0x92, 0xff, 0xb7, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x21, 0xff, 0x21, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x20, 0xff, 0x00, 0xff, 0x00, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x08, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x72, 0xff, 0x72, 0xff, 0x29, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0xbb, 0xff, 0xdf, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4e, 0xff, 0x97, 0xff, 0x97, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0x49, 0xff, 0x00, 0xff, 0x25, 0xff, 0x49, 0xff, 0x01, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x72, 0xff, 0x72, 0xff, 0x92, 0xff, 0x96, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x72, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x96, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x25, 0xff, 0x4e, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x49, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x20, 0xff, 0x00, 0xff, 0x01, 0xff, 0x29, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x4d, 0xff, 0x49, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x08, 0xff, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x25, 0xff, 0x96, 0xff, 0xff, 0xff, 0xff, 0xff, 0x96, 0xff, 0x25, 0xff, 0x4e, 0xff, 0xdf, 0xff, 0x97, 0xff, 0x05, 0xff, 0x29, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x49, 0xff, 0x01, 0xff, 0x49, 0xff, 0x49, 0xff, 0x00, 0xff, 0x01, 0xff, 0x20, 0xff, 0x00, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x18, 0xff, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x49, 0xff, 0x25, 0xff, 0x96, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x96, 0xff, 0x96, 0xff, 0x29, 0xff, 0x29, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x72, 0xff, 0x49, 0xff, 0x00, 0xff, 0x20, 0xff, 0x00, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x21, 0xff, 0x01, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x2e, 0xff, 0x72, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0x25, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x2b, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0xb7, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0x6e, 0xff, 0x05, 0xff, 0x4e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x72, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x01, 0xff, 0x4d, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x96, 0xff, 0xdf, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x08, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x96, 0xff, 0x25, 0xff, 0x49, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0x72, 0xff, 0x25, 0xff, 0x4a, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x72, 0xff, 0x97, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x21, 0xff, 0x29, 0xff, 0xbb, 0xff, 0x72, 0xff, 0x25, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x72, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x52, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x10, 0x2a, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x49, 0xff, 0x4e, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4e, 0xff, 0xbb, 0xff, 0x92, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x72, 0xff, 0x01, 0xff, 0x01, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x29, 0xff, 0x2e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x2e, 0xff, 0x29, 0xff, 0x49, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x20, 0x4e, 0x00, 0x2a, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x72, 0xff, 0x4d, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xbb, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0xdb, 0xff, 0xff, 0xff, 0x92, 0xff, 0x49, 0xff, 0xb6, 0xff, 0x6e, 0xff, 0x97, 0xff, 0x92, 0xff, 0x96, 0xff, 0xdf, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0xdb, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2e, 0xff, 0x2e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x2e, 0xff, 0x2a, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x20, 0x2e, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x92, 0xff, 0x72, 0xff, 0x96, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdf, 0xff, 0x92, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xff, 0x4d, 0xff, 0x6e, 0xff, 0xdf, 0xff, 0xbb, 0xff, 0xb7, 0xff, 0xbb, 0xff, 0x96, 0xff, 0x92, 0xff, 0x96, 0xff, 0x92, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x96, 0xff, 0x6e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0x20, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x43, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x69, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x72, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x96, 0xff, 0x92, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0x96, 0xff, 0x96, 0xff, 0xb7, 0xff, 0x4e, 0xff, 0x29, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x2a, 0xff, 0x2a, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xff, 0x18, 0x25, 0x00, 0x05, 0x00, 0x01, 0x00, 0x01, 0x00, 0x25, 0x00, 0x05, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x33, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x45, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x92, 0xff, 0x92, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x25, 0x00, 0x25, 0x00, 0x25, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xfb, 0x00, 0xff, 0x20, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x89, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x4d, 0xff, 0x96, 0xff, 0x4d, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x20, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x08, 0x4e, 0x00, 0x29, 0x00, 0x25, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xfb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xff, 0x08, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0xae, 0xff, 0x8d, 0xff, 0x45, 0xff, 0x49, 0xff, 0x92, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x72, 0xff, 0x6e, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x01, 0xff, 0x25, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x01, 0xff, 0x00, 0xff, 0x21, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0x25, 0x00, 0x25, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x05, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xfb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0xb2, 0xff, 0xae, 0xff, 0x69, 0xff, 0x25, 0xff, 0x6d, 0xff, 0x92, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x20, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xbb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x5b, 0x05, 0x00, 0x01, 0x00, 0x25, 0x00, 0x25, 0x00, 0x01, 0x00, 0x25, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x2a, 0x00, 0x25, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xfb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xd7, 0x00, 0xd7, 0x00, 0xff, 0x5b, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xb2, 0xff, 0xd2, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb2, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x96, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x45, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x4e, 0xff, 0x2e, 0xff, 0x4e, 0xff, 0x72, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xff, 0x18, 0x72, 0x00, 0x52, 0x00, 0x29, 0x00, 0x01, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x29, 0x00, 0x25, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xfb, 0x00, 0xdb, 0x00, 0xdb, 0x00, 0xd7, 0x00, 0xd7, 0x00, 0xd7, 0x00, 0xd6, 0x00, 0xd6, 0x00, 0xd6, 0x00, 0xff, 0x10, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd6, 0xff, 0xd2, 0xff, 0xb2, 0xff, 0xd6, 0xff, 0xd7, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xb2, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x45, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x49, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x21, 0xff, 0x21, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x29, 0xff, 0x4e, 0xff, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9c, 0x2a, 0x00, 0x29, 0x00, 0x2e, 0x00, 0x52, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x05, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x29, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xb7, 0x00, 0xb6, 0x00, 0x96, 0x00, 0x96, 0x00, 0xb6, 0x00, 0xb6, 0x00, 0xb6, 0x00, 0xd6, 0x00, 0xd6, 0x00, 0xd6, 0x00, 0xd6, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xd6, 0xff, 0xd6, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xd7, 0xff, 0xb2, 0xff, 0x8d, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x72, 0xff, 0xdb, 0xff, 0x6d, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x05, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x4e, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x29, 0x00, 0x2e, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x01, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x77, 0x00, 0x77, 0x00, 0x76, 0x00, 0x76, 0x00, 0x72, 0x00, 0x52, 0x00, 0x72, 0x00, 0x72, 0x00, 0x92, 0x00, 0xb6, 0x00, 0xb6, 0x00, 0xd6, 0x00, 0xff, 0x5b, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0xb7, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x00, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x5b, 0x2e, 0x00, 0x4e, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x4e, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x97, 0x00, 0x77, 0x00, 0x77, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x72, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x52, 0x00, 0x72, 0x00, 0x72, 0x00, 0x92, 0x00, 0x92, 0x00, 0xff, 0x74, 0xff, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x8e, 0xff, 0x69, 0xff, 0x45, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0x72, 0xff, 0x49, 0xff, 0x69, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x20, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x5b, 0x2e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x2e, 0x00, 0x2e, 0x00, 0x2a, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x25, 0x00, 0x00, 0x00, 0x20, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x97, 0x00, 0x97, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x72, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x6e, 0x00, 0xff, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xd7, 0xff, 0xd7, 0xff, 0xb2, 0xff, 0x69, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x69, 0xff, 0x69, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x01, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xff, 0x74, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x4e, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x29, 0x00, 0x25, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x97, 0x00, 0x76, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x73, 0x00, 0x77, 0x00, 0x72, 0x00, 0x72, 0x00, 0x72, 0x00, 0x52, 0x00, 0x72, 0x00, 0x72, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0xff, 0x5b, 0xff, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6d, 0xff, 0x6e, 0xff, 0x6d, 0xff, 0x45, 0xff, 0x49, 0xff, 0x45, 0xff, 0x21, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x45, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xff, 0x84, 0x00, 0x00, 0x25, 0x00, 0x29, 0x00, 0x29, 0x00, 0x4a, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x2e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x2e, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x77, 0x00, 0x72, 0x00, 0x52, 0x00, 0x52, 0x00, 0x72, 0x00, 0x52, 0x00, 0x52, 0x00, 0x72, 0x00, 0x72, 0x00, 0x72, 0x00, 0x77, 0x00, 0x72, 0x00, 0x52, 0x00, 0x4a, 0x00, 0x2a, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0xff, 0x63, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xb6, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x45, 0xff, 0x25, 0xff, 0x4e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x29, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x21, 0xff, 0x21, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0x4e, 0x00, 0x49, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x29, 0x00, 0x29, 0x00, 0x2a, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x2e, 0x00, 0x2e, 0x00, 0x2a, 0x00, 0x2e, 0x00, 0x4e, 0x00, 0x2e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x72, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x72, 0x00, 0x72, 0x00, 0x72, 0x00, 0x52, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x52, 0x00, 0x97, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0xff, 0x63, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x96, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x6e, 0xff, 0x4e, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x69, 0xff, 0x6e, 0xff, 0x92, 0xff, 0x92, 0xff, 0xb7, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x5b, 0x52, 0x00, 0x72, 0x00, 0x77, 0x00, 0x72, 0x00, 0x4e, 0x00, 0x49, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x25, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2a, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x4e, 0x00, 0x4e, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x63, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xa4, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xac, 0xff, 0x63, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xa4, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x3b, 0xff, 0x6b, 0xff, 0xb4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xac, 0xff, 0x63, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x4b, 0xff, 0x6b, 0xff, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x43, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x5b, 0xff, 0xa4, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xa4, 0xff, 0x5b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x3b, 0xff, 0x43, 0xff, 0x53, 0xff, 0x74, 0xff, 0x8c, 0xff, 0xac, 0xff, 0xc7, 0xff, 0xd7, 0xff, 0xef, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xe7, 0xff, 0xd7, 0xff, 0xbf, 0xff, 0xa4, 0xff, 0x84, 0xff, 0x63, 0xff, 0x4b, 0xff, 0x43, 0xff, 0x3b, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x08, 0xff, 0x10, 0xff, 0x10, 0xff, 0x10, 0xff, 0x08, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, + 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, +#endif +#if LV_COLOR_DEPTH == 16 + /*Pixel format: Blue: 5 bit, Green: 6 bit, Red: 5 bit, Alpha 8 bit*/ + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x08, 0x7f, 0xef, 0x18, 0x7f, 0xef, 0x20, 0x7f, 0xef, 0x2b, 0x7f, 0xef, 0x2b, 0x7f, 0xef, 0x2b, 0x7f, 0xef, 0x2b, 0x7f, 0xef, 0x20, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0x08, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x43, 0x7f, 0xef, 0x53, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0x7c, 0x7f, 0xef, 0x9c, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xe7, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0xc7, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0x74, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0x4b, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x3b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0x3b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0x9f, 0xf7, 0xff, 0xbf, 0xf7, 0xff, 0xbf, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0xbf, 0xf7, 0xff, 0xbf, 0xf7, 0xff, 0x9f, 0xf7, 0xff, 0x9f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x74, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0x6b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x0b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x4c, 0x32, 0x00, 0x0b, 0x2a, 0x00, 0xae, 0x42, 0x00, 0xef, 0x4a, 0x00, 0xca, 0x21, 0x00, 0xea, 0x29, 0x00, 0xca, 0x29, 0x00, 0x89, 0x21, 0x00, 0x69, 0x21, 0x00, 0x88, 0x21, 0x00, 0x89, 0x29, 0x00, 0x69, 0x19, 0x00, 0xce, 0x3a, 0x00, 0x32, 0x64, 0x00, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbe, 0xf7, 0xff, 0xbe, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xde, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x63, 0xfa, 0xe6, 0x00, 0x1b, 0xe7, 0x00, 0x3b, 0xef, 0x00, 0xda, 0xde, 0x00, 0xda, 0xde, 0x00, 0xda, 0xde, 0x00, 0xfb, 0xde, 0x00, 0x3c, 0xe7, 0x00, 0x5c, 0xef, 0x00, 0xfb, 0xde, 0x00, 0x79, 0xc6, 0x00, 0x99, 0xc6, 0x00, 0xd7, 0xa5, 0x00, 0x56, 0x95, 0x00, 0xd4, 0x7c, 0x00, 0x94, 0x6c, 0x00, 0x33, 0x6c, 0x00, 0x74, 0x74, 0x00, 0xee, 0x3a, 0x00, 0x4c, 0x32, 0x00, 0xaa, 0x21, 0x00, 0xca, 0x29, 0x00, 0x4b, 0x3a, 0x00, 0xc9, 0x29, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x0b, 0x2a, 0x00, 0x0b, 0x32, 0x00, 0x2b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x4c, 0x32, 0x00, 0x0b, 0x2a, 0x00, 0xce, 0x42, 0x00, 0xce, 0x42, 0x00, 0xca, 0x21, 0x00, 0xeb, 0x29, 0x00, 0xea, 0x29, 0x00, 0xaa, 0x29, 0x00, 0xa9, 0x29, 0x00, 0xa9, 0x29, 0x00, 0x89, 0x29, 0x00, 0xa9, 0x21, 0x00, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbe, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0xfb, 0xe6, 0x00, 0xfa, 0xe6, 0x00, 0x1b, 0xe7, 0x00, 0x1b, 0xdf, 0x00, 0xba, 0xce, 0x00, 0xdb, 0xd6, 0x00, 0xba, 0xd6, 0x00, 0xdb, 0xde, 0x00, 0xfa, 0xde, 0x00, 0x1b, 0xe7, 0x00, 0x7d, 0xef, 0x00, 0xfb, 0xce, 0x00, 0xf6, 0x84, 0x00, 0x30, 0x43, 0x00, 0xcb, 0x19, 0x00, 0xca, 0x29, 0x00, 0xce, 0x42, 0x00, 0xeb, 0x21, 0x00, 0x4c, 0x32, 0x00, 0xc6, 0x10, 0x00, 0x44, 0x08, 0x00, 0xea, 0x29, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x0b, 0x2a, 0x00, 0x0b, 0x2a, 0x00, 0x0b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x4c, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x2b, 0x2a, 0x00, 0xce, 0x42, 0x00, 0xad, 0x3a, 0x00, 0x0b, 0x2a, 0x00, 0x0b, 0x32, 0x00, 0xeb, 0x29, 0x00, 0xca, 0x29, 0x00, 0x89, 0x21, 0x00, 0xa9, 0x29, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x1b, 0xe7, 0xff, 0x9a, 0xd6, 0xff, 0x59, 0xce, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xfb, 0xde, 0x00, 0xfb, 0xde, 0x00, 0xfb, 0xde, 0x00, 0xda, 0xd6, 0x00, 0xda, 0xce, 0x00, 0xfb, 0xde, 0x00, 0x1b, 0xdf, 0x00, 0x3b, 0xef, 0x00, 0x7a, 0xc6, 0x00, 0xf8, 0xad, 0x00, 0x77, 0x9d, 0x00, 0xf6, 0x7c, 0x00, 0x74, 0x64, 0x00, 0xf2, 0x53, 0x00, 0x2c, 0x2a, 0x00, 0x08, 0x11, 0x00, 0xab, 0x21, 0x00, 0xcd, 0x3a, 0x00, 0xed, 0x4a, 0x00, 0x4c, 0x42, 0x00, 0xca, 0x29, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xeb, 0x29, 0x00, 0x0b, 0x2a, 0x00, 0x0b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x4c, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x2c, 0x32, 0x00, 0xce, 0x3a, 0x00, 0x8d, 0x3a, 0x00, 0x0b, 0x2a, 0x00, 0x0b, 0x32, 0x00, 0x0b, 0x2a, 0x00, 0x2c, 0x32, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0x9d, 0xef, 0xff, 0x1b, 0xdf, 0xff, 0x3c, 0xe7, 0xff, 0xbd, 0xff, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x3b, 0xe7, 0xff, 0x99, 0xd6, 0xff, 0xda, 0xde, 0xff, 0xba, 0xde, 0xff, 0x55, 0xad, 0xff, 0x1b, 0xe7, 0xff, 0x7d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xd7, 0x7f, 0xef, 0x74, 0x1b, 0xdf, 0x00, 0x1b, 0xdf, 0x00, 0x1b, 0xdf, 0x00, 0x1b, 0xe7, 0x00, 0x1b, 0xe7, 0x00, 0x3b, 0xe7, 0x00, 0xf8, 0xa5, 0x00, 0xb5, 0x74, 0x00, 0x13, 0x5c, 0x00, 0x8e, 0x2a, 0x00, 0x2c, 0x22, 0x00, 0xb2, 0x53, 0x00, 0x95, 0x6c, 0x00, 0xce, 0x42, 0x00, 0x13, 0x6c, 0x00, 0x0f, 0x43, 0x00, 0xcd, 0x3a, 0x00, 0xee, 0x4a, 0x00, 0xce, 0x4a, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x89, 0x21, 0x00, 0xea, 0x21, 0x00, 0x0b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x4c, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x6c, 0x32, 0x00, 0x4c, 0x32, 0x00, 0xad, 0x3a, 0x00, 0x8d, 0x3a, 0x00, 0x2b, 0x2a, 0x00, 0x0b, 0x2a, 0x00, 0x4c, 0x3a, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0x3c, 0xdf, 0xff, 0xda, 0xce, 0xff, 0xda, 0xd6, 0xff, 0x7c, 0xe7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0xfb, 0xde, 0xff, 0xba, 0xde, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x94, 0xff, 0x5b, 0xef, 0xff, 0x3c, 0xef, 0xff, 0xfb, 0xe6, 0xff, 0x3b, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x63, 0xfb, 0xde, 0x00, 0xda, 0xd6, 0x00, 0xda, 0xd6, 0x00, 0xfb, 0xd6, 0x00, 0x79, 0xc6, 0x00, 0x19, 0xa6, 0x00, 0xd5, 0x74, 0x00, 0xd2, 0x53, 0x00, 0x0f, 0x43, 0x00, 0x91, 0x53, 0x00, 0x36, 0x85, 0x00, 0xd4, 0x7c, 0x00, 0x73, 0x74, 0x00, 0x53, 0x74, 0x00, 0x2b, 0x32, 0x00, 0x2b, 0x32, 0x00, 0xca, 0x31, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xce, 0x42, 0x00, 0x2b, 0x2a, 0x00, 0xea, 0x21, 0x00, 0xea, 0x21, 0x00, 0x4c, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x6c, 0x32, 0x00, 0x6c, 0x32, 0x00, 0x8d, 0x3a, 0x00, 0x6d, 0x32, 0x00, 0x2c, 0x32, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x1b, 0xe7, 0xff, 0x1b, 0xdf, 0xff, 0x5c, 0xe7, 0xff, 0x5c, 0xe7, 0xff, 0x7d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x1b, 0xef, 0xff, 0xfa, 0xe6, 0xff, 0x3b, 0xef, 0xff, 0xfa, 0xe6, 0xff, 0xda, 0xe6, 0xff, 0x3b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x1b, 0xe7, 0xff, 0x1b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x3b, 0xe7, 0xff, 0xda, 0xde, 0xff, 0x92, 0x94, 0xff, 0x76, 0xad, 0xff, 0x7c, 0xef, 0xff, 0x1b, 0xe7, 0xff, 0x3b, 0xe7, 0xff, 0x5b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x9c, 0xfb, 0xde, 0x00, 0xfb, 0xde, 0x00, 0xdb, 0xd6, 0x00, 0xba, 0xce, 0x00, 0x39, 0xb6, 0x00, 0x19, 0xae, 0x00, 0x16, 0x85, 0x00, 0xb5, 0x74, 0x00, 0x56, 0x8d, 0x00, 0xf2, 0x5b, 0x00, 0x53, 0x6c, 0x00, 0x12, 0x6c, 0x00, 0x53, 0x74, 0x00, 0xf2, 0x63, 0x00, 0x6c, 0x32, 0x00, 0x07, 0x11, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xcd, 0x3a, 0x00, 0x6c, 0x3a, 0x00, 0x8d, 0x3a, 0x00, 0xee, 0x4a, 0x00, 0x6c, 0x32, 0x00, 0x2b, 0x2a, 0x00, 0x6c, 0x32, 0x00, 0x6c, 0x32, 0x00, 0x8d, 0x32, 0x00, 0x6d, 0x3a, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xf7, 0xff, 0x9d, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x5b, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0xfa, 0xe6, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x5b, 0xf7, 0xff, 0xfa, 0xee, 0xff, 0xfa, 0xe6, 0xff, 0x1b, 0xe7, 0xff, 0x1b, 0xe7, 0xff, 0xd9, 0xe6, 0xff, 0xda, 0xe6, 0xff, 0xfa, 0xe6, 0xff, 0xda, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0x77, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0x1b, 0xe7, 0xff, 0x78, 0xd6, 0xff, 0x58, 0xce, 0xff, 0x1b, 0xe7, 0xff, 0xfa, 0xe6, 0xff, 0x5c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xe7, 0xff, 0x3b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x5c, 0xef, 0xff, 0xfb, 0xde, 0xff, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0x5b, 0xda, 0xde, 0x00, 0xfb, 0xde, 0x00, 0xba, 0xce, 0x00, 0xdb, 0xce, 0x00, 0x9a, 0xc6, 0x00, 0x59, 0xbe, 0x00, 0x39, 0xbe, 0x00, 0x56, 0x95, 0x00, 0x53, 0x6c, 0x00, 0x13, 0x5c, 0x00, 0xb5, 0x74, 0x00, 0x33, 0x64, 0x00, 0xb1, 0x5b, 0x00, 0x6d, 0x3a, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xca, 0x21, 0x00, 0xea, 0x29, 0x00, 0x4c, 0x32, 0x00, 0xee, 0x42, 0x00, 0x4f, 0x4b, 0x00, 0x0f, 0x4b, 0x00, 0x8d, 0x3a, 0x00, 0x2b, 0x2a, 0x00, 0x7f, 0xef, 0x08, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0xbc, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xba, 0xd6, 0xff, 0xda, 0xde, 0xff, 0xdb, 0xde, 0xff, 0x1b, 0xe7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x3c, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xe7, 0xff, 0x3b, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x3b, 0xef, 0xff, 0x1b, 0xe7, 0xff, 0x5b, 0xef, 0xff, 0x78, 0xd6, 0xff, 0x38, 0xd6, 0xff, 0x99, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x78, 0xde, 0xff, 0x99, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0xb4, 0xd5, 0xff, 0xf6, 0xd5, 0xff, 0x59, 0xd6, 0xff, 0x58, 0xce, 0xff, 0xba, 0xde, 0xff, 0x38, 0xce, 0xff, 0x38, 0xce, 0xff, 0x99, 0xd6, 0xff, 0xfa, 0xe6, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x3b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x17, 0xc6, 0xff, 0x38, 0xc6, 0xff, 0x9d, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xfb, 0xe6, 0x00, 0x1b, 0xdf, 0x00, 0x3b, 0xe7, 0x00, 0xfa, 0xd6, 0x00, 0xfb, 0xce, 0x00, 0xdb, 0xd6, 0x00, 0x1b, 0xdf, 0x00, 0x79, 0xbe, 0x00, 0x36, 0x8d, 0x00, 0x74, 0x6c, 0x00, 0x53, 0x6c, 0x00, 0x53, 0x6c, 0x00, 0x2f, 0x43, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xea, 0x29, 0x00, 0x0b, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0xeb, 0x29, 0x00, 0x6d, 0x32, 0x00, 0x2f, 0x4b, 0x00, 0x50, 0x53, 0x00, 0x7f, 0xef, 0x20, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xdf, 0xff, 0x3c, 0xdf, 0xff, 0x5b, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0xfb, 0xde, 0xff, 0x5c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x1b, 0xe7, 0xff, 0x1b, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0xfa, 0xe6, 0xff, 0x58, 0xd6, 0xff, 0xb8, 0xee, 0xff, 0x36, 0xde, 0xff, 0x95, 0xcd, 0xff, 0x17, 0xd6, 0xff, 0x37, 0xde, 0xff, 0x53, 0xc5, 0xff, 0x16, 0xd6, 0xff, 0xda, 0xee, 0xff, 0x95, 0xcd, 0xff, 0x12, 0xb5, 0xff, 0xf2, 0xac, 0xff, 0xb2, 0xa4, 0xff, 0xd4, 0xa4, 0xff, 0x93, 0x9c, 0xff, 0xf4, 0xa4, 0xff, 0x34, 0xad, 0xff, 0xb6, 0xbd, 0xff, 0x96, 0xb5, 0xff, 0xf7, 0xc5, 0xff, 0xba, 0xde, 0xff, 0x1b, 0xe7, 0xff, 0x3b, 0xe7, 0xff, 0x3b, 0xe7, 0xff, 0xda, 0xde, 0xff, 0xfa, 0xe6, 0xff, 0x1b, 0xe7, 0xff, 0x3b, 0xef, 0xff, 0x7d, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x08, 0xb7, 0x9d, 0x00, 0xb5, 0x7c, 0x00, 0x92, 0x53, 0x00, 0x77, 0x8d, 0x00, 0x59, 0xbe, 0x00, 0x99, 0xce, 0x00, 0xfa, 0xd6, 0x00, 0x18, 0xb6, 0x00, 0x15, 0x8d, 0x00, 0x72, 0x6c, 0x00, 0x73, 0x6c, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xea, 0x29, 0x00, 0x0b, 0x2a, 0x00, 0x2b, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x2b, 0x2a, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0x9a, 0xbe, 0xff, 0x38, 0xae, 0xff, 0xfa, 0xce, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x7d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x1b, 0xef, 0xff, 0xda, 0xde, 0xff, 0xfa, 0xe6, 0xff, 0xd1, 0xbc, 0xff, 0x4b, 0x9b, 0xff, 0xf1, 0xc4, 0xff, 0x16, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0x37, 0xd6, 0xff, 0xb5, 0xcd, 0xff, 0xd5, 0xc5, 0xff, 0xb9, 0xde, 0xff, 0x3b, 0xe7, 0xff, 0x7c, 0xf7, 0xff, 0x1a, 0xef, 0xff, 0x78, 0xd6, 0xff, 0xd6, 0xbd, 0xff, 0x96, 0xb5, 0xff, 0x55, 0xad, 0xff, 0x96, 0xb5, 0xff, 0x17, 0xc6, 0xff, 0x58, 0xce, 0xff, 0x38, 0xc6, 0xff, 0xf7, 0xc5, 0xff, 0x38, 0xce, 0xff, 0x79, 0xce, 0xff, 0xba, 0xde, 0xff, 0x1b, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0xd9, 0xe6, 0xff, 0x1b, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0x20, 0x51, 0x4b, 0x00, 0x8d, 0x32, 0x00, 0x16, 0x8d, 0x00, 0x9a, 0xc6, 0x00, 0x38, 0xbe, 0x00, 0xd7, 0xad, 0x00, 0xf8, 0xad, 0x00, 0x38, 0xb6, 0x00, 0xd7, 0xa5, 0x00, 0x56, 0x95, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xea, 0x29, 0x00, 0x0b, 0x2a, 0x00, 0x2b, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x6c, 0x32, 0x00, 0x7f, 0xef, 0x9c, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x9f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x1c, 0xdf, 0xff, 0xba, 0xce, 0xff, 0xfb, 0xc6, 0xff, 0xfa, 0xce, 0xff, 0x3b, 0xdf, 0xff, 0x5c, 0xe7, 0xff, 0x5b, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xff, 0xff, 0x9d, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0xb9, 0xe6, 0xff, 0x58, 0xde, 0xff, 0x99, 0xde, 0xff, 0x94, 0xc5, 0xff, 0x70, 0xac, 0xff, 0xb5, 0xcd, 0xff, 0xf9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0xb9, 0xde, 0xff, 0x1b, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x1a, 0xef, 0xff, 0x99, 0xde, 0xff, 0x58, 0xce, 0xff, 0xba, 0xd6, 0xff, 0xbd, 0xf7, 0xff, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0xc6, 0xff, 0x14, 0xa5, 0xff, 0xf7, 0xbd, 0xff, 0xba, 0xde, 0xff, 0x99, 0xd6, 0xff, 0x38, 0xc6, 0xff, 0x18, 0xc6, 0xff, 0x18, 0xc6, 0xff, 0x58, 0xce, 0xff, 0x38, 0xc6, 0xff, 0x99, 0xd6, 0xff, 0x78, 0xd6, 0xff, 0x38, 0xce, 0xff, 0xda, 0xde, 0xff, 0x5b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0x5b, 0xb4, 0x7c, 0x00, 0xb4, 0x84, 0x00, 0xd6, 0xad, 0x00, 0xda, 0xd6, 0x00, 0x79, 0xbe, 0x00, 0x76, 0x95, 0x00, 0xd4, 0x7c, 0x00, 0x17, 0xae, 0x00, 0xf7, 0xad, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xea, 0x29, 0x00, 0x0b, 0x2a, 0x00, 0x0b, 0x2a, 0x00, 0x7f, 0xef, 0x08, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xe7, 0xff, 0xd8, 0xa5, 0xff, 0xba, 0xc6, 0xff, 0x7c, 0xe7, 0xff, 0x5b, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xe7, 0xff, 0x9c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x3b, 0xef, 0xff, 0xb9, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0x78, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x36, 0xde, 0xff, 0x16, 0xde, 0xff, 0x32, 0xc5, 0xff, 0x94, 0xc5, 0xff, 0xb9, 0xde, 0xff, 0x9c, 0xf7, 0xff, 0xb6, 0xc5, 0xff, 0x30, 0x9c, 0xff, 0x2d, 0x73, 0xff, 0x11, 0x8c, 0xff, 0xf4, 0x9c, 0xff, 0x96, 0xad, 0xff, 0x3b, 0xe7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x99, 0xce, 0xff, 0xf5, 0x9c, 0xff, 0xb7, 0xb5, 0xff, 0x18, 0xc6, 0xff, 0xf7, 0xbd, 0xff, 0x17, 0xc6, 0xff, 0xf7, 0xc5, 0xff, 0x59, 0xce, 0xff, 0xb7, 0xb5, 0xff, 0x76, 0xb5, 0xff, 0x55, 0xad, 0xff, 0x74, 0xb5, 0xff, 0x58, 0xce, 0xff, 0x99, 0xd6, 0xff, 0x78, 0xce, 0xff, 0xb9, 0xd6, 0xff, 0xda, 0xde, 0xff, 0x3c, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xb7, 0xa5, 0x00, 0x58, 0xc6, 0x00, 0x1a, 0xe7, 0x00, 0x78, 0xce, 0x00, 0x58, 0xc6, 0x00, 0x38, 0xbe, 0x00, 0x97, 0x9d, 0x00, 0xd6, 0xa5, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x0b, 0x2a, 0x00, 0x0b, 0x2a, 0x00, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0xdf, 0xff, 0x56, 0x8d, 0xff, 0x76, 0x95, 0xff, 0x59, 0xae, 0xff, 0xd7, 0x9d, 0xff, 0xda, 0xc6, 0xff, 0x7c, 0xe7, 0xff, 0x7c, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0x5c, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x99, 0xde, 0xff, 0x98, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0x58, 0xde, 0xff, 0xb5, 0xcd, 0xff, 0xd1, 0xac, 0xff, 0x54, 0xbd, 0xff, 0x78, 0xde, 0xff, 0x1a, 0xef, 0xff, 0xb6, 0xbd, 0xff, 0x10, 0x8c, 0xff, 0x31, 0x8c, 0xff, 0xf0, 0x7b, 0xff, 0xcf, 0x7b, 0xff, 0x14, 0xa5, 0xff, 0x18, 0xbe, 0xff, 0x1b, 0xdf, 0xff, 0x5b, 0xe7, 0xff, 0x9c, 0xef, 0xff, 0x9d, 0xef, 0xff, 0xd7, 0xb5, 0xff, 0xd4, 0x9c, 0xff, 0x36, 0xad, 0xff, 0xd7, 0xbd, 0xff, 0xf7, 0xc5, 0xff, 0xf7, 0xbd, 0xff, 0xb7, 0xb5, 0xff, 0x76, 0xad, 0xff, 0xf4, 0xa4, 0xff, 0x96, 0xbd, 0xff, 0xb6, 0xbd, 0xff, 0xf7, 0xc5, 0xff, 0x58, 0xce, 0xff, 0x79, 0xd6, 0xff, 0x79, 0xd6, 0xff, 0x99, 0xd6, 0xff, 0x57, 0xce, 0xff, 0xda, 0xe6, 0xff, 0x9d, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x9c, 0x38, 0xbe, 0x00, 0xda, 0xde, 0x00, 0xfa, 0xde, 0x00, 0xba, 0xd6, 0x00, 0x79, 0xc6, 0x00, 0xd7, 0xad, 0x00, 0x58, 0xbe, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x0b, 0x2a, 0x00, 0x7f, 0xef, 0x18, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xe7, 0xff, 0x3c, 0xd7, 0xff, 0xb9, 0xbe, 0xff, 0x15, 0x8d, 0xff, 0x35, 0x8d, 0xff, 0x79, 0xb6, 0xff, 0x59, 0xb6, 0xff, 0x5c, 0xdf, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xef, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xdd, 0xf7, 0xff, 0xdd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x3b, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x3b, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xf7, 0xff, 0x1b, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0xd9, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0x5b, 0xef, 0xff, 0x78, 0xd6, 0xff, 0x74, 0xbd, 0xff, 0x58, 0xd6, 0xff, 0x1b, 0xe7, 0xff, 0xff, 0xff, 0xff, 0x18, 0xc6, 0xff, 0xf0, 0x83, 0xff, 0x31, 0x84, 0xff, 0x32, 0x84, 0xff, 0x53, 0x8c, 0xff, 0x11, 0x84, 0xff, 0x31, 0x8c, 0xff, 0x35, 0xad, 0xff, 0xd7, 0xbd, 0xff, 0x3b, 0xe7, 0xff, 0x3b, 0xe7, 0xff, 0x3c, 0xdf, 0xff, 0x3c, 0xdf, 0xff, 0x97, 0xad, 0xff, 0x73, 0x94, 0xff, 0x93, 0x94, 0xff, 0x14, 0xa5, 0xff, 0xd7, 0xb5, 0xff, 0x55, 0xa5, 0xff, 0xb7, 0xb5, 0xff, 0xb3, 0x94, 0xff, 0xf5, 0xa4, 0xff, 0x74, 0x94, 0xff, 0x31, 0x8c, 0xff, 0x75, 0xbd, 0xff, 0xb6, 0xc5, 0xff, 0x95, 0xbd, 0xff, 0xf7, 0xc5, 0xff, 0x37, 0xce, 0xff, 0xd6, 0xc5, 0xff, 0xf7, 0xcd, 0xff, 0xfb, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x9c, 0xda, 0xde, 0x00, 0xba, 0xc6, 0x00, 0xd8, 0x9d, 0x00, 0x15, 0x8d, 0x00, 0x76, 0xa5, 0x00, 0xb7, 0xa5, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x18, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xce, 0xff, 0xb4, 0x7c, 0xff, 0x33, 0x64, 0xff, 0xd8, 0xa5, 0xff, 0xda, 0xbe, 0xff, 0x99, 0xbe, 0xff, 0x1b, 0xd7, 0xff, 0x3b, 0xd7, 0xff, 0x7c, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xdd, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xef, 0xff, 0xfb, 0xde, 0xff, 0x3c, 0xe7, 0xff, 0xbe, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x3c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x1b, 0xef, 0xff, 0x5c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xf7, 0xff, 0x5b, 0xef, 0xff, 0x3b, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x98, 0xde, 0xff, 0xb6, 0xc5, 0xff, 0x51, 0x94, 0xff, 0x4e, 0x6b, 0xff, 0x2e, 0x6b, 0xff, 0x33, 0x8c, 0xff, 0x93, 0x8c, 0xff, 0x96, 0xad, 0xff, 0xf5, 0x9c, 0xff, 0x0f, 0x63, 0xff, 0xd1, 0x7b, 0xff, 0xf1, 0x83, 0xff, 0x0e, 0x6b, 0xff, 0xfb, 0xde, 0xff, 0x5b, 0xe7, 0xff, 0x58, 0xc6, 0xff, 0x5c, 0xdf, 0xff, 0x18, 0xbe, 0xff, 0xb4, 0x94, 0xff, 0x72, 0x94, 0xff, 0x31, 0x8c, 0xff, 0x56, 0xa5, 0xff, 0xf7, 0xb5, 0xff, 0x76, 0xa5, 0xff, 0x16, 0x9d, 0xff, 0x4f, 0x63, 0xff, 0x2f, 0x6b, 0xff, 0x4f, 0x6b, 0xff, 0xb0, 0x7b, 0xff, 0x2e, 0x73, 0xff, 0xaf, 0x83, 0xff, 0xd3, 0xa4, 0xff, 0xf7, 0xc5, 0xff, 0x38, 0xc6, 0xff, 0x95, 0xb5, 0xff, 0x75, 0xbd, 0xff, 0xb9, 0xde, 0xff, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x9c, 0x72, 0x7c, 0x00, 0x12, 0x6c, 0x00, 0xb7, 0xa5, 0x00, 0x59, 0xbe, 0x00, 0xd7, 0xa5, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x18, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x1a, 0xb6, 0xff, 0x13, 0x64, 0xff, 0xb1, 0x53, 0xff, 0x70, 0x4b, 0xff, 0x33, 0x64, 0xff, 0x39, 0xae, 0xff, 0x5c, 0xdf, 0xff, 0x9c, 0xe7, 0xff, 0x9c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x5b, 0xef, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xdd, 0xff, 0xff, 0x5c, 0xef, 0xff, 0xb9, 0xde, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x5c, 0xf7, 0xff, 0x3b, 0xef, 0xff, 0x5c, 0xf7, 0xff, 0x1a, 0xef, 0xff, 0xda, 0xe6, 0xff, 0xfa, 0xe6, 0xff, 0xfa, 0xde, 0xff, 0x1b, 0xe7, 0xff, 0x5c, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x5b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x1b, 0xe7, 0xff, 0x51, 0x8c, 0xff, 0x4e, 0x73, 0xff, 0x11, 0x84, 0xff, 0x8b, 0x52, 0xff, 0x94, 0x8c, 0xff, 0x53, 0x74, 0xff, 0x12, 0x74, 0xff, 0x97, 0xa5, 0xff, 0x36, 0x9d, 0xff, 0x4f, 0x6b, 0xff, 0x32, 0x84, 0xff, 0x11, 0x84, 0xff, 0xf4, 0x9c, 0xff, 0xfb, 0xde, 0xff, 0xf7, 0xb5, 0xff, 0xda, 0xd6, 0xff, 0x79, 0xc6, 0xff, 0x93, 0x8c, 0xff, 0x93, 0x94, 0xff, 0xd4, 0x9c, 0xff, 0xf1, 0x83, 0xff, 0xb4, 0x94, 0xff, 0x16, 0x9d, 0xff, 0x77, 0x9d, 0xff, 0xee, 0x52, 0xff, 0x0b, 0x3a, 0xff, 0x2f, 0x5b, 0xff, 0xad, 0x52, 0xff, 0xad, 0x5a, 0xff, 0xcd, 0x62, 0xff, 0x0d, 0x6b, 0xff, 0xec, 0x72, 0xff, 0x92, 0x9c, 0xff, 0x58, 0xce, 0xff, 0x17, 0xc6, 0xff, 0x34, 0xb5, 0xff, 0xd6, 0xc5, 0xff, 0x7d, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x9c, 0x6f, 0x63, 0x00, 0xf5, 0x8c, 0x00, 0xf4, 0x8c, 0x00, 0x58, 0xc6, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xd8, 0xa5, 0xff, 0x2f, 0x43, 0xff, 0xd2, 0x53, 0xff, 0xd5, 0x74, 0xff, 0xfb, 0xbe, 0xff, 0xfa, 0xc6, 0xff, 0x18, 0xa6, 0xff, 0x1b, 0xcf, 0xff, 0x1a, 0xd7, 0xff, 0x3b, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x5b, 0xf7, 0xff, 0xd9, 0xe6, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x5b, 0xef, 0xff, 0x78, 0xd6, 0xff, 0xf7, 0xc5, 0xff, 0xb6, 0xbd, 0xff, 0xfb, 0xde, 0xff, 0x9d, 0xf7, 0xff, 0xdd, 0xff, 0xff, 0x9c, 0xf7, 0xff, 0x99, 0xde, 0xff, 0x59, 0xd6, 0xff, 0x96, 0xb5, 0xff, 0x8f, 0x6b, 0xff, 0x72, 0x8c, 0xff, 0x31, 0x84, 0xff, 0xd7, 0xb5, 0xff, 0x96, 0xad, 0xff, 0x4e, 0x5b, 0xff, 0xd5, 0x8c, 0xff, 0x94, 0x84, 0xff, 0x74, 0x84, 0xff, 0xf5, 0x94, 0xff, 0x18, 0xbe, 0xff, 0xd1, 0x7b, 0xff, 0x73, 0x8c, 0xff, 0x52, 0x8c, 0xff, 0xd7, 0xbd, 0xff, 0x9a, 0xce, 0xff, 0x79, 0xc6, 0xff, 0x9a, 0xce, 0xff, 0xf5, 0x9c, 0xff, 0x73, 0x8c, 0xff, 0x12, 0x84, 0xff, 0xeb, 0x41, 0xff, 0x2b, 0x42, 0xff, 0x73, 0x8c, 0xff, 0x56, 0x95, 0xff, 0x94, 0x84, 0xff, 0x0f, 0x5b, 0xff, 0x4c, 0x3a, 0xff, 0x2c, 0x3a, 0xff, 0x8d, 0x52, 0xff, 0xce, 0x5a, 0xff, 0xe9, 0x41, 0xff, 0x06, 0x31, 0xff, 0x4b, 0x5a, 0xff, 0x8f, 0x7b, 0xff, 0xb7, 0xbd, 0xff, 0x37, 0xce, 0xff, 0x0f, 0x94, 0xff, 0x34, 0xad, 0xff, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x9c, 0x52, 0x7c, 0x00, 0x92, 0x84, 0x00, 0x99, 0xce, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x08, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x16, 0x8d, 0xff, 0x13, 0x5c, 0xff, 0x91, 0x53, 0xff, 0x91, 0x4b, 0xff, 0x34, 0x5c, 0xff, 0xb7, 0x95, 0xff, 0xda, 0xc6, 0xff, 0xd7, 0x9d, 0xff, 0x58, 0xb6, 0xff, 0x7c, 0xe7, 0xff, 0x7c, 0xe7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x5b, 0xef, 0xff, 0xf9, 0xee, 0xff, 0x5c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x1b, 0xe7, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xde, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0xbd, 0xf7, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xff, 0xff, 0x9c, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x59, 0xce, 0xff, 0x19, 0xc6, 0xff, 0x59, 0xce, 0xff, 0x18, 0xc6, 0xff, 0xf8, 0xbd, 0xff, 0xb7, 0xbd, 0xff, 0xf5, 0x9c, 0xff, 0x73, 0x8c, 0xff, 0x33, 0x74, 0xff, 0x27, 0x19, 0xff, 0x2d, 0x63, 0xff, 0x52, 0x7c, 0xff, 0xc9, 0x31, 0xff, 0xf8, 0xb5, 0xff, 0x55, 0x9d, 0xff, 0xcd, 0x4a, 0xff, 0x74, 0x84, 0xff, 0xb4, 0x8c, 0xff, 0xb0, 0x6b, 0xff, 0xb4, 0x94, 0xff, 0xd8, 0xb5, 0xff, 0x33, 0x8c, 0xff, 0xf2, 0x83, 0xff, 0x34, 0xa5, 0xff, 0xb6, 0xad, 0xff, 0xb7, 0xb5, 0xff, 0xf8, 0xb5, 0xff, 0x52, 0x84, 0xff, 0xf5, 0x9c, 0xff, 0x8f, 0x6b, 0xff, 0xaa, 0x29, 0xff, 0x2c, 0x3a, 0xff, 0x4c, 0x4a, 0xff, 0x2f, 0x63, 0xff, 0xb5, 0x84, 0xff, 0x70, 0x63, 0xff, 0xee, 0x52, 0xff, 0x2f, 0x53, 0xff, 0xa9, 0x39, 0xff, 0xea, 0x41, 0xff, 0x8c, 0x52, 0xff, 0x88, 0x39, 0xff, 0xa8, 0x41, 0xff, 0xa9, 0x41, 0xff, 0x6b, 0x52, 0xff, 0x18, 0xc6, 0xff, 0x96, 0xb5, 0xff, 0xaf, 0x7b, 0xff, 0x51, 0x8c, 0xff, 0xfc, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0x53, 0x8c, 0x00, 0x99, 0xd6, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x37, 0x95, 0xff, 0xf2, 0x53, 0xff, 0x70, 0x43, 0xff, 0xee, 0x32, 0xff, 0xb1, 0x4b, 0xff, 0xf3, 0x5b, 0xff, 0x8d, 0x32, 0xff, 0x35, 0x7d, 0xff, 0x5c, 0xd7, 0xff, 0x7c, 0xe7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x3b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x7c, 0xef, 0xff, 0xde, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0xf7, 0xc5, 0xff, 0xb3, 0xa4, 0xff, 0x52, 0x9c, 0xff, 0xd4, 0xa4, 0xff, 0x93, 0x94, 0xff, 0x36, 0xad, 0xff, 0xb4, 0x9c, 0xff, 0x11, 0x84, 0xff, 0x94, 0x94, 0xff, 0x73, 0x8c, 0xff, 0x56, 0xad, 0xff, 0xb3, 0x94, 0xff, 0x72, 0x84, 0xff, 0x37, 0x95, 0xff, 0x6c, 0x42, 0xff, 0xcc, 0x52, 0xff, 0x52, 0x84, 0xff, 0x0b, 0x3a, 0xff, 0x4c, 0x4a, 0xff, 0xfc, 0xd6, 0xff, 0x11, 0x74, 0xff, 0x90, 0x63, 0xff, 0x56, 0x9d, 0xff, 0x73, 0x8c, 0xff, 0xad, 0x4a, 0xff, 0x0e, 0x63, 0xff, 0x52, 0x8c, 0xff, 0x2e, 0x6b, 0xff, 0x11, 0x84, 0xff, 0x11, 0x84, 0xff, 0xf4, 0x9c, 0xff, 0xd4, 0x94, 0xff, 0xb0, 0x73, 0xff, 0x32, 0x7c, 0xff, 0x52, 0x7c, 0xff, 0x6c, 0x4a, 0xff, 0xaa, 0x29, 0xff, 0x69, 0x31, 0xff, 0xca, 0x39, 0xff, 0x30, 0x5b, 0xff, 0x8d, 0x4a, 0xff, 0x68, 0x29, 0xff, 0x2f, 0x5b, 0xff, 0x0b, 0x42, 0xff, 0xc6, 0x20, 0xff, 0xc9, 0x39, 0xff, 0x8c, 0x52, 0xff, 0x67, 0x31, 0xff, 0xe9, 0x49, 0xff, 0xa9, 0x39, 0xff, 0xac, 0x5a, 0xff, 0x39, 0xc6, 0xff, 0xf4, 0x9c, 0xff, 0x4e, 0x73, 0xff, 0x35, 0xad, 0xff, 0xbb, 0xce, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0x38, 0xc6, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x9c, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0xb4, 0x7c, 0xff, 0xf1, 0x53, 0xff, 0x73, 0x64, 0xff, 0x16, 0x75, 0xff, 0x37, 0x7d, 0xff, 0x5a, 0x9e, 0xff, 0x76, 0x8d, 0xff, 0x12, 0x64, 0xff, 0xdb, 0xbe, 0xff, 0xda, 0xc6, 0xff, 0x9a, 0xbe, 0xff, 0x7c, 0xe7, 0xff, 0x7b, 0xef, 0xff, 0x5c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0xfa, 0xe6, 0xff, 0x17, 0xce, 0xff, 0xb5, 0xc5, 0xff, 0xf7, 0xcd, 0xff, 0xf7, 0xcd, 0xff, 0xda, 0xde, 0xff, 0x9d, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0xba, 0xde, 0xff, 0x15, 0xa5, 0xff, 0x11, 0x84, 0xff, 0x12, 0x84, 0xff, 0x90, 0x73, 0xff, 0x4f, 0x6b, 0xff, 0x73, 0x94, 0xff, 0x56, 0xad, 0xff, 0x35, 0xa5, 0xff, 0x32, 0x84, 0xff, 0xed, 0x62, 0xff, 0xf1, 0x83, 0xff, 0xd0, 0x7b, 0xff, 0xb4, 0x94, 0xff, 0xd9, 0xb5, 0xff, 0xcd, 0x4a, 0xff, 0x11, 0x74, 0xff, 0x36, 0x9d, 0xff, 0x4f, 0x5b, 0xff, 0x86, 0x10, 0xff, 0xd4, 0x8c, 0xff, 0xfb, 0xce, 0xff, 0xd1, 0x6b, 0xff, 0x33, 0x7c, 0xff, 0x16, 0x9d, 0xff, 0xf2, 0x7b, 0xff, 0xe7, 0x20, 0xff, 0xa9, 0x39, 0xff, 0xad, 0x5a, 0xff, 0xed, 0x62, 0xff, 0x0d, 0x63, 0xff, 0xd0, 0x7b, 0xff, 0x11, 0x7c, 0xff, 0xb0, 0x73, 0xff, 0xce, 0x52, 0xff, 0x2e, 0x5b, 0xff, 0x0a, 0x3a, 0xff, 0x89, 0x31, 0xff, 0x48, 0x29, 0xff, 0xca, 0x39, 0xff, 0xeb, 0x39, 0xff, 0xae, 0x52, 0xff, 0x48, 0x21, 0xff, 0x27, 0x21, 0xff, 0x2b, 0x42, 0xff, 0x48, 0x29, 0xff, 0x07, 0x29, 0xff, 0x68, 0x29, 0xff, 0x4f, 0x63, 0xff, 0xe9, 0x41, 0xff, 0x07, 0x29, 0xff, 0xea, 0x39, 0xff, 0x4f, 0x6b, 0xff, 0x15, 0x95, 0xff, 0xd4, 0x9c, 0xff, 0x72, 0x8c, 0xff, 0xd3, 0x94, 0xff, 0x59, 0xc6, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0x43, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5e, 0xef, 0xff, 0x16, 0x8d, 0xff, 0xee, 0x3a, 0xff, 0xb1, 0x53, 0xff, 0x33, 0x64, 0xff, 0x0f, 0x3b, 0xff, 0xd4, 0x74, 0xff, 0x36, 0x85, 0xff, 0x73, 0x6c, 0xff, 0xb8, 0x8d, 0xff, 0xd8, 0x95, 0xff, 0xfb, 0xce, 0xff, 0xdb, 0xc6, 0xff, 0x1b, 0xcf, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x1b, 0xe7, 0xff, 0x96, 0xbd, 0xff, 0xf0, 0x93, 0xff, 0x4e, 0x7b, 0xff, 0x11, 0x8c, 0xff, 0x35, 0xad, 0xff, 0xf8, 0xc5, 0xff, 0xd8, 0xbd, 0xff, 0x56, 0xad, 0xff, 0x35, 0xad, 0xff, 0x39, 0xc6, 0xff, 0x18, 0xc6, 0xff, 0x14, 0xa5, 0xff, 0xf1, 0x83, 0xff, 0x8c, 0x5a, 0xff, 0x4b, 0x4a, 0xff, 0x0d, 0x63, 0xff, 0xed, 0x62, 0xff, 0xe9, 0x41, 0xff, 0xa8, 0x31, 0xff, 0xc9, 0x39, 0xff, 0x6c, 0x4a, 0xff, 0x53, 0x84, 0xff, 0xad, 0x4a, 0xff, 0x4f, 0x5b, 0xff, 0xb5, 0x84, 0xff, 0xcd, 0x4a, 0xff, 0x0e, 0x5b, 0xff, 0x91, 0x63, 0xff, 0x58, 0xbe, 0xff, 0xd4, 0x8c, 0xff, 0x4f, 0x5b, 0xff, 0x53, 0x84, 0xff, 0x94, 0x8c, 0xff, 0x6c, 0x4a, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x31, 0xff, 0x2b, 0x4a, 0xff, 0xc9, 0x41, 0xff, 0xea, 0x41, 0xff, 0xd1, 0x73, 0xff, 0x90, 0x63, 0xff, 0x4c, 0x4a, 0xff, 0x0e, 0x5b, 0xff, 0x89, 0x31, 0xff, 0x28, 0x29, 0xff, 0x89, 0x31, 0xff, 0x07, 0x21, 0xff, 0x69, 0x29, 0xff, 0x0b, 0x3a, 0xff, 0x48, 0x29, 0xff, 0x69, 0x29, 0xff, 0xa9, 0x31, 0xff, 0x68, 0x29, 0xff, 0x0a, 0x42, 0xff, 0x07, 0x21, 0xff, 0xa9, 0x31, 0xff, 0xcd, 0x52, 0xff, 0x27, 0x21, 0xff, 0xa9, 0x39, 0xff, 0x4c, 0x4a, 0xff, 0xb1, 0x6b, 0xff, 0xf5, 0x8c, 0xff, 0xb4, 0x94, 0xff, 0x52, 0x8c, 0xff, 0xf4, 0x9c, 0xff, 0x9a, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0xb5, 0x84, 0xff, 0xee, 0x3a, 0xff, 0xf3, 0x5b, 0xff, 0x70, 0x4b, 0xff, 0x30, 0x43, 0xff, 0x71, 0x4b, 0xff, 0xb4, 0x74, 0xff, 0x70, 0x43, 0xff, 0xef, 0x32, 0xff, 0x91, 0x43, 0xff, 0x70, 0x3b, 0xff, 0xb8, 0x9d, 0xff, 0x3c, 0xd7, 0xff, 0xdb, 0xce, 0xff, 0x7c, 0xf7, 0xff, 0x5b, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x5c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0xfb, 0xe6, 0xff, 0x76, 0xb5, 0xff, 0xd3, 0x9c, 0xff, 0xd4, 0x9c, 0xff, 0x31, 0x8c, 0xff, 0x2e, 0x6b, 0xff, 0x6b, 0x52, 0xff, 0xed, 0x62, 0xff, 0xf1, 0x83, 0xff, 0xd0, 0x83, 0xff, 0xf1, 0x8b, 0xff, 0x6b, 0x5a, 0xff, 0xa8, 0x39, 0xff, 0x26, 0x29, 0xff, 0x07, 0x21, 0xff, 0x48, 0x21, 0xff, 0x68, 0x21, 0xff, 0xcd, 0x52, 0xff, 0x53, 0x84, 0xff, 0x90, 0x6b, 0xff, 0x2b, 0x42, 0xff, 0x28, 0x21, 0xff, 0x8c, 0x4a, 0xff, 0xf2, 0x73, 0xff, 0x53, 0x7c, 0xff, 0x70, 0x63, 0xff, 0x4f, 0x63, 0xff, 0x8d, 0x4a, 0xff, 0xce, 0x42, 0xff, 0xd5, 0x8c, 0xff, 0xf8, 0xb5, 0xff, 0xee, 0x52, 0xff, 0x4f, 0x63, 0xff, 0x32, 0x7c, 0xff, 0x70, 0x6b, 0xff, 0x48, 0x29, 0xff, 0x23, 0x08, 0xff, 0xea, 0x41, 0xff, 0x4c, 0x52, 0xff, 0x27, 0x29, 0xff, 0x8c, 0x4a, 0xff, 0xce, 0x52, 0xff, 0x2b, 0x3a, 0xff, 0x0e, 0x5b, 0xff, 0x48, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x21, 0xff, 0x48, 0x29, 0xff, 0xc5, 0x18, 0xff, 0x68, 0x29, 0xff, 0x2b, 0x42, 0xff, 0xca, 0x31, 0xff, 0x68, 0x29, 0xff, 0x48, 0x29, 0xff, 0xa9, 0x31, 0xff, 0x0b, 0x3a, 0xff, 0xe7, 0x18, 0xff, 0x88, 0x29, 0xff, 0x0a, 0x3a, 0xff, 0x07, 0x21, 0xff, 0xca, 0x39, 0xff, 0xee, 0x5a, 0xff, 0x73, 0x84, 0xff, 0xd0, 0x73, 0xff, 0x90, 0x73, 0xff, 0x32, 0x84, 0xff, 0x56, 0xa5, 0xff, 0x7a, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xc7, 0x7f, 0xef, 0x10, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0x36, 0x95, 0xff, 0x91, 0x53, 0xff, 0x6d, 0x2a, 0xff, 0xf3, 0x5b, 0xff, 0xb1, 0x4b, 0xff, 0xce, 0x32, 0xff, 0xd8, 0x8d, 0xff, 0x39, 0x9e, 0xff, 0x91, 0x4b, 0xff, 0x8e, 0x2a, 0xff, 0xd2, 0x4b, 0xff, 0xd5, 0x6c, 0xff, 0x38, 0xae, 0xff, 0xdb, 0xbe, 0xff, 0xfb, 0xc6, 0xff, 0xbc, 0xf7, 0xff, 0x5b, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x1b, 0xef, 0xff, 0xf9, 0xee, 0xff, 0x58, 0xde, 0xff, 0x55, 0xb5, 0xff, 0xd3, 0x9c, 0xff, 0x15, 0xa5, 0xff, 0x52, 0x8c, 0xff, 0xd0, 0x7b, 0xff, 0x6f, 0x6b, 0xff, 0x4f, 0x6b, 0xff, 0x4f, 0x63, 0xff, 0xcd, 0x52, 0xff, 0x89, 0x31, 0xff, 0x27, 0x21, 0xff, 0x48, 0x31, 0xff, 0xa9, 0x31, 0xff, 0x2b, 0x42, 0xff, 0xce, 0x52, 0xff, 0xf2, 0x73, 0xff, 0xf2, 0x73, 0xff, 0xf1, 0x73, 0xff, 0x90, 0x6b, 0xff, 0x91, 0x6b, 0xff, 0x91, 0x6b, 0xff, 0x0f, 0x5b, 0xff, 0x0b, 0x3a, 0xff, 0x07, 0x19, 0xff, 0x73, 0x84, 0xff, 0xb0, 0x6b, 0xff, 0xcd, 0x4a, 0xff, 0xe6, 0x18, 0xff, 0x6c, 0x42, 0xff, 0xf7, 0x8c, 0xff, 0x18, 0xb6, 0xff, 0xd1, 0x73, 0xff, 0x2b, 0x42, 0xff, 0xae, 0x52, 0xff, 0x8d, 0x4a, 0xff, 0x90, 0x6b, 0xff, 0x07, 0x21, 0xff, 0x47, 0x29, 0xff, 0x4c, 0x4a, 0xff, 0x88, 0x31, 0xff, 0xc9, 0x39, 0xff, 0xad, 0x52, 0xff, 0xea, 0x39, 0xff, 0x4b, 0x42, 0xff, 0xc9, 0x39, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x68, 0x29, 0xff, 0x68, 0x29, 0xff, 0xc6, 0x18, 0xff, 0xa9, 0x31, 0xff, 0x0b, 0x3a, 0xff, 0x89, 0x29, 0xff, 0x27, 0x21, 0xff, 0x48, 0x29, 0xff, 0xca, 0x31, 0xff, 0x48, 0x29, 0xff, 0xa5, 0x10, 0xff, 0x48, 0x29, 0xff, 0x89, 0x31, 0xff, 0x48, 0x21, 0xff, 0xca, 0x39, 0xff, 0xf1, 0x7b, 0xff, 0x6f, 0x63, 0xff, 0x0a, 0x3a, 0xff, 0x0f, 0x63, 0xff, 0x0e, 0x5b, 0xff, 0x93, 0x84, 0xff, 0x7a, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xb4, 0x8c, 0xff, 0x90, 0x4b, 0xff, 0x53, 0x64, 0xff, 0xad, 0x32, 0xff, 0xce, 0x3a, 0xff, 0x94, 0x6c, 0xff, 0x54, 0x5c, 0xff, 0x75, 0x64, 0xff, 0x57, 0x7d, 0xff, 0xd1, 0x53, 0xff, 0xd2, 0x53, 0xff, 0xf9, 0x8d, 0xff, 0xfc, 0xbe, 0xff, 0x3c, 0xcf, 0xff, 0x59, 0xae, 0xff, 0xfb, 0xce, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x5b, 0xf7, 0xff, 0x5c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xf7, 0xff, 0x99, 0xe6, 0xff, 0x75, 0xc5, 0xff, 0xb3, 0xac, 0xff, 0xd0, 0x83, 0xff, 0xee, 0x62, 0xff, 0x0b, 0x42, 0xff, 0xcd, 0x5a, 0xff, 0x0f, 0x63, 0xff, 0xd2, 0x73, 0xff, 0x33, 0x7c, 0xff, 0x93, 0x8c, 0xff, 0x16, 0x9d, 0xff, 0xf2, 0x7b, 0xff, 0x12, 0x7c, 0xff, 0x4f, 0x5b, 0xff, 0xb1, 0x6b, 0xff, 0x16, 0x95, 0xff, 0x94, 0x84, 0xff, 0xf1, 0x6b, 0xff, 0xb1, 0x6b, 0xff, 0xb1, 0x73, 0xff, 0x6c, 0x42, 0xff, 0xeb, 0x31, 0xff, 0x2c, 0x42, 0xff, 0x2f, 0x5b, 0xff, 0xae, 0x4a, 0xff, 0x49, 0x29, 0xff, 0x27, 0x21, 0xff, 0xd1, 0x73, 0xff, 0x70, 0x63, 0xff, 0x8d, 0x52, 0xff, 0x07, 0x19, 0xff, 0x71, 0x5b, 0xff, 0x12, 0x6c, 0xff, 0x15, 0x9d, 0xff, 0xee, 0x5a, 0xff, 0xae, 0x52, 0xff, 0xca, 0x39, 0xff, 0x8d, 0x4a, 0xff, 0xad, 0x52, 0xff, 0xc5, 0x18, 0xff, 0x68, 0x31, 0xff, 0xad, 0x5a, 0xff, 0x2a, 0x42, 0xff, 0x6c, 0x4a, 0xff, 0xa9, 0x31, 0xff, 0x88, 0x29, 0xff, 0xa9, 0x31, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x68, 0x31, 0xff, 0x68, 0x29, 0xff, 0x89, 0x29, 0xff, 0x0b, 0x3a, 0xff, 0x48, 0x29, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x21, 0xff, 0x4b, 0x4a, 0xff, 0x8c, 0x52, 0xff, 0x0e, 0x53, 0xff, 0x2e, 0x53, 0xff, 0x8d, 0x4a, 0xff, 0xea, 0x31, 0xff, 0xee, 0x52, 0xff, 0xd1, 0x73, 0xff, 0x39, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xa5, 0xff, 0xae, 0x42, 0xff, 0x6c, 0x2a, 0xff, 0xf2, 0x53, 0xff, 0x33, 0x5c, 0xff, 0xae, 0x32, 0xff, 0x74, 0x64, 0xff, 0xb5, 0x6c, 0xff, 0xed, 0x19, 0xff, 0xcf, 0x32, 0xff, 0x97, 0x85, 0xff, 0x3a, 0xa6, 0xff, 0xf8, 0x9d, 0xff, 0xba, 0xbe, 0xff, 0x7a, 0xb6, 0xff, 0x39, 0xb6, 0xff, 0x7c, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x5b, 0xf7, 0xff, 0x3b, 0xef, 0xff, 0x7c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x3b, 0xef, 0xff, 0x95, 0xc5, 0xff, 0xef, 0x93, 0xff, 0x8e, 0x8b, 0xff, 0xb3, 0xac, 0xff, 0xac, 0x5a, 0xff, 0x89, 0x31, 0xff, 0xce, 0x5a, 0xff, 0xd1, 0x7b, 0xff, 0x12, 0x84, 0xff, 0x2f, 0x63, 0xff, 0xd1, 0x73, 0xff, 0xb4, 0x8c, 0xff, 0x12, 0x7c, 0xff, 0xf8, 0xbd, 0xff, 0x5a, 0xc6, 0xff, 0xf6, 0x9c, 0xff, 0xb1, 0x6b, 0xff, 0x53, 0x7c, 0xff, 0x15, 0x95, 0xff, 0xf9, 0xad, 0xff, 0x13, 0x74, 0xff, 0x4c, 0x3a, 0xff, 0x0c, 0x3a, 0xff, 0x49, 0x21, 0xff, 0x27, 0x21, 0xff, 0x07, 0x21, 0xff, 0x89, 0x29, 0xff, 0x0c, 0x42, 0xff, 0x27, 0x21, 0xff, 0x6c, 0x42, 0xff, 0xce, 0x52, 0xff, 0x94, 0x84, 0xff, 0x49, 0x29, 0xff, 0x49, 0x21, 0xff, 0x4c, 0x3a, 0xff, 0x70, 0x6b, 0xff, 0xf1, 0x7b, 0xff, 0x4c, 0x42, 0xff, 0xae, 0x52, 0xff, 0xca, 0x39, 0xff, 0x0b, 0x3a, 0xff, 0x06, 0x21, 0xff, 0x23, 0x10, 0xff, 0x27, 0x29, 0xff, 0x4c, 0x4a, 0xff, 0x4b, 0x4a, 0xff, 0xed, 0x5a, 0xff, 0xea, 0x39, 0xff, 0xa5, 0x10, 0xff, 0x68, 0x29, 0xff, 0x06, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x29, 0xff, 0x48, 0x29, 0xff, 0x07, 0x21, 0xff, 0x68, 0x31, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x20, 0xff, 0x27, 0x29, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x06, 0x19, 0xff, 0xcd, 0x5a, 0xff, 0xea, 0x39, 0xff, 0x28, 0x21, 0xff, 0xea, 0x31, 0xff, 0x32, 0x7c, 0xff, 0xd0, 0x6b, 0xff, 0x4c, 0x3a, 0xff, 0xab, 0x31, 0xff, 0x6f, 0x63, 0xff, 0x9b, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0xbe, 0xff, 0xee, 0x42, 0xff, 0x8d, 0x3a, 0xff, 0x4c, 0x32, 0xff, 0x6d, 0x2a, 0xff, 0x33, 0x5c, 0xff, 0x37, 0x7d, 0xff, 0xd2, 0x4b, 0xff, 0x70, 0x43, 0xff, 0x32, 0x64, 0xff, 0xf6, 0x74, 0xff, 0x1a, 0x96, 0xff, 0x3c, 0xc7, 0xff, 0x59, 0xae, 0xff, 0x19, 0xa6, 0xff, 0x39, 0xae, 0xff, 0x59, 0xae, 0xff, 0x1b, 0xcf, 0xff, 0xbd, 0xf7, 0xff, 0x9c, 0xff, 0xff, 0x5b, 0xf7, 0xff, 0x5b, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xb9, 0xe6, 0xff, 0xb3, 0xa4, 0xff, 0xaf, 0x93, 0xff, 0x0f, 0xac, 0xff, 0x51, 0x9c, 0xff, 0xcc, 0x5a, 0xff, 0x2e, 0x6b, 0xff, 0x4f, 0x6b, 0xff, 0x89, 0x39, 0xff, 0x6b, 0x4a, 0xff, 0x2e, 0x5b, 0xff, 0x0f, 0x63, 0xff, 0x53, 0x84, 0xff, 0xf2, 0x73, 0xff, 0x0f, 0x5b, 0xff, 0x6f, 0x6b, 0xff, 0xf2, 0x7b, 0xff, 0xb5, 0x94, 0xff, 0x90, 0x6b, 0xff, 0x6b, 0x42, 0xff, 0xee, 0x5a, 0xff, 0xf2, 0x73, 0xff, 0x70, 0x63, 0xff, 0x30, 0x53, 0xff, 0x69, 0x21, 0xff, 0x85, 0x10, 0xff, 0x47, 0x29, 0xff, 0xea, 0x31, 0xff, 0xeb, 0x31, 0xff, 0xc9, 0x31, 0xff, 0xc6, 0x18, 0xff, 0x89, 0x29, 0xff, 0x8d, 0x4a, 0xff, 0x50, 0x63, 0xff, 0x6c, 0x4a, 0xff, 0x2c, 0x42, 0xff, 0x6d, 0x4a, 0xff, 0xb1, 0x73, 0xff, 0xad, 0x4a, 0xff, 0x8c, 0x4a, 0xff, 0x0b, 0x42, 0xff, 0x89, 0x31, 0xff, 0x8d, 0x4a, 0xff, 0xc6, 0x18, 0xff, 0x64, 0x10, 0xff, 0x27, 0x29, 0xff, 0x6b, 0x4a, 0xff, 0x8f, 0x6b, 0xff, 0xad, 0x5a, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x20, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x07, 0x21, 0xff, 0x47, 0x29, 0xff, 0x47, 0x29, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x21, 0xff, 0x47, 0x21, 0xff, 0xad, 0x52, 0xff, 0xa9, 0x39, 0xff, 0x07, 0x21, 0xff, 0x8d, 0x4a, 0xff, 0x6f, 0x5b, 0xff, 0x90, 0x5b, 0xff, 0x6c, 0x42, 0xff, 0x28, 0x21, 0xff, 0x4c, 0x42, 0xff, 0x91, 0x6b, 0xff, 0xfc, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xbf, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xd6, 0xff, 0x2f, 0x53, 0xff, 0x4c, 0x32, 0xff, 0x4c, 0x32, 0xff, 0x6d, 0x32, 0xff, 0x4d, 0x32, 0xff, 0xce, 0x32, 0xff, 0x94, 0x64, 0xff, 0x95, 0x64, 0xff, 0x94, 0x64, 0xff, 0x1a, 0xa6, 0xff, 0x98, 0x85, 0xff, 0x57, 0x75, 0xff, 0x77, 0x8d, 0xff, 0x97, 0x8d, 0xff, 0xb7, 0x95, 0xff, 0xfc, 0xce, 0xff, 0x3c, 0xd7, 0xff, 0xfb, 0xd6, 0xff, 0xbd, 0xff, 0xff, 0x9c, 0xff, 0xff, 0x9c, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x99, 0xde, 0xff, 0xd3, 0xb4, 0xff, 0x51, 0xa4, 0xff, 0xd0, 0x93, 0xff, 0xac, 0x6a, 0xff, 0x6f, 0x7b, 0xff, 0x12, 0x84, 0xff, 0x2b, 0x4a, 0xff, 0xca, 0x39, 0xff, 0x0b, 0x3a, 0xff, 0x4c, 0x4a, 0xff, 0xea, 0x39, 0xff, 0xea, 0x39, 0xff, 0xd1, 0x73, 0xff, 0xae, 0x4a, 0xff, 0x0b, 0x32, 0xff, 0x6d, 0x4a, 0xff, 0x2c, 0x3a, 0xff, 0x50, 0x63, 0xff, 0xef, 0x5a, 0xff, 0xaa, 0x31, 0xff, 0x69, 0x29, 0xff, 0x6c, 0x42, 0xff, 0x8d, 0x42, 0xff, 0x2c, 0x3a, 0xff, 0x28, 0x21, 0xff, 0x47, 0x29, 0xff, 0x85, 0x10, 0xff, 0xea, 0x39, 0xff, 0xad, 0x52, 0xff, 0x27, 0x29, 0xff, 0xe7, 0x20, 0xff, 0xe7, 0x18, 0xff, 0xc9, 0x31, 0xff, 0x4c, 0x42, 0xff, 0xee, 0x52, 0xff, 0xa9, 0x31, 0xff, 0x6c, 0x4a, 0xff, 0x52, 0x84, 0xff, 0xe9, 0x39, 0xff, 0x0a, 0x3a, 0xff, 0x48, 0x29, 0xff, 0x89, 0x31, 0xff, 0x4c, 0x42, 0xff, 0xc6, 0x10, 0xff, 0x03, 0x08, 0xff, 0x68, 0x31, 0xff, 0x6f, 0x6b, 0xff, 0xac, 0x52, 0xff, 0x88, 0x29, 0xff, 0x89, 0x29, 0xff, 0x48, 0x29, 0xff, 0xe6, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x07, 0x21, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x4c, 0x4a, 0xff, 0x88, 0x31, 0xff, 0x47, 0x21, 0xff, 0x0d, 0x5b, 0xff, 0xcd, 0x4a, 0xff, 0xd2, 0x63, 0xff, 0xad, 0x4a, 0xff, 0x4b, 0x42, 0xff, 0x4b, 0x42, 0xff, 0x68, 0x29, 0xff, 0x32, 0x84, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0xd1, 0x6b, 0xff, 0x2c, 0x32, 0xff, 0x2c, 0x2a, 0xff, 0x4c, 0x32, 0xff, 0x6d, 0x32, 0xff, 0x6d, 0x32, 0xff, 0x8d, 0x32, 0xff, 0xb1, 0x4b, 0xff, 0x57, 0x7d, 0xff, 0xb8, 0x8d, 0xff, 0x16, 0x75, 0xff, 0xf5, 0x74, 0xff, 0x19, 0x9e, 0xff, 0x34, 0x5c, 0xff, 0x77, 0x85, 0xff, 0xbd, 0xe7, 0xff, 0xbb, 0xbe, 0xff, 0xdb, 0xbe, 0xff, 0x9d, 0xef, 0xff, 0x9d, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x7d, 0xf7, 0xff, 0x3c, 0xe7, 0xff, 0x9d, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x99, 0xde, 0xff, 0xf6, 0xd5, 0xff, 0x91, 0xa4, 0xff, 0x4e, 0x73, 0xff, 0x8f, 0x83, 0xff, 0x4f, 0x73, 0xff, 0x0b, 0x42, 0xff, 0xae, 0x52, 0xff, 0xee, 0x5a, 0xff, 0x8d, 0x52, 0xff, 0x8d, 0x4a, 0xff, 0x0f, 0x5b, 0xff, 0x8d, 0x4a, 0xff, 0x69, 0x29, 0xff, 0x4c, 0x42, 0xff, 0xeb, 0x39, 0xff, 0xca, 0x31, 0xff, 0x48, 0x29, 0xff, 0x27, 0x21, 0xff, 0xaa, 0x39, 0xff, 0x08, 0x21, 0xff, 0x89, 0x31, 0xff, 0x28, 0x21, 0xff, 0x89, 0x29, 0xff, 0xca, 0x31, 0xff, 0x69, 0x29, 0xff, 0x27, 0x21, 0xff, 0x07, 0x21, 0xff, 0x44, 0x10, 0xff, 0xa9, 0x31, 0xff, 0x2b, 0x3a, 0xff, 0x48, 0x21, 0xff, 0x68, 0x29, 0xff, 0xc6, 0x18, 0xff, 0x48, 0x21, 0xff, 0x2b, 0x3a, 0xff, 0xad, 0x52, 0xff, 0x27, 0x21, 0xff, 0x4f, 0x63, 0xff, 0x90, 0x6b, 0xff, 0xa9, 0x31, 0xff, 0xca, 0x39, 0xff, 0xe6, 0x18, 0xff, 0x89, 0x29, 0xff, 0xea, 0x39, 0xff, 0xc6, 0x18, 0xff, 0x44, 0x10, 0xff, 0x8c, 0x52, 0xff, 0xf1, 0x7b, 0xff, 0x8c, 0x4a, 0xff, 0x4c, 0x42, 0xff, 0xa9, 0x29, 0xff, 0x48, 0x21, 0xff, 0x88, 0x29, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x47, 0x29, 0xff, 0x48, 0x29, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x6c, 0x4a, 0xff, 0x06, 0x19, 0xff, 0x68, 0x21, 0xff, 0xcd, 0x52, 0xff, 0x8d, 0x4a, 0xff, 0xce, 0x4a, 0xff, 0x8c, 0x4a, 0xff, 0x68, 0x21, 0xff, 0x89, 0x29, 0xff, 0xa9, 0x31, 0xff, 0xca, 0x31, 0xff, 0x73, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x94, 0xff, 0x2c, 0x2a, 0xff, 0x2c, 0x32, 0xff, 0x2c, 0x32, 0xff, 0x0c, 0x2a, 0xff, 0x0b, 0x2a, 0xff, 0x6d, 0x3a, 0xff, 0x50, 0x4b, 0xff, 0xf2, 0x53, 0xff, 0x57, 0x85, 0xff, 0xd5, 0x6c, 0xff, 0xd5, 0x64, 0xff, 0x95, 0x64, 0xff, 0xb8, 0x8d, 0xff, 0x75, 0x54, 0xff, 0xd9, 0x85, 0xff, 0x5d, 0xdf, 0xff, 0x1b, 0xd7, 0xff, 0x3c, 0xd7, 0xff, 0x9d, 0xef, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x7d, 0xef, 0xff, 0xfb, 0xde, 0xff, 0x3c, 0xe7, 0xff, 0xd8, 0xbd, 0xff, 0x18, 0xc6, 0xff, 0xf8, 0xc5, 0xff, 0xb2, 0xa4, 0xff, 0x55, 0xbd, 0xff, 0x96, 0xbd, 0xff, 0x6f, 0x7b, 0xff, 0x0a, 0x4a, 0xff, 0x68, 0x31, 0xff, 0x89, 0x31, 0xff, 0xac, 0x4a, 0xff, 0x2e, 0x5b, 0xff, 0xeb, 0x39, 0xff, 0xcb, 0x39, 0xff, 0x8d, 0x4a, 0xff, 0x0f, 0x5b, 0xff, 0x2c, 0x42, 0xff, 0xca, 0x39, 0xff, 0x89, 0x31, 0xff, 0x07, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xe7, 0x20, 0xff, 0x48, 0x21, 0xff, 0x48, 0x29, 0xff, 0x07, 0x21, 0xff, 0x65, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x68, 0x29, 0xff, 0xc6, 0x18, 0xff, 0xa9, 0x39, 0xff, 0xea, 0x39, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x29, 0xff, 0xa9, 0x31, 0xff, 0x4c, 0x42, 0xff, 0x4b, 0x42, 0xff, 0x2f, 0x6b, 0xff, 0x2f, 0x63, 0xff, 0x0a, 0x42, 0xff, 0xa9, 0x31, 0xff, 0x48, 0x21, 0xff, 0x89, 0x31, 0xff, 0xa9, 0x31, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xed, 0x62, 0xff, 0x90, 0x73, 0xff, 0x68, 0x29, 0xff, 0xea, 0x39, 0xff, 0xe6, 0x18, 0xff, 0xa9, 0x29, 0xff, 0x88, 0x29, 0xff, 0xa5, 0x10, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x21, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x21, 0xff, 0x47, 0x21, 0xff, 0x44, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x21, 0xff, 0xcd, 0x4a, 0xff, 0xa5, 0x10, 0xff, 0x47, 0x21, 0xff, 0x0b, 0x32, 0xff, 0xea, 0x31, 0xff, 0xaa, 0x29, 0xff, 0xf2, 0x6b, 0xff, 0xa9, 0x31, 0xff, 0x27, 0x21, 0xff, 0xa9, 0x31, 0xff, 0xca, 0x31, 0xff, 0xeb, 0x39, 0xff, 0x19, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xb4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0xbe, 0xff, 0x8d, 0x3a, 0xff, 0xeb, 0x29, 0xff, 0xeb, 0x29, 0xff, 0x4d, 0x32, 0xff, 0xad, 0x32, 0xff, 0xae, 0x3a, 0xff, 0x50, 0x4b, 0xff, 0x13, 0x64, 0xff, 0x6d, 0x2a, 0xff, 0x10, 0x33, 0xff, 0xd5, 0x64, 0xff, 0x57, 0x7d, 0xff, 0xbe, 0xd7, 0xff, 0x9a, 0xae, 0xff, 0x98, 0x8d, 0xff, 0xb8, 0x7d, 0xff, 0xd9, 0x95, 0xff, 0x9e, 0xef, 0xff, 0x7c, 0xe7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbe, 0xff, 0xff, 0xdd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0xba, 0xd6, 0xff, 0x7c, 0xef, 0xff, 0x5d, 0xef, 0xff, 0xb1, 0x73, 0xff, 0x8c, 0x52, 0xff, 0x90, 0x7b, 0xff, 0xed, 0x6a, 0xff, 0x6f, 0x7b, 0xff, 0x0f, 0x6b, 0xff, 0x48, 0x31, 0xff, 0x85, 0x10, 0xff, 0x28, 0x21, 0xff, 0x28, 0x29, 0xff, 0xca, 0x39, 0xff, 0x2c, 0x42, 0xff, 0x89, 0x31, 0xff, 0x07, 0x21, 0xff, 0x07, 0x19, 0xff, 0x48, 0x21, 0xff, 0x69, 0x31, 0xff, 0x68, 0x29, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x20, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xaa, 0x31, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x48, 0x29, 0xff, 0x48, 0x29, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x4c, 0x42, 0xff, 0x07, 0x21, 0xff, 0x68, 0x31, 0xff, 0x2f, 0x63, 0xff, 0xd1, 0x73, 0xff, 0xee, 0x5a, 0xff, 0x68, 0x29, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x29, 0xff, 0xc9, 0x31, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xd1, 0x73, 0xff, 0x4b, 0x4a, 0xff, 0x48, 0x29, 0xff, 0x8d, 0x4a, 0xff, 0xc5, 0x10, 0xff, 0x06, 0x19, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe7, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x21, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0x84, 0x10, 0xff, 0x0a, 0x3a, 0xff, 0x8c, 0x4a, 0xff, 0x88, 0x29, 0xff, 0x68, 0x29, 0xff, 0x89, 0x29, 0xff, 0xa9, 0x29, 0xff, 0x8d, 0x42, 0xff, 0xb1, 0x63, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x21, 0xff, 0x2c, 0x42, 0xff, 0x50, 0x63, 0xff, 0x7e, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x7c, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xe7, 0xff, 0x70, 0x5b, 0xff, 0xeb, 0x29, 0xff, 0x2c, 0x2a, 0xff, 0x30, 0x43, 0xff, 0x2f, 0x43, 0xff, 0x2f, 0x3b, 0xff, 0xd2, 0x53, 0xff, 0x13, 0x54, 0xff, 0x94, 0x64, 0xff, 0xd9, 0x95, 0xff, 0x36, 0x7d, 0xff, 0x19, 0x96, 0xff, 0x7a, 0xa6, 0xff, 0x77, 0x95, 0xff, 0x7a, 0xa6, 0xff, 0x5c, 0xd7, 0xff, 0xbe, 0xe7, 0xff, 0x9b, 0xb6, 0xff, 0x5c, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xde, 0xff, 0xff, 0x9a, 0xce, 0xff, 0x7a, 0xce, 0xff, 0xde, 0xff, 0xff, 0x18, 0xc6, 0xff, 0x91, 0x63, 0xff, 0xef, 0x52, 0xff, 0x4c, 0x42, 0xff, 0x50, 0x6b, 0xff, 0x4d, 0x4a, 0xff, 0xa6, 0x10, 0xff, 0xa6, 0x18, 0xff, 0x48, 0x29, 0xff, 0x28, 0x29, 0xff, 0xeb, 0x39, 0xff, 0xc6, 0x18, 0xff, 0x23, 0x08, 0xff, 0xa9, 0x39, 0xff, 0xea, 0x39, 0xff, 0x69, 0x29, 0xff, 0xe7, 0x20, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x89, 0x29, 0xff, 0x06, 0x21, 0xff, 0xc6, 0x20, 0xff, 0x43, 0x08, 0xff, 0xe6, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x23, 0x08, 0xff, 0x64, 0x10, 0xff, 0x67, 0x29, 0xff, 0x2a, 0x42, 0xff, 0x47, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x21, 0xff, 0x2e, 0x63, 0xff, 0x32, 0x84, 0xff, 0xad, 0x52, 0xff, 0x47, 0x21, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x29, 0xff, 0x89, 0x31, 0xff, 0x85, 0x10, 0xff, 0x68, 0x31, 0xff, 0x6f, 0x6b, 0xff, 0x88, 0x31, 0xff, 0x0a, 0x3a, 0xff, 0x4b, 0x42, 0xff, 0xa5, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x85, 0x18, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xce, 0x4a, 0xff, 0xa9, 0x31, 0xff, 0x88, 0x29, 0xff, 0xa8, 0x31, 0xff, 0x89, 0x29, 0xff, 0xa9, 0x29, 0xff, 0x2f, 0x53, 0xff, 0x50, 0x5b, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x20, 0xff, 0xa9, 0x29, 0xff, 0xca, 0x31, 0xff, 0x57, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xdf, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xc7, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0x94, 0xff, 0x0b, 0x2a, 0xff, 0x6d, 0x32, 0xff, 0x70, 0x4b, 0xff, 0xce, 0x3a, 0xff, 0x4c, 0x2a, 0xff, 0x2c, 0x2a, 0xff, 0xeb, 0x29, 0xff, 0x2c, 0x2a, 0xff, 0x91, 0x4b, 0xff, 0xd6, 0x74, 0xff, 0x37, 0x7d, 0xff, 0xf6, 0x7c, 0xff, 0xf6, 0x7c, 0xff, 0x97, 0x7d, 0xff, 0xfb, 0xc6, 0xff, 0xbe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x3c, 0xe7, 0xff, 0x12, 0x84, 0xff, 0x7a, 0xce, 0xff, 0x7c, 0xef, 0xff, 0xb7, 0xbd, 0xff, 0x91, 0x73, 0xff, 0x8d, 0x4a, 0xff, 0x6d, 0x42, 0xff, 0xce, 0x52, 0xff, 0x2c, 0x42, 0xff, 0xca, 0x39, 0xff, 0xca, 0x39, 0xff, 0x27, 0x29, 0xff, 0x44, 0x10, 0xff, 0x07, 0x21, 0xff, 0xea, 0x39, 0xff, 0xa9, 0x31, 0xff, 0x47, 0x29, 0xff, 0x27, 0x29, 0xff, 0x48, 0x29, 0xff, 0x47, 0x29, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x89, 0x31, 0xff, 0xc6, 0x18, 0xff, 0x84, 0x10, 0xff, 0x85, 0x10, 0xff, 0x27, 0x21, 0xff, 0x89, 0x29, 0xff, 0x68, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc9, 0x39, 0xff, 0xe9, 0x39, 0xff, 0xca, 0x39, 0xff, 0xa9, 0x39, 0xff, 0x68, 0x29, 0xff, 0x27, 0x21, 0xff, 0x88, 0x31, 0xff, 0xac, 0x52, 0xff, 0xf1, 0x7b, 0xff, 0x2e, 0x5b, 0xff, 0x07, 0x21, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xc9, 0x39, 0xff, 0x0e, 0x5b, 0xff, 0x88, 0x29, 0xff, 0x2a, 0x3a, 0xff, 0x0a, 0x3a, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x68, 0x21, 0xff, 0x84, 0x10, 0xff, 0xa4, 0x10, 0xff, 0x44, 0x10, 0xff, 0xa9, 0x31, 0xff, 0xad, 0x42, 0xff, 0xea, 0x31, 0xff, 0x67, 0x21, 0xff, 0x64, 0x08, 0xff, 0x89, 0x29, 0xff, 0x2b, 0x3a, 0xff, 0xce, 0x4a, 0xff, 0x2f, 0x53, 0xff, 0xc9, 0x31, 0xff, 0x85, 0x10, 0xff, 0xc6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x48, 0x29, 0xff, 0x4c, 0x42, 0xff, 0xef, 0x52, 0xff, 0x5a, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x7c, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xc6, 0xff, 0xae, 0x3a, 0xff, 0x4c, 0x2a, 0xff, 0xf2, 0x5b, 0xff, 0xef, 0x3a, 0xff, 0xca, 0x21, 0xff, 0x4d, 0x32, 0xff, 0x4d, 0x32, 0xff, 0x6d, 0x32, 0xff, 0xd2, 0x53, 0xff, 0xd2, 0x53, 0xff, 0x30, 0x43, 0xff, 0x91, 0x43, 0xff, 0xd2, 0x4b, 0xff, 0x75, 0x5c, 0xff, 0xbc, 0xae, 0xff, 0x3c, 0xc7, 0xff, 0xbe, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xdd, 0xff, 0xff, 0x5c, 0xe7, 0xff, 0x3a, 0xc6, 0xff, 0x36, 0xa5, 0xff, 0x9a, 0xce, 0xff, 0x7a, 0xce, 0xff, 0x35, 0xad, 0xff, 0x2f, 0x6b, 0xff, 0xeb, 0x39, 0xff, 0xaa, 0x31, 0xff, 0x69, 0x29, 0xff, 0xaa, 0x31, 0xff, 0xea, 0x39, 0xff, 0x27, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xa9, 0x31, 0xff, 0xea, 0x39, 0xff, 0x8c, 0x4a, 0xff, 0xc9, 0x31, 0xff, 0x65, 0x08, 0xff, 0xc6, 0x10, 0xff, 0x89, 0x31, 0xff, 0xca, 0x39, 0xff, 0x68, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x68, 0x29, 0xff, 0x07, 0x21, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x44, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x27, 0x21, 0xff, 0xc9, 0x31, 0xff, 0xc9, 0x39, 0xff, 0x68, 0x29, 0xff, 0x47, 0x29, 0xff, 0x84, 0x10, 0xff, 0x43, 0x08, 0xff, 0x88, 0x31, 0xff, 0x68, 0x29, 0xff, 0x27, 0x21, 0xff, 0x68, 0x31, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x4b, 0x4a, 0xff, 0xd0, 0x7b, 0xff, 0x8c, 0x4a, 0xff, 0xc5, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x06, 0x21, 0xff, 0xad, 0x52, 0xff, 0x8c, 0x52, 0xff, 0x88, 0x31, 0xff, 0x2b, 0x42, 0xff, 0xc9, 0x31, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x20, 0xff, 0xe6, 0x18, 0xff, 0x69, 0x29, 0xff, 0x84, 0x10, 0xff, 0xc4, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa9, 0x29, 0xff, 0x2b, 0x3a, 0xff, 0xcd, 0x4a, 0xff, 0x47, 0x21, 0xff, 0x23, 0x08, 0xff, 0xa9, 0x29, 0xff, 0xad, 0x4a, 0xff, 0x8d, 0x42, 0xff, 0x4c, 0x3a, 0xff, 0x4b, 0x42, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x48, 0x29, 0xff, 0x69, 0x29, 0xff, 0x8d, 0x42, 0xff, 0x94, 0x84, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xd7, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0x13, 0x6c, 0xff, 0x4c, 0x2a, 0xff, 0x50, 0x43, 0xff, 0x50, 0x43, 0xff, 0xeb, 0x21, 0xff, 0x4c, 0x32, 0xff, 0x6d, 0x32, 0xff, 0x2c, 0x2a, 0xff, 0x71, 0x4b, 0xff, 0x91, 0x4b, 0xff, 0x2c, 0x2a, 0xff, 0x51, 0x43, 0xff, 0xd6, 0x64, 0xff, 0xf7, 0x6c, 0xff, 0x14, 0x4c, 0xff, 0x3a, 0xa6, 0xff, 0x1c, 0xc7, 0xff, 0x3c, 0xd7, 0xff, 0xdd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbe, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xb8, 0xa5, 0xff, 0xf1, 0x4a, 0xff, 0xb5, 0x8c, 0xff, 0xd8, 0xb5, 0xff, 0xb9, 0xb5, 0xff, 0x78, 0xad, 0xff, 0x33, 0x84, 0xff, 0xeb, 0x39, 0xff, 0x49, 0x29, 0xff, 0x69, 0x29, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x10, 0xff, 0x88, 0x31, 0xff, 0x0a, 0x42, 0xff, 0x6b, 0x4a, 0xff, 0x4b, 0x4a, 0xff, 0x88, 0x29, 0xff, 0x48, 0x29, 0xff, 0x28, 0x21, 0xff, 0xe7, 0x20, 0xff, 0x85, 0x10, 0xff, 0x85, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x68, 0x31, 0xff, 0xe6, 0x20, 0xff, 0x64, 0x10, 0xff, 0x85, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x23, 0x08, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa8, 0x31, 0xff, 0x47, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x20, 0xff, 0x44, 0x10, 0xff, 0x64, 0x10, 0xff, 0x47, 0x31, 0xff, 0x2f, 0x63, 0xff, 0x2b, 0x42, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc9, 0x39, 0xff, 0x8c, 0x52, 0xff, 0x88, 0x31, 0xff, 0xea, 0x39, 0xff, 0x0a, 0x3a, 0xff, 0xc9, 0x31, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x84, 0x10, 0xff, 0x02, 0x00, 0xff, 0xe6, 0x20, 0xff, 0x88, 0x21, 0xff, 0xad, 0x4a, 0xff, 0x4c, 0x42, 0xff, 0x06, 0x21, 0xff, 0x27, 0x21, 0xff, 0xaa, 0x29, 0xff, 0xee, 0x4a, 0xff, 0xee, 0x52, 0xff, 0x6c, 0x42, 0xff, 0x0a, 0x3a, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x48, 0x29, 0xff, 0x07, 0x21, 0xff, 0x8d, 0x42, 0xff, 0x2f, 0x53, 0xff, 0x77, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x7c, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xb5, 0xff, 0xce, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0x70, 0x4b, 0xff, 0x4c, 0x2a, 0xff, 0x4c, 0x32, 0xff, 0x6d, 0x32, 0xff, 0x6d, 0x32, 0xff, 0x4d, 0x32, 0xff, 0x91, 0x4b, 0xff, 0xef, 0x42, 0xff, 0x4d, 0x32, 0xff, 0x92, 0x4b, 0xff, 0x14, 0x54, 0xff, 0x92, 0x43, 0xff, 0x75, 0x54, 0xff, 0xb8, 0x85, 0xff, 0xde, 0xef, 0xff, 0x5c, 0xd7, 0xff, 0x3c, 0xdf, 0xff, 0xbe, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xb8, 0xad, 0xff, 0xb2, 0x5b, 0xff, 0x54, 0x7c, 0xff, 0x16, 0xa5, 0xff, 0x36, 0xad, 0xff, 0x0f, 0x5b, 0xff, 0xcb, 0x31, 0xff, 0xaa, 0x31, 0xff, 0x69, 0x29, 0xff, 0x0a, 0x3a, 0xff, 0x2e, 0x63, 0xff, 0xed, 0x5a, 0xff, 0x8c, 0x4a, 0xff, 0xea, 0x39, 0xff, 0x47, 0x29, 0xff, 0x68, 0x31, 0xff, 0x48, 0x29, 0xff, 0x89, 0x29, 0xff, 0xea, 0x39, 0xff, 0x48, 0x29, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x67, 0x29, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x6d, 0x4a, 0xff, 0xea, 0x39, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x8c, 0x52, 0xff, 0x6b, 0x4a, 0xff, 0x0a, 0x42, 0xff, 0x88, 0x29, 0xff, 0x2b, 0x42, 0xff, 0x68, 0x29, 0xff, 0x43, 0x08, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x02, 0x08, 0xff, 0xe5, 0x18, 0xff, 0x2b, 0x3a, 0xff, 0x0e, 0x53, 0xff, 0xc5, 0x10, 0xff, 0x85, 0x18, 0xff, 0x89, 0x29, 0xff, 0x0b, 0x32, 0xff, 0x0e, 0x4b, 0xff, 0x6c, 0x42, 0xff, 0xea, 0x39, 0xff, 0xea, 0x39, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x85, 0x18, 0xff, 0x8c, 0x42, 0xff, 0xad, 0x4a, 0xff, 0x0f, 0x5b, 0xff, 0xfc, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x63, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x33, 0x64, 0xff, 0xee, 0x3a, 0xff, 0x91, 0x53, 0xff, 0x0f, 0x3b, 0xff, 0x4c, 0x2a, 0xff, 0x6d, 0x32, 0xff, 0x8e, 0x3a, 0xff, 0x8e, 0x3a, 0xff, 0x6d, 0x2a, 0xff, 0x91, 0x4b, 0xff, 0x91, 0x4b, 0xff, 0x6d, 0x32, 0xff, 0x6d, 0x2a, 0xff, 0xcf, 0x3a, 0xff, 0x71, 0x4b, 0xff, 0x33, 0x54, 0xff, 0x1a, 0x9e, 0xff, 0x1c, 0xcf, 0xff, 0xda, 0xc6, 0xff, 0xbd, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xde, 0xff, 0xff, 0xde, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xde, 0xff, 0xff, 0x91, 0x63, 0xff, 0x50, 0x5b, 0xff, 0xd8, 0xb5, 0xff, 0xf5, 0x9c, 0xff, 0xb0, 0x6b, 0xff, 0x30, 0x53, 0xff, 0x4c, 0x3a, 0xff, 0xce, 0x4a, 0xff, 0xcd, 0x52, 0xff, 0x36, 0x9d, 0xff, 0x97, 0xad, 0xff, 0x32, 0x7c, 0xff, 0xac, 0x4a, 0xff, 0x6b, 0x4a, 0xff, 0x2b, 0x42, 0xff, 0xca, 0x31, 0xff, 0x89, 0x29, 0xff, 0x4c, 0x42, 0xff, 0x0a, 0x3a, 0xff, 0x48, 0x21, 0xff, 0xca, 0x31, 0xff, 0x68, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc8, 0x39, 0xff, 0xe6, 0x18, 0xff, 0x85, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x27, 0x21, 0xff, 0x0a, 0x3a, 0xff, 0x27, 0x21, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x26, 0x29, 0xff, 0xcd, 0x5a, 0xff, 0xa9, 0x39, 0xff, 0xe6, 0x20, 0xff, 0x0a, 0x3a, 0xff, 0x4b, 0x42, 0xff, 0xa5, 0x10, 0xff, 0x85, 0x18, 0xff, 0x43, 0x10, 0xff, 0x22, 0x08, 0xff, 0xc5, 0x18, 0xff, 0x6b, 0x42, 0xff, 0xcd, 0x4a, 0xff, 0xea, 0x31, 0xff, 0x85, 0x10, 0xff, 0x84, 0x10, 0xff, 0x48, 0x21, 0xff, 0xad, 0x42, 0xff, 0xce, 0x4a, 0xff, 0x68, 0x21, 0xff, 0x0b, 0x3a, 0xff, 0xea, 0x39, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x43, 0x10, 0xff, 0x8d, 0x4a, 0xff, 0xce, 0x4a, 0xff, 0xeb, 0x31, 0xff, 0x16, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x7c, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xad, 0xff, 0x50, 0x43, 0xff, 0xd2, 0x53, 0xff, 0x91, 0x4b, 0xff, 0x8d, 0x2a, 0xff, 0x8d, 0x32, 0xff, 0x6d, 0x32, 0xff, 0x8e, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xef, 0x3a, 0xff, 0xd3, 0x53, 0xff, 0x92, 0x4b, 0xff, 0x12, 0x54, 0xff, 0x34, 0x64, 0xff, 0x34, 0x5c, 0xff, 0x98, 0x85, 0xff, 0x9b, 0xae, 0xff, 0xf8, 0x8d, 0xff, 0xdb, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0x3c, 0xe7, 0xff, 0x0f, 0x5b, 0xff, 0xf2, 0x73, 0xff, 0x56, 0x9d, 0xff, 0x32, 0x7c, 0xff, 0xf1, 0x73, 0xff, 0xb1, 0x6b, 0xff, 0x74, 0x84, 0xff, 0x72, 0x84, 0xff, 0xd8, 0xb5, 0xff, 0xd9, 0xb5, 0xff, 0x70, 0x63, 0xff, 0x70, 0x63, 0xff, 0x70, 0x63, 0xff, 0xcd, 0x52, 0xff, 0x8c, 0x4a, 0xff, 0x0a, 0x3a, 0xff, 0xea, 0x39, 0xff, 0x89, 0x29, 0xff, 0x2b, 0x42, 0xff, 0xc9, 0x31, 0xff, 0xc9, 0x31, 0xff, 0x0b, 0x42, 0xff, 0xa9, 0x31, 0xff, 0x89, 0x31, 0xff, 0x06, 0x19, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xa4, 0x18, 0xff, 0x44, 0x10, 0xff, 0x64, 0x10, 0xff, 0x43, 0x08, 0xff, 0x26, 0x29, 0xff, 0x4b, 0x4a, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x06, 0x21, 0xff, 0x88, 0x31, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x2b, 0x4a, 0xff, 0x0a, 0x42, 0xff, 0x27, 0x21, 0xff, 0x47, 0x21, 0xff, 0xa8, 0x31, 0xff, 0xc6, 0x18, 0xff, 0x06, 0x21, 0xff, 0x64, 0x10, 0xff, 0x23, 0x08, 0xff, 0x0a, 0x3a, 0xff, 0x6c, 0x42, 0xff, 0x4c, 0x3a, 0xff, 0x88, 0x29, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xca, 0x31, 0xff, 0x50, 0x53, 0xff, 0x8d, 0x42, 0xff, 0x48, 0x21, 0xff, 0xa9, 0x29, 0xff, 0x89, 0x31, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x43, 0x10, 0xff, 0x0b, 0x42, 0xff, 0x6d, 0x42, 0xff, 0xaa, 0x31, 0xff, 0x50, 0x5b, 0xff, 0x5a, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x63, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x33, 0x64, 0xff, 0x54, 0x64, 0xff, 0x13, 0x5c, 0xff, 0xae, 0x32, 0xff, 0xae, 0x32, 0xff, 0x8e, 0x32, 0xff, 0x8d, 0x32, 0xff, 0x8e, 0x3a, 0xff, 0xcf, 0x3a, 0xff, 0xef, 0x42, 0xff, 0xaf, 0x3a, 0xff, 0xae, 0x32, 0xff, 0x30, 0x43, 0xff, 0xf3, 0x53, 0xff, 0xd3, 0x53, 0xff, 0x75, 0x5c, 0xff, 0xd7, 0x64, 0xff, 0x97, 0x8d, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xd8, 0xb5, 0xff, 0x53, 0x7c, 0xff, 0x53, 0x84, 0xff, 0x50, 0x63, 0xff, 0x30, 0x63, 0xff, 0xb1, 0x73, 0xff, 0x90, 0x6b, 0xff, 0x12, 0x84, 0xff, 0x76, 0xb5, 0xff, 0x32, 0x84, 0xff, 0x0a, 0x42, 0xff, 0xca, 0x31, 0xff, 0xca, 0x31, 0xff, 0xea, 0x39, 0xff, 0xe9, 0x39, 0xff, 0x4b, 0x42, 0xff, 0x0e, 0x5b, 0xff, 0x6c, 0x4a, 0xff, 0xa9, 0x31, 0xff, 0x27, 0x29, 0xff, 0x64, 0x10, 0xff, 0x85, 0x10, 0xff, 0x06, 0x21, 0xff, 0x47, 0x29, 0xff, 0xea, 0x39, 0xff, 0xa9, 0x31, 0xff, 0xa9, 0x31, 0xff, 0x27, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x07, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x43, 0x08, 0xff, 0x0a, 0x42, 0xff, 0x0a, 0x42, 0xff, 0x03, 0x00, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x29, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x47, 0x29, 0xff, 0xea, 0x39, 0xff, 0x27, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x0a, 0x3a, 0xff, 0xea, 0x31, 0xff, 0xca, 0x31, 0xff, 0x0b, 0x3a, 0xff, 0xca, 0x31, 0xff, 0x07, 0x19, 0xff, 0xa9, 0x29, 0xff, 0x4c, 0x3a, 0xff, 0xce, 0x42, 0xff, 0x6c, 0x3a, 0xff, 0xa9, 0x29, 0xff, 0x4b, 0x42, 0xff, 0x47, 0x21, 0xff, 0xc6, 0x18, 0xff, 0x47, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa9, 0x31, 0xff, 0xca, 0x31, 0xff, 0x48, 0x29, 0xff, 0x4c, 0x42, 0xff, 0x74, 0x8c, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x74, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xad, 0xff, 0x74, 0x64, 0xff, 0x37, 0x7d, 0xff, 0x50, 0x43, 0xff, 0xef, 0x3a, 0xff, 0xce, 0x3a, 0xff, 0x8e, 0x32, 0xff, 0x8e, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xce, 0x3a, 0xff, 0xef, 0x3a, 0xff, 0x10, 0x3b, 0xff, 0xef, 0x42, 0xff, 0xf0, 0x42, 0xff, 0xcf, 0x3a, 0xff, 0x11, 0x3b, 0xff, 0x75, 0x64, 0xff, 0x77, 0x95, 0xff, 0x9d, 0xef, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xff, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x97, 0xad, 0xff, 0xef, 0x52, 0xff, 0x6d, 0x4a, 0xff, 0x2c, 0x3a, 0xff, 0x4d, 0x42, 0xff, 0x2f, 0x5b, 0xff, 0x36, 0x9d, 0xff, 0x56, 0xad, 0xff, 0x4f, 0x6b, 0xff, 0x69, 0x31, 0xff, 0x68, 0x29, 0xff, 0xa9, 0x31, 0xff, 0x47, 0x21, 0xff, 0x2a, 0x3a, 0xff, 0xed, 0x5a, 0xff, 0x73, 0x8c, 0xff, 0x11, 0x7c, 0xff, 0x6f, 0x63, 0xff, 0x4f, 0x63, 0xff, 0x27, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x06, 0x21, 0xff, 0x85, 0x10, 0xff, 0x64, 0x10, 0xff, 0x43, 0x08, 0xff, 0xc6, 0x18, 0xff, 0x47, 0x29, 0xff, 0x27, 0x21, 0xff, 0xc6, 0x20, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x44, 0x10, 0xff, 0xc5, 0x20, 0xff, 0x27, 0x29, 0xff, 0x85, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xe9, 0x39, 0xff, 0xc8, 0x39, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa4, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x06, 0x21, 0xff, 0x68, 0x31, 0xff, 0x27, 0x21, 0xff, 0xa5, 0x10, 0xff, 0xe6, 0x20, 0xff, 0x84, 0x10, 0xff, 0x43, 0x08, 0xff, 0x88, 0x29, 0xff, 0xc9, 0x31, 0xff, 0x27, 0x21, 0xff, 0x68, 0x29, 0xff, 0xca, 0x31, 0xff, 0x68, 0x29, 0xff, 0x48, 0x21, 0xff, 0xea, 0x31, 0xff, 0x6d, 0x42, 0xff, 0x2b, 0x32, 0xff, 0xca, 0x31, 0xff, 0x68, 0x21, 0xff, 0x0a, 0x3a, 0xff, 0x48, 0x29, 0xff, 0x27, 0x21, 0xff, 0x48, 0x29, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa9, 0x31, 0xff, 0x89, 0x31, 0xff, 0x07, 0x21, 0xff, 0xa9, 0x31, 0xff, 0x4c, 0x42, 0xff, 0x5a, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x63, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x36, 0x85, 0xff, 0x78, 0x7d, 0xff, 0xf2, 0x53, 0xff, 0x50, 0x43, 0xff, 0x30, 0x43, 0xff, 0xce, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xce, 0x3a, 0xff, 0xef, 0x3a, 0xff, 0x10, 0x43, 0xff, 0x10, 0x43, 0xff, 0x8e, 0x32, 0xff, 0x4e, 0x22, 0xff, 0xb5, 0x74, 0xff, 0xb7, 0x8d, 0xff, 0xf8, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x1b, 0xe7, 0xff, 0xde, 0xff, 0xff, 0x7d, 0xf7, 0xff, 0xf1, 0x83, 0xff, 0x48, 0x29, 0xff, 0xca, 0x31, 0xff, 0x4c, 0x4a, 0xff, 0xef, 0x5a, 0xff, 0xb1, 0x73, 0xff, 0xd1, 0x7b, 0xff, 0x4b, 0x4a, 0xff, 0x68, 0x29, 0xff, 0x69, 0x29, 0xff, 0xea, 0x31, 0xff, 0x6c, 0x4a, 0xff, 0x2f, 0x63, 0xff, 0xd4, 0x94, 0xff, 0x32, 0x84, 0xff, 0x2e, 0x63, 0xff, 0x8f, 0x6b, 0xff, 0xd0, 0x73, 0xff, 0x2a, 0x42, 0xff, 0x05, 0x21, 0xff, 0x88, 0x31, 0xff, 0x27, 0x21, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x27, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x43, 0x10, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x0a, 0x42, 0xff, 0xc9, 0x39, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x21, 0xff, 0x89, 0x29, 0xff, 0x48, 0x29, 0xff, 0x89, 0x29, 0xff, 0xea, 0x29, 0xff, 0x2b, 0x3a, 0xff, 0x0b, 0x3a, 0xff, 0x68, 0x21, 0xff, 0x48, 0x21, 0xff, 0xca, 0x31, 0xff, 0x06, 0x21, 0xff, 0x27, 0x21, 0xff, 0x48, 0x29, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x68, 0x29, 0xff, 0x28, 0x29, 0xff, 0x07, 0x21, 0xff, 0x28, 0x21, 0xff, 0xca, 0x31, 0xff, 0xd5, 0x94, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5a, 0xb6, 0xff, 0x16, 0x75, 0xff, 0x94, 0x64, 0xff, 0xd2, 0x4b, 0xff, 0xd2, 0x53, 0xff, 0x50, 0x43, 0xff, 0xef, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xae, 0x3a, 0xff, 0xcf, 0x3a, 0xff, 0x0f, 0x43, 0xff, 0xaf, 0x3a, 0xff, 0xaf, 0x3a, 0xff, 0x53, 0x64, 0xff, 0x78, 0x8d, 0xff, 0xbc, 0xb6, 0xff, 0x7a, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x5c, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x3c, 0xef, 0xff, 0xfe, 0xff, 0xff, 0x9a, 0xce, 0xff, 0xe7, 0x20, 0xff, 0x89, 0x31, 0xff, 0xad, 0x52, 0xff, 0x6c, 0x4a, 0xff, 0xed, 0x5a, 0xff, 0x90, 0x73, 0xff, 0x8c, 0x52, 0xff, 0x48, 0x29, 0xff, 0x88, 0x31, 0xff, 0x68, 0x29, 0xff, 0x0a, 0x3a, 0xff, 0x6f, 0x63, 0xff, 0xf1, 0x7b, 0xff, 0x0e, 0x63, 0xff, 0x0a, 0x42, 0xff, 0x8c, 0x52, 0xff, 0x4e, 0x6b, 0xff, 0x47, 0x29, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x27, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x64, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x18, 0xff, 0xa4, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x07, 0x29, 0xff, 0x68, 0x31, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x20, 0xff, 0x06, 0x21, 0xff, 0x27, 0x29, 0xff, 0x68, 0x31, 0xff, 0x06, 0x21, 0xff, 0x64, 0x10, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x07, 0x21, 0xff, 0x48, 0x29, 0xff, 0x07, 0x21, 0xff, 0x89, 0x29, 0xff, 0x4c, 0x3a, 0xff, 0xca, 0x31, 0xff, 0x68, 0x21, 0xff, 0xa9, 0x29, 0xff, 0x0b, 0x3a, 0xff, 0x89, 0x31, 0xff, 0xc5, 0x18, 0xff, 0x47, 0x21, 0xff, 0x89, 0x29, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x48, 0x29, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xaa, 0x31, 0xff, 0xce, 0x52, 0xff, 0xbb, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xb9, 0x95, 0xff, 0x54, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x34, 0x5c, 0xff, 0xd2, 0x53, 0xff, 0x71, 0x4b, 0xff, 0x30, 0x43, 0xff, 0xef, 0x3a, 0xff, 0xcf, 0x3a, 0xff, 0xef, 0x42, 0xff, 0xef, 0x42, 0xff, 0xce, 0x3a, 0xff, 0xf0, 0x3a, 0xff, 0xd6, 0x74, 0xff, 0xd5, 0x74, 0xff, 0xb7, 0x95, 0xff, 0xd5, 0x6c, 0xff, 0xdc, 0xce, 0xff, 0xfe, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xbc, 0xff, 0xff, 0xd8, 0xee, 0xff, 0xfa, 0xee, 0xff, 0xbd, 0xf7, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0xd9, 0xb5, 0xff, 0x2d, 0x42, 0xff, 0x45, 0x08, 0xff, 0x28, 0x21, 0xff, 0xca, 0x39, 0xff, 0xcd, 0x5a, 0xff, 0x8c, 0x52, 0xff, 0x0a, 0x42, 0xff, 0xee, 0x5a, 0xff, 0x2b, 0x42, 0xff, 0x6c, 0x4a, 0xff, 0x2f, 0x6b, 0xff, 0xcc, 0x52, 0xff, 0xcd, 0x5a, 0xff, 0x4b, 0x4a, 0xff, 0x4b, 0x4a, 0xff, 0x8c, 0x52, 0xff, 0xc6, 0x18, 0xff, 0x85, 0x10, 0xff, 0x07, 0x21, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xa4, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x47, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x29, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x06, 0x21, 0xff, 0x88, 0x31, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x26, 0x29, 0xff, 0x06, 0x29, 0xff, 0x06, 0x21, 0xff, 0x47, 0x29, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x06, 0x21, 0xff, 0x68, 0x29, 0xff, 0x07, 0x19, 0xff, 0x89, 0x31, 0xff, 0x48, 0x29, 0xff, 0x27, 0x21, 0xff, 0x89, 0x29, 0xff, 0xca, 0x31, 0xff, 0xca, 0x31, 0xff, 0x07, 0x21, 0xff, 0x06, 0x21, 0xff, 0xaa, 0x31, 0xff, 0x68, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x85, 0x18, 0xff, 0xea, 0x31, 0xff, 0xaa, 0x31, 0xff, 0x53, 0x8c, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xce, 0xff, 0x78, 0x85, 0xff, 0x37, 0x7d, 0xff, 0xb5, 0x6c, 0xff, 0x13, 0x54, 0xff, 0xd2, 0x53, 0xff, 0x91, 0x4b, 0xff, 0x50, 0x43, 0xff, 0x0f, 0x3b, 0xff, 0xef, 0x3a, 0xff, 0xef, 0x42, 0xff, 0xef, 0x3a, 0xff, 0xae, 0x32, 0xff, 0x33, 0x5c, 0xff, 0x13, 0x54, 0xff, 0x75, 0x6c, 0xff, 0x16, 0x7d, 0xff, 0x77, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x7b, 0xf7, 0xff, 0x56, 0xe6, 0xff, 0xfa, 0xee, 0xff, 0xbd, 0xf7, 0xff, 0x3b, 0xe7, 0xff, 0x7c, 0xef, 0xff, 0xbd, 0xf7, 0xff, 0xf6, 0x94, 0xff, 0x0d, 0x3a, 0xff, 0xaa, 0x39, 0xff, 0xaa, 0x39, 0xff, 0x0b, 0x42, 0xff, 0x4c, 0x4a, 0xff, 0x47, 0x29, 0xff, 0x47, 0x29, 0xff, 0x68, 0x29, 0xff, 0x8c, 0x52, 0xff, 0x6f, 0x6b, 0xff, 0xcd, 0x62, 0xff, 0xca, 0x39, 0xff, 0x89, 0x31, 0xff, 0x8c, 0x5a, 0xff, 0x2b, 0x4a, 0xff, 0x85, 0x18, 0xff, 0x44, 0x08, 0xff, 0xa5, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x47, 0x29, 0xff, 0x68, 0x31, 0xff, 0xc5, 0x20, 0xff, 0x27, 0x29, 0xff, 0x27, 0x29, 0xff, 0x06, 0x29, 0xff, 0x27, 0x29, 0xff, 0x06, 0x29, 0xff, 0x26, 0x29, 0xff, 0x88, 0x39, 0xff, 0xa8, 0x39, 0xff, 0x88, 0x39, 0xff, 0x67, 0x31, 0xff, 0x47, 0x31, 0xff, 0x27, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x47, 0x29, 0xff, 0x47, 0x29, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa4, 0x18, 0xff, 0xc5, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0xa4, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0x84, 0x18, 0xff, 0x85, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x48, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xe7, 0x20, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x2b, 0x3a, 0xff, 0x89, 0x29, 0xff, 0x48, 0x21, 0xff, 0x07, 0x21, 0xff, 0x89, 0x29, 0xff, 0x07, 0x19, 0xff, 0xe6, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x47, 0x29, 0xff, 0x27, 0x21, 0xff, 0x4b, 0x4a, 0xff, 0xdb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xb8, 0x9d, 0xff, 0x74, 0x5c, 0xff, 0xd6, 0x6c, 0xff, 0x37, 0x7d, 0xff, 0xd6, 0x6c, 0xff, 0xf3, 0x53, 0xff, 0x71, 0x43, 0xff, 0x50, 0x43, 0xff, 0xef, 0x3a, 0xff, 0xef, 0x42, 0xff, 0xcf, 0x3a, 0xff, 0xaf, 0x3a, 0xff, 0x71, 0x4b, 0xff, 0x34, 0x5c, 0xff, 0x6e, 0x22, 0xff, 0xd5, 0x6c, 0xff, 0xfc, 0xbe, 0xff, 0x9d, 0xef, 0xff, 0xfd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xff, 0xff, 0x9c, 0xf7, 0xff, 0x1a, 0xef, 0xff, 0x36, 0xde, 0xff, 0x1a, 0xef, 0xff, 0xbd, 0xf7, 0xff, 0x3b, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0xde, 0xff, 0xff, 0x74, 0x84, 0xff, 0x6a, 0x21, 0xff, 0x68, 0x31, 0xff, 0x68, 0x31, 0xff, 0xaa, 0x31, 0xff, 0xe7, 0x20, 0xff, 0xa6, 0x18, 0xff, 0xea, 0x41, 0xff, 0x4b, 0x4a, 0xff, 0x2e, 0x6b, 0xff, 0x0a, 0x4a, 0xff, 0x27, 0x29, 0xff, 0x07, 0x29, 0xff, 0xea, 0x41, 0xff, 0x2a, 0x4a, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x21, 0xff, 0x85, 0x18, 0xff, 0x43, 0x10, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x06, 0x21, 0xff, 0x27, 0x29, 0xff, 0x27, 0x29, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x28, 0xff, 0x06, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0x27, 0x31, 0xff, 0x67, 0x39, 0xff, 0x26, 0x31, 0xff, 0x67, 0x41, 0xff, 0x67, 0x41, 0xff, 0x87, 0x41, 0xff, 0x87, 0x41, 0xff, 0x26, 0x39, 0xff, 0x67, 0x49, 0xff, 0x0a, 0x5a, 0xff, 0x88, 0x41, 0xff, 0xa8, 0x41, 0xff, 0xa8, 0x41, 0xff, 0x47, 0x31, 0xff, 0x68, 0x39, 0xff, 0x27, 0x29, 0xff, 0x06, 0x21, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x26, 0x21, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x44, 0x10, 0xff, 0x64, 0x10, 0xff, 0x67, 0x29, 0xff, 0xa8, 0x29, 0xff, 0xea, 0x31, 0xff, 0x89, 0x29, 0xff, 0x89, 0x29, 0xff, 0xa9, 0x29, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0x69, 0x29, 0xff, 0x89, 0x29, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x29, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0x69, 0x29, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xd4, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xe7, 0xff, 0xd5, 0x74, 0xff, 0x94, 0x64, 0xff, 0x74, 0x5c, 0xff, 0x74, 0x5c, 0xff, 0xb5, 0x6c, 0xff, 0x95, 0x6c, 0xff, 0x13, 0x5c, 0xff, 0x50, 0x43, 0xff, 0xef, 0x3a, 0xff, 0xef, 0x3a, 0xff, 0xef, 0x3a, 0xff, 0xaf, 0x32, 0xff, 0xb2, 0x4b, 0xff, 0xb5, 0x6c, 0xff, 0x13, 0x64, 0xff, 0xb7, 0x95, 0xff, 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x3b, 0xf7, 0xff, 0xd9, 0xee, 0xff, 0x78, 0xde, 0xff, 0x7c, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0x1b, 0xe7, 0xff, 0x3c, 0xe7, 0xff, 0xde, 0xff, 0xff, 0xb5, 0x94, 0xff, 0x49, 0x21, 0xff, 0x85, 0x18, 0xff, 0x86, 0x18, 0xff, 0x07, 0x21, 0xff, 0xca, 0x39, 0xff, 0x4b, 0x4a, 0xff, 0x6b, 0x4a, 0xff, 0x0a, 0x42, 0xff, 0x47, 0x29, 0xff, 0x48, 0x31, 0xff, 0xa9, 0x39, 0xff, 0x0a, 0x42, 0xff, 0x88, 0x31, 0xff, 0x43, 0x08, 0xff, 0x44, 0x10, 0xff, 0x27, 0x21, 0xff, 0x47, 0x29, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x20, 0xff, 0x87, 0x31, 0xff, 0x67, 0x31, 0xff, 0x88, 0x31, 0xff, 0x68, 0x31, 0xff, 0x47, 0x31, 0xff, 0x27, 0x31, 0xff, 0x07, 0x29, 0xff, 0x27, 0x31, 0xff, 0x26, 0x31, 0xff, 0x27, 0x31, 0xff, 0x68, 0x39, 0xff, 0x87, 0x49, 0xff, 0xc8, 0x59, 0xff, 0x29, 0x6a, 0xff, 0x49, 0x72, 0xff, 0x49, 0x72, 0xff, 0x29, 0x72, 0xff, 0x29, 0x72, 0xff, 0x29, 0x72, 0xff, 0xcb, 0x8a, 0xff, 0xec, 0x8a, 0xff, 0x29, 0x6a, 0xff, 0x4a, 0x6a, 0xff, 0xab, 0x72, 0xff, 0x29, 0x5a, 0xff, 0x87, 0x39, 0xff, 0x47, 0x31, 0xff, 0x06, 0x29, 0xff, 0x27, 0x29, 0xff, 0xc6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe5, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0xa4, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x43, 0x10, 0xff, 0x84, 0x10, 0xff, 0x48, 0x29, 0xff, 0x4b, 0x42, 0xff, 0x8b, 0x4a, 0xff, 0x29, 0x3a, 0xff, 0x67, 0x29, 0xff, 0xa6, 0x10, 0xff, 0x48, 0x29, 0xff, 0x89, 0x29, 0xff, 0x07, 0x21, 0xff, 0x07, 0x21, 0xff, 0x27, 0x21, 0xff, 0xa9, 0x29, 0xff, 0xc5, 0x18, 0xff, 0x03, 0x08, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x0b, 0x32, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x18, 0xff, 0x90, 0x73, 0xff, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xbe, 0xff, 0x74, 0x5c, 0xff, 0x94, 0x64, 0xff, 0x95, 0x64, 0xff, 0x94, 0x64, 0xff, 0x34, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0xf3, 0x53, 0xff, 0x91, 0x4b, 0xff, 0x30, 0x43, 0xff, 0x8e, 0x2a, 0xff, 0x91, 0x4b, 0xff, 0x33, 0x64, 0xff, 0x0f, 0x43, 0xff, 0x98, 0x95, 0xff, 0xde, 0xef, 0xff, 0xbd, 0xf7, 0xff, 0xbd, 0xff, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0xf9, 0xee, 0xff, 0x97, 0xe6, 0xff, 0xda, 0xde, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x1b, 0xe7, 0xff, 0xbb, 0xd6, 0xff, 0x3b, 0xdf, 0xff, 0x39, 0xc6, 0xff, 0x4d, 0x4a, 0xff, 0x08, 0x21, 0xff, 0x0b, 0x42, 0xff, 0x4c, 0x4a, 0xff, 0x4c, 0x4a, 0xff, 0xea, 0x41, 0xff, 0x27, 0x29, 0xff, 0x48, 0x29, 0xff, 0x48, 0x29, 0xff, 0x68, 0x31, 0xff, 0xa9, 0x39, 0xff, 0x47, 0x29, 0xff, 0x84, 0x10, 0xff, 0x85, 0x10, 0xff, 0xc6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x68, 0x31, 0xff, 0xe9, 0x41, 0xff, 0x87, 0x39, 0xff, 0x06, 0x31, 0xff, 0x26, 0x31, 0xff, 0x05, 0x31, 0xff, 0x06, 0x39, 0xff, 0x47, 0x39, 0xff, 0x47, 0x39, 0xff, 0x87, 0x41, 0xff, 0xc8, 0x51, 0xff, 0x09, 0x62, 0xff, 0x6a, 0x72, 0xff, 0xab, 0x8a, 0xff, 0x2c, 0x9b, 0xff, 0x6d, 0xa3, 0xff, 0x6d, 0xa3, 0xff, 0x6d, 0xa3, 0xff, 0x8d, 0xab, 0xff, 0x8e, 0xab, 0xff, 0x8d, 0xab, 0xff, 0xee, 0xab, 0xff, 0xcd, 0xa3, 0xff, 0x8e, 0xa3, 0xff, 0xce, 0xa3, 0xff, 0xce, 0xa3, 0xff, 0x6e, 0x93, 0xff, 0x29, 0x62, 0xff, 0x87, 0x41, 0xff, 0x26, 0x31, 0xff, 0x27, 0x31, 0xff, 0x06, 0x29, 0xff, 0x06, 0x21, 0xff, 0x27, 0x29, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x67, 0x29, 0xff, 0xc8, 0x31, 0xff, 0x2a, 0x42, 0xff, 0x0a, 0x42, 0xff, 0x06, 0x21, 0xff, 0x43, 0x10, 0xff, 0x23, 0x08, 0xff, 0x27, 0x21, 0xff, 0xa9, 0x31, 0xff, 0xa9, 0x31, 0xff, 0x27, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x88, 0x29, 0xff, 0x84, 0x10, 0xff, 0x43, 0x08, 0xff, 0x06, 0x21, 0xff, 0xc6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x07, 0x21, 0xff, 0x89, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x4b, 0x42, 0xff, 0xbb, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x77, 0x8d, 0xff, 0x54, 0x5c, 0xff, 0x75, 0x64, 0xff, 0x95, 0x64, 0xff, 0x95, 0x64, 0xff, 0x74, 0x64, 0xff, 0x13, 0x54, 0xff, 0xb2, 0x4b, 0xff, 0xb2, 0x4b, 0xff, 0xd2, 0x53, 0xff, 0xd3, 0x53, 0xff, 0x71, 0x4b, 0xff, 0x17, 0x7d, 0xff, 0x13, 0x5c, 0xff, 0x71, 0x3b, 0xff, 0xbb, 0xbe, 0xff, 0xbd, 0xe7, 0xff, 0x9d, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x9d, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0xf9, 0xee, 0xff, 0x57, 0xde, 0xff, 0x1b, 0xe7, 0xff, 0xbe, 0xf7, 0xff, 0x7c, 0xef, 0xff, 0x3c, 0xe7, 0xff, 0x97, 0xad, 0xff, 0xd7, 0xb5, 0xff, 0xfc, 0xde, 0xff, 0x12, 0x84, 0xff, 0x2c, 0x42, 0xff, 0x6c, 0x52, 0xff, 0xea, 0x41, 0xff, 0x48, 0x31, 0xff, 0x27, 0x29, 0xff, 0x27, 0x29, 0xff, 0x07, 0x29, 0xff, 0x07, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x85, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x20, 0xff, 0x47, 0x39, 0xff, 0x2a, 0x52, 0xff, 0x26, 0x39, 0xff, 0x26, 0x41, 0xff, 0xc8, 0x61, 0xff, 0x08, 0x6a, 0xff, 0x29, 0x72, 0xff, 0x28, 0x72, 0xff, 0xe8, 0x69, 0xff, 0x29, 0x6a, 0xff, 0x29, 0x72, 0xff, 0x49, 0x7a, 0xff, 0x2b, 0x9b, 0xff, 0xad, 0xb3, 0xff, 0xce, 0xb3, 0xff, 0x50, 0xbc, 0xff, 0x91, 0xbc, 0xff, 0x70, 0xbc, 0xff, 0x70, 0xbc, 0xff, 0xb1, 0xc4, 0xff, 0xf2, 0xc4, 0xff, 0xd1, 0xc4, 0xff, 0xd1, 0xbc, 0xff, 0xb1, 0xbc, 0xff, 0xb1, 0xbc, 0xff, 0xd1, 0xbc, 0xff, 0x90, 0xbc, 0xff, 0x0f, 0xb4, 0xff, 0x6d, 0x9b, 0xff, 0x8a, 0x7a, 0xff, 0x87, 0x49, 0xff, 0x26, 0x31, 0xff, 0x67, 0x31, 0xff, 0x27, 0x29, 0xff, 0x06, 0x29, 0xff, 0x27, 0x31, 0xff, 0x47, 0x31, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x85, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x47, 0x29, 0xff, 0xe5, 0x20, 0xff, 0x63, 0x08, 0xff, 0x02, 0x00, 0xff, 0x23, 0x08, 0xff, 0x43, 0x08, 0xff, 0x88, 0x29, 0xff, 0xca, 0x31, 0xff, 0x07, 0x21, 0xff, 0xa5, 0x10, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc9, 0x31, 0xff, 0x68, 0x29, 0xff, 0x22, 0x08, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x68, 0x29, 0xff, 0x07, 0x21, 0xff, 0xa4, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xb4, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x3b, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xe7, 0xff, 0xb5, 0x6c, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x5c, 0xff, 0x74, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x34, 0x5c, 0xff, 0xf3, 0x53, 0xff, 0xb2, 0x4b, 0xff, 0x51, 0x43, 0xff, 0xce, 0x32, 0xff, 0x33, 0x5c, 0xff, 0xb6, 0x6c, 0xff, 0x10, 0x3b, 0xff, 0xd3, 0x4b, 0xff, 0x7a, 0xb6, 0xff, 0xdc, 0xf7, 0xff, 0xde, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9d, 0xf7, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0xb9, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0x7c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x5c, 0xef, 0xff, 0x79, 0xce, 0xff, 0x76, 0xb5, 0xff, 0xb7, 0xb5, 0xff, 0x97, 0xb5, 0xff, 0xf1, 0x83, 0xff, 0xa9, 0x39, 0xff, 0x48, 0x29, 0xff, 0x68, 0x31, 0xff, 0x68, 0x31, 0xff, 0x27, 0x31, 0xff, 0x07, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x29, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x20, 0xff, 0x06, 0x31, 0xff, 0xa8, 0x49, 0xff, 0x46, 0x41, 0xff, 0x45, 0x41, 0xff, 0xe8, 0x69, 0xff, 0x8a, 0x8a, 0xff, 0x0b, 0x9b, 0xff, 0x2b, 0xa3, 0xff, 0xeb, 0x92, 0xff, 0xea, 0x92, 0xff, 0xca, 0x9a, 0xff, 0xeb, 0x9a, 0xff, 0x8d, 0xab, 0xff, 0x2f, 0xbc, 0xff, 0x70, 0xbc, 0xff, 0xd1, 0xc4, 0xff, 0xf2, 0xc4, 0xff, 0x12, 0xc5, 0xff, 0x12, 0xcd, 0xff, 0x33, 0xcd, 0xff, 0x74, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x74, 0xcd, 0xff, 0x54, 0xc5, 0xff, 0x54, 0xc5, 0xff, 0x53, 0xc5, 0xff, 0xf2, 0xbc, 0xff, 0x90, 0xb4, 0xff, 0x0e, 0xac, 0xff, 0x8d, 0xa3, 0xff, 0x6a, 0x7a, 0xff, 0x87, 0x51, 0xff, 0x67, 0x41, 0xff, 0x26, 0x31, 0xff, 0x47, 0x31, 0xff, 0x47, 0x31, 0xff, 0x47, 0x31, 0xff, 0x47, 0x29, 0xff, 0x27, 0x29, 0xff, 0x06, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x44, 0x10, 0xff, 0x23, 0x08, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x20, 0xff, 0x0a, 0x3a, 0xff, 0xca, 0x39, 0xff, 0x07, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x07, 0x21, 0xff, 0x89, 0x31, 0xff, 0xe6, 0x18, 0xff, 0xc9, 0x31, 0xff, 0x06, 0x21, 0xff, 0x43, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0xca, 0x29, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe7, 0x20, 0xff, 0x0e, 0x63, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x43, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9b, 0xbe, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x75, 0x64, 0xff, 0x75, 0x64, 0xff, 0x33, 0x5c, 0xff, 0xf3, 0x53, 0xff, 0xd2, 0x53, 0xff, 0xb2, 0x4b, 0xff, 0xcf, 0x3a, 0xff, 0x33, 0x5c, 0xff, 0x13, 0x5c, 0xff, 0x0d, 0x22, 0xff, 0x0d, 0x22, 0xff, 0x56, 0x8d, 0xff, 0xfe, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x1b, 0xef, 0xff, 0xb9, 0xe6, 0xff, 0x1b, 0xe7, 0xff, 0x7c, 0xf7, 0xff, 0xda, 0xde, 0xff, 0x1b, 0xe7, 0xff, 0x79, 0xce, 0xff, 0xf8, 0xbd, 0xff, 0xb0, 0x7b, 0xff, 0x72, 0x94, 0xff, 0x52, 0x94, 0xff, 0xad, 0x62, 0xff, 0xa9, 0x39, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x29, 0xff, 0x68, 0x31, 0xff, 0x88, 0x31, 0xff, 0x07, 0x21, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x28, 0xff, 0xa8, 0x49, 0xff, 0x26, 0x39, 0xff, 0x45, 0x49, 0xff, 0x08, 0x6a, 0xff, 0x89, 0x8a, 0xff, 0xeb, 0xa2, 0xff, 0x6c, 0xab, 0xff, 0xad, 0xb3, 0xff, 0x8d, 0xab, 0xff, 0xcd, 0xb3, 0xff, 0xee, 0xbb, 0xff, 0x0f, 0xbc, 0xff, 0x90, 0xc4, 0xff, 0xd1, 0xc4, 0xff, 0x32, 0xc5, 0xff, 0x53, 0xcd, 0xff, 0x53, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0xd5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0xf6, 0xd5, 0xff, 0xf6, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xd5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x12, 0xbd, 0xff, 0x70, 0xb4, 0xff, 0xef, 0xab, 0xff, 0x6c, 0x9b, 0xff, 0x8a, 0x82, 0xff, 0xe8, 0x61, 0xff, 0x87, 0x49, 0xff, 0x67, 0x39, 0xff, 0x47, 0x39, 0xff, 0x27, 0x31, 0xff, 0x47, 0x31, 0xff, 0x06, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x21, 0xff, 0x48, 0x29, 0xff, 0x48, 0x29, 0xff, 0xa9, 0x31, 0xff, 0xa9, 0x39, 0xff, 0xe6, 0x20, 0xff, 0x68, 0x29, 0xff, 0x68, 0x29, 0xff, 0x68, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x19, 0xff, 0x0a, 0x32, 0xff, 0x43, 0x08, 0xff, 0x63, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x07, 0x21, 0xff, 0x68, 0x29, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x29, 0xff, 0xdc, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x98, 0x95, 0xff, 0x33, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x34, 0x5c, 0xff, 0x13, 0x5c, 0xff, 0xf3, 0x53, 0xff, 0xb2, 0x4b, 0xff, 0xef, 0x3a, 0xff, 0xf3, 0x53, 0xff, 0x58, 0x85, 0xff, 0x30, 0x43, 0xff, 0x4e, 0x22, 0xff, 0x77, 0x8d, 0xff, 0xfe, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xef, 0xff, 0x5b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0xb9, 0xde, 0xff, 0x54, 0xad, 0xff, 0x78, 0xde, 0xff, 0x17, 0xce, 0xff, 0xcc, 0x52, 0xff, 0xd1, 0x7b, 0xff, 0x34, 0xad, 0xff, 0x51, 0x9c, 0xff, 0x2b, 0x52, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x21, 0xff, 0x27, 0x29, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0xa5, 0x20, 0xff, 0x47, 0x39, 0xff, 0x87, 0x41, 0xff, 0x66, 0x49, 0xff, 0xe8, 0x71, 0xff, 0xaa, 0x9a, 0xff, 0x4b, 0xab, 0xff, 0x6c, 0xab, 0xff, 0x8d, 0xab, 0xff, 0x0e, 0xbc, 0xff, 0x70, 0xbc, 0xff, 0x90, 0xc4, 0xff, 0xd1, 0xc4, 0xff, 0x12, 0xcd, 0xff, 0x32, 0xcd, 0xff, 0x73, 0xcd, 0xff, 0x94, 0xd5, 0xff, 0x94, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0x16, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x37, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x16, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xd5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0xf2, 0xbc, 0xff, 0x91, 0xb4, 0xff, 0x0f, 0xac, 0xff, 0x0b, 0x93, 0xff, 0x6a, 0x82, 0xff, 0x29, 0x72, 0xff, 0xe9, 0x59, 0xff, 0xa8, 0x41, 0xff, 0x47, 0x31, 0xff, 0x06, 0x29, 0xff, 0x06, 0x29, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x68, 0x31, 0xff, 0x88, 0x31, 0xff, 0xe6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x88, 0x31, 0xff, 0x47, 0x29, 0xff, 0xc6, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x85, 0x10, 0xff, 0x64, 0x10, 0xff, 0x68, 0x29, 0xff, 0xc9, 0x31, 0xff, 0x23, 0x08, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0x07, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x48, 0x29, 0xff, 0xb8, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xef, 0xff, 0xf6, 0x7c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x54, 0x5c, 0xff, 0x34, 0x5c, 0xff, 0x13, 0x54, 0xff, 0xb2, 0x4b, 0xff, 0x0f, 0x3b, 0xff, 0xb2, 0x4b, 0xff, 0xf6, 0x74, 0xff, 0x54, 0x64, 0xff, 0x71, 0x53, 0xff, 0xf5, 0x7c, 0xff, 0x9d, 0xef, 0xff, 0xdd, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x5c, 0xef, 0xff, 0x3b, 0xe7, 0xff, 0x7c, 0xf7, 0xff, 0x5b, 0xef, 0xff, 0x9d, 0xf7, 0xff, 0x79, 0xd6, 0xff, 0x13, 0xad, 0xff, 0x34, 0xbd, 0xff, 0x34, 0xb5, 0xff, 0x11, 0x84, 0xff, 0xf7, 0xc5, 0xff, 0x17, 0xd6, 0xff, 0x4c, 0x5a, 0xff, 0x44, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x6c, 0x52, 0xff, 0x0a, 0x42, 0xff, 0x07, 0x29, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x20, 0xff, 0x47, 0x31, 0xff, 0x26, 0x31, 0xff, 0x45, 0x49, 0xff, 0x49, 0x7a, 0xff, 0xca, 0x9a, 0xff, 0x2b, 0xab, 0xff, 0xac, 0xb3, 0xff, 0x2f, 0xbc, 0xff, 0x90, 0xc4, 0xff, 0xd1, 0xc4, 0xff, 0xf2, 0xcc, 0xff, 0x12, 0xcd, 0xff, 0x53, 0xcd, 0xff, 0x94, 0xd5, 0xff, 0x94, 0xd5, 0xff, 0xb4, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0x16, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x36, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0x74, 0xcd, 0xff, 0x13, 0xc5, 0xff, 0xb1, 0xbc, 0xff, 0x2f, 0xac, 0xff, 0x6d, 0x9b, 0xff, 0x69, 0x82, 0xff, 0xe8, 0x69, 0xff, 0xe8, 0x59, 0xff, 0xc8, 0x49, 0xff, 0x47, 0x39, 0xff, 0x06, 0x29, 0xff, 0x06, 0x29, 0xff, 0x06, 0x21, 0xff, 0x27, 0x29, 0xff, 0x27, 0x29, 0xff, 0x47, 0x29, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x4b, 0x4a, 0xff, 0x4b, 0x4a, 0xff, 0x43, 0x08, 0xff, 0x64, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x27, 0x21, 0xff, 0x84, 0x10, 0xff, 0xa8, 0x31, 0xff, 0x06, 0x21, 0xff, 0x85, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x85, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x07, 0x21, 0xff, 0x48, 0x29, 0xff, 0x48, 0x21, 0xff, 0x89, 0x31, 0xff, 0xea, 0x39, 0xff, 0x90, 0x73, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xd6, 0xff, 0x34, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x34, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x75, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x54, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0xf2, 0x53, 0xff, 0x51, 0x43, 0xff, 0xf3, 0x53, 0xff, 0x34, 0x5c, 0xff, 0xef, 0x3a, 0xff, 0x92, 0x53, 0xff, 0x91, 0x4b, 0xff, 0x59, 0xb6, 0xff, 0xfe, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xff, 0xff, 0x7c, 0xef, 0xff, 0xda, 0xde, 0xff, 0xfa, 0xe6, 0xff, 0x5c, 0xf7, 0xff, 0xb9, 0xde, 0xff, 0xb9, 0xde, 0xff, 0x38, 0xce, 0xff, 0x91, 0x9c, 0xff, 0xf7, 0xc5, 0xff, 0xbd, 0xff, 0xff, 0xd6, 0xcd, 0xff, 0x0a, 0x52, 0xff, 0x04, 0x08, 0xff, 0x65, 0x10, 0xff, 0x2b, 0x4a, 0xff, 0x6c, 0x52, 0xff, 0xa9, 0x39, 0xff, 0xa9, 0x39, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0x27, 0x31, 0xff, 0xe6, 0x28, 0xff, 0x26, 0x39, 0xff, 0x08, 0x72, 0xff, 0xca, 0x9a, 0xff, 0x2b, 0xab, 0xff, 0x8c, 0xb3, 0xff, 0x4f, 0xbc, 0xff, 0xb0, 0xc4, 0xff, 0x12, 0xcd, 0xff, 0x53, 0xcd, 0xff, 0x53, 0xcd, 0xff, 0x73, 0xd5, 0xff, 0x93, 0xd5, 0xff, 0xb4, 0xd5, 0xff, 0xb4, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0x16, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x36, 0xde, 0xff, 0xf6, 0xd5, 0xff, 0xb5, 0xd5, 0xff, 0xb5, 0xd5, 0xff, 0x94, 0xcd, 0xff, 0x33, 0xc5, 0xff, 0x12, 0xbd, 0xff, 0x91, 0xbc, 0xff, 0x0f, 0xac, 0xff, 0x2c, 0x93, 0xff, 0x29, 0x72, 0xff, 0xc8, 0x59, 0xff, 0xc8, 0x49, 0xff, 0x47, 0x31, 0xff, 0x06, 0x29, 0xff, 0x47, 0x29, 0xff, 0x47, 0x29, 0xff, 0x27, 0x29, 0xff, 0x27, 0x29, 0xff, 0x27, 0x29, 0xff, 0x27, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x44, 0x10, 0xff, 0xe5, 0x18, 0xff, 0x4f, 0x63, 0xff, 0xcd, 0x52, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x06, 0x21, 0xff, 0xa8, 0x29, 0xff, 0x43, 0x10, 0xff, 0xc6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xea, 0x41, 0xff, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3a, 0xb6, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x94, 0x64, 0xff, 0x95, 0x64, 0xff, 0x95, 0x64, 0xff, 0x75, 0x64, 0xff, 0x54, 0x5c, 0xff, 0x33, 0x54, 0xff, 0x92, 0x4b, 0xff, 0x30, 0x3b, 0xff, 0x37, 0x75, 0xff, 0xb2, 0x4b, 0xff, 0xcc, 0x19, 0xff, 0x10, 0x3b, 0xff, 0x3a, 0x9e, 0xff, 0x9d, 0xe7, 0xff, 0xfe, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xbd, 0xf7, 0xff, 0x96, 0xb5, 0xff, 0xf7, 0xbd, 0xff, 0xfa, 0xe6, 0xff, 0x37, 0xce, 0xff, 0x79, 0xd6, 0xff, 0xda, 0xde, 0xff, 0x3b, 0xef, 0xff, 0x96, 0xbd, 0xff, 0x0b, 0x52, 0xff, 0x24, 0x08, 0xff, 0x85, 0x10, 0xff, 0x6c, 0x52, 0xff, 0x2f, 0x6b, 0xff, 0x89, 0x39, 0xff, 0x68, 0x31, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0x48, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0x06, 0x29, 0xff, 0x06, 0x31, 0xff, 0xc7, 0x51, 0xff, 0xaa, 0x92, 0xff, 0x2b, 0xab, 0xff, 0x8c, 0xb3, 0xff, 0x2e, 0xbc, 0xff, 0xb0, 0xc4, 0xff, 0xf1, 0xc4, 0xff, 0x73, 0xcd, 0xff, 0x94, 0xd5, 0xff, 0xb4, 0xd5, 0xff, 0xb5, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0x15, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x57, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0x36, 0xde, 0xff, 0x16, 0xde, 0xff, 0xf5, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0x74, 0xc5, 0xff, 0x53, 0xc5, 0xff, 0x12, 0xc5, 0xff, 0xf2, 0xbc, 0xff, 0x91, 0xb4, 0xff, 0xce, 0xab, 0xff, 0xeb, 0x8a, 0xff, 0x29, 0x6a, 0xff, 0x09, 0x5a, 0xff, 0x67, 0x39, 0xff, 0x26, 0x29, 0xff, 0x67, 0x29, 0xff, 0x47, 0x29, 0xff, 0x48, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x18, 0xff, 0xa4, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0x43, 0x08, 0xff, 0xa5, 0x10, 0xff, 0x6c, 0x4a, 0xff, 0x68, 0x29, 0xff, 0x06, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x27, 0x29, 0xff, 0x26, 0x21, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x85, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x89, 0x29, 0xff, 0xca, 0x31, 0xff, 0x39, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x98, 0x95, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x94, 0x64, 0xff, 0xb5, 0x64, 0xff, 0xd5, 0x6c, 0xff, 0x95, 0x64, 0xff, 0x74, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0xb2, 0x4b, 0xff, 0xef, 0x32, 0xff, 0x75, 0x64, 0xff, 0xda, 0x8d, 0xff, 0x30, 0x43, 0xff, 0xaf, 0x32, 0xff, 0x13, 0x54, 0xff, 0xd8, 0x9d, 0xff, 0xde, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x9d, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x1b, 0xe7, 0xff, 0xb9, 0xd6, 0xff, 0x9d, 0xf7, 0xff, 0xfe, 0xff, 0xff, 0xde, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xd3, 0x9c, 0xff, 0xc6, 0x20, 0xff, 0x24, 0x08, 0xff, 0x28, 0x29, 0xff, 0xad, 0x52, 0xff, 0x4f, 0x6b, 0xff, 0xea, 0x41, 0xff, 0x0b, 0x4a, 0xff, 0x27, 0x29, 0xff, 0xa5, 0x18, 0xff, 0x27, 0x29, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x20, 0xff, 0xc6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x28, 0xff, 0x67, 0x41, 0xff, 0xe8, 0x69, 0xff, 0xeb, 0xa2, 0xff, 0xad, 0xbb, 0xff, 0x2e, 0xc4, 0xff, 0xb0, 0xcc, 0xff, 0xf1, 0xc4, 0xff, 0x12, 0xcd, 0xff, 0x73, 0xd5, 0xff, 0xb5, 0xd5, 0xff, 0xb5, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0x16, 0xde, 0xff, 0x16, 0xde, 0xff, 0x16, 0xde, 0xff, 0x36, 0xde, 0xff, 0x57, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0x36, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0x74, 0xcd, 0xff, 0x53, 0xc5, 0xff, 0x12, 0xbd, 0xff, 0xf2, 0xbc, 0xff, 0xb1, 0xbc, 0xff, 0x50, 0xb4, 0xff, 0x8e, 0x93, 0xff, 0xcc, 0x7a, 0xff, 0x2a, 0x62, 0xff, 0x47, 0x31, 0xff, 0x47, 0x29, 0xff, 0x48, 0x29, 0xff, 0x06, 0x21, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x20, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x43, 0x08, 0xff, 0x43, 0x10, 0xff, 0x64, 0x10, 0xff, 0x85, 0x10, 0xff, 0x06, 0x21, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa4, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe7, 0x20, 0xff, 0xeb, 0x31, 0xff, 0xca, 0x29, 0xff, 0xf5, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xf5, 0x7c, 0xff, 0x53, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x94, 0x64, 0xff, 0xd5, 0x6c, 0xff, 0xf6, 0x6c, 0xff, 0xd5, 0x6c, 0xff, 0xb5, 0x64, 0xff, 0x74, 0x5c, 0xff, 0x13, 0x54, 0xff, 0x92, 0x4b, 0xff, 0x10, 0x3b, 0xff, 0x34, 0x5c, 0xff, 0x95, 0x64, 0xff, 0x92, 0x4b, 0xff, 0x51, 0x3b, 0xff, 0xd6, 0x6c, 0xff, 0x37, 0x7d, 0xff, 0xba, 0xc6, 0xff, 0xdd, 0xff, 0xff, 0x5b, 0xef, 0xff, 0x7b, 0xef, 0xff, 0x3b, 0xef, 0xff, 0xd6, 0xc5, 0xff, 0xf7, 0xc5, 0xff, 0x14, 0xad, 0xff, 0x6c, 0x5a, 0xff, 0xc6, 0x28, 0xff, 0x27, 0x29, 0xff, 0x28, 0x29, 0xff, 0x2c, 0x42, 0xff, 0xb1, 0x73, 0xff, 0x2b, 0x4a, 0xff, 0xeb, 0x41, 0xff, 0x68, 0x31, 0xff, 0x48, 0x31, 0xff, 0x27, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x20, 0xff, 0x47, 0x39, 0xff, 0x86, 0x51, 0xff, 0x69, 0x8a, 0xff, 0xad, 0xbb, 0xff, 0x4f, 0xc4, 0xff, 0xb0, 0xcc, 0xff, 0x12, 0xcd, 0xff, 0x53, 0xcd, 0xff, 0x73, 0xd5, 0xff, 0xb4, 0xdd, 0xff, 0xf5, 0xdd, 0xff, 0xf5, 0xd5, 0xff, 0x16, 0xde, 0xff, 0x16, 0xde, 0xff, 0x16, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xe6, 0xff, 0x56, 0xde, 0xff, 0x57, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0x16, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xd6, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xd5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x53, 0xc5, 0xff, 0x33, 0xc5, 0xff, 0x33, 0xbd, 0xff, 0x12, 0xb5, 0xff, 0xb2, 0xb4, 0xff, 0x50, 0xa4, 0xff, 0x4d, 0x83, 0xff, 0x2a, 0x5a, 0xff, 0x88, 0x39, 0xff, 0x26, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0xa4, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x10, 0xff, 0x43, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x20, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x88, 0x29, 0xff, 0x48, 0x21, 0xff, 0x48, 0x21, 0xff, 0xaa, 0x29, 0xff, 0x0b, 0x32, 0xff, 0xb1, 0x73, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x4b, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xdf, 0xff, 0x94, 0x6c, 0xff, 0x54, 0x64, 0xff, 0x74, 0x64, 0xff, 0x94, 0x64, 0xff, 0x94, 0x64, 0xff, 0xb4, 0x64, 0xff, 0xd5, 0x6c, 0xff, 0xf5, 0x74, 0xff, 0x16, 0x75, 0xff, 0x16, 0x75, 0xff, 0xf5, 0x6c, 0xff, 0xd5, 0x64, 0xff, 0x54, 0x5c, 0xff, 0xf2, 0x53, 0xff, 0xb2, 0x4b, 0xff, 0xf0, 0x3a, 0xff, 0x10, 0x3b, 0xff, 0x51, 0x43, 0xff, 0xd0, 0x32, 0xff, 0x92, 0x43, 0xff, 0x54, 0x54, 0xff, 0x19, 0xae, 0xff, 0xfe, 0xff, 0xff, 0x7c, 0xef, 0xff, 0x3b, 0xe7, 0xff, 0x55, 0xb5, 0xff, 0xac, 0x62, 0xff, 0xc9, 0x49, 0xff, 0x27, 0x31, 0xff, 0x86, 0x20, 0xff, 0xa9, 0x39, 0xff, 0x2b, 0x42, 0xff, 0x0e, 0x63, 0xff, 0xad, 0x5a, 0xff, 0x68, 0x31, 0xff, 0xca, 0x39, 0xff, 0x89, 0x31, 0xff, 0x07, 0x21, 0xff, 0x88, 0x31, 0xff, 0x47, 0x29, 0xff, 0xc6, 0x20, 0xff, 0xa5, 0x20, 0xff, 0xc5, 0x20, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x27, 0x31, 0xff, 0x87, 0x49, 0xff, 0xc7, 0x69, 0xff, 0x4c, 0xab, 0xff, 0x90, 0xc4, 0xff, 0xd1, 0xc4, 0xff, 0x12, 0xcd, 0xff, 0x53, 0xcd, 0xff, 0xb4, 0xd5, 0xff, 0xd4, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0x15, 0xd6, 0xff, 0x16, 0xde, 0xff, 0x36, 0xde, 0xff, 0x16, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xc5, 0xff, 0x53, 0xbd, 0xff, 0x53, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x30, 0x9c, 0xff, 0xcb, 0x72, 0xff, 0x09, 0x52, 0xff, 0x47, 0x31, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x84, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x68, 0x29, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x18, 0xff, 0x06, 0x21, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x21, 0xff, 0x89, 0x29, 0xff, 0x89, 0x21, 0xff, 0x0c, 0x32, 0xff, 0xeb, 0x31, 0xff, 0x6c, 0x52, 0xff, 0xbb, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xc6, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x94, 0x64, 0xff, 0x94, 0x64, 0xff, 0xb4, 0x64, 0xff, 0xb4, 0x6c, 0xff, 0xf5, 0x6c, 0xff, 0x36, 0x75, 0xff, 0x56, 0x7d, 0xff, 0x36, 0x7d, 0xff, 0x36, 0x75, 0xff, 0x16, 0x75, 0xff, 0x94, 0x64, 0xff, 0x33, 0x54, 0xff, 0xd2, 0x4b, 0xff, 0x71, 0x4b, 0xff, 0xf0, 0x3a, 0xff, 0xae, 0x32, 0xff, 0x50, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0x59, 0xae, 0xff, 0xfe, 0xff, 0xff, 0x7c, 0xf7, 0xff, 0x7c, 0xe7, 0xff, 0x7c, 0xe7, 0xff, 0xb7, 0xb5, 0xff, 0xcd, 0x62, 0xff, 0x07, 0x29, 0xff, 0x69, 0x31, 0xff, 0xa9, 0x39, 0xff, 0x4c, 0x4a, 0xff, 0xef, 0x5a, 0xff, 0xcd, 0x5a, 0xff, 0x06, 0x21, 0xff, 0x07, 0x29, 0xff, 0xa9, 0x39, 0xff, 0x88, 0x31, 0xff, 0x47, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x29, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x88, 0x41, 0xff, 0x66, 0x51, 0xff, 0x68, 0x82, 0xff, 0x0e, 0xbc, 0xff, 0xd1, 0xcc, 0xff, 0x32, 0xcd, 0xff, 0x73, 0xd5, 0xff, 0x94, 0xd5, 0xff, 0xf5, 0xdd, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xe6, 0xff, 0x56, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x78, 0xe6, 0xff, 0x78, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xd5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0x74, 0xcd, 0xff, 0x74, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x54, 0xb5, 0xff, 0xb2, 0xac, 0xff, 0xae, 0x8b, 0xff, 0x4a, 0x62, 0xff, 0x88, 0x41, 0xff, 0x27, 0x29, 0xff, 0x06, 0x21, 0xff, 0x47, 0x31, 0xff, 0x06, 0x29, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe5, 0x20, 0xff, 0xc5, 0x20, 0xff, 0xc5, 0x20, 0xff, 0x67, 0x29, 0xff, 0x2b, 0x42, 0xff, 0x84, 0x10, 0xff, 0x27, 0x21, 0xff, 0x89, 0x31, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x85, 0x10, 0xff, 0x44, 0x08, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa6, 0x18, 0xff, 0x69, 0x21, 0xff, 0x48, 0x21, 0xff, 0x0b, 0x32, 0xff, 0x8a, 0x29, 0xff, 0xa9, 0x39, 0xff, 0xd8, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x8c, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x43, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x3a, 0xb6, 0xff, 0x94, 0x64, 0xff, 0x94, 0x64, 0xff, 0xb4, 0x64, 0xff, 0xb4, 0x6c, 0xff, 0xd4, 0x6c, 0xff, 0xd5, 0x74, 0xff, 0x15, 0x75, 0xff, 0x76, 0x7d, 0xff, 0x97, 0x85, 0xff, 0x77, 0x7d, 0xff, 0x77, 0x7d, 0xff, 0x15, 0x75, 0xff, 0xd5, 0x6c, 0xff, 0x53, 0x5c, 0xff, 0x13, 0x5c, 0xff, 0x54, 0x64, 0xff, 0x13, 0x5c, 0xff, 0xd6, 0x6c, 0xff, 0x16, 0x75, 0xff, 0xd5, 0x6c, 0xff, 0xba, 0xc6, 0xff, 0x9c, 0xf7, 0xff, 0x7c, 0xf7, 0xff, 0x3b, 0xdf, 0xff, 0x3b, 0xdf, 0xff, 0x35, 0x9d, 0xff, 0xb1, 0x73, 0xff, 0x6c, 0x4a, 0xff, 0xca, 0x39, 0xff, 0xca, 0x39, 0xff, 0xea, 0x39, 0xff, 0x68, 0x31, 0xff, 0xc6, 0x20, 0xff, 0xa9, 0x39, 0xff, 0x6c, 0x52, 0xff, 0x89, 0x31, 0xff, 0x27, 0x29, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x29, 0xff, 0x06, 0x29, 0xff, 0xe6, 0x28, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc6, 0x20, 0xff, 0x87, 0x49, 0xff, 0xe8, 0x69, 0xff, 0x4b, 0xa3, 0xff, 0x90, 0xc4, 0xff, 0x12, 0xcd, 0xff, 0x93, 0xd5, 0xff, 0xb4, 0xd5, 0xff, 0xf5, 0xdd, 0xff, 0x16, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x57, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x56, 0xe6, 0xff, 0x56, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x78, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x78, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x36, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xd5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0xb4, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x13, 0xb5, 0xff, 0x71, 0xa4, 0xff, 0xec, 0x7a, 0xff, 0x09, 0x5a, 0xff, 0x88, 0x41, 0xff, 0xc5, 0x20, 0xff, 0x27, 0x29, 0xff, 0x2a, 0x52, 0xff, 0x0a, 0x4a, 0xff, 0x47, 0x29, 0xff, 0xc5, 0x20, 0xff, 0xe5, 0x20, 0xff, 0xe5, 0x20, 0xff, 0x84, 0x18, 0xff, 0xe9, 0x39, 0xff, 0x2a, 0x42, 0xff, 0x02, 0x00, 0xff, 0x48, 0x29, 0xff, 0x0a, 0x3a, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x85, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x63, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x27, 0x21, 0xff, 0x68, 0x29, 0xff, 0x68, 0x29, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x07, 0x19, 0xff, 0x27, 0x21, 0xff, 0x07, 0x19, 0xff, 0xc5, 0x10, 0xff, 0x64, 0x10, 0xff, 0x06, 0x19, 0xff, 0xca, 0x29, 0xff, 0x48, 0x21, 0xff, 0x4c, 0x3a, 0xff, 0xcb, 0x29, 0xff, 0xaa, 0x31, 0xff, 0x15, 0xa5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0xd8, 0x9d, 0xff, 0xb4, 0x6c, 0xff, 0xb4, 0x6c, 0xff, 0xd4, 0x6c, 0xff, 0xd4, 0x6c, 0xff, 0xf5, 0x74, 0xff, 0x15, 0x75, 0xff, 0x35, 0x7d, 0xff, 0x97, 0x85, 0xff, 0xb8, 0x8d, 0xff, 0x97, 0x85, 0xff, 0x76, 0x7d, 0xff, 0x36, 0x7d, 0xff, 0x16, 0x75, 0xff, 0xb4, 0x64, 0xff, 0x53, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0xf3, 0x53, 0xff, 0x34, 0x54, 0xff, 0xb6, 0x5c, 0xff, 0x98, 0x7d, 0xff, 0x9c, 0xe7, 0xff, 0x5c, 0xef, 0xff, 0x7c, 0xef, 0xff, 0x1b, 0xdf, 0xff, 0xbb, 0xce, 0xff, 0xb4, 0x84, 0xff, 0x30, 0x5b, 0xff, 0xcf, 0x52, 0xff, 0x6d, 0x4a, 0xff, 0x4c, 0x4a, 0xff, 0xa9, 0x31, 0xff, 0x68, 0x31, 0xff, 0x0b, 0x4a, 0xff, 0x2b, 0x4a, 0xff, 0x47, 0x29, 0xff, 0x85, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x29, 0xff, 0x06, 0x21, 0xff, 0x06, 0x29, 0xff, 0xa5, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x20, 0xff, 0xa7, 0x51, 0xff, 0xca, 0x8a, 0xff, 0x70, 0xc4, 0xff, 0x11, 0xcd, 0xff, 0x93, 0xcd, 0xff, 0xd4, 0xd5, 0xff, 0x15, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x78, 0xe6, 0xff, 0x78, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xb4, 0xc5, 0xff, 0x74, 0xc5, 0xff, 0x54, 0xbd, 0xff, 0xd2, 0xac, 0xff, 0xef, 0x93, 0xff, 0x2d, 0x83, 0xff, 0x4a, 0x62, 0xff, 0x67, 0x39, 0xff, 0x84, 0x18, 0xff, 0x26, 0x29, 0xff, 0x2b, 0x52, 0xff, 0xc9, 0x41, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa4, 0x18, 0xff, 0x0a, 0x42, 0xff, 0x67, 0x31, 0xff, 0x64, 0x10, 0xff, 0xea, 0x39, 0xff, 0x0a, 0x3a, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0x48, 0x21, 0xff, 0x48, 0x21, 0xff, 0xc6, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x19, 0xff, 0x8a, 0x29, 0xff, 0xcb, 0x29, 0xff, 0xef, 0x4a, 0xff, 0x8d, 0x3a, 0xff, 0xeb, 0x31, 0xff, 0x53, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xc7, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x84, 0x7f, 0xef, 0xff, 0x9f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0xd7, 0xff, 0x77, 0x8d, 0xff, 0xd4, 0x6c, 0xff, 0xf5, 0x74, 0xff, 0x15, 0x75, 0xff, 0x15, 0x75, 0xff, 0x15, 0x75, 0xff, 0x35, 0x7d, 0xff, 0x56, 0x85, 0xff, 0xb7, 0x8d, 0xff, 0xf8, 0x95, 0xff, 0xd7, 0x8d, 0xff, 0x97, 0x85, 0xff, 0x77, 0x85, 0xff, 0x16, 0x75, 0xff, 0xd5, 0x6c, 0xff, 0x74, 0x64, 0xff, 0x13, 0x54, 0xff, 0xd2, 0x4b, 0xff, 0x75, 0x64, 0xff, 0xd0, 0x2a, 0xff, 0xb1, 0x53, 0xff, 0x1c, 0xc7, 0xff, 0xbd, 0xf7, 0xff, 0x5b, 0xe7, 0xff, 0xfb, 0xd6, 0xff, 0x59, 0xbe, 0xff, 0xd5, 0x84, 0xff, 0x0f, 0x53, 0xff, 0x6d, 0x42, 0xff, 0x2c, 0x42, 0xff, 0xea, 0x39, 0xff, 0xa9, 0x39, 0xff, 0xca, 0x39, 0xff, 0x89, 0x31, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x88, 0x31, 0xff, 0xe9, 0x41, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x20, 0xff, 0xa5, 0x20, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x06, 0x31, 0xff, 0x48, 0x72, 0xff, 0xad, 0xab, 0xff, 0x12, 0xcd, 0xff, 0x93, 0xd5, 0xff, 0x15, 0xd6, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x57, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x56, 0xde, 0xff, 0x56, 0xe6, 0xff, 0x57, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xee, 0xff, 0xb8, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0x36, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xf5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x13, 0xb5, 0xff, 0xd2, 0xac, 0xff, 0x71, 0xa4, 0xff, 0x6d, 0x8b, 0xff, 0xe8, 0x59, 0xff, 0xa8, 0x51, 0xff, 0x47, 0x31, 0xff, 0xa4, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x29, 0xff, 0x46, 0x29, 0xff, 0x88, 0x31, 0xff, 0x64, 0x10, 0xff, 0xc9, 0x31, 0xff, 0xcd, 0x52, 0xff, 0x0a, 0x3a, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x85, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x07, 0x21, 0xff, 0x68, 0x29, 0xff, 0x06, 0x21, 0xff, 0x44, 0x10, 0xff, 0x85, 0x10, 0xff, 0xaa, 0x31, 0xff, 0x2c, 0x32, 0xff, 0x0c, 0x2a, 0xff, 0x4d, 0x32, 0xff, 0x69, 0x21, 0xff, 0x28, 0x21, 0xff, 0xf2, 0x73, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x9c, 0x7f, 0xef, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xc6, 0xff, 0x77, 0x8d, 0xff, 0xf5, 0x74, 0xff, 0x15, 0x75, 0xff, 0x15, 0x75, 0xff, 0x15, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x96, 0x85, 0xff, 0xb7, 0x8d, 0xff, 0xf8, 0x95, 0xff, 0xd7, 0x8d, 0xff, 0xb7, 0x8d, 0xff, 0x97, 0x85, 0xff, 0x56, 0x7d, 0xff, 0xf5, 0x6c, 0xff, 0xd5, 0x6c, 0xff, 0x94, 0x64, 0xff, 0xb5, 0x64, 0xff, 0x34, 0x54, 0xff, 0x30, 0x3b, 0xff, 0x37, 0x75, 0xff, 0x97, 0x85, 0xff, 0xba, 0xce, 0xff, 0x7c, 0xef, 0xff, 0x58, 0xbe, 0xff, 0xba, 0xce, 0xff, 0x36, 0x95, 0xff, 0x30, 0x53, 0xff, 0xae, 0x4a, 0xff, 0xca, 0x39, 0xff, 0x89, 0x31, 0xff, 0x89, 0x31, 0xff, 0x68, 0x31, 0xff, 0x27, 0x29, 0xff, 0x48, 0x29, 0xff, 0xa9, 0x39, 0xff, 0xea, 0x41, 0xff, 0x68, 0x31, 0xff, 0xc6, 0x20, 0xff, 0x06, 0x29, 0xff, 0x06, 0x29, 0xff, 0xc5, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x08, 0xff, 0x47, 0x39, 0xff, 0x0c, 0x9b, 0xff, 0x90, 0xc4, 0xff, 0x93, 0xcd, 0xff, 0xf5, 0xd5, 0xff, 0x16, 0xde, 0xff, 0x56, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xb8, 0xee, 0xff, 0xd9, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x54, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0xce, 0x9b, 0xff, 0x8a, 0x72, 0xff, 0x09, 0x5a, 0xff, 0x26, 0x39, 0xff, 0x06, 0x31, 0xff, 0x26, 0x31, 0xff, 0x06, 0x29, 0xff, 0x06, 0x29, 0xff, 0x46, 0x29, 0xff, 0x26, 0x29, 0xff, 0x27, 0x29, 0xff, 0xcd, 0x52, 0xff, 0xcd, 0x4a, 0xff, 0x2b, 0x42, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x19, 0xff, 0xe7, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x69, 0x29, 0xff, 0xaa, 0x29, 0xff, 0xcb, 0x29, 0xff, 0x71, 0x53, 0xff, 0x0b, 0x32, 0xff, 0x86, 0x10, 0xff, 0xe7, 0x20, 0xff, 0xee, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xbe, 0xff, 0x76, 0x85, 0xff, 0x15, 0x75, 0xff, 0x35, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x96, 0x85, 0xff, 0xd7, 0x8d, 0xff, 0xf7, 0x95, 0xff, 0xd7, 0x95, 0xff, 0xd7, 0x8d, 0xff, 0xb7, 0x8d, 0xff, 0x76, 0x85, 0xff, 0x36, 0x75, 0xff, 0xf5, 0x6c, 0xff, 0xb4, 0x6c, 0xff, 0x94, 0x64, 0xff, 0x33, 0x54, 0xff, 0x57, 0x7d, 0xff, 0x74, 0x5c, 0xff, 0x73, 0x64, 0xff, 0x5b, 0xe7, 0xff, 0xbd, 0xf7, 0xff, 0xf7, 0xad, 0xff, 0x38, 0xb6, 0xff, 0xb7, 0x9d, 0xff, 0xd2, 0x6b, 0xff, 0x8d, 0x52, 0xff, 0xea, 0x41, 0xff, 0xca, 0x39, 0xff, 0xa9, 0x39, 0xff, 0x68, 0x31, 0xff, 0xc9, 0x39, 0xff, 0x89, 0x39, 0xff, 0xa9, 0x41, 0xff, 0x27, 0x29, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x29, 0xff, 0xe6, 0x28, 0xff, 0xc5, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x44, 0x08, 0xff, 0x67, 0x41, 0xff, 0x2f, 0xb4, 0xff, 0x53, 0xcd, 0xff, 0xf5, 0xd5, 0xff, 0x36, 0xd6, 0xff, 0x56, 0xde, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xcd, 0xff, 0xb5, 0xc5, 0xff, 0x95, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x53, 0xb5, 0xff, 0x53, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x33, 0xbd, 0xff, 0x91, 0xac, 0xff, 0x6d, 0x8b, 0xff, 0xab, 0x72, 0xff, 0xc8, 0x51, 0xff, 0x67, 0x41, 0xff, 0x05, 0x31, 0xff, 0x06, 0x29, 0xff, 0x47, 0x31, 0xff, 0x26, 0x29, 0xff, 0xea, 0x39, 0xff, 0xcd, 0x52, 0xff, 0x2a, 0x42, 0xff, 0x26, 0x29, 0xff, 0x43, 0x08, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x63, 0x10, 0xff, 0xc6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x27, 0x19, 0xff, 0xe6, 0x18, 0xff, 0x85, 0x10, 0xff, 0xaa, 0x29, 0xff, 0xce, 0x4a, 0xff, 0x8d, 0x42, 0xff, 0xcb, 0x31, 0xff, 0xaa, 0x21, 0xff, 0xaa, 0x29, 0xff, 0xca, 0x31, 0xff, 0x69, 0x29, 0xff, 0x4b, 0x4a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x08, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x59, 0xb6, 0xff, 0x56, 0x85, 0xff, 0x35, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x56, 0x85, 0xff, 0x96, 0x85, 0xff, 0xd7, 0x8d, 0xff, 0xf7, 0x95, 0xff, 0xf7, 0x95, 0xff, 0xd7, 0x95, 0xff, 0xd7, 0x8d, 0xff, 0x96, 0x85, 0xff, 0x36, 0x7d, 0xff, 0xf6, 0x74, 0xff, 0x94, 0x64, 0xff, 0x94, 0x64, 0xff, 0xb8, 0x85, 0xff, 0x78, 0x85, 0xff, 0x71, 0x43, 0xff, 0xd2, 0x53, 0xff, 0x5b, 0xdf, 0xff, 0xbc, 0xff, 0xff, 0x3c, 0xdf, 0xff, 0x18, 0xae, 0xff, 0x76, 0x95, 0xff, 0x73, 0x84, 0xff, 0xb1, 0x73, 0xff, 0x2f, 0x6b, 0xff, 0xee, 0x62, 0xff, 0x6c, 0x52, 0xff, 0x4c, 0x52, 0xff, 0x0a, 0x42, 0xff, 0x67, 0x31, 0xff, 0x47, 0x31, 0xff, 0x07, 0x29, 0xff, 0xc6, 0x20, 0xff, 0x27, 0x29, 0xff, 0x26, 0x29, 0xff, 0xc6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x20, 0xff, 0xc6, 0x18, 0xff, 0x24, 0x00, 0xff, 0x29, 0x62, 0xff, 0x72, 0xd5, 0xff, 0x15, 0xd6, 0xff, 0x37, 0xd6, 0xff, 0x56, 0xde, 0xff, 0x76, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xd5, 0xcd, 0xff, 0xb5, 0xc5, 0xff, 0x95, 0xc5, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x33, 0xbd, 0xff, 0x13, 0xb5, 0xff, 0xb2, 0xac, 0xff, 0x71, 0xa4, 0xff, 0x91, 0xac, 0xff, 0x50, 0xac, 0xff, 0x6d, 0x8b, 0xff, 0x69, 0x6a, 0xff, 0xa7, 0x51, 0xff, 0x26, 0x39, 0xff, 0x67, 0x39, 0xff, 0xc5, 0x20, 0xff, 0xc9, 0x39, 0xff, 0x4b, 0x4a, 0xff, 0x26, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x43, 0x08, 0xff, 0x27, 0x21, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x21, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x06, 0x19, 0xff, 0x48, 0x21, 0xff, 0x69, 0x21, 0xff, 0x8a, 0x29, 0xff, 0xec, 0x39, 0xff, 0x4d, 0x3a, 0xff, 0xeb, 0x29, 0xff, 0x4d, 0x3a, 0xff, 0x2c, 0x3a, 0xff, 0x89, 0x21, 0xff, 0xaa, 0x29, 0xff, 0x4c, 0x3a, 0xff, 0x07, 0x19, 0xff, 0xa9, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x10, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xe7, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xae, 0xff, 0x56, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x56, 0x7d, 0xff, 0x56, 0x85, 0xff, 0x56, 0x85, 0xff, 0x55, 0x85, 0xff, 0x55, 0x85, 0xff, 0x76, 0x85, 0xff, 0xb7, 0x8d, 0xff, 0xd7, 0x95, 0xff, 0xf7, 0x95, 0xff, 0xd7, 0x95, 0xff, 0xd7, 0x95, 0xff, 0x96, 0x8d, 0xff, 0x77, 0x85, 0xff, 0x76, 0x85, 0xff, 0x16, 0x75, 0xff, 0x19, 0x9e, 0xff, 0xb7, 0x8d, 0xff, 0x73, 0x5c, 0xff, 0x71, 0x43, 0xff, 0xb1, 0x4b, 0xff, 0xbb, 0xbe, 0xff, 0xdc, 0xff, 0xff, 0xfa, 0xde, 0xff, 0x36, 0x8d, 0xff, 0x15, 0x8d, 0xff, 0xf8, 0xb5, 0xff, 0xb0, 0x73, 0xff, 0x4f, 0x6b, 0xff, 0x2e, 0x6b, 0xff, 0x4b, 0x52, 0xff, 0x2b, 0x4a, 0xff, 0x68, 0x31, 0xff, 0x89, 0x39, 0xff, 0x68, 0x31, 0xff, 0x68, 0x31, 0xff, 0xc9, 0x41, 0xff, 0xa8, 0x41, 0xff, 0x47, 0x31, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x44, 0x08, 0xff, 0xec, 0x7a, 0xff, 0xf5, 0xe5, 0xff, 0xb8, 0xee, 0xff, 0xd9, 0xee, 0xff, 0x77, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x76, 0xe6, 0xff, 0x76, 0xe6, 0xff, 0x76, 0xe6, 0xff, 0x76, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xde, 0xff, 0x98, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xd6, 0xff, 0x36, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf5, 0xcd, 0xff, 0xb5, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x74, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0xb1, 0xac, 0xff, 0x91, 0xa4, 0xff, 0x30, 0xa4, 0xff, 0x0f, 0x9c, 0xff, 0x0f, 0x9c, 0xff, 0xae, 0x93, 0xff, 0x0c, 0x83, 0xff, 0x49, 0x62, 0xff, 0x88, 0x49, 0xff, 0xa8, 0x41, 0xff, 0xe9, 0x41, 0xff, 0xc5, 0x20, 0xff, 0xc5, 0x20, 0xff, 0x27, 0x29, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x19, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x07, 0x21, 0xff, 0x06, 0x21, 0xff, 0x06, 0x19, 0xff, 0xca, 0x31, 0xff, 0xaa, 0x31, 0xff, 0x48, 0x21, 0xff, 0xca, 0x31, 0xff, 0xad, 0x4a, 0xff, 0x4c, 0x3a, 0xff, 0xeb, 0x31, 0xff, 0xca, 0x29, 0xff, 0x08, 0x19, 0xff, 0x89, 0x29, 0xff, 0x07, 0x21, 0xff, 0x85, 0x10, 0xff, 0x69, 0x29, 0xff, 0xeb, 0x31, 0xff, 0xca, 0x29, 0xff, 0xca, 0x29, 0xff, 0x68, 0x31, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x20, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0xa6, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x56, 0x7d, 0xff, 0x56, 0x7d, 0xff, 0x55, 0x85, 0xff, 0x55, 0x85, 0xff, 0x55, 0x85, 0xff, 0x76, 0x85, 0xff, 0xb6, 0x8d, 0xff, 0xd7, 0x95, 0xff, 0xf7, 0x95, 0xff, 0xd7, 0x95, 0xff, 0xd7, 0x8d, 0xff, 0xb6, 0x8d, 0xff, 0x96, 0x8d, 0xff, 0xf8, 0x95, 0xff, 0x18, 0x9e, 0xff, 0x9a, 0xb6, 0xff, 0x15, 0x7d, 0xff, 0xf6, 0x6c, 0xff, 0xb7, 0x8d, 0xff, 0x36, 0x75, 0xff, 0xf8, 0x9d, 0xff, 0x9c, 0xf7, 0xff, 0x3b, 0xe7, 0xff, 0x38, 0xb6, 0xff, 0x77, 0x95, 0xff, 0x9a, 0xbe, 0xff, 0xd7, 0xb5, 0xff, 0x51, 0x8c, 0xff, 0xed, 0x62, 0xff, 0xea, 0x49, 0xff, 0xa9, 0x39, 0xff, 0x27, 0x29, 0xff, 0x48, 0x31, 0xff, 0x47, 0x31, 0xff, 0xc9, 0x41, 0xff, 0x2a, 0x52, 0xff, 0xa8, 0x41, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa4, 0x20, 0xff, 0xa4, 0x18, 0xff, 0xc8, 0x49, 0xff, 0x4a, 0x6a, 0xff, 0x8e, 0x93, 0xff, 0x73, 0xcd, 0xff, 0xb7, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xe6, 0xff, 0x56, 0xde, 0xff, 0x56, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x56, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x77, 0xd6, 0xff, 0x98, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xd6, 0xff, 0xf5, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x12, 0xad, 0xff, 0xd2, 0xac, 0xff, 0x91, 0xac, 0xff, 0x50, 0xa4, 0xff, 0x30, 0xa4, 0xff, 0x30, 0xa4, 0xff, 0xef, 0x9b, 0xff, 0xae, 0x93, 0xff, 0x4c, 0x8b, 0xff, 0x4a, 0x62, 0xff, 0x6b, 0x62, 0xff, 0x09, 0x52, 0xff, 0xa4, 0x20, 0xff, 0x06, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc6, 0x20, 0xff, 0x27, 0x21, 0xff, 0x85, 0x10, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x08, 0xff, 0x84, 0x10, 0xff, 0x27, 0x21, 0xff, 0x07, 0x21, 0xff, 0x47, 0x29, 0xff, 0x68, 0x29, 0xff, 0xa9, 0x29, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x88, 0x29, 0xff, 0x68, 0x29, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x28, 0x21, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x68, 0x31, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x9d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x85, 0xff, 0x76, 0x85, 0xff, 0x96, 0x8d, 0xff, 0xd7, 0x95, 0xff, 0xd7, 0x95, 0xff, 0xd7, 0x95, 0xff, 0xd7, 0x95, 0xff, 0xb6, 0x8d, 0xff, 0x96, 0x85, 0xff, 0x96, 0x85, 0xff, 0x76, 0x85, 0xff, 0x76, 0x85, 0xff, 0xf6, 0x6c, 0xff, 0x58, 0x7d, 0xff, 0x37, 0x7d, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x6c, 0xff, 0x3b, 0xdf, 0xff, 0x3b, 0xe7, 0xff, 0x79, 0xc6, 0xff, 0xb7, 0xa5, 0xff, 0x35, 0x8d, 0xff, 0x79, 0xbe, 0xff, 0x35, 0xa5, 0xff, 0x0a, 0x4a, 0xff, 0x89, 0x39, 0xff, 0x4c, 0x4a, 0xff, 0x2b, 0x4a, 0xff, 0x89, 0x39, 0xff, 0xa9, 0x41, 0xff, 0x88, 0x41, 0xff, 0xa9, 0x39, 0xff, 0x07, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x31, 0xff, 0xe5, 0x28, 0xff, 0xc5, 0x28, 0xff, 0x26, 0x41, 0xff, 0x2c, 0x8b, 0xff, 0xb4, 0xdd, 0xff, 0xb8, 0xee, 0xff, 0xb7, 0xe6, 0xff, 0x56, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xe6, 0xff, 0x56, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x76, 0xe6, 0xff, 0x56, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x98, 0xde, 0xff, 0x19, 0xe7, 0xff, 0xf9, 0xee, 0xff, 0x77, 0xe6, 0xff, 0x74, 0xcd, 0xff, 0xd2, 0xbc, 0xff, 0x10, 0xa4, 0xff, 0x8e, 0x93, 0xff, 0x8e, 0x8b, 0xff, 0xcc, 0x72, 0xff, 0x2e, 0x83, 0xff, 0x8f, 0x93, 0xff, 0x8e, 0x93, 0xff, 0x92, 0xa4, 0xff, 0x54, 0xbd, 0xff, 0x95, 0xc5, 0xff, 0xb5, 0xc5, 0xff, 0x95, 0xc5, 0xff, 0x75, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x53, 0xb5, 0xff, 0x12, 0xb5, 0xff, 0xd2, 0xac, 0xff, 0x91, 0xa4, 0xff, 0x71, 0xa4, 0xff, 0x50, 0xa4, 0xff, 0x30, 0xa4, 0xff, 0xef, 0x9b, 0xff, 0xef, 0x93, 0xff, 0xef, 0x9b, 0xff, 0x6d, 0x83, 0xff, 0x6a, 0x62, 0xff, 0xa8, 0x49, 0xff, 0x26, 0x31, 0xff, 0xe5, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa4, 0x18, 0xff, 0x63, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x84, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x85, 0x10, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x23, 0x08, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0x85, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x48, 0x21, 0xff, 0x48, 0x21, 0xff, 0x07, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x08, 0xff, 0x48, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x08, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd8, 0x9d, 0xff, 0x55, 0x85, 0xff, 0x35, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x85, 0xff, 0x55, 0x85, 0xff, 0x56, 0x85, 0xff, 0x96, 0x8d, 0xff, 0xb7, 0x8d, 0xff, 0xd7, 0x95, 0xff, 0xb7, 0x8d, 0xff, 0xd7, 0x95, 0xff, 0xb6, 0x8d, 0xff, 0xd7, 0x95, 0xff, 0x76, 0x85, 0xff, 0xf8, 0x95, 0xff, 0xb8, 0x8d, 0xff, 0xf6, 0x74, 0xff, 0x13, 0x5c, 0xff, 0xb1, 0x4b, 0xff, 0xb2, 0x53, 0xff, 0x74, 0x64, 0xff, 0x59, 0xb6, 0xff, 0x3a, 0xdf, 0xff, 0x98, 0xc6, 0xff, 0x79, 0xbe, 0xff, 0x56, 0x95, 0xff, 0xb7, 0x9d, 0xff, 0x59, 0xbe, 0xff, 0x93, 0x94, 0xff, 0xcc, 0x5a, 0xff, 0x8c, 0x52, 0xff, 0xea, 0x49, 0xff, 0xe9, 0x49, 0xff, 0x0a, 0x4a, 0xff, 0xa9, 0x39, 0xff, 0x07, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x20, 0xff, 0x84, 0x18, 0xff, 0x06, 0x21, 0xff, 0x06, 0x31, 0xff, 0x26, 0x39, 0xff, 0xc5, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x28, 0xff, 0xe8, 0x61, 0xff, 0x4d, 0x9b, 0xff, 0x32, 0xd5, 0xff, 0x56, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0x56, 0xd6, 0xff, 0x35, 0xd6, 0xff, 0x35, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x57, 0xde, 0xff, 0x56, 0xde, 0xff, 0x37, 0xde, 0xff, 0x57, 0xde, 0xff, 0x98, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0xf5, 0xd5, 0xff, 0x13, 0xc5, 0xff, 0xae, 0x9b, 0xff, 0x8a, 0x7a, 0xff, 0xa8, 0x61, 0xff, 0x67, 0x49, 0xff, 0x26, 0x41, 0xff, 0x06, 0x31, 0xff, 0xe6, 0x28, 0xff, 0xc6, 0x28, 0xff, 0x48, 0x39, 0xff, 0x0a, 0x5a, 0xff, 0xea, 0x59, 0xff, 0xc9, 0x51, 0xff, 0x8c, 0x6a, 0xff, 0xcc, 0x6a, 0xff, 0x0d, 0x73, 0xff, 0xaf, 0x83, 0xff, 0x72, 0xa4, 0xff, 0x91, 0xa4, 0xff, 0xd2, 0xac, 0xff, 0x34, 0xbd, 0xff, 0xd2, 0xac, 0xff, 0x91, 0xa4, 0xff, 0x70, 0xa4, 0xff, 0x50, 0xa4, 0xff, 0x50, 0xa4, 0xff, 0x50, 0x9c, 0xff, 0x0f, 0x9c, 0xff, 0x10, 0x9c, 0xff, 0x30, 0x9c, 0xff, 0x6a, 0x62, 0xff, 0x26, 0x31, 0xff, 0x06, 0x31, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe5, 0x18, 0xff, 0x64, 0x08, 0xff, 0xe5, 0x18, 0xff, 0xe5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0x27, 0x21, 0xff, 0x48, 0x21, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x48, 0x21, 0xff, 0xe7, 0x18, 0xff, 0x85, 0x10, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xea, 0x31, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x10, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x9d, 0xff, 0x55, 0x85, 0xff, 0x35, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x55, 0x85, 0xff, 0x55, 0x85, 0xff, 0x76, 0x85, 0xff, 0x96, 0x8d, 0xff, 0xb7, 0x8d, 0xff, 0xb7, 0x8d, 0xff, 0x96, 0x8d, 0xff, 0xb7, 0x8d, 0xff, 0x18, 0x9e, 0xff, 0x18, 0x9e, 0xff, 0x19, 0x9e, 0xff, 0xd4, 0x74, 0xff, 0x73, 0x64, 0xff, 0x73, 0x64, 0xff, 0xb4, 0x6c, 0xff, 0xf8, 0x9d, 0xff, 0x18, 0x9e, 0xff, 0x77, 0x8d, 0xff, 0xb7, 0x9d, 0xff, 0xdb, 0xce, 0xff, 0x99, 0xc6, 0xff, 0x96, 0xa5, 0xff, 0x35, 0x95, 0xff, 0x55, 0x9d, 0xff, 0x75, 0xad, 0xff, 0x10, 0x84, 0xff, 0xac, 0x5a, 0xff, 0xea, 0x49, 0xff, 0xe9, 0x49, 0xff, 0xc9, 0x41, 0xff, 0x68, 0x31, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x26, 0x29, 0xff, 0x26, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x23, 0x00, 0xff, 0xe8, 0x51, 0xff, 0x90, 0xb4, 0xff, 0x2f, 0x9c, 0xff, 0x4d, 0x83, 0xff, 0xc9, 0x49, 0xff, 0xc5, 0x20, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x20, 0xff, 0xa8, 0x51, 0xff, 0xcb, 0x8a, 0xff, 0x4f, 0xb4, 0xff, 0x15, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x15, 0xd6, 0xff, 0x15, 0xd6, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x16, 0xde, 0xff, 0x54, 0xc5, 0xff, 0x0f, 0x9c, 0xff, 0x2d, 0x8b, 0xff, 0x6a, 0x72, 0xff, 0x46, 0x49, 0xff, 0xe5, 0x30, 0xff, 0x06, 0x31, 0xff, 0x47, 0x31, 0xff, 0x27, 0x31, 0xff, 0x07, 0x31, 0xff, 0x07, 0x31, 0xff, 0xe6, 0x30, 0xff, 0xe6, 0x30, 0xff, 0xa5, 0x28, 0xff, 0xa8, 0x51, 0xff, 0x8c, 0x72, 0xff, 0xe9, 0x59, 0xff, 0xc9, 0x51, 0xff, 0x2a, 0x5a, 0xff, 0x4a, 0x62, 0xff, 0xac, 0x6a, 0xff, 0x8e, 0x8b, 0xff, 0xae, 0x8b, 0xff, 0x30, 0x9c, 0xff, 0xd2, 0xac, 0xff, 0x13, 0xb5, 0xff, 0xd2, 0xac, 0xff, 0xb1, 0xac, 0xff, 0x91, 0xa4, 0xff, 0x91, 0xa4, 0xff, 0x71, 0xa4, 0xff, 0x50, 0x9c, 0xff, 0x50, 0x9c, 0xff, 0x30, 0x9c, 0xff, 0x0c, 0x73, 0xff, 0xc8, 0x49, 0xff, 0x67, 0x39, 0xff, 0x88, 0x31, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x47, 0x21, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x07, 0x21, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x68, 0x29, 0xff, 0xa9, 0x31, 0xff, 0x68, 0x21, 0xff, 0x48, 0x29, 0xff, 0x89, 0x29, 0xff, 0x0b, 0x32, 0xff, 0x28, 0x21, 0xff, 0x07, 0x19, 0xff, 0x88, 0x31, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x10, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xa5, 0xff, 0x75, 0x85, 0xff, 0x55, 0x85, 0xff, 0x55, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x55, 0x7d, 0xff, 0x76, 0x85, 0xff, 0x96, 0x8d, 0xff, 0x96, 0x85, 0xff, 0x56, 0x85, 0xff, 0xf8, 0x95, 0xff, 0xb7, 0x8d, 0xff, 0xb7, 0x8d, 0xff, 0x15, 0x7d, 0xff, 0x94, 0x6c, 0xff, 0x16, 0x7d, 0xff, 0xb4, 0x6c, 0xff, 0x19, 0xa6, 0xff, 0xba, 0xbe, 0xff, 0x12, 0x5c, 0xff, 0x73, 0x64, 0xff, 0x91, 0x4b, 0xff, 0x13, 0x5c, 0xff, 0x39, 0xb6, 0xff, 0x99, 0xc6, 0xff, 0x17, 0xb6, 0xff, 0xd7, 0xb5, 0xff, 0xf4, 0x9c, 0xff, 0x72, 0x94, 0xff, 0x72, 0x94, 0xff, 0x90, 0x73, 0xff, 0x8c, 0x52, 0xff, 0xa9, 0x31, 0xff, 0x48, 0x29, 0xff, 0x88, 0x39, 0xff, 0xe9, 0x41, 0xff, 0xa8, 0x39, 0xff, 0x27, 0x29, 0xff, 0xe5, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x02, 0x00, 0xff, 0x29, 0x52, 0xff, 0x56, 0xee, 0xff, 0x35, 0xde, 0xff, 0x35, 0xe6, 0xff, 0x53, 0xcd, 0xff, 0xee, 0x9b, 0xff, 0x29, 0x5a, 0xff, 0xe6, 0x20, 0xff, 0x64, 0x08, 0xff, 0x64, 0x18, 0xff, 0x46, 0x59, 0xff, 0xeb, 0xa2, 0xff, 0x90, 0xc4, 0xff, 0xd5, 0xdd, 0xff, 0x36, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x15, 0xd6, 0xff, 0xf5, 0xd5, 0xff, 0x16, 0xde, 0xff, 0x74, 0xd5, 0xff, 0x0f, 0xac, 0xff, 0x6a, 0x72, 0xff, 0x46, 0x51, 0xff, 0x83, 0x30, 0xff, 0xa4, 0x28, 0xff, 0x06, 0x31, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x20, 0xff, 0x06, 0x31, 0xff, 0x67, 0x49, 0xff, 0x09, 0x6a, 0xff, 0x4d, 0x8b, 0xff, 0x10, 0xa4, 0xff, 0x10, 0x9c, 0xff, 0xd2, 0xb4, 0xff, 0x74, 0xc5, 0xff, 0x54, 0xbd, 0xff, 0x13, 0xb5, 0xff, 0x54, 0xbd, 0xff, 0x75, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x13, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x54, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0xf2, 0xac, 0xff, 0xd2, 0xac, 0xff, 0xb2, 0xac, 0xff, 0xb1, 0xa4, 0xff, 0xd2, 0xac, 0xff, 0xb2, 0xa4, 0xff, 0x70, 0x9c, 0xff, 0x4d, 0x7b, 0xff, 0x09, 0x52, 0xff, 0x46, 0x31, 0xff, 0xc9, 0x39, 0xff, 0x47, 0x29, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x21, 0xff, 0x27, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x47, 0x29, 0xff, 0x26, 0x21, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x06, 0x21, 0xff, 0x06, 0x21, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0x89, 0x31, 0xff, 0x89, 0x31, 0xff, 0xaa, 0x29, 0xff, 0xcb, 0x31, 0xff, 0x6d, 0x42, 0xff, 0xef, 0x4a, 0xff, 0x89, 0x29, 0xff, 0xc6, 0x20, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x10, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x18, 0xa6, 0xff, 0x96, 0x8d, 0xff, 0x55, 0x85, 0xff, 0x55, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0xf4, 0x74, 0xff, 0xf4, 0x74, 0xff, 0xf4, 0x74, 0xff, 0x15, 0x75, 0xff, 0x35, 0x7d, 0xff, 0x56, 0x85, 0xff, 0x96, 0x85, 0xff, 0x76, 0x85, 0xff, 0x76, 0x85, 0xff, 0xf8, 0x95, 0xff, 0xf4, 0x74, 0xff, 0xf5, 0x74, 0xff, 0xf5, 0x74, 0xff, 0xb4, 0x6c, 0xff, 0x53, 0x64, 0xff, 0x36, 0x7d, 0xff, 0x39, 0xa6, 0xff, 0x12, 0x64, 0xff, 0xee, 0x32, 0xff, 0x13, 0x5c, 0xff, 0x50, 0x43, 0xff, 0xb1, 0x53, 0xff, 0x94, 0x6c, 0xff, 0xb4, 0x7c, 0xff, 0x36, 0x95, 0xff, 0x72, 0x6c, 0xff, 0x36, 0x8d, 0xff, 0xb7, 0x9d, 0xff, 0xf4, 0x8c, 0xff, 0x52, 0x84, 0xff, 0x6f, 0x63, 0xff, 0x2b, 0x42, 0xff, 0xa9, 0x39, 0xff, 0xc9, 0x41, 0xff, 0x88, 0x39, 0xff, 0x07, 0x21, 0xff, 0x06, 0x29, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x23, 0x08, 0xff, 0xa8, 0x39, 0xff, 0x12, 0xbd, 0xff, 0x12, 0xc5, 0xff, 0x12, 0xbd, 0xff, 0x52, 0xc5, 0xff, 0xd4, 0xdd, 0xff, 0x95, 0xe5, 0xff, 0xcf, 0xa3, 0xff, 0x09, 0x62, 0xff, 0x27, 0x39, 0xff, 0xc5, 0x28, 0xff, 0x25, 0x49, 0xff, 0x45, 0x69, 0xff, 0x0b, 0xab, 0xff, 0x93, 0xdd, 0xff, 0x15, 0xd6, 0xff, 0x15, 0xd6, 0xff, 0x16, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xf5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0xf5, 0xdd, 0xff, 0x2f, 0xb4, 0xff, 0x28, 0x7a, 0xff, 0xc4, 0x40, 0xff, 0x84, 0x28, 0xff, 0xa4, 0x28, 0xff, 0xe6, 0x30, 0xff, 0xe5, 0x28, 0xff, 0x84, 0x18, 0xff, 0x85, 0x20, 0xff, 0xa5, 0x20, 0xff, 0x26, 0x39, 0xff, 0x8b, 0x72, 0xff, 0xaf, 0xa3, 0xff, 0x91, 0xbc, 0xff, 0x95, 0xd5, 0xff, 0x37, 0xe6, 0xff, 0x78, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x99, 0xde, 0xff, 0x99, 0xde, 0xff, 0xb9, 0xde, 0xff, 0x78, 0xde, 0xff, 0xd6, 0xcd, 0xff, 0x95, 0xc5, 0xff, 0xb5, 0xc5, 0xff, 0xb5, 0xc5, 0xff, 0x75, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0xf2, 0xac, 0xff, 0xf2, 0xac, 0xff, 0x13, 0xb5, 0xff, 0xf2, 0xac, 0xff, 0xf2, 0xac, 0xff, 0x13, 0xb5, 0xff, 0xd2, 0xac, 0xff, 0x8e, 0x83, 0xff, 0xc8, 0x51, 0xff, 0x26, 0x31, 0xff, 0x0a, 0x4a, 0xff, 0x88, 0x39, 0xff, 0x06, 0x21, 0xff, 0xe6, 0x20, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x27, 0x21, 0xff, 0x06, 0x21, 0xff, 0x64, 0x08, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0x64, 0x10, 0xff, 0x85, 0x10, 0xff, 0xc6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x48, 0x29, 0xff, 0x69, 0x29, 0xff, 0xaa, 0x31, 0xff, 0x8d, 0x42, 0xff, 0xd1, 0x63, 0xff, 0xad, 0x4a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x08, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x59, 0xae, 0xff, 0x96, 0x8d, 0xff, 0x55, 0x85, 0xff, 0x35, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0xd4, 0x74, 0xff, 0xd4, 0x74, 0xff, 0xd4, 0x6c, 0xff, 0xd4, 0x74, 0xff, 0xd4, 0x74, 0xff, 0x15, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x56, 0x7d, 0xff, 0x76, 0x85, 0xff, 0x97, 0x85, 0xff, 0x77, 0x85, 0xff, 0x77, 0x85, 0xff, 0xf5, 0x74, 0xff, 0xb4, 0x6c, 0xff, 0x77, 0x85, 0xff, 0x56, 0x85, 0xff, 0x73, 0x64, 0xff, 0xf2, 0x5b, 0xff, 0x71, 0x4b, 0xff, 0xd2, 0x53, 0xff, 0xb1, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0x71, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0x30, 0x43, 0xff, 0x10, 0x33, 0xff, 0xd4, 0x7c, 0xff, 0x38, 0xae, 0xff, 0x15, 0x85, 0xff, 0x92, 0x7c, 0xff, 0x93, 0x8c, 0xff, 0x6f, 0x6b, 0xff, 0x0a, 0x42, 0xff, 0x88, 0x31, 0xff, 0x67, 0x31, 0xff, 0x88, 0x39, 0xff, 0x87, 0x41, 0xff, 0x68, 0x31, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe5, 0x20, 0xff, 0x30, 0x9c, 0xff, 0x71, 0xb4, 0xff, 0x6e, 0x8b, 0xff, 0x6a, 0x62, 0xff, 0x6b, 0x5a, 0xff, 0xcc, 0x6a, 0xff, 0x0d, 0x7b, 0xff, 0x0d, 0x83, 0xff, 0xcc, 0x7a, 0xff, 0x2a, 0x62, 0xff, 0x88, 0x51, 0xff, 0x05, 0x41, 0xff, 0x05, 0x61, 0xff, 0xcd, 0xb3, 0xff, 0x56, 0xe6, 0xff, 0xf5, 0xd5, 0xff, 0x15, 0xd6, 0xff, 0x15, 0xd6, 0xff, 0xf5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0x16, 0xde, 0xff, 0xea, 0x8a, 0xff, 0x82, 0x48, 0xff, 0xa4, 0x30, 0xff, 0xc5, 0x28, 0xff, 0x84, 0x20, 0xff, 0xa4, 0x28, 0xff, 0xe5, 0x38, 0xff, 0x87, 0x51, 0xff, 0x09, 0x6a, 0xff, 0xec, 0x8a, 0xff, 0xef, 0xab, 0xff, 0xb2, 0xc4, 0xff, 0x33, 0xd5, 0xff, 0x54, 0xdd, 0xff, 0x33, 0xd5, 0xff, 0x53, 0xcd, 0xff, 0x54, 0xcd, 0xff, 0x95, 0xd5, 0xff, 0xd6, 0xd5, 0xff, 0x17, 0xd6, 0xff, 0x58, 0xd6, 0xff, 0x37, 0xce, 0xff, 0x16, 0xce, 0xff, 0xf6, 0xcd, 0xff, 0xb5, 0xc5, 0xff, 0x95, 0xc5, 0xff, 0x95, 0xbd, 0xff, 0x95, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0xf3, 0xb4, 0xff, 0xf2, 0xac, 0xff, 0x33, 0xb5, 0xff, 0xf3, 0xac, 0xff, 0x8e, 0x8b, 0xff, 0x87, 0x49, 0xff, 0x88, 0x39, 0xff, 0x0a, 0x42, 0xff, 0x88, 0x31, 0xff, 0x47, 0x29, 0xff, 0x06, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x89, 0x29, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0x2c, 0x3a, 0xff, 0xf2, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x79, 0xb6, 0xff, 0x96, 0x8d, 0xff, 0x35, 0x85, 0xff, 0x15, 0x7d, 0xff, 0xf4, 0x74, 0xff, 0xb4, 0x6c, 0xff, 0x93, 0x6c, 0xff, 0x93, 0x6c, 0xff, 0x94, 0x6c, 0xff, 0xb4, 0x6c, 0xff, 0xf5, 0x74, 0xff, 0xf5, 0x74, 0xff, 0x15, 0x7d, 0xff, 0x36, 0x7d, 0xff, 0xd5, 0x74, 0xff, 0xf5, 0x74, 0xff, 0x16, 0x75, 0xff, 0xb5, 0x6c, 0xff, 0xf6, 0x74, 0xff, 0x36, 0x85, 0xff, 0xf2, 0x5b, 0xff, 0x54, 0x6c, 0xff, 0xf2, 0x63, 0xff, 0xce, 0x3a, 0xff, 0x12, 0x64, 0xff, 0xf5, 0x7c, 0xff, 0x0f, 0x3b, 0xff, 0x12, 0x64, 0xff, 0xb4, 0x74, 0xff, 0x36, 0x85, 0xff, 0x98, 0x95, 0xff, 0xb7, 0x95, 0xff, 0x76, 0x85, 0xff, 0xf5, 0x7c, 0xff, 0x35, 0x95, 0xff, 0x14, 0x9d, 0xff, 0x31, 0x7c, 0xff, 0xd0, 0x73, 0xff, 0xd0, 0x73, 0xff, 0x0d, 0x63, 0xff, 0x2c, 0x73, 0xff, 0xcb, 0x6a, 0xff, 0x88, 0x39, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x29, 0xff, 0x84, 0x10, 0xff, 0xec, 0x62, 0xff, 0x8f, 0x83, 0xff, 0x27, 0x31, 0xff, 0xa5, 0x18, 0xff, 0xe7, 0x18, 0xff, 0xa7, 0x10, 0xff, 0xe7, 0x20, 0xff, 0x28, 0x21, 0xff, 0x27, 0x29, 0xff, 0xea, 0x51, 0xff, 0x6b, 0x6a, 0xff, 0x6b, 0x6a, 0xff, 0x66, 0x61, 0xff, 0x0b, 0x93, 0xff, 0x36, 0xde, 0xff, 0x15, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0x36, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xf5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0x0f, 0xac, 0xff, 0x05, 0x51, 0xff, 0xc4, 0x40, 0xff, 0x66, 0x51, 0xff, 0xe8, 0x61, 0xff, 0xcb, 0x82, 0xff, 0x4d, 0xa3, 0xff, 0xce, 0xb3, 0xff, 0xef, 0xb3, 0xff, 0x8e, 0x9b, 0xff, 0x2d, 0x8b, 0xff, 0x8b, 0x6a, 0xff, 0x6a, 0x62, 0xff, 0x2a, 0x5a, 0xff, 0x09, 0x52, 0xff, 0x6b, 0x6a, 0xff, 0x8a, 0x72, 0xff, 0x6d, 0x9b, 0xff, 0xef, 0xb3, 0xff, 0x91, 0xbc, 0xff, 0x33, 0xc5, 0xff, 0x94, 0xc5, 0xff, 0x95, 0xc5, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0x74, 0xbd, 0xff, 0x74, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x33, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0x34, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x13, 0xad, 0xff, 0x91, 0xa4, 0xff, 0x6e, 0x8b, 0xff, 0xc8, 0x51, 0xff, 0xe9, 0x49, 0xff, 0x4b, 0x4a, 0xff, 0x68, 0x31, 0xff, 0x27, 0x21, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x20, 0xff, 0xa5, 0x10, 0xff, 0x47, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x21, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x68, 0x29, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x69, 0x21, 0xff, 0xaa, 0x29, 0xff, 0x48, 0x21, 0xff, 0xc6, 0x18, 0xff, 0x48, 0x21, 0xff, 0x68, 0x21, 0xff, 0x27, 0x21, 0xff, 0x07, 0x21, 0xff, 0x4c, 0x42, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x79, 0xb6, 0xff, 0x96, 0x8d, 0xff, 0x35, 0x85, 0xff, 0x14, 0x7d, 0xff, 0xd4, 0x74, 0xff, 0x93, 0x6c, 0xff, 0x53, 0x64, 0xff, 0x53, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x94, 0x6c, 0xff, 0xb5, 0x6c, 0xff, 0xd5, 0x74, 0xff, 0x94, 0x64, 0xff, 0x94, 0x64, 0xff, 0xd5, 0x6c, 0xff, 0x74, 0x64, 0xff, 0xb4, 0x6c, 0xff, 0x16, 0x75, 0xff, 0x12, 0x5c, 0xff, 0xd2, 0x5b, 0xff, 0x53, 0x6c, 0xff, 0x50, 0x4b, 0xff, 0xf2, 0x63, 0xff, 0x56, 0x8d, 0xff, 0x32, 0x64, 0xff, 0x15, 0x85, 0xff, 0x15, 0x85, 0xff, 0xd4, 0x7c, 0xff, 0x56, 0x8d, 0xff, 0x76, 0x95, 0xff, 0x32, 0x64, 0xff, 0x73, 0x6c, 0xff, 0x59, 0xae, 0xff, 0x76, 0x9d, 0xff, 0x92, 0x7c, 0xff, 0x51, 0x74, 0xff, 0xd6, 0xad, 0xff, 0xd6, 0xad, 0xff, 0xd3, 0x8c, 0xff, 0x75, 0xa5, 0xff, 0x30, 0x8c, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x29, 0xff, 0x26, 0x31, 0xff, 0x27, 0x29, 0xff, 0x48, 0x29, 0xff, 0xa9, 0x31, 0xff, 0x64, 0x10, 0xff, 0xa6, 0x18, 0xff, 0xa6, 0x18, 0xff, 0xe7, 0x18, 0xff, 0x69, 0x29, 0xff, 0x08, 0x21, 0xff, 0x44, 0x08, 0xff, 0x45, 0x08, 0xff, 0xc7, 0x18, 0xff, 0x27, 0x31, 0xff, 0x2a, 0x7a, 0xff, 0x8d, 0xab, 0xff, 0x15, 0xd6, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x15, 0xd6, 0xff, 0xb4, 0xcd, 0xff, 0x12, 0xc5, 0xff, 0x2c, 0x9b, 0xff, 0xab, 0x8a, 0xff, 0xae, 0xb3, 0xff, 0x30, 0xc4, 0xff, 0x2f, 0xc4, 0xff, 0x50, 0xc4, 0xff, 0xef, 0xab, 0xff, 0x6b, 0x6a, 0xff, 0x27, 0x31, 0xff, 0x85, 0x18, 0xff, 0x85, 0x10, 0xff, 0x65, 0x08, 0xff, 0x65, 0x08, 0xff, 0xa6, 0x10, 0xff, 0x65, 0x08, 0xff, 0x84, 0x10, 0xff, 0x84, 0x20, 0xff, 0x06, 0x39, 0xff, 0x09, 0x6a, 0xff, 0xab, 0x8a, 0xff, 0x6d, 0xa3, 0xff, 0x10, 0xac, 0xff, 0x91, 0xb4, 0xff, 0xd2, 0xb4, 0xff, 0xf2, 0xac, 0xff, 0x13, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0x54, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0x53, 0xbd, 0xff, 0x33, 0xbd, 0xff, 0x53, 0xbd, 0xff, 0x53, 0xbd, 0xff, 0xf2, 0xac, 0xff, 0x92, 0xac, 0xff, 0xae, 0x8b, 0xff, 0x6b, 0x62, 0xff, 0x09, 0x4a, 0xff, 0x6c, 0x52, 0xff, 0xc9, 0x39, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xc9, 0x31, 0xff, 0x07, 0x21, 0xff, 0x07, 0x21, 0xff, 0x88, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x20, 0xff, 0x85, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x85, 0x10, 0xff, 0xe6, 0x20, 0xff, 0x27, 0x21, 0xff, 0x07, 0x19, 0xff, 0x89, 0x29, 0xff, 0x06, 0x19, 0xff, 0x07, 0x21, 0xff, 0x28, 0x21, 0xff, 0x07, 0x21, 0xff, 0xe6, 0x18, 0xff, 0x06, 0x21, 0xff, 0x48, 0x29, 0xff, 0x48, 0x21, 0xff, 0x64, 0x08, 0xff, 0x48, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x2b, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xd7, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xbe, 0xff, 0x96, 0x95, 0xff, 0x35, 0x7d, 0xff, 0xf4, 0x74, 0xff, 0xb4, 0x6c, 0xff, 0x73, 0x64, 0xff, 0x32, 0x5c, 0xff, 0x12, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x53, 0x64, 0xff, 0x53, 0x5c, 0xff, 0x94, 0x64, 0xff, 0xd5, 0x74, 0xff, 0xf6, 0x74, 0xff, 0x94, 0x64, 0xff, 0x74, 0x64, 0xff, 0x36, 0x7d, 0xff, 0xf5, 0x74, 0xff, 0xd2, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0xf2, 0x5b, 0xff, 0x90, 0x53, 0xff, 0xd5, 0x74, 0xff, 0x73, 0x6c, 0xff, 0x90, 0x53, 0xff, 0x36, 0x8d, 0xff, 0x93, 0x7c, 0xff, 0x0f, 0x43, 0xff, 0x91, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0xb1, 0x5b, 0xff, 0xd4, 0x84, 0xff, 0xd3, 0x7c, 0xff, 0x15, 0x85, 0xff, 0x35, 0x8d, 0xff, 0xb3, 0x7c, 0xff, 0x92, 0x84, 0xff, 0xd6, 0xad, 0xff, 0xb6, 0xa5, 0xff, 0x38, 0xb6, 0xff, 0xf0, 0x7b, 0xff, 0xc5, 0x20, 0xff, 0x27, 0x29, 0xff, 0x26, 0x31, 0xff, 0xe6, 0x20, 0xff, 0x68, 0x31, 0xff, 0x09, 0x4a, 0xff, 0xa6, 0x18, 0xff, 0x85, 0x10, 0xff, 0x4b, 0x42, 0xff, 0x35, 0x95, 0xff, 0x77, 0x9d, 0xff, 0x8d, 0x4a, 0xff, 0xeb, 0x41, 0xff, 0xaa, 0x31, 0xff, 0x86, 0x10, 0xff, 0x65, 0x08, 0xff, 0x28, 0x31, 0xff, 0x2c, 0x9b, 0xff, 0x93, 0xd5, 0xff, 0xd8, 0xee, 0xff, 0x97, 0xe6, 0xff, 0x76, 0xe6, 0xff, 0x56, 0xde, 0xff, 0x36, 0xde, 0xff, 0x16, 0xce, 0xff, 0x94, 0xcd, 0xff, 0x91, 0xbc, 0xff, 0xce, 0xbb, 0xff, 0xef, 0xbb, 0xff, 0xef, 0xbb, 0xff, 0x51, 0xc4, 0xff, 0x4d, 0x8b, 0xff, 0xea, 0x49, 0xff, 0xa5, 0x18, 0xff, 0xa6, 0x08, 0xff, 0xc7, 0x10, 0xff, 0x44, 0x08, 0xff, 0x45, 0x10, 0xff, 0x48, 0x29, 0xff, 0x48, 0x21, 0xff, 0x48, 0x29, 0xff, 0x07, 0x19, 0xff, 0x85, 0x08, 0xff, 0xc6, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x06, 0x31, 0xff, 0xe8, 0x69, 0xff, 0x89, 0x82, 0xff, 0x0c, 0x9b, 0xff, 0x50, 0xb4, 0xff, 0x91, 0xac, 0xff, 0x91, 0xa4, 0xff, 0xf2, 0xac, 0xff, 0x13, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0x54, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x33, 0xbd, 0xff, 0x13, 0xb5, 0xff, 0x12, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0xf2, 0xb4, 0xff, 0xb2, 0xac, 0xff, 0x2d, 0x7b, 0xff, 0xa7, 0x41, 0xff, 0x6b, 0x5a, 0xff, 0x0a, 0x42, 0xff, 0x89, 0x31, 0xff, 0x27, 0x29, 0xff, 0xc5, 0x18, 0xff, 0x48, 0x21, 0xff, 0x8c, 0x4a, 0xff, 0x47, 0x21, 0xff, 0xea, 0x31, 0xff, 0x06, 0x21, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x29, 0xff, 0x64, 0x10, 0xff, 0x67, 0x29, 0xff, 0x27, 0x29, 0xff, 0x07, 0x21, 0xff, 0xea, 0x29, 0xff, 0x48, 0x21, 0xff, 0x48, 0x21, 0xff, 0x88, 0x29, 0xff, 0x07, 0x19, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x18, 0xff, 0x65, 0x10, 0xff, 0x24, 0x08, 0xff, 0x27, 0x19, 0xff, 0xc9, 0x29, 0xff, 0xad, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x18, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xc7, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xce, 0xff, 0xb6, 0x9d, 0xff, 0x15, 0x7d, 0xff, 0xd4, 0x74, 0xff, 0x94, 0x6c, 0xff, 0x53, 0x64, 0xff, 0x32, 0x5c, 0xff, 0x12, 0x5c, 0xff, 0xf2, 0x53, 0xff, 0xd2, 0x53, 0xff, 0x12, 0x54, 0xff, 0xb4, 0x64, 0xff, 0xf6, 0x74, 0xff, 0xf5, 0x74, 0xff, 0x74, 0x64, 0xff, 0x12, 0x54, 0xff, 0x74, 0x64, 0xff, 0x94, 0x6c, 0xff, 0x94, 0x6c, 0xff, 0xb5, 0x6c, 0xff, 0x12, 0x5c, 0xff, 0x2f, 0x43, 0xff, 0x12, 0x64, 0xff, 0x73, 0x6c, 0xff, 0x73, 0x74, 0xff, 0x12, 0x6c, 0xff, 0x90, 0x53, 0xff, 0xad, 0x3a, 0xff, 0x0f, 0x43, 0xff, 0xd2, 0x5b, 0xff, 0x12, 0x5c, 0xff, 0x94, 0x74, 0xff, 0xf2, 0x5b, 0xff, 0x11, 0x64, 0xff, 0xd6, 0xa5, 0xff, 0xb7, 0xa5, 0xff, 0x35, 0x95, 0xff, 0xd3, 0x8c, 0xff, 0xb2, 0x8c, 0xff, 0xf3, 0x94, 0xff, 0x14, 0x95, 0xff, 0x2a, 0x4a, 0xff, 0x06, 0x29, 0xff, 0x27, 0x29, 0xff, 0x47, 0x31, 0xff, 0x43, 0x08, 0xff, 0x4a, 0x52, 0xff, 0x16, 0xd6, 0xff, 0xd0, 0x83, 0xff, 0x68, 0x29, 0xff, 0x14, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xc6, 0xff, 0xeb, 0x39, 0xff, 0x4d, 0x4a, 0xff, 0x8a, 0x29, 0xff, 0xa7, 0x18, 0xff, 0xe6, 0x20, 0xff, 0x24, 0x00, 0xff, 0xc6, 0x28, 0xff, 0xb1, 0xbc, 0xff, 0x18, 0xf7, 0xff, 0xd8, 0xee, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xd6, 0xff, 0xb5, 0xcd, 0xff, 0xd1, 0xc4, 0xff, 0x8e, 0xab, 0xff, 0x6e, 0xab, 0xff, 0xaf, 0xb3, 0xff, 0xb2, 0xd4, 0xff, 0xaf, 0x9b, 0xff, 0xa6, 0x18, 0xff, 0x86, 0x10, 0xff, 0x44, 0x08, 0xff, 0xe7, 0x20, 0xff, 0xcd, 0x4a, 0xff, 0x8d, 0x42, 0xff, 0x68, 0x29, 0xff, 0x68, 0x31, 0xff, 0x28, 0x21, 0xff, 0x07, 0x21, 0xff, 0x27, 0x21, 0xff, 0xe7, 0x18, 0xff, 0x86, 0x10, 0xff, 0xa6, 0x10, 0xff, 0xc5, 0x28, 0xff, 0x87, 0x49, 0xff, 0x66, 0x49, 0xff, 0x6a, 0x6a, 0xff, 0x10, 0x9c, 0xff, 0x70, 0xa4, 0xff, 0xd2, 0xac, 0xff, 0x33, 0xb5, 0xff, 0x74, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x54, 0xbd, 0xff, 0x33, 0xbd, 0xff, 0x33, 0xbd, 0xff, 0xd2, 0xac, 0xff, 0x54, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x71, 0xa4, 0xff, 0xeb, 0x72, 0xff, 0xa8, 0x49, 0xff, 0x2a, 0x52, 0xff, 0xc9, 0x39, 0xff, 0x27, 0x29, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0x88, 0x29, 0xff, 0x06, 0x19, 0xff, 0x2b, 0x3a, 0xff, 0x88, 0x29, 0xff, 0x64, 0x10, 0xff, 0x06, 0x21, 0xff, 0xa9, 0x31, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe9, 0x39, 0xff, 0x06, 0x21, 0xff, 0x88, 0x31, 0xff, 0x4c, 0x3a, 0xff, 0xc6, 0x18, 0xff, 0xca, 0x31, 0xff, 0x8c, 0x3a, 0xff, 0xe6, 0x10, 0xff, 0xe7, 0x20, 0xff, 0xc6, 0x18, 0xff, 0x26, 0x21, 0xff, 0x4a, 0x42, 0xff, 0xf0, 0x73, 0xff, 0xf0, 0x6b, 0xff, 0x55, 0x95, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x08, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0xd7, 0xff, 0xd7, 0x9d, 0xff, 0x15, 0x7d, 0xff, 0xd4, 0x74, 0xff, 0x93, 0x6c, 0xff, 0x32, 0x5c, 0xff, 0x12, 0x5c, 0xff, 0x12, 0x5c, 0xff, 0x13, 0x5c, 0xff, 0x53, 0x5c, 0xff, 0x94, 0x6c, 0xff, 0xd5, 0x6c, 0xff, 0x74, 0x64, 0xff, 0x33, 0x5c, 0xff, 0x53, 0x5c, 0xff, 0x53, 0x5c, 0xff, 0xf2, 0x53, 0xff, 0xd2, 0x53, 0xff, 0xf1, 0x53, 0xff, 0x74, 0x6c, 0xff, 0x74, 0x6c, 0xff, 0x0f, 0x43, 0xff, 0x91, 0x53, 0xff, 0x76, 0x8d, 0xff, 0xb4, 0x74, 0xff, 0xce, 0x3a, 0xff, 0x2f, 0x43, 0xff, 0x70, 0x53, 0xff, 0x70, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0xf2, 0x5b, 0xff, 0xd1, 0x53, 0xff, 0x72, 0x6c, 0xff, 0x38, 0xae, 0xff, 0x58, 0xbe, 0xff, 0x72, 0x7c, 0xff, 0x72, 0x7c, 0xff, 0xf4, 0x94, 0xff, 0x51, 0x7c, 0xff, 0x14, 0x95, 0xff, 0x11, 0x7c, 0xff, 0x47, 0x29, 0xff, 0x47, 0x31, 0xff, 0x67, 0x31, 0xff, 0x26, 0x31, 0xff, 0x02, 0x08, 0xff, 0xec, 0x6a, 0xff, 0x7b, 0xff, 0xff, 0x19, 0xf7, 0xff, 0xaa, 0x39, 0xff, 0x93, 0x94, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xd6, 0xff, 0xe6, 0x28, 0xff, 0xc7, 0x28, 0xff, 0x08, 0x29, 0xff, 0xaa, 0x39, 0xff, 0x84, 0x20, 0xff, 0xea, 0x41, 0xff, 0xaa, 0x41, 0xff, 0xeb, 0x72, 0xff, 0x39, 0xff, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x57, 0xd6, 0xff, 0xb5, 0xcd, 0xff, 0x91, 0xbc, 0xff, 0x8e, 0xab, 0xff, 0x2e, 0x9b, 0xff, 0x4d, 0xa3, 0xff, 0xf2, 0xd4, 0xff, 0xcf, 0x9b, 0xff, 0xa7, 0x18, 0xff, 0x45, 0x08, 0xff, 0x0a, 0x52, 0xff, 0xd4, 0x9c, 0xff, 0x9f, 0xe7, 0xff, 0xd5, 0x8c, 0xff, 0x24, 0x08, 0xff, 0x08, 0x29, 0xff, 0xc6, 0x10, 0xff, 0x28, 0x29, 0xff, 0x85, 0x10, 0xff, 0xca, 0x31, 0xff, 0x6c, 0x4a, 0xff, 0xa5, 0x18, 0xff, 0x06, 0x19, 0xff, 0x48, 0x29, 0xff, 0x06, 0x21, 0xff, 0xa8, 0x41, 0xff, 0x4e, 0x8b, 0xff, 0x71, 0xac, 0xff, 0x13, 0xb5, 0xff, 0x54, 0xbd, 0xff, 0x95, 0xc5, 0xff, 0x95, 0xc5, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xc5, 0xff, 0x54, 0xbd, 0xff, 0xd2, 0xac, 0xff, 0x33, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0xb1, 0xac, 0xff, 0x8a, 0x6a, 0xff, 0x29, 0x5a, 0xff, 0xc9, 0x49, 0xff, 0xa9, 0x39, 0xff, 0x88, 0x31, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x27, 0x29, 0xff, 0x67, 0x29, 0xff, 0x47, 0x29, 0xff, 0x4b, 0x42, 0xff, 0x0a, 0x3a, 0xff, 0xc5, 0x18, 0xff, 0x48, 0x29, 0xff, 0x07, 0x21, 0xff, 0xc5, 0x20, 0xff, 0x0a, 0x42, 0xff, 0x0a, 0x42, 0xff, 0x27, 0x29, 0xff, 0x6b, 0x5a, 0xff, 0x8c, 0x42, 0xff, 0x0b, 0x32, 0xff, 0xc9, 0x31, 0xff, 0x2b, 0x3a, 0xff, 0xc9, 0x29, 0xff, 0xa9, 0x29, 0xff, 0x8c, 0x4a, 0xff, 0x4f, 0x63, 0xff, 0xf1, 0x6b, 0xff, 0x76, 0x9d, 0xff, 0xd7, 0xad, 0xff, 0x38, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x8c, 0x7f, 0xef, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xdf, 0xff, 0xf8, 0xa5, 0xff, 0xf4, 0x7c, 0xff, 0xb4, 0x74, 0xff, 0x53, 0x64, 0xff, 0x73, 0x6c, 0xff, 0xb4, 0x6c, 0xff, 0x53, 0x64, 0xff, 0x33, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x12, 0x5c, 0xff, 0x12, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x53, 0x64, 0xff, 0x33, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0xf2, 0x53, 0xff, 0xd1, 0x53, 0xff, 0x74, 0x6c, 0xff, 0xb1, 0x53, 0xff, 0x33, 0x64, 0xff, 0xb1, 0x53, 0xff, 0x12, 0x64, 0xff, 0x76, 0x8d, 0xff, 0x93, 0x74, 0xff, 0x0f, 0x43, 0xff, 0xd1, 0x5b, 0xff, 0x33, 0x64, 0xff, 0x70, 0x4b, 0xff, 0xb1, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0x96, 0x9d, 0xff, 0x17, 0xae, 0xff, 0x96, 0x9d, 0xff, 0x15, 0x8d, 0xff, 0x73, 0x74, 0xff, 0x53, 0x74, 0xff, 0x31, 0x74, 0xff, 0x14, 0x8d, 0xff, 0xf4, 0x94, 0xff, 0x4b, 0x52, 0xff, 0xa8, 0x39, 0xff, 0x88, 0x39, 0xff, 0x47, 0x31, 0xff, 0xe5, 0x20, 0xff, 0x03, 0x08, 0xff, 0xae, 0x8b, 0xff, 0x39, 0xff, 0xff, 0x77, 0xde, 0xff, 0x89, 0x29, 0xff, 0x89, 0x31, 0xff, 0x7c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xce, 0xff, 0x0a, 0x52, 0xff, 0x48, 0x41, 0xff, 0x85, 0x20, 0xff, 0x89, 0x39, 0xff, 0x70, 0x7b, 0xff, 0x68, 0x41, 0xff, 0x09, 0x4a, 0xff, 0x39, 0xf7, 0xff, 0x19, 0xf7, 0xff, 0x19, 0xef, 0xff, 0xf8, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0x57, 0xde, 0xff, 0xb5, 0xc5, 0xff, 0x13, 0xbd, 0xff, 0x51, 0xac, 0xff, 0x4e, 0x8b, 0xff, 0xcf, 0xa3, 0xff, 0xd3, 0xc4, 0xff, 0x89, 0x39, 0xff, 0x01, 0x00, 0xff, 0x0a, 0x62, 0xff, 0x1b, 0xf7, 0xff, 0xbd, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x9c, 0xff, 0xa6, 0x18, 0xff, 0x49, 0x29, 0xff, 0xa5, 0x18, 0xff, 0x48, 0x31, 0xff, 0x85, 0x10, 0xff, 0x57, 0xa5, 0xff, 0x12, 0x74, 0xff, 0x85, 0x08, 0xff, 0x08, 0x21, 0xff, 0x47, 0x29, 0xff, 0xe9, 0x41, 0xff, 0x0d, 0x7b, 0xff, 0xef, 0xa3, 0xff, 0xf2, 0xb4, 0xff, 0x94, 0xc5, 0xff, 0xd5, 0xc5, 0xff, 0xd6, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0xb2, 0xac, 0xff, 0xb1, 0xac, 0xff, 0x54, 0xbd, 0xff, 0x91, 0xa4, 0xff, 0x29, 0x5a, 0xff, 0xac, 0x6a, 0xff, 0x2a, 0x5a, 0xff, 0xa8, 0x41, 0xff, 0xa9, 0x39, 0xff, 0x47, 0x29, 0xff, 0x06, 0x21, 0xff, 0x47, 0x29, 0xff, 0x4b, 0x4a, 0xff, 0xa9, 0x31, 0xff, 0x27, 0x21, 0xff, 0x2e, 0x5b, 0xff, 0xea, 0x39, 0xff, 0x84, 0x18, 0xff, 0xe6, 0x28, 0xff, 0xc8, 0x39, 0xff, 0xd0, 0x6b, 0xff, 0xed, 0x5a, 0xff, 0x26, 0x31, 0xff, 0x4a, 0x62, 0xff, 0x8c, 0x52, 0xff, 0x8d, 0x3a, 0xff, 0x2e, 0x53, 0xff, 0x0b, 0x32, 0xff, 0xea, 0x31, 0xff, 0x4b, 0x3a, 0xff, 0xa9, 0x31, 0xff, 0x27, 0x29, 0xff, 0x68, 0x21, 0xff, 0xc9, 0x31, 0xff, 0x89, 0x31, 0xff, 0x15, 0x95, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xe7, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xef, 0xff, 0x18, 0xae, 0xff, 0xf4, 0x7c, 0xff, 0x73, 0x6c, 0xff, 0xd5, 0x74, 0xff, 0x16, 0x7d, 0xff, 0x53, 0x64, 0xff, 0x12, 0x5c, 0xff, 0xd1, 0x53, 0xff, 0xd1, 0x53, 0xff, 0xd1, 0x53, 0xff, 0x12, 0x5c, 0xff, 0x53, 0x64, 0xff, 0x53, 0x64, 0xff, 0x33, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0xf2, 0x53, 0xff, 0xf2, 0x53, 0xff, 0xb5, 0x74, 0xff, 0xd1, 0x53, 0xff, 0x12, 0x5c, 0xff, 0x77, 0x85, 0xff, 0x76, 0x8d, 0xff, 0x56, 0x8d, 0xff, 0x12, 0x64, 0xff, 0xb4, 0x6c, 0xff, 0x97, 0x8d, 0xff, 0x52, 0x6c, 0xff, 0x70, 0x4b, 0xff, 0xd1, 0x5b, 0xff, 0x96, 0x9d, 0xff, 0xd7, 0xa5, 0xff, 0x76, 0x95, 0xff, 0x93, 0x7c, 0xff, 0x35, 0x8d, 0xff, 0xb7, 0x9d, 0xff, 0x73, 0x7c, 0xff, 0xd3, 0x8c, 0xff, 0x37, 0xbe, 0xff, 0xae, 0x73, 0xff, 0x67, 0x39, 0xff, 0xc9, 0x49, 0xff, 0xc8, 0x41, 0xff, 0x06, 0x31, 0xff, 0x06, 0x29, 0xff, 0x85, 0x20, 0xff, 0x71, 0xa4, 0xff, 0x39, 0xf7, 0xff, 0x77, 0xd6, 0xff, 0x8f, 0x6b, 0xff, 0x48, 0x21, 0xff, 0x89, 0x29, 0xff, 0x8f, 0x6b, 0xff, 0x96, 0xa5, 0xff, 0x53, 0x7c, 0xff, 0x0b, 0x3a, 0xff, 0x0b, 0x3a, 0xff, 0x8d, 0x4a, 0xff, 0x8c, 0x4a, 0xff, 0x64, 0x08, 0xff, 0xec, 0x62, 0xff, 0x9a, 0xff, 0xff, 0x39, 0xf7, 0xff, 0x39, 0xef, 0xff, 0xf8, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0xd5, 0xcd, 0xff, 0x95, 0xc5, 0xff, 0x14, 0xb5, 0xff, 0x51, 0xa4, 0xff, 0xf3, 0xbc, 0xff, 0x6a, 0x62, 0xff, 0x00, 0x00, 0xff, 0x68, 0x31, 0xff, 0xb3, 0xd4, 0xff, 0xb9, 0xfe, 0xff, 0xdd, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x7c, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x29, 0xff, 0x85, 0x18, 0xff, 0xea, 0x39, 0xff, 0x8d, 0x4a, 0xff, 0x49, 0x19, 0xff, 0xaa, 0x21, 0xff, 0x0e, 0x5b, 0xff, 0x92, 0x8c, 0xff, 0x54, 0xad, 0xff, 0xd5, 0xc5, 0xff, 0xb5, 0xc5, 0xff, 0xd5, 0xc5, 0xff, 0xf6, 0xcd, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x94, 0xc5, 0xff, 0xf2, 0xb4, 0xff, 0x91, 0xac, 0xff, 0x33, 0xbd, 0xff, 0x50, 0x9c, 0xff, 0x6a, 0x62, 0xff, 0x2d, 0x7b, 0xff, 0x8b, 0x62, 0xff, 0x4a, 0x52, 0xff, 0xe9, 0x41, 0xff, 0xa9, 0x39, 0xff, 0x27, 0x29, 0xff, 0x48, 0x29, 0xff, 0xa9, 0x39, 0xff, 0xad, 0x52, 0xff, 0x06, 0x21, 0xff, 0x0a, 0x42, 0xff, 0x6b, 0x4a, 0xff, 0x27, 0x29, 0xff, 0x47, 0x39, 0xff, 0x4e, 0x63, 0xff, 0xf4, 0x8c, 0xff, 0xaf, 0x6b, 0xff, 0x2a, 0x52, 0xff, 0xc8, 0x59, 0xff, 0x8c, 0x5a, 0xff, 0x4f, 0x4b, 0xff, 0xb3, 0x7c, 0xff, 0x70, 0x53, 0xff, 0xc9, 0x29, 0xff, 0x28, 0x29, 0xff, 0x65, 0x08, 0xff, 0x89, 0x29, 0xff, 0x89, 0x21, 0xff, 0x2b, 0x32, 0xff, 0xaa, 0x29, 0xff, 0xb4, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xd7, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x4b, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7a, 0xbe, 0xff, 0xb3, 0x74, 0xff, 0xd4, 0x74, 0xff, 0x57, 0x85, 0xff, 0x33, 0x64, 0xff, 0xf1, 0x53, 0xff, 0xf2, 0x53, 0xff, 0xf2, 0x53, 0xff, 0xf2, 0x53, 0xff, 0xf2, 0x53, 0xff, 0xf2, 0x53, 0xff, 0x33, 0x5c, 0xff, 0x53, 0x64, 0xff, 0x33, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x13, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0xb4, 0x6c, 0xff, 0xf2, 0x5b, 0xff, 0xd1, 0x53, 0xff, 0x36, 0x7d, 0xff, 0x77, 0x8d, 0xff, 0x96, 0x8d, 0xff, 0xb0, 0x5b, 0xff, 0x12, 0x64, 0xff, 0x76, 0x85, 0xff, 0xf4, 0x7c, 0xff, 0x32, 0x6c, 0xff, 0x76, 0x95, 0xff, 0xd7, 0x9d, 0xff, 0x15, 0x85, 0xff, 0xd7, 0xad, 0xff, 0x95, 0x95, 0xff, 0x96, 0x95, 0xff, 0xd4, 0x84, 0xff, 0xf4, 0x8c, 0xff, 0x78, 0xc6, 0xff, 0xf6, 0xbd, 0xff, 0xcc, 0x62, 0xff, 0xe9, 0x49, 0xff, 0xe9, 0x51, 0xff, 0xa8, 0x41, 0xff, 0x06, 0x29, 0xff, 0x67, 0x39, 0xff, 0x06, 0x31, 0xff, 0xf2, 0xb4, 0xff, 0x19, 0xf7, 0xff, 0x36, 0xd6, 0xff, 0x95, 0xb5, 0xff, 0x55, 0xa5, 0xff, 0x4f, 0x6b, 0xff, 0x89, 0x31, 0xff, 0x2a, 0x42, 0xff, 0xb0, 0x73, 0xff, 0xd1, 0x83, 0xff, 0x32, 0x8c, 0xff, 0x4e, 0x6b, 0xff, 0x6b, 0x52, 0xff, 0x8c, 0x62, 0xff, 0xb6, 0xc5, 0xff, 0xbb, 0xff, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0x39, 0xef, 0xff, 0xf8, 0xe6, 0xff, 0x97, 0xde, 0xff, 0x36, 0xd6, 0xff, 0xd5, 0xc5, 0xff, 0x75, 0xbd, 0xff, 0x55, 0xb5, 0xff, 0x13, 0xb5, 0xff, 0x2a, 0x62, 0xff, 0x27, 0x31, 0xff, 0x4c, 0x42, 0xff, 0xad, 0x6a, 0xff, 0x2a, 0x5a, 0xff, 0xb0, 0x83, 0xff, 0x55, 0xa5, 0xff, 0x38, 0xbe, 0xff, 0x35, 0x95, 0xff, 0xea, 0x39, 0xff, 0x89, 0x31, 0xff, 0xca, 0x31, 0xff, 0xaa, 0x29, 0xff, 0x08, 0x11, 0xff, 0x4c, 0x3a, 0xff, 0x52, 0x84, 0xff, 0x58, 0xce, 0xff, 0xb9, 0xde, 0xff, 0x98, 0xde, 0xff, 0x77, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0x36, 0xd6, 0xff, 0x36, 0xd6, 0xff, 0xf5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x33, 0xbd, 0xff, 0x50, 0xa4, 0xff, 0xb2, 0xac, 0xff, 0xd2, 0xac, 0xff, 0xcc, 0x72, 0xff, 0x2d, 0x7b, 0xff, 0x4e, 0x7b, 0xff, 0xac, 0x62, 0xff, 0x4b, 0x52, 0xff, 0x67, 0x31, 0xff, 0xea, 0x41, 0xff, 0x89, 0x39, 0xff, 0xc6, 0x20, 0xff, 0xac, 0x5a, 0xff, 0x8c, 0x52, 0xff, 0x47, 0x31, 0xff, 0xa8, 0x39, 0xff, 0xa8, 0x39, 0xff, 0x2a, 0x4a, 0xff, 0xf0, 0x7b, 0xff, 0x14, 0x8d, 0xff, 0xb3, 0x84, 0xff, 0xed, 0x6a, 0xff, 0xa8, 0x49, 0xff, 0x6f, 0x6b, 0xff, 0xb2, 0x84, 0xff, 0xf4, 0x84, 0xff, 0xf2, 0x63, 0xff, 0x90, 0x63, 0xff, 0x88, 0x29, 0xff, 0x68, 0x21, 0xff, 0x8d, 0x3a, 0xff, 0xee, 0x42, 0xff, 0x90, 0x53, 0xff, 0xb0, 0x63, 0xff, 0x97, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x43, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xce, 0xff, 0xd4, 0x74, 0xff, 0x77, 0x85, 0xff, 0x93, 0x6c, 0xff, 0x12, 0x5c, 0xff, 0x32, 0x5c, 0xff, 0x12, 0x5c, 0xff, 0xf2, 0x53, 0xff, 0xf2, 0x53, 0xff, 0xd1, 0x53, 0xff, 0xf2, 0x53, 0xff, 0x12, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x53, 0x64, 0xff, 0x53, 0x64, 0xff, 0x13, 0x5c, 0xff, 0x32, 0x5c, 0xff, 0x73, 0x64, 0xff, 0x33, 0x5c, 0xff, 0x70, 0x4b, 0xff, 0x93, 0x74, 0xff, 0x38, 0xa6, 0xff, 0xb3, 0x6c, 0xff, 0x53, 0x6c, 0xff, 0x73, 0x74, 0xff, 0x32, 0x64, 0xff, 0x35, 0x75, 0xff, 0x76, 0x8d, 0xff, 0xb7, 0x9d, 0xff, 0x56, 0x85, 0xff, 0x99, 0xbe, 0xff, 0x98, 0xbe, 0xff, 0x96, 0x95, 0xff, 0x76, 0x95, 0xff, 0x93, 0x7c, 0xff, 0xd5, 0xad, 0xff, 0x3a, 0xe7, 0xff, 0xd2, 0xa4, 0xff, 0x29, 0x52, 0xff, 0x2a, 0x5a, 0xff, 0xe9, 0x51, 0xff, 0xe8, 0x51, 0xff, 0x88, 0x41, 0xff, 0x67, 0x41, 0xff, 0xe5, 0x28, 0xff, 0x73, 0xc5, 0xff, 0xf8, 0xee, 0xff, 0x57, 0xde, 0xff, 0xf5, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0xb5, 0xcd, 0xff, 0x13, 0xc5, 0xff, 0x70, 0xb4, 0xff, 0x0f, 0xac, 0xff, 0x91, 0xbc, 0xff, 0xb1, 0xbc, 0xff, 0xd5, 0xcd, 0xff, 0x1a, 0xf7, 0xff, 0x39, 0xf7, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x57, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xd6, 0xcd, 0xff, 0x95, 0xbd, 0xff, 0x53, 0xb5, 0xff, 0xb2, 0xac, 0xff, 0xd0, 0xa3, 0xff, 0x8c, 0x7a, 0xff, 0x2e, 0x6b, 0xff, 0x90, 0x73, 0xff, 0x0b, 0x42, 0xff, 0x68, 0x21, 0xff, 0x07, 0x19, 0xff, 0xca, 0x31, 0xff, 0x4f, 0x63, 0xff, 0xb0, 0x6b, 0xff, 0x6f, 0x63, 0xff, 0x6f, 0x63, 0xff, 0x73, 0x8c, 0xff, 0x54, 0xad, 0xff, 0x58, 0xce, 0xff, 0x16, 0xce, 0xff, 0x16, 0xce, 0xff, 0x36, 0xce, 0xff, 0x77, 0xd6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0xf5, 0xcd, 0xff, 0xf6, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0xb1, 0xac, 0xff, 0x50, 0xa4, 0xff, 0xf3, 0xb4, 0xff, 0x8e, 0x83, 0xff, 0x0c, 0x7b, 0xff, 0xcf, 0x8b, 0xff, 0xec, 0x62, 0xff, 0xd0, 0x7b, 0xff, 0x2e, 0x63, 0xff, 0x8f, 0x6b, 0xff, 0x2a, 0x4a, 0xff, 0x47, 0x39, 0xff, 0x0d, 0x63, 0xff, 0x2e, 0x63, 0xff, 0x2b, 0x4a, 0xff, 0xc9, 0x39, 0xff, 0xe6, 0x20, 0xff, 0xd1, 0x7b, 0xff, 0xb3, 0x84, 0xff, 0xf3, 0x84, 0xff, 0x76, 0x9d, 0xff, 0xaf, 0x73, 0xff, 0x2e, 0x73, 0xff, 0x52, 0x84, 0xff, 0x92, 0x7c, 0xff, 0x75, 0x9d, 0xff, 0xd4, 0x84, 0xff, 0xb3, 0x7c, 0xff, 0x11, 0x6c, 0xff, 0x32, 0x6c, 0xff, 0x32, 0x6c, 0xff, 0xf1, 0x63, 0xff, 0x53, 0x6c, 0xff, 0xb4, 0x7c, 0xff, 0xbb, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xdf, 0xff, 0x77, 0x8d, 0xff, 0x15, 0x7d, 0xff, 0x12, 0x5c, 0xff, 0x33, 0x64, 0xff, 0x32, 0x5c, 0xff, 0xf2, 0x5b, 0xff, 0xd2, 0x53, 0xff, 0xd2, 0x53, 0xff, 0xf2, 0x53, 0xff, 0xd1, 0x53, 0xff, 0x12, 0x5c, 0xff, 0x53, 0x5c, 0xff, 0x94, 0x64, 0xff, 0x74, 0x64, 0xff, 0x12, 0x54, 0xff, 0x12, 0x5c, 0xff, 0x73, 0x64, 0xff, 0xd5, 0x74, 0xff, 0xb1, 0x53, 0xff, 0xf4, 0x7c, 0xff, 0x18, 0x9e, 0xff, 0x15, 0x85, 0xff, 0x76, 0x95, 0xff, 0xd4, 0x7c, 0xff, 0xb3, 0x74, 0xff, 0xf2, 0x5b, 0xff, 0x53, 0x64, 0xff, 0xf8, 0xa5, 0xff, 0xf7, 0xb5, 0xff, 0xb6, 0x9d, 0xff, 0xb4, 0x74, 0xff, 0x35, 0x8d, 0xff, 0x54, 0x9d, 0xff, 0x37, 0xbe, 0xff, 0x39, 0xe7, 0xff, 0xf5, 0xcd, 0xff, 0xae, 0x83, 0xff, 0xec, 0x72, 0xff, 0x6a, 0x62, 0xff, 0x4a, 0x62, 0xff, 0xe9, 0x51, 0xff, 0xa7, 0x51, 0xff, 0x67, 0x41, 0xff, 0xa8, 0x41, 0xff, 0x36, 0xde, 0xff, 0xd8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x56, 0xde, 0xff, 0xd5, 0xcd, 0xff, 0xd5, 0xd5, 0xff, 0xd4, 0xd5, 0xff, 0x94, 0xd5, 0xff, 0x73, 0xcd, 0xff, 0x73, 0xcd, 0xff, 0xb4, 0xcd, 0xff, 0x16, 0xde, 0xff, 0x57, 0xde, 0xff, 0x97, 0xde, 0xff, 0x18, 0xef, 0xff, 0x39, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xf6, 0xcd, 0xff, 0xf6, 0xc5, 0xff, 0x53, 0xbd, 0xff, 0x71, 0xb4, 0xff, 0x2f, 0xb4, 0xff, 0xb1, 0xc4, 0xff, 0x54, 0xc5, 0xff, 0x13, 0xad, 0xff, 0xd2, 0xac, 0xff, 0x54, 0xb5, 0xff, 0x74, 0xbd, 0xff, 0x95, 0xc5, 0xff, 0xb5, 0xc5, 0xff, 0xb5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xb5, 0xc5, 0xff, 0xf6, 0xcd, 0xff, 0x36, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x97, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xf5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x54, 0xc5, 0xff, 0xf2, 0xb4, 0xff, 0x71, 0xa4, 0xff, 0xb2, 0xa4, 0xff, 0x71, 0x9c, 0xff, 0x10, 0x8c, 0xff, 0x92, 0x9c, 0xff, 0x10, 0x84, 0xff, 0x31, 0x84, 0xff, 0x34, 0x9d, 0xff, 0x34, 0x9d, 0xff, 0xb0, 0x73, 0xff, 0x8c, 0x52, 0xff, 0x31, 0x84, 0xff, 0x67, 0x31, 0xff, 0xcd, 0x52, 0xff, 0x2e, 0x5b, 0xff, 0xed, 0x5a, 0xff, 0x93, 0x84, 0xff, 0x55, 0x9d, 0xff, 0x75, 0x9d, 0xff, 0xb6, 0xa5, 0xff, 0x52, 0x7c, 0xff, 0x51, 0x7c, 0xff, 0x14, 0x8d, 0xff, 0x93, 0x7c, 0xff, 0x14, 0x95, 0xff, 0xd3, 0x8c, 0xff, 0x92, 0x7c, 0xff, 0x96, 0x9d, 0xff, 0x35, 0x95, 0xff, 0xf4, 0x8c, 0xff, 0xd3, 0x7c, 0xff, 0xd3, 0x7c, 0xff, 0x56, 0x95, 0xff, 0x5d, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x74, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xb8, 0x95, 0xff, 0x32, 0x64, 0xff, 0x32, 0x64, 0xff, 0x12, 0x5c, 0xff, 0x32, 0x5c, 0xff, 0xf2, 0x5b, 0xff, 0xd1, 0x53, 0xff, 0xd1, 0x53, 0xff, 0xd1, 0x53, 0xff, 0xb1, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0x53, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x33, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x53, 0x5c, 0xff, 0x94, 0x64, 0xff, 0xb4, 0x74, 0xff, 0x56, 0x85, 0xff, 0x15, 0x7d, 0xff, 0xb7, 0x9d, 0xff, 0x14, 0x8d, 0xff, 0x53, 0x6c, 0xff, 0x90, 0x4b, 0xff, 0x2f, 0x43, 0xff, 0xb6, 0xa5, 0xff, 0xda, 0xce, 0xff, 0xd7, 0xa5, 0xff, 0xf1, 0x53, 0xff, 0x32, 0x64, 0xff, 0xb6, 0xa5, 0xff, 0x57, 0xc6, 0xff, 0xf8, 0xe6, 0xff, 0x97, 0xde, 0xff, 0x50, 0x9c, 0xff, 0x0c, 0x7b, 0xff, 0x8e, 0x83, 0xff, 0x0c, 0x7b, 0xff, 0x09, 0x5a, 0xff, 0x87, 0x49, 0xff, 0xaa, 0x72, 0xff, 0x26, 0x39, 0xff, 0xec, 0x6a, 0xff, 0xf8, 0xf6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x77, 0xde, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0xb8, 0xe6, 0xff, 0x19, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xde, 0xff, 0x77, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0x37, 0xd6, 0xff, 0x16, 0xce, 0xff, 0x93, 0xcd, 0xff, 0xb1, 0xbc, 0xff, 0xb1, 0xbc, 0xff, 0x93, 0xd5, 0xff, 0x15, 0xe6, 0xff, 0xf5, 0xdd, 0xff, 0xd5, 0xd5, 0xff, 0xb5, 0xd5, 0xff, 0xb4, 0xcd, 0xff, 0xb4, 0xcd, 0xff, 0xf5, 0xd5, 0xff, 0x57, 0xde, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0x77, 0xde, 0xff, 0x37, 0xde, 0xff, 0xf6, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x74, 0xcd, 0xff, 0x74, 0xc5, 0xff, 0x12, 0xb5, 0xff, 0x91, 0xa4, 0xff, 0x50, 0x9c, 0xff, 0x33, 0xad, 0xff, 0x33, 0xa5, 0xff, 0x71, 0x8c, 0xff, 0x72, 0x84, 0xff, 0x92, 0x8c, 0xff, 0x95, 0xad, 0xff, 0x17, 0xbe, 0xff, 0x34, 0x9d, 0xff, 0x10, 0x74, 0xff, 0x75, 0xa5, 0xff, 0x46, 0x29, 0xff, 0xac, 0x4a, 0xff, 0x35, 0x8d, 0xff, 0xf4, 0x8c, 0xff, 0x14, 0x8d, 0xff, 0xb6, 0xa5, 0xff, 0xd6, 0xad, 0xff, 0xb6, 0xad, 0xff, 0x75, 0x9d, 0xff, 0x55, 0x95, 0xff, 0xf3, 0x84, 0xff, 0x93, 0x7c, 0xff, 0x35, 0x95, 0xff, 0x34, 0x95, 0xff, 0xd3, 0x8c, 0xff, 0xf4, 0x94, 0xff, 0x35, 0x95, 0xff, 0x55, 0x95, 0xff, 0x35, 0x95, 0xff, 0xf3, 0x8c, 0xff, 0x18, 0xb6, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x53, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0x9d, 0xff, 0x12, 0x5c, 0xff, 0x32, 0x64, 0xff, 0x33, 0x64, 0xff, 0x33, 0x64, 0xff, 0xf2, 0x5b, 0xff, 0xd2, 0x53, 0xff, 0xd1, 0x53, 0xff, 0xb1, 0x53, 0xff, 0xb1, 0x53, 0xff, 0xf2, 0x53, 0xff, 0x53, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0x74, 0x5c, 0xff, 0x33, 0x54, 0xff, 0x74, 0x64, 0xff, 0x73, 0x64, 0xff, 0x94, 0x6c, 0xff, 0x15, 0x75, 0xff, 0x97, 0x8d, 0xff, 0x38, 0xb6, 0xff, 0xd1, 0x5b, 0xff, 0x2f, 0x43, 0xff, 0x12, 0x5c, 0xff, 0x59, 0xae, 0xff, 0xda, 0xce, 0xff, 0xf7, 0xa5, 0xff, 0x56, 0x85, 0xff, 0xf5, 0x74, 0xff, 0x75, 0x95, 0xff, 0x58, 0xc6, 0xff, 0xb8, 0xde, 0xff, 0x56, 0xde, 0xff, 0x54, 0xbd, 0xff, 0x8e, 0x83, 0xff, 0x4d, 0x7b, 0xff, 0x8d, 0x83, 0xff, 0x6e, 0x83, 0xff, 0xe9, 0x59, 0xff, 0x49, 0x6a, 0xff, 0xce, 0x93, 0xff, 0x46, 0x39, 0xff, 0x6d, 0x7b, 0xff, 0x39, 0xf7, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0x39, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x39, 0xef, 0xff, 0x19, 0xf7, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x57, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x37, 0xd6, 0xff, 0xd5, 0xd5, 0xff, 0x94, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0xd5, 0xd5, 0xff, 0xf5, 0xd5, 0xff, 0xf6, 0xd5, 0xff, 0x16, 0xd6, 0xff, 0x57, 0xde, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0xf6, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0x74, 0xc5, 0xff, 0x53, 0xc5, 0xff, 0x33, 0xbd, 0xff, 0x53, 0xbd, 0xff, 0x30, 0x9c, 0xff, 0x91, 0x9c, 0xff, 0xd5, 0xc5, 0xff, 0xb5, 0xbd, 0xff, 0x30, 0x84, 0xff, 0x71, 0x84, 0xff, 0xd6, 0xad, 0xff, 0xb5, 0xb5, 0xff, 0x17, 0xbe, 0xff, 0x74, 0xa5, 0xff, 0xb3, 0x84, 0xff, 0x17, 0xb6, 0xff, 0x0e, 0x5b, 0xff, 0x4e, 0x5b, 0xff, 0x38, 0xae, 0xff, 0xf7, 0xa5, 0xff, 0xb6, 0xa5, 0xff, 0xd6, 0xad, 0xff, 0xf7, 0xb5, 0xff, 0xf6, 0xb5, 0xff, 0x95, 0x9d, 0xff, 0xb3, 0x84, 0xff, 0x93, 0x7c, 0xff, 0x52, 0x74, 0xff, 0x96, 0xa5, 0xff, 0x34, 0x9d, 0xff, 0xf4, 0x8c, 0xff, 0xd3, 0x8c, 0xff, 0x54, 0x9d, 0xff, 0x55, 0x95, 0xff, 0x14, 0x8d, 0xff, 0x55, 0x9d, 0xff, 0xba, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0xae, 0xff, 0x32, 0x64, 0xff, 0x33, 0x64, 0xff, 0x33, 0x64, 0xff, 0x33, 0x64, 0xff, 0xf2, 0x5b, 0xff, 0xd1, 0x53, 0xff, 0xd1, 0x53, 0xff, 0xb1, 0x53, 0xff, 0xb1, 0x4b, 0xff, 0xf2, 0x53, 0xff, 0x74, 0x64, 0xff, 0xb4, 0x6c, 0xff, 0x94, 0x64, 0xff, 0x54, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x74, 0x64, 0xff, 0xd6, 0x74, 0xff, 0xf2, 0x53, 0xff, 0x15, 0x7d, 0xff, 0xba, 0xb6, 0xff, 0x35, 0x85, 0xff, 0x32, 0x5c, 0xff, 0xf5, 0x7c, 0xff, 0xba, 0xbe, 0xff, 0xfb, 0xc6, 0xff, 0x38, 0xae, 0xff, 0x76, 0x95, 0xff, 0xb1, 0x4b, 0xff, 0x94, 0x6c, 0xff, 0x38, 0xae, 0xff, 0xd9, 0xe6, 0xff, 0xf4, 0xd5, 0xff, 0x53, 0xc5, 0xff, 0x50, 0xa4, 0xff, 0xcf, 0x8b, 0xff, 0x8e, 0x83, 0xff, 0xcf, 0x8b, 0xff, 0xab, 0x6a, 0xff, 0xc8, 0x59, 0xff, 0xee, 0x9b, 0xff, 0x91, 0xa4, 0xff, 0x47, 0x31, 0xff, 0x8e, 0x83, 0xff, 0x3a, 0xff, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0x39, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x37, 0xd6, 0xff, 0x57, 0xde, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x97, 0xde, 0xff, 0x97, 0xde, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x78, 0xde, 0xff, 0x77, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xd5, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0xb5, 0xcd, 0xff, 0x74, 0xc5, 0xff, 0x33, 0xbd, 0xff, 0xd2, 0xb4, 0xff, 0x13, 0xb5, 0xff, 0x71, 0x9c, 0xff, 0xf2, 0xac, 0xff, 0x16, 0xc6, 0xff, 0xf6, 0xbd, 0xff, 0x13, 0x9d, 0xff, 0xb2, 0x8c, 0xff, 0xd6, 0xb5, 0xff, 0xd6, 0xb5, 0xff, 0xd6, 0xb5, 0xff, 0xb5, 0xad, 0xff, 0xd3, 0x94, 0xff, 0x17, 0xb6, 0xff, 0x52, 0x7c, 0xff, 0xf1, 0x6b, 0xff, 0x59, 0xb6, 0xff, 0xb6, 0xa5, 0xff, 0x55, 0x9d, 0xff, 0xb6, 0xad, 0xff, 0x37, 0xbe, 0xff, 0x78, 0xc6, 0xff, 0x14, 0x8d, 0xff, 0x31, 0x6c, 0xff, 0xf4, 0x84, 0xff, 0xd3, 0x84, 0xff, 0x95, 0xa5, 0xff, 0x34, 0x9d, 0xff, 0xf3, 0x8c, 0xff, 0x14, 0x95, 0xff, 0x14, 0x95, 0xff, 0xd3, 0x84, 0xff, 0x92, 0x7c, 0xff, 0x13, 0x95, 0xff, 0x1c, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0xce, 0xff, 0x12, 0x64, 0xff, 0x33, 0x64, 0xff, 0x33, 0x64, 0xff, 0x32, 0x64, 0xff, 0xf2, 0x5b, 0xff, 0xd2, 0x53, 0xff, 0xd1, 0x53, 0xff, 0xb1, 0x53, 0xff, 0xb1, 0x4b, 0xff, 0xd2, 0x53, 0xff, 0x73, 0x64, 0xff, 0xd5, 0x6c, 0xff, 0x74, 0x64, 0xff, 0x53, 0x5c, 0xff, 0x13, 0x5c, 0xff, 0x34, 0x5c, 0xff, 0xd5, 0x6c, 0xff, 0xd5, 0x74, 0xff, 0x9a, 0xbe, 0xff, 0x39, 0xae, 0xff, 0x32, 0x5c, 0xff, 0x77, 0x85, 0xff, 0x7a, 0xae, 0xff, 0x96, 0x8d, 0xff, 0x92, 0x6c, 0xff, 0x18, 0xae, 0xff, 0x35, 0x8d, 0xff, 0xb1, 0x4b, 0xff, 0xf5, 0x74, 0xff, 0x99, 0xce, 0xff, 0x15, 0xde, 0xff, 0xf1, 0xc4, 0xff, 0x70, 0xac, 0xff, 0xf0, 0x93, 0xff, 0x8f, 0x83, 0xff, 0xaf, 0x8b, 0xff, 0x6e, 0x83, 0xff, 0xc7, 0x51, 0xff, 0x2c, 0x7b, 0xff, 0x94, 0xc5, 0xff, 0x51, 0x94, 0xff, 0x84, 0x18, 0xff, 0xcf, 0x83, 0xff, 0x5a, 0xff, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0x3a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x78, 0xde, 0xff, 0x78, 0xde, 0xff, 0x57, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xd5, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0x94, 0xcd, 0xff, 0x53, 0xbd, 0xff, 0x33, 0xbd, 0xff, 0xb2, 0xb4, 0xff, 0xb1, 0xa4, 0xff, 0x13, 0xad, 0xff, 0xb5, 0xbd, 0xff, 0x36, 0xc6, 0xff, 0xb5, 0xb5, 0xff, 0x74, 0xad, 0xff, 0xf3, 0x9c, 0xff, 0x54, 0xa5, 0xff, 0x95, 0xa5, 0xff, 0x74, 0xad, 0xff, 0x95, 0xad, 0xff, 0xf3, 0x94, 0xff, 0x54, 0x9d, 0xff, 0x35, 0x95, 0xff, 0x93, 0x7c, 0xff, 0x55, 0x9d, 0xff, 0xb6, 0xa5, 0xff, 0x34, 0x9d, 0xff, 0xb6, 0xad, 0xff, 0x37, 0xb6, 0xff, 0x98, 0xc6, 0xff, 0x14, 0x8d, 0xff, 0xb0, 0x5b, 0xff, 0xb3, 0x84, 0xff, 0x95, 0xa5, 0xff, 0x74, 0xa5, 0xff, 0x13, 0x95, 0xff, 0x14, 0x95, 0xff, 0xd3, 0x8c, 0xff, 0x34, 0x9d, 0xff, 0xb3, 0x84, 0xff, 0x31, 0x74, 0xff, 0xb6, 0xad, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x94, 0x74, 0xff, 0x32, 0x64, 0xff, 0x33, 0x64, 0xff, 0x32, 0x5c, 0xff, 0xf2, 0x5b, 0xff, 0xd2, 0x5b, 0xff, 0xb1, 0x53, 0xff, 0xb1, 0x4b, 0xff, 0xb1, 0x4b, 0xff, 0xd2, 0x53, 0xff, 0x12, 0x5c, 0xff, 0x16, 0x75, 0xff, 0xb8, 0x8d, 0xff, 0x57, 0x7d, 0xff, 0x54, 0x5c, 0xff, 0xf2, 0x53, 0xff, 0xf2, 0x4b, 0xff, 0x39, 0xa6, 0xff, 0x1b, 0xcf, 0xff, 0xf5, 0x74, 0xff, 0x16, 0x7d, 0xff, 0x77, 0x8d, 0xff, 0x56, 0x85, 0xff, 0xd5, 0x74, 0xff, 0x15, 0x85, 0xff, 0xf8, 0x9d, 0xff, 0x76, 0x8d, 0xff, 0xb7, 0x95, 0xff, 0x76, 0x8d, 0xff, 0x16, 0xc6, 0xff, 0x31, 0xcd, 0xff, 0x70, 0xb4, 0xff, 0x30, 0x9c, 0xff, 0xaf, 0x83, 0xff, 0x8f, 0x83, 0xff, 0xef, 0x93, 0xff, 0x49, 0x5a, 0xff, 0x8b, 0x72, 0xff, 0xd2, 0xac, 0xff, 0x16, 0xc6, 0xff, 0x0d, 0x63, 0xff, 0x64, 0x18, 0xff, 0x10, 0x94, 0xff, 0x19, 0xf7, 0xff, 0xb8, 0xee, 0xff, 0xb8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0x19, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x7a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x1a, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x36, 0xd6, 0xff, 0xf5, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x33, 0xbd, 0xff, 0x33, 0xbd, 0xff, 0x53, 0xbd, 0xff, 0xd2, 0xac, 0xff, 0xf2, 0xa4, 0xff, 0xb5, 0xbd, 0xff, 0xd5, 0xbd, 0xff, 0x16, 0xc6, 0xff, 0x95, 0xb5, 0xff, 0xb5, 0xb5, 0xff, 0x75, 0xad, 0xff, 0x74, 0xa5, 0xff, 0xb5, 0xad, 0xff, 0xd2, 0x94, 0xff, 0x33, 0x9d, 0xff, 0x13, 0x95, 0xff, 0x34, 0x9d, 0xff, 0xb6, 0xa5, 0xff, 0x14, 0x8d, 0xff, 0x14, 0x95, 0xff, 0x75, 0xa5, 0xff, 0x54, 0x9d, 0xff, 0x17, 0xbe, 0xff, 0xb5, 0xad, 0xff, 0xf6, 0xb5, 0xff, 0x95, 0x9d, 0xff, 0xd1, 0x63, 0xff, 0x14, 0x95, 0xff, 0xd5, 0xad, 0xff, 0x74, 0xa5, 0xff, 0x54, 0x9d, 0xff, 0xf3, 0x8c, 0xff, 0xb2, 0x8c, 0xff, 0x95, 0xa5, 0xff, 0x51, 0x74, 0xff, 0x11, 0x74, 0xff, 0x58, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x56, 0x95, 0xff, 0x33, 0x64, 0xff, 0x33, 0x64, 0xff, 0x33, 0x64, 0xff, 0x33, 0x64, 0xff, 0xd1, 0x53, 0xff, 0x91, 0x4b, 0xff, 0x91, 0x4b, 0xff, 0xb2, 0x4b, 0xff, 0xd2, 0x53, 0xff, 0xf3, 0x5b, 0xff, 0x74, 0x64, 0xff, 0x77, 0x85, 0xff, 0x5a, 0xa6, 0xff, 0x5a, 0x9e, 0xff, 0xb8, 0x8d, 0xff, 0x97, 0x85, 0xff, 0x3b, 0xd7, 0xff, 0x59, 0xae, 0xff, 0x36, 0x75, 0xff, 0xf8, 0x95, 0xff, 0x36, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0x77, 0x8d, 0xff, 0xf8, 0x9d, 0xff, 0xf8, 0xa5, 0xff, 0xb4, 0x6c, 0xff, 0x15, 0x85, 0xff, 0x35, 0x8d, 0xff, 0x95, 0xbd, 0xff, 0x52, 0xd5, 0xff, 0x91, 0xac, 0xff, 0xae, 0x8b, 0xff, 0x6e, 0x7b, 0xff, 0x71, 0xa4, 0xff, 0x4c, 0x83, 0xff, 0x29, 0x5a, 0xff, 0xef, 0x9b, 0xff, 0xb5, 0xbd, 0xff, 0x53, 0xa5, 0xff, 0xa8, 0x39, 0xff, 0x47, 0x29, 0xff, 0xef, 0x8b, 0xff, 0xf8, 0xf6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf9, 0xf6, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0x19, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xd9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x36, 0xd6, 0xff, 0xb5, 0xcd, 0xff, 0x94, 0xcd, 0xff, 0x74, 0xcd, 0xff, 0x12, 0xbd, 0xff, 0xd2, 0xbc, 0xff, 0xd2, 0xb4, 0xff, 0x54, 0xb5, 0xff, 0x54, 0xb5, 0xff, 0x54, 0xad, 0xff, 0xf6, 0xbd, 0xff, 0xd5, 0xbd, 0xff, 0xb5, 0xb5, 0xff, 0xb5, 0xb5, 0xff, 0xb5, 0xb5, 0xff, 0xd6, 0xb5, 0xff, 0xb5, 0xad, 0xff, 0xb6, 0xad, 0xff, 0x51, 0x7c, 0xff, 0xd2, 0x8c, 0xff, 0xb2, 0x8c, 0xff, 0x74, 0xad, 0xff, 0x75, 0x9d, 0xff, 0x51, 0x74, 0xff, 0x14, 0x95, 0xff, 0x13, 0x9d, 0xff, 0x13, 0x9d, 0xff, 0xd5, 0xb5, 0xff, 0x74, 0xa5, 0xff, 0xf6, 0xb5, 0xff, 0xd6, 0xa5, 0xff, 0x11, 0x6c, 0xff, 0x55, 0x9d, 0xff, 0xb5, 0xad, 0xff, 0x54, 0x9d, 0xff, 0x74, 0xa5, 0xff, 0xd3, 0x94, 0xff, 0xd2, 0x94, 0xff, 0x34, 0x95, 0xff, 0x52, 0x74, 0xff, 0x93, 0x84, 0xff, 0xba, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0xb6, 0xff, 0x33, 0x64, 0xff, 0x12, 0x5c, 0xff, 0x33, 0x64, 0xff, 0x94, 0x6c, 0xff, 0x94, 0x6c, 0xff, 0x33, 0x5c, 0xff, 0x91, 0x4b, 0xff, 0x71, 0x43, 0xff, 0xd2, 0x53, 0xff, 0x33, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x93, 0x64, 0xff, 0x56, 0x7d, 0xff, 0x98, 0x85, 0xff, 0x19, 0x96, 0xff, 0xbc, 0xef, 0xff, 0x5a, 0xae, 0xff, 0x16, 0x75, 0xff, 0xb7, 0x8d, 0xff, 0x97, 0x8d, 0xff, 0x97, 0x95, 0xff, 0x15, 0x7d, 0xff, 0x35, 0x85, 0xff, 0xb8, 0x8d, 0xff, 0x16, 0x75, 0xff, 0x15, 0x85, 0xff, 0xd4, 0x84, 0xff, 0x74, 0xb5, 0xff, 0x73, 0xc5, 0xff, 0x30, 0x9c, 0xff, 0xae, 0x8b, 0xff, 0x0f, 0x94, 0xff, 0x51, 0xa4, 0xff, 0x8b, 0x6a, 0xff, 0xec, 0x7a, 0xff, 0xb1, 0xa4, 0xff, 0x36, 0xc6, 0xff, 0x8e, 0x73, 0xff, 0x06, 0x29, 0xff, 0x0a, 0x42, 0xff, 0x0c, 0x73, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xee, 0xff, 0xb7, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0x19, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0xf6, 0xd5, 0xff, 0xb5, 0xc5, 0xff, 0x94, 0xcd, 0xff, 0x33, 0xc5, 0xff, 0xf2, 0xbc, 0xff, 0xd2, 0xb4, 0xff, 0x54, 0xbd, 0xff, 0xb5, 0xbd, 0xff, 0x34, 0xad, 0xff, 0x54, 0xb5, 0xff, 0xf6, 0xc5, 0xff, 0xd6, 0xbd, 0xff, 0x95, 0xad, 0xff, 0xb5, 0xb5, 0xff, 0xd6, 0xb5, 0xff, 0xf6, 0xbd, 0xff, 0xd5, 0xb5, 0xff, 0x75, 0xa5, 0xff, 0x71, 0x7c, 0xff, 0x14, 0x95, 0xff, 0x92, 0x8c, 0xff, 0x74, 0xad, 0xff, 0xd3, 0x8c, 0xff, 0x51, 0x7c, 0xff, 0x33, 0x9d, 0xff, 0x33, 0x9d, 0xff, 0x13, 0x9d, 0xff, 0x74, 0xa5, 0xff, 0x95, 0xa5, 0xff, 0x37, 0xb6, 0xff, 0x54, 0x95, 0xff, 0x31, 0x74, 0xff, 0x74, 0xa5, 0xff, 0x95, 0xad, 0xff, 0x34, 0x9d, 0xff, 0x33, 0x9d, 0xff, 0xf3, 0x94, 0xff, 0x13, 0x9d, 0xff, 0x92, 0x84, 0xff, 0x72, 0x74, 0xff, 0xb3, 0x8c, 0xff, 0x3c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xd6, 0xff, 0x74, 0x6c, 0xff, 0x12, 0x5c, 0xff, 0xd2, 0x53, 0xff, 0xf2, 0x5b, 0xff, 0x74, 0x64, 0xff, 0xb5, 0x6c, 0xff, 0x95, 0x6c, 0xff, 0x54, 0x64, 0xff, 0x33, 0x5c, 0xff, 0xf3, 0x53, 0xff, 0xf2, 0x4b, 0xff, 0x33, 0x54, 0xff, 0x34, 0x54, 0xff, 0x13, 0x54, 0xff, 0xb2, 0x43, 0xff, 0x56, 0x8d, 0xff, 0xbd, 0xf7, 0xff, 0xd4, 0x6c, 0xff, 0x91, 0x43, 0xff, 0xb4, 0x74, 0xff, 0x58, 0xae, 0xff, 0xb7, 0x9d, 0xff, 0xb4, 0x74, 0xff, 0x16, 0x7d, 0xff, 0xb5, 0x6c, 0xff, 0x73, 0x64, 0xff, 0xb7, 0x95, 0xff, 0xf7, 0xa5, 0xff, 0xd6, 0xb5, 0xff, 0x33, 0xb5, 0xff, 0x51, 0x9c, 0xff, 0xaf, 0x8b, 0xff, 0x0f, 0x9c, 0xff, 0xae, 0x8b, 0xff, 0xec, 0x72, 0xff, 0xef, 0x93, 0xff, 0x93, 0xbd, 0xff, 0xb5, 0xb5, 0xff, 0xea, 0x49, 0xff, 0xa9, 0x41, 0xff, 0x6b, 0x5a, 0xff, 0x2a, 0x52, 0xff, 0x15, 0xd6, 0xff, 0xd8, 0xee, 0xff, 0xb7, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0x19, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x39, 0xef, 0xff, 0xd9, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x77, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0xd5, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0xf5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xd2, 0xbc, 0xff, 0xd1, 0xb4, 0xff, 0x94, 0xbd, 0xff, 0x57, 0xce, 0xff, 0xd5, 0xbd, 0xff, 0xf3, 0x9c, 0xff, 0x54, 0xad, 0xff, 0xf6, 0xbd, 0xff, 0xf6, 0xbd, 0xff, 0xd5, 0xbd, 0xff, 0xb5, 0xb5, 0xff, 0xd6, 0xb5, 0xff, 0xb5, 0xb5, 0xff, 0xd5, 0xb5, 0xff, 0x54, 0xa5, 0xff, 0x14, 0x95, 0xff, 0xb5, 0xa5, 0xff, 0xf3, 0x94, 0xff, 0xb5, 0xad, 0xff, 0x30, 0x7c, 0xff, 0x51, 0x7c, 0xff, 0x13, 0x9d, 0xff, 0x74, 0xa5, 0xff, 0xf2, 0x94, 0xff, 0x95, 0xad, 0xff, 0xd7, 0xb5, 0xff, 0xb2, 0x8c, 0xff, 0x51, 0x7c, 0xff, 0xf3, 0x94, 0xff, 0x54, 0xa5, 0xff, 0x71, 0x84, 0xff, 0xd2, 0x8c, 0xff, 0x33, 0x9d, 0xff, 0x34, 0xa5, 0xff, 0x54, 0x9d, 0xff, 0x31, 0x74, 0xff, 0x92, 0x7c, 0xff, 0x34, 0x9d, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xf5, 0x84, 0xff, 0x12, 0x5c, 0xff, 0x54, 0x64, 0xff, 0x74, 0x6c, 0xff, 0x54, 0x64, 0xff, 0x33, 0x5c, 0xff, 0x74, 0x64, 0xff, 0xd6, 0x6c, 0xff, 0xf6, 0x74, 0xff, 0x97, 0x85, 0xff, 0x97, 0x85, 0xff, 0xf6, 0x74, 0xff, 0x54, 0x5c, 0xff, 0xf3, 0x4b, 0xff, 0xd2, 0x4b, 0xff, 0xfb, 0xc6, 0xff, 0x3b, 0xcf, 0xff, 0xb5, 0x64, 0xff, 0x13, 0x54, 0xff, 0x15, 0x7d, 0xff, 0x57, 0x85, 0xff, 0xd4, 0x6c, 0xff, 0x74, 0x64, 0xff, 0x74, 0x64, 0xff, 0xf5, 0x74, 0xff, 0x53, 0x64, 0xff, 0xf4, 0x7c, 0xff, 0x38, 0xae, 0xff, 0x18, 0xbe, 0xff, 0x96, 0xb5, 0xff, 0x30, 0x94, 0xff, 0xcc, 0x6a, 0xff, 0x8b, 0x6a, 0xff, 0xeb, 0x72, 0xff, 0x50, 0x9c, 0xff, 0x94, 0xbd, 0xff, 0x36, 0xce, 0xff, 0xcf, 0x83, 0xff, 0x06, 0x29, 0xff, 0x4a, 0x52, 0xff, 0x4b, 0x5a, 0xff, 0x67, 0x39, 0xff, 0x93, 0xbd, 0xff, 0x19, 0xf7, 0xff, 0xb7, 0xe6, 0xff, 0xb8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x7b, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0xf9, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xde, 0xff, 0xb8, 0xde, 0xff, 0xb8, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x36, 0xde, 0xff, 0x37, 0xde, 0xff, 0x37, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xb4, 0xd5, 0xff, 0x94, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0xb4, 0xcd, 0xff, 0x56, 0xd6, 0xff, 0x12, 0xb5, 0xff, 0xf2, 0xac, 0xff, 0x94, 0xb5, 0xff, 0x77, 0xce, 0xff, 0x36, 0xc6, 0xff, 0x54, 0xad, 0xff, 0x94, 0xb5, 0xff, 0xf6, 0xbd, 0xff, 0x16, 0xc6, 0xff, 0xf5, 0xbd, 0xff, 0xf5, 0xbd, 0xff, 0xb4, 0xad, 0xff, 0xd5, 0xb5, 0xff, 0xd5, 0xb5, 0xff, 0x34, 0x9d, 0xff, 0x55, 0x9d, 0xff, 0x16, 0xb6, 0xff, 0xb5, 0xad, 0xff, 0xb6, 0xad, 0xff, 0xaf, 0x6b, 0xff, 0x8f, 0x63, 0xff, 0x92, 0x84, 0xff, 0x34, 0x9d, 0xff, 0x34, 0x9d, 0xff, 0x54, 0x9d, 0xff, 0xf0, 0x73, 0xff, 0x8e, 0x63, 0xff, 0xb2, 0x8c, 0xff, 0xb2, 0x94, 0xff, 0xf3, 0x94, 0xff, 0x51, 0x7c, 0xff, 0x13, 0x95, 0xff, 0x13, 0x95, 0xff, 0x54, 0xa5, 0xff, 0x34, 0x9d, 0xff, 0x71, 0x7c, 0xff, 0xb3, 0x84, 0xff, 0xf8, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x3b, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xad, 0xff, 0x94, 0x6c, 0xff, 0x54, 0x64, 0xff, 0xd2, 0x5b, 0xff, 0xb1, 0x53, 0xff, 0xb2, 0x4b, 0xff, 0x91, 0x4b, 0xff, 0x91, 0x4b, 0xff, 0xd2, 0x4b, 0xff, 0x53, 0x5c, 0xff, 0x36, 0x7d, 0xff, 0x99, 0x85, 0xff, 0x16, 0x75, 0xff, 0xf6, 0x6c, 0xff, 0x16, 0x7d, 0xff, 0x7c, 0xdf, 0xff, 0xd8, 0x9d, 0xff, 0x74, 0x5c, 0xff, 0xd4, 0x6c, 0xff, 0x77, 0x85, 0xff, 0x74, 0x64, 0xff, 0x74, 0x5c, 0xff, 0x74, 0x5c, 0xff, 0x74, 0x64, 0xff, 0x15, 0x7d, 0xff, 0xd5, 0x74, 0xff, 0x15, 0x85, 0xff, 0x55, 0x95, 0xff, 0x35, 0x9d, 0xff, 0x51, 0x8c, 0xff, 0x8f, 0x83, 0xff, 0xcc, 0x72, 0xff, 0x8a, 0x6a, 0xff, 0xeb, 0x72, 0xff, 0x13, 0xb5, 0xff, 0xd8, 0xde, 0xff, 0x94, 0xbd, 0xff, 0xe9, 0x49, 0xff, 0xe9, 0x41, 0xff, 0x2d, 0x73, 0xff, 0x09, 0x52, 0xff, 0xa5, 0x18, 0xff, 0xb2, 0xa4, 0xff, 0x5a, 0xff, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0x39, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x98, 0xde, 0xff, 0xf6, 0xd5, 0xff, 0x16, 0xde, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x36, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0x94, 0xd5, 0xff, 0x74, 0xcd, 0xff, 0x95, 0xcd, 0xff, 0x53, 0xbd, 0xff, 0x94, 0xc5, 0xff, 0x97, 0xd6, 0xff, 0x33, 0xad, 0xff, 0xf2, 0xa4, 0xff, 0x94, 0xbd, 0xff, 0x16, 0xc6, 0xff, 0xd6, 0xbd, 0xff, 0x94, 0xad, 0xff, 0x94, 0xb5, 0xff, 0xf5, 0xbd, 0xff, 0x16, 0xc6, 0xff, 0x94, 0xb5, 0xff, 0xd5, 0xb5, 0xff, 0xd5, 0xbd, 0xff, 0xf6, 0xbd, 0xff, 0x94, 0xad, 0xff, 0x13, 0x95, 0xff, 0x75, 0xa5, 0xff, 0x36, 0xbe, 0xff, 0xf6, 0xb5, 0xff, 0xd6, 0xad, 0xff, 0xb0, 0x63, 0xff, 0xed, 0x52, 0xff, 0x71, 0x7c, 0xff, 0x14, 0x95, 0xff, 0x75, 0x9d, 0xff, 0xb2, 0x84, 0xff, 0x2a, 0x3a, 0xff, 0x51, 0x84, 0xff, 0x95, 0xa5, 0xff, 0x92, 0x8c, 0xff, 0x13, 0x95, 0xff, 0x34, 0x95, 0xff, 0xf3, 0x8c, 0xff, 0x13, 0x95, 0xff, 0x34, 0x9d, 0xff, 0x13, 0x95, 0xff, 0x14, 0x95, 0xff, 0xf3, 0x8c, 0xff, 0xdb, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1d, 0xdf, 0xff, 0x74, 0x6c, 0xff, 0xb1, 0x53, 0xff, 0xb1, 0x53, 0xff, 0xf2, 0x53, 0xff, 0x91, 0x4b, 0xff, 0x2f, 0x3b, 0xff, 0xb1, 0x53, 0xff, 0xf2, 0x53, 0xff, 0xb1, 0x4b, 0xff, 0x51, 0x3b, 0xff, 0x51, 0x3b, 0xff, 0x54, 0x5c, 0xff, 0xb5, 0x64, 0xff, 0xd7, 0x9d, 0xff, 0x5c, 0xdf, 0xff, 0x18, 0xa6, 0xff, 0xd8, 0x95, 0xff, 0x97, 0x8d, 0xff, 0xd5, 0x6c, 0xff, 0x94, 0x6c, 0xff, 0xd5, 0x7c, 0xff, 0xb4, 0x6c, 0xff, 0xf6, 0x74, 0xff, 0x56, 0x8d, 0xff, 0x56, 0x85, 0xff, 0x36, 0x85, 0xff, 0xd4, 0x84, 0xff, 0xf0, 0x7b, 0xff, 0xaf, 0x83, 0xff, 0x4e, 0x7b, 0xff, 0x0a, 0x52, 0xff, 0x4e, 0x7b, 0xff, 0xce, 0x93, 0xff, 0xb3, 0xcd, 0xff, 0x97, 0xe6, 0xff, 0x8d, 0x7b, 0xff, 0xa8, 0x41, 0xff, 0xaf, 0x83, 0xff, 0x2d, 0x73, 0xff, 0x0a, 0x52, 0xff, 0x64, 0x10, 0xff, 0x0d, 0x73, 0xff, 0x39, 0xff, 0xff, 0x76, 0xde, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xb7, 0xee, 0xff, 0xf8, 0xee, 0xff, 0x1a, 0xef, 0xff, 0xf8, 0xf6, 0xff, 0x19, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xf7, 0xff, 0x1a, 0xef, 0xff, 0xd9, 0xe6, 0xff, 0xb5, 0xcd, 0xff, 0xb5, 0xd5, 0xff, 0x77, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xd5, 0xd5, 0xff, 0x74, 0xcd, 0xff, 0x94, 0xc5, 0xff, 0x74, 0xbd, 0xff, 0xb4, 0xc5, 0xff, 0x77, 0xde, 0xff, 0x57, 0xd6, 0xff, 0x33, 0xad, 0xff, 0xd2, 0x9c, 0xff, 0x13, 0xad, 0xff, 0xb5, 0xb5, 0xff, 0xb2, 0x94, 0xff, 0xd2, 0x9c, 0xff, 0x33, 0xad, 0xff, 0xd5, 0xbd, 0xff, 0xb5, 0xb5, 0xff, 0x33, 0xa5, 0xff, 0x33, 0xa5, 0xff, 0xd5, 0xbd, 0xff, 0xd5, 0xbd, 0xff, 0x74, 0xa5, 0xff, 0x33, 0x9d, 0xff, 0x95, 0xad, 0xff, 0xb5, 0xad, 0xff, 0xf6, 0xb5, 0xff, 0x95, 0x9d, 0xff, 0xd0, 0x63, 0xff, 0x6e, 0x5b, 0xff, 0xf3, 0x8c, 0xff, 0x95, 0xa5, 0xff, 0x95, 0xa5, 0xff, 0xac, 0x4a, 0xff, 0xc9, 0x31, 0xff, 0xf6, 0xb5, 0xff, 0x74, 0xa5, 0xff, 0xd3, 0x8c, 0xff, 0xf3, 0x8c, 0xff, 0x92, 0x7c, 0xff, 0xd3, 0x8c, 0xff, 0x54, 0x9d, 0xff, 0x54, 0x9d, 0xff, 0x14, 0x95, 0xff, 0x14, 0x95, 0xff, 0x75, 0xa5, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xf5, 0x84, 0xff, 0xd1, 0x53, 0xff, 0x91, 0x53, 0xff, 0x30, 0x43, 0xff, 0xd1, 0x53, 0xff, 0x56, 0x85, 0xff, 0x36, 0x7d, 0xff, 0xb5, 0x6c, 0xff, 0x75, 0x64, 0xff, 0x16, 0x75, 0xff, 0x97, 0x85, 0xff, 0xd8, 0x8d, 0xff, 0x98, 0x85, 0xff, 0x59, 0xae, 0xff, 0xfb, 0xce, 0xff, 0x1b, 0xcf, 0xff, 0x19, 0x9e, 0xff, 0x56, 0x7d, 0xff, 0xb7, 0x8d, 0xff, 0xd8, 0x95, 0xff, 0xd8, 0x95, 0xff, 0x98, 0x8d, 0xff, 0xd5, 0x74, 0xff, 0x97, 0x8d, 0xff, 0x56, 0x85, 0xff, 0xd4, 0x7c, 0xff, 0x72, 0x7c, 0xff, 0xd0, 0x7b, 0xff, 0x10, 0x8c, 0xff, 0x2a, 0x52, 0xff, 0x88, 0x39, 0xff, 0xcd, 0x62, 0xff, 0x91, 0x94, 0xff, 0x96, 0xde, 0xff, 0x90, 0xac, 0xff, 0xe9, 0x49, 0xff, 0x8e, 0x7b, 0xff, 0xf0, 0x8b, 0xff, 0x6b, 0x5a, 0xff, 0x88, 0x41, 0xff, 0xa5, 0x20, 0xff, 0x47, 0x31, 0xff, 0x36, 0xde, 0xff, 0xb7, 0xee, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xde, 0xff, 0x77, 0xe6, 0xff, 0xd8, 0xf6, 0xff, 0xf8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xd9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x19, 0xef, 0xff, 0xd9, 0xe6, 0xff, 0x13, 0xc5, 0xff, 0x53, 0xcd, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x36, 0xd6, 0xff, 0x57, 0xde, 0xff, 0xf6, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0x74, 0xcd, 0xff, 0xb4, 0xcd, 0xff, 0xf6, 0xcd, 0xff, 0xb2, 0x9c, 0xff, 0x74, 0xb5, 0xff, 0xd6, 0xc5, 0xff, 0x74, 0xb5, 0xff, 0xb5, 0xbd, 0xff, 0x50, 0x8c, 0xff, 0x92, 0x94, 0xff, 0xf6, 0xbd, 0xff, 0x71, 0x8c, 0xff, 0x71, 0x94, 0xff, 0xf3, 0xa4, 0xff, 0xf6, 0xbd, 0xff, 0x74, 0xad, 0xff, 0x91, 0x8c, 0xff, 0xf2, 0x9c, 0xff, 0xf5, 0xc5, 0xff, 0xb5, 0xb5, 0xff, 0x95, 0xad, 0xff, 0xb5, 0xad, 0xff, 0xf6, 0xb5, 0xff, 0xd2, 0x94, 0xff, 0xb6, 0xad, 0xff, 0x13, 0x8d, 0xff, 0x10, 0x6c, 0xff, 0x92, 0x84, 0xff, 0x34, 0x95, 0xff, 0x95, 0xa5, 0xff, 0xb6, 0xa5, 0xff, 0x09, 0x2a, 0xff, 0x8e, 0x6b, 0xff, 0xd9, 0xd6, 0xff, 0x33, 0x9d, 0xff, 0x14, 0x95, 0xff, 0xf0, 0x6b, 0xff, 0xaf, 0x63, 0xff, 0x13, 0x95, 0xff, 0x74, 0xa5, 0xff, 0x75, 0xa5, 0xff, 0xb3, 0x8c, 0xff, 0xb2, 0x84, 0xff, 0x9a, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3a, 0xb6, 0xff, 0x91, 0x4b, 0xff, 0x33, 0x64, 0xff, 0xb4, 0x6c, 0xff, 0xd8, 0x95, 0xff, 0xb5, 0x6c, 0xff, 0x30, 0x3b, 0xff, 0x54, 0x64, 0xff, 0xf6, 0x7c, 0xff, 0xd5, 0x74, 0xff, 0xd9, 0x95, 0xff, 0x98, 0x85, 0xff, 0x33, 0x5c, 0xff, 0xba, 0xbe, 0xff, 0xfc, 0xc6, 0xff, 0x77, 0x85, 0xff, 0xf2, 0x53, 0xff, 0x74, 0x64, 0xff, 0x95, 0x64, 0xff, 0xd5, 0x6c, 0xff, 0xf9, 0x95, 0xff, 0x16, 0x75, 0xff, 0xd5, 0x74, 0xff, 0xb7, 0x95, 0xff, 0x15, 0x75, 0xff, 0x56, 0x8d, 0xff, 0x73, 0x8c, 0xff, 0x6e, 0x7b, 0xff, 0x8b, 0x62, 0xff, 0x67, 0x39, 0xff, 0x4a, 0x52, 0xff, 0x4e, 0x6b, 0xff, 0x35, 0x95, 0xff, 0xd5, 0xad, 0xff, 0xeb, 0x6a, 0xff, 0x2d, 0x7b, 0xff, 0x50, 0x9c, 0xff, 0x6b, 0x62, 0xff, 0x68, 0x39, 0xff, 0x27, 0x31, 0xff, 0x47, 0x31, 0xff, 0xc6, 0x20, 0xff, 0x10, 0x94, 0xff, 0xf8, 0xee, 0xff, 0x56, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0x36, 0xd6, 0xff, 0x36, 0xe6, 0xff, 0x77, 0xee, 0xff, 0x57, 0xe6, 0xff, 0xb5, 0xd5, 0xff, 0x74, 0xcd, 0xff, 0xd5, 0xdd, 0xff, 0x36, 0xe6, 0xff, 0x98, 0xee, 0xff, 0xf9, 0xf6, 0xff, 0xf9, 0xf6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x50, 0xb4, 0xff, 0x53, 0xc5, 0xff, 0xd8, 0xee, 0xff, 0xb8, 0xee, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x56, 0xde, 0xff, 0x57, 0xde, 0xff, 0x36, 0xde, 0xff, 0xf5, 0xcd, 0xff, 0xb5, 0xcd, 0xff, 0xd5, 0xd5, 0xff, 0x94, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0x94, 0xbd, 0xff, 0x13, 0xa5, 0xff, 0xcc, 0x5a, 0xff, 0x8b, 0x52, 0xff, 0x30, 0x8c, 0xff, 0xaf, 0x73, 0xff, 0x92, 0x8c, 0xff, 0x34, 0xa5, 0xff, 0x92, 0x94, 0xff, 0x74, 0xad, 0xff, 0xb1, 0x94, 0xff, 0x71, 0x94, 0xff, 0xd2, 0x9c, 0xff, 0xb4, 0xb5, 0xff, 0x54, 0xa5, 0xff, 0xb2, 0x8c, 0xff, 0xf3, 0x9c, 0xff, 0xd5, 0xb5, 0xff, 0x74, 0xad, 0xff, 0xf6, 0xb5, 0xff, 0x16, 0xbe, 0xff, 0xf6, 0xb5, 0xff, 0x91, 0x84, 0xff, 0x34, 0x95, 0xff, 0x14, 0x95, 0xff, 0x92, 0x84, 0xff, 0xb3, 0x84, 0xff, 0x14, 0x8d, 0xff, 0xb5, 0xa5, 0xff, 0xd3, 0x84, 0xff, 0x4e, 0x53, 0xff, 0xb6, 0xb5, 0xff, 0xb8, 0xd6, 0xff, 0xb5, 0xad, 0xff, 0x10, 0x74, 0xff, 0xed, 0x52, 0xff, 0x10, 0x74, 0xff, 0xf3, 0x8c, 0xff, 0x75, 0xa5, 0xff, 0x54, 0x9d, 0xff, 0xb2, 0x8c, 0xff, 0x75, 0x9d, 0xff, 0x5d, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xe7, 0xff, 0x36, 0x85, 0xff, 0xb4, 0x74, 0xff, 0xb8, 0x95, 0xff, 0xf2, 0x5b, 0xff, 0xae, 0x32, 0xff, 0xb6, 0x74, 0xff, 0xf5, 0x7c, 0xff, 0x53, 0x6c, 0xff, 0xf3, 0x53, 0xff, 0x71, 0x43, 0xff, 0x51, 0x3b, 0xff, 0x16, 0x75, 0xff, 0xde, 0xef, 0xff, 0x18, 0x9e, 0xff, 0xf2, 0x53, 0xff, 0xb2, 0x43, 0xff, 0x13, 0x54, 0xff, 0x74, 0x64, 0xff, 0x36, 0x7d, 0xff, 0xd5, 0x6c, 0xff, 0xb5, 0x64, 0xff, 0x16, 0x7d, 0xff, 0xf8, 0x9d, 0xff, 0x97, 0x8d, 0xff, 0x56, 0x95, 0xff, 0x4e, 0x6b, 0xff, 0xed, 0x6a, 0xff, 0xe9, 0x49, 0xff, 0x27, 0x31, 0xff, 0x8c, 0x5a, 0xff, 0x4d, 0x63, 0xff, 0x35, 0x9d, 0xff, 0x92, 0x8c, 0xff, 0xaf, 0x7b, 0xff, 0x92, 0xa4, 0xff, 0xab, 0x6a, 0xff, 0x67, 0x39, 0xff, 0x68, 0x39, 0xff, 0x47, 0x31, 0xff, 0x87, 0x39, 0xff, 0x64, 0x18, 0xff, 0x4a, 0x5a, 0xff, 0xb8, 0xee, 0xff, 0x56, 0xde, 0xff, 0x77, 0xde, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb4, 0xd5, 0xff, 0x33, 0xcd, 0xff, 0x12, 0xd5, 0xff, 0x12, 0xcd, 0xff, 0xf2, 0xcc, 0xff, 0x4c, 0x9b, 0xff, 0x89, 0x82, 0xff, 0xeb, 0x8a, 0xff, 0x4c, 0x93, 0xff, 0xce, 0xab, 0xff, 0xb1, 0xd4, 0xff, 0xd5, 0xe5, 0xff, 0xb5, 0xd5, 0xff, 0xef, 0xa3, 0xff, 0x16, 0xde, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x37, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0x98, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x57, 0xde, 0xff, 0x37, 0xde, 0xff, 0xf5, 0xcd, 0xff, 0xd5, 0xd5, 0xff, 0xb4, 0xd5, 0xff, 0x73, 0xc5, 0xff, 0xf5, 0xcd, 0xff, 0x77, 0xd6, 0xff, 0x36, 0xc6, 0xff, 0x51, 0x8c, 0xff, 0x6e, 0x73, 0xff, 0x4b, 0x4a, 0xff, 0x30, 0x8c, 0xff, 0x54, 0xad, 0xff, 0xc9, 0x39, 0xff, 0x6e, 0x6b, 0xff, 0xd5, 0xb5, 0xff, 0xf2, 0x9c, 0xff, 0x33, 0xa5, 0xff, 0x53, 0xad, 0xff, 0xd2, 0x9c, 0xff, 0xf2, 0x9c, 0xff, 0x94, 0xad, 0xff, 0x12, 0x9d, 0xff, 0x54, 0xa5, 0xff, 0xf3, 0x94, 0xff, 0xb2, 0x8c, 0xff, 0x13, 0x9d, 0xff, 0x77, 0xce, 0xff, 0x57, 0xc6, 0xff, 0xf6, 0xb5, 0xff, 0xd3, 0x84, 0xff, 0x14, 0x8d, 0xff, 0x34, 0x95, 0xff, 0xd3, 0x8c, 0xff, 0x72, 0x7c, 0xff, 0x92, 0x84, 0xff, 0xf7, 0xad, 0xff, 0xed, 0x4a, 0xff, 0xf0, 0x6b, 0xff, 0x98, 0xce, 0xff, 0xb8, 0xd6, 0xff, 0x34, 0x95, 0xff, 0x4c, 0x3a, 0xff, 0xaf, 0x63, 0xff, 0x34, 0x95, 0xff, 0xb3, 0x84, 0xff, 0x14, 0x95, 0xff, 0x34, 0x95, 0xff, 0x34, 0x9d, 0xff, 0x59, 0xbe, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x74, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xad, 0xff, 0x74, 0x64, 0xff, 0x54, 0x64, 0xff, 0x30, 0x43, 0xff, 0x36, 0x7d, 0xff, 0xb4, 0x6c, 0xff, 0x30, 0x3b, 0xff, 0x10, 0x3b, 0xff, 0xd3, 0x53, 0xff, 0x34, 0x54, 0xff, 0x13, 0x4c, 0xff, 0x1b, 0xcf, 0xff, 0x1c, 0xd7, 0xff, 0x19, 0x9e, 0xff, 0xb7, 0x95, 0xff, 0x77, 0x85, 0xff, 0x94, 0x6c, 0xff, 0x77, 0x85, 0xff, 0xf5, 0x6c, 0xff, 0x54, 0x5c, 0xff, 0xf6, 0x74, 0xff, 0xd5, 0x74, 0xff, 0x15, 0x85, 0xff, 0x15, 0x75, 0xff, 0x52, 0x74, 0xff, 0xcc, 0x62, 0xff, 0xec, 0x6a, 0xff, 0x68, 0x41, 0xff, 0xa9, 0x41, 0xff, 0xac, 0x5a, 0xff, 0x6f, 0x6b, 0xff, 0xd3, 0x9c, 0xff, 0xcf, 0x7b, 0xff, 0x72, 0x94, 0xff, 0x6e, 0x7b, 0xff, 0xc8, 0x41, 0xff, 0xa9, 0x41, 0xff, 0x67, 0x39, 0xff, 0x88, 0x39, 0xff, 0xc5, 0x20, 0xff, 0x4a, 0x5a, 0xff, 0xcf, 0x8b, 0xff, 0x13, 0xb5, 0xff, 0xd8, 0xee, 0xff, 0x56, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xee, 0xff, 0xb7, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xee, 0xff, 0x52, 0xcd, 0xff, 0x4f, 0xbc, 0xff, 0x53, 0xcd, 0xff, 0x12, 0xcd, 0xff, 0x69, 0x8a, 0xff, 0xa6, 0x69, 0xff, 0x25, 0x59, 0xff, 0xc4, 0x48, 0xff, 0x83, 0x38, 0xff, 0xa6, 0x79, 0xff, 0xa9, 0x9a, 0xff, 0xad, 0x9b, 0xff, 0xf6, 0xd5, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xb5, 0xc5, 0xff, 0x57, 0xd6, 0xff, 0x37, 0xde, 0xff, 0x37, 0xde, 0xff, 0x36, 0xd6, 0xff, 0xf5, 0xcd, 0xff, 0xd5, 0xcd, 0xff, 0xb4, 0xcd, 0xff, 0x74, 0xcd, 0xff, 0xb5, 0xc5, 0xff, 0xf6, 0xc5, 0xff, 0x16, 0xc6, 0xff, 0x98, 0xd6, 0xff, 0xb3, 0x9c, 0xff, 0x0a, 0x42, 0xff, 0x0d, 0x63, 0xff, 0x1a, 0xe7, 0xff, 0xb5, 0xb5, 0xff, 0xe6, 0x20, 0xff, 0x2e, 0x63, 0xff, 0xd5, 0xb5, 0xff, 0x94, 0xad, 0xff, 0xf6, 0xbd, 0xff, 0x94, 0xb5, 0xff, 0x13, 0xa5, 0xff, 0x74, 0xa5, 0xff, 0x75, 0xa5, 0xff, 0xf2, 0x9c, 0xff, 0x16, 0xbe, 0xff, 0x51, 0x7c, 0xff, 0x8e, 0x63, 0xff, 0x13, 0xa5, 0xff, 0x77, 0xce, 0xff, 0x77, 0xc6, 0xff, 0xd6, 0xad, 0xff, 0xb3, 0x84, 0xff, 0xb2, 0x84, 0xff, 0x74, 0x9d, 0xff, 0x34, 0x95, 0xff, 0x8e, 0x5b, 0xff, 0x51, 0x7c, 0xff, 0xb6, 0xa5, 0xff, 0xac, 0x4a, 0xff, 0x92, 0x84, 0xff, 0x36, 0xbe, 0xff, 0xb9, 0xd6, 0xff, 0x11, 0x6c, 0xff, 0xcd, 0x4a, 0xff, 0x51, 0x7c, 0xff, 0x92, 0x7c, 0xff, 0x92, 0x7c, 0xff, 0xf3, 0x8c, 0xff, 0x34, 0x95, 0xff, 0x14, 0x95, 0xff, 0xfc, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0xdf, 0xff, 0x16, 0x7d, 0xff, 0x70, 0x43, 0xff, 0x74, 0x64, 0xff, 0x33, 0x64, 0xff, 0x0f, 0x3b, 0xff, 0x92, 0x4b, 0xff, 0x93, 0x53, 0xff, 0x71, 0x43, 0xff, 0x71, 0x3b, 0xff, 0xf9, 0x95, 0xff, 0xbd, 0xef, 0xff, 0x79, 0xb6, 0xff, 0x19, 0x96, 0xff, 0xb5, 0x6c, 0xff, 0x94, 0x64, 0xff, 0x19, 0x9e, 0xff, 0xd8, 0x9d, 0xff, 0x54, 0x5c, 0xff, 0xb5, 0x6c, 0xff, 0x98, 0x8d, 0xff, 0xb7, 0x95, 0xff, 0xf4, 0x7c, 0xff, 0xd4, 0x6c, 0xff, 0x93, 0x84, 0xff, 0x8e, 0x7b, 0xff, 0x6b, 0x5a, 0xff, 0x27, 0x31, 0xff, 0xac, 0x5a, 0xff, 0x4e, 0x6b, 0xff, 0x31, 0x8c, 0xff, 0x72, 0x94, 0xff, 0x11, 0x8c, 0xff, 0xf0, 0x83, 0xff, 0x09, 0x4a, 0xff, 0xa8, 0x41, 0xff, 0x68, 0x31, 0xff, 0x67, 0x31, 0xff, 0x06, 0x29, 0xff, 0xa9, 0x41, 0xff, 0xf6, 0xd5, 0xff, 0xeb, 0x72, 0xff, 0x8b, 0x62, 0xff, 0xf9, 0xf6, 0xff, 0x56, 0xde, 0xff, 0x56, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0x19, 0xef, 0xff, 0x98, 0xe6, 0xff, 0x32, 0xc5, 0xff, 0xb0, 0xc4, 0xff, 0xad, 0xbb, 0xff, 0x2b, 0xb3, 0xff, 0x0b, 0xab, 0xff, 0x6d, 0xab, 0xff, 0xcf, 0xb3, 0xff, 0x4d, 0x9b, 0xff, 0x49, 0x7a, 0xff, 0x0b, 0x8b, 0xff, 0x53, 0xc5, 0xff, 0xd9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xf6, 0xd5, 0xff, 0xf5, 0xcd, 0xff, 0x94, 0xbd, 0xff, 0xf6, 0xc5, 0xff, 0x16, 0xd6, 0xff, 0x36, 0xd6, 0xff, 0x36, 0xd6, 0xff, 0xf5, 0xd5, 0xff, 0xd5, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0xd5, 0xc5, 0xff, 0x57, 0xce, 0xff, 0xd6, 0xbd, 0xff, 0x72, 0x8c, 0xff, 0x34, 0xa5, 0xff, 0x72, 0x8c, 0xff, 0xea, 0x39, 0xff, 0x92, 0x8c, 0xff, 0x98, 0xce, 0xff, 0x92, 0x8c, 0xff, 0x03, 0x00, 0xff, 0x4e, 0x63, 0xff, 0xb5, 0xad, 0xff, 0xb5, 0xb5, 0xff, 0x94, 0xb5, 0xff, 0x13, 0xa5, 0xff, 0x13, 0x9d, 0xff, 0x94, 0xa5, 0xff, 0x54, 0xa5, 0xff, 0xd2, 0x94, 0xff, 0x98, 0xce, 0xff, 0xaf, 0x6b, 0xff, 0xac, 0x4a, 0xff, 0xb5, 0xb5, 0xff, 0x56, 0xc6, 0xff, 0x78, 0xc6, 0xff, 0x34, 0x95, 0xff, 0x6f, 0x5b, 0xff, 0xd0, 0x6b, 0xff, 0xf7, 0xad, 0xff, 0x51, 0x74, 0xff, 0xed, 0x4a, 0xff, 0xb6, 0xa5, 0xff, 0x92, 0x7c, 0xff, 0x6c, 0x42, 0xff, 0xb3, 0x84, 0xff, 0xf5, 0xb5, 0xff, 0x37, 0xbe, 0xff, 0xf0, 0x6b, 0xff, 0x8f, 0x5b, 0xff, 0x6f, 0x5b, 0xff, 0xf4, 0x8c, 0xff, 0xd3, 0x84, 0xff, 0x34, 0x9d, 0xff, 0x95, 0xa5, 0xff, 0x75, 0x9d, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x95, 0xff, 0xf2, 0x53, 0xff, 0x54, 0x64, 0xff, 0x70, 0x43, 0xff, 0xb2, 0x4b, 0xff, 0x92, 0x4b, 0xff, 0x51, 0x43, 0xff, 0x71, 0x43, 0xff, 0x17, 0x75, 0xff, 0x9a, 0xb6, 0xff, 0xba, 0xbe, 0xff, 0xb8, 0x8d, 0xff, 0xd6, 0x64, 0xff, 0xf2, 0x4b, 0xff, 0x16, 0x75, 0xff, 0x98, 0x95, 0xff, 0xb4, 0x6c, 0xff, 0x36, 0x7d, 0xff, 0x57, 0x7d, 0xff, 0x16, 0x7d, 0xff, 0xf8, 0x9d, 0xff, 0xb7, 0x95, 0xff, 0x97, 0x8d, 0xff, 0xd3, 0x94, 0xff, 0xf0, 0x8b, 0xff, 0xcc, 0x62, 0xff, 0x47, 0x39, 0xff, 0xcd, 0x62, 0xff, 0xf0, 0x83, 0xff, 0x92, 0x94, 0xff, 0x51, 0x8c, 0xff, 0xf1, 0x83, 0xff, 0x2a, 0x52, 0xff, 0xa9, 0x41, 0xff, 0xc9, 0x41, 0xff, 0x47, 0x31, 0xff, 0xe6, 0x20, 0xff, 0x06, 0x29, 0xff, 0xef, 0x93, 0xff, 0xee, 0x9b, 0xff, 0x46, 0x41, 0xff, 0x67, 0x41, 0xff, 0x94, 0xc5, 0xff, 0xb8, 0xee, 0xff, 0x56, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x57, 0xde, 0xff, 0xd1, 0xc4, 0xff, 0x4c, 0xab, 0xff, 0x0b, 0xab, 0xff, 0xce, 0xb3, 0xff, 0xf3, 0xc4, 0xff, 0x74, 0xc5, 0xff, 0x94, 0xcd, 0xff, 0x16, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xde, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x16, 0xce, 0xff, 0xd5, 0xc5, 0xff, 0xb5, 0xb5, 0xff, 0xb5, 0xb5, 0xff, 0x16, 0xce, 0xff, 0x36, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xc5, 0xff, 0x36, 0xc6, 0xff, 0x16, 0xc6, 0xff, 0x16, 0xbe, 0xff, 0xf6, 0xbd, 0xff, 0x52, 0x8c, 0xff, 0xea, 0x39, 0xff, 0x4b, 0x42, 0xff, 0xd0, 0x73, 0xff, 0xb1, 0x8c, 0xff, 0xd3, 0x94, 0xff, 0x04, 0x00, 0xff, 0xcf, 0x73, 0xff, 0x95, 0xb5, 0xff, 0x37, 0xc6, 0xff, 0x73, 0xad, 0xff, 0xf3, 0x9c, 0xff, 0x54, 0xa5, 0xff, 0xd5, 0xb5, 0xff, 0xd2, 0x94, 0xff, 0x91, 0x8c, 0xff, 0x99, 0xce, 0xff, 0x6e, 0x63, 0xff, 0x2a, 0x3a, 0xff, 0xf6, 0xb5, 0xff, 0xd5, 0xad, 0xff, 0xd6, 0xa5, 0xff, 0x92, 0x7c, 0xff, 0x6b, 0x3a, 0xff, 0xf1, 0x6b, 0xff, 0x93, 0x7c, 0xff, 0x8f, 0x5b, 0xff, 0xd4, 0x8c, 0xff, 0xb6, 0x9d, 0xff, 0x8c, 0x42, 0xff, 0x89, 0x21, 0xff, 0xf3, 0x84, 0xff, 0xd5, 0xa5, 0xff, 0xd2, 0x84, 0xff, 0x11, 0x74, 0xff, 0x90, 0x63, 0xff, 0xf2, 0x6b, 0xff, 0x76, 0x9d, 0xff, 0x54, 0x95, 0xff, 0xb6, 0xa5, 0xff, 0x31, 0x74, 0xff, 0x7a, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x63, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xd6, 0xff, 0x94, 0x6c, 0xff, 0x92, 0x4b, 0xff, 0x51, 0x43, 0xff, 0x50, 0x43, 0xff, 0x50, 0x43, 0xff, 0xf3, 0x53, 0xff, 0x36, 0x7d, 0xff, 0xdb, 0xae, 0xff, 0x18, 0x96, 0xff, 0x79, 0xae, 0xff, 0xf6, 0x74, 0xff, 0xd5, 0x6c, 0xff, 0x57, 0x7d, 0xff, 0x98, 0x85, 0xff, 0x16, 0x7d, 0xff, 0xf6, 0x74, 0xff, 0xf6, 0x6c, 0xff, 0xb5, 0x6c, 0xff, 0x94, 0x64, 0xff, 0xb7, 0x95, 0xff, 0x97, 0x8d, 0xff, 0xb7, 0x95, 0xff, 0x13, 0x9d, 0xff, 0x51, 0x94, 0xff, 0x2d, 0x73, 0xff, 0x0a, 0x52, 0xff, 0x0d, 0x73, 0xff, 0xcf, 0x8b, 0xff, 0x52, 0x8c, 0xff, 0x52, 0x8c, 0xff, 0x8b, 0x5a, 0xff, 0x46, 0x39, 0xff, 0xc9, 0x41, 0xff, 0x67, 0x31, 0xff, 0xe5, 0x20, 0xff, 0x06, 0x31, 0xff, 0xcc, 0x72, 0xff, 0x4c, 0x8b, 0xff, 0x48, 0x6a, 0xff, 0x69, 0x72, 0xff, 0x63, 0x20, 0xff, 0x8e, 0x83, 0xff, 0xf9, 0xf6, 0xff, 0x35, 0xde, 0xff, 0x56, 0xde, 0xff, 0x77, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0x94, 0xcd, 0xff, 0xf1, 0xcc, 0xff, 0x33, 0xcd, 0xff, 0xf5, 0xd5, 0xff, 0x77, 0xd6, 0xff, 0x78, 0xde, 0xff, 0x98, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb7, 0xde, 0xff, 0xd8, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xde, 0xff, 0xd5, 0xc5, 0xff, 0xf6, 0xb5, 0xff, 0x75, 0x9d, 0xff, 0x75, 0x9d, 0xff, 0xf6, 0xb5, 0xff, 0x16, 0xc6, 0xff, 0xf5, 0xc5, 0xff, 0xf6, 0xc5, 0xff, 0x37, 0xc6, 0xff, 0x16, 0xbe, 0xff, 0xf7, 0xbd, 0xff, 0x95, 0xad, 0xff, 0xd5, 0xb5, 0xff, 0x78, 0xc6, 0xff, 0x14, 0x9d, 0xff, 0x4b, 0x42, 0xff, 0x6c, 0x4a, 0xff, 0xcf, 0x73, 0xff, 0x96, 0xad, 0xff, 0xed, 0x5a, 0xff, 0x03, 0x00, 0xff, 0x70, 0x8c, 0xff, 0x56, 0xce, 0xff, 0x37, 0xce, 0xff, 0x94, 0xb5, 0xff, 0xf5, 0xbd, 0xff, 0x54, 0xa5, 0xff, 0x95, 0xa5, 0xff, 0xd2, 0x8c, 0xff, 0x71, 0x7c, 0xff, 0xb5, 0xa5, 0xff, 0xaf, 0x63, 0xff, 0xed, 0x52, 0xff, 0x95, 0xa5, 0xff, 0xaf, 0x63, 0xff, 0x32, 0x74, 0xff, 0x52, 0x74, 0xff, 0xad, 0x3a, 0xff, 0xf1, 0x63, 0xff, 0x4f, 0x4b, 0xff, 0x31, 0x6c, 0xff, 0x37, 0xae, 0xff, 0x93, 0x74, 0xff, 0xe7, 0x18, 0xff, 0x68, 0x21, 0xff, 0x75, 0x95, 0xff, 0x56, 0x95, 0xff, 0x8c, 0x3a, 0xff, 0x8f, 0x63, 0xff, 0x72, 0x7c, 0xff, 0x16, 0xae, 0xff, 0x16, 0xb6, 0xff, 0xd6, 0xad, 0xff, 0xaf, 0x63, 0xff, 0x32, 0x74, 0xff, 0x7e, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xbf, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0xa5, 0xff, 0x53, 0x64, 0xff, 0x13, 0x5c, 0xff, 0x33, 0x5c, 0xff, 0x17, 0x75, 0xff, 0x16, 0x75, 0xff, 0x39, 0x9e, 0xff, 0x39, 0x9e, 0xff, 0x98, 0x85, 0xff, 0xf9, 0x95, 0xff, 0xd5, 0x6c, 0xff, 0xb8, 0x8d, 0xff, 0x36, 0x7d, 0xff, 0xf6, 0x74, 0xff, 0xd5, 0x6c, 0xff, 0xf6, 0x74, 0xff, 0xb5, 0x6c, 0xff, 0x95, 0x64, 0xff, 0xb5, 0x6c, 0xff, 0x76, 0x8d, 0xff, 0x77, 0x85, 0xff, 0x97, 0x8d, 0xff, 0x33, 0xa5, 0xff, 0xf2, 0xa4, 0xff, 0x71, 0x9c, 0xff, 0xab, 0x6a, 0xff, 0xab, 0x6a, 0xff, 0xaf, 0x83, 0xff, 0x72, 0x84, 0xff, 0x4e, 0x73, 0xff, 0x67, 0x39, 0xff, 0xa8, 0x41, 0xff, 0x68, 0x39, 0xff, 0xe5, 0x28, 0xff, 0x06, 0x29, 0xff, 0xc8, 0x41, 0xff, 0x8b, 0x72, 0xff, 0x6a, 0x72, 0xff, 0x6c, 0x9b, 0xff, 0xaa, 0x7a, 0xff, 0xa4, 0x20, 0xff, 0xab, 0x62, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x97, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xf5, 0xd5, 0xff, 0x73, 0xcd, 0xff, 0xf5, 0xd5, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf8, 0xe6, 0xff, 0xf8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0x37, 0xd6, 0xff, 0x54, 0xc5, 0xff, 0xb1, 0xac, 0xff, 0x16, 0xb6, 0xff, 0x17, 0xae, 0xff, 0xd6, 0xa5, 0xff, 0x16, 0xb6, 0xff, 0x16, 0xc6, 0xff, 0x36, 0xce, 0xff, 0x17, 0xc6, 0xff, 0x34, 0x9d, 0xff, 0x34, 0x9d, 0xff, 0xb3, 0x84, 0xff, 0x30, 0x7c, 0xff, 0xb2, 0x8c, 0xff, 0xd6, 0xb5, 0xff, 0xb3, 0x8c, 0xff, 0xcd, 0x4a, 0xff, 0xd3, 0x94, 0xff, 0xf9, 0xd6, 0xff, 0x34, 0xa5, 0xff, 0x85, 0x10, 0xff, 0x67, 0x29, 0xff, 0xb5, 0xb5, 0xff, 0x33, 0xa5, 0xff, 0x33, 0xa5, 0xff, 0xd5, 0xbd, 0xff, 0xd4, 0xbd, 0xff, 0x92, 0x8c, 0xff, 0xb2, 0x8c, 0xff, 0x71, 0x84, 0xff, 0x6f, 0x63, 0xff, 0x95, 0x9d, 0xff, 0x6e, 0x5b, 0xff, 0xcf, 0x6b, 0xff, 0x75, 0x9d, 0xff, 0x4b, 0x3a, 0xff, 0xd0, 0x63, 0xff, 0x70, 0x5b, 0xff, 0x8c, 0x3a, 0xff, 0x2b, 0x2a, 0xff, 0xee, 0x42, 0xff, 0x96, 0x9d, 0xff, 0xb6, 0x9d, 0xff, 0xcd, 0x42, 0xff, 0x65, 0x08, 0xff, 0xb0, 0x63, 0xff, 0xf7, 0xa5, 0xff, 0x6c, 0x3a, 0xff, 0x8d, 0x3a, 0xff, 0x51, 0x74, 0xff, 0xf3, 0x8c, 0xff, 0x37, 0xb6, 0xff, 0x36, 0xb6, 0xff, 0x11, 0x7c, 0xff, 0xac, 0x42, 0xff, 0x19, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x74, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xdf, 0xff, 0xf5, 0x74, 0xff, 0x16, 0x7d, 0xff, 0x78, 0x85, 0xff, 0x74, 0x64, 0xff, 0xd7, 0x95, 0xff, 0xbb, 0xae, 0xff, 0xb5, 0x64, 0xff, 0xb6, 0x64, 0xff, 0x56, 0x7d, 0xff, 0x59, 0xa6, 0xff, 0x19, 0x96, 0xff, 0x16, 0x75, 0xff, 0x74, 0x5c, 0xff, 0x13, 0x54, 0xff, 0xf6, 0x74, 0xff, 0x77, 0x85, 0xff, 0x16, 0x75, 0xff, 0xb4, 0x6c, 0xff, 0x36, 0x7d, 0xff, 0xd7, 0x9d, 0xff, 0x35, 0x7d, 0xff, 0xb5, 0xad, 0xff, 0xb5, 0xc5, 0xff, 0x92, 0xa4, 0xff, 0x4a, 0x62, 0xff, 0x6b, 0x62, 0xff, 0x31, 0x84, 0xff, 0x93, 0x8c, 0xff, 0x4a, 0x52, 0xff, 0x67, 0x39, 0xff, 0xa8, 0x41, 0xff, 0x07, 0x31, 0xff, 0x06, 0x29, 0xff, 0x47, 0x31, 0xff, 0x6a, 0x5a, 0xff, 0xcb, 0x7a, 0xff, 0x0a, 0x8b, 0xff, 0x70, 0xbc, 0xff, 0xc8, 0x51, 0xff, 0x47, 0x39, 0xff, 0xcb, 0x6a, 0xff, 0x53, 0xbd, 0xff, 0x76, 0xe6, 0xff, 0x15, 0xde, 0xff, 0x56, 0xde, 0xff, 0x97, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xf8, 0xee, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0x36, 0xde, 0xff, 0x16, 0xde, 0xff, 0x77, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb7, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x57, 0xd6, 0xff, 0x12, 0xb5, 0xff, 0xae, 0x8b, 0xff, 0x96, 0xb5, 0xff, 0xb9, 0xce, 0xff, 0x37, 0xb6, 0xff, 0x78, 0xc6, 0xff, 0x77, 0xc6, 0xff, 0x97, 0xd6, 0xff, 0xf6, 0xbd, 0xff, 0x52, 0x7c, 0xff, 0x14, 0x95, 0xff, 0xb3, 0x84, 0xff, 0x32, 0x74, 0xff, 0xf1, 0x73, 0xff, 0xaf, 0x6b, 0xff, 0x0a, 0x32, 0xff, 0x0d, 0x53, 0xff, 0x75, 0xa5, 0xff, 0xd5, 0xb5, 0xff, 0xa8, 0x31, 0xff, 0x23, 0x00, 0xff, 0xb5, 0xad, 0xff, 0xf3, 0x9c, 0xff, 0xe9, 0x41, 0xff, 0x73, 0xad, 0xff, 0xd2, 0x94, 0xff, 0xb1, 0x94, 0xff, 0x91, 0x8c, 0xff, 0xf0, 0x6b, 0xff, 0x2e, 0x5b, 0xff, 0x68, 0x29, 0xff, 0xd3, 0x7c, 0xff, 0x6f, 0x5b, 0xff, 0x74, 0xa5, 0xff, 0xb2, 0x84, 0xff, 0xce, 0x42, 0xff, 0x12, 0x64, 0xff, 0x0e, 0x4b, 0xff, 0x2b, 0x32, 0xff, 0xe7, 0x10, 0xff, 0x51, 0x74, 0xff, 0x99, 0xb6, 0xff, 0x12, 0x64, 0xff, 0xc6, 0x08, 0xff, 0x2b, 0x32, 0xff, 0x19, 0xa6, 0xff, 0x4e, 0x5b, 0xff, 0xc6, 0x10, 0xff, 0x4f, 0x4b, 0xff, 0xb3, 0x7c, 0xff, 0x75, 0x9d, 0xff, 0xb6, 0xa5, 0xff, 0xb3, 0x84, 0xff, 0x4e, 0x53, 0xff, 0x35, 0x8d, 0xff, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xc7, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0x8d, 0xff, 0x34, 0x5c, 0xff, 0xd1, 0x4b, 0xff, 0x36, 0x7d, 0xff, 0xd8, 0x95, 0xff, 0x16, 0x6d, 0xff, 0xb5, 0x64, 0xff, 0x36, 0x75, 0xff, 0x97, 0x8d, 0xff, 0x59, 0xae, 0xff, 0xf8, 0x8d, 0xff, 0xf6, 0x6c, 0xff, 0x95, 0x64, 0xff, 0xb5, 0x64, 0xff, 0xd5, 0x6c, 0xff, 0x57, 0x7d, 0xff, 0xb5, 0x64, 0xff, 0xb4, 0x6c, 0xff, 0xb7, 0x9d, 0xff, 0xd7, 0x9d, 0xff, 0x55, 0x85, 0xff, 0x58, 0xbe, 0xff, 0x16, 0xd6, 0xff, 0x50, 0x9c, 0xff, 0x8b, 0x6a, 0xff, 0x09, 0x52, 0xff, 0xf0, 0x83, 0xff, 0x51, 0x84, 0xff, 0x4a, 0x5a, 0xff, 0x67, 0x39, 0xff, 0xc5, 0x20, 0xff, 0x03, 0x08, 0xff, 0x44, 0x10, 0xff, 0x67, 0x39, 0xff, 0xab, 0x6a, 0xff, 0x8c, 0x93, 0xff, 0xb0, 0xc4, 0xff, 0x4d, 0x8b, 0xff, 0xa4, 0x20, 0xff, 0x0c, 0x7b, 0xff, 0x6e, 0x83, 0xff, 0xae, 0x83, 0xff, 0x56, 0xe6, 0xff, 0x15, 0xd6, 0xff, 0x56, 0xde, 0xff, 0x97, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x7a, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x38, 0xf7, 0xff, 0x98, 0xe6, 0xff, 0xbb, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x39, 0xf7, 0xff, 0xb7, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xde, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x97, 0xde, 0xff, 0x97, 0xe6, 0xff, 0x57, 0xd6, 0xff, 0x95, 0xbd, 0xff, 0xae, 0x83, 0xff, 0x51, 0x8c, 0xff, 0x58, 0xc6, 0xff, 0x57, 0xc6, 0xff, 0x17, 0xb6, 0xff, 0x57, 0xbe, 0xff, 0x5a, 0xef, 0xff, 0x54, 0xad, 0xff, 0x32, 0x7c, 0xff, 0x56, 0x9d, 0xff, 0x6e, 0x5b, 0xff, 0x2e, 0x5b, 0xff, 0x52, 0x84, 0xff, 0x71, 0x8c, 0xff, 0x75, 0xa5, 0xff, 0x17, 0xb6, 0xff, 0x74, 0xad, 0xff, 0x4e, 0x6b, 0xff, 0x00, 0x00, 0xff, 0x8d, 0x52, 0xff, 0x75, 0xa5, 0xff, 0xce, 0x73, 0xff, 0xcf, 0x7b, 0xff, 0x36, 0xc6, 0xff, 0x0c, 0x5b, 0xff, 0x6e, 0x63, 0xff, 0x0f, 0x74, 0xff, 0xea, 0x31, 0xff, 0x88, 0x29, 0xff, 0xe6, 0x18, 0xff, 0x6c, 0x3a, 0xff, 0xf0, 0x6b, 0xff, 0xb9, 0xc6, 0xff, 0x0d, 0x53, 0xff, 0xca, 0x21, 0xff, 0x12, 0x5c, 0xff, 0x4f, 0x4b, 0xff, 0x68, 0x21, 0xff, 0xc9, 0x31, 0xff, 0x18, 0xae, 0xff, 0xd4, 0x7c, 0xff, 0x0b, 0x32, 0xff, 0x48, 0x11, 0xff, 0xb4, 0x7c, 0xff, 0x72, 0x74, 0xff, 0x85, 0x08, 0xff, 0x4b, 0x42, 0xff, 0xb0, 0x53, 0xff, 0xac, 0x42, 0xff, 0xd3, 0x8c, 0xff, 0xd4, 0x84, 0xff, 0x4b, 0x32, 0xff, 0xf1, 0x63, 0xff, 0xdb, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x74, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x98, 0x8d, 0xff, 0xb8, 0x85, 0xff, 0x77, 0x85, 0xff, 0xb1, 0x43, 0xff, 0x17, 0x7d, 0xff, 0x39, 0x9e, 0xff, 0xb7, 0x85, 0xff, 0x36, 0x75, 0xff, 0xd8, 0x95, 0xff, 0xd5, 0x64, 0xff, 0x14, 0x54, 0xff, 0xb5, 0x64, 0xff, 0xd6, 0x6c, 0xff, 0xf6, 0x6c, 0xff, 0x36, 0x75, 0xff, 0x36, 0x75, 0xff, 0xd7, 0x9d, 0xff, 0xb7, 0x95, 0xff, 0xf7, 0xa5, 0xff, 0xf8, 0xa5, 0xff, 0xf7, 0xad, 0xff, 0xd5, 0xcd, 0xff, 0x50, 0xa4, 0xff, 0xe9, 0x51, 0xff, 0xa8, 0x51, 0xff, 0x6e, 0x7b, 0xff, 0x10, 0x84, 0xff, 0x8b, 0x62, 0xff, 0xc5, 0x28, 0xff, 0x6b, 0x52, 0xff, 0xf0, 0x83, 0xff, 0x2d, 0x6b, 0xff, 0xa8, 0x41, 0xff, 0xae, 0x8b, 0xff, 0x6f, 0xb4, 0xff, 0xee, 0xb3, 0xff, 0xa8, 0x49, 0xff, 0x67, 0x39, 0xff, 0x50, 0xac, 0xff, 0xe8, 0x59, 0xff, 0xc4, 0x28, 0xff, 0x73, 0xc5, 0xff, 0x56, 0xe6, 0xff, 0x15, 0xd6, 0xff, 0x77, 0xde, 0xff, 0x77, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x9b, 0xff, 0xff, 0x16, 0xc6, 0xff, 0x2c, 0x6b, 0xff, 0x57, 0xce, 0xff, 0xbb, 0xff, 0xff, 0xf3, 0x9c, 0xff, 0xf3, 0xa4, 0xff, 0xb8, 0xe6, 0xff, 0x5a, 0xf7, 0xff, 0xf8, 0xe6, 0xff, 0xb8, 0xde, 0xff, 0xd8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x36, 0xd6, 0xff, 0x16, 0xce, 0xff, 0xb5, 0xc5, 0xff, 0x94, 0xb5, 0xff, 0xd6, 0xb5, 0xff, 0x75, 0xad, 0xff, 0x54, 0x9d, 0xff, 0x37, 0xbe, 0xff, 0xf9, 0xd6, 0xff, 0x96, 0x9d, 0xff, 0x92, 0x84, 0xff, 0xf6, 0xbd, 0xff, 0x54, 0x9d, 0xff, 0x55, 0x95, 0xff, 0x51, 0x7c, 0xff, 0x4e, 0x63, 0xff, 0x13, 0x95, 0xff, 0x34, 0x9d, 0xff, 0x58, 0xbe, 0xff, 0x34, 0x9d, 0xff, 0x4d, 0x63, 0xff, 0x51, 0x8c, 0xff, 0x8b, 0x52, 0xff, 0x4d, 0x6b, 0xff, 0x30, 0x84, 0xff, 0x71, 0x84, 0xff, 0x54, 0xa5, 0xff, 0x91, 0x94, 0xff, 0x50, 0x84, 0xff, 0x4e, 0x63, 0xff, 0x88, 0x29, 0xff, 0xa9, 0x31, 0xff, 0x04, 0x00, 0xff, 0x4a, 0x42, 0xff, 0xf0, 0x6b, 0xff, 0x65, 0x08, 0xff, 0x31, 0x74, 0xff, 0x78, 0xbe, 0xff, 0x0a, 0x32, 0xff, 0x27, 0x11, 0xff, 0x6c, 0x3a, 0xff, 0x0b, 0x32, 0xff, 0xe7, 0x10, 0xff, 0xf4, 0x94, 0xff, 0xb6, 0x9d, 0xff, 0xa9, 0x19, 0xff, 0xea, 0x29, 0xff, 0x12, 0x64, 0xff, 0x32, 0x64, 0xff, 0x0a, 0x32, 0xff, 0x0e, 0x53, 0xff, 0xb1, 0x5b, 0xff, 0xac, 0x3a, 0xff, 0xcd, 0x4a, 0xff, 0x93, 0x7c, 0xff, 0x2e, 0x4b, 0xff, 0x6f, 0x53, 0xff, 0xd4, 0x8c, 0xff, 0xbf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xc7, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0xcf, 0xff, 0xf5, 0x74, 0xff, 0x53, 0x5c, 0xff, 0x16, 0x75, 0xff, 0x98, 0x85, 0xff, 0x76, 0x7d, 0xff, 0x36, 0x75, 0xff, 0x37, 0x75, 0xff, 0x78, 0x7d, 0xff, 0xf6, 0x6c, 0xff, 0x53, 0x54, 0xff, 0x95, 0x64, 0xff, 0x95, 0x64, 0xff, 0xb5, 0x64, 0xff, 0x74, 0x5c, 0xff, 0x36, 0x7d, 0xff, 0x18, 0xa6, 0xff, 0x76, 0x85, 0xff, 0x96, 0x95, 0xff, 0xd7, 0xa5, 0xff, 0x96, 0xa5, 0xff, 0x94, 0xc5, 0xff, 0x0e, 0x9c, 0xff, 0x6a, 0x6a, 0xff, 0xc8, 0x51, 0xff, 0xec, 0x62, 0xff, 0x31, 0x84, 0xff, 0x87, 0x39, 0xff, 0xb2, 0x9c, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x77, 0xd6, 0xff, 0x94, 0xbd, 0xff, 0xce, 0x9b, 0xff, 0x4b, 0x93, 0xff, 0x06, 0x31, 0xff, 0xc8, 0x51, 0xff, 0xce, 0x9b, 0xff, 0xee, 0x93, 0xff, 0x30, 0x94, 0xff, 0xf1, 0xac, 0xff, 0xf5, 0xd5, 0xff, 0xd5, 0xcd, 0xff, 0xf5, 0xd5, 0xff, 0x36, 0xd6, 0xff, 0xd8, 0xee, 0xff, 0x19, 0xf7, 0xff, 0x88, 0x31, 0xff, 0x01, 0x00, 0xff, 0x68, 0x29, 0xff, 0x6b, 0x4a, 0xff, 0x43, 0x08, 0xff, 0x43, 0x08, 0xff, 0x6d, 0x6b, 0xff, 0x78, 0xce, 0xff, 0x39, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0x77, 0xde, 0xff, 0x74, 0xc5, 0xff, 0xb5, 0xc5, 0xff, 0x94, 0xb5, 0xff, 0x95, 0xb5, 0xff, 0x16, 0xbe, 0xff, 0x57, 0xbe, 0xff, 0x99, 0xbe, 0xff, 0x38, 0xb6, 0xff, 0x77, 0xc6, 0xff, 0xf7, 0xad, 0xff, 0xd4, 0x7c, 0xff, 0x31, 0x74, 0xff, 0xf3, 0x94, 0xff, 0x14, 0x8d, 0xff, 0xf4, 0x84, 0xff, 0x10, 0x74, 0xff, 0x55, 0xa5, 0xff, 0x37, 0xb6, 0xff, 0x96, 0xa5, 0xff, 0xaf, 0x6b, 0xff, 0x02, 0x00, 0xff, 0xec, 0x5a, 0xff, 0x30, 0x84, 0xff, 0x13, 0x9d, 0xff, 0xd5, 0xb5, 0xff, 0x33, 0xa5, 0xff, 0x95, 0xb5, 0xff, 0x74, 0xad, 0xff, 0xe8, 0x39, 0xff, 0xcf, 0x73, 0xff, 0xd3, 0x8c, 0xff, 0x89, 0x29, 0xff, 0x07, 0x21, 0xff, 0x01, 0x00, 0xff, 0x2f, 0x84, 0xff, 0x14, 0x95, 0xff, 0x03, 0x00, 0xff, 0x34, 0x95, 0xff, 0x92, 0x7c, 0xff, 0xa5, 0x08, 0xff, 0x48, 0x21, 0xff, 0x8c, 0x42, 0xff, 0x48, 0x21, 0xff, 0xed, 0x4a, 0xff, 0x1b, 0xc7, 0xff, 0x6f, 0x53, 0xff, 0x48, 0x19, 0xff, 0xce, 0x4a, 0xff, 0xb0, 0x53, 0xff, 0x0a, 0x2a, 0xff, 0xcd, 0x42, 0xff, 0xd1, 0x5b, 0xff, 0xee, 0x42, 0xff, 0xd1, 0x5b, 0xff, 0x36, 0x8d, 0xff, 0x93, 0x6c, 0xff, 0x73, 0x6c, 0xff, 0xd1, 0x6b, 0xff, 0x5a, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x74, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0xff, 0xd5, 0x7c, 0xff, 0x54, 0x5c, 0xff, 0x12, 0x54, 0xff, 0x94, 0x64, 0xff, 0xf6, 0x6c, 0xff, 0x98, 0x85, 0xff, 0xd5, 0x64, 0xff, 0x54, 0x54, 0xff, 0x77, 0x85, 0xff, 0xb5, 0x64, 0xff, 0x74, 0x5c, 0xff, 0xb5, 0x64, 0xff, 0xb5, 0x64, 0xff, 0x16, 0x75, 0xff, 0x36, 0x7d, 0xff, 0x35, 0x7d, 0xff, 0x15, 0x7d, 0xff, 0x15, 0x75, 0xff, 0xf7, 0xa5, 0xff, 0x55, 0x9d, 0xff, 0x73, 0xb5, 0xff, 0x90, 0xac, 0xff, 0xae, 0x9b, 0xff, 0x89, 0x72, 0xff, 0xcf, 0x8b, 0xff, 0x8f, 0x73, 0xff, 0xd2, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff, 0x59, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x36, 0xd6, 0xff, 0xae, 0x93, 0xff, 0xe5, 0x30, 0xff, 0x90, 0x9c, 0xff, 0x5a, 0xf7, 0xff, 0xfd, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x59, 0xef, 0xff, 0x56, 0xde, 0xff, 0x94, 0xcd, 0xff, 0x32, 0xc5, 0xff, 0x2f, 0xac, 0xff, 0x77, 0xe6, 0xff, 0xce, 0x83, 0xff, 0x03, 0x00, 0xff, 0x07, 0x19, 0xff, 0xe5, 0x18, 0xff, 0xe9, 0x39, 0xff, 0x6e, 0x73, 0xff, 0xaf, 0x73, 0xff, 0xcc, 0x52, 0xff, 0xc8, 0x31, 0xff, 0x6b, 0x42, 0xff, 0xaf, 0x83, 0xff, 0x30, 0x9c, 0xff, 0x13, 0xa5, 0xff, 0x96, 0xbd, 0xff, 0x77, 0xce, 0xff, 0xd8, 0xd6, 0xff, 0x98, 0xc6, 0xff, 0xf6, 0xad, 0xff, 0xb3, 0x84, 0xff, 0xb6, 0xa5, 0xff, 0xd9, 0xce, 0xff, 0x52, 0x74, 0xff, 0xf1, 0x6b, 0xff, 0x72, 0x7c, 0xff, 0xf1, 0x6b, 0xff, 0xb0, 0x5b, 0xff, 0x31, 0x74, 0xff, 0xd3, 0x8c, 0xff, 0x93, 0x8c, 0xff, 0xd3, 0x8c, 0xff, 0xb2, 0x8c, 0xff, 0x44, 0x08, 0xff, 0xc7, 0x18, 0xff, 0xb2, 0x8c, 0xff, 0x36, 0xbe, 0xff, 0xd5, 0xbd, 0xff, 0x53, 0xad, 0xff, 0xd5, 0xbd, 0xff, 0xf4, 0xbd, 0xff, 0xf8, 0xde, 0xff, 0x8b, 0x52, 0xff, 0xe9, 0x31, 0xff, 0xd4, 0x84, 0xff, 0x4c, 0x3a, 0xff, 0x68, 0x29, 0xff, 0x22, 0x00, 0xff, 0xd6, 0xa5, 0xff, 0x0d, 0x5b, 0xff, 0x47, 0x21, 0xff, 0x93, 0x7c, 0xff, 0xea, 0x29, 0xff, 0xe6, 0x18, 0xff, 0x48, 0x29, 0xff, 0xca, 0x29, 0xff, 0x89, 0x21, 0xff, 0xd4, 0x84, 0xff, 0xb7, 0x95, 0xff, 0x2b, 0x32, 0xff, 0x28, 0x19, 0xff, 0xeb, 0x29, 0xff, 0xca, 0x29, 0xff, 0xca, 0x29, 0xff, 0xcd, 0x42, 0xff, 0x69, 0x19, 0xff, 0x4c, 0x32, 0xff, 0x32, 0x64, 0xff, 0x6f, 0x53, 0xff, 0xee, 0x42, 0xff, 0x4c, 0x32, 0xff, 0x73, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xb4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xd6, 0xff, 0x53, 0x64, 0xff, 0x94, 0x64, 0xff, 0x37, 0x75, 0xff, 0xb5, 0x64, 0xff, 0xd5, 0x64, 0xff, 0xd6, 0x6c, 0xff, 0x33, 0x54, 0xff, 0x16, 0x75, 0xff, 0x77, 0x7d, 0xff, 0x74, 0x5c, 0xff, 0x94, 0x64, 0xff, 0xf5, 0x74, 0xff, 0x97, 0x8d, 0xff, 0x56, 0x85, 0xff, 0x76, 0x85, 0xff, 0x12, 0x5c, 0xff, 0x73, 0x64, 0xff, 0x35, 0x8d, 0xff, 0x92, 0x84, 0xff, 0xb2, 0x94, 0xff, 0xb1, 0xac, 0xff, 0x2f, 0xac, 0xff, 0xcd, 0xab, 0xff, 0x28, 0x62, 0xff, 0xcf, 0x83, 0xff, 0xfd, 0xff, 0xff, 0xdb, 0xff, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x59, 0xf7, 0xff, 0x39, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0xdb, 0xff, 0xff, 0x8e, 0x7b, 0xff, 0x91, 0x9c, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x79, 0xef, 0xff, 0x59, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0x9a, 0xf7, 0xff, 0xf9, 0xee, 0xff, 0x73, 0xcd, 0xff, 0xad, 0xa3, 0xff, 0xa7, 0x51, 0xff, 0x02, 0x00, 0xff, 0x00, 0x00, 0xff, 0x26, 0x21, 0xff, 0x4e, 0x63, 0xff, 0x0d, 0x63, 0xff, 0xe8, 0x39, 0xff, 0x4a, 0x42, 0xff, 0x47, 0x21, 0xff, 0xa6, 0x10, 0xff, 0x44, 0x08, 0xff, 0x00, 0x00, 0xff, 0x0a, 0x3a, 0xff, 0x79, 0xc6, 0xff, 0x39, 0xe7, 0xff, 0x9a, 0xef, 0xff, 0xf9, 0xde, 0xff, 0x95, 0xa5, 0xff, 0x73, 0x74, 0xff, 0x90, 0x53, 0xff, 0x51, 0x74, 0xff, 0xb3, 0x84, 0xff, 0xed, 0x52, 0xff, 0x4e, 0x63, 0xff, 0xed, 0x52, 0xff, 0xad, 0x42, 0xff, 0x2f, 0x4b, 0xff, 0x2e, 0x53, 0xff, 0xb2, 0x8c, 0xff, 0x10, 0x74, 0xff, 0x54, 0x9d, 0xff, 0xb2, 0x8c, 0xff, 0x29, 0x3a, 0xff, 0x4b, 0x4a, 0xff, 0x11, 0x7c, 0xff, 0xb1, 0x94, 0xff, 0x15, 0xc6, 0xff, 0xf4, 0xc5, 0xff, 0xd4, 0xbd, 0xff, 0xd1, 0x9c, 0xff, 0xf3, 0x9c, 0xff, 0x8f, 0x6b, 0xff, 0xa5, 0x08, 0xff, 0xca, 0x29, 0xff, 0x4b, 0x3a, 0xff, 0xa9, 0x31, 0xff, 0x06, 0x21, 0xff, 0xf1, 0x63, 0xff, 0x27, 0x19, 0xff, 0x4e, 0x63, 0xff, 0x2b, 0x32, 0xff, 0x8a, 0x21, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xe7, 0x18, 0xff, 0xcd, 0x42, 0xff, 0xd4, 0x7c, 0xff, 0xce, 0x42, 0xff, 0xca, 0x29, 0xff, 0x89, 0x29, 0xff, 0x2b, 0x32, 0xff, 0xeb, 0x31, 0xff, 0x0b, 0x32, 0xff, 0xca, 0x29, 0xff, 0x69, 0x21, 0xff, 0x0b, 0x32, 0xff, 0xea, 0x21, 0xff, 0xe6, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x6c, 0x4a, 0xff, 0x3d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x63, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0xae, 0xff, 0xd6, 0x6c, 0xff, 0x74, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0x54, 0x5c, 0xff, 0xf6, 0x6c, 0xff, 0xb5, 0x64, 0xff, 0x53, 0x5c, 0xff, 0x57, 0x75, 0xff, 0xf5, 0x6c, 0xff, 0x94, 0x64, 0xff, 0x56, 0x85, 0xff, 0x76, 0x85, 0xff, 0xd5, 0x6c, 0xff, 0xf5, 0x74, 0xff, 0xf7, 0xad, 0xff, 0x1a, 0xe7, 0xff, 0x3b, 0xef, 0xff, 0xd9, 0xde, 0xff, 0x37, 0xc6, 0xff, 0x12, 0xad, 0xff, 0x4f, 0xac, 0xff, 0x2e, 0xb4, 0xff, 0x2b, 0x83, 0xff, 0xf9, 0xde, 0xff, 0xfd, 0xff, 0xff, 0x7a, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x59, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x39, 0xf7, 0xff, 0xd8, 0xee, 0xff, 0xef, 0x8b, 0xff, 0x18, 0xe7, 0xff, 0xfb, 0xff, 0xff, 0x59, 0xef, 0xff, 0x59, 0xf7, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x9a, 0xff, 0xff, 0xb7, 0xe6, 0xff, 0x73, 0xcd, 0xff, 0xcf, 0x8b, 0xff, 0xd0, 0x7b, 0xff, 0x53, 0xad, 0xff, 0x54, 0xad, 0xff, 0x8f, 0x63, 0xff, 0xa9, 0x21, 0xff, 0x88, 0x21, 0xff, 0x27, 0x21, 0xff, 0x89, 0x29, 0xff, 0x89, 0x29, 0xff, 0x68, 0x29, 0xff, 0x6b, 0x42, 0xff, 0xf4, 0x94, 0xff, 0x19, 0xdf, 0xff, 0x97, 0xce, 0xff, 0xd6, 0xb5, 0xff, 0x57, 0xc6, 0xff, 0x98, 0xce, 0xff, 0x34, 0x95, 0xff, 0x93, 0x7c, 0xff, 0xb0, 0x63, 0xff, 0xea, 0x39, 0xff, 0x07, 0x21, 0xff, 0x0a, 0x3a, 0xff, 0xea, 0x39, 0xff, 0xae, 0x4a, 0xff, 0xce, 0x4a, 0xff, 0x4e, 0x5b, 0xff, 0x55, 0x9d, 0xff, 0xf2, 0x94, 0xff, 0x0d, 0x5b, 0xff, 0x95, 0xa5, 0xff, 0xb1, 0x8c, 0xff, 0xac, 0x4a, 0xff, 0xcc, 0x52, 0xff, 0xc8, 0x39, 0xff, 0x30, 0x8c, 0xff, 0x0b, 0x63, 0xff, 0x6d, 0x6b, 0xff, 0x29, 0x42, 0xff, 0xea, 0x39, 0xff, 0xe9, 0x31, 0xff, 0x24, 0x08, 0xff, 0x65, 0x08, 0xff, 0x8f, 0x63, 0xff, 0x29, 0x42, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x10, 0xff, 0xe9, 0x31, 0xff, 0x11, 0x6c, 0xff, 0x48, 0x19, 0xff, 0x48, 0x21, 0xff, 0x06, 0x19, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x19, 0xff, 0x2b, 0x3a, 0xff, 0x2a, 0x32, 0xff, 0x48, 0x19, 0xff, 0x69, 0x21, 0xff, 0xa9, 0x21, 0xff, 0xca, 0x31, 0xff, 0x48, 0x21, 0xff, 0x47, 0x21, 0xff, 0x89, 0x29, 0xff, 0x89, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xb7, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0x36, 0x85, 0xff, 0x74, 0x5c, 0xff, 0x95, 0x64, 0xff, 0x33, 0x54, 0xff, 0x74, 0x5c, 0xff, 0xf6, 0x6c, 0xff, 0x54, 0x5c, 0xff, 0x74, 0x5c, 0xff, 0x36, 0x75, 0xff, 0x15, 0x75, 0xff, 0x76, 0x8d, 0xff, 0x94, 0x64, 0xff, 0xb1, 0x4b, 0xff, 0x79, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xbb, 0xff, 0xff, 0xdc, 0xff, 0xff, 0xfd, 0xff, 0xff, 0x77, 0xd6, 0xff, 0x50, 0xa4, 0xff, 0x2e, 0xa4, 0xff, 0xd8, 0xee, 0xff, 0xfe, 0xff, 0xff, 0x7a, 0xef, 0xff, 0x7b, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xf7, 0xff, 0xb4, 0xd5, 0xff, 0x16, 0xd6, 0xff, 0xfc, 0xff, 0xff, 0x59, 0xef, 0xff, 0x59, 0xef, 0xff, 0x59, 0xf7, 0xff, 0x19, 0xef, 0xff, 0xf8, 0xee, 0xff, 0x18, 0xef, 0xff, 0x18, 0xef, 0xff, 0x77, 0xe6, 0xff, 0xf5, 0xd5, 0xff, 0xbb, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x5a, 0xf7, 0xff, 0xd2, 0x9c, 0xff, 0x6c, 0x3a, 0xff, 0x8d, 0x3a, 0xff, 0x8b, 0x4a, 0xff, 0x6e, 0x6b, 0xff, 0x34, 0x9d, 0xff, 0xd9, 0xce, 0xff, 0x19, 0xdf, 0xff, 0x77, 0xbe, 0xff, 0x34, 0x95, 0xff, 0x93, 0x7c, 0xff, 0xd6, 0xad, 0xff, 0xd6, 0xad, 0xff, 0xaf, 0x6b, 0xff, 0x0d, 0x53, 0xff, 0xea, 0x31, 0xff, 0x07, 0x21, 0xff, 0x06, 0x19, 0xff, 0x68, 0x21, 0xff, 0xca, 0x31, 0xff, 0xea, 0x31, 0xff, 0xd0, 0x73, 0xff, 0x37, 0xc6, 0xff, 0x58, 0xc6, 0xff, 0xcf, 0x73, 0xff, 0x47, 0x21, 0xff, 0xe6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x16, 0xb6, 0xff, 0xce, 0x73, 0xff, 0x2d, 0x63, 0xff, 0x0a, 0x42, 0xff, 0x44, 0x08, 0xff, 0x47, 0x21, 0xff, 0xc5, 0x10, 0xff, 0x6b, 0x4a, 0xff, 0x52, 0x7c, 0xff, 0xe6, 0x18, 0xff, 0x23, 0x00, 0xff, 0xaf, 0x6b, 0xff, 0x6f, 0x5b, 0xff, 0xca, 0x29, 0xff, 0x68, 0x21, 0xff, 0xd0, 0x6b, 0xff, 0x0d, 0x4b, 0xff, 0x27, 0x21, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x48, 0x21, 0xff, 0xe7, 0x18, 0xff, 0x44, 0x08, 0xff, 0xa5, 0x08, 0xff, 0x8d, 0x42, 0xff, 0x4b, 0x3a, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa4, 0x10, 0xff, 0x52, 0x8c, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1d, 0xdf, 0xff, 0xf6, 0x74, 0xff, 0x95, 0x64, 0xff, 0x33, 0x54, 0xff, 0x54, 0x54, 0xff, 0x94, 0x5c, 0xff, 0x16, 0x75, 0xff, 0x53, 0x5c, 0xff, 0xd5, 0x6c, 0xff, 0x97, 0x8d, 0xff, 0x94, 0x64, 0xff, 0xd2, 0x43, 0xff, 0x58, 0xbe, 0xff, 0xfd, 0xff, 0xff, 0x9b, 0xf7, 0xff, 0x9b, 0xf7, 0xff, 0x9b, 0xef, 0xff, 0x7b, 0xf7, 0xff, 0xbb, 0xff, 0xff, 0xb9, 0xe6, 0xff, 0xce, 0x93, 0xff, 0xb4, 0xc5, 0xff, 0xfd, 0xff, 0xff, 0x7a, 0xf7, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0xd8, 0xee, 0xff, 0xb1, 0xc4, 0xff, 0x39, 0xef, 0xff, 0xba, 0xef, 0xff, 0x59, 0xef, 0xff, 0x59, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0xb8, 0xee, 0xff, 0xb7, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x79, 0xf7, 0xff, 0x59, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x9a, 0xff, 0xff, 0x9a, 0xff, 0xff, 0x30, 0x8c, 0xff, 0xf0, 0x7b, 0xff, 0xd6, 0xb5, 0xff, 0xd9, 0xd6, 0xff, 0x19, 0xdf, 0xff, 0xd9, 0xd6, 0xff, 0x36, 0xbe, 0xff, 0x78, 0xc6, 0xff, 0x58, 0xb6, 0xff, 0x34, 0x95, 0xff, 0xb3, 0x84, 0xff, 0x4e, 0x5b, 0xff, 0x6f, 0x5b, 0xff, 0x8f, 0x63, 0xff, 0x47, 0x21, 0xff, 0x88, 0x31, 0xff, 0x4a, 0x42, 0xff, 0xcd, 0x4a, 0xff, 0xea, 0x39, 0xff, 0x6b, 0x4a, 0xff, 0xf5, 0xb5, 0xff, 0x18, 0xe7, 0xff, 0x30, 0x84, 0xff, 0x6b, 0x4a, 0xff, 0x68, 0x29, 0xff, 0x00, 0x00, 0xff, 0x4a, 0x4a, 0xff, 0x5a, 0xe7, 0xff, 0x13, 0x9d, 0xff, 0xd2, 0x94, 0xff, 0x06, 0x21, 0xff, 0x44, 0x08, 0xff, 0x68, 0x29, 0xff, 0x44, 0x08, 0xff, 0x8f, 0x73, 0xff, 0xdc, 0xf7, 0xff, 0xec, 0x5a, 0xff, 0x02, 0x00, 0xff, 0x0d, 0x5b, 0xff, 0x52, 0x74, 0xff, 0x52, 0x74, 0xff, 0xb0, 0x63, 0xff, 0xb1, 0x63, 0xff, 0x4b, 0x32, 0xff, 0x27, 0x19, 0xff, 0x85, 0x10, 0xff, 0x88, 0x29, 0xff, 0x4c, 0x42, 0xff, 0x27, 0x19, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x2f, 0x53, 0xff, 0xcd, 0x42, 0xff, 0x06, 0x21, 0xff, 0xa4, 0x10, 0xff, 0x85, 0x10, 0xff, 0x85, 0x10, 0xff, 0x43, 0x08, 0xff, 0x43, 0x10, 0xff, 0x64, 0x08, 0xff, 0x43, 0x08, 0xff, 0xac, 0x5a, 0xff, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0xbe, 0xff, 0xd5, 0x6c, 0xff, 0x54, 0x5c, 0xff, 0x33, 0x54, 0xff, 0x53, 0x54, 0xff, 0x94, 0x64, 0xff, 0xf5, 0x6c, 0xff, 0xd4, 0x6c, 0xff, 0x56, 0x7d, 0xff, 0x13, 0x54, 0xff, 0x58, 0xbe, 0xff, 0xfe, 0xff, 0xff, 0x9b, 0xf7, 0xff, 0x7b, 0xf7, 0xff, 0x7b, 0xf7, 0xff, 0x7b, 0xf7, 0xff, 0x7a, 0xf7, 0xff, 0x9b, 0xf7, 0xff, 0x78, 0xe6, 0xff, 0x70, 0x9c, 0xff, 0x5a, 0xef, 0xff, 0xdc, 0xff, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x59, 0xef, 0xff, 0x59, 0xf7, 0xff, 0x59, 0xef, 0xff, 0xbb, 0xff, 0xff, 0xf2, 0xbc, 0xff, 0xf2, 0xbc, 0xff, 0xfd, 0xff, 0xff, 0x59, 0xf7, 0xff, 0x59, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x18, 0xef, 0xff, 0xb8, 0xe6, 0xff, 0x97, 0xe6, 0xff, 0x5a, 0xf7, 0xff, 0x95, 0xd5, 0xff, 0x73, 0xcd, 0xff, 0xdb, 0xff, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0x79, 0xf7, 0xff, 0x19, 0xef, 0xff, 0x16, 0xce, 0xff, 0xd8, 0xde, 0xff, 0xd9, 0xde, 0xff, 0xb8, 0xd6, 0xff, 0xb8, 0xce, 0xff, 0x98, 0xce, 0xff, 0x16, 0xb6, 0xff, 0xd6, 0xad, 0xff, 0xb5, 0xad, 0xff, 0x78, 0xc6, 0xff, 0x55, 0x9d, 0xff, 0xee, 0x4a, 0xff, 0x2f, 0x53, 0xff, 0xed, 0x52, 0xff, 0x0a, 0x3a, 0xff, 0xc8, 0x39, 0xff, 0xe9, 0x39, 0xff, 0xe9, 0x29, 0xff, 0xcc, 0x4a, 0xff, 0x77, 0xc6, 0xff, 0x15, 0xc6, 0xff, 0xef, 0x7b, 0xff, 0x87, 0x31, 0xff, 0xc6, 0x18, 0xff, 0xc9, 0x31, 0xff, 0xd2, 0x94, 0xff, 0x73, 0xad, 0xff, 0xd6, 0xb5, 0xff, 0xd6, 0xb5, 0xff, 0x26, 0x21, 0xff, 0xc5, 0x10, 0xff, 0x06, 0x21, 0xff, 0x85, 0x10, 0xff, 0x91, 0x84, 0xff, 0xd8, 0xd6, 0xff, 0xd3, 0x94, 0xff, 0xed, 0x52, 0xff, 0x72, 0x7c, 0xff, 0x10, 0x6c, 0xff, 0x0e, 0x53, 0xff, 0xea, 0x31, 0xff, 0xea, 0x29, 0xff, 0xce, 0x42, 0xff, 0x89, 0x21, 0xff, 0xc9, 0x31, 0xff, 0x32, 0x74, 0xff, 0xee, 0x42, 0xff, 0x2c, 0x2a, 0xff, 0x4c, 0x32, 0xff, 0x6f, 0x53, 0xff, 0xee, 0x52, 0xff, 0xc5, 0x10, 0xff, 0x64, 0x08, 0xff, 0x84, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x19, 0xff, 0x47, 0x21, 0xff, 0x68, 0x21, 0xff, 0x0a, 0x32, 0xff, 0xcd, 0x52, 0xff, 0x9a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0xae, 0xff, 0xb5, 0x6c, 0xff, 0x12, 0x54, 0xff, 0x33, 0x54, 0xff, 0x33, 0x54, 0xff, 0x53, 0x5c, 0xff, 0x77, 0x85, 0xff, 0x94, 0x64, 0xff, 0x96, 0x9d, 0xff, 0xfd, 0xff, 0xff, 0x9b, 0xf7, 0xff, 0x7b, 0xf7, 0xff, 0x7b, 0xf7, 0xff, 0x7a, 0xf7, 0xff, 0x7a, 0xf7, 0xff, 0x7a, 0xef, 0xff, 0x9a, 0xf7, 0xff, 0xd5, 0xd5, 0xff, 0x98, 0xde, 0xff, 0xfc, 0xff, 0xff, 0x7a, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x39, 0xef, 0xff, 0x39, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x98, 0xee, 0xff, 0xf2, 0xbc, 0xff, 0x5a, 0xe7, 0xff, 0xbb, 0xf7, 0xff, 0x59, 0xf7, 0xff, 0x59, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xd8, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0x3a, 0xf7, 0xff, 0x2c, 0x9b, 0xff, 0x73, 0xc5, 0xff, 0xfb, 0xff, 0xff, 0x59, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf8, 0xe6, 0xff, 0xb8, 0xce, 0xff, 0x58, 0xc6, 0xff, 0x57, 0xc6, 0xff, 0x97, 0xc6, 0xff, 0xb6, 0xa5, 0xff, 0x32, 0x74, 0xff, 0xb0, 0x63, 0xff, 0x90, 0x63, 0xff, 0xf0, 0x73, 0xff, 0x6f, 0x63, 0xff, 0xea, 0x31, 0xff, 0xa8, 0x29, 0xff, 0xa5, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x19, 0xff, 0x4c, 0x3a, 0xff, 0xb0, 0x5b, 0xff, 0x36, 0x9d, 0xff, 0xb6, 0xad, 0xff, 0x70, 0x8c, 0xff, 0x8b, 0x52, 0xff, 0x47, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xd3, 0x94, 0xff, 0xb4, 0xb5, 0xff, 0x12, 0x9d, 0xff, 0x6e, 0x6b, 0xff, 0x71, 0x84, 0xff, 0xb6, 0xad, 0xff, 0x2a, 0x42, 0xff, 0xab, 0x4a, 0xff, 0x2a, 0x3a, 0xff, 0xf0, 0x73, 0xff, 0x2d, 0x5b, 0xff, 0x71, 0x7c, 0xff, 0x37, 0xb6, 0xff, 0x32, 0x74, 0xff, 0xea, 0x31, 0xff, 0xc6, 0x10, 0xff, 0x68, 0x21, 0xff, 0x8d, 0x3a, 0xff, 0x2c, 0x32, 0xff, 0xca, 0x29, 0xff, 0x11, 0x6c, 0xff, 0x94, 0x74, 0xff, 0x2f, 0x4b, 0xff, 0x0b, 0x2a, 0xff, 0x2c, 0x32, 0xff, 0x2b, 0x3a, 0xff, 0xca, 0x29, 0xff, 0xa9, 0x29, 0xff, 0x48, 0x21, 0xff, 0x07, 0x19, 0xff, 0x48, 0x21, 0xff, 0x89, 0x29, 0xff, 0xa9, 0x21, 0xff, 0x89, 0x21, 0xff, 0x4b, 0x3a, 0xff, 0x39, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xb8, 0x9d, 0xff, 0x74, 0x64, 0xff, 0xf2, 0x4b, 0xff, 0xb4, 0x64, 0xff, 0x94, 0x64, 0xff, 0x12, 0x54, 0xff, 0x35, 0x8d, 0xff, 0xdc, 0xff, 0xff, 0xbc, 0xff, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x7a, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x9b, 0xf7, 0xff, 0x77, 0xe6, 0xff, 0x13, 0xc5, 0xff, 0xdc, 0xf7, 0xff, 0x9a, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x39, 0xef, 0xff, 0x3a, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xb5, 0xd5, 0xff, 0x39, 0xef, 0xff, 0xfb, 0xff, 0xff, 0x59, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0x9b, 0xff, 0xff, 0xce, 0x9b, 0xff, 0xca, 0x72, 0xff, 0xfd, 0xff, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x59, 0xef, 0xff, 0x19, 0xef, 0xff, 0xd8, 0xe6, 0xff, 0xf8, 0xe6, 0xff, 0xf9, 0xee, 0xff, 0x56, 0xce, 0xff, 0x74, 0xa5, 0xff, 0x95, 0xa5, 0xff, 0xd6, 0xa5, 0xff, 0xb6, 0x9d, 0xff, 0xf5, 0x84, 0xff, 0xb1, 0x5b, 0xff, 0x4b, 0x3a, 0xff, 0x4a, 0x42, 0xff, 0x67, 0x29, 0xff, 0x02, 0x00, 0xff, 0x68, 0x29, 0xff, 0xcd, 0x4a, 0xff, 0xcd, 0x4a, 0xff, 0xa9, 0x29, 0xff, 0x68, 0x21, 0xff, 0xee, 0x4a, 0xff, 0x2b, 0x42, 0xff, 0xcc, 0x4a, 0xff, 0x14, 0x95, 0xff, 0x53, 0xa5, 0xff, 0x50, 0x8c, 0xff, 0x88, 0x31, 0xff, 0xc8, 0x39, 0xff, 0x53, 0xad, 0xff, 0x6c, 0x73, 0xff, 0x8e, 0x6b, 0xff, 0x65, 0x10, 0xff, 0x09, 0x3a, 0xff, 0xaf, 0x6b, 0xff, 0x88, 0x29, 0xff, 0x2b, 0x42, 0xff, 0x68, 0x29, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xac, 0x42, 0xff, 0x75, 0x8d, 0xff, 0x2e, 0x4b, 0xff, 0xa5, 0x10, 0xff, 0xe7, 0x18, 0xff, 0x0b, 0x32, 0xff, 0xae, 0x42, 0xff, 0x28, 0x21, 0xff, 0x69, 0x21, 0xff, 0xca, 0x21, 0xff, 0xeb, 0x29, 0xff, 0xca, 0x29, 0xff, 0x27, 0x19, 0xff, 0x07, 0x19, 0xff, 0x06, 0x19, 0xff, 0x27, 0x19, 0xff, 0x27, 0x19, 0xff, 0x47, 0x19, 0xff, 0x68, 0x21, 0xff, 0x47, 0x21, 0xff, 0x07, 0x19, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x21, 0xff, 0x72, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x77, 0x8d, 0xff, 0x12, 0x54, 0xff, 0x73, 0x5c, 0xff, 0x33, 0x54, 0xff, 0xb3, 0x7c, 0xff, 0x9c, 0xf7, 0xff, 0xfc, 0xff, 0xff, 0x5b, 0xf7, 0xff, 0x7b, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x9b, 0xff, 0xff, 0x33, 0xc5, 0xff, 0xd5, 0xcd, 0xff, 0xfd, 0xff, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x57, 0xde, 0xff, 0x97, 0xe6, 0xff, 0xfc, 0xff, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xee, 0xff, 0x69, 0x6a, 0xff, 0xd4, 0xc5, 0xff, 0xfc, 0xff, 0xff, 0x18, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xf8, 0xe6, 0xff, 0xd8, 0xde, 0xff, 0xf8, 0xe6, 0xff, 0xd5, 0xbd, 0xff, 0xf3, 0x94, 0xff, 0x55, 0x95, 0xff, 0x75, 0x95, 0xff, 0xb3, 0x84, 0xff, 0x6f, 0x5b, 0xff, 0xe6, 0x18, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x10, 0xff, 0x4b, 0x42, 0xff, 0x0f, 0x53, 0xff, 0x6c, 0x3a, 0xff, 0x0a, 0x32, 0xff, 0x6f, 0x5b, 0xff, 0x55, 0x95, 0xff, 0x32, 0x74, 0xff, 0x28, 0x19, 0xff, 0x6b, 0x4a, 0xff, 0x94, 0xad, 0xff, 0xf9, 0xde, 0xff, 0x8e, 0x6b, 0xff, 0xc7, 0x31, 0xff, 0xf3, 0x9c, 0xff, 0x8b, 0x52, 0xff, 0x63, 0x08, 0xff, 0xea, 0x39, 0xff, 0x88, 0x29, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x23, 0x08, 0xff, 0x48, 0x29, 0xff, 0x85, 0x10, 0xff, 0xe6, 0x20, 0xff, 0x68, 0x21, 0xff, 0xca, 0x31, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x21, 0xff, 0x0b, 0x32, 0xff, 0x06, 0x19, 0xff, 0x07, 0x19, 0xff, 0x68, 0x21, 0xff, 0x89, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x10, 0xff, 0x64, 0x10, 0xff, 0x8f, 0x73, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xe7, 0xff, 0x77, 0x85, 0xff, 0xb1, 0x43, 0xff, 0xb0, 0x4b, 0xff, 0x7b, 0xef, 0xff, 0xfc, 0xff, 0xff, 0x5a, 0xf7, 0xff, 0x5b, 0xf7, 0xff, 0x5b, 0xf7, 0xff, 0x7a, 0xef, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x7b, 0xf7, 0xff, 0x98, 0xe6, 0xff, 0xd5, 0xd5, 0xff, 0xbc, 0xf7, 0xff, 0x7b, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x39, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x77, 0xe6, 0xff, 0x5a, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0x19, 0xef, 0xff, 0xee, 0x9b, 0xff, 0x0e, 0x9c, 0xff, 0xfe, 0xff, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xee, 0xff, 0x97, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x97, 0xde, 0xff, 0x97, 0xd6, 0xff, 0xb8, 0xde, 0xff, 0x57, 0xc6, 0xff, 0x55, 0x95, 0xff, 0xd4, 0x84, 0xff, 0xb1, 0x6b, 0xff, 0x68, 0x29, 0xff, 0x44, 0x10, 0xff, 0xa8, 0x31, 0xff, 0xe6, 0x10, 0xff, 0x07, 0x19, 0xff, 0x32, 0x74, 0xff, 0x56, 0x95, 0xff, 0x2f, 0x5b, 0xff, 0xc5, 0x10, 0xff, 0x4b, 0x32, 0xff, 0x37, 0xb6, 0xff, 0xda, 0xc6, 0xff, 0xb0, 0x5b, 0xff, 0x4b, 0x42, 0xff, 0x14, 0x9d, 0xff, 0xd5, 0xb5, 0xff, 0x6e, 0x6b, 0xff, 0xa5, 0x10, 0xff, 0xf3, 0x94, 0xff, 0xae, 0x6b, 0xff, 0x03, 0x00, 0xff, 0x03, 0x00, 0xff, 0x47, 0x29, 0xff, 0xe9, 0x31, 0xff, 0xa5, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xac, 0x4a, 0xff, 0x92, 0x84, 0xff, 0x34, 0xa5, 0xff, 0x87, 0x31, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xa9, 0x31, 0xff, 0x89, 0x29, 0xff, 0x07, 0x19, 0xff, 0x27, 0x21, 0xff, 0x28, 0x19, 0xff, 0x07, 0x21, 0xff, 0xc5, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0xed, 0x62, 0xff, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xc7, 0x7f, 0xef, 0x08, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0xd7, 0xff, 0x32, 0x5c, 0xff, 0xda, 0xd6, 0xff, 0xfc, 0xff, 0xff, 0x7a, 0xef, 0xff, 0x7b, 0xef, 0xff, 0x7b, 0xef, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x7a, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x37, 0xde, 0xff, 0x3a, 0xef, 0xff, 0xbc, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x98, 0xe6, 0xff, 0x77, 0xe6, 0xff, 0xbb, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x16, 0xe6, 0xff, 0x2c, 0x93, 0xff, 0x97, 0xde, 0xff, 0xbb, 0xff, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x36, 0xde, 0xff, 0x36, 0xde, 0xff, 0x56, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x36, 0xce, 0xff, 0x16, 0xce, 0xff, 0x51, 0x8c, 0xff, 0xb0, 0x63, 0xff, 0x90, 0x5b, 0xff, 0xa9, 0x29, 0xff, 0xc9, 0x31, 0xff, 0xad, 0x4a, 0xff, 0x2f, 0x53, 0xff, 0xed, 0x42, 0xff, 0x17, 0xae, 0xff, 0x9a, 0xbe, 0xff, 0x2b, 0x32, 0xff, 0x6b, 0x42, 0xff, 0xac, 0x4a, 0xff, 0x36, 0x85, 0xff, 0xd5, 0x7c, 0xff, 0x48, 0x19, 0xff, 0x2e, 0x63, 0xff, 0xf9, 0xd6, 0xff, 0x57, 0xc6, 0xff, 0x4a, 0x4a, 0xff, 0x02, 0x00, 0xff, 0x47, 0x21, 0xff, 0xca, 0x31, 0xff, 0x44, 0x08, 0xff, 0x84, 0x10, 0xff, 0x63, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x0e, 0x53, 0xff, 0xa8, 0x29, 0xff, 0x09, 0x3a, 0xff, 0x8f, 0x63, 0xff, 0x96, 0xa5, 0xff, 0x75, 0xa5, 0xff, 0x8e, 0x5b, 0xff, 0x2e, 0x4b, 0xff, 0x4b, 0x3a, 0xff, 0x06, 0x19, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x68, 0x21, 0xff, 0xaa, 0x29, 0xff, 0xcb, 0x29, 0xff, 0xeb, 0x29, 0xff, 0x69, 0x21, 0xff, 0x48, 0x21, 0xff, 0x68, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xcc, 0x52, 0xff, 0x3d, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xe7, 0xff, 0xfd, 0xff, 0xff, 0x59, 0xf7, 0xff, 0x7b, 0xef, 0xff, 0x7b, 0xef, 0xff, 0x7a, 0xef, 0xff, 0x7b, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0xbb, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x5b, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x16, 0xde, 0xff, 0x19, 0xe7, 0xff, 0x7a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0xce, 0xa3, 0xff, 0x33, 0xc5, 0xff, 0xfc, 0xff, 0xff, 0xf8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x16, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0x36, 0xd6, 0xff, 0x77, 0xd6, 0xff, 0xd5, 0xc5, 0xff, 0xd2, 0x9c, 0xff, 0x8e, 0x63, 0xff, 0xf1, 0x6b, 0xff, 0x72, 0x74, 0xff, 0xb3, 0x7c, 0xff, 0xf1, 0x63, 0xff, 0x70, 0x5b, 0xff, 0xf0, 0x73, 0xff, 0xf9, 0xce, 0xff, 0x5b, 0xdf, 0xff, 0x2e, 0x53, 0xff, 0x0b, 0x32, 0xff, 0xd4, 0x84, 0xff, 0xd8, 0xa5, 0xff, 0xd1, 0x63, 0xff, 0x48, 0x19, 0xff, 0xed, 0x4a, 0xff, 0x3c, 0xdf, 0xff, 0xfa, 0xd6, 0xff, 0xe9, 0x39, 0xff, 0x01, 0x00, 0xff, 0x07, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x43, 0x08, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x43, 0x10, 0xff, 0x84, 0x10, 0xff, 0x88, 0x29, 0xff, 0x2a, 0x3a, 0xff, 0x6c, 0x42, 0xff, 0x68, 0x31, 0xff, 0x6b, 0x42, 0xff, 0x8f, 0x63, 0xff, 0xac, 0x4a, 0xff, 0x4b, 0x42, 0xff, 0x47, 0x21, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x85, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x48, 0x21, 0xff, 0x68, 0x21, 0xff, 0x48, 0x21, 0xff, 0x07, 0x19, 0xff, 0x07, 0x19, 0xff, 0x07, 0x19, 0xff, 0x07, 0x21, 0xff, 0x28, 0x21, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x8c, 0x52, 0xff, 0xdb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x08, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0x5b, 0xf7, 0xff, 0x7a, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x7a, 0xf7, 0xff, 0x9b, 0xef, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x98, 0xe6, 0xff, 0x57, 0xde, 0xff, 0xbb, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0x53, 0xc5, 0xff, 0xce, 0x9b, 0xff, 0x9b, 0xf7, 0xff, 0x39, 0xef, 0xff, 0xf8, 0xe6, 0xff, 0x97, 0xde, 0xff, 0x57, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xd5, 0xd5, 0xff, 0xd5, 0xc5, 0xff, 0x73, 0xbd, 0xff, 0xf0, 0x9b, 0xff, 0x0f, 0x7c, 0xff, 0x13, 0x8d, 0xff, 0x58, 0xbe, 0xff, 0x18, 0xb6, 0xff, 0x90, 0x63, 0xff, 0x68, 0x19, 0xff, 0xb2, 0x8c, 0xff, 0xbb, 0xef, 0xff, 0x7b, 0xdf, 0xff, 0xd4, 0x84, 0xff, 0x89, 0x21, 0xff, 0xed, 0x4a, 0xff, 0x3b, 0xc7, 0xff, 0x55, 0x95, 0xff, 0xa6, 0x08, 0xff, 0xca, 0x29, 0xff, 0xf7, 0xa5, 0xff, 0xb3, 0x84, 0xff, 0xc9, 0x31, 0xff, 0x64, 0x10, 0xff, 0x4b, 0x42, 0xff, 0x0a, 0x3a, 0xff, 0x24, 0x08, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x43, 0x10, 0xff, 0x44, 0x08, 0xff, 0x27, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x10, 0xff, 0x64, 0x10, 0xff, 0x85, 0x10, 0xff, 0xc5, 0x10, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x43, 0x10, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x19, 0xff, 0x48, 0x19, 0xff, 0x68, 0x19, 0xff, 0xaa, 0x21, 0xff, 0xaa, 0x21, 0xff, 0x68, 0x19, 0xff, 0x88, 0x21, 0xff, 0x68, 0x21, 0xff, 0x0e, 0x5b, 0xff, 0xdc, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x9c, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x18, 0x7f, 0xef, 0xc7, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0x7b, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x7a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0x5b, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x39, 0xef, 0xff, 0x39, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0x91, 0xac, 0xff, 0xf5, 0xcd, 0xff, 0xdc, 0xff, 0xff, 0xf8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x57, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xf5, 0xd5, 0xff, 0xb4, 0xcd, 0xff, 0x53, 0xbd, 0xff, 0xef, 0x93, 0xff, 0x30, 0x8c, 0xff, 0xf6, 0xbd, 0xff, 0xf7, 0xb5, 0xff, 0xf4, 0x8c, 0xff, 0x4b, 0x3a, 0xff, 0x26, 0x21, 0xff, 0x92, 0x94, 0xff, 0xbb, 0xef, 0xff, 0x97, 0xc6, 0xff, 0x96, 0x9d, 0xff, 0xcd, 0x42, 0xff, 0xeb, 0x29, 0xff, 0x93, 0x7c, 0xff, 0xf4, 0x94, 0xff, 0xa8, 0x21, 0xff, 0x0b, 0x2a, 0xff, 0x0f, 0x53, 0xff, 0x29, 0x3a, 0xff, 0xc5, 0x10, 0xff, 0x64, 0x08, 0xff, 0x44, 0x10, 0xff, 0xf1, 0x73, 0xff, 0xe9, 0x31, 0xff, 0x03, 0x08, 0xff, 0x84, 0x10, 0xff, 0x84, 0x08, 0xff, 0xca, 0x31, 0xff, 0x6e, 0x63, 0xff, 0x27, 0x21, 0xff, 0xa9, 0x31, 0xff, 0x06, 0x21, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x10, 0xff, 0x85, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x19, 0xff, 0x89, 0x21, 0xff, 0xca, 0x29, 0xff, 0x89, 0x21, 0xff, 0x69, 0x21, 0xff, 0xeb, 0x29, 0xff, 0x2c, 0x2a, 0xff, 0x6d, 0x2a, 0xff, 0x6d, 0x2a, 0xff, 0x6c, 0x2a, 0xff, 0x6d, 0x2a, 0xff, 0xae, 0x32, 0xff, 0x12, 0x6c, 0xff, 0x1d, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x07, 0x19, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x2b, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0x7b, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5a, 0xef, 0xff, 0x5b, 0xf7, 0xff, 0x5a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x7b, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xd8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0x98, 0xde, 0xff, 0xd5, 0xcd, 0xff, 0xb1, 0xb4, 0xff, 0x7a, 0xef, 0xff, 0x19, 0xef, 0xff, 0xd8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x37, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xb5, 0xcd, 0xff, 0x74, 0xc5, 0xff, 0x12, 0xb5, 0xff, 0x91, 0xa4, 0xff, 0xb8, 0xce, 0xff, 0xd8, 0xd6, 0xff, 0x75, 0xad, 0xff, 0x8c, 0x4a, 0xff, 0x88, 0x29, 0xff, 0x4e, 0x5b, 0xff, 0x17, 0xb6, 0xff, 0xb9, 0xc6, 0xff, 0x38, 0xae, 0xff, 0x4f, 0x53, 0xff, 0xe6, 0x10, 0xff, 0xed, 0x52, 0xff, 0x70, 0x5b, 0xff, 0xc6, 0x10, 0xff, 0x2f, 0x53, 0xff, 0xf1, 0x63, 0xff, 0x47, 0x21, 0xff, 0x03, 0x08, 0xff, 0xc6, 0x18, 0xff, 0x85, 0x10, 0xff, 0xac, 0x52, 0xff, 0x52, 0x7c, 0xff, 0x88, 0x29, 0xff, 0xc6, 0x18, 0xff, 0x64, 0x10, 0xff, 0x02, 0x00, 0xff, 0x92, 0x84, 0xff, 0x9b, 0xd7, 0xff, 0xad, 0x42, 0xff, 0x89, 0x29, 0xff, 0xa9, 0x31, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x84, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x21, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x19, 0xff, 0x27, 0x19, 0xff, 0x48, 0x21, 0xff, 0x89, 0x21, 0xff, 0x4c, 0x2a, 0xff, 0x4c, 0x2a, 0xff, 0x0b, 0x22, 0xff, 0x0b, 0x2a, 0xff, 0x6c, 0x32, 0xff, 0xce, 0x32, 0xff, 0x0f, 0x3b, 0xff, 0xce, 0x32, 0xff, 0xee, 0x32, 0xff, 0x2f, 0x3b, 0xff, 0x94, 0x74, 0xff, 0x5d, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x08, 0x0b, 0x22, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0x3b, 0xef, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xee, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x5a, 0xf7, 0xff, 0x5a, 0xf7, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x19, 0xef, 0xff, 0x19, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0x98, 0xde, 0xff, 0xb9, 0xe6, 0xff, 0xd2, 0xb4, 0xff, 0x94, 0xc5, 0xff, 0xbb, 0xff, 0xff, 0xd8, 0xe6, 0xff, 0x97, 0xde, 0xff, 0x37, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xf5, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0x33, 0xbd, 0xff, 0xf2, 0xac, 0xff, 0xb8, 0xd6, 0xff, 0xd8, 0xd6, 0xff, 0x57, 0xc6, 0xff, 0xb3, 0x8c, 0xff, 0x47, 0x21, 0xff, 0x4a, 0x42, 0xff, 0xd3, 0x8c, 0xff, 0x57, 0xbe, 0xff, 0xb9, 0xc6, 0xff, 0x11, 0x6c, 0xff, 0x89, 0x29, 0xff, 0x8c, 0x42, 0xff, 0x0e, 0x53, 0xff, 0x27, 0x19, 0xff, 0x32, 0x6c, 0xff, 0xd4, 0x84, 0xff, 0x07, 0x21, 0xff, 0x84, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa9, 0x29, 0xff, 0xb6, 0x9d, 0xff, 0xaf, 0x6b, 0xff, 0xe6, 0x18, 0xff, 0x89, 0x29, 0xff, 0xea, 0x31, 0xff, 0x06, 0x19, 0xff, 0x4a, 0x42, 0xff, 0xaf, 0x63, 0xff, 0x0a, 0x32, 0xff, 0x68, 0x19, 0xff, 0x48, 0x21, 0xff, 0x48, 0x21, 0xff, 0x48, 0x21, 0xff, 0x85, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x06, 0x19, 0xff, 0x27, 0x21, 0xff, 0x48, 0x21, 0xff, 0xa9, 0x21, 0xff, 0x89, 0x21, 0xff, 0xca, 0x21, 0xff, 0x0b, 0x22, 0xff, 0x2c, 0x2a, 0xff, 0xae, 0x32, 0xff, 0xef, 0x3a, 0xff, 0xee, 0x32, 0xff, 0xef, 0x32, 0xff, 0x70, 0x3b, 0xff, 0x91, 0x43, 0xff, 0x90, 0x43, 0xff, 0x91, 0x43, 0xff, 0x36, 0x8d, 0xff, 0x9e, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0x10, 0x6d, 0x2a, 0x00, 0x2c, 0x2a, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xde, 0xff, 0xff, 0x1b, 0xef, 0xff, 0xb9, 0xe6, 0xff, 0xf9, 0xee, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0xf9, 0xee, 0xff, 0x19, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xd9, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xde, 0xff, 0x37, 0xd6, 0xff, 0x12, 0xbd, 0xff, 0x3a, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x37, 0xde, 0xff, 0x36, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xb5, 0xcd, 0xff, 0x95, 0xc5, 0xff, 0xb1, 0xac, 0xff, 0x16, 0xce, 0xff, 0x1a, 0xdf, 0xff, 0x37, 0xc6, 0xff, 0x51, 0x84, 0xff, 0x6b, 0x42, 0xff, 0xec, 0x52, 0xff, 0xb5, 0xad, 0xff, 0xbb, 0xef, 0xff, 0xd8, 0xd6, 0xff, 0x74, 0xa5, 0xff, 0x51, 0x84, 0xff, 0x6e, 0x6b, 0xff, 0x52, 0x7c, 0xff, 0xac, 0x42, 0xff, 0xef, 0x6b, 0xff, 0x38, 0xae, 0xff, 0xe5, 0x18, 0xff, 0xa8, 0x31, 0xff, 0x68, 0x29, 0xff, 0x0a, 0x32, 0xff, 0xc9, 0x31, 0xff, 0xed, 0x4a, 0xff, 0x58, 0xae, 0xff, 0x11, 0x74, 0xff, 0xea, 0x31, 0xff, 0x2e, 0x53, 0xff, 0x14, 0x95, 0xff, 0xcf, 0x6b, 0xff, 0x24, 0x00, 0xff, 0x45, 0x08, 0xff, 0x06, 0x19, 0xff, 0xcd, 0x4a, 0xff, 0x89, 0x29, 0xff, 0x69, 0x21, 0xff, 0xca, 0x31, 0xff, 0x06, 0x19, 0xff, 0x06, 0x19, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x48, 0x21, 0xff, 0xaa, 0x21, 0xff, 0xeb, 0x29, 0xff, 0x2c, 0x2a, 0xff, 0x6c, 0x2a, 0xff, 0x6c, 0x2a, 0xff, 0x8d, 0x32, 0xff, 0x2f, 0x3b, 0xff, 0x0f, 0x3b, 0xff, 0x0f, 0x3b, 0xff, 0x0f, 0x3b, 0xff, 0x8d, 0x32, 0xff, 0xea, 0x29, 0xff, 0x2b, 0x32, 0xff, 0xb4, 0x94, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0x20, 0xce, 0x3a, 0x00, 0x8d, 0x32, 0x00, 0x0b, 0x22, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x9f, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5c, 0xf7, 0xff, 0xf9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0xd9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xfa, 0xee, 0xff, 0x74, 0xc5, 0xff, 0xd5, 0xcd, 0xff, 0x7b, 0xff, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0xd5, 0xcd, 0xff, 0x95, 0xc5, 0xff, 0xb2, 0xb4, 0xff, 0x51, 0xac, 0xff, 0x95, 0xbd, 0xff, 0x54, 0xa5, 0xff, 0x51, 0x84, 0xff, 0xd0, 0x6b, 0xff, 0xec, 0x52, 0xff, 0x17, 0xbe, 0xff, 0xfc, 0xf7, 0xff, 0x96, 0xce, 0xff, 0x16, 0xbe, 0xff, 0x95, 0xad, 0xff, 0x91, 0x84, 0xff, 0xf5, 0xb5, 0xff, 0x98, 0xce, 0xff, 0x17, 0xbe, 0xff, 0x3a, 0xd7, 0xff, 0x10, 0x7c, 0xff, 0xea, 0x39, 0xff, 0x34, 0x9d, 0xff, 0x2d, 0x53, 0xff, 0xf4, 0x8c, 0xff, 0x72, 0x84, 0xff, 0xb2, 0x8c, 0xff, 0xd9, 0xc6, 0xff, 0x71, 0x84, 0xff, 0x52, 0x7c, 0xff, 0x34, 0x95, 0xff, 0xb5, 0xa5, 0xff, 0x58, 0xbe, 0xff, 0xad, 0x4a, 0xff, 0xca, 0x29, 0xff, 0xa9, 0x31, 0xff, 0xc9, 0x39, 0xff, 0x47, 0x21, 0xff, 0xa9, 0x29, 0xff, 0x27, 0x21, 0xff, 0x68, 0x21, 0xff, 0x48, 0x21, 0xff, 0x68, 0x21, 0xff, 0x69, 0x21, 0xff, 0xa9, 0x21, 0xff, 0xca, 0x21, 0xff, 0x2b, 0x2a, 0xff, 0x8d, 0x32, 0xff, 0x8d, 0x32, 0xff, 0xef, 0x3a, 0xff, 0x2f, 0x3b, 0xff, 0xce, 0x32, 0xff, 0x4c, 0x2a, 0xff, 0x4c, 0x2a, 0xff, 0xca, 0x21, 0xff, 0x27, 0x19, 0xff, 0x67, 0x31, 0xff, 0x15, 0xad, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0x20, 0x8d, 0x32, 0x00, 0x6d, 0x2a, 0x00, 0x4c, 0x2a, 0x00, 0x2c, 0x2a, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xbb, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xf7, 0xff, 0x1a, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xee, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xee, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xd9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0xb8, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0x12, 0xb5, 0xff, 0x57, 0xde, 0xff, 0x19, 0xef, 0xff, 0x97, 0xde, 0xff, 0x57, 0xd6, 0xff, 0x16, 0xd6, 0xff, 0xf6, 0xd5, 0xff, 0x94, 0xc5, 0xff, 0xf2, 0xb4, 0xff, 0x0f, 0xac, 0xff, 0x6d, 0x8b, 0xff, 0x10, 0x84, 0xff, 0xae, 0x63, 0xff, 0xd3, 0x8c, 0xff, 0x6f, 0x63, 0xff, 0x50, 0x84, 0xff, 0xbb, 0xef, 0xff, 0x96, 0xce, 0xff, 0x36, 0xc6, 0xff, 0x98, 0xce, 0xff, 0x51, 0x84, 0xff, 0x50, 0x84, 0xff, 0xd9, 0xde, 0xff, 0xf9, 0xde, 0xff, 0xb7, 0xd6, 0xff, 0xd9, 0xd6, 0xff, 0x8b, 0x4a, 0xff, 0x2e, 0x63, 0xff, 0xd9, 0xd6, 0xff, 0xd4, 0xad, 0xff, 0x74, 0x9d, 0xff, 0xb6, 0xad, 0xff, 0x92, 0x84, 0xff, 0x91, 0x84, 0xff, 0xb2, 0x8c, 0xff, 0xf0, 0x73, 0xff, 0x17, 0xb6, 0xff, 0x4d, 0x63, 0xff, 0xb3, 0x7c, 0xff, 0x70, 0x5b, 0xff, 0xca, 0x29, 0xff, 0x48, 0x21, 0xff, 0x23, 0x08, 0xff, 0x68, 0x29, 0xff, 0xa9, 0x29, 0xff, 0x48, 0x19, 0xff, 0x68, 0x21, 0xff, 0x89, 0x29, 0xff, 0xaa, 0x21, 0xff, 0xca, 0x21, 0xff, 0xea, 0x29, 0xff, 0x0b, 0x2a, 0xff, 0x6c, 0x32, 0xff, 0xae, 0x32, 0xff, 0xee, 0x3a, 0xff, 0xee, 0x3a, 0xff, 0x2b, 0x2a, 0xff, 0x68, 0x21, 0xff, 0xc6, 0x10, 0xff, 0x44, 0x10, 0xff, 0x23, 0x10, 0xff, 0x2b, 0x4a, 0xff, 0x59, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0x20, 0xca, 0x21, 0x00, 0xea, 0x21, 0x00, 0xea, 0x21, 0x00, 0xca, 0x21, 0x00, 0xca, 0x21, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xf9, 0xe6, 0x00, 0xd8, 0xe6, 0x00, 0x7f, 0xef, 0x43, 0x7f, 0xef, 0xdf, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xff, 0xff, 0xda, 0xee, 0xff, 0x37, 0xde, 0xff, 0x37, 0xde, 0xff, 0x78, 0xe6, 0xff, 0x78, 0xde, 0xff, 0x98, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0xf9, 0xee, 0xff, 0xb8, 0xe6, 0xff, 0x98, 0xe6, 0xff, 0xb8, 0xde, 0xff, 0x98, 0xde, 0xff, 0x16, 0xd6, 0xff, 0xd8, 0xe6, 0xff, 0xd8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x36, 0xd6, 0xff, 0xf6, 0xcd, 0xff, 0x95, 0xc5, 0xff, 0xf2, 0xb4, 0xff, 0x0f, 0xa4, 0xff, 0xeb, 0x8a, 0xff, 0x69, 0x62, 0xff, 0x6e, 0x6b, 0xff, 0x14, 0x95, 0xff, 0x13, 0x95, 0xff, 0x8e, 0x6b, 0xff, 0x78, 0xc6, 0xff, 0x36, 0xbe, 0xff, 0xb1, 0x8c, 0xff, 0x75, 0xad, 0xff, 0x91, 0x8c, 0xff, 0x8e, 0x73, 0xff, 0xcf, 0x73, 0xff, 0x13, 0x9d, 0xff, 0xb1, 0x94, 0xff, 0xb2, 0x94, 0xff, 0xf0, 0x7b, 0xff, 0x47, 0x29, 0xff, 0x4d, 0x63, 0xff, 0x55, 0xa5, 0xff, 0xb1, 0x8c, 0xff, 0xb2, 0x8c, 0xff, 0x55, 0x9d, 0xff, 0xcd, 0x52, 0xff, 0xa8, 0x29, 0xff, 0x6f, 0x5b, 0xff, 0x6b, 0x42, 0xff, 0xed, 0x5a, 0xff, 0x0a, 0x32, 0xff, 0x68, 0x21, 0xff, 0xa9, 0x29, 0xff, 0x07, 0x21, 0xff, 0x48, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x21, 0xff, 0x48, 0x21, 0xff, 0x89, 0x29, 0xff, 0x69, 0x21, 0xff, 0x68, 0x21, 0xff, 0xca, 0x29, 0xff, 0x2c, 0x2a, 0xff, 0x2c, 0x2a, 0xff, 0x6d, 0x32, 0xff, 0x6c, 0x32, 0xff, 0x2b, 0x2a, 0xff, 0xa9, 0x21, 0xff, 0xe6, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x19, 0xff, 0x48, 0x19, 0xff, 0x0a, 0x32, 0xff, 0xd4, 0x8c, 0xff, 0x5d, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0x18, 0x84, 0x10, 0x00, 0x84, 0x10, 0x00, 0x64, 0x10, 0x00, 0x84, 0x10, 0x00, 0x85, 0x10, 0x00, 0x85, 0x10, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xf9, 0xe6, 0x00, 0xd9, 0xe6, 0x00, 0xb8, 0xde, 0x00, 0x7f, 0xef, 0x33, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xba, 0xe6, 0xff, 0x17, 0xde, 0xff, 0xf6, 0xd5, 0xff, 0x17, 0xd6, 0xff, 0x78, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x3a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0xb8, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xb8, 0xde, 0xff, 0x57, 0xd6, 0xff, 0x16, 0xce, 0xff, 0xb5, 0xc5, 0xff, 0xb2, 0xb4, 0xff, 0xce, 0x9b, 0xff, 0x2c, 0x8b, 0xff, 0x49, 0x6a, 0xff, 0x2d, 0x6b, 0xff, 0x6e, 0x6b, 0xff, 0xf0, 0x73, 0xff, 0xf3, 0x94, 0xff, 0x95, 0xad, 0xff, 0xf3, 0x9c, 0xff, 0x6a, 0x52, 0xff, 0x67, 0x31, 0xff, 0x0e, 0x5b, 0xff, 0x29, 0x3a, 0xff, 0x6b, 0x52, 0xff, 0xe9, 0x39, 0xff, 0x92, 0x84, 0xff, 0x31, 0x7c, 0xff, 0xc9, 0x31, 0xff, 0x68, 0x29, 0xff, 0x4b, 0x4a, 0xff, 0x6e, 0x63, 0xff, 0x8b, 0x52, 0xff, 0xa9, 0x39, 0xff, 0xed, 0x5a, 0xff, 0x6f, 0x63, 0xff, 0x88, 0x29, 0xff, 0x27, 0x19, 0xff, 0xa9, 0x29, 0xff, 0xa9, 0x29, 0xff, 0x89, 0x21, 0xff, 0x4c, 0x3a, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x19, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x48, 0x21, 0xff, 0x68, 0x21, 0xff, 0xca, 0x29, 0xff, 0x0b, 0x2a, 0xff, 0x0b, 0x2a, 0xff, 0xa9, 0x29, 0xff, 0x27, 0x21, 0xff, 0xa5, 0x10, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x0b, 0x32, 0xff, 0xce, 0x3a, 0xff, 0x2f, 0x3b, 0xff, 0x12, 0x5c, 0xff, 0x5a, 0xbe, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x10, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x43, 0x10, 0x00, 0xa5, 0x10, 0x00, 0x07, 0x19, 0x00, 0x48, 0x21, 0x00, 0x88, 0x21, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xf9, 0xe6, 0x00, 0xd8, 0xe6, 0x00, 0x98, 0xde, 0x00, 0x77, 0xd6, 0x00, 0x7f, 0xef, 0x20, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xf7, 0xff, 0x79, 0xde, 0xff, 0x57, 0xde, 0xff, 0x98, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0x1a, 0xef, 0xff, 0xf9, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0x78, 0xde, 0xff, 0x78, 0xde, 0xff, 0x78, 0xde, 0xff, 0x98, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0x78, 0xde, 0xff, 0x57, 0xd6, 0xff, 0x16, 0xce, 0xff, 0x34, 0xbd, 0xff, 0xef, 0x9b, 0xff, 0x2c, 0x93, 0xff, 0x8a, 0x72, 0xff, 0xa7, 0x41, 0xff, 0xec, 0x5a, 0xff, 0x0d, 0x63, 0xff, 0xb2, 0x8c, 0xff, 0x77, 0xc6, 0xff, 0xf3, 0x9c, 0xff, 0x6b, 0x52, 0xff, 0xc5, 0x20, 0xff, 0x68, 0x29, 0xff, 0xeb, 0x31, 0xff, 0x0a, 0x3a, 0xff, 0x29, 0x42, 0xff, 0xab, 0x4a, 0xff, 0xd3, 0x8c, 0xff, 0xac, 0x4a, 0xff, 0x23, 0x00, 0xff, 0x06, 0x21, 0xff, 0x47, 0x29, 0xff, 0xe9, 0x31, 0xff, 0x4b, 0x4a, 0xff, 0x4b, 0x4a, 0xff, 0x26, 0x19, 0xff, 0x2b, 0x3a, 0xff, 0xa9, 0x29, 0xff, 0xc6, 0x18, 0xff, 0x44, 0x10, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x07, 0x19, 0xff, 0x27, 0x21, 0xff, 0x68, 0x21, 0xff, 0x88, 0x21, 0xff, 0xca, 0x29, 0xff, 0xc9, 0x29, 0xff, 0x48, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x43, 0x10, 0xff, 0x23, 0x08, 0xff, 0x64, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x89, 0x21, 0xff, 0xea, 0x21, 0xff, 0x4c, 0x32, 0xff, 0x73, 0x7c, 0xff, 0x1c, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x08, 0x70, 0x43, 0x00, 0x2b, 0x2a, 0x00, 0x68, 0x19, 0x00, 0xaa, 0x21, 0x00, 0x4b, 0x2a, 0x00, 0xce, 0x32, 0x00, 0xef, 0x3a, 0x00, 0xce, 0x3a, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xf9, 0xe6, 0x00, 0xb8, 0xde, 0x00, 0x77, 0xd6, 0x00, 0x36, 0xd6, 0x00, 0xf6, 0xcd, 0x00, 0x7f, 0xef, 0x08, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x3c, 0xef, 0xff, 0xba, 0xe6, 0xff, 0xb9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0x1a, 0xef, 0xff, 0xd9, 0xe6, 0xff, 0xb9, 0xde, 0xff, 0x78, 0xde, 0xff, 0x78, 0xde, 0xff, 0x78, 0xde, 0xff, 0x78, 0xde, 0xff, 0xb8, 0xde, 0xff, 0xf9, 0xe6, 0xff, 0xf9, 0xe6, 0xff, 0xb8, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x37, 0xd6, 0xff, 0xd6, 0xcd, 0xff, 0x71, 0xac, 0xff, 0x8e, 0x9b, 0xff, 0xcb, 0x82, 0xff, 0xe5, 0x38, 0xff, 0xa7, 0x39, 0xff, 0x10, 0x7c, 0xff, 0x51, 0x8c, 0xff, 0x16, 0xbe, 0xff, 0x77, 0xce, 0xff, 0x8e, 0x73, 0xff, 0xc5, 0x20, 0xff, 0xa9, 0x39, 0xff, 0x4f, 0x5b, 0xff, 0x68, 0x21, 0xff, 0xa9, 0x39, 0xff, 0x49, 0x42, 0xff, 0xcf, 0x73, 0xff, 0x6f, 0x63, 0xff, 0x23, 0x00, 0xff, 0xa5, 0x18, 0xff, 0x88, 0x29, 0xff, 0xa5, 0x10, 0xff, 0xa5, 0x10, 0xff, 0xe9, 0x31, 0xff, 0x48, 0x29, 0xff, 0x23, 0x08, 0xff, 0xe6, 0x20, 0xff, 0x07, 0x21, 0xff, 0x44, 0x10, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x48, 0x21, 0xff, 0xea, 0x29, 0xff, 0xca, 0x29, 0xff, 0x27, 0x21, 0xff, 0x85, 0x10, 0xff, 0x23, 0x08, 0xff, 0x84, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xaa, 0x21, 0xff, 0x4c, 0x32, 0xff, 0x4c, 0x2a, 0xff, 0x0b, 0x2a, 0xff, 0x6f, 0x5b, 0xff, 0x19, 0xbe, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0x06, 0x19, 0x00, 0x27, 0x19, 0x00, 0x89, 0x21, 0x00, 0xae, 0x32, 0x00, 0x30, 0x3b, 0x00, 0x10, 0x3b, 0x00, 0x2c, 0x2a, 0x00, 0xc9, 0x21, 0x00, 0x4c, 0x2a, 0x00, 0xe6, 0x10, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xd8, 0xe6, 0x00, 0x77, 0xd6, 0x00, 0x57, 0xd6, 0x00, 0x57, 0xd6, 0x00, 0xf6, 0xcd, 0x00, 0xb5, 0xc5, 0x00, 0xb5, 0xc5, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xff, 0xff, 0x3c, 0xef, 0xff, 0xb9, 0xe6, 0xff, 0xb9, 0xde, 0xff, 0x98, 0xde, 0xff, 0x37, 0xde, 0xff, 0x57, 0xd6, 0xff, 0x78, 0xde, 0xff, 0x58, 0xde, 0xff, 0x58, 0xde, 0xff, 0x58, 0xde, 0xff, 0x78, 0xde, 0xff, 0x98, 0xde, 0xff, 0xd9, 0xe6, 0xff, 0xd9, 0xe6, 0xff, 0x77, 0xde, 0xff, 0x57, 0xd6, 0xff, 0xf6, 0xcd, 0xff, 0x13, 0xb5, 0xff, 0x10, 0xa4, 0xff, 0x8e, 0x9b, 0xff, 0x4a, 0x6a, 0xff, 0xc5, 0x28, 0xff, 0xcc, 0x52, 0xff, 0x92, 0x84, 0xff, 0x33, 0xa5, 0xff, 0x78, 0xce, 0xff, 0x33, 0xa5, 0xff, 0x4a, 0x52, 0xff, 0x64, 0x18, 0xff, 0xea, 0x39, 0xff, 0x0a, 0x3a, 0xff, 0xa5, 0x10, 0xff, 0xea, 0x39, 0xff, 0x4a, 0x42, 0xff, 0x09, 0x3a, 0xff, 0x06, 0x19, 0xff, 0x68, 0x29, 0xff, 0x47, 0x21, 0xff, 0x68, 0x29, 0xff, 0x07, 0x21, 0xff, 0x23, 0x08, 0xff, 0xa9, 0x31, 0xff, 0x88, 0x29, 0xff, 0x06, 0x21, 0xff, 0x88, 0x31, 0xff, 0x47, 0x21, 0xff, 0x47, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa6, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x06, 0x19, 0xff, 0x68, 0x21, 0xff, 0x89, 0x29, 0xff, 0x48, 0x21, 0xff, 0xa5, 0x10, 0xff, 0x84, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x89, 0x21, 0xff, 0x4c, 0x2a, 0xff, 0x0f, 0x3b, 0xff, 0x50, 0x43, 0xff, 0x50, 0x3b, 0xff, 0x33, 0x64, 0xff, 0xf9, 0xad, 0xff, 0x9e, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xd7, 0x7f, 0xef, 0x5b, 0x07, 0x11, 0x00, 0x64, 0x10, 0x00, 0xc5, 0x18, 0x00, 0x85, 0x10, 0x00, 0x64, 0x10, 0x00, 0x27, 0x19, 0x00, 0x2b, 0x2a, 0x00, 0xce, 0x3a, 0x00, 0xce, 0x3a, 0x00, 0x6d, 0x2a, 0x00, 0x07, 0x19, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x78, 0xde, 0x00, 0x37, 0xd6, 0x00, 0x36, 0xce, 0x00, 0x16, 0xce, 0x00, 0xd5, 0xc5, 0x00, 0x95, 0xc5, 0x00, 0x75, 0xbd, 0x00, 0x54, 0xbd, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xf7, 0xff, 0x18, 0xde, 0xff, 0x92, 0xc4, 0xff, 0xae, 0xb3, 0xff, 0x71, 0xbc, 0xff, 0x34, 0xc5, 0xff, 0xb6, 0xcd, 0xff, 0xf7, 0xcd, 0xff, 0x17, 0xce, 0xff, 0x58, 0xd6, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0x98, 0xde, 0xff, 0x77, 0xd6, 0xff, 0x57, 0xd6, 0xff, 0x95, 0xbd, 0xff, 0x71, 0xa4, 0xff, 0xf0, 0x9b, 0xff, 0x4e, 0x8b, 0xff, 0x0a, 0x52, 0xff, 0x06, 0x21, 0xff, 0xcd, 0x52, 0xff, 0xf3, 0x94, 0xff, 0x78, 0xc6, 0xff, 0x30, 0x84, 0xff, 0x0d, 0x6b, 0xff, 0x88, 0x39, 0xff, 0x27, 0x31, 0xff, 0xe6, 0x20, 0xff, 0x03, 0x08, 0xff, 0xc5, 0x18, 0xff, 0xc9, 0x31, 0xff, 0x88, 0x29, 0xff, 0x64, 0x10, 0xff, 0x88, 0x31, 0xff, 0x88, 0x29, 0xff, 0xc5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0x88, 0x29, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x48, 0x29, 0xff, 0x68, 0x29, 0xff, 0x06, 0x21, 0xff, 0x68, 0x29, 0xff, 0x47, 0x29, 0xff, 0xe6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x06, 0x21, 0xff, 0x47, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x10, 0xff, 0x47, 0x21, 0xff, 0xea, 0x29, 0xff, 0x8d, 0x3a, 0xff, 0xad, 0x32, 0xff, 0xad, 0x32, 0xff, 0x0e, 0x3b, 0xff, 0xd1, 0x5b, 0xff, 0x57, 0x9d, 0xff, 0x3d, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0x18, 0x94, 0x5c, 0x00, 0xb1, 0x4b, 0x00, 0xaa, 0x21, 0x00, 0x64, 0x08, 0x00, 0x64, 0x10, 0x00, 0x64, 0x10, 0x00, 0x43, 0x08, 0x00, 0x23, 0x08, 0x00, 0x06, 0x19, 0x00, 0xca, 0x29, 0x00, 0x89, 0x21, 0x00, 0x2b, 0x2a, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x57, 0xde, 0x00, 0x16, 0xd6, 0x00, 0xb5, 0xcd, 0x00, 0x75, 0xc5, 0x00, 0x74, 0xc5, 0x00, 0x74, 0xc5, 0x00, 0x33, 0xbd, 0x00, 0x34, 0xbd, 0x00, 0x54, 0xbd, 0x00, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x9a, 0xe6, 0xff, 0x14, 0xc5, 0xff, 0x71, 0xbc, 0xff, 0x72, 0xb4, 0xff, 0xf3, 0xb4, 0xff, 0x75, 0xc5, 0xff, 0xf6, 0xcd, 0xff, 0x57, 0xd6, 0xff, 0x78, 0xde, 0xff, 0x78, 0xde, 0xff, 0x57, 0xd6, 0xff, 0x37, 0xd6, 0xff, 0xf6, 0xcd, 0xff, 0x54, 0xb5, 0xff, 0x72, 0xa4, 0xff, 0x6e, 0x8b, 0xff, 0x4b, 0x62, 0xff, 0x88, 0x39, 0xff, 0x47, 0x29, 0xff, 0x4b, 0x4a, 0xff, 0x17, 0xb6, 0xff, 0x34, 0xa5, 0xff, 0xe9, 0x41, 0xff, 0x4a, 0x4a, 0xff, 0x26, 0x31, 0xff, 0x47, 0x31, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x06, 0x19, 0xff, 0xe9, 0x31, 0xff, 0x47, 0x21, 0xff, 0x0a, 0x42, 0xff, 0xc9, 0x31, 0xff, 0x22, 0x00, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x47, 0x21, 0xff, 0x07, 0x21, 0xff, 0x44, 0x10, 0xff, 0x85, 0x10, 0xff, 0x64, 0x10, 0xff, 0x44, 0x10, 0xff, 0x44, 0x10, 0xff, 0x64, 0x08, 0xff, 0x64, 0x10, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x06, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x88, 0x29, 0xff, 0xca, 0x29, 0xff, 0xea, 0x29, 0xff, 0x0b, 0x2a, 0xff, 0x0b, 0x2a, 0xff, 0x0e, 0x53, 0xff, 0xd5, 0x8c, 0xff, 0xdc, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x9c, 0x6c, 0x2a, 0x00, 0x2b, 0x2a, 0x00, 0x8d, 0x32, 0x00, 0xd1, 0x4b, 0x00, 0x33, 0x5c, 0x00, 0xad, 0x3a, 0x00, 0xa5, 0x10, 0x00, 0x23, 0x10, 0x00, 0x84, 0x10, 0x00, 0x64, 0x10, 0x00, 0x23, 0x08, 0x00, 0x22, 0x08, 0x00, 0x64, 0x10, 0x00, 0x89, 0x19, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x74, 0x9d, 0x00, 0x14, 0x9d, 0x00, 0xd4, 0x94, 0x00, 0xd3, 0x8c, 0x00, 0xb2, 0x94, 0x00, 0xb2, 0xa4, 0x00, 0x13, 0xb5, 0x00, 0x13, 0xbd, 0x00, 0x54, 0xc5, 0x00, 0x54, 0xcd, 0x00, 0x53, 0xc5, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x1c, 0xef, 0xff, 0xd7, 0xd5, 0xff, 0xd3, 0xbc, 0xff, 0xd3, 0xb4, 0xff, 0x95, 0xc5, 0xff, 0x17, 0xce, 0xff, 0x37, 0xce, 0xff, 0x17, 0xce, 0xff, 0x37, 0xce, 0xff, 0x17, 0xce, 0xff, 0xb6, 0xc5, 0xff, 0x75, 0xbd, 0xff, 0x71, 0x9c, 0xff, 0xec, 0x72, 0xff, 0x88, 0x41, 0xff, 0xe6, 0x28, 0xff, 0x27, 0x29, 0xff, 0xaf, 0x6b, 0xff, 0x78, 0xbe, 0xff, 0xcc, 0x5a, 0xff, 0x06, 0x29, 0xff, 0x09, 0x42, 0xff, 0xc9, 0x41, 0xff, 0x27, 0x31, 0xff, 0x84, 0x10, 0xff, 0x64, 0x10, 0xff, 0x47, 0x21, 0xff, 0x27, 0x21, 0xff, 0x84, 0x10, 0xff, 0x88, 0x29, 0xff, 0xe6, 0x18, 0xff, 0x64, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x27, 0x21, 0xff, 0xa5, 0x10, 0xff, 0x27, 0x19, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x85, 0x10, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x18, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x27, 0x21, 0xff, 0x48, 0x21, 0xff, 0xcd, 0x52, 0xff, 0xb4, 0x94, 0xff, 0xdc, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0x0b, 0x2a, 0x00, 0xca, 0x21, 0x00, 0xaa, 0x21, 0x00, 0xaa, 0x21, 0x00, 0xeb, 0x21, 0x00, 0xce, 0x32, 0x00, 0xd1, 0x4b, 0x00, 0x4f, 0x43, 0x00, 0x89, 0x21, 0x00, 0x44, 0x08, 0x00, 0x23, 0x10, 0x00, 0x63, 0x10, 0x00, 0x84, 0x10, 0x00, 0x64, 0x18, 0x00, 0x85, 0x10, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xf4, 0x6c, 0x00, 0xf5, 0x74, 0x00, 0x93, 0x64, 0x00, 0xb4, 0x64, 0x00, 0x53, 0x5c, 0x00, 0xb1, 0x53, 0x00, 0x12, 0x5c, 0x00, 0x11, 0x6c, 0x00, 0x52, 0x8c, 0x00, 0x92, 0xa4, 0x00, 0xd2, 0xb4, 0x00, 0xf2, 0xbc, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x3d, 0xf7, 0xff, 0x79, 0xde, 0xff, 0xd6, 0xcd, 0xff, 0x95, 0xc5, 0xff, 0xf6, 0xcd, 0xff, 0x17, 0xce, 0xff, 0x17, 0xce, 0xff, 0xd6, 0xc5, 0xff, 0xb6, 0xbd, 0xff, 0x14, 0xb5, 0xff, 0xf0, 0x93, 0xff, 0xac, 0x6a, 0xff, 0x88, 0x39, 0xff, 0xc5, 0x18, 0xff, 0x68, 0x31, 0xff, 0x55, 0x9d, 0xff, 0x75, 0x9d, 0xff, 0xe9, 0x41, 0xff, 0xa9, 0x41, 0xff, 0xe9, 0x41, 0xff, 0xe9, 0x49, 0xff, 0xe6, 0x20, 0xff, 0xc5, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x68, 0x29, 0xff, 0x27, 0x21, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0x85, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x18, 0xff, 0x64, 0x10, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x10, 0xff, 0x64, 0x10, 0xff, 0x85, 0x10, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x29, 0xff, 0x2e, 0x6b, 0xff, 0x76, 0xad, 0xff, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0x8d, 0x32, 0x00, 0xad, 0x32, 0x00, 0x6c, 0x2a, 0x00, 0x6d, 0x32, 0x00, 0x8d, 0x32, 0x00, 0x4c, 0x32, 0x00, 0x0b, 0x22, 0x00, 0x6c, 0x2a, 0x00, 0x50, 0x43, 0x00, 0xb1, 0x4b, 0x00, 0x8d, 0x3a, 0x00, 0x27, 0x19, 0x00, 0x23, 0x08, 0x00, 0x43, 0x08, 0x00, 0x64, 0x10, 0x00, 0x43, 0x10, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x35, 0x7d, 0x00, 0x15, 0x75, 0x00, 0xd4, 0x74, 0x00, 0x74, 0x64, 0x00, 0x50, 0x43, 0x00, 0x2f, 0x3b, 0x00, 0x12, 0x54, 0x00, 0xb1, 0x43, 0x00, 0x70, 0x43, 0x00, 0x91, 0x53, 0x00, 0xd1, 0x63, 0x00, 0xd1, 0x73, 0x00, 0xf0, 0x7b, 0x00, 0xaf, 0x83, 0x00, 0x7f, 0xef, 0x74, 0x7f, 0xef, 0xcf, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xff, 0xff, 0x1c, 0xef, 0xff, 0x18, 0xd6, 0xff, 0x34, 0xbd, 0xff, 0xb3, 0xb4, 0xff, 0x92, 0xac, 0xff, 0xb2, 0xac, 0xff, 0xb3, 0xac, 0xff, 0x8f, 0x83, 0xff, 0x4b, 0x5a, 0xff, 0x68, 0x31, 0xff, 0xa5, 0x18, 0xff, 0xac, 0x52, 0xff, 0x55, 0x9d, 0xff, 0x8e, 0x6b, 0xff, 0x88, 0x41, 0xff, 0x8c, 0x62, 0xff, 0x4a, 0x52, 0xff, 0xa8, 0x41, 0xff, 0x06, 0x21, 0xff, 0x27, 0x21, 0xff, 0xc5, 0x18, 0xff, 0x47, 0x21, 0xff, 0xc6, 0x18, 0xff, 0x84, 0x10, 0xff, 0x84, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0x64, 0x10, 0xff, 0x85, 0x10, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xe6, 0x20, 0xff, 0xe6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc5, 0x18, 0xff, 0x27, 0x29, 0xff, 0x8c, 0x52, 0xff, 0x93, 0x94, 0xff, 0x7a, 0xd6, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x5b, 0x8d, 0x32, 0x00, 0xad, 0x32, 0x00, 0xcd, 0x32, 0x00, 0xce, 0x32, 0x00, 0xce, 0x32, 0x00, 0xee, 0x3a, 0x00, 0x0f, 0x3b, 0x00, 0xad, 0x32, 0x00, 0x8d, 0x32, 0x00, 0x8d, 0x32, 0x00, 0x8d, 0x2a, 0x00, 0xce, 0x32, 0x00, 0x70, 0x43, 0x00, 0x2f, 0x3b, 0x00, 0xea, 0x29, 0x00, 0xe6, 0x18, 0x00, 0x23, 0x08, 0x00, 0x64, 0x10, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x35, 0x7d, 0x00, 0xf5, 0x74, 0x00, 0x32, 0x5c, 0x00, 0x4f, 0x43, 0x00, 0x90, 0x4b, 0x00, 0x53, 0x64, 0x00, 0x74, 0x6c, 0x00, 0x90, 0x4b, 0x00, 0x2f, 0x43, 0x00, 0x50, 0x43, 0x00, 0xb1, 0x4b, 0x00, 0x30, 0x43, 0x00, 0xce, 0x32, 0x00, 0x91, 0x4b, 0x00, 0x70, 0x53, 0x00, 0x4f, 0x63, 0x00, 0x7f, 0xef, 0x94, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xf7, 0xff, 0x7a, 0xde, 0xff, 0x96, 0xc5, 0xff, 0x35, 0xbd, 0xff, 0x72, 0xa4, 0xff, 0x8c, 0x5a, 0xff, 0xc9, 0x41, 0xff, 0x48, 0x31, 0xff, 0xe6, 0x20, 0xff, 0x2e, 0x63, 0xff, 0xd0, 0x7b, 0xff, 0xcc, 0x5a, 0xff, 0xc9, 0x49, 0xff, 0x0a, 0x5a, 0xff, 0x6b, 0x52, 0xff, 0x06, 0x29, 0xff, 0x68, 0x29, 0xff, 0x88, 0x29, 0xff, 0xa5, 0x10, 0xff, 0x48, 0x21, 0xff, 0xc6, 0x18, 0xff, 0x85, 0x10, 0xff, 0x85, 0x10, 0xff, 0x85, 0x18, 0xff, 0x85, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x64, 0x10, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x18, 0xff, 0xa5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0xe6, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x64, 0x10, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xa8, 0x31, 0xff, 0xcd, 0x5a, 0xff, 0x93, 0x94, 0xff, 0x5a, 0xce, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xd7, 0x7f, 0xef, 0x74, 0xce, 0x3a, 0x00, 0xce, 0x3a, 0x00, 0xee, 0x3a, 0x00, 0x2f, 0x3b, 0x00, 0x4f, 0x43, 0x00, 0x2f, 0x43, 0x00, 0x2f, 0x3b, 0x00, 0x0f, 0x3b, 0x00, 0x2f, 0x43, 0x00, 0x0f, 0x3b, 0x00, 0x0f, 0x3b, 0x00, 0x0f, 0x3b, 0x00, 0xce, 0x32, 0x00, 0x6d, 0x32, 0x00, 0x6d, 0x2a, 0x00, 0xce, 0x32, 0x00, 0xb1, 0x4b, 0x00, 0x0f, 0x3b, 0x00, 0xca, 0x21, 0x00, 0xc6, 0x10, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x56, 0x7d, 0x00, 0xb4, 0x64, 0x00, 0xb1, 0x4b, 0x00, 0x50, 0x43, 0x00, 0x94, 0x64, 0x00, 0x94, 0x64, 0x00, 0xf1, 0x53, 0x00, 0x53, 0x64, 0x00, 0x33, 0x5c, 0x00, 0xb1, 0x53, 0x00, 0x12, 0x5c, 0x00, 0xb1, 0x53, 0x00, 0xb1, 0x53, 0x00, 0x50, 0x4b, 0x00, 0x4c, 0x32, 0x00, 0x6d, 0x2a, 0x00, 0x4d, 0x32, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xfc, 0xe6, 0xff, 0xb8, 0xbd, 0xff, 0x32, 0x84, 0xff, 0xcd, 0x5a, 0xff, 0x2b, 0x4a, 0xff, 0x8c, 0x52, 0xff, 0x4e, 0x6b, 0xff, 0x8c, 0x5a, 0xff, 0x68, 0x39, 0xff, 0xc9, 0x41, 0xff, 0x68, 0x31, 0xff, 0x64, 0x10, 0xff, 0xea, 0x39, 0xff, 0xa9, 0x29, 0xff, 0xa5, 0x18, 0xff, 0xc9, 0x31, 0xff, 0x47, 0x21, 0xff, 0xa5, 0x18, 0xff, 0x85, 0x10, 0xff, 0x85, 0x10, 0xff, 0x85, 0x10, 0xff, 0x84, 0x10, 0xff, 0xc6, 0x18, 0xff, 0xa5, 0x18, 0xff, 0x84, 0x10, 0xff, 0xa5, 0x18, 0xff, 0xc5, 0x18, 0xff, 0xc6, 0x18, 0xff, 0x07, 0x21, 0xff, 0x06, 0x21, 0xff, 0x06, 0x21, 0xff, 0x88, 0x31, 0xff, 0xcd, 0x5a, 0xff, 0x32, 0x8c, 0xff, 0x97, 0xb5, 0xff, 0xfc, 0xde, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xe7, 0x7f, 0xef, 0x84, 0x44, 0x08, 0x00, 0x27, 0x21, 0x00, 0xca, 0x29, 0x00, 0x2b, 0x2a, 0x00, 0x8d, 0x32, 0x00, 0x0f, 0x3b, 0x00, 0x30, 0x3b, 0x00, 0x50, 0x43, 0x00, 0x91, 0x4b, 0x00, 0x70, 0x43, 0x00, 0x0e, 0x3b, 0x00, 0xee, 0x3a, 0x00, 0x0f, 0x3b, 0x00, 0xce, 0x3a, 0x00, 0x8d, 0x32, 0x00, 0xad, 0x32, 0x00, 0xce, 0x32, 0x00, 0xce, 0x32, 0x00, 0xee, 0x3a, 0x00, 0x2f, 0x43, 0x00, 0x70, 0x43, 0x00, 0xcd, 0x32, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xd4, 0x6c, 0x00, 0x94, 0x64, 0x00, 0xd2, 0x4b, 0x00, 0xd2, 0x4b, 0x00, 0x12, 0x54, 0x00, 0xf1, 0x53, 0x00, 0x90, 0x4b, 0x00, 0x12, 0x5c, 0x00, 0x33, 0x5c, 0x00, 0x73, 0x64, 0x00, 0xd4, 0x74, 0x00, 0xf2, 0x5b, 0x00, 0xf2, 0x53, 0x00, 0x6d, 0x32, 0x00, 0x4d, 0x32, 0x00, 0xce, 0x3a, 0x00, 0xae, 0x3a, 0x00, 0x30, 0x43, 0x00, 0xae, 0x32, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x3d, 0xe7, 0xff, 0x39, 0xce, 0xff, 0xb7, 0xbd, 0xff, 0x93, 0x9c, 0xff, 0x4e, 0x6b, 0xff, 0x6b, 0x52, 0xff, 0x68, 0x31, 0xff, 0x88, 0x31, 0xff, 0xad, 0x4a, 0xff, 0x68, 0x29, 0xff, 0xa5, 0x10, 0xff, 0xc9, 0x29, 0xff, 0xa8, 0x29, 0xff, 0xe6, 0x18, 0xff, 0x85, 0x18, 0xff, 0x84, 0x10, 0xff, 0x85, 0x10, 0xff, 0x85, 0x10, 0xff, 0xc6, 0x18, 0xff, 0x68, 0x31, 0xff, 0x68, 0x31, 0xff, 0xc9, 0x39, 0xff, 0x6b, 0x4a, 0xff, 0x0e, 0x63, 0xff, 0x12, 0x84, 0xff, 0x15, 0xa5, 0xff, 0x39, 0xce, 0xff, 0x5d, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0x94, 0x70, 0x4b, 0x00, 0x6c, 0x32, 0x00, 0x47, 0x21, 0x00, 0x43, 0x10, 0x00, 0x02, 0x00, 0x00, 0x64, 0x10, 0x00, 0x27, 0x19, 0x00, 0xea, 0x29, 0x00, 0x0b, 0x2a, 0x00, 0x4c, 0x2a, 0x00, 0xce, 0x3a, 0x00, 0x2f, 0x43, 0x00, 0x4f, 0x43, 0x00, 0x0e, 0x3b, 0x00, 0xad, 0x32, 0x00, 0xad, 0x32, 0x00, 0x8d, 0x32, 0x00, 0x8d, 0x2a, 0x00, 0xad, 0x32, 0x00, 0xcd, 0x32, 0x00, 0xad, 0x32, 0x00, 0xee, 0x3a, 0x00, 0xef, 0x3a, 0x00, 0x0f, 0x3b, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x94, 0x64, 0x00, 0xd1, 0x4b, 0x00, 0x71, 0x43, 0x00, 0x12, 0x54, 0x00, 0x12, 0x54, 0x00, 0x12, 0x54, 0x00, 0xd1, 0x53, 0x00, 0x70, 0x43, 0x00, 0x91, 0x4b, 0x00, 0xd1, 0x53, 0x00, 0x16, 0x7d, 0x00, 0x53, 0x64, 0x00, 0xef, 0x3a, 0x00, 0xae, 0x32, 0x00, 0x30, 0x43, 0x00, 0x0f, 0x43, 0x00, 0x50, 0x4b, 0x00, 0x91, 0x4b, 0x00, 0xcd, 0x32, 0x00, 0xae, 0x3a, 0x00, 0xcf, 0x3a, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x7e, 0xef, 0xff, 0x7a, 0xd6, 0xff, 0x76, 0xad, 0xff, 0xb4, 0x9c, 0xff, 0xb4, 0x94, 0xff, 0x73, 0x84, 0xff, 0x0e, 0x63, 0xff, 0x6c, 0x52, 0xff, 0x0e, 0x5b, 0xff, 0xcd, 0x52, 0xff, 0xea, 0x41, 0xff, 0xc9, 0x39, 0xff, 0xea, 0x41, 0xff, 0x2b, 0x4a, 0xff, 0x8c, 0x52, 0xff, 0xed, 0x62, 0xff, 0xb0, 0x7b, 0xff, 0x73, 0x8c, 0xff, 0xf5, 0xa4, 0xff, 0xb7, 0xbd, 0xff, 0xbb, 0xde, 0xff, 0x7e, 0xef, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0x12, 0x54, 0x00, 0x74, 0x5c, 0x00, 0xd5, 0x64, 0x00, 0x73, 0x5c, 0x00, 0x6f, 0x43, 0x00, 0x4b, 0x32, 0x00, 0x06, 0x19, 0x00, 0x43, 0x08, 0x00, 0x02, 0x00, 0x00, 0x64, 0x08, 0x00, 0x27, 0x19, 0x00, 0x68, 0x19, 0x00, 0x0b, 0x2a, 0x00, 0xad, 0x32, 0x00, 0xee, 0x3a, 0x00, 0xee, 0x3a, 0x00, 0xee, 0x3a, 0x00, 0xce, 0x32, 0x00, 0x6d, 0x2a, 0x00, 0x6c, 0x2a, 0x00, 0x8c, 0x2a, 0x00, 0x8d, 0x32, 0x00, 0x4c, 0x2a, 0x00, 0xad, 0x32, 0x00, 0xce, 0x3a, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x63, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0xb4, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0xdf, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xf7, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0x3b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x4b, 0x7f, 0xef, 0x6b, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0x9f, 0xef, 0xff, 0xbf, 0xf7, 0xff, 0xbf, 0xf7, 0xff, 0xdf, 0xf7, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xbf, 0xf7, 0xff, 0xbf, 0xf7, 0xff, 0x9f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0x43, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x5b, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x5b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x3b, 0x7f, 0xef, 0x43, 0x7f, 0xef, 0x53, 0x7f, 0xef, 0x74, 0x7f, 0xef, 0x8c, 0x7f, 0xef, 0xac, 0x7f, 0xef, 0xc7, 0x7f, 0xef, 0xd7, 0x7f, 0xef, 0xef, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xff, 0x7f, 0xef, 0xf7, 0x7f, 0xef, 0xe7, 0x7f, 0xef, 0xd7, 0x7f, 0xef, 0xbf, 0x7f, 0xef, 0xa4, 0x7f, 0xef, 0x84, 0x7f, 0xef, 0x63, 0x7f, 0xef, 0x4b, 0x7f, 0xef, 0x43, 0x7f, 0xef, 0x3b, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x08, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0x10, 0x7f, 0xef, 0x08, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x7f, 0xef, 0x00, 0x7f, 0xef, 0x00, 0xff, 0xff, 0x00, + 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, +#endif +#if LV_COLOR_DEPTH == 32 + /*Pixel format: Blue: 8 bit, Green: 8 bit, Red: 8 bit, Alpha: 8 bit*/ + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0x18, 0xf6, 0xed, 0xe7, 0x20, 0xf6, 0xed, 0xe7, 0x2b, 0xf6, 0xed, 0xe7, 0x2b, 0xf6, 0xed, 0xe7, 0x2b, 0xf6, 0xed, 0xe7, 0x2b, 0xf6, 0xed, 0xe7, 0x20, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x43, 0xf6, 0xed, 0xe7, 0x53, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0x7c, 0xf6, 0xed, 0xe7, 0x9c, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xe7, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0xc7, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0x74, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0x4b, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x3b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0x3b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf8, 0xf0, 0xec, 0xff, 0xf8, 0xf2, 0xed, 0xff, 0xf9, 0xf4, 0xf0, 0xff, 0xfa, 0xf6, 0xf3, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xfd, 0xfa, 0xf9, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfe, 0xfc, 0xfc, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfd, 0xfa, 0xf8, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfa, 0xf5, 0xf2, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xf8, 0xf1, 0xed, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x74, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0x6b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x57, 0x40, 0x2a, 0x00, 0x5a, 0x43, 0x2c, 0x00, 0x58, 0x44, 0x2b, 0x00, 0x57, 0x43, 0x2a, 0x00, 0x59, 0x43, 0x29, 0x00, 0x5a, 0x45, 0x29, 0x00, 0x5f, 0x48, 0x2d, 0x00, 0x5a, 0x41, 0x29, 0x00, 0x6e, 0x55, 0x3e, 0x00, 0x76, 0x5e, 0x48, 0x00, 0x52, 0x38, 0x23, 0x00, 0x53, 0x3c, 0x29, 0x00, 0x4d, 0x37, 0x26, 0x00, 0x4a, 0x31, 0x24, 0x00, 0x45, 0x2e, 0x23, 0x00, 0x43, 0x2f, 0x23, 0x00, 0x46, 0x31, 0x25, 0x00, 0x48, 0x2c, 0x1b, 0x00, 0x71, 0x59, 0x3c, 0x00, 0x8f, 0x86, 0x5f, 0x00, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xfc, 0xfd, 0xfd, 0xff, 0xfa, 0xfc, 0xfc, 0xff, 0xf8, 0xfb, 0xfb, 0xff, 0xf5, 0xf9, 0xf9, 0xff, 0xf2, 0xf8, 0xf7, 0xff, 0xef, 0xf5, 0xf4, 0xff, 0xeb, 0xf2, 0xf2, 0xff, 0xe8, 0xf0, 0xef, 0xff, 0xe7, 0xef, 0xee, 0xff, 0xe6, 0xef, 0xf0, 0xff, 0xe8, 0xf1, 0xf1, 0xff, 0xe7, 0xf0, 0xf0, 0xff, 0xe6, 0xee, 0xef, 0xff, 0xe7, 0xef, 0xf0, 0xff, 0xe6, 0xee, 0xef, 0xff, 0xe8, 0xf0, 0xf1, 0xff, 0xe9, 0xf2, 0xf2, 0xff, 0xea, 0xf2, 0xf0, 0xff, 0xea, 0xf2, 0xf1, 0xff, 0xed, 0xf3, 0xf3, 0xff, 0xee, 0xf3, 0xf5, 0xff, 0xf1, 0xf6, 0xf7, 0xff, 0xf4, 0xf7, 0xf7, 0xff, 0xf6, 0xf9, 0xf9, 0xff, 0xf9, 0xfa, 0xfb, 0xff, 0xfb, 0xfc, 0xfc, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x63, 0xd2, 0xdd, 0xdd, 0x00, 0xd6, 0xe0, 0xe0, 0x00, 0xdb, 0xe5, 0xe5, 0x00, 0xd0, 0xda, 0xda, 0x00, 0xce, 0xd7, 0xd8, 0x00, 0xd3, 0xda, 0xda, 0x00, 0xd6, 0xdc, 0xdb, 0x00, 0xdd, 0xe5, 0xe3, 0x00, 0xe0, 0xe9, 0xe5, 0x00, 0xd7, 0xdc, 0xd5, 0x00, 0xc7, 0xcb, 0xbd, 0x00, 0xcb, 0xd1, 0xbf, 0x00, 0xbc, 0xb9, 0xa4, 0x00, 0xb1, 0xa9, 0x8f, 0x00, 0xa3, 0x98, 0x77, 0x00, 0xa4, 0x90, 0x6c, 0x00, 0x96, 0x83, 0x6a, 0x00, 0xa0, 0x8c, 0x6e, 0x00, 0x73, 0x5b, 0x3a, 0x00, 0x62, 0x47, 0x2d, 0x00, 0x50, 0x36, 0x22, 0x00, 0x4f, 0x37, 0x2a, 0x00, 0x5b, 0x47, 0x35, 0x00, 0x4c, 0x39, 0x29, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x57, 0x40, 0x29, 0x00, 0x5a, 0x41, 0x2e, 0x00, 0x59, 0x43, 0x2c, 0x00, 0x59, 0x44, 0x2a, 0x00, 0x5a, 0x44, 0x2a, 0x00, 0x5b, 0x46, 0x2c, 0x00, 0x60, 0x48, 0x2f, 0x00, 0x58, 0x40, 0x28, 0x00, 0x72, 0x5a, 0x42, 0x00, 0x70, 0x58, 0x40, 0x00, 0x52, 0x3a, 0x24, 0x00, 0x55, 0x3d, 0x29, 0x00, 0x52, 0x3c, 0x29, 0x00, 0x4d, 0x36, 0x27, 0x00, 0x4b, 0x33, 0x25, 0x00, 0x4b, 0x34, 0x26, 0x00, 0x46, 0x2f, 0x25, 0x00, 0x4b, 0x33, 0x23, 0x00, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xfe, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xfd, 0xfe, 0xfd, 0xff, 0xfb, 0xfd, 0xfd, 0xff, 0xf5, 0xfa, 0xf9, 0xff, 0xf2, 0xf7, 0xf6, 0xff, 0xee, 0xf5, 0xf3, 0xff, 0xec, 0xf3, 0xf2, 0xff, 0xea, 0xf2, 0xf1, 0xff, 0xe8, 0xf1, 0xf0, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe6, 0xf0, 0xf0, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe2, 0xec, 0xec, 0xff, 0xe1, 0xec, 0xeb, 0xff, 0xe0, 0xea, 0xea, 0xff, 0xe1, 0xeb, 0xeb, 0xff, 0xe6, 0xf0, 0xf0, 0xff, 0xe6, 0xef, 0xef, 0xff, 0xe2, 0xed, 0xed, 0xff, 0xe0, 0xed, 0xee, 0xff, 0xe1, 0xed, 0xee, 0xff, 0xe2, 0xed, 0xef, 0xff, 0xe2, 0xee, 0xef, 0xff, 0xe4, 0xef, 0xed, 0xff, 0xe5, 0xef, 0xee, 0xff, 0xe3, 0xee, 0xed, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe2, 0xec, 0xed, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe2, 0xeb, 0xeb, 0xff, 0xe4, 0xea, 0xeb, 0xff, 0xeb, 0xf0, 0xf0, 0xff, 0xeb, 0xef, 0xef, 0xff, 0xf2, 0xf4, 0xf4, 0xff, 0xf9, 0xf9, 0xf9, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xd6, 0xde, 0xe0, 0x00, 0xd3, 0xdb, 0xdd, 0x00, 0xd8, 0xdf, 0xe0, 0x00, 0xd9, 0xe0, 0xda, 0x00, 0xd0, 0xd6, 0xcc, 0x00, 0xd6, 0xda, 0xd1, 0x00, 0xd0, 0xd5, 0xd0, 0x00, 0xd5, 0xda, 0xd6, 0x00, 0xd4, 0xdc, 0xd9, 0x00, 0xd9, 0xe0, 0xdd, 0x00, 0xe5, 0xee, 0xe5, 0x00, 0xd9, 0xdc, 0xc8, 0x00, 0xaf, 0x9e, 0x7e, 0x00, 0x84, 0x64, 0x3f, 0x00, 0x59, 0x38, 0x1a, 0x00, 0x54, 0x3a, 0x27, 0x00, 0x71, 0x59, 0x41, 0x00, 0x55, 0x3c, 0x23, 0x00, 0x60, 0x47, 0x30, 0x00, 0x2e, 0x18, 0x0e, 0x00, 0x21, 0x09, 0x05, 0x00, 0x50, 0x3b, 0x2c, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x57, 0x3f, 0x2a, 0x00, 0x59, 0x41, 0x2c, 0x00, 0x59, 0x42, 0x2a, 0x00, 0x5b, 0x44, 0x2b, 0x00, 0x5d, 0x47, 0x2e, 0x00, 0x5f, 0x49, 0x30, 0x00, 0x5f, 0x48, 0x30, 0x00, 0x5b, 0x43, 0x2b, 0x00, 0x71, 0x5a, 0x40, 0x00, 0x6c, 0x54, 0x3c, 0x00, 0x57, 0x3f, 0x29, 0x00, 0x5a, 0x41, 0x2d, 0x00, 0x56, 0x3e, 0x2a, 0x00, 0x53, 0x3a, 0x29, 0x00, 0x4a, 0x32, 0x22, 0x00, 0x4b, 0x34, 0x26, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xfa, 0xfa, 0xf8, 0xff, 0xf6, 0xf7, 0xf3, 0xff, 0xf7, 0xfc, 0xfb, 0xff, 0xed, 0xf6, 0xf7, 0xff, 0xe9, 0xf2, 0xf2, 0xff, 0xe5, 0xf0, 0xef, 0xff, 0xe3, 0xef, 0xed, 0xff, 0xe3, 0xee, 0xec, 0xff, 0xe2, 0xee, 0xeb, 0xff, 0xe5, 0xf0, 0xef, 0xff, 0xe8, 0xf2, 0xf3, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xe7, 0xf1, 0xf2, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe2, 0xec, 0xec, 0xff, 0xe2, 0xec, 0xec, 0xff, 0xe0, 0xea, 0xea, 0xff, 0xe4, 0xef, 0xef, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe5, 0xee, 0xee, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe0, 0xed, 0xec, 0xff, 0xe4, 0xef, 0xef, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe4, 0xef, 0xee, 0xff, 0xe6, 0xf1, 0xf0, 0xff, 0xe7, 0xf0, 0xef, 0xff, 0xe8, 0xef, 0xee, 0xff, 0xe8, 0xf0, 0xef, 0xff, 0xe8, 0xef, 0xee, 0xff, 0xe7, 0xef, 0xee, 0xff, 0xe0, 0xe9, 0xe9, 0xff, 0xdc, 0xe8, 0xe7, 0xff, 0xda, 0xe2, 0xe3, 0xff, 0xcf, 0xd2, 0xd2, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0xed, 0xef, 0xef, 0xff, 0xfa, 0xfc, 0xfc, 0xff, 0xfc, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xd7, 0xdd, 0xdc, 0x00, 0xd6, 0xdc, 0xd8, 0x00, 0xd7, 0xde, 0xd5, 0x00, 0xd1, 0xd8, 0xcd, 0x00, 0xd3, 0xd8, 0xcc, 0x00, 0xd7, 0xde, 0xd5, 0x00, 0xd8, 0xdf, 0xda, 0x00, 0xdc, 0xe4, 0xe5, 0x00, 0xcd, 0xce, 0xc2, 0x00, 0xbf, 0xbc, 0xa9, 0x00, 0xb5, 0xad, 0x96, 0x00, 0xb1, 0x9e, 0x7c, 0x00, 0xa1, 0x8c, 0x64, 0x00, 0x93, 0x7c, 0x54, 0x00, 0x5f, 0x46, 0x2c, 0x00, 0x41, 0x20, 0x10, 0x00, 0x55, 0x33, 0x22, 0x00, 0x6c, 0x58, 0x3c, 0x00, 0x6c, 0x5b, 0x47, 0x00, 0x5e, 0x47, 0x3f, 0x00, 0x4d, 0x38, 0x2a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x55, 0x3d, 0x29, 0x00, 0x57, 0x41, 0x29, 0x00, 0x57, 0x42, 0x28, 0x00, 0x5a, 0x44, 0x2b, 0x00, 0x5d, 0x47, 0x2e, 0x00, 0x5f, 0x4a, 0x30, 0x00, 0x60, 0x49, 0x31, 0x00, 0x5e, 0x46, 0x2d, 0x00, 0x6e, 0x57, 0x3c, 0x00, 0x6a, 0x52, 0x39, 0x00, 0x59, 0x41, 0x2b, 0x00, 0x5b, 0x42, 0x2d, 0x00, 0x5a, 0x41, 0x2c, 0x00, 0x5e, 0x45, 0x31, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf8, 0xf6, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfc, 0xfb, 0xff, 0xf4, 0xf6, 0xf4, 0xff, 0xeb, 0xef, 0xe9, 0xff, 0xdb, 0xe1, 0xd6, 0xff, 0xde, 0xe5, 0xe1, 0xff, 0xe8, 0xf3, 0xf7, 0xff, 0xe4, 0xef, 0xf3, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe2, 0xed, 0xec, 0xff, 0xe3, 0xee, 0xec, 0xff, 0xe7, 0xf2, 0xf0, 0xff, 0xe6, 0xf1, 0xef, 0xff, 0xe3, 0xed, 0xec, 0xff, 0xe6, 0xf0, 0xf1, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe2, 0xec, 0xeb, 0xff, 0xe4, 0xef, 0xee, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe3, 0xee, 0xed, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe6, 0xef, 0xf0, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe5, 0xef, 0xef, 0xff, 0xe1, 0xec, 0xec, 0xff, 0xdf, 0xec, 0xed, 0xff, 0xe1, 0xed, 0xef, 0xff, 0xe1, 0xee, 0xef, 0xff, 0xe1, 0xee, 0xef, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe5, 0xee, 0xed, 0xff, 0xe4, 0xee, 0xed, 0xff, 0xe5, 0xee, 0xed, 0xff, 0xe5, 0xef, 0xef, 0xff, 0xe1, 0xed, 0xed, 0xff, 0xda, 0xe6, 0xe4, 0xff, 0xca, 0xd2, 0xd0, 0xff, 0xd3, 0xd9, 0xd8, 0xff, 0xd4, 0xd4, 0xd5, 0xff, 0xa9, 0xaa, 0xa8, 0xff, 0xd8, 0xe1, 0xdf, 0xff, 0xe9, 0xee, 0xf0, 0xff, 0xeb, 0xf0, 0xf2, 0xff, 0xf4, 0xf7, 0xf8, 0xff, 0xfc, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xd7, 0xf6, 0xed, 0xe7, 0x74, 0xd8, 0xdf, 0xd9, 0x00, 0xd9, 0xe0, 0xdc, 0x00, 0xd9, 0xe1, 0xdc, 0x00, 0xdc, 0xe0, 0xe0, 0x00, 0xd9, 0xe0, 0xe0, 0x00, 0xda, 0xe3, 0xe1, 0x00, 0xbe, 0xbb, 0xa4, 0x00, 0xa6, 0x94, 0x6f, 0x00, 0x9a, 0x81, 0x5b, 0x00, 0x6e, 0x50, 0x29, 0x00, 0x61, 0x45, 0x24, 0x00, 0x8d, 0x74, 0x4f, 0x00, 0xa7, 0x92, 0x6a, 0x00, 0x6e, 0x5a, 0x40, 0x00, 0x97, 0x82, 0x6b, 0x00, 0x79, 0x62, 0x44, 0x00, 0x6a, 0x58, 0x3c, 0x00, 0x71, 0x5d, 0x49, 0x00, 0x6f, 0x58, 0x49, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x49, 0x30, 0x1e, 0x00, 0x51, 0x3b, 0x23, 0x00, 0x58, 0x42, 0x28, 0x00, 0x5a, 0x44, 0x2b, 0x00, 0x5e, 0x47, 0x2f, 0x00, 0x60, 0x4a, 0x31, 0x00, 0x61, 0x4b, 0x32, 0x00, 0x61, 0x4a, 0x30, 0x00, 0x6a, 0x53, 0x39, 0x00, 0x67, 0x50, 0x35, 0x00, 0x5b, 0x43, 0x2b, 0x00, 0x5a, 0x41, 0x2c, 0x00, 0x62, 0x4a, 0x35, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xfe, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf6, 0xfa, 0xfa, 0xff, 0xef, 0xf3, 0xf1, 0xff, 0xe0, 0xe6, 0xdb, 0xff, 0xd4, 0xd8, 0xca, 0xff, 0xd2, 0xd8, 0xcd, 0xff, 0xe3, 0xec, 0xe4, 0xff, 0xe4, 0xf1, 0xf0, 0xff, 0xe2, 0xf0, 0xf0, 0xff, 0xe4, 0xef, 0xee, 0xff, 0xe6, 0xf0, 0xef, 0xff, 0xe5, 0xef, 0xef, 0xff, 0xe4, 0xee, 0xee, 0xff, 0xe8, 0xf2, 0xf1, 0xff, 0xeb, 0xf6, 0xf4, 0xff, 0xe5, 0xf0, 0xef, 0xff, 0xe4, 0xee, 0xef, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe7, 0xf1, 0xf2, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xe5, 0xef, 0xef, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe4, 0xed, 0xee, 0xff, 0xe2, 0xec, 0xee, 0xff, 0xe2, 0xeb, 0xee, 0xff, 0xe3, 0xec, 0xee, 0xff, 0xe0, 0xe9, 0xec, 0xff, 0xd9, 0xe4, 0xe7, 0xff, 0xde, 0xe9, 0xec, 0xff, 0xdd, 0xe9, 0xec, 0xff, 0xdb, 0xe7, 0xea, 0xff, 0xe1, 0xec, 0xee, 0xff, 0xdd, 0xe9, 0xeb, 0xff, 0xdf, 0xec, 0xee, 0xff, 0xdd, 0xea, 0xec, 0xff, 0xdc, 0xe8, 0xea, 0xff, 0xdc, 0xe9, 0xeb, 0xff, 0xdc, 0xe8, 0xea, 0xff, 0xda, 0xe7, 0xe8, 0xff, 0xdb, 0xe7, 0xe9, 0xff, 0xdc, 0xe8, 0xea, 0xff, 0xdb, 0xe6, 0xe7, 0xff, 0xd5, 0xdb, 0xdb, 0xff, 0xd1, 0xd6, 0xd7, 0xff, 0x9a, 0x94, 0x96, 0xff, 0x99, 0x94, 0x93, 0xff, 0xdb, 0xe9, 0xe5, 0xff, 0xdd, 0xe6, 0xe8, 0xff, 0xd7, 0xde, 0xe2, 0xff, 0xdc, 0xe5, 0xe8, 0xff, 0xe9, 0xf1, 0xf2, 0xff, 0xf1, 0xf5, 0xf6, 0xff, 0xf9, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x63, 0xd6, 0xdd, 0xdc, 0x00, 0xd2, 0xda, 0xd4, 0x00, 0xd2, 0xd9, 0xce, 0x00, 0xd6, 0xdd, 0xd2, 0x00, 0xcc, 0xcd, 0xbf, 0x00, 0xc5, 0xc0, 0xa2, 0x00, 0xa7, 0x99, 0x6e, 0x00, 0x91, 0x77, 0x52, 0x00, 0x7b, 0x60, 0x43, 0x00, 0x8b, 0x71, 0x52, 0x00, 0xb3, 0xa4, 0x83, 0x00, 0xa3, 0x98, 0x7b, 0x00, 0x96, 0x8b, 0x72, 0x00, 0x98, 0x87, 0x70, 0x00, 0x5b, 0x43, 0x32, 0x00, 0x5b, 0x44, 0x30, 0x00, 0x50, 0x38, 0x2e, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x6e, 0x59, 0x3f, 0x00, 0x5c, 0x46, 0x2c, 0x00, 0x52, 0x3c, 0x23, 0x00, 0x53, 0x3d, 0x24, 0x00, 0x5e, 0x48, 0x2e, 0x00, 0x60, 0x4a, 0x30, 0x00, 0x62, 0x4c, 0x32, 0x00, 0x64, 0x4d, 0x33, 0x00, 0x69, 0x52, 0x36, 0x00, 0x65, 0x4d, 0x34, 0x00, 0x5e, 0x46, 0x30, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfc, 0xfa, 0xff, 0xf5, 0xf8, 0xf4, 0xff, 0xe8, 0xf1, 0xed, 0xff, 0xde, 0xeb, 0xec, 0xff, 0xd6, 0xe2, 0xe0, 0xff, 0xd6, 0xe1, 0xdb, 0xff, 0xde, 0xe9, 0xe2, 0xff, 0xdf, 0xe7, 0xe4, 0xff, 0xe5, 0xee, 0xee, 0xff, 0xe4, 0xef, 0xf0, 0xff, 0xe5, 0xf1, 0xf0, 0xff, 0xe8, 0xf3, 0xf1, 0xff, 0xe7, 0xf2, 0xf0, 0xff, 0xe4, 0xee, 0xed, 0xff, 0xe5, 0xee, 0xef, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xed, 0xf8, 0xf5, 0xff, 0xe8, 0xf3, 0xf1, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe4, 0xec, 0xec, 0xff, 0xe4, 0xef, 0xed, 0xff, 0xe5, 0xf0, 0xf0, 0xff, 0xe6, 0xf0, 0xf0, 0xff, 0xdf, 0xe9, 0xea, 0xff, 0xe1, 0xeb, 0xed, 0xff, 0xe2, 0xec, 0xee, 0xff, 0xe2, 0xeb, 0xed, 0xff, 0xe0, 0xea, 0xec, 0xff, 0xdd, 0xe7, 0xe9, 0xff, 0xda, 0xe3, 0xe5, 0xff, 0xde, 0xe7, 0xea, 0xff, 0xd8, 0xe4, 0xe7, 0xff, 0xda, 0xe9, 0xec, 0xff, 0xdc, 0xe8, 0xec, 0xff, 0xd6, 0xe0, 0xe6, 0xff, 0xd4, 0xdd, 0xe3, 0xff, 0xdb, 0xe5, 0xe9, 0xff, 0xd1, 0xdc, 0xe0, 0xff, 0xce, 0xda, 0xde, 0xff, 0xd8, 0xe3, 0xe7, 0xff, 0xd6, 0xe3, 0xe6, 0xff, 0xd5, 0xe2, 0xe4, 0xff, 0xd6, 0xdf, 0xe8, 0xff, 0xda, 0xe3, 0xe6, 0xff, 0xda, 0xe3, 0xe4, 0xff, 0xd1, 0xd9, 0xdc, 0xff, 0x91, 0x8f, 0x8f, 0xff, 0xb1, 0xad, 0xab, 0xff, 0xe3, 0xec, 0xe9, 0xff, 0xd6, 0xe1, 0xe0, 0xff, 0xd9, 0xe4, 0xe4, 0xff, 0xdb, 0xe8, 0xe8, 0xff, 0xd8, 0xe6, 0xe6, 0xff, 0xda, 0xe4, 0xe6, 0xff, 0xe0, 0xe9, 0xe9, 0xff, 0xe9, 0xef, 0xef, 0xff, 0xf6, 0xf8, 0xf8, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0xd6, 0xdb, 0xd9, 0x00, 0xd8, 0xdc, 0xd6, 0x00, 0xd5, 0xd9, 0xcd, 0x00, 0xcf, 0xd5, 0xc8, 0x00, 0xc7, 0xc4, 0xae, 0x00, 0xc8, 0xc0, 0xa6, 0x00, 0xad, 0x9f, 0x82, 0x00, 0xa7, 0x94, 0x71, 0x00, 0xb2, 0xa9, 0x86, 0x00, 0x8e, 0x7c, 0x59, 0x00, 0x9b, 0x87, 0x6b, 0x00, 0x91, 0x82, 0x69, 0x00, 0x97, 0x8a, 0x6f, 0x00, 0x8e, 0x7d, 0x62, 0x00, 0x5e, 0x4b, 0x33, 0x00, 0x39, 0x21, 0x12, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x6b, 0x57, 0x39, 0x00, 0x63, 0x4d, 0x35, 0x00, 0x68, 0x52, 0x3b, 0x00, 0x74, 0x5e, 0x45, 0x00, 0x60, 0x4c, 0x30, 0x00, 0x57, 0x43, 0x27, 0x00, 0x62, 0x4c, 0x32, 0x00, 0x64, 0x4d, 0x34, 0x00, 0x66, 0x4f, 0x34, 0x00, 0x65, 0x4d, 0x36, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfc, 0xff, 0xf3, 0xf8, 0xf4, 0xff, 0xe7, 0xef, 0xe8, 0xff, 0xe3, 0xee, 0xe8, 0xff, 0xda, 0xe7, 0xe2, 0xff, 0xdd, 0xea, 0xe9, 0xff, 0xe0, 0xed, 0xec, 0xff, 0xe2, 0xf0, 0xee, 0xff, 0xe3, 0xf1, 0xf0, 0xff, 0xe7, 0xf3, 0xf2, 0xff, 0xe6, 0xf2, 0xf0, 0xff, 0xe8, 0xf3, 0xf1, 0xff, 0xe9, 0xf3, 0xf1, 0xff, 0xe8, 0xf3, 0xf1, 0xff, 0xe7, 0xf2, 0xf0, 0xff, 0xe4, 0xee, 0xef, 0xff, 0xe4, 0xed, 0xee, 0xff, 0xe7, 0xf2, 0xf1, 0xff, 0xed, 0xf8, 0xf6, 0xff, 0xeb, 0xf6, 0xf4, 0xff, 0xe5, 0xef, 0xee, 0xff, 0xe5, 0xed, 0xed, 0xff, 0xe2, 0xeb, 0xe9, 0xff, 0xdf, 0xe8, 0xe6, 0xff, 0xe2, 0xea, 0xea, 0xff, 0xdf, 0xe7, 0xe9, 0xff, 0xd4, 0xdd, 0xde, 0xff, 0xe4, 0xed, 0xec, 0xff, 0xe3, 0xed, 0xec, 0xff, 0xe3, 0xed, 0xec, 0xff, 0xe3, 0xec, 0xeb, 0xff, 0xe3, 0xeb, 0xea, 0xff, 0xdf, 0xe6, 0xe7, 0xff, 0xdf, 0xea, 0xec, 0xff, 0xdc, 0xea, 0xed, 0xff, 0xd2, 0xdd, 0xe5, 0xff, 0xd3, 0xde, 0xe3, 0xff, 0xd6, 0xe1, 0xe4, 0xff, 0xd5, 0xe0, 0xe4, 0xff, 0xcc, 0xd8, 0xde, 0xff, 0xcf, 0xda, 0xe1, 0xff, 0xd0, 0xdb, 0xe2, 0xff, 0xcd, 0xd8, 0xde, 0xff, 0xcb, 0xd6, 0xe0, 0xff, 0xc8, 0xd8, 0xe1, 0xff, 0xbc, 0xcb, 0xdb, 0xff, 0xca, 0xd7, 0xde, 0xff, 0xd7, 0xe2, 0xe0, 0xff, 0xc4, 0xce, 0xce, 0xff, 0xc4, 0xc9, 0xc9, 0xff, 0xda, 0xe0, 0xe1, 0xff, 0xd0, 0xdd, 0xdf, 0xff, 0xdd, 0xe8, 0xeb, 0xff, 0xdd, 0xea, 0xec, 0xff, 0xd5, 0xe3, 0xe4, 0xff, 0xd8, 0xe4, 0xe5, 0xff, 0xda, 0xe7, 0xea, 0xff, 0xd7, 0xe4, 0xe6, 0xff, 0xe2, 0xea, 0xea, 0xff, 0xd9, 0xdb, 0xdb, 0xff, 0xe3, 0xe2, 0xe3, 0xff, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0x5b, 0xd4, 0xd9, 0xd6, 0x00, 0xd8, 0xde, 0xdb, 0x00, 0xd3, 0xd6, 0xcb, 0x00, 0xd5, 0xd7, 0xc9, 0x00, 0xcf, 0xd1, 0xc3, 0x00, 0xc9, 0xca, 0xba, 0x00, 0xc5, 0xc6, 0xb8, 0x00, 0xb2, 0xa8, 0x8d, 0x00, 0x9a, 0x89, 0x65, 0x00, 0x96, 0x81, 0x58, 0x00, 0xa8, 0x94, 0x6e, 0x00, 0x96, 0x86, 0x62, 0x00, 0x86, 0x74, 0x57, 0x00, 0x65, 0x4d, 0x37, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x4e, 0x37, 0x20, 0x00, 0x53, 0x3b, 0x27, 0x00, 0x5f, 0x48, 0x32, 0x00, 0x72, 0x5c, 0x42, 0x00, 0x7c, 0x67, 0x4c, 0x00, 0x75, 0x61, 0x45, 0x00, 0x65, 0x4f, 0x35, 0x00, 0x5b, 0x43, 0x2b, 0x00, 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfe, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xfb, 0xf9, 0xff, 0xf0, 0xf7, 0xf5, 0xff, 0xe6, 0xf2, 0xf1, 0xff, 0xe3, 0xf3, 0xf4, 0xff, 0xe7, 0xf5, 0xf4, 0xff, 0xe1, 0xef, 0xea, 0xff, 0xe0, 0xed, 0xe7, 0xff, 0xe2, 0xef, 0xef, 0xff, 0xe4, 0xf0, 0xf1, 0xff, 0xe5, 0xf2, 0xf0, 0xff, 0xe7, 0xf3, 0xf1, 0xff, 0xe9, 0xf3, 0xf1, 0xff, 0xe8, 0xf3, 0xf1, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xe3, 0xef, 0xee, 0xff, 0xe5, 0xf2, 0xf1, 0xff, 0xed, 0xf7, 0xf7, 0xff, 0xea, 0xf4, 0xf5, 0xff, 0xea, 0xf4, 0xf4, 0xff, 0xea, 0xf1, 0xf0, 0xff, 0xcd, 0xd4, 0xd3, 0xff, 0xd4, 0xda, 0xda, 0xff, 0xd5, 0xda, 0xda, 0xff, 0xdb, 0xe1, 0xe0, 0xff, 0xeb, 0xf2, 0xf1, 0xff, 0xe8, 0xef, 0xee, 0xff, 0xde, 0xe4, 0xe3, 0xff, 0xe2, 0xe8, 0xe7, 0xff, 0xdb, 0xe4, 0xe3, 0xff, 0xdc, 0xe6, 0xe7, 0xff, 0xdf, 0xeb, 0xed, 0xff, 0xd9, 0xe4, 0xe8, 0xff, 0xd9, 0xe1, 0xe2, 0xff, 0xdc, 0xe9, 0xe6, 0xff, 0xc1, 0xcd, 0xd0, 0xff, 0xbd, 0xc5, 0xd1, 0xff, 0xc8, 0xd1, 0xde, 0xff, 0xc7, 0xd3, 0xe0, 0xff, 0xc4, 0xd1, 0xdf, 0xff, 0xc3, 0xce, 0xda, 0xff, 0xc9, 0xd2, 0xe0, 0xff, 0xb8, 0xc9, 0xde, 0xff, 0x9f, 0xb3, 0xcd, 0xff, 0xb4, 0xbe, 0xcf, 0xff, 0xc6, 0xca, 0xd0, 0xff, 0xc3, 0xc7, 0xcb, 0xff, 0xd4, 0xd6, 0xda, 0xff, 0xc2, 0xc5, 0xcc, 0xff, 0xbd, 0xc3, 0xcb, 0xff, 0xc9, 0xcf, 0xd2, 0xff, 0xd4, 0xdb, 0xdd, 0xff, 0xe1, 0xeb, 0xee, 0xff, 0xde, 0xeb, 0xed, 0xff, 0xd9, 0xe6, 0xe9, 0xff, 0xd9, 0xe7, 0xe9, 0xff, 0xdb, 0xe6, 0xe5, 0xff, 0xbb, 0xc0, 0xbf, 0xff, 0xc0, 0xc4, 0xc2, 0xff, 0xec, 0xf0, 0xef, 0xff, 0xf4, 0xf7, 0xf8, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xd5, 0xdd, 0xdd, 0x00, 0xd8, 0xe1, 0xdc, 0x00, 0xda, 0xe6, 0xe0, 0x00, 0xd3, 0xde, 0xd3, 0x00, 0xd8, 0xdb, 0xc8, 0x00, 0xd6, 0xda, 0xce, 0x00, 0xd6, 0xdf, 0xd6, 0x00, 0xcb, 0xcd, 0xbc, 0x00, 0xaf, 0xa6, 0x8a, 0x00, 0x9d, 0x8d, 0x66, 0x00, 0x99, 0x87, 0x67, 0x00, 0x98, 0x87, 0x66, 0x00, 0x76, 0x64, 0x43, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x54, 0x3d, 0x28, 0x00, 0x58, 0x41, 0x2b, 0x00, 0x5b, 0x43, 0x2c, 0x00, 0x56, 0x3e, 0x25, 0x00, 0x65, 0x4e, 0x33, 0x00, 0x7a, 0x63, 0x48, 0x00, 0x81, 0x6a, 0x50, 0x00, 0xf6, 0xed, 0xe7, 0x20, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfa, 0xff, 0xe7, 0xe6, 0xdc, 0xff, 0xde, 0xe3, 0xd6, 0xff, 0xda, 0xea, 0xe8, 0xff, 0xde, 0xeb, 0xea, 0xff, 0xde, 0xed, 0xee, 0xff, 0xdf, 0xef, 0xf2, 0xff, 0xe3, 0xf1, 0xf2, 0xff, 0xe6, 0xf3, 0xf1, 0xff, 0xe6, 0xf3, 0xf2, 0xff, 0xe6, 0xf2, 0xf2, 0xff, 0xe6, 0xf3, 0xf3, 0xff, 0xe8, 0xf4, 0xf2, 0xff, 0xe9, 0xf4, 0xf1, 0xff, 0xe8, 0xf3, 0xf1, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xea, 0xf5, 0xf3, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe7, 0xf2, 0xf1, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe5, 0xef, 0xf0, 0xff, 0xe2, 0xef, 0xf0, 0xff, 0xe6, 0xf2, 0xf2, 0xff, 0xeb, 0xf6, 0xf5, 0xff, 0xeb, 0xf5, 0xf5, 0xff, 0xeb, 0xf5, 0xf4, 0xff, 0xe0, 0xe9, 0xe7, 0xff, 0xe2, 0xe8, 0xe8, 0xff, 0xd7, 0xdc, 0xda, 0xff, 0xe4, 0xea, 0xe8, 0xff, 0xeb, 0xf2, 0xf2, 0xff, 0xd8, 0xdf, 0xde, 0xff, 0xda, 0xe1, 0xdf, 0xff, 0xe3, 0xea, 0xe9, 0xff, 0xdf, 0xe8, 0xe7, 0xff, 0xe2, 0xef, 0xee, 0xff, 0xe2, 0xef, 0xef, 0xff, 0xd3, 0xdd, 0xdf, 0xff, 0xbd, 0xc9, 0xd4, 0xff, 0xc2, 0xd3, 0xe5, 0xff, 0xb4, 0xc3, 0xda, 0xff, 0xa5, 0xaf, 0xc6, 0xff, 0xb5, 0xc0, 0xd0, 0xff, 0xb5, 0xc4, 0xd5, 0xff, 0x99, 0xaa, 0xbd, 0xff, 0xb3, 0xc0, 0xd0, 0xff, 0xd0, 0xda, 0xe6, 0xff, 0xa7, 0xb2, 0xc8, 0xff, 0x92, 0xa1, 0xb0, 0xff, 0x90, 0x9b, 0xaa, 0xff, 0x92, 0x94, 0xa2, 0xff, 0x9e, 0x99, 0xa0, 0xff, 0x96, 0x92, 0x96, 0xff, 0x9f, 0x9d, 0xa0, 0xff, 0xa4, 0xa6, 0xaa, 0xff, 0xb2, 0xb5, 0xb7, 0xff, 0xae, 0xb0, 0xb1, 0xff, 0xbc, 0xbe, 0xbf, 0xff, 0xcf, 0xd6, 0xd7, 0xff, 0xd7, 0xdf, 0xe1, 0xff, 0xda, 0xe3, 0xe4, 0xff, 0xda, 0xe4, 0xe4, 0xff, 0xd0, 0xd7, 0xd8, 0xff, 0xd3, 0xdb, 0xdd, 0xff, 0xd6, 0xe1, 0xe1, 0xff, 0xd8, 0xe3, 0xe5, 0xff, 0xe5, 0xed, 0xee, 0xff, 0xf5, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x08, 0xbc, 0xb5, 0x9a, 0x00, 0xa7, 0x94, 0x76, 0x00, 0x8d, 0x6f, 0x53, 0x00, 0xb5, 0xac, 0x87, 0x00, 0xc9, 0xca, 0xb6, 0x00, 0xca, 0xd2, 0xc9, 0x00, 0xd4, 0xdd, 0xd4, 0x00, 0xc0, 0xc0, 0xae, 0x00, 0xa6, 0xa1, 0x8a, 0x00, 0x92, 0x8b, 0x6a, 0x00, 0x9c, 0x8e, 0x68, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x54, 0x3d, 0x28, 0x00, 0x57, 0x40, 0x2a, 0x00, 0x5c, 0x45, 0x2e, 0x00, 0x61, 0x49, 0x31, 0x00, 0x60, 0x49, 0x30, 0x00, 0x5c, 0x45, 0x2c, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xf3, 0xf4, 0xed, 0xff, 0xd4, 0xd1, 0xbb, 0xff, 0xc2, 0xc4, 0xa9, 0xff, 0xd2, 0xdb, 0xcb, 0xff, 0xe0, 0xea, 0xea, 0xff, 0xdc, 0xe5, 0xe5, 0xff, 0xdb, 0xe9, 0xe7, 0xff, 0xde, 0xed, 0xee, 0xff, 0xe0, 0xef, 0xf1, 0xff, 0xe5, 0xf2, 0xf3, 0xff, 0xe6, 0xf2, 0xf2, 0xff, 0xe6, 0xf3, 0xf2, 0xff, 0xe5, 0xf2, 0xf2, 0xff, 0xe7, 0xf2, 0xf1, 0xff, 0xe9, 0xf3, 0xf2, 0xff, 0xe8, 0xf3, 0xf1, 0xff, 0xea, 0xf5, 0xf3, 0xff, 0xeb, 0xf6, 0xf4, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe8, 0xf2, 0xf1, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe6, 0xf0, 0xf0, 0xff, 0xe1, 0xeb, 0xec, 0xff, 0xe3, 0xee, 0xf0, 0xff, 0xe6, 0xf1, 0xf3, 0xff, 0xe8, 0xf2, 0xf3, 0xff, 0xeb, 0xf5, 0xf5, 0xff, 0xea, 0xf5, 0xf4, 0xff, 0xeb, 0xf6, 0xf3, 0xff, 0xe9, 0xf2, 0xf0, 0xff, 0xec, 0xf5, 0xf2, 0xff, 0xe9, 0xf1, 0xef, 0xff, 0xe4, 0xed, 0xec, 0xff, 0xe2, 0xeb, 0xe9, 0xff, 0xe4, 0xed, 0xec, 0xff, 0xe5, 0xee, 0xed, 0xff, 0xe7, 0xf1, 0xf2, 0xff, 0xd6, 0xe2, 0xe5, 0xff, 0xce, 0xd8, 0xdc, 0xff, 0xd3, 0xdd, 0xe2, 0xff, 0x8a, 0x99, 0xb7, 0xff, 0x59, 0x68, 0x98, 0xff, 0x8b, 0x9c, 0xbe, 0xff, 0xb1, 0xc1, 0xd1, 0xff, 0xbc, 0xc8, 0xd2, 0xff, 0xb6, 0xc3, 0xd0, 0xff, 0xa8, 0xb6, 0xc6, 0xff, 0xaa, 0xb8, 0xc4, 0xff, 0xc5, 0xd3, 0xda, 0xff, 0xd5, 0xe5, 0xe3, 0xff, 0xe1, 0xec, 0xee, 0xff, 0xd3, 0xdf, 0xe5, 0xff, 0xc0, 0xcb, 0xd2, 0xff, 0xb3, 0xb8, 0xbb, 0xff, 0xb0, 0xb2, 0xb3, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0xbb, 0xc0, 0xc0, 0xff, 0xc3, 0xc7, 0xc7, 0xff, 0xc1, 0xc3, 0xc3, 0xff, 0xbc, 0xbc, 0xbd, 0xff, 0xc4, 0xc6, 0xc5, 0xff, 0xc9, 0xcd, 0xcc, 0xff, 0xce, 0xd6, 0xd5, 0xff, 0xda, 0xe2, 0xe3, 0xff, 0xdd, 0xe9, 0xec, 0xff, 0xcc, 0xda, 0xde, 0xff, 0xd5, 0xe1, 0xe4, 0xff, 0xdd, 0xea, 0xea, 0xff, 0xdf, 0xeb, 0xea, 0xff, 0xeb, 0xf2, 0xf3, 0xff, 0xfa, 0xfb, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0x20, 0x8a, 0x69, 0x4a, 0x00, 0x6b, 0x50, 0x34, 0x00, 0xae, 0xa1, 0x86, 0x00, 0xce, 0xd1, 0xbf, 0x00, 0xc4, 0xc6, 0xb5, 0x00, 0xba, 0xba, 0xa5, 0x00, 0xc0, 0xbe, 0xa8, 0x00, 0xc3, 0xc4, 0xaf, 0x00, 0xb6, 0xb8, 0xa2, 0x00, 0xb4, 0xaa, 0x8f, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x54, 0x3c, 0x28, 0x00, 0x58, 0x3f, 0x2c, 0x00, 0x5c, 0x45, 0x30, 0x00, 0x5e, 0x47, 0x30, 0x00, 0x62, 0x4c, 0x32, 0x00, 0xf6, 0xed, 0xe7, 0x9c, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf8, 0xf1, 0xed, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf4, 0xf0, 0xff, 0xde, 0xe1, 0xd5, 0xff, 0xcf, 0xd5, 0xc6, 0xff, 0xd6, 0xdb, 0xc2, 0xff, 0xd4, 0xdd, 0xcc, 0xff, 0xdc, 0xe6, 0xda, 0xff, 0xde, 0xe9, 0xe2, 0xff, 0xdc, 0xe8, 0xe5, 0xff, 0xdf, 0xec, 0xea, 0xff, 0xe2, 0xef, 0xed, 0xff, 0xe2, 0xef, 0xef, 0xff, 0xe4, 0xf1, 0xf3, 0xff, 0xe6, 0xf2, 0xf2, 0xff, 0xe5, 0xf1, 0xf1, 0xff, 0xe6, 0xf1, 0xf1, 0xff, 0xe8, 0xf1, 0xf2, 0xff, 0xe8, 0xf2, 0xf1, 0xff, 0xea, 0xf5, 0xf2, 0xff, 0xeb, 0xf6, 0xf4, 0xff, 0xea, 0xf4, 0xf4, 0xff, 0xea, 0xf3, 0xf4, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xe8, 0xf1, 0xf1, 0xff, 0xe5, 0xf1, 0xf1, 0xff, 0xe0, 0xec, 0xed, 0xff, 0xe6, 0xf0, 0xef, 0xff, 0xea, 0xf2, 0xf6, 0xff, 0xe9, 0xf1, 0xf6, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xeb, 0xf5, 0xf3, 0xff, 0xea, 0xf4, 0xf3, 0xff, 0xe6, 0xf1, 0xef, 0xff, 0xe6, 0xf1, 0xef, 0xff, 0xe7, 0xf1, 0xef, 0xff, 0xe7, 0xf1, 0xef, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xe6, 0xf2, 0xf2, 0xff, 0xe3, 0xef, 0xee, 0xff, 0xdd, 0xe8, 0xec, 0xff, 0xca, 0xd5, 0xe1, 0xff, 0xbf, 0xc9, 0xd7, 0xff, 0xc6, 0xd1, 0xdb, 0xff, 0xa2, 0xb0, 0xc0, 0xff, 0x7f, 0x8c, 0xaa, 0xff, 0xa5, 0xb5, 0xcb, 0xff, 0xcb, 0xdc, 0xe4, 0xff, 0xd1, 0xdf, 0xe6, 0xff, 0xcb, 0xd5, 0xdc, 0xff, 0xd9, 0xe2, 0xe7, 0xff, 0xe2, 0xef, 0xf4, 0xff, 0xd2, 0xe1, 0xe9, 0xff, 0xc7, 0xd1, 0xd9, 0xff, 0xc2, 0xc7, 0xca, 0xff, 0xd0, 0xd5, 0xd3, 0xff, 0xea, 0xf5, 0xf1, 0xff, 0xe8, 0xfa, 0xf7, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xbb, 0xbf, 0xbf, 0xff, 0xa4, 0xa2, 0xa1, 0xff, 0xbc, 0xbb, 0xb9, 0xff, 0xcf, 0xd4, 0xd5, 0xff, 0xcb, 0xd2, 0xd2, 0xff, 0xc3, 0xc5, 0xc3, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc0, 0xc2, 0xc2, 0xff, 0xc3, 0xc8, 0xc6, 0xff, 0xc0, 0xc6, 0xc4, 0xff, 0xc8, 0xd1, 0xd2, 0xff, 0xc4, 0xcd, 0xd2, 0xff, 0xbf, 0xc5, 0xcb, 0xff, 0xcf, 0xd9, 0xdc, 0xff, 0xdc, 0xe8, 0xe7, 0xff, 0xdb, 0xe6, 0xe5, 0xff, 0xe0, 0xe8, 0xe7, 0xff, 0xef, 0xf2, 0xf3, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0x5b, 0xa0, 0x94, 0x79, 0x00, 0x9e, 0x95, 0x7f, 0x00, 0xb4, 0xb7, 0xa9, 0x00, 0xd0, 0xd7, 0xce, 0x00, 0xcc, 0xcc, 0xba, 0x00, 0xb4, 0xae, 0x8f, 0x00, 0x9f, 0x9a, 0x7b, 0x00, 0xbc, 0xbf, 0xab, 0x00, 0xbb, 0xbd, 0xa5, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x54, 0x3d, 0x28, 0x00, 0x56, 0x40, 0x29, 0x00, 0x59, 0x42, 0x2c, 0x00, 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xe6, 0xde, 0xff, 0xc0, 0xb8, 0xa1, 0xff, 0xcd, 0xd3, 0xbf, 0xff, 0xe4, 0xee, 0xe2, 0xff, 0xdc, 0xe7, 0xdd, 0xff, 0xe1, 0xed, 0xe8, 0xff, 0xde, 0xec, 0xe6, 0xff, 0xe0, 0xee, 0xe4, 0xff, 0xe3, 0xf1, 0xe8, 0xff, 0xe4, 0xf1, 0xef, 0xff, 0xe4, 0xf0, 0xee, 0xff, 0xe3, 0xef, 0xef, 0xff, 0xe5, 0xf1, 0xf2, 0xff, 0xe5, 0xf1, 0xf2, 0xff, 0xe7, 0xf2, 0xf2, 0xff, 0xea, 0xf3, 0xf3, 0xff, 0xe9, 0xf3, 0xf4, 0xff, 0xea, 0xf5, 0xf4, 0xff, 0xec, 0xf8, 0xf5, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xea, 0xf4, 0xf4, 0xff, 0xea, 0xf4, 0xf4, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xe5, 0xf0, 0xf3, 0xff, 0xe4, 0xf0, 0xf2, 0xff, 0xe7, 0xf1, 0xf2, 0xff, 0xea, 0xf3, 0xf5, 0xff, 0xe9, 0xf2, 0xf4, 0xff, 0xe8, 0xf2, 0xf3, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe5, 0xf0, 0xef, 0xff, 0xe4, 0xef, 0xef, 0xff, 0xe4, 0xef, 0xee, 0xff, 0xe5, 0xf0, 0xf0, 0xff, 0xe4, 0xef, 0xef, 0xff, 0xe5, 0xf1, 0xf1, 0xff, 0xe1, 0xed, 0xec, 0xff, 0xd8, 0xe4, 0xe7, 0xff, 0xc9, 0xd6, 0xe1, 0xff, 0xc6, 0xd3, 0xdf, 0xff, 0xc0, 0xcd, 0xd5, 0xff, 0xb3, 0xc0, 0xce, 0xff, 0xb4, 0xc5, 0xdc, 0xff, 0xad, 0xc2, 0xd6, 0xff, 0x92, 0xa3, 0xbe, 0xff, 0xa1, 0xaf, 0xc4, 0xff, 0xc6, 0xd5, 0xdc, 0xff, 0xe3, 0xf0, 0xf3, 0xff, 0xad, 0xb6, 0xc3, 0xff, 0x80, 0x84, 0x97, 0xff, 0x66, 0x64, 0x73, 0xff, 0x88, 0x82, 0x88, 0xff, 0xa3, 0x9c, 0x99, 0xff, 0xaf, 0xb0, 0xa8, 0xff, 0xda, 0xe6, 0xe4, 0xff, 0xe1, 0xee, 0xed, 0xff, 0xe7, 0xf2, 0xf0, 0xff, 0xcc, 0xd1, 0xcc, 0xff, 0xa5, 0x9e, 0x99, 0xff, 0xb8, 0xb4, 0xb3, 0xff, 0xbe, 0xbf, 0xbe, 0xff, 0xb8, 0xbd, 0xba, 0xff, 0xbc, 0xc0, 0xc0, 0xff, 0xbc, 0xbe, 0xbf, 0xff, 0xc9, 0xc9, 0xc7, 0xff, 0xb5, 0xb4, 0xb3, 0xff, 0xb0, 0xac, 0xaf, 0xff, 0xa7, 0xa7, 0xac, 0xff, 0xa4, 0xac, 0xaf, 0xff, 0xc0, 0xc8, 0xcc, 0xff, 0xc9, 0xcf, 0xd0, 0xff, 0xc4, 0xcb, 0xc8, 0xff, 0xcc, 0xd5, 0xd4, 0xff, 0xce, 0xda, 0xdb, 0xff, 0xde, 0xe6, 0xe8, 0xff, 0xf6, 0xf8, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xf8, 0xf1, 0xec, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xba, 0xb5, 0xa1, 0x00, 0xc4, 0xc7, 0xbd, 0x00, 0xd3, 0xdf, 0xde, 0x00, 0xc4, 0xce, 0xc6, 0x00, 0xc2, 0xc9, 0xbd, 0x00, 0xc4, 0xc6, 0xb5, 0x00, 0xb8, 0xb2, 0x99, 0x00, 0xb0, 0xb7, 0xa4, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x56, 0x3f, 0x28, 0x00, 0x57, 0x40, 0x29, 0x00, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xfb, 0xf8, 0xff, 0xe4, 0xe6, 0xdb, 0xff, 0xad, 0xa8, 0x8c, 0xff, 0xb3, 0xac, 0x8e, 0xff, 0xc8, 0xca, 0xaa, 0xff, 0xba, 0xb8, 0x9b, 0xff, 0xcd, 0xd7, 0xc2, 0xff, 0xde, 0xeb, 0xdf, 0xff, 0xde, 0xeb, 0xe1, 0xff, 0xe4, 0xec, 0xe5, 0xff, 0xe0, 0xe8, 0xe3, 0xff, 0xdf, 0xee, 0xea, 0xff, 0xe2, 0xf0, 0xed, 0xff, 0xe5, 0xf2, 0xf1, 0xff, 0xe8, 0xf3, 0xf4, 0xff, 0xe9, 0xf5, 0xf3, 0xff, 0xeb, 0xf6, 0xf4, 0xff, 0xeb, 0xf6, 0xf4, 0xff, 0xec, 0xf5, 0xf4, 0xff, 0xed, 0xf7, 0xf5, 0xff, 0xed, 0xf9, 0xf7, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xeb, 0xf5, 0xf5, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xe8, 0xf1, 0xf4, 0xff, 0xe4, 0xef, 0xf2, 0xff, 0xe1, 0xec, 0xef, 0xff, 0xe3, 0xec, 0xef, 0xff, 0xe8, 0xf2, 0xf1, 0xff, 0xea, 0xf3, 0xf3, 0xff, 0xe8, 0xf1, 0xf4, 0xff, 0xe7, 0xf2, 0xf4, 0xff, 0xe3, 0xf0, 0xf0, 0xff, 0xe1, 0xed, 0xee, 0xff, 0xe2, 0xee, 0xef, 0xff, 0xe3, 0xef, 0xf1, 0xff, 0xe0, 0xed, 0xee, 0xff, 0xe2, 0xef, 0xef, 0xff, 0xe6, 0xf3, 0xf3, 0xff, 0xdd, 0xe8, 0xe7, 0xff, 0xde, 0xe8, 0xe9, 0xff, 0xc7, 0xd2, 0xda, 0xff, 0xc2, 0xd0, 0xd8, 0xff, 0xcb, 0xd9, 0xdf, 0xff, 0xbd, 0xc9, 0xd5, 0xff, 0xa7, 0xb5, 0xc7, 0xff, 0x88, 0x98, 0xaa, 0xff, 0x9d, 0xa9, 0xb9, 0xff, 0xbf, 0xcc, 0xd6, 0xff, 0xd4, 0xe2, 0xe7, 0xff, 0xad, 0xb4, 0xb9, 0xff, 0x82, 0x7f, 0x89, 0xff, 0x8c, 0x86, 0x8b, 0xff, 0x7f, 0x7c, 0x79, 0xff, 0x7a, 0x77, 0x76, 0xff, 0xa3, 0x9f, 0x9e, 0xff, 0xc1, 0xbf, 0xbc, 0xff, 0xdb, 0xdf, 0xdc, 0xff, 0xdc, 0xe7, 0xe4, 0xff, 0xe1, 0xef, 0xeb, 0xff, 0xe7, 0xf0, 0xea, 0xff, 0xbb, 0xb8, 0xb1, 0xff, 0x9e, 0x97, 0x95, 0xff, 0xad, 0xa6, 0xa8, 0xff, 0xb9, 0xb8, 0xb8, 0xff, 0xbc, 0xbe, 0xbe, 0xff, 0xbc, 0xbd, 0xbb, 0xff, 0xb7, 0xb3, 0xaf, 0xff, 0xb3, 0xad, 0xa9, 0xff, 0xa3, 0x9d, 0x9e, 0xff, 0xb2, 0xb0, 0xb5, 0xff, 0xb4, 0xb6, 0xb8, 0xff, 0xb8, 0xbe, 0xc1, 0xff, 0xc0, 0xc8, 0xcc, 0xff, 0xc5, 0xcd, 0xce, 0xff, 0xc7, 0xce, 0xd0, 0xff, 0xc8, 0xd2, 0xd4, 0xff, 0xbc, 0xc7, 0xcb, 0xff, 0xd1, 0xda, 0xe1, 0xff, 0xeb, 0xef, 0xf3, 0xff, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0xc3, 0xc6, 0xba, 0x00, 0xd0, 0xda, 0xda, 0x00, 0xd1, 0xdb, 0xd8, 0x00, 0xcd, 0xd6, 0xce, 0x00, 0xc9, 0xcd, 0xbe, 0x00, 0xbc, 0xb8, 0xa7, 0x00, 0xc2, 0xc7, 0xb6, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x57, 0x3f, 0x29, 0x00, 0xf6, 0xed, 0xe7, 0x18, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xe6, 0xe1, 0xff, 0xe3, 0xe6, 0xce, 0xff, 0xca, 0xd3, 0xb5, 0xff, 0xa6, 0xa0, 0x89, 0xff, 0xac, 0xa4, 0x8b, 0xff, 0xca, 0xcd, 0xb4, 0xff, 0xc8, 0xc9, 0xb0, 0xff, 0xde, 0xe8, 0xda, 0xff, 0xdf, 0xeb, 0xe5, 0xff, 0xe0, 0xed, 0xe8, 0xff, 0xe4, 0xef, 0xea, 0xff, 0xe8, 0xf3, 0xed, 0xff, 0xe8, 0xf4, 0xf0, 0xff, 0xea, 0xf7, 0xf4, 0xff, 0xec, 0xf8, 0xf7, 0xff, 0xed, 0xf8, 0xf7, 0xff, 0xee, 0xf9, 0xf7, 0xff, 0xef, 0xfa, 0xf8, 0xff, 0xed, 0xf8, 0xf6, 0xff, 0xec, 0xf4, 0xf3, 0xff, 0xe2, 0xec, 0xea, 0xff, 0xd9, 0xe5, 0xe2, 0xff, 0xe2, 0xed, 0xea, 0xff, 0xea, 0xf4, 0xf3, 0xff, 0xec, 0xf6, 0xf7, 0xff, 0xeb, 0xf5, 0xf7, 0xff, 0xe8, 0xf0, 0xf4, 0xff, 0xe1, 0xed, 0xef, 0xff, 0xda, 0xe6, 0xe9, 0xff, 0xe2, 0xeb, 0xed, 0xff, 0xe7, 0xf0, 0xf0, 0xff, 0xea, 0xf4, 0xf5, 0xff, 0xe4, 0xed, 0xf0, 0xff, 0xe0, 0xed, 0xef, 0xff, 0xe6, 0xf3, 0xf6, 0xff, 0xe0, 0xec, 0xef, 0xff, 0xde, 0xeb, 0xec, 0xff, 0xdd, 0xea, 0xec, 0xff, 0xde, 0xeb, 0xee, 0xff, 0xe7, 0xf3, 0xf5, 0xff, 0xe1, 0xee, 0xee, 0xff, 0xd8, 0xe2, 0xe0, 0xff, 0xde, 0xe5, 0xe4, 0xff, 0xcc, 0xd7, 0xdc, 0xff, 0xcb, 0xd7, 0xdd, 0xff, 0xd9, 0xe7, 0xe7, 0xff, 0xc3, 0xce, 0xd4, 0xff, 0xa1, 0xac, 0xb9, 0xff, 0xbf, 0xc9, 0xcf, 0xff, 0xdb, 0xe2, 0xde, 0xff, 0xf7, 0xff, 0xf9, 0xff, 0xbd, 0xc0, 0xc2, 0xff, 0x81, 0x7e, 0x82, 0xff, 0x8b, 0x84, 0x84, 0xff, 0x90, 0x83, 0x7f, 0xff, 0x9a, 0x8a, 0x87, 0xff, 0x8c, 0x82, 0x81, 0xff, 0x8b, 0x86, 0x87, 0xff, 0xa9, 0xa4, 0xa5, 0xff, 0xb9, 0xb8, 0xb6, 0xff, 0xdc, 0xe6, 0xe3, 0xff, 0xd9, 0xe4, 0xdf, 0xff, 0xdd, 0xe5, 0xdc, 0xff, 0xdf, 0xe3, 0xd9, 0xff, 0xb5, 0xaf, 0xac, 0xff, 0x96, 0x8c, 0x8f, 0xff, 0x95, 0x8f, 0x92, 0xff, 0xa4, 0x9f, 0x9f, 0xff, 0xbc, 0xb8, 0xb2, 0xff, 0xaa, 0xa8, 0x9d, 0xff, 0xba, 0xb6, 0xad, 0xff, 0x99, 0x94, 0x94, 0xff, 0xa8, 0x9d, 0xa1, 0xff, 0x9e, 0x8e, 0x91, 0xff, 0x8c, 0x84, 0x88, 0xff, 0xac, 0xae, 0xb5, 0xff, 0xaf, 0xb6, 0xc0, 0xff, 0xab, 0xb2, 0xba, 0xff, 0xb7, 0xbe, 0xc3, 0xff, 0xba, 0xc3, 0xc5, 0xff, 0xb2, 0xb9, 0xbe, 0xff, 0xb6, 0xbe, 0xc8, 0xff, 0xd8, 0xde, 0xe3, 0xff, 0xfb, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0xd0, 0xd9, 0xdb, 0x00, 0xd2, 0xd5, 0xc4, 0x00, 0xbd, 0xb8, 0x9c, 0x00, 0xa5, 0xa1, 0x88, 0x00, 0xaf, 0xac, 0x9d, 0x00, 0xb6, 0xb4, 0x9d, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x18, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xd5, 0xcc, 0xff, 0x9e, 0x94, 0x7a, 0xff, 0x96, 0x86, 0x64, 0xff, 0xbd, 0xba, 0x9f, 0xff, 0xd3, 0xd7, 0xbc, 0xff, 0xcb, 0xd1, 0xba, 0xff, 0xd9, 0xe0, 0xd3, 0xff, 0xdb, 0xe4, 0xd2, 0xff, 0xe0, 0xec, 0xe4, 0xff, 0xe3, 0xee, 0xec, 0xff, 0xe4, 0xf1, 0xf1, 0xff, 0xe8, 0xf5, 0xf4, 0xff, 0xec, 0xf7, 0xf4, 0xff, 0xee, 0xf9, 0xf8, 0xff, 0xe8, 0xf5, 0xf6, 0xff, 0xe7, 0xf4, 0xf4, 0xff, 0xeb, 0xf5, 0xf3, 0xff, 0xea, 0xf4, 0xf3, 0xff, 0xeb, 0xf5, 0xf5, 0xff, 0xec, 0xf6, 0xf6, 0xff, 0xec, 0xf5, 0xf5, 0xff, 0xe3, 0xec, 0xeb, 0xff, 0xd5, 0xde, 0xdc, 0xff, 0xdd, 0xe5, 0xe4, 0xff, 0xed, 0xf5, 0xf4, 0xff, 0xea, 0xf3, 0xf3, 0xff, 0xec, 0xf5, 0xf6, 0xff, 0xec, 0xf6, 0xf6, 0xff, 0xe7, 0xf3, 0xf3, 0xff, 0xdd, 0xe8, 0xe8, 0xff, 0xde, 0xe6, 0xe6, 0xff, 0xe3, 0xeb, 0xee, 0xff, 0xe7, 0xf1, 0xf3, 0xff, 0xe1, 0xee, 0xef, 0xff, 0xd8, 0xe2, 0xe9, 0xff, 0xdf, 0xea, 0xf1, 0xff, 0xe3, 0xef, 0xf3, 0xff, 0xde, 0xea, 0xec, 0xff, 0xdf, 0xed, 0xed, 0xff, 0xe7, 0xf4, 0xf7, 0xff, 0xe0, 0xed, 0xef, 0xff, 0xdc, 0xe7, 0xe6, 0xff, 0xdb, 0xe5, 0xe2, 0xff, 0xde, 0xe8, 0xe8, 0xff, 0xd9, 0xe5, 0xe7, 0xff, 0xdb, 0xe8, 0xe9, 0xff, 0xdd, 0xe9, 0xe5, 0xff, 0xd6, 0xe3, 0xe6, 0xff, 0xc4, 0xd2, 0xdc, 0xff, 0xb1, 0xb5, 0xbd, 0xff, 0x8c, 0x87, 0x8e, 0xff, 0x70, 0x68, 0x65, 0xff, 0x72, 0x63, 0x67, 0xff, 0x96, 0x86, 0x85, 0xff, 0x9c, 0x8f, 0x86, 0xff, 0xb4, 0xb0, 0xa5, 0xff, 0xab, 0x9e, 0x95, 0xff, 0x78, 0x61, 0x5e, 0xff, 0x88, 0x78, 0x78, 0xff, 0x89, 0x7d, 0x80, 0xff, 0x6d, 0x60, 0x65, 0xff, 0xd8, 0xdc, 0xda, 0xff, 0xdb, 0xe7, 0xde, 0xff, 0xc3, 0xc9, 0xbd, 0xff, 0xe2, 0xe7, 0xdb, 0xff, 0xc2, 0xc2, 0xb9, 0xff, 0xa1, 0x96, 0x94, 0xff, 0x94, 0x8c, 0x8e, 0xff, 0x8a, 0x83, 0x85, 0xff, 0xb2, 0xaa, 0xa4, 0xff, 0xba, 0xbb, 0xad, 0xff, 0xae, 0xab, 0xa1, 0xff, 0xad, 0xa1, 0x9a, 0xff, 0x79, 0x67, 0x63, 0xff, 0x7c, 0x66, 0x66, 0xff, 0x7b, 0x69, 0x68, 0xff, 0x81, 0x75, 0x7a, 0xff, 0x6d, 0x65, 0x74, 0xff, 0x76, 0x73, 0x84, 0xff, 0x95, 0x99, 0xa3, 0xff, 0xb8, 0xbd, 0xc3, 0xff, 0xbd, 0xc4, 0xc4, 0xff, 0xa9, 0xaf, 0xb4, 0xff, 0xa7, 0xae, 0xb8, 0xff, 0xcc, 0xd4, 0xd8, 0xff, 0xf4, 0xf6, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0x94, 0x8d, 0x79, 0x00, 0x8d, 0x80, 0x67, 0x00, 0xbc, 0xb6, 0x9f, 0x00, 0xcb, 0xca, 0xb7, 0x00, 0xb5, 0xba, 0xa4, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x18, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf9, 0xf8, 0xff, 0xcd, 0xc2, 0xb3, 0xff, 0x97, 0x82, 0x61, 0xff, 0x8a, 0x75, 0x52, 0xff, 0x84, 0x6d, 0x4c, 0xff, 0x96, 0x85, 0x60, 0xff, 0xc7, 0xc6, 0xa5, 0xff, 0xdd, 0xe8, 0xd8, 0xff, 0xe4, 0xef, 0xe3, 0xff, 0xe0, 0xef, 0xec, 0xff, 0xdf, 0xed, 0xe9, 0xff, 0xe3, 0xf0, 0xef, 0xff, 0xe3, 0xf1, 0xf1, 0xff, 0xe4, 0xf2, 0xf3, 0xff, 0xe5, 0xf1, 0xf2, 0xff, 0xdd, 0xe9, 0xec, 0xff, 0xdb, 0xe8, 0xec, 0xff, 0xe8, 0xf4, 0xf5, 0xff, 0xea, 0xf5, 0xf3, 0xff, 0xe9, 0xf4, 0xf1, 0xff, 0xe5, 0xf0, 0xee, 0xff, 0xe3, 0xee, 0xec, 0xff, 0xe5, 0xf0, 0xee, 0xff, 0xe9, 0xf3, 0xf2, 0xff, 0xea, 0xf3, 0xf3, 0xff, 0xe5, 0xef, 0xef, 0xff, 0xe9, 0xf3, 0xf2, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xec, 0xf5, 0xf5, 0xff, 0xec, 0xf8, 0xf8, 0xff, 0xdf, 0xea, 0xea, 0xff, 0xcc, 0xd4, 0xd5, 0xff, 0xe0, 0xe9, 0xec, 0xff, 0xdf, 0xeb, 0xed, 0xff, 0xe4, 0xf1, 0xf3, 0xff, 0xdd, 0xe9, 0xee, 0xff, 0xd7, 0xe3, 0xe9, 0xff, 0xde, 0xea, 0xf0, 0xff, 0xd3, 0xdf, 0xe5, 0xff, 0xcd, 0xda, 0xde, 0xff, 0xd2, 0xdc, 0xdf, 0xff, 0xd2, 0xdb, 0xdc, 0xff, 0xd8, 0xe1, 0xdf, 0xff, 0xdd, 0xe9, 0xe4, 0xff, 0xdf, 0xee, 0xeb, 0xff, 0xe0, 0xee, 0xed, 0xff, 0xe3, 0xef, 0xef, 0xff, 0xdb, 0xe7, 0xe7, 0xff, 0xd8, 0xe4, 0xeb, 0xff, 0xd8, 0xdf, 0xe0, 0xff, 0x89, 0x89, 0x89, 0xff, 0x70, 0x6a, 0x6f, 0xff, 0x85, 0x80, 0x83, 0xff, 0x5c, 0x50, 0x54, 0xff, 0xa1, 0x91, 0x8a, 0xff, 0x98, 0x87, 0x74, 0xff, 0x92, 0x81, 0x70, 0xff, 0xb5, 0xaf, 0xa0, 0xff, 0xaf, 0xa4, 0x9a, 0xff, 0x7b, 0x68, 0x65, 0xff, 0x8e, 0x83, 0x80, 0xff, 0x88, 0x7f, 0x7e, 0xff, 0x9e, 0x9c, 0x9a, 0xff, 0xd8, 0xde, 0xd8, 0xff, 0xbb, 0xbb, 0xb2, 0xff, 0xd2, 0xd7, 0xcd, 0xff, 0xc8, 0xcc, 0xc1, 0xff, 0x9b, 0x91, 0x8b, 0xff, 0x99, 0x90, 0x8e, 0xff, 0xa0, 0x9a, 0x9a, 0xff, 0x89, 0x7d, 0x7e, 0xff, 0xa0, 0x94, 0x90, 0xff, 0xad, 0xa0, 0x96, 0xff, 0xb9, 0xab, 0x95, 0xff, 0x6d, 0x5b, 0x50, 0xff, 0x58, 0x3f, 0x39, 0xff, 0x7c, 0x65, 0x57, 0xff, 0x6a, 0x53, 0x53, 0xff, 0x66, 0x53, 0x57, 0xff, 0x67, 0x58, 0x62, 0xff, 0x66, 0x5f, 0x6c, 0xff, 0x63, 0x5e, 0x70, 0xff, 0x8e, 0x90, 0x9c, 0xff, 0xc2, 0xc8, 0xca, 0xff, 0xba, 0xc1, 0xc3, 0xff, 0x9d, 0xa6, 0xb0, 0xff, 0xb2, 0xb9, 0xc2, 0xff, 0xec, 0xed, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0x7c, 0x6d, 0x64, 0x00, 0xa8, 0x9e, 0x87, 0x00, 0xa2, 0x9c, 0x89, 0x00, 0xc3, 0xc9, 0xbd, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf8, 0xf5, 0xff, 0xc2, 0xb8, 0xa4, 0xff, 0x76, 0x63, 0x42, 0xff, 0x90, 0x79, 0x4e, 0xff, 0xab, 0x9a, 0x73, 0xff, 0xd9, 0xdb, 0xbb, 0xff, 0xd3, 0xdb, 0xc0, 0xff, 0xbe, 0xbf, 0xa2, 0xff, 0xd5, 0xdf, 0xca, 0xff, 0xd4, 0xe1, 0xd1, 0xff, 0xd9, 0xe5, 0xde, 0xff, 0xe1, 0xed, 0xe9, 0xff, 0xe2, 0xf1, 0xf1, 0xff, 0xe3, 0xf1, 0xf0, 0xff, 0xe3, 0xef, 0xf0, 0xff, 0xdb, 0xea, 0xee, 0xff, 0xcb, 0xda, 0xe2, 0xff, 0xde, 0xec, 0xef, 0xff, 0xe8, 0xf3, 0xf3, 0xff, 0xe7, 0xf1, 0xf0, 0xff, 0xe6, 0xf1, 0xef, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe9, 0xf4, 0xf2, 0xff, 0xe7, 0xf1, 0xf0, 0xff, 0xe6, 0xf0, 0xf0, 0xff, 0xe6, 0xf0, 0xf1, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xea, 0xf4, 0xf4, 0xff, 0xe5, 0xef, 0xef, 0xff, 0xe3, 0xed, 0xed, 0xff, 0xe8, 0xf3, 0xf3, 0xff, 0xe9, 0xf5, 0xf5, 0xff, 0xe8, 0xf3, 0xf3, 0xff, 0xe5, 0xf0, 0xf2, 0xff, 0xe1, 0xee, 0xef, 0xff, 0xde, 0xeb, 0xed, 0xff, 0xdd, 0xeb, 0xed, 0xff, 0xe0, 0xed, 0xf0, 0xff, 0xe4, 0xf2, 0xf4, 0xff, 0xdb, 0xe8, 0xeb, 0xff, 0xc3, 0xcd, 0xd1, 0xff, 0xb5, 0xbb, 0xbd, 0xff, 0xb3, 0xb5, 0xb5, 0xff, 0xda, 0xdc, 0xdb, 0xff, 0xe8, 0xf2, 0xef, 0xff, 0xe8, 0xf7, 0xf6, 0xff, 0xe4, 0xf0, 0xf2, 0xff, 0xca, 0xd1, 0xd5, 0xff, 0xc6, 0xca, 0xce, 0xff, 0xb2, 0xb0, 0xaf, 0xff, 0x7b, 0x71, 0x6c, 0xff, 0x93, 0x8e, 0x86, 0xff, 0x8b, 0x83, 0x7d, 0xff, 0xbb, 0xb9, 0xb3, 0xff, 0xb2, 0xb2, 0xa8, 0xff, 0x70, 0x68, 0x5a, 0xff, 0xa7, 0x97, 0x89, 0xff, 0xa0, 0x91, 0x82, 0xff, 0x9d, 0x8e, 0x7d, 0xff, 0xa6, 0x9d, 0x91, 0xff, 0xc4, 0xbf, 0xb9, 0xff, 0x88, 0x7a, 0x75, 0xff, 0x98, 0x8d, 0x86, 0xff, 0x92, 0x8a, 0x8b, 0xff, 0xb9, 0xb9, 0xb6, 0xff, 0xcf, 0xcf, 0xc7, 0xff, 0xcb, 0xce, 0xc4, 0xff, 0xcf, 0xd1, 0xc7, 0xff, 0xa8, 0x9e, 0x96, 0xff, 0x95, 0x8b, 0x86, 0xff, 0x91, 0x81, 0x7f, 0xff, 0x5a, 0x3d, 0x3d, 0xff, 0x5b, 0x45, 0x43, 0xff, 0x99, 0x8c, 0x86, 0xff, 0xb4, 0xa7, 0x92, 0xff, 0xa4, 0x91, 0x80, 0xff, 0x78, 0x5f, 0x55, 0xff, 0x61, 0x49, 0x38, 0xff, 0x60, 0x45, 0x3c, 0xff, 0x6a, 0x52, 0x4f, 0xff, 0x6e, 0x59, 0x5b, 0xff, 0x49, 0x3b, 0x44, 0xff, 0x2d, 0x21, 0x34, 0xff, 0x57, 0x49, 0x59, 0xff, 0x7b, 0x70, 0x78, 0xff, 0xb5, 0xb6, 0xb8, 0xff, 0xb8, 0xc5, 0xca, 0xff, 0x7a, 0x82, 0x8f, 0xff, 0xa3, 0xa3, 0xa9, 0xff, 0xe8, 0xe9, 0xe6, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0x94, 0x89, 0x7b, 0x00, 0x94, 0x8f, 0x83, 0x00, 0xc5, 0xd1, 0xcb, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xec, 0xe9, 0xff, 0xae, 0xa0, 0x8a, 0xff, 0x96, 0x7f, 0x5b, 0xff, 0x87, 0x72, 0x4e, 0xff, 0x87, 0x71, 0x4b, 0xff, 0xa0, 0x86, 0x58, 0xff, 0xba, 0xb6, 0x8d, 0xff, 0xd2, 0xd7, 0xbf, 0xff, 0xbc, 0xba, 0x9b, 0xff, 0xc4, 0xc7, 0xb0, 0xff, 0xe1, 0xed, 0xe3, 0xff, 0xe3, 0xeb, 0xe4, 0xff, 0xdf, 0xed, 0xf1, 0xff, 0xdf, 0xee, 0xee, 0xff, 0xe3, 0xef, 0xed, 0xff, 0xe5, 0xf0, 0xee, 0xff, 0xd7, 0xe7, 0xeb, 0xff, 0xc9, 0xdb, 0xe5, 0xff, 0xdd, 0xea, 0xef, 0xff, 0xe6, 0xf0, 0xef, 0xff, 0xdf, 0xe9, 0xe8, 0xff, 0xd8, 0xe2, 0xe3, 0xff, 0xe4, 0xed, 0xef, 0xff, 0xea, 0xf4, 0xf5, 0xff, 0xe9, 0xf2, 0xf4, 0xff, 0xe7, 0xf2, 0xf2, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe6, 0xf0, 0xf0, 0xff, 0xe5, 0xef, 0xef, 0xff, 0xe8, 0xf2, 0xf2, 0xff, 0xee, 0xf8, 0xf8, 0xff, 0xe6, 0xf0, 0xef, 0xff, 0xe1, 0xed, 0xec, 0xff, 0xe8, 0xf5, 0xf4, 0xff, 0xeb, 0xf8, 0xf8, 0xff, 0xea, 0xf6, 0xf8, 0xff, 0xe6, 0xf2, 0xf5, 0xff, 0xe4, 0xf1, 0xf3, 0xff, 0xee, 0xfc, 0xfe, 0xff, 0xea, 0xf7, 0xf9, 0xff, 0xec, 0xf8, 0xf8, 0xff, 0xe8, 0xf5, 0xf4, 0xff, 0xe2, 0xe9, 0xea, 0xff, 0xc7, 0xc8, 0xc7, 0xff, 0xc5, 0xc2, 0xc1, 0xff, 0xcc, 0xca, 0xcb, 0xff, 0xc0, 0xc1, 0xc2, 0xff, 0xbd, 0xbd, 0xbc, 0xff, 0xb9, 0xb6, 0xb6, 0xff, 0xa5, 0x9c, 0x9b, 0xff, 0x9a, 0x8c, 0x89, 0xff, 0x9c, 0x86, 0x71, 0xff, 0x3b, 0x23, 0x1a, 0xff, 0x6a, 0x64, 0x5d, 0xff, 0x93, 0x87, 0x77, 0xff, 0x4b, 0x39, 0x31, 0xff, 0xc4, 0xbc, 0xaf, 0xff, 0xac, 0xa7, 0x95, 0xff, 0x68, 0x58, 0x4c, 0xff, 0x9d, 0x8d, 0x80, 0xff, 0xa2, 0x95, 0x85, 0xff, 0x84, 0x73, 0x6a, 0xff, 0x9d, 0x94, 0x8e, 0xff, 0xc1, 0xb9, 0xb4, 0xff, 0x97, 0x85, 0x85, 0xff, 0x8e, 0x7e, 0x83, 0xff, 0xa4, 0xa4, 0xa3, 0xff, 0xb1, 0xb4, 0xab, 0xff, 0xb9, 0xb6, 0xad, 0xff, 0xbd, 0xbb, 0xb1, 0xff, 0x91, 0x87, 0x7d, 0xff, 0xa7, 0x9e, 0x96, 0xff, 0x7b, 0x6f, 0x67, 0xff, 0x51, 0x35, 0x2a, 0xff, 0x62, 0x45, 0x3c, 0xff, 0x63, 0x4a, 0x4a, 0xff, 0x7c, 0x65, 0x61, 0xff, 0xa5, 0x94, 0x80, 0xff, 0x82, 0x6d, 0x62, 0xff, 0x72, 0x5b, 0x50, 0xff, 0x7b, 0x66, 0x53, 0xff, 0x4c, 0x36, 0x35, 0xff, 0x51, 0x3b, 0x3d, 0xff, 0x61, 0x51, 0x53, 0xff, 0x3d, 0x31, 0x3c, 0xff, 0x41, 0x33, 0x40, 0xff, 0x46, 0x34, 0x41, 0xff, 0x56, 0x4b, 0x52, 0xff, 0xbf, 0xc1, 0xbf, 0xff, 0xaf, 0xb2, 0xb4, 0xff, 0x77, 0x73, 0x7b, 0xff, 0x8b, 0x8a, 0x8b, 0xff, 0xde, 0xdc, 0xd9, 0xff, 0xfd, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0x95, 0x8a, 0x89, 0x00, 0xc6, 0xcf, 0xce, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xec, 0xe8, 0xff, 0xb8, 0xa6, 0x8e, 0xff, 0x90, 0x7c, 0x54, 0xff, 0x84, 0x6c, 0x44, 0xff, 0x74, 0x5b, 0x33, 0xff, 0x8c, 0x75, 0x49, 0xff, 0x97, 0x7e, 0x5a, 0xff, 0x6c, 0x52, 0x2e, 0xff, 0xac, 0xa3, 0x7b, 0xff, 0xe1, 0xe9, 0xd0, 0xff, 0xe1, 0xed, 0xe0, 0xff, 0xe0, 0xee, 0xed, 0xff, 0xe0, 0xed, 0xeb, 0xff, 0xde, 0xee, 0xee, 0xff, 0xdd, 0xeb, 0xec, 0xff, 0xe2, 0xee, 0xeb, 0xff, 0xe9, 0xf2, 0xef, 0xff, 0xe5, 0xef, 0xf0, 0xff, 0xd6, 0xe4, 0xeb, 0xff, 0xda, 0xe5, 0xeb, 0xff, 0xe5, 0xef, 0xf3, 0xff, 0xe4, 0xf0, 0xf1, 0xff, 0xe7, 0xf1, 0xf2, 0xff, 0xe3, 0xed, 0xee, 0xff, 0xe4, 0xee, 0xef, 0xff, 0xe9, 0xf3, 0xf4, 0xff, 0xe6, 0xf0, 0xef, 0xff, 0xe5, 0xf0, 0xee, 0xff, 0xe5, 0xee, 0xee, 0xff, 0xe2, 0xec, 0xee, 0xff, 0xde, 0xe7, 0xe9, 0xff, 0xdc, 0xe5, 0xe5, 0xff, 0xe1, 0xed, 0xec, 0xff, 0xee, 0xf9, 0xf8, 0xff, 0xed, 0xf6, 0xf6, 0xff, 0xea, 0xf6, 0xf7, 0xff, 0xe5, 0xf1, 0xf2, 0xff, 0xe9, 0xf5, 0xf5, 0xff, 0xe8, 0xf0, 0xf2, 0xff, 0xbb, 0xbc, 0xc3, 0xff, 0x99, 0x93, 0xa0, 0xff, 0x92, 0x87, 0x95, 0xff, 0xa1, 0x97, 0x9e, 0xff, 0x99, 0x91, 0x93, 0xff, 0xae, 0xa3, 0xa6, 0xff, 0x9f, 0x94, 0x97, 0xff, 0x89, 0x7f, 0x81, 0xff, 0x9d, 0x90, 0x90, 0xff, 0x97, 0x8c, 0x8b, 0xff, 0xb0, 0xa7, 0xa6, 0xff, 0x9c, 0x93, 0x91, 0xff, 0x93, 0x8b, 0x80, 0xff, 0xb8, 0xa4, 0x8f, 0xff, 0x63, 0x4d, 0x40, 0xff, 0x62, 0x5a, 0x52, 0xff, 0x93, 0x8a, 0x7e, 0xff, 0x58, 0x41, 0x38, 0xff, 0x60, 0x4a, 0x48, 0xff, 0xe1, 0xdd, 0xce, 0xff, 0x8a, 0x7f, 0x6d, 0xff, 0x7e, 0x6f, 0x60, 0xff, 0xb4, 0xa9, 0x9c, 0xff, 0x9b, 0x8e, 0x85, 0xff, 0x6a, 0x54, 0x4c, 0xff, 0x6d, 0x5f, 0x5d, 0xff, 0x94, 0x88, 0x89, 0xff, 0x71, 0x63, 0x67, 0xff, 0x8b, 0x80, 0x82, 0xff, 0x8c, 0x82, 0x83, 0xff, 0xa2, 0x9b, 0x96, 0xff, 0x9d, 0x99, 0x90, 0xff, 0x82, 0x76, 0x71, 0xff, 0x92, 0x83, 0x7b, 0xff, 0x94, 0x88, 0x7b, 0xff, 0x63, 0x4e, 0x48, 0xff, 0x50, 0x33, 0x2c, 0xff, 0x4a, 0x2c, 0x2d, 0xff, 0x54, 0x38, 0x39, 0xff, 0x7d, 0x64, 0x58, 0xff, 0x6a, 0x52, 0x46, 0xff, 0x43, 0x2b, 0x25, 0xff, 0x76, 0x63, 0x5c, 0xff, 0x58, 0x42, 0x40, 0xff, 0x33, 0x1a, 0x1d, 0xff, 0x4b, 0x37, 0x3a, 0xff, 0x5e, 0x4f, 0x53, 0xff, 0x38, 0x2b, 0x32, 0xff, 0x4a, 0x3d, 0x45, 0xff, 0x45, 0x34, 0x39, 0xff, 0x63, 0x54, 0x55, 0xff, 0xc7, 0xc4, 0xc0, 0xff, 0x9d, 0x9d, 0x9a, 0xff, 0x6d, 0x68, 0x72, 0xff, 0xa9, 0xa5, 0xa6, 0xff, 0xd6, 0xd4, 0xcc, 0xff, 0xfa, 0xfa, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xc0, 0xc6, 0xc4, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x9c, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xee, 0xe9, 0xff, 0xa4, 0x95, 0x7a, 0xff, 0x8b, 0x7c, 0x4f, 0xff, 0x98, 0x8d, 0x5e, 0xff, 0xb0, 0xa0, 0x71, 0xff, 0xb5, 0xa5, 0x79, 0xff, 0xce, 0xc8, 0x98, 0xff, 0xb3, 0xae, 0x8a, 0xff, 0x92, 0x80, 0x63, 0xff, 0xdc, 0xd8, 0xb9, 0xff, 0xd3, 0xd7, 0xc1, 0xff, 0xcd, 0xcf, 0xb6, 0xff, 0xe4, 0xed, 0xe0, 0xff, 0xdc, 0xeb, 0xec, 0xff, 0xdd, 0xea, 0xed, 0xff, 0xdd, 0xeb, 0xee, 0xff, 0xe0, 0xed, 0xec, 0xff, 0xe7, 0xf2, 0xef, 0xff, 0xea, 0xf4, 0xf3, 0xff, 0xdf, 0xec, 0xef, 0xff, 0xde, 0xea, 0xee, 0xff, 0xe0, 0xec, 0xf0, 0xff, 0xe1, 0xed, 0xef, 0xff, 0xe6, 0xf0, 0xef, 0xff, 0xe9, 0xf3, 0xf2, 0xff, 0xeb, 0xf5, 0xf4, 0xff, 0xea, 0xf4, 0xf3, 0xff, 0xe8, 0xf1, 0xf2, 0xff, 0xe7, 0xf0, 0xf2, 0xff, 0xe4, 0xef, 0xf2, 0xff, 0xe4, 0xef, 0xf3, 0xff, 0xd2, 0xdd, 0xe3, 0xff, 0xb7, 0xc1, 0xcb, 0xff, 0xab, 0xb4, 0xc4, 0xff, 0xb6, 0xbb, 0xca, 0xff, 0xb9, 0xbd, 0xc5, 0xff, 0xd3, 0xda, 0xdb, 0xff, 0xe7, 0xf0, 0xef, 0xff, 0xde, 0xe6, 0xe5, 0xff, 0xd3, 0xd5, 0xd7, 0xff, 0xa8, 0xa2, 0xa0, 0xff, 0x8a, 0x7f, 0x7e, 0xff, 0x90, 0x81, 0x83, 0xff, 0x80, 0x6f, 0x70, 0xff, 0x78, 0x69, 0x6c, 0xff, 0x9b, 0x8d, 0x92, 0xff, 0xb3, 0xa9, 0xac, 0xff, 0xab, 0xa3, 0xa2, 0xff, 0x90, 0x85, 0x84, 0xff, 0x6b, 0x5c, 0x60, 0xff, 0x8a, 0x7e, 0x81, 0xff, 0x84, 0x7a, 0x7a, 0xff, 0x9d, 0x93, 0x8d, 0xff, 0xc7, 0xba, 0xae, 0xff, 0x6b, 0x58, 0x4c, 0xff, 0x8b, 0x82, 0x74, 0xff, 0xb2, 0xa6, 0x95, 0xff, 0x78, 0x67, 0x5b, 0xff, 0x2d, 0x12, 0x11, 0xff, 0xa3, 0x99, 0x8a, 0xff, 0xda, 0xdb, 0xc9, 0xff, 0x88, 0x79, 0x6a, 0xff, 0x97, 0x86, 0x7a, 0xff, 0xad, 0xa1, 0x9b, 0xff, 0x8f, 0x7b, 0x77, 0xff, 0x36, 0x1e, 0x1f, 0xff, 0x49, 0x33, 0x36, 0xff, 0x68, 0x56, 0x59, 0xff, 0x6b, 0x5c, 0x5e, 0xff, 0x6b, 0x5f, 0x63, 0xff, 0x84, 0x79, 0x7a, 0xff, 0x8a, 0x81, 0x78, 0xff, 0x83, 0x73, 0x6d, 0xff, 0x6f, 0x59, 0x54, 0xff, 0x73, 0x64, 0x59, 0xff, 0x50, 0x3f, 0x3c, 0xff, 0x4a, 0x32, 0x30, 0xff, 0x3f, 0x29, 0x29, 0xff, 0x4f, 0x37, 0x36, 0xff, 0x59, 0x3c, 0x39, 0xff, 0x71, 0x56, 0x4d, 0xff, 0x40, 0x28, 0x23, 0xff, 0x3c, 0x25, 0x24, 0xff, 0x5a, 0x43, 0x40, 0xff, 0x42, 0x2a, 0x2b, 0xff, 0x37, 0x22, 0x25, 0xff, 0x3e, 0x2b, 0x2b, 0xff, 0x77, 0x69, 0x63, 0xff, 0x49, 0x3c, 0x3e, 0xff, 0x35, 0x20, 0x29, 0xff, 0x4d, 0x3b, 0x3c, 0xff, 0x76, 0x6a, 0x65, 0xff, 0xa7, 0xa1, 0x92, 0xff, 0x9f, 0x99, 0x95, 0xff, 0x91, 0x8c, 0x8c, 0xff, 0x9b, 0x98, 0x8f, 0xff, 0xcc, 0xc9, 0xc4, 0xff, 0xf9, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0x43, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xea, 0xe5, 0xff, 0xb1, 0xa2, 0x88, 0xff, 0x74, 0x5c, 0x38, 0xff, 0x87, 0x73, 0x4d, 0xff, 0x99, 0x86, 0x5f, 0xff, 0x77, 0x62, 0x3b, 0xff, 0xa4, 0x98, 0x73, 0xff, 0xb2, 0xa5, 0x84, 0xff, 0x9a, 0x8b, 0x67, 0xff, 0xc1, 0xb4, 0x88, 0xff, 0xc0, 0xb8, 0x92, 0xff, 0xd9, 0xdb, 0xc7, 0xff, 0xd5, 0xda, 0xc4, 0xff, 0xd9, 0xdf, 0xcc, 0xff, 0xe1, 0xeb, 0xe8, 0xff, 0xdf, 0xeb, 0xf1, 0xff, 0xe0, 0xed, 0xf0, 0xff, 0xe1, 0xee, 0xef, 0xff, 0xe4, 0xef, 0xf1, 0xff, 0xe5, 0xf1, 0xf3, 0xff, 0xe1, 0xed, 0xef, 0xff, 0xdf, 0xea, 0xef, 0xff, 0xe2, 0xed, 0xf0, 0xff, 0xe6, 0xf0, 0xf0, 0xff, 0xe7, 0xf0, 0xf2, 0xff, 0xe6, 0xf0, 0xf2, 0xff, 0xe7, 0xf1, 0xf3, 0xff, 0xe5, 0xef, 0xf1, 0xff, 0xe6, 0xf1, 0xef, 0xff, 0xe8, 0xf5, 0xf4, 0xff, 0xe5, 0xf3, 0xf5, 0xff, 0xe8, 0xf4, 0xf4, 0xff, 0xd6, 0xdf, 0xe0, 0xff, 0xad, 0xb1, 0xbc, 0xff, 0x7e, 0x7b, 0x8f, 0xff, 0x70, 0x6a, 0x7b, 0xff, 0x87, 0x82, 0x89, 0xff, 0xa9, 0xa6, 0xa7, 0xff, 0xbf, 0xbd, 0xbd, 0xff, 0xbd, 0xba, 0xba, 0xff, 0xad, 0xaa, 0xab, 0xff, 0xa7, 0xa5, 0xa5, 0xff, 0xc7, 0xc6, 0xc1, 0xff, 0xc1, 0xc1, 0xbd, 0xff, 0xa3, 0xa0, 0xa1, 0xff, 0x86, 0x7c, 0x84, 0xff, 0x63, 0x52, 0x5a, 0xff, 0x56, 0x47, 0x4b, 0xff, 0x68, 0x5f, 0x60, 0xff, 0x68, 0x5e, 0x5f, 0xff, 0x4b, 0x3d, 0x3e, 0xff, 0x41, 0x33, 0x33, 0xff, 0x4c, 0x38, 0x38, 0xff, 0x62, 0x4d, 0x4b, 0xff, 0x9a, 0x89, 0x82, 0xff, 0x6b, 0x56, 0x4c, 0xff, 0x75, 0x69, 0x59, 0xff, 0xa6, 0x93, 0x7f, 0xff, 0x6a, 0x57, 0x4a, 0xff, 0x72, 0x5f, 0x59, 0xff, 0x89, 0x70, 0x5f, 0xff, 0xc3, 0xc7, 0xb7, 0xff, 0xa4, 0x9a, 0x8b, 0xff, 0x7b, 0x69, 0x58, 0xff, 0x96, 0x87, 0x7f, 0xff, 0x9f, 0x92, 0x89, 0xff, 0x61, 0x4c, 0x49, 0xff, 0x32, 0x18, 0x1a, 0xff, 0x43, 0x2c, 0x30, 0xff, 0x59, 0x46, 0x49, 0xff, 0x4a, 0x3a, 0x3d, 0xff, 0x4f, 0x3e, 0x42, 0xff, 0x88, 0x78, 0x6e, 0xff, 0x81, 0x6f, 0x64, 0xff, 0x5f, 0x4a, 0x45, 0xff, 0x72, 0x5f, 0x56, 0xff, 0x45, 0x30, 0x2e, 0xff, 0x40, 0x26, 0x26, 0xff, 0x49, 0x30, 0x30, 0xff, 0x38, 0x20, 0x1e, 0xff, 0x45, 0x2e, 0x2b, 0xff, 0x55, 0x3f, 0x3a, 0xff, 0x43, 0x2a, 0x26, 0xff, 0x46, 0x2e, 0x29, 0xff, 0x4c, 0x36, 0x32, 0xff, 0x40, 0x2b, 0x29, 0xff, 0x53, 0x3f, 0x3d, 0xff, 0x36, 0x1f, 0x1d, 0xff, 0x49, 0x35, 0x30, 0xff, 0x69, 0x5a, 0x51, 0xff, 0x37, 0x24, 0x1f, 0xff, 0x4b, 0x36, 0x3c, 0xff, 0x62, 0x4a, 0x4a, 0xff, 0x87, 0x74, 0x66, 0xff, 0xa5, 0x9d, 0x8c, 0xff, 0x9d, 0x96, 0x8f, 0xff, 0x8e, 0x8a, 0x88, 0xff, 0x9d, 0x9e, 0x95, 0xff, 0xd1, 0xcf, 0xc8, 0xff, 0xfb, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xee, 0xea, 0xff, 0xa5, 0x96, 0x7d, 0xff, 0x73, 0x5c, 0x36, 0xff, 0x95, 0x7d, 0x59, 0xff, 0x80, 0x6b, 0x46, 0xff, 0x7e, 0x64, 0x3f, 0xff, 0x85, 0x6d, 0x4b, 0xff, 0xa3, 0x95, 0x73, 0xff, 0x84, 0x6d, 0x43, 0xff, 0x7c, 0x5b, 0x32, 0xff, 0x8b, 0x6f, 0x41, 0xff, 0x84, 0x6c, 0x39, 0xff, 0xbd, 0xb3, 0x97, 0xff, 0xe2, 0xe6, 0xd0, 0xff, 0xd6, 0xd9, 0xc9, 0xff, 0xe3, 0xee, 0xed, 0xff, 0xdb, 0xe9, 0xee, 0xff, 0xe0, 0xec, 0xf0, 0xff, 0xe3, 0xf0, 0xf2, 0xff, 0xe0, 0xed, 0xf1, 0xff, 0xe1, 0xec, 0xf1, 0xff, 0xe4, 0xf0, 0xf2, 0xff, 0xe4, 0xef, 0xf3, 0xff, 0xe7, 0xef, 0xf2, 0xff, 0xea, 0xf4, 0xf3, 0xff, 0xe4, 0xf1, 0xf3, 0xff, 0xe1, 0xee, 0xf1, 0xff, 0xe4, 0xf0, 0xf3, 0xff, 0xe6, 0xf2, 0xf4, 0xff, 0xe6, 0xf1, 0xf3, 0xff, 0xdd, 0xe9, 0xed, 0xff, 0xe0, 0xed, 0xf2, 0xff, 0xe2, 0xed, 0xf1, 0xff, 0xd8, 0xdd, 0xde, 0xff, 0xad, 0xad, 0xad, 0xff, 0x9c, 0x98, 0x98, 0xff, 0x9d, 0x99, 0x99, 0xff, 0x8b, 0x84, 0x88, 0xff, 0x73, 0x66, 0x6b, 0xff, 0x59, 0x4b, 0x4d, 0xff, 0x69, 0x5c, 0x5d, 0xff, 0x86, 0x7c, 0x7d, 0xff, 0x83, 0x7a, 0x7e, 0xff, 0x86, 0x7d, 0x85, 0xff, 0x5b, 0x4e, 0x58, 0xff, 0x44, 0x36, 0x3c, 0xff, 0x34, 0x23, 0x25, 0xff, 0x36, 0x21, 0x20, 0xff, 0x40, 0x29, 0x24, 0xff, 0x40, 0x2b, 0x23, 0xff, 0x6a, 0x59, 0x52, 0xff, 0x97, 0x88, 0x7f, 0xff, 0x7f, 0x70, 0x68, 0xff, 0x59, 0x44, 0x40, 0xff, 0x3e, 0x25, 0x23, 0xff, 0x63, 0x4f, 0x47, 0xff, 0x92, 0x7b, 0x6d, 0xff, 0x96, 0x89, 0x78, 0xff, 0x7f, 0x6e, 0x60, 0xff, 0x7c, 0x68, 0x5e, 0xff, 0x66, 0x51, 0x48, 0xff, 0x73, 0x58, 0x43, 0xff, 0xa7, 0x9a, 0x89, 0xff, 0xbe, 0xbd, 0xb0, 0xff, 0x73, 0x5e, 0x53, 0xff, 0x7b, 0x67, 0x5f, 0xff, 0x93, 0x86, 0x7a, 0xff, 0x81, 0x6c, 0x67, 0xff, 0x41, 0x2a, 0x2b, 0xff, 0x1a, 0x03, 0x07, 0xff, 0x52, 0x3c, 0x3f, 0xff, 0x5f, 0x4a, 0x4d, 0xff, 0x38, 0x26, 0x28, 0xff, 0x63, 0x4f, 0x4a, 0xff, 0x6d, 0x58, 0x53, 0xff, 0x56, 0x45, 0x3b, 0xff, 0x73, 0x62, 0x55, 0xff, 0x40, 0x2a, 0x2a, 0xff, 0x33, 0x1c, 0x1d, 0xff, 0x3c, 0x22, 0x23, 0xff, 0x3f, 0x28, 0x26, 0xff, 0x2c, 0x18, 0x17, 0xff, 0x40, 0x2c, 0x2b, 0xff, 0x5a, 0x43, 0x3d, 0xff, 0x53, 0x3a, 0x34, 0xff, 0x44, 0x2e, 0x2a, 0xff, 0x3e, 0x2a, 0x28, 0xff, 0x4b, 0x36, 0x31, 0xff, 0x5b, 0x40, 0x3a, 0xff, 0x39, 0x1e, 0x1b, 0xff, 0x43, 0x31, 0x29, 0xff, 0x54, 0x3f, 0x37, 0xff, 0x36, 0x20, 0x22, 0xff, 0x50, 0x39, 0x38, 0xff, 0x72, 0x5d, 0x56, 0xff, 0x9b, 0x8e, 0x83, 0xff, 0x84, 0x79, 0x72, 0xff, 0x80, 0x72, 0x73, 0xff, 0x8e, 0x85, 0x80, 0xff, 0xad, 0xaa, 0x9d, 0xff, 0xd1, 0xce, 0xc6, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf1, 0xed, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xc7, 0xf6, 0xed, 0xe7, 0x10, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf2, 0xf0, 0xff, 0xb3, 0xa5, 0x8e, 0xff, 0x87, 0x71, 0x4d, 0xff, 0x66, 0x4e, 0x2c, 0xff, 0x95, 0x7e, 0x58, 0xff, 0x8b, 0x74, 0x4b, 0xff, 0x71, 0x59, 0x30, 0xff, 0xc2, 0xba, 0x89, 0xff, 0xc7, 0xc6, 0x9c, 0xff, 0x89, 0x70, 0x49, 0xff, 0x73, 0x4f, 0x27, 0xff, 0x94, 0x7a, 0x4b, 0xff, 0xa8, 0x97, 0x6c, 0xff, 0xc4, 0xc4, 0xa6, 0xff, 0xd7, 0xd8, 0xba, 0xff, 0xd8, 0xdb, 0xc4, 0xff, 0xe4, 0xf3, 0xf0, 0xff, 0xda, 0xea, 0xee, 0xff, 0xe2, 0xed, 0xf0, 0xff, 0xe8, 0xf4, 0xf7, 0xff, 0xe1, 0xec, 0xf0, 0xff, 0xe2, 0xee, 0xf1, 0xff, 0xe5, 0xf1, 0xf4, 0xff, 0xe3, 0xef, 0xf1, 0xff, 0xe4, 0xef, 0xf1, 0xff, 0xe6, 0xf1, 0xf2, 0xff, 0xe4, 0xf0, 0xf2, 0xff, 0xe8, 0xf4, 0xf5, 0xff, 0xe7, 0xf3, 0xf4, 0xff, 0xe8, 0xf5, 0xf6, 0xff, 0xe7, 0xf0, 0xf3, 0xff, 0xd6, 0xe2, 0xec, 0xff, 0xc9, 0xdb, 0xec, 0xff, 0xbd, 0xc8, 0xd5, 0xff, 0xa8, 0xaa, 0xb0, 0xff, 0x99, 0x97, 0x97, 0xff, 0xa7, 0xa2, 0x9f, 0xff, 0x8e, 0x87, 0x86, 0xff, 0x81, 0x77, 0x77, 0xff, 0x7b, 0x6b, 0x6b, 0xff, 0x7c, 0x69, 0x65, 0xff, 0x79, 0x67, 0x62, 0xff, 0x6c, 0x57, 0x54, 0xff, 0x48, 0x2f, 0x2e, 0xff, 0x3a, 0x23, 0x23, 0xff, 0x41, 0x29, 0x2d, 0xff, 0x4b, 0x36, 0x34, 0xff, 0x56, 0x45, 0x40, 0xff, 0x6f, 0x59, 0x53, 0xff, 0x92, 0x7b, 0x6f, 0xff, 0x8f, 0x7d, 0x70, 0xff, 0x8a, 0x7c, 0x72, 0xff, 0x82, 0x71, 0x68, 0xff, 0x85, 0x71, 0x66, 0xff, 0x88, 0x72, 0x67, 0xff, 0x75, 0x5f, 0x59, 0xff, 0x5a, 0x42, 0x38, 0xff, 0x3a, 0x20, 0x15, 0xff, 0x9a, 0x8b, 0x80, 0xff, 0x83, 0x74, 0x6a, 0xff, 0x69, 0x57, 0x4a, 0xff, 0x33, 0x1c, 0x1b, 0xff, 0x62, 0x4b, 0x3d, 0xff, 0xb5, 0x9e, 0x87, 0xff, 0xc4, 0xbf, 0xad, 0xff, 0x86, 0x78, 0x70, 0xff, 0x5c, 0x43, 0x3e, 0xff, 0x6e, 0x56, 0x53, 0xff, 0x65, 0x4f, 0x4c, 0xff, 0x81, 0x6f, 0x6a, 0xff, 0x35, 0x22, 0x24, 0xff, 0x3c, 0x28, 0x25, 0xff, 0x60, 0x49, 0x4a, 0xff, 0x42, 0x32, 0x32, 0xff, 0x4b, 0x39, 0x35, 0xff, 0x67, 0x53, 0x50, 0xff, 0x50, 0x3d, 0x37, 0xff, 0x5a, 0x4a, 0x3e, 0xff, 0x4b, 0x39, 0x35, 0xff, 0x2c, 0x19, 0x1a, 0xff, 0x27, 0x13, 0x15, 0xff, 0x41, 0x2c, 0x2b, 0xff, 0x40, 0x2b, 0x29, 0xff, 0x2e, 0x19, 0x18, 0xff, 0x4a, 0x33, 0x2e, 0xff, 0x5b, 0x42, 0x3b, 0xff, 0x47, 0x31, 0x2b, 0xff, 0x38, 0x24, 0x21, 0xff, 0x3e, 0x28, 0x26, 0xff, 0x52, 0x39, 0x34, 0xff, 0x41, 0x29, 0x27, 0xff, 0x27, 0x13, 0x12, 0xff, 0x3e, 0x28, 0x27, 0xff, 0x45, 0x31, 0x2d, 0xff, 0x3d, 0x28, 0x21, 0xff, 0x4e, 0x39, 0x37, 0xff, 0x8b, 0x7b, 0x79, 0xff, 0x78, 0x6b, 0x63, 0xff, 0x51, 0x41, 0x39, 0xff, 0x75, 0x61, 0x5d, 0xff, 0x6f, 0x5f, 0x58, 0xff, 0x9b, 0x91, 0x84, 0xff, 0xd1, 0xce, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf6, 0xff, 0xa4, 0x96, 0x85, 0xff, 0x83, 0x6f, 0x4b, 0xff, 0x9b, 0x88, 0x5f, 0xff, 0x6b, 0x53, 0x30, 0xff, 0x71, 0x57, 0x37, 0xff, 0xa2, 0x8f, 0x65, 0xff, 0x9d, 0x8a, 0x5b, 0xff, 0xa7, 0x8e, 0x62, 0xff, 0xb6, 0xa9, 0x7b, 0xff, 0x8a, 0x77, 0x52, 0xff, 0x8d, 0x77, 0x52, 0xff, 0xc9, 0xbc, 0x8b, 0xff, 0xde, 0xde, 0xbc, 0xff, 0xe0, 0xe3, 0xc5, 0xff, 0xcb, 0xc7, 0xa8, 0xff, 0xd8, 0xdc, 0xc9, 0xff, 0xe5, 0xf1, 0xef, 0xff, 0xe0, 0xed, 0xf1, 0xff, 0xe3, 0xef, 0xf2, 0xff, 0xdc, 0xe9, 0xee, 0xff, 0xde, 0xea, 0xef, 0xff, 0xe5, 0xf1, 0xf3, 0xff, 0xe4, 0xef, 0xf2, 0xff, 0xe3, 0xef, 0xf1, 0xff, 0xe5, 0xf1, 0xf2, 0xff, 0xe5, 0xf1, 0xf2, 0xff, 0xe7, 0xf1, 0xf4, 0xff, 0xe8, 0xf5, 0xf4, 0xff, 0xe8, 0xf3, 0xf3, 0xff, 0xe8, 0xf4, 0xf6, 0xff, 0xde, 0xed, 0xf4, 0xff, 0xc5, 0xd2, 0xe0, 0xff, 0xa8, 0xac, 0xc0, 0xff, 0x96, 0x94, 0xa7, 0xff, 0x82, 0x7a, 0x84, 0xff, 0x6d, 0x5c, 0x5e, 0xff, 0x55, 0x41, 0x44, 0xff, 0x6c, 0x59, 0x5c, 0xff, 0x76, 0x62, 0x60, 0xff, 0x8d, 0x78, 0x72, 0xff, 0x98, 0x84, 0x7b, 0xff, 0x9c, 0x91, 0x86, 0xff, 0xae, 0x9f, 0x96, 0xff, 0x8e, 0x7e, 0x77, 0xff, 0x8e, 0x80, 0x76, 0xff, 0x7c, 0x67, 0x5c, 0xff, 0x85, 0x76, 0x68, 0xff, 0xae, 0xa2, 0x91, 0xff, 0xa1, 0x91, 0x7d, 0xff, 0x8c, 0x7b, 0x6b, 0xff, 0x87, 0x74, 0x69, 0xff, 0x88, 0x74, 0x6e, 0xff, 0x63, 0x4c, 0x41, 0xff, 0x56, 0x3c, 0x31, 0xff, 0x60, 0x45, 0x42, 0xff, 0x78, 0x64, 0x56, 0xff, 0x6e, 0x53, 0x47, 0xff, 0x47, 0x29, 0x25, 0xff, 0x3a, 0x25, 0x23, 0xff, 0x8a, 0x79, 0x6e, 0xff, 0x7f, 0x6b, 0x5f, 0xff, 0x65, 0x51, 0x4d, 0xff, 0x38, 0x21, 0x1c, 0xff, 0x86, 0x6b, 0x57, 0xff, 0x94, 0x81, 0x6b, 0xff, 0xa7, 0xa1, 0x97, 0xff, 0x6f, 0x5e, 0x56, 0xff, 0x6e, 0x55, 0x51, 0xff, 0x50, 0x39, 0x3a, 0xff, 0x65, 0x52, 0x49, 0xff, 0x66, 0x56, 0x4f, 0xff, 0x2c, 0x17, 0x19, 0xff, 0x41, 0x2b, 0x2e, 0xff, 0x66, 0x55, 0x56, 0xff, 0x54, 0x44, 0x41, 0xff, 0x5e, 0x4d, 0x48, 0xff, 0x4a, 0x35, 0x34, 0xff, 0x44, 0x30, 0x29, 0xff, 0x46, 0x33, 0x2d, 0xff, 0x2c, 0x17, 0x19, 0xff, 0x2b, 0x16, 0x1a, 0xff, 0x30, 0x1a, 0x1b, 0xff, 0x31, 0x1c, 0x19, 0xff, 0x42, 0x2e, 0x2d, 0xff, 0x42, 0x2e, 0x29, 0xff, 0x47, 0x30, 0x2b, 0xff, 0x57, 0x42, 0x3b, 0xff, 0x3e, 0x29, 0x27, 0xff, 0x2f, 0x18, 0x1c, 0xff, 0x3c, 0x26, 0x25, 0xff, 0x30, 0x1c, 0x1d, 0xff, 0x34, 0x20, 0x20, 0xff, 0x2f, 0x1d, 0x19, 0xff, 0x30, 0x1b, 0x1a, 0xff, 0x38, 0x21, 0x21, 0xff, 0x5c, 0x47, 0x48, 0xff, 0x64, 0x52, 0x52, 0xff, 0x73, 0x60, 0x52, 0xff, 0x74, 0x63, 0x51, 0xff, 0x65, 0x51, 0x4b, 0xff, 0x52, 0x3d, 0x34, 0xff, 0x6f, 0x5c, 0x4d, 0xff, 0x8c, 0x79, 0x72, 0xff, 0xc9, 0xc4, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xfc, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xb8, 0xac, 0x9f, 0xff, 0x6e, 0x55, 0x3d, 0xff, 0x62, 0x4c, 0x2c, 0xff, 0x93, 0x7e, 0x50, 0xff, 0x99, 0x84, 0x5a, 0xff, 0x6e, 0x53, 0x2f, 0xff, 0xa0, 0x8c, 0x61, 0xff, 0xa7, 0x93, 0x66, 0xff, 0x65, 0x3c, 0x16, 0xff, 0x76, 0x5a, 0x2d, 0xff, 0xbc, 0xb2, 0x84, 0xff, 0xcd, 0xc6, 0xa1, 0xff, 0xc2, 0xbd, 0x95, 0xff, 0xd3, 0xd3, 0xb5, 0xff, 0xcf, 0xcd, 0xb2, 0xff, 0xc6, 0xc6, 0xad, 0xff, 0xe3, 0xec, 0xe3, 0xff, 0xdf, 0xe9, 0xe7, 0xff, 0xe6, 0xf0, 0xf3, 0xff, 0xda, 0xe8, 0xef, 0xff, 0xd6, 0xe4, 0xeb, 0xff, 0xdf, 0xec, 0xf1, 0xff, 0xe5, 0xf0, 0xf3, 0xff, 0xe7, 0xf0, 0xf3, 0xff, 0xe7, 0xef, 0xf3, 0xff, 0xe7, 0xf1, 0xf1, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xe9, 0xf4, 0xf4, 0xff, 0xe8, 0xf5, 0xf4, 0xff, 0xe9, 0xf5, 0xf6, 0xff, 0xd8, 0xe4, 0xe8, 0xff, 0xab, 0xaf, 0xc0, 0xff, 0x78, 0x7b, 0x91, 0xff, 0x6f, 0x72, 0x86, 0xff, 0x97, 0x95, 0xa6, 0xff, 0x61, 0x53, 0x5b, 0xff, 0x46, 0x30, 0x30, 0xff, 0x6e, 0x58, 0x57, 0xff, 0x8a, 0x77, 0x7a, 0xff, 0x91, 0x80, 0x7d, 0xff, 0x75, 0x64, 0x5e, 0xff, 0x8c, 0x77, 0x71, 0xff, 0xa3, 0x94, 0x8b, 0xff, 0x8e, 0x82, 0x78, 0xff, 0xc3, 0xbd, 0xb6, 0xff, 0xcf, 0xc8, 0xc2, 0xff, 0xad, 0x9d, 0x95, 0xff, 0x88, 0x75, 0x6a, 0xff, 0x95, 0x87, 0x78, 0xff, 0xaa, 0xa2, 0x93, 0xff, 0xc6, 0xbe, 0xab, 0xff, 0x95, 0x81, 0x74, 0xff, 0x63, 0x47, 0x39, 0xff, 0x60, 0x42, 0x37, 0xff, 0x45, 0x28, 0x23, 0xff, 0x3c, 0x23, 0x21, 0xff, 0x36, 0x20, 0x1d, 0xff, 0x4b, 0x2f, 0x2b, 0xff, 0x61, 0x42, 0x41, 0xff, 0x3b, 0x26, 0x1f, 0xff, 0x60, 0x4d, 0x3d, 0xff, 0x70, 0x5a, 0x4e, 0xff, 0xa3, 0x90, 0x7f, 0xff, 0x45, 0x2a, 0x27, 0xff, 0x47, 0x29, 0x21, 0xff, 0x63, 0x48, 0x37, 0xff, 0x7e, 0x6b, 0x66, 0xff, 0x8a, 0x7d, 0x76, 0xff, 0x5e, 0x4a, 0x3f, 0xff, 0x6d, 0x53, 0x4f, 0xff, 0x53, 0x3a, 0x39, 0xff, 0x56, 0x41, 0x39, 0xff, 0x34, 0x21, 0x1f, 0xff, 0x1c, 0x05, 0x0f, 0xff, 0x3a, 0x26, 0x2b, 0xff, 0x5d, 0x4a, 0x4b, 0xff, 0x59, 0x48, 0x46, 0xff, 0x6a, 0x5b, 0x56, 0xff, 0x4e, 0x3d, 0x39, 0xff, 0x29, 0x15, 0x13, 0xff, 0x40, 0x2b, 0x2c, 0xff, 0x34, 0x1f, 0x23, 0xff, 0x2d, 0x19, 0x1a, 0xff, 0x2d, 0x19, 0x18, 0xff, 0x38, 0x23, 0x25, 0xff, 0x3e, 0x29, 0x28, 0xff, 0x36, 0x20, 0x1e, 0xff, 0x43, 0x2e, 0x2d, 0xff, 0x30, 0x1b, 0x1b, 0xff, 0x2f, 0x18, 0x1d, 0xff, 0x3b, 0x25, 0x25, 0xff, 0x2c, 0x19, 0x17, 0xff, 0x26, 0x12, 0x11, 0xff, 0x26, 0x13, 0x11, 0xff, 0x2b, 0x16, 0x14, 0xff, 0x33, 0x1f, 0x1c, 0xff, 0x69, 0x57, 0x56, 0xff, 0x4f, 0x3c, 0x3c, 0xff, 0x40, 0x25, 0x1d, 0xff, 0x54, 0x3b, 0x31, 0xff, 0x92, 0x83, 0x78, 0xff, 0x84, 0x78, 0x66, 0xff, 0x5f, 0x47, 0x3b, 0xff, 0x55, 0x36, 0x30, 0xff, 0x7c, 0x6b, 0x5f, 0xff, 0xd8, 0xd1, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xc1, 0xb8, 0xff, 0x71, 0x5b, 0x43, 0xff, 0x68, 0x4f, 0x35, 0xff, 0x62, 0x48, 0x2e, 0xff, 0x65, 0x4b, 0x2b, 0xff, 0x99, 0x83, 0x59, 0xff, 0xb8, 0xa4, 0x75, 0xff, 0x8f, 0x78, 0x48, 0xff, 0x82, 0x6b, 0x40, 0xff, 0x91, 0x84, 0x5f, 0xff, 0xaf, 0x9e, 0x72, 0xff, 0xcd, 0xc0, 0x8e, 0xff, 0xe4, 0xe3, 0xbe, 0xff, 0xca, 0xc7, 0xa8, 0xff, 0xc7, 0xc1, 0xa2, 0xff, 0xcb, 0xc4, 0xa5, 0xff, 0xca, 0xc8, 0xa9, 0xff, 0xdb, 0xe0, 0xca, 0xff, 0xe7, 0xf3, 0xf0, 0xff, 0xe2, 0xef, 0xf5, 0xff, 0xda, 0xe8, 0xef, 0xff, 0xdb, 0xe9, 0xf0, 0xff, 0xe2, 0xef, 0xf2, 0xff, 0xe8, 0xf2, 0xf3, 0xff, 0xea, 0xf2, 0xf6, 0xff, 0xe7, 0xf0, 0xf1, 0xff, 0xe7, 0xf2, 0xf2, 0xff, 0xea, 0xf3, 0xf3, 0xff, 0xe8, 0xf3, 0xf2, 0xff, 0xe6, 0xf3, 0xf2, 0xff, 0xea, 0xf6, 0xf9, 0xff, 0xcb, 0xd6, 0xdd, 0xff, 0x97, 0x95, 0xa0, 0xff, 0x78, 0x75, 0x91, 0xff, 0x79, 0x7f, 0xa6, 0xff, 0x88, 0x87, 0x9b, 0xff, 0x61, 0x58, 0x5c, 0xff, 0x71, 0x63, 0x68, 0xff, 0x7a, 0x69, 0x6c, 0xff, 0x45, 0x32, 0x36, 0xff, 0x5c, 0x4c, 0x47, 0xff, 0x6d, 0x63, 0x5b, 0xff, 0x78, 0x62, 0x5e, 0xff, 0x9b, 0x87, 0x82, 0xff, 0x8f, 0x7b, 0x72, 0xff, 0x75, 0x61, 0x56, 0xff, 0x7b, 0x6d, 0x67, 0xff, 0x8d, 0x7c, 0x78, 0xff, 0xab, 0x95, 0x90, 0xff, 0x81, 0x70, 0x68, 0xff, 0x59, 0x4b, 0x44, 0xff, 0x6e, 0x5e, 0x58, 0xff, 0x8d, 0x7c, 0x6d, 0xff, 0x82, 0x6c, 0x5d, 0xff, 0x7e, 0x63, 0x53, 0xff, 0x46, 0x2b, 0x24, 0xff, 0x2a, 0x11, 0x14, 0xff, 0x3b, 0x27, 0x25, 0xff, 0x52, 0x3b, 0x33, 0xff, 0x58, 0x3e, 0x34, 0xff, 0x49, 0x37, 0x2f, 0xff, 0x2f, 0x17, 0x1a, 0xff, 0x4b, 0x2f, 0x2c, 0xff, 0x67, 0x50, 0x47, 0xff, 0x7d, 0x68, 0x60, 0xff, 0x63, 0x4b, 0x45, 0xff, 0x63, 0x46, 0x3d, 0xff, 0x65, 0x4d, 0x47, 0xff, 0x86, 0x75, 0x71, 0xff, 0x66, 0x54, 0x4b, 0xff, 0x61, 0x4f, 0x45, 0xff, 0x59, 0x41, 0x3f, 0xff, 0x49, 0x2f, 0x2d, 0xff, 0x66, 0x50, 0x48, 0xff, 0x30, 0x1a, 0x1c, 0xff, 0x22, 0x0b, 0x11, 0xff, 0x38, 0x23, 0x27, 0xff, 0x59, 0x4b, 0x4b, 0xff, 0x7a, 0x6f, 0x6c, 0xff, 0x66, 0x56, 0x55, 0xff, 0x3a, 0x26, 0x24, 0xff, 0x31, 0x1b, 0x19, 0xff, 0x31, 0x1d, 0x1e, 0xff, 0x20, 0x0d, 0x0f, 0xff, 0x31, 0x1e, 0x20, 0xff, 0x20, 0x0e, 0x12, 0xff, 0x2b, 0x16, 0x18, 0xff, 0x36, 0x20, 0x21, 0xff, 0x3c, 0x27, 0x26, 0xff, 0x3b, 0x28, 0x25, 0xff, 0x2f, 0x19, 0x1b, 0xff, 0x2d, 0x18, 0x17, 0xff, 0x38, 0x24, 0x22, 0xff, 0x30, 0x1b, 0x1a, 0xff, 0x2f, 0x19, 0x1b, 0xff, 0x38, 0x23, 0x20, 0xff, 0x3a, 0x27, 0x1f, 0xff, 0x65, 0x54, 0x51, 0xff, 0x47, 0x36, 0x38, 0xff, 0x35, 0x21, 0x1f, 0xff, 0x66, 0x50, 0x4c, 0xff, 0x7c, 0x6c, 0x5c, 0xff, 0x82, 0x6f, 0x58, 0xff, 0x64, 0x4d, 0x43, 0xff, 0x3d, 0x26, 0x22, 0xff, 0x61, 0x4a, 0x41, 0xff, 0x85, 0x72, 0x6a, 0xff, 0xe1, 0xdc, 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xbf, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xd6, 0xd1, 0xff, 0x7b, 0x64, 0x50, 0xff, 0x61, 0x49, 0x2e, 0xff, 0x64, 0x4a, 0x31, 0xff, 0x68, 0x4b, 0x33, 0xff, 0x65, 0x4a, 0x31, 0xff, 0x70, 0x57, 0x33, 0xff, 0xa4, 0x90, 0x61, 0xff, 0xa6, 0x92, 0x5e, 0xff, 0xa4, 0x91, 0x5f, 0xff, 0xce, 0xc2, 0x9f, 0xff, 0xc1, 0xb1, 0x7e, 0xff, 0xbb, 0xa8, 0x71, 0xff, 0xbb, 0xab, 0x89, 0xff, 0xb7, 0xb1, 0x8b, 0xff, 0xbc, 0xb6, 0x90, 0xff, 0xe2, 0xdc, 0xc6, 0xff, 0xe0, 0xe5, 0xcf, 0xff, 0xd8, 0xdd, 0xce, 0xff, 0xea, 0xf5, 0xf8, 0xff, 0xe3, 0xef, 0xf5, 0xff, 0xe2, 0xef, 0xf2, 0xff, 0xe4, 0xf0, 0xf4, 0xff, 0xe8, 0xf2, 0xf4, 0xff, 0xe8, 0xf1, 0xf1, 0xff, 0xe7, 0xf2, 0xf2, 0xff, 0xe6, 0xf2, 0xf1, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xe9, 0xf3, 0xf2, 0xff, 0xe7, 0xf3, 0xf4, 0xff, 0xe5, 0xf3, 0xf3, 0xff, 0xe4, 0xf0, 0xf4, 0xff, 0xc6, 0xd0, 0xda, 0xff, 0x95, 0x9a, 0xb0, 0xff, 0x89, 0x87, 0xa0, 0xff, 0x82, 0x79, 0x8d, 0xff, 0x61, 0x55, 0x65, 0xff, 0x79, 0x6e, 0x7b, 0xff, 0x8d, 0x7f, 0x84, 0xff, 0x5c, 0x44, 0x45, 0xff, 0x54, 0x3a, 0x3b, 0xff, 0x56, 0x40, 0x3c, 0xff, 0x5d, 0x49, 0x46, 0xff, 0x54, 0x3b, 0x37, 0xff, 0x52, 0x3d, 0x36, 0xff, 0x8b, 0x78, 0x6d, 0xff, 0x6f, 0x54, 0x45, 0xff, 0x56, 0x40, 0x34, 0xff, 0x65, 0x4e, 0x46, 0xff, 0x5e, 0x45, 0x3c, 0xff, 0x7d, 0x68, 0x5e, 0xff, 0x76, 0x5c, 0x55, 0xff, 0x54, 0x36, 0x31, 0xff, 0x49, 0x2e, 0x28, 0xff, 0x63, 0x4c, 0x43, 0xff, 0x6a, 0x50, 0x43, 0xff, 0x5f, 0x44, 0x3c, 0xff, 0x3d, 0x26, 0x23, 0xff, 0x3c, 0x29, 0x25, 0xff, 0x28, 0x11, 0x13, 0xff, 0x54, 0x3e, 0x37, 0xff, 0x68, 0x56, 0x4e, 0xff, 0x3a, 0x25, 0x25, 0xff, 0x39, 0x1e, 0x1e, 0xff, 0x35, 0x1c, 0x1b, 0xff, 0x4b, 0x37, 0x30, 0xff, 0x5e, 0x4a, 0x43, 0xff, 0x73, 0x5c, 0x54, 0xff, 0x49, 0x34, 0x2d, 0xff, 0x5f, 0x4d, 0x4c, 0xff, 0x92, 0x87, 0x80, 0xff, 0x48, 0x3e, 0x37, 0xff, 0x54, 0x3f, 0x3a, 0xff, 0x41, 0x27, 0x25, 0xff, 0x4a, 0x31, 0x30, 0xff, 0x5e, 0x4a, 0x40, 0xff, 0x2d, 0x17, 0x14, 0xff, 0x17, 0x01, 0x06, 0xff, 0x40, 0x2e, 0x33, 0xff, 0x79, 0x6e, 0x6b, 0xff, 0x62, 0x56, 0x52, 0xff, 0x42, 0x30, 0x2c, 0xff, 0x47, 0x2f, 0x2b, 0xff, 0x3d, 0x29, 0x26, 0xff, 0x2e, 0x1b, 0x1a, 0xff, 0x1f, 0x0c, 0x0d, 0xff, 0x24, 0x11, 0x13, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x37, 0x21, 0x24, 0xff, 0x38, 0x23, 0x23, 0xff, 0x38, 0x25, 0x22, 0xff, 0x34, 0x1e, 0x20, 0xff, 0x34, 0x1f, 0x1d, 0xff, 0x30, 0x1c, 0x1a, 0xff, 0x27, 0x13, 0x15, 0xff, 0x2e, 0x1b, 0x1b, 0xff, 0x2d, 0x19, 0x17, 0xff, 0x32, 0x1b, 0x1c, 0xff, 0x5d, 0x48, 0x48, 0xff, 0x42, 0x31, 0x2f, 0xff, 0x38, 0x29, 0x22, 0xff, 0x6c, 0x5f, 0x56, 0xff, 0x6a, 0x59, 0x49, 0xff, 0x91, 0x7a, 0x61, 0xff, 0x6a, 0x56, 0x4c, 0xff, 0x57, 0x47, 0x3f, 0xff, 0x5b, 0x48, 0x43, 0xff, 0x40, 0x2e, 0x2a, 0xff, 0x93, 0x84, 0x7d, 0xff, 0xf1, 0xef, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xeb, 0xe9, 0xff, 0x89, 0x77, 0x66, 0xff, 0x5f, 0x43, 0x2d, 0xff, 0x5e, 0x46, 0x2b, 0xff, 0x62, 0x48, 0x2f, 0xff, 0x66, 0x4c, 0x30, 0xff, 0x68, 0x4e, 0x30, 0xff, 0x6b, 0x51, 0x31, 0xff, 0x8b, 0x76, 0x4a, 0xff, 0xb7, 0xa9, 0x7c, 0xff, 0xbe, 0xb6, 0x89, 0xff, 0xae, 0xa2, 0x74, 0xff, 0xab, 0x9c, 0x70, 0xff, 0xc8, 0xc1, 0x9c, 0xff, 0xa1, 0x86, 0x5b, 0xff, 0xb5, 0xab, 0x7f, 0xff, 0xec, 0xf5, 0xde, 0xff, 0xd5, 0xd4, 0xba, 0xff, 0xd7, 0xd8, 0xbb, 0xff, 0xe9, 0xf2, 0xeb, 0xff, 0xe7, 0xf2, 0xf6, 0xff, 0xe5, 0xf2, 0xf3, 0xff, 0xe6, 0xf3, 0xf4, 0xff, 0xea, 0xf3, 0xf6, 0xff, 0xe9, 0xf2, 0xf4, 0xff, 0xeb, 0xf4, 0xf4, 0xff, 0xe9, 0xf4, 0xf4, 0xff, 0xe9, 0xf3, 0xf3, 0xff, 0xe9, 0xee, 0xed, 0xff, 0xdd, 0xe3, 0xe3, 0xff, 0xe6, 0xf0, 0xf0, 0xff, 0xed, 0xf8, 0xf8, 0xff, 0xeb, 0xf6, 0xf8, 0xff, 0xc9, 0xd1, 0xdc, 0xff, 0xb2, 0xbc, 0xd1, 0xff, 0x8c, 0x90, 0xa2, 0xff, 0x70, 0x67, 0x73, 0xff, 0x7b, 0x70, 0x7d, 0xff, 0x78, 0x69, 0x73, 0xff, 0x57, 0x42, 0x42, 0xff, 0x6e, 0x55, 0x4f, 0xff, 0x74, 0x5b, 0x55, 0xff, 0x65, 0x50, 0x4d, 0xff, 0x67, 0x51, 0x4c, 0xff, 0x77, 0x60, 0x56, 0xff, 0x69, 0x50, 0x46, 0xff, 0x46, 0x2e, 0x29, 0xff, 0x60, 0x48, 0x43, 0xff, 0x5a, 0x3e, 0x38, 0xff, 0x54, 0x38, 0x34, 0xff, 0x42, 0x27, 0x26, 0xff, 0x3c, 0x23, 0x23, 0xff, 0x4f, 0x36, 0x35, 0xff, 0x3d, 0x22, 0x20, 0xff, 0x4b, 0x31, 0x2f, 0xff, 0x3f, 0x25, 0x22, 0xff, 0x4b, 0x30, 0x2b, 0xff, 0x54, 0x39, 0x32, 0xff, 0x47, 0x2e, 0x28, 0xff, 0x39, 0x23, 0x22, 0xff, 0x35, 0x20, 0x21, 0xff, 0x21, 0x0a, 0x10, 0xff, 0x4a, 0x36, 0x34, 0xff, 0x56, 0x44, 0x3c, 0xff, 0x3d, 0x27, 0x23, 0xff, 0x42, 0x2c, 0x2a, 0xff, 0x30, 0x19, 0x1a, 0xff, 0x40, 0x27, 0x23, 0xff, 0x5c, 0x45, 0x3b, 0xff, 0x6c, 0x56, 0x4f, 0xff, 0x3a, 0x25, 0x24, 0xff, 0x76, 0x68, 0x63, 0xff, 0x7d, 0x72, 0x6a, 0xff, 0x48, 0x34, 0x30, 0xff, 0x50, 0x39, 0x38, 0xff, 0x33, 0x1b, 0x19, 0xff, 0x46, 0x32, 0x29, 0xff, 0x52, 0x3e, 0x37, 0xff, 0x2d, 0x17, 0x1b, 0xff, 0x1d, 0x07, 0x0d, 0xff, 0x61, 0x51, 0x4f, 0xff, 0x88, 0x7e, 0x79, 0xff, 0x5f, 0x50, 0x4b, 0xff, 0x60, 0x49, 0x42, 0xff, 0x4a, 0x33, 0x2c, 0xff, 0x3d, 0x28, 0x22, 0xff, 0x43, 0x2f, 0x2b, 0xff, 0x2d, 0x1a, 0x18, 0xff, 0x32, 0x1e, 0x1f, 0xff, 0x30, 0x1a, 0x1c, 0xff, 0x37, 0x21, 0x22, 0xff, 0x29, 0x16, 0x17, 0xff, 0x27, 0x13, 0x16, 0xff, 0x3c, 0x27, 0x27, 0xff, 0x3d, 0x29, 0x26, 0xff, 0x1f, 0x0b, 0x10, 0xff, 0x27, 0x17, 0x13, 0xff, 0x2e, 0x1b, 0x1b, 0xff, 0x2f, 0x19, 0x1c, 0xff, 0x60, 0x4d, 0x46, 0xff, 0x34, 0x20, 0x1a, 0xff, 0x3e, 0x2c, 0x24, 0xff, 0x66, 0x5a, 0x50, 0xff, 0x65, 0x52, 0x45, 0xff, 0x70, 0x5a, 0x47, 0xff, 0x64, 0x52, 0x47, 0xff, 0x40, 0x2d, 0x22, 0xff, 0x46, 0x32, 0x2c, 0xff, 0x4a, 0x33, 0x32, 0xff, 0x4e, 0x39, 0x2e, 0xff, 0x99, 0x8d, 0x89, 0xff, 0xfb, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xfa, 0xff, 0xa8, 0x9b, 0x8d, 0xff, 0x5e, 0x44, 0x2c, 0xff, 0x5e, 0x43, 0x30, 0xff, 0x61, 0x44, 0x30, 0xff, 0x5d, 0x42, 0x2a, 0xff, 0x59, 0x3f, 0x27, 0xff, 0x67, 0x4b, 0x35, 0xff, 0x84, 0x69, 0x4b, 0xff, 0x8f, 0x7b, 0x52, 0xff, 0xba, 0xa8, 0x7e, 0xff, 0xab, 0x98, 0x68, 0xff, 0xac, 0x97, 0x60, 0xff, 0xa7, 0x92, 0x62, 0xff, 0xbe, 0xb4, 0x89, 0xff, 0xab, 0x8e, 0x52, 0xff, 0xcb, 0xb8, 0x84, 0xff, 0xe7, 0xea, 0xd7, 0xff, 0xdc, 0xdf, 0xcf, 0xff, 0xe0, 0xe3, 0xcd, 0xff, 0xe8, 0xf2, 0xec, 0xff, 0xe8, 0xf3, 0xf7, 0xff, 0xe7, 0xf4, 0xf5, 0xff, 0xe8, 0xf4, 0xf7, 0xff, 0xe9, 0xf2, 0xf5, 0xff, 0xeb, 0xf5, 0xf4, 0xff, 0xeb, 0xf6, 0xf6, 0xff, 0xeb, 0xf4, 0xf6, 0xff, 0xe5, 0xeb, 0xeb, 0xff, 0xd7, 0xde, 0xdb, 0xff, 0xe0, 0xe3, 0xdf, 0xff, 0xbd, 0xb8, 0xb5, 0xff, 0xc3, 0xc0, 0xbe, 0xff, 0xbf, 0xbe, 0xc1, 0xff, 0x94, 0x93, 0x9f, 0xff, 0xa6, 0xa9, 0xb7, 0xff, 0xb3, 0xb2, 0xbc, 0xff, 0x78, 0x6c, 0x77, 0xff, 0x51, 0x40, 0x49, 0xff, 0x44, 0x2b, 0x32, 0xff, 0x48, 0x30, 0x30, 0xff, 0x62, 0x53, 0x4c, 0xff, 0x74, 0x63, 0x5b, 0xff, 0x56, 0x3d, 0x3a, 0xff, 0x55, 0x3a, 0x3b, 0xff, 0x6c, 0x51, 0x4a, 0xff, 0x7c, 0x61, 0x57, 0xff, 0x5f, 0x46, 0x3f, 0xff, 0x51, 0x39, 0x37, 0xff, 0x47, 0x2f, 0x2e, 0xff, 0x36, 0x1f, 0x20, 0xff, 0x2b, 0x14, 0x1a, 0xff, 0x25, 0x10, 0x14, 0xff, 0x29, 0x14, 0x16, 0xff, 0x31, 0x1b, 0x1e, 0xff, 0x34, 0x1e, 0x1f, 0xff, 0x3a, 0x24, 0x25, 0xff, 0x34, 0x1e, 0x20, 0xff, 0x36, 0x1e, 0x1e, 0xff, 0x41, 0x27, 0x24, 0xff, 0x44, 0x2a, 0x27, 0xff, 0x36, 0x21, 0x1f, 0xff, 0x25, 0x0e, 0x13, 0xff, 0x31, 0x1c, 0x1b, 0xff, 0x3f, 0x2b, 0x25, 0xff, 0x2d, 0x17, 0x17, 0xff, 0x4a, 0x36, 0x35, 0xff, 0x51, 0x3c, 0x3c, 0xff, 0x2f, 0x19, 0x16, 0xff, 0x43, 0x2b, 0x28, 0xff, 0x49, 0x34, 0x2f, 0xff, 0x5d, 0x4a, 0x3f, 0xff, 0x5b, 0x48, 0x43, 0xff, 0x78, 0x66, 0x65, 0xff, 0x76, 0x65, 0x62, 0xff, 0x54, 0x40, 0x3d, 0xff, 0x4b, 0x35, 0x31, 0xff, 0x40, 0x29, 0x24, 0xff, 0x47, 0x31, 0x2e, 0xff, 0x48, 0x35, 0x30, 0xff, 0x2b, 0x17, 0x15, 0xff, 0x28, 0x14, 0x19, 0xff, 0x6c, 0x5e, 0x5f, 0xff, 0x7f, 0x72, 0x6e, 0xff, 0x40, 0x2c, 0x26, 0xff, 0x53, 0x3b, 0x35, 0xff, 0x33, 0x1d, 0x17, 0xff, 0x45, 0x34, 0x2c, 0xff, 0x42, 0x30, 0x29, 0xff, 0x27, 0x15, 0x12, 0xff, 0x34, 0x1e, 0x1d, 0xff, 0x3c, 0x26, 0x24, 0xff, 0x33, 0x20, 0x1f, 0xff, 0x2f, 0x1c, 0x1e, 0xff, 0x35, 0x21, 0x20, 0xff, 0x3a, 0x27, 0x22, 0xff, 0x20, 0x0a, 0x0f, 0xff, 0x28, 0x14, 0x15, 0xff, 0x31, 0x1d, 0x1b, 0xff, 0x37, 0x25, 0x1e, 0xff, 0x68, 0x57, 0x4b, 0xff, 0x2a, 0x16, 0x14, 0xff, 0x3b, 0x28, 0x20, 0xff, 0x56, 0x42, 0x34, 0xff, 0x54, 0x3c, 0x34, 0xff, 0x4d, 0x34, 0x2a, 0xff, 0x8d, 0x7c, 0x6a, 0xff, 0x46, 0x33, 0x31, 0xff, 0x38, 0x24, 0x1f, 0xff, 0x48, 0x34, 0x2f, 0xff, 0x4d, 0x38, 0x32, 0xff, 0x55, 0x3e, 0x37, 0xff, 0xc9, 0xc2, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xb4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xc0, 0xb7, 0xff, 0x69, 0x50, 0x3b, 0xff, 0x5a, 0x3e, 0x2c, 0xff, 0x5a, 0x3e, 0x2a, 0xff, 0x65, 0x48, 0x30, 0xff, 0x6b, 0x53, 0x34, 0xff, 0x70, 0x56, 0x39, 0xff, 0x82, 0x67, 0x47, 0xff, 0x96, 0x82, 0x5f, 0xff, 0x66, 0x4e, 0x2b, 0xff, 0x7d, 0x62, 0x32, 0xff, 0xaa, 0x97, 0x61, 0xff, 0xba, 0xa8, 0x7a, 0xff, 0xf2, 0xf4, 0xd0, 0xff, 0xd2, 0xcf, 0xa7, 0xff, 0xc2, 0xb1, 0x87, 0xff, 0xc1, 0xb3, 0x7a, 0xff, 0xc8, 0xba, 0x8d, 0xff, 0xf0, 0xf2, 0xe9, 0xff, 0xe1, 0xeb, 0xde, 0xff, 0xe8, 0xf0, 0xed, 0xff, 0xeb, 0xf4, 0xf8, 0xff, 0xea, 0xf6, 0xf7, 0xff, 0xe8, 0xf5, 0xf8, 0xff, 0xe9, 0xf3, 0xf4, 0xff, 0xed, 0xf6, 0xf6, 0xff, 0xeb, 0xf8, 0xf8, 0xff, 0xe6, 0xf0, 0xed, 0xff, 0xd0, 0xd3, 0xd1, 0xff, 0xe1, 0xed, 0xea, 0xff, 0xe8, 0xea, 0xe5, 0xff, 0x89, 0x76, 0x6f, 0xff, 0x62, 0x50, 0x4d, 0xff, 0x80, 0x71, 0x75, 0xff, 0x6b, 0x5d, 0x67, 0xff, 0x7c, 0x6b, 0x75, 0xff, 0x78, 0x61, 0x6b, 0xff, 0x42, 0x29, 0x30, 0xff, 0x2b, 0x12, 0x13, 0xff, 0x42, 0x23, 0x24, 0xff, 0x42, 0x23, 0x25, 0xff, 0x50, 0x39, 0x36, 0xff, 0x5e, 0x46, 0x44, 0xff, 0x4b, 0x30, 0x30, 0xff, 0x3c, 0x22, 0x20, 0xff, 0x39, 0x20, 0x1a, 0xff, 0x41, 0x27, 0x24, 0xff, 0x46, 0x2d, 0x30, 0xff, 0x41, 0x2c, 0x2c, 0xff, 0x3a, 0x24, 0x21, 0xff, 0x3b, 0x25, 0x23, 0xff, 0x32, 0x1e, 0x1f, 0xff, 0x26, 0x12, 0x15, 0xff, 0x29, 0x14, 0x18, 0xff, 0x2c, 0x18, 0x1b, 0xff, 0x2c, 0x16, 0x18, 0xff, 0x31, 0x1b, 0x1e, 0xff, 0x31, 0x1c, 0x21, 0xff, 0x2a, 0x15, 0x1a, 0xff, 0x32, 0x1b, 0x1a, 0xff, 0x4f, 0x35, 0x31, 0xff, 0x32, 0x1b, 0x1a, 0xff, 0x2a, 0x14, 0x19, 0xff, 0x2b, 0x16, 0x16, 0xff, 0x34, 0x20, 0x1d, 0xff, 0x1f, 0x0b, 0x0f, 0xff, 0x29, 0x15, 0x16, 0xff, 0x3f, 0x2a, 0x2a, 0xff, 0x3f, 0x2a, 0x2a, 0xff, 0x2d, 0x1a, 0x1b, 0xff, 0x41, 0x2e, 0x2b, 0xff, 0x5d, 0x4a, 0x44, 0xff, 0x35, 0x20, 0x1e, 0xff, 0x43, 0x2d, 0x2f, 0xff, 0x75, 0x63, 0x60, 0xff, 0x8a, 0x7a, 0x74, 0xff, 0x6d, 0x5c, 0x56, 0xff, 0x42, 0x2c, 0x29, 0xff, 0x2e, 0x18, 0x16, 0xff, 0x40, 0x2d, 0x28, 0xff, 0x4b, 0x37, 0x34, 0xff, 0x28, 0x12, 0x15, 0xff, 0x27, 0x13, 0x16, 0xff, 0x85, 0x77, 0x74, 0xff, 0x59, 0x4a, 0x45, 0xff, 0x3d, 0x28, 0x25, 0xff, 0x65, 0x4f, 0x4a, 0xff, 0x2b, 0x19, 0x10, 0xff, 0x34, 0x22, 0x1c, 0xff, 0x31, 0x1e, 0x1c, 0xff, 0x2b, 0x16, 0x17, 0xff, 0x35, 0x1e, 0x21, 0xff, 0x2d, 0x1a, 0x1a, 0xff, 0x2e, 0x1c, 0x1a, 0xff, 0x35, 0x21, 0x1e, 0xff, 0x37, 0x23, 0x22, 0xff, 0x32, 0x1d, 0x1d, 0xff, 0x2f, 0x1a, 0x1a, 0xff, 0x24, 0x10, 0x0f, 0xff, 0x54, 0x40, 0x37, 0xff, 0x62, 0x4f, 0x46, 0xff, 0x40, 0x30, 0x2c, 0xff, 0x3d, 0x2c, 0x27, 0xff, 0x49, 0x31, 0x26, 0xff, 0x4c, 0x33, 0x2b, 0xff, 0x67, 0x50, 0x43, 0xff, 0x85, 0x73, 0x5f, 0xff, 0x2d, 0x1c, 0x1a, 0xff, 0x39, 0x23, 0x21, 0xff, 0x2f, 0x1c, 0x19, 0xff, 0x37, 0x21, 0x23, 0xff, 0x60, 0x45, 0x3d, 0xff, 0x80, 0x6a, 0x62, 0xff, 0xed, 0xec, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x7c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xe7, 0xe3, 0xff, 0x82, 0x6c, 0x57, 0xff, 0x58, 0x3e, 0x27, 0xff, 0x5f, 0x45, 0x2c, 0xff, 0x7d, 0x63, 0x44, 0xff, 0x7b, 0x63, 0x3f, 0xff, 0x79, 0x63, 0x3b, 0xff, 0x92, 0x79, 0x52, 0xff, 0x97, 0x81, 0x51, 0xff, 0xa2, 0x92, 0x61, 0xff, 0xc6, 0xb8, 0x94, 0xff, 0xb2, 0xa4, 0x79, 0xff, 0xc9, 0xbf, 0x93, 0xff, 0xd0, 0xcb, 0xa3, 0xff, 0xb8, 0xae, 0x8e, 0xff, 0xd2, 0xcc, 0xa4, 0xff, 0xe4, 0xea, 0xd1, 0xff, 0xf0, 0xf5, 0xe3, 0xff, 0xd7, 0xd0, 0xb1, 0xff, 0xe1, 0xe9, 0xde, 0xff, 0xe3, 0xed, 0xe6, 0xff, 0xec, 0xf3, 0xf0, 0xff, 0xec, 0xf4, 0xf7, 0xff, 0xea, 0xf6, 0xf7, 0xff, 0xea, 0xf7, 0xf6, 0xff, 0xee, 0xf7, 0xf6, 0xff, 0xec, 0xf6, 0xf7, 0xff, 0xef, 0xf9, 0xf7, 0xff, 0xd3, 0xd0, 0xc9, 0xff, 0xd3, 0xcb, 0xc8, 0xff, 0xef, 0xf8, 0xf7, 0xff, 0xc4, 0xc0, 0xbf, 0xff, 0x87, 0x6f, 0x64, 0xff, 0x78, 0x5e, 0x51, 0xff, 0x60, 0x49, 0x44, 0xff, 0x7f, 0x6a, 0x67, 0xff, 0x65, 0x4a, 0x45, 0xff, 0x2f, 0x13, 0x11, 0xff, 0x31, 0x16, 0x18, 0xff, 0x41, 0x27, 0x2a, 0xff, 0x3f, 0x25, 0x27, 0xff, 0x57, 0x3c, 0x3c, 0xff, 0x34, 0x1a, 0x1a, 0xff, 0x1b, 0x04, 0x06, 0xff, 0x48, 0x33, 0x36, 0xff, 0x52, 0x3b, 0x3b, 0xff, 0x46, 0x2e, 0x2c, 0xff, 0x35, 0x1d, 0x1f, 0xff, 0x24, 0x0d, 0x14, 0xff, 0x23, 0x0e, 0x14, 0xff, 0x32, 0x1b, 0x1d, 0xff, 0x31, 0x18, 0x1b, 0xff, 0x2e, 0x17, 0x1a, 0xff, 0x2a, 0x14, 0x17, 0xff, 0x28, 0x13, 0x16, 0xff, 0x2c, 0x17, 0x1a, 0xff, 0x27, 0x12, 0x14, 0xff, 0x32, 0x1d, 0x1f, 0xff, 0x29, 0x15, 0x18, 0xff, 0x25, 0x12, 0x14, 0xff, 0x2d, 0x18, 0x17, 0xff, 0x46, 0x30, 0x2c, 0xff, 0x33, 0x1f, 0x1d, 0xff, 0x2f, 0x1a, 0x1e, 0xff, 0x1c, 0x08, 0x07, 0xff, 0x2d, 0x1b, 0x16, 0xff, 0x22, 0x0f, 0x14, 0xff, 0x22, 0x0e, 0x12, 0xff, 0x1c, 0x06, 0x09, 0xff, 0x23, 0x0e, 0x11, 0xff, 0x3c, 0x2d, 0x2c, 0xff, 0x53, 0x45, 0x43, 0xff, 0x3a, 0x27, 0x29, 0xff, 0x31, 0x1c, 0x1f, 0xff, 0x30, 0x1a, 0x1a, 0xff, 0x3b, 0x25, 0x22, 0xff, 0x73, 0x64, 0x5e, 0xff, 0x93, 0x85, 0x7f, 0xff, 0x66, 0x55, 0x50, 0xff, 0x3c, 0x29, 0x22, 0xff, 0x32, 0x1c, 0x1c, 0xff, 0x3c, 0x25, 0x27, 0xff, 0x46, 0x30, 0x2d, 0xff, 0x28, 0x12, 0x13, 0xff, 0x3e, 0x2c, 0x2d, 0xff, 0x78, 0x6c, 0x68, 0xff, 0x43, 0x31, 0x2e, 0xff, 0x53, 0x3f, 0x39, 0xff, 0x59, 0x47, 0x3d, 0xff, 0x26, 0x14, 0x0f, 0xff, 0x2f, 0x1b, 0x1b, 0xff, 0x2a, 0x15, 0x19, 0xff, 0x2f, 0x1b, 0x1f, 0xff, 0x29, 0x18, 0x19, 0xff, 0x37, 0x23, 0x1e, 0xff, 0x3c, 0x26, 0x22, 0xff, 0x27, 0x11, 0x15, 0xff, 0x3a, 0x26, 0x21, 0xff, 0x3a, 0x24, 0x21, 0xff, 0x2e, 0x1a, 0x1b, 0xff, 0x6d, 0x59, 0x4c, 0xff, 0x4a, 0x35, 0x2f, 0xff, 0x3d, 0x2f, 0x27, 0xff, 0x42, 0x34, 0x2f, 0xff, 0x47, 0x31, 0x2a, 0xff, 0x4a, 0x36, 0x26, 0xff, 0x78, 0x65, 0x4f, 0xff, 0x81, 0x6a, 0x5a, 0xff, 0x30, 0x1e, 0x1a, 0xff, 0x31, 0x1b, 0x1b, 0xff, 0x32, 0x1e, 0x20, 0xff, 0x30, 0x19, 0x20, 0xff, 0x4a, 0x33, 0x2c, 0xff, 0x51, 0x38, 0x2d, 0xff, 0xb7, 0xa8, 0x9e, 0xff, 0xfc, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xdf, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xc7, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xfa, 0xff, 0xaa, 0x9c, 0x8d, 0xff, 0x5c, 0x40, 0x29, 0xff, 0x67, 0x4d, 0x30, 0xff, 0x83, 0x6b, 0x48, 0xff, 0x72, 0x59, 0x38, 0xff, 0x64, 0x47, 0x2c, 0xff, 0x60, 0x43, 0x28, 0xff, 0x58, 0x3c, 0x25, 0xff, 0x5f, 0x44, 0x29, 0xff, 0x88, 0x6f, 0x46, 0xff, 0xb2, 0x9a, 0x6e, 0xff, 0xb7, 0xa6, 0x7a, 0xff, 0xad, 0x9d, 0x76, 0xff, 0xb1, 0x9e, 0x76, 0xff, 0xb9, 0xb0, 0x79, 0xff, 0xda, 0xdd, 0xbf, 0xff, 0xf0, 0xf6, 0xf5, 0xff, 0xf0, 0xfc, 0xf9, 0xff, 0xec, 0xf9, 0xf5, 0xff, 0xe6, 0xf2, 0xed, 0xff, 0xe9, 0xf1, 0xed, 0xff, 0xee, 0xf7, 0xf5, 0xff, 0xeb, 0xf5, 0xf6, 0xff, 0xec, 0xf6, 0xf7, 0xff, 0xef, 0xf8, 0xf7, 0xff, 0xee, 0xf6, 0xf9, 0xff, 0xee, 0xfd, 0xff, 0xff, 0xde, 0xe4, 0xe3, 0xff, 0x91, 0x81, 0x7d, 0xff, 0xd0, 0xcd, 0xc9, 0xff, 0xe1, 0xeb, 0xeb, 0xff, 0xbc, 0xb6, 0xb9, 0xff, 0x88, 0x6f, 0x6d, 0xff, 0x6b, 0x51, 0x4b, 0xff, 0x69, 0x4b, 0x42, 0xff, 0x73, 0x59, 0x52, 0xff, 0x5e, 0x44, 0x42, 0xff, 0x4d, 0x38, 0x36, 0xff, 0x4d, 0x3a, 0x38, 0xff, 0x3c, 0x23, 0x26, 0xff, 0x24, 0x0a, 0x0e, 0xff, 0x39, 0x22, 0x22, 0xff, 0x50, 0x3c, 0x3a, 0xff, 0x45, 0x34, 0x30, 0xff, 0x3c, 0x29, 0x28, 0xff, 0x3b, 0x25, 0x27, 0xff, 0x3d, 0x28, 0x29, 0xff, 0x3b, 0x27, 0x25, 0xff, 0x2d, 0x1b, 0x19, 0xff, 0x2b, 0x16, 0x19, 0xff, 0x22, 0x0d, 0x11, 0xff, 0x28, 0x13, 0x17, 0xff, 0x29, 0x13, 0x17, 0xff, 0x2c, 0x16, 0x1a, 0xff, 0x29, 0x14, 0x17, 0xff, 0x2c, 0x18, 0x1b, 0xff, 0x27, 0x13, 0x15, 0xff, 0x2a, 0x15, 0x19, 0xff, 0x24, 0x0f, 0x11, 0xff, 0x28, 0x16, 0x12, 0xff, 0x45, 0x32, 0x2e, 0xff, 0x2e, 0x1a, 0x1a, 0xff, 0x24, 0x11, 0x14, 0xff, 0x25, 0x11, 0x13, 0xff, 0x37, 0x24, 0x20, 0xff, 0x45, 0x32, 0x2c, 0xff, 0x3d, 0x2c, 0x2a, 0xff, 0x2d, 0x1b, 0x1e, 0xff, 0x32, 0x21, 0x22, 0xff, 0x35, 0x23, 0x21, 0xff, 0x48, 0x38, 0x35, 0xff, 0x4c, 0x3b, 0x3a, 0xff, 0x4e, 0x3a, 0x3a, 0xff, 0x49, 0x34, 0x36, 0xff, 0x40, 0x2b, 0x2c, 0xff, 0x39, 0x24, 0x23, 0xff, 0x43, 0x2f, 0x2e, 0xff, 0x63, 0x53, 0x51, 0xff, 0x89, 0x7b, 0x75, 0xff, 0x72, 0x65, 0x5b, 0xff, 0x35, 0x22, 0x20, 0xff, 0x23, 0x0b, 0x10, 0xff, 0x33, 0x1e, 0x1c, 0xff, 0x32, 0x1d, 0x1f, 0xff, 0x2c, 0x16, 0x1b, 0xff, 0x4a, 0x37, 0x36, 0xff, 0x71, 0x5f, 0x59, 0xff, 0x43, 0x30, 0x29, 0xff, 0x54, 0x43, 0x3c, 0xff, 0x51, 0x41, 0x3a, 0xff, 0x31, 0x1e, 0x18, 0xff, 0x31, 0x1b, 0x1a, 0xff, 0x2e, 0x1b, 0x1e, 0xff, 0x26, 0x15, 0x16, 0xff, 0x3b, 0x25, 0x20, 0xff, 0x44, 0x2b, 0x23, 0xff, 0x22, 0x0f, 0x11, 0xff, 0x21, 0x13, 0x12, 0xff, 0x1e, 0x0a, 0x0e, 0xff, 0x49, 0x34, 0x31, 0xff, 0x68, 0x55, 0x44, 0xff, 0x50, 0x3d, 0x33, 0xff, 0x3b, 0x2b, 0x21, 0xff, 0x20, 0x0d, 0x0c, 0xff, 0x45, 0x32, 0x28, 0xff, 0x58, 0x45, 0x35, 0xff, 0x6f, 0x59, 0x4a, 0xff, 0x7b, 0x65, 0x54, 0xff, 0x4a, 0x37, 0x33, 0xff, 0x26, 0x11, 0x11, 0xff, 0x2d, 0x18, 0x1b, 0xff, 0x2c, 0x17, 0x1c, 0xff, 0x3e, 0x2a, 0x27, 0xff, 0x5f, 0x47, 0x3f, 0xff, 0x78, 0x5e, 0x4e, 0xff, 0xd2, 0xca, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x7c, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0xcc, 0xc3, 0xff, 0x6d, 0x55, 0x39, 0xff, 0x63, 0x48, 0x2c, 0xff, 0x93, 0x7b, 0x55, 0xff, 0x75, 0x5c, 0x3b, 0xff, 0x53, 0x37, 0x20, 0xff, 0x66, 0x47, 0x30, 0xff, 0x67, 0x48, 0x30, 0xff, 0x66, 0x4b, 0x2f, 0xff, 0x90, 0x77, 0x53, 0xff, 0x94, 0x7a, 0x53, 0xff, 0x84, 0x65, 0x3d, 0xff, 0x8b, 0x6f, 0x44, 0xff, 0x93, 0x77, 0x46, 0xff, 0xa9, 0x8d, 0x5c, 0xff, 0xde, 0xd4, 0xa6, 0xff, 0xe2, 0xe5, 0xc4, 0xff, 0xed, 0xf4, 0xf1, 0xff, 0xed, 0xff, 0xff, 0xff, 0xed, 0xfc, 0xf9, 0xff, 0xef, 0xf6, 0xf7, 0xff, 0xee, 0xf5, 0xf6, 0xff, 0xee, 0xf8, 0xf9, 0xff, 0xed, 0xf8, 0xf7, 0xff, 0xef, 0xf6, 0xf8, 0xff, 0xf0, 0xf6, 0xfb, 0xff, 0xe9, 0xf8, 0xfc, 0xff, 0xdf, 0xe9, 0xe3, 0xff, 0xcf, 0xc4, 0xbd, 0xff, 0xb0, 0xa4, 0xa0, 0xff, 0xcd, 0xd0, 0xc7, 0xff, 0xd0, 0xce, 0xcb, 0xff, 0xab, 0xa6, 0xaa, 0xff, 0x79, 0x66, 0x65, 0xff, 0x5a, 0x3e, 0x3a, 0xff, 0x52, 0x33, 0x2f, 0xff, 0x47, 0x2b, 0x27, 0xff, 0x51, 0x36, 0x34, 0xff, 0x52, 0x3d, 0x3a, 0xff, 0x38, 0x25, 0x22, 0xff, 0x2c, 0x15, 0x15, 0xff, 0x49, 0x35, 0x34, 0xff, 0x4d, 0x3c, 0x38, 0xff, 0x63, 0x51, 0x4b, 0xff, 0x4c, 0x38, 0x33, 0xff, 0x25, 0x0e, 0x0b, 0xff, 0x2d, 0x17, 0x14, 0xff, 0x46, 0x32, 0x2e, 0xff, 0x4d, 0x3a, 0x35, 0xff, 0x3e, 0x2c, 0x28, 0xff, 0x33, 0x1e, 0x1e, 0xff, 0x2c, 0x15, 0x18, 0xff, 0x2a, 0x14, 0x17, 0xff, 0x31, 0x1a, 0x1d, 0xff, 0x33, 0x1d, 0x20, 0xff, 0x2c, 0x17, 0x1a, 0xff, 0x2c, 0x17, 0x1a, 0xff, 0x2b, 0x15, 0x19, 0xff, 0x29, 0x14, 0x17, 0xff, 0x31, 0x1c, 0x1d, 0xff, 0x3e, 0x2b, 0x28, 0xff, 0x36, 0x22, 0x21, 0xff, 0x21, 0x0d, 0x11, 0xff, 0x2a, 0x14, 0x19, 0xff, 0x1f, 0x0a, 0x0d, 0xff, 0x29, 0x16, 0x17, 0xff, 0x36, 0x24, 0x24, 0xff, 0x48, 0x38, 0x34, 0xff, 0x48, 0x38, 0x35, 0xff, 0x3d, 0x2d, 0x2b, 0xff, 0x38, 0x28, 0x25, 0xff, 0x23, 0x10, 0x11, 0xff, 0x1c, 0x07, 0x09, 0xff, 0x44, 0x31, 0x2d, 0xff, 0x3f, 0x2b, 0x29, 0xff, 0x38, 0x23, 0x24, 0xff, 0x41, 0x2c, 0x2e, 0xff, 0x28, 0x14, 0x17, 0xff, 0x2a, 0x17, 0x19, 0xff, 0x5a, 0x49, 0x49, 0xff, 0x84, 0x79, 0x77, 0xff, 0x5f, 0x51, 0x4b, 0xff, 0x29, 0x18, 0x14, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x2b, 0x19, 0x1b, 0xff, 0x2c, 0x18, 0x1b, 0xff, 0x33, 0x1f, 0x21, 0xff, 0x68, 0x56, 0x52, 0xff, 0x64, 0x50, 0x4d, 0xff, 0x44, 0x30, 0x2d, 0xff, 0x57, 0x45, 0x3f, 0xff, 0x4a, 0x37, 0x2e, 0xff, 0x30, 0x1c, 0x16, 0xff, 0x29, 0x15, 0x19, 0xff, 0x2a, 0x19, 0x1d, 0xff, 0x2e, 0x1b, 0x16, 0xff, 0x45, 0x2e, 0x26, 0xff, 0x22, 0x10, 0x12, 0xff, 0x24, 0x17, 0x16, 0xff, 0x1e, 0x0b, 0x10, 0xff, 0x47, 0x34, 0x29, 0xff, 0x59, 0x45, 0x38, 0xff, 0x69, 0x57, 0x4c, 0xff, 0x3c, 0x2a, 0x24, 0xff, 0x1b, 0x06, 0x06, 0xff, 0x4b, 0x35, 0x2a, 0xff, 0x6b, 0x56, 0x48, 0xff, 0x65, 0x50, 0x44, 0xff, 0x5d, 0x47, 0x36, 0xff, 0x5b, 0x48, 0x42, 0xff, 0x2a, 0x15, 0x16, 0xff, 0x2b, 0x16, 0x19, 0xff, 0x26, 0x12, 0x15, 0xff, 0x3d, 0x28, 0x27, 0xff, 0x46, 0x2c, 0x26, 0xff, 0x68, 0x50, 0x3f, 0xff, 0xa2, 0x90, 0x81, 0xff, 0xf2, 0xf0, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xd7, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf1, 0xee, 0xff, 0x95, 0x82, 0x6b, 0xff, 0x60, 0x47, 0x28, 0xff, 0x7f, 0x67, 0x43, 0xff, 0x7f, 0x68, 0x42, 0xff, 0x58, 0x3e, 0x21, 0xff, 0x64, 0x47, 0x32, 0xff, 0x6a, 0x4c, 0x32, 0xff, 0x63, 0x46, 0x2c, 0xff, 0x88, 0x6c, 0x4b, 0xff, 0x8b, 0x72, 0x4a, 0xff, 0x63, 0x44, 0x28, 0xff, 0x88, 0x6a, 0x44, 0xff, 0xb0, 0x97, 0x62, 0xff, 0xbc, 0x9d, 0x66, 0xff, 0x9d, 0x82, 0x48, 0xff, 0xd0, 0xc3, 0x9e, 0xff, 0xe2, 0xe2, 0xc2, 0xff, 0xdd, 0xe4, 0xd1, 0xff, 0xea, 0xf8, 0xf4, 0xff, 0xe9, 0xf6, 0xf2, 0xff, 0xef, 0xf6, 0xfa, 0xff, 0xf0, 0xf8, 0xfc, 0xff, 0xef, 0xf9, 0xfa, 0xff, 0xed, 0xf8, 0xf8, 0xff, 0xeb, 0xf7, 0xf5, 0xff, 0xe6, 0xf5, 0xf4, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xbf, 0xb3, 0xa4, 0xff, 0x85, 0x5e, 0x48, 0xff, 0xa5, 0x96, 0x87, 0xff, 0xbd, 0xba, 0xae, 0xff, 0xc5, 0xb6, 0xb0, 0xff, 0xbd, 0xad, 0xa8, 0xff, 0x9b, 0x85, 0x7f, 0xff, 0x5a, 0x3b, 0x38, 0xff, 0x46, 0x29, 0x28, 0xff, 0x47, 0x2e, 0x2b, 0xff, 0x31, 0x1b, 0x15, 0xff, 0x28, 0x17, 0x12, 0xff, 0x44, 0x32, 0x2f, 0xff, 0x51, 0x3f, 0x3d, 0xff, 0x58, 0x4b, 0x48, 0xff, 0x57, 0x4a, 0x45, 0xff, 0x44, 0x32, 0x2b, 0xff, 0x42, 0x2a, 0x26, 0xff, 0x3f, 0x25, 0x24, 0xff, 0x35, 0x1c, 0x1d, 0xff, 0x28, 0x11, 0x12, 0xff, 0x28, 0x12, 0x15, 0xff, 0x2e, 0x19, 0x1b, 0xff, 0x29, 0x14, 0x14, 0xff, 0x2a, 0x14, 0x16, 0xff, 0x24, 0x0f, 0x11, 0xff, 0x29, 0x13, 0x15, 0xff, 0x2e, 0x1a, 0x1c, 0xff, 0x2b, 0x18, 0x1b, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x25, 0x11, 0x14, 0xff, 0x29, 0x15, 0x17, 0xff, 0x43, 0x2e, 0x2f, 0xff, 0x31, 0x1c, 0x1e, 0xff, 0x1f, 0x0c, 0x10, 0xff, 0x25, 0x11, 0x16, 0xff, 0x27, 0x12, 0x15, 0xff, 0x27, 0x14, 0x16, 0xff, 0x1e, 0x0b, 0x0f, 0xff, 0x18, 0x05, 0x09, 0xff, 0x23, 0x11, 0x12, 0xff, 0x21, 0x0d, 0x0e, 0xff, 0x21, 0x0c, 0x10, 0xff, 0x1f, 0x0c, 0x10, 0xff, 0x24, 0x0e, 0x13, 0xff, 0x24, 0x0f, 0x10, 0xff, 0x42, 0x34, 0x2e, 0xff, 0x39, 0x27, 0x24, 0xff, 0x2b, 0x15, 0x17, 0xff, 0x32, 0x1e, 0x20, 0xff, 0x2c, 0x19, 0x1d, 0xff, 0x1d, 0x0a, 0x0d, 0xff, 0x1e, 0x0b, 0x0f, 0xff, 0x3c, 0x29, 0x2f, 0xff, 0x77, 0x63, 0x5f, 0xff, 0x5b, 0x46, 0x3e, 0xff, 0x2c, 0x14, 0x16, 0xff, 0x24, 0x11, 0x13, 0xff, 0x24, 0x12, 0x14, 0xff, 0x29, 0x16, 0x19, 0xff, 0x4b, 0x39, 0x3a, 0xff, 0x62, 0x50, 0x4f, 0xff, 0x43, 0x2f, 0x2d, 0xff, 0x53, 0x3e, 0x3b, 0xff, 0x54, 0x42, 0x38, 0xff, 0x4c, 0x39, 0x31, 0xff, 0x21, 0x0c, 0x10, 0xff, 0x28, 0x17, 0x1c, 0xff, 0x29, 0x18, 0x17, 0xff, 0x3b, 0x26, 0x23, 0xff, 0x24, 0x12, 0x14, 0xff, 0x11, 0x02, 0x04, 0xff, 0x2e, 0x1d, 0x1e, 0xff, 0x42, 0x31, 0x23, 0xff, 0x6b, 0x55, 0x48, 0xff, 0x5d, 0x4a, 0x41, 0xff, 0x34, 0x20, 0x22, 0xff, 0x39, 0x23, 0x20, 0xff, 0x4d, 0x33, 0x26, 0xff, 0x72, 0x5c, 0x4b, 0xff, 0x70, 0x5d, 0x50, 0xff, 0x61, 0x4b, 0x40, 0xff, 0x54, 0x40, 0x38, 0xff, 0x20, 0x0b, 0x0d, 0xff, 0x29, 0x16, 0x18, 0xff, 0x24, 0x12, 0x14, 0xff, 0x3e, 0x28, 0x2a, 0xff, 0x38, 0x20, 0x1e, 0xff, 0x67, 0x51, 0x40, 0xff, 0x7a, 0x64, 0x52, 0xff, 0xb8, 0xad, 0xa4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x7c, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8, 0xbe, 0xad, 0xff, 0x71, 0x59, 0x37, 0xff, 0x6f, 0x56, 0x37, 0xff, 0x83, 0x6c, 0x48, 0xff, 0x64, 0x4a, 0x2c, 0xff, 0x62, 0x47, 0x2d, 0xff, 0x68, 0x4d, 0x30, 0xff, 0x6b, 0x4e, 0x33, 0xff, 0x67, 0x4a, 0x2e, 0xff, 0x8c, 0x72, 0x4a, 0xff, 0x77, 0x5d, 0x3d, 0xff, 0x68, 0x48, 0x32, 0xff, 0x90, 0x72, 0x49, 0xff, 0x9f, 0x81, 0x54, 0xff, 0x91, 0x6f, 0x43, 0xff, 0xaa, 0x8d, 0x4f, 0xff, 0xc1, 0xb5, 0x82, 0xff, 0xf3, 0xf7, 0xe8, 0xff, 0xe2, 0xe8, 0xd4, 0xff, 0xdf, 0xe4, 0xd5, 0xff, 0xef, 0xf6, 0xf8, 0xff, 0xee, 0xfa, 0xf9, 0xff, 0xef, 0xfa, 0xf9, 0xff, 0xed, 0xf8, 0xf7, 0xff, 0xeb, 0xf7, 0xf7, 0xff, 0xe9, 0xf6, 0xf5, 0xff, 0xe8, 0xf5, 0xf7, 0xff, 0xf2, 0xfa, 0xfe, 0xff, 0xc1, 0xb6, 0xa6, 0xff, 0x93, 0x75, 0x57, 0xff, 0x9e, 0x8a, 0x7b, 0xff, 0xae, 0xa2, 0xa4, 0xff, 0xae, 0xa6, 0xaa, 0xff, 0x7b, 0x5f, 0x55, 0xff, 0x57, 0x37, 0x2d, 0xff, 0x54, 0x36, 0x33, 0xff, 0x46, 0x2b, 0x26, 0xff, 0x52, 0x40, 0x39, 0xff, 0x71, 0x65, 0x5e, 0xff, 0x67, 0x5e, 0x55, 0xff, 0x5d, 0x4f, 0x4b, 0xff, 0x4d, 0x3e, 0x3b, 0xff, 0x35, 0x28, 0x26, 0xff, 0x43, 0x2d, 0x2e, 0xff, 0x42, 0x2a, 0x27, 0xff, 0x4b, 0x31, 0x2b, 0xff, 0x53, 0x3b, 0x36, 0xff, 0x40, 0x29, 0x26, 0xff, 0x37, 0x1f, 0x1e, 0xff, 0x2f, 0x19, 0x19, 0xff, 0x30, 0x1b, 0x1e, 0xff, 0x28, 0x15, 0x17, 0xff, 0x28, 0x14, 0x18, 0xff, 0x23, 0x10, 0x13, 0xff, 0x26, 0x12, 0x16, 0xff, 0x24, 0x11, 0x14, 0xff, 0x2a, 0x18, 0x1b, 0xff, 0x27, 0x14, 0x18, 0xff, 0x24, 0x11, 0x14, 0xff, 0x29, 0x16, 0x19, 0xff, 0x2b, 0x15, 0x18, 0xff, 0x2c, 0x17, 0x1a, 0xff, 0x28, 0x16, 0x19, 0xff, 0x22, 0x11, 0x14, 0xff, 0x21, 0x0f, 0x12, 0xff, 0x23, 0x10, 0x13, 0xff, 0x23, 0x10, 0x13, 0xff, 0x25, 0x11, 0x14, 0xff, 0x2c, 0x16, 0x18, 0xff, 0x27, 0x11, 0x14, 0xff, 0x29, 0x13, 0x16, 0xff, 0x2e, 0x1a, 0x1a, 0xff, 0x32, 0x1c, 0x1e, 0xff, 0x2a, 0x18, 0x17, 0xff, 0x37, 0x2e, 0x27, 0xff, 0x31, 0x22, 0x22, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x2f, 0x1d, 0x1c, 0xff, 0x31, 0x1f, 0x21, 0xff, 0x28, 0x14, 0x18, 0xff, 0x26, 0x13, 0x15, 0xff, 0x1f, 0x0b, 0x0f, 0xff, 0x31, 0x1b, 0x1c, 0xff, 0x66, 0x4e, 0x4c, 0xff, 0x54, 0x3e, 0x3b, 0xff, 0x21, 0x0e, 0x0d, 0xff, 0x1e, 0x0c, 0x0f, 0xff, 0x23, 0x10, 0x14, 0xff, 0x21, 0x0e, 0x12, 0xff, 0x62, 0x52, 0x51, 0xff, 0x5b, 0x4c, 0x48, 0xff, 0x54, 0x3f, 0x3e, 0xff, 0x43, 0x30, 0x2a, 0xff, 0x57, 0x46, 0x3f, 0xff, 0x3f, 0x2c, 0x2a, 0xff, 0x17, 0x08, 0x0b, 0xff, 0x20, 0x10, 0x14, 0xff, 0x29, 0x15, 0x16, 0xff, 0x25, 0x13, 0x16, 0xff, 0x10, 0x00, 0x06, 0xff, 0x2b, 0x1b, 0x18, 0xff, 0x56, 0x44, 0x38, 0xff, 0x74, 0x61, 0x4e, 0xff, 0x2b, 0x17, 0x13, 0xff, 0x26, 0x12, 0x18, 0xff, 0x45, 0x30, 0x28, 0xff, 0x5c, 0x42, 0x2f, 0xff, 0x74, 0x5f, 0x4c, 0xff, 0x5e, 0x4c, 0x40, 0xff, 0x54, 0x3e, 0x37, 0xff, 0x52, 0x3e, 0x38, 0xff, 0x26, 0x12, 0x14, 0xff, 0x26, 0x14, 0x16, 0xff, 0x26, 0x15, 0x15, 0xff, 0x30, 0x1b, 0x1f, 0xff, 0x27, 0x12, 0x15, 0xff, 0x63, 0x4f, 0x42, 0xff, 0x6c, 0x55, 0x45, 0xff, 0x79, 0x61, 0x57, 0xff, 0xe3, 0xde, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x63, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xeb, 0xe5, 0xff, 0x95, 0x83, 0x62, 0xff, 0x74, 0x5b, 0x37, 0xff, 0x8c, 0x71, 0x4e, 0xff, 0x7a, 0x5f, 0x3c, 0xff, 0x61, 0x47, 0x29, 0xff, 0x68, 0x4d, 0x33, 0xff, 0x6d, 0x51, 0x35, 0xff, 0x6d, 0x50, 0x36, 0xff, 0x68, 0x4b, 0x2c, 0xff, 0x8b, 0x72, 0x48, 0xff, 0x8b, 0x6f, 0x4c, 0xff, 0x6b, 0x4b, 0x30, 0xff, 0x6c, 0x4e, 0x2c, 0xff, 0x7a, 0x57, 0x37, 0xff, 0x8b, 0x6b, 0x46, 0xff, 0x99, 0x83, 0x4f, 0xff, 0xd3, 0xc1, 0x96, 0xff, 0xe4, 0xe0, 0xc6, 0xff, 0xd2, 0xd7, 0xbe, 0xff, 0xea, 0xf4, 0xea, 0xff, 0xf4, 0xfd, 0xff, 0xff, 0xf0, 0xfa, 0xfa, 0xff, 0xee, 0xf9, 0xf7, 0xff, 0xeb, 0xf7, 0xf7, 0xff, 0xe8, 0xf5, 0xf5, 0xff, 0xe6, 0xf3, 0xf1, 0xff, 0xec, 0xf6, 0xfa, 0xff, 0xf1, 0xfa, 0xfd, 0xff, 0x87, 0x72, 0x64, 0xff, 0x7f, 0x6a, 0x59, 0xff, 0xc1, 0xb8, 0xb2, 0xff, 0xa8, 0x9e, 0x9c, 0xff, 0x80, 0x74, 0x6a, 0xff, 0x7e, 0x64, 0x50, 0xff, 0x62, 0x47, 0x38, 0xff, 0x6e, 0x57, 0x4c, 0xff, 0x6b, 0x57, 0x50, 0xff, 0xae, 0xa3, 0x98, 0xff, 0xba, 0xb2, 0xa6, 0xff, 0x8d, 0x84, 0x7a, 0xff, 0x5f, 0x53, 0x4b, 0xff, 0x59, 0x4e, 0x47, 0xff, 0x55, 0x46, 0x40, 0xff, 0x4e, 0x39, 0x33, 0xff, 0x48, 0x32, 0x2b, 0xff, 0x5e, 0x4a, 0x43, 0xff, 0x53, 0x3f, 0x35, 0xff, 0x3e, 0x29, 0x22, 0xff, 0x4f, 0x39, 0x33, 0xff, 0x43, 0x2e, 0x2c, 0xff, 0x32, 0x1c, 0x1e, 0xff, 0x33, 0x1e, 0x21, 0xff, 0x34, 0x1e, 0x20, 0xff, 0x2a, 0x15, 0x17, 0xff, 0x26, 0x12, 0x16, 0xff, 0x24, 0x10, 0x13, 0xff, 0x2c, 0x17, 0x1a, 0xff, 0x27, 0x14, 0x17, 0xff, 0x2b, 0x19, 0x1c, 0xff, 0x27, 0x14, 0x17, 0xff, 0x26, 0x13, 0x16, 0xff, 0x27, 0x13, 0x17, 0xff, 0x28, 0x16, 0x18, 0xff, 0x26, 0x15, 0x17, 0xff, 0x22, 0x11, 0x13, 0xff, 0x21, 0x0f, 0x12, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x29, 0x16, 0x16, 0xff, 0x27, 0x14, 0x14, 0xff, 0x24, 0x12, 0x13, 0xff, 0x2a, 0x17, 0x1a, 0xff, 0x27, 0x15, 0x15, 0xff, 0x21, 0x0c, 0x0e, 0xff, 0x20, 0x12, 0x11, 0xff, 0x44, 0x39, 0x35, 0xff, 0x2d, 0x1b, 0x1c, 0xff, 0x26, 0x12, 0x17, 0xff, 0x30, 0x1c, 0x1d, 0xff, 0x2d, 0x1a, 0x1b, 0xff, 0x29, 0x15, 0x18, 0xff, 0x29, 0x14, 0x18, 0xff, 0x25, 0x13, 0x15, 0xff, 0x24, 0x12, 0x15, 0xff, 0x36, 0x24, 0x24, 0xff, 0x52, 0x3f, 0x3b, 0xff, 0x36, 0x23, 0x22, 0xff, 0x1e, 0x0c, 0x0e, 0xff, 0x22, 0x0e, 0x11, 0xff, 0x1e, 0x0b, 0x0e, 0xff, 0x34, 0x25, 0x25, 0xff, 0x69, 0x59, 0x56, 0xff, 0x49, 0x36, 0x35, 0xff, 0x30, 0x1e, 0x1d, 0xff, 0x4e, 0x3f, 0x39, 0xff, 0x57, 0x48, 0x3f, 0xff, 0x27, 0x16, 0x14, 0xff, 0x26, 0x12, 0x16, 0xff, 0x1c, 0x0a, 0x0e, 0xff, 0x12, 0x03, 0x09, 0xff, 0x26, 0x17, 0x1a, 0xff, 0x5b, 0x4b, 0x41, 0xff, 0x6a, 0x57, 0x47, 0xff, 0x50, 0x3c, 0x31, 0xff, 0x25, 0x12, 0x14, 0xff, 0x23, 0x11, 0x14, 0xff, 0x3e, 0x29, 0x20, 0xff, 0x69, 0x54, 0x3d, 0xff, 0x6e, 0x59, 0x48, 0xff, 0x41, 0x2c, 0x21, 0xff, 0x57, 0x40, 0x35, 0xff, 0x53, 0x3c, 0x37, 0xff, 0x2a, 0x16, 0x18, 0xff, 0x2d, 0x19, 0x1c, 0xff, 0x29, 0x16, 0x19, 0xff, 0x25, 0x15, 0x14, 0xff, 0x1c, 0x08, 0x0d, 0xff, 0x65, 0x50, 0x48, 0xff, 0x70, 0x58, 0x45, 0xff, 0x58, 0x3c, 0x32, 0xff, 0xb0, 0xa1, 0x95, 0xff, 0xfc, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x7c, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xbd, 0xa7, 0xff, 0x7f, 0x69, 0x41, 0xff, 0x8f, 0x77, 0x51, 0xff, 0x8a, 0x6f, 0x4a, 0xff, 0x6a, 0x4f, 0x2c, 0xff, 0x6a, 0x50, 0x30, 0xff, 0x69, 0x4d, 0x32, 0xff, 0x6d, 0x4f, 0x35, 0xff, 0x70, 0x54, 0x37, 0xff, 0x70, 0x53, 0x36, 0xff, 0x7a, 0x5e, 0x3c, 0xff, 0x95, 0x78, 0x51, 0xff, 0x8e, 0x71, 0x46, 0xff, 0x93, 0x7f, 0x52, 0xff, 0xa1, 0x83, 0x5d, 0xff, 0xa3, 0x83, 0x58, 0xff, 0xbe, 0xb0, 0x80, 0xff, 0xdc, 0xd2, 0xa6, 0xff, 0xc2, 0xbc, 0x8a, 0xff, 0xd8, 0xd8, 0xc4, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xeb, 0xfa, 0xf9, 0xff, 0xec, 0xf8, 0xf5, 0xff, 0xed, 0xf6, 0xf7, 0xff, 0xe9, 0xf5, 0xf5, 0xff, 0xe7, 0xf3, 0xf3, 0xff, 0xe3, 0xf0, 0xf2, 0xff, 0xf2, 0xfc, 0xfd, 0xff, 0xe4, 0xe5, 0xdf, 0xff, 0x78, 0x61, 0x55, 0xff, 0x8d, 0x7d, 0x72, 0xff, 0xaf, 0xa8, 0x99, 0xff, 0x8f, 0x85, 0x76, 0xff, 0x8c, 0x7c, 0x6e, 0xff, 0x88, 0x76, 0x68, 0xff, 0xa1, 0x8e, 0x81, 0xff, 0x93, 0x8b, 0x80, 0xff, 0xc2, 0xb9, 0xaf, 0xff, 0xc5, 0xb7, 0xad, 0xff, 0x7d, 0x6c, 0x63, 0xff, 0x80, 0x6b, 0x64, 0xff, 0x7d, 0x6b, 0x63, 0xff, 0x69, 0x57, 0x51, 0xff, 0x62, 0x50, 0x49, 0xff, 0x51, 0x3f, 0x36, 0xff, 0x53, 0x3d, 0x36, 0xff, 0x46, 0x32, 0x2c, 0xff, 0x55, 0x43, 0x3d, 0xff, 0x4c, 0x37, 0x32, 0xff, 0x4c, 0x39, 0x33, 0xff, 0x55, 0x41, 0x3d, 0xff, 0x4b, 0x35, 0x34, 0xff, 0x47, 0x32, 0x31, 0xff, 0x34, 0x20, 0x1c, 0xff, 0x34, 0x20, 0x1e, 0xff, 0x32, 0x1d, 0x20, 0xff, 0x2a, 0x14, 0x17, 0xff, 0x29, 0x14, 0x17, 0xff, 0x2b, 0x18, 0x1b, 0xff, 0x27, 0x14, 0x17, 0xff, 0x26, 0x13, 0x16, 0xff, 0x25, 0x12, 0x15, 0xff, 0x24, 0x11, 0x14, 0xff, 0x25, 0x11, 0x15, 0xff, 0x25, 0x12, 0x15, 0xff, 0x22, 0x10, 0x12, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x20, 0x0d, 0x10, 0xff, 0x22, 0x0f, 0x10, 0xff, 0x26, 0x14, 0x13, 0xff, 0x24, 0x13, 0x15, 0xff, 0x1d, 0x0a, 0x0e, 0xff, 0x1f, 0x0c, 0x10, 0xff, 0x1c, 0x07, 0x0b, 0xff, 0x32, 0x26, 0x25, 0xff, 0x56, 0x4a, 0x47, 0xff, 0x28, 0x13, 0x16, 0xff, 0x24, 0x10, 0x15, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x26, 0x14, 0x14, 0xff, 0x23, 0x11, 0x12, 0xff, 0x25, 0x12, 0x16, 0xff, 0x21, 0x0f, 0x12, 0xff, 0x28, 0x15, 0x18, 0xff, 0x21, 0x0f, 0x11, 0xff, 0x31, 0x1f, 0x1f, 0xff, 0x44, 0x30, 0x31, 0xff, 0x2c, 0x1a, 0x1b, 0xff, 0x1f, 0x0c, 0x0f, 0xff, 0x23, 0x10, 0x13, 0xff, 0x27, 0x16, 0x19, 0xff, 0x57, 0x46, 0x46, 0xff, 0x53, 0x42, 0x41, 0xff, 0x36, 0x23, 0x23, 0xff, 0x3a, 0x28, 0x24, 0xff, 0x41, 0x33, 0x2d, 0xff, 0x2e, 0x19, 0x19, 0xff, 0x34, 0x1f, 0x21, 0xff, 0x1e, 0x0e, 0x10, 0xff, 0x15, 0x06, 0x05, 0xff, 0x51, 0x41, 0x39, 0xff, 0x5e, 0x4d, 0x40, 0xff, 0x5d, 0x4a, 0x3c, 0xff, 0x44, 0x2f, 0x29, 0xff, 0x30, 0x1b, 0x1b, 0xff, 0x2f, 0x1b, 0x18, 0xff, 0x4f, 0x3a, 0x2d, 0xff, 0x7e, 0x68, 0x52, 0xff, 0x6a, 0x52, 0x43, 0xff, 0x41, 0x29, 0x21, 0xff, 0x4a, 0x34, 0x2b, 0xff, 0x47, 0x31, 0x2d, 0xff, 0x30, 0x1c, 0x1c, 0xff, 0x31, 0x1c, 0x1f, 0xff, 0x2b, 0x16, 0x19, 0xff, 0x29, 0x18, 0x16, 0xff, 0x1c, 0x08, 0x0f, 0xff, 0x57, 0x41, 0x3d, 0xff, 0x65, 0x4c, 0x3e, 0xff, 0x51, 0x36, 0x2f, 0xff, 0x7f, 0x68, 0x59, 0xff, 0xcf, 0xc8, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x63, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xec, 0xe5, 0xff, 0x99, 0x86, 0x60, 0xff, 0xa0, 0x8a, 0x60, 0xff, 0x98, 0x81, 0x58, 0xff, 0x70, 0x55, 0x31, 0xff, 0x70, 0x55, 0x33, 0xff, 0x6e, 0x52, 0x33, 0xff, 0x6c, 0x4f, 0x34, 0xff, 0x6e, 0x50, 0x35, 0xff, 0x76, 0x59, 0x3b, 0xff, 0x7a, 0x5c, 0x3e, 0xff, 0x75, 0x56, 0x35, 0xff, 0x74, 0x55, 0x33, 0xff, 0x83, 0x65, 0x42, 0xff, 0x9b, 0x7d, 0x54, 0xff, 0x9b, 0x7a, 0x50, 0xff, 0xa7, 0x8b, 0x57, 0xff, 0xba, 0x99, 0x60, 0xff, 0xba, 0xaf, 0x87, 0xff, 0xf1, 0xfe, 0xf9, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xec, 0xf8, 0xfd, 0xff, 0xec, 0xf6, 0xf5, 0xff, 0xeb, 0xf5, 0xf5, 0xff, 0xe6, 0xf3, 0xf5, 0xff, 0xe7, 0xf3, 0xf5, 0xff, 0xe7, 0xf3, 0xf4, 0xff, 0xe3, 0xee, 0xf0, 0xff, 0xf3, 0xff, 0xfd, 0xff, 0xbe, 0xba, 0xae, 0xff, 0x97, 0x87, 0x79, 0xff, 0x97, 0x88, 0x80, 0xff, 0x84, 0x6a, 0x62, 0xff, 0x80, 0x65, 0x5d, 0xff, 0x8a, 0x75, 0x6f, 0xff, 0x80, 0x71, 0x6c, 0xff, 0x8f, 0x82, 0x82, 0xff, 0xb1, 0xad, 0xad, 0xff, 0x8d, 0x83, 0x84, 0xff, 0x52, 0x41, 0x41, 0xff, 0x52, 0x38, 0x34, 0xff, 0x4f, 0x39, 0x32, 0xff, 0x4e, 0x3e, 0x38, 0xff, 0x4a, 0x3b, 0x37, 0xff, 0x55, 0x47, 0x42, 0xff, 0x70, 0x60, 0x59, 0xff, 0x5f, 0x4c, 0x45, 0xff, 0x4a, 0x34, 0x31, 0xff, 0x3c, 0x26, 0x29, 0xff, 0x22, 0x0c, 0x0f, 0xff, 0x27, 0x12, 0x14, 0xff, 0x34, 0x1f, 0x20, 0xff, 0x3b, 0x27, 0x26, 0xff, 0x4e, 0x3c, 0x39, 0xff, 0x48, 0x34, 0x30, 0xff, 0x46, 0x33, 0x2f, 0xff, 0x39, 0x24, 0x26, 0xff, 0x2a, 0x15, 0x19, 0xff, 0x29, 0x14, 0x17, 0xff, 0x2c, 0x19, 0x1c, 0xff, 0x27, 0x14, 0x17, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x25, 0x12, 0x15, 0xff, 0x28, 0x15, 0x18, 0xff, 0x22, 0x0e, 0x12, 0xff, 0x20, 0x0e, 0x10, 0xff, 0x22, 0x10, 0x12, 0xff, 0x21, 0x0e, 0x11, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x35, 0x22, 0x22, 0xff, 0x2c, 0x1a, 0x19, 0xff, 0x23, 0x11, 0x13, 0xff, 0x28, 0x15, 0x18, 0xff, 0x27, 0x14, 0x17, 0xff, 0x1c, 0x08, 0x0a, 0xff, 0x4f, 0x41, 0x41, 0xff, 0x4f, 0x41, 0x42, 0xff, 0x15, 0x01, 0x04, 0xff, 0x2a, 0x18, 0x1b, 0xff, 0x2b, 0x18, 0x1a, 0xff, 0x21, 0x0e, 0x10, 0xff, 0x27, 0x14, 0x16, 0xff, 0x27, 0x14, 0x17, 0xff, 0x22, 0x11, 0x14, 0xff, 0x1e, 0x0c, 0x11, 0xff, 0x28, 0x15, 0x1a, 0xff, 0x24, 0x12, 0x14, 0xff, 0x31, 0x1e, 0x1f, 0xff, 0x39, 0x26, 0x28, 0xff, 0x23, 0x10, 0x13, 0xff, 0x23, 0x10, 0x14, 0xff, 0x28, 0x17, 0x1a, 0xff, 0x3c, 0x2a, 0x2c, 0xff, 0x4d, 0x3b, 0x3c, 0xff, 0x36, 0x24, 0x24, 0xff, 0x28, 0x14, 0x15, 0xff, 0x34, 0x21, 0x24, 0xff, 0x28, 0x15, 0x1a, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x2d, 0x1c, 0x19, 0xff, 0x54, 0x42, 0x39, 0xff, 0x4e, 0x3c, 0x30, 0xff, 0x4d, 0x3a, 0x30, 0xff, 0x57, 0x42, 0x38, 0xff, 0x4d, 0x37, 0x30, 0xff, 0x36, 0x20, 0x1a, 0xff, 0x48, 0x33, 0x28, 0xff, 0x63, 0x4a, 0x3b, 0xff, 0x70, 0x58, 0x41, 0xff, 0x64, 0x4d, 0x3a, 0xff, 0x4a, 0x33, 0x28, 0xff, 0x5c, 0x4a, 0x3f, 0xff, 0x3b, 0x28, 0x23, 0xff, 0x30, 0x1a, 0x1a, 0xff, 0x3b, 0x27, 0x25, 0xff, 0x2a, 0x15, 0x16, 0xff, 0x2a, 0x16, 0x18, 0xff, 0x20, 0x0b, 0x12, 0xff, 0x4b, 0x34, 0x31, 0xff, 0x53, 0x3a, 0x34, 0xff, 0x3f, 0x27, 0x26, 0xff, 0x60, 0x48, 0x3f, 0xff, 0x9e, 0x8e, 0x89, 0xff, 0xf7, 0xf6, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x74, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xbd, 0xa5, 0xff, 0xa2, 0x8e, 0x5f, 0xff, 0xb8, 0xa4, 0x76, 0xff, 0x80, 0x68, 0x3f, 0xff, 0x78, 0x5d, 0x39, 0xff, 0x73, 0x58, 0x36, 0xff, 0x6e, 0x52, 0x33, 0xff, 0x6f, 0x52, 0x37, 0xff, 0x72, 0x54, 0x38, 0xff, 0x73, 0x57, 0x36, 0xff, 0x78, 0x5b, 0x38, 0xff, 0x7e, 0x5f, 0x3c, 0xff, 0x7c, 0x5c, 0x3e, 0xff, 0x7f, 0x5b, 0x41, 0xff, 0x7b, 0x59, 0x36, 0xff, 0x88, 0x60, 0x35, 0xff, 0xa8, 0x8d, 0x5f, 0xff, 0xbc, 0xae, 0x8d, 0xff, 0xeb, 0xf2, 0xe8, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xee, 0xfb, 0xf9, 0xff, 0xe7, 0xf7, 0xf5, 0xff, 0xe6, 0xf4, 0xf8, 0xff, 0xe8, 0xf4, 0xf8, 0xff, 0xe6, 0xf2, 0xf5, 0xff, 0xe2, 0xed, 0xf0, 0xff, 0xe1, 0xe9, 0xee, 0xff, 0xea, 0xf2, 0xf4, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xb8, 0xb1, 0xac, 0xff, 0x75, 0x5c, 0x53, 0xff, 0x67, 0x4e, 0x48, 0xff, 0x62, 0x44, 0x3c, 0xff, 0x69, 0x47, 0x3d, 0xff, 0x7b, 0x64, 0x59, 0xff, 0xad, 0xa3, 0x9a, 0xff, 0xb1, 0xa8, 0xa7, 0xff, 0x75, 0x67, 0x6a, 0xff, 0x47, 0x2e, 0x30, 0xff, 0x42, 0x2c, 0x2a, 0xff, 0x4b, 0x36, 0x30, 0xff, 0x3c, 0x2a, 0x22, 0xff, 0x4e, 0x43, 0x3c, 0xff, 0x68, 0x5e, 0x58, 0xff, 0x98, 0x8e, 0x88, 0xff, 0x89, 0x80, 0x79, 0xff, 0x78, 0x6b, 0x60, 0xff, 0x78, 0x68, 0x5f, 0xff, 0x35, 0x23, 0x22, 0xff, 0x2b, 0x18, 0x19, 0xff, 0x34, 0x20, 0x22, 0xff, 0x25, 0x0f, 0x13, 0xff, 0x20, 0x0b, 0x0d, 0xff, 0x1b, 0x08, 0x0a, 0xff, 0x2d, 0x1a, 0x1a, 0xff, 0x3c, 0x28, 0x26, 0xff, 0x39, 0x25, 0x24, 0xff, 0x2f, 0x1a, 0x1d, 0xff, 0x23, 0x0d, 0x11, 0xff, 0x27, 0x14, 0x17, 0xff, 0x29, 0x15, 0x18, 0xff, 0x23, 0x10, 0x13, 0xff, 0x25, 0x12, 0x15, 0xff, 0x24, 0x11, 0x14, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x21, 0x0f, 0x11, 0xff, 0x23, 0x10, 0x13, 0xff, 0x1e, 0x0a, 0x0e, 0xff, 0x2c, 0x19, 0x1d, 0xff, 0x38, 0x24, 0x25, 0xff, 0x25, 0x12, 0x11, 0xff, 0x29, 0x17, 0x19, 0xff, 0x2d, 0x1a, 0x1d, 0xff, 0x26, 0x13, 0x17, 0xff, 0x24, 0x0f, 0x11, 0xff, 0x49, 0x3b, 0x3b, 0xff, 0x44, 0x37, 0x38, 0xff, 0x21, 0x0c, 0x10, 0xff, 0x29, 0x17, 0x19, 0xff, 0x27, 0x16, 0x16, 0xff, 0x1e, 0x0c, 0x10, 0xff, 0x22, 0x10, 0x12, 0xff, 0x22, 0x11, 0x11, 0xff, 0x23, 0x13, 0x14, 0xff, 0x1e, 0x0e, 0x11, 0xff, 0x23, 0x12, 0x15, 0xff, 0x29, 0x16, 0x18, 0xff, 0x29, 0x15, 0x16, 0xff, 0x34, 0x21, 0x22, 0xff, 0x29, 0x16, 0x19, 0xff, 0x27, 0x15, 0x18, 0xff, 0x28, 0x18, 0x1b, 0xff, 0x32, 0x1f, 0x22, 0xff, 0x3e, 0x2b, 0x2e, 0xff, 0x35, 0x23, 0x24, 0xff, 0x28, 0x13, 0x14, 0xff, 0x31, 0x1d, 0x1f, 0xff, 0x22, 0x12, 0x14, 0xff, 0x18, 0x08, 0x08, 0xff, 0x42, 0x2f, 0x2b, 0xff, 0x4c, 0x39, 0x33, 0xff, 0x39, 0x26, 0x22, 0xff, 0x42, 0x2e, 0x29, 0xff, 0x4d, 0x37, 0x2f, 0xff, 0x44, 0x2e, 0x28, 0xff, 0x3d, 0x28, 0x22, 0xff, 0x50, 0x3b, 0x2e, 0xff, 0x65, 0x4d, 0x3d, 0xff, 0x5a, 0x43, 0x32, 0xff, 0x50, 0x3a, 0x31, 0xff, 0x41, 0x2c, 0x23, 0xff, 0x54, 0x41, 0x35, 0xff, 0x3f, 0x2a, 0x26, 0xff, 0x39, 0x23, 0x23, 0xff, 0x3e, 0x2a, 0x27, 0xff, 0x25, 0x10, 0x10, 0xff, 0x2b, 0x16, 0x1a, 0xff, 0x25, 0x10, 0x14, 0xff, 0x4b, 0x36, 0x30, 0xff, 0x4a, 0x31, 0x2d, 0xff, 0x35, 0x1f, 0x1f, 0xff, 0x4c, 0x35, 0x30, 0xff, 0x5f, 0x49, 0x40, 0xff, 0xd0, 0xc9, 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x63, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf9, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xee, 0xe7, 0xff, 0xb4, 0xa3, 0x7d, 0xff, 0xbf, 0xab, 0x7c, 0xff, 0x90, 0x7b, 0x4e, 0xff, 0x82, 0x6a, 0x40, 0xff, 0x7e, 0x64, 0x3f, 0xff, 0x74, 0x59, 0x36, 0xff, 0x72, 0x55, 0x36, 0xff, 0x71, 0x54, 0x37, 0xff, 0x71, 0x54, 0x37, 0xff, 0x73, 0x57, 0x37, 0xff, 0x7a, 0x5c, 0x3c, 0xff, 0x7f, 0x61, 0x40, 0xff, 0x81, 0x5f, 0x40, 0xff, 0x73, 0x51, 0x2e, 0xff, 0x6e, 0x48, 0x23, 0xff, 0xa7, 0x93, 0x72, 0xff, 0xba, 0xb4, 0x8b, 0xff, 0xbe, 0xbc, 0xa1, 0xff, 0xf5, 0xff, 0xff, 0xff, 0xec, 0xfa, 0xfe, 0xff, 0xef, 0xf6, 0xf9, 0xff, 0xec, 0xf4, 0xf5, 0xff, 0xe8, 0xf2, 0xf4, 0xff, 0xe6, 0xf1, 0xf4, 0xff, 0xe6, 0xf3, 0xf4, 0xff, 0xdd, 0xe8, 0xea, 0xff, 0xd9, 0xe2, 0xe4, 0xff, 0xf0, 0xfa, 0xfa, 0xff, 0xe7, 0xee, 0xee, 0xff, 0x8c, 0x7e, 0x81, 0xff, 0x42, 0x29, 0x29, 0xff, 0x4e, 0x37, 0x33, 0xff, 0x64, 0x4a, 0x46, 0xff, 0x76, 0x5b, 0x58, 0xff, 0x89, 0x73, 0x71, 0xff, 0x8a, 0x7a, 0x7c, 0xff, 0x57, 0x49, 0x49, 0xff, 0x41, 0x2d, 0x2c, 0xff, 0x46, 0x2c, 0x29, 0xff, 0x51, 0x3b, 0x34, 0xff, 0x60, 0x4d, 0x45, 0xff, 0x75, 0x66, 0x5f, 0xff, 0x9e, 0x97, 0x92, 0xff, 0x94, 0x86, 0x80, 0xff, 0x73, 0x64, 0x5f, 0xff, 0x77, 0x70, 0x6b, 0xff, 0x82, 0x78, 0x71, 0xff, 0x52, 0x44, 0x40, 0xff, 0x2c, 0x1f, 0x1f, 0xff, 0x42, 0x31, 0x30, 0xff, 0x35, 0x23, 0x24, 0xff, 0x21, 0x0f, 0x0f, 0xff, 0x27, 0x14, 0x13, 0xff, 0x27, 0x15, 0x18, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x24, 0x10, 0x12, 0xff, 0x2a, 0x16, 0x17, 0xff, 0x3a, 0x26, 0x29, 0xff, 0x2f, 0x1b, 0x1e, 0xff, 0x1c, 0x09, 0x0d, 0xff, 0x22, 0x10, 0x14, 0xff, 0x25, 0x12, 0x16, 0xff, 0x26, 0x11, 0x15, 0xff, 0x24, 0x11, 0x13, 0xff, 0x22, 0x0f, 0x11, 0xff, 0x21, 0x0d, 0x11, 0xff, 0x21, 0x0f, 0x11, 0xff, 0x27, 0x15, 0x16, 0xff, 0x31, 0x1f, 0x20, 0xff, 0x23, 0x10, 0x11, 0xff, 0x24, 0x11, 0x13, 0xff, 0x2d, 0x1b, 0x1d, 0xff, 0x33, 0x20, 0x23, 0xff, 0x2c, 0x19, 0x1c, 0xff, 0x2d, 0x1a, 0x1c, 0xff, 0x4e, 0x40, 0x40, 0xff, 0x45, 0x38, 0x39, 0xff, 0x1d, 0x0b, 0x0d, 0xff, 0x2b, 0x1a, 0x1b, 0xff, 0x28, 0x17, 0x18, 0xff, 0x20, 0x0d, 0x12, 0xff, 0x20, 0x0e, 0x12, 0xff, 0x1e, 0x0c, 0x0e, 0xff, 0x22, 0x12, 0x14, 0xff, 0x20, 0x10, 0x12, 0xff, 0x21, 0x10, 0x13, 0xff, 0x27, 0x15, 0x18, 0xff, 0x25, 0x14, 0x16, 0xff, 0x29, 0x18, 0x1a, 0xff, 0x2a, 0x17, 0x1a, 0xff, 0x2a, 0x17, 0x1a, 0xff, 0x29, 0x17, 0x1a, 0xff, 0x2e, 0x1c, 0x1f, 0xff, 0x2d, 0x1a, 0x1d, 0xff, 0x2b, 0x18, 0x1b, 0xff, 0x2c, 0x18, 0x1a, 0xff, 0x2f, 0x1b, 0x1d, 0xff, 0x23, 0x11, 0x13, 0xff, 0x26, 0x15, 0x16, 0xff, 0x2a, 0x18, 0x18, 0xff, 0x28, 0x17, 0x17, 0xff, 0x30, 0x1d, 0x1f, 0xff, 0x35, 0x20, 0x20, 0xff, 0x45, 0x2f, 0x2c, 0xff, 0x3f, 0x2a, 0x29, 0xff, 0x47, 0x31, 0x28, 0xff, 0x54, 0x3c, 0x2a, 0xff, 0x5b, 0x44, 0x37, 0xff, 0x55, 0x3f, 0x36, 0xff, 0x43, 0x2d, 0x24, 0xff, 0x42, 0x2a, 0x24, 0xff, 0x4d, 0x37, 0x32, 0xff, 0x33, 0x1f, 0x1e, 0xff, 0x3a, 0x26, 0x24, 0xff, 0x3e, 0x29, 0x25, 0xff, 0x21, 0x0d, 0x0e, 0xff, 0x27, 0x13, 0x18, 0xff, 0x24, 0x12, 0x13, 0xff, 0x43, 0x2d, 0x29, 0xff, 0x3d, 0x26, 0x26, 0xff, 0x37, 0x21, 0x22, 0xff, 0x3d, 0x26, 0x22, 0xff, 0x53, 0x38, 0x33, 0xff, 0xa7, 0x97, 0x8d, 0xff, 0xf7, 0xf6, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd0, 0xc7, 0xb1, 0xff, 0xb3, 0xa0, 0x72, 0xff, 0xa4, 0x90, 0x61, 0xff, 0x8e, 0x77, 0x4a, 0xff, 0x8f, 0x77, 0x4d, 0xff, 0x82, 0x69, 0x42, 0xff, 0x79, 0x5d, 0x3a, 0xff, 0x72, 0x56, 0x35, 0xff, 0x72, 0x56, 0x38, 0xff, 0x73, 0x56, 0x39, 0xff, 0x78, 0x5a, 0x3c, 0xff, 0x7b, 0x62, 0x3f, 0xff, 0x76, 0x53, 0x37, 0xff, 0x76, 0x53, 0x36, 0xff, 0x9a, 0x87, 0x5d, 0xff, 0xc2, 0xae, 0x85, 0xff, 0xdd, 0xd6, 0xad, 0xff, 0xcf, 0xcb, 0xa3, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xed, 0xfc, 0xff, 0xff, 0xe8, 0xf7, 0xf6, 0xff, 0xeb, 0xf4, 0xf6, 0xff, 0xea, 0xf5, 0xf2, 0xff, 0xdf, 0xed, 0xf2, 0xff, 0xde, 0xea, 0xf0, 0xff, 0xe6, 0xf2, 0xf0, 0xff, 0xe1, 0xec, 0xed, 0xff, 0xdd, 0xe5, 0xe6, 0xff, 0xef, 0xfc, 0xf9, 0xff, 0xce, 0xd0, 0xcc, 0xff, 0x36, 0x1d, 0x1d, 0xff, 0x4a, 0x31, 0x31, 0xff, 0x65, 0x54, 0x4f, 0xff, 0x5e, 0x4b, 0x4b, 0xff, 0x6b, 0x5c, 0x5a, 0xff, 0x7f, 0x70, 0x6e, 0xff, 0x64, 0x50, 0x52, 0xff, 0x3d, 0x2a, 0x2a, 0xff, 0x43, 0x2f, 0x2d, 0xff, 0x3f, 0x2b, 0x29, 0xff, 0x53, 0x40, 0x3c, 0xff, 0x7a, 0x6c, 0x64, 0xff, 0x86, 0x7d, 0x77, 0xff, 0x6d, 0x62, 0x60, 0xff, 0x52, 0x41, 0x3e, 0xff, 0x62, 0x50, 0x4e, 0xff, 0x73, 0x67, 0x65, 0xff, 0x3a, 0x2a, 0x2b, 0xff, 0x23, 0x0f, 0x11, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x27, 0x15, 0x17, 0xff, 0x27, 0x16, 0x16, 0xff, 0x32, 0x20, 0x21, 0xff, 0x34, 0x22, 0x23, 0xff, 0x29, 0x17, 0x19, 0xff, 0x26, 0x13, 0x15, 0xff, 0x26, 0x13, 0x16, 0xff, 0x1e, 0x0c, 0x0e, 0xff, 0x21, 0x0f, 0x12, 0xff, 0x37, 0x24, 0x27, 0xff, 0x30, 0x1d, 0x20, 0xff, 0x21, 0x0e, 0x10, 0xff, 0x24, 0x11, 0x16, 0xff, 0x23, 0x10, 0x18, 0xff, 0x23, 0x14, 0x16, 0xff, 0x21, 0x10, 0x13, 0xff, 0x24, 0x0f, 0x15, 0xff, 0x36, 0x22, 0x26, 0xff, 0x3f, 0x2d, 0x2d, 0xff, 0x27, 0x14, 0x15, 0xff, 0x23, 0x0f, 0x13, 0xff, 0x2b, 0x17, 0x1b, 0xff, 0x30, 0x1d, 0x1f, 0xff, 0x2d, 0x1a, 0x1d, 0xff, 0x34, 0x21, 0x23, 0xff, 0x36, 0x24, 0x26, 0xff, 0x3d, 0x2d, 0x30, 0xff, 0x2e, 0x1f, 0x22, 0xff, 0x1d, 0x0b, 0x0e, 0xff, 0x32, 0x1f, 0x21, 0xff, 0x26, 0x13, 0x15, 0xff, 0x22, 0x0e, 0x13, 0xff, 0x23, 0x0e, 0x13, 0xff, 0x21, 0x0f, 0x10, 0xff, 0x22, 0x11, 0x14, 0xff, 0x21, 0x10, 0x13, 0xff, 0x26, 0x15, 0x18, 0xff, 0x23, 0x12, 0x15, 0xff, 0x26, 0x16, 0x19, 0xff, 0x25, 0x14, 0x18, 0xff, 0x26, 0x13, 0x16, 0xff, 0x29, 0x15, 0x18, 0xff, 0x2b, 0x17, 0x1a, 0xff, 0x2b, 0x18, 0x1b, 0xff, 0x28, 0x15, 0x18, 0xff, 0x28, 0x15, 0x18, 0xff, 0x29, 0x16, 0x1a, 0xff, 0x29, 0x16, 0x19, 0xff, 0x29, 0x16, 0x19, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x22, 0x0f, 0x13, 0xff, 0x25, 0x15, 0x18, 0xff, 0x27, 0x16, 0x17, 0xff, 0x36, 0x22, 0x21, 0xff, 0x3e, 0x29, 0x27, 0xff, 0x35, 0x21, 0x1d, 0xff, 0x49, 0x32, 0x26, 0xff, 0x61, 0x48, 0x35, 0xff, 0x4f, 0x39, 0x2d, 0xff, 0x41, 0x2c, 0x23, 0xff, 0x4c, 0x34, 0x27, 0xff, 0x5a, 0x41, 0x37, 0xff, 0x48, 0x32, 0x2f, 0xff, 0x2c, 0x19, 0x1a, 0xff, 0x3c, 0x28, 0x23, 0xff, 0x48, 0x32, 0x2c, 0xff, 0x28, 0x15, 0x17, 0xff, 0x24, 0x12, 0x16, 0xff, 0x26, 0x15, 0x15, 0xff, 0x40, 0x29, 0x27, 0xff, 0x38, 0x22, 0x24, 0xff, 0x32, 0x1c, 0x1e, 0xff, 0x2b, 0x15, 0x15, 0xff, 0x4d, 0x35, 0x31, 0xff, 0x70, 0x5a, 0x4d, 0xff, 0xda, 0xd4, 0xd1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xf4, 0xee, 0xff, 0xc5, 0xb6, 0x91, 0xff, 0x9d, 0x8a, 0x5b, 0xff, 0x98, 0x84, 0x55, 0xff, 0x9d, 0x86, 0x58, 0xff, 0x90, 0x78, 0x4d, 0xff, 0x86, 0x6c, 0x46, 0xff, 0x7e, 0x63, 0x3f, 0xff, 0x78, 0x5d, 0x3a, 0xff, 0x75, 0x58, 0x39, 0xff, 0x79, 0x5c, 0x3e, 0xff, 0x7a, 0x5d, 0x3d, 0xff, 0x73, 0x57, 0x37, 0xff, 0x7e, 0x5e, 0x39, 0xff, 0xaf, 0x9a, 0x6d, 0xff, 0xab, 0x99, 0x74, 0xff, 0xbb, 0xb3, 0x94, 0xff, 0xaa, 0x97, 0x65, 0xff, 0xdf, 0xda, 0xc6, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xed, 0xf8, 0xfb, 0xff, 0xec, 0xf6, 0xf3, 0xff, 0xe7, 0xf3, 0xf4, 0xff, 0xe3, 0xf3, 0xf5, 0xff, 0xc4, 0xd7, 0xe7, 0xff, 0xd0, 0xde, 0xe7, 0xff, 0xea, 0xf6, 0xf2, 0xff, 0xe0, 0xea, 0xe9, 0xff, 0xe1, 0xeb, 0xeb, 0xff, 0xe1, 0xec, 0xe8, 0xff, 0xc5, 0xba, 0xb3, 0xff, 0x69, 0x46, 0x40, 0xff, 0x2b, 0x09, 0x08, 0xff, 0x3f, 0x23, 0x23, 0xff, 0x4e, 0x38, 0x38, 0xff, 0x6a, 0x57, 0x55, 0xff, 0x61, 0x50, 0x50, 0xff, 0x54, 0x42, 0x43, 0xff, 0x6f, 0x5b, 0x56, 0xff, 0x59, 0x45, 0x41, 0xff, 0x5d, 0x4c, 0x4a, 0xff, 0x75, 0x66, 0x66, 0xff, 0x64, 0x59, 0x54, 0xff, 0x68, 0x5a, 0x57, 0xff, 0x5b, 0x48, 0x49, 0xff, 0x5a, 0x48, 0x4b, 0xff, 0x60, 0x4f, 0x50, 0xff, 0x2d, 0x19, 0x1a, 0xff, 0x25, 0x11, 0x10, 0xff, 0x37, 0x22, 0x20, 0xff, 0x38, 0x25, 0x23, 0xff, 0x2f, 0x1d, 0x1d, 0xff, 0x26, 0x14, 0x16, 0xff, 0x2f, 0x1c, 0x20, 0xff, 0x26, 0x13, 0x17, 0xff, 0x25, 0x13, 0x14, 0xff, 0x32, 0x20, 0x20, 0xff, 0x2f, 0x1e, 0x1e, 0xff, 0x24, 0x13, 0x13, 0xff, 0x20, 0x0e, 0x10, 0xff, 0x24, 0x10, 0x14, 0xff, 0x3c, 0x29, 0x2b, 0xff, 0x2f, 0x1b, 0x1d, 0xff, 0x2d, 0x1a, 0x1b, 0xff, 0x37, 0x26, 0x28, 0xff, 0x31, 0x21, 0x23, 0xff, 0x29, 0x16, 0x18, 0xff, 0x28, 0x12, 0x15, 0xff, 0x31, 0x21, 0x23, 0xff, 0x3d, 0x2f, 0x30, 0xff, 0x2e, 0x1e, 0x1f, 0xff, 0x2d, 0x1d, 0x1f, 0xff, 0x34, 0x23, 0x25, 0xff, 0x34, 0x21, 0x25, 0xff, 0x33, 0x21, 0x23, 0xff, 0x3b, 0x28, 0x2a, 0xff, 0x2c, 0x19, 0x1b, 0xff, 0x31, 0x1e, 0x22, 0xff, 0x2f, 0x1d, 0x21, 0xff, 0x2e, 0x1a, 0x1e, 0xff, 0x2e, 0x19, 0x1c, 0xff, 0x21, 0x0e, 0x11, 0xff, 0x28, 0x15, 0x18, 0xff, 0x27, 0x13, 0x17, 0xff, 0x1f, 0x0c, 0x0f, 0xff, 0x21, 0x10, 0x13, 0xff, 0x23, 0x12, 0x15, 0xff, 0x26, 0x15, 0x18, 0xff, 0x25, 0x14, 0x17, 0xff, 0x27, 0x15, 0x18, 0xff, 0x26, 0x13, 0x16, 0xff, 0x28, 0x14, 0x17, 0xff, 0x28, 0x15, 0x18, 0xff, 0x28, 0x15, 0x18, 0xff, 0x27, 0x14, 0x17, 0xff, 0x27, 0x14, 0x17, 0xff, 0x27, 0x15, 0x17, 0xff, 0x27, 0x14, 0x17, 0xff, 0x25, 0x12, 0x15, 0xff, 0x26, 0x13, 0x16, 0xff, 0x23, 0x10, 0x13, 0xff, 0x23, 0x11, 0x14, 0xff, 0x29, 0x18, 0x1b, 0xff, 0x2e, 0x1c, 0x1c, 0xff, 0x34, 0x22, 0x1f, 0xff, 0x3f, 0x2c, 0x26, 0xff, 0x35, 0x21, 0x1a, 0xff, 0x47, 0x30, 0x2d, 0xff, 0x41, 0x28, 0x27, 0xff, 0x3a, 0x24, 0x1d, 0xff, 0x45, 0x2f, 0x25, 0xff, 0x4e, 0x38, 0x2e, 0xff, 0x51, 0x39, 0x31, 0xff, 0x39, 0x22, 0x20, 0xff, 0x34, 0x1f, 0x1f, 0xff, 0x4e, 0x36, 0x2f, 0xff, 0x44, 0x2b, 0x24, 0xff, 0x29, 0x16, 0x15, 0xff, 0x28, 0x14, 0x16, 0xff, 0x2d, 0x1a, 0x1b, 0xff, 0x36, 0x21, 0x1f, 0xff, 0x30, 0x1c, 0x1e, 0xff, 0x30, 0x1b, 0x1e, 0xff, 0x27, 0x12, 0x17, 0xff, 0x50, 0x3e, 0x34, 0xff, 0x4f, 0x36, 0x2d, 0xff, 0x95, 0x87, 0x86, 0xff, 0xf9, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1, 0xda, 0xca, 0xff, 0xbf, 0xac, 0x80, 0xff, 0xba, 0xa6, 0x77, 0xff, 0xaa, 0x95, 0x66, 0xff, 0x98, 0x81, 0x52, 0xff, 0x91, 0x79, 0x4e, 0xff, 0x89, 0x70, 0x48, 0xff, 0x82, 0x67, 0x42, 0xff, 0x7b, 0x5f, 0x3c, 0xff, 0x79, 0x5d, 0x3c, 0xff, 0x79, 0x5b, 0x3d, 0xff, 0x7a, 0x5c, 0x3c, 0xff, 0x74, 0x53, 0x34, 0xff, 0x9a, 0x84, 0x57, 0xff, 0x99, 0x82, 0x50, 0xff, 0xa5, 0x8d, 0x6c, 0xff, 0xae, 0xa0, 0x7a, 0xff, 0xba, 0xad, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xfc, 0xf7, 0xff, 0xed, 0xf7, 0xf7, 0xff, 0xea, 0xf3, 0xf7, 0xff, 0xe9, 0xf6, 0xf5, 0xff, 0xda, 0xeb, 0xf0, 0xff, 0xb2, 0xc7, 0xdf, 0xff, 0xcf, 0xdc, 0xea, 0xff, 0xea, 0xf4, 0xef, 0xff, 0xda, 0xe3, 0xe2, 0xff, 0xe3, 0xec, 0xeb, 0xff, 0xe7, 0xf3, 0xed, 0xff, 0xad, 0x9c, 0x91, 0xff, 0x6a, 0x42, 0x37, 0xff, 0x50, 0x36, 0x36, 0xff, 0x4e, 0x36, 0x39, 0xff, 0x56, 0x40, 0x3e, 0xff, 0x61, 0x4a, 0x4c, 0xff, 0x3b, 0x27, 0x29, 0xff, 0x39, 0x2a, 0x2a, 0xff, 0x3d, 0x2b, 0x27, 0xff, 0x62, 0x52, 0x4f, 0xff, 0x78, 0x6c, 0x6c, 0xff, 0x69, 0x5a, 0x5d, 0xff, 0x4d, 0x39, 0x3c, 0xff, 0x45, 0x31, 0x34, 0xff, 0x62, 0x51, 0x55, 0xff, 0x56, 0x45, 0x49, 0xff, 0x28, 0x12, 0x16, 0xff, 0x1d, 0x07, 0x0a, 0xff, 0x27, 0x13, 0x14, 0xff, 0x23, 0x10, 0x11, 0xff, 0x29, 0x17, 0x19, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x2b, 0x17, 0x1b, 0xff, 0x27, 0x14, 0x17, 0xff, 0x26, 0x12, 0x15, 0xff, 0x29, 0x15, 0x19, 0xff, 0x2b, 0x18, 0x1a, 0xff, 0x2f, 0x1c, 0x1e, 0xff, 0x2e, 0x1a, 0x1d, 0xff, 0x2c, 0x18, 0x1b, 0xff, 0x21, 0x0d, 0x11, 0xff, 0x39, 0x27, 0x2b, 0xff, 0x3d, 0x2b, 0x30, 0xff, 0x2b, 0x18, 0x1d, 0xff, 0x39, 0x26, 0x2a, 0xff, 0x35, 0x23, 0x2a, 0xff, 0x31, 0x20, 0x26, 0xff, 0x35, 0x24, 0x28, 0xff, 0x31, 0x22, 0x27, 0xff, 0x32, 0x23, 0x29, 0xff, 0x3f, 0x30, 0x36, 0xff, 0x42, 0x34, 0x39, 0xff, 0x3f, 0x31, 0x36, 0xff, 0x3b, 0x2b, 0x31, 0xff, 0x39, 0x29, 0x2e, 0xff, 0x35, 0x25, 0x28, 0xff, 0x2d, 0x1b, 0x1d, 0xff, 0x38, 0x27, 0x29, 0xff, 0x36, 0x27, 0x29, 0xff, 0x25, 0x13, 0x16, 0xff, 0x26, 0x11, 0x16, 0xff, 0x27, 0x13, 0x17, 0xff, 0x2f, 0x1d, 0x1e, 0xff, 0x2a, 0x17, 0x19, 0xff, 0x21, 0x0d, 0x12, 0xff, 0x22, 0x10, 0x14, 0xff, 0x24, 0x15, 0x17, 0xff, 0x2a, 0x1a, 0x1d, 0xff, 0x28, 0x18, 0x1b, 0xff, 0x26, 0x13, 0x16, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x2a, 0x18, 0x1b, 0xff, 0x26, 0x15, 0x18, 0xff, 0x24, 0x13, 0x16, 0xff, 0x24, 0x13, 0x16, 0xff, 0x25, 0x14, 0x16, 0xff, 0x24, 0x13, 0x16, 0xff, 0x23, 0x12, 0x15, 0xff, 0x25, 0x12, 0x15, 0xff, 0x25, 0x12, 0x15, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x27, 0x14, 0x17, 0xff, 0x2f, 0x1e, 0x1f, 0xff, 0x31, 0x1e, 0x1f, 0xff, 0x2b, 0x19, 0x19, 0xff, 0x36, 0x23, 0x23, 0xff, 0x3e, 0x29, 0x28, 0xff, 0x2b, 0x14, 0x16, 0xff, 0x36, 0x1e, 0x21, 0xff, 0x30, 0x19, 0x19, 0xff, 0x41, 0x2d, 0x25, 0xff, 0x5a, 0x44, 0x39, 0xff, 0x48, 0x31, 0x27, 0xff, 0x3d, 0x27, 0x22, 0xff, 0x37, 0x21, 0x20, 0xff, 0x49, 0x2f, 0x2a, 0xff, 0x3a, 0x21, 0x1a, 0xff, 0x2d, 0x1b, 0x1b, 0xff, 0x24, 0x11, 0x14, 0xff, 0x2e, 0x19, 0x1b, 0xff, 0x39, 0x23, 0x23, 0xff, 0x2a, 0x19, 0x1c, 0xff, 0x2c, 0x19, 0x1c, 0xff, 0x33, 0x1e, 0x1e, 0xff, 0x3c, 0x27, 0x26, 0xff, 0x3a, 0x23, 0x1e, 0xff, 0x59, 0x47, 0x47, 0xff, 0xdb, 0xd7, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf9, 0xf7, 0xff, 0xc0, 0xb4, 0x95, 0xff, 0xa0, 0x8c, 0x5c, 0xff, 0xad, 0x99, 0x6a, 0xff, 0xb8, 0xa5, 0x75, 0xff, 0xb0, 0x9a, 0x6b, 0xff, 0x95, 0x7d, 0x51, 0xff, 0x85, 0x6e, 0x43, 0xff, 0x83, 0x69, 0x42, 0xff, 0x7a, 0x5e, 0x3b, 0xff, 0x7a, 0x5e, 0x3e, 0xff, 0x77, 0x5a, 0x3b, 0xff, 0x77, 0x56, 0x35, 0xff, 0x8c, 0x6c, 0x49, 0xff, 0xa2, 0x83, 0x5a, 0xff, 0x73, 0x4b, 0x20, 0xff, 0xac, 0x99, 0x6c, 0xff, 0xdf, 0xde, 0xb5, 0xff, 0xe6, 0xf2, 0xe8, 0xff, 0xec, 0xfc, 0xfe, 0xff, 0xee, 0xf9, 0xf7, 0xff, 0xea, 0xf4, 0xf5, 0xff, 0xe6, 0xf2, 0xf6, 0xff, 0xe4, 0xef, 0xf3, 0xff, 0xd1, 0xe0, 0xe8, 0xff, 0xb1, 0xc4, 0xdc, 0xff, 0xd4, 0xdf, 0xe8, 0xff, 0xe9, 0xf3, 0xee, 0xff, 0xda, 0xe5, 0xe4, 0xff, 0xdf, 0xe7, 0xe6, 0xff, 0xf1, 0xfa, 0xf6, 0xff, 0x9f, 0x8e, 0x84, 0xff, 0x4f, 0x2c, 0x22, 0xff, 0x41, 0x2c, 0x2f, 0xff, 0x42, 0x2b, 0x2f, 0xff, 0x50, 0x34, 0x34, 0xff, 0x38, 0x1b, 0x1f, 0xff, 0x2d, 0x16, 0x1a, 0xff, 0x4f, 0x3e, 0x3e, 0xff, 0x5a, 0x48, 0x49, 0xff, 0x74, 0x64, 0x66, 0xff, 0x51, 0x42, 0x45, 0xff, 0x35, 0x24, 0x28, 0xff, 0x38, 0x21, 0x26, 0xff, 0x50, 0x3e, 0x43, 0xff, 0x51, 0x45, 0x49, 0xff, 0x25, 0x13, 0x16, 0xff, 0x2e, 0x17, 0x16, 0xff, 0x37, 0x22, 0x22, 0xff, 0x26, 0x12, 0x15, 0xff, 0x1c, 0x09, 0x0e, 0xff, 0x1e, 0x0d, 0x11, 0xff, 0x2a, 0x19, 0x1c, 0xff, 0x30, 0x1f, 0x21, 0xff, 0x38, 0x26, 0x28, 0xff, 0x38, 0x26, 0x28, 0xff, 0x32, 0x1f, 0x24, 0xff, 0x30, 0x1c, 0x24, 0xff, 0x32, 0x1e, 0x25, 0xff, 0x32, 0x1f, 0x25, 0xff, 0x30, 0x1d, 0x21, 0xff, 0x32, 0x1f, 0x24, 0xff, 0x37, 0x26, 0x2d, 0xff, 0x3a, 0x2b, 0x36, 0xff, 0x34, 0x25, 0x33, 0xff, 0x3b, 0x2d, 0x40, 0xff, 0x39, 0x2d, 0x43, 0xff, 0x39, 0x2f, 0x44, 0xff, 0x39, 0x2f, 0x42, 0xff, 0x32, 0x26, 0x3a, 0xff, 0x3b, 0x2e, 0x49, 0xff, 0x4f, 0x40, 0x5b, 0xff, 0x3d, 0x2f, 0x42, 0xff, 0x43, 0x36, 0x44, 0xff, 0x42, 0x36, 0x3f, 0xff, 0x35, 0x27, 0x2f, 0xff, 0x3f, 0x2e, 0x37, 0xff, 0x36, 0x24, 0x2c, 0xff, 0x30, 0x22, 0x24, 0xff, 0x2e, 0x21, 0x23, 0xff, 0x2a, 0x18, 0x1b, 0xff, 0x25, 0x12, 0x15, 0xff, 0x2a, 0x17, 0x1a, 0xff, 0x34, 0x23, 0x24, 0xff, 0x24, 0x12, 0x14, 0xff, 0x24, 0x12, 0x16, 0xff, 0x25, 0x14, 0x17, 0xff, 0x2e, 0x1c, 0x1f, 0xff, 0x2d, 0x1b, 0x1f, 0xff, 0x28, 0x16, 0x19, 0xff, 0x28, 0x15, 0x18, 0xff, 0x33, 0x20, 0x23, 0xff, 0x28, 0x17, 0x1a, 0xff, 0x20, 0x10, 0x13, 0xff, 0x25, 0x14, 0x17, 0xff, 0x25, 0x14, 0x17, 0xff, 0x21, 0x11, 0x13, 0xff, 0x20, 0x0f, 0x12, 0xff, 0x27, 0x15, 0x18, 0xff, 0x24, 0x11, 0x14, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x26, 0x13, 0x16, 0xff, 0x2a, 0x17, 0x1a, 0xff, 0x28, 0x14, 0x17, 0xff, 0x25, 0x12, 0x16, 0xff, 0x25, 0x13, 0x17, 0xff, 0x1d, 0x0a, 0x0e, 0xff, 0x20, 0x0d, 0x0e, 0xff, 0x3b, 0x2d, 0x27, 0xff, 0x43, 0x36, 0x2b, 0xff, 0x4e, 0x3e, 0x33, 0xff, 0x46, 0x32, 0x2b, 0xff, 0x45, 0x2f, 0x27, 0xff, 0x49, 0x33, 0x28, 0xff, 0x3c, 0x26, 0x1f, 0xff, 0x32, 0x1c, 0x1b, 0xff, 0x45, 0x2e, 0x2a, 0xff, 0x48, 0x31, 0x29, 0xff, 0x2a, 0x18, 0x18, 0xff, 0x1f, 0x0c, 0x10, 0xff, 0x2d, 0x17, 0x19, 0xff, 0x3b, 0x26, 0x27, 0xff, 0x2a, 0x17, 0x1b, 0xff, 0x2d, 0x1a, 0x1d, 0xff, 0x33, 0x1e, 0x1c, 0xff, 0x45, 0x2d, 0x2a, 0xff, 0x3a, 0x22, 0x1e, 0xff, 0x33, 0x1e, 0x1b, 0xff, 0xa4, 0x9a, 0x9c, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0xe7, 0xde, 0xff, 0xab, 0x9a, 0x71, 0xff, 0xa3, 0x8f, 0x5f, 0xff, 0x9e, 0x8b, 0x5a, 0xff, 0x9f, 0x8b, 0x5b, 0xff, 0xab, 0x95, 0x67, 0xff, 0xaa, 0x92, 0x65, 0xff, 0x98, 0x81, 0x55, 0xff, 0x7f, 0x68, 0x3d, 0xff, 0x79, 0x5c, 0x37, 0xff, 0x79, 0x5c, 0x3c, 0xff, 0x78, 0x5c, 0x3b, 0xff, 0x75, 0x53, 0x32, 0xff, 0x91, 0x76, 0x4c, 0xff, 0xa7, 0x93, 0x66, 0xff, 0x98, 0x80, 0x5d, 0xff, 0xb7, 0xb3, 0x93, 0xff, 0xf4, 0xff, 0xf9, 0xff, 0xee, 0xff, 0xff, 0xff, 0xee, 0xf9, 0xf8, 0xff, 0xeb, 0xf5, 0xf8, 0xff, 0xe7, 0xf1, 0xf3, 0xff, 0xe6, 0xf2, 0xf3, 0xff, 0xd6, 0xe5, 0xee, 0xff, 0xc5, 0xd7, 0xe6, 0xff, 0xbd, 0xce, 0xdc, 0xff, 0xe2, 0xeb, 0xed, 0xff, 0xe8, 0xf4, 0xf1, 0xff, 0xd6, 0xe1, 0xe0, 0xff, 0xdf, 0xe5, 0xe1, 0xff, 0xf2, 0xfa, 0xf5, 0xff, 0xa5, 0x95, 0x8e, 0xff, 0x49, 0x28, 0x22, 0xff, 0x2b, 0x0f, 0x15, 0xff, 0x2e, 0x12, 0x15, 0xff, 0x38, 0x1f, 0x1f, 0xff, 0x4e, 0x37, 0x39, 0xff, 0x5c, 0x49, 0x4c, 0xff, 0x5b, 0x4c, 0x4c, 0xff, 0x51, 0x3f, 0x42, 0xff, 0x3c, 0x29, 0x2c, 0xff, 0x3e, 0x2a, 0x2e, 0xff, 0x47, 0x34, 0x39, 0xff, 0x51, 0x40, 0x43, 0xff, 0x40, 0x31, 0x34, 0xff, 0x17, 0x07, 0x0c, 0xff, 0x1e, 0x0a, 0x0d, 0xff, 0x37, 0x23, 0x1f, 0xff, 0x3a, 0x28, 0x25, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x29, 0x19, 0x1d, 0xff, 0x3c, 0x2f, 0x31, 0xff, 0x3c, 0x2e, 0x2f, 0xff, 0x3d, 0x2f, 0x30, 0xff, 0x3d, 0x2e, 0x33, 0xff, 0x38, 0x28, 0x2e, 0xff, 0x37, 0x25, 0x2d, 0xff, 0x35, 0x21, 0x2a, 0xff, 0x35, 0x24, 0x2d, 0xff, 0x34, 0x25, 0x31, 0xff, 0x38, 0x26, 0x32, 0xff, 0x3e, 0x2d, 0x3b, 0xff, 0x3b, 0x30, 0x46, 0xff, 0x3d, 0x39, 0x56, 0xff, 0x48, 0x44, 0x67, 0xff, 0x4a, 0x47, 0x6d, 0xff, 0x48, 0x47, 0x6f, 0xff, 0x46, 0x43, 0x6f, 0xff, 0x49, 0x46, 0x6f, 0xff, 0x47, 0x44, 0x6e, 0xff, 0x57, 0x57, 0x86, 0xff, 0x5e, 0x5d, 0x8a, 0xff, 0x48, 0x43, 0x66, 0xff, 0x50, 0x4a, 0x6a, 0xff, 0x5a, 0x54, 0x6f, 0xff, 0x4b, 0x44, 0x55, 0xff, 0x3c, 0x30, 0x3c, 0xff, 0x39, 0x28, 0x32, 0xff, 0x30, 0x1f, 0x26, 0xff, 0x36, 0x25, 0x28, 0xff, 0x2d, 0x18, 0x1e, 0xff, 0x2b, 0x16, 0x1a, 0xff, 0x30, 0x1e, 0x1f, 0xff, 0x2d, 0x1c, 0x1e, 0xff, 0x21, 0x10, 0x13, 0xff, 0x25, 0x14, 0x16, 0xff, 0x2d, 0x1b, 0x1c, 0xff, 0x2f, 0x1c, 0x1f, 0xff, 0x25, 0x11, 0x15, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x2a, 0x18, 0x1b, 0xff, 0x2b, 0x1b, 0x1e, 0xff, 0x25, 0x14, 0x17, 0xff, 0x24, 0x13, 0x16, 0xff, 0x24, 0x13, 0x16, 0xff, 0x23, 0x12, 0x15, 0xff, 0x20, 0x0f, 0x12, 0xff, 0x20, 0x0f, 0x12, 0xff, 0x26, 0x14, 0x17, 0xff, 0x25, 0x12, 0x15, 0xff, 0x23, 0x10, 0x13, 0xff, 0x27, 0x14, 0x17, 0xff, 0x24, 0x11, 0x14, 0xff, 0x24, 0x10, 0x14, 0xff, 0x1b, 0x0a, 0x0e, 0xff, 0x1f, 0x10, 0x11, 0xff, 0x3d, 0x2a, 0x2a, 0xff, 0x57, 0x47, 0x44, 0xff, 0x57, 0x4f, 0x47, 0xff, 0x4b, 0x44, 0x3c, 0xff, 0x3a, 0x2b, 0x26, 0xff, 0x2d, 0x15, 0x14, 0xff, 0x40, 0x29, 0x25, 0xff, 0x45, 0x30, 0x28, 0xff, 0x39, 0x22, 0x1e, 0xff, 0x36, 0x20, 0x22, 0xff, 0x39, 0x25, 0x21, 0xff, 0x4b, 0x36, 0x2b, 0xff, 0x2c, 0x1a, 0x17, 0xff, 0x17, 0x02, 0x07, 0xff, 0x34, 0x1e, 0x20, 0xff, 0x36, 0x21, 0x23, 0xff, 0x2d, 0x17, 0x1b, 0xff, 0x2f, 0x1a, 0x1e, 0xff, 0x32, 0x1b, 0x1f, 0xff, 0x5b, 0x42, 0x34, 0xff, 0x3b, 0x20, 0x1e, 0xff, 0x30, 0x19, 0x1b, 0xff, 0x80, 0x72, 0x6e, 0xff, 0xf4, 0xf3, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xd5, 0xcc, 0xb7, 0xff, 0xa0, 0x8b, 0x5b, 0xff, 0xa4, 0x8f, 0x5f, 0xff, 0xa6, 0x91, 0x61, 0xff, 0xa4, 0x8f, 0x5f, 0xff, 0x9d, 0x85, 0x57, 0xff, 0x9a, 0x83, 0x55, 0xff, 0x9f, 0x87, 0x5b, 0xff, 0x95, 0x7d, 0x52, 0xff, 0x89, 0x70, 0x45, 0xff, 0x83, 0x64, 0x3d, 0xff, 0x6f, 0x4f, 0x2b, 0xff, 0x89, 0x71, 0x4a, 0xff, 0x9b, 0x83, 0x5f, 0xff, 0x79, 0x62, 0x40, 0xff, 0xbe, 0xb1, 0x90, 0xff, 0xf2, 0xf7, 0xe5, 0xff, 0xe5, 0xf3, 0xf2, 0xff, 0xe8, 0xf6, 0xf6, 0xff, 0xed, 0xfa, 0xf9, 0xff, 0xe7, 0xf3, 0xf4, 0xff, 0xe5, 0xf0, 0xf1, 0xff, 0xe5, 0xf1, 0xf2, 0xff, 0xcb, 0xde, 0xec, 0xff, 0xbc, 0xcf, 0xe0, 0xff, 0xd0, 0xd9, 0xdc, 0xff, 0xe9, 0xf2, 0xf0, 0xff, 0xe3, 0xf2, 0xf1, 0xff, 0xd8, 0xe0, 0xdd, 0xff, 0xd5, 0xd6, 0xce, 0xff, 0xda, 0xe3, 0xdc, 0xff, 0xcb, 0xc5, 0xc0, 0xff, 0x68, 0x49, 0x46, 0xff, 0x3e, 0x21, 0x21, 0xff, 0x55, 0x40, 0x40, 0xff, 0x5f, 0x4a, 0x4c, 0xff, 0x5d, 0x48, 0x4c, 0xff, 0x50, 0x3b, 0x3e, 0xff, 0x39, 0x25, 0x28, 0xff, 0x3e, 0x29, 0x2c, 0xff, 0x3d, 0x29, 0x2c, 0xff, 0x41, 0x2e, 0x32, 0xff, 0x47, 0x34, 0x38, 0xff, 0x3b, 0x27, 0x2a, 0xff, 0x24, 0x10, 0x13, 0xff, 0x25, 0x10, 0x14, 0xff, 0x2f, 0x19, 0x1d, 0xff, 0x27, 0x13, 0x15, 0xff, 0x29, 0x1a, 0x1b, 0xff, 0x3d, 0x2e, 0x34, 0xff, 0x47, 0x3c, 0x42, 0xff, 0x3c, 0x31, 0x3a, 0xff, 0x30, 0x21, 0x2f, 0xff, 0x31, 0x23, 0x34, 0xff, 0x2b, 0x20, 0x34, 0xff, 0x2e, 0x22, 0x38, 0xff, 0x37, 0x28, 0x3c, 0xff, 0x38, 0x2a, 0x39, 0xff, 0x39, 0x2f, 0x40, 0xff, 0x41, 0x38, 0x54, 0xff, 0x46, 0x3f, 0x61, 0xff, 0x50, 0x4c, 0x74, 0xff, 0x56, 0x54, 0x87, 0xff, 0x60, 0x63, 0x96, 0xff, 0x66, 0x6c, 0x9d, 0xff, 0x66, 0x6d, 0xa0, 0xff, 0x65, 0x6e, 0xa2, 0xff, 0x68, 0x70, 0xa5, 0xff, 0x6d, 0x72, 0xa6, 0xff, 0x6a, 0x72, 0xa5, 0xff, 0x70, 0x7b, 0xa9, 0xff, 0x6c, 0x77, 0xa3, 0xff, 0x6d, 0x72, 0xa1, 0xff, 0x72, 0x78, 0xa3, 0xff, 0x74, 0x79, 0xa4, 0xff, 0x6d, 0x6c, 0x94, 0xff, 0x49, 0x45, 0x60, 0xff, 0x3c, 0x32, 0x41, 0xff, 0x34, 0x23, 0x2e, 0xff, 0x38, 0x26, 0x2d, 0xff, 0x34, 0x21, 0x27, 0xff, 0x31, 0x1f, 0x24, 0xff, 0x36, 0x23, 0x28, 0xff, 0x2d, 0x19, 0x1e, 0xff, 0x2c, 0x18, 0x1c, 0xff, 0x31, 0x1e, 0x22, 0xff, 0x34, 0x21, 0x24, 0xff, 0x2b, 0x18, 0x1a, 0xff, 0x2a, 0x16, 0x1a, 0xff, 0x2e, 0x1a, 0x1f, 0xff, 0x2a, 0x18, 0x1c, 0xff, 0x27, 0x16, 0x19, 0xff, 0x23, 0x13, 0x15, 0xff, 0x25, 0x14, 0x17, 0xff, 0x24, 0x12, 0x16, 0xff, 0x20, 0x0f, 0x12, 0xff, 0x20, 0x0f, 0x12, 0xff, 0x22, 0x11, 0x14, 0xff, 0x25, 0x13, 0x16, 0xff, 0x27, 0x14, 0x17, 0xff, 0x26, 0x13, 0x16, 0xff, 0x27, 0x14, 0x17, 0xff, 0x27, 0x14, 0x17, 0xff, 0x2a, 0x1a, 0x19, 0xff, 0x3a, 0x2d, 0x2b, 0xff, 0x43, 0x37, 0x34, 0xff, 0x54, 0x46, 0x42, 0xff, 0x51, 0x42, 0x3e, 0xff, 0x2e, 0x1f, 0x20, 0xff, 0x1a, 0x09, 0x10, 0xff, 0x19, 0x03, 0x0a, 0xff, 0x3a, 0x23, 0x22, 0xff, 0x4a, 0x34, 0x2d, 0xff, 0x48, 0x34, 0x2d, 0xff, 0x38, 0x24, 0x22, 0xff, 0x2a, 0x16, 0x17, 0xff, 0x39, 0x25, 0x1f, 0xff, 0x44, 0x2f, 0x27, 0xff, 0x23, 0x11, 0x12, 0xff, 0x1a, 0x07, 0x0b, 0xff, 0x34, 0x21, 0x22, 0xff, 0x2e, 0x1a, 0x1d, 0xff, 0x2e, 0x19, 0x1c, 0xff, 0x2c, 0x18, 0x1a, 0xff, 0x35, 0x20, 0x20, 0xff, 0x49, 0x30, 0x2a, 0xff, 0x2b, 0x14, 0x15, 0xff, 0x29, 0x16, 0x1b, 0xff, 0x5b, 0x48, 0x41, 0xff, 0xd9, 0xd4, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf4, 0xff, 0xbb, 0xac, 0x8b, 0xff, 0xa0, 0x89, 0x59, 0xff, 0xa5, 0x8e, 0x5e, 0xff, 0xa5, 0x8f, 0x5f, 0xff, 0xa5, 0x8f, 0x5f, 0xff, 0xa2, 0x8b, 0x5d, 0xff, 0x97, 0x7f, 0x52, 0xff, 0x8d, 0x74, 0x49, 0xff, 0x8d, 0x75, 0x4b, 0xff, 0x93, 0x7a, 0x4e, 0xff, 0x96, 0x79, 0x50, 0xff, 0x8a, 0x6d, 0x45, 0xff, 0xb5, 0xa0, 0x76, 0xff, 0x98, 0x80, 0x57, 0xff, 0x8c, 0x6b, 0x3a, 0xff, 0xda, 0xd6, 0xb9, 0xff, 0xe6, 0xf4, 0xe4, 0xff, 0xe7, 0xf2, 0xf3, 0xff, 0xed, 0xf9, 0xfc, 0xff, 0xea, 0xf6, 0xf6, 0xff, 0xe7, 0xf3, 0xf3, 0xff, 0xe5, 0xf0, 0xf1, 0xff, 0xe0, 0xee, 0xf1, 0xff, 0xca, 0xdb, 0xea, 0xff, 0xbb, 0xca, 0xd8, 0xff, 0xd8, 0xe1, 0xdd, 0xff, 0xed, 0xf4, 0xf2, 0xff, 0xde, 0xed, 0xec, 0xff, 0xe0, 0xe3, 0xe0, 0xff, 0xb5, 0xb0, 0xac, 0xff, 0xb6, 0xb9, 0xb2, 0xff, 0xdf, 0xde, 0xdc, 0xff, 0x91, 0x80, 0x80, 0xff, 0x5e, 0x46, 0x44, 0xff, 0x64, 0x4e, 0x51, 0xff, 0x51, 0x3c, 0x41, 0xff, 0x3f, 0x2a, 0x2f, 0xff, 0x3a, 0x23, 0x29, 0xff, 0x39, 0x24, 0x27, 0xff, 0x37, 0x20, 0x25, 0xff, 0x38, 0x22, 0x26, 0xff, 0x32, 0x1e, 0x20, 0xff, 0x2d, 0x1b, 0x1d, 0xff, 0x27, 0x12, 0x17, 0xff, 0x26, 0x0f, 0x13, 0xff, 0x29, 0x14, 0x16, 0xff, 0x2e, 0x1c, 0x1f, 0xff, 0x29, 0x15, 0x1e, 0xff, 0x3c, 0x2a, 0x35, 0xff, 0x52, 0x44, 0x51, 0xff, 0x31, 0x26, 0x37, 0xff, 0x30, 0x26, 0x41, 0xff, 0x3f, 0x39, 0x60, 0xff, 0x42, 0x3f, 0x6a, 0xff, 0x45, 0x44, 0x71, 0xff, 0x44, 0x43, 0x6d, 0xff, 0x40, 0x3d, 0x67, 0xff, 0x45, 0x44, 0x6b, 0xff, 0x46, 0x46, 0x6f, 0xff, 0x47, 0x48, 0x77, 0xff, 0x59, 0x63, 0x99, 0xff, 0x69, 0x75, 0xb0, 0xff, 0x72, 0x7a, 0xb2, 0xff, 0x80, 0x88, 0xb5, 0xff, 0x88, 0x91, 0xba, 0xff, 0x80, 0x8c, 0xba, 0xff, 0x7f, 0x8d, 0xba, 0xff, 0x88, 0x96, 0xbf, 0xff, 0x93, 0x9d, 0xc4, 0xff, 0x8b, 0x98, 0xbe, 0xff, 0x89, 0x97, 0xb8, 0xff, 0x89, 0x94, 0xb6, 0xff, 0x8b, 0x94, 0xb8, 0xff, 0x8a, 0x98, 0xb6, 0xff, 0x82, 0x91, 0xb5, 0xff, 0x7a, 0x82, 0xb0, 0xff, 0x67, 0x6c, 0x9b, 0xff, 0x52, 0x52, 0x77, 0xff, 0x39, 0x32, 0x48, 0xff, 0x33, 0x24, 0x32, 0xff, 0x3a, 0x2b, 0x31, 0xff, 0x35, 0x26, 0x2c, 0xff, 0x31, 0x20, 0x29, 0xff, 0x36, 0x26, 0x2d, 0xff, 0x3a, 0x28, 0x2d, 0xff, 0x32, 0x20, 0x24, 0xff, 0x2b, 0x19, 0x1b, 0xff, 0x2b, 0x19, 0x1d, 0xff, 0x2f, 0x1d, 0x22, 0xff, 0x2d, 0x1b, 0x1f, 0xff, 0x2b, 0x1a, 0x1d, 0xff, 0x28, 0x17, 0x1a, 0xff, 0x26, 0x15, 0x18, 0xff, 0x26, 0x15, 0x18, 0xff, 0x20, 0x10, 0x12, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x23, 0x12, 0x15, 0xff, 0x22, 0x11, 0x14, 0xff, 0x24, 0x12, 0x15, 0xff, 0x26, 0x12, 0x15, 0xff, 0x25, 0x12, 0x15, 0xff, 0x28, 0x15, 0x18, 0xff, 0x2c, 0x18, 0x1c, 0xff, 0x2e, 0x1e, 0x1e, 0xff, 0x37, 0x29, 0x29, 0xff, 0x2a, 0x1d, 0x1d, 0xff, 0x1c, 0x0b, 0x0c, 0xff, 0x10, 0x00, 0x04, 0xff, 0x16, 0x03, 0x09, 0xff, 0x1b, 0x07, 0x08, 0xff, 0x44, 0x31, 0x2a, 0xff, 0x4d, 0x39, 0x32, 0xff, 0x36, 0x21, 0x1f, 0xff, 0x29, 0x15, 0x12, 0xff, 0x2e, 0x19, 0x18, 0xff, 0x32, 0x1e, 0x1c, 0xff, 0x4b, 0x37, 0x31, 0xff, 0x40, 0x2c, 0x27, 0xff, 0x13, 0x03, 0x06, 0xff, 0x27, 0x13, 0x17, 0xff, 0x2b, 0x18, 0x1a, 0xff, 0x2b, 0x18, 0x1b, 0xff, 0x2f, 0x1a, 0x1d, 0xff, 0x2c, 0x18, 0x18, 0xff, 0x44, 0x2d, 0x26, 0xff, 0x3a, 0x1f, 0x21, 0xff, 0x23, 0x13, 0x14, 0xff, 0x29, 0x18, 0x1b, 0xff, 0x31, 0x19, 0x1a, 0xff, 0x9f, 0x93, 0x92, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x3b, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xe7, 0xdd, 0xff, 0xa7, 0x94, 0x69, 0xff, 0x9e, 0x88, 0x58, 0xff, 0xa2, 0x8c, 0x5c, 0xff, 0xa2, 0x8c, 0x5c, 0xff, 0xa4, 0x8e, 0x5e, 0xff, 0xa3, 0x8c, 0x5e, 0xff, 0x9d, 0x84, 0x57, 0xff, 0x95, 0x7b, 0x50, 0xff, 0x8d, 0x73, 0x49, 0xff, 0x86, 0x68, 0x40, 0xff, 0x74, 0x59, 0x33, 0xff, 0x9a, 0x83, 0x5b, 0xff, 0xae, 0x94, 0x6b, 0xff, 0x81, 0x61, 0x38, 0xff, 0x9a, 0x79, 0x48, 0xff, 0xd0, 0xce, 0xaf, 0xff, 0xe0, 0xf7, 0xef, 0xff, 0xed, 0xf8, 0xf9, 0xff, 0xeb, 0xf6, 0xfa, 0xff, 0xe7, 0xf4, 0xf6, 0xff, 0xe6, 0xf2, 0xf3, 0xff, 0xe1, 0xef, 0xef, 0xff, 0xdd, 0xeb, 0xf2, 0xff, 0xc6, 0xd4, 0xdf, 0xff, 0xca, 0xd5, 0xdd, 0xff, 0xe0, 0xeb, 0xeb, 0xff, 0xe2, 0xec, 0xeb, 0xff, 0xdf, 0xea, 0xe8, 0xff, 0xc9, 0xcb, 0xc8, 0xff, 0xb3, 0xae, 0xae, 0xff, 0xb6, 0xb3, 0xb1, 0xff, 0xb6, 0xb2, 0xb4, 0xff, 0x87, 0x7d, 0x80, 0xff, 0x4b, 0x36, 0x36, 0xff, 0x3d, 0x27, 0x2c, 0xff, 0x43, 0x2c, 0x30, 0xff, 0x42, 0x2b, 0x31, 0xff, 0x3b, 0x25, 0x2d, 0xff, 0x35, 0x21, 0x26, 0xff, 0x34, 0x1e, 0x23, 0xff, 0x37, 0x21, 0x25, 0xff, 0x34, 0x1f, 0x21, 0xff, 0x28, 0x14, 0x17, 0xff, 0x24, 0x11, 0x15, 0xff, 0x28, 0x12, 0x16, 0xff, 0x2a, 0x16, 0x17, 0xff, 0x2a, 0x1a, 0x1e, 0xff, 0x2f, 0x20, 0x2d, 0xff, 0x42, 0x36, 0x47, 0xff, 0x30, 0x29, 0x3d, 0xff, 0x2c, 0x28, 0x44, 0xff, 0x40, 0x3d, 0x69, 0xff, 0x4f, 0x51, 0x8b, 0xff, 0x5b, 0x61, 0x9c, 0xff, 0x5b, 0x63, 0x9d, 0xff, 0x56, 0x5e, 0x92, 0xff, 0x54, 0x5c, 0x93, 0xff, 0x51, 0x57, 0x95, 0xff, 0x59, 0x5d, 0x9c, 0xff, 0x67, 0x72, 0xaa, 0xff, 0x79, 0x84, 0xb6, 0xff, 0x83, 0x8e, 0xba, 0xff, 0x89, 0x98, 0xbd, 0xff, 0x8d, 0x9d, 0xbf, 0xff, 0x92, 0xa0, 0xc2, 0xff, 0x92, 0xa1, 0xc5, 0xff, 0x96, 0xa6, 0xc8, 0xff, 0x9e, 0xae, 0xcb, 0xff, 0xa0, 0xaf, 0xc7, 0xff, 0xa0, 0xb0, 0xc8, 0xff, 0x9f, 0xac, 0xc8, 0xff, 0x9e, 0xa9, 0xc4, 0xff, 0x9d, 0xaa, 0xc1, 0xff, 0x9b, 0xa7, 0xbf, 0xff, 0x91, 0x9e, 0xb8, 0xff, 0x82, 0x90, 0xaf, 0xff, 0x73, 0x7f, 0xa8, 0xff, 0x68, 0x6f, 0xa0, 0xff, 0x4d, 0x4c, 0x78, 0xff, 0x3c, 0x31, 0x50, 0xff, 0x3a, 0x2c, 0x40, 0xff, 0x33, 0x25, 0x32, 0xff, 0x37, 0x29, 0x32, 0xff, 0x39, 0x2a, 0x32, 0xff, 0x3a, 0x2a, 0x32, 0xff, 0x37, 0x27, 0x2c, 0xff, 0x36, 0x25, 0x29, 0xff, 0x31, 0x21, 0x25, 0xff, 0x2d, 0x1c, 0x20, 0xff, 0x2a, 0x1a, 0x1f, 0xff, 0x2a, 0x19, 0x1c, 0xff, 0x27, 0x16, 0x19, 0xff, 0x24, 0x13, 0x16, 0xff, 0x21, 0x10, 0x14, 0xff, 0x21, 0x10, 0x13, 0xff, 0x23, 0x12, 0x15, 0xff, 0x21, 0x10, 0x13, 0xff, 0x1e, 0x0e, 0x11, 0xff, 0x22, 0x11, 0x14, 0xff, 0x29, 0x16, 0x19, 0xff, 0x28, 0x15, 0x18, 0xff, 0x24, 0x10, 0x13, 0xff, 0x21, 0x0e, 0x11, 0xff, 0x1d, 0x08, 0x0d, 0xff, 0x18, 0x05, 0x0a, 0xff, 0x1d, 0x0b, 0x10, 0xff, 0x21, 0x0c, 0x11, 0xff, 0x22, 0x0e, 0x13, 0xff, 0x30, 0x1d, 0x1d, 0xff, 0x54, 0x40, 0x3b, 0xff, 0x4f, 0x3a, 0x35, 0xff, 0x36, 0x22, 0x1f, 0xff, 0x2b, 0x1a, 0x16, 0xff, 0x37, 0x22, 0x20, 0xff, 0x47, 0x30, 0x2d, 0xff, 0x31, 0x1c, 0x16, 0xff, 0x4a, 0x37, 0x2f, 0xff, 0x34, 0x21, 0x1f, 0xff, 0x19, 0x09, 0x0e, 0xff, 0x27, 0x13, 0x17, 0xff, 0x28, 0x15, 0x17, 0xff, 0x28, 0x15, 0x18, 0xff, 0x2a, 0x15, 0x19, 0xff, 0x34, 0x20, 0x1d, 0xff, 0x51, 0x37, 0x2c, 0xff, 0x3b, 0x1f, 0x20, 0xff, 0x2d, 0x1c, 0x1b, 0xff, 0x2f, 0x1c, 0x1d, 0xff, 0x35, 0x1d, 0x20, 0xff, 0x72, 0x62, 0x60, 0xff, 0xf5, 0xf4, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x43, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd7, 0xcf, 0xbc, 0xff, 0x9e, 0x87, 0x58, 0xff, 0x9e, 0x87, 0x59, 0xff, 0xa0, 0x89, 0x5b, 0xff, 0xa2, 0x8b, 0x5d, 0xff, 0xa5, 0x8e, 0x5f, 0xff, 0xa5, 0x8d, 0x5e, 0xff, 0x9c, 0x84, 0x56, 0xff, 0x97, 0x7c, 0x50, 0xff, 0x94, 0x77, 0x4e, 0xff, 0x91, 0x74, 0x4c, 0xff, 0x75, 0x59, 0x35, 0xff, 0x9c, 0x83, 0x5c, 0xff, 0x9c, 0x80, 0x57, 0xff, 0x65, 0x40, 0x22, 0xff, 0x6b, 0x41, 0x1d, 0xff, 0xb2, 0xa9, 0x8a, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xec, 0xf7, 0xfa, 0xff, 0xe9, 0xf6, 0xf9, 0xff, 0xe6, 0xf3, 0xf5, 0xff, 0xe3, 0xf1, 0xf0, 0xff, 0xe0, 0xee, 0xee, 0xff, 0xd5, 0xe2, 0xec, 0xff, 0xc9, 0xd6, 0xde, 0xff, 0xd5, 0xe1, 0xe4, 0xff, 0xe4, 0xee, 0xed, 0xff, 0xcd, 0xd8, 0xd8, 0xff, 0xd6, 0xe1, 0xe1, 0xff, 0xc6, 0xcc, 0xc8, 0xff, 0xc0, 0xbc, 0xb8, 0xff, 0x82, 0x74, 0x79, 0xff, 0x92, 0x8d, 0x93, 0xff, 0x8d, 0x88, 0x90, 0xff, 0x69, 0x55, 0x5e, 0xff, 0x49, 0x35, 0x3a, 0xff, 0x32, 0x1d, 0x20, 0xff, 0x38, 0x22, 0x25, 0xff, 0x40, 0x2d, 0x30, 0xff, 0x43, 0x30, 0x34, 0xff, 0x35, 0x20, 0x23, 0xff, 0x25, 0x11, 0x14, 0xff, 0x29, 0x16, 0x19, 0xff, 0x2b, 0x18, 0x1b, 0xff, 0x37, 0x21, 0x21, 0xff, 0x31, 0x1e, 0x21, 0xff, 0x29, 0x16, 0x1b, 0xff, 0x30, 0x1e, 0x26, 0xff, 0x42, 0x35, 0x47, 0xff, 0x2f, 0x24, 0x3a, 0xff, 0x2b, 0x27, 0x46, 0xff, 0x3e, 0x3f, 0x6c, 0xff, 0x4a, 0x4f, 0x89, 0xff, 0x56, 0x5d, 0x9d, 0xff, 0x64, 0x6b, 0xaa, 0xff, 0x6a, 0x73, 0xae, 0xff, 0x67, 0x72, 0xa9, 0xff, 0x6c, 0x7a, 0xb1, 0xff, 0x71, 0x7d, 0xb6, 0xff, 0x77, 0x81, 0xb8, 0xff, 0x84, 0x91, 0xc3, 0xff, 0x8c, 0x9a, 0xc2, 0xff, 0x94, 0xa3, 0xc4, 0xff, 0x99, 0xa9, 0xc8, 0xff, 0x9a, 0xaa, 0xca, 0xff, 0x9e, 0xaf, 0xcc, 0xff, 0xa8, 0xb9, 0xd1, 0xff, 0xab, 0xbb, 0xd2, 0xff, 0xac, 0xbd, 0xd2, 0xff, 0xad, 0xbd, 0xd2, 0xff, 0xad, 0xbd, 0xd2, 0xff, 0xab, 0xba, 0xd0, 0xff, 0xac, 0xb9, 0xd0, 0xff, 0xa8, 0xb7, 0xcc, 0xff, 0xa3, 0xb0, 0xc7, 0xff, 0xa1, 0xaf, 0xc4, 0xff, 0x93, 0xa0, 0xba, 0xff, 0x82, 0x8c, 0xb0, 0xff, 0x76, 0x7e, 0xaa, 0xff, 0x64, 0x6b, 0x9a, 0xff, 0x4d, 0x4f, 0x7d, 0xff, 0x41, 0x3b, 0x60, 0xff, 0x3b, 0x31, 0x48, 0xff, 0x39, 0x2d, 0x39, 0xff, 0x39, 0x28, 0x35, 0xff, 0x37, 0x25, 0x30, 0xff, 0x38, 0x29, 0x30, 0xff, 0x34, 0x21, 0x29, 0xff, 0x2d, 0x1b, 0x20, 0xff, 0x2b, 0x19, 0x1e, 0xff, 0x2e, 0x1c, 0x23, 0xff, 0x2a, 0x16, 0x1b, 0xff, 0x25, 0x13, 0x16, 0xff, 0x23, 0x12, 0x16, 0xff, 0x21, 0x10, 0x14, 0xff, 0x22, 0x11, 0x15, 0xff, 0x21, 0x10, 0x14, 0xff, 0x20, 0x0f, 0x12, 0xff, 0x20, 0x0f, 0x13, 0xff, 0x22, 0x11, 0x14, 0xff, 0x23, 0x12, 0x15, 0xff, 0x2a, 0x19, 0x1c, 0xff, 0x2d, 0x1b, 0x1e, 0xff, 0x2b, 0x19, 0x1a, 0xff, 0x2d, 0x19, 0x1b, 0xff, 0x31, 0x1e, 0x20, 0xff, 0x36, 0x23, 0x23, 0xff, 0x3e, 0x2a, 0x28, 0xff, 0x3e, 0x2a, 0x27, 0xff, 0x49, 0x34, 0x32, 0xff, 0x4a, 0x35, 0x35, 0xff, 0x32, 0x1e, 0x1d, 0xff, 0x43, 0x2e, 0x2b, 0xff, 0x43, 0x2e, 0x27, 0xff, 0x42, 0x2b, 0x27, 0xff, 0x33, 0x1c, 0x1f, 0xff, 0x33, 0x22, 0x1b, 0xff, 0x4e, 0x3f, 0x33, 0xff, 0x19, 0x08, 0x0b, 0xff, 0x1c, 0x0b, 0x10, 0xff, 0x2b, 0x16, 0x1a, 0xff, 0x2e, 0x1a, 0x1e, 0xff, 0x2b, 0x17, 0x1b, 0xff, 0x28, 0x12, 0x15, 0xff, 0x35, 0x20, 0x1d, 0xff, 0x44, 0x2e, 0x29, 0xff, 0x34, 0x1c, 0x1c, 0xff, 0x34, 0x1d, 0x1e, 0xff, 0x31, 0x1d, 0x20, 0xff, 0x2c, 0x18, 0x1c, 0xff, 0x3c, 0x26, 0x2a, 0xff, 0xdd, 0xd8, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf1, 0xec, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfa, 0xf8, 0xff, 0xc0, 0xb1, 0x94, 0xff, 0x9c, 0x85, 0x58, 0xff, 0xa0, 0x89, 0x5b, 0xff, 0x9f, 0x88, 0x5b, 0xff, 0xa1, 0x8a, 0x5c, 0xff, 0xa4, 0x8d, 0x60, 0xff, 0xa4, 0x8c, 0x5e, 0xff, 0x9e, 0x86, 0x58, 0xff, 0x9a, 0x82, 0x55, 0xff, 0x95, 0x7b, 0x4e, 0xff, 0x90, 0x73, 0x4c, 0xff, 0x78, 0x5b, 0x38, 0xff, 0x95, 0x7d, 0x53, 0xff, 0xbf, 0xaa, 0x7e, 0xff, 0x80, 0x66, 0x3f, 0xff, 0x6d, 0x48, 0x1e, 0xff, 0xbb, 0xae, 0x8b, 0xff, 0xf2, 0xfe, 0xf7, 0xff, 0xe9, 0xf5, 0xfb, 0xff, 0xea, 0xf7, 0xfa, 0xff, 0xe7, 0xf4, 0xf5, 0xff, 0xe0, 0xed, 0xeb, 0xff, 0xdc, 0xe8, 0xe8, 0xff, 0xd8, 0xe4, 0xe8, 0xff, 0xd6, 0xe3, 0xe6, 0xff, 0xe5, 0xf0, 0xf2, 0xff, 0xcc, 0xd4, 0xd5, 0xff, 0xa2, 0xa8, 0xab, 0xff, 0xc1, 0xcb, 0xd6, 0xff, 0xbb, 0xc2, 0xc8, 0xff, 0x63, 0x58, 0x54, 0xff, 0x87, 0x79, 0x77, 0xff, 0xa1, 0xa3, 0xa7, 0xff, 0x87, 0x88, 0x95, 0xff, 0x57, 0x45, 0x53, 0xff, 0x33, 0x1b, 0x20, 0xff, 0x35, 0x1f, 0x22, 0xff, 0x3b, 0x26, 0x29, 0xff, 0x2e, 0x19, 0x1c, 0xff, 0x32, 0x1e, 0x21, 0xff, 0x32, 0x1d, 0x20, 0xff, 0x2d, 0x18, 0x1b, 0xff, 0x31, 0x1e, 0x21, 0xff, 0x28, 0x15, 0x17, 0xff, 0x28, 0x14, 0x17, 0xff, 0x20, 0x0f, 0x15, 0xff, 0x28, 0x16, 0x1e, 0xff, 0x3c, 0x2a, 0x36, 0xff, 0x39, 0x2f, 0x41, 0xff, 0x32, 0x2b, 0x47, 0xff, 0x3f, 0x3e, 0x70, 0xff, 0x50, 0x56, 0x95, 0xff, 0x5c, 0x67, 0xa6, 0xff, 0x61, 0x6c, 0xa9, 0xff, 0x66, 0x72, 0xac, 0xff, 0x74, 0x80, 0xb5, 0xff, 0x7e, 0x8b, 0xbb, 0xff, 0x82, 0x91, 0xbe, 0xff, 0x88, 0x98, 0xc2, 0xff, 0x92, 0xa2, 0xc7, 0xff, 0x94, 0xa5, 0xc6, 0xff, 0x99, 0xab, 0xcb, 0xff, 0x9e, 0xaf, 0xce, 0xff, 0xa1, 0xb1, 0xcd, 0xff, 0xa8, 0xba, 0xd3, 0xff, 0xad, 0xc0, 0xd5, 0xff, 0xb3, 0xc4, 0xd7, 0xff, 0xb3, 0xc3, 0xd6, 0xff, 0xb4, 0xc5, 0xd7, 0xff, 0xb5, 0xc5, 0xd7, 0xff, 0xb3, 0xc4, 0xd7, 0xff, 0xb4, 0xc4, 0xd6, 0xff, 0xb3, 0xc2, 0xd4, 0xff, 0xb4, 0xc2, 0xd5, 0xff, 0xb0, 0xbf, 0xd1, 0xff, 0xaa, 0xb9, 0xcc, 0xff, 0xa3, 0xb0, 0xc9, 0xff, 0x90, 0x9b, 0xbb, 0xff, 0x87, 0x90, 0xb4, 0xff, 0x79, 0x82, 0xac, 0xff, 0x5a, 0x60, 0x8f, 0xff, 0x4d, 0x4e, 0x7d, 0xff, 0x4b, 0x45, 0x6e, 0xff, 0x46, 0x3c, 0x57, 0xff, 0x42, 0x36, 0x44, 0xff, 0x37, 0x28, 0x31, 0xff, 0x33, 0x21, 0x2a, 0xff, 0x33, 0x20, 0x29, 0xff, 0x32, 0x20, 0x24, 0xff, 0x30, 0x1d, 0x20, 0xff, 0x2d, 0x19, 0x1e, 0xff, 0x32, 0x1e, 0x22, 0xff, 0x32, 0x1f, 0x22, 0xff, 0x25, 0x14, 0x17, 0xff, 0x22, 0x12, 0x16, 0xff, 0x22, 0x11, 0x16, 0xff, 0x22, 0x10, 0x15, 0xff, 0x21, 0x10, 0x14, 0xff, 0x20, 0x0f, 0x13, 0xff, 0x22, 0x11, 0x15, 0xff, 0x20, 0x0f, 0x13, 0xff, 0x1f, 0x0e, 0x11, 0xff, 0x29, 0x17, 0x1a, 0xff, 0x40, 0x2d, 0x2f, 0xff, 0x42, 0x31, 0x2e, 0xff, 0x2e, 0x1d, 0x19, 0xff, 0x3d, 0x2b, 0x29, 0xff, 0x43, 0x30, 0x2e, 0xff, 0x3b, 0x28, 0x27, 0xff, 0x2d, 0x1a, 0x1b, 0xff, 0x21, 0x0e, 0x10, 0xff, 0x2a, 0x19, 0x18, 0xff, 0x2d, 0x1a, 0x1b, 0xff, 0x33, 0x1c, 0x1c, 0xff, 0x28, 0x12, 0x14, 0xff, 0x21, 0x0c, 0x13, 0xff, 0x3e, 0x2e, 0x2a, 0xff, 0x49, 0x37, 0x2f, 0xff, 0x1a, 0x06, 0x0b, 0xff, 0x1e, 0x0d, 0x11, 0xff, 0x2a, 0x18, 0x1b, 0xff, 0x29, 0x14, 0x1a, 0xff, 0x2a, 0x15, 0x1a, 0xff, 0x30, 0x1a, 0x1d, 0xff, 0x36, 0x20, 0x20, 0xff, 0x29, 0x16, 0x17, 0xff, 0x2c, 0x19, 0x1c, 0xff, 0x30, 0x1a, 0x1d, 0xff, 0x2a, 0x16, 0x18, 0xff, 0x2a, 0x17, 0x17, 0xff, 0x3d, 0x27, 0x26, 0xff, 0xc1, 0xb6, 0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf0, 0xeb, 0xff, 0xae, 0x9b, 0x75, 0xff, 0x9f, 0x88, 0x5a, 0xff, 0x9f, 0x88, 0x5a, 0xff, 0xa2, 0x8b, 0x5d, 0xff, 0xa3, 0x8c, 0x5e, 0xff, 0xa4, 0x8d, 0x5f, 0xff, 0xa2, 0x8b, 0x5d, 0xff, 0x9f, 0x87, 0x59, 0xff, 0x9e, 0x86, 0x58, 0xff, 0x99, 0x81, 0x53, 0xff, 0x8f, 0x74, 0x4b, 0xff, 0x7c, 0x60, 0x3b, 0xff, 0x8f, 0x76, 0x4a, 0xff, 0xb3, 0x9e, 0x6e, 0xff, 0x9f, 0x89, 0x62, 0xff, 0x87, 0x6e, 0x4e, 0xff, 0xab, 0x9d, 0x7b, 0xff, 0xe8, 0xf2, 0xe5, 0xff, 0xe7, 0xf8, 0xff, 0xff, 0xea, 0xf7, 0xfb, 0xff, 0xe7, 0xf4, 0xf5, 0xff, 0xde, 0xe9, 0xe7, 0xff, 0xd8, 0xe3, 0xe0, 0xff, 0xe2, 0xee, 0xed, 0xff, 0xda, 0xe7, 0xe6, 0xff, 0xe7, 0xf2, 0xf4, 0xff, 0xc7, 0xce, 0xd1, 0xff, 0x9c, 0x9f, 0xa6, 0xff, 0xa0, 0xa5, 0xb6, 0xff, 0x9e, 0xa4, 0xb1, 0xff, 0x86, 0x7f, 0x7e, 0xff, 0xb7, 0xbd, 0xc1, 0xff, 0xb9, 0xc0, 0xcf, 0xff, 0x5f, 0x49, 0x58, 0xff, 0x22, 0x0a, 0x0d, 0xff, 0x28, 0x13, 0x11, 0xff, 0x61, 0x4d, 0x50, 0xff, 0x54, 0x3f, 0x42, 0xff, 0x37, 0x22, 0x25, 0xff, 0x2e, 0x19, 0x1c, 0xff, 0x2d, 0x18, 0x1b, 0xff, 0x32, 0x1d, 0x20, 0xff, 0x2c, 0x19, 0x1c, 0xff, 0x24, 0x11, 0x13, 0xff, 0x20, 0x0f, 0x13, 0xff, 0x28, 0x17, 0x21, 0xff, 0x39, 0x27, 0x31, 0xff, 0x34, 0x23, 0x34, 0xff, 0x2c, 0x28, 0x46, 0xff, 0x45, 0x47, 0x75, 0xff, 0x52, 0x59, 0x9b, 0xff, 0x57, 0x65, 0xaa, 0xff, 0x63, 0x73, 0xaf, 0xff, 0x78, 0x86, 0xbc, 0xff, 0x81, 0x91, 0xbf, 0xff, 0x87, 0x99, 0xc0, 0xff, 0x8d, 0x9e, 0xc5, 0xff, 0x90, 0xa1, 0xc8, 0xff, 0x97, 0xa8, 0xcc, 0xff, 0x9e, 0xb0, 0xcf, 0xff, 0x9f, 0xb1, 0xcf, 0xff, 0xa1, 0xb5, 0xd0, 0xff, 0xa8, 0xbb, 0xd3, 0xff, 0xb1, 0xc2, 0xd9, 0xff, 0xb2, 0xc7, 0xd9, 0xff, 0xb3, 0xc8, 0xd8, 0xff, 0xb7, 0xc9, 0xda, 0xff, 0xb7, 0xc9, 0xd9, 0xff, 0xb9, 0xcb, 0xdb, 0xff, 0xb8, 0xca, 0xda, 0xff, 0xb6, 0xc8, 0xd9, 0xff, 0xb6, 0xc9, 0xd9, 0xff, 0xb7, 0xc9, 0xd9, 0xff, 0xb9, 0xc9, 0xd9, 0xff, 0xb4, 0xc4, 0xd4, 0xff, 0xae, 0xbd, 0xcf, 0xff, 0xac, 0xba, 0xd0, 0xff, 0xa2, 0xae, 0xc8, 0xff, 0x95, 0xa0, 0xbf, 0xff, 0x8a, 0x94, 0xb6, 0xff, 0x7b, 0x84, 0xac, 0xff, 0x67, 0x6e, 0x9c, 0xff, 0x4a, 0x4d, 0x7f, 0xff, 0x40, 0x3e, 0x6a, 0xff, 0x41, 0x3d, 0x58, 0xff, 0x41, 0x37, 0x48, 0xff, 0x39, 0x29, 0x37, 0xff, 0x31, 0x1f, 0x2b, 0xff, 0x30, 0x20, 0x26, 0xff, 0x32, 0x21, 0x24, 0xff, 0x37, 0x24, 0x27, 0xff, 0x38, 0x25, 0x26, 0xff, 0x39, 0x27, 0x28, 0xff, 0x34, 0x21, 0x24, 0xff, 0x25, 0x13, 0x16, 0xff, 0x22, 0x12, 0x15, 0xff, 0x27, 0x16, 0x1a, 0xff, 0x22, 0x11, 0x15, 0xff, 0x1f, 0x0e, 0x12, 0xff, 0x1d, 0x0c, 0x10, 0xff, 0x1e, 0x0d, 0x11, 0xff, 0x1f, 0x0e, 0x11, 0xff, 0x1f, 0x0c, 0x0f, 0xff, 0x2a, 0x17, 0x1a, 0xff, 0x58, 0x49, 0x49, 0xff, 0x5a, 0x49, 0x47, 0xff, 0x18, 0x07, 0x05, 0xff, 0x21, 0x0e, 0x12, 0xff, 0x24, 0x11, 0x15, 0xff, 0x22, 0x10, 0x13, 0xff, 0x26, 0x14, 0x17, 0xff, 0x24, 0x10, 0x14, 0xff, 0x23, 0x12, 0x14, 0xff, 0x25, 0x14, 0x13, 0xff, 0x37, 0x23, 0x23, 0xff, 0x20, 0x0f, 0x0f, 0xff, 0x42, 0x35, 0x2e, 0xff, 0x33, 0x20, 0x20, 0xff, 0x26, 0x10, 0x16, 0xff, 0x2a, 0x17, 0x1a, 0xff, 0x23, 0x12, 0x15, 0xff, 0x25, 0x10, 0x15, 0xff, 0x34, 0x1e, 0x21, 0xff, 0x34, 0x1f, 0x22, 0xff, 0x2d, 0x17, 0x1b, 0xff, 0x29, 0x14, 0x15, 0xff, 0x36, 0x21, 0x20, 0xff, 0x40, 0x28, 0x25, 0xff, 0x3f, 0x27, 0x22, 0xff, 0x47, 0x31, 0x2d, 0xff, 0x50, 0x3b, 0x37, 0xff, 0x80, 0x70, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xdd, 0xd1, 0xff, 0x9e, 0x86, 0x59, 0xff, 0x9e, 0x87, 0x59, 0xff, 0x9d, 0x85, 0x58, 0xff, 0xa1, 0x8a, 0x5c, 0xff, 0xa4, 0x8d, 0x5f, 0xff, 0xa5, 0x8e, 0x60, 0xff, 0xa3, 0x8c, 0x5e, 0xff, 0xa2, 0x8b, 0x5d, 0xff, 0xa1, 0x88, 0x5a, 0xff, 0x9c, 0x84, 0x56, 0xff, 0x94, 0x7c, 0x4f, 0xff, 0x86, 0x6a, 0x42, 0xff, 0x9b, 0x7e, 0x52, 0xff, 0x9f, 0x85, 0x58, 0xff, 0x77, 0x5c, 0x39, 0xff, 0x8d, 0x6f, 0x50, 0xff, 0x8a, 0x72, 0x4b, 0xff, 0xc6, 0xc7, 0xad, 0xff, 0xed, 0xfe, 0xff, 0xff, 0xe9, 0xf8, 0xfc, 0xff, 0xe9, 0xf6, 0xf6, 0xff, 0xe1, 0xed, 0xea, 0xff, 0xd0, 0xda, 0xd7, 0xff, 0xd0, 0xdc, 0xdd, 0xff, 0xdd, 0xea, 0xee, 0xff, 0xc9, 0xd5, 0xd8, 0xff, 0xc9, 0xd5, 0xd7, 0xff, 0xbe, 0xc5, 0xcc, 0xff, 0x8b, 0x8f, 0x9c, 0xff, 0xb5, 0xbc, 0xc3, 0xff, 0xea, 0xf6, 0xfb, 0xff, 0xb4, 0xb8, 0xc7, 0xff, 0x50, 0x3f, 0x4e, 0xff, 0x1e, 0x02, 0x07, 0xff, 0x25, 0x0e, 0x0e, 0xff, 0x5b, 0x45, 0x48, 0xff, 0x5f, 0x4d, 0x50, 0xff, 0x48, 0x34, 0x37, 0xff, 0x4a, 0x35, 0x38, 0xff, 0x2e, 0x19, 0x1c, 0xff, 0x33, 0x1d, 0x20, 0xff, 0x3a, 0x26, 0x29, 0xff, 0x27, 0x14, 0x17, 0xff, 0x29, 0x16, 0x18, 0xff, 0x32, 0x1f, 0x23, 0xff, 0x37, 0x25, 0x2f, 0xff, 0x31, 0x1e, 0x2a, 0xff, 0x32, 0x24, 0x3a, 0xff, 0x41, 0x41, 0x70, 0xff, 0x51, 0x5a, 0x98, 0xff, 0x58, 0x66, 0xa9, 0xff, 0x63, 0x72, 0xb0, 0xff, 0x79, 0x87, 0xba, 0xff, 0x84, 0x95, 0xc0, 0xff, 0x8f, 0xa1, 0xc5, 0xff, 0x95, 0xa7, 0xc6, 0xff, 0x99, 0xa9, 0xcb, 0xff, 0x9a, 0xae, 0xcf, 0xff, 0x9c, 0xb1, 0xcd, 0xff, 0xa1, 0xb4, 0xd0, 0xff, 0xa3, 0xb4, 0xd3, 0xff, 0xa7, 0xbc, 0xd4, 0xff, 0xad, 0xc1, 0xd5, 0xff, 0xb2, 0xc5, 0xd9, 0xff, 0xb3, 0xc7, 0xda, 0xff, 0xb4, 0xc8, 0xda, 0xff, 0xb8, 0xcb, 0xdb, 0xff, 0xba, 0xcc, 0xdc, 0xff, 0xb9, 0xcb, 0xdc, 0xff, 0xbb, 0xcc, 0xdd, 0xff, 0xb9, 0xcc, 0xdd, 0xff, 0xb8, 0xca, 0xdb, 0xff, 0xb7, 0xc9, 0xda, 0xff, 0xb5, 0xc8, 0xd8, 0xff, 0xb4, 0xc5, 0xd6, 0xff, 0xaf, 0xbd, 0xd2, 0xff, 0xa8, 0xb6, 0xce, 0xff, 0xa7, 0xb4, 0xce, 0xff, 0xa2, 0xaf, 0xca, 0xff, 0x99, 0xa5, 0xc0, 0xff, 0x93, 0x9f, 0xbb, 0xff, 0x88, 0x92, 0xb5, 0xff, 0x78, 0x81, 0xaa, 0xff, 0x5f, 0x64, 0x92, 0xff, 0x46, 0x46, 0x72, 0xff, 0x3e, 0x39, 0x59, 0xff, 0x42, 0x38, 0x4c, 0xff, 0x35, 0x27, 0x34, 0xff, 0x2e, 0x21, 0x28, 0xff, 0x35, 0x28, 0x2b, 0xff, 0x37, 0x27, 0x2b, 0xff, 0x3b, 0x26, 0x28, 0xff, 0x3a, 0x26, 0x27, 0xff, 0x36, 0x23, 0x26, 0xff, 0x37, 0x23, 0x26, 0xff, 0x2e, 0x1c, 0x1f, 0xff, 0x1f, 0x0e, 0x12, 0xff, 0x20, 0x0f, 0x13, 0xff, 0x21, 0x10, 0x14, 0xff, 0x1f, 0x0e, 0x12, 0xff, 0x1d, 0x0c, 0x10, 0xff, 0x22, 0x11, 0x16, 0xff, 0x22, 0x0f, 0x14, 0xff, 0x1d, 0x0a, 0x0d, 0xff, 0x2b, 0x1c, 0x1b, 0xff, 0x75, 0x69, 0x60, 0xff, 0x66, 0x58, 0x4f, 0xff, 0x32, 0x22, 0x1e, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x24, 0x10, 0x13, 0xff, 0x28, 0x16, 0x15, 0xff, 0x29, 0x14, 0x17, 0xff, 0x23, 0x10, 0x14, 0xff, 0x2a, 0x18, 0x19, 0xff, 0x27, 0x12, 0x15, 0xff, 0x33, 0x1f, 0x1f, 0xff, 0x40, 0x34, 0x2c, 0xff, 0x19, 0x0a, 0x0e, 0xff, 0x2e, 0x18, 0x1e, 0xff, 0x2d, 0x17, 0x19, 0xff, 0x28, 0x13, 0x17, 0xff, 0x31, 0x1b, 0x1f, 0xff, 0x36, 0x21, 0x21, 0xff, 0x2e, 0x19, 0x18, 0xff, 0x2c, 0x17, 0x19, 0xff, 0x2d, 0x18, 0x1b, 0xff, 0x32, 0x1c, 0x1e, 0xff, 0x31, 0x1a, 0x1b, 0xff, 0x30, 0x1b, 0x1b, 0xff, 0x35, 0x1f, 0x21, 0xff, 0x30, 0x19, 0x1b, 0xff, 0x52, 0x3c, 0x40, 0xff, 0xec, 0xe9, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xd1, 0xc6, 0xb1, 0xff, 0x9e, 0x87, 0x59, 0xff, 0x9d, 0x88, 0x58, 0xff, 0x9f, 0x87, 0x59, 0xff, 0x9e, 0x88, 0x5a, 0xff, 0xa1, 0x8c, 0x5e, 0xff, 0xa4, 0x8f, 0x60, 0xff, 0xa5, 0x91, 0x61, 0xff, 0xa7, 0x91, 0x61, 0xff, 0xa5, 0x8e, 0x5f, 0xff, 0xa0, 0x8a, 0x5a, 0xff, 0x9a, 0x83, 0x54, 0xff, 0x8e, 0x72, 0x49, 0xff, 0x82, 0x65, 0x3b, 0xff, 0xba, 0xa4, 0x72, 0xff, 0x8d, 0x74, 0x49, 0xff, 0x5d, 0x37, 0x19, 0xff, 0x83, 0x61, 0x35, 0xff, 0xcf, 0xc3, 0x95, 0xff, 0xe8, 0xef, 0xe2, 0xff, 0xed, 0xfb, 0xff, 0xff, 0xe8, 0xf6, 0xf9, 0xff, 0xe8, 0xf8, 0xfb, 0xff, 0xea, 0xf3, 0xf0, 0xff, 0xae, 0xb1, 0xb2, 0xff, 0xb5, 0xbb, 0xbc, 0xff, 0xd4, 0xde, 0xdd, 0xff, 0xbc, 0xc5, 0xc9, 0xff, 0xc5, 0xcd, 0xcf, 0xff, 0xcd, 0xd7, 0xd7, 0xff, 0xd9, 0xe6, 0xe9, 0xff, 0xb0, 0xb2, 0xbb, 0xff, 0x55, 0x42, 0x50, 0xff, 0x21, 0x06, 0x0a, 0xff, 0x27, 0x0f, 0x0d, 0xff, 0x5e, 0x4d, 0x4f, 0xff, 0x76, 0x63, 0x67, 0xff, 0x49, 0x32, 0x36, 0xff, 0x42, 0x2b, 0x31, 0xff, 0x31, 0x1b, 0x20, 0xff, 0x34, 0x1f, 0x21, 0xff, 0x3e, 0x29, 0x2b, 0xff, 0x32, 0x1d, 0x21, 0xff, 0x2d, 0x18, 0x1d, 0xff, 0x2d, 0x1b, 0x1d, 0xff, 0x32, 0x22, 0x23, 0xff, 0x31, 0x1f, 0x29, 0xff, 0x2f, 0x1f, 0x2e, 0xff, 0x3c, 0x37, 0x52, 0xff, 0x4f, 0x53, 0x8d, 0xff, 0x59, 0x64, 0xaa, 0xff, 0x61, 0x70, 0xb1, 0xff, 0x72, 0x83, 0xbb, 0xff, 0x84, 0x94, 0xc1, 0xff, 0x8c, 0x9e, 0xc4, 0xff, 0x99, 0xac, 0xcc, 0xff, 0x9f, 0xb0, 0xcd, 0xff, 0xa3, 0xb3, 0xd0, 0xff, 0xa5, 0xb6, 0xd1, 0xff, 0xa5, 0xb7, 0xd0, 0xff, 0xab, 0xbd, 0xd3, 0xff, 0xa9, 0xbd, 0xd3, 0xff, 0xac, 0xc0, 0xd5, 0xff, 0xb2, 0xc4, 0xd9, 0xff, 0xb2, 0xc5, 0xda, 0xff, 0xb3, 0xc5, 0xdb, 0xff, 0xb4, 0xc7, 0xdc, 0xff, 0xb5, 0xc9, 0xdb, 0xff, 0xb7, 0xcb, 0xdc, 0xff, 0xb9, 0xcc, 0xdd, 0xff, 0xbb, 0xcd, 0xdd, 0xff, 0xba, 0xcc, 0xdd, 0xff, 0xb9, 0xcb, 0xdc, 0xff, 0xb8, 0xc9, 0xdb, 0xff, 0xb6, 0xc6, 0xd9, 0xff, 0xb4, 0xc5, 0xd6, 0xff, 0xb1, 0xc2, 0xd5, 0xff, 0xaa, 0xbb, 0xd0, 0xff, 0xaa, 0xba, 0xd2, 0xff, 0xa9, 0xb8, 0xcf, 0xff, 0xa0, 0xae, 0xc4, 0xff, 0x9a, 0xa7, 0xc0, 0xff, 0x94, 0xa1, 0xbd, 0xff, 0x8f, 0x9b, 0xb7, 0xff, 0x87, 0x91, 0xb3, 0xff, 0x74, 0x7a, 0xa7, 0xff, 0x5b, 0x5c, 0x87, 0xff, 0x49, 0x46, 0x66, 0xff, 0x4a, 0x40, 0x56, 0xff, 0x3a, 0x2c, 0x39, 0xff, 0x34, 0x25, 0x28, 0xff, 0x3a, 0x2b, 0x2c, 0xff, 0x3b, 0x28, 0x2b, 0xff, 0x3d, 0x29, 0x2c, 0xff, 0x2f, 0x1e, 0x20, 0xff, 0x2e, 0x1d, 0x20, 0xff, 0x31, 0x20, 0x23, 0xff, 0x2a, 0x19, 0x1c, 0xff, 0x24, 0x13, 0x16, 0xff, 0x25, 0x14, 0x17, 0xff, 0x23, 0x12, 0x16, 0xff, 0x20, 0x0f, 0x15, 0xff, 0x24, 0x13, 0x17, 0xff, 0x26, 0x12, 0x16, 0xff, 0x23, 0x10, 0x13, 0xff, 0x19, 0x08, 0x09, 0xff, 0x27, 0x16, 0x13, 0xff, 0x5f, 0x4e, 0x48, 0xff, 0x40, 0x2d, 0x27, 0xff, 0x33, 0x21, 0x1e, 0xff, 0x35, 0x23, 0x23, 0xff, 0x2b, 0x18, 0x19, 0xff, 0x2a, 0x18, 0x17, 0xff, 0x2b, 0x19, 0x19, 0xff, 0x28, 0x15, 0x18, 0xff, 0x26, 0x11, 0x15, 0xff, 0x3a, 0x26, 0x27, 0xff, 0x33, 0x24, 0x22, 0xff, 0x1f, 0x0f, 0x12, 0xff, 0x23, 0x0f, 0x13, 0xff, 0x27, 0x13, 0x16, 0xff, 0x2f, 0x1a, 0x1d, 0xff, 0x33, 0x1c, 0x20, 0xff, 0x26, 0x11, 0x12, 0xff, 0x2c, 0x17, 0x18, 0xff, 0x33, 0x1d, 0x1f, 0xff, 0x28, 0x16, 0x17, 0xff, 0x26, 0x12, 0x14, 0xff, 0x2a, 0x14, 0x1a, 0xff, 0x2f, 0x1b, 0x1f, 0xff, 0x32, 0x1d, 0x1d, 0xff, 0x4a, 0x2f, 0x29, 0xff, 0x53, 0x39, 0x32, 0xff, 0xcc, 0xc3, 0xc2, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfc, 0xff, 0xbe, 0xb0, 0x92, 0xff, 0x9d, 0x89, 0x5a, 0xff, 0xa0, 0x8c, 0x5c, 0xff, 0x9f, 0x8a, 0x5b, 0xff, 0x9e, 0x8a, 0x5b, 0xff, 0x9f, 0x8c, 0x5d, 0xff, 0xa2, 0x8f, 0x60, 0xff, 0xa7, 0x93, 0x64, 0xff, 0xac, 0x97, 0x67, 0xff, 0xa8, 0x91, 0x61, 0xff, 0xa3, 0x8c, 0x5c, 0xff, 0x9d, 0x87, 0x56, 0xff, 0x92, 0x76, 0x4b, 0xff, 0x78, 0x5b, 0x33, 0xff, 0xa5, 0x8d, 0x5f, 0xff, 0xcf, 0xb7, 0x87, 0xff, 0x82, 0x63, 0x40, 0xff, 0x79, 0x55, 0x31, 0xff, 0x98, 0x81, 0x51, 0xff, 0xbe, 0xb8, 0x97, 0xff, 0xee, 0xf9, 0xf8, 0xff, 0xef, 0xff, 0xff, 0xff, 0xe8, 0xf2, 0xf5, 0xff, 0xf1, 0xfc, 0xff, 0xff, 0xd7, 0xe0, 0xe0, 0xff, 0xcb, 0xd5, 0xd0, 0xff, 0xe6, 0xf2, 0xee, 0xff, 0xf1, 0xfe, 0xfc, 0xff, 0xed, 0xf9, 0xf7, 0xff, 0xe7, 0xf8, 0xf7, 0xff, 0x99, 0x97, 0x9b, 0xff, 0x33, 0x18, 0x1f, 0xff, 0x1e, 0x03, 0x08, 0xff, 0x41, 0x26, 0x25, 0xff, 0x67, 0x53, 0x4f, 0xff, 0x79, 0x69, 0x6b, 0xff, 0x52, 0x3d, 0x40, 0xff, 0x59, 0x42, 0x46, 0xff, 0x3b, 0x24, 0x2a, 0xff, 0x2b, 0x15, 0x1a, 0xff, 0x3b, 0x26, 0x29, 0xff, 0x36, 0x21, 0x23, 0xff, 0x2f, 0x19, 0x1e, 0xff, 0x2f, 0x1a, 0x20, 0xff, 0x2e, 0x1a, 0x1c, 0xff, 0x27, 0x16, 0x1a, 0xff, 0x2e, 0x1c, 0x27, 0xff, 0x38, 0x2d, 0x40, 0xff, 0x3d, 0x3e, 0x65, 0xff, 0x56, 0x5e, 0x9f, 0xff, 0x67, 0x73, 0xb6, 0xff, 0x73, 0x84, 0xbf, 0xff, 0x82, 0x93, 0xc5, 0xff, 0x8b, 0x9c, 0xc4, 0xff, 0x90, 0xa2, 0xc7, 0xff, 0x9b, 0xad, 0xce, 0xff, 0xa5, 0xb5, 0xd3, 0xff, 0xa6, 0xb6, 0xd3, 0xff, 0xa9, 0xb9, 0xd3, 0xff, 0xab, 0xbc, 0xd4, 0xff, 0xae, 0xbf, 0xd6, 0xff, 0xad, 0xc1, 0xd6, 0xff, 0xaf, 0xc2, 0xd7, 0xff, 0xb3, 0xc5, 0xdb, 0xff, 0xb5, 0xc8, 0xdd, 0xff, 0xb5, 0xc7, 0xdd, 0xff, 0xb6, 0xc9, 0xde, 0xff, 0xb6, 0xca, 0xdd, 0xff, 0xb6, 0xcb, 0xdc, 0xff, 0xbb, 0xcd, 0xde, 0xff, 0xbc, 0xce, 0xde, 0xff, 0xba, 0xcc, 0xdd, 0xff, 0xb9, 0xcb, 0xdc, 0xff, 0xb9, 0xca, 0xdb, 0xff, 0xb8, 0xc6, 0xd9, 0xff, 0xb4, 0xc5, 0xd6, 0xff, 0xaf, 0xc1, 0xd4, 0xff, 0xad, 0xbe, 0xd3, 0xff, 0xa8, 0xb9, 0xd0, 0xff, 0xa8, 0xb7, 0xce, 0xff, 0xa7, 0xb4, 0xcb, 0xff, 0x9f, 0xad, 0xc5, 0xff, 0x9c, 0xaa, 0xc3, 0xff, 0x93, 0x9f, 0xb9, 0xff, 0x91, 0x9c, 0xb7, 0xff, 0x89, 0x95, 0xb5, 0xff, 0x83, 0x8a, 0xad, 0xff, 0x6e, 0x6f, 0x92, 0xff, 0x5d, 0x59, 0x7a, 0xff, 0x50, 0x46, 0x5d, 0xff, 0x38, 0x27, 0x31, 0xff, 0x3b, 0x27, 0x2c, 0xff, 0x3d, 0x2a, 0x2c, 0xff, 0x31, 0x20, 0x23, 0xff, 0x32, 0x21, 0x24, 0xff, 0x2a, 0x19, 0x1c, 0xff, 0x29, 0x18, 0x1b, 0xff, 0x32, 0x21, 0x23, 0xff, 0x2b, 0x1a, 0x1d, 0xff, 0x23, 0x12, 0x15, 0xff, 0x22, 0x10, 0x14, 0xff, 0x20, 0x0d, 0x11, 0xff, 0x2e, 0x1b, 0x1f, 0xff, 0x2b, 0x19, 0x1b, 0xff, 0x1a, 0x09, 0x0c, 0xff, 0x1a, 0x08, 0x0e, 0xff, 0x1f, 0x0d, 0x11, 0xff, 0x25, 0x12, 0x13, 0xff, 0x34, 0x20, 0x1f, 0xff, 0x32, 0x21, 0x1e, 0xff, 0x2e, 0x1d, 0x1c, 0xff, 0x2c, 0x19, 0x1c, 0xff, 0x30, 0x1e, 0x20, 0xff, 0x2f, 0x1e, 0x1f, 0xff, 0x28, 0x16, 0x19, 0xff, 0x2b, 0x15, 0x1a, 0xff, 0x30, 0x1e, 0x1f, 0xff, 0x23, 0x14, 0x14, 0xff, 0x27, 0x15, 0x18, 0xff, 0x2e, 0x1b, 0x1e, 0xff, 0x2a, 0x17, 0x1b, 0xff, 0x2a, 0x16, 0x19, 0xff, 0x27, 0x13, 0x16, 0xff, 0x20, 0x0c, 0x10, 0xff, 0x2b, 0x18, 0x1b, 0xff, 0x26, 0x12, 0x14, 0xff, 0x2c, 0x17, 0x1a, 0xff, 0x30, 0x1b, 0x1e, 0xff, 0x2d, 0x18, 0x19, 0xff, 0x2d, 0x17, 0x1a, 0xff, 0x37, 0x1d, 0x20, 0xff, 0x58, 0x3b, 0x33, 0xff, 0x53, 0x38, 0x2a, 0xff, 0xa8, 0x9c, 0x98, 0xff, 0xfc, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf6, 0xf3, 0xff, 0xac, 0x9b, 0x76, 0xff, 0x9c, 0x89, 0x5a, 0xff, 0xa0, 0x8d, 0x5e, 0xff, 0xa0, 0x8e, 0x5f, 0xff, 0x9f, 0x8d, 0x5e, 0xff, 0x9f, 0x8e, 0x60, 0xff, 0xa3, 0x92, 0x63, 0xff, 0xa9, 0x97, 0x68, 0xff, 0xae, 0x9b, 0x6c, 0xff, 0xab, 0x98, 0x68, 0xff, 0xa7, 0x93, 0x63, 0xff, 0xa3, 0x8d, 0x5b, 0xff, 0x99, 0x80, 0x51, 0xff, 0x8d, 0x71, 0x48, 0xff, 0x7e, 0x60, 0x3b, 0xff, 0x9f, 0x85, 0x56, 0xff, 0xaa, 0x91, 0x62, 0xff, 0x92, 0x70, 0x4a, 0xff, 0x86, 0x67, 0x3a, 0xff, 0xb0, 0x9a, 0x68, 0xff, 0xb5, 0xa6, 0x78, 0xff, 0xd2, 0xd3, 0xc0, 0xff, 0xe9, 0xf8, 0xfa, 0xff, 0xdc, 0xe9, 0xec, 0xff, 0xdc, 0xeb, 0xe9, 0xff, 0xdb, 0xe6, 0xe8, 0xff, 0xb3, 0xb7, 0xbe, 0xff, 0xb6, 0xbc, 0xbf, 0xff, 0x9f, 0x9f, 0xa7, 0xff, 0x5f, 0x4e, 0x5c, 0xff, 0x32, 0x1a, 0x27, 0xff, 0x3c, 0x25, 0x2b, 0xff, 0x3f, 0x24, 0x26, 0xff, 0x5f, 0x44, 0x41, 0xff, 0x87, 0x75, 0x72, 0xff, 0x55, 0x43, 0x45, 0xff, 0x57, 0x3e, 0x40, 0xff, 0x42, 0x2d, 0x30, 0xff, 0x3f, 0x2a, 0x2d, 0xff, 0x3b, 0x25, 0x2a, 0xff, 0x31, 0x1d, 0x22, 0xff, 0x2a, 0x15, 0x1b, 0xff, 0x28, 0x13, 0x19, 0xff, 0x28, 0x15, 0x1a, 0xff, 0x22, 0x10, 0x13, 0xff, 0x29, 0x17, 0x21, 0xff, 0x37, 0x2a, 0x3a, 0xff, 0x33, 0x30, 0x4d, 0xff, 0x49, 0x4e, 0x86, 0xff, 0x68, 0x75, 0xb5, 0xff, 0x78, 0x89, 0xbe, 0xff, 0x84, 0x95, 0xc5, 0xff, 0x8e, 0xa0, 0xc7, 0xff, 0x95, 0xa7, 0xc9, 0xff, 0x9b, 0xae, 0xcf, 0xff, 0xa4, 0xb6, 0xd5, 0xff, 0xa8, 0xbb, 0xd5, 0xff, 0xa9, 0xbb, 0xd4, 0xff, 0xad, 0xbf, 0xd6, 0xff, 0xaf, 0xc1, 0xd8, 0xff, 0xb0, 0xc1, 0xd8, 0xff, 0xaf, 0xc3, 0xd9, 0xff, 0xb0, 0xc4, 0xd9, 0xff, 0xb2, 0xc6, 0xdb, 0xff, 0xb3, 0xc8, 0xdd, 0xff, 0xb2, 0xc7, 0xdc, 0xff, 0xb5, 0xc9, 0xde, 0xff, 0xb8, 0xcb, 0xde, 0xff, 0xb9, 0xcd, 0xdf, 0xff, 0xbd, 0xd0, 0xe1, 0xff, 0xbe, 0xd0, 0xe0, 0xff, 0xbc, 0xce, 0xdf, 0xff, 0xbb, 0xcd, 0xde, 0xff, 0xba, 0xcb, 0xdc, 0xff, 0xba, 0xca, 0xda, 0xff, 0xb5, 0xc5, 0xd6, 0xff, 0xb3, 0xc2, 0xd5, 0xff, 0xb0, 0xbf, 0xd3, 0xff, 0xad, 0xba, 0xd1, 0xff, 0xaa, 0xb9, 0xce, 0xff, 0xa9, 0xb8, 0xcc, 0xff, 0xa7, 0xb5, 0xcb, 0xff, 0xa2, 0xb0, 0xc7, 0xff, 0x9a, 0xa7, 0xc0, 0xff, 0x9a, 0xa6, 0xc0, 0xff, 0x96, 0xa5, 0xb7, 0xff, 0x93, 0xa0, 0xb3, 0xff, 0x8f, 0x96, 0xaf, 0xff, 0x82, 0x89, 0xa3, 0xff, 0x6a, 0x6a, 0x81, 0xff, 0x50, 0x45, 0x55, 0xff, 0x44, 0x32, 0x3a, 0xff, 0x34, 0x23, 0x28, 0xff, 0x2e, 0x1e, 0x23, 0xff, 0x32, 0x20, 0x24, 0xff, 0x2f, 0x1e, 0x21, 0xff, 0x2f, 0x1e, 0x21, 0xff, 0x29, 0x18, 0x1b, 0xff, 0x27, 0x16, 0x19, 0xff, 0x24, 0x14, 0x17, 0xff, 0x24, 0x12, 0x15, 0xff, 0x24, 0x10, 0x13, 0xff, 0x2f, 0x1c, 0x1e, 0xff, 0x29, 0x19, 0x1b, 0xff, 0x1d, 0x0d, 0x10, 0xff, 0x28, 0x17, 0x1b, 0xff, 0x24, 0x14, 0x16, 0xff, 0x24, 0x14, 0x15, 0xff, 0x29, 0x16, 0x19, 0xff, 0x2e, 0x1c, 0x1c, 0xff, 0x28, 0x16, 0x16, 0xff, 0x25, 0x13, 0x15, 0xff, 0x21, 0x0d, 0x12, 0xff, 0x26, 0x13, 0x18, 0xff, 0x25, 0x12, 0x14, 0xff, 0x28, 0x13, 0x14, 0xff, 0x2f, 0x1a, 0x1c, 0xff, 0x25, 0x13, 0x16, 0xff, 0x29, 0x17, 0x1a, 0xff, 0x2c, 0x19, 0x1c, 0xff, 0x2a, 0x18, 0x1b, 0xff, 0x25, 0x11, 0x14, 0xff, 0x1c, 0x09, 0x0d, 0xff, 0x28, 0x16, 0x19, 0xff, 0x2c, 0x1a, 0x1d, 0xff, 0x26, 0x12, 0x16, 0xff, 0x28, 0x13, 0x15, 0xff, 0x2f, 0x1b, 0x18, 0xff, 0x44, 0x30, 0x27, 0xff, 0x3e, 0x27, 0x20, 0xff, 0x42, 0x27, 0x23, 0xff, 0x52, 0x36, 0x28, 0xff, 0x59, 0x3f, 0x32, 0xff, 0x85, 0x75, 0x73, 0xff, 0xf1, 0xf0, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x4b, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xe6, 0xdc, 0xff, 0xa3, 0x92, 0x68, 0xff, 0x9e, 0x8a, 0x5e, 0xff, 0x9f, 0x8d, 0x5f, 0xff, 0x9f, 0x8f, 0x5f, 0xff, 0x9e, 0x8f, 0x60, 0xff, 0xa2, 0x93, 0x63, 0xff, 0xa6, 0x97, 0x67, 0xff, 0xab, 0x9d, 0x6d, 0xff, 0xb0, 0xa2, 0x72, 0xff, 0xaf, 0xa0, 0x70, 0xff, 0xac, 0x9c, 0x6c, 0xff, 0xab, 0x97, 0x64, 0xff, 0x9f, 0x89, 0x56, 0xff, 0x94, 0x7d, 0x4f, 0xff, 0x8f, 0x75, 0x4a, 0xff, 0x7f, 0x5d, 0x37, 0xff, 0x7f, 0x60, 0x39, 0xff, 0x87, 0x67, 0x41, 0xff, 0x7f, 0x59, 0x34, 0xff, 0x8f, 0x70, 0x41, 0xff, 0xa1, 0x87, 0x51, 0xff, 0xc5, 0xc1, 0xaa, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xe2, 0xed, 0xea, 0xff, 0xda, 0xe4, 0xdd, 0xff, 0xa6, 0xaa, 0xb1, 0xff, 0x5e, 0x53, 0x63, 0xff, 0x48, 0x37, 0x45, 0xff, 0x3a, 0x23, 0x2f, 0xff, 0x2f, 0x12, 0x1d, 0xff, 0x4c, 0x35, 0x3c, 0xff, 0x57, 0x46, 0x44, 0xff, 0x70, 0x60, 0x60, 0xff, 0x69, 0x56, 0x57, 0xff, 0x44, 0x2d, 0x2e, 0xff, 0x4d, 0x37, 0x3a, 0xff, 0x46, 0x2f, 0x30, 0xff, 0x37, 0x21, 0x24, 0xff, 0x44, 0x31, 0x31, 0xff, 0x3a, 0x27, 0x2b, 0xff, 0x2f, 0x1a, 0x23, 0xff, 0x2b, 0x16, 0x1f, 0xff, 0x2c, 0x18, 0x1d, 0xff, 0x22, 0x10, 0x12, 0xff, 0x1e, 0x0c, 0x11, 0xff, 0x37, 0x26, 0x33, 0xff, 0x37, 0x30, 0x46, 0xff, 0x39, 0x39, 0x67, 0xff, 0x61, 0x69, 0xa8, 0xff, 0x7d, 0x8f, 0xc2, 0xff, 0x85, 0x98, 0xc3, 0xff, 0x8d, 0x9f, 0xc6, 0xff, 0x97, 0xaa, 0xcc, 0xff, 0x9f, 0xb4, 0xd1, 0xff, 0xa4, 0xb9, 0xd4, 0xff, 0xa7, 0xbd, 0xd4, 0xff, 0xab, 0xc1, 0xd4, 0xff, 0xaf, 0xc2, 0xd6, 0xff, 0xb1, 0xc3, 0xd9, 0xff, 0xb0, 0xc2, 0xd8, 0xff, 0xb1, 0xc3, 0xd8, 0xff, 0xb1, 0xc5, 0xda, 0xff, 0xb1, 0xc6, 0xdb, 0xff, 0xb0, 0xc6, 0xdb, 0xff, 0xb1, 0xc7, 0xdc, 0xff, 0xb3, 0xca, 0xdf, 0xff, 0xb7, 0xcb, 0xe0, 0xff, 0xba, 0xce, 0xe0, 0xff, 0xb9, 0xcd, 0xdf, 0xff, 0xba, 0xcd, 0xde, 0xff, 0xbd, 0xcf, 0xdf, 0xff, 0xbd, 0xcf, 0xe0, 0xff, 0xbd, 0xd0, 0xe0, 0xff, 0xbb, 0xcd, 0xdc, 0xff, 0xbb, 0xca, 0xda, 0xff, 0xba, 0xca, 0xd9, 0xff, 0xb7, 0xc7, 0xd7, 0xff, 0xb5, 0xc5, 0xd6, 0xff, 0xb3, 0xc3, 0xd4, 0xff, 0xaf, 0xc0, 0xd0, 0xff, 0xad, 0xbc, 0xce, 0xff, 0xa7, 0xb6, 0xca, 0xff, 0xa4, 0xb1, 0xc7, 0xff, 0xa3, 0xb2, 0xc8, 0xff, 0xa1, 0xb1, 0xc4, 0xff, 0x9e, 0xab, 0xbe, 0xff, 0x9c, 0xa9, 0xba, 0xff, 0x9b, 0xa8, 0xb5, 0xff, 0x99, 0xa4, 0xb1, 0xff, 0x7f, 0x84, 0x99, 0xff, 0x5c, 0x58, 0x6f, 0xff, 0x4a, 0x40, 0x4f, 0xff, 0x3a, 0x2a, 0x32, 0xff, 0x2e, 0x1c, 0x23, 0xff, 0x31, 0x21, 0x26, 0xff, 0x2f, 0x1e, 0x20, 0xff, 0x28, 0x16, 0x19, 0xff, 0x2b, 0x19, 0x1c, 0xff, 0x27, 0x16, 0x19, 0xff, 0x2b, 0x1a, 0x1c, 0xff, 0x29, 0x17, 0x1b, 0xff, 0x23, 0x10, 0x16, 0xff, 0x2d, 0x1a, 0x1e, 0xff, 0x2c, 0x1a, 0x1a, 0xff, 0x3e, 0x2c, 0x2c, 0xff, 0x33, 0x21, 0x20, 0xff, 0x2e, 0x1c, 0x1a, 0xff, 0x33, 0x22, 0x21, 0xff, 0x1f, 0x0c, 0x0f, 0xff, 0x26, 0x13, 0x17, 0xff, 0x2d, 0x1b, 0x1d, 0xff, 0x2f, 0x1e, 0x1c, 0xff, 0x2e, 0x1c, 0x1c, 0xff, 0x2b, 0x19, 0x1b, 0xff, 0x38, 0x25, 0x22, 0xff, 0x36, 0x22, 0x1e, 0xff, 0x31, 0x1c, 0x1c, 0xff, 0x26, 0x14, 0x17, 0xff, 0x1e, 0x0c, 0x10, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x22, 0x10, 0x13, 0xff, 0x26, 0x12, 0x15, 0xff, 0x26, 0x13, 0x15, 0xff, 0x2b, 0x18, 0x1a, 0xff, 0x29, 0x14, 0x14, 0xff, 0x2c, 0x17, 0x17, 0xff, 0x2e, 0x19, 0x18, 0xff, 0x30, 0x1a, 0x18, 0xff, 0x3b, 0x21, 0x1e, 0xff, 0x4a, 0x2f, 0x27, 0xff, 0x4a, 0x2f, 0x24, 0xff, 0x5e, 0x42, 0x30, 0xff, 0x55, 0x3c, 0x2e, 0xff, 0x5f, 0x4e, 0x4e, 0xff, 0xd7, 0xd3, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf0, 0xec, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfa, 0xff, 0xdb, 0xd4, 0xc3, 0xff, 0x9e, 0x8e, 0x61, 0xff, 0x9f, 0x8d, 0x5f, 0xff, 0xa2, 0x92, 0x63, 0xff, 0xa1, 0x92, 0x63, 0xff, 0xa1, 0x93, 0x64, 0xff, 0xa3, 0x96, 0x67, 0xff, 0xa9, 0x9b, 0x6c, 0xff, 0xaf, 0xa4, 0x74, 0xff, 0xb2, 0xa8, 0x77, 0xff, 0xb0, 0xa5, 0x75, 0xff, 0xb0, 0xa3, 0x73, 0xff, 0xaf, 0x9f, 0x6d, 0xff, 0xa2, 0x91, 0x5d, 0xff, 0x97, 0x83, 0x53, 0xff, 0x8f, 0x78, 0x4b, 0xff, 0x8c, 0x6c, 0x45, 0xff, 0x7e, 0x5d, 0x38, 0xff, 0x70, 0x53, 0x31, 0xff, 0x82, 0x69, 0x4f, 0xff, 0x93, 0x7c, 0x5a, 0xff, 0xcc, 0xc8, 0xa7, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xdf, 0xed, 0xee, 0xff, 0xdd, 0xeb, 0xe4, 0xff, 0xdf, 0xed, 0xe2, 0xff, 0xb8, 0xb6, 0xb1, 0xff, 0x69, 0x57, 0x5d, 0xff, 0x3b, 0x20, 0x28, 0xff, 0x47, 0x2d, 0x30, 0xff, 0x48, 0x36, 0x36, 0xff, 0x5d, 0x47, 0x45, 0xff, 0x75, 0x5d, 0x5b, 0xff, 0x68, 0x57, 0x58, 0xff, 0x33, 0x20, 0x23, 0xff, 0x38, 0x22, 0x25, 0xff, 0x48, 0x33, 0x35, 0xff, 0x44, 0x2f, 0x30, 0xff, 0x3c, 0x27, 0x2a, 0xff, 0x30, 0x1d, 0x20, 0xff, 0x31, 0x1e, 0x22, 0xff, 0x34, 0x20, 0x27, 0xff, 0x2f, 0x1a, 0x1f, 0xff, 0x2a, 0x17, 0x1b, 0xff, 0x20, 0x0d, 0x11, 0xff, 0x2a, 0x17, 0x1c, 0xff, 0x3f, 0x31, 0x43, 0xff, 0x32, 0x2d, 0x4f, 0xff, 0x44, 0x4b, 0x7f, 0xff, 0x71, 0x7f, 0xb6, 0xff, 0x88, 0x9a, 0xc6, 0xff, 0x90, 0xa3, 0xc8, 0xff, 0x98, 0xab, 0xcd, 0xff, 0x9e, 0xb1, 0xd0, 0xff, 0xa9, 0xbd, 0xd7, 0xff, 0xad, 0xc3, 0xd8, 0xff, 0xad, 0xc3, 0xd7, 0xff, 0xaf, 0xc4, 0xd8, 0xff, 0xb0, 0xc4, 0xd8, 0xff, 0xb2, 0xc5, 0xda, 0xff, 0xb2, 0xc5, 0xda, 0xff, 0xb3, 0xc6, 0xdb, 0xff, 0xb1, 0xc6, 0xdb, 0xff, 0xb0, 0xc5, 0xdb, 0xff, 0xb3, 0xc8, 0xde, 0xff, 0xb4, 0xc9, 0xde, 0xff, 0xb6, 0xca, 0xdf, 0xff, 0xb8, 0xcb, 0xe1, 0xff, 0xb8, 0xcc, 0xdf, 0xff, 0xb5, 0xca, 0xdb, 0xff, 0xb6, 0xc8, 0xda, 0xff, 0xba, 0xcb, 0xdd, 0xff, 0xbc, 0xce, 0xdf, 0xff, 0xbc, 0xce, 0xde, 0xff, 0xbc, 0xce, 0xde, 0xff, 0xbd, 0xce, 0xdd, 0xff, 0xbd, 0xce, 0xdd, 0xff, 0xbb, 0xcb, 0xdb, 0xff, 0xb9, 0xc9, 0xd9, 0xff, 0xb7, 0xc7, 0xd7, 0xff, 0xb4, 0xc4, 0xd4, 0xff, 0xaf, 0xbf, 0xd0, 0xff, 0xad, 0xbd, 0xce, 0xff, 0xaa, 0xba, 0xcc, 0xff, 0xa9, 0xb9, 0xcb, 0xff, 0xa6, 0xb5, 0xc8, 0xff, 0xa2, 0xae, 0xc5, 0xff, 0x9f, 0xad, 0xbf, 0xff, 0xa0, 0xad, 0xba, 0xff, 0x9e, 0xa7, 0xb2, 0xff, 0x8e, 0x95, 0xa7, 0xff, 0x72, 0x74, 0x8c, 0xff, 0x4d, 0x48, 0x62, 0xff, 0x3d, 0x31, 0x40, 0xff, 0x35, 0x25, 0x29, 0xff, 0x30, 0x20, 0x22, 0xff, 0x3a, 0x2a, 0x32, 0xff, 0x31, 0x22, 0x2a, 0xff, 0x27, 0x17, 0x1b, 0xff, 0x2b, 0x19, 0x1c, 0xff, 0x2d, 0x1a, 0x1c, 0xff, 0x2b, 0x1b, 0x1e, 0xff, 0x26, 0x17, 0x1d, 0xff, 0x2a, 0x19, 0x1d, 0xff, 0x3c, 0x2b, 0x28, 0xff, 0x56, 0x44, 0x3f, 0xff, 0x24, 0x10, 0x11, 0xff, 0x39, 0x26, 0x23, 0xff, 0x45, 0x32, 0x2e, 0xff, 0x23, 0x10, 0x12, 0xff, 0x21, 0x0d, 0x12, 0xff, 0x24, 0x11, 0x14, 0xff, 0x2b, 0x18, 0x19, 0xff, 0x2d, 0x1a, 0x1c, 0xff, 0x2d, 0x1b, 0x1c, 0xff, 0x2d, 0x1b, 0x19, 0xff, 0x2a, 0x17, 0x15, 0xff, 0x32, 0x1f, 0x1f, 0xff, 0x2a, 0x17, 0x18, 0xff, 0x2f, 0x1b, 0x1c, 0xff, 0x25, 0x12, 0x13, 0xff, 0x1e, 0x09, 0x0c, 0xff, 0x2c, 0x17, 0x19, 0xff, 0x2f, 0x1c, 0x1d, 0xff, 0x29, 0x16, 0x17, 0xff, 0x33, 0x1e, 0x1f, 0xff, 0x34, 0x1d, 0x1c, 0xff, 0x2c, 0x17, 0x16, 0xff, 0x2b, 0x14, 0x1a, 0xff, 0x2e, 0x15, 0x16, 0xff, 0x45, 0x2b, 0x21, 0xff, 0x44, 0x28, 0x20, 0xff, 0x5c, 0x41, 0x34, 0xff, 0x4d, 0x30, 0x28, 0xff, 0x4b, 0x36, 0x37, 0xff, 0xc0, 0xb9, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x8c, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x43, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf8, 0xf5, 0xff, 0xce, 0xc5, 0xae, 0xff, 0x9f, 0x8f, 0x61, 0xff, 0xa0, 0x90, 0x62, 0xff, 0xa1, 0x93, 0x64, 0xff, 0xa3, 0x95, 0x67, 0xff, 0xa4, 0x97, 0x69, 0xff, 0xa7, 0x9a, 0x6d, 0xff, 0xac, 0xa1, 0x73, 0xff, 0xb4, 0xab, 0x7c, 0xff, 0xb8, 0xaf, 0x80, 0xff, 0xb6, 0xac, 0x7c, 0xff, 0xb5, 0xab, 0x7b, 0xff, 0xac, 0x9f, 0x6e, 0xff, 0xa8, 0x99, 0x67, 0xff, 0x9b, 0x88, 0x58, 0xff, 0x9b, 0x82, 0x57, 0xff, 0x9e, 0x89, 0x5f, 0xff, 0x98, 0x82, 0x56, 0xff, 0xb1, 0x99, 0x6c, 0xff, 0xb1, 0xa0, 0x72, 0xff, 0xac, 0x9a, 0x6c, 0xff, 0xd1, 0xd5, 0xc2, 0xff, 0xe2, 0xf1, 0xf2, 0xff, 0xe1, 0xed, 0xee, 0xff, 0xd9, 0xe5, 0xd9, 0xff, 0xdc, 0xe5, 0xdc, 0xff, 0xab, 0xa4, 0x97, 0xff, 0x87, 0x73, 0x6d, 0xff, 0x63, 0x4b, 0x49, 0xff, 0x4f, 0x37, 0x37, 0xff, 0x51, 0x38, 0x38, 0xff, 0x54, 0x3b, 0x3a, 0xff, 0x43, 0x2d, 0x30, 0xff, 0x30, 0x19, 0x1d, 0xff, 0x4c, 0x36, 0x39, 0xff, 0x5d, 0x4b, 0x4d, 0xff, 0x45, 0x31, 0x33, 0xff, 0x3b, 0x25, 0x29, 0xff, 0x33, 0x1e, 0x23, 0xff, 0x36, 0x21, 0x27, 0xff, 0x33, 0x1f, 0x25, 0xff, 0x30, 0x1d, 0x25, 0xff, 0x28, 0x15, 0x17, 0xff, 0x28, 0x14, 0x19, 0xff, 0x22, 0x0d, 0x13, 0xff, 0x2d, 0x1a, 0x1e, 0xff, 0x3b, 0x31, 0x49, 0xff, 0x3e, 0x3c, 0x6a, 0xff, 0x5c, 0x68, 0xa0, 0xff, 0x7e, 0x90, 0xbe, 0xff, 0x8f, 0xa2, 0xc6, 0xff, 0x9b, 0xb0, 0xcf, 0xff, 0xa1, 0xb5, 0xd3, 0xff, 0xa7, 0xbb, 0xd5, 0xff, 0xae, 0xc2, 0xd9, 0xff, 0xb0, 0xc5, 0xd9, 0xff, 0xaf, 0xc4, 0xd9, 0xff, 0xaf, 0xc4, 0xda, 0xff, 0xaf, 0xc4, 0xda, 0xff, 0xb3, 0xc6, 0xdb, 0xff, 0xb6, 0xc9, 0xde, 0xff, 0xb5, 0xca, 0xdf, 0xff, 0xb4, 0xc9, 0xde, 0xff, 0xb3, 0xc8, 0xde, 0xff, 0xb5, 0xca, 0xe1, 0xff, 0xb5, 0xca, 0xe0, 0xff, 0xb7, 0xcb, 0xdf, 0xff, 0xba, 0xcd, 0xe0, 0xff, 0xb9, 0xcd, 0xdf, 0xff, 0xb9, 0xce, 0xdf, 0xff, 0xba, 0xcb, 0xdf, 0xff, 0xbd, 0xce, 0xe0, 0xff, 0xbd, 0xcf, 0xe0, 0xff, 0xbc, 0xcf, 0xdf, 0xff, 0xbc, 0xcf, 0xde, 0xff, 0xbc, 0xd0, 0xdf, 0xff, 0xbe, 0xcf, 0xdf, 0xff, 0xbe, 0xcd, 0xdd, 0xff, 0xbb, 0xcb, 0xdb, 0xff, 0xb9, 0xc8, 0xd9, 0xff, 0xb6, 0xc6, 0xd6, 0xff, 0xb4, 0xc4, 0xd4, 0xff, 0xb3, 0xc3, 0xd3, 0xff, 0xb0, 0xc1, 0xd1, 0xff, 0xae, 0xbd, 0xce, 0xff, 0xa9, 0xb8, 0xcc, 0xff, 0xa7, 0xb4, 0xca, 0xff, 0xa4, 0xb3, 0xc6, 0xff, 0xa0, 0xaf, 0xbf, 0xff, 0xa1, 0xab, 0xb8, 0xff, 0x98, 0xa1, 0xaf, 0xff, 0x85, 0x8b, 0x9e, 0xff, 0x60, 0x5e, 0x79, 0xff, 0x47, 0x40, 0x59, 0xff, 0x3e, 0x31, 0x3e, 0xff, 0x2c, 0x19, 0x1d, 0xff, 0x35, 0x24, 0x2b, 0xff, 0x54, 0x46, 0x52, 0xff, 0x4d, 0x42, 0x4b, 0xff, 0x36, 0x27, 0x2c, 0xff, 0x2b, 0x1a, 0x1f, 0xff, 0x2b, 0x1b, 0x20, 0xff, 0x2b, 0x1b, 0x1d, 0xff, 0x24, 0x12, 0x16, 0xff, 0x4c, 0x3d, 0x3a, 0xff, 0x51, 0x43, 0x3d, 0xff, 0x12, 0x00, 0x04, 0xff, 0x3d, 0x29, 0x27, 0xff, 0x53, 0x41, 0x3a, 0xff, 0x23, 0x10, 0x11, 0xff, 0x25, 0x11, 0x16, 0xff, 0x23, 0x10, 0x13, 0xff, 0x24, 0x11, 0x15, 0xff, 0x26, 0x12, 0x16, 0xff, 0x29, 0x17, 0x1a, 0xff, 0x1c, 0x0c, 0x0d, 0xff, 0x1d, 0x0c, 0x0d, 0xff, 0x23, 0x12, 0x14, 0xff, 0x28, 0x14, 0x14, 0xff, 0x37, 0x24, 0x1f, 0xff, 0x3f, 0x2c, 0x28, 0xff, 0x3f, 0x2c, 0x28, 0xff, 0x38, 0x24, 0x1f, 0xff, 0x39, 0x24, 0x1d, 0xff, 0x36, 0x1f, 0x1a, 0xff, 0x3c, 0x24, 0x21, 0xff, 0x3a, 0x20, 0x1c, 0xff, 0x2c, 0x17, 0x14, 0xff, 0x20, 0x0c, 0x13, 0xff, 0x33, 0x1f, 0x1a, 0xff, 0x50, 0x37, 0x2a, 0xff, 0x44, 0x27, 0x22, 0xff, 0x63, 0x48, 0x3a, 0xff, 0x57, 0x38, 0x2b, 0xff, 0x4d, 0x34, 0x2f, 0xff, 0xaa, 0x9f, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf5, 0xf1, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xed, 0xe6, 0xff, 0xc0, 0xb7, 0x9b, 0xff, 0xa2, 0x94, 0x66, 0xff, 0xa2, 0x95, 0x66, 0xff, 0xa2, 0x97, 0x68, 0xff, 0xa4, 0x9a, 0x6b, 0xff, 0xa7, 0x9e, 0x6f, 0xff, 0xaa, 0xa1, 0x72, 0xff, 0xab, 0xa4, 0x75, 0xff, 0xb6, 0xb1, 0x82, 0xff, 0xbe, 0xb6, 0x88, 0xff, 0xb9, 0xb2, 0x81, 0xff, 0xb1, 0xab, 0x7b, 0xff, 0xaf, 0xa5, 0x75, 0xff, 0xad, 0x9f, 0x6e, 0xff, 0xa4, 0x93, 0x62, 0xff, 0x9c, 0x87, 0x58, 0xff, 0x9c, 0x85, 0x5b, 0xff, 0x95, 0x7e, 0x52, 0xff, 0x9e, 0x84, 0x51, 0xff, 0xb2, 0x95, 0x5a, 0xff, 0xbd, 0xaf, 0x7c, 0xff, 0xe4, 0xf0, 0xe3, 0xff, 0xdd, 0xea, 0xec, 0xff, 0xe0, 0xed, 0xea, 0xff, 0xd6, 0xe1, 0xd7, 0xff, 0xd5, 0xd5, 0xcb, 0xff, 0xa3, 0x93, 0x81, 0xff, 0x80, 0x66, 0x5b, 0xff, 0x76, 0x5a, 0x54, 0xff, 0x65, 0x4b, 0x48, 0xff, 0x5f, 0x48, 0x47, 0xff, 0x4a, 0x33, 0x34, 0xff, 0x43, 0x2d, 0x30, 0xff, 0x56, 0x40, 0x45, 0xff, 0x57, 0x44, 0x49, 0xff, 0x3c, 0x27, 0x2b, 0xff, 0x28, 0x11, 0x16, 0xff, 0x31, 0x1b, 0x20, 0xff, 0x38, 0x24, 0x29, 0xff, 0x33, 0x1f, 0x24, 0xff, 0x34, 0x20, 0x27, 0xff, 0x27, 0x16, 0x1f, 0xff, 0x25, 0x13, 0x1a, 0xff, 0x26, 0x13, 0x17, 0xff, 0x24, 0x10, 0x12, 0xff, 0x2c, 0x19, 0x21, 0xff, 0x37, 0x33, 0x53, 0xff, 0x52, 0x57, 0x8a, 0xff, 0x7d, 0x8b, 0xc2, 0xff, 0x8c, 0xa2, 0xc7, 0xff, 0x9b, 0xb1, 0xca, 0xff, 0xa4, 0xba, 0xd3, 0xff, 0xa9, 0xc0, 0xd7, 0xff, 0xae, 0xc3, 0xd8, 0xff, 0xaf, 0xc5, 0xd8, 0xff, 0xb1, 0xc7, 0xdc, 0xff, 0xb2, 0xc7, 0xdc, 0xff, 0xb1, 0xc6, 0xdb, 0xff, 0xb1, 0xc6, 0xdb, 0xff, 0xb2, 0xc6, 0xdb, 0xff, 0xb4, 0xc8, 0xde, 0xff, 0xb5, 0xca, 0xdf, 0xff, 0xb7, 0xcc, 0xe1, 0xff, 0xb8, 0xcd, 0xe2, 0xff, 0xb9, 0xce, 0xe2, 0xff, 0xb9, 0xce, 0xe2, 0xff, 0xba, 0xcf, 0xe1, 0xff, 0xbc, 0xcf, 0xe1, 0xff, 0xbd, 0xd1, 0xe3, 0xff, 0xbe, 0xd2, 0xe3, 0xff, 0xc0, 0xd2, 0xe3, 0xff, 0xbf, 0xd1, 0xe1, 0xff, 0xc0, 0xd3, 0xe3, 0xff, 0xc1, 0xd4, 0xe3, 0xff, 0xbf, 0xd3, 0xe2, 0xff, 0xbf, 0xd2, 0xe0, 0xff, 0xc1, 0xd2, 0xe1, 0xff, 0xc1, 0xd1, 0xe1, 0xff, 0xbe, 0xce, 0xde, 0xff, 0xbd, 0xcc, 0xdd, 0xff, 0xbb, 0xcb, 0xda, 0xff, 0xb9, 0xc9, 0xd8, 0xff, 0xb6, 0xc6, 0xd6, 0xff, 0xb3, 0xc3, 0xd3, 0xff, 0xb1, 0xc1, 0xd2, 0xff, 0xb0, 0xc0, 0xd1, 0xff, 0xab, 0xbb, 0xcc, 0xff, 0xa9, 0xb7, 0xc8, 0xff, 0xa4, 0xb3, 0xc3, 0xff, 0xa1, 0xad, 0xbd, 0xff, 0x9d, 0xa7, 0xb6, 0xff, 0x92, 0x99, 0xa9, 0xff, 0x79, 0x7b, 0x90, 0xff, 0x65, 0x63, 0x82, 0xff, 0x4e, 0x47, 0x64, 0xff, 0x3a, 0x2c, 0x3c, 0xff, 0x24, 0x12, 0x1a, 0xff, 0x31, 0x23, 0x2b, 0xff, 0x55, 0x46, 0x50, 0xff, 0x48, 0x37, 0x3d, 0xff, 0x2d, 0x1b, 0x1f, 0xff, 0x27, 0x15, 0x1a, 0xff, 0x2f, 0x1c, 0x1e, 0xff, 0x24, 0x15, 0x17, 0xff, 0x4e, 0x42, 0x42, 0xff, 0x3c, 0x2e, 0x2e, 0xff, 0x21, 0x0e, 0x11, 0xff, 0x50, 0x3d, 0x38, 0xff, 0x51, 0x3f, 0x37, 0xff, 0x22, 0x11, 0x0e, 0xff, 0x2b, 0x19, 0x1c, 0xff, 0x21, 0x0f, 0x12, 0xff, 0x24, 0x11, 0x14, 0xff, 0x28, 0x14, 0x18, 0xff, 0x20, 0x0e, 0x11, 0xff, 0x1e, 0x0c, 0x0f, 0xff, 0x27, 0x14, 0x17, 0xff, 0x29, 0x16, 0x18, 0xff, 0x29, 0x15, 0x18, 0xff, 0x20, 0x0d, 0x0f, 0xff, 0x2a, 0x16, 0x17, 0xff, 0x33, 0x1e, 0x1d, 0xff, 0x34, 0x21, 0x1d, 0xff, 0x3e, 0x29, 0x22, 0xff, 0x3f, 0x28, 0x20, 0xff, 0x30, 0x19, 0x13, 0xff, 0x31, 0x1b, 0x18, 0xff, 0x29, 0x16, 0x15, 0xff, 0x2e, 0x18, 0x1a, 0xff, 0x38, 0x20, 0x1b, 0xff, 0x4d, 0x30, 0x27, 0xff, 0x56, 0x37, 0x2c, 0xff, 0x7a, 0x5b, 0x45, 0xff, 0x6a, 0x4f, 0x36, 0xff, 0x56, 0x3c, 0x2f, 0xff, 0x99, 0x8a, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xc7, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x84, 0xf6, 0xed, 0xe7, 0xff, 0xf9, 0xf2, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xdf, 0xd2, 0xff, 0xb7, 0xae, 0x8c, 0xff, 0xa2, 0x97, 0x6c, 0xff, 0xa5, 0x9b, 0x6d, 0xff, 0xa7, 0x9f, 0x70, 0xff, 0xa6, 0xa0, 0x74, 0xff, 0xa6, 0xa1, 0x74, 0xff, 0xa9, 0xa3, 0x75, 0xff, 0xaf, 0xaa, 0x7d, 0xff, 0xb8, 0xb4, 0x88, 0xff, 0xbf, 0xbb, 0x8e, 0xff, 0xbb, 0xb7, 0x89, 0xff, 0xb7, 0xb2, 0x83, 0xff, 0xb5, 0xae, 0x7f, 0xff, 0xad, 0xa2, 0x71, 0xff, 0xa8, 0x9a, 0x68, 0xff, 0xa0, 0x8c, 0x5d, 0xff, 0x96, 0x81, 0x53, 0xff, 0x8e, 0x7a, 0x4b, 0xff, 0xa5, 0x8c, 0x5e, 0xff, 0x7d, 0x57, 0x2b, 0xff, 0x8a, 0x76, 0x50, 0xff, 0xde, 0xdf, 0xbe, 0xff, 0xeb, 0xf4, 0xee, 0xff, 0xd6, 0xe9, 0xe2, 0xff, 0xd6, 0xdd, 0xd4, 0xff, 0xca, 0xca, 0xb9, 0xff, 0xaa, 0x97, 0x7f, 0xff, 0x7b, 0x5f, 0x4e, 0xff, 0x66, 0x4b, 0x40, 0xff, 0x60, 0x44, 0x3e, 0xff, 0x54, 0x3c, 0x3c, 0xff, 0x4a, 0x35, 0x38, 0xff, 0x4e, 0x38, 0x3a, 0xff, 0x46, 0x30, 0x34, 0xff, 0x31, 0x1b, 0x20, 0xff, 0x2b, 0x14, 0x19, 0xff, 0x42, 0x2f, 0x33, 0xff, 0x4c, 0x3b, 0x3f, 0xff, 0x32, 0x1e, 0x23, 0xff, 0x29, 0x17, 0x1d, 0xff, 0x2d, 0x1c, 0x22, 0xff, 0x28, 0x17, 0x20, 0xff, 0x29, 0x16, 0x1d, 0xff, 0x24, 0x12, 0x12, 0xff, 0x22, 0x11, 0x10, 0xff, 0x30, 0x22, 0x30, 0xff, 0x44, 0x48, 0x74, 0xff, 0x6b, 0x76, 0xac, 0xff, 0x8e, 0xa1, 0xca, 0xff, 0x9b, 0xb1, 0xcd, 0xff, 0xaa, 0xbf, 0xd3, 0xff, 0xad, 0xc3, 0xd6, 0xff, 0xb1, 0xc8, 0xda, 0xff, 0xb5, 0xca, 0xdc, 0xff, 0xb5, 0xcb, 0xdd, 0xff, 0xb5, 0xcb, 0xdd, 0xff, 0xb6, 0xcc, 0xde, 0xff, 0xb5, 0xcb, 0xdd, 0xff, 0xb4, 0xca, 0xdc, 0xff, 0xb3, 0xc8, 0xde, 0xff, 0xb5, 0xc9, 0xdf, 0xff, 0xb6, 0xcc, 0xe1, 0xff, 0xb5, 0xcd, 0xe2, 0xff, 0xb8, 0xcf, 0xe2, 0xff, 0xba, 0xd0, 0xe1, 0xff, 0xbb, 0xd2, 0xe2, 0xff, 0xbc, 0xd1, 0xe2, 0xff, 0xbe, 0xd1, 0xe2, 0xff, 0xbf, 0xd3, 0xe4, 0xff, 0xbf, 0xd4, 0xe4, 0xff, 0xc2, 0xd6, 0xe4, 0xff, 0xc2, 0xd4, 0xe3, 0xff, 0xc3, 0xd6, 0xe5, 0xff, 0xc3, 0xd6, 0xe6, 0xff, 0xc3, 0xd6, 0xe4, 0xff, 0xc2, 0xd5, 0xe1, 0xff, 0xc2, 0xd5, 0xe2, 0xff, 0xc2, 0xd5, 0xe2, 0xff, 0xc0, 0xd3, 0xe0, 0xff, 0xbd, 0xd0, 0xde, 0xff, 0xbc, 0xce, 0xdb, 0xff, 0xbb, 0xcc, 0xd8, 0xff, 0xba, 0xc9, 0xd9, 0xff, 0xb8, 0xc7, 0xd8, 0xff, 0xb5, 0xc5, 0xd6, 0xff, 0xb4, 0xc4, 0xd5, 0xff, 0xb1, 0xc2, 0xd0, 0xff, 0xac, 0xbc, 0xcb, 0xff, 0xa9, 0xb8, 0xca, 0xff, 0xa2, 0xb1, 0xc4, 0xff, 0x9f, 0xab, 0xba, 0xff, 0x9a, 0xa1, 0xb0, 0xff, 0x91, 0x98, 0xaa, 0xff, 0x85, 0x8b, 0xa2, 0xff, 0x6c, 0x6d, 0x8b, 0xff, 0x42, 0x3d, 0x5c, 0xff, 0x41, 0x36, 0x4d, 0xff, 0x35, 0x28, 0x34, 0xff, 0x24, 0x14, 0x1c, 0xff, 0x2d, 0x1b, 0x21, 0xff, 0x2f, 0x1d, 0x21, 0xff, 0x2e, 0x1b, 0x23, 0xff, 0x31, 0x1f, 0x25, 0xff, 0x33, 0x27, 0x28, 0xff, 0x3e, 0x31, 0x33, 0xff, 0x1e, 0x0e, 0x11, 0xff, 0x48, 0x37, 0x32, 0xff, 0x6b, 0x5a, 0x51, 0xff, 0x53, 0x41, 0x39, 0xff, 0x2b, 0x19, 0x18, 0xff, 0x1e, 0x0c, 0x0f, 0xff, 0x22, 0x0e, 0x12, 0xff, 0x28, 0x14, 0x17, 0xff, 0x21, 0x0f, 0x12, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x24, 0x11, 0x14, 0xff, 0x27, 0x14, 0x17, 0xff, 0x24, 0x11, 0x14, 0xff, 0x25, 0x11, 0x14, 0xff, 0x23, 0x10, 0x15, 0xff, 0x23, 0x10, 0x15, 0xff, 0x24, 0x0f, 0x13, 0xff, 0x25, 0x11, 0x14, 0xff, 0x26, 0x14, 0x15, 0xff, 0x38, 0x22, 0x1f, 0xff, 0x42, 0x2b, 0x27, 0xff, 0x34, 0x1f, 0x1e, 0xff, 0x1d, 0x0a, 0x0d, 0xff, 0x28, 0x12, 0x10, 0xff, 0x51, 0x35, 0x2d, 0xff, 0x62, 0x43, 0x33, 0xff, 0x61, 0x42, 0x2c, 0xff, 0x6a, 0x49, 0x34, 0xff, 0x49, 0x2d, 0x1f, 0xff, 0x3e, 0x24, 0x20, 0xff, 0x8d, 0x7b, 0x74, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x9c, 0xf6, 0xed, 0xe7, 0xff, 0xfa, 0xf4, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xd5, 0xc3, 0xff, 0xb7, 0xae, 0x8a, 0xff, 0xa6, 0x9d, 0x71, 0xff, 0xa7, 0xa0, 0x72, 0xff, 0xa8, 0xa1, 0x73, 0xff, 0xa8, 0xa2, 0x76, 0xff, 0xa7, 0xa2, 0x76, 0xff, 0xaa, 0xa6, 0x79, 0xff, 0xb3, 0xaf, 0x82, 0xff, 0xb9, 0xb6, 0x89, 0xff, 0xbd, 0xbb, 0x8e, 0xff, 0xbb, 0xb8, 0x8b, 0xff, 0xb9, 0xb6, 0x88, 0xff, 0xb6, 0xb1, 0x83, 0xff, 0xb2, 0xa9, 0x7a, 0xff, 0xa9, 0x9e, 0x6c, 0xff, 0xa7, 0x97, 0x65, 0xff, 0xa4, 0x91, 0x61, 0xff, 0xab, 0x93, 0x63, 0xff, 0x9e, 0x84, 0x52, 0xff, 0x7f, 0x66, 0x36, 0xff, 0xb9, 0xa5, 0x73, 0xff, 0xbb, 0xaf, 0x82, 0xff, 0xcd, 0xd3, 0xc9, 0xff, 0xe0, 0xed, 0xe8, 0xff, 0xc4, 0xc7, 0xb7, 0xff, 0xd1, 0xd5, 0xc5, 0xff, 0xb1, 0xa5, 0x8d, 0xff, 0x84, 0x65, 0x52, 0xff, 0x71, 0x53, 0x48, 0xff, 0x54, 0x39, 0x37, 0xff, 0x48, 0x2f, 0x30, 0xff, 0x47, 0x31, 0x34, 0xff, 0x41, 0x2b, 0x2e, 0xff, 0x39, 0x23, 0x25, 0xff, 0x3f, 0x29, 0x2c, 0xff, 0x4c, 0x35, 0x3a, 0xff, 0x4f, 0x3e, 0x42, 0xff, 0x3e, 0x2e, 0x32, 0xff, 0x2d, 0x19, 0x1f, 0xff, 0x33, 0x20, 0x28, 0xff, 0x31, 0x1f, 0x26, 0xff, 0x2b, 0x1a, 0x21, 0xff, 0x29, 0x15, 0x1b, 0xff, 0x24, 0x10, 0x13, 0xff, 0x1d, 0x0b, 0x0b, 0xff, 0x35, 0x27, 0x39, 0xff, 0x5d, 0x62, 0x95, 0xff, 0x80, 0x8f, 0xbe, 0xff, 0x98, 0xaf, 0xcb, 0xff, 0xa8, 0xbd, 0xd2, 0xff, 0xb0, 0xc2, 0xd6, 0xff, 0xb3, 0xca, 0xda, 0xff, 0xb6, 0xcd, 0xdd, 0xff, 0xb7, 0xcd, 0xdf, 0xff, 0xb7, 0xce, 0xdf, 0xff, 0xb8, 0xce, 0xe0, 0xff, 0xb7, 0xce, 0xde, 0xff, 0xb6, 0xcd, 0xde, 0xff, 0xb6, 0xcc, 0xdf, 0xff, 0xb6, 0xcb, 0xdf, 0xff, 0xb6, 0xcc, 0xe0, 0xff, 0xb7, 0xce, 0xe1, 0xff, 0xb6, 0xce, 0xe1, 0xff, 0xb7, 0xce, 0xe0, 0xff, 0xb9, 0xd0, 0xe1, 0xff, 0xbd, 0xd5, 0xe4, 0xff, 0xbc, 0xd3, 0xe2, 0xff, 0xbf, 0xd2, 0xe3, 0xff, 0xc1, 0xd5, 0xe6, 0xff, 0xc1, 0xd7, 0xe6, 0xff, 0xc3, 0xd7, 0xe6, 0xff, 0xc4, 0xd6, 0xe6, 0xff, 0xc5, 0xd8, 0xe6, 0xff, 0xc4, 0xd7, 0xe6, 0xff, 0xc4, 0xd7, 0xe4, 0xff, 0xc4, 0xd7, 0xe3, 0xff, 0xc3, 0xd7, 0xe3, 0xff, 0xc1, 0xd5, 0xe1, 0xff, 0xc0, 0xd3, 0xe0, 0xff, 0xc0, 0xd3, 0xdf, 0xff, 0xbc, 0xce, 0xdb, 0xff, 0xbc, 0xcd, 0xd9, 0xff, 0xbb, 0xcc, 0xda, 0xff, 0xba, 0xca, 0xd9, 0xff, 0xb8, 0xc8, 0xd8, 0xff, 0xb5, 0xc7, 0xd5, 0xff, 0xb4, 0xc5, 0xd1, 0xff, 0xb1, 0xc2, 0xcf, 0xff, 0xab, 0xbb, 0xcb, 0xff, 0xa6, 0xb5, 0xc6, 0xff, 0xa3, 0xaf, 0xbe, 0xff, 0x9f, 0xa9, 0xb6, 0xff, 0x99, 0xa4, 0xb3, 0xff, 0x96, 0xa0, 0xae, 0xff, 0x98, 0xa0, 0xb2, 0xff, 0x74, 0x77, 0x95, 0xff, 0x53, 0x52, 0x6f, 0xff, 0x45, 0x3f, 0x56, 0xff, 0x2d, 0x23, 0x35, 0xff, 0x2e, 0x20, 0x2f, 0xff, 0x33, 0x23, 0x2d, 0xff, 0x31, 0x21, 0x2a, 0xff, 0x2f, 0x20, 0x26, 0xff, 0x33, 0x27, 0x29, 0xff, 0x34, 0x26, 0x28, 0xff, 0x39, 0x26, 0x27, 0xff, 0x69, 0x5a, 0x4f, 0xff, 0x66, 0x57, 0x4c, 0xff, 0x57, 0x46, 0x41, 0xff, 0x1e, 0x0c, 0x0d, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x21, 0x0f, 0x12, 0xff, 0x24, 0x12, 0x15, 0xff, 0x24, 0x11, 0x14, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x1f, 0x0d, 0x10, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x22, 0x10, 0x13, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x26, 0x12, 0x12, 0xff, 0x25, 0x13, 0x13, 0xff, 0x28, 0x14, 0x15, 0xff, 0x29, 0x12, 0x15, 0xff, 0x24, 0x0f, 0x13, 0xff, 0x2e, 0x17, 0x15, 0xff, 0x39, 0x1f, 0x1b, 0xff, 0x35, 0x1d, 0x1b, 0xff, 0x2e, 0x18, 0x17, 0xff, 0x45, 0x2e, 0x25, 0xff, 0x4f, 0x33, 0x27, 0xff, 0x58, 0x3a, 0x2a, 0xff, 0x86, 0x6b, 0x53, 0xff, 0x5c, 0x41, 0x2f, 0xff, 0x2f, 0x10, 0x0f, 0xff, 0x38, 0x1e, 0x1f, 0xff, 0x6d, 0x5c, 0x55, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfa, 0xf9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf6, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd3, 0xcd, 0xb7, 0xff, 0xb4, 0xab, 0x84, 0xff, 0xa7, 0xa0, 0x73, 0xff, 0xa7, 0xa3, 0x76, 0xff, 0xa7, 0xa2, 0x75, 0xff, 0xa8, 0xa2, 0x75, 0xff, 0xa9, 0xa5, 0x78, 0xff, 0xac, 0xa9, 0x7c, 0xff, 0xb3, 0xaf, 0x83, 0xff, 0xba, 0xb7, 0x8a, 0xff, 0xbc, 0xbc, 0x8e, 0xff, 0xba, 0xba, 0x8d, 0xff, 0xba, 0xb8, 0x8b, 0xff, 0xb8, 0xb6, 0x8a, 0xff, 0xb3, 0xad, 0x80, 0xff, 0xad, 0xa3, 0x73, 0xff, 0xa8, 0x9b, 0x68, 0xff, 0xa4, 0x95, 0x65, 0xff, 0xa4, 0x91, 0x60, 0xff, 0x9c, 0x86, 0x53, 0xff, 0xba, 0xa9, 0x77, 0xff, 0xa4, 0x8b, 0x56, 0xff, 0x9c, 0x8b, 0x64, 0xff, 0xda, 0xe9, 0xe0, 0xff, 0xe9, 0xf4, 0xf1, 0xff, 0xbc, 0xbb, 0xa6, 0xff, 0xc2, 0xc4, 0xae, 0xff, 0xbc, 0xb5, 0x9a, 0xff, 0x91, 0x77, 0x69, 0xff, 0x67, 0x4f, 0x4e, 0xff, 0x51, 0x3e, 0x44, 0xff, 0x51, 0x39, 0x3c, 0xff, 0x4b, 0x34, 0x36, 0xff, 0x40, 0x2c, 0x2e, 0xff, 0x4b, 0x37, 0x38, 0xff, 0x46, 0x31, 0x35, 0xff, 0x4c, 0x36, 0x3f, 0xff, 0x39, 0x24, 0x2c, 0xff, 0x2a, 0x17, 0x1a, 0xff, 0x2d, 0x1b, 0x20, 0xff, 0x32, 0x1f, 0x28, 0xff, 0x2f, 0x1c, 0x26, 0xff, 0x28, 0x19, 0x1d, 0xff, 0x26, 0x15, 0x1c, 0xff, 0x29, 0x13, 0x1b, 0xff, 0x1d, 0x07, 0x05, 0xff, 0x39, 0x2e, 0x43, 0xff, 0x77, 0x84, 0xb3, 0xff, 0x95, 0xaa, 0xc9, 0xff, 0xaa, 0xbe, 0xd1, 0xff, 0xb0, 0xc4, 0xd4, 0xff, 0xb4, 0xc9, 0xda, 0xff, 0xb7, 0xcf, 0xde, 0xff, 0xb9, 0xd0, 0xe0, 0xff, 0xba, 0xd1, 0xe1, 0xff, 0xb7, 0xce, 0xde, 0xff, 0xb9, 0xd0, 0xdf, 0xff, 0xb9, 0xd0, 0xe0, 0xff, 0xba, 0xd0, 0xe1, 0xff, 0xb7, 0xcd, 0xe0, 0xff, 0xb8, 0xce, 0xe0, 0xff, 0xb8, 0xce, 0xe0, 0xff, 0xb7, 0xcd, 0xdf, 0xff, 0xb8, 0xce, 0xdf, 0xff, 0xb9, 0xcf, 0xe1, 0xff, 0xbc, 0xd3, 0xe4, 0xff, 0xbc, 0xd3, 0xe3, 0xff, 0xbb, 0xd3, 0xe3, 0xff, 0xbe, 0xd4, 0xe4, 0xff, 0xc1, 0xd5, 0xe4, 0xff, 0xc0, 0xd5, 0xe4, 0xff, 0xc2, 0xd6, 0xe4, 0xff, 0xc6, 0xd9, 0xe7, 0xff, 0xc4, 0xd7, 0xe4, 0xff, 0xc4, 0xd7, 0xe4, 0xff, 0xc5, 0xd8, 0xe5, 0xff, 0xc4, 0xd8, 0xe4, 0xff, 0xc2, 0xd6, 0xe3, 0xff, 0xc1, 0xd3, 0xe1, 0xff, 0xc2, 0xd3, 0xdf, 0xff, 0xc0, 0xd3, 0xdd, 0xff, 0xbe, 0xcf, 0xdb, 0xff, 0xbc, 0xcc, 0xda, 0xff, 0xbb, 0xcc, 0xd9, 0xff, 0xba, 0xca, 0xd7, 0xff, 0xb8, 0xc9, 0xd7, 0xff, 0xb7, 0xc7, 0xd7, 0xff, 0xb2, 0xc2, 0xd1, 0xff, 0xb0, 0xc1, 0xcf, 0xff, 0xad, 0xbe, 0xcb, 0xff, 0xa7, 0xb5, 0xc2, 0xff, 0xa5, 0xb1, 0xbf, 0xff, 0xa2, 0xad, 0xbb, 0xff, 0x9c, 0xa8, 0xb3, 0xff, 0x9c, 0xa8, 0xb5, 0xff, 0x9a, 0xa5, 0xb3, 0xff, 0x9c, 0xa5, 0xb5, 0xff, 0x8b, 0x91, 0xa8, 0xff, 0x6c, 0x6e, 0x89, 0xff, 0x58, 0x56, 0x73, 0xff, 0x3e, 0x37, 0x52, 0xff, 0x35, 0x2b, 0x3e, 0xff, 0x2c, 0x20, 0x2d, 0xff, 0x2e, 0x1f, 0x28, 0xff, 0x38, 0x2a, 0x30, 0xff, 0x34, 0x23, 0x27, 0xff, 0x4e, 0x3c, 0x3b, 0xff, 0x68, 0x57, 0x4e, 0xff, 0x54, 0x46, 0x40, 0xff, 0x33, 0x24, 0x25, 0xff, 0x1b, 0x09, 0x0c, 0xff, 0x21, 0x0f, 0x12, 0xff, 0x21, 0x11, 0x14, 0xff, 0x1c, 0x0c, 0x10, 0xff, 0x2f, 0x1a, 0x1d, 0xff, 0x2c, 0x19, 0x1b, 0xff, 0x25, 0x15, 0x16, 0xff, 0x24, 0x11, 0x10, 0xff, 0x27, 0x14, 0x15, 0xff, 0x2a, 0x15, 0x19, 0xff, 0x2e, 0x18, 0x1a, 0xff, 0x2d, 0x1b, 0x1b, 0xff, 0x2a, 0x17, 0x17, 0xff, 0x2c, 0x16, 0x18, 0xff, 0x2b, 0x16, 0x14, 0xff, 0x39, 0x24, 0x1c, 0xff, 0x34, 0x1b, 0x18, 0xff, 0x2a, 0x12, 0x0e, 0xff, 0x50, 0x36, 0x28, 0xff, 0x74, 0x59, 0x45, 0xff, 0x69, 0x4f, 0x3e, 0xff, 0x56, 0x3a, 0x2e, 0xff, 0x4e, 0x35, 0x24, 0xff, 0x4e, 0x35, 0x28, 0xff, 0x53, 0x37, 0x32, 0xff, 0x46, 0x2d, 0x2a, 0xff, 0x59, 0x4a, 0x48, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x08, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcb, 0xc7, 0xad, 0xff, 0xaf, 0xa9, 0x7f, 0xff, 0xa9, 0xa3, 0x76, 0xff, 0xa9, 0xa4, 0x77, 0xff, 0xaa, 0xa5, 0x78, 0xff, 0xaa, 0xa6, 0x79, 0xff, 0xaa, 0xa7, 0x7a, 0xff, 0xad, 0xaa, 0x7d, 0xff, 0xb3, 0xb0, 0x83, 0xff, 0xba, 0xb7, 0x8b, 0xff, 0xbb, 0xbb, 0x8f, 0xff, 0xbc, 0xbc, 0x90, 0xff, 0xba, 0xb9, 0x8d, 0xff, 0xb9, 0xb8, 0x8c, 0xff, 0xb4, 0xb0, 0x83, 0xff, 0xae, 0xa4, 0x75, 0xff, 0xad, 0x9d, 0x6e, 0xff, 0xa4, 0x92, 0x62, 0xff, 0xa0, 0x92, 0x62, 0xff, 0xc0, 0xb4, 0x84, 0xff, 0xbe, 0xab, 0x7d, 0xff, 0x8b, 0x6b, 0x3f, 0xff, 0x92, 0x78, 0x51, 0xff, 0xdb, 0xe9, 0xda, 0xff, 0xdf, 0xf5, 0xf7, 0xff, 0xde, 0xe4, 0xd8, 0xff, 0xc3, 0xc0, 0xa7, 0xff, 0xb1, 0xab, 0x92, 0xff, 0x99, 0x8c, 0x81, 0xff, 0x87, 0x74, 0x6d, 0xff, 0x75, 0x64, 0x66, 0xff, 0x6e, 0x5c, 0x60, 0xff, 0x5e, 0x4c, 0x4f, 0xff, 0x5d, 0x4a, 0x4d, 0xff, 0x52, 0x41, 0x43, 0xff, 0x3c, 0x2b, 0x31, 0xff, 0x3c, 0x27, 0x30, 0xff, 0x38, 0x22, 0x28, 0xff, 0x2e, 0x1a, 0x1d, 0xff, 0x35, 0x24, 0x2a, 0xff, 0x34, 0x23, 0x2a, 0xff, 0x2d, 0x1a, 0x21, 0xff, 0x26, 0x16, 0x1c, 0xff, 0x28, 0x17, 0x1e, 0xff, 0x2e, 0x18, 0x1a, 0xff, 0x1d, 0x05, 0x02, 0xff, 0x47, 0x44, 0x62, 0xff, 0x94, 0xac, 0xd2, 0xff, 0xab, 0xc2, 0xd2, 0xff, 0xb5, 0xc4, 0xd3, 0xff, 0xb3, 0xc8, 0xd7, 0xff, 0xb4, 0xcd, 0xdd, 0xff, 0xb8, 0xcf, 0xdf, 0xff, 0xba, 0xd1, 0xe0, 0xff, 0xb9, 0xd0, 0xe0, 0xff, 0xba, 0xd1, 0xe0, 0xff, 0xb9, 0xcf, 0xdf, 0xff, 0xb9, 0xcf, 0xe0, 0xff, 0xb8, 0xcd, 0xdf, 0xff, 0xb7, 0xcc, 0xde, 0xff, 0xb6, 0xcc, 0xde, 0xff, 0xb6, 0xcc, 0xde, 0xff, 0xb6, 0xcc, 0xde, 0xff, 0xb6, 0xcc, 0xde, 0xff, 0xb8, 0xcf, 0xe1, 0xff, 0xbb, 0xd1, 0xe2, 0xff, 0xbc, 0xd3, 0xe3, 0xff, 0xbb, 0xd3, 0xe3, 0xff, 0xbd, 0xd3, 0xe3, 0xff, 0xc0, 0xd5, 0xe4, 0xff, 0xc1, 0xd7, 0xe3, 0xff, 0xc4, 0xd8, 0xe4, 0xff, 0xc5, 0xd7, 0xe4, 0xff, 0xc5, 0xd8, 0xe4, 0xff, 0xc5, 0xd8, 0xe5, 0xff, 0xc4, 0xd7, 0xe4, 0xff, 0xc1, 0xd4, 0xe1, 0xff, 0xc1, 0xd3, 0xe0, 0xff, 0xc3, 0xd4, 0xe0, 0xff, 0xc3, 0xd5, 0xe0, 0xff, 0xc1, 0xd2, 0xdd, 0xff, 0xc0, 0xd2, 0xde, 0xff, 0xbd, 0xd0, 0xdb, 0xff, 0xb9, 0xcb, 0xd8, 0xff, 0xb8, 0xca, 0xda, 0xff, 0xb6, 0xc7, 0xd8, 0xff, 0xb5, 0xc5, 0xd4, 0xff, 0xb1, 0xc1, 0xd1, 0xff, 0xad, 0xbd, 0xce, 0xff, 0xa9, 0xb9, 0xc9, 0xff, 0xa7, 0xb4, 0xc3, 0xff, 0xa6, 0xb2, 0xc0, 0xff, 0xa4, 0xaf, 0xbd, 0xff, 0xa0, 0xab, 0xb8, 0xff, 0x9b, 0xa5, 0xb5, 0xff, 0x98, 0xa1, 0xb3, 0xff, 0x8d, 0x95, 0xa5, 0xff, 0x86, 0x8c, 0x9f, 0xff, 0x89, 0x8f, 0xa7, 0xff, 0x82, 0x88, 0xa6, 0xff, 0x6a, 0x6c, 0x8b, 0xff, 0x4a, 0x4b, 0x6c, 0xff, 0x38, 0x34, 0x51, 0xff, 0x33, 0x26, 0x38, 0xff, 0x39, 0x2b, 0x37, 0xff, 0x2a, 0x19, 0x1f, 0xff, 0x48, 0x38, 0x39, 0xff, 0x58, 0x47, 0x47, 0xff, 0x34, 0x23, 0x25, 0xff, 0x2d, 0x1c, 0x20, 0xff, 0x27, 0x15, 0x17, 0xff, 0x23, 0x11, 0x13, 0xff, 0x23, 0x12, 0x16, 0xff, 0x19, 0x09, 0x0b, 0xff, 0x37, 0x25, 0x22, 0xff, 0x34, 0x22, 0x1f, 0xff, 0x2c, 0x19, 0x1a, 0xff, 0x31, 0x1c, 0x1a, 0xff, 0x31, 0x1c, 0x1c, 0xff, 0x37, 0x22, 0x21, 0xff, 0x3a, 0x23, 0x20, 0xff, 0x2f, 0x1b, 0x18, 0xff, 0x27, 0x15, 0x11, 0xff, 0x32, 0x20, 0x1b, 0xff, 0x40, 0x28, 0x22, 0xff, 0x48, 0x2e, 0x22, 0xff, 0x4f, 0x32, 0x29, 0xff, 0x5d, 0x3e, 0x36, 0xff, 0x66, 0x48, 0x3b, 0xff, 0x56, 0x3b, 0x2a, 0xff, 0x65, 0x49, 0x3c, 0xff, 0x5f, 0x45, 0x3b, 0xff, 0x4a, 0x30, 0x24, 0xff, 0x50, 0x35, 0x26, 0xff, 0x61, 0x48, 0x38, 0xff, 0x35, 0x1f, 0x17, 0xff, 0x48, 0x36, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x10, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xe7, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xc4, 0xa6, 0xff, 0xad, 0xa8, 0x7c, 0xff, 0xaa, 0xa4, 0x77, 0xff, 0xad, 0xa7, 0x79, 0xff, 0xae, 0xaa, 0x7d, 0xff, 0xad, 0xaa, 0x7f, 0xff, 0xac, 0xa9, 0x7d, 0xff, 0xab, 0xa9, 0x7d, 0xff, 0xb0, 0xae, 0x82, 0xff, 0xb7, 0xb5, 0x89, 0xff, 0xb9, 0xba, 0x8e, 0xff, 0xba, 0xbb, 0x8f, 0xff, 0xba, 0xb9, 0x8d, 0xff, 0xba, 0xb9, 0x8d, 0xff, 0xb4, 0xb2, 0x86, 0xff, 0xb6, 0xae, 0x83, 0xff, 0xb4, 0xab, 0x80, 0xff, 0xad, 0x9f, 0x6f, 0xff, 0xc7, 0xc0, 0x95, 0xff, 0xbb, 0xb6, 0x8a, 0xff, 0x9c, 0x8b, 0x59, 0xff, 0x85, 0x6d, 0x44, 0xff, 0x8c, 0x74, 0x4a, 0xff, 0xd5, 0xd4, 0xbb, 0xff, 0xe4, 0xf7, 0xfd, 0xff, 0xd4, 0xde, 0xd8, 0xff, 0xaf, 0xa5, 0x8b, 0xff, 0xac, 0xa2, 0x87, 0xff, 0xbd, 0xbd, 0xae, 0xff, 0x81, 0x76, 0x6f, 0xff, 0x75, 0x68, 0x6b, 0xff, 0x71, 0x64, 0x69, 0xff, 0x59, 0x49, 0x50, 0xff, 0x58, 0x44, 0x48, 0xff, 0x41, 0x2d, 0x31, 0xff, 0x45, 0x31, 0x38, 0xff, 0x3e, 0x2c, 0x33, 0xff, 0x40, 0x2d, 0x33, 0xff, 0x4a, 0x38, 0x40, 0xff, 0x44, 0x34, 0x3e, 0xff, 0x39, 0x29, 0x30, 0xff, 0x2d, 0x1c, 0x1f, 0xff, 0x27, 0x16, 0x1c, 0xff, 0x25, 0x15, 0x19, 0xff, 0x27, 0x14, 0x18, 0xff, 0x1d, 0x09, 0x0a, 0xff, 0x63, 0x5e, 0x78, 0xff, 0xab, 0xbb, 0xde, 0xff, 0xc3, 0xd5, 0xe5, 0xff, 0xc5, 0xd8, 0xe5, 0xff, 0xb8, 0xce, 0xdb, 0xff, 0xb0, 0xc8, 0xd7, 0xff, 0xb2, 0xc8, 0xd9, 0xff, 0xb6, 0xcd, 0xdd, 0xff, 0xb6, 0xcd, 0xdd, 0xff, 0xb7, 0xce, 0xdf, 0xff, 0xb3, 0xcb, 0xdd, 0xff, 0xb4, 0xcb, 0xdd, 0xff, 0xb3, 0xcb, 0xdd, 0xff, 0xb4, 0xcc, 0xe0, 0xff, 0xb5, 0xcb, 0xde, 0xff, 0xb6, 0xcc, 0xdd, 0xff, 0xb6, 0xcc, 0xde, 0xff, 0xb5, 0xcb, 0xdd, 0xff, 0xba, 0xcf, 0xe2, 0xff, 0xbb, 0xd2, 0xe2, 0xff, 0xbb, 0xd2, 0xe2, 0xff, 0xbb, 0xd2, 0xe2, 0xff, 0xbd, 0xd3, 0xe3, 0xff, 0xc0, 0xd4, 0xe3, 0xff, 0xc0, 0xd5, 0xe4, 0xff, 0xc3, 0xd6, 0xe5, 0xff, 0xc2, 0xd4, 0xe3, 0xff, 0xc2, 0xd6, 0xe3, 0xff, 0xc2, 0xd6, 0xe3, 0xff, 0xc1, 0xd5, 0xe2, 0xff, 0xc1, 0xd5, 0xe1, 0xff, 0xc4, 0xd6, 0xe1, 0xff, 0xc3, 0xd4, 0xe0, 0xff, 0xc4, 0xd5, 0xe1, 0xff, 0xc5, 0xd6, 0xe0, 0xff, 0xc4, 0xd7, 0xde, 0xff, 0xc3, 0xd8, 0xdd, 0xff, 0xbf, 0xd3, 0xdc, 0xff, 0xbd, 0xd1, 0xda, 0xff, 0xba, 0xcd, 0xd6, 0xff, 0xb8, 0xca, 0xd3, 0xff, 0xb4, 0xc5, 0xd0, 0xff, 0xaf, 0xc0, 0xce, 0xff, 0xac, 0xbb, 0xc9, 0xff, 0xa7, 0xb5, 0xc3, 0xff, 0xa2, 0xae, 0xbc, 0xff, 0xa1, 0xab, 0xb9, 0xff, 0x9e, 0xa9, 0xb7, 0xff, 0x9a, 0xa4, 0xb4, 0xff, 0x97, 0xa1, 0xb2, 0xff, 0x8b, 0x95, 0xa6, 0xff, 0x86, 0x8f, 0xa2, 0xff, 0x7e, 0x86, 0x9e, 0xff, 0x7a, 0x81, 0x9b, 0xff, 0x7c, 0x81, 0x9b, 0xff, 0x70, 0x74, 0x93, 0xff, 0x5f, 0x61, 0x83, 0xff, 0x4b, 0x47, 0x64, 0xff, 0x3d, 0x32, 0x46, 0xff, 0x3f, 0x33, 0x3e, 0xff, 0x46, 0x3b, 0x43, 0xff, 0x29, 0x1a, 0x20, 0xff, 0x2b, 0x1a, 0x1e, 0xff, 0x38, 0x26, 0x29, 0xff, 0x2a, 0x18, 0x1b, 0xff, 0x27, 0x14, 0x17, 0xff, 0x25, 0x13, 0x16, 0xff, 0x26, 0x14, 0x17, 0xff, 0x33, 0x1f, 0x1a, 0xff, 0x28, 0x16, 0x14, 0xff, 0x26, 0x13, 0x16, 0xff, 0x36, 0x20, 0x20, 0xff, 0x33, 0x1f, 0x1e, 0xff, 0x33, 0x1f, 0x1c, 0xff, 0x4f, 0x37, 0x30, 0xff, 0x50, 0x36, 0x30, 0xff, 0x3f, 0x27, 0x20, 0xff, 0x4f, 0x3a, 0x31, 0xff, 0x6c, 0x55, 0x49, 0xff, 0x60, 0x49, 0x37, 0xff, 0x57, 0x3d, 0x30, 0xff, 0x51, 0x38, 0x2c, 0xff, 0x3d, 0x22, 0x1a, 0xff, 0x4a, 0x30, 0x29, 0xff, 0x3c, 0x22, 0x1f, 0xff, 0x2a, 0x10, 0x14, 0xff, 0x45, 0x2b, 0x26, 0xff, 0x59, 0x3d, 0x2d, 0xff, 0x54, 0x39, 0x27, 0xff, 0x51, 0x37, 0x2c, 0xff, 0x43, 0x2d, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x20, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfa, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc2, 0xbf, 0x9f, 0xff, 0xab, 0xa7, 0x7b, 0xff, 0xab, 0xa7, 0x7a, 0xff, 0xae, 0xa8, 0x7b, 0xff, 0xad, 0xa9, 0x7c, 0xff, 0xab, 0xa9, 0x7d, 0xff, 0xab, 0xa9, 0x7d, 0xff, 0xaa, 0xaa, 0x7e, 0xff, 0xaf, 0xae, 0x82, 0xff, 0xb4, 0xb4, 0x88, 0xff, 0xb8, 0xba, 0x8e, 0xff, 0xbb, 0xbc, 0x90, 0xff, 0xbb, 0xba, 0x8f, 0xff, 0xb9, 0xb8, 0x8c, 0xff, 0xb4, 0xb4, 0x87, 0xff, 0xb3, 0xb1, 0x85, 0xff, 0xbe, 0xbc, 0x91, 0xff, 0xc4, 0xc2, 0x96, 0xff, 0xd0, 0xd2, 0xaf, 0xff, 0xa9, 0x9f, 0x7a, 0xff, 0xad, 0x9c, 0x6b, 0xff, 0xba, 0xb5, 0x8a, 0xff, 0xaf, 0xa5, 0x74, 0xff, 0xbf, 0xbb, 0x9c, 0xff, 0xe1, 0xf0, 0xf1, 0xff, 0xd8, 0xe5, 0xe0, 0xff, 0xc3, 0xc4, 0xb2, 0xff, 0xb5, 0xae, 0x8e, 0xff, 0xce, 0xd1, 0xb9, 0xff, 0xb5, 0xb7, 0xaf, 0xff, 0x8b, 0x87, 0x88, 0xff, 0x69, 0x5c, 0x61, 0xff, 0x52, 0x3d, 0x47, 0xff, 0x4a, 0x34, 0x38, 0xff, 0x3b, 0x26, 0x28, 0xff, 0x41, 0x2a, 0x30, 0xff, 0x3b, 0x28, 0x2f, 0xff, 0x4a, 0x3a, 0x43, 0xff, 0x53, 0x43, 0x4e, 0xff, 0x43, 0x33, 0x3d, 0xff, 0x2e, 0x1f, 0x24, 0xff, 0x26, 0x16, 0x19, 0xff, 0x29, 0x15, 0x1c, 0xff, 0x26, 0x13, 0x16, 0xff, 0x23, 0x13, 0x1d, 0xff, 0x24, 0x15, 0x19, 0xff, 0x41, 0x37, 0x47, 0xff, 0x4e, 0x49, 0x68, 0xff, 0x6e, 0x70, 0x8e, 0xff, 0x98, 0xac, 0xc6, 0xff, 0xbc, 0xd3, 0xe7, 0xff, 0xbe, 0xd5, 0xe2, 0xff, 0xb1, 0xc8, 0xd7, 0xff, 0xb2, 0xc7, 0xd9, 0xff, 0xb3, 0xc7, 0xda, 0xff, 0xb2, 0xc7, 0xdb, 0xff, 0xb1, 0xca, 0xdb, 0xff, 0xb2, 0xca, 0xde, 0xff, 0xaf, 0xc7, 0xdc, 0xff, 0xb1, 0xca, 0xdd, 0xff, 0xb5, 0xcc, 0xdd, 0xff, 0xb5, 0xca, 0xdc, 0xff, 0xb4, 0xca, 0xdc, 0xff, 0xb5, 0xcb, 0xdd, 0xff, 0xb8, 0xce, 0xe0, 0xff, 0xb8, 0xcf, 0xdf, 0xff, 0xb9, 0xd0, 0xe0, 0xff, 0xb9, 0xd0, 0xe0, 0xff, 0xba, 0xd0, 0xe1, 0xff, 0xba, 0xcf, 0xe2, 0xff, 0xbb, 0xd1, 0xe2, 0xff, 0xbd, 0xd1, 0xe0, 0xff, 0xbf, 0xd3, 0xe1, 0xff, 0xbf, 0xd0, 0xe1, 0xff, 0xbf, 0xd0, 0xe0, 0xff, 0xc0, 0xd4, 0xdf, 0xff, 0xc3, 0xd8, 0xde, 0xff, 0xc6, 0xdb, 0xe1, 0xff, 0xcd, 0xe2, 0xe8, 0xff, 0xcf, 0xe3, 0xe9, 0xff, 0xcb, 0xde, 0xe5, 0xff, 0xca, 0xdd, 0xe7, 0xff, 0xc6, 0xdb, 0xe4, 0xff, 0xc0, 0xd3, 0xde, 0xff, 0xb8, 0xcb, 0xd7, 0xff, 0xb1, 0xc4, 0xd0, 0xff, 0xbb, 0xcd, 0xd4, 0xff, 0xc0, 0xd2, 0xda, 0xff, 0xbc, 0xce, 0xd9, 0xff, 0xb6, 0xc8, 0xd3, 0xff, 0xab, 0xbb, 0xc6, 0xff, 0xa3, 0xb0, 0xbd, 0xff, 0xa0, 0xac, 0xbb, 0xff, 0x9d, 0xa8, 0xb7, 0xff, 0x98, 0xa4, 0xb2, 0xff, 0x93, 0x9f, 0xac, 0xff, 0x8f, 0x99, 0xaa, 0xff, 0x87, 0x8f, 0xa5, 0xff, 0x81, 0x89, 0xa3, 0xff, 0x7d, 0x86, 0xa1, 0xff, 0x7d, 0x84, 0x9d, 0xff, 0x79, 0x7c, 0x98, 0xff, 0x6f, 0x73, 0x92, 0xff, 0x63, 0x67, 0x85, 0xff, 0x4d, 0x49, 0x5f, 0xff, 0x56, 0x4d, 0x5d, 0xff, 0x49, 0x3f, 0x4e, 0xff, 0x24, 0x16, 0x1d, 0xff, 0x30, 0x21, 0x23, 0xff, 0x35, 0x23, 0x24, 0xff, 0x29, 0x17, 0x1a, 0xff, 0x26, 0x14, 0x17, 0xff, 0x21, 0x0d, 0x11, 0xff, 0x2d, 0x1a, 0x1d, 0xff, 0x39, 0x24, 0x23, 0xff, 0x25, 0x12, 0x13, 0xff, 0x20, 0x0e, 0x14, 0xff, 0x2b, 0x17, 0x19, 0xff, 0x2c, 0x19, 0x19, 0xff, 0x1d, 0x0b, 0x0b, 0xff, 0x22, 0x0f, 0x0e, 0xff, 0x3b, 0x24, 0x23, 0xff, 0x38, 0x21, 0x20, 0xff, 0x3c, 0x27, 0x26, 0xff, 0x42, 0x2e, 0x29, 0xff, 0x48, 0x33, 0x2a, 0xff, 0x30, 0x19, 0x17, 0xff, 0x29, 0x14, 0x16, 0xff, 0x27, 0x15, 0x10, 0xff, 0x43, 0x30, 0x25, 0xff, 0x41, 0x2c, 0x26, 0xff, 0x32, 0x1b, 0x1b, 0xff, 0x33, 0x1d, 0x1a, 0xff, 0x3d, 0x26, 0x22, 0xff, 0x3b, 0x23, 0x20, 0xff, 0x3b, 0x23, 0x22, 0xff, 0x42, 0x2e, 0x2d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xbc, 0x9a, 0xff, 0xab, 0xa9, 0x7c, 0xff, 0xaa, 0xa7, 0x7b, 0xff, 0xaa, 0xa7, 0x7b, 0xff, 0xaa, 0xa7, 0x7b, 0xff, 0xa9, 0xa8, 0x7c, 0xff, 0xaa, 0xa8, 0x7c, 0xff, 0xac, 0xaa, 0x7e, 0xff, 0xaf, 0xad, 0x81, 0xff, 0xb2, 0xb2, 0x89, 0xff, 0xb9, 0xba, 0x90, 0xff, 0xba, 0xba, 0x91, 0xff, 0xb9, 0xba, 0x91, 0xff, 0xb8, 0xb8, 0x8d, 0xff, 0xb4, 0xb5, 0x87, 0xff, 0xb2, 0xb0, 0x83, 0xff, 0xb4, 0xaf, 0x84, 0xff, 0xb0, 0xae, 0x82, 0xff, 0xb4, 0xac, 0x81, 0xff, 0xaf, 0x9b, 0x6c, 0xff, 0xc1, 0xa8, 0x77, 0xff, 0xb9, 0xa6, 0x75, 0xff, 0x9f, 0x89, 0x5c, 0xff, 0x9d, 0x8a, 0x68, 0xff, 0xd7, 0xe3, 0xd5, 0xff, 0xd6, 0xe3, 0xe0, 0xff, 0xc8, 0xcc, 0xbf, 0xff, 0xb7, 0xb3, 0x9e, 0xff, 0xac, 0xa4, 0x87, 0xff, 0xcb, 0xcc, 0xb5, 0xff, 0xa6, 0xa5, 0x9e, 0xff, 0x53, 0x42, 0x49, 0xff, 0x4a, 0x30, 0x38, 0xff, 0x5d, 0x48, 0x4c, 0xff, 0x56, 0x44, 0x4a, 0xff, 0x45, 0x31, 0x39, 0xff, 0x47, 0x36, 0x41, 0xff, 0x44, 0x32, 0x3d, 0xff, 0x47, 0x33, 0x3b, 0xff, 0x36, 0x22, 0x27, 0xff, 0x29, 0x15, 0x19, 0xff, 0x2d, 0x19, 0x1e, 0xff, 0x2c, 0x15, 0x19, 0xff, 0x29, 0x15, 0x1c, 0xff, 0x21, 0x11, 0x19, 0xff, 0x2f, 0x1d, 0x1f, 0xff, 0x36, 0x25, 0x31, 0xff, 0x2a, 0x1b, 0x29, 0xff, 0x25, 0x18, 0x2c, 0xff, 0x2e, 0x26, 0x42, 0xff, 0x60, 0x66, 0x8c, 0xff, 0xa3, 0xb5, 0xd7, 0xff, 0xbd, 0xd4, 0xe5, 0xff, 0xba, 0xd4, 0xe1, 0xff, 0xb2, 0xca, 0xd7, 0xff, 0xb0, 0xc5, 0xd5, 0xff, 0xb2, 0xc5, 0xd9, 0xff, 0xaf, 0xc6, 0xd8, 0xff, 0xae, 0xc6, 0xd8, 0xff, 0xb1, 0xc7, 0xdb, 0xff, 0xb3, 0xc8, 0xdd, 0xff, 0xb3, 0xc9, 0xdb, 0xff, 0xb5, 0xcb, 0xdc, 0xff, 0xb5, 0xcb, 0xdd, 0xff, 0xb5, 0xcb, 0xdd, 0xff, 0xb4, 0xcb, 0xdd, 0xff, 0xb4, 0xca, 0xdd, 0xff, 0xb6, 0xca, 0xdc, 0xff, 0xb8, 0xcc, 0xdd, 0xff, 0xb7, 0xcc, 0xdb, 0xff, 0xb7, 0xcc, 0xd9, 0xff, 0xb5, 0xca, 0xd8, 0xff, 0xb7, 0xc9, 0xdb, 0xff, 0xba, 0xca, 0xda, 0xff, 0xbd, 0xd2, 0xd8, 0xff, 0xc9, 0xdf, 0xe3, 0xff, 0xcc, 0xde, 0xe7, 0xff, 0xbc, 0xcc, 0xde, 0xff, 0x9f, 0xad, 0xc8, 0xff, 0x8f, 0x99, 0xb8, 0xff, 0x7d, 0x81, 0xa2, 0xff, 0x72, 0x71, 0x8f, 0xff, 0x70, 0x6f, 0x85, 0xff, 0x63, 0x5a, 0x6f, 0xff, 0x6f, 0x64, 0x7e, 0xff, 0x77, 0x72, 0x8f, 0xff, 0x73, 0x71, 0x8d, 0xff, 0x8d, 0x8f, 0xa4, 0xff, 0xa0, 0xa7, 0xb8, 0xff, 0xa6, 0xb2, 0xc1, 0xff, 0xa7, 0xb3, 0xbe, 0xff, 0xa7, 0xb1, 0xbf, 0xff, 0xa5, 0xae, 0xbe, 0xff, 0xa0, 0xab, 0xb8, 0xff, 0x9a, 0xa7, 0xb4, 0xff, 0x93, 0x9f, 0xae, 0xff, 0x8f, 0x99, 0xaa, 0xff, 0x86, 0x91, 0xa2, 0xff, 0x85, 0x8d, 0xa2, 0xff, 0x81, 0x89, 0xa2, 0xff, 0x7e, 0x83, 0x9d, 0xff, 0x79, 0x7d, 0x96, 0xff, 0x77, 0x7b, 0x94, 0xff, 0x7a, 0x7e, 0x97, 0xff, 0x69, 0x6b, 0x82, 0xff, 0x52, 0x4b, 0x5e, 0xff, 0x43, 0x35, 0x45, 0xff, 0x34, 0x26, 0x30, 0xff, 0x2c, 0x1c, 0x21, 0xff, 0x30, 0x1e, 0x1e, 0xff, 0x2c, 0x19, 0x1b, 0xff, 0x24, 0x13, 0x16, 0xff, 0x1c, 0x0c, 0x0f, 0xff, 0x29, 0x18, 0x1a, 0xff, 0x34, 0x22, 0x22, 0xff, 0x2c, 0x1a, 0x1c, 0xff, 0x24, 0x11, 0x16, 0xff, 0x1e, 0x0c, 0x0e, 0xff, 0x27, 0x15, 0x15, 0xff, 0x30, 0x1c, 0x1c, 0xff, 0x26, 0x11, 0x14, 0xff, 0x21, 0x0d, 0x0f, 0xff, 0x26, 0x14, 0x15, 0xff, 0x21, 0x0f, 0x11, 0xff, 0x1b, 0x06, 0x0a, 0xff, 0x32, 0x1e, 0x1d, 0xff, 0x31, 0x1d, 0x1c, 0xff, 0x26, 0x12, 0x15, 0xff, 0x2e, 0x1a, 0x1b, 0xff, 0x3f, 0x28, 0x22, 0xff, 0x43, 0x28, 0x22, 0xff, 0x37, 0x1f, 0x1d, 0xff, 0x2a, 0x15, 0x17, 0xff, 0x27, 0x12, 0x15, 0xff, 0x24, 0x11, 0x11, 0xff, 0x21, 0x0c, 0x0c, 0xff, 0x41, 0x29, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xba, 0x98, 0xff, 0xa9, 0xa8, 0x7d, 0xff, 0xa8, 0xa6, 0x7a, 0xff, 0xa9, 0xa7, 0x7b, 0xff, 0xaa, 0xa6, 0x7b, 0xff, 0xab, 0xa8, 0x7c, 0xff, 0xac, 0xa9, 0x7d, 0xff, 0xac, 0xa9, 0x7d, 0xff, 0xae, 0xaa, 0x7f, 0xff, 0xb0, 0xb0, 0x86, 0xff, 0xb6, 0xb5, 0x8b, 0xff, 0xb8, 0xb7, 0x8d, 0xff, 0xb7, 0xb6, 0x8c, 0xff, 0xb8, 0xb9, 0x8f, 0xff, 0xb4, 0xb4, 0x8a, 0xff, 0xbc, 0xba, 0x91, 0xff, 0xae, 0xac, 0x83, 0xff, 0xc0, 0xbc, 0x94, 0xff, 0xbe, 0xb3, 0x8a, 0xff, 0xb0, 0x9b, 0x70, 0xff, 0x97, 0x81, 0x56, 0xff, 0x8b, 0x74, 0x4c, 0xff, 0x8d, 0x74, 0x50, 0xff, 0xa1, 0x8c, 0x63, 0xff, 0xc9, 0xc7, 0xad, 0xff, 0xcf, 0xe3, 0xdc, 0xff, 0xc0, 0xcf, 0xc3, 0xff, 0xc9, 0xcd, 0xbc, 0xff, 0xae, 0xa9, 0x8d, 0xff, 0xb5, 0xb4, 0x9a, 0xff, 0xc9, 0xc9, 0xba, 0xff, 0x97, 0x91, 0x8e, 0xff, 0x64, 0x59, 0x5a, 0xff, 0x64, 0x51, 0x52, 0xff, 0x50, 0x3c, 0x46, 0xff, 0x4b, 0x3b, 0x49, 0xff, 0x50, 0x40, 0x4c, 0xff, 0x46, 0x34, 0x3b, 0xff, 0x36, 0x22, 0x26, 0xff, 0x2e, 0x1b, 0x1f, 0xff, 0x2f, 0x1c, 0x21, 0xff, 0x29, 0x16, 0x1b, 0xff, 0x2e, 0x1b, 0x1e, 0xff, 0x29, 0x18, 0x1f, 0xff, 0x21, 0x0f, 0x15, 0xff, 0x33, 0x20, 0x24, 0xff, 0x30, 0x22, 0x2f, 0xff, 0x33, 0x23, 0x36, 0xff, 0x2a, 0x17, 0x23, 0xff, 0x29, 0x13, 0x16, 0xff, 0x2b, 0x1a, 0x2c, 0xff, 0x40, 0x3b, 0x61, 0xff, 0x65, 0x6a, 0x96, 0xff, 0x93, 0xa3, 0xcd, 0xff, 0xae, 0xc9, 0xe4, 0xff, 0xb9, 0xd3, 0xde, 0xff, 0xb3, 0xc8, 0xd4, 0xff, 0xac, 0xc3, 0xd3, 0xff, 0xac, 0xc3, 0xd6, 0xff, 0xaf, 0xc3, 0xda, 0xff, 0xb0, 0xc4, 0xda, 0xff, 0xb1, 0xc8, 0xda, 0xff, 0xb4, 0xca, 0xdb, 0xff, 0xb4, 0xca, 0xdc, 0xff, 0xb3, 0xc8, 0xdc, 0xff, 0xb2, 0xc9, 0xdb, 0xff, 0xb3, 0xc8, 0xd9, 0xff, 0xb7, 0xca, 0xdb, 0xff, 0xb4, 0xc8, 0xd9, 0xff, 0xb5, 0xc5, 0xd6, 0xff, 0xb6, 0xc7, 0xd6, 0xff, 0xbd, 0xcf, 0xde, 0xff, 0xc8, 0xda, 0xe6, 0xff, 0xc0, 0xd5, 0xe0, 0xff, 0xaa, 0xbb, 0xd2, 0xff, 0x96, 0xa0, 0xc3, 0xff, 0x70, 0x73, 0x9b, 0xff, 0x54, 0x4f, 0x7a, 0xff, 0x3e, 0x36, 0x5e, 0xff, 0x35, 0x2b, 0x4b, 0xff, 0x32, 0x24, 0x3d, 0xff, 0x33, 0x21, 0x34, 0xff, 0x32, 0x1e, 0x2c, 0xff, 0x30, 0x1a, 0x26, 0xff, 0x3e, 0x29, 0x35, 0xff, 0x53, 0x42, 0x56, 0xff, 0x4f, 0x3c, 0x5a, 0xff, 0x4a, 0x38, 0x50, 0xff, 0x60, 0x52, 0x65, 0xff, 0x63, 0x58, 0x69, 0xff, 0x67, 0x60, 0x6f, 0xff, 0x77, 0x73, 0x84, 0xff, 0x8d, 0x8e, 0xa0, 0xff, 0x8b, 0x8f, 0x9f, 0xff, 0x93, 0x99, 0xa9, 0xff, 0x9e, 0xa4, 0xb6, 0xff, 0x91, 0x98, 0xab, 0xff, 0x87, 0x91, 0xa3, 0xff, 0x83, 0x8e, 0xa0, 0xff, 0x82, 0x8a, 0xa0, 0xff, 0x84, 0x8a, 0xa1, 0xff, 0x81, 0x87, 0x9c, 0xff, 0x7b, 0x80, 0x95, 0xff, 0x7d, 0x82, 0x97, 0xff, 0x7f, 0x83, 0x99, 0xff, 0x50, 0x4b, 0x5e, 0xff, 0x32, 0x25, 0x34, 0xff, 0x31, 0x22, 0x2e, 0xff, 0x2e, 0x1e, 0x23, 0xff, 0x2e, 0x1c, 0x1c, 0xff, 0x2c, 0x19, 0x1b, 0xff, 0x25, 0x14, 0x17, 0xff, 0x26, 0x16, 0x18, 0xff, 0x27, 0x16, 0x16, 0xff, 0x29, 0x17, 0x18, 0xff, 0x2b, 0x1b, 0x1a, 0xff, 0x1f, 0x0e, 0x0c, 0xff, 0x2c, 0x1b, 0x19, 0xff, 0x2c, 0x1b, 0x19, 0xff, 0x2d, 0x18, 0x19, 0xff, 0x2f, 0x19, 0x1c, 0xff, 0x22, 0x0f, 0x11, 0xff, 0x2b, 0x1a, 0x1b, 0xff, 0x26, 0x14, 0x16, 0xff, 0x27, 0x12, 0x14, 0xff, 0x38, 0x23, 0x20, 0xff, 0x3e, 0x29, 0x23, 0xff, 0x2d, 0x19, 0x18, 0xff, 0x3a, 0x24, 0x22, 0xff, 0x3c, 0x25, 0x1e, 0xff, 0x43, 0x28, 0x22, 0xff, 0x36, 0x1e, 0x1b, 0xff, 0x28, 0x10, 0x13, 0xff, 0x27, 0x0f, 0x13, 0xff, 0x29, 0x13, 0x16, 0xff, 0x31, 0x1d, 0x18, 0xff, 0x50, 0x3c, 0x32, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbc, 0xbb, 0x9a, 0xff, 0xa9, 0xa8, 0x80, 0xff, 0xa7, 0xa5, 0x7c, 0xff, 0xa9, 0xa7, 0x7a, 0xff, 0xaa, 0xa7, 0x7b, 0xff, 0xa8, 0xa5, 0x79, 0xff, 0xa9, 0xa7, 0x7a, 0xff, 0xab, 0xa9, 0x7d, 0xff, 0xac, 0xa9, 0x7d, 0xff, 0xae, 0xac, 0x7f, 0xff, 0xb4, 0xb2, 0x85, 0xff, 0xb7, 0xb5, 0x88, 0xff, 0xb6, 0xb4, 0x87, 0xff, 0xb4, 0xb2, 0x88, 0xff, 0xb6, 0xb4, 0x8c, 0xff, 0xc2, 0xbf, 0x97, 0xff, 0xc3, 0xc1, 0x99, 0xff, 0xc5, 0xbf, 0x96, 0xff, 0xa4, 0x99, 0x6d, 0xff, 0x9c, 0x8e, 0x61, 0xff, 0x9c, 0x8c, 0x61, 0xff, 0x9f, 0x93, 0x6b, 0xff, 0xc2, 0xbe, 0x99, 0xff, 0xc3, 0xc0, 0x9c, 0xff, 0xb6, 0xac, 0x8c, 0xff, 0xb7, 0xb3, 0x95, 0xff, 0xd5, 0xd9, 0xc8, 0xff, 0xc8, 0xcf, 0xc2, 0xff, 0xb1, 0xb1, 0xa0, 0xff, 0xa6, 0xa4, 0x92, 0xff, 0xa9, 0xa9, 0x9b, 0xff, 0xaa, 0xac, 0xa8, 0xff, 0x7f, 0x7f, 0x81, 0xff, 0x62, 0x54, 0x59, 0xff, 0x4e, 0x3d, 0x46, 0xff, 0x4a, 0x3d, 0x45, 0xff, 0x4a, 0x3a, 0x3f, 0xff, 0x41, 0x2c, 0x30, 0xff, 0x2e, 0x1b, 0x1f, 0xff, 0x2d, 0x1d, 0x21, 0xff, 0x34, 0x23, 0x27, 0xff, 0x34, 0x24, 0x28, 0xff, 0x2f, 0x1d, 0x21, 0xff, 0x29, 0x17, 0x1a, 0xff, 0x17, 0x03, 0x04, 0xff, 0x44, 0x3c, 0x4d, 0xff, 0x84, 0x92, 0xb3, 0xff, 0x79, 0x84, 0x9c, 0xff, 0x67, 0x67, 0x7d, 0xff, 0x46, 0x37, 0x49, 0xff, 0x2c, 0x18, 0x1f, 0xff, 0x23, 0x0f, 0x12, 0xff, 0x25, 0x14, 0x23, 0xff, 0x3d, 0x34, 0x54, 0xff, 0x56, 0x5a, 0x86, 0xff, 0x7b, 0x89, 0xb2, 0xff, 0xac, 0xbf, 0xd9, 0xff, 0xb7, 0xcd, 0xe3, 0xff, 0xa9, 0xc0, 0xd2, 0xff, 0xa9, 0xc0, 0xd1, 0xff, 0xaf, 0xc4, 0xd8, 0xff, 0xb0, 0xc5, 0xd8, 0xff, 0xb1, 0xc8, 0xd8, 0xff, 0xb0, 0xc6, 0xd8, 0xff, 0xb1, 0xc5, 0xd9, 0xff, 0xaf, 0xc3, 0xd5, 0xff, 0xaf, 0xc4, 0xd3, 0xff, 0xb1, 0xc4, 0xd5, 0xff, 0xb0, 0xc3, 0xd5, 0xff, 0xb3, 0xc5, 0xd9, 0xff, 0xb2, 0xc0, 0xd8, 0xff, 0x9f, 0xa9, 0xc3, 0xff, 0x7b, 0x82, 0x9c, 0xff, 0x65, 0x65, 0x85, 0xff, 0x51, 0x4b, 0x72, 0xff, 0x32, 0x27, 0x4a, 0xff, 0x2b, 0x1b, 0x34, 0xff, 0x2e, 0x1f, 0x2d, 0xff, 0x38, 0x28, 0x30, 0xff, 0x38, 0x26, 0x2e, 0xff, 0x36, 0x22, 0x2e, 0xff, 0x36, 0x21, 0x2f, 0xff, 0x2e, 0x1d, 0x2d, 0xff, 0x2f, 0x1d, 0x30, 0xff, 0x27, 0x15, 0x2b, 0xff, 0x41, 0x35, 0x50, 0xff, 0x5d, 0x52, 0x70, 0xff, 0x4a, 0x3d, 0x55, 0xff, 0x48, 0x3a, 0x50, 0xff, 0x50, 0x43, 0x59, 0xff, 0x54, 0x48, 0x5d, 0xff, 0x5d, 0x54, 0x6c, 0xff, 0x72, 0x6f, 0x87, 0xff, 0x74, 0x75, 0x8b, 0xff, 0x81, 0x86, 0x98, 0xff, 0x91, 0x97, 0xa8, 0xff, 0x99, 0x9f, 0xb1, 0xff, 0x91, 0x99, 0xac, 0xff, 0x8a, 0x94, 0xa5, 0xff, 0x8a, 0x91, 0xa3, 0xff, 0x88, 0x8f, 0xa3, 0xff, 0x86, 0x8d, 0xa0, 0xff, 0x80, 0x88, 0x98, 0xff, 0x80, 0x87, 0x98, 0xff, 0x80, 0x86, 0x9a, 0xff, 0x62, 0x5f, 0x70, 0xff, 0x44, 0x39, 0x49, 0xff, 0x39, 0x2b, 0x36, 0xff, 0x3e, 0x2f, 0x33, 0xff, 0x33, 0x22, 0x22, 0xff, 0x2c, 0x19, 0x1c, 0xff, 0x2f, 0x1e, 0x1e, 0xff, 0x36, 0x24, 0x23, 0xff, 0x29, 0x17, 0x18, 0xff, 0x29, 0x14, 0x17, 0xff, 0x2a, 0x19, 0x17, 0xff, 0x37, 0x28, 0x22, 0xff, 0x33, 0x22, 0x20, 0xff, 0x27, 0x14, 0x16, 0xff, 0x1f, 0x0b, 0x0d, 0xff, 0x1e, 0x0c, 0x0d, 0xff, 0x2a, 0x18, 0x19, 0xff, 0x2d, 0x1b, 0x1d, 0xff, 0x29, 0x16, 0x17, 0xff, 0x39, 0x25, 0x23, 0xff, 0x38, 0x22, 0x1f, 0xff, 0x3c, 0x26, 0x23, 0xff, 0x3a, 0x24, 0x24, 0xff, 0x43, 0x2c, 0x28, 0xff, 0x4c, 0x35, 0x2e, 0xff, 0x42, 0x2b, 0x24, 0xff, 0x41, 0x2a, 0x25, 0xff, 0x48, 0x30, 0x27, 0xff, 0x59, 0x40, 0x34, 0xff, 0x3e, 0x24, 0x20, 0xff, 0x38, 0x20, 0x1c, 0xff, 0x44, 0x30, 0x2e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0xbe, 0x9d, 0xff, 0xab, 0xac, 0x84, 0xff, 0xa9, 0xa8, 0x7f, 0xff, 0xa9, 0xa7, 0x7c, 0xff, 0xa9, 0xa5, 0x79, 0xff, 0xa5, 0xa1, 0x75, 0xff, 0xa6, 0xa2, 0x77, 0xff, 0xa7, 0xa4, 0x78, 0xff, 0xa8, 0xa4, 0x79, 0xff, 0xab, 0xa7, 0x7c, 0xff, 0xb0, 0xae, 0x81, 0xff, 0xb4, 0xb1, 0x85, 0xff, 0xb4, 0xb1, 0x84, 0xff, 0xae, 0xa9, 0x7f, 0xff, 0xc1, 0xbc, 0x93, 0xff, 0xb9, 0xb5, 0x8b, 0xff, 0xb7, 0xb5, 0x8c, 0xff, 0xac, 0xa1, 0x78, 0xff, 0xa1, 0x91, 0x65, 0xff, 0xad, 0xa2, 0x76, 0xff, 0xa4, 0x96, 0x6c, 0xff, 0xc8, 0xc2, 0x9d, 0xff, 0xd4, 0xd3, 0xb6, 0xff, 0x92, 0x81, 0x5b, 0xff, 0x9a, 0x8b, 0x61, 0xff, 0x8b, 0x70, 0x47, 0xff, 0x95, 0x80, 0x58, 0xff, 0xc5, 0xc5, 0xb2, 0xff, 0xcb, 0xd1, 0xc2, 0xff, 0xbc, 0xbf, 0xb1, 0xff, 0xb6, 0xb7, 0xae, 0xff, 0x9e, 0x9d, 0x9a, 0xff, 0x8e, 0x8c, 0x8e, 0xff, 0x90, 0x8b, 0x8e, 0xff, 0x7d, 0x72, 0x74, 0xff, 0x60, 0x51, 0x4e, 0xff, 0x46, 0x33, 0x30, 0xff, 0x3d, 0x27, 0x2b, 0xff, 0x44, 0x2f, 0x37, 0xff, 0x4c, 0x3b, 0x3f, 0xff, 0x44, 0x33, 0x37, 0xff, 0x37, 0x25, 0x29, 0xff, 0x2c, 0x1c, 0x20, 0xff, 0x28, 0x17, 0x1b, 0xff, 0x12, 0x00, 0x00, 0xff, 0x46, 0x43, 0x53, 0xff, 0xae, 0xc8, 0xe6, 0xff, 0xab, 0xc5, 0xd8, 0xff, 0xa9, 0xc3, 0xdd, 0xff, 0x97, 0xaa, 0xcb, 0xff, 0x73, 0x7b, 0x9a, 0xff, 0x4a, 0x43, 0x5b, 0xff, 0x2d, 0x1b, 0x24, 0xff, 0x23, 0x0d, 0x0b, 0xff, 0x20, 0x0e, 0x17, 0xff, 0x2f, 0x2a, 0x5a, 0xff, 0x55, 0x5e, 0xa2, 0xff, 0x81, 0x90, 0xc2, 0xff, 0xa5, 0xba, 0xd7, 0xff, 0xaf, 0xc3, 0xd8, 0xff, 0xad, 0xc0, 0xd4, 0xff, 0xaf, 0xc3, 0xd5, 0xff, 0xb0, 0xc5, 0xd6, 0xff, 0xb0, 0xc5, 0xd7, 0xff, 0xaf, 0xc3, 0xd5, 0xff, 0xac, 0xc0, 0xd0, 0xff, 0xaa, 0xbe, 0xce, 0xff, 0xaf, 0xc1, 0xd7, 0xff, 0xa1, 0xae, 0xcd, 0xff, 0x79, 0x7f, 0xa5, 0xff, 0x4d, 0x4c, 0x73, 0xff, 0x31, 0x28, 0x4d, 0xff, 0x1c, 0x0f, 0x30, 0xff, 0x1f, 0x13, 0x2c, 0xff, 0x2d, 0x21, 0x2e, 0xff, 0x31, 0x20, 0x24, 0xff, 0x34, 0x1d, 0x1c, 0xff, 0x32, 0x1d, 0x1f, 0xff, 0x2b, 0x18, 0x1f, 0xff, 0x34, 0x22, 0x32, 0xff, 0x3b, 0x2e, 0x49, 0xff, 0x4c, 0x42, 0x66, 0xff, 0x6b, 0x69, 0x8c, 0xff, 0x7e, 0x7f, 0x9d, 0xff, 0x81, 0x81, 0x9c, 0xff, 0x91, 0x98, 0xb0, 0xff, 0xa4, 0xac, 0xc2, 0xff, 0xa4, 0xa9, 0xbb, 0xff, 0x9c, 0xa1, 0xb2, 0xff, 0xa3, 0xaa, 0xbb, 0xff, 0xa6, 0xad, 0xbb, 0xff, 0xa1, 0xa7, 0xb7, 0xff, 0x98, 0x9f, 0xaf, 0xff, 0x9a, 0xa1, 0xb1, 0xff, 0x9e, 0xa8, 0xb7, 0xff, 0x9a, 0xa4, 0xb2, 0xff, 0x9c, 0xa5, 0xb3, 0xff, 0x98, 0xa0, 0xaf, 0xff, 0x92, 0x9b, 0xa9, 0xff, 0x92, 0x9a, 0xa9, 0xff, 0x8d, 0x95, 0xa7, 0xff, 0x8b, 0x94, 0xa4, 0xff, 0x90, 0x99, 0xa6, 0xff, 0x8e, 0x96, 0xa4, 0xff, 0x83, 0x8b, 0x9b, 0xff, 0x68, 0x68, 0x7a, 0xff, 0x49, 0x40, 0x50, 0xff, 0x34, 0x27, 0x32, 0xff, 0x45, 0x37, 0x3c, 0xff, 0x39, 0x2a, 0x2a, 0xff, 0x25, 0x13, 0x16, 0xff, 0x31, 0x1f, 0x20, 0xff, 0x37, 0x25, 0x23, 0xff, 0x28, 0x15, 0x15, 0xff, 0x2c, 0x16, 0x18, 0xff, 0x39, 0x27, 0x27, 0xff, 0x33, 0x23, 0x21, 0xff, 0x1f, 0x0d, 0x0e, 0xff, 0x26, 0x13, 0x16, 0xff, 0x27, 0x13, 0x16, 0xff, 0x1e, 0x0d, 0x0e, 0xff, 0x28, 0x16, 0x17, 0xff, 0x29, 0x14, 0x17, 0xff, 0x30, 0x1b, 0x1c, 0xff, 0x34, 0x21, 0x1e, 0xff, 0x34, 0x21, 0x1e, 0xff, 0x37, 0x22, 0x22, 0xff, 0x30, 0x1b, 0x1e, 0xff, 0x34, 0x1c, 0x1c, 0xff, 0x4a, 0x30, 0x2e, 0xff, 0x4a, 0x32, 0x2d, 0xff, 0x4d, 0x34, 0x2c, 0xff, 0x55, 0x3a, 0x31, 0xff, 0x6a, 0x4e, 0x3f, 0xff, 0x77, 0x5d, 0x49, 0xff, 0x48, 0x30, 0x25, 0xff, 0x2f, 0x1a, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0xc2, 0xa3, 0xff, 0xae, 0xb0, 0x88, 0xff, 0xab, 0xaa, 0x81, 0xff, 0xaa, 0xa7, 0x7c, 0xff, 0xa6, 0xa2, 0x76, 0xff, 0xa3, 0x9d, 0x72, 0xff, 0xa4, 0x9e, 0x73, 0xff, 0xa3, 0x9d, 0x72, 0xff, 0xa5, 0x9f, 0x72, 0xff, 0xa9, 0xa3, 0x78, 0xff, 0xae, 0xa9, 0x7e, 0xff, 0xb4, 0xaf, 0x84, 0xff, 0xb0, 0xab, 0x80, 0xff, 0xaf, 0xab, 0x80, 0xff, 0xc1, 0xbc, 0x91, 0xff, 0xa2, 0x9b, 0x70, 0xff, 0xa6, 0x9d, 0x73, 0xff, 0xa7, 0x9e, 0x74, 0xff, 0xa4, 0x96, 0x6b, 0xff, 0x9c, 0x87, 0x5f, 0xff, 0xb0, 0xa4, 0x7a, 0xff, 0xc7, 0xc5, 0x9e, 0xff, 0x91, 0x80, 0x5d, 0xff, 0x74, 0x5b, 0x33, 0xff, 0x97, 0x81, 0x57, 0xff, 0x84, 0x67, 0x42, 0xff, 0x8b, 0x75, 0x4e, 0xff, 0x9f, 0x8f, 0x67, 0xff, 0xa2, 0x95, 0x75, 0xff, 0xae, 0xa6, 0x8d, 0xff, 0x93, 0x8d, 0x6c, 0xff, 0xae, 0xa6, 0x8b, 0xff, 0xb5, 0xb3, 0x98, 0xff, 0x9e, 0x9d, 0x8c, 0xff, 0x8f, 0x88, 0x82, 0xff, 0x7a, 0x6e, 0x63, 0xff, 0x57, 0x46, 0x44, 0xff, 0x4a, 0x36, 0x3b, 0xff, 0x47, 0x37, 0x3d, 0xff, 0x42, 0x32, 0x35, 0xff, 0x36, 0x21, 0x24, 0xff, 0x34, 0x20, 0x26, 0xff, 0x2e, 0x1d, 0x1f, 0xff, 0x2a, 0x18, 0x1c, 0xff, 0x1a, 0x05, 0x09, 0xff, 0x3e, 0x34, 0x3b, 0xff, 0x8e, 0x9f, 0xb6, 0xff, 0x8d, 0xa2, 0xbd, 0xff, 0x8e, 0xa0, 0xb7, 0xff, 0x92, 0xa7, 0xbe, 0xff, 0xa4, 0xb7, 0xdc, 0xff, 0xa5, 0xb2, 0xde, 0xff, 0x77, 0x78, 0xa2, 0xff, 0x4a, 0x3f, 0x64, 0xff, 0x35, 0x25, 0x38, 0xff, 0x26, 0x1a, 0x29, 0xff, 0x29, 0x23, 0x4b, 0xff, 0x2a, 0x29, 0x69, 0xff, 0x57, 0x60, 0xa6, 0xff, 0x9b, 0xb0, 0xd5, 0xff, 0xab, 0xc1, 0xd4, 0xff, 0xab, 0xc0, 0xd4, 0xff, 0xae, 0xc2, 0xd5, 0xff, 0xad, 0xc1, 0xd3, 0xff, 0xab, 0xbd, 0xd1, 0xff, 0xaa, 0xbc, 0xd1, 0xff, 0xaa, 0xbc, 0xd5, 0xff, 0x77, 0x84, 0xad, 0xff, 0x43, 0x45, 0x7c, 0xff, 0x23, 0x18, 0x43, 0xff, 0x1d, 0x10, 0x2c, 0xff, 0x24, 0x14, 0x2a, 0xff, 0x2d, 0x1e, 0x32, 0xff, 0x2a, 0x1b, 0x2b, 0xff, 0x24, 0x10, 0x1b, 0xff, 0x28, 0x12, 0x1d, 0xff, 0x27, 0x16, 0x22, 0xff, 0x33, 0x25, 0x38, 0xff, 0x59, 0x4f, 0x70, 0xff, 0x77, 0x75, 0x9f, 0xff, 0x8c, 0x90, 0xb9, 0xff, 0xa7, 0xb1, 0xd3, 0xff, 0xb8, 0xc5, 0xe0, 0xff, 0xbe, 0xcb, 0xe1, 0xff, 0xc7, 0xd5, 0xe0, 0xff, 0xc8, 0xd8, 0xde, 0xff, 0xc4, 0xcf, 0xd7, 0xff, 0xc5, 0xcf, 0xd8, 0xff, 0xc6, 0xd0, 0xda, 0xff, 0xc8, 0xd5, 0xdc, 0xff, 0xc1, 0xcc, 0xd5, 0xff, 0xb0, 0xba, 0xc7, 0xff, 0xa6, 0xb1, 0xbf, 0xff, 0xaa, 0xb6, 0xc2, 0xff, 0xab, 0xb6, 0xc2, 0xff, 0xa5, 0xae, 0xbb, 0xff, 0x9a, 0xa3, 0xb0, 0xff, 0x96, 0x9f, 0xad, 0xff, 0x94, 0x9d, 0xaa, 0xff, 0x94, 0x9d, 0xaa, 0xff, 0x96, 0x9f, 0xb0, 0xff, 0x93, 0x9b, 0xac, 0xff, 0x93, 0x9d, 0xab, 0xff, 0x98, 0xa1, 0xad, 0xff, 0x91, 0x98, 0xa5, 0xff, 0x6d, 0x6f, 0x84, 0xff, 0x42, 0x39, 0x4d, 0xff, 0x33, 0x26, 0x31, 0xff, 0x4e, 0x41, 0x45, 0xff, 0x43, 0x32, 0x35, 0xff, 0x32, 0x1f, 0x21, 0xff, 0x30, 0x1d, 0x1e, 0xff, 0x22, 0x10, 0x12, 0xff, 0x22, 0x11, 0x0e, 0xff, 0x35, 0x25, 0x21, 0xff, 0x34, 0x22, 0x20, 0xff, 0x1f, 0x0b, 0x0b, 0xff, 0x21, 0x0d, 0x11, 0xff, 0x20, 0x0f, 0x12, 0xff, 0x21, 0x10, 0x13, 0xff, 0x25, 0x12, 0x16, 0xff, 0x20, 0x0e, 0x11, 0xff, 0x25, 0x11, 0x13, 0xff, 0x2e, 0x18, 0x1a, 0xff, 0x2c, 0x17, 0x1a, 0xff, 0x2f, 0x1d, 0x1c, 0xff, 0x28, 0x17, 0x15, 0xff, 0x28, 0x14, 0x16, 0xff, 0x31, 0x1b, 0x1f, 0xff, 0x2a, 0x14, 0x16, 0xff, 0x30, 0x17, 0x19, 0xff, 0x42, 0x29, 0x29, 0xff, 0x45, 0x2b, 0x2c, 0xff, 0x4d, 0x33, 0x2f, 0xff, 0x66, 0x52, 0x40, 0xff, 0x8c, 0x79, 0x61, 0xff, 0x6a, 0x53, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc5, 0xc8, 0xab, 0xff, 0xae, 0xaf, 0x88, 0xff, 0xa9, 0xa8, 0x80, 0xff, 0xa8, 0xa3, 0x7a, 0xff, 0xa5, 0xa0, 0x75, 0xff, 0xa0, 0x99, 0x6f, 0xff, 0x9f, 0x98, 0x6d, 0xff, 0x9f, 0x98, 0x6c, 0xff, 0xa1, 0x9a, 0x6d, 0xff, 0xa3, 0x9a, 0x6e, 0xff, 0xa8, 0xa1, 0x75, 0xff, 0xab, 0xa6, 0x7a, 0xff, 0xad, 0xa7, 0x7b, 0xff, 0xb1, 0xac, 0x80, 0xff, 0xb6, 0xb0, 0x84, 0xff, 0xb5, 0xac, 0x81, 0xff, 0xb6, 0xab, 0x7f, 0xff, 0xaa, 0x9d, 0x71, 0xff, 0xa4, 0x95, 0x6a, 0xff, 0xb9, 0xad, 0x84, 0xff, 0xb4, 0xa8, 0x7e, 0xff, 0x9c, 0x8e, 0x64, 0xff, 0x92, 0x7d, 0x59, 0xff, 0x87, 0x6c, 0x4a, 0xff, 0x8e, 0x78, 0x54, 0xff, 0x8a, 0x76, 0x50, 0xff, 0x93, 0x7d, 0x5a, 0xff, 0x88, 0x6d, 0x4e, 0xff, 0x90, 0x7c, 0x55, 0xff, 0x7e, 0x66, 0x3d, 0xff, 0x7d, 0x5f, 0x33, 0xff, 0xa0, 0x99, 0x79, 0xff, 0xc2, 0xc4, 0xa7, 0xff, 0xa6, 0xa1, 0x7f, 0xff, 0x92, 0x8f, 0x7b, 0xff, 0x95, 0x8f, 0x87, 0xff, 0x76, 0x6b, 0x68, 0xff, 0x4f, 0x41, 0x42, 0xff, 0x3f, 0x32, 0x33, 0xff, 0x3c, 0x2d, 0x32, 0xff, 0x3e, 0x30, 0x3c, 0xff, 0x3a, 0x2f, 0x3f, 0xff, 0x3d, 0x2d, 0x33, 0xff, 0x2a, 0x17, 0x18, 0xff, 0x25, 0x13, 0x17, 0xff, 0x2c, 0x1c, 0x21, 0xff, 0x7e, 0x85, 0x98, 0xff, 0x85, 0x8d, 0xae, 0xff, 0x6f, 0x6c, 0x86, 0xff, 0x53, 0x4d, 0x5d, 0xff, 0x57, 0x4c, 0x58, 0xff, 0x61, 0x5a, 0x67, 0xff, 0x65, 0x5f, 0x77, 0xff, 0x69, 0x61, 0x80, 0xff, 0x61, 0x5a, 0x79, 0xff, 0x4d, 0x46, 0x62, 0xff, 0x3d, 0x30, 0x4e, 0xff, 0x2b, 0x20, 0x42, 0xff, 0x25, 0x20, 0x5d, 0xff, 0x69, 0x79, 0xb3, 0xff, 0xb0, 0xc9, 0xdd, 0xff, 0xa9, 0xbe, 0xd1, 0xff, 0xab, 0xbf, 0xd1, 0xff, 0xac, 0xbf, 0xd2, 0xff, 0xac, 0xbe, 0xd1, 0xff, 0xab, 0xbc, 0xd3, 0xff, 0xae, 0xbf, 0xd9, 0xff, 0x54, 0x5b, 0x8c, 0xff, 0x12, 0x0f, 0x47, 0xff, 0x1e, 0x14, 0x2f, 0xff, 0x26, 0x18, 0x28, 0xff, 0x21, 0x12, 0x1f, 0xff, 0x24, 0x14, 0x25, 0xff, 0x2a, 0x1e, 0x37, 0xff, 0x3b, 0x31, 0x50, 0xff, 0x47, 0x41, 0x67, 0xff, 0x60, 0x5e, 0x8b, 0xff, 0x7b, 0x7b, 0xa8, 0xff, 0x8f, 0x94, 0xbf, 0xff, 0x9a, 0xa3, 0xcf, 0xff, 0xa1, 0xaa, 0xd5, 0xff, 0x9b, 0xa6, 0xcd, 0xff, 0x9c, 0xa8, 0xcb, 0xff, 0x9f, 0xa9, 0xcb, 0xff, 0xa7, 0xb2, 0xd2, 0xff, 0xb1, 0xb9, 0xd4, 0xff, 0xb9, 0xbf, 0xd1, 0xff, 0xbe, 0xc8, 0xd3, 0xff, 0xb6, 0xc3, 0xcc, 0xff, 0xb3, 0xc0, 0xca, 0xff, 0xb1, 0xbd, 0xc6, 0xff, 0xa7, 0xb3, 0xbe, 0xff, 0xa5, 0xaf, 0xbd, 0xff, 0xa5, 0xb0, 0xbc, 0xff, 0xa5, 0xaf, 0xbb, 0xff, 0xa2, 0xaa, 0xb7, 0xff, 0x9c, 0xa5, 0xb2, 0xff, 0x99, 0xa2, 0xb1, 0xff, 0x9a, 0xa3, 0xb0, 0xff, 0x98, 0xa1, 0xae, 0xff, 0x9a, 0xa2, 0xb3, 0xff, 0x97, 0x9e, 0xaf, 0xff, 0x91, 0x9b, 0xa8, 0xff, 0x99, 0xa4, 0xad, 0xff, 0x96, 0x9b, 0xa8, 0xff, 0x70, 0x70, 0x88, 0xff, 0x3b, 0x32, 0x49, 0xff, 0x3d, 0x2f, 0x3b, 0xff, 0x4f, 0x41, 0x43, 0xff, 0x43, 0x2f, 0x33, 0xff, 0x3c, 0x29, 0x2a, 0xff, 0x33, 0x21, 0x20, 0xff, 0x29, 0x16, 0x18, 0xff, 0x2e, 0x1c, 0x1c, 0xff, 0x31, 0x1f, 0x1f, 0xff, 0x2b, 0x18, 0x17, 0xff, 0x37, 0x25, 0x23, 0xff, 0x20, 0x0e, 0x10, 0xff, 0x20, 0x0f, 0x11, 0xff, 0x2a, 0x19, 0x1a, 0xff, 0x29, 0x18, 0x19, 0xff, 0x27, 0x15, 0x17, 0xff, 0x2e, 0x19, 0x1c, 0xff, 0x2e, 0x19, 0x1b, 0xff, 0x34, 0x1e, 0x1f, 0xff, 0x30, 0x1c, 0x1c, 0xff, 0x2b, 0x18, 0x19, 0xff, 0x2d, 0x18, 0x18, 0xff, 0x42, 0x2c, 0x27, 0xff, 0x46, 0x30, 0x29, 0xff, 0x3b, 0x26, 0x20, 0xff, 0x39, 0x23, 0x1f, 0xff, 0x30, 0x1a, 0x16, 0xff, 0x33, 0x1e, 0x1d, 0xff, 0x33, 0x1e, 0x1c, 0xff, 0x5d, 0x46, 0x3c, 0xff, 0x92, 0x7b, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc8, 0xcb, 0xb0, 0xff, 0xae, 0xaf, 0x88, 0xff, 0xa7, 0xa6, 0x7f, 0xff, 0xa6, 0xa1, 0x78, 0xff, 0xa4, 0x9e, 0x73, 0xff, 0x9d, 0x95, 0x6a, 0xff, 0x9a, 0x90, 0x66, 0xff, 0x9c, 0x90, 0x66, 0xff, 0xa0, 0x92, 0x67, 0xff, 0xa3, 0x96, 0x69, 0xff, 0xa5, 0x9b, 0x6e, 0xff, 0xa5, 0x9c, 0x6f, 0xff, 0xac, 0xa2, 0x75, 0xff, 0xad, 0xa3, 0x76, 0xff, 0xa5, 0x99, 0x6d, 0xff, 0xac, 0x9e, 0x72, 0xff, 0xaf, 0xa0, 0x74, 0xff, 0xa5, 0x95, 0x67, 0xff, 0xad, 0x9e, 0x73, 0xff, 0xae, 0xa4, 0x7d, 0xff, 0x8e, 0x7c, 0x56, 0xff, 0x9e, 0x8a, 0x65, 0xff, 0x92, 0x7d, 0x5d, 0xff, 0x73, 0x57, 0x38, 0xff, 0x91, 0x7f, 0x5d, 0xff, 0xaa, 0x9e, 0x79, 0xff, 0x76, 0x61, 0x3c, 0xff, 0x93, 0x7f, 0x5f, 0xff, 0xa2, 0x95, 0x6f, 0xff, 0xaf, 0xa5, 0x80, 0xff, 0xbd, 0xb0, 0x90, 0xff, 0xb5, 0xb6, 0x91, 0xff, 0xb3, 0xac, 0x84, 0xff, 0xa9, 0x9c, 0x76, 0xff, 0xa5, 0xa6, 0x8e, 0xff, 0xa1, 0xa0, 0x96, 0xff, 0x8a, 0x86, 0x7a, 0xff, 0x7f, 0x79, 0x71, 0xff, 0x81, 0x78, 0x73, 0xff, 0x6b, 0x61, 0x62, 0xff, 0x61, 0x63, 0x6d, 0xff, 0x58, 0x59, 0x6b, 0xff, 0x40, 0x30, 0x39, 0xff, 0x28, 0x14, 0x17, 0xff, 0x34, 0x22, 0x27, 0xff, 0x20, 0x0f, 0x11, 0xff, 0x62, 0x5b, 0x64, 0xff, 0x75, 0x6f, 0x7e, 0xff, 0x35, 0x26, 0x31, 0xff, 0x2c, 0x16, 0x19, 0xff, 0x3a, 0x1c, 0x1b, 0xff, 0x36, 0x16, 0x14, 0xff, 0x3c, 0x1c, 0x1f, 0xff, 0x41, 0x24, 0x24, 0xff, 0x3b, 0x23, 0x25, 0xff, 0x4f, 0x3d, 0x50, 0xff, 0x59, 0x4b, 0x6a, 0xff, 0x56, 0x4d, 0x6c, 0xff, 0x31, 0x2e, 0x5d, 0xff, 0x5c, 0x62, 0x94, 0xff, 0xaf, 0xc4, 0xdc, 0xff, 0xaa, 0xc1, 0xd3, 0xff, 0xad, 0xc2, 0xd3, 0xff, 0xb1, 0xc4, 0xd6, 0xff, 0xae, 0xc2, 0xd3, 0xff, 0xa9, 0xbd, 0xcf, 0xff, 0xab, 0xbc, 0xd1, 0xff, 0x78, 0x80, 0xa8, 0xff, 0x25, 0x21, 0x52, 0xff, 0x24, 0x1a, 0x3e, 0xff, 0x33, 0x2b, 0x50, 0xff, 0x41, 0x3c, 0x64, 0xff, 0x57, 0x57, 0x82, 0xff, 0x68, 0x69, 0xa0, 0xff, 0x73, 0x7a, 0xb3, 0xff, 0x78, 0x7e, 0xaf, 0xff, 0x71, 0x71, 0x98, 0xff, 0x6a, 0x64, 0x89, 0xff, 0x57, 0x52, 0x6c, 0xff, 0x54, 0x4e, 0x5f, 0xff, 0x4f, 0x44, 0x58, 0xff, 0x4c, 0x3f, 0x54, 0xff, 0x55, 0x4c, 0x65, 0xff, 0x54, 0x51, 0x72, 0xff, 0x6c, 0x6e, 0x98, 0xff, 0x79, 0x7e, 0xad, 0xff, 0x87, 0x91, 0xbb, 0xff, 0x97, 0xa4, 0xbf, 0xff, 0xa3, 0xb0, 0xc1, 0xff, 0xa6, 0xb0, 0xbf, 0xff, 0xa4, 0xaf, 0xbe, 0xff, 0xa1, 0xac, 0xb9, 0xff, 0xa3, 0xac, 0xb8, 0xff, 0xa3, 0xac, 0xb9, 0xff, 0xa0, 0xa8, 0xb6, 0xff, 0xa0, 0xa9, 0xb6, 0xff, 0x9c, 0xa5, 0xb2, 0xff, 0x9b, 0xa4, 0xb1, 0xff, 0x9d, 0xa6, 0xb3, 0xff, 0x9b, 0xa5, 0xb3, 0xff, 0x98, 0xa1, 0xb3, 0xff, 0x99, 0xa2, 0xb2, 0xff, 0x97, 0xa2, 0xae, 0xff, 0x98, 0xa2, 0xab, 0xff, 0x8c, 0x91, 0xa1, 0xff, 0x6e, 0x6e, 0x87, 0xff, 0x41, 0x38, 0x4f, 0xff, 0x48, 0x3b, 0x47, 0xff, 0x57, 0x49, 0x4a, 0xff, 0x42, 0x2e, 0x30, 0xff, 0x35, 0x23, 0x23, 0xff, 0x36, 0x22, 0x22, 0xff, 0x32, 0x1e, 0x1b, 0xff, 0x2f, 0x1b, 0x1c, 0xff, 0x30, 0x1a, 0x1e, 0xff, 0x26, 0x14, 0x12, 0xff, 0x38, 0x28, 0x24, 0xff, 0x29, 0x17, 0x17, 0xff, 0x31, 0x1b, 0x1e, 0xff, 0x34, 0x20, 0x20, 0xff, 0x2c, 0x1a, 0x19, 0xff, 0x2f, 0x1b, 0x1c, 0xff, 0x2c, 0x16, 0x1a, 0xff, 0x29, 0x14, 0x16, 0xff, 0x40, 0x2c, 0x28, 0xff, 0x36, 0x21, 0x1f, 0xff, 0x2d, 0x17, 0x19, 0xff, 0x2f, 0x1b, 0x17, 0xff, 0x45, 0x2c, 0x23, 0xff, 0x4f, 0x34, 0x2a, 0xff, 0x3e, 0x27, 0x20, 0xff, 0x2f, 0x19, 0x16, 0xff, 0x3d, 0x2a, 0x23, 0xff, 0x3e, 0x2b, 0x23, 0xff, 0x3a, 0x23, 0x24, 0xff, 0x3a, 0x22, 0x21, 0xff, 0x5e, 0x49, 0x41, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xfa, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc9, 0xcd, 0xb4, 0xff, 0xae, 0xaf, 0x8a, 0xff, 0xa8, 0xa6, 0x7f, 0xff, 0xa3, 0x9f, 0x77, 0xff, 0xa0, 0x99, 0x70, 0xff, 0x9c, 0x91, 0x66, 0xff, 0x95, 0x87, 0x5d, 0xff, 0x99, 0x88, 0x5e, 0xff, 0x9e, 0x8c, 0x62, 0xff, 0x9e, 0x8e, 0x63, 0xff, 0xa1, 0x91, 0x66, 0xff, 0xa5, 0x95, 0x6a, 0xff, 0xa6, 0x98, 0x6d, 0xff, 0x9f, 0x90, 0x63, 0xff, 0xa2, 0x92, 0x64, 0xff, 0xa9, 0x99, 0x6b, 0xff, 0x9e, 0x8d, 0x60, 0xff, 0xa4, 0x95, 0x65, 0xff, 0xb1, 0xa2, 0x74, 0xff, 0x94, 0x7f, 0x5b, 0xff, 0x8e, 0x7a, 0x57, 0xff, 0x9b, 0x88, 0x66, 0xff, 0x7f, 0x68, 0x49, 0xff, 0x8f, 0x7d, 0x5d, 0xff, 0xb3, 0xaa, 0x85, 0xff, 0x91, 0x86, 0x60, 0xff, 0xab, 0xa0, 0x7f, 0xff, 0xac, 0x9f, 0x81, 0xff, 0xa1, 0x9a, 0x76, 0xff, 0xb2, 0xaa, 0x88, 0xff, 0xb2, 0xab, 0x90, 0xff, 0x8f, 0x83, 0x5f, 0xff, 0x96, 0x8c, 0x66, 0xff, 0xca, 0xc8, 0xac, 0xff, 0xb1, 0xad, 0x96, 0xff, 0x93, 0x90, 0x7a, 0xff, 0x88, 0x87, 0x70, 0xff, 0xb4, 0xb8, 0xa6, 0xff, 0xb3, 0xb8, 0xa9, 0xff, 0x97, 0x98, 0x86, 0xff, 0xa6, 0xae, 0x9f, 0xff, 0x84, 0x86, 0x87, 0xff, 0x30, 0x1d, 0x22, 0xff, 0x33, 0x1f, 0x25, 0xff, 0x33, 0x24, 0x2f, 0xff, 0x35, 0x23, 0x25, 0xff, 0x3f, 0x28, 0x26, 0xff, 0x48, 0x35, 0x33, 0xff, 0x20, 0x0e, 0x0d, 0xff, 0x2d, 0x15, 0x17, 0xff, 0x31, 0x15, 0x15, 0xff, 0x3b, 0x1d, 0x17, 0xff, 0x4c, 0x2c, 0x29, 0xff, 0x40, 0x21, 0x23, 0xff, 0x24, 0x08, 0x06, 0xff, 0x25, 0x0a, 0x0a, 0xff, 0x36, 0x1a, 0x18, 0xff, 0x39, 0x26, 0x2e, 0xff, 0x4e, 0x46, 0x79, 0xff, 0x66, 0x71, 0xa9, 0xff, 0xa7, 0xbf, 0xd4, 0xff, 0xb2, 0xc8, 0xda, 0xff, 0xb3, 0xc7, 0xd8, 0xff, 0xb4, 0xc7, 0xd8, 0xff, 0xb1, 0xc3, 0xd4, 0xff, 0xac, 0xc0, 0xd0, 0xff, 0xa0, 0xb5, 0xc6, 0xff, 0x92, 0xa0, 0xbe, 0xff, 0x64, 0x66, 0x96, 0xff, 0x57, 0x56, 0x8c, 0xff, 0x72, 0x75, 0xb0, 0xff, 0x7f, 0x85, 0xc4, 0xff, 0x7a, 0x83, 0xc2, 0xff, 0x83, 0x8a, 0xc0, 0xff, 0x7c, 0x7c, 0xa6, 0xff, 0x58, 0x4d, 0x67, 0xff, 0x37, 0x23, 0x2f, 0xff, 0x28, 0x11, 0x16, 0xff, 0x29, 0x0f, 0x11, 0xff, 0x27, 0x0b, 0x0b, 0xff, 0x28, 0x0d, 0x0b, 0xff, 0x2e, 0x13, 0x11, 0xff, 0x26, 0x0d, 0x0b, 0xff, 0x23, 0x0f, 0x13, 0xff, 0x24, 0x12, 0x1d, 0xff, 0x2f, 0x21, 0x36, 0xff, 0x47, 0x40, 0x67, 0xff, 0x55, 0x55, 0x88, 0xff, 0x6b, 0x6e, 0x9f, 0xff, 0x7d, 0x80, 0xa8, 0xff, 0x88, 0x8f, 0xae, 0xff, 0x8e, 0x97, 0xae, 0xff, 0x94, 0x9c, 0xac, 0xff, 0x98, 0xa0, 0xae, 0xff, 0x98, 0xa0, 0xae, 0xff, 0x98, 0xa0, 0xae, 0xff, 0x9b, 0xa3, 0xb1, 0xff, 0x9f, 0xa7, 0xb3, 0xff, 0x9c, 0xa6, 0xb3, 0xff, 0x9c, 0xa7, 0xb7, 0xff, 0x9a, 0xa4, 0xb6, 0xff, 0x9c, 0xa8, 0xb5, 0xff, 0x9c, 0xa9, 0xb5, 0xff, 0x93, 0x9c, 0xa9, 0xff, 0x8e, 0x91, 0xa5, 0xff, 0x73, 0x73, 0x8c, 0xff, 0x55, 0x4e, 0x60, 0xff, 0x4b, 0x40, 0x4b, 0xff, 0x5d, 0x4e, 0x4e, 0xff, 0x4c, 0x37, 0x36, 0xff, 0x2e, 0x1c, 0x1e, 0xff, 0x2b, 0x17, 0x1a, 0xff, 0x49, 0x37, 0x2e, 0xff, 0x35, 0x22, 0x20, 0xff, 0x35, 0x22, 0x20, 0xff, 0x42, 0x30, 0x28, 0xff, 0x2a, 0x15, 0x15, 0xff, 0x33, 0x1e, 0x20, 0xff, 0x31, 0x1c, 0x20, 0xff, 0x25, 0x11, 0x15, 0xff, 0x2c, 0x17, 0x19, 0xff, 0x31, 0x1b, 0x1d, 0xff, 0x26, 0x10, 0x13, 0xff, 0x34, 0x1e, 0x1e, 0xff, 0x37, 0x23, 0x20, 0xff, 0x35, 0x1f, 0x18, 0xff, 0x49, 0x32, 0x27, 0xff, 0x34, 0x1f, 0x1b, 0xff, 0x37, 0x20, 0x1d, 0xff, 0x3d, 0x26, 0x20, 0xff, 0x39, 0x22, 0x1f, 0xff, 0x32, 0x1c, 0x1b, 0xff, 0x34, 0x20, 0x21, 0xff, 0x3e, 0x2a, 0x27, 0xff, 0x3f, 0x29, 0x22, 0xff, 0x24, 0x0d, 0x08, 0xff, 0x3e, 0x2a, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x2b, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xd7, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0xd1, 0xbc, 0xff, 0xb1, 0xb2, 0x90, 0xff, 0xa5, 0xa3, 0x7c, 0xff, 0xa2, 0x9c, 0x74, 0xff, 0x9f, 0x94, 0x6c, 0xff, 0x9a, 0x8d, 0x64, 0xff, 0x94, 0x85, 0x5b, 0xff, 0x93, 0x81, 0x57, 0xff, 0x98, 0x85, 0x5a, 0xff, 0x98, 0x86, 0x5b, 0xff, 0x9a, 0x89, 0x5d, 0xff, 0x9a, 0x89, 0x5c, 0xff, 0xa0, 0x8f, 0x63, 0xff, 0xab, 0x9a, 0x6e, 0xff, 0xae, 0x9e, 0x70, 0xff, 0x9f, 0x8f, 0x60, 0xff, 0x9e, 0x8e, 0x5f, 0xff, 0xb3, 0xa4, 0x75, 0xff, 0xac, 0x9c, 0x70, 0xff, 0x8e, 0x79, 0x51, 0xff, 0x93, 0x7d, 0x59, 0xff, 0x91, 0x7d, 0x5c, 0xff, 0x82, 0x6f, 0x4e, 0xff, 0xa7, 0x99, 0x74, 0xff, 0x98, 0x8e, 0x6a, 0xff, 0x7d, 0x6f, 0x51, 0xff, 0xb1, 0xa5, 0x8a, 0xff, 0x9c, 0x8f, 0x75, 0xff, 0x75, 0x61, 0x42, 0xff, 0x87, 0x72, 0x4e, 0xff, 0x91, 0x7e, 0x58, 0xff, 0x88, 0x73, 0x56, 0xff, 0xa1, 0x9a, 0x81, 0xff, 0x9c, 0x97, 0x76, 0xff, 0xa9, 0xa1, 0x81, 0xff, 0xaa, 0xa6, 0x8c, 0xff, 0x96, 0x94, 0x7c, 0xff, 0x8d, 0x8f, 0x7e, 0xff, 0xb4, 0xb7, 0xaa, 0xff, 0xae, 0xb3, 0xa2, 0xff, 0xc0, 0xc4, 0xaf, 0xff, 0x82, 0x7b, 0x75, 0xff, 0x2c, 0x1a, 0x1e, 0xff, 0x36, 0x23, 0x2b, 0xff, 0x30, 0x23, 0x2d, 0xff, 0x32, 0x1e, 0x21, 0xff, 0x3d, 0x2d, 0x2d, 0xff, 0x4b, 0x41, 0x46, 0xff, 0x31, 0x13, 0x19, 0xff, 0x2c, 0x12, 0x0e, 0xff, 0x56, 0x48, 0x41, 0xff, 0xa9, 0xa5, 0x8e, 0xff, 0xb8, 0xac, 0x96, 0xff, 0x6c, 0x52, 0x4c, 0xff, 0x56, 0x3e, 0x3e, 0xff, 0x54, 0x36, 0x34, 0xff, 0x2f, 0x12, 0x13, 0xff, 0x2b, 0x0b, 0x07, 0xff, 0x40, 0x26, 0x31, 0xff, 0x60, 0x63, 0x95, 0xff, 0x98, 0xb0, 0xd2, 0xff, 0xc0, 0xda, 0xe7, 0xff, 0xb7, 0xcf, 0xde, 0xff, 0xb3, 0xcc, 0xdd, 0xff, 0xb4, 0xca, 0xdb, 0xff, 0xb2, 0xc6, 0xd6, 0xff, 0xad, 0xbf, 0xcc, 0xff, 0xa1, 0xaf, 0xc6, 0xff, 0x85, 0x8f, 0xbb, 0xff, 0x74, 0x7a, 0xb6, 0xff, 0x79, 0x7c, 0xbb, 0xff, 0x79, 0x7e, 0xba, 0xff, 0x85, 0x8a, 0xbe, 0xff, 0x6c, 0x68, 0x8c, 0xff, 0x4d, 0x3b, 0x49, 0xff, 0x2c, 0x16, 0x16, 0xff, 0x2d, 0x13, 0x0c, 0xff, 0x36, 0x1a, 0x13, 0xff, 0x24, 0x07, 0x09, 0xff, 0x27, 0x07, 0x0d, 0xff, 0x42, 0x29, 0x25, 0xff, 0x3d, 0x28, 0x22, 0xff, 0x41, 0x2a, 0x26, 0xff, 0x39, 0x21, 0x1b, 0xff, 0x29, 0x10, 0x09, 0xff, 0x31, 0x17, 0x14, 0xff, 0x2b, 0x13, 0x14, 0xff, 0x33, 0x22, 0x34, 0xff, 0x43, 0x3d, 0x68, 0xff, 0x4c, 0x51, 0x83, 0xff, 0x5e, 0x62, 0x96, 0xff, 0x84, 0x88, 0xae, 0xff, 0x8a, 0x90, 0xa6, 0xff, 0x8a, 0x91, 0xa2, 0xff, 0x93, 0x9c, 0xab, 0xff, 0x97, 0xa1, 0xb0, 0xff, 0x9b, 0xa6, 0xb2, 0xff, 0xa0, 0xaa, 0xb7, 0xff, 0xa0, 0xaa, 0xb8, 0xff, 0x9c, 0xa6, 0xb8, 0xff, 0x95, 0x9f, 0xb2, 0xff, 0x94, 0x9f, 0xad, 0xff, 0x98, 0xa2, 0xae, 0xff, 0x94, 0x9c, 0xad, 0xff, 0x90, 0x96, 0xab, 0xff, 0x65, 0x66, 0x7c, 0xff, 0x3a, 0x33, 0x43, 0xff, 0x58, 0x4b, 0x55, 0xff, 0x4f, 0x40, 0x41, 0xff, 0x45, 0x31, 0x31, 0xff, 0x36, 0x24, 0x25, 0xff, 0x2b, 0x17, 0x1a, 0xff, 0x3e, 0x2a, 0x24, 0xff, 0x63, 0x50, 0x47, 0xff, 0x3a, 0x27, 0x21, 0xff, 0x4e, 0x3d, 0x33, 0xff, 0x34, 0x1f, 0x1f, 0xff, 0x24, 0x0f, 0x15, 0xff, 0x21, 0x0f, 0x11, 0xff, 0x2d, 0x1b, 0x1a, 0xff, 0x3b, 0x26, 0x26, 0xff, 0x20, 0x0c, 0x0f, 0xff, 0x3c, 0x2b, 0x28, 0xff, 0x3b, 0x26, 0x28, 0xff, 0x37, 0x1f, 0x1e, 0xff, 0x51, 0x3b, 0x2c, 0xff, 0x3d, 0x27, 0x1f, 0xff, 0x3d, 0x27, 0x23, 0xff, 0x44, 0x2f, 0x29, 0xff, 0x37, 0x21, 0x1c, 0xff, 0x38, 0x22, 0x20, 0xff, 0x30, 0x1a, 0x1a, 0xff, 0x25, 0x0c, 0x10, 0xff, 0x20, 0x06, 0x07, 0xff, 0x39, 0x25, 0x1b, 0xff, 0x4a, 0x37, 0x2b, 0xff, 0x65, 0x55, 0x50, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x18, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xc7, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xd8, 0xc7, 0xff, 0xb4, 0xb5, 0x95, 0xff, 0xa5, 0xa2, 0x7b, 0xff, 0xa2, 0x98, 0x71, 0xff, 0xa0, 0x92, 0x6b, 0xff, 0x98, 0x89, 0x61, 0xff, 0x94, 0x84, 0x5a, 0xff, 0x93, 0x80, 0x56, 0xff, 0x91, 0x7d, 0x52, 0xff, 0x8d, 0x79, 0x4f, 0xff, 0x91, 0x80, 0x54, 0xff, 0xa3, 0x93, 0x64, 0xff, 0xae, 0x9e, 0x6f, 0xff, 0xac, 0x9c, 0x6f, 0xff, 0x9d, 0x8d, 0x5f, 0xff, 0x90, 0x80, 0x53, 0xff, 0x9e, 0x8c, 0x5f, 0xff, 0xa3, 0x90, 0x65, 0xff, 0xa1, 0x90, 0x66, 0xff, 0xa6, 0x96, 0x6b, 0xff, 0x94, 0x7f, 0x59, 0xff, 0x7b, 0x65, 0x43, 0xff, 0x92, 0x81, 0x5e, 0xff, 0x99, 0x8c, 0x66, 0xff, 0x9b, 0x8e, 0x6e, 0xff, 0x91, 0x82, 0x67, 0xff, 0x84, 0x71, 0x52, 0xff, 0x6c, 0x55, 0x39, 0xff, 0x76, 0x5f, 0x43, 0xff, 0x8f, 0x7a, 0x57, 0xff, 0x92, 0x80, 0x5c, 0xff, 0x9e, 0x90, 0x6f, 0xff, 0x90, 0x7d, 0x57, 0xff, 0x8c, 0x81, 0x61, 0xff, 0xb4, 0xb9, 0xa1, 0xff, 0xb8, 0xb6, 0xa3, 0xff, 0xa9, 0xa6, 0x94, 0xff, 0x97, 0x97, 0x8a, 0xff, 0x94, 0x94, 0x8a, 0xff, 0x98, 0x9b, 0x8f, 0xff, 0xa2, 0xa1, 0x93, 0xff, 0x52, 0x44, 0x45, 0xff, 0x34, 0x22, 0x29, 0xff, 0x35, 0x23, 0x2b, 0xff, 0x35, 0x27, 0x2f, 0xff, 0x1b, 0x07, 0x0a, 0xff, 0x51, 0x48, 0x50, 0xff, 0xaf, 0xc2, 0xcf, 0xff, 0x7d, 0x79, 0x83, 0xff, 0x44, 0x2c, 0x25, 0xff, 0xa4, 0xa0, 0x96, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xd3, 0xc3, 0xff, 0x5b, 0x3b, 0x39, 0xff, 0x68, 0x49, 0x47, 0xff, 0x53, 0x2f, 0x25, 0xff, 0x36, 0x16, 0x17, 0xff, 0x34, 0x1b, 0x22, 0xff, 0x23, 0x06, 0x03, 0xff, 0x2e, 0x1a, 0x2a, 0xff, 0x88, 0x95, 0xb8, 0xff, 0xc4, 0xe0, 0xf0, 0xff, 0xbf, 0xd7, 0xe5, 0xff, 0xb6, 0xd2, 0xe1, 0xff, 0xb7, 0xd0, 0xdf, 0xff, 0xb9, 0xcc, 0xdc, 0xff, 0xb9, 0xc8, 0xd3, 0xff, 0xa8, 0xb5, 0xc9, 0xff, 0x8c, 0x97, 0xc2, 0xff, 0x6f, 0x70, 0xaa, 0xff, 0x6f, 0x6b, 0xa7, 0xff, 0x75, 0x75, 0xb2, 0xff, 0x8d, 0x96, 0xce, 0xff, 0x76, 0x76, 0x9c, 0xff, 0x31, 0x15, 0x19, 0xff, 0x30, 0x12, 0x0e, 0xff, 0x24, 0x07, 0x09, 0xff, 0x3c, 0x1d, 0x1e, 0xff, 0x6c, 0x57, 0x4c, 0xff, 0x67, 0x52, 0x44, 0xff, 0x42, 0x2d, 0x2a, 0xff, 0x44, 0x2e, 0x2d, 0xff, 0x3f, 0x25, 0x21, 0xff, 0x38, 0x20, 0x1f, 0xff, 0x3c, 0x25, 0x22, 0xff, 0x35, 0x1c, 0x1a, 0xff, 0x2d, 0x10, 0x0e, 0xff, 0x2f, 0x16, 0x14, 0xff, 0x28, 0x18, 0x25, 0xff, 0x37, 0x2f, 0x4a, 0xff, 0x32, 0x2e, 0x4c, 0xff, 0x4f, 0x4e, 0x67, 0xff, 0x7f, 0x82, 0x9c, 0xff, 0x84, 0x8b, 0xa0, 0xff, 0x8f, 0x99, 0xab, 0xff, 0x9a, 0xa5, 0xb4, 0xff, 0xa0, 0xab, 0xb7, 0xff, 0x9f, 0xaa, 0xb8, 0xff, 0x9e, 0xa8, 0xb9, 0xff, 0x99, 0xa4, 0xb6, 0xff, 0x99, 0xa4, 0xb6, 0xff, 0x91, 0x9a, 0xab, 0xff, 0x9f, 0xa7, 0xb4, 0xff, 0x98, 0xa1, 0xb1, 0xff, 0x86, 0x8e, 0xa3, 0xff, 0x5c, 0x5c, 0x72, 0xff, 0x3e, 0x34, 0x48, 0xff, 0x53, 0x43, 0x4e, 0xff, 0x48, 0x37, 0x3c, 0xff, 0x35, 0x24, 0x25, 0xff, 0x35, 0x23, 0x24, 0xff, 0x32, 0x1e, 0x22, 0xff, 0x31, 0x1c, 0x1c, 0xff, 0x44, 0x30, 0x27, 0xff, 0x33, 0x20, 0x1c, 0xff, 0x55, 0x45, 0x3c, 0xff, 0x44, 0x32, 0x2b, 0xff, 0x21, 0x0c, 0x12, 0xff, 0x33, 0x21, 0x21, 0xff, 0x46, 0x33, 0x30, 0xff, 0x2e, 0x19, 0x1a, 0xff, 0x28, 0x16, 0x19, 0xff, 0x4a, 0x3b, 0x37, 0xff, 0x34, 0x21, 0x24, 0xff, 0x43, 0x2f, 0x31, 0xff, 0x5d, 0x4a, 0x37, 0xff, 0x2d, 0x18, 0x16, 0xff, 0x4e, 0x37, 0x32, 0xff, 0x63, 0x51, 0x3c, 0xff, 0x31, 0x1d, 0x13, 0xff, 0x36, 0x1e, 0x1f, 0xff, 0x2d, 0x18, 0x17, 0xff, 0x34, 0x26, 0x1e, 0xff, 0x54, 0x48, 0x3d, 0xff, 0x84, 0x7c, 0x71, 0xff, 0x83, 0x7d, 0x69, 0xff, 0xac, 0xa8, 0x92, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x08, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xfa, 0xf5, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xe0, 0xd1, 0xff, 0xb9, 0xb9, 0x9b, 0xff, 0xa6, 0xa2, 0x7b, 0xff, 0xa0, 0x97, 0x70, 0xff, 0x9c, 0x8f, 0x67, 0xff, 0x92, 0x83, 0x5b, 0xff, 0x8f, 0x7f, 0x55, 0xff, 0x91, 0x7f, 0x55, 0xff, 0x96, 0x82, 0x57, 0xff, 0x9a, 0x87, 0x5c, 0xff, 0xa3, 0x92, 0x67, 0xff, 0xa8, 0x98, 0x6b, 0xff, 0x9e, 0x8e, 0x5f, 0xff, 0x96, 0x86, 0x56, 0xff, 0x97, 0x87, 0x59, 0xff, 0x9a, 0x87, 0x5c, 0xff, 0x91, 0x7c, 0x54, 0xff, 0x8e, 0x7a, 0x52, 0xff, 0x8c, 0x7b, 0x51, 0xff, 0x9f, 0x8d, 0x65, 0xff, 0x9f, 0x8d, 0x67, 0xff, 0x76, 0x61, 0x3d, 0xff, 0x85, 0x71, 0x51, 0xff, 0xb3, 0xad, 0x8b, 0xff, 0x9d, 0x93, 0x73, 0xff, 0x6e, 0x57, 0x3c, 0xff, 0x7a, 0x63, 0x44, 0xff, 0x83, 0x6d, 0x4e, 0xff, 0x83, 0x6e, 0x4f, 0xff, 0x8d, 0x7b, 0x59, 0xff, 0x90, 0x7e, 0x57, 0xff, 0x89, 0x78, 0x54, 0xff, 0x93, 0x8d, 0x6c, 0xff, 0xbf, 0xc5, 0xac, 0xff, 0xc4, 0xc9, 0xb5, 0xff, 0x93, 0x8d, 0x79, 0xff, 0x94, 0x8c, 0x79, 0xff, 0xa1, 0x9d, 0x8d, 0xff, 0x8a, 0x89, 0x79, 0xff, 0xa2, 0xa2, 0x93, 0xff, 0x89, 0x82, 0x7b, 0xff, 0x36, 0x27, 0x2b, 0xff, 0x39, 0x27, 0x30, 0xff, 0x3c, 0x2b, 0x33, 0xff, 0x33, 0x26, 0x2d, 0xff, 0x14, 0x00, 0x05, 0xff, 0x63, 0x5b, 0x68, 0xff, 0xd5, 0xed, 0xff, 0xff, 0xc8, 0xe2, 0xee, 0xff, 0x4f, 0x36, 0x38, 0xff, 0x97, 0x90, 0x90, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd5, 0xda, 0xd0, 0xff, 0x31, 0x1c, 0x29, 0xff, 0x37, 0x1a, 0x2b, 0xff, 0x43, 0x22, 0x27, 0xff, 0x52, 0x35, 0x3c, 0xff, 0x24, 0x11, 0x1e, 0xff, 0x50, 0x3b, 0x40, 0xff, 0x4d, 0x35, 0x3d, 0xff, 0x59, 0x5b, 0x71, 0xff, 0xcc, 0xe6, 0xf8, 0xff, 0xc4, 0xda, 0xe8, 0xff, 0xc0, 0xda, 0xe4, 0xff, 0xc0, 0xd8, 0xe2, 0xff, 0xbd, 0xd1, 0xdd, 0xff, 0xb7, 0xc7, 0xd3, 0xff, 0xa9, 0xb6, 0xc9, 0xff, 0x89, 0x92, 0xbb, 0xff, 0x74, 0x71, 0xa6, 0xff, 0x71, 0x65, 0x95, 0xff, 0x6b, 0x69, 0x9f, 0xff, 0x90, 0x9b, 0xd4, 0xff, 0x79, 0x77, 0x99, 0xff, 0x35, 0x15, 0x15, 0xff, 0x2a, 0x09, 0x0c, 0xff, 0x50, 0x3f, 0x4e, 0xff, 0xa4, 0x97, 0x9b, 0xff, 0xf8, 0xf2, 0xe0, 0xff, 0xa5, 0x99, 0x85, 0xff, 0x1e, 0x03, 0x06, 0xff, 0x3f, 0x22, 0x26, 0xff, 0x30, 0x17, 0x13, 0xff, 0x3e, 0x24, 0x27, 0xff, 0x2a, 0x12, 0x14, 0xff, 0x4d, 0x37, 0x2e, 0xff, 0x5f, 0x4c, 0x45, 0xff, 0x28, 0x13, 0x17, 0xff, 0x32, 0x1f, 0x19, 0xff, 0x40, 0x28, 0x29, 0xff, 0x32, 0x1f, 0x1f, 0xff, 0x40, 0x35, 0x43, 0xff, 0x6d, 0x6a, 0x8b, 0xff, 0x85, 0x8d, 0xa7, 0xff, 0x96, 0xa2, 0xb2, 0xff, 0x9f, 0xaa, 0xb9, 0xff, 0xa5, 0xb0, 0xbe, 0xff, 0xa7, 0xb2, 0xc1, 0xff, 0xa3, 0xb0, 0xc1, 0xff, 0x9f, 0xab, 0xbe, 0xff, 0x9d, 0xa7, 0xba, 0xff, 0x90, 0x99, 0xab, 0xff, 0x9a, 0xa3, 0xb4, 0xff, 0x99, 0xa4, 0xb4, 0xff, 0x8c, 0x93, 0xa8, 0xff, 0x54, 0x52, 0x6c, 0xff, 0x4c, 0x43, 0x5c, 0xff, 0x48, 0x3a, 0x48, 0xff, 0x45, 0x35, 0x3b, 0xff, 0x42, 0x31, 0x32, 0xff, 0x29, 0x16, 0x17, 0xff, 0x25, 0x12, 0x17, 0xff, 0x38, 0x26, 0x27, 0xff, 0x3c, 0x2b, 0x28, 0xff, 0x3b, 0x2a, 0x28, 0xff, 0x58, 0x47, 0x3f, 0xff, 0x54, 0x41, 0x37, 0xff, 0x2b, 0x17, 0x15, 0xff, 0x3e, 0x29, 0x2a, 0xff, 0x36, 0x21, 0x24, 0xff, 0x2c, 0x18, 0x1d, 0xff, 0x51, 0x3f, 0x3e, 0xff, 0x52, 0x41, 0x3e, 0xff, 0x37, 0x25, 0x2b, 0xff, 0x59, 0x4c, 0x58, 0xff, 0x60, 0x50, 0x44, 0xff, 0x57, 0x41, 0x34, 0xff, 0x4a, 0x37, 0x2d, 0xff, 0x5c, 0x46, 0x35, 0xff, 0x4b, 0x37, 0x28, 0xff, 0x46, 0x35, 0x26, 0xff, 0x60, 0x51, 0x48, 0xff, 0x75, 0x68, 0x5d, 0xff, 0x88, 0x7d, 0x69, 0xff, 0xb0, 0xac, 0x97, 0xff, 0xb5, 0xb7, 0xa9, 0xff, 0xc4, 0xc6, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x8c, 0xf6, 0xed, 0xe7, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xe6, 0xdc, 0xff, 0xbd, 0xbc, 0xa1, 0xff, 0xa2, 0x9e, 0x77, 0xff, 0xa0, 0x96, 0x6f, 0xff, 0x96, 0x89, 0x61, 0xff, 0x9c, 0x8e, 0x65, 0xff, 0xa4, 0x94, 0x6a, 0xff, 0x9b, 0x89, 0x5f, 0xff, 0x98, 0x85, 0x59, 0xff, 0x96, 0x83, 0x59, 0xff, 0x93, 0x82, 0x57, 0xff, 0x90, 0x80, 0x55, 0xff, 0x96, 0x85, 0x5a, 0xff, 0x9a, 0x8a, 0x5d, 0xff, 0x98, 0x86, 0x5a, 0xff, 0x98, 0x84, 0x59, 0xff, 0x90, 0x7b, 0x52, 0xff, 0x8c, 0x79, 0x50, 0xff, 0xa0, 0x8e, 0x66, 0xff, 0x87, 0x74, 0x50, 0xff, 0x97, 0x85, 0x5f, 0xff, 0x89, 0x76, 0x50, 0xff, 0x8f, 0x81, 0x5e, 0xff, 0xb4, 0xae, 0x8a, 0xff, 0x9b, 0x90, 0x6e, 0xff, 0x77, 0x61, 0x43, 0xff, 0x8c, 0x7a, 0x59, 0xff, 0x95, 0x85, 0x63, 0xff, 0x7e, 0x6c, 0x4b, 0xff, 0x87, 0x73, 0x51, 0xff, 0x92, 0x7e, 0x5a, 0xff, 0xb0, 0xb2, 0x96, 0xff, 0xb7, 0xbf, 0xa6, 0xff, 0xb2, 0xaf, 0x95, 0xff, 0xa5, 0xa2, 0x87, 0xff, 0x95, 0x8e, 0x70, 0xff, 0x97, 0x8a, 0x73, 0xff, 0x89, 0x83, 0x71, 0xff, 0xa0, 0xa0, 0x8c, 0xff, 0x9d, 0x9c, 0x90, 0xff, 0x56, 0x49, 0x4f, 0xff, 0x43, 0x33, 0x3c, 0xff, 0x3f, 0x2f, 0x3a, 0xff, 0x38, 0x28, 0x33, 0xff, 0x2c, 0x1c, 0x24, 0xff, 0x16, 0x02, 0x08, 0xff, 0x72, 0x74, 0x85, 0xff, 0xca, 0xe3, 0xf6, 0xff, 0xbc, 0xce, 0xd5, 0xff, 0x49, 0x32, 0x2b, 0xff, 0x49, 0x32, 0x30, 0xff, 0xdf, 0xec, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcf, 0xc7, 0xff, 0x53, 0x41, 0x51, 0xff, 0x41, 0x29, 0x3e, 0xff, 0x2b, 0x12, 0x1e, 0xff, 0x49, 0x32, 0x39, 0xff, 0x80, 0x6e, 0x7c, 0xff, 0x3e, 0x2d, 0x41, 0xff, 0x45, 0x3f, 0x47, 0xff, 0xcb, 0xe5, 0xf2, 0xff, 0xc8, 0xe2, 0xef, 0xff, 0xc5, 0xe1, 0xe7, 0xff, 0xc4, 0xdd, 0xe5, 0xff, 0xc1, 0xd3, 0xe0, 0xff, 0xb9, 0xca, 0xd6, 0xff, 0xa9, 0xb6, 0xc4, 0xff, 0x9a, 0xa2, 0xbc, 0xff, 0x89, 0x89, 0xaa, 0xff, 0x70, 0x68, 0x8b, 0xff, 0x79, 0x79, 0xa3, 0xff, 0x95, 0x98, 0xbd, 0xff, 0x45, 0x30, 0x38, 0xff, 0x07, 0x00, 0x00, 0xff, 0x4d, 0x41, 0x5e, 0xff, 0xda, 0xdf, 0xf2, 0xff, 0xe9, 0xf6, 0xf1, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xa4, 0x9e, 0x9a, 0xff, 0x32, 0x13, 0x18, 0xff, 0x46, 0x28, 0x2b, 0xff, 0x2c, 0x16, 0x18, 0xff, 0x40, 0x29, 0x2f, 0xff, 0x27, 0x11, 0x12, 0xff, 0xb7, 0xa9, 0xa0, 0xff, 0x8e, 0x80, 0x74, 0xff, 0x2a, 0x10, 0x0b, 0xff, 0x3d, 0x22, 0x1e, 0xff, 0x3b, 0x27, 0x25, 0xff, 0x49, 0x3b, 0x40, 0xff, 0x67, 0x62, 0x75, 0xff, 0x7b, 0x7d, 0x9e, 0xff, 0x93, 0x9d, 0xb3, 0xff, 0xa3, 0xb1, 0xbf, 0xff, 0xa9, 0xb7, 0xc4, 0xff, 0xad, 0xba, 0xc7, 0xff, 0xa9, 0xb6, 0xc5, 0xff, 0xa7, 0xb4, 0xc7, 0xff, 0xa4, 0xb2, 0xc4, 0xff, 0x9f, 0xab, 0xbc, 0xff, 0x8f, 0x96, 0xa9, 0xff, 0x8c, 0x95, 0xa9, 0xff, 0x9e, 0xaa, 0xbb, 0xff, 0x89, 0x8f, 0xa2, 0xff, 0x48, 0x46, 0x5c, 0xff, 0x5d, 0x55, 0x6c, 0xff, 0x50, 0x45, 0x55, 0xff, 0x43, 0x35, 0x3d, 0xff, 0x45, 0x35, 0x37, 0xff, 0x3b, 0x27, 0x2a, 0xff, 0x34, 0x21, 0x21, 0xff, 0x3a, 0x29, 0x29, 0xff, 0x58, 0x47, 0x47, 0xff, 0x49, 0x35, 0x30, 0xff, 0x38, 0x24, 0x1e, 0xff, 0x73, 0x63, 0x59, 0xff, 0x4f, 0x3e, 0x36, 0xff, 0x24, 0x0f, 0x15, 0xff, 0x30, 0x1c, 0x26, 0xff, 0x43, 0x37, 0x36, 0xff, 0x82, 0x78, 0x6a, 0xff, 0x6b, 0x5d, 0x5b, 0xff, 0x33, 0x23, 0x2f, 0xff, 0x50, 0x49, 0x60, 0xff, 0x62, 0x52, 0x53, 0xff, 0x6a, 0x52, 0x37, 0xff, 0x72, 0x65, 0x54, 0xff, 0x57, 0x40, 0x30, 0xff, 0x54, 0x3d, 0x30, 0xff, 0x5c, 0x47, 0x38, 0xff, 0x46, 0x34, 0x2d, 0xff, 0x39, 0x25, 0x26, 0xff, 0x3d, 0x2d, 0x22, 0xff, 0x4c, 0x39, 0x30, 0xff, 0x47, 0x32, 0x2f, 0xff, 0xaa, 0xa2, 0x94, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xe7, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0xff, 0xf8, 0xf1, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf0, 0xe9, 0xff, 0xc2, 0xc0, 0xa7, 0xff, 0xa1, 0x9c, 0x76, 0xff, 0x99, 0x8e, 0x67, 0xff, 0xa6, 0x99, 0x72, 0xff, 0xae, 0x9f, 0x77, 0xff, 0x98, 0x89, 0x5e, 0xff, 0x91, 0x7f, 0x55, 0xff, 0x8c, 0x79, 0x4f, 0xff, 0x8b, 0x77, 0x4f, 0xff, 0x8b, 0x79, 0x4f, 0xff, 0x92, 0x81, 0x56, 0xff, 0x9a, 0x89, 0x5e, 0xff, 0x9b, 0x89, 0x60, 0xff, 0x99, 0x85, 0x5c, 0xff, 0x96, 0x83, 0x58, 0xff, 0x91, 0x7d, 0x52, 0xff, 0x8e, 0x7b, 0x51, 0xff, 0xa7, 0x95, 0x6f, 0xff, 0x8b, 0x78, 0x54, 0xff, 0x92, 0x82, 0x5c, 0xff, 0xb9, 0xab, 0x82, 0xff, 0xb4, 0xab, 0x85, 0xff, 0xae, 0xa8, 0x85, 0xff, 0x8f, 0x80, 0x5f, 0xff, 0xa2, 0x93, 0x6c, 0xff, 0xb5, 0xb1, 0x8c, 0xff, 0x94, 0x87, 0x69, 0xff, 0x84, 0x6d, 0x4c, 0xff, 0x8a, 0x7a, 0x5a, 0xff, 0xb2, 0xb1, 0x9c, 0xff, 0xba, 0xba, 0xa0, 0xff, 0xb2, 0xac, 0x8e, 0xff, 0x98, 0x92, 0x75, 0xff, 0xa6, 0xa5, 0x87, 0xff, 0xb9, 0xb5, 0x99, 0xff, 0x98, 0x8d, 0x78, 0xff, 0x96, 0x99, 0x89, 0xff, 0xbb, 0xc3, 0xb5, 0xff, 0x74, 0x73, 0x70, 0xff, 0x3a, 0x2d, 0x39, 0xff, 0x47, 0x39, 0x45, 0xff, 0x43, 0x38, 0x44, 0xff, 0x32, 0x21, 0x2e, 0xff, 0x2f, 0x1f, 0x2a, 0xff, 0x25, 0x12, 0x1d, 0xff, 0x86, 0x8d, 0x9d, 0xff, 0xc5, 0xe5, 0xf1, 0xff, 0xbb, 0xcc, 0xce, 0xff, 0x78, 0x72, 0x65, 0xff, 0x44, 0x28, 0x1d, 0xff, 0x49, 0x32, 0x2c, 0xff, 0x7b, 0x71, 0x65, 0xff, 0xb4, 0xb1, 0x9d, 0xff, 0x96, 0x87, 0x78, 0xff, 0x5c, 0x41, 0x3b, 0xff, 0x5a, 0x41, 0x39, 0xff, 0x66, 0x51, 0x47, 0xff, 0x61, 0x4f, 0x4a, 0xff, 0x23, 0x0c, 0x09, 0xff, 0x62, 0x5d, 0x60, 0xff, 0xd4, 0xf1, 0xfc, 0xff, 0xcb, 0xe6, 0xf0, 0xff, 0xc9, 0xe4, 0xeb, 0xff, 0xc3, 0xde, 0xe7, 0xff, 0xc1, 0xd6, 0xe2, 0xff, 0xba, 0xcc, 0xd8, 0xff, 0xac, 0xb9, 0xc6, 0xff, 0xa6, 0xb1, 0xbd, 0xff, 0x9e, 0xa1, 0xaf, 0xff, 0x8b, 0x88, 0xa3, 0xff, 0x9a, 0x9d, 0xbc, 0xff, 0x53, 0x4c, 0x61, 0xff, 0x01, 0x00, 0x00, 0xff, 0x3e, 0x2d, 0x34, 0xff, 0x99, 0x95, 0xcf, 0xff, 0xca, 0xd5, 0xf8, 0xff, 0xec, 0xf9, 0xfa, 0xff, 0xeb, 0xff, 0xf7, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0x88, 0x7f, 0x79, 0xff, 0x32, 0x1e, 0x22, 0xff, 0x36, 0x1f, 0x27, 0xff, 0x2a, 0x12, 0x18, 0xff, 0x50, 0x3b, 0x39, 0xff, 0x67, 0x51, 0x4b, 0xff, 0x46, 0x27, 0x1a, 0xff, 0x52, 0x34, 0x24, 0xff, 0x73, 0x5f, 0x5b, 0xff, 0x92, 0x90, 0x8a, 0xff, 0xa1, 0xa9, 0xaa, 0xff, 0xaa, 0xb7, 0xbf, 0xff, 0xa7, 0xb6, 0xc4, 0xff, 0xaa, 0xb9, 0xc4, 0xff, 0xae, 0xbd, 0xc9, 0xff, 0xb1, 0xc0, 0xce, 0xff, 0xaf, 0xbe, 0xcb, 0xff, 0xa9, 0xb7, 0xc7, 0xff, 0xaa, 0xb8, 0xca, 0xff, 0xa3, 0xb2, 0xc3, 0xff, 0xa4, 0xb1, 0xc2, 0xff, 0x93, 0x9c, 0xb0, 0xff, 0x87, 0x8f, 0xa5, 0xff, 0x9c, 0xa6, 0xb9, 0xff, 0x80, 0x87, 0x99, 0xff, 0x4f, 0x4c, 0x5f, 0xff, 0x6b, 0x66, 0x7a, 0xff, 0x59, 0x52, 0x60, 0xff, 0x52, 0x47, 0x4f, 0xff, 0x4c, 0x3d, 0x41, 0xff, 0x48, 0x35, 0x39, 0xff, 0x39, 0x26, 0x28, 0xff, 0x3d, 0x29, 0x2b, 0xff, 0x47, 0x35, 0x36, 0xff, 0x68, 0x56, 0x51, 0xff, 0x34, 0x21, 0x1f, 0xff, 0x4f, 0x41, 0x3f, 0xff, 0x59, 0x4c, 0x46, 0xff, 0x35, 0x24, 0x2a, 0xff, 0x39, 0x28, 0x35, 0xff, 0x6f, 0x67, 0x64, 0xff, 0xa3, 0x9e, 0x89, 0xff, 0x7c, 0x73, 0x6a, 0xff, 0x50, 0x45, 0x51, 0xff, 0x42, 0x38, 0x57, 0xff, 0x61, 0x52, 0x55, 0xff, 0x75, 0x67, 0x4b, 0xff, 0x9c, 0x94, 0x7c, 0xff, 0x7e, 0x6d, 0x50, 0xff, 0x4b, 0x37, 0x29, 0xff, 0x3e, 0x23, 0x28, 0xff, 0x26, 0x0d, 0x0a, 0xff, 0x4a, 0x32, 0x28, 0xff, 0x4a, 0x32, 0x24, 0xff, 0x5c, 0x44, 0x33, 0xff, 0x4e, 0x36, 0x2b, 0xff, 0x9e, 0x94, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xd7, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x4b, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf9, 0xf6, 0xff, 0xcd, 0xcc, 0xb9, 0xff, 0x9b, 0x93, 0x6e, 0xff, 0xa3, 0x99, 0x73, 0xff, 0xb5, 0xa9, 0x82, 0xff, 0x95, 0x86, 0x5e, 0xff, 0x8c, 0x7c, 0x52, 0xff, 0x8f, 0x7d, 0x54, 0xff, 0x8e, 0x7c, 0x54, 0xff, 0x8d, 0x7b, 0x52, 0xff, 0x8d, 0x7b, 0x51, 0xff, 0x8f, 0x7e, 0x53, 0xff, 0x97, 0x86, 0x5b, 0xff, 0x9a, 0x89, 0x5e, 0xff, 0x97, 0x86, 0x5b, 0xff, 0x95, 0x83, 0x58, 0xff, 0x96, 0x82, 0x57, 0xff, 0x96, 0x84, 0x58, 0xff, 0xa2, 0x93, 0x69, 0xff, 0x90, 0x7d, 0x58, 0xff, 0x8b, 0x7a, 0x53, 0xff, 0xaf, 0xa4, 0x7c, 0xff, 0xb5, 0xae, 0x88, 0xff, 0xb2, 0xb0, 0x8b, 0xff, 0x83, 0x74, 0x55, 0xff, 0x8f, 0x81, 0x5d, 0xff, 0xb4, 0xab, 0x84, 0xff, 0xa4, 0x9d, 0x77, 0xff, 0x93, 0x84, 0x66, 0xff, 0xb0, 0xab, 0x8d, 0xff, 0xb6, 0xb8, 0x96, 0xff, 0xa7, 0xa2, 0x84, 0xff, 0xb6, 0xb8, 0xa6, 0xff, 0xac, 0xb0, 0x93, 0xff, 0xb2, 0xb1, 0x8d, 0xff, 0x9e, 0x99, 0x80, 0xff, 0x9e, 0x9c, 0x87, 0xff, 0xc1, 0xcd, 0xbf, 0xff, 0xb0, 0xbb, 0xb7, 0xff, 0x5d, 0x59, 0x61, 0xff, 0x46, 0x3b, 0x48, 0xff, 0x4a, 0x3e, 0x4e, 0xff, 0x3d, 0x33, 0x44, 0xff, 0x31, 0x22, 0x2c, 0xff, 0x37, 0x2b, 0x38, 0xff, 0x2f, 0x20, 0x30, 0xff, 0x92, 0x9d, 0xae, 0xff, 0xc5, 0xe0, 0xed, 0xff, 0xb4, 0xc5, 0xd0, 0xff, 0xa5, 0xaf, 0xb2, 0xff, 0xa8, 0xa8, 0xa4, 0xff, 0x76, 0x68, 0x66, 0xff, 0x45, 0x32, 0x32, 0xff, 0x51, 0x44, 0x42, 0xff, 0x82, 0x75, 0x74, 0xff, 0x87, 0x79, 0x7d, 0xff, 0x8f, 0x84, 0x88, 0xff, 0x72, 0x6a, 0x6b, 0xff, 0x56, 0x4e, 0x54, 0xff, 0x5d, 0x52, 0x61, 0xff, 0xad, 0xb4, 0xc4, 0xff, 0xd6, 0xf5, 0xfb, 0xff, 0xc9, 0xe3, 0xe9, 0xff, 0xcc, 0xe2, 0xec, 0xff, 0xc5, 0xe3, 0xea, 0xff, 0xc2, 0xdb, 0xe1, 0xff, 0xbc, 0xcf, 0xda, 0xff, 0xb4, 0xc3, 0xcf, 0xff, 0xa9, 0xb8, 0xc4, 0xff, 0xa9, 0xad, 0xb8, 0xff, 0xa5, 0xa7, 0xb0, 0xff, 0x96, 0x9f, 0xaf, 0xff, 0x4f, 0x45, 0x62, 0xff, 0x3a, 0x25, 0x2e, 0xff, 0x5e, 0x4a, 0x42, 0xff, 0x66, 0x54, 0x65, 0xff, 0x53, 0x44, 0x5c, 0xff, 0x7f, 0x76, 0x7e, 0xff, 0xa7, 0xaa, 0x9f, 0xff, 0xc4, 0xc6, 0xb7, 0xff, 0xac, 0xa3, 0x94, 0xff, 0x51, 0x3d, 0x35, 0xff, 0x4a, 0x32, 0x2f, 0xff, 0x50, 0x37, 0x2f, 0xff, 0x50, 0x35, 0x2a, 0xff, 0x3d, 0x1f, 0x11, 0xff, 0x64, 0x48, 0x38, 0xff, 0x92, 0x87, 0x7e, 0xff, 0xc1, 0xc7, 0xc5, 0xff, 0xc7, 0xd6, 0xd7, 0xff, 0xc0, 0xd1, 0xd6, 0xff, 0xba, 0xcb, 0xd1, 0xff, 0xb7, 0xc9, 0xce, 0xff, 0xb5, 0xc7, 0xce, 0xff, 0xb3, 0xc3, 0xce, 0xff, 0xb3, 0xc3, 0xce, 0xff, 0xac, 0xbc, 0xca, 0xff, 0xab, 0xba, 0xcb, 0xff, 0xaa, 0xb7, 0xca, 0xff, 0xa6, 0xb5, 0xc6, 0xff, 0xa1, 0xb1, 0xc2, 0xff, 0x97, 0xa3, 0xb8, 0xff, 0x82, 0x88, 0xa1, 0xff, 0x8e, 0x96, 0xac, 0xff, 0x8e, 0x97, 0xaa, 0xff, 0x5e, 0x5a, 0x70, 0xff, 0x65, 0x63, 0x78, 0xff, 0x6d, 0x6a, 0x77, 0xff, 0x5d, 0x55, 0x5d, 0xff, 0x56, 0x4a, 0x4d, 0xff, 0x3b, 0x2d, 0x2f, 0xff, 0x4d, 0x3e, 0x43, 0xff, 0x46, 0x31, 0x39, 0xff, 0x2d, 0x19, 0x21, 0xff, 0x62, 0x56, 0x55, 0xff, 0x62, 0x52, 0x52, 0xff, 0x38, 0x27, 0x2e, 0xff, 0x43, 0x35, 0x37, 0xff, 0x43, 0x35, 0x37, 0xff, 0x52, 0x44, 0x4c, 0xff, 0x83, 0x7c, 0x76, 0xff, 0xa2, 0xa0, 0x8a, 0xff, 0x99, 0x96, 0x82, 0xff, 0x65, 0x5c, 0x65, 0xff, 0x41, 0x33, 0x4b, 0xff, 0x7a, 0x6e, 0x6c, 0xff, 0x94, 0x93, 0x7e, 0xff, 0xa1, 0x9c, 0x84, 0xff, 0x8d, 0x7e, 0x64, 0xff, 0x7f, 0x72, 0x5e, 0xff, 0x42, 0x31, 0x2a, 0xff, 0x43, 0x2c, 0x20, 0xff, 0x6a, 0x52, 0x39, 0xff, 0x73, 0x5b, 0x43, 0xff, 0x82, 0x6f, 0x54, 0xff, 0x83, 0x75, 0x5e, 0xff, 0xba, 0xb2, 0xa9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xf5, 0xf2, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x43, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfb, 0xff, 0xd9, 0xd7, 0xc8, 0xff, 0xa0, 0x97, 0x74, 0xff, 0xb5, 0xab, 0x84, 0xff, 0x9c, 0x90, 0x69, 0xff, 0x90, 0x82, 0x5a, 0xff, 0x94, 0x84, 0x5b, 0xff, 0x91, 0x7f, 0x55, 0xff, 0x8d, 0x7c, 0x52, 0xff, 0x8d, 0x7b, 0x52, 0xff, 0x8c, 0x7a, 0x52, 0xff, 0x8d, 0x7c, 0x52, 0xff, 0x92, 0x82, 0x56, 0xff, 0x97, 0x86, 0x5b, 0xff, 0x9a, 0x89, 0x5e, 0xff, 0x9b, 0x88, 0x5d, 0xff, 0x95, 0x82, 0x57, 0xff, 0x94, 0x83, 0x57, 0xff, 0x9c, 0x8d, 0x63, 0xff, 0x97, 0x83, 0x5c, 0xff, 0x84, 0x6c, 0x45, 0xff, 0x9c, 0x91, 0x6e, 0xff, 0xc3, 0xc4, 0x9f, 0xff, 0x97, 0x93, 0x6a, 0xff, 0x95, 0x89, 0x68, 0xff, 0x9a, 0x8e, 0x73, 0xff, 0x94, 0x83, 0x62, 0xff, 0xa7, 0xa3, 0x73, 0xff, 0xaf, 0xac, 0x85, 0xff, 0xba, 0xb5, 0x97, 0xff, 0xae, 0xa8, 0x84, 0xff, 0xc7, 0xd0, 0xbb, 0xff, 0xc1, 0xcf, 0xba, 0xff, 0xad, 0xaf, 0x8f, 0xff, 0xb0, 0xab, 0x90, 0xff, 0x95, 0x90, 0x7a, 0xff, 0xac, 0xb9, 0xaa, 0xff, 0xcd, 0xe3, 0xe0, 0xff, 0x94, 0x9a, 0xa2, 0xff, 0x4c, 0x45, 0x53, 0xff, 0x51, 0x46, 0x57, 0xff, 0x46, 0x3c, 0x51, 0xff, 0x44, 0x3d, 0x4d, 0xff, 0x3f, 0x32, 0x44, 0xff, 0x3a, 0x2d, 0x3e, 0xff, 0x28, 0x1d, 0x28, 0xff, 0x9a, 0xab, 0xbe, 0xff, 0xc4, 0xde, 0xea, 0xff, 0xb5, 0xc7, 0xd7, 0xff, 0xa9, 0xbc, 0xca, 0xff, 0xa1, 0xb2, 0xc3, 0xff, 0xb6, 0xc8, 0xd7, 0xff, 0xb6, 0xc8, 0xd9, 0xff, 0xa6, 0xb4, 0xcb, 0xff, 0x96, 0xa2, 0xc0, 0xff, 0x82, 0x8c, 0xb1, 0xff, 0x77, 0x80, 0xa8, 0xff, 0x87, 0x8f, 0xb8, 0xff, 0x8a, 0x95, 0xb5, 0xff, 0xab, 0xb9, 0xcb, 0xff, 0xcd, 0xe1, 0xed, 0xff, 0xc7, 0xe6, 0xee, 0xff, 0xc8, 0xe3, 0xe9, 0xff, 0xcb, 0xe2, 0xec, 0xff, 0xc8, 0xe2, 0xeb, 0xff, 0xc5, 0xdc, 0xe3, 0xff, 0xc0, 0xd3, 0xde, 0xff, 0xb9, 0xc9, 0xd4, 0xff, 0xb1, 0xc1, 0xcf, 0xff, 0xaf, 0xb9, 0xc6, 0xff, 0xa7, 0xb2, 0xb7, 0xff, 0x9a, 0xa7, 0xb1, 0xff, 0x8f, 0x93, 0xab, 0xff, 0x80, 0x7a, 0xa1, 0xff, 0x5f, 0x52, 0x77, 0xff, 0x6e, 0x66, 0x6b, 0xff, 0x7e, 0x6f, 0x6d, 0xff, 0x56, 0x3f, 0x40, 0xff, 0x43, 0x2c, 0x22, 0xff, 0x39, 0x21, 0x18, 0xff, 0x50, 0x3a, 0x34, 0xff, 0x78, 0x68, 0x60, 0xff, 0x7f, 0x74, 0x6a, 0xff, 0x77, 0x6b, 0x62, 0xff, 0x7a, 0x6c, 0x63, 0xff, 0x95, 0x8b, 0x86, 0xff, 0xa4, 0xa8, 0xa7, 0xff, 0xbf, 0xc9, 0xcb, 0xff, 0xaf, 0xc0, 0xc5, 0xff, 0xad, 0xc1, 0xc8, 0xff, 0xb3, 0xc4, 0xcb, 0xff, 0xba, 0xcb, 0xd2, 0xff, 0xbb, 0xcc, 0xd5, 0xff, 0xb8, 0xca, 0xd3, 0xff, 0xb8, 0xca, 0xd2, 0xff, 0xb6, 0xc7, 0xd0, 0xff, 0xab, 0xbc, 0xc9, 0xff, 0xad, 0xbc, 0xcb, 0xff, 0xa8, 0xb6, 0xc7, 0xff, 0xa5, 0xb3, 0xc6, 0xff, 0xa3, 0xb2, 0xc5, 0xff, 0xa4, 0xb0, 0xc4, 0xff, 0x8c, 0x93, 0xaa, 0xff, 0x83, 0x8a, 0xa2, 0xff, 0x95, 0x9c, 0xaf, 0xff, 0x70, 0x70, 0x82, 0xff, 0x64, 0x62, 0x75, 0xff, 0x7b, 0x7a, 0x8a, 0xff, 0x61, 0x5b, 0x63, 0xff, 0x81, 0x77, 0x78, 0xff, 0x6f, 0x65, 0x60, 0xff, 0x78, 0x70, 0x6a, 0xff, 0x52, 0x43, 0x49, 0xff, 0x3b, 0x28, 0x36, 0xff, 0x6c, 0x60, 0x63, 0xff, 0x72, 0x64, 0x62, 0xff, 0x55, 0x44, 0x47, 0xff, 0x45, 0x37, 0x3b, 0xff, 0x2e, 0x1e, 0x24, 0xff, 0x85, 0x79, 0x77, 0xff, 0x95, 0x93, 0x81, 0xff, 0x9c, 0x9d, 0x84, 0xff, 0xae, 0xad, 0x97, 0xff, 0x7c, 0x73, 0x72, 0xff, 0x6f, 0x65, 0x6d, 0xff, 0x8f, 0x89, 0x7d, 0xff, 0x91, 0x90, 0x7b, 0xff, 0xab, 0xab, 0x97, 0xff, 0xa0, 0x99, 0x81, 0xff, 0x9c, 0x94, 0x7a, 0xff, 0x89, 0x82, 0x68, 0xff, 0x93, 0x86, 0x6c, 0xff, 0x8f, 0x83, 0x66, 0xff, 0x89, 0x7d, 0x5f, 0xff, 0x95, 0x89, 0x6a, 0xff, 0x9f, 0x95, 0x7a, 0xff, 0xd8, 0xd3, 0xc9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xe5, 0xe3, 0xd9, 0xff, 0xb6, 0xad, 0x89, 0xff, 0xab, 0x9f, 0x79, 0xff, 0x8e, 0x80, 0x59, 0xff, 0x95, 0x86, 0x5f, 0xff, 0x94, 0x83, 0x5c, 0xff, 0x90, 0x7e, 0x57, 0xff, 0x8d, 0x7a, 0x52, 0xff, 0x8d, 0x7a, 0x53, 0xff, 0x8e, 0x7d, 0x54, 0xff, 0x8c, 0x7a, 0x51, 0xff, 0x91, 0x7f, 0x56, 0xff, 0x98, 0x88, 0x5c, 0xff, 0xa0, 0x90, 0x63, 0xff, 0x9e, 0x8c, 0x60, 0xff, 0x93, 0x7f, 0x53, 0xff, 0x94, 0x82, 0x57, 0xff, 0x9b, 0x8b, 0x61, 0xff, 0xaa, 0x97, 0x6e, 0xff, 0x89, 0x75, 0x4e, 0xff, 0xa4, 0x9b, 0x75, 0xff, 0xc2, 0xc0, 0x9c, 0xff, 0xa5, 0xa1, 0x7d, 0xff, 0xb2, 0xae, 0x92, 0xff, 0x9e, 0x97, 0x76, 0xff, 0x98, 0x93, 0x6f, 0xff, 0x90, 0x7b, 0x5a, 0xff, 0x96, 0x88, 0x62, 0xff, 0xbd, 0xbc, 0xa4, 0xff, 0xbb, 0xbe, 0xb0, 0xff, 0xb1, 0xb3, 0x9a, 0xff, 0x9f, 0x96, 0x6f, 0xff, 0xa9, 0xa3, 0x85, 0xff, 0xa4, 0xa8, 0x99, 0xff, 0xb8, 0xc4, 0xb9, 0xff, 0xcc, 0xe4, 0xe4, 0xff, 0xa9, 0xbe, 0xc9, 0xff, 0x71, 0x73, 0x84, 0xff, 0x62, 0x5d, 0x71, 0xff, 0x52, 0x4c, 0x61, 0xff, 0x50, 0x49, 0x5f, 0xff, 0x47, 0x3e, 0x4e, 0xff, 0x38, 0x34, 0x4d, 0xff, 0x37, 0x2b, 0x40, 0xff, 0x41, 0x36, 0x42, 0xff, 0xae, 0xc5, 0xd7, 0xff, 0xbf, 0xda, 0xe4, 0xff, 0xbb, 0xd2, 0xdd, 0xff, 0xb4, 0xc8, 0xd6, 0xff, 0xa7, 0xb9, 0xcb, 0xff, 0xa5, 0xb8, 0xd1, 0xff, 0xa4, 0xba, 0xd4, 0xff, 0x9f, 0xb2, 0xcd, 0xff, 0x9a, 0xab, 0xc7, 0xff, 0x9c, 0xad, 0xc6, 0xff, 0xa4, 0xb6, 0xcb, 0xff, 0xae, 0xbf, 0xd6, 0xff, 0xb8, 0xc9, 0xd8, 0xff, 0xbc, 0xd2, 0xd6, 0xff, 0xc4, 0xe0, 0xea, 0xff, 0xca, 0xe5, 0xef, 0xff, 0xcd, 0xe5, 0xec, 0xff, 0xcb, 0xe2, 0xec, 0xff, 0xc8, 0xdf, 0xe8, 0xff, 0xc4, 0xdb, 0xe3, 0xff, 0xc1, 0xd6, 0xe1, 0xff, 0xbe, 0xd1, 0xdd, 0xff, 0xbb, 0xce, 0xd7, 0xff, 0xb5, 0xc8, 0xd1, 0xff, 0xaf, 0xbe, 0xce, 0xff, 0xb0, 0xbe, 0xcb, 0xff, 0xad, 0xbd, 0xc2, 0xff, 0x98, 0xa7, 0xb7, 0xff, 0x86, 0x8d, 0xb4, 0xff, 0x79, 0x86, 0xb3, 0xff, 0x89, 0x96, 0xbd, 0xff, 0xa1, 0xa8, 0xbe, 0xff, 0x99, 0xa0, 0xa8, 0xff, 0x92, 0x99, 0xa5, 0xff, 0x9d, 0xa9, 0xb4, 0xff, 0xa0, 0xad, 0xb8, 0xff, 0xa5, 0xb0, 0xbe, 0xff, 0xa9, 0xb4, 0xc3, 0xff, 0xaa, 0xb5, 0xc8, 0xff, 0xac, 0xb8, 0xc9, 0xff, 0xa7, 0xb6, 0xc1, 0xff, 0xad, 0xbe, 0xc7, 0xff, 0xb4, 0xc5, 0xce, 0xff, 0xb8, 0xca, 0xd3, 0xff, 0xba, 0xcc, 0xd5, 0xff, 0xbb, 0xcd, 0xd6, 0xff, 0xbc, 0xcf, 0xd7, 0xff, 0xbb, 0xce, 0xd6, 0xff, 0xba, 0xcd, 0xd6, 0xff, 0xb6, 0xc9, 0xd3, 0xff, 0xae, 0xbe, 0xcd, 0xff, 0xab, 0xbb, 0xcb, 0xff, 0xa9, 0xb8, 0xc9, 0xff, 0xa8, 0xb6, 0xc9, 0xff, 0xa3, 0xb1, 0xc6, 0xff, 0x9f, 0xaa, 0xbd, 0xff, 0x94, 0x9e, 0xb1, 0xff, 0x87, 0x8e, 0xa4, 0xff, 0x8d, 0x93, 0xa3, 0xff, 0x87, 0x8e, 0x98, 0xff, 0x7d, 0x81, 0x89, 0xff, 0x92, 0x91, 0x97, 0xff, 0x84, 0x80, 0x80, 0xff, 0x89, 0x84, 0x7e, 0xff, 0xa3, 0xa5, 0x9a, 0xff, 0xa0, 0xa6, 0x98, 0xff, 0x7d, 0x76, 0x70, 0xff, 0x5e, 0x52, 0x54, 0xff, 0x87, 0x83, 0x80, 0xff, 0x39, 0x2e, 0x2e, 0xff, 0x66, 0x58, 0x52, 0xff, 0x70, 0x66, 0x5a, 0xff, 0x6a, 0x5d, 0x56, 0xff, 0x98, 0x91, 0x81, 0xff, 0xa6, 0xa8, 0x95, 0xff, 0xa8, 0xae, 0x98, 0xff, 0xb2, 0xb5, 0x9f, 0xff, 0x8e, 0x8a, 0x7c, 0xff, 0x8b, 0x88, 0x7c, 0xff, 0x9d, 0x9f, 0x89, 0xff, 0x95, 0x90, 0x7c, 0xff, 0xa3, 0xa2, 0x91, 0xff, 0x99, 0x99, 0x86, 0xff, 0x91, 0x8f, 0x7c, 0xff, 0xb1, 0xaf, 0x98, 0xff, 0xaa, 0xa6, 0x8d, 0xff, 0xa1, 0x9e, 0x85, 0xff, 0x9a, 0x97, 0x79, 0xff, 0x9a, 0x97, 0x7a, 0xff, 0xad, 0xaa, 0x94, 0xff, 0xea, 0xe8, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf1, 0xed, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x74, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xf6, 0xf1, 0xff, 0xbe, 0xb4, 0x93, 0xff, 0x93, 0x86, 0x60, 0xff, 0x92, 0x84, 0x5e, 0xff, 0x92, 0x82, 0x5c, 0xff, 0x93, 0x83, 0x5b, 0xff, 0x90, 0x7d, 0x57, 0xff, 0x8c, 0x79, 0x53, 0xff, 0x8c, 0x7a, 0x54, 0xff, 0x8b, 0x78, 0x51, 0xff, 0x88, 0x75, 0x4d, 0xff, 0x8f, 0x7d, 0x55, 0xff, 0x9a, 0x8a, 0x5e, 0xff, 0x9d, 0x8e, 0x5f, 0xff, 0x9d, 0x8b, 0x5d, 0xff, 0x99, 0x86, 0x59, 0xff, 0x97, 0x83, 0x57, 0xff, 0x98, 0x87, 0x5b, 0xff, 0xa1, 0x92, 0x64, 0xff, 0xa3, 0x95, 0x6d, 0xff, 0xb2, 0xaa, 0x82, 0xff, 0xab, 0x9f, 0x78, 0xff, 0xb9, 0xb6, 0x9c, 0xff, 0xa2, 0xa2, 0x8a, 0xff, 0x96, 0x88, 0x66, 0xff, 0x84, 0x71, 0x4a, 0xff, 0x77, 0x66, 0x44, 0xff, 0xb4, 0xb5, 0xa2, 0xff, 0xcd, 0xd9, 0xc7, 0xff, 0xb6, 0xb9, 0x9e, 0xff, 0x8a, 0x7d, 0x52, 0xff, 0x91, 0x86, 0x62, 0xff, 0xb2, 0xb5, 0xa3, 0xff, 0xb6, 0xc7, 0xbe, 0xff, 0xc4, 0xdd, 0xe0, 0xff, 0xba, 0xcf, 0xda, 0xff, 0x7f, 0x89, 0x9b, 0xff, 0x63, 0x60, 0x75, 0xff, 0x6e, 0x70, 0x84, 0xff, 0x60, 0x60, 0x75, 0xff, 0x48, 0x41, 0x57, 0xff, 0x3c, 0x31, 0x47, 0xff, 0x4f, 0x55, 0x71, 0xff, 0x2d, 0x25, 0x38, 0xff, 0x64, 0x5c, 0x6a, 0xff, 0xc4, 0xde, 0xed, 0xff, 0xbf, 0xd5, 0xe4, 0xff, 0xc0, 0xd4, 0xe0, 0xff, 0xc0, 0xd4, 0xe0, 0xff, 0xbd, 0xd1, 0xe0, 0xff, 0xb7, 0xcc, 0xdc, 0xff, 0xb1, 0xc6, 0xd7, 0xff, 0xb0, 0xc4, 0xd5, 0xff, 0xb2, 0xc4, 0xd5, 0xff, 0xb9, 0xcb, 0xd8, 0xff, 0xbf, 0xcf, 0xd9, 0xff, 0xbf, 0xd2, 0xda, 0xff, 0xbf, 0xd1, 0xdc, 0xff, 0xc0, 0xd4, 0xe2, 0xff, 0xc7, 0xe2, 0xee, 0xff, 0xd0, 0xe6, 0xef, 0xff, 0xcd, 0xe4, 0xeb, 0xff, 0xca, 0xe1, 0xeb, 0xff, 0xc8, 0xde, 0xe8, 0xff, 0xc5, 0xdc, 0xe4, 0xff, 0xc5, 0xda, 0xe5, 0xff, 0xc4, 0xd9, 0xe3, 0xff, 0xc0, 0xd3, 0xe0, 0xff, 0xbc, 0xd0, 0xdd, 0xff, 0xbb, 0xd0, 0xd9, 0xff, 0xbb, 0xcc, 0xd4, 0xff, 0xb7, 0xc9, 0xd3, 0xff, 0xb5, 0xc4, 0xcd, 0xff, 0xae, 0xbf, 0xc7, 0xff, 0x9c, 0xaf, 0xc6, 0xff, 0x89, 0x93, 0xba, 0xff, 0x88, 0x93, 0xbb, 0xff, 0x9c, 0xb1, 0xcf, 0xff, 0xaa, 0xbf, 0xdd, 0xff, 0xab, 0xbe, 0xd7, 0xff, 0xa7, 0xb8, 0xd0, 0xff, 0xa5, 0xb6, 0xcd, 0xff, 0xa2, 0xb3, 0xc8, 0xff, 0xa4, 0xb5, 0xc9, 0xff, 0xaa, 0xbd, 0xcd, 0xff, 0xb7, 0xc9, 0xd6, 0xff, 0xbf, 0xd1, 0xdb, 0xff, 0xbf, 0xd1, 0xda, 0xff, 0xc0, 0xd2, 0xdb, 0xff, 0xbf, 0xd2, 0xdd, 0xff, 0xbe, 0xd1, 0xdd, 0xff, 0xbd, 0xd0, 0xda, 0xff, 0xbd, 0xd0, 0xd7, 0xff, 0xbc, 0xce, 0xd9, 0xff, 0xb6, 0xc6, 0xd5, 0xff, 0xae, 0xbd, 0xce, 0xff, 0xab, 0xbb, 0xcd, 0xff, 0xa7, 0xb5, 0xc7, 0xff, 0xa4, 0xb1, 0xc5, 0xff, 0xa0, 0xae, 0xc5, 0xff, 0x9f, 0xab, 0xbf, 0xff, 0x94, 0xa0, 0xb2, 0xff, 0x87, 0x8f, 0xa3, 0xff, 0x84, 0x89, 0x96, 0xff, 0x96, 0xa4, 0xa7, 0xff, 0x9b, 0xa3, 0xa3, 0xff, 0x8a, 0x8b, 0x85, 0xff, 0x91, 0x8d, 0x84, 0xff, 0x90, 0x90, 0x85, 0xff, 0xa5, 0xb0, 0xa5, 0xff, 0xb7, 0xc2, 0xb7, 0xff, 0xa4, 0xa4, 0x95, 0xff, 0x84, 0x80, 0x70, 0xff, 0xaa, 0xad, 0x9f, 0xff, 0x34, 0x29, 0x2c, 0xff, 0x62, 0x55, 0x4b, 0xff, 0xa7, 0xa5, 0x87, 0xff, 0xa4, 0x9d, 0x86, 0xff, 0xa2, 0xa0, 0x89, 0xff, 0xad, 0xb3, 0xa3, 0xff, 0xb0, 0xb8, 0xaa, 0xff, 0xaf, 0xb6, 0xa5, 0xff, 0xa9, 0xab, 0x95, 0xff, 0xa7, 0xa8, 0x92, 0xff, 0x9b, 0x9e, 0x84, 0xff, 0x98, 0x90, 0x7b, 0xff, 0xa9, 0xa6, 0x94, 0xff, 0x9f, 0xa3, 0x8f, 0xff, 0x99, 0x9a, 0x8a, 0xff, 0x9f, 0x9e, 0x8f, 0xff, 0xa5, 0xa5, 0x90, 0xff, 0xa8, 0xa8, 0x94, 0xff, 0xa5, 0xa4, 0x8f, 0xff, 0x9b, 0x9d, 0x87, 0xff, 0xbf, 0xbf, 0xb2, 0xff, 0xf7, 0xf7, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x53, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xb9, 0xb1, 0x95, 0xff, 0x8f, 0x82, 0x5c, 0xff, 0x94, 0x84, 0x5e, 0xff, 0x96, 0x85, 0x5d, 0xff, 0x95, 0x84, 0x5d, 0xff, 0x90, 0x7e, 0x57, 0xff, 0x8d, 0x7a, 0x54, 0xff, 0x8b, 0x7a, 0x54, 0xff, 0x89, 0x75, 0x4e, 0xff, 0x8a, 0x76, 0x4d, 0xff, 0x8f, 0x7b, 0x53, 0xff, 0x9a, 0x8a, 0x5e, 0xff, 0x9e, 0x8d, 0x5f, 0xff, 0x9f, 0x8b, 0x5e, 0xff, 0x9e, 0x8b, 0x5c, 0xff, 0x99, 0x84, 0x53, 0xff, 0xa0, 0x8d, 0x5e, 0xff, 0x9c, 0x8b, 0x5e, 0xff, 0xa0, 0x90, 0x65, 0xff, 0xab, 0x9f, 0x74, 0xff, 0xb7, 0xb1, 0x8a, 0xff, 0xc4, 0xc4, 0xad, 0xff, 0x87, 0x79, 0x58, 0xff, 0x7a, 0x64, 0x3d, 0xff, 0x91, 0x81, 0x5c, 0xff, 0xc9, 0xc8, 0xac, 0xff, 0xce, 0xd9, 0xc8, 0xff, 0xb7, 0xbb, 0xa3, 0xff, 0xb1, 0xa9, 0x84, 0xff, 0xa7, 0x9c, 0x71, 0xff, 0xac, 0xab, 0x8d, 0xff, 0xbd, 0xc8, 0xbe, 0xff, 0xbd, 0xd5, 0xdc, 0xff, 0xb2, 0xca, 0xd8, 0xff, 0x9d, 0xa9, 0xbb, 0xff, 0x6d, 0x70, 0x84, 0xff, 0x6a, 0x68, 0x7c, 0xff, 0x6c, 0x6f, 0x81, 0xff, 0x6d, 0x6e, 0x82, 0xff, 0x46, 0x3d, 0x58, 0xff, 0x47, 0x4a, 0x68, 0xff, 0x6e, 0x77, 0x8f, 0xff, 0x34, 0x28, 0x36, 0xff, 0x69, 0x6b, 0x77, 0xff, 0xcb, 0xe3, 0xf2, 0xff, 0xc1, 0xd7, 0xe5, 0xff, 0xc0, 0xd7, 0xe2, 0xff, 0xbf, 0xd6, 0xe2, 0xff, 0xbf, 0xd6, 0xe2, 0xff, 0xbd, 0xd6, 0xe1, 0xff, 0xbd, 0xd5, 0xe2, 0xff, 0xbd, 0xd3, 0xe0, 0xff, 0xbe, 0xd1, 0xdf, 0xff, 0xbf, 0xd0, 0xe0, 0xff, 0xbf, 0xd0, 0xdf, 0xff, 0xc2, 0xd5, 0xe0, 0xff, 0xc3, 0xd8, 0xe3, 0xff, 0xc3, 0xda, 0xe7, 0xff, 0xcc, 0xe5, 0xed, 0xff, 0xcd, 0xe8, 0xed, 0xff, 0xcc, 0xe5, 0xeb, 0xff, 0xcc, 0xe2, 0xed, 0xff, 0xc9, 0xe0, 0xea, 0xff, 0xc8, 0xde, 0xe5, 0xff, 0xc8, 0xdd, 0xe5, 0xff, 0xc6, 0xdc, 0xe3, 0xff, 0xc3, 0xd7, 0xe1, 0xff, 0xbf, 0xd3, 0xdf, 0xff, 0xc0, 0xd4, 0xdf, 0xff, 0xbe, 0xd2, 0xdd, 0xff, 0xbe, 0xd1, 0xde, 0xff, 0xbf, 0xd1, 0xdc, 0xff, 0xb9, 0xca, 0xd5, 0xff, 0xb3, 0xc2, 0xd0, 0xff, 0xb7, 0xc4, 0xd3, 0xff, 0xaa, 0xba, 0xd0, 0xff, 0x9d, 0xaf, 0xcb, 0xff, 0xa0, 0xb2, 0xcc, 0xff, 0xa7, 0xb9, 0xd2, 0xff, 0xac, 0xbc, 0xd4, 0xff, 0xaf, 0xbe, 0xd3, 0xff, 0xb1, 0xc2, 0xd3, 0xff, 0xb8, 0xca, 0xd7, 0xff, 0xc0, 0xd4, 0xde, 0xff, 0xc3, 0xd8, 0xe1, 0xff, 0xc3, 0xd8, 0xe2, 0xff, 0xc1, 0xd5, 0xe0, 0xff, 0xc0, 0xd4, 0xdf, 0xff, 0xbf, 0xd2, 0xdf, 0xff, 0xbe, 0xd1, 0xde, 0xff, 0xbd, 0xd0, 0xdc, 0xff, 0xbc, 0xce, 0xd9, 0xff, 0xb9, 0xca, 0xd6, 0xff, 0xb7, 0xc6, 0xd5, 0xff, 0xaf, 0xbd, 0xcf, 0xff, 0xa6, 0xb5, 0xc6, 0xff, 0xa6, 0xb3, 0xc5, 0xff, 0xa1, 0xad, 0xc0, 0xff, 0x9b, 0xa8, 0xbf, 0xff, 0x97, 0xa4, 0xbb, 0xff, 0x9c, 0xa7, 0xb7, 0xff, 0x80, 0x85, 0x96, 0xff, 0x89, 0x91, 0x9c, 0xff, 0xaa, 0xba, 0xbd, 0xff, 0xaa, 0xb6, 0xb5, 0xff, 0x84, 0x85, 0x82, 0xff, 0x8c, 0x8b, 0x81, 0xff, 0xb1, 0xb8, 0xaa, 0xff, 0xac, 0xb5, 0xad, 0xff, 0xb5, 0xc1, 0xb8, 0xff, 0xa2, 0xac, 0x9d, 0xff, 0x98, 0x94, 0x84, 0xff, 0xb9, 0xbf, 0xae, 0xff, 0x6e, 0x62, 0x5a, 0xff, 0x74, 0x68, 0x5b, 0xff, 0xbf, 0xc4, 0xa9, 0xff, 0xba, 0xbb, 0xa2, 0xff, 0xb0, 0xb4, 0xa2, 0xff, 0xaf, 0xb8, 0xa7, 0xff, 0xb6, 0xbd, 0xb1, 0xff, 0xb1, 0xbb, 0xb0, 0xff, 0xac, 0xb2, 0x9b, 0xff, 0x98, 0x96, 0x7f, 0xff, 0x96, 0x92, 0x7a, 0xff, 0x8e, 0x89, 0x70, 0xff, 0xad, 0xaf, 0x9d, 0xff, 0xa2, 0xa5, 0x96, 0xff, 0x9d, 0x9c, 0x88, 0xff, 0x96, 0x97, 0x85, 0xff, 0xa4, 0xa7, 0x97, 0xff, 0xa5, 0xa7, 0x92, 0xff, 0x9f, 0x9f, 0x8c, 0xff, 0xa6, 0xa8, 0x97, 0xff, 0xd4, 0xd5, 0xcd, 0xff, 0xfd, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xc6, 0xbf, 0xaa, 0xff, 0x94, 0x83, 0x5f, 0xff, 0x96, 0x84, 0x5f, 0xff, 0x96, 0x85, 0x5e, 0xff, 0x95, 0x84, 0x5d, 0xff, 0x90, 0x7e, 0x57, 0xff, 0x8c, 0x7a, 0x54, 0xff, 0x8c, 0x79, 0x53, 0xff, 0x8a, 0x76, 0x4e, 0xff, 0x89, 0x75, 0x4b, 0xff, 0x8f, 0x7b, 0x52, 0xff, 0x9e, 0x8e, 0x62, 0xff, 0xa4, 0x93, 0x65, 0xff, 0xa4, 0x8f, 0x62, 0xff, 0xa0, 0x89, 0x5a, 0xff, 0x9c, 0x84, 0x57, 0xff, 0xa2, 0x8c, 0x63, 0xff, 0xad, 0x99, 0x6d, 0xff, 0x8e, 0x7d, 0x4f, 0xff, 0xa7, 0xa0, 0x7a, 0xff, 0xd0, 0xd4, 0xb3, 0xff, 0xaa, 0xa4, 0x7e, 0xff, 0x92, 0x84, 0x58, 0xff, 0xa7, 0x9e, 0x78, 0xff, 0xd1, 0xd3, 0xb6, 0xff, 0xd5, 0xdb, 0xc1, 0xff, 0xbe, 0xc3, 0xac, 0xff, 0xaf, 0xab, 0x8e, 0xff, 0x85, 0x73, 0x49, 0xff, 0x9d, 0x92, 0x68, 0xff, 0xc2, 0xc5, 0xac, 0xff, 0xc6, 0xda, 0xdd, 0xff, 0xa2, 0xbc, 0xd0, 0xff, 0x97, 0xaa, 0xc0, 0xff, 0x83, 0x8a, 0x9e, 0xff, 0x77, 0x78, 0x88, 0xff, 0x74, 0x72, 0x83, 0xff, 0x7a, 0x79, 0x8c, 0xff, 0x56, 0x55, 0x6b, 0xff, 0x3e, 0x3a, 0x56, 0xff, 0x73, 0x7d, 0x97, 0xff, 0x8a, 0x90, 0x9e, 0xff, 0x35, 0x28, 0x30, 0xff, 0x6f, 0x72, 0x7e, 0xff, 0xcf, 0xe5, 0xf6, 0xff, 0xbe, 0xd8, 0xe5, 0xff, 0xc0, 0xda, 0xe6, 0xff, 0xc0, 0xda, 0xe6, 0xff, 0xbf, 0xd9, 0xe5, 0xff, 0xbf, 0xd8, 0xe3, 0xff, 0xbe, 0xd6, 0xe1, 0xff, 0xc0, 0xd6, 0xe1, 0xff, 0xc1, 0xd4, 0xe0, 0xff, 0xc3, 0xd6, 0xe2, 0xff, 0xc5, 0xda, 0xe6, 0xff, 0xc7, 0xdb, 0xe8, 0xff, 0xc4, 0xd9, 0xe6, 0xff, 0xc5, 0xdc, 0xe8, 0xff, 0xcc, 0xe6, 0xee, 0xff, 0xcd, 0xe8, 0xed, 0xff, 0xd0, 0xe7, 0xee, 0xff, 0xcd, 0xe4, 0xee, 0xff, 0xca, 0xdf, 0xe9, 0xff, 0xc8, 0xdd, 0xe4, 0xff, 0xc6, 0xdb, 0xe3, 0xff, 0xc7, 0xdb, 0xe3, 0xff, 0xc7, 0xdb, 0xe2, 0xff, 0xc2, 0xd8, 0xe0, 0xff, 0xc1, 0xd6, 0xde, 0xff, 0xc2, 0xd8, 0xe0, 0xff, 0xc3, 0xd8, 0xe0, 0xff, 0xc4, 0xd8, 0xe1, 0xff, 0xc3, 0xd6, 0xe0, 0xff, 0xbc, 0xcd, 0xd9, 0xff, 0xb5, 0xc6, 0xd2, 0xff, 0xb8, 0xca, 0xd5, 0xff, 0xba, 0xcd, 0xd8, 0xff, 0xb9, 0xcd, 0xda, 0xff, 0xba, 0xcf, 0xdb, 0xff, 0xbb, 0xd0, 0xdb, 0xff, 0xbf, 0xd4, 0xdd, 0xff, 0xc3, 0xd9, 0xe0, 0xff, 0xc5, 0xdb, 0xe1, 0xff, 0xc6, 0xdc, 0xe2, 0xff, 0xc3, 0xd9, 0xe0, 0xff, 0xc3, 0xd8, 0xe0, 0xff, 0xc2, 0xd7, 0xe0, 0xff, 0xc1, 0xd5, 0xdf, 0xff, 0xc0, 0xd3, 0xdf, 0xff, 0xbd, 0xd1, 0xdd, 0xff, 0xbf, 0xd1, 0xde, 0xff, 0xbe, 0xce, 0xdb, 0xff, 0xba, 0xcb, 0xd8, 0xff, 0xb2, 0xc2, 0xd1, 0xff, 0xa9, 0xb8, 0xca, 0xff, 0xa3, 0xb2, 0xc4, 0xff, 0xa7, 0xb5, 0xc7, 0xff, 0x9f, 0xad, 0xbe, 0xff, 0x96, 0xa3, 0xb9, 0xff, 0x90, 0x9a, 0xb4, 0xff, 0x95, 0x9f, 0xaf, 0xff, 0x85, 0x8b, 0x97, 0xff, 0x94, 0x9d, 0xa7, 0xff, 0xb1, 0xc1, 0xc2, 0xff, 0xb0, 0xbc, 0xba, 0xff, 0x9c, 0x9f, 0x9c, 0xff, 0x92, 0x94, 0x8c, 0xff, 0xb2, 0xba, 0xaf, 0xff, 0xaf, 0xb7, 0xad, 0xff, 0xae, 0xba, 0xb2, 0xff, 0xa8, 0xb4, 0xab, 0xff, 0x9a, 0x99, 0x8d, 0xff, 0xb9, 0xbf, 0xb0, 0xff, 0x90, 0x88, 0x79, 0xff, 0x85, 0x7d, 0x6a, 0xff, 0xc5, 0xca, 0xb1, 0xff, 0xb1, 0xb3, 0x9d, 0xff, 0xa6, 0xa8, 0x9a, 0xff, 0xaf, 0xb6, 0xa7, 0xff, 0xb7, 0xc5, 0xb6, 0xff, 0xbe, 0xce, 0xc0, 0xff, 0xa1, 0xa2, 0x8c, 0xff, 0x8b, 0x84, 0x6a, 0xff, 0xa1, 0x9b, 0x82, 0xff, 0x96, 0x97, 0x81, 0xff, 0xaa, 0xb1, 0xa3, 0xff, 0xa0, 0xa3, 0x97, 0xff, 0x9c, 0x9c, 0x89, 0xff, 0xa1, 0xa2, 0x91, 0xff, 0x9e, 0xa2, 0x93, 0xff, 0x96, 0x97, 0x82, 0xff, 0x90, 0x91, 0x7c, 0xff, 0x9c, 0x9f, 0x90, 0xff, 0xde, 0xe0, 0xda, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd9, 0xd4, 0xc7, 0xff, 0x93, 0x82, 0x5e, 0xff, 0x97, 0x85, 0x60, 0xff, 0x96, 0x85, 0x5d, 0xff, 0x94, 0x84, 0x5d, 0xff, 0x91, 0x7e, 0x58, 0xff, 0x8d, 0x7a, 0x54, 0xff, 0x8b, 0x77, 0x52, 0xff, 0x8b, 0x75, 0x4d, 0xff, 0x8a, 0x73, 0x4a, 0xff, 0x8d, 0x79, 0x50, 0xff, 0x9b, 0x8b, 0x5e, 0xff, 0xa6, 0x97, 0x69, 0xff, 0x9d, 0x8c, 0x5e, 0xff, 0x9c, 0x88, 0x58, 0xff, 0x9a, 0x81, 0x55, 0xff, 0x9d, 0x86, 0x5c, 0xff, 0xab, 0x97, 0x69, 0xff, 0xa6, 0x9a, 0x6f, 0xff, 0xcf, 0xd0, 0xb5, 0xff, 0xc5, 0xc6, 0xa9, 0xff, 0x94, 0x86, 0x5a, 0xff, 0xb6, 0xab, 0x84, 0xff, 0xd0, 0xcd, 0xaa, 0xff, 0xb4, 0xb0, 0x86, 0xff, 0x94, 0x91, 0x67, 0xff, 0xc2, 0xc1, 0xa5, 0xff, 0xa9, 0xa4, 0x87, 0xff, 0x85, 0x75, 0x4a, 0xff, 0xa7, 0x9b, 0x74, 0xff, 0xc8, 0xd0, 0xc6, 0xff, 0xa7, 0xc2, 0xd9, 0xff, 0x88, 0x9e, 0xbd, 0xff, 0x83, 0x8e, 0xa9, 0xff, 0x7d, 0x7e, 0x90, 0xff, 0x75, 0x72, 0x81, 0xff, 0x75, 0x75, 0x85, 0xff, 0x6d, 0x6c, 0x7f, 0xff, 0x3b, 0x37, 0x50, 0xff, 0x5e, 0x63, 0x7a, 0xff, 0xa4, 0xb0, 0xbe, 0xff, 0x88, 0x88, 0x8d, 0xff, 0x22, 0x10, 0x15, 0xff, 0x75, 0x77, 0x83, 0xff, 0xd0, 0xe8, 0xf9, 0xff, 0xbd, 0xd8, 0xe7, 0xff, 0xbf, 0xda, 0xe8, 0xff, 0xc0, 0xda, 0xe9, 0xff, 0xc0, 0xdb, 0xe9, 0xff, 0xc0, 0xd9, 0xe5, 0xff, 0xc0, 0xda, 0xe2, 0xff, 0xc1, 0xda, 0xe4, 0xff, 0xc3, 0xda, 0xe4, 0xff, 0xc6, 0xdc, 0xe7, 0xff, 0xc7, 0xdd, 0xe9, 0xff, 0xc8, 0xde, 0xea, 0xff, 0xc6, 0xdc, 0xe8, 0xff, 0xc8, 0xde, 0xea, 0xff, 0xcd, 0xe6, 0xed, 0xff, 0xd1, 0xea, 0xef, 0xff, 0xd1, 0xe9, 0xee, 0xff, 0xcd, 0xe4, 0xec, 0xff, 0xca, 0xdf, 0xe8, 0xff, 0xc8, 0xdd, 0xe4, 0xff, 0xc7, 0xdb, 0xe3, 0xff, 0xc8, 0xda, 0xe3, 0xff, 0xc7, 0xda, 0xe2, 0xff, 0xc4, 0xda, 0xe1, 0xff, 0xc4, 0xd9, 0xe0, 0xff, 0xc5, 0xda, 0xe2, 0xff, 0xc7, 0xdc, 0xe3, 0xff, 0xc5, 0xdb, 0xe2, 0xff, 0xc6, 0xdc, 0xe3, 0xff, 0xc5, 0xd9, 0xe1, 0xff, 0xc1, 0xd5, 0xdd, 0xff, 0xc0, 0xd2, 0xda, 0xff, 0xc0, 0xd2, 0xdd, 0xff, 0xc1, 0xd5, 0xe0, 0xff, 0xc3, 0xd7, 0xe1, 0xff, 0xc3, 0xd8, 0xdf, 0xff, 0xc4, 0xd9, 0xe0, 0xff, 0xc6, 0xdb, 0xe3, 0xff, 0xc7, 0xdc, 0xe3, 0xff, 0xc6, 0xda, 0xe2, 0xff, 0xc5, 0xdb, 0xe0, 0xff, 0xc6, 0xdb, 0xe2, 0xff, 0xc5, 0xda, 0xe2, 0xff, 0xc3, 0xd8, 0xe0, 0xff, 0xc1, 0xd6, 0xe0, 0xff, 0xbf, 0xd3, 0xe0, 0xff, 0xbd, 0xce, 0xdc, 0xff, 0xbd, 0xcc, 0xdb, 0xff, 0xb9, 0xc9, 0xd8, 0xff, 0xb1, 0xc1, 0xd1, 0xff, 0xaa, 0xb9, 0xcd, 0xff, 0xaa, 0xba, 0xcd, 0xff, 0xa3, 0xb1, 0xc6, 0xff, 0x99, 0xa7, 0xba, 0xff, 0x97, 0xa3, 0xb7, 0xff, 0x90, 0x96, 0xad, 0xff, 0x8c, 0x94, 0xa2, 0xff, 0x96, 0xa0, 0xa7, 0xff, 0xa7, 0xb3, 0xb8, 0xff, 0xb3, 0xc4, 0xc2, 0xff, 0xa9, 0xb5, 0xb1, 0xff, 0xa4, 0xac, 0xa6, 0xff, 0x9b, 0x9e, 0x97, 0xff, 0xa0, 0xa9, 0x9f, 0xff, 0xa6, 0xaf, 0xa4, 0xff, 0xa3, 0xae, 0xa7, 0xff, 0xa6, 0xb2, 0xa9, 0xff, 0x99, 0x9b, 0x90, 0xff, 0xa1, 0xa8, 0x9c, 0xff, 0xa5, 0xa5, 0x92, 0xff, 0x95, 0x92, 0x79, 0xff, 0xa8, 0xaa, 0x95, 0xff, 0xb0, 0xb4, 0xa2, 0xff, 0xa3, 0xa5, 0x98, 0xff, 0xae, 0xb4, 0xa8, 0xff, 0xb5, 0xc4, 0xb3, 0xff, 0xc2, 0xd2, 0xc4, 0xff, 0xa2, 0xa1, 0x8c, 0xff, 0x80, 0x74, 0x59, 0xff, 0x9a, 0x96, 0x7e, 0xff, 0xa9, 0xb0, 0xa1, 0xff, 0xa3, 0xae, 0xa4, 0xff, 0x9a, 0xa0, 0x93, 0xff, 0x9f, 0xa0, 0x90, 0xff, 0x98, 0x99, 0x8c, 0xff, 0xa2, 0xa6, 0x97, 0xff, 0x97, 0x96, 0x81, 0xff, 0x88, 0x85, 0x72, 0xff, 0xb0, 0xb4, 0xa7, 0xff, 0xee, 0xef, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0xeb, 0xe5, 0xff, 0x9d, 0x90, 0x6f, 0xff, 0x93, 0x83, 0x5e, 0xff, 0x96, 0x85, 0x5d, 0xff, 0x93, 0x83, 0x5c, 0xff, 0x90, 0x7d, 0x57, 0xff, 0x8d, 0x7a, 0x55, 0xff, 0x8a, 0x76, 0x51, 0xff, 0x89, 0x73, 0x4b, 0xff, 0x8b, 0x74, 0x4c, 0xff, 0x8d, 0x78, 0x50, 0xff, 0x94, 0x80, 0x55, 0xff, 0xad, 0xa0, 0x71, 0xff, 0xbd, 0xb4, 0x86, 0xff, 0xb6, 0xa9, 0x79, 0xff, 0x9f, 0x8a, 0x5b, 0xff, 0x93, 0x7d, 0x4d, 0xff, 0x8e, 0x7c, 0x4c, 0xff, 0xc6, 0xc3, 0xa3, 0xff, 0xda, 0xe1, 0xcb, 0xff, 0xa5, 0x9b, 0x6f, 0xff, 0xae, 0xa1, 0x75, 0xff, 0xb5, 0xae, 0x8a, 0xff, 0xb2, 0xa8, 0x7f, 0xff, 0xa7, 0x99, 0x70, 0xff, 0xac, 0xa2, 0x7d, 0xff, 0xbe, 0xbe, 0x9b, 0xff, 0xb2, 0xae, 0x88, 0xff, 0xbc, 0xb6, 0x94, 0xff, 0xb0, 0xab, 0x8a, 0xff, 0xb1, 0xbf, 0xc1, 0xff, 0x8b, 0xa4, 0xc8, 0xff, 0x7e, 0x8d, 0xae, 0xff, 0x7f, 0x86, 0x9c, 0xff, 0x79, 0x75, 0x83, 0xff, 0x75, 0x72, 0x82, 0xff, 0x77, 0x7c, 0x90, 0xff, 0x47, 0x47, 0x5c, 0xff, 0x56, 0x52, 0x6d, 0xff, 0x8e, 0x9a, 0xa9, 0xff, 0xb3, 0xc2, 0xc1, 0xff, 0x66, 0x61, 0x63, 0xff, 0x24, 0x0e, 0x15, 0xff, 0x7e, 0x81, 0x8e, 0xff, 0xc8, 0xe2, 0xf3, 0xff, 0xbd, 0xd6, 0xe5, 0xff, 0xbf, 0xd6, 0xe5, 0xff, 0xc1, 0xd8, 0xe7, 0xff, 0xc2, 0xd9, 0xe8, 0xff, 0xc2, 0xd9, 0xe7, 0xff, 0xc4, 0xdb, 0xe9, 0xff, 0xc5, 0xdd, 0xea, 0xff, 0xc5, 0xdf, 0xec, 0xff, 0xc5, 0xde, 0xeb, 0xff, 0xc6, 0xde, 0xea, 0xff, 0xc7, 0xde, 0xea, 0xff, 0xc7, 0xdd, 0xe9, 0xff, 0xcb, 0xe1, 0xec, 0xff, 0xd1, 0xe8, 0xef, 0xff, 0xd2, 0xeb, 0xef, 0xff, 0xd1, 0xe9, 0xee, 0xff, 0xd0, 0xe5, 0xed, 0xff, 0xcd, 0xe2, 0xea, 0xff, 0xcb, 0xdf, 0xe7, 0xff, 0xc9, 0xdb, 0xe3, 0xff, 0xc8, 0xda, 0xe2, 0xff, 0xc6, 0xda, 0xe2, 0xff, 0xc3, 0xd8, 0xe1, 0xff, 0xc5, 0xda, 0xe3, 0xff, 0xc6, 0xdb, 0xe3, 0xff, 0xc6, 0xda, 0xe4, 0xff, 0xc7, 0xde, 0xe7, 0xff, 0xc7, 0xde, 0xe6, 0xff, 0xc7, 0xdd, 0xe4, 0xff, 0xc8, 0xdd, 0xe4, 0xff, 0xc6, 0xdc, 0xe4, 0xff, 0xc4, 0xd9, 0xe5, 0xff, 0xc2, 0xd7, 0xe3, 0xff, 0xc1, 0xd8, 0xe2, 0xff, 0xc2, 0xd8, 0xe2, 0xff, 0xc5, 0xda, 0xe5, 0xff, 0xc7, 0xdc, 0xe5, 0xff, 0xc5, 0xdb, 0xe3, 0xff, 0xc4, 0xd9, 0xe1, 0xff, 0xc6, 0xda, 0xe3, 0xff, 0xc3, 0xd8, 0xe1, 0xff, 0xc3, 0xd7, 0xe1, 0xff, 0xc1, 0xd5, 0xe1, 0xff, 0xc1, 0xd5, 0xe0, 0xff, 0xbd, 0xd1, 0xde, 0xff, 0xba, 0xcb, 0xdb, 0xff, 0xb8, 0xc7, 0xd8, 0xff, 0xb4, 0xc4, 0xd4, 0xff, 0xac, 0xbc, 0xce, 0xff, 0xa8, 0xb6, 0xcc, 0xff, 0xa3, 0xb1, 0xc7, 0xff, 0x96, 0xa3, 0xbb, 0xff, 0x95, 0xa3, 0xb8, 0xff, 0x99, 0xa7, 0xb5, 0xff, 0x94, 0x9a, 0xa7, 0xff, 0x93, 0x9c, 0xa1, 0xff, 0xa5, 0xb4, 0xb5, 0xff, 0xab, 0xb9, 0xb9, 0xff, 0xb0, 0xbf, 0xbd, 0xff, 0xa7, 0xb2, 0xaf, 0xff, 0xaa, 0xb5, 0xad, 0xff, 0xa7, 0xad, 0xa6, 0xff, 0xa2, 0xab, 0xa1, 0xff, 0xab, 0xb5, 0xa9, 0xff, 0x94, 0x99, 0x8f, 0xff, 0x9b, 0xa3, 0x96, 0xff, 0x9c, 0x9f, 0x92, 0xff, 0x9d, 0xa4, 0x9b, 0xff, 0xad, 0xb3, 0xa0, 0xff, 0xa1, 0x9f, 0x88, 0xff, 0x9f, 0x9f, 0x8f, 0xff, 0xa6, 0xae, 0x9f, 0xff, 0xa1, 0xa7, 0x9b, 0xff, 0xb6, 0xc2, 0xb7, 0xff, 0xab, 0xb4, 0xa5, 0xff, 0xb1, 0xbb, 0xad, 0xff, 0xab, 0xaf, 0x9a, 0xff, 0x86, 0x7a, 0x5f, 0xff, 0xa4, 0xa2, 0x8f, 0xff, 0xac, 0xb8, 0xac, 0xff, 0x9f, 0xac, 0xa1, 0xff, 0xa1, 0xa8, 0x9b, 0xff, 0x98, 0x9b, 0x8c, 0xff, 0x91, 0x94, 0x8a, 0xff, 0xa9, 0xaf, 0xa1, 0xff, 0x8b, 0x88, 0x74, 0xff, 0x87, 0x82, 0x70, 0xff, 0xc2, 0xc7, 0xbc, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf4, 0xff, 0xb4, 0xa8, 0x8f, 0xff, 0x95, 0x83, 0x5e, 0xff, 0x95, 0x84, 0x5d, 0xff, 0x96, 0x84, 0x5d, 0xff, 0x96, 0x84, 0x5e, 0xff, 0x8c, 0x79, 0x52, 0xff, 0x85, 0x71, 0x48, 0xff, 0x89, 0x71, 0x49, 0xff, 0x8d, 0x74, 0x4b, 0xff, 0x93, 0x7a, 0x50, 0xff, 0x95, 0x7e, 0x55, 0xff, 0x9e, 0x8c, 0x5f, 0xff, 0xb9, 0xae, 0x7e, 0xff, 0xd0, 0xca, 0x9d, 0xff, 0xce, 0xc9, 0x9b, 0xff, 0xc0, 0xb6, 0x85, 0xff, 0xb8, 0xaf, 0x80, 0xff, 0xda, 0xe4, 0xcd, 0xff, 0xc5, 0xc7, 0xac, 0xff, 0xae, 0xa4, 0x72, 0xff, 0xbf, 0xbc, 0x8e, 0xff, 0xaf, 0xa4, 0x7a, 0xff, 0xab, 0xa0, 0x77, 0xff, 0xb7, 0xac, 0x85, 0xff, 0xbf, 0xbc, 0x99, 0xff, 0xbe, 0xbc, 0x9d, 0xff, 0x9f, 0x93, 0x66, 0xff, 0xa7, 0xa2, 0x7e, 0xff, 0xa7, 0xa4, 0x85, 0xff, 0xa5, 0xb2, 0xb6, 0xff, 0x93, 0xaa, 0xcd, 0xff, 0x85, 0x90, 0xaa, 0xff, 0x73, 0x74, 0x87, 0xff, 0x6f, 0x6c, 0x7c, 0xff, 0x89, 0x8d, 0xa1, 0xff, 0x64, 0x68, 0x7d, 0xff, 0x45, 0x44, 0x5b, 0xff, 0x7b, 0x7d, 0x96, 0xff, 0xa5, 0xb4, 0xb5, 0xff, 0x9c, 0xa8, 0xa4, 0xff, 0x40, 0x33, 0x3b, 0xff, 0x38, 0x27, 0x2b, 0xff, 0x7b, 0x7d, 0x8a, 0xff, 0xc3, 0xdb, 0xed, 0xff, 0xbe, 0xd3, 0xe4, 0xff, 0xbe, 0xd5, 0xe4, 0xff, 0xc1, 0xd7, 0xe6, 0xff, 0xc1, 0xda, 0xe9, 0xff, 0xc3, 0xdc, 0xeb, 0xff, 0xc5, 0xde, 0xed, 0xff, 0xc4, 0xde, 0xeb, 0xff, 0xc4, 0xde, 0xea, 0xff, 0xc6, 0xde, 0xea, 0xff, 0xc7, 0xe0, 0xeb, 0xff, 0xc7, 0xdd, 0xe9, 0xff, 0xc7, 0xdd, 0xe9, 0xff, 0xcc, 0xe2, 0xed, 0xff, 0xd1, 0xe9, 0xee, 0xff, 0xd2, 0xea, 0xef, 0xff, 0xd0, 0xe9, 0xee, 0xff, 0xcf, 0xe6, 0xec, 0xff, 0xcf, 0xe2, 0xec, 0xff, 0xce, 0xe0, 0xea, 0xff, 0xcb, 0xde, 0xe5, 0xff, 0xc6, 0xda, 0xe1, 0xff, 0xc3, 0xd7, 0xe1, 0xff, 0xc1, 0xd5, 0xe1, 0xff, 0xc3, 0xd7, 0xe2, 0xff, 0xc4, 0xd8, 0xe4, 0xff, 0xc2, 0xd8, 0xe4, 0xff, 0xc5, 0xdb, 0xe6, 0xff, 0xc7, 0xde, 0xe8, 0xff, 0xc8, 0xde, 0xe8, 0xff, 0xc8, 0xdd, 0xe7, 0xff, 0xc5, 0xdd, 0xe6, 0xff, 0xc7, 0xde, 0xe9, 0xff, 0xc7, 0xdc, 0xe8, 0xff, 0xc5, 0xdc, 0xe6, 0xff, 0xc4, 0xdb, 0xe5, 0xff, 0xc6, 0xdd, 0xe6, 0xff, 0xc3, 0xda, 0xe4, 0xff, 0xc2, 0xd9, 0xe2, 0xff, 0xc2, 0xd9, 0xe3, 0xff, 0xc0, 0xd5, 0xe4, 0xff, 0xbe, 0xd3, 0xe1, 0xff, 0xc0, 0xd3, 0xe1, 0xff, 0xbf, 0xd2, 0xe0, 0xff, 0xbd, 0xcf, 0xdf, 0xff, 0xb8, 0xcb, 0xda, 0xff, 0xb7, 0xc9, 0xd8, 0xff, 0xb3, 0xc3, 0xd3, 0xff, 0xa9, 0xb6, 0xcb, 0xff, 0xa4, 0xb0, 0xcb, 0xff, 0x9f, 0xae, 0xc5, 0xff, 0x94, 0xa1, 0xba, 0xff, 0x8f, 0x98, 0xb7, 0xff, 0x8d, 0x9a, 0xb2, 0xff, 0x9e, 0xaa, 0xb4, 0xff, 0xa3, 0xa9, 0xad, 0xff, 0x9f, 0xaa, 0xac, 0xff, 0xad, 0xbb, 0xbc, 0xff, 0xab, 0xb7, 0xb5, 0xff, 0xa8, 0xb3, 0xae, 0xff, 0xa9, 0xb5, 0xaf, 0xff, 0xa9, 0xb4, 0xad, 0xff, 0xb1, 0xb8, 0xb3, 0xff, 0xa8, 0xb4, 0xac, 0xff, 0xaf, 0xb6, 0xab, 0xff, 0x89, 0x89, 0x7c, 0xff, 0x94, 0x97, 0x85, 0xff, 0x93, 0x93, 0x86, 0xff, 0xa3, 0xac, 0xa5, 0xff, 0xa7, 0xac, 0x9c, 0xff, 0x8c, 0x89, 0x74, 0xff, 0x9e, 0xa2, 0x92, 0xff, 0x9a, 0xa1, 0x95, 0xff, 0x9c, 0xa0, 0x97, 0xff, 0xac, 0xb7, 0xad, 0xff, 0xa3, 0xac, 0xa0, 0xff, 0xb2, 0xbc, 0xad, 0xff, 0xb0, 0xb7, 0xa1, 0xff, 0x8a, 0x81, 0x68, 0xff, 0xa7, 0xaa, 0x9c, 0xff, 0xac, 0xb6, 0xac, 0xff, 0x9e, 0xa8, 0x9b, 0xff, 0xa3, 0xac, 0x9f, 0xff, 0x97, 0x9a, 0x90, 0xff, 0x94, 0x97, 0x8e, 0xff, 0xa1, 0xa5, 0x93, 0xff, 0x90, 0x8a, 0x72, 0xff, 0x95, 0x90, 0x81, 0xff, 0xd0, 0xd3, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xcc, 0xc3, 0xb1, 0xff, 0x98, 0x85, 0x60, 0xff, 0x94, 0x82, 0x5c, 0xff, 0x99, 0x86, 0x60, 0xff, 0xa2, 0x90, 0x6a, 0xff, 0xa4, 0x92, 0x6a, 0xff, 0x96, 0x84, 0x5a, 0xff, 0x86, 0x6f, 0x46, 0xff, 0x86, 0x6d, 0x43, 0xff, 0x8f, 0x78, 0x4e, 0xff, 0x96, 0x83, 0x58, 0xff, 0x9d, 0x88, 0x5a, 0xff, 0x9d, 0x88, 0x58, 0xff, 0x9c, 0x91, 0x62, 0xff, 0xae, 0xa7, 0x79, 0xff, 0xc1, 0xb2, 0x7d, 0xff, 0xc9, 0xc0, 0x94, 0xff, 0xe2, 0xf3, 0xe9, 0xff, 0xcd, 0xc8, 0xa5, 0xff, 0xb0, 0x9f, 0x6d, 0xff, 0xbc, 0xb4, 0x89, 0xff, 0xb5, 0xb1, 0x8b, 0xff, 0xb9, 0xb2, 0x91, 0xff, 0xa9, 0x9f, 0x77, 0xff, 0xab, 0xa4, 0x7d, 0xff, 0xbd, 0xb4, 0x8c, 0xff, 0xb1, 0xa2, 0x73, 0xff, 0xa6, 0xa1, 0x7e, 0xff, 0x9d, 0x99, 0x7d, 0xff, 0xa3, 0xae, 0xae, 0xff, 0x98, 0xab, 0xc3, 0xff, 0x7f, 0x85, 0x99, 0xff, 0x74, 0x73, 0x86, 0xff, 0x7c, 0x7f, 0x92, 0xff, 0x85, 0x8a, 0x9f, 0xff, 0x56, 0x52, 0x68, 0xff, 0x5f, 0x5e, 0x77, 0xff, 0x87, 0x94, 0xa4, 0xff, 0xb4, 0xc4, 0xbd, 0xff, 0x72, 0x70, 0x72, 0xff, 0x32, 0x21, 0x2b, 0xff, 0x50, 0x41, 0x44, 0xff, 0x63, 0x61, 0x6f, 0xff, 0xb9, 0xd0, 0xe4, 0xff, 0xbd, 0xd3, 0xe5, 0xff, 0xbc, 0xd3, 0xe2, 0xff, 0xbf, 0xd6, 0xe4, 0xff, 0xc0, 0xda, 0xe9, 0xff, 0xc1, 0xdc, 0xeb, 0xff, 0xc2, 0xdd, 0xeb, 0xff, 0xc2, 0xdd, 0xeb, 0xff, 0xc6, 0xde, 0xea, 0xff, 0xc6, 0xde, 0xeb, 0xff, 0xc4, 0xdb, 0xe9, 0xff, 0xc6, 0xdc, 0xe8, 0xff, 0xcb, 0xe1, 0xed, 0xff, 0xcf, 0xe5, 0xee, 0xff, 0xd1, 0xe9, 0xed, 0xff, 0xd1, 0xea, 0xef, 0xff, 0xd0, 0xe7, 0xee, 0xff, 0xd2, 0xe8, 0xed, 0xff, 0xd0, 0xe5, 0xed, 0xff, 0xcc, 0xe1, 0xea, 0xff, 0xc9, 0xdd, 0xe4, 0xff, 0xc6, 0xd6, 0xe1, 0xff, 0xc1, 0xd1, 0xdf, 0xff, 0xbf, 0xd1, 0xde, 0xff, 0xc0, 0xd4, 0xe0, 0xff, 0xc2, 0xd6, 0xe3, 0xff, 0xc2, 0xd7, 0xe4, 0xff, 0xc4, 0xda, 0xe5, 0xff, 0xc7, 0xdd, 0xe8, 0xff, 0xc7, 0xdd, 0xe9, 0xff, 0xc7, 0xdd, 0xe9, 0xff, 0xc5, 0xde, 0xe8, 0xff, 0xc7, 0xde, 0xe9, 0xff, 0xc8, 0xde, 0xe9, 0xff, 0xc5, 0xdb, 0xe6, 0xff, 0xc5, 0xdb, 0xe5, 0xff, 0xc2, 0xd9, 0xe3, 0xff, 0xc0, 0xd5, 0xe3, 0xff, 0xbe, 0xd3, 0xe2, 0xff, 0xbd, 0xd2, 0xe2, 0xff, 0xbc, 0xd1, 0xe2, 0xff, 0xbd, 0xd0, 0xe1, 0xff, 0xbc, 0xce, 0xde, 0xff, 0xb8, 0xcb, 0xdb, 0xff, 0xb8, 0xca, 0xda, 0xff, 0xb5, 0xc8, 0xd8, 0xff, 0xb5, 0xc6, 0xd7, 0xff, 0xad, 0xbd, 0xce, 0xff, 0xa5, 0xb3, 0xc4, 0xff, 0xa3, 0xb0, 0xc8, 0xff, 0x97, 0xa4, 0xc0, 0xff, 0x8e, 0x9b, 0xb5, 0xff, 0x90, 0x9a, 0xb1, 0xff, 0x9d, 0xaa, 0xb8, 0xff, 0xa9, 0xb4, 0xb6, 0xff, 0xa2, 0xa6, 0xa7, 0xff, 0x9f, 0xaa, 0xad, 0xff, 0xaf, 0xbd, 0xbe, 0xff, 0xaf, 0xba, 0xb9, 0xff, 0xa5, 0xaf, 0xaa, 0xff, 0xa8, 0xb5, 0xae, 0xff, 0xae, 0xb8, 0xb2, 0xff, 0xb1, 0xbb, 0xb6, 0xff, 0xab, 0xb8, 0xb1, 0xff, 0xa6, 0xab, 0xa1, 0xff, 0x8c, 0x8c, 0x7c, 0xff, 0x9d, 0xa2, 0x8d, 0xff, 0x8f, 0x90, 0x85, 0xff, 0xa1, 0xad, 0xa7, 0xff, 0x95, 0x98, 0x8a, 0xff, 0x88, 0x87, 0x75, 0xff, 0x9c, 0xa5, 0x95, 0xff, 0x9a, 0xa5, 0x9a, 0xff, 0x9a, 0x9f, 0x98, 0xff, 0xa0, 0xad, 0xa3, 0xff, 0xa6, 0xb0, 0xa4, 0xff, 0xbb, 0xc3, 0xb2, 0xff, 0xa4, 0xa8, 0x93, 0xff, 0x89, 0x86, 0x71, 0xff, 0xa4, 0xab, 0xa0, 0xff, 0xa7, 0xaf, 0xa5, 0xff, 0x9d, 0xa3, 0x96, 0xff, 0x9a, 0xa4, 0x98, 0xff, 0x96, 0x9c, 0x93, 0xff, 0x9b, 0x9f, 0x95, 0xff, 0x93, 0x92, 0x7e, 0xff, 0x93, 0x8e, 0x74, 0xff, 0x96, 0x95, 0x85, 0xff, 0xe4, 0xe6, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xde, 0xd4, 0xff, 0x9d, 0x8b, 0x67, 0xff, 0x94, 0x81, 0x5c, 0xff, 0x8d, 0x7a, 0x54, 0xff, 0x91, 0x7d, 0x57, 0xff, 0x9f, 0x8b, 0x63, 0xff, 0xa7, 0x96, 0x6b, 0xff, 0xa6, 0x92, 0x67, 0xff, 0xa0, 0x8a, 0x60, 0xff, 0x99, 0x85, 0x5b, 0xff, 0x95, 0x7d, 0x50, 0xff, 0x91, 0x7b, 0x4c, 0xff, 0x97, 0x83, 0x53, 0xff, 0x9f, 0x83, 0x53, 0xff, 0x9c, 0x80, 0x51, 0xff, 0x90, 0x76, 0x3e, 0xff, 0xb2, 0xa8, 0x85, 0xff, 0xe5, 0xf5, 0xf0, 0xff, 0xa3, 0x97, 0x6b, 0xff, 0x8c, 0x71, 0x40, 0xff, 0xa4, 0x94, 0x6d, 0xff, 0xc4, 0xc9, 0xa6, 0xff, 0xbb, 0xb6, 0x97, 0xff, 0xa2, 0x95, 0x70, 0xff, 0xb0, 0xa2, 0x75, 0xff, 0xa5, 0x96, 0x67, 0xff, 0x9b, 0x8b, 0x5e, 0xff, 0xb8, 0xb3, 0x93, 0xff, 0xbc, 0xbb, 0xa1, 0xff, 0xb3, 0xba, 0xb4, 0xff, 0x99, 0xa3, 0xae, 0xff, 0x87, 0x89, 0x97, 0xff, 0x77, 0x75, 0x88, 0xff, 0x7c, 0x81, 0x95, 0xff, 0x73, 0x76, 0x8a, 0xff, 0x63, 0x5d, 0x73, 0xff, 0x77, 0x7c, 0x92, 0xff, 0x9b, 0xb1, 0xb8, 0xff, 0xa5, 0xb3, 0xaf, 0xff, 0x4e, 0x3e, 0x45, 0xff, 0x45, 0x35, 0x3e, 0xff, 0x5b, 0x4d, 0x55, 0xff, 0x4e, 0x46, 0x52, 0xff, 0xaa, 0xbf, 0xd2, 0xff, 0xbf, 0xd7, 0xea, 0xff, 0xbc, 0xd3, 0xe2, 0xff, 0xc0, 0xd7, 0xe6, 0xff, 0xbf, 0xd8, 0xe7, 0xff, 0xc0, 0xda, 0xe9, 0xff, 0xc1, 0xdb, 0xe9, 0xff, 0xc2, 0xdc, 0xea, 0xff, 0xc6, 0xde, 0xec, 0xff, 0xc4, 0xdb, 0xec, 0xff, 0xc1, 0xd8, 0xe7, 0xff, 0xc9, 0xdf, 0xea, 0xff, 0xd0, 0xe7, 0xef, 0xff, 0xce, 0xe6, 0xed, 0xff, 0xd0, 0xe9, 0xed, 0xff, 0xd2, 0xea, 0xf0, 0xff, 0xd3, 0xe9, 0xf0, 0xff, 0xd4, 0xe9, 0xef, 0xff, 0xd1, 0xe9, 0xee, 0xff, 0xcb, 0xe3, 0xe9, 0xff, 0xc6, 0xd9, 0xe3, 0xff, 0xc0, 0xcf, 0xdc, 0xff, 0xba, 0xc8, 0xd8, 0xff, 0xba, 0xc9, 0xda, 0xff, 0xbc, 0xcd, 0xde, 0xff, 0xc0, 0xd3, 0xe3, 0xff, 0xc3, 0xd6, 0xe4, 0xff, 0xc2, 0xd8, 0xe5, 0xff, 0xc5, 0xdb, 0xe7, 0xff, 0xc8, 0xde, 0xe9, 0xff, 0xc7, 0xdc, 0xe7, 0xff, 0xc6, 0xde, 0xe9, 0xff, 0xc5, 0xdc, 0xe7, 0xff, 0xc6, 0xdc, 0xe8, 0xff, 0xc4, 0xda, 0xe6, 0xff, 0xc1, 0xd7, 0xe3, 0xff, 0xbf, 0xd4, 0xe3, 0xff, 0xbd, 0xd1, 0xe1, 0xff, 0xbb, 0xcf, 0xe1, 0xff, 0xba, 0xcd, 0xdf, 0xff, 0xba, 0xcc, 0xde, 0xff, 0xbc, 0xcd, 0xe0, 0xff, 0xb7, 0xc8, 0xda, 0xff, 0xb3, 0xc4, 0xd6, 0xff, 0xb3, 0xc6, 0xd5, 0xff, 0xb0, 0xc3, 0xd5, 0xff, 0xaa, 0xb9, 0xcf, 0xff, 0xa5, 0xb3, 0xc8, 0xff, 0xac, 0xbd, 0xcb, 0xff, 0xaa, 0xba, 0xc8, 0xff, 0x8f, 0x9a, 0xb5, 0xff, 0x8c, 0x97, 0xad, 0xff, 0xa4, 0xb1, 0xba, 0xff, 0xb8, 0xc8, 0xc9, 0xff, 0xac, 0xb8, 0xb5, 0xff, 0x97, 0x9c, 0x9b, 0xff, 0x9e, 0xaa, 0xaa, 0xff, 0xad, 0xbb, 0xbb, 0xff, 0xae, 0xbc, 0xba, 0xff, 0xaa, 0xb9, 0xb5, 0xff, 0xa8, 0xb6, 0xb0, 0xff, 0xae, 0xb9, 0xb3, 0xff, 0xa9, 0xb4, 0xaf, 0xff, 0xaa, 0xb8, 0xb0, 0xff, 0xa2, 0xa8, 0x9d, 0xff, 0x9f, 0xa0, 0x91, 0xff, 0xab, 0xb3, 0xa0, 0xff, 0x95, 0x9b, 0x90, 0xff, 0xa7, 0xb3, 0xaa, 0xff, 0x81, 0x83, 0x76, 0xff, 0x8a, 0x89, 0x7a, 0xff, 0x9a, 0xa2, 0x95, 0xff, 0xa0, 0xab, 0x9f, 0xff, 0x93, 0x9b, 0x92, 0xff, 0xa5, 0xb1, 0xa7, 0xff, 0xb6, 0xba, 0xaf, 0xff, 0x94, 0x94, 0x86, 0xff, 0x88, 0x8a, 0x78, 0xff, 0x99, 0x9c, 0x8d, 0xff, 0x9e, 0xa7, 0x9e, 0xff, 0x88, 0x8e, 0x82, 0xff, 0x93, 0x98, 0x8b, 0xff, 0x9b, 0xa6, 0x9c, 0xff, 0x9e, 0xa6, 0x9d, 0xff, 0xa2, 0xa7, 0x9b, 0xff, 0x89, 0x86, 0x72, 0xff, 0x92, 0x90, 0x7a, 0xff, 0xa2, 0xa4, 0x96, 0xff, 0xf5, 0xf5, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xf1, 0xed, 0xff, 0xaa, 0x9d, 0x80, 0xff, 0x94, 0x81, 0x5b, 0xff, 0x9d, 0x89, 0x63, 0xff, 0xa2, 0x8c, 0x66, 0xff, 0x9d, 0x89, 0x61, 0xff, 0x9a, 0x85, 0x5b, 0xff, 0xa3, 0x8c, 0x62, 0xff, 0xaf, 0x98, 0x6c, 0xff, 0xb3, 0x9e, 0x71, 0xff, 0xbc, 0xaf, 0x80, 0xff, 0xbc, 0xb0, 0x82, 0xff, 0xaf, 0x9c, 0x6f, 0xff, 0xa1, 0x8a, 0x59, 0xff, 0x99, 0x7c, 0x4b, 0xff, 0x90, 0x77, 0x47, 0xff, 0xd6, 0xdb, 0xc3, 0xff, 0xdc, 0xe3, 0xc9, 0xff, 0xa6, 0x93, 0x60, 0xff, 0x96, 0x81, 0x53, 0xff, 0xab, 0x9f, 0x77, 0xff, 0xb6, 0xa8, 0x81, 0xff, 0xa4, 0x97, 0x6c, 0xff, 0xa0, 0x8d, 0x5f, 0xff, 0x9d, 0x8e, 0x62, 0xff, 0xa8, 0x9b, 0x72, 0xff, 0x98, 0x87, 0x5d, 0xff, 0xa3, 0x9b, 0x78, 0xff, 0xc2, 0xc3, 0xa8, 0xff, 0xbf, 0xc2, 0xb6, 0xff, 0xae, 0xb2, 0xb1, 0xff, 0x82, 0x85, 0x8e, 0xff, 0x5d, 0x57, 0x6a, 0xff, 0x57, 0x50, 0x69, 0xff, 0x5b, 0x5d, 0x72, 0xff, 0x81, 0x87, 0x95, 0xff, 0xa1, 0xb2, 0xba, 0xff, 0xb0, 0xc3, 0xc8, 0xff, 0x76, 0x7a, 0x81, 0xff, 0x33, 0x20, 0x27, 0xff, 0x54, 0x49, 0x51, 0xff, 0x55, 0x4a, 0x57, 0xff, 0x3a, 0x2d, 0x37, 0xff, 0x9c, 0xaf, 0xbc, 0xff, 0xc7, 0xdf, 0xf3, 0xff, 0xbb, 0xd3, 0xe2, 0xff, 0xbf, 0xd6, 0xe5, 0xff, 0xbe, 0xd7, 0xe6, 0xff, 0xc0, 0xda, 0xe9, 0xff, 0xc1, 0xdb, 0xe9, 0xff, 0xc0, 0xdb, 0xe9, 0xff, 0xc4, 0xdb, 0xeb, 0xff, 0xc1, 0xd8, 0xe9, 0xff, 0xc2, 0xd9, 0xe9, 0xff, 0xcf, 0xe5, 0xec, 0xff, 0xd1, 0xe8, 0xee, 0xff, 0xcf, 0xe7, 0xee, 0xff, 0xd2, 0xe9, 0xee, 0xff, 0xd6, 0xeb, 0xf0, 0xff, 0xd4, 0xe9, 0xef, 0xff, 0xd3, 0xe8, 0xee, 0xff, 0xd1, 0xe6, 0xed, 0xff, 0xc9, 0xde, 0xe8, 0xff, 0xc4, 0xd6, 0xe2, 0xff, 0xbe, 0xcf, 0xda, 0xff, 0xc1, 0xd3, 0xdb, 0xff, 0xc2, 0xd4, 0xdd, 0xff, 0xb7, 0xc7, 0xd6, 0xff, 0xb2, 0xc2, 0xd4, 0xff, 0xbc, 0xcf, 0xe0, 0xff, 0xc0, 0xd4, 0xe3, 0xff, 0xc3, 0xd9, 0xe5, 0xff, 0xc6, 0xdd, 0xe8, 0xff, 0xc5, 0xdb, 0xe6, 0xff, 0xc3, 0xda, 0xe7, 0xff, 0xc4, 0xdb, 0xe7, 0xff, 0xc4, 0xdb, 0xe6, 0xff, 0xc3, 0xda, 0xe5, 0xff, 0xc1, 0xd7, 0xe3, 0xff, 0xbe, 0xd3, 0xe1, 0xff, 0xbc, 0xd0, 0xe0, 0xff, 0xb9, 0xcd, 0xdf, 0xff, 0xb8, 0xcc, 0xde, 0xff, 0xb7, 0xc9, 0xda, 0xff, 0xb4, 0xc6, 0xd7, 0xff, 0xb5, 0xc5, 0xd5, 0xff, 0xb5, 0xc4, 0xd5, 0xff, 0xad, 0xbf, 0xd2, 0xff, 0xa4, 0xb4, 0xcd, 0xff, 0xa2, 0xb1, 0xca, 0xff, 0xa2, 0xb0, 0xc4, 0xff, 0xa4, 0xb4, 0xc7, 0xff, 0xb4, 0xc7, 0xce, 0xff, 0x94, 0x9f, 0xad, 0xff, 0x94, 0x9c, 0xac, 0xff, 0xa4, 0xb2, 0xb4, 0xff, 0xb8, 0xcc, 0xcc, 0xff, 0xb3, 0xc3, 0xc2, 0xff, 0x9e, 0xa9, 0xa8, 0xff, 0xa4, 0xb1, 0xb1, 0xff, 0xae, 0xbb, 0xb9, 0xff, 0xae, 0xc0, 0xbd, 0xff, 0xac, 0xbd, 0xba, 0xff, 0xab, 0xbb, 0xb5, 0xff, 0xa4, 0xb3, 0xac, 0xff, 0xab, 0xb7, 0xb1, 0xff, 0xaa, 0xb9, 0xb1, 0xff, 0x9f, 0xa5, 0x9a, 0xff, 0xa5, 0xa8, 0x9c, 0xff, 0xb0, 0xc0, 0xb1, 0xff, 0xab, 0xb6, 0xac, 0xff, 0xad, 0xb6, 0xa8, 0xff, 0x7b, 0x76, 0x66, 0xff, 0x75, 0x6f, 0x63, 0xff, 0x8e, 0x91, 0x84, 0xff, 0x9e, 0xa3, 0x95, 0xff, 0xa1, 0xa4, 0x96, 0xff, 0xa3, 0xa9, 0x99, 0xff, 0x80, 0x7d, 0x6f, 0xff, 0x74, 0x6f, 0x63, 0xff, 0x8f, 0x94, 0x88, 0xff, 0x92, 0x96, 0x8d, 0xff, 0x97, 0x9d, 0x94, 0xff, 0x88, 0x89, 0x79, 0xff, 0x9b, 0xa1, 0x90, 0xff, 0x96, 0xa0, 0x94, 0xff, 0xa2, 0xa8, 0x9d, 0xff, 0x9f, 0xa5, 0x98, 0xff, 0x8c, 0x8b, 0x78, 0xff, 0x96, 0x94, 0x84, 0xff, 0xbd, 0xbc, 0xb2, 0xff, 0xfd, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x3b, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xc5, 0xbc, 0xa9, 0xff, 0xa2, 0x8f, 0x69, 0xff, 0x9e, 0x8a, 0x64, 0xff, 0x8e, 0x7a, 0x55, 0xff, 0x89, 0x76, 0x4e, 0xff, 0x8d, 0x76, 0x4b, 0xff, 0x8a, 0x70, 0x47, 0xff, 0x8a, 0x6f, 0x45, 0xff, 0x91, 0x78, 0x4c, 0xff, 0x9c, 0x89, 0x5b, 0xff, 0xb4, 0xa3, 0x75, 0xff, 0xc6, 0xb1, 0x83, 0xff, 0xb3, 0xa2, 0x6f, 0xff, 0xae, 0x9b, 0x67, 0xff, 0xb3, 0xa1, 0x79, 0xff, 0xe1, 0xed, 0xd7, 0xff, 0xbf, 0xba, 0x95, 0xff, 0xa0, 0x8e, 0x5a, 0xff, 0xa4, 0x98, 0x68, 0xff, 0xb8, 0xae, 0x82, 0xff, 0xa2, 0x8d, 0x5f, 0xff, 0x9f, 0x8c, 0x5b, 0xff, 0xa1, 0x8e, 0x5c, 0xff, 0xa1, 0x8e, 0x62, 0xff, 0xac, 0xa1, 0x7a, 0xff, 0xa5, 0x9a, 0x71, 0xff, 0xab, 0xa2, 0x7f, 0xff, 0xac, 0xa8, 0x8f, 0xff, 0xa7, 0xa6, 0x9b, 0xff, 0x89, 0x87, 0x88, 0xff, 0x75, 0x71, 0x7e, 0xff, 0x5e, 0x59, 0x6d, 0xff, 0x54, 0x50, 0x66, 0xff, 0x5a, 0x5e, 0x74, 0xff, 0x95, 0xa2, 0xb1, 0xff, 0xc0, 0xd8, 0xda, 0xff, 0xa1, 0xaf, 0xb7, 0xff, 0x49, 0x3c, 0x4b, 0xff, 0x45, 0x3b, 0x43, 0xff, 0x67, 0x63, 0x6d, 0xff, 0x4c, 0x41, 0x51, 0xff, 0x27, 0x14, 0x1b, 0xff, 0x8d, 0x94, 0xa0, 0xff, 0xce, 0xe8, 0xfb, 0xff, 0xba, 0xd0, 0xdf, 0xff, 0xbd, 0xd3, 0xe1, 0xff, 0xbc, 0xd6, 0xe4, 0xff, 0xbe, 0xd7, 0xe5, 0xff, 0xc0, 0xdb, 0xe8, 0xff, 0xbe, 0xd8, 0xe7, 0xff, 0xbf, 0xd8, 0xe9, 0xff, 0xbe, 0xd5, 0xe4, 0xff, 0xc3, 0xda, 0xe7, 0xff, 0xcc, 0xe4, 0xef, 0xff, 0xcf, 0xea, 0xed, 0xff, 0xd0, 0xe7, 0xee, 0xff, 0xd2, 0xe9, 0xef, 0xff, 0xd1, 0xe8, 0xee, 0xff, 0xcf, 0xe5, 0xed, 0xff, 0xce, 0xe3, 0xeb, 0xff, 0xce, 0xe0, 0xe7, 0xff, 0xc9, 0xdb, 0xe1, 0xff, 0xc3, 0xd5, 0xdf, 0xff, 0xc8, 0xdb, 0xe4, 0xff, 0xd0, 0xe4, 0xeb, 0xff, 0xcf, 0xe2, 0xeb, 0xff, 0xbf, 0xd0, 0xda, 0xff, 0xaf, 0xbe, 0xcf, 0xff, 0xb2, 0xc2, 0xd8, 0xff, 0xbc, 0xd2, 0xe2, 0xff, 0xc0, 0xd6, 0xe4, 0xff, 0xc2, 0xd7, 0xe4, 0xff, 0xc6, 0xdb, 0xe6, 0xff, 0xc5, 0xdb, 0xe5, 0xff, 0xc0, 0xd7, 0xe3, 0xff, 0xc1, 0xd6, 0xe4, 0xff, 0xbf, 0xd3, 0xe2, 0xff, 0xc0, 0xd6, 0xe2, 0xff, 0xbd, 0xd4, 0xe0, 0xff, 0xba, 0xcf, 0xde, 0xff, 0xbb, 0xcf, 0xe0, 0xff, 0xba, 0xcc, 0xde, 0xff, 0xb4, 0xc5, 0xd7, 0xff, 0xb1, 0xc1, 0xd2, 0xff, 0xb2, 0xc2, 0xd3, 0xff, 0xae, 0xbe, 0xd2, 0xff, 0xa1, 0xb2, 0xce, 0xff, 0x9e, 0xad, 0xc8, 0xff, 0xa5, 0xb2, 0xc8, 0xff, 0x98, 0xa7, 0xbb, 0xff, 0x9e, 0xb1, 0xc1, 0xff, 0xbb, 0xcf, 0xd4, 0xff, 0x99, 0xa4, 0xa8, 0xff, 0x93, 0x9b, 0xa3, 0xff, 0xa4, 0xb2, 0xb7, 0xff, 0xae, 0xc2, 0xc3, 0xff, 0xae, 0xba, 0xb9, 0xff, 0xa2, 0xaf, 0xab, 0xff, 0xa0, 0xaf, 0xae, 0xff, 0xac, 0xbc, 0xbc, 0xff, 0xb0, 0xc1, 0xbe, 0xff, 0xa3, 0xb2, 0xb0, 0xff, 0xa7, 0xb7, 0xb4, 0xff, 0xab, 0xb9, 0xb5, 0xff, 0xb0, 0xbe, 0xba, 0xff, 0xa2, 0xb1, 0xa9, 0xff, 0x9a, 0xa0, 0x94, 0xff, 0xa6, 0xad, 0xa2, 0xff, 0xb3, 0xc3, 0xb9, 0xff, 0xad, 0xbb, 0xb2, 0xff, 0xb2, 0xba, 0xa8, 0xff, 0x7d, 0x75, 0x60, 0xff, 0x68, 0x5e, 0x4f, 0xff, 0x8b, 0x8b, 0x7b, 0xff, 0x9e, 0xa2, 0x94, 0xff, 0xa8, 0xac, 0x9b, 0xff, 0x94, 0x93, 0x83, 0xff, 0x50, 0x43, 0x39, 0xff, 0x89, 0x8a, 0x80, 0xff, 0xa8, 0xb0, 0xa4, 0xff, 0x93, 0x92, 0x88, 0xff, 0x9b, 0x9f, 0x90, 0xff, 0xa1, 0xa4, 0x8f, 0xff, 0x9b, 0x9e, 0x8c, 0xff, 0x9b, 0xa0, 0x94, 0xff, 0x9e, 0xa4, 0x97, 0xff, 0x99, 0xa2, 0x92, 0xff, 0x9d, 0xa0, 0x8f, 0xff, 0x9a, 0x9b, 0x8c, 0xff, 0xdb, 0xd9, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xe1, 0xd7, 0xff, 0x9e, 0x8d, 0x6a, 0xff, 0x87, 0x74, 0x4e, 0xff, 0x8b, 0x76, 0x51, 0xff, 0x91, 0x7b, 0x53, 0xff, 0x8c, 0x72, 0x49, 0xff, 0x7c, 0x64, 0x3c, 0xff, 0x8c, 0x76, 0x4d, 0xff, 0x91, 0x7b, 0x4e, 0xff, 0x8c, 0x74, 0x46, 0xff, 0x85, 0x6a, 0x3c, 0xff, 0x87, 0x6a, 0x3c, 0xff, 0xa0, 0x87, 0x57, 0xff, 0xaa, 0x94, 0x62, 0xff, 0xbb, 0xb8, 0x98, 0xff, 0xdf, 0xe9, 0xd9, 0xff, 0xc4, 0xc0, 0x9d, 0xff, 0xbf, 0xb7, 0x90, 0xff, 0xbc, 0xb2, 0x8b, 0xff, 0xaa, 0x97, 0x6a, 0xff, 0xa3, 0x91, 0x65, 0xff, 0xa5, 0x99, 0x76, 0xff, 0xa2, 0x96, 0x6c, 0xff, 0xae, 0x9c, 0x72, 0xff, 0xb4, 0xaa, 0x85, 0xff, 0xaf, 0xa8, 0x83, 0xff, 0xad, 0xa5, 0x84, 0xff, 0xa0, 0x98, 0x82, 0xff, 0x81, 0x7e, 0x79, 0xff, 0x79, 0x76, 0x7f, 0xff, 0x74, 0x67, 0x76, 0xff, 0x4f, 0x42, 0x53, 0xff, 0x6e, 0x69, 0x7b, 0xff, 0x70, 0x79, 0x90, 0xff, 0x9b, 0xb3, 0xcc, 0xff, 0xbc, 0xd1, 0xde, 0xff, 0x6c, 0x6f, 0x7b, 0xff, 0x43, 0x36, 0x43, 0xff, 0x77, 0x74, 0x80, 0xff, 0x6a, 0x66, 0x71, 0xff, 0x4d, 0x3f, 0x50, 0xff, 0x20, 0x0c, 0x12, 0xff, 0x66, 0x62, 0x6d, 0xff, 0xcb, 0xe5, 0xf7, 0xff, 0xb4, 0xcb, 0xdb, 0xff, 0xbb, 0xd0, 0xe1, 0xff, 0xba, 0xd3, 0xe3, 0xff, 0xbc, 0xd4, 0xe3, 0xff, 0xbf, 0xd9, 0xe7, 0xff, 0xbe, 0xd7, 0xe6, 0xff, 0xb9, 0xd3, 0xe5, 0xff, 0xc4, 0xdc, 0xe6, 0xff, 0xcd, 0xe1, 0xe9, 0xff, 0xc4, 0xdb, 0xee, 0xff, 0xc6, 0xe2, 0xed, 0xff, 0xcd, 0xe4, 0xed, 0xff, 0xcb, 0xe3, 0xeb, 0xff, 0xc8, 0xe1, 0xe8, 0xff, 0xc9, 0xdf, 0xe7, 0xff, 0xcb, 0xe0, 0xe8, 0xff, 0xca, 0xdd, 0xe5, 0xff, 0xc7, 0xdb, 0xe3, 0xff, 0xc6, 0xda, 0xe3, 0xff, 0xcd, 0xe1, 0xec, 0xff, 0xd0, 0xe6, 0xf0, 0xff, 0xcd, 0xe1, 0xeb, 0xff, 0xc5, 0xd7, 0xdd, 0xff, 0xaa, 0xb6, 0xcc, 0xff, 0xa6, 0xb4, 0xcf, 0xff, 0xb7, 0xce, 0xdf, 0xff, 0xbd, 0xd4, 0xe4, 0xff, 0xc0, 0xd4, 0xe2, 0xff, 0xc6, 0xda, 0xe4, 0xff, 0xc6, 0xdb, 0xe5, 0xff, 0xbe, 0xd4, 0xe2, 0xff, 0xbc, 0xcf, 0xe2, 0xff, 0xbd, 0xd0, 0xe2, 0xff, 0xbe, 0xd2, 0xe2, 0xff, 0xbd, 0xd1, 0xe1, 0xff, 0xb9, 0xce, 0xde, 0xff, 0xb8, 0xcc, 0xdc, 0xff, 0xb7, 0xc9, 0xd8, 0xff, 0xb7, 0xc7, 0xd5, 0xff, 0xb5, 0xc4, 0xd3, 0xff, 0xaf, 0xc0, 0xd0, 0xff, 0xa8, 0xb7, 0xcd, 0xff, 0x9f, 0xab, 0xc8, 0xff, 0xa2, 0xaf, 0xc3, 0xff, 0xa2, 0xae, 0xbb, 0xff, 0xa2, 0xb6, 0xc3, 0xff, 0xb7, 0xcd, 0xd6, 0xff, 0xb5, 0xca, 0xcf, 0xff, 0x95, 0xa4, 0xa6, 0xff, 0x8e, 0x97, 0x9a, 0xff, 0x98, 0xa2, 0xa6, 0xff, 0xa5, 0xb6, 0xb4, 0xff, 0x8e, 0x95, 0x91, 0xff, 0x92, 0x9a, 0x97, 0xff, 0x99, 0xa6, 0xa5, 0xff, 0xa9, 0xba, 0xbb, 0xff, 0xa9, 0xb6, 0xb4, 0xff, 0x99, 0xa3, 0xa1, 0xff, 0x98, 0xa4, 0xa3, 0xff, 0xa8, 0xb8, 0xb8, 0xff, 0xaa, 0xb9, 0xb7, 0xff, 0xa0, 0xac, 0xa4, 0xff, 0x9c, 0xa6, 0x99, 0xff, 0xa6, 0xb2, 0xa8, 0xff, 0xa9, 0xb3, 0xab, 0xff, 0xaf, 0xbc, 0xb3, 0xff, 0xaa, 0xaf, 0x9b, 0xff, 0x7d, 0x77, 0x5f, 0xff, 0x74, 0x6d, 0x59, 0xff, 0x9a, 0x9b, 0x86, 0xff, 0xa9, 0xb0, 0xa3, 0xff, 0xa9, 0xb1, 0xa0, 0xff, 0x5d, 0x55, 0x46, 0xff, 0x46, 0x37, 0x32, 0xff, 0xaf, 0xbb, 0xb2, 0xff, 0xa1, 0xac, 0x9e, 0xff, 0x9a, 0x9a, 0x8c, 0xff, 0x9a, 0x9b, 0x89, 0xff, 0x8e, 0x8f, 0x7a, 0xff, 0x99, 0x9a, 0x89, 0xff, 0xa2, 0xa8, 0x9b, 0xff, 0xa1, 0xa8, 0x9a, 0xff, 0x9f, 0xa2, 0x91, 0xff, 0x9d, 0xa1, 0x92, 0xff, 0xab, 0xae, 0xa1, 0xff, 0xf2, 0xf1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xf4, 0xf0, 0xff, 0xa9, 0x9b, 0x80, 0xff, 0x8c, 0x77, 0x51, 0xff, 0x8a, 0x72, 0x4d, 0xff, 0x7d, 0x65, 0x3e, 0xff, 0x8b, 0x7a, 0x53, 0xff, 0xb4, 0xa9, 0x80, 0xff, 0xb4, 0xa4, 0x79, 0xff, 0xac, 0x94, 0x67, 0xff, 0xa8, 0x8c, 0x60, 0xff, 0xb1, 0x9f, 0x73, 0xff, 0xb7, 0xb0, 0x82, 0xff, 0xc4, 0xb9, 0x8b, 0xff, 0xc1, 0xaf, 0x83, 0xff, 0xc8, 0xc9, 0xab, 0xff, 0xd7, 0xdc, 0xc9, 0xff, 0xd8, 0xdf, 0xc6, 0xff, 0xc9, 0xc0, 0x97, 0xff, 0xb3, 0xa7, 0x79, 0xff, 0xbb, 0xb3, 0x8c, 0xff, 0xbd, 0xb7, 0x93, 0xff, 0xbd, 0xba, 0x94, 0xff, 0xbe, 0xb2, 0x88, 0xff, 0xa8, 0x98, 0x71, 0xff, 0xb6, 0xaf, 0x89, 0xff, 0xb2, 0xa7, 0x7e, 0xff, 0xa0, 0x97, 0x75, 0xff, 0x94, 0x8c, 0x7a, 0xff, 0x7e, 0x78, 0x7a, 0xff, 0x83, 0x7f, 0x8b, 0xff, 0x51, 0x46, 0x53, 0xff, 0x3f, 0x2f, 0x3c, 0xff, 0x67, 0x58, 0x63, 0xff, 0x89, 0x8f, 0x94, 0xff, 0xb2, 0xd1, 0xdc, 0xff, 0x80, 0x8f, 0xa5, 0xff, 0x46, 0x3d, 0x4c, 0xff, 0x6d, 0x6f, 0x7b, 0xff, 0x7e, 0x7d, 0x8c, 0xff, 0x59, 0x4d, 0x5b, 0xff, 0x43, 0x32, 0x41, 0xff, 0x2a, 0x16, 0x1e, 0xff, 0x36, 0x29, 0x32, 0xff, 0xb4, 0xc5, 0xd5, 0xff, 0xb9, 0xd5, 0xe7, 0xff, 0xb5, 0xce, 0xe1, 0xff, 0xba, 0xd0, 0xe3, 0xff, 0xb9, 0xd1, 0xe2, 0xff, 0xba, 0xd3, 0xe2, 0xff, 0xbb, 0xd4, 0xe4, 0xff, 0xb6, 0xd0, 0xe2, 0xff, 0xc2, 0xd9, 0xe4, 0xff, 0xc1, 0xd4, 0xda, 0xff, 0xb8, 0xcd, 0xe1, 0xff, 0xc0, 0xd8, 0xed, 0xff, 0xc4, 0xdd, 0xea, 0xff, 0xc8, 0xdc, 0xea, 0xff, 0xc9, 0xdc, 0xe9, 0xff, 0xc8, 0xdb, 0xe8, 0xff, 0xc9, 0xda, 0xe8, 0xff, 0xcb, 0xdc, 0xe7, 0xff, 0xca, 0xdc, 0xe2, 0xff, 0xcb, 0xde, 0xe2, 0xff, 0xd2, 0xe5, 0xe8, 0xff, 0xd2, 0xe7, 0xed, 0xff, 0xcb, 0xe0, 0xe7, 0xff, 0xc7, 0xd8, 0xe1, 0xff, 0x99, 0xa2, 0xc1, 0xff, 0x9a, 0xa8, 0xc5, 0xff, 0xba, 0xd1, 0xe1, 0xff, 0xbe, 0xd4, 0xe4, 0xff, 0xc0, 0xd3, 0xe1, 0xff, 0xc3, 0xd6, 0xe2, 0xff, 0xbf, 0xd4, 0xe2, 0xff, 0xba, 0xcf, 0xe1, 0xff, 0xbc, 0xd0, 0xe2, 0xff, 0xbc, 0xd1, 0xe0, 0xff, 0xb9, 0xcd, 0xde, 0xff, 0xbb, 0xce, 0xe1, 0xff, 0xbc, 0xcf, 0xdf, 0xff, 0xb5, 0xc9, 0xd7, 0xff, 0xb2, 0xc6, 0xd3, 0xff, 0xb7, 0xc7, 0xd6, 0xff, 0xae, 0xbd, 0xd0, 0xff, 0xa6, 0xb4, 0xcb, 0xff, 0x9f, 0xad, 0xc5, 0xff, 0xa4, 0xb4, 0xc6, 0xff, 0xb0, 0xbd, 0xc6, 0xff, 0x8e, 0x94, 0x97, 0xff, 0xa3, 0xae, 0xb1, 0xff, 0xad, 0xba, 0xc0, 0xff, 0xa3, 0xae, 0xb3, 0xff, 0xa7, 0xb5, 0xb5, 0xff, 0x83, 0x8a, 0x88, 0xff, 0x8e, 0x91, 0x8f, 0xff, 0xad, 0xbc, 0xb8, 0xff, 0x85, 0x8c, 0x8a, 0xff, 0x88, 0x8d, 0x8e, 0xff, 0x96, 0x9e, 0x9f, 0xff, 0xad, 0xbb, 0xb9, 0xff, 0xa1, 0xab, 0xa7, 0xff, 0x89, 0x8f, 0x89, 0xff, 0x91, 0x9b, 0x97, 0xff, 0xa9, 0xbe, 0xbe, 0xff, 0xa7, 0xb4, 0xb3, 0xff, 0xa8, 0xaf, 0xaa, 0xff, 0xa6, 0xb5, 0xa9, 0xff, 0xad, 0xbb, 0xb2, 0xff, 0x91, 0x9a, 0x8f, 0xff, 0xad, 0xb6, 0xa9, 0xff, 0x9c, 0x9f, 0x8a, 0xff, 0x82, 0x7f, 0x67, 0xff, 0x93, 0x92, 0x7d, 0xff, 0xa0, 0xa3, 0x8e, 0xff, 0xa9, 0xb2, 0xa4, 0xff, 0xb0, 0xb5, 0xa3, 0xff, 0x4c, 0x3f, 0x2b, 0xff, 0x72, 0x6f, 0x65, 0xff, 0xc9, 0xda, 0xd2, 0xff, 0x9c, 0xa5, 0x9a, 0xff, 0x9d, 0xa2, 0x91, 0xff, 0x81, 0x7c, 0x6b, 0xff, 0x7b, 0x74, 0x62, 0xff, 0x9c, 0x9f, 0x8e, 0xff, 0xa2, 0xae, 0x9e, 0xff, 0xa9, 0xad, 0x9f, 0xff, 0x97, 0x94, 0x85, 0xff, 0x90, 0x93, 0x83, 0xff, 0xd0, 0xd1, 0xc6, 0xff, 0xfc, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfe, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcd, 0xc4, 0xb3, 0xff, 0x85, 0x71, 0x4c, 0xff, 0x96, 0x84, 0x5e, 0xff, 0xa1, 0x93, 0x6b, 0xff, 0xc1, 0xb7, 0x8f, 0xff, 0xa6, 0x93, 0x6b, 0xff, 0x7f, 0x65, 0x3c, 0xff, 0xa0, 0x8a, 0x63, 0xff, 0xae, 0x9c, 0x75, 0xff, 0xac, 0x9a, 0x71, 0xff, 0xc6, 0xb7, 0x8d, 0xff, 0xc0, 0xb0, 0x82, 0xff, 0x9b, 0x86, 0x56, 0xff, 0xd1, 0xd3, 0xba, 0xff, 0xdf, 0xde, 0xbd, 0xff, 0xba, 0xad, 0x81, 0xff, 0x91, 0x7c, 0x4e, 0xff, 0xa4, 0x8e, 0x5e, 0xff, 0xa5, 0x90, 0x60, 0xff, 0xa8, 0x99, 0x6b, 0xff, 0xc6, 0xbc, 0x94, 0xff, 0xaf, 0x9f, 0x70, 0xff, 0xa7, 0x98, 0x6d, 0xff, 0xbb, 0xb6, 0x8e, 0xff, 0xab, 0x9f, 0x73, 0xff, 0xaf, 0xa8, 0x8b, 0xff, 0x95, 0x8d, 0x88, 0xff, 0x74, 0x6b, 0x77, 0xff, 0x59, 0x51, 0x5d, 0xff, 0x39, 0x2c, 0x39, 0xff, 0x53, 0x48, 0x54, 0xff, 0x70, 0x69, 0x6a, 0xff, 0xa5, 0xa4, 0x92, 0xff, 0xac, 0xb7, 0xab, 0xff, 0x5c, 0x5c, 0x68, 0xff, 0x69, 0x63, 0x75, 0xff, 0x83, 0x87, 0x9a, 0xff, 0x56, 0x4e, 0x5f, 0xff, 0x40, 0x2e, 0x39, 0xff, 0x37, 0x26, 0x2f, 0xff, 0x38, 0x29, 0x34, 0xff, 0x2d, 0x19, 0x23, 0xff, 0x82, 0x82, 0x8e, 0xff, 0xc2, 0xdc, 0xec, 0xff, 0xae, 0xc8, 0xdc, 0xff, 0xb9, 0xce, 0xe1, 0xff, 0xb8, 0xd1, 0xe1, 0xff, 0xb8, 0xd1, 0xe1, 0xff, 0xbb, 0xd4, 0xe4, 0xff, 0xb8, 0xd0, 0xe4, 0xff, 0xbe, 0xd5, 0xe5, 0xff, 0xc4, 0xda, 0xe1, 0xff, 0xb0, 0xc5, 0xd3, 0xff, 0xb0, 0xc3, 0xdf, 0xff, 0xb9, 0xcd, 0xe6, 0xff, 0xb8, 0xca, 0xe1, 0xff, 0xa6, 0xb6, 0xd2, 0xff, 0x9d, 0xad, 0xcc, 0xff, 0xa8, 0xb8, 0xd9, 0xff, 0xb3, 0xc3, 0xe4, 0xff, 0xbd, 0xd0, 0xe8, 0xff, 0xc7, 0xdc, 0xee, 0xff, 0xca, 0xdd, 0xee, 0xff, 0xc2, 0xd4, 0xe3, 0xff, 0xc1, 0xd3, 0xdf, 0xff, 0xc4, 0xd2, 0xe0, 0xff, 0x82, 0x87, 0xb0, 0xff, 0x9b, 0xa9, 0xc4, 0xff, 0xc2, 0xd9, 0xe6, 0xff, 0xc0, 0xd4, 0xe5, 0xff, 0xbf, 0xd2, 0xe1, 0xff, 0xc0, 0xd2, 0xde, 0xff, 0xbe, 0xd1, 0xdf, 0xff, 0xba, 0xce, 0xdd, 0xff, 0xbd, 0xcf, 0xe0, 0xff, 0xbb, 0xce, 0xdf, 0xff, 0xb6, 0xcb, 0xdb, 0xff, 0xb4, 0xc7, 0xd9, 0xff, 0xb7, 0xc9, 0xda, 0xff, 0xb4, 0xc6, 0xd6, 0xff, 0xaa, 0xbb, 0xcc, 0xff, 0xa8, 0xb6, 0xcc, 0xff, 0xab, 0xb9, 0xcf, 0xff, 0xa3, 0xb1, 0xc5, 0xff, 0xaa, 0xb8, 0xc6, 0xff, 0xa0, 0xb0, 0xb6, 0xff, 0x9c, 0xa2, 0xa2, 0xff, 0x64, 0x5a, 0x5a, 0xff, 0x59, 0x51, 0x54, 0xff, 0x81, 0x83, 0x85, 0xff, 0x79, 0x74, 0x72, 0xff, 0x8f, 0x90, 0x8c, 0xff, 0x9f, 0xa6, 0xa3, 0xff, 0x8f, 0x90, 0x8e, 0xff, 0xa1, 0xae, 0xab, 0xff, 0x8a, 0x94, 0x93, 0xff, 0x86, 0x8d, 0x8d, 0xff, 0x91, 0x98, 0x97, 0xff, 0xa4, 0xb4, 0xaf, 0xff, 0x9d, 0xa9, 0xa0, 0xff, 0x8f, 0x95, 0x8b, 0xff, 0x95, 0x9e, 0x96, 0xff, 0xaa, 0xba, 0xb4, 0xff, 0xa0, 0xae, 0xa6, 0xff, 0xae, 0xbb, 0xb3, 0xff, 0xb0, 0xc0, 0xb8, 0xff, 0xaf, 0xbc, 0xb2, 0xff, 0x8c, 0x91, 0x81, 0xff, 0xa2, 0xa5, 0x94, 0xff, 0x9e, 0x9f, 0x8d, 0xff, 0x91, 0x91, 0x7e, 0xff, 0x95, 0x94, 0x82, 0xff, 0x9d, 0x9f, 0x8b, 0xff, 0xac, 0xb3, 0xa2, 0xff, 0x99, 0x97, 0x80, 0xff, 0x73, 0x67, 0x54, 0xff, 0xaf, 0xb6, 0xad, 0xff, 0xc1, 0xd5, 0xcf, 0xff, 0xa9, 0xb3, 0xa7, 0xff, 0x83, 0x7f, 0x6d, 0xff, 0x65, 0x5e, 0x4d, 0xff, 0x84, 0x80, 0x6f, 0xff, 0x9b, 0x9d, 0x8b, 0xff, 0xa8, 0xad, 0x9d, 0xff, 0xa4, 0xaa, 0x9c, 0xff, 0x93, 0x96, 0x87, 0xff, 0xa8, 0xab, 0x9b, 0xff, 0xe9, 0xea, 0xe4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0xe9, 0xe3, 0xff, 0xb4, 0xa6, 0x84, 0xff, 0xa3, 0x95, 0x6d, 0xff, 0xc4, 0xb6, 0x8d, 0xff, 0x93, 0x7e, 0x56, 0xff, 0x73, 0x56, 0x2e, 0xff, 0xae, 0x95, 0x6e, 0xff, 0xac, 0x9c, 0x77, 0xff, 0x9c, 0x89, 0x65, 0xff, 0x98, 0x7b, 0x52, 0xff, 0x8c, 0x6d, 0x3f, 0xff, 0x88, 0x69, 0x36, 0xff, 0xb0, 0xa0, 0x74, 0xff, 0xf0, 0xf8, 0xe5, 0xff, 0xc3, 0xbf, 0x95, 0xff, 0x94, 0x7d, 0x4d, 0xff, 0x91, 0x74, 0x44, 0xff, 0x97, 0x7f, 0x4f, 0xff, 0xa0, 0x8c, 0x5d, 0xff, 0xb2, 0xa5, 0x78, 0xff, 0xa9, 0x9a, 0x6c, 0xff, 0xa6, 0x93, 0x63, 0xff, 0xae, 0xa0, 0x77, 0xff, 0xc2, 0xbd, 0x9b, 0xff, 0xbc, 0xb2, 0x8b, 0xff, 0xae, 0xa7, 0x90, 0xff, 0x6f, 0x68, 0x6a, 0xff, 0x66, 0x5b, 0x69, 0xff, 0x4a, 0x3b, 0x4a, 0xff, 0x38, 0x26, 0x32, 0xff, 0x5f, 0x50, 0x59, 0xff, 0x6c, 0x67, 0x62, 0xff, 0xa7, 0xa4, 0x98, 0xff, 0x94, 0x8f, 0x87, 0xff, 0x78, 0x74, 0x75, 0xff, 0x90, 0x90, 0xa0, 0xff, 0x5a, 0x56, 0x6b, 0xff, 0x3b, 0x2b, 0x39, 0xff, 0x42, 0x2c, 0x37, 0xff, 0x3c, 0x28, 0x30, 0xff, 0x38, 0x30, 0x39, 0xff, 0x23, 0x0d, 0x19, 0xff, 0x51, 0x49, 0x55, 0xff, 0xc0, 0xd5, 0xe5, 0xff, 0xae, 0xc7, 0xd9, 0xff, 0xb5, 0xcb, 0xdb, 0xff, 0xb6, 0xd2, 0xe1, 0xff, 0xba, 0xd3, 0xe2, 0xff, 0xb7, 0xd0, 0xe1, 0xff, 0xb9, 0xd1, 0xe4, 0xff, 0xba, 0xd1, 0xe4, 0xff, 0xc3, 0xda, 0xe7, 0xff, 0xc2, 0xd7, 0xe2, 0xff, 0xa4, 0xb5, 0xce, 0xff, 0x96, 0xa5, 0xcb, 0xff, 0x93, 0xa1, 0xcd, 0xff, 0x93, 0xa1, 0xc8, 0xff, 0x93, 0x9e, 0xc6, 0xff, 0x60, 0x68, 0x98, 0xff, 0x4c, 0x52, 0x81, 0xff, 0x58, 0x5d, 0x88, 0xff, 0x61, 0x69, 0x8e, 0xff, 0x6e, 0x7a, 0xa6, 0xff, 0x86, 0x95, 0xcd, 0xff, 0xa9, 0xb8, 0xe0, 0xff, 0xa8, 0xb3, 0xd0, 0xff, 0x75, 0x7c, 0xa1, 0xff, 0xb1, 0xbf, 0xd8, 0xff, 0xbf, 0xd5, 0xe3, 0xff, 0xbc, 0xd2, 0xe0, 0xff, 0xc2, 0xd3, 0xe1, 0xff, 0xb6, 0xc6, 0xd4, 0xff, 0xb5, 0xc8, 0xd0, 0xff, 0xbd, 0xd1, 0xdc, 0xff, 0xb9, 0xcb, 0xdd, 0xff, 0xb9, 0xca, 0xdb, 0xff, 0xb9, 0xca, 0xd9, 0xff, 0xb5, 0xc6, 0xd6, 0xff, 0xa9, 0xbb, 0xcc, 0xff, 0xab, 0xba, 0xcf, 0xff, 0xa4, 0xb4, 0xce, 0xff, 0x99, 0xac, 0xc2, 0xff, 0xac, 0xbb, 0xca, 0xff, 0xb5, 0xcb, 0xcf, 0xff, 0xb4, 0xc4, 0xc4, 0xff, 0x89, 0x88, 0x8c, 0xff, 0x74, 0x6b, 0x6d, 0xff, 0x58, 0x48, 0x4b, 0xff, 0x84, 0x85, 0x89, 0xff, 0xa0, 0xaa, 0xa8, 0xff, 0x46, 0x37, 0x35, 0xff, 0x73, 0x6d, 0x69, 0xff, 0xa9, 0xba, 0xb4, 0xff, 0x92, 0x9c, 0x99, 0xff, 0x97, 0xa3, 0xa1, 0xff, 0x9a, 0xaa, 0xab, 0xff, 0x8d, 0x99, 0x98, 0xff, 0x94, 0x9e, 0x98, 0xff, 0xa2, 0xb0, 0xa6, 0xff, 0x94, 0xa1, 0x96, 0xff, 0xa0, 0xa9, 0xa0, 0xff, 0x97, 0x9b, 0x8f, 0xff, 0x90, 0x96, 0x88, 0xff, 0x96, 0xa1, 0x97, 0xff, 0xbc, 0xcc, 0xc5, 0xff, 0xb9, 0xc8, 0xc2, 0xff, 0xb2, 0xbb, 0xb1, 0xff, 0x95, 0x97, 0x84, 0xff, 0x9e, 0x9f, 0x89, 0xff, 0x9f, 0xa3, 0x91, 0xff, 0x98, 0x9a, 0x8b, 0xff, 0x8f, 0x8e, 0x7c, 0xff, 0x93, 0x91, 0x80, 0xff, 0xb6, 0xbb, 0xa6, 0xff, 0x66, 0x5d, 0x49, 0xff, 0x7f, 0x7c, 0x6a, 0xff, 0xc1, 0xcf, 0xc6, 0xff, 0xc0, 0xd4, 0xcf, 0xff, 0x9e, 0xa3, 0x91, 0xff, 0x5e, 0x49, 0x38, 0xff, 0x78, 0x74, 0x62, 0xff, 0xa3, 0xa4, 0x92, 0xff, 0x95, 0x93, 0x82, 0xff, 0xa2, 0xa1, 0x8e, 0xff, 0xa0, 0xa3, 0x92, 0xff, 0x9e, 0xa5, 0x97, 0xff, 0xc6, 0xc8, 0xbc, 0xff, 0xfa, 0xfa, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x74, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xc6, 0xbd, 0xa5, 0xff, 0x9f, 0x8c, 0x64, 0xff, 0x9f, 0x88, 0x5f, 0xff, 0x7e, 0x65, 0x3d, 0xff, 0xb4, 0xa5, 0x7a, 0xff, 0xa4, 0x93, 0x6a, 0xff, 0x81, 0x63, 0x3b, 0xff, 0x81, 0x5f, 0x39, 0xff, 0x95, 0x78, 0x50, 0xff, 0x9f, 0x83, 0x4f, 0xff, 0x99, 0x80, 0x47, 0xff, 0xdc, 0xe0, 0xca, 0xff, 0xe0, 0xe2, 0xcf, 0xff, 0xc5, 0xc1, 0x9b, 0xff, 0xbb, 0xb4, 0x8d, 0xff, 0xb9, 0xad, 0x82, 0xff, 0x9e, 0x90, 0x65, 0xff, 0xb8, 0xab, 0x82, 0xff, 0xac, 0x9b, 0x69, 0xff, 0x9d, 0x88, 0x5b, 0xff, 0xaf, 0x9d, 0x71, 0xff, 0xa6, 0x97, 0x6e, 0xff, 0xaa, 0xa2, 0x80, 0xff, 0xaa, 0x9f, 0x74, 0xff, 0x94, 0x89, 0x74, 0xff, 0x60, 0x59, 0x5e, 0xff, 0x64, 0x5b, 0x65, 0xff, 0x42, 0x2e, 0x41, 0xff, 0x46, 0x36, 0x40, 0xff, 0x60, 0x55, 0x56, 0xff, 0x75, 0x6e, 0x68, 0xff, 0x9c, 0x97, 0x96, 0xff, 0x7c, 0x78, 0x7b, 0xff, 0x8d, 0x8e, 0x91, 0xff, 0x70, 0x6d, 0x77, 0xff, 0x43, 0x37, 0x43, 0xff, 0x46, 0x35, 0x40, 0xff, 0x3b, 0x2b, 0x37, 0xff, 0x3e, 0x2f, 0x37, 0xff, 0x29, 0x19, 0x20, 0xff, 0x4f, 0x49, 0x56, 0xff, 0x75, 0x78, 0x87, 0xff, 0x95, 0xa0, 0xb3, 0xff, 0xbe, 0xd8, 0xe8, 0xff, 0xb1, 0xc8, 0xd8, 0xff, 0xb5, 0xce, 0xdf, 0xff, 0xb9, 0xd0, 0xe0, 0xff, 0xb5, 0xce, 0xde, 0xff, 0xb8, 0xd1, 0xe3, 0xff, 0xbc, 0xd5, 0xe5, 0xff, 0xbc, 0xd3, 0xe5, 0xff, 0xc6, 0xdb, 0xea, 0xff, 0xc3, 0xd8, 0xe6, 0xff, 0x94, 0xa7, 0xc9, 0xff, 0x79, 0x89, 0xbb, 0xff, 0x95, 0xa7, 0xcc, 0xff, 0x94, 0xa0, 0xc7, 0xff, 0x4b, 0x4d, 0x85, 0xff, 0x33, 0x35, 0x6c, 0xff, 0x28, 0x24, 0x5c, 0xff, 0x22, 0x18, 0x49, 0xff, 0x16, 0x10, 0x3b, 0xff, 0x31, 0x34, 0x77, 0xff, 0x49, 0x55, 0x98, 0xff, 0x6a, 0x74, 0x9b, 0xff, 0xb0, 0xbe, 0xd0, 0xff, 0xc2, 0xd4, 0xe0, 0xff, 0xbc, 0xd1, 0xe2, 0xff, 0xba, 0xd0, 0xdf, 0xff, 0xbb, 0xc9, 0xd6, 0xff, 0xb1, 0xc0, 0xcf, 0xff, 0xa5, 0xb5, 0xbe, 0xff, 0xb7, 0xc8, 0xd1, 0xff, 0xb5, 0xc6, 0xda, 0xff, 0xb5, 0xc6, 0xd6, 0xff, 0xb2, 0xc3, 0xd0, 0xff, 0xa9, 0xbb, 0xcc, 0xff, 0xa9, 0xba, 0xcc, 0xff, 0xa4, 0xb4, 0xcb, 0xff, 0xa0, 0xae, 0xc6, 0xff, 0xa8, 0xb3, 0xc4, 0xff, 0xb0, 0xbc, 0xc0, 0xff, 0xb0, 0xc1, 0xbd, 0xff, 0xbd, 0xd2, 0xce, 0xff, 0x95, 0x95, 0x97, 0xff, 0x53, 0x3f, 0x43, 0xff, 0x66, 0x5f, 0x5f, 0xff, 0xd1, 0xe2, 0xdf, 0xff, 0xaa, 0xb5, 0xb0, 0xff, 0x2e, 0x1c, 0x1e, 0xff, 0x6d, 0x66, 0x63, 0xff, 0xab, 0xba, 0xb1, 0xff, 0xa1, 0xb0, 0xab, 0xff, 0xb0, 0xbd, 0xbb, 0xff, 0xa1, 0xb1, 0xb4, 0xff, 0x96, 0xa0, 0x9f, 0xff, 0x9e, 0xac, 0xa3, 0xff, 0xa7, 0xae, 0xa2, 0xff, 0x94, 0x9c, 0x95, 0xff, 0xb4, 0xc1, 0xba, 0xff, 0x89, 0x87, 0x77, 0xff, 0x70, 0x6f, 0x5f, 0xff, 0x98, 0xa1, 0x9e, 0xff, 0xbc, 0xcc, 0xc8, 0xff, 0xbb, 0xcc, 0xc3, 0xff, 0xaf, 0xb9, 0xab, 0xff, 0x97, 0x95, 0x82, 0xff, 0x94, 0x93, 0x7e, 0xff, 0xa2, 0xab, 0x97, 0xff, 0xa3, 0xa5, 0x93, 0xff, 0x74, 0x71, 0x5b, 0xff, 0x8a, 0x8a, 0x7b, 0xff, 0xb1, 0xb5, 0x9e, 0xff, 0x61, 0x56, 0x46, 0xff, 0x92, 0x91, 0x80, 0xff, 0xb4, 0xc3, 0xb7, 0xff, 0xc5, 0xd3, 0xcd, 0xff, 0x8a, 0x82, 0x6c, 0xff, 0x67, 0x5a, 0x46, 0xff, 0x8a, 0x8a, 0x77, 0xff, 0x93, 0x90, 0x7b, 0xff, 0x94, 0x8f, 0x7b, 0xff, 0x98, 0x9b, 0x87, 0xff, 0xa3, 0xa4, 0x92, 0xff, 0x9d, 0x9f, 0x8d, 0xff, 0xde, 0xde, 0xd7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xdf, 0xd6, 0xff, 0xb3, 0x9f, 0x79, 0xff, 0x84, 0x6c, 0x44, 0xff, 0xa2, 0x8c, 0x63, 0xff, 0x98, 0x86, 0x5d, 0xff, 0x79, 0x62, 0x3a, 0xff, 0x90, 0x70, 0x4a, 0xff, 0x96, 0x72, 0x4d, 0xff, 0x89, 0x6b, 0x43, 0xff, 0x87, 0x6b, 0x37, 0xff, 0xcb, 0xbc, 0x90, 0xff, 0xe8, 0xf6, 0xe5, 0xff, 0xcc, 0xcc, 0xad, 0xff, 0xcb, 0xbf, 0x90, 0xff, 0xa6, 0x94, 0x67, 0xff, 0xa3, 0x91, 0x64, 0xff, 0xc6, 0xc0, 0x98, 0xff, 0xc1, 0xb9, 0x95, 0xff, 0x9e, 0x8a, 0x55, 0xff, 0xab, 0x96, 0x69, 0xff, 0xc0, 0xb2, 0x89, 0xff, 0xba, 0xb3, 0x8d, 0xff, 0xa1, 0x9b, 0x76, 0xff, 0xa1, 0x97, 0x6c, 0xff, 0x97, 0x8f, 0x81, 0xff, 0x74, 0x6f, 0x78, 0xff, 0x55, 0x4e, 0x58, 0xff, 0x35, 0x24, 0x33, 0xff, 0x63, 0x54, 0x57, 0xff, 0x74, 0x6a, 0x67, 0xff, 0x86, 0x85, 0x86, 0xff, 0x90, 0x8d, 0x90, 0xff, 0x89, 0x81, 0x85, 0xff, 0x83, 0x7d, 0x81, 0xff, 0x49, 0x40, 0x49, 0xff, 0x44, 0x35, 0x41, 0xff, 0x3d, 0x2b, 0x33, 0xff, 0x37, 0x2b, 0x31, 0xff, 0x2e, 0x1f, 0x28, 0xff, 0x45, 0x35, 0x43, 0xff, 0xae, 0xbd, 0xce, 0xff, 0x57, 0x5c, 0x6e, 0xff, 0x55, 0x51, 0x63, 0xff, 0xc6, 0xde, 0xef, 0xff, 0xb1, 0xc8, 0xdb, 0xff, 0xb4, 0xc8, 0xdb, 0xff, 0xb5, 0xcb, 0xde, 0xff, 0xb7, 0xcf, 0xe0, 0xff, 0xb7, 0xd0, 0xe0, 0xff, 0xb9, 0xd3, 0xe3, 0xff, 0xbf, 0xd9, 0xe9, 0xff, 0xc3, 0xdc, 0xe8, 0xff, 0xca, 0xe1, 0xe8, 0xff, 0xbe, 0xd0, 0xe0, 0xff, 0x92, 0xa5, 0xc4, 0xff, 0x81, 0x93, 0xbd, 0xff, 0x68, 0x75, 0xb5, 0xff, 0x5c, 0x66, 0xb1, 0xff, 0x5a, 0x62, 0xa6, 0xff, 0x65, 0x6b, 0xaa, 0xff, 0x75, 0x79, 0xb2, 0xff, 0x69, 0x6a, 0x9c, 0xff, 0x45, 0x47, 0x78, 0xff, 0x58, 0x60, 0x88, 0xff, 0x9c, 0xa8, 0xc0, 0xff, 0xc6, 0xda, 0xe2, 0xff, 0xc2, 0xda, 0xde, 0xff, 0xbf, 0xd5, 0xe1, 0xff, 0xba, 0xd0, 0xdf, 0xff, 0xae, 0xbd, 0xcd, 0xff, 0xab, 0xbb, 0xc9, 0xff, 0xa4, 0xb2, 0xba, 0xff, 0xb0, 0xbe, 0xc3, 0xff, 0xb1, 0xc1, 0xd1, 0xff, 0xb1, 0xc3, 0xd4, 0xff, 0xb0, 0xc4, 0xd0, 0xff, 0xaa, 0xbb, 0xce, 0xff, 0xab, 0xb7, 0xd0, 0xff, 0xa7, 0xb5, 0xc5, 0xff, 0xab, 0xb8, 0xbf, 0xff, 0xba, 0xc8, 0xc9, 0xff, 0xad, 0xba, 0xb5, 0xff, 0x8e, 0x8e, 0x88, 0xff, 0xa1, 0xa4, 0x9f, 0xff, 0x90, 0x8e, 0x8a, 0xff, 0x50, 0x3c, 0x38, 0xff, 0x8f, 0x90, 0x88, 0xff, 0xbf, 0xcf, 0xc6, 0xff, 0x8e, 0x92, 0x8b, 0xff, 0x18, 0x00, 0x02, 0xff, 0x6e, 0x68, 0x62, 0xff, 0xaa, 0xb5, 0xac, 0xff, 0xa5, 0xb4, 0xaf, 0xff, 0xa2, 0xb1, 0xad, 0xff, 0x9b, 0xa1, 0xa0, 0xff, 0x9c, 0xa2, 0x9b, 0xff, 0x9e, 0xaf, 0xa4, 0xff, 0x9f, 0xa8, 0x9f, 0xff, 0x93, 0x9a, 0x92, 0xff, 0xc1, 0xd0, 0xc7, 0xff, 0x79, 0x76, 0x68, 0xff, 0x5d, 0x54, 0x48, 0xff, 0xa6, 0xb3, 0xad, 0xff, 0xb3, 0xca, 0xc1, 0xff, 0xbd, 0xcd, 0xc1, 0xff, 0xa2, 0xa6, 0x92, 0xff, 0x76, 0x6b, 0x59, 0xff, 0x81, 0x79, 0x6c, 0xff, 0xb7, 0xbc, 0xa8, 0xff, 0x8a, 0x87, 0x70, 0xff, 0x6c, 0x5d, 0x49, 0xff, 0xad, 0xb4, 0x9e, 0xff, 0x92, 0x92, 0x7a, 0xff, 0x61, 0x4e, 0x3d, 0xff, 0x98, 0x94, 0x81, 0xff, 0xac, 0xbd, 0xad, 0xff, 0xb8, 0xc4, 0xb6, 0xff, 0x81, 0x7b, 0x67, 0xff, 0x75, 0x72, 0x5c, 0xff, 0x7a, 0x6d, 0x5b, 0xff, 0xa1, 0x9d, 0x86, 0xff, 0x97, 0x97, 0x7e, 0xff, 0xa3, 0xa6, 0x98, 0xff, 0xac, 0xb0, 0xa0, 0xff, 0xab, 0xae, 0x98, 0xff, 0xf6, 0xf6, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xbc, 0xae, 0x94, 0xff, 0x94, 0x7d, 0x54, 0xff, 0x9d, 0x87, 0x5d, 0xff, 0x83, 0x6b, 0x42, 0xff, 0x8d, 0x74, 0x4c, 0xff, 0x8f, 0x71, 0x4a, 0xff, 0x85, 0x67, 0x42, 0xff, 0x8b, 0x6e, 0x3d, 0xff, 0xb6, 0xa2, 0x6e, 0xff, 0xd3, 0xd2, 0xb2, 0xff, 0xd0, 0xd4, 0xba, 0xff, 0xbd, 0xb4, 0x87, 0xff, 0xaf, 0x99, 0x63, 0xff, 0x93, 0x7b, 0x46, 0xff, 0xb2, 0x9f, 0x71, 0xff, 0xc2, 0xb2, 0x8e, 0xff, 0xa4, 0x93, 0x66, 0xff, 0xad, 0xa4, 0x76, 0xff, 0xb9, 0xaa, 0x7b, 0xff, 0xb0, 0xa0, 0x75, 0xff, 0xc2, 0xbe, 0x9a, 0xff, 0xb9, 0xb5, 0x8f, 0xff, 0xb7, 0xb0, 0x8b, 0xff, 0x98, 0x97, 0x8f, 0xff, 0x7e, 0x7d, 0x89, 0xff, 0x5f, 0x57, 0x61, 0xff, 0x39, 0x2a, 0x37, 0xff, 0x65, 0x59, 0x61, 0xff, 0x84, 0x7e, 0x82, 0xff, 0x91, 0x8f, 0x94, 0xff, 0x8c, 0x88, 0x89, 0xff, 0x86, 0x7c, 0x81, 0xff, 0x52, 0x44, 0x4f, 0xff, 0x45, 0x35, 0x40, 0xff, 0x4a, 0x39, 0x43, 0xff, 0x38, 0x27, 0x2e, 0xff, 0x32, 0x1c, 0x23, 0xff, 0x30, 0x1f, 0x2c, 0xff, 0x77, 0x7e, 0x92, 0xff, 0x72, 0x7b, 0x95, 0xff, 0x2f, 0x27, 0x43, 0xff, 0x38, 0x2d, 0x3d, 0xff, 0xa0, 0xb0, 0xbe, 0xff, 0xbf, 0xd6, 0xec, 0xff, 0xb2, 0xc8, 0xda, 0xff, 0xb5, 0xcb, 0xdd, 0xff, 0xb6, 0xcf, 0xe0, 0xff, 0xb7, 0xd0, 0xe0, 0xff, 0xbb, 0xd4, 0xe3, 0xff, 0xc1, 0xdd, 0xea, 0xff, 0xc4, 0xde, 0xeb, 0xff, 0xc2, 0xdb, 0xe2, 0xff, 0xc3, 0xd6, 0xde, 0xff, 0xb9, 0xc9, 0xda, 0xff, 0x8a, 0x9a, 0xc0, 0xff, 0x5f, 0x69, 0xaa, 0xff, 0x56, 0x61, 0xa5, 0xff, 0x73, 0x79, 0xb1, 0xff, 0x96, 0x9e, 0xc0, 0xff, 0x9d, 0xad, 0xc0, 0xff, 0xa3, 0xb1, 0xc9, 0xff, 0xb4, 0xc1, 0xd6, 0xff, 0xc8, 0xd8, 0xe2, 0xff, 0xc4, 0xd5, 0xdf, 0xff, 0xbc, 0xd0, 0xdb, 0xff, 0xc0, 0xd4, 0xe1, 0xff, 0xc1, 0xd6, 0xe1, 0xff, 0xbb, 0xd1, 0xdf, 0xff, 0xb0, 0xbf, 0xca, 0xff, 0xac, 0xb8, 0xbd, 0xff, 0xab, 0xb4, 0xb1, 0xff, 0xac, 0xb6, 0xb0, 0xff, 0xb3, 0xc0, 0xc5, 0xff, 0xb1, 0xc3, 0xcf, 0xff, 0xaf, 0xc2, 0xcd, 0xff, 0xaf, 0xbf, 0xce, 0xff, 0xb3, 0xc0, 0xd0, 0xff, 0xaf, 0xbc, 0xc2, 0xff, 0xb4, 0xc6, 0xc4, 0xff, 0xb0, 0xc0, 0xbd, 0xff, 0xb3, 0xbf, 0xbc, 0xff, 0xb0, 0xbd, 0xb8, 0xff, 0x8e, 0x89, 0x86, 0xff, 0x4d, 0x3e, 0x3a, 0xff, 0x58, 0x4a, 0x42, 0xff, 0x84, 0x79, 0x70, 0xff, 0x8c, 0x95, 0x8b, 0xff, 0x96, 0x98, 0x8f, 0xff, 0x1d, 0x02, 0x04, 0xff, 0x77, 0x78, 0x74, 0xff, 0xa5, 0xb2, 0xad, 0xff, 0xb6, 0xc5, 0xc3, 0xff, 0x9c, 0xab, 0xa8, 0xff, 0x97, 0x9e, 0x9b, 0xff, 0xa2, 0xa8, 0x9e, 0xff, 0xab, 0xba, 0xae, 0xff, 0x92, 0x9a, 0x91, 0xff, 0x8b, 0x91, 0x85, 0xff, 0xc5, 0xd2, 0xc5, 0xff, 0x73, 0x6e, 0x5f, 0xff, 0x54, 0x46, 0x3a, 0xff, 0xb0, 0xbc, 0xb2, 0xff, 0xac, 0xb8, 0xa8, 0xff, 0xb1, 0xb7, 0xa4, 0xff, 0x93, 0x91, 0x79, 0xff, 0x5b, 0x4b, 0x36, 0xff, 0x88, 0x7c, 0x6a, 0xff, 0x95, 0x91, 0x7a, 0xff, 0x77, 0x71, 0x55, 0xff, 0xa3, 0x9a, 0x85, 0xff, 0xb1, 0xb4, 0x99, 0xff, 0x5e, 0x51, 0x3d, 0xff, 0x47, 0x31, 0x24, 0xff, 0x99, 0x9b, 0x84, 0xff, 0xaa, 0xb9, 0xa4, 0xff, 0x93, 0x98, 0x83, 0xff, 0x87, 0x82, 0x6f, 0xff, 0x7f, 0x70, 0x5e, 0xff, 0x8e, 0x7d, 0x6a, 0xff, 0xae, 0xae, 0x9a, 0xff, 0xa1, 0xa9, 0x93, 0xff, 0xb1, 0xb3, 0xa3, 0xff, 0x8a, 0x85, 0x72, 0xff, 0xd0, 0xcd, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x63, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xdb, 0xd0, 0xff, 0xa4, 0x91, 0x6a, 0xff, 0x8d, 0x70, 0x48, 0xff, 0x87, 0x69, 0x41, 0xff, 0x84, 0x69, 0x40, 0xff, 0x84, 0x6a, 0x40, 0xff, 0x95, 0x7d, 0x4e, 0xff, 0xb4, 0xa6, 0x76, 0xff, 0xdb, 0xd7, 0xa8, 0xff, 0xc3, 0xc0, 0x94, 0xff, 0xcb, 0xcc, 0xaa, 0xff, 0xad, 0x9b, 0x6e, 0xff, 0xab, 0x9a, 0x68, 0xff, 0xb8, 0xa9, 0x79, 0xff, 0xbf, 0xb1, 0x80, 0xff, 0xb1, 0xa1, 0x77, 0xff, 0xae, 0x9e, 0x72, 0xff, 0xaf, 0x9b, 0x69, 0xff, 0xab, 0x93, 0x65, 0xff, 0xa3, 0x90, 0x62, 0xff, 0xb6, 0xb3, 0x90, 0xff, 0xb8, 0xaf, 0x86, 0xff, 0xbb, 0xb5, 0x94, 0xff, 0x99, 0xa0, 0x9c, 0xff, 0x87, 0x8a, 0x92, 0xff, 0x69, 0x64, 0x6e, 0xff, 0x4e, 0x40, 0x4f, 0xff, 0x68, 0x62, 0x74, 0xff, 0x7c, 0x79, 0x86, 0xff, 0x8d, 0x89, 0x88, 0xff, 0x8e, 0x88, 0x85, 0xff, 0x59, 0x52, 0x58, 0xff, 0x34, 0x27, 0x35, 0xff, 0x48, 0x38, 0x44, 0xff, 0x3a, 0x2b, 0x34, 0xff, 0x2c, 0x1d, 0x24, 0xff, 0x33, 0x22, 0x2d, 0xff, 0x5f, 0x5a, 0x6f, 0xff, 0x64, 0x68, 0x85, 0xff, 0x44, 0x49, 0x6c, 0xff, 0x4c, 0x4c, 0x6e, 0xff, 0x1b, 0x0d, 0x1d, 0xff, 0x70, 0x71, 0x7f, 0xff, 0xc9, 0xde, 0xf3, 0xff, 0xac, 0xc5, 0xd7, 0xff, 0xb2, 0xc7, 0xdb, 0xff, 0xb6, 0xce, 0xdf, 0xff, 0xb9, 0xd2, 0xe2, 0xff, 0xbf, 0xd8, 0xe5, 0xff, 0xc5, 0xdd, 0xe9, 0xff, 0xc2, 0xdd, 0xec, 0xff, 0xbf, 0xd9, 0xe4, 0xff, 0xbf, 0xd4, 0xe0, 0xff, 0xbb, 0xcd, 0xdd, 0xff, 0x9d, 0xb0, 0xcc, 0xff, 0x8b, 0x9d, 0xc7, 0xff, 0x95, 0xa6, 0xca, 0xff, 0xa8, 0xbb, 0xd0, 0xff, 0xb7, 0xcc, 0xd4, 0xff, 0xbf, 0xcd, 0xd9, 0xff, 0xc2, 0xd2, 0xe0, 0xff, 0xc1, 0xd8, 0xde, 0xff, 0xbc, 0xd3, 0xda, 0xff, 0xc1, 0xd8, 0xdf, 0xff, 0xc5, 0xda, 0xe3, 0xff, 0xc1, 0xd4, 0xdd, 0xff, 0xb9, 0xcb, 0xd9, 0xff, 0xb7, 0xca, 0xda, 0xff, 0xac, 0xb9, 0xc0, 0xff, 0xb1, 0xbb, 0xb0, 0xff, 0xa7, 0xad, 0x9c, 0xff, 0xa6, 0xab, 0x99, 0xff, 0xb1, 0xbb, 0xb2, 0xff, 0xb2, 0xc2, 0xc4, 0xff, 0xab, 0xbb, 0xc4, 0xff, 0xaf, 0xbc, 0xc3, 0xff, 0xb7, 0xc6, 0xc4, 0xff, 0xb1, 0xc1, 0xbb, 0xff, 0xb5, 0xbe, 0xb8, 0xff, 0xaa, 0xb1, 0xac, 0xff, 0xac, 0xba, 0xb4, 0xff, 0xc0, 0xcb, 0xc4, 0xff, 0x9d, 0xa0, 0x97, 0xff, 0x58, 0x48, 0x41, 0xff, 0x60, 0x4d, 0x47, 0xff, 0x7a, 0x78, 0x70, 0xff, 0xb0, 0xb2, 0xac, 0xff, 0x69, 0x5d, 0x59, 0xff, 0x18, 0x00, 0x02, 0xff, 0x84, 0x8e, 0x8c, 0xff, 0xb4, 0xca, 0xc7, 0xff, 0xb8, 0xc4, 0xc6, 0xff, 0x9e, 0xaf, 0xae, 0xff, 0xa9, 0xbc, 0xb7, 0xff, 0xa3, 0xa9, 0x9f, 0xff, 0xa5, 0xaf, 0xa3, 0xff, 0x92, 0x98, 0x8c, 0xff, 0x8b, 0x8d, 0x7c, 0xff, 0xab, 0xb5, 0xa4, 0xff, 0x7c, 0x75, 0x63, 0xff, 0x67, 0x5c, 0x4e, 0xff, 0xa9, 0xb0, 0xa2, 0xff, 0x7c, 0x75, 0x61, 0xff, 0x8d, 0x85, 0x6e, 0xff, 0x93, 0x8a, 0x73, 0xff, 0x66, 0x55, 0x3c, 0xff, 0x89, 0x7b, 0x5d, 0xff, 0x76, 0x67, 0x4c, 0xff, 0x8c, 0x84, 0x68, 0xff, 0xba, 0xc3, 0xaa, 0xff, 0x9a, 0x90, 0x74, 0xff, 0x39, 0x1e, 0x15, 0xff, 0x41, 0x2e, 0x24, 0xff, 0xac, 0xae, 0x92, 0xff, 0xae, 0xaa, 0x94, 0xff, 0x5f, 0x4f, 0x39, 0xff, 0x7b, 0x70, 0x5e, 0xff, 0x8f, 0x8c, 0x75, 0xff, 0xb1, 0xc0, 0xa9, 0xff, 0xb3, 0xbf, 0xaf, 0xff, 0xb2, 0xb8, 0xab, 0xff, 0x7b, 0x73, 0x5f, 0xff, 0x92, 0x84, 0x70, 0xff, 0xee, 0xec, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xbf, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfc, 0xff, 0xc5, 0xb8, 0x9d, 0xff, 0x9c, 0x87, 0x5d, 0xff, 0x97, 0x80, 0x58, 0xff, 0x98, 0x83, 0x5a, 0xff, 0xb5, 0xa0, 0x72, 0xff, 0xb4, 0x9f, 0x70, 0xff, 0xc6, 0xc5, 0x99, 0xff, 0xc8, 0xc5, 0x97, 0xff, 0xbd, 0xb1, 0x83, 0xff, 0xc7, 0xbe, 0x8f, 0xff, 0xa7, 0x99, 0x68, 0xff, 0xbd, 0xb4, 0x85, 0xff, 0xb3, 0xa3, 0x76, 0xff, 0xb2, 0x9e, 0x6e, 0xff, 0xab, 0x98, 0x67, 0xff, 0xad, 0x9c, 0x6e, 0xff, 0xab, 0x96, 0x66, 0xff, 0xa8, 0x92, 0x61, 0xff, 0xa7, 0x95, 0x66, 0xff, 0xb4, 0xad, 0x86, 0xff, 0xb5, 0xac, 0x82, 0xff, 0xb8, 0xb0, 0x8a, 0xff, 0x9a, 0xa5, 0xa0, 0xff, 0x94, 0x9b, 0x9e, 0xff, 0x8a, 0x8b, 0x95, 0xff, 0x5c, 0x56, 0x69, 0xff, 0x5b, 0x54, 0x67, 0xff, 0x77, 0x76, 0x7d, 0xff, 0x8d, 0x8b, 0x84, 0xff, 0x71, 0x68, 0x6f, 0xff, 0x38, 0x2b, 0x36, 0xff, 0x43, 0x34, 0x3d, 0xff, 0x3d, 0x2e, 0x39, 0xff, 0x2c, 0x1c, 0x26, 0xff, 0x31, 0x20, 0x26, 0xff, 0x41, 0x37, 0x41, 0xff, 0x58, 0x51, 0x6e, 0xff, 0x4e, 0x4d, 0x70, 0xff, 0x5f, 0x6e, 0x98, 0xff, 0x54, 0x56, 0x76, 0xff, 0x23, 0x14, 0x23, 0xff, 0x59, 0x56, 0x64, 0xff, 0xb3, 0xc5, 0xd5, 0xff, 0xb1, 0xc8, 0xdc, 0xff, 0xb0, 0xc3, 0xd9, 0xff, 0xb4, 0xca, 0xdb, 0xff, 0xba, 0xd1, 0xe1, 0xff, 0xbf, 0xd7, 0xe5, 0xff, 0xc3, 0xdc, 0xea, 0xff, 0xc1, 0xdc, 0xe8, 0xff, 0xbe, 0xd8, 0xe3, 0xff, 0xc0, 0xd5, 0xe2, 0xff, 0xbc, 0xd0, 0xe0, 0xff, 0xa8, 0xbe, 0xd1, 0xff, 0x9c, 0xac, 0xca, 0xff, 0xaa, 0xbb, 0xd4, 0xff, 0xbc, 0xd2, 0xdd, 0xff, 0xc2, 0xd6, 0xe3, 0xff, 0xc1, 0xd3, 0xe4, 0xff, 0xc1, 0xd4, 0xe2, 0xff, 0xbc, 0xd2, 0xdd, 0xff, 0xc0, 0xd7, 0xdf, 0xff, 0xc4, 0xdb, 0xe4, 0xff, 0xc4, 0xdb, 0xe4, 0xff, 0xc1, 0xd7, 0xdf, 0xff, 0xb5, 0xc6, 0xcf, 0xff, 0x9d, 0xaa, 0xbd, 0xff, 0x8c, 0x93, 0xa6, 0xff, 0xb3, 0xbf, 0xb4, 0xff, 0xb5, 0xc0, 0xa9, 0xff, 0xb4, 0xb9, 0xa4, 0xff, 0xb4, 0xbf, 0xb1, 0xff, 0xb3, 0xc2, 0xbd, 0xff, 0xb2, 0xc3, 0xc5, 0xff, 0xb7, 0xc1, 0xbe, 0xff, 0x9f, 0xa6, 0x9c, 0xff, 0x9e, 0xa3, 0x95, 0xff, 0x98, 0x94, 0x81, 0xff, 0x83, 0x84, 0x75, 0xff, 0x8f, 0x95, 0x8a, 0xff, 0xb3, 0xb8, 0xad, 0xff, 0x9b, 0x96, 0x87, 0xff, 0x6b, 0x58, 0x49, 0xff, 0x9b, 0x9a, 0x8d, 0xff, 0xc7, 0xde, 0xd1, 0xff, 0xa3, 0xa5, 0x9e, 0xff, 0x26, 0x10, 0x10, 0xff, 0x37, 0x2b, 0x2b, 0xff, 0xa6, 0xb5, 0xb1, 0xff, 0x95, 0xa3, 0xa0, 0xff, 0x9a, 0xa6, 0xa2, 0xff, 0xa8, 0xba, 0xb7, 0xff, 0xa4, 0xb9, 0xb8, 0xff, 0x8f, 0x90, 0x89, 0xff, 0x8f, 0x93, 0x85, 0xff, 0x89, 0x8d, 0x7f, 0xff, 0x75, 0x6d, 0x5d, 0xff, 0xa9, 0xb1, 0x98, 0xff, 0x74, 0x6c, 0x55, 0xff, 0x79, 0x77, 0x69, 0xff, 0xa9, 0xad, 0x9c, 0xff, 0x58, 0x4a, 0x35, 0xff, 0x83, 0x77, 0x5e, 0xff, 0x7e, 0x6b, 0x56, 0xff, 0x63, 0x51, 0x3b, 0xff, 0x5b, 0x45, 0x2c, 0xff, 0x6d, 0x5e, 0x43, 0xff, 0xb1, 0xb1, 0x97, 0xff, 0xb1, 0xb6, 0x9a, 0xff, 0x69, 0x5a, 0x44, 0xff, 0x25, 0x0c, 0x07, 0xff, 0x7f, 0x73, 0x5f, 0xff, 0xbb, 0xbe, 0xa1, 0xff, 0x60, 0x4d, 0x36, 0xff, 0x66, 0x4f, 0x3b, 0xff, 0x8c, 0x8a, 0x6e, 0xff, 0x9b, 0x9e, 0x88, 0xff, 0xb5, 0xc6, 0xb4, 0xff, 0xb4, 0xc4, 0xb4, 0xff, 0x86, 0x81, 0x75, 0xff, 0x64, 0x53, 0x41, 0xff, 0xc8, 0xc1, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x74, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xe7, 0xdc, 0xff, 0xaa, 0x9d, 0x72, 0xff, 0xb2, 0xa1, 0x75, 0xff, 0xc0, 0xad, 0x83, 0xff, 0x9f, 0x8c, 0x60, 0xff, 0xbc, 0xb7, 0x8f, 0xff, 0xd7, 0xd4, 0xa9, 0xff, 0xab, 0x94, 0x5e, 0xff, 0xad, 0x96, 0x63, 0xff, 0xb2, 0xa8, 0x7a, 0xff, 0xcc, 0xca, 0xa3, 0xff, 0xc7, 0xbf, 0x94, 0xff, 0xad, 0xa0, 0x71, 0xff, 0xa0, 0x8b, 0x59, 0xff, 0x9b, 0x7f, 0x4d, 0xff, 0xb1, 0x9e, 0x6f, 0xff, 0xbb, 0xae, 0x7d, 0xff, 0xaf, 0xa1, 0x6f, 0xff, 0xa4, 0x94, 0x66, 0xff, 0xb1, 0xa6, 0x7b, 0xff, 0xb8, 0xb7, 0x96, 0xff, 0xab, 0xa4, 0x77, 0xff, 0xac, 0xb4, 0xa8, 0xff, 0xa7, 0xb5, 0xc0, 0xff, 0x8d, 0x92, 0x9e, 0xff, 0x4e, 0x48, 0x5d, 0xff, 0x57, 0x4e, 0x5e, 0xff, 0x87, 0x83, 0x82, 0xff, 0x95, 0x92, 0x8b, 0xff, 0x51, 0x48, 0x53, 0xff, 0x3b, 0x2e, 0x3c, 0xff, 0x43, 0x33, 0x3e, 0xff, 0x37, 0x22, 0x2d, 0xff, 0x34, 0x1f, 0x27, 0xff, 0x37, 0x28, 0x2e, 0xff, 0x54, 0x4c, 0x58, 0xff, 0x55, 0x57, 0x77, 0xff, 0x53, 0x62, 0x89, 0xff, 0x81, 0x8e, 0xb6, 0xff, 0x42, 0x3a, 0x52, 0xff, 0x35, 0x29, 0x37, 0xff, 0x58, 0x57, 0x65, 0xff, 0x99, 0xa9, 0xb8, 0xff, 0xb4, 0xcc, 0xe0, 0xff, 0xac, 0xc1, 0xd6, 0xff, 0xb2, 0xc9, 0xda, 0xff, 0xba, 0xd0, 0xe0, 0xff, 0xbf, 0xd8, 0xe6, 0xff, 0xbf, 0xdb, 0xe6, 0xff, 0xc1, 0xd9, 0xe5, 0xff, 0xbf, 0xd7, 0xe4, 0xff, 0xc0, 0xd9, 0xe8, 0xff, 0xc0, 0xd3, 0xe3, 0xff, 0xb2, 0xc6, 0xd7, 0xff, 0xb0, 0xc0, 0xd8, 0xff, 0xb8, 0xcc, 0xdf, 0xff, 0xbe, 0xd7, 0xe2, 0xff, 0xbc, 0xd4, 0xe1, 0xff, 0xbd, 0xd4, 0xe0, 0xff, 0xbc, 0xd1, 0xdd, 0xff, 0xbe, 0xd4, 0xdf, 0xff, 0xc1, 0xd9, 0xe1, 0xff, 0xc1, 0xd7, 0xe3, 0xff, 0xbe, 0xd5, 0xe2, 0xff, 0xbc, 0xd2, 0xdf, 0xff, 0xb8, 0xca, 0xd4, 0xff, 0x94, 0xa0, 0xb0, 0xff, 0x71, 0x74, 0x8a, 0xff, 0xae, 0xb2, 0xb1, 0xff, 0xcc, 0xd5, 0xc5, 0xff, 0xb8, 0xc3, 0xb3, 0xff, 0xbf, 0xcc, 0xbd, 0xff, 0xba, 0xcb, 0xc4, 0xff, 0xb8, 0xd1, 0xd3, 0xff, 0xae, 0xbb, 0xb7, 0xff, 0x8d, 0x89, 0x7c, 0xff, 0xa0, 0x9f, 0x8d, 0xff, 0x9c, 0x94, 0x7d, 0xff, 0x8f, 0x84, 0x71, 0xff, 0x85, 0x7d, 0x71, 0xff, 0x7b, 0x76, 0x6b, 0xff, 0x4d, 0x3f, 0x33, 0xff, 0x6c, 0x5f, 0x52, 0xff, 0xa5, 0xac, 0xa0, 0xff, 0xac, 0xb8, 0xb1, 0xff, 0x40, 0x34, 0x32, 0xff, 0x1a, 0x05, 0x03, 0xff, 0xa6, 0xb5, 0xac, 0xff, 0x95, 0x9d, 0x99, 0xff, 0x46, 0x3e, 0x40, 0xff, 0x95, 0xac, 0xa5, 0xff, 0x8d, 0x98, 0x92, 0xff, 0x89, 0x93, 0x8f, 0xff, 0x89, 0x91, 0x86, 0xff, 0x84, 0x7c, 0x6c, 0xff, 0x6f, 0x64, 0x59, 0xff, 0x40, 0x2d, 0x26, 0xff, 0x9c, 0x97, 0x78, 0xff, 0x78, 0x6e, 0x58, 0xff, 0xa3, 0xab, 0x9f, 0xff, 0x92, 0x93, 0x81, 0xff, 0x6e, 0x58, 0x40, 0xff, 0x8d, 0x82, 0x5f, 0xff, 0x72, 0x62, 0x45, 0xff, 0x59, 0x43, 0x32, 0xff, 0x35, 0x1b, 0x0e, 0xff, 0x8c, 0x87, 0x6d, 0xff, 0xcb, 0xd2, 0xb3, 0xff, 0x8e, 0x7f, 0x62, 0xff, 0x30, 0x19, 0x0c, 0xff, 0x56, 0x44, 0x32, 0xff, 0xc5, 0xc1, 0xa1, 0xff, 0x73, 0x67, 0x55, 0xff, 0x2e, 0x1a, 0x0f, 0xff, 0x75, 0x67, 0x4c, 0xff, 0x9a, 0x94, 0x7a, 0xff, 0xab, 0xac, 0x9c, 0xff, 0xb3, 0xb5, 0xa3, 0xff, 0x95, 0x93, 0x7d, 0xff, 0x74, 0x68, 0x4f, 0xff, 0xab, 0xa4, 0x8c, 0xff, 0xf3, 0xf3, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xc7, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfb, 0xff, 0xb7, 0xa5, 0x8b, 0xff, 0x9f, 0x84, 0x56, 0xff, 0x8c, 0x78, 0x4c, 0xff, 0xb1, 0xa3, 0x78, 0xff, 0xc0, 0xba, 0x8d, 0xff, 0xae, 0x9f, 0x6c, 0xff, 0xac, 0x94, 0x5f, 0xff, 0xb3, 0xa3, 0x73, 0xff, 0xb7, 0xb2, 0x88, 0xff, 0xca, 0xc9, 0xa6, 0xff, 0xc0, 0xbb, 0x8c, 0xff, 0xb4, 0x9d, 0x6a, 0xff, 0xa5, 0x92, 0x5d, 0xff, 0xa7, 0x96, 0x62, 0xff, 0xab, 0x9a, 0x68, 0xff, 0xb7, 0xa8, 0x76, 0xff, 0xa8, 0x95, 0x62, 0xff, 0xa1, 0x93, 0x67, 0xff, 0xb9, 0xb6, 0x95, 0xff, 0xba, 0xb8, 0x96, 0xff, 0xac, 0xa7, 0x7d, 0xff, 0xc0, 0xc8, 0xb9, 0xff, 0xaf, 0xc1, 0xd0, 0xff, 0x7f, 0x87, 0x97, 0xff, 0x5b, 0x52, 0x69, 0xff, 0x4a, 0x3f, 0x50, 0xff, 0x83, 0x7d, 0x7d, 0xff, 0x88, 0x87, 0x83, 0xff, 0x53, 0x4a, 0x57, 0xff, 0x38, 0x2b, 0x3b, 0xff, 0x28, 0x17, 0x23, 0xff, 0x16, 0x01, 0x0a, 0xff, 0x1d, 0x09, 0x11, 0xff, 0x3c, 0x2d, 0x35, 0xff, 0x5a, 0x56, 0x68, 0xff, 0x60, 0x70, 0x93, 0xff, 0x7e, 0x94, 0xc2, 0xff, 0x65, 0x68, 0x88, 0xff, 0x20, 0x14, 0x23, 0xff, 0x63, 0x61, 0x75, 0xff, 0x6d, 0x6c, 0x81, 0xff, 0x6e, 0x74, 0x83, 0xff, 0xb2, 0xc9, 0xdd, 0xff, 0xaa, 0xc0, 0xd4, 0xff, 0xb1, 0xc8, 0xd9, 0xff, 0xb9, 0xd1, 0xe1, 0xff, 0xc0, 0xd7, 0xe5, 0xff, 0xc1, 0xd9, 0xe4, 0xff, 0xba, 0xd2, 0xde, 0xff, 0xd0, 0xed, 0xf7, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xc4, 0xe5, 0xf3, 0xff, 0xbe, 0xd1, 0xe4, 0xff, 0xd5, 0xf4, 0xff, 0xff, 0xd9, 0xfd, 0xff, 0xff, 0xc9, 0xe3, 0xee, 0xff, 0xbc, 0xd6, 0xdf, 0xff, 0xbe, 0xd6, 0xdf, 0xff, 0xbb, 0xd1, 0xdc, 0xff, 0xbd, 0xd4, 0xdf, 0xff, 0xbd, 0xd2, 0xdd, 0xff, 0xb8, 0xcc, 0xd8, 0xff, 0xbc, 0xcf, 0xdc, 0xff, 0xbb, 0xcf, 0xde, 0xff, 0xb8, 0xca, 0xd2, 0xff, 0xa5, 0xb1, 0xb6, 0xff, 0x73, 0x74, 0x80, 0xff, 0x89, 0x88, 0x86, 0xff, 0xc1, 0xca, 0xbd, 0xff, 0xb9, 0xc9, 0xbe, 0xff, 0xb8, 0xc2, 0xb0, 0xff, 0xbc, 0xc8, 0xbc, 0xff, 0xce, 0xe8, 0xeb, 0xff, 0xa0, 0xaa, 0xa8, 0xff, 0x8f, 0x86, 0x78, 0xff, 0xad, 0xa8, 0x99, 0xff, 0x74, 0x6b, 0x5b, 0xff, 0x73, 0x65, 0x59, 0xff, 0x8d, 0x87, 0x7e, 0xff, 0x89, 0x8d, 0x86, 0xff, 0xaa, 0xad, 0xa4, 0xff, 0xb7, 0xbf, 0xb4, 0xff, 0xa3, 0xac, 0xa6, 0xff, 0x6f, 0x68, 0x68, 0xff, 0x00, 0x00, 0x00, 0xff, 0x65, 0x52, 0x4e, 0xff, 0xa5, 0xad, 0xa4, 0xff, 0x6f, 0x78, 0x73, 0xff, 0x75, 0x78, 0x78, 0xff, 0xad, 0xc3, 0xbd, 0xff, 0x61, 0x60, 0x5b, 0xff, 0x70, 0x6b, 0x64, 0xff, 0x7c, 0x7f, 0x74, 0xff, 0x50, 0x3b, 0x30, 0xff, 0x44, 0x32, 0x2a, 0xff, 0x30, 0x1c, 0x16, 0xff, 0x60, 0x4e, 0x37, 0xff, 0x84, 0x7d, 0x68, 0xff, 0xc6, 0xd4, 0xc4, 0xff, 0x68, 0x60, 0x52, 0xff, 0x54, 0x39, 0x24, 0xff, 0x8f, 0x80, 0x5b, 0xff, 0x7b, 0x6a, 0x4a, 0xff, 0x44, 0x2c, 0x1d, 0xff, 0x4b, 0x39, 0x2f, 0xff, 0xbe, 0xc1, 0xa8, 0xff, 0x9d, 0x9a, 0x78, 0xff, 0x58, 0x42, 0x2d, 0xff, 0x43, 0x27, 0x13, 0xff, 0xa1, 0x94, 0x77, 0xff, 0x92, 0x8e, 0x70, 0xff, 0x2a, 0x11, 0x07, 0xff, 0x5b, 0x48, 0x3d, 0xff, 0x7e, 0x74, 0x54, 0xff, 0x61, 0x54, 0x40, 0xff, 0x9b, 0x9a, 0x87, 0xff, 0x9e, 0x97, 0x80, 0xff, 0x5c, 0x4a, 0x30, 0xff, 0x8c, 0x7e, 0x61, 0xff, 0xda, 0xd9, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x74, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xee, 0xe6, 0xff, 0xc1, 0xb2, 0x8b, 0xff, 0xc2, 0xb3, 0x83, 0xff, 0xb6, 0xad, 0x7f, 0xff, 0x8c, 0x74, 0x41, 0xff, 0xb7, 0xa2, 0x77, 0xff, 0xca, 0xc5, 0x96, 0xff, 0xbc, 0xb6, 0x84, 0xff, 0xb4, 0xa3, 0x74, 0xff, 0xc0, 0xba, 0x8e, 0xff, 0xa5, 0x98, 0x62, 0xff, 0xa2, 0x80, 0x4d, 0xff, 0xaa, 0x95, 0x61, 0xff, 0xae, 0x99, 0x66, 0xff, 0xae, 0x9c, 0x67, 0xff, 0xb1, 0xa3, 0x70, 0xff, 0xb1, 0xa5, 0x74, 0xff, 0xbc, 0xba, 0x9a, 0xff, 0xba, 0xb6, 0x91, 0xff, 0xba, 0xbb, 0x9e, 0xff, 0xbe, 0xbe, 0xa3, 0xff, 0xbb, 0xbe, 0xa9, 0xff, 0xa6, 0xb8, 0xc5, 0xff, 0x81, 0x8a, 0x9d, 0xff, 0x46, 0x3b, 0x52, 0xff, 0x40, 0x35, 0x4d, 0xff, 0x70, 0x6e, 0x75, 0xff, 0x7e, 0x80, 0x82, 0xff, 0x59, 0x4f, 0x5d, 0xff, 0x2a, 0x1a, 0x27, 0xff, 0x57, 0x4d, 0x54, 0xff, 0x83, 0x7e, 0x81, 0xff, 0x69, 0x66, 0x6a, 0xff, 0x40, 0x35, 0x42, 0xff, 0x6e, 0x74, 0x88, 0xff, 0x77, 0x8c, 0xb0, 0xff, 0x6f, 0x7c, 0xb1, 0xff, 0x3f, 0x35, 0x4c, 0xff, 0x3a, 0x2e, 0x3a, 0xff, 0x7e, 0x87, 0xa8, 0xff, 0x3f, 0x3c, 0x5a, 0xff, 0x24, 0x1a, 0x2b, 0xff, 0x9b, 0xac, 0xc1, 0xff, 0xb1, 0xc9, 0xdf, 0xff, 0xab, 0xc1, 0xd3, 0xff, 0xb5, 0xcc, 0xda, 0xff, 0xb9, 0xcd, 0xdb, 0xff, 0xaf, 0xc2, 0xd2, 0xff, 0xd6, 0xf0, 0xf9, 0xff, 0xaf, 0xbf, 0xc3, 0xff, 0x64, 0x65, 0x67, 0xff, 0xba, 0xc7, 0xcb, 0xff, 0xdb, 0xf3, 0xf9, 0xff, 0x9b, 0x9e, 0x9c, 0xff, 0x9a, 0x9e, 0x9d, 0xff, 0xbe, 0xd5, 0xdd, 0xff, 0xce, 0xe7, 0xf0, 0xff, 0xc1, 0xdb, 0xe3, 0xff, 0xbd, 0xd5, 0xdb, 0xff, 0xc4, 0xd9, 0xe1, 0xff, 0xbf, 0xd1, 0xdf, 0xff, 0xb4, 0xc6, 0xd1, 0xff, 0xb0, 0xc2, 0xcb, 0xff, 0xa7, 0xb5, 0xc1, 0xff, 0xa3, 0xaf, 0xb1, 0xff, 0xb2, 0xba, 0xaf, 0xff, 0xaa, 0xac, 0xa6, 0xff, 0xa3, 0xa8, 0x98, 0xff, 0xb8, 0xc6, 0xb6, 0xff, 0xc9, 0xdb, 0xd3, 0xff, 0xaf, 0xb1, 0x9c, 0xff, 0x91, 0x90, 0x80, 0xff, 0xb0, 0xbe, 0xbc, 0xff, 0xa2, 0xa9, 0x9b, 0xff, 0xaa, 0xa9, 0x90, 0xff, 0x8c, 0x87, 0x77, 0xff, 0x6e, 0x69, 0x5d, 0xff, 0x99, 0x9f, 0x93, 0xff, 0xa2, 0xa6, 0x9a, 0xff, 0xbd, 0xc8, 0xbc, 0xff, 0xa1, 0xa6, 0x9c, 0xff, 0x6b, 0x6a, 0x63, 0xff, 0x88, 0x88, 0x85, 0xff, 0x59, 0x51, 0x52, 0xff, 0x6b, 0x69, 0x68, 0xff, 0x83, 0x86, 0x80, 0xff, 0x87, 0x8c, 0x84, 0xff, 0x9d, 0xa7, 0xa1, 0xff, 0x8c, 0x91, 0x8d, 0xff, 0x81, 0x89, 0x84, 0xff, 0x6e, 0x68, 0x64, 0xff, 0x43, 0x31, 0x2a, 0xff, 0x49, 0x35, 0x2f, 0xff, 0x1e, 0x02, 0x04, 0xff, 0x51, 0x49, 0x44, 0xff, 0x81, 0x7b, 0x6c, 0xff, 0x27, 0x0d, 0x09, 0xff, 0x86, 0x84, 0x71, 0xff, 0xc4, 0xcd, 0xb9, 0xff, 0x4e, 0x3f, 0x34, 0xff, 0x39, 0x23, 0x14, 0xff, 0x64, 0x4e, 0x37, 0xff, 0x5a, 0x40, 0x2e, 0xff, 0x36, 0x1d, 0x11, 0xff, 0xa0, 0x9e, 0x8e, 0xff, 0xb4, 0xb5, 0x9b, 0xff, 0x4a, 0x35, 0x1c, 0xff, 0x50, 0x3b, 0x2b, 0xff, 0x8f, 0x80, 0x61, 0xff, 0x94, 0x84, 0x64, 0xff, 0x4f, 0x3f, 0x2e, 0xff, 0x71, 0x60, 0x4e, 0xff, 0x85, 0x74, 0x56, 0xff, 0x64, 0x53, 0x3a, 0xff, 0x65, 0x59, 0x45, 0xff, 0x98, 0x92, 0x75, 0xff, 0x71, 0x65, 0x47, 0xff, 0x79, 0x6d, 0x53, 0xff, 0xa3, 0x99, 0x8c, 0xff, 0xf5, 0xf4, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xc7, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xdf, 0xc9, 0xff, 0xac, 0x9c, 0x6d, 0xff, 0x9c, 0x88, 0x5a, 0xff, 0xb4, 0xa1, 0x71, 0xff, 0xc3, 0xb1, 0x81, 0xff, 0xb4, 0xab, 0x7b, 0xff, 0xaf, 0xa3, 0x6f, 0xff, 0xbb, 0xa5, 0x6e, 0xff, 0xbd, 0xad, 0x79, 0xff, 0xad, 0x9c, 0x6c, 0xff, 0x9c, 0x87, 0x54, 0xff, 0xac, 0x92, 0x60, 0xff, 0xaa, 0x92, 0x61, 0xff, 0xaa, 0x95, 0x60, 0xff, 0x9e, 0x8e, 0x5a, 0xff, 0xae, 0xa6, 0x79, 0xff, 0xc2, 0xc2, 0x9f, 0xff, 0xb4, 0xad, 0x80, 0xff, 0xb1, 0xb2, 0x91, 0xff, 0xb7, 0xba, 0xa3, 0xff, 0xb1, 0xb1, 0x9f, 0xff, 0xa2, 0xb2, 0xbd, 0xff, 0x74, 0x80, 0x9c, 0xff, 0x4f, 0x4d, 0x6a, 0xff, 0x3e, 0x37, 0x52, 0xff, 0x5f, 0x5c, 0x63, 0xff, 0x87, 0x83, 0x81, 0xff, 0x38, 0x30, 0x3a, 0xff, 0x8f, 0x94, 0x9a, 0xff, 0xe9, 0xfb, 0xfb, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xb6, 0xcd, 0xd2, 0xff, 0x9e, 0xb0, 0xbb, 0xff, 0x6e, 0x78, 0x97, 0xff, 0x5a, 0x67, 0x93, 0xff, 0x2d, 0x1f, 0x33, 0xff, 0x42, 0x38, 0x4e, 0xff, 0x6f, 0x7a, 0x98, 0xff, 0x71, 0x7c, 0x8d, 0xff, 0x7e, 0x83, 0x8d, 0xff, 0x8b, 0x9b, 0xac, 0xff, 0xa5, 0xbc, 0xd3, 0xff, 0xa6, 0xba, 0xcc, 0xff, 0xa9, 0xbc, 0xce, 0xff, 0xaf, 0xc4, 0xd0, 0xff, 0xc0, 0xd9, 0xe7, 0xff, 0xca, 0xe2, 0xf1, 0xff, 0x3f, 0x30, 0x30, 0xff, 0x0c, 0x00, 0x00, 0xff, 0x43, 0x2b, 0x2a, 0xff, 0x58, 0x4b, 0x48, 0xff, 0x1c, 0x08, 0x05, 0xff, 0x1c, 0x07, 0x06, 0xff, 0x6c, 0x6c, 0x6b, 0xff, 0xbe, 0xcc, 0xcb, 0xff, 0xca, 0xe5, 0xe7, 0xff, 0xd2, 0xeb, 0xf2, 0xff, 0xba, 0xcc, 0xd8, 0xff, 0xa1, 0xad, 0xc0, 0xff, 0xa7, 0xb3, 0xbe, 0xff, 0xa3, 0xb1, 0xb3, 0xff, 0xa8, 0xb2, 0xb4, 0xff, 0xb3, 0xbf, 0xb7, 0xff, 0xb9, 0xca, 0xb7, 0xff, 0xc8, 0xd0, 0xbb, 0xff, 0xbe, 0xc6, 0xb3, 0xff, 0xb8, 0xcc, 0xc3, 0xff, 0xb7, 0xbb, 0xac, 0xff, 0xa2, 0x98, 0x7b, 0xff, 0x87, 0x83, 0x72, 0xff, 0x9b, 0x9d, 0x92, 0xff, 0xa4, 0xa2, 0x8a, 0xff, 0xa0, 0x9c, 0x83, 0xff, 0x82, 0x7f, 0x6f, 0xff, 0xa9, 0xa9, 0x9e, 0xff, 0xbb, 0xc4, 0xb3, 0xff, 0xae, 0xb0, 0x9e, 0xff, 0x7b, 0x73, 0x67, 0xff, 0x0d, 0x00, 0x00, 0xff, 0x64, 0x5c, 0x5b, 0xff, 0x80, 0x84, 0x81, 0xff, 0x95, 0x9f, 0x9c, 0xff, 0xaa, 0xb8, 0xb3, 0xff, 0x96, 0xa5, 0x9f, 0xff, 0xa6, 0xb2, 0xb1, 0xff, 0xa1, 0xad, 0xab, 0xff, 0x42, 0x3c, 0x39, 0xff, 0x79, 0x78, 0x6f, 0xff, 0x98, 0x99, 0x89, 0xff, 0x46, 0x2f, 0x26, 0xff, 0x3a, 0x1f, 0x1e, 0xff, 0x0b, 0x00, 0x00, 0xff, 0x7a, 0x83, 0x81, 0xff, 0xa0, 0xa1, 0x94, 0xff, 0x17, 0x00, 0x00, 0xff, 0xa4, 0xa3, 0x8d, 0xff, 0x91, 0x8f, 0x76, 0xff, 0x2a, 0x16, 0x0c, 0xff, 0x41, 0x28, 0x23, 0xff, 0x64, 0x4f, 0x3e, 0xff, 0x43, 0x2a, 0x1d, 0xff, 0x65, 0x5b, 0x4a, 0xff, 0xd7, 0xe0, 0xc4, 0xff, 0x79, 0x6e, 0x53, 0xff, 0x42, 0x27, 0x16, 0xff, 0x6e, 0x59, 0x45, 0xff, 0x82, 0x73, 0x52, 0xff, 0x54, 0x3f, 0x25, 0xff, 0x6b, 0x58, 0x3d, 0xff, 0x8b, 0x7a, 0x5c, 0xff, 0x74, 0x5e, 0x40, 0xff, 0x89, 0x7a, 0x5b, 0xff, 0xad, 0xa6, 0x86, 0xff, 0x97, 0x8f, 0x6c, 0xff, 0x96, 0x8b, 0x6a, 0xff, 0x86, 0x79, 0x66, 0xff, 0xcd, 0xc9, 0xc7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x74, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf3, 0xee, 0xff, 0xab, 0x9a, 0x78, 0xff, 0xa1, 0x8a, 0x5b, 0xff, 0x94, 0x82, 0x52, 0xff, 0xa1, 0x92, 0x5f, 0xff, 0xae, 0x9b, 0x68, 0xff, 0xc1, 0xaf, 0x7d, 0xff, 0xab, 0x97, 0x62, 0xff, 0x9e, 0x89, 0x54, 0xff, 0xbc, 0xae, 0x7f, 0xff, 0xa6, 0x95, 0x64, 0xff, 0xa4, 0x8e, 0x5b, 0xff, 0xa8, 0x95, 0x62, 0xff, 0xa6, 0x95, 0x62, 0xff, 0xad, 0xa0, 0x6f, 0xff, 0xad, 0xa4, 0x75, 0xff, 0xab, 0xa6, 0x78, 0xff, 0xaa, 0xa1, 0x77, 0xff, 0xac, 0xa1, 0x6f, 0xff, 0xb6, 0xbb, 0x9d, 0xff, 0xa6, 0xa7, 0x9b, 0xff, 0x9c, 0xae, 0xaf, 0xff, 0x81, 0x8f, 0xa9, 0xff, 0x6e, 0x76, 0x9a, 0xff, 0x49, 0x52, 0x74, 0xff, 0x7c, 0x79, 0x85, 0xff, 0x76, 0x71, 0x6f, 0xff, 0x91, 0x9a, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xf8, 0xfa, 0xff, 0xcc, 0xea, 0xec, 0xff, 0xd0, 0xec, 0xf1, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xe2, 0xfe, 0xff, 0xff, 0xb0, 0xc3, 0xd1, 0xff, 0x6e, 0x75, 0x91, 0xff, 0x26, 0x1d, 0x2f, 0xff, 0x84, 0x91, 0x9b, 0xff, 0xd3, 0xea, 0xed, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xee, 0xff, 0xff, 0xff, 0xcc, 0xe7, 0xec, 0xff, 0xb1, 0xc9, 0xd5, 0xff, 0x9f, 0xb2, 0xc5, 0xff, 0x94, 0xa4, 0xc4, 0xff, 0x7c, 0x86, 0xac, 0xff, 0xb7, 0xcb, 0xe2, 0xff, 0x72, 0x77, 0x81, 0xff, 0x18, 0x00, 0x00, 0xff, 0x35, 0x20, 0x1b, 0xff, 0x28, 0x1c, 0x17, 0xff, 0x49, 0x3c, 0x3a, 0xff, 0x72, 0x6e, 0x6e, 0xff, 0x77, 0x73, 0x6e, 0xff, 0x5d, 0x57, 0x4f, 0xff, 0x44, 0x3a, 0x30, 0xff, 0x5a, 0x4b, 0x44, 0xff, 0x7b, 0x73, 0x83, 0xff, 0x7e, 0x83, 0x95, 0xff, 0x9a, 0xa1, 0xa2, 0xff, 0xad, 0xb2, 0xb7, 0xff, 0xbc, 0xcc, 0xc7, 0xff, 0xc2, 0xd7, 0xce, 0xff, 0xbe, 0xd1, 0xc4, 0xff, 0xb4, 0xbd, 0xaa, 0xff, 0x99, 0x96, 0x80, 0xff, 0xb1, 0xb4, 0xa3, 0xff, 0xc9, 0xd7, 0xc7, 0xff, 0x8e, 0x89, 0x72, 0xff, 0x89, 0x7e, 0x65, 0xff, 0x91, 0x8b, 0x79, 0xff, 0x85, 0x7d, 0x69, 0xff, 0x7e, 0x73, 0x59, 0xff, 0x8a, 0x83, 0x6e, 0xff, 0x95, 0x97, 0x88, 0xff, 0x96, 0x91, 0x87, 0xff, 0x97, 0x9a, 0x8a, 0xff, 0x8e, 0x95, 0x85, 0xff, 0x21, 0x0a, 0x05, 0xff, 0x38, 0x19, 0x1b, 0xff, 0x92, 0x94, 0x8c, 0xff, 0xb3, 0xc3, 0xb9, 0xff, 0xa8, 0xba, 0xb5, 0xff, 0x9b, 0xa8, 0xa6, 0xff, 0xac, 0xba, 0xb8, 0xff, 0xa3, 0xbb, 0xbc, 0xff, 0xbd, 0xdb, 0xd7, 0xff, 0x56, 0x50, 0x4d, 0xff, 0x4b, 0x3d, 0x32, 0xff, 0x9d, 0x98, 0x7f, 0xff, 0x5d, 0x48, 0x38, 0xff, 0x41, 0x2d, 0x29, 0xff, 0x11, 0x05, 0x04, 0xff, 0xb1, 0xb8, 0xa4, 0xff, 0x6b, 0x61, 0x55, 0xff, 0x3b, 0x29, 0x1d, 0xff, 0x9c, 0x92, 0x76, 0xff, 0x4f, 0x3e, 0x27, 0xff, 0x32, 0x1d, 0x17, 0xff, 0x3e, 0x27, 0x25, 0xff, 0x4d, 0x37, 0x2a, 0xff, 0x46, 0x31, 0x1e, 0xff, 0xa1, 0x9a, 0x7f, 0xff, 0xb7, 0xb5, 0x94, 0xff, 0x5a, 0x46, 0x30, 0xff, 0x40, 0x26, 0x1a, 0xff, 0x56, 0x3e, 0x2a, 0xff, 0x54, 0x3a, 0x25, 0xff, 0x51, 0x39, 0x27, 0xff, 0x6b, 0x57, 0x41, 0xff, 0x46, 0x2c, 0x1c, 0xff, 0x62, 0x48, 0x32, 0xff, 0x94, 0x84, 0x60, 0xff, 0x79, 0x6e, 0x4d, 0xff, 0x6d, 0x5c, 0x42, 0xff, 0x5e, 0x49, 0x34, 0xff, 0x97, 0x8b, 0x82, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xb4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xde, 0xd2, 0xff, 0x9c, 0x88, 0x5d, 0xff, 0xa3, 0x8f, 0x5e, 0xff, 0xb7, 0xa4, 0x71, 0xff, 0xa7, 0x94, 0x60, 0xff, 0xaa, 0x98, 0x64, 0xff, 0xb0, 0x9a, 0x66, 0xff, 0x9b, 0x83, 0x50, 0xff, 0xb2, 0xa2, 0x71, 0xff, 0xb8, 0xab, 0x78, 0xff, 0x9d, 0x8e, 0x58, 0xff, 0xa3, 0x92, 0x5e, 0xff, 0xa8, 0x9c, 0x6d, 0xff, 0xba, 0xb2, 0x86, 0xff, 0xaf, 0xa9, 0x7d, 0xff, 0xb3, 0xad, 0x84, 0xff, 0x94, 0x80, 0x56, 0xff, 0x9c, 0x8b, 0x62, 0xff, 0xaa, 0xa5, 0x88, 0xff, 0x90, 0x90, 0x80, 0xff, 0x91, 0x95, 0x91, 0xff, 0x8b, 0x95, 0xa7, 0xff, 0x76, 0x84, 0xa8, 0xff, 0x6a, 0x78, 0xa5, 0xff, 0x41, 0x44, 0x63, 0xff, 0x77, 0x78, 0x7e, 0xff, 0xe7, 0xfc, 0xfc, 0xff, 0xd5, 0xf9, 0xf8, 0xff, 0xcf, 0xeb, 0xec, 0xff, 0xce, 0xea, 0xed, 0xff, 0xcb, 0xe9, 0xee, 0xff, 0xca, 0xe6, 0xeb, 0xff, 0xcd, 0xed, 0xf1, 0xff, 0xd7, 0xf7, 0xfe, 0xff, 0x70, 0x6f, 0x7c, 0xff, 0x88, 0x8f, 0x97, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xda, 0xfb, 0xf7, 0xff, 0xc8, 0xeb, 0xe9, 0xff, 0xc8, 0xea, 0xe9, 0xff, 0xcf, 0xee, 0xf1, 0xff, 0xd3, 0xf0, 0xf3, 0xff, 0xc5, 0xdd, 0xe8, 0xff, 0x9c, 0xae, 0xc9, 0xff, 0x67, 0x76, 0xa3, 0xff, 0x3c, 0x34, 0x52, 0xff, 0x13, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x30, 0x24, 0x1d, 0xff, 0x70, 0x6a, 0x5d, 0xff, 0x65, 0x62, 0x5f, 0xff, 0x40, 0x3d, 0x3b, 0xff, 0x51, 0x48, 0x40, 0xff, 0x3c, 0x29, 0x22, 0xff, 0x30, 0x15, 0x12, 0xff, 0x24, 0x08, 0x05, 0xff, 0x03, 0x00, 0x00, 0xff, 0x54, 0x41, 0x37, 0xff, 0xc6, 0xce, 0xc0, 0xff, 0xc7, 0xe5, 0xe1, 0xff, 0xd3, 0xf0, 0xea, 0xff, 0xc6, 0xdd, 0xd5, 0xff, 0xa9, 0xb2, 0xa2, 0xff, 0x97, 0x8c, 0x73, 0xff, 0x7e, 0x70, 0x54, 0xff, 0x8b, 0x87, 0x6e, 0xff, 0x99, 0x94, 0x81, 0xff, 0x6a, 0x5e, 0x52, 0xff, 0x74, 0x6a, 0x61, 0xff, 0x69, 0x5b, 0x54, 0xff, 0x6b, 0x53, 0x40, 0xff, 0x7b, 0x66, 0x4b, 0xff, 0x6d, 0x63, 0x51, 0xff, 0x94, 0x93, 0x85, 0xff, 0x7f, 0x7f, 0x73, 0xff, 0xa1, 0xa9, 0x9c, 0xff, 0x93, 0x95, 0x88, 0xff, 0x48, 0x43, 0x3b, 0xff, 0x5c, 0x4a, 0x47, 0xff, 0x85, 0x80, 0x77, 0xff, 0x89, 0x96, 0x8e, 0xff, 0xaa, 0xc2, 0xc2, 0xff, 0xa1, 0xbc, 0xc1, 0xff, 0xa0, 0xb9, 0xb9, 0xff, 0x87, 0x97, 0x97, 0xff, 0x95, 0x9c, 0x97, 0xff, 0x7a, 0x72, 0x69, 0xff, 0x28, 0x13, 0x0b, 0xff, 0x4e, 0x37, 0x2a, 0xff, 0x59, 0x47, 0x38, 0xff, 0x45, 0x36, 0x31, 0xff, 0x32, 0x21, 0x20, 0xff, 0x86, 0x7c, 0x61, 0xff, 0x3b, 0x25, 0x1c, 0xff, 0x74, 0x69, 0x5d, 0xff, 0x5c, 0x44, 0x2e, 0xff, 0x4d, 0x2f, 0x23, 0xff, 0x39, 0x23, 0x21, 0xff, 0x30, 0x1e, 0x1c, 0xff, 0x37, 0x1e, 0x16, 0xff, 0x6a, 0x57, 0x3e, 0xff, 0xa4, 0x98, 0x78, 0xff, 0x6e, 0x5a, 0x3f, 0xff, 0x52, 0x39, 0x29, 0xff, 0x4a, 0x32, 0x27, 0xff, 0x5a, 0x43, 0x2d, 0xff, 0x55, 0x3c, 0x2e, 0xff, 0x58, 0x42, 0x32, 0xff, 0x4e, 0x39, 0x2a, 0xff, 0x46, 0x2d, 0x21, 0xff, 0x58, 0x40, 0x2d, 0xff, 0x51, 0x3b, 0x24, 0xff, 0x34, 0x1d, 0x14, 0xff, 0x34, 0x1e, 0x18, 0xff, 0x5e, 0x4d, 0x4b, 0xff, 0xe9, 0xe6, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x63, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xca, 0xc1, 0xa7, 0xff, 0xae, 0x9a, 0x67, 0xff, 0xa3, 0x8e, 0x5a, 0xff, 0x9f, 0x8a, 0x57, 0xff, 0x9f, 0x8a, 0x56, 0xff, 0xaf, 0x9b, 0x67, 0xff, 0xa9, 0x94, 0x62, 0xff, 0x9c, 0x89, 0x55, 0xff, 0xb5, 0xa7, 0x74, 0xff, 0xa9, 0x9d, 0x69, 0xff, 0xa0, 0x91, 0x5f, 0xff, 0xb1, 0xa8, 0x7f, 0xff, 0xb1, 0xab, 0x82, 0xff, 0xa6, 0x99, 0x69, 0xff, 0xa7, 0x9c, 0x73, 0xff, 0xbb, 0xbc, 0xa6, 0xff, 0xcf, 0xe2, 0xdf, 0xff, 0xd5, 0xe5, 0xe6, 0xff, 0xc6, 0xd7, 0xd6, 0xff, 0xbb, 0xc5, 0xc3, 0xff, 0x92, 0x9f, 0xab, 0xff, 0x79, 0x8a, 0xa9, 0xff, 0x72, 0x84, 0xb1, 0xff, 0x55, 0x63, 0x82, 0xff, 0xcb, 0xdb, 0xdc, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xce, 0xeb, 0xec, 0xff, 0xd2, 0xec, 0xf0, 0xff, 0xcf, 0xea, 0xee, 0xff, 0xcb, 0xe8, 0xed, 0xff, 0xcd, 0xe6, 0xeb, 0xff, 0xc9, 0xe6, 0xee, 0xff, 0xc2, 0xda, 0xeb, 0xff, 0x77, 0x7b, 0x87, 0xff, 0xc4, 0xdf, 0xdf, 0xff, 0xdc, 0xfc, 0xfc, 0xff, 0xcc, 0xea, 0xeb, 0xff, 0xcc, 0xe8, 0xed, 0xff, 0xca, 0xe5, 0xec, 0xff, 0xc7, 0xe3, 0xeb, 0xff, 0xc5, 0xe3, 0xe8, 0xff, 0xd4, 0xf2, 0xf5, 0xff, 0xba, 0xd3, 0xe0, 0xff, 0x9b, 0xad, 0xc7, 0xff, 0x79, 0x79, 0x89, 0xff, 0x7d, 0x7a, 0x78, 0xff, 0x9a, 0xa8, 0xaa, 0xff, 0x9f, 0xa7, 0xa8, 0xff, 0x7a, 0x6f, 0x64, 0xff, 0x46, 0x33, 0x24, 0xff, 0x44, 0x30, 0x23, 0xff, 0x3c, 0x26, 0x21, 0xff, 0x45, 0x30, 0x29, 0xff, 0x46, 0x32, 0x2b, 0xff, 0x40, 0x2d, 0x28, 0xff, 0x58, 0x4c, 0x40, 0xff, 0x9e, 0x9e, 0x8d, 0xff, 0xca, 0xe1, 0xd5, 0xff, 0xbb, 0xd2, 0xc8, 0xff, 0xb0, 0xb9, 0xae, 0xff, 0xb8, 0xc9, 0xc4, 0xff, 0xbf, 0xd2, 0xca, 0xff, 0xa4, 0xa3, 0x8f, 0xff, 0x97, 0x8f, 0x75, 0xff, 0x84, 0x74, 0x62, 0xff, 0x50, 0x3b, 0x35, 0xff, 0x36, 0x21, 0x21, 0xff, 0x4f, 0x3f, 0x3c, 0xff, 0x4f, 0x3b, 0x36, 0xff, 0x71, 0x56, 0x47, 0xff, 0x6d, 0x59, 0x46, 0xff, 0x70, 0x68, 0x5c, 0xff, 0xa6, 0xa8, 0x9c, 0xff, 0x94, 0x9c, 0x8f, 0xff, 0x65, 0x60, 0x56, 0xff, 0xac, 0xaf, 0xa4, 0xff, 0x8b, 0x95, 0x88, 0xff, 0x5d, 0x54, 0x4c, 0xff, 0x63, 0x58, 0x52, 0xff, 0x40, 0x3a, 0x37, 0xff, 0x80, 0x86, 0x87, 0xff, 0x58, 0x5f, 0x64, 0xff, 0x67, 0x6d, 0x6b, 0xff, 0x4c, 0x43, 0x42, 0xff, 0x51, 0x3e, 0x37, 0xff, 0x4c, 0x3b, 0x2f, 0xff, 0x1e, 0x06, 0x05, 0xff, 0x25, 0x0d, 0x0b, 0xff, 0x7a, 0x6f, 0x62, 0xff, 0x4c, 0x43, 0x3d, 0xff, 0x38, 0x22, 0x20, 0xff, 0x30, 0x17, 0x0e, 0xff, 0x49, 0x3c, 0x33, 0xff, 0x87, 0x7f, 0x6b, 0xff, 0x43, 0x28, 0x19, 0xff, 0x40, 0x28, 0x21, 0xff, 0x34, 0x1f, 0x1c, 0xff, 0x2c, 0x19, 0x16, 0xff, 0x3b, 0x24, 0x1c, 0xff, 0x59, 0x44, 0x37, 0xff, 0x54, 0x43, 0x34, 0xff, 0x40, 0x2a, 0x1c, 0xff, 0x45, 0x2b, 0x1f, 0xff, 0x4a, 0x34, 0x23, 0xff, 0x4f, 0x38, 0x2d, 0xff, 0x3d, 0x29, 0x21, 0xff, 0x39, 0x28, 0x1e, 0xff, 0x45, 0x31, 0x25, 0xff, 0x46, 0x31, 0x24, 0xff, 0x31, 0x1c, 0x17, 0xff, 0x32, 0x1e, 0x1a, 0xff, 0x28, 0x14, 0x15, 0xff, 0x2e, 0x1d, 0x1f, 0xff, 0xbb, 0xb6, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xf4, 0xef, 0xff, 0xb3, 0xa3, 0x81, 0xff, 0xa1, 0x8b, 0x58, 0xff, 0xa7, 0x92, 0x5e, 0xff, 0x9c, 0x86, 0x52, 0xff, 0xa0, 0x8b, 0x57, 0xff, 0xb1, 0x9e, 0x6b, 0xff, 0x9d, 0x8a, 0x59, 0xff, 0x9d, 0x8c, 0x5b, 0xff, 0xb4, 0xa4, 0x70, 0xff, 0xa9, 0xa1, 0x73, 0xff, 0xb2, 0xac, 0x85, 0xff, 0xa2, 0x91, 0x60, 0xff, 0x86, 0x75, 0x47, 0xff, 0xc8, 0xce, 0xc0, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xdf, 0xfc, 0xff, 0xff, 0xda, 0xf4, 0xf8, 0xff, 0xe0, 0xf8, 0xff, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xb9, 0xcb, 0xd3, 0xff, 0x7e, 0x8a, 0xa4, 0xff, 0x6d, 0x83, 0x9e, 0xff, 0xc4, 0xda, 0xe7, 0xff, 0xee, 0xff, 0xff, 0xff, 0xcd, 0xec, 0xe8, 0xff, 0xd5, 0xeb, 0xec, 0xff, 0xd1, 0xe9, 0xed, 0xff, 0xce, 0xe7, 0xee, 0xff, 0xcc, 0xe6, 0xec, 0xff, 0xcb, 0xe3, 0xec, 0xff, 0xcc, 0xe5, 0xf2, 0xff, 0xa3, 0xb4, 0xd0, 0xff, 0xad, 0xc2, 0xd3, 0xff, 0xdd, 0xff, 0xfc, 0xff, 0xcb, 0xea, 0xec, 0xff, 0xcb, 0xea, 0xeb, 0xff, 0xca, 0xe7, 0xed, 0xff, 0xc7, 0xe2, 0xec, 0xff, 0xc4, 0xdd, 0xeb, 0xff, 0xc3, 0xdf, 0xe8, 0xff, 0xc4, 0xe2, 0xe7, 0xff, 0xb9, 0xcd, 0xe2, 0xff, 0xaa, 0xbb, 0xcd, 0xff, 0xd5, 0xf4, 0xf7, 0xff, 0xe8, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xdd, 0xfd, 0xff, 0xff, 0xd2, 0xe8, 0xed, 0xff, 0x93, 0x99, 0x97, 0xff, 0x5d, 0x4b, 0x3b, 0xff, 0x67, 0x51, 0x3c, 0xff, 0x5c, 0x52, 0x4a, 0xff, 0x6f, 0x6e, 0x6a, 0xff, 0x9d, 0xa3, 0x97, 0xff, 0xc9, 0xd8, 0xca, 0xff, 0xcc, 0xe1, 0xd5, 0xff, 0xba, 0xcb, 0xbb, 0xff, 0xa4, 0xa3, 0x8f, 0xff, 0x99, 0x91, 0x7b, 0xff, 0xae, 0xb7, 0xa5, 0xff, 0xb1, 0xba, 0xac, 0xff, 0x7c, 0x76, 0x68, 0xff, 0x6a, 0x61, 0x53, 0xff, 0x51, 0x3e, 0x34, 0xff, 0x36, 0x20, 0x1e, 0xff, 0x34, 0x1f, 0x1b, 0xff, 0x43, 0x2d, 0x21, 0xff, 0x4e, 0x38, 0x31, 0xff, 0x51, 0x3d, 0x31, 0xff, 0x7e, 0x79, 0x70, 0xff, 0xb7, 0xc5, 0xc1, 0xff, 0xbe, 0xc7, 0xc3, 0xff, 0x7a, 0x7a, 0x71, 0xff, 0x37, 0x29, 0x1f, 0xff, 0x2f, 0x1d, 0x1b, 0xff, 0x3f, 0x2d, 0x2c, 0xff, 0xb1, 0xc0, 0xb2, 0xff, 0x74, 0x79, 0x70, 0xff, 0x68, 0x65, 0x60, 0xff, 0x4f, 0x3f, 0x3e, 0xff, 0x23, 0x0a, 0x0b, 0xff, 0x3a, 0x28, 0x20, 0xff, 0x27, 0x18, 0x10, 0xff, 0x59, 0x4c, 0x45, 0xff, 0x90, 0x88, 0x7c, 0xff, 0x33, 0x1d, 0x1b, 0xff, 0x1a, 0x06, 0x04, 0xff, 0x7c, 0x75, 0x68, 0xff, 0x78, 0x6d, 0x5c, 0xff, 0x4d, 0x37, 0x28, 0xff, 0x40, 0x2b, 0x23, 0xff, 0x81, 0x79, 0x68, 0xff, 0x6b, 0x60, 0x48, 0xff, 0x39, 0x23, 0x1d, 0xff, 0x28, 0x16, 0x17, 0xff, 0x2e, 0x1b, 0x16, 0xff, 0x41, 0x2b, 0x25, 0xff, 0x3e, 0x28, 0x24, 0xff, 0x36, 0x1d, 0x1b, 0xff, 0x1e, 0x09, 0x05, 0xff, 0x2a, 0x15, 0x0b, 0xff, 0x68, 0x50, 0x3e, 0xff, 0x5a, 0x48, 0x35, 0xff, 0x33, 0x1e, 0x19, 0xff, 0x2e, 0x19, 0x16, 0xff, 0x32, 0x1e, 0x1e, 0xff, 0x2b, 0x17, 0x19, 0xff, 0x23, 0x10, 0x11, 0xff, 0x1e, 0x0b, 0x10, 0xff, 0x20, 0x0f, 0x12, 0xff, 0x21, 0x13, 0x14, 0xff, 0x90, 0x88, 0x8a, 0xff, 0xfb, 0xfa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xe1, 0xd6, 0xff, 0xaf, 0x9d, 0x72, 0xff, 0xa5, 0x91, 0x5d, 0xff, 0x9b, 0x85, 0x52, 0xff, 0x9f, 0x89, 0x53, 0xff, 0xa1, 0x8f, 0x5a, 0xff, 0xb2, 0xa2, 0x72, 0xff, 0x9a, 0x89, 0x58, 0xff, 0xa7, 0x99, 0x69, 0xff, 0xb7, 0xb1, 0x87, 0xff, 0xa0, 0x90, 0x5e, 0xff, 0x91, 0x79, 0x44, 0xff, 0xc4, 0xca, 0xbc, 0xff, 0xeb, 0xff, 0xff, 0xff, 0xd9, 0xf1, 0xf1, 0xff, 0xd7, 0xef, 0xee, 0xff, 0xd6, 0xef, 0xec, 0xff, 0xd5, 0xec, 0xf0, 0xff, 0xdb, 0xf5, 0xf8, 0xff, 0xc5, 0xd6, 0xe0, 0xff, 0x6f, 0x7a, 0x8f, 0xff, 0xa1, 0xb3, 0xbe, 0xff, 0xe6, 0xff, 0xff, 0xff, 0xd3, 0xee, 0xee, 0xff, 0xd2, 0xeb, 0xec, 0xff, 0xd0, 0xe9, 0xec, 0xff, 0xcd, 0xe7, 0xeb, 0xff, 0xca, 0xe4, 0xec, 0xff, 0xca, 0xe6, 0xeb, 0xff, 0xc9, 0xe6, 0xea, 0xff, 0xc2, 0xd7, 0xe9, 0xff, 0x8b, 0x96, 0xc3, 0xff, 0xc9, 0xe4, 0xec, 0xff, 0xd4, 0xf6, 0xec, 0xff, 0xcc, 0xea, 0xea, 0xff, 0xcb, 0xe8, 0xec, 0xff, 0xc9, 0xe6, 0xec, 0xff, 0xc5, 0xe0, 0xeb, 0xff, 0xc0, 0xd6, 0xe6, 0xff, 0xbc, 0xd4, 0xe5, 0xff, 0xbf, 0xda, 0xe3, 0xff, 0xbf, 0xd2, 0xde, 0xff, 0xb7, 0xd0, 0xdf, 0xff, 0xcb, 0xeb, 0xef, 0xff, 0xcb, 0xe8, 0xec, 0xff, 0xc8, 0xe6, 0xea, 0xff, 0xc6, 0xe3, 0xe7, 0xff, 0xd0, 0xf0, 0xf9, 0xff, 0xd4, 0xf0, 0xfc, 0xff, 0x83, 0x85, 0x86, 0xff, 0x83, 0x7d, 0x76, 0xff, 0xad, 0xb7, 0xb0, 0xff, 0xc5, 0xda, 0xd4, 0xff, 0xcb, 0xe2, 0xda, 0xff, 0xc7, 0xda, 0xcf, 0xff, 0xb1, 0xc4, 0xb6, 0xff, 0xc0, 0xce, 0xbe, 0xff, 0xbf, 0xc7, 0xb4, 0xff, 0xa1, 0xa5, 0x92, 0xff, 0x97, 0x96, 0x84, 0xff, 0x72, 0x6a, 0x56, 0xff, 0x76, 0x6c, 0x5a, 0xff, 0x7a, 0x71, 0x64, 0xff, 0x3b, 0x29, 0x22, 0xff, 0x42, 0x30, 0x2f, 0xff, 0x52, 0x47, 0x43, 0xff, 0x68, 0x59, 0x4b, 0xff, 0x50, 0x3d, 0x36, 0xff, 0x59, 0x4d, 0x48, 0xff, 0xaa, 0xbb, 0xb2, 0xff, 0xc3, 0xe0, 0xdd, 0xff, 0x80, 0x84, 0x82, 0xff, 0x5a, 0x4b, 0x48, 0xff, 0x3d, 0x2c, 0x28, 0xff, 0x00, 0x00, 0x00, 0xff, 0x53, 0x48, 0x4c, 0xff, 0xd4, 0xe9, 0xe1, 0xff, 0x95, 0xa2, 0x96, 0xff, 0x91, 0x99, 0x92, 0xff, 0x32, 0x20, 0x20, 0xff, 0x21, 0x08, 0x09, 0xff, 0x41, 0x2c, 0x28, 0xff, 0x21, 0x09, 0x05, 0xff, 0x77, 0x72, 0x6e, 0xff, 0xe3, 0xf8, 0xee, 0xff, 0x63, 0x5d, 0x57, 0xff, 0x14, 0x00, 0x00, 0xff, 0x68, 0x60, 0x55, 0xff, 0x8e, 0x88, 0x71, 0xff, 0x93, 0x89, 0x6f, 0xff, 0x82, 0x76, 0x62, 0xff, 0x86, 0x76, 0x60, 0xff, 0x58, 0x48, 0x30, 0xff, 0x39, 0x25, 0x1c, 0xff, 0x26, 0x0f, 0x13, 0xff, 0x42, 0x2f, 0x28, 0xff, 0x5e, 0x4a, 0x3d, 0xff, 0x38, 0x24, 0x1b, 0xff, 0x31, 0x1a, 0x17, 0xff, 0x41, 0x2d, 0x2b, 0xff, 0x76, 0x65, 0x50, 0xff, 0x68, 0x57, 0x40, 0xff, 0x31, 0x21, 0x1e, 0xff, 0x24, 0x14, 0x12, 0xff, 0x26, 0x12, 0x13, 0xff, 0x25, 0x11, 0x11, 0xff, 0x1a, 0x09, 0x0b, 0xff, 0x1a, 0x08, 0x0e, 0xff, 0x1d, 0x0b, 0x0c, 0xff, 0x1a, 0x0a, 0x0b, 0xff, 0x5e, 0x53, 0x55, 0xff, 0xeb, 0xe9, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd6, 0xcd, 0xb9, 0xff, 0xac, 0x99, 0x68, 0xff, 0x9f, 0x8a, 0x58, 0xff, 0x9a, 0x86, 0x53, 0xff, 0x9a, 0x87, 0x53, 0xff, 0xa0, 0x90, 0x5e, 0xff, 0xac, 0x9b, 0x6a, 0xff, 0xa1, 0x97, 0x6a, 0xff, 0xb1, 0xa7, 0x79, 0xff, 0x95, 0x82, 0x4e, 0xff, 0xc0, 0xc7, 0xb7, 0xff, 0xef, 0xff, 0xff, 0xff, 0xd9, 0xf0, 0xf3, 0xff, 0xd7, 0xee, 0xee, 0xff, 0xd6, 0xee, 0xee, 0xff, 0xd6, 0xee, 0xef, 0xff, 0xd4, 0xee, 0xef, 0xff, 0xd5, 0xf1, 0xf3, 0xff, 0xbd, 0xcd, 0xdd, 0xff, 0x80, 0x8d, 0x9a, 0xff, 0xd3, 0xea, 0xec, 0xff, 0xdd, 0xf9, 0xf6, 0xff, 0xd2, 0xec, 0xea, 0xff, 0xd1, 0xe9, 0xef, 0xff, 0xcf, 0xe7, 0xee, 0xff, 0xcb, 0xe8, 0xec, 0xff, 0xcb, 0xe7, 0xed, 0xff, 0xc9, 0xe7, 0xeb, 0xff, 0xd8, 0xf4, 0xf8, 0xff, 0x93, 0x9d, 0xbb, 0xff, 0x90, 0x9d, 0xb5, 0xff, 0xe5, 0xff, 0xfd, 0xff, 0xcc, 0xe9, 0xee, 0xff, 0xcb, 0xe8, 0xec, 0xff, 0xc8, 0xe6, 0xea, 0xff, 0xc8, 0xe5, 0xeb, 0xff, 0xc3, 0xdf, 0xe9, 0xff, 0xbe, 0xd5, 0xe3, 0xff, 0xbb, 0xd1, 0xe4, 0xff, 0xd0, 0xea, 0xef, 0xff, 0xa5, 0xb2, 0xce, 0xff, 0x99, 0xad, 0xc6, 0xff, 0xd8, 0xf7, 0xf8, 0xff, 0xc9, 0xe6, 0xe9, 0xff, 0xc7, 0xe5, 0xe8, 0xff, 0xc7, 0xe2, 0xe7, 0xff, 0xc7, 0xe0, 0xe7, 0xff, 0xca, 0xeb, 0xf2, 0xff, 0xc7, 0xe1, 0xe6, 0xff, 0xaf, 0xc1, 0xc5, 0xff, 0xc3, 0xd8, 0xd7, 0xff, 0xc5, 0xda, 0xd7, 0xff, 0xbe, 0xd6, 0xd0, 0xff, 0xbe, 0xd5, 0xcb, 0xff, 0xc1, 0xd2, 0xc5, 0xff, 0xb4, 0xc1, 0xb2, 0xff, 0xae, 0xb7, 0xa7, 0xff, 0xa9, 0xb5, 0xa6, 0xff, 0xbe, 0xce, 0xc3, 0xff, 0xa5, 0xa7, 0x9a, 0xff, 0x70, 0x5c, 0x47, 0xff, 0x78, 0x64, 0x4d, 0xff, 0x6a, 0x5b, 0x4f, 0xff, 0x52, 0x42, 0x3a, 0xff, 0x44, 0x39, 0x38, 0xff, 0x4c, 0x3e, 0x3c, 0xff, 0x4c, 0x3c, 0x26, 0xff, 0x61, 0x57, 0x49, 0xff, 0xbb, 0xcb, 0xc3, 0xff, 0xab, 0xc0, 0xbd, 0xff, 0x7b, 0x7d, 0x76, 0xff, 0x3c, 0x30, 0x2e, 0xff, 0x30, 0x18, 0x1b, 0xff, 0x48, 0x38, 0x32, 0xff, 0x8e, 0x99, 0x93, 0xff, 0x9c, 0xac, 0xa6, 0xff, 0xad, 0xb9, 0xae, 0xff, 0xb1, 0xba, 0xae, 0xff, 0x32, 0x26, 0x1f, 0xff, 0x29, 0x17, 0x13, 0xff, 0x33, 0x20, 0x20, 0xff, 0x26, 0x10, 0x0d, 0xff, 0x8b, 0x90, 0x84, 0xff, 0xc1, 0xda, 0xce, 0xff, 0x95, 0x9a, 0x91, 0xff, 0x6b, 0x5e, 0x50, 0xff, 0x93, 0x8d, 0x7a, 0xff, 0x83, 0x7f, 0x68, 0xff, 0x6f, 0x62, 0x50, 0xff, 0x51, 0x3c, 0x31, 0xff, 0x50, 0x3b, 0x27, 0xff, 0x70, 0x58, 0x42, 0xff, 0x46, 0x2f, 0x22, 0xff, 0x46, 0x39, 0x2e, 0xff, 0x91, 0x86, 0x6f, 0xff, 0x6f, 0x5c, 0x40, 0xff, 0x5d, 0x43, 0x2a, 0xff, 0x5e, 0x4a, 0x2d, 0xff, 0x79, 0x6d, 0x51, 0xff, 0x70, 0x5e, 0x4f, 0xff, 0x2c, 0x17, 0x10, 0xff, 0x1e, 0x0b, 0x0a, 0xff, 0x24, 0x11, 0x14, 0xff, 0x2e, 0x19, 0x1a, 0xff, 0x35, 0x21, 0x1b, 0xff, 0x3c, 0x28, 0x1d, 0xff, 0x42, 0x2e, 0x24, 0xff, 0x52, 0x40, 0x33, 0xff, 0x67, 0x59, 0x50, 0xff, 0xd4, 0xd0, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfe, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xcd, 0xc2, 0xa8, 0xff, 0xa6, 0x95, 0x66, 0xff, 0x94, 0x82, 0x52, 0xff, 0x9b, 0x86, 0x54, 0xff, 0x98, 0x86, 0x53, 0xff, 0x96, 0x88, 0x57, 0xff, 0xb7, 0xac, 0x7e, 0xff, 0x9e, 0x90, 0x5e, 0xff, 0xb1, 0xb2, 0x9c, 0xff, 0xe5, 0xff, 0xff, 0xff, 0xda, 0xf1, 0xf1, 0xff, 0xd6, 0xec, 0xed, 0xff, 0xd5, 0xec, 0xf0, 0xff, 0xd4, 0xec, 0xee, 0xff, 0xd2, 0xeb, 0xee, 0xff, 0xd3, 0xec, 0xec, 0xff, 0xd4, 0xef, 0xf3, 0xff, 0xa9, 0xb7, 0xd1, 0xff, 0xc0, 0xd2, 0xd8, 0xff, 0xe0, 0xfc, 0xf8, 0xff, 0xd0, 0xec, 0xe9, 0xff, 0xd1, 0xeb, 0xed, 0xff, 0xd0, 0xe7, 0xef, 0xff, 0xce, 0xe6, 0xed, 0xff, 0xca, 0xe6, 0xeb, 0xff, 0xcc, 0xe6, 0xed, 0xff, 0xd1, 0xea, 0xf0, 0xff, 0xbe, 0xd0, 0xe8, 0xff, 0x90, 0x9c, 0xbc, 0xff, 0xcf, 0xe9, 0xe4, 0xff, 0xd8, 0xf5, 0xf1, 0xff, 0xcb, 0xe8, 0xee, 0xff, 0xcb, 0xe7, 0xec, 0xff, 0xcb, 0xe5, 0xeb, 0xff, 0xc8, 0xe2, 0xea, 0xff, 0xc5, 0xdf, 0xea, 0xff, 0xc2, 0xda, 0xe6, 0xff, 0xc0, 0xd9, 0xe3, 0xff, 0xce, 0xe3, 0xee, 0xff, 0x64, 0x64, 0x96, 0xff, 0x98, 0xad, 0xbf, 0xff, 0xdc, 0xfd, 0xfa, 0xff, 0xca, 0xe7, 0xeb, 0xff, 0xc7, 0xe5, 0xe9, 0xff, 0xc7, 0xe1, 0xe9, 0xff, 0xc9, 0xde, 0xe5, 0xff, 0xc3, 0xdd, 0xdf, 0xff, 0xbf, 0xda, 0xe0, 0xff, 0xc4, 0xdd, 0xdf, 0xff, 0xc0, 0xd3, 0xcc, 0xff, 0xbd, 0xc7, 0xc0, 0xff, 0xb7, 0xc9, 0xc0, 0xff, 0xb8, 0xcf, 0xc1, 0xff, 0xb1, 0xb6, 0xa2, 0xff, 0x8e, 0x86, 0x6e, 0xff, 0x82, 0x76, 0x61, 0xff, 0x7e, 0x71, 0x62, 0xff, 0x82, 0x7c, 0x71, 0xff, 0x76, 0x6e, 0x5e, 0xff, 0x50, 0x3d, 0x30, 0xff, 0x44, 0x33, 0x2b, 0xff, 0x29, 0x16, 0x14, 0xff, 0x2f, 0x19, 0x18, 0xff, 0x35, 0x22, 0x1a, 0xff, 0x5d, 0x4a, 0x38, 0xff, 0x80, 0x73, 0x5b, 0xff, 0xad, 0xa5, 0x95, 0xff, 0xad, 0xb6, 0xaa, 0xff, 0x82, 0x8b, 0x88, 0xff, 0x59, 0x50, 0x50, 0xff, 0x3a, 0x27, 0x27, 0xff, 0x28, 0x16, 0x15, 0xff, 0x95, 0x99, 0x94, 0xff, 0x9f, 0xb3, 0xb1, 0xff, 0x91, 0xa1, 0x9c, 0xff, 0x70, 0x6d, 0x69, 0xff, 0x88, 0x8d, 0x82, 0xff, 0xad, 0xb3, 0xa5, 0xff, 0x4f, 0x43, 0x3e, 0xff, 0x5a, 0x54, 0x4a, 0xff, 0x51, 0x43, 0x39, 0xff, 0x7f, 0x7e, 0x73, 0xff, 0x69, 0x65, 0x5b, 0xff, 0x88, 0x8b, 0x7a, 0xff, 0xbc, 0xc3, 0xaf, 0xff, 0x8d, 0x84, 0x6d, 0xff, 0x4e, 0x3d, 0x2e, 0xff, 0x34, 0x1a, 0x10, 0xff, 0x43, 0x2e, 0x1f, 0xff, 0x68, 0x52, 0x36, 0xff, 0x5f, 0x45, 0x2d, 0xff, 0x4f, 0x39, 0x27, 0xff, 0x88, 0x7f, 0x65, 0xff, 0x9d, 0x92, 0x70, 0xff, 0x7a, 0x65, 0x45, 0xff, 0x5c, 0x3f, 0x28, 0xff, 0x5d, 0x45, 0x30, 0xff, 0x59, 0x45, 0x37, 0xff, 0x4e, 0x38, 0x28, 0xff, 0x4b, 0x33, 0x26, 0xff, 0x42, 0x2a, 0x24, 0xff, 0x3b, 0x22, 0x1a, 0xff, 0x3e, 0x27, 0x1f, 0xff, 0x47, 0x30, 0x25, 0xff, 0x4c, 0x33, 0x23, 0xff, 0x4a, 0x32, 0x20, 0xff, 0x59, 0x49, 0x39, 0xff, 0xc9, 0xc3, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf3, 0xef, 0xff, 0xc0, 0xb4, 0x95, 0xff, 0x9f, 0x8e, 0x60, 0xff, 0x91, 0x7c, 0x49, 0xff, 0xa4, 0x93, 0x60, 0xff, 0xa2, 0x91, 0x63, 0xff, 0x92, 0x82, 0x4f, 0xff, 0xa6, 0xa4, 0x8b, 0xff, 0xe3, 0xf8, 0xf8, 0xff, 0xdd, 0xf6, 0xf6, 0xff, 0xd3, 0xed, 0xeb, 0xff, 0xd4, 0xea, 0xf0, 0xff, 0xd4, 0xea, 0xef, 0xff, 0xd2, 0xeb, 0xed, 0xff, 0xd1, 0xea, 0xec, 0xff, 0xd9, 0xf1, 0xf1, 0xff, 0xbb, 0xce, 0xdd, 0xff, 0x95, 0x9f, 0xbe, 0xff, 0xdf, 0xf9, 0xf4, 0xff, 0xd3, 0xf1, 0xec, 0xff, 0xd2, 0xeb, 0xed, 0xff, 0xd0, 0xe8, 0xee, 0xff, 0xcf, 0xe6, 0xed, 0xff, 0xcf, 0xe7, 0xeb, 0xff, 0xcc, 0xe4, 0xeb, 0xff, 0xcd, 0xe4, 0xeb, 0xff, 0xcc, 0xde, 0xec, 0xff, 0xa5, 0xb3, 0xd1, 0xff, 0xc8, 0xe4, 0xe7, 0xff, 0xdc, 0xfb, 0xf7, 0xff, 0xcb, 0xe7, 0xec, 0xff, 0xca, 0xe6, 0xeb, 0xff, 0xc9, 0xe4, 0xe9, 0xff, 0xc9, 0xe2, 0xea, 0xff, 0xc7, 0xdf, 0xe9, 0xff, 0xc5, 0xdd, 0xe8, 0xff, 0xc1, 0xd9, 0xe4, 0xff, 0xda, 0xf1, 0xf9, 0xff, 0x71, 0x77, 0x97, 0xff, 0x4f, 0x57, 0x6e, 0xff, 0xe7, 0xff, 0xff, 0xff, 0xc7, 0xe5, 0xe9, 0xff, 0xc6, 0xe3, 0xe7, 0xff, 0xca, 0xe7, 0xeb, 0xff, 0xc7, 0xe2, 0xea, 0xff, 0xc0, 0xda, 0xe2, 0xff, 0xc3, 0xdb, 0xe0, 0xff, 0xc5, 0xdc, 0xe7, 0xff, 0xb3, 0xc7, 0xcc, 0xff, 0x9f, 0xad, 0xa1, 0xff, 0xab, 0xb2, 0xa0, 0xff, 0xae, 0xb8, 0xa2, 0xff, 0xaf, 0xb5, 0x9b, 0xff, 0xaa, 0x9e, 0x84, 0xff, 0x85, 0x74, 0x5b, 0xff, 0x58, 0x49, 0x3b, 0xff, 0x54, 0x48, 0x3f, 0xff, 0x3a, 0x2c, 0x25, 0xff, 0x12, 0x00, 0x00, 0xff, 0x3f, 0x2b, 0x26, 0xff, 0x69, 0x58, 0x4c, 0xff, 0x6c, 0x5a, 0x48, 0xff, 0x4b, 0x36, 0x2a, 0xff, 0x3e, 0x2c, 0x1e, 0xff, 0x6d, 0x5b, 0x46, 0xff, 0x55, 0x46, 0x3e, 0xff, 0x60, 0x59, 0x4c, 0xff, 0x9d, 0xa0, 0x93, 0xff, 0x98, 0xa7, 0xa3, 0xff, 0x82, 0x89, 0x87, 0xff, 0x41, 0x31, 0x30, 0xff, 0x43, 0x37, 0x35, 0xff, 0x98, 0xa7, 0xa9, 0xff, 0x62, 0x6c, 0x6f, 0xff, 0x70, 0x6f, 0x6c, 0xff, 0x25, 0x0e, 0x0f, 0xff, 0x4b, 0x3f, 0x3a, 0xff, 0x75, 0x74, 0x6a, 0xff, 0x41, 0x2f, 0x2b, 0xff, 0x55, 0x44, 0x3f, 0xff, 0x41, 0x2b, 0x29, 0xff, 0x28, 0x15, 0x1a, 0xff, 0x29, 0x12, 0x12, 0xff, 0x5d, 0x53, 0x3f, 0xff, 0xac, 0xac, 0x8c, 0xff, 0x70, 0x63, 0x4a, 0xff, 0x28, 0x15, 0x0d, 0xff, 0x36, 0x1e, 0x18, 0xff, 0x57, 0x41, 0x32, 0xff, 0x6d, 0x56, 0x42, 0xff, 0x41, 0x26, 0x1d, 0xff, 0x48, 0x2e, 0x22, 0xff, 0x51, 0x37, 0x22, 0xff, 0x56, 0x3b, 0x27, 0xff, 0x4f, 0x38, 0x28, 0xff, 0x37, 0x23, 0x1c, 0xff, 0x35, 0x22, 0x1c, 0xff, 0x33, 0x20, 0x1b, 0xff, 0x39, 0x24, 0x1c, 0xff, 0x39, 0x24, 0x1b, 0xff, 0x3c, 0x28, 0x1c, 0xff, 0x41, 0x2d, 0x1f, 0xff, 0x3a, 0x27, 0x1e, 0xff, 0x36, 0x22, 0x1b, 0xff, 0x32, 0x1d, 0x18, 0xff, 0x36, 0x20, 0x1e, 0xff, 0x94, 0x8b, 0x8b, 0xff, 0xfb, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xee, 0xe7, 0xff, 0xb8, 0xae, 0x8a, 0xff, 0x93, 0x81, 0x4e, 0xff, 0x9c, 0x8b, 0x57, 0xff, 0x9b, 0x84, 0x52, 0xff, 0x9c, 0x93, 0x75, 0xff, 0xdf, 0xf0, 0xf0, 0xff, 0xde, 0xfd, 0xff, 0xff, 0xd7, 0xe9, 0xee, 0xff, 0xd5, 0xeb, 0xef, 0xff, 0xd2, 0xea, 0xee, 0xff, 0xd3, 0xea, 0xec, 0xff, 0xd3, 0xea, 0xec, 0xff, 0xd4, 0xea, 0xed, 0xff, 0xdc, 0xf2, 0xf8, 0xff, 0x98, 0xa4, 0xc0, 0xff, 0xac, 0xb9, 0xca, 0xff, 0xe7, 0xff, 0xfb, 0xff, 0xd1, 0xed, 0xe9, 0xff, 0xd3, 0xea, 0xeb, 0xff, 0xd1, 0xe7, 0xeb, 0xff, 0xd0, 0xe5, 0xeb, 0xff, 0xce, 0xe4, 0xea, 0xff, 0xcb, 0xe2, 0xeb, 0xff, 0xd2, 0xe7, 0xed, 0xff, 0xb6, 0xc8, 0xd9, 0xff, 0xbb, 0xcf, 0xe1, 0xff, 0xde, 0xfc, 0xf6, 0xff, 0xce, 0xea, 0xe9, 0xff, 0xcd, 0xe7, 0xeb, 0xff, 0xcb, 0xe3, 0xeb, 0xff, 0xc8, 0xe2, 0xe9, 0xff, 0xc7, 0xe1, 0xe9, 0xff, 0xc8, 0xe0, 0xeb, 0xff, 0xc5, 0xdb, 0xe5, 0xff, 0xbf, 0xd8, 0xe1, 0xff, 0xc4, 0xd6, 0xe8, 0xff, 0x49, 0x4c, 0x69, 0xff, 0xa4, 0xb7, 0xbe, 0xff, 0xdd, 0xfb, 0xfd, 0xff, 0xc3, 0xdf, 0xe7, 0xff, 0xc5, 0xe1, 0xe7, 0xff, 0xc3, 0xdd, 0xe4, 0xff, 0xbe, 0xd9, 0xe0, 0xff, 0xc2, 0xdb, 0xe0, 0xff, 0xbe, 0xd7, 0xdc, 0xff, 0xc2, 0xdc, 0xe2, 0xff, 0xa8, 0xb9, 0xb8, 0xff, 0x98, 0x9b, 0x8d, 0xff, 0xa6, 0xa8, 0x91, 0xff, 0xa8, 0xab, 0x8f, 0xff, 0x9b, 0x95, 0x7d, 0xff, 0x76, 0x6b, 0x5b, 0xff, 0x34, 0x1e, 0x1b, 0xff, 0x24, 0x0f, 0x0e, 0xff, 0x29, 0x19, 0x19, 0xff, 0x31, 0x1b, 0x12, 0xff, 0x58, 0x48, 0x3d, 0xff, 0x77, 0x62, 0x52, 0xff, 0x63, 0x4d, 0x3b, 0xff, 0x4f, 0x3f, 0x32, 0xff, 0x77, 0x6c, 0x5a, 0xff, 0xab, 0xaa, 0x8d, 0xff, 0x92, 0x86, 0x6d, 0xff, 0x3d, 0x24, 0x1a, 0xff, 0x59, 0x4c, 0x47, 0xff, 0xa0, 0xaf, 0xa6, 0xff, 0xcb, 0xde, 0xd8, 0xff, 0x72, 0x71, 0x6c, 0xff, 0x3c, 0x38, 0x2f, 0xff, 0x9a, 0x9e, 0x97, 0xff, 0x56, 0x50, 0x50, 0xff, 0x1b, 0x0b, 0x07, 0xff, 0x50, 0x3d, 0x35, 0xff, 0x43, 0x32, 0x2b, 0xff, 0x2d, 0x1a, 0x1a, 0xff, 0x31, 0x1c, 0x1b, 0xff, 0x3f, 0x2c, 0x27, 0xff, 0x1b, 0x06, 0x05, 0xff, 0x3d, 0x2a, 0x28, 0xff, 0x26, 0x11, 0x14, 0xff, 0x33, 0x1b, 0x1d, 0xff, 0x41, 0x2c, 0x22, 0xff, 0x4e, 0x3a, 0x2f, 0xff, 0x3b, 0x26, 0x24, 0xff, 0x30, 0x1c, 0x1b, 0xff, 0x39, 0x25, 0x1f, 0xff, 0x55, 0x42, 0x32, 0xff, 0x33, 0x21, 0x19, 0xff, 0x36, 0x22, 0x1c, 0xff, 0x42, 0x2c, 0x20, 0xff, 0x46, 0x2f, 0x21, 0xff, 0x3b, 0x23, 0x1d, 0xff, 0x2d, 0x17, 0x15, 0xff, 0x2e, 0x1b, 0x1a, 0xff, 0x2d, 0x1b, 0x17, 0xff, 0x2e, 0x1a, 0x15, 0xff, 0x31, 0x1d, 0x1b, 0xff, 0x30, 0x1c, 0x1a, 0xff, 0x2c, 0x1a, 0x15, 0xff, 0x2a, 0x18, 0x14, 0xff, 0x2a, 0x17, 0x15, 0xff, 0x26, 0x11, 0x13, 0xff, 0x21, 0x0e, 0x11, 0xff, 0x7a, 0x6f, 0x71, 0xff, 0xf3, 0xf2, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xe9, 0xde, 0xff, 0xb6, 0xab, 0x82, 0xff, 0x89, 0x75, 0x3f, 0xff, 0x82, 0x74, 0x4b, 0xff, 0xdc, 0xec, 0xec, 0xff, 0xe2, 0xff, 0xff, 0xff, 0xd0, 0xea, 0xee, 0xff, 0xdc, 0xe8, 0xf0, 0xff, 0xd5, 0xe8, 0xed, 0xff, 0xd2, 0xeb, 0xec, 0xff, 0xd4, 0xec, 0xec, 0xff, 0xd3, 0xea, 0xec, 0xff, 0xd6, 0xee, 0xf1, 0xff, 0xbe, 0xcf, 0xe4, 0xff, 0xac, 0xb8, 0xd2, 0xff, 0xdf, 0xf4, 0xf0, 0xff, 0xd5, 0xee, 0xec, 0xff, 0xd0, 0xe9, 0xec, 0xff, 0xd1, 0xe7, 0xea, 0xff, 0xd1, 0xe7, 0xec, 0xff, 0xd0, 0xe6, 0xec, 0xff, 0xcd, 0xe4, 0xeb, 0xff, 0xcc, 0xe3, 0xeb, 0xff, 0xcd, 0xe1, 0xeb, 0xff, 0xbc, 0xcc, 0xe2, 0xff, 0xcf, 0xe9, 0xeb, 0xff, 0xd4, 0xee, 0xed, 0xff, 0xcf, 0xe8, 0xea, 0xff, 0xce, 0xe6, 0xeb, 0xff, 0xcd, 0xe3, 0xeb, 0xff, 0xca, 0xe2, 0xeb, 0xff, 0xc7, 0xe0, 0xe8, 0xff, 0xc7, 0xdd, 0xe8, 0xff, 0xc2, 0xd7, 0xe3, 0xff, 0xcb, 0xe1, 0xeb, 0xff, 0x6f, 0x7d, 0x9c, 0xff, 0x74, 0x82, 0x95, 0xff, 0xed, 0xff, 0xff, 0xff, 0xbd, 0xda, 0xe2, 0xff, 0xbd, 0xd7, 0xe2, 0xff, 0xc0, 0xd7, 0xe5, 0xff, 0xb9, 0xcf, 0xde, 0xff, 0xb6, 0xcd, 0xd9, 0xff, 0xb9, 0xd0, 0xd7, 0xff, 0xb9, 0xcf, 0xd2, 0xff, 0xbe, 0xd3, 0xd5, 0xff, 0xbc, 0xc7, 0xbf, 0xff, 0xa6, 0xa7, 0x90, 0xff, 0x9f, 0x98, 0x80, 0xff, 0x86, 0x75, 0x65, 0xff, 0x42, 0x2c, 0x26, 0xff, 0x1e, 0x0a, 0x0d, 0xff, 0x42, 0x34, 0x32, 0xff, 0x31, 0x1b, 0x14, 0xff, 0x3a, 0x20, 0x19, 0xff, 0x8e, 0x84, 0x72, 0xff, 0xb3, 0xaa, 0x8d, 0xff, 0x77, 0x65, 0x57, 0xff, 0x2b, 0x17, 0x0d, 0xff, 0x56, 0x47, 0x30, 0xff, 0xbb, 0xc3, 0xaf, 0xff, 0xd4, 0xd9, 0xc0, 0xff, 0x80, 0x76, 0x5b, 0xff, 0x55, 0x4a, 0x3e, 0xff, 0xa2, 0xa0, 0x9a, 0xff, 0xac, 0xb8, 0xb0, 0xff, 0x6d, 0x6d, 0x69, 0xff, 0x25, 0x15, 0x11, 0xff, 0x9b, 0x9b, 0x8f, 0xff, 0x72, 0x73, 0x6c, 0xff, 0x15, 0x00, 0x00, 0xff, 0x1c, 0x00, 0x04, 0xff, 0x3b, 0x2a, 0x25, 0xff, 0x4b, 0x3d, 0x32, 0xff, 0x26, 0x14, 0x13, 0xff, 0x2d, 0x1e, 0x19, 0xff, 0x5e, 0x56, 0x45, 0xff, 0x8d, 0x8f, 0x81, 0xff, 0xa1, 0xa5, 0x9d, 0xff, 0x3b, 0x32, 0x2d, 0xff, 0x32, 0x1e, 0x18, 0xff, 0x38, 0x21, 0x1f, 0xff, 0x2d, 0x17, 0x18, 0xff, 0x30, 0x1a, 0x1b, 0xff, 0x30, 0x1b, 0x1a, 0xff, 0x49, 0x36, 0x2d, 0xff, 0x45, 0x30, 0x28, 0xff, 0x35, 0x1f, 0x19, 0xff, 0x3c, 0x25, 0x1d, 0xff, 0x3d, 0x25, 0x1a, 0xff, 0x39, 0x22, 0x1d, 0xff, 0x2c, 0x18, 0x14, 0xff, 0x29, 0x15, 0x14, 0xff, 0x23, 0x10, 0x10, 0xff, 0x22, 0x0d, 0x12, 0xff, 0x23, 0x0e, 0x14, 0xff, 0x1e, 0x0b, 0x0f, 0xff, 0x1f, 0x0b, 0x0f, 0xff, 0x1e, 0x0b, 0x0f, 0xff, 0x20, 0x0e, 0x12, 0xff, 0x1e, 0x0b, 0x0f, 0xff, 0x1e, 0x0b, 0x10, 0xff, 0x69, 0x5c, 0x5e, 0xff, 0xeb, 0xe9, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xc7, 0xf6, 0xed, 0xe7, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0xe3, 0xd3, 0xff, 0x92, 0x83, 0x5a, 0xff, 0xce, 0xd7, 0xd4, 0xff, 0xe4, 0xff, 0xff, 0xff, 0xd1, 0xec, 0xe9, 0xff, 0xd8, 0xee, 0xec, 0xff, 0xd6, 0xed, 0xeb, 0xff, 0xd0, 0xec, 0xea, 0xff, 0xd3, 0xea, 0xec, 0xff, 0xd3, 0xeb, 0xeb, 0xff, 0xd4, 0xeb, 0xed, 0xff, 0xcf, 0xe5, 0xeb, 0xff, 0xb5, 0xc6, 0xda, 0xff, 0xd0, 0xe4, 0xec, 0xff, 0xdd, 0xf4, 0xf0, 0xff, 0xd3, 0xe9, 0xe7, 0xff, 0xd2, 0xe7, 0xef, 0xff, 0xd0, 0xe6, 0xec, 0xff, 0xd0, 0xe6, 0xec, 0xff, 0xcf, 0xe5, 0xeb, 0xff, 0xcd, 0xe4, 0xea, 0xff, 0xd0, 0xe8, 0xef, 0xff, 0xc0, 0xd1, 0xe4, 0xff, 0xbc, 0xce, 0xe0, 0xff, 0xd8, 0xf4, 0xee, 0xff, 0xce, 0xe8, 0xea, 0xff, 0xcd, 0xe6, 0xeb, 0xff, 0xcc, 0xe4, 0xeb, 0xff, 0xcb, 0xe3, 0xeb, 0xff, 0xc9, 0xdf, 0xea, 0xff, 0xc5, 0xdb, 0xe4, 0xff, 0xc1, 0xd7, 0xdf, 0xff, 0xc0, 0xd4, 0xe1, 0xff, 0xb3, 0xc1, 0xdd, 0xff, 0x5d, 0x66, 0x90, 0xff, 0xb9, 0xd1, 0xda, 0xff, 0xd8, 0xf4, 0xf5, 0xff, 0xbf, 0xd6, 0xe2, 0xff, 0xb6, 0xcb, 0xdc, 0xff, 0xb1, 0xc6, 0xd8, 0xff, 0xb2, 0xc6, 0xd8, 0xff, 0xb3, 0xc7, 0xd7, 0xff, 0xb0, 0xc2, 0xcf, 0xff, 0xb1, 0xc4, 0xcb, 0xff, 0xb4, 0xc2, 0xc9, 0xff, 0x8b, 0x8a, 0x85, 0xff, 0x81, 0x76, 0x5d, 0xff, 0x7f, 0x71, 0x56, 0xff, 0x4a, 0x36, 0x26, 0xff, 0x4c, 0x37, 0x31, 0xff, 0x66, 0x54, 0x4b, 0xff, 0x79, 0x64, 0x4d, 0xff, 0x66, 0x5b, 0x44, 0xff, 0xb8, 0xc2, 0xac, 0xff, 0xd1, 0xd2, 0xb9, 0xff, 0x55, 0x46, 0x31, 0xff, 0x5a, 0x4b, 0x41, 0xff, 0x61, 0x55, 0x45, 0xff, 0xb1, 0xa5, 0x84, 0xff, 0xa7, 0x9a, 0x7a, 0xff, 0x3d, 0x27, 0x1a, 0xff, 0x6f, 0x65, 0x5e, 0xff, 0xcb, 0xde, 0xd0, 0xff, 0xb7, 0xc7, 0xbd, 0xff, 0x53, 0x4a, 0x49, 0xff, 0x0f, 0x00, 0x00, 0xff, 0x35, 0x27, 0x22, 0xff, 0x4d, 0x39, 0x34, 0xff, 0x23, 0x09, 0x08, 0xff, 0x24, 0x11, 0x14, 0xff, 0x1b, 0x0b, 0x10, 0xff, 0x26, 0x15, 0x13, 0xff, 0x6f, 0x5f, 0x52, 0xff, 0x42, 0x33, 0x2a, 0xff, 0x4b, 0x40, 0x35, 0xff, 0x79, 0x6f, 0x62, 0xff, 0xae, 0xb1, 0xa3, 0xff, 0xa5, 0xad, 0x9e, 0xff, 0x72, 0x6f, 0x5b, 0xff, 0x71, 0x65, 0x4a, 0xff, 0x5b, 0x4a, 0x35, 0xff, 0x33, 0x21, 0x17, 0xff, 0x30, 0x1c, 0x17, 0xff, 0x30, 0x1b, 0x19, 0xff, 0x41, 0x2e, 0x26, 0xff, 0x44, 0x2c, 0x22, 0xff, 0x51, 0x36, 0x2b, 0xff, 0x56, 0x3a, 0x29, 0xff, 0x57, 0x3c, 0x2a, 0xff, 0x45, 0x2b, 0x21, 0xff, 0x40, 0x29, 0x1e, 0xff, 0x42, 0x2b, 0x21, 0xff, 0x3b, 0x24, 0x1d, 0xff, 0x2e, 0x19, 0x16, 0xff, 0x2c, 0x1a, 0x17, 0xff, 0x2a, 0x19, 0x16, 0xff, 0x28, 0x17, 0x14, 0xff, 0x28, 0x17, 0x15, 0xff, 0x2b, 0x18, 0x18, 0xff, 0x2a, 0x17, 0x15, 0xff, 0x63, 0x57, 0x54, 0xff, 0xe6, 0xe4, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xea, 0xea, 0xe4, 0xff, 0xe9, 0xff, 0xff, 0xff, 0xcc, 0xe9, 0xee, 0xff, 0xd6, 0xed, 0xeb, 0xff, 0xd6, 0xec, 0xec, 0xff, 0xd3, 0xec, 0xec, 0xff, 0xd5, 0xeb, 0xed, 0xff, 0xd3, 0xe9, 0xed, 0xff, 0xd1, 0xe8, 0xeb, 0xff, 0xd2, 0xe9, 0xeb, 0xff, 0xcd, 0xe3, 0xe8, 0xff, 0xd2, 0xe9, 0xe9, 0xff, 0xd9, 0xf3, 0xef, 0xff, 0xd3, 0xea, 0xeb, 0xff, 0xd5, 0xe8, 0xed, 0xff, 0xd3, 0xe8, 0xeb, 0xff, 0xd0, 0xe6, 0xed, 0xff, 0xd0, 0xe6, 0xec, 0xff, 0xd0, 0xe5, 0xeb, 0xff, 0xcf, 0xe7, 0xeb, 0xff, 0xcd, 0xe4, 0xec, 0xff, 0xb1, 0xc1, 0xd9, 0xff, 0xca, 0xe1, 0xe3, 0xff, 0xd4, 0xee, 0xef, 0xff, 0xce, 0xe5, 0xed, 0xff, 0xcd, 0xe5, 0xeb, 0xff, 0xcb, 0xe2, 0xea, 0xff, 0xc7, 0xde, 0xe6, 0xff, 0xc6, 0xdb, 0xe4, 0xff, 0xc6, 0xda, 0xe3, 0xff, 0xc1, 0xd6, 0xde, 0xff, 0xc7, 0xd8, 0xe8, 0xff, 0x73, 0x78, 0xa4, 0xff, 0x96, 0xa5, 0xbd, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xc0, 0xdc, 0xe2, 0xff, 0xc0, 0xd5, 0xe1, 0xff, 0xb6, 0xca, 0xd9, 0xff, 0xad, 0xc1, 0xd3, 0xff, 0xae, 0xc0, 0xd3, 0xff, 0xb2, 0xc6, 0xd4, 0xff, 0xb7, 0xcb, 0xd4, 0xff, 0xac, 0xb8, 0xc1, 0xff, 0x8f, 0x98, 0x99, 0xff, 0x74, 0x71, 0x64, 0xff, 0x88, 0x7c, 0x66, 0xff, 0x93, 0x8b, 0x73, 0xff, 0x99, 0x93, 0x7b, 0xff, 0x88, 0x7b, 0x60, 0xff, 0x7d, 0x6d, 0x55, 0xff, 0x84, 0x7d, 0x6f, 0xff, 0xcb, 0xdc, 0xcb, 0xff, 0xd7, 0xe7, 0xd6, 0xff, 0x72, 0x65, 0x50, 0xff, 0x56, 0x42, 0x2e, 0xff, 0x9d, 0x98, 0x81, 0xff, 0xbe, 0xba, 0xa2, 0xff, 0x88, 0x77, 0x5e, 0xff, 0x42, 0x2a, 0x15, 0xff, 0x6a, 0x5d, 0x4c, 0xff, 0xdf, 0xe6, 0xd6, 0xff, 0xce, 0xdc, 0xcd, 0xff, 0x47, 0x3e, 0x38, 0xff, 0x06, 0x00, 0x00, 0xff, 0x36, 0x21, 0x20, 0xff, 0x2a, 0x14, 0x16, 0xff, 0x1b, 0x07, 0x09, 0xff, 0x23, 0x0c, 0x11, 0xff, 0x1f, 0x10, 0x14, 0xff, 0x1a, 0x08, 0x0d, 0xff, 0x24, 0x10, 0x10, 0xff, 0x42, 0x31, 0x28, 0xff, 0x54, 0x44, 0x38, 0xff, 0x5d, 0x4e, 0x43, 0xff, 0x41, 0x2e, 0x2e, 0xff, 0x58, 0x4b, 0x40, 0xff, 0x79, 0x70, 0x61, 0xff, 0x5e, 0x53, 0x46, 0xff, 0x59, 0x4a, 0x3d, 0xff, 0x39, 0x27, 0x1f, 0xff, 0x21, 0x0c, 0x0e, 0xff, 0x29, 0x15, 0x16, 0xff, 0x2f, 0x1b, 0x1b, 0xff, 0x26, 0x12, 0x13, 0xff, 0x2f, 0x1b, 0x16, 0xff, 0x3e, 0x27, 0x20, 0xff, 0x43, 0x2b, 0x20, 0xff, 0x3f, 0x29, 0x1d, 0xff, 0x37, 0x20, 0x1a, 0xff, 0x39, 0x21, 0x1a, 0xff, 0x37, 0x22, 0x19, 0xff, 0x39, 0x22, 0x1e, 0xff, 0x3e, 0x26, 0x20, 0xff, 0x3a, 0x23, 0x1d, 0xff, 0x33, 0x1c, 0x19, 0xff, 0x2a, 0x16, 0x16, 0xff, 0x27, 0x14, 0x13, 0xff, 0x2b, 0x17, 0x15, 0xff, 0x5f, 0x50, 0x50, 0xff, 0xdc, 0xd9, 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xf9, 0xfc, 0xff, 0xd9, 0xea, 0xf0, 0xff, 0xd4, 0xeb, 0xed, 0xff, 0xd1, 0xe9, 0xeb, 0xff, 0xd3, 0xe8, 0xef, 0xff, 0xd4, 0xe8, 0xee, 0xff, 0xd1, 0xe8, 0xea, 0xff, 0xd0, 0xe7, 0xec, 0xff, 0xd1, 0xe7, 0xec, 0xff, 0xd4, 0xeb, 0xed, 0xff, 0xd6, 0xef, 0xec, 0xff, 0xd3, 0xec, 0xea, 0xff, 0xd3, 0xea, 0xec, 0xff, 0xd2, 0xe8, 0xee, 0xff, 0xd1, 0xe7, 0xec, 0xff, 0xd0, 0xe7, 0xed, 0xff, 0xcf, 0xe6, 0xec, 0xff, 0xcf, 0xe6, 0xec, 0xff, 0xd4, 0xea, 0xef, 0xff, 0xbf, 0xd2, 0xe0, 0xff, 0xb8, 0xca, 0xda, 0xff, 0xda, 0xf3, 0xf0, 0xff, 0xcf, 0xe4, 0xea, 0xff, 0xcd, 0xe4, 0xec, 0xff, 0xcc, 0xe5, 0xeb, 0xff, 0xca, 0xe0, 0xe8, 0xff, 0xc7, 0xdb, 0xe4, 0xff, 0xc5, 0xda, 0xdf, 0xff, 0xc2, 0xd5, 0xe2, 0xff, 0xc6, 0xd8, 0xe7, 0xff, 0x9c, 0xa7, 0xbe, 0xff, 0x71, 0x78, 0x95, 0xff, 0xda, 0xf1, 0xf2, 0xff, 0xc9, 0xe6, 0xe9, 0xff, 0xbf, 0xdb, 0xe0, 0xff, 0xbc, 0xd0, 0xdc, 0xff, 0xb6, 0xc9, 0xd7, 0xff, 0xaf, 0xc2, 0xd2, 0xff, 0xab, 0xba, 0xce, 0xff, 0xa7, 0xb9, 0xc4, 0xff, 0x9b, 0xac, 0xb9, 0xff, 0x7f, 0x7e, 0x95, 0xff, 0x7c, 0x7f, 0x78, 0xff, 0x96, 0xa2, 0x88, 0xff, 0xbf, 0xc9, 0xb5, 0xff, 0xbd, 0xc0, 0xad, 0xff, 0x82, 0x72, 0x63, 0xff, 0x3e, 0x2b, 0x18, 0xff, 0x91, 0x96, 0x85, 0xff, 0xd9, 0xf3, 0xe9, 0xff, 0xd7, 0xec, 0xdb, 0xff, 0xa0, 0x99, 0x84, 0xff, 0x4b, 0x30, 0x1f, 0xff, 0x69, 0x5b, 0x46, 0xff, 0xd7, 0xe3, 0xbf, 0xff, 0xa9, 0xa7, 0x90, 0xff, 0x33, 0x15, 0x0c, 0xff, 0x52, 0x39, 0x2a, 0xff, 0xbc, 0xbb, 0x9f, 0xff, 0x95, 0x96, 0x84, 0xff, 0x45, 0x3a, 0x33, 0xff, 0x24, 0x0e, 0x0d, 0xff, 0x59, 0x4a, 0x3e, 0xff, 0x4f, 0x40, 0x35, 0xff, 0x1f, 0x04, 0x0c, 0xff, 0x22, 0x0e, 0x10, 0xff, 0x1e, 0x0c, 0x11, 0xff, 0x1c, 0x07, 0x0d, 0xff, 0x22, 0x09, 0x08, 0xff, 0x39, 0x24, 0x24, 0xff, 0x2c, 0x18, 0x17, 0xff, 0x25, 0x12, 0x0d, 0xff, 0x23, 0x0d, 0x12, 0xff, 0x27, 0x12, 0x13, 0xff, 0x2c, 0x17, 0x12, 0xff, 0x26, 0x10, 0x0d, 0xff, 0x2b, 0x15, 0x14, 0xff, 0x2c, 0x15, 0x16, 0xff, 0x21, 0x0c, 0x0e, 0xff, 0x27, 0x16, 0x16, 0xff, 0x1c, 0x0a, 0x0e, 0xff, 0x20, 0x0d, 0x0e, 0xff, 0x26, 0x14, 0x12, 0xff, 0x27, 0x15, 0x16, 0xff, 0x2d, 0x18, 0x19, 0xff, 0x29, 0x14, 0x14, 0xff, 0x2a, 0x16, 0x14, 0xff, 0x33, 0x1e, 0x19, 0xff, 0x3b, 0x25, 0x1b, 0xff, 0x3d, 0x27, 0x18, 0xff, 0x40, 0x2b, 0x1b, 0xff, 0x4e, 0x36, 0x23, 0xff, 0x4e, 0x35, 0x21, 0xff, 0x44, 0x2d, 0x1c, 0xff, 0x44, 0x2f, 0x20, 0xff, 0x44, 0x2d, 0x21, 0xff, 0x70, 0x5f, 0x57, 0xff, 0xde, 0xda, 0xd8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x18, 0xf6, 0xed, 0xe7, 0xc7, 0xf6, 0xed, 0xe7, 0xff, 0xf8, 0xf1, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf8, 0xf9, 0xff, 0xd6, 0xec, 0xed, 0xff, 0xd0, 0xe8, 0xe9, 0xff, 0xd1, 0xe7, 0xec, 0xff, 0xd1, 0xe8, 0xed, 0xff, 0xd2, 0xe8, 0xed, 0xff, 0xd2, 0xe6, 0xed, 0xff, 0xd2, 0xe7, 0xed, 0xff, 0xd4, 0xe9, 0xed, 0xff, 0xd4, 0xeb, 0xeb, 0xff, 0xd3, 0xea, 0xea, 0xff, 0xd3, 0xe8, 0xec, 0xff, 0xd2, 0xe8, 0xed, 0xff, 0xd2, 0xe6, 0xed, 0xff, 0xd1, 0xe6, 0xed, 0xff, 0xd0, 0xe5, 0xeb, 0xff, 0xcf, 0xe4, 0xeb, 0xff, 0xd0, 0xe6, 0xeb, 0xff, 0xcc, 0xe1, 0xe9, 0xff, 0xd5, 0xea, 0xf3, 0xff, 0xd3, 0xea, 0xec, 0xff, 0xd0, 0xe6, 0xeb, 0xff, 0xcb, 0xe3, 0xea, 0xff, 0xcc, 0xe3, 0xe9, 0xff, 0xca, 0xdf, 0xe7, 0xff, 0xc6, 0xdb, 0xe3, 0xff, 0xc3, 0xd5, 0xe2, 0xff, 0xbf, 0xd2, 0xde, 0xff, 0xc5, 0xd7, 0xe5, 0xff, 0x88, 0x91, 0xac, 0xff, 0xac, 0xbc, 0xc5, 0xff, 0xde, 0xf9, 0xfb, 0xff, 0xc1, 0xdb, 0xe2, 0xff, 0xbe, 0xd3, 0xdf, 0xff, 0xb9, 0xc9, 0xd8, 0xff, 0xb1, 0xc2, 0xd2, 0xff, 0xa9, 0xbc, 0xcd, 0xff, 0xa4, 0xb4, 0xc9, 0xff, 0x9c, 0xa9, 0xbc, 0xff, 0x78, 0x7e, 0x92, 0xff, 0x7f, 0x84, 0x8c, 0xff, 0xb3, 0xbe, 0xb6, 0xff, 0xb5, 0xbd, 0xaf, 0xff, 0xa0, 0x9c, 0x8a, 0xff, 0x55, 0x4a, 0x3c, 0xff, 0x34, 0x25, 0x1f, 0xff, 0x92, 0x92, 0x8d, 0xff, 0xdb, 0xf3, 0xec, 0xff, 0xbc, 0xd2, 0xc4, 0xff, 0xb0, 0xb2, 0x98, 0xff, 0x6a, 0x59, 0x40, 0xff, 0x57, 0x3e, 0x2b, 0xff, 0x96, 0x91, 0x7b, 0xff, 0x9f, 0x9e, 0x90, 0xff, 0x41, 0x33, 0x1f, 0xff, 0x59, 0x40, 0x2a, 0xff, 0x75, 0x62, 0x51, 0xff, 0x4c, 0x44, 0x3b, 0xff, 0x25, 0x19, 0x12, 0xff, 0x1f, 0x0b, 0x0c, 0xff, 0x1e, 0x0a, 0x0e, 0xff, 0x86, 0x7e, 0x6e, 0xff, 0x4b, 0x3c, 0x33, 0xff, 0x1a, 0x02, 0x0a, 0xff, 0x1f, 0x10, 0x12, 0xff, 0x20, 0x0f, 0x0c, 0xff, 0x4e, 0x39, 0x32, 0xff, 0x72, 0x6c, 0x5e, 0xff, 0x37, 0x26, 0x22, 0xff, 0x47, 0x34, 0x30, 0xff, 0x34, 0x22, 0x1e, 0xff, 0x24, 0x0e, 0x14, 0xff, 0x23, 0x0e, 0x10, 0xff, 0x21, 0x0f, 0x11, 0xff, 0x24, 0x11, 0x14, 0xff, 0x28, 0x13, 0x14, 0xff, 0x25, 0x11, 0x10, 0xff, 0x2c, 0x19, 0x18, 0xff, 0x29, 0x17, 0x19, 0xff, 0x25, 0x12, 0x14, 0xff, 0x2c, 0x19, 0x17, 0xff, 0x2e, 0x1a, 0x19, 0xff, 0x36, 0x20, 0x1b, 0xff, 0x48, 0x31, 0x21, 0xff, 0x52, 0x3a, 0x27, 0xff, 0x49, 0x2f, 0x21, 0xff, 0x46, 0x2e, 0x1d, 0xff, 0x58, 0x3d, 0x27, 0xff, 0x62, 0x45, 0x28, 0xff, 0x68, 0x4b, 0x2c, 0xff, 0x66, 0x4c, 0x29, 0xff, 0x64, 0x4b, 0x25, 0xff, 0x67, 0x4e, 0x29, 0xff, 0x6d, 0x54, 0x2f, 0xff, 0x94, 0x81, 0x67, 0xff, 0xe6, 0xe2, 0xdc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0x35, 0x20, 0x18, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x2b, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xf8, 0xf9, 0xff, 0xd9, 0xeb, 0xee, 0xff, 0xd1, 0xe7, 0xeb, 0xff, 0xcf, 0xe4, 0xea, 0xff, 0xd0, 0xe3, 0xeb, 0xff, 0xd2, 0xe4, 0xeb, 0xff, 0xd3, 0xe6, 0xeb, 0xff, 0xd3, 0xe7, 0xec, 0xff, 0xd4, 0xe8, 0xec, 0xff, 0xd5, 0xe9, 0xed, 0xff, 0xd3, 0xe7, 0xec, 0xff, 0xd2, 0xe6, 0xeb, 0xff, 0xd4, 0xe7, 0xed, 0xff, 0xd2, 0xe5, 0xed, 0xff, 0xd1, 0xe3, 0xea, 0xff, 0xd2, 0xe4, 0xeb, 0xff, 0xd3, 0xe6, 0xec, 0xff, 0xd5, 0xec, 0xef, 0xff, 0xd4, 0xea, 0xef, 0xff, 0xd0, 0xe6, 0xeb, 0xff, 0xcf, 0xe5, 0xeb, 0xff, 0xcc, 0xe2, 0xe8, 0xff, 0xcb, 0xe1, 0xe7, 0xff, 0xc8, 0xdd, 0xe5, 0xff, 0xc4, 0xd8, 0xdf, 0xff, 0xc1, 0xd2, 0xe1, 0xff, 0xc0, 0xd2, 0xdc, 0xff, 0xaa, 0xb8, 0xcb, 0xff, 0x8c, 0x96, 0xb2, 0xff, 0xd3, 0xeb, 0xea, 0xff, 0xc5, 0xe0, 0xe5, 0xff, 0xc3, 0xd9, 0xe3, 0xff, 0xba, 0xcb, 0xda, 0xff, 0xb5, 0xc4, 0xd5, 0xff, 0xb0, 0xc0, 0xd0, 0xff, 0xa5, 0xb6, 0xc7, 0xff, 0x9f, 0xad, 0xc3, 0xff, 0x93, 0x9f, 0xb4, 0xff, 0x86, 0x8f, 0x9f, 0xff, 0xc0, 0xd6, 0xcb, 0xff, 0xbf, 0xd8, 0xcd, 0xff, 0xa8, 0xad, 0xa6, 0xff, 0x61, 0x51, 0x45, 0xff, 0x44, 0x2f, 0x28, 0xff, 0x70, 0x69, 0x5c, 0xff, 0xb9, 0xc2, 0xb4, 0xff, 0xc5, 0xd6, 0xc4, 0xff, 0xbe, 0xc3, 0xa9, 0xff, 0x79, 0x6a, 0x52, 0xff, 0x2d, 0x1b, 0x10, 0xff, 0x68, 0x5b, 0x4e, 0xff, 0x7d, 0x6b, 0x59, 0xff, 0x31, 0x19, 0x14, 0xff, 0x7c, 0x66, 0x51, 0xff, 0x8b, 0x7c, 0x61, 0xff, 0x37, 0x28, 0x1d, 0xff, 0x16, 0x01, 0x09, 0xff, 0x2f, 0x19, 0x17, 0xff, 0x27, 0x10, 0x10, 0xff, 0x5e, 0x53, 0x4e, 0xff, 0x8e, 0x8a, 0x77, 0xff, 0x3f, 0x2f, 0x29, 0xff, 0x2e, 0x18, 0x17, 0xff, 0x20, 0x0d, 0x0e, 0xff, 0x0d, 0x00, 0x00, 0xff, 0x8e, 0x92, 0x80, 0xff, 0xdc, 0xf0, 0xd0, 0xff, 0x65, 0x53, 0x42, 0xff, 0x47, 0x31, 0x25, 0xff, 0x47, 0x35, 0x2e, 0xff, 0x2b, 0x17, 0x17, 0xff, 0x22, 0x0d, 0x11, 0xff, 0x25, 0x11, 0x15, 0xff, 0x26, 0x13, 0x14, 0xff, 0x24, 0x10, 0x0f, 0xff, 0x31, 0x1e, 0x1a, 0xff, 0x38, 0x25, 0x21, 0xff, 0x30, 0x1c, 0x19, 0xff, 0x35, 0x21, 0x1a, 0xff, 0x3a, 0x25, 0x1c, 0xff, 0x3d, 0x27, 0x1d, 0xff, 0x4a, 0x31, 0x21, 0xff, 0x5f, 0x47, 0x28, 0xff, 0x63, 0x48, 0x25, 0xff, 0x5c, 0x3f, 0x24, 0xff, 0x56, 0x40, 0x26, 0xff, 0x64, 0x4c, 0x2d, 0xff, 0x72, 0x58, 0x32, 0xff, 0x78, 0x5f, 0x36, 0xff, 0x71, 0x59, 0x31, 0xff, 0x72, 0x5b, 0x32, 0xff, 0x7c, 0x64, 0x3b, 0xff, 0xa1, 0x8f, 0x71, 0xff, 0xec, 0xe8, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x08, 0x5c, 0x42, 0x24, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf8, 0xfa, 0xff, 0xd5, 0xe4, 0xea, 0xff, 0xc7, 0xd9, 0xe4, 0xff, 0xc8, 0xda, 0xe6, 0xff, 0xce, 0xe0, 0xe8, 0xff, 0xd1, 0xe5, 0xea, 0xff, 0xd2, 0xe5, 0xeb, 0xff, 0xd2, 0xe5, 0xec, 0xff, 0xd3, 0xe6, 0xed, 0xff, 0xd3, 0xe6, 0xec, 0xff, 0xd3, 0xe7, 0xed, 0xff, 0xd3, 0xe6, 0xed, 0xff, 0xd0, 0xe3, 0xea, 0xff, 0xcd, 0xe0, 0xe7, 0xff, 0xd2, 0xe4, 0xeb, 0xff, 0xd3, 0xe7, 0xee, 0xff, 0xd1, 0xe8, 0xed, 0xff, 0xd0, 0xe6, 0xeb, 0xff, 0xce, 0xe4, 0xeb, 0xff, 0xcd, 0xe3, 0xe9, 0xff, 0xcc, 0xe2, 0xe7, 0xff, 0xca, 0xe0, 0xe7, 0xff, 0xc8, 0xdc, 0xe4, 0xff, 0xc5, 0xd8, 0xdf, 0xff, 0xbf, 0xd1, 0xd9, 0xff, 0xc5, 0xd5, 0xe1, 0xff, 0x8d, 0x97, 0xb2, 0xff, 0xa2, 0xb1, 0xc3, 0xff, 0xda, 0xf3, 0xf5, 0xff, 0xc2, 0xd9, 0xe0, 0xff, 0xbc, 0xcf, 0xdc, 0xff, 0xb5, 0xc6, 0xd6, 0xff, 0xb0, 0xc0, 0xd1, 0xff, 0xac, 0xbb, 0xcd, 0xff, 0xa5, 0xb5, 0xc5, 0xff, 0x95, 0xa3, 0xb6, 0xff, 0x90, 0x9d, 0xaa, 0xff, 0xc1, 0xd4, 0xd4, 0xff, 0xc2, 0xd8, 0xd1, 0xff, 0xb9, 0xc9, 0xc0, 0xff, 0x96, 0x94, 0x87, 0xff, 0x35, 0x28, 0x20, 0xff, 0x53, 0x47, 0x40, 0xff, 0x9b, 0x98, 0x89, 0xff, 0xb8, 0xc9, 0xba, 0xff, 0xc5, 0xd6, 0xc2, 0xff, 0x86, 0x80, 0x6c, 0xff, 0x46, 0x30, 0x26, 0xff, 0x63, 0x50, 0x44, 0xff, 0x72, 0x61, 0x53, 0xff, 0x36, 0x23, 0x18, 0xff, 0x8e, 0x85, 0x65, 0xff, 0xa4, 0x97, 0x7e, 0xff, 0x36, 0x22, 0x1e, 0xff, 0x24, 0x10, 0x10, 0xff, 0x2e, 0x17, 0x17, 0xff, 0x2b, 0x10, 0x12, 0xff, 0x46, 0x36, 0x2c, 0xff, 0xb4, 0xb3, 0x9a, 0xff, 0x7b, 0x76, 0x66, 0xff, 0x31, 0x1d, 0x17, 0xff, 0x47, 0x31, 0x26, 0xff, 0x51, 0x3c, 0x33, 0xff, 0x34, 0x1f, 0x1a, 0xff, 0x52, 0x49, 0x3f, 0xff, 0x7c, 0x73, 0x64, 0xff, 0x52, 0x40, 0x2f, 0xff, 0x43, 0x2d, 0x1c, 0xff, 0x3e, 0x27, 0x1e, 0xff, 0x3e, 0x29, 0x1f, 0xff, 0x3d, 0x28, 0x22, 0xff, 0x28, 0x12, 0x11, 0xff, 0x31, 0x1d, 0x1a, 0xff, 0x2f, 0x1a, 0x16, 0xff, 0x34, 0x1f, 0x1a, 0xff, 0x3b, 0x25, 0x1e, 0xff, 0x40, 0x28, 0x1d, 0xff, 0x4b, 0x34, 0x23, 0xff, 0x4c, 0x32, 0x20, 0xff, 0x52, 0x39, 0x23, 0xff, 0x57, 0x41, 0x24, 0xff, 0x60, 0x46, 0x29, 0xff, 0x6d, 0x53, 0x2f, 0xff, 0x75, 0x5e, 0x36, 0xff, 0x71, 0x5b, 0x33, 0xff, 0x75, 0x5e, 0x33, 0xff, 0x82, 0x6c, 0x3b, 0xff, 0x86, 0x71, 0x3f, 0xff, 0x84, 0x70, 0x3d, 0xff, 0x85, 0x70, 0x40, 0xff, 0xb4, 0xa5, 0x87, 0xff, 0xf2, 0xef, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0x10, 0x66, 0x4d, 0x2c, 0x00, 0x5d, 0x44, 0x25, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf7, 0xf9, 0xff, 0xd5, 0xe0, 0xe8, 0xff, 0xc5, 0xd6, 0xe3, 0xff, 0xcb, 0xde, 0xe7, 0xff, 0xcf, 0xe3, 0xe8, 0xff, 0xd1, 0xe5, 0xeb, 0xff, 0xd2, 0xe4, 0xec, 0xff, 0xd2, 0xe4, 0xec, 0xff, 0xd2, 0xe5, 0xec, 0xff, 0xd2, 0xe5, 0xec, 0xff, 0xd0, 0xe3, 0xea, 0xff, 0xcb, 0xde, 0xe5, 0xff, 0xcc, 0xdf, 0xe6, 0xff, 0xd1, 0xe4, 0xeb, 0xff, 0xd3, 0xe5, 0xec, 0xff, 0xd1, 0xe5, 0xeb, 0xff, 0xd0, 0xe4, 0xea, 0xff, 0xcf, 0xe2, 0xea, 0xff, 0xce, 0xe2, 0xe8, 0xff, 0xcd, 0xe1, 0xe7, 0xff, 0xcb, 0xde, 0xe7, 0xff, 0xc8, 0xd9, 0xe5, 0xff, 0xc3, 0xd6, 0xdf, 0xff, 0xc2, 0xd4, 0xd8, 0xff, 0xb6, 0xc3, 0xd1, 0xff, 0x94, 0xa1, 0xb5, 0xff, 0xcd, 0xe4, 0xeb, 0xff, 0xc5, 0xde, 0xe4, 0xff, 0xbf, 0xd3, 0xdd, 0xff, 0xb5, 0xc5, 0xd5, 0xff, 0xb3, 0xc3, 0xd3, 0xff, 0xad, 0xbd, 0xce, 0xff, 0xa5, 0xb4, 0xc5, 0xff, 0xa5, 0xb0, 0xbe, 0xff, 0x8b, 0x95, 0xa8, 0xff, 0xae, 0xc0, 0xc5, 0xff, 0xce, 0xe0, 0xd9, 0xff, 0xb5, 0xc5, 0xbe, 0xff, 0x89, 0x8a, 0x7e, 0xff, 0x5c, 0x4d, 0x40, 0xff, 0x62, 0x5c, 0x50, 0xff, 0xab, 0xb4, 0xa8, 0xff, 0xdc, 0xf3, 0xe9, 0xff, 0xc1, 0xd9, 0xcf, 0xff, 0xa3, 0xad, 0xa2, 0xff, 0x89, 0x88, 0x7d, 0xff, 0x73, 0x6e, 0x67, 0xff, 0x92, 0x88, 0x78, 0xff, 0x64, 0x54, 0x41, 0xff, 0x78, 0x7c, 0x69, 0xff, 0xbd, 0xc3, 0xab, 0xff, 0x2b, 0x1d, 0x16, 0xff, 0x44, 0x34, 0x2e, 0xff, 0x42, 0x2d, 0x27, 0xff, 0x53, 0x42, 0x33, 0xff, 0x4a, 0x39, 0x32, 0xff, 0x65, 0x5b, 0x4c, 0xff, 0xc3, 0xc9, 0xac, 0xff, 0x85, 0x80, 0x74, 0xff, 0x4e, 0x3d, 0x31, 0xff, 0x6f, 0x64, 0x52, 0xff, 0xa4, 0xa0, 0x8f, 0xff, 0x7c, 0x78, 0x6a, 0xff, 0x21, 0x05, 0x02, 0xff, 0x28, 0x07, 0x0a, 0xff, 0x2d, 0x1f, 0x18, 0xff, 0x65, 0x58, 0x48, 0xff, 0x46, 0x2f, 0x25, 0xff, 0x45, 0x2d, 0x20, 0xff, 0x4e, 0x37, 0x2e, 0xff, 0x33, 0x20, 0x19, 0xff, 0x33, 0x21, 0x19, 0xff, 0x3a, 0x25, 0x1d, 0xff, 0x3b, 0x25, 0x1e, 0xff, 0x44, 0x2a, 0x20, 0xff, 0x4f, 0x34, 0x23, 0xff, 0x57, 0x3d, 0x26, 0xff, 0x5e, 0x45, 0x29, 0xff, 0x62, 0x4b, 0x2c, 0xff, 0x5e, 0x4b, 0x27, 0xff, 0x67, 0x51, 0x2d, 0xff, 0x7c, 0x65, 0x3c, 0xff, 0x79, 0x61, 0x35, 0xff, 0x7b, 0x61, 0x39, 0xff, 0x7c, 0x61, 0x38, 0xff, 0x6c, 0x52, 0x2f, 0xff, 0x53, 0x3b, 0x27, 0xff, 0x58, 0x44, 0x31, 0xff, 0xa2, 0x96, 0x8d, 0xff, 0xf3, 0xf2, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0x20, 0x70, 0x5a, 0x38, 0x00, 0x65, 0x50, 0x2e, 0x00, 0x57, 0x41, 0x20, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf8, 0xf1, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xfb, 0xfc, 0xff, 0xdf, 0xe7, 0xed, 0xff, 0xca, 0xdb, 0xe2, 0xff, 0xcd, 0xe2, 0xe6, 0xff, 0xd0, 0xe4, 0xe9, 0xff, 0xce, 0xe1, 0xe7, 0xff, 0xd0, 0xe3, 0xe8, 0xff, 0xd2, 0xe4, 0xea, 0xff, 0xd0, 0xe3, 0xe9, 0xff, 0xcb, 0xde, 0xe4, 0xff, 0xc9, 0xdc, 0xe3, 0xff, 0xce, 0xe0, 0xe7, 0xff, 0xd1, 0xe3, 0xea, 0xff, 0xd1, 0xe3, 0xea, 0xff, 0xd1, 0xe4, 0xeb, 0xff, 0xd1, 0xe4, 0xeb, 0xff, 0xd1, 0xe4, 0xeb, 0xff, 0xce, 0xe1, 0xe7, 0xff, 0xcd, 0xdf, 0xe7, 0xff, 0xc8, 0xd9, 0xe3, 0xff, 0xc4, 0xd5, 0xe2, 0xff, 0xc3, 0xd4, 0xde, 0xff, 0xce, 0xdd, 0xe5, 0xff, 0xa2, 0xae, 0xbe, 0xff, 0xab, 0xba, 0xca, 0xff, 0xd7, 0xee, 0xf5, 0xff, 0xbe, 0xd5, 0xdd, 0xff, 0xba, 0xcd, 0xd9, 0xff, 0xb2, 0xc2, 0xd1, 0xff, 0xaf, 0xbe, 0xce, 0xff, 0xac, 0xba, 0xca, 0xff, 0xa5, 0xaf, 0xc1, 0xff, 0x90, 0x96, 0xb0, 0xff, 0x86, 0x89, 0xa5, 0xff, 0xa7, 0xaf, 0xb5, 0xff, 0xa0, 0xa8, 0x9f, 0xff, 0x8c, 0x88, 0x7e, 0xff, 0x7d, 0x77, 0x6a, 0xff, 0x5f, 0x5c, 0x50, 0xff, 0xb9, 0xc0, 0xb6, 0xff, 0xe1, 0xfb, 0xf1, 0xff, 0xb3, 0xcf, 0xc7, 0xff, 0xae, 0xc2, 0xb8, 0xff, 0xa8, 0xb2, 0xa5, 0xff, 0x86, 0x90, 0x84, 0xff, 0xac, 0xbb, 0xb2, 0xff, 0xc3, 0xd2, 0xc7, 0xff, 0xb6, 0xc2, 0xb5, 0xff, 0xd3, 0xe4, 0xd4, 0xff, 0x82, 0x82, 0x77, 0xff, 0x4e, 0x3e, 0x3b, 0xff, 0x9f, 0xa5, 0x97, 0xff, 0x69, 0x63, 0x54, 0xff, 0xa2, 0x9c, 0x87, 0xff, 0x8d, 0x8e, 0x7f, 0xff, 0x90, 0x95, 0x86, 0xff, 0xcb, 0xd8, 0xc2, 0xff, 0x8a, 0x8c, 0x7e, 0xff, 0x8e, 0x89, 0x79, 0xff, 0xa3, 0xa5, 0x91, 0xff, 0xab, 0xb6, 0xa4, 0xff, 0xbd, 0xc9, 0xb7, 0xff, 0x65, 0x56, 0x4b, 0xff, 0x50, 0x38, 0x26, 0xff, 0x49, 0x34, 0x2d, 0xff, 0x4a, 0x3a, 0x35, 0xff, 0x3c, 0x28, 0x1d, 0xff, 0x4c, 0x34, 0x29, 0xff, 0x3c, 0x26, 0x1d, 0xff, 0x40, 0x2c, 0x24, 0xff, 0x3d, 0x28, 0x1f, 0xff, 0x42, 0x2c, 0x1f, 0xff, 0x45, 0x2e, 0x20, 0xff, 0x4a, 0x33, 0x22, 0xff, 0x50, 0x39, 0x24, 0xff, 0x5b, 0x46, 0x28, 0xff, 0x66, 0x52, 0x2d, 0xff, 0x6b, 0x52, 0x2f, 0xff, 0x7a, 0x5e, 0x3a, 0xff, 0x7c, 0x65, 0x37, 0xff, 0x6f, 0x59, 0x2f, 0xff, 0x61, 0x48, 0x2a, 0xff, 0x5f, 0x48, 0x2a, 0xff, 0x50, 0x38, 0x21, 0xff, 0x3a, 0x23, 0x1a, 0xff, 0x3b, 0x2c, 0x2e, 0xff, 0xa8, 0xa1, 0xa5, 0xff, 0xfb, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0x20, 0x6c, 0x52, 0x2e, 0x00, 0x66, 0x4e, 0x29, 0x00, 0x61, 0x47, 0x25, 0x00, 0x5f, 0x44, 0x25, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xdb, 0xf6, 0xfe, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0xff, 0xf8, 0xf1, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfe, 0xff, 0xe7, 0xee, 0xf1, 0xff, 0xd0, 0xe0, 0xe7, 0xff, 0xc9, 0xdc, 0xe6, 0xff, 0xca, 0xdd, 0xe5, 0xff, 0xc9, 0xdb, 0xe3, 0xff, 0xc9, 0xdb, 0xe3, 0xff, 0xcb, 0xdb, 0xe3, 0xff, 0xc7, 0xd7, 0xdf, 0xff, 0xc7, 0xd8, 0xe0, 0xff, 0xcc, 0xde, 0xe5, 0xff, 0xcf, 0xe2, 0xe8, 0xff, 0xce, 0xe2, 0xe9, 0xff, 0xd1, 0xe4, 0xeb, 0xff, 0xd0, 0xe4, 0xeb, 0xff, 0xcf, 0xe3, 0xea, 0xff, 0xce, 0xe2, 0xe8, 0xff, 0xcc, 0xdc, 0xe5, 0xff, 0xc7, 0xd7, 0xe2, 0xff, 0xc3, 0xd3, 0xe0, 0xff, 0xc2, 0xd3, 0xdc, 0xff, 0xc7, 0xd7, 0xe1, 0xff, 0x91, 0x9f, 0xb0, 0xff, 0xb9, 0xc8, 0xd8, 0xff, 0xca, 0xe0, 0xe8, 0xff, 0xbc, 0xd1, 0xda, 0xff, 0xb7, 0xc8, 0xd4, 0xff, 0xb1, 0xc2, 0xce, 0xff, 0xaf, 0xbd, 0xcd, 0xff, 0xa3, 0xaf, 0xbe, 0xff, 0x93, 0x9d, 0xb4, 0xff, 0x77, 0x80, 0xa8, 0xff, 0x68, 0x6c, 0x8c, 0xff, 0x81, 0x7f, 0x84, 0xff, 0x73, 0x73, 0x63, 0xff, 0x9a, 0x98, 0x88, 0xff, 0x75, 0x6e, 0x63, 0xff, 0x82, 0x88, 0x7d, 0xff, 0xda, 0xf4, 0xea, 0xff, 0xb4, 0xcf, 0xc9, 0xff, 0xae, 0xc4, 0xbe, 0xff, 0xc4, 0xd2, 0xca, 0xff, 0x85, 0x8a, 0x80, 0xff, 0x83, 0x89, 0x80, 0xff, 0xc9, 0xda, 0xd5, 0xff, 0xc6, 0xdb, 0xd8, 0xff, 0xbc, 0xd5, 0xcf, 0xff, 0xc5, 0xd7, 0xcf, 0xff, 0x5b, 0x51, 0x4c, 0xff, 0x6e, 0x64, 0x5e, 0xff, 0xc8, 0xda, 0xce, 0xff, 0xa4, 0xb8, 0xa6, 0xff, 0xa3, 0xae, 0x99, 0xff, 0xae, 0xb6, 0xa5, 0xff, 0x90, 0x92, 0x83, 0xff, 0x89, 0x8f, 0x80, 0xff, 0x91, 0x94, 0x87, 0xff, 0x7d, 0x7c, 0x71, 0xff, 0xbc, 0xbf, 0xb4, 0xff, 0x65, 0x67, 0x5d, 0xff, 0x95, 0x94, 0x7c, 0xff, 0x7d, 0x6e, 0x58, 0xff, 0x50, 0x39, 0x26, 0xff, 0x3f, 0x28, 0x1e, 0xff, 0x1a, 0x06, 0x06, 0xff, 0x40, 0x2d, 0x25, 0xff, 0x4c, 0x36, 0x2a, 0xff, 0x3e, 0x28, 0x1c, 0xff, 0x43, 0x2b, 0x22, 0xff, 0x48, 0x2f, 0x25, 0xff, 0x4d, 0x34, 0x23, 0xff, 0x50, 0x38, 0x23, 0xff, 0x54, 0x3c, 0x25, 0xff, 0x5a, 0x41, 0x28, 0xff, 0x64, 0x4c, 0x2d, 0xff, 0x6e, 0x55, 0x32, 0xff, 0x74, 0x5b, 0x36, 0xff, 0x73, 0x5b, 0x35, 0xff, 0x5b, 0x43, 0x28, 0xff, 0x42, 0x2b, 0x1f, 0xff, 0x2e, 0x19, 0x13, 0xff, 0x1e, 0x0a, 0x0d, 0xff, 0x1a, 0x06, 0x0e, 0xff, 0x55, 0x44, 0x49, 0xff, 0xcc, 0xc7, 0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0x20, 0x4f, 0x39, 0x23, 0x00, 0x52, 0x3b, 0x21, 0x00, 0x53, 0x3b, 0x21, 0x00, 0x53, 0x39, 0x21, 0x00, 0x52, 0x38, 0x20, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc7, 0xde, 0xe2, 0x00, 0xc4, 0xda, 0xde, 0x00, 0xf6, 0xed, 0xe7, 0x43, 0xf6, 0xed, 0xe7, 0xdf, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xfe, 0xfe, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf4, 0xf7, 0xff, 0xcf, 0xd9, 0xe7, 0xff, 0xb6, 0xc5, 0xda, 0xff, 0xb7, 0xc5, 0xda, 0xff, 0xbd, 0xcb, 0xdd, 0xff, 0xbe, 0xcb, 0xd9, 0xff, 0xc4, 0xd1, 0xde, 0xff, 0xc9, 0xd7, 0xe1, 0xff, 0xcc, 0xdb, 0xe4, 0xff, 0xce, 0xe1, 0xe8, 0xff, 0xce, 0xe1, 0xe9, 0xff, 0xd0, 0xe2, 0xea, 0xff, 0xd0, 0xe2, 0xe9, 0xff, 0xce, 0xe1, 0xe7, 0xff, 0xcd, 0xe0, 0xe7, 0xff, 0xcb, 0xdc, 0xe6, 0xff, 0xc3, 0xd3, 0xe1, 0xff, 0xc0, 0xd0, 0xdd, 0xff, 0xc1, 0xd3, 0xdb, 0xff, 0xbe, 0xcf, 0xd5, 0xff, 0xb1, 0xc1, 0xcd, 0xff, 0xc4, 0xd9, 0xe3, 0xff, 0xc3, 0xd9, 0xe1, 0xff, 0xbb, 0xcc, 0xd8, 0xff, 0xb4, 0xc4, 0xd1, 0xff, 0xad, 0xbd, 0xcb, 0xff, 0xa6, 0xb1, 0xc4, 0xff, 0x92, 0x9b, 0xb3, 0xff, 0x77, 0x7f, 0xa1, 0xff, 0x57, 0x5b, 0x87, 0xff, 0x4a, 0x4b, 0x63, 0xff, 0x71, 0x6d, 0x6a, 0xff, 0xa4, 0xa2, 0x93, 0xff, 0x9a, 0xa1, 0x90, 0xff, 0x72, 0x71, 0x65, 0xff, 0xc0, 0xcd, 0xc3, 0xff, 0xb1, 0xc3, 0xbb, 0xff, 0x8b, 0x93, 0x8c, 0xff, 0xa9, 0xae, 0xaa, 0xff, 0x8b, 0x8f, 0x8b, 0xff, 0x73, 0x70, 0x6d, 0xff, 0x7c, 0x77, 0x73, 0xff, 0x99, 0xa0, 0x9b, 0xff, 0x8b, 0x93, 0x90, 0xff, 0x8d, 0x94, 0x8d, 0xff, 0x83, 0x7e, 0x77, 0xff, 0x39, 0x2a, 0x29, 0xff, 0x66, 0x67, 0x5d, 0xff, 0xa5, 0xaa, 0xa1, 0xff, 0x8b, 0x95, 0x8c, 0xff, 0x8d, 0x93, 0x86, 0xff, 0xa9, 0xaa, 0x99, 0xff, 0x66, 0x5a, 0x4e, 0xff, 0x40, 0x33, 0x27, 0xff, 0x77, 0x6c, 0x57, 0xff, 0x58, 0x4b, 0x3e, 0xff, 0x68, 0x5e, 0x56, 0xff, 0x51, 0x42, 0x34, 0xff, 0x44, 0x2e, 0x21, 0xff, 0x46, 0x34, 0x25, 0xff, 0x36, 0x21, 0x1d, 0xff, 0x3d, 0x29, 0x23, 0xff, 0x2b, 0x17, 0x15, 0xff, 0x36, 0x23, 0x1d, 0xff, 0x3e, 0x28, 0x1e, 0xff, 0x49, 0x31, 0x28, 0xff, 0x46, 0x2d, 0x23, 0xff, 0x44, 0x2b, 0x1e, 0xff, 0x53, 0x3a, 0x27, 0xff, 0x5d, 0x45, 0x2b, 0xff, 0x5d, 0x45, 0x27, 0xff, 0x66, 0x4e, 0x2d, 0xff, 0x62, 0x4c, 0x2d, 0xff, 0x5c, 0x45, 0x2c, 0xff, 0x48, 0x33, 0x20, 0xff, 0x30, 0x1d, 0x12, 0xff, 0x31, 0x1b, 0x17, 0xff, 0x39, 0x21, 0x1c, 0xff, 0x3e, 0x29, 0x1b, 0xff, 0x53, 0x42, 0x2e, 0xff, 0xa2, 0x99, 0x8b, 0xff, 0xeb, 0xe9, 0xe4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0x18, 0x21, 0x11, 0x13, 0x00, 0x23, 0x11, 0x10, 0x00, 0x21, 0x0d, 0x0e, 0x00, 0x24, 0x10, 0x10, 0x00, 0x25, 0x11, 0x11, 0x00, 0x27, 0x12, 0x0f, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc7, 0xdc, 0xdf, 0x00, 0xc6, 0xda, 0xdd, 0x00, 0xbf, 0xd4, 0xd9, 0x00, 0xf6, 0xed, 0xe7, 0x33, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xf7, 0xfa, 0xff, 0xcf, 0xd5, 0xe4, 0xff, 0xb7, 0xc2, 0xd9, 0xff, 0xb3, 0xbe, 0xd3, 0xff, 0xb5, 0xc2, 0xd0, 0xff, 0xc1, 0xce, 0xdb, 0xff, 0xca, 0xd7, 0xe3, 0xff, 0xcf, 0xdf, 0xe7, 0xff, 0xd0, 0xe3, 0xe8, 0xff, 0xd0, 0xe4, 0xe6, 0xff, 0xcf, 0xe3, 0xe7, 0xff, 0xcf, 0xe2, 0xe8, 0xff, 0xcd, 0xdf, 0xe7, 0xff, 0xc8, 0xda, 0xe1, 0xff, 0xc6, 0xd7, 0xe0, 0xff, 0xc0, 0xd0, 0xda, 0xff, 0xc0, 0xd0, 0xda, 0xff, 0xc2, 0xd2, 0xda, 0xff, 0xc3, 0xd5, 0xda, 0xff, 0xc5, 0xda, 0xe0, 0xff, 0xc5, 0xda, 0xe1, 0xff, 0xc0, 0xd4, 0xdb, 0xff, 0xb8, 0xc9, 0xd2, 0xff, 0xb2, 0xc2, 0xcc, 0xff, 0xaa, 0xb5, 0xc4, 0xff, 0x90, 0x96, 0xaf, 0xff, 0x74, 0x77, 0x9c, 0xff, 0x62, 0x64, 0x8a, 0xff, 0x4c, 0x48, 0x67, 0xff, 0x69, 0x63, 0x6b, 0xff, 0x73, 0x6d, 0x65, 0xff, 0x81, 0x7e, 0x72, 0xff, 0x97, 0x9d, 0x91, 0xff, 0xa6, 0xaf, 0xa5, 0xff, 0x9c, 0x9c, 0x97, 0xff, 0x52, 0x4b, 0x4d, 0xff, 0x3b, 0x2c, 0x31, 0xff, 0x70, 0x5f, 0x58, 0xff, 0x4b, 0x45, 0x3a, 0xff, 0x58, 0x4e, 0x4e, 0xff, 0x49, 0x3e, 0x3b, 0xff, 0x8d, 0x90, 0x84, 0xff, 0x88, 0x85, 0x78, 0xff, 0x47, 0x39, 0x32, 0xff, 0x40, 0x2b, 0x29, 0xff, 0x58, 0x49, 0x48, 0xff, 0x71, 0x6d, 0x62, 0xff, 0x5b, 0x50, 0x4e, 0xff, 0x45, 0x36, 0x36, 0xff, 0x69, 0x5e, 0x55, 0xff, 0x76, 0x6c, 0x5f, 0xff, 0x3f, 0x2f, 0x26, 0xff, 0x38, 0x23, 0x1c, 0xff, 0x49, 0x35, 0x27, 0xff, 0x4c, 0x36, 0x2a, 0xff, 0x48, 0x31, 0x23, 0xff, 0x5f, 0x4a, 0x37, 0xff, 0x32, 0x1e, 0x1a, 0xff, 0x25, 0x13, 0x15, 0xff, 0x2d, 0x1a, 0x1a, 0xff, 0x31, 0x1c, 0x1a, 0xff, 0x38, 0x24, 0x1c, 0xff, 0x37, 0x23, 0x1d, 0xff, 0x3b, 0x25, 0x20, 0xff, 0x3e, 0x27, 0x1f, 0xff, 0x43, 0x2d, 0x22, 0xff, 0x4d, 0x38, 0x27, 0xff, 0x56, 0x41, 0x29, 0xff, 0x57, 0x3f, 0x27, 0xff, 0x4b, 0x34, 0x25, 0xff, 0x39, 0x25, 0x1f, 0xff, 0x27, 0x13, 0x14, 0xff, 0x1f, 0x0b, 0x0d, 0xff, 0x34, 0x1e, 0x19, 0xff, 0x59, 0x42, 0x2e, 0xff, 0x6e, 0x59, 0x3b, 0xff, 0x7a, 0x65, 0x3c, 0xff, 0x93, 0x82, 0x5b, 0xff, 0xd2, 0xca, 0xb9, 0xff, 0xfa, 0xf9, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x10, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x05, 0x00, 0x1a, 0x08, 0x0d, 0x00, 0x2a, 0x13, 0x11, 0x00, 0x36, 0x1f, 0x16, 0x00, 0x3e, 0x27, 0x1e, 0x00, 0x3f, 0x30, 0x23, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc9, 0xdc, 0xe0, 0x00, 0xc4, 0xd9, 0xde, 0x00, 0xbd, 0xd1, 0xd6, 0x00, 0xba, 0xcb, 0xd4, 0x00, 0xf6, 0xed, 0xe7, 0x20, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xe9, 0xec, 0xf2, 0xff, 0xc6, 0xcd, 0xdc, 0xff, 0xbc, 0xc8, 0xd6, 0xff, 0xc1, 0xd0, 0xd9, 0xff, 0xc9, 0xd9, 0xe0, 0xff, 0xcf, 0xdf, 0xe7, 0xff, 0xcf, 0xe0, 0xe8, 0xff, 0xce, 0xdf, 0xe8, 0xff, 0xd0, 0xe2, 0xea, 0xff, 0xcf, 0xe0, 0xe7, 0xff, 0xcc, 0xdd, 0xe3, 0xff, 0xc7, 0xd6, 0xdd, 0xff, 0xc0, 0xcd, 0xd7, 0xff, 0xbf, 0xcd, 0xd6, 0xff, 0xbf, 0xce, 0xd6, 0xff, 0xc3, 0xd1, 0xda, 0xff, 0xc5, 0xd7, 0xde, 0xff, 0xc7, 0xdb, 0xe1, 0xff, 0xc5, 0xd8, 0xe0, 0xff, 0xbd, 0xce, 0xd7, 0xff, 0xb9, 0xc9, 0xd2, 0xff, 0xb3, 0xc1, 0xcb, 0xff, 0x9d, 0xa4, 0xb6, 0xff, 0x7a, 0x7c, 0x9c, 0xff, 0x63, 0x63, 0x8e, 0xff, 0x51, 0x4f, 0x72, 0xff, 0x35, 0x33, 0x3f, 0xff, 0x61, 0x5d, 0x5b, 0xff, 0x69, 0x62, 0x5d, 0xff, 0x8f, 0x94, 0x89, 0xff, 0xbb, 0xcb, 0xc1, 0xff, 0x97, 0x9c, 0x99, 0xff, 0x59, 0x4e, 0x50, 0xff, 0x27, 0x17, 0x1e, 0xff, 0x3f, 0x2b, 0x2c, 0xff, 0x55, 0x3e, 0x33, 0xff, 0x4f, 0x42, 0x37, 0xff, 0x4b, 0x43, 0x3d, 0xff, 0x5a, 0x53, 0x4a, 0xff, 0x98, 0x97, 0x86, 0xff, 0x5f, 0x53, 0x46, 0xff, 0x1a, 0x03, 0x03, 0xff, 0x34, 0x22, 0x22, 0xff, 0x38, 0x27, 0x27, 0xff, 0x4a, 0x3b, 0x34, 0xff, 0x56, 0x48, 0x46, 0xff, 0x57, 0x48, 0x46, 0xff, 0x33, 0x25, 0x1a, 0xff, 0x56, 0x46, 0x39, 0xff, 0x47, 0x35, 0x2c, 0xff, 0x2e, 0x1a, 0x1b, 0xff, 0x1f, 0x09, 0x12, 0xff, 0x24, 0x0d, 0x11, 0xff, 0x32, 0x1b, 0x19, 0xff, 0x2f, 0x19, 0x15, 0xff, 0x26, 0x13, 0x10, 0xff, 0x27, 0x15, 0x17, 0xff, 0x28, 0x16, 0x16, 0xff, 0x2f, 0x1b, 0x18, 0xff, 0x36, 0x1f, 0x1c, 0xff, 0x3b, 0x24, 0x1f, 0xff, 0x43, 0x2e, 0x24, 0xff, 0x44, 0x30, 0x20, 0xff, 0x4d, 0x38, 0x25, 0xff, 0x4c, 0x37, 0x25, 0xff, 0x3d, 0x2a, 0x1f, 0xff, 0x29, 0x15, 0x16, 0xff, 0x1c, 0x08, 0x0d, 0xff, 0x16, 0x04, 0x09, 0xff, 0x1f, 0x0c, 0x10, 0xff, 0x2e, 0x19, 0x19, 0xff, 0x45, 0x2f, 0x23, 0xff, 0x54, 0x3b, 0x22, 0xff, 0x5e, 0x47, 0x2e, 0xff, 0x9b, 0x8d, 0x7c, 0xff, 0xe4, 0xe0, 0xdb, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x08, 0x83, 0x6c, 0x44, 0x00, 0x5b, 0x46, 0x2b, 0x00, 0x42, 0x2b, 0x1a, 0x00, 0x4d, 0x35, 0x21, 0x00, 0x5c, 0x48, 0x26, 0x00, 0x71, 0x58, 0x32, 0x00, 0x7b, 0x5e, 0x37, 0x00, 0x70, 0x59, 0x35, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc7, 0xdb, 0xdf, 0x00, 0xc0, 0xd3, 0xd9, 0x00, 0xbb, 0xcd, 0xd4, 0x00, 0xb4, 0xc5, 0xce, 0x00, 0xb0, 0xbd, 0xcb, 0x00, 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf8, 0xfa, 0xff, 0xe1, 0xe5, 0xec, 0xff, 0xcd, 0xd6, 0xe0, 0xff, 0xc6, 0xd6, 0xdd, 0xff, 0xc9, 0xd9, 0xe0, 0xff, 0xca, 0xda, 0xe2, 0xff, 0xcb, 0xdc, 0xe4, 0xff, 0xd0, 0xe0, 0xe6, 0xff, 0xcc, 0xda, 0xe0, 0xff, 0xc8, 0xd4, 0xdc, 0xff, 0xc4, 0xcd, 0xd8, 0xff, 0xc1, 0xcc, 0xd9, 0xff, 0xbf, 0xcb, 0xd7, 0xff, 0xc1, 0xce, 0xd7, 0xff, 0xc3, 0xd3, 0xda, 0xff, 0xc9, 0xdb, 0xe0, 0xff, 0xc7, 0xdb, 0xe0, 0xff, 0xc2, 0xd5, 0xdd, 0xff, 0xbc, 0xcc, 0xd8, 0xff, 0xb8, 0xc4, 0xd0, 0xff, 0xad, 0xb7, 0xc5, 0xff, 0x8a, 0x8e, 0xa9, 0xff, 0x6d, 0x70, 0x96, 0xff, 0x5c, 0x59, 0x82, 0xff, 0x26, 0x1e, 0x38, 0xff, 0x39, 0x36, 0x36, 0xff, 0x81, 0x7f, 0x75, 0xff, 0x89, 0x8a, 0x85, 0xff, 0xb3, 0xc2, 0xbb, 0xff, 0xbb, 0xcd, 0xc8, 0xff, 0x72, 0x72, 0x74, 0xff, 0x28, 0x19, 0x22, 0xff, 0x46, 0x34, 0x36, 0xff, 0x7a, 0x6a, 0x55, 0xff, 0x42, 0x2e, 0x22, 0xff, 0x46, 0x36, 0x36, 0xff, 0x4c, 0x48, 0x3e, 0xff, 0x7b, 0x79, 0x6d, 0xff, 0x78, 0x6b, 0x60, 0xff, 0x1c, 0x05, 0x00, 0xff, 0x2a, 0x14, 0x16, 0xff, 0x42, 0x2f, 0x2b, 0xff, 0x29, 0x13, 0x14, 0xff, 0x26, 0x13, 0x12, 0xff, 0x4c, 0x3c, 0x34, 0xff, 0x3d, 0x29, 0x2a, 0xff, 0x1c, 0x05, 0x0a, 0xff, 0x33, 0x1e, 0x1e, 0xff, 0x38, 0x21, 0x23, 0xff, 0x1f, 0x09, 0x0d, 0xff, 0x22, 0x0c, 0x10, 0xff, 0x27, 0x13, 0x19, 0xff, 0x1f, 0x0c, 0x11, 0xff, 0x28, 0x14, 0x16, 0xff, 0x2d, 0x17, 0x19, 0xff, 0x28, 0x15, 0x17, 0xff, 0x2c, 0x19, 0x1a, 0xff, 0x31, 0x1c, 0x1b, 0xff, 0x34, 0x1d, 0x1c, 0xff, 0x3e, 0x29, 0x1f, 0xff, 0x51, 0x3c, 0x2b, 0xff, 0x4e, 0x37, 0x2b, 0xff, 0x3b, 0x26, 0x1e, 0xff, 0x25, 0x10, 0x0f, 0xff, 0x1c, 0x05, 0x0b, 0xff, 0x22, 0x0f, 0x12, 0xff, 0x34, 0x1e, 0x18, 0xff, 0x4e, 0x36, 0x24, 0xff, 0x5f, 0x4a, 0x2f, 0xff, 0x5d, 0x47, 0x2b, 0xff, 0x57, 0x40, 0x2a, 0xff, 0x7c, 0x6e, 0x5b, 0xff, 0xc6, 0xbf, 0xb5, 0xff, 0xfb, 0xfa, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xf8, 0xf0, 0xec, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0x32, 0x20, 0x17, 0x00, 0x36, 0x23, 0x17, 0x00, 0x4b, 0x32, 0x1d, 0x00, 0x6d, 0x56, 0x32, 0x00, 0x7f, 0x63, 0x39, 0x00, 0x7d, 0x5f, 0x36, 0x00, 0x5d, 0x44, 0x28, 0x00, 0x4c, 0x39, 0x1d, 0x00, 0x5d, 0x48, 0x25, 0x00, 0x32, 0x1b, 0x10, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc4, 0xd8, 0xdd, 0x00, 0xbb, 0xcd, 0xd3, 0x00, 0xb7, 0xc9, 0xd0, 0x00, 0xb6, 0xc7, 0xcf, 0x00, 0xb0, 0xbd, 0xca, 0x00, 0xa9, 0xb6, 0xc3, 0x00, 0xa9, 0xb4, 0xc1, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xfe, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xf4, 0xf7, 0xff, 0xdd, 0xe4, 0xec, 0xff, 0xca, 0xd6, 0xe0, 0xff, 0xc5, 0xd4, 0xdb, 0xff, 0xc3, 0xd2, 0xdc, 0xff, 0xb7, 0xc4, 0xd6, 0xff, 0xbb, 0xc7, 0xd4, 0xff, 0xc1, 0xcb, 0xd7, 0xff, 0xbf, 0xc8, 0xd7, 0xff, 0xbe, 0xc8, 0xd5, 0xff, 0xbe, 0xc9, 0xd5, 0xff, 0xbf, 0xcb, 0xd5, 0xff, 0xc2, 0xd2, 0xd8, 0xff, 0xc8, 0xd8, 0xde, 0xff, 0xc6, 0xd8, 0xdd, 0xff, 0xbc, 0xce, 0xd6, 0xff, 0xb8, 0xc7, 0xd2, 0xff, 0xb2, 0xbd, 0xc7, 0xff, 0x9a, 0xa0, 0xb0, 0xff, 0x7f, 0x81, 0xa1, 0xff, 0x71, 0x6f, 0x95, 0xff, 0x52, 0x4a, 0x69, 0xff, 0x26, 0x18, 0x26, 0xff, 0x5f, 0x59, 0x51, 0xff, 0x90, 0x8f, 0x82, 0xff, 0x9c, 0xa4, 0x9d, 0xff, 0xbe, 0xcd, 0xc8, 0xff, 0x9a, 0xa4, 0xa4, 0xff, 0x50, 0x47, 0x4f, 0xff, 0x20, 0x0c, 0x19, 0xff, 0x4e, 0x3b, 0x3c, 0xff, 0x52, 0x3f, 0x35, 0xff, 0x2a, 0x16, 0x12, 0xff, 0x4e, 0x3d, 0x3a, 0xff, 0x54, 0x4a, 0x41, 0xff, 0x4a, 0x3f, 0x37, 0xff, 0x31, 0x1f, 0x19, 0xff, 0x44, 0x2c, 0x27, 0xff, 0x39, 0x27, 0x24, 0xff, 0x41, 0x2d, 0x2b, 0xff, 0x35, 0x20, 0x1e, 0xff, 0x1a, 0x05, 0x07, 0xff, 0x4a, 0x36, 0x32, 0xff, 0x43, 0x30, 0x2c, 0xff, 0x33, 0x1f, 0x1e, 0xff, 0x44, 0x31, 0x2e, 0xff, 0x3b, 0x28, 0x24, 0xff, 0x3a, 0x27, 0x23, 0xff, 0x38, 0x25, 0x21, 0xff, 0x2d, 0x1a, 0x19, 0xff, 0x28, 0x16, 0x16, 0xff, 0x29, 0x16, 0x15, 0xff, 0x2d, 0x16, 0x19, 0xff, 0x2c, 0x1a, 0x19, 0xff, 0x2e, 0x1b, 0x1a, 0xff, 0x34, 0x20, 0x1c, 0xff, 0x3e, 0x2b, 0x1f, 0xff, 0x45, 0x32, 0x26, 0xff, 0x3e, 0x28, 0x21, 0xff, 0x2b, 0x13, 0x12, 0xff, 0x23, 0x0f, 0x10, 0xff, 0x2e, 0x1b, 0x18, 0xff, 0x47, 0x30, 0x23, 0xff, 0x5f, 0x47, 0x2c, 0xff, 0x78, 0x60, 0x3c, 0xff, 0x80, 0x68, 0x3e, 0xff, 0x7f, 0x67, 0x38, 0xff, 0x98, 0x85, 0x5e, 0xff, 0xc7, 0xbc, 0xa7, 0xff, 0xf3, 0xf1, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xd7, 0xf6, 0xed, 0xe7, 0x5b, 0x38, 0x1f, 0x10, 0x00, 0x24, 0x0e, 0x0f, 0x00, 0x2b, 0x17, 0x18, 0x00, 0x26, 0x12, 0x13, 0x00, 0x21, 0x0e, 0x0f, 0x00, 0x3a, 0x23, 0x1a, 0x00, 0x59, 0x43, 0x28, 0x00, 0x6d, 0x59, 0x35, 0x00, 0x71, 0x57, 0x36, 0x00, 0x68, 0x4b, 0x2a, 0x00, 0x38, 0x22, 0x1a, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xbe, 0xcd, 0xd6, 0x00, 0xb7, 0xc6, 0xcd, 0x00, 0xb4, 0xc6, 0xcc, 0x00, 0xb0, 0xc2, 0xcb, 0x00, 0xaa, 0xb7, 0xc3, 0x00, 0xa8, 0xb2, 0xbd, 0x00, 0xa5, 0xae, 0xbc, 0x00, 0xa2, 0xaa, 0xbc, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xe6, 0xe8, 0xf1, 0xff, 0xbe, 0xc2, 0xdb, 0xff, 0x8f, 0x92, 0xc0, 0xff, 0x72, 0x73, 0xad, 0xff, 0x8a, 0x8d, 0xb6, 0xff, 0xa1, 0xa6, 0xbe, 0xff, 0xb0, 0xb6, 0xc6, 0xff, 0xb7, 0xbd, 0xcc, 0xff, 0xb7, 0xc0, 0xcc, 0xff, 0xbd, 0xc8, 0xd1, 0xff, 0xc2, 0xd1, 0xd8, 0xff, 0xc2, 0xd2, 0xda, 0xff, 0xbf, 0xcf, 0xd6, 0xff, 0xbb, 0xcb, 0xd3, 0xff, 0xba, 0xc8, 0xcf, 0xff, 0xa9, 0xb1, 0xb9, 0xff, 0x8a, 0x8c, 0x9f, 0xff, 0x7d, 0x7b, 0x9b, 0xff, 0x70, 0x68, 0x88, 0xff, 0x4e, 0x42, 0x52, 0xff, 0x30, 0x21, 0x22, 0xff, 0x67, 0x59, 0x53, 0xff, 0x97, 0x9b, 0x8d, 0xff, 0xc0, 0xcc, 0xc2, 0xff, 0x81, 0x84, 0x82, 0xff, 0x65, 0x62, 0x65, 0xff, 0x3e, 0x2f, 0x3a, 0xff, 0x38, 0x25, 0x30, 0xff, 0x2f, 0x1d, 0x20, 0xff, 0x16, 0x00, 0x06, 0xff, 0x2b, 0x18, 0x17, 0xff, 0x47, 0x39, 0x30, 0xff, 0x43, 0x31, 0x2c, 0xff, 0x21, 0x0e, 0x0d, 0xff, 0x40, 0x2f, 0x2d, 0xff, 0x40, 0x2f, 0x27, 0xff, 0x2c, 0x1a, 0x18, 0xff, 0x2a, 0x17, 0x17, 0xff, 0x43, 0x31, 0x29, 0xff, 0x29, 0x13, 0x16, 0xff, 0x25, 0x10, 0x14, 0xff, 0x31, 0x1e, 0x1b, 0xff, 0x3d, 0x2a, 0x27, 0xff, 0x3e, 0x2b, 0x28, 0xff, 0x34, 0x22, 0x1f, 0xff, 0x3f, 0x2e, 0x28, 0xff, 0x3c, 0x29, 0x25, 0xff, 0x30, 0x1c, 0x1b, 0xff, 0x2f, 0x1b, 0x18, 0xff, 0x2d, 0x19, 0x17, 0xff, 0x2e, 0x1a, 0x19, 0xff, 0x2f, 0x1d, 0x1b, 0xff, 0x34, 0x22, 0x1e, 0xff, 0x3b, 0x28, 0x23, 0xff, 0x38, 0x25, 0x21, 0xff, 0x2e, 0x1a, 0x16, 0xff, 0x2e, 0x1a, 0x13, 0xff, 0x3c, 0x29, 0x1e, 0xff, 0x51, 0x3b, 0x26, 0xff, 0x69, 0x51, 0x35, 0xff, 0x6b, 0x54, 0x33, 0xff, 0x69, 0x53, 0x2f, 0xff, 0x74, 0x60, 0x39, 0xff, 0x8b, 0x79, 0x58, 0xff, 0xb6, 0xa9, 0x95, 0xff, 0xe8, 0xe4, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0x18, 0x9e, 0x8f, 0x5a, 0x00, 0x88, 0x76, 0x4c, 0x00, 0x4f, 0x36, 0x23, 0x00, 0x21, 0x0b, 0x08, 0x00, 0x20, 0x0d, 0x13, 0x00, 0x20, 0x0e, 0x11, 0x00, 0x17, 0x08, 0x0c, 0x00, 0x17, 0x06, 0x0c, 0x00, 0x32, 0x1f, 0x17, 0x00, 0x4e, 0x38, 0x26, 0x00, 0x4c, 0x30, 0x1d, 0x00, 0x58, 0x43, 0x27, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xb8, 0xc9, 0xda, 0x00, 0xb0, 0xc0, 0xd0, 0x00, 0xab, 0xb6, 0xc6, 0x00, 0xa8, 0xad, 0xc3, 0x00, 0xa2, 0xac, 0xc1, 0x00, 0xa1, 0xad, 0xc3, 0x00, 0x9c, 0xa6, 0xbc, 0x00, 0xa0, 0xa6, 0xb9, 0x00, 0xa0, 0xa9, 0xb8, 0x00, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf9, 0xfc, 0xff, 0xcf, 0xcf, 0xe3, 0xff, 0x9d, 0x9f, 0xc4, 0xff, 0x8c, 0x8c, 0xb7, 0xff, 0x8d, 0x8e, 0xaf, 0xff, 0x9a, 0x9b, 0xb3, 0xff, 0xa8, 0xab, 0xbe, 0xff, 0xb4, 0xbc, 0xc7, 0xff, 0xbc, 0xc7, 0xce, 0xff, 0xc1, 0xcd, 0xd5, 0xff, 0xbf, 0xcc, 0xd6, 0xff, 0xbb, 0xc8, 0xd1, 0xff, 0xbb, 0xc6, 0xd0, 0xff, 0xb2, 0xbc, 0xc7, 0xff, 0xa1, 0xa7, 0xb1, 0xff, 0x8e, 0x8d, 0xa0, 0xff, 0x71, 0x6e, 0x8a, 0xff, 0x55, 0x4a, 0x63, 0xff, 0x3f, 0x32, 0x3a, 0xff, 0x37, 0x27, 0x25, 0xff, 0x59, 0x4a, 0x45, 0xff, 0xb7, 0xc0, 0xb1, 0xff, 0xa1, 0xa5, 0x9e, 0xff, 0x48, 0x3c, 0x40, 0xff, 0x52, 0x47, 0x4b, 0xff, 0x31, 0x23, 0x2e, 0xff, 0x3b, 0x2a, 0x33, 0xff, 0x25, 0x14, 0x16, 0xff, 0x21, 0x0d, 0x10, 0xff, 0x33, 0x1f, 0x1b, 0xff, 0x4b, 0x3c, 0x32, 0xff, 0x38, 0x28, 0x24, 0xff, 0x4e, 0x3f, 0x3e, 0xff, 0x47, 0x38, 0x34, 0xff, 0x13, 0x03, 0x01, 0xff, 0x29, 0x15, 0x19, 0xff, 0x28, 0x14, 0x13, 0xff, 0x3a, 0x29, 0x21, 0xff, 0x36, 0x22, 0x22, 0xff, 0x1f, 0x0a, 0x0e, 0xff, 0x25, 0x0f, 0x13, 0xff, 0x24, 0x0e, 0x12, 0xff, 0x20, 0x0a, 0x0e, 0xff, 0x20, 0x0a, 0x0f, 0xff, 0x20, 0x0b, 0x0c, 0xff, 0x22, 0x0d, 0x10, 0xff, 0x28, 0x12, 0x17, 0xff, 0x29, 0x14, 0x17, 0xff, 0x2b, 0x16, 0x17, 0xff, 0x2e, 0x1a, 0x19, 0xff, 0x33, 0x1f, 0x1e, 0xff, 0x36, 0x23, 0x1f, 0xff, 0x2a, 0x17, 0x15, 0xff, 0x21, 0x0c, 0x0f, 0xff, 0x2e, 0x19, 0x17, 0xff, 0x44, 0x31, 0x25, 0xff, 0x4d, 0x3a, 0x28, 0xff, 0x52, 0x3c, 0x27, 0xff, 0x58, 0x40, 0x29, 0xff, 0x56, 0x3f, 0x27, 0xff, 0x74, 0x62, 0x4d, 0xff, 0xa6, 0x9a, 0x8b, 0xff, 0xdf, 0xda, 0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x9c, 0x62, 0x4b, 0x2b, 0x00, 0x5c, 0x45, 0x25, 0x00, 0x66, 0x52, 0x2d, 0x00, 0x8a, 0x77, 0x49, 0x00, 0x99, 0x84, 0x57, 0x00, 0x69, 0x55, 0x36, 0x00, 0x28, 0x13, 0x0d, 0x00, 0x1a, 0x05, 0x0d, 0x00, 0x1f, 0x0f, 0x12, 0x00, 0x1d, 0x0e, 0x0f, 0x00, 0x18, 0x06, 0x0c, 0x00, 0x14, 0x04, 0x0b, 0x00, 0x22, 0x0e, 0x13, 0x00, 0x45, 0x31, 0x1b, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xa4, 0xab, 0x9c, 0x00, 0xa0, 0x9f, 0x95, 0x00, 0x9e, 0x9a, 0x8d, 0x00, 0x9b, 0x98, 0x8a, 0x00, 0x94, 0x94, 0x94, 0x00, 0x92, 0x96, 0x9f, 0x00, 0x99, 0x9f, 0xb0, 0x00, 0x99, 0x9f, 0xb7, 0x00, 0xa0, 0xa8, 0xc3, 0x00, 0xa0, 0xaa, 0xc5, 0x00, 0x9b, 0xa7, 0xbf, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf9, 0xfb, 0xff, 0xe1, 0xe1, 0xec, 0xff, 0xb6, 0xb7, 0xcd, 0xff, 0x98, 0x99, 0xb7, 0xff, 0x97, 0x9a, 0xb3, 0xff, 0xaa, 0xb1, 0xc0, 0xff, 0xb6, 0xbf, 0xc7, 0xff, 0xb9, 0xc4, 0xca, 0xff, 0xb7, 0xc2, 0xca, 0xff, 0xb8, 0xc3, 0xcb, 0xff, 0xb5, 0xbf, 0xc8, 0xff, 0xad, 0xb5, 0xc0, 0xff, 0xa9, 0xae, 0xb9, 0xff, 0x8c, 0x8d, 0x9c, 0xff, 0x60, 0x5b, 0x71, 0xff, 0x40, 0x32, 0x44, 0xff, 0x30, 0x1e, 0x25, 0xff, 0x37, 0x24, 0x25, 0xff, 0x7a, 0x76, 0x6c, 0xff, 0xc4, 0xcd, 0xbc, 0xff, 0x60, 0x58, 0x56, 0xff, 0x30, 0x1f, 0x25, 0xff, 0x4c, 0x3f, 0x43, 0xff, 0x47, 0x37, 0x43, 0xff, 0x35, 0x25, 0x2d, 0xff, 0x23, 0x12, 0x13, 0xff, 0x22, 0x0e, 0x0f, 0xff, 0x3b, 0x28, 0x23, 0xff, 0x37, 0x26, 0x1f, 0xff, 0x22, 0x12, 0x0e, 0xff, 0x41, 0x30, 0x2c, 0xff, 0x2f, 0x1c, 0x1b, 0xff, 0x20, 0x0b, 0x0f, 0xff, 0x2e, 0x18, 0x1a, 0xff, 0x37, 0x23, 0x22, 0xff, 0x27, 0x13, 0x14, 0xff, 0x36, 0x25, 0x1c, 0xff, 0x24, 0x10, 0x10, 0xff, 0x29, 0x12, 0x17, 0xff, 0x29, 0x14, 0x15, 0xff, 0x29, 0x14, 0x16, 0xff, 0x2a, 0x14, 0x17, 0xff, 0x2a, 0x16, 0x17, 0xff, 0x2b, 0x16, 0x18, 0xff, 0x2d, 0x18, 0x1a, 0xff, 0x2d, 0x18, 0x1a, 0xff, 0x2f, 0x1a, 0x1a, 0xff, 0x31, 0x1d, 0x1a, 0xff, 0x2e, 0x19, 0x18, 0xff, 0x25, 0x10, 0x11, 0xff, 0x23, 0x0d, 0x0f, 0xff, 0x2f, 0x1b, 0x1a, 0xff, 0x3a, 0x26, 0x23, 0xff, 0x39, 0x25, 0x1f, 0xff, 0x39, 0x25, 0x1d, 0xff, 0x3d, 0x29, 0x20, 0xff, 0x67, 0x57, 0x50, 0xff, 0xa1, 0x96, 0x93, 0xff, 0xdd, 0xd8, 0xd7, 0xff, 0xfe, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0x5a, 0x42, 0x26, 0x00, 0x52, 0x39, 0x1f, 0x00, 0x50, 0x36, 0x1d, 0x00, 0x4e, 0x35, 0x1e, 0x00, 0x56, 0x3e, 0x21, 0x00, 0x6e, 0x58, 0x30, 0x00, 0x8c, 0x78, 0x4b, 0x00, 0x7a, 0x67, 0x41, 0x00, 0x48, 0x32, 0x21, 0x00, 0x22, 0x0a, 0x0a, 0x00, 0x19, 0x05, 0x0e, 0x00, 0x1a, 0x0d, 0x0e, 0x00, 0x1e, 0x10, 0x0f, 0x00, 0x22, 0x0e, 0x15, 0x00, 0x25, 0x10, 0x0e, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xa4, 0x9e, 0x6c, 0x00, 0xaa, 0x9e, 0x6f, 0x00, 0x9b, 0x91, 0x61, 0x00, 0x9d, 0x95, 0x63, 0x00, 0x96, 0x87, 0x5b, 0x00, 0x88, 0x76, 0x4e, 0x00, 0x8d, 0x7f, 0x5b, 0x00, 0x88, 0x80, 0x6a, 0x00, 0x8f, 0x8a, 0x85, 0x00, 0x93, 0x91, 0x9f, 0x00, 0x94, 0x98, 0xb0, 0x00, 0x8f, 0x9c, 0xbc, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xf0, 0xea, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xfa, 0xfb, 0xff, 0xe5, 0xe4, 0xed, 0xff, 0xca, 0xcb, 0xda, 0xff, 0xb3, 0xb7, 0xc9, 0xff, 0xaa, 0xb2, 0xc1, 0xff, 0xb3, 0xbc, 0xcb, 0xff, 0xb7, 0xc0, 0xca, 0xff, 0xb7, 0xc0, 0xc8, 0xff, 0xb1, 0xb8, 0xc1, 0xff, 0xad, 0xb3, 0xba, 0xff, 0x9e, 0xa1, 0xad, 0xff, 0x80, 0x7d, 0x8f, 0xff, 0x61, 0x54, 0x65, 0xff, 0x41, 0x31, 0x3b, 0xff, 0x2b, 0x17, 0x1b, 0xff, 0x3e, 0x2d, 0x2e, 0xff, 0xa9, 0xa9, 0x9c, 0xff, 0xa9, 0xad, 0x9c, 0xff, 0x48, 0x3b, 0x40, 0xff, 0x47, 0x35, 0x42, 0xff, 0x4a, 0x3c, 0x44, 0xff, 0x4b, 0x3b, 0x48, 0xff, 0x2f, 0x1d, 0x23, 0xff, 0x2c, 0x18, 0x18, 0xff, 0x28, 0x14, 0x14, 0xff, 0x41, 0x2e, 0x29, 0xff, 0x37, 0x24, 0x20, 0xff, 0x1f, 0x0d, 0x0e, 0xff, 0x23, 0x10, 0x10, 0xff, 0x28, 0x12, 0x15, 0xff, 0x28, 0x11, 0x16, 0xff, 0x2a, 0x14, 0x16, 0xff, 0x30, 0x1b, 0x1c, 0xff, 0x22, 0x0c, 0x11, 0xff, 0x30, 0x1d, 0x18, 0xff, 0x2b, 0x16, 0x16, 0xff, 0x26, 0x10, 0x14, 0xff, 0x2a, 0x15, 0x16, 0xff, 0x2b, 0x16, 0x18, 0xff, 0x2b, 0x16, 0x18, 0xff, 0x2a, 0x14, 0x17, 0xff, 0x2b, 0x16, 0x17, 0xff, 0x2f, 0x1a, 0x1a, 0xff, 0x31, 0x1b, 0x1d, 0xff, 0x2d, 0x18, 0x1a, 0xff, 0x26, 0x13, 0x12, 0xff, 0x21, 0x0e, 0x0f, 0xff, 0x25, 0x12, 0x14, 0xff, 0x2e, 0x1b, 0x1d, 0xff, 0x30, 0x1c, 0x1b, 0xff, 0x2e, 0x1a, 0x19, 0xff, 0x3e, 0x2b, 0x2b, 0xff, 0x73, 0x65, 0x65, 0xff, 0xb1, 0xab, 0xab, 0xff, 0xe3, 0xe1, 0xe1, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0x68, 0x52, 0x2e, 0x00, 0x6b, 0x55, 0x32, 0x00, 0x63, 0x4c, 0x2b, 0x00, 0x65, 0x4e, 0x2d, 0x00, 0x65, 0x4f, 0x2f, 0x00, 0x62, 0x4a, 0x2d, 0x00, 0x5a, 0x41, 0x22, 0x00, 0x64, 0x4b, 0x28, 0x00, 0x81, 0x6a, 0x3f, 0x00, 0x88, 0x73, 0x47, 0x00, 0x69, 0x52, 0x37, 0x00, 0x39, 0x23, 0x1c, 0x00, 0x15, 0x03, 0x06, 0x00, 0x19, 0x08, 0x0a, 0x00, 0x1d, 0x0c, 0x11, 0x00, 0x1b, 0x0a, 0x10, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xab, 0xa5, 0x7b, 0x00, 0xa5, 0xa0, 0x70, 0x00, 0xa3, 0x9a, 0x6d, 0x00, 0x9d, 0x8d, 0x64, 0x00, 0x80, 0x69, 0x3f, 0x00, 0x7b, 0x65, 0x3a, 0x00, 0x94, 0x80, 0x52, 0x00, 0x89, 0x74, 0x41, 0x00, 0x7f, 0x6c, 0x3d, 0x00, 0x85, 0x72, 0x4f, 0x00, 0x8a, 0x78, 0x5f, 0x00, 0x85, 0x7a, 0x6d, 0x00, 0x84, 0x7b, 0x7c, 0x00, 0x78, 0x74, 0x83, 0x00, 0xf6, 0xed, 0xe7, 0x74, 0xf6, 0xed, 0xe7, 0xcf, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xf4, 0xf4, 0xf7, 0xff, 0xe0, 0xe0, 0xe8, 0xff, 0xc2, 0xc2, 0xd1, 0xff, 0xa3, 0xa3, 0xba, 0xff, 0x96, 0x96, 0xb0, 0xff, 0x91, 0x91, 0xa8, 0xff, 0x91, 0x93, 0xa5, 0xff, 0x96, 0x95, 0xa8, 0xff, 0x7a, 0x70, 0x82, 0xff, 0x5c, 0x4a, 0x58, 0xff, 0x3e, 0x2b, 0x31, 0xff, 0x26, 0x14, 0x16, 0xff, 0x61, 0x54, 0x52, 0xff, 0xaa, 0xa8, 0x9c, 0xff, 0x74, 0x72, 0x68, 0xff, 0x3e, 0x32, 0x41, 0xff, 0x5d, 0x50, 0x64, 0xff, 0x52, 0x47, 0x52, 0xff, 0x42, 0x33, 0x3d, 0xff, 0x34, 0x22, 0x23, 0xff, 0x38, 0x24, 0x21, 0xff, 0x2c, 0x17, 0x17, 0xff, 0x3b, 0x27, 0x21, 0xff, 0x2e, 0x19, 0x17, 0xff, 0x24, 0x10, 0x14, 0xff, 0x24, 0x11, 0x15, 0xff, 0x24, 0x0f, 0x14, 0xff, 0x28, 0x13, 0x16, 0xff, 0x27, 0x12, 0x15, 0xff, 0x23, 0x0e, 0x11, 0xff, 0x26, 0x11, 0x12, 0xff, 0x25, 0x0f, 0x15, 0xff, 0x2b, 0x15, 0x18, 0xff, 0x28, 0x14, 0x15, 0xff, 0x29, 0x13, 0x16, 0xff, 0x2a, 0x15, 0x16, 0xff, 0x2a, 0x15, 0x16, 0xff, 0x2a, 0x16, 0x17, 0xff, 0x31, 0x1c, 0x1d, 0xff, 0x2f, 0x1b, 0x1b, 0xff, 0x29, 0x14, 0x16, 0xff, 0x22, 0x0e, 0x12, 0xff, 0x1e, 0x0d, 0x11, 0xff, 0x23, 0x12, 0x13, 0xff, 0x28, 0x17, 0x16, 0xff, 0x36, 0x26, 0x25, 0xff, 0x5d, 0x50, 0x4f, 0xff, 0x98, 0x8f, 0x8f, 0xff, 0xd1, 0xcd, 0xce, 0xff, 0xf3, 0xf2, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfa, 0xf8, 0xff, 0xf7, 0xef, 0xea, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x5b, 0x67, 0x52, 0x2d, 0x00, 0x6a, 0x56, 0x31, 0x00, 0x6c, 0x57, 0x32, 0x00, 0x6e, 0x59, 0x34, 0x00, 0x6e, 0x59, 0x33, 0x00, 0x73, 0x5e, 0x37, 0x00, 0x76, 0x61, 0x39, 0x00, 0x6c, 0x56, 0x31, 0x00, 0x67, 0x51, 0x30, 0x00, 0x69, 0x52, 0x30, 0x00, 0x67, 0x50, 0x2b, 0x00, 0x70, 0x57, 0x31, 0x00, 0x84, 0x6e, 0x40, 0x00, 0x77, 0x63, 0x3a, 0x00, 0x52, 0x3e, 0x27, 0x00, 0x2f, 0x1b, 0x15, 0x00, 0x18, 0x06, 0x06, 0x00, 0x1d, 0x0b, 0x12, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xa9, 0xa4, 0x78, 0x00, 0xa7, 0x9e, 0x71, 0x00, 0x94, 0x86, 0x5b, 0x00, 0x7c, 0x68, 0x3e, 0x00, 0x84, 0x70, 0x45, 0x00, 0x98, 0x88, 0x5d, 0x00, 0x9d, 0x8e, 0x67, 0x00, 0x84, 0x6f, 0x4c, 0x00, 0x79, 0x64, 0x40, 0x00, 0x7d, 0x69, 0x40, 0x00, 0x8a, 0x76, 0x4a, 0x00, 0x7e, 0x65, 0x3d, 0x00, 0x71, 0x57, 0x33, 0x00, 0x85, 0x70, 0x49, 0x00, 0x80, 0x6b, 0x50, 0x00, 0x78, 0x68, 0x62, 0x00, 0xf6, 0xed, 0xe7, 0x94, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xfc, 0xff, 0xec, 0xeb, 0xef, 0xff, 0xce, 0xcc, 0xd7, 0xff, 0xb1, 0xaf, 0xbf, 0xff, 0xa5, 0xa3, 0xb6, 0xff, 0x94, 0x8d, 0x9e, 0xff, 0x5f, 0x50, 0x5c, 0xff, 0x4c, 0x39, 0x3f, 0xff, 0x3e, 0x29, 0x2d, 0xff, 0x2e, 0x1b, 0x1e, 0xff, 0x70, 0x64, 0x61, 0xff, 0x81, 0x7a, 0x76, 0xff, 0x5f, 0x58, 0x5a, 0xff, 0x47, 0x39, 0x47, 0xff, 0x51, 0x42, 0x55, 0xff, 0x57, 0x4b, 0x52, 0xff, 0x32, 0x21, 0x26, 0xff, 0x3e, 0x2b, 0x29, 0xff, 0x42, 0x30, 0x29, 0xff, 0x29, 0x15, 0x13, 0xff, 0x3d, 0x29, 0x22, 0xff, 0x2f, 0x1a, 0x18, 0xff, 0x25, 0x0f, 0x13, 0xff, 0x25, 0x10, 0x13, 0xff, 0x26, 0x11, 0x15, 0xff, 0x25, 0x10, 0x13, 0xff, 0x2b, 0x16, 0x18, 0xff, 0x28, 0x13, 0x15, 0xff, 0x23, 0x0e, 0x0f, 0xff, 0x27, 0x11, 0x15, 0xff, 0x2a, 0x15, 0x18, 0xff, 0x2c, 0x15, 0x19, 0xff, 0x29, 0x12, 0x17, 0xff, 0x28, 0x14, 0x16, 0xff, 0x2d, 0x18, 0x17, 0xff, 0x32, 0x1d, 0x1c, 0xff, 0x2e, 0x19, 0x1b, 0xff, 0x22, 0x0e, 0x12, 0xff, 0x21, 0x0f, 0x11, 0xff, 0x27, 0x16, 0x16, 0xff, 0x42, 0x33, 0x34, 0xff, 0x67, 0x5a, 0x5c, 0xff, 0x9a, 0x91, 0x93, 0xff, 0xcd, 0xc8, 0xc9, 0xff, 0xf2, 0xf1, 0xf1, 0xff, 0xfc, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xf7, 0xf0, 0xea, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xd7, 0xf6, 0xed, 0xe7, 0x74, 0x6f, 0x59, 0x35, 0x00, 0x71, 0x5a, 0x37, 0x00, 0x72, 0x5c, 0x36, 0x00, 0x79, 0x65, 0x3c, 0x00, 0x7c, 0x68, 0x41, 0x00, 0x7a, 0x66, 0x40, 0x00, 0x76, 0x64, 0x39, 0x00, 0x76, 0x62, 0x39, 0x00, 0x77, 0x63, 0x3d, 0x00, 0x76, 0x61, 0x3a, 0x00, 0x76, 0x61, 0x3b, 0x00, 0x75, 0x62, 0x3a, 0x00, 0x6e, 0x58, 0x32, 0x00, 0x69, 0x4e, 0x2d, 0x00, 0x66, 0x4c, 0x29, 0x00, 0x72, 0x5a, 0x32, 0x00, 0x89, 0x73, 0x46, 0x00, 0x75, 0x60, 0x39, 0x00, 0x51, 0x3a, 0x24, 0x00, 0x30, 0x19, 0x14, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xae, 0xa7, 0x78, 0x00, 0x9e, 0x94, 0x62, 0x00, 0x88, 0x76, 0x4a, 0x00, 0x80, 0x6a, 0x42, 0x00, 0xa2, 0x8f, 0x61, 0x00, 0xa1, 0x91, 0x63, 0x00, 0x8c, 0x7d, 0x51, 0x00, 0x98, 0x87, 0x5e, 0x00, 0x95, 0x83, 0x5c, 0x00, 0x86, 0x75, 0x4f, 0x00, 0x8f, 0x7f, 0x5a, 0x00, 0x86, 0x73, 0x52, 0x00, 0x89, 0x76, 0x4d, 0x00, 0x7f, 0x67, 0x47, 0x00, 0x63, 0x49, 0x30, 0x00, 0x68, 0x4b, 0x29, 0x00, 0x67, 0x48, 0x2f, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf4, 0xf5, 0xff, 0xdf, 0xdc, 0xdf, 0xff, 0xbd, 0xb6, 0xb8, 0xff, 0x8e, 0x83, 0x84, 0xff, 0x67, 0x58, 0x5a, 0xff, 0x55, 0x45, 0x48, 0xff, 0x5f, 0x51, 0x54, 0xff, 0x74, 0x6a, 0x6a, 0xff, 0x5d, 0x52, 0x55, 0xff, 0x3d, 0x2e, 0x37, 0xff, 0x48, 0x39, 0x41, 0xff, 0x3d, 0x2d, 0x31, 0xff, 0x21, 0x0c, 0x11, 0xff, 0x50, 0x3d, 0x35, 0xff, 0x47, 0x34, 0x2c, 0xff, 0x2a, 0x15, 0x15, 0xff, 0x4a, 0x38, 0x2f, 0xff, 0x3c, 0x29, 0x20, 0xff, 0x2a, 0x16, 0x16, 0xff, 0x25, 0x10, 0x13, 0xff, 0x25, 0x10, 0x13, 0xff, 0x25, 0x10, 0x13, 0xff, 0x24, 0x0f, 0x11, 0xff, 0x2f, 0x1a, 0x1c, 0xff, 0x2a, 0x15, 0x17, 0xff, 0x24, 0x10, 0x11, 0xff, 0x2b, 0x16, 0x18, 0xff, 0x2c, 0x17, 0x18, 0xff, 0x2d, 0x18, 0x18, 0xff, 0x35, 0x21, 0x22, 0xff, 0x33, 0x20, 0x21, 0xff, 0x34, 0x21, 0x24, 0xff, 0x42, 0x30, 0x34, 0xff, 0x65, 0x5a, 0x59, 0xff, 0x8f, 0x85, 0x86, 0xff, 0xb8, 0xb1, 0xb2, 0xff, 0xdd, 0xdb, 0xdb, 0xff, 0xf5, 0xf5, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xe7, 0xf6, 0xed, 0xe7, 0x84, 0x1e, 0x0a, 0x0b, 0x00, 0x37, 0x25, 0x1e, 0x00, 0x4d, 0x3a, 0x26, 0x00, 0x59, 0x43, 0x2b, 0x00, 0x67, 0x50, 0x32, 0x00, 0x7b, 0x61, 0x3b, 0x00, 0x7d, 0x64, 0x3c, 0x00, 0x7e, 0x68, 0x3d, 0x00, 0x86, 0x71, 0x45, 0x00, 0x7f, 0x6c, 0x40, 0x00, 0x73, 0x5f, 0x36, 0x00, 0x72, 0x5e, 0x36, 0x00, 0x75, 0x60, 0x3a, 0x00, 0x70, 0x5a, 0x36, 0x00, 0x68, 0x52, 0x2f, 0x00, 0x6b, 0x53, 0x31, 0x00, 0x6e, 0x57, 0x33, 0x00, 0x70, 0x59, 0x34, 0x00, 0x73, 0x5d, 0x37, 0x00, 0x7b, 0x63, 0x3d, 0x00, 0x7e, 0x6b, 0x3e, 0x00, 0x6b, 0x5a, 0x30, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xa2, 0x97, 0x67, 0x00, 0x9d, 0x8f, 0x5d, 0x00, 0x8d, 0x7a, 0x4b, 0x00, 0x8d, 0x78, 0x4b, 0x00, 0x92, 0x82, 0x52, 0x00, 0x8b, 0x7c, 0x4d, 0x00, 0x82, 0x72, 0x47, 0x00, 0x92, 0x80, 0x56, 0x00, 0x95, 0x84, 0x58, 0x00, 0x9b, 0x8b, 0x61, 0x00, 0xa4, 0x97, 0x70, 0x00, 0x8d, 0x7c, 0x55, 0x00, 0x8f, 0x7b, 0x4f, 0x00, 0x67, 0x4b, 0x31, 0x00, 0x65, 0x4a, 0x2e, 0x00, 0x6e, 0x58, 0x3a, 0x00, 0x6e, 0x53, 0x38, 0x00, 0x81, 0x64, 0x3e, 0x00, 0x6d, 0x54, 0x32, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xff, 0xe6, 0xe4, 0xe4, 0xff, 0xc9, 0xc4, 0xc5, 0xff, 0xba, 0xb3, 0xb5, 0xff, 0x9b, 0x92, 0x95, 0xff, 0x73, 0x68, 0x6a, 0xff, 0x58, 0x4b, 0x4d, 0xff, 0x3e, 0x2c, 0x32, 0xff, 0x43, 0x30, 0x30, 0xff, 0x68, 0x56, 0x48, 0xff, 0x42, 0x2e, 0x28, 0xff, 0x28, 0x13, 0x14, 0xff, 0x4a, 0x37, 0x2a, 0xff, 0x44, 0x33, 0x26, 0xff, 0x31, 0x1d, 0x1b, 0xff, 0x27, 0x11, 0x15, 0xff, 0x24, 0x0f, 0x13, 0xff, 0x25, 0x10, 0x13, 0xff, 0x26, 0x11, 0x13, 0xff, 0x2e, 0x1a, 0x1b, 0xff, 0x42, 0x2e, 0x30, 0xff, 0x40, 0x2d, 0x2f, 0xff, 0x4b, 0x38, 0x3b, 0xff, 0x5b, 0x4c, 0x4c, 0xff, 0x70, 0x62, 0x61, 0xff, 0x8d, 0x82, 0x83, 0xff, 0xa8, 0xa0, 0xa1, 0xff, 0xc9, 0xc5, 0xc5, 0xff, 0xea, 0xe8, 0xe9, 0xff, 0xf9, 0xf8, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0x94, 0x7d, 0x6c, 0x45, 0x00, 0x5f, 0x4d, 0x34, 0x00, 0x3b, 0x28, 0x20, 0x00, 0x1c, 0x0a, 0x0d, 0x00, 0x0f, 0x00, 0x04, 0x00, 0x1f, 0x0b, 0x0e, 0x00, 0x37, 0x23, 0x1a, 0x00, 0x51, 0x3d, 0x29, 0x00, 0x57, 0x42, 0x25, 0x00, 0x61, 0x4a, 0x29, 0x00, 0x6e, 0x57, 0x35, 0x00, 0x78, 0x63, 0x3d, 0x00, 0x7c, 0x67, 0x40, 0x00, 0x74, 0x5f, 0x39, 0x00, 0x6b, 0x55, 0x31, 0x00, 0x69, 0x53, 0x30, 0x00, 0x67, 0x51, 0x2f, 0x00, 0x65, 0x4f, 0x2c, 0x00, 0x69, 0x53, 0x2f, 0x00, 0x6c, 0x57, 0x33, 0x00, 0x68, 0x53, 0x2f, 0x00, 0x74, 0x5d, 0x38, 0x00, 0x75, 0x5e, 0x37, 0x00, 0x76, 0x5f, 0x38, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x9d, 0x8f, 0x61, 0x00, 0x8b, 0x78, 0x4c, 0x00, 0x85, 0x6d, 0x43, 0x00, 0x94, 0x7f, 0x52, 0x00, 0x8f, 0x80, 0x51, 0x00, 0x90, 0x7f, 0x54, 0x00, 0x8b, 0x77, 0x4e, 0x00, 0x81, 0x6c, 0x43, 0x00, 0x87, 0x70, 0x45, 0x00, 0x89, 0x77, 0x4e, 0x00, 0xad, 0xa1, 0x77, 0x00, 0x9c, 0x8a, 0x5e, 0x00, 0x76, 0x5c, 0x39, 0x00, 0x70, 0x55, 0x33, 0x00, 0x7e, 0x65, 0x43, 0x00, 0x79, 0x60, 0x3f, 0x00, 0x82, 0x69, 0x45, 0x00, 0x85, 0x70, 0x46, 0x00, 0x6b, 0x57, 0x33, 0x00, 0x71, 0x56, 0x37, 0x00, 0x76, 0x59, 0x3c, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfb, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfc, 0xff, 0xf5, 0xf4, 0xf5, 0xff, 0xed, 0xeb, 0xeb, 0xff, 0xd0, 0xcd, 0xcd, 0xff, 0xb1, 0xab, 0xac, 0xff, 0x9e, 0x95, 0x97, 0xff, 0x9d, 0x94, 0x8e, 0xff, 0x98, 0x8e, 0x84, 0xff, 0x6f, 0x60, 0x60, 0xff, 0x5e, 0x4d, 0x4e, 0xff, 0x71, 0x61, 0x56, 0xff, 0x67, 0x57, 0x4f, 0xff, 0x50, 0x3e, 0x40, 0xff, 0x49, 0x37, 0x3a, 0xff, 0x4f, 0x3e, 0x40, 0xff, 0x57, 0x46, 0x48, 0xff, 0x60, 0x50, 0x52, 0xff, 0x6b, 0x5d, 0x5e, 0xff, 0x81, 0x74, 0x75, 0xff, 0x96, 0x8b, 0x8c, 0xff, 0xa5, 0x9c, 0x9d, 0xff, 0xbb, 0xb4, 0xb6, 0xff, 0xd8, 0xd4, 0xd5, 0xff, 0xee, 0xec, 0xec, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0x92, 0x80, 0x4f, 0x00, 0x9d, 0x8c, 0x56, 0x00, 0xa7, 0x97, 0x64, 0x00, 0x9b, 0x8c, 0x5c, 0x00, 0x7b, 0x6d, 0x42, 0x00, 0x59, 0x47, 0x31, 0x00, 0x32, 0x1f, 0x16, 0x00, 0x1a, 0x08, 0x07, 0x00, 0x0e, 0x00, 0x02, 0x00, 0x1f, 0x0d, 0x0c, 0x00, 0x39, 0x23, 0x1c, 0x00, 0x41, 0x2b, 0x1c, 0x00, 0x56, 0x3f, 0x26, 0x00, 0x6b, 0x53, 0x31, 0x00, 0x72, 0x5b, 0x35, 0x00, 0x73, 0x5d, 0x38, 0x00, 0x71, 0x5b, 0x35, 0x00, 0x6f, 0x59, 0x34, 0x00, 0x65, 0x4e, 0x2b, 0x00, 0x61, 0x4b, 0x28, 0x00, 0x64, 0x4f, 0x2b, 0x00, 0x68, 0x52, 0x2e, 0x00, 0x60, 0x49, 0x28, 0x00, 0x6b, 0x53, 0x34, 0x00, 0x70, 0x58, 0x37, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe8, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x63, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xf8, 0xf0, 0xec, 0xff, 0xfb, 0xf7, 0xf5, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf7, 0xf0, 0xeb, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0xb4, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0x3b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x4b, 0xf6, 0xed, 0xe7, 0x6b, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf7, 0xee, 0xe8, 0xff, 0xf7, 0xef, 0xe9, 0xff, 0xf8, 0xf1, 0xec, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xfa, 0xf5, 0xf2, 0xff, 0xfb, 0xf7, 0xf4, 0xff, 0xfc, 0xf8, 0xf6, 0xff, 0xfc, 0xf9, 0xf8, 0xff, 0xfd, 0xfa, 0xf9, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfd, 0xfc, 0xfb, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xfe, 0xfc, 0xfb, 0xff, 0xfd, 0xfc, 0xfa, 0xff, 0xfd, 0xfb, 0xfa, 0xff, 0xfd, 0xfa, 0xf9, 0xff, 0xfc, 0xf9, 0xf7, 0xff, 0xfb, 0xf8, 0xf5, 0xff, 0xfb, 0xf6, 0xf3, 0xff, 0xfa, 0xf5, 0xf1, 0xff, 0xf9, 0xf3, 0xef, 0xff, 0xf8, 0xf0, 0xeb, 0xff, 0xf7, 0xee, 0xe9, 0xff, 0xf6, 0xee, 0xe8, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0x43, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x5b, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x3b, 0xf6, 0xed, 0xe7, 0x43, 0xf6, 0xed, 0xe7, 0x53, 0xf6, 0xed, 0xe7, 0x74, 0xf6, 0xed, 0xe7, 0x8c, 0xf6, 0xed, 0xe7, 0xac, 0xf6, 0xed, 0xe7, 0xc7, 0xf6, 0xed, 0xe7, 0xd7, 0xf6, 0xed, 0xe7, 0xef, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xff, 0xf6, 0xed, 0xe7, 0xf7, 0xf6, 0xed, 0xe7, 0xe7, 0xf6, 0xed, 0xe7, 0xd7, 0xf6, 0xed, 0xe7, 0xbf, 0xf6, 0xed, 0xe7, 0xa4, 0xf6, 0xed, 0xe7, 0x84, 0xf6, 0xed, 0xe7, 0x63, 0xf6, 0xed, 0xe7, 0x4b, 0xf6, 0xed, 0xe7, 0x43, 0xf6, 0xed, 0xe7, 0x3b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x08, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0x10, 0xf6, 0xed, 0xe7, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xf6, 0xed, 0xe7, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, +#endif +}; + +const lv_img_dsc_t img_demo_widgets_avatar = { + .header.always_zero = 0, + .header.w = 154, + .header.h = 154, + .data_size = 23716 * LV_IMG_PX_SIZE_ALPHA_BYTE, + .header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA, + .data = img_demo_widgets_avatar_map, +}; diff --git a/example/peripheral/media/lvgl_indev/src/img_lvgl_logo.c b/example/peripheral/media/lvgl_indev/src/img_lvgl_logo.c new file mode 100644 index 0000000000000000000000000000000000000000..aea5c98b56ffcda627b561a9947b165298645c4e --- /dev/null +++ b/example/peripheral/media/lvgl_indev/src/img_lvgl_logo.c @@ -0,0 +1,162 @@ +#include "../../../lvgl.h" + + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_IMG_LVGL_LOGO +#define LV_ATTRIBUTE_IMG_IMG_LVGL_LOGO +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMG_LVGL_LOGO uint8_t img_lvgl_logo_map[] = { +#if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8 + /*Pixel format: Blue: 2 bit, Green: 3 bit, Red: 3 bit, Alpha 8 bit */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x6e, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x6e, 0xff, 0xb6, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xdb, 0xff, 0xff, 0xff, + 0xb6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, + 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xff, 0xff, + 0x6d, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0x6d, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x96, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x49, 0xff, 0x6d, 0xff, 0x6d, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0x6d, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xb7, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0xb6, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xfb, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf2, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xed, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe4, 0xff, 0xe5, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe4, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe4, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xf6, 0xff, 0xee, 0xff, 0xed, 0xff, 0xed, 0xff, 0xed, 0xff, 0xed, 0xff, 0xed, 0xff, 0xed, 0xff, 0xed, 0xff, 0xed, 0xff, 0xed, 0xff, 0xee, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x6e, 0xff, 0x49, 0xff, 0x29, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0x6e, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb6, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xf2, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xe9, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x92, 0xff, 0xff, 0xff, + 0xe9, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf2, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xe0, 0xff, 0xee, 0xff, 0xff, 0xff, 0xb7, 0xff, 0x49, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x25, 0xff, 0x6d, 0xff, 0xdb, 0xff, 0xff, 0xff, + 0xf2, 0xff, 0xe9, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe9, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xe9, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe5, 0xff, 0xe9, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x92, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x49, 0xff, 0x6e, 0xff, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +#endif +#if LV_COLOR_DEPTH == 16 + /*Pixel format: Blue: 5 bit, Green: 6 bit, Red: 5 bit, Alpha 8 bit*/ + 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7d, 0xef, 0xff, 0xdb, 0xde, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0x9a, 0xd6, 0xff, 0xdb, 0xde, 0xff, 0x5d, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xff, 0xff, 0xdb, 0xde, 0xff, 0x14, 0xa5, 0xff, 0x6e, 0x73, 0xff, 0xcb, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xab, 0x5a, 0xff, 0xcb, 0x5a, 0xff, 0x4d, 0x6b, 0xff, 0xd3, 0x9c, 0xff, 0x7a, 0xd6, 0xff, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, + 0x1c, 0xe7, 0xff, 0xef, 0x7b, 0xff, 0x86, 0x31, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x45, 0x29, 0xff, 0x4d, 0x6b, 0xff, 0x79, 0xce, 0xff, 0xff, 0xff, 0xff, + 0xf4, 0xa4, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x66, 0x31, 0xff, 0x51, 0x8c, 0xff, 0xbe, 0xf7, 0xff, + 0x2d, 0x6b, 0xff, 0x45, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x86, 0x31, 0xff, 0x08, 0x42, 0xff, 0x08, 0x42, 0xff, 0x66, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x0c, 0x63, 0xff, 0x5d, 0xef, 0xff, + 0x8a, 0x52, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x45, 0x29, 0xff, 0x6d, 0x6b, 0xff, 0x14, 0xa5, 0xff, 0xf4, 0xa4, 0xff, 0xec, 0x62, 0xff, 0x45, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0x1c, 0xe7, 0xff, + 0x8a, 0x52, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xc7, 0x39, 0xff, 0x18, 0xc6, 0xff, 0x9e, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x14, 0xa5, 0xff, 0x08, 0x42, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x8a, 0x52, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xe8, 0x41, 0xff, 0xfb, 0xde, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x96, 0xb5, 0xff, 0x49, 0x4a, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x8a, 0x52, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x66, 0x29, 0xff, 0x92, 0x94, 0xff, 0x9a, 0xd6, 0xff, 0x59, 0xce, 0xff, 0xf0, 0x7b, 0xff, 0x86, 0x31, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x8a, 0x52, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xe8, 0x39, 0xff, 0xab, 0x52, 0xff, 0xaa, 0x52, 0xff, 0xa7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x8a, 0x52, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xab, 0x5a, 0xff, 0x25, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x31, 0x84, 0xff, 0x29, 0x42, 0xff, 0xa7, 0x39, 0xff, 0xa7, 0x31, 0xff, 0xa7, 0x31, 0xff, 0xa7, 0x31, 0xff, 0xa7, 0x31, 0xff, 0xa7, 0x31, 0xff, 0xa7, 0x31, 0xff, 0xa7, 0x31, 0xff, 0xa7, 0x31, 0xff, 0xa7, 0x31, 0xff, 0x86, 0x31, 0xff, 0x45, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x3c, 0xe7, 0xff, 0x76, 0xb5, 0xff, 0xd3, 0x9c, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x9c, 0xff, 0xb3, 0x94, 0xff, 0x72, 0x8c, 0xff, 0x4d, 0x6b, 0xff, 0xa7, 0x31, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x9e, 0xff, 0xff, 0x1c, 0xf7, 0xff, 0xfb, 0xf6, 0xff, 0xdb, 0xf6, 0xff, 0xdb, 0xf6, 0xff, 0xdb, 0xf6, 0xff, 0xdb, 0xf6, 0xff, 0xdb, 0xf6, 0xff, 0xdb, 0xf6, 0xff, 0xdb, 0xf6, 0xff, 0xdb, 0xf6, 0xff, 0x1c, 0xf7, 0xff, 0x5d, 0xef, 0xff, 0x7a, 0xd6, 0xff, 0x6e, 0x6b, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xd7, 0xfd, 0xff, 0x51, 0xf4, 0xff, 0x10, 0xec, 0xff, 0x10, 0xec, 0xff, 0x10, 0xec, 0xff, 0x10, 0xec, 0xff, 0x10, 0xec, 0xff, 0x10, 0xec, 0xff, 0x10, 0xec, 0xff, 0x10, 0xec, 0xff, 0x10, 0xec, 0xff, 0xb2, 0xf4, 0xff, 0xbb, 0xfe, 0xff, 0x5d, 0xf7, 0xff, 0x72, 0x8c, 0xff, 0x25, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xec, 0xea, 0xff, 0x04, 0xe1, 0xff, 0xc3, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0x45, 0xe1, 0xff, 0x34, 0xf5, 0xff, 0x5d, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xc7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xb3, 0x94, 0xff, 0x25, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xc7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x3c, 0xf7, 0xff, 0xd3, 0x9c, 0xff, 0x45, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x69, 0xe2, 0xff, 0x82, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0xc3, 0xd8, 0xff, 0xd3, 0xf4, 0xff, 0x5d, 0xf7, 0xff, 0x55, 0xad, 0xff, 0xe8, 0x41, 0xff, 0x66, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x45, 0x29, 0xff, 0x25, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xf4, 0xf4, 0xff, 0x0c, 0xeb, 0xff, 0xcb, 0xea, 0xff, 0xcb, 0xea, 0xff, 0xcb, 0xea, 0xff, 0xcb, 0xea, 0xff, 0xcb, 0xea, 0xff, 0xcb, 0xea, 0xff, 0xcb, 0xea, 0xff, 0xcb, 0xea, 0xff, 0xcb, 0xea, 0xff, 0x6d, 0xeb, 0xff, 0x59, 0xfe, 0xff, 0xbf, 0xff, 0xff, 0xbb, 0xd6, 0xff, 0x92, 0x94, 0xff, 0x8e, 0x73, 0xff, 0x6e, 0x6b, 0xff, 0x6d, 0x6b, 0xff, 0x6d, 0x6b, 0xff, 0x6d, 0x6b, 0xff, 0x6d, 0x6b, 0xff, 0x6d, 0x6b, 0xff, 0x6d, 0x6b, 0xff, 0x6d, 0x6b, 0xff, 0x6d, 0x6b, 0xff, 0x4d, 0x6b, 0xff, 0x8a, 0x52, 0xff, 0x86, 0x31, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x7e, 0xff, 0xff, 0xdb, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0x9a, 0xfe, 0xff, 0xfb, 0xfe, 0xff, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x5d, 0xef, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xdb, 0xde, 0xff, 0xbb, 0xde, 0xff, 0x18, 0xc6, 0xff, 0x6e, 0x73, 0xff, 0x45, 0x29, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0x1c, 0xff, 0xff, 0xb6, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0xf7, 0xf5, 0xff, 0x7d, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5d, 0xff, 0xff, 0xf8, 0xfd, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0x55, 0xf5, 0xff, 0xd7, 0xf5, 0xff, 0x1c, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xf3, 0x9c, 0xff, 0xa7, 0x31, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xef, 0xeb, 0xff, 0xe7, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x49, 0xe2, 0xff, 0xb6, 0xf5, 0xff, 0x9e, 0xff, 0xff, 0x76, 0xf5, 0xff, 0x29, 0xe2, 0xff, 0xa6, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0x86, 0xe1, 0xff, 0xa6, 0xe1, 0xff, 0xe8, 0xe1, 0xff, 0xb3, 0xf4, 0xff, 0x7e, 0xff, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xe7, 0xe1, 0xff, 0x21, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x82, 0xd8, 0xff, 0x92, 0xf4, 0xff, 0x3d, 0xff, 0xff, 0x51, 0xf4, 0xff, 0x62, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x41, 0xd8, 0xff, 0x6d, 0xeb, 0xff, 0x1c, 0xff, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x1c, 0xff, 0xff, 0x31, 0xec, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0xfc, 0xfe, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x1c, 0xff, 0xff, 0x31, 0xec, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0xfc, 0xfe, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x1c, 0xff, 0xff, 0x31, 0xec, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0xfc, 0xfe, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x1c, 0xff, 0xff, 0x31, 0xec, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0xfc, 0xfe, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x1c, 0xff, 0xff, 0x31, 0xec, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0xfc, 0xfe, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x1c, 0xff, 0xff, 0x31, 0xec, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0xfc, 0xfe, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xcb, 0x5a, 0xff, 0xfc, 0xe6, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x1c, 0xff, 0xff, 0x31, 0xec, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0xfc, 0xfe, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0xeb, 0x5a, 0xff, 0x1c, 0xe7, 0xff, + 0xa7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x71, 0xf4, 0xff, 0x1c, 0xff, 0xff, 0x31, 0xec, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0xfc, 0xfe, 0xff, 0x35, 0xad, 0xff, 0xc7, 0x39, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x45, 0x29, 0xff, 0xaf, 0x7b, 0xff, 0x9e, 0xf7, 0xff, + 0xc7, 0xe1, 0xff, 0x20, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x61, 0xd8, 0xff, 0x72, 0xf4, 0xff, 0x3c, 0xff, 0xff, 0x51, 0xf4, 0xff, 0x41, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x00, 0xd8, 0xff, 0x21, 0xd8, 0xff, 0x4d, 0xeb, 0xff, 0x1c, 0xff, 0xff, 0x75, 0xb5, 0xff, 0x08, 0x42, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x04, 0x21, 0xff, 0x25, 0x21, 0xff, 0xab, 0x52, 0xff, 0xb7, 0xbd, 0xff, 0xdf, 0xff, 0xff, + 0xcf, 0xeb, 0xff, 0x86, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0xe7, 0xe1, 0xff, 0x96, 0xf5, 0xff, 0x7e, 0xff, 0xff, 0x55, 0xf5, 0xff, 0xe8, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0x45, 0xe1, 0xff, 0xa6, 0xe1, 0xff, 0x92, 0xf4, 0xff, 0x7e, 0xff, 0xff, 0x9a, 0xd6, 0xff, 0xaf, 0x7b, 0xff, 0x49, 0x4a, 0xff, 0x08, 0x42, 0xff, 0x08, 0x42, 0xff, 0x08, 0x42, 0xff, 0x08, 0x42, 0xff, 0x08, 0x42, 0xff, 0x08, 0x42, 0xff, 0x49, 0x4a, 0xff, 0x4d, 0x6b, 0xff, 0x96, 0xb5, 0xff, 0x5d, 0xef, 0xff, 0xff, 0xff, 0xff, + 0xdb, 0xfe, 0xff, 0xd7, 0xfd, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0xf8, 0xfd, 0xff, 0x5d, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x3c, 0xff, 0xff, 0x18, 0xfe, 0xff, 0x96, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x76, 0xf5, 0xff, 0x96, 0xf5, 0xff, 0xd7, 0xf5, 0xff, 0xfc, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xf7, 0xff, 0xdb, 0xde, 0xff, 0xf8, 0xc5, 0xff, 0xd7, 0xbd, 0xff, 0xd7, 0xbd, 0xff, 0xd7, 0xbd, 0xff, 0xd7, 0xbd, 0xff, 0xd7, 0xbd, 0xff, 0xd7, 0xbd, 0xff, 0x18, 0xc6, 0xff, 0xdb, 0xde, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +#endif +#if LV_COLOR_DEPTH == 32 + /*Pixel format: Blue: 8 bit, Green: 8 bit, Red: 8 bit, Alpha: 8 bit*/ + 0xff, 0xff, 0xff, 0xff, 0xfa, 0xfa, 0xfa, 0xff, 0xeb, 0xeb, 0xeb, 0xff, 0xda, 0xda, 0xda, 0xff, 0xd2, 0xd1, 0xd1, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd1, 0xd0, 0xd0, 0xff, 0xd2, 0xd1, 0xd1, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0xe8, 0xe8, 0xe8, 0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xf9, 0xf9, 0xf9, 0xff, 0xd8, 0xd8, 0xd7, 0xff, 0xa3, 0xa2, 0xa2, 0xff, 0x6e, 0x6d, 0x6d, 0xff, 0x59, 0x57, 0x57, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x56, 0x55, 0x55, 0xff, 0x58, 0x57, 0x56, 0xff, 0x68, 0x67, 0x67, 0xff, 0x99, 0x98, 0x98, 0xff, 0xcf, 0xce, 0xce, 0xff, 0xf4, 0xf4, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xe0, 0xe0, 0xdf, 0xff, 0x7c, 0x7b, 0x7a, 0xff, 0x32, 0x30, 0x2f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x2a, 0x28, 0x27, 0xff, 0x6c, 0x6a, 0x6a, 0xff, 0xcb, 0xcb, 0xca, 0xff, 0xfd, 0xfd, 0xfd, 0xff, + 0x9f, 0x9e, 0x9e, 0xff, 0x3c, 0x3a, 0x39, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x23, 0x21, 0x20, 0xff, 0x23, 0x21, 0x20, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x30, 0x2e, 0x2d, 0xff, 0x89, 0x88, 0x87, 0xff, 0xf4, 0xf4, 0xf4, 0xff, + 0x67, 0x66, 0x65, 0xff, 0x29, 0x27, 0x26, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x30, 0x2f, 0x2e, 0xff, 0x42, 0x41, 0x40, 0xff, 0x41, 0x3f, 0x3e, 0xff, 0x2e, 0x2c, 0x2b, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x23, 0x21, 0x20, 0xff, 0x63, 0x61, 0x61, 0xff, 0xe7, 0xe7, 0xe7, 0xff, + 0x53, 0x51, 0x51, 0xff, 0x24, 0x22, 0x21, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x2a, 0x28, 0x27, 0xff, 0x6c, 0x6c, 0x6b, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0x9e, 0x9d, 0x9d, 0xff, 0x60, 0x5e, 0x5d, 0xff, 0x2c, 0x2a, 0x29, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x59, 0x58, 0x57, 0xff, 0xdf, 0xdf, 0xdf, 0xff, + 0x51, 0x4f, 0x4e, 0xff, 0x24, 0x22, 0x21, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x23, 0x21, 0x20, 0xff, 0x3a, 0x38, 0x38, 0xff, 0xc0, 0xc0, 0xbf, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xa0, 0x9f, 0x9e, 0xff, 0x40, 0x3f, 0x3e, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x51, 0x4f, 0x4e, 0xff, 0x24, 0x22, 0x21, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x40, 0x3e, 0x3d, 0xff, 0xdc, 0xdc, 0xdb, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0xb1, 0xb0, 0xb0, 0xff, 0x49, 0x47, 0x46, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x51, 0x4f, 0x4e, 0xff, 0x24, 0x22, 0x21, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x2f, 0x2d, 0x2c, 0xff, 0x92, 0x91, 0x90, 0xff, 0xcf, 0xcf, 0xce, 0xff, 0xca, 0xca, 0xc9, 0xff, 0x7d, 0x7d, 0x7c, 0xff, 0x32, 0x30, 0x2f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x51, 0x4f, 0x4e, 0xff, 0x24, 0x22, 0x21, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x23, 0x21, 0x20, 0xff, 0x3d, 0x3b, 0x3a, 0xff, 0x56, 0x55, 0x54, 0xff, 0x54, 0x53, 0x52, 0xff, 0x37, 0x36, 0x35, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x51, 0x4f, 0x4e, 0xff, 0x23, 0x22, 0x21, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x23, 0x21, 0x20, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x58, 0x56, 0x55, 0xff, 0x26, 0x24, 0x23, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x86, 0x85, 0x84, 0xff, 0x46, 0x44, 0x43, 0xff, 0x37, 0x36, 0x35, 0xff, 0x36, 0x34, 0x33, 0xff, 0x36, 0x34, 0x33, 0xff, 0x36, 0x34, 0x33, 0xff, 0x36, 0x34, 0x33, 0xff, 0x36, 0x34, 0x33, 0xff, 0x36, 0x34, 0x33, 0xff, 0x36, 0x34, 0x33, 0xff, 0x36, 0x34, 0x33, 0xff, 0x36, 0x34, 0x33, 0xff, 0x33, 0x32, 0x31, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0xe4, 0xe3, 0xe3, 0xff, 0xaf, 0xae, 0xae, 0xff, 0x99, 0x98, 0x97, 0xff, 0x96, 0x95, 0x95, 0xff, 0x96, 0x95, 0x95, 0xff, 0x96, 0x95, 0x95, 0xff, 0x97, 0x95, 0x95, 0xff, 0x97, 0x95, 0x95, 0xff, 0x96, 0x95, 0x95, 0xff, 0x96, 0x95, 0x95, 0xff, 0x96, 0x95, 0x95, 0xff, 0x96, 0x95, 0x94, 0xff, 0x8d, 0x8c, 0x8b, 0xff, 0x69, 0x68, 0x67, 0xff, 0x37, 0x35, 0x34, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0xf1, 0xf1, 0xfa, 0xff, 0xe1, 0xe1, 0xf1, 0xff, 0xdb, 0xdb, 0xef, 0xff, 0xda, 0xda, 0xed, 0xff, 0xda, 0xda, 0xed, 0xff, 0xda, 0xda, 0xed, 0xff, 0xda, 0xda, 0xee, 0xff, 0xda, 0xda, 0xee, 0xff, 0xda, 0xda, 0xed, 0xff, 0xda, 0xda, 0xed, 0xff, 0xda, 0xda, 0xed, 0xff, 0xdf, 0xdf, 0xee, 0xff, 0xe7, 0xe7, 0xec, 0xff, 0xcd, 0xcc, 0xcd, 0xff, 0x6d, 0x6c, 0x6b, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0xba, 0xba, 0xf5, 0xff, 0x8a, 0x8a, 0xed, 0xff, 0x80, 0x80, 0xec, 0xff, 0x80, 0x80, 0xec, 0xff, 0x80, 0x80, 0xec, 0xff, 0x80, 0x80, 0xec, 0xff, 0x80, 0x80, 0xec, 0xff, 0x80, 0x80, 0xec, 0xff, 0x80, 0x80, 0xec, 0xff, 0x80, 0x80, 0xec, 0xff, 0x80, 0x80, 0xec, 0xff, 0x93, 0x93, 0xef, 0xff, 0xd6, 0xd6, 0xf8, 0xff, 0xea, 0xea, 0xed, 0xff, 0x8e, 0x8d, 0x8c, 0xff, 0x26, 0x24, 0x23, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x5e, 0x5e, 0xe7, 0xff, 0x20, 0x20, 0xdd, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x18, 0x18, 0xdc, 0xff, 0x2a, 0x2a, 0xdf, 0xff, 0xa3, 0xa3, 0xf1, 0xff, 0xe8, 0xe8, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x37, 0x37, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8c, 0x8c, 0xed, 0xff, 0xe4, 0xe4, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe3, 0xe3, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe3, 0xe3, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe3, 0xe3, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe3, 0xe3, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe3, 0xe3, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe3, 0xe3, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe3, 0xe3, 0xf0, 0xff, 0x95, 0x94, 0x93, 0xff, 0x28, 0x26, 0x25, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x37, 0x37, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8c, 0x8c, 0xed, 0xff, 0xe4, 0xe4, 0xf0, 0xff, 0x97, 0x97, 0x96, 0xff, 0x2a, 0x28, 0x27, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x4b, 0x4b, 0xe3, 0xff, 0x11, 0x11, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x1a, 0x1a, 0xdc, 0xff, 0x98, 0x98, 0xf0, 0xff, 0xea, 0xea, 0xf3, 0xff, 0xa8, 0xa7, 0xa6, 0xff, 0x3f, 0x3e, 0x3d, 0xff, 0x2d, 0x2b, 0x2a, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2b, 0x29, 0x28, 0xff, 0x2a, 0x28, 0x27, 0xff, 0x27, 0x25, 0x24, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x9e, 0x9e, 0xf0, 0xff, 0x62, 0x62, 0xe7, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x57, 0x57, 0xe5, 0xff, 0x6b, 0x6b, 0xe8, 0xff, 0xc7, 0xc7, 0xf7, 0xff, 0xf6, 0xf6, 0xfa, 0xff, 0xd5, 0xd4, 0xd4, 0xff, 0x91, 0x90, 0x8f, 0xff, 0x71, 0x70, 0x70, 0xff, 0x6d, 0x6b, 0x6a, 0xff, 0x6c, 0x6b, 0x6a, 0xff, 0x6c, 0x6b, 0x6a, 0xff, 0x6c, 0x6b, 0x6a, 0xff, 0x6c, 0x6b, 0x6a, 0xff, 0x6c, 0x6b, 0x6a, 0xff, 0x6c, 0x6b, 0x6a, 0xff, 0x6c, 0x6b, 0x6a, 0xff, 0x6c, 0x6b, 0x6a, 0xff, 0x69, 0x67, 0x66, 0xff, 0x52, 0x50, 0x50, 0xff, 0x33, 0x31, 0x30, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0xed, 0xed, 0xfd, 0xff, 0xd7, 0xd7, 0xf9, 0xff, 0xd2, 0xd2, 0xf9, 0xff, 0xd2, 0xd2, 0xf8, 0xff, 0xd2, 0xd2, 0xf9, 0xff, 0xd2, 0xd2, 0xf8, 0xff, 0xd2, 0xd2, 0xf9, 0xff, 0xd2, 0xd2, 0xf9, 0xff, 0xd2, 0xd2, 0xf8, 0xff, 0xd2, 0xd2, 0xf9, 0xff, 0xd2, 0xd2, 0xf9, 0xff, 0xdb, 0xdb, 0xf9, 0xff, 0xf4, 0xf4, 0xfd, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xe8, 0xe7, 0xe7, 0xff, 0xda, 0xda, 0xd9, 0xff, 0xd8, 0xd8, 0xd7, 0xff, 0xd8, 0xd7, 0xd7, 0xff, 0xd8, 0xd7, 0xd7, 0xff, 0xd8, 0xd7, 0xd7, 0xff, 0xd8, 0xd7, 0xd7, 0xff, 0xd8, 0xd7, 0xd7, 0xff, 0xd8, 0xd7, 0xd7, 0xff, 0xd8, 0xd7, 0xd7, 0xff, 0xd8, 0xd7, 0xd7, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0xbf, 0xbf, 0xbf, 0xff, 0x6e, 0x6d, 0x6d, 0xff, 0x2b, 0x2a, 0x29, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0xdf, 0xdf, 0xfb, 0xff, 0xb4, 0xb4, 0xf4, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xa9, 0xa9, 0xf2, 0xff, 0xbb, 0xbb, 0xf4, 0xff, 0xec, 0xec, 0xfc, 0xff, 0xfc, 0xfc, 0xfe, 0xff, 0xe7, 0xe7, 0xfb, 0xff, 0xbe, 0xbe, 0xf5, 0xff, 0xaa, 0xaa, 0xf1, 0xff, 0xa9, 0xa9, 0xf1, 0xff, 0xa9, 0xa9, 0xf1, 0xff, 0xa9, 0xa9, 0xf1, 0xff, 0xa9, 0xa9, 0xf1, 0xff, 0xa9, 0xa9, 0xf1, 0xff, 0xa9, 0xa9, 0xf1, 0xff, 0xa9, 0xa9, 0xf1, 0xff, 0xaa, 0xaa, 0xf1, 0xff, 0xb7, 0xb7, 0xf4, 0xff, 0xe0, 0xe0, 0xf9, 0xff, 0xf5, 0xf5, 0xf6, 0xff, 0x9c, 0x9b, 0x9b, 0xff, 0x36, 0x34, 0x33, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x7b, 0x7b, 0xeb, 0xff, 0x3c, 0x3c, 0xe1, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x47, 0x47, 0xe4, 0xff, 0xb4, 0xb4, 0xf3, 0xff, 0xf0, 0xf0, 0xfd, 0xff, 0xad, 0xad, 0xf2, 0xff, 0x46, 0x46, 0xe3, 0xff, 0x33, 0x33, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x32, 0x32, 0xe0, 0xff, 0x33, 0x33, 0xe0, 0xff, 0x3e, 0x3e, 0xe1, 0xff, 0x96, 0x96, 0xef, 0xff, 0xed, 0xed, 0xfb, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x3b, 0x3b, 0xe1, 0xff, 0x06, 0x06, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x0f, 0x0f, 0xda, 0xff, 0x8f, 0x8f, 0xee, 0xff, 0xe5, 0xe5, 0xfc, 0xff, 0x89, 0x89, 0xed, 0xff, 0x0d, 0x0d, 0xda, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x02, 0x02, 0xd8, 0xff, 0x09, 0x09, 0xd9, 0xff, 0x6b, 0x6b, 0xe9, 0xff, 0xe0, 0xe0, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe1, 0xe1, 0xfb, 0xff, 0x85, 0x85, 0xec, 0xff, 0x08, 0x08, 0xd9, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x67, 0x67, 0xe8, 0xff, 0xdd, 0xdd, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe1, 0xe1, 0xfb, 0xff, 0x85, 0x85, 0xec, 0xff, 0x08, 0x08, 0xd9, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x67, 0x67, 0xe8, 0xff, 0xdd, 0xdd, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe1, 0xe1, 0xfb, 0xff, 0x85, 0x85, 0xec, 0xff, 0x08, 0x08, 0xd9, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x67, 0x67, 0xe8, 0xff, 0xdd, 0xdd, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe1, 0xe1, 0xfb, 0xff, 0x85, 0x85, 0xec, 0xff, 0x08, 0x08, 0xd9, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x67, 0x67, 0xe8, 0xff, 0xdd, 0xdd, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe1, 0xe1, 0xfb, 0xff, 0x85, 0x85, 0xec, 0xff, 0x08, 0x08, 0xd9, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x67, 0x67, 0xe8, 0xff, 0xdd, 0xdd, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xde, 0xde, 0xdd, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe1, 0xe1, 0xfb, 0xff, 0x85, 0x85, 0xec, 0xff, 0x08, 0x08, 0xd9, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x67, 0x67, 0xe8, 0xff, 0xdd, 0xdd, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x58, 0x57, 0x56, 0xff, 0xdf, 0xde, 0xde, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe1, 0xe1, 0xfb, 0xff, 0x85, 0x85, 0xec, 0xff, 0x08, 0x08, 0xd9, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x67, 0x67, 0xe8, 0xff, 0xdd, 0xdd, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x20, 0x1f, 0xff, 0x5c, 0x5b, 0x5a, 0xff, 0xe3, 0xe2, 0xe2, 0xff, + 0x36, 0x36, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0b, 0x0b, 0xda, 0xff, 0x8b, 0x8b, 0xed, 0xff, 0xe1, 0xe1, 0xfb, 0xff, 0x85, 0x85, 0xec, 0xff, 0x08, 0x08, 0xd9, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x67, 0x67, 0xe8, 0xff, 0xdd, 0xdd, 0xf9, 0xff, 0xa6, 0xa5, 0xa7, 0xff, 0x3a, 0x39, 0x38, 0xff, 0x22, 0x20, 0x1f, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x28, 0x27, 0x26, 0xff, 0x77, 0x75, 0x75, 0xff, 0xf0, 0xf0, 0xf0, 0xff, + 0x38, 0x38, 0xe1, 0xff, 0x03, 0x03, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x0c, 0x0c, 0xda, 0xff, 0x8d, 0x8d, 0xee, 0xff, 0xe3, 0xe3, 0xfc, 0xff, 0x87, 0x87, 0xed, 0xff, 0x0a, 0x0a, 0xda, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x00, 0x00, 0xd8, 0xff, 0x06, 0x06, 0xd9, 0xff, 0x69, 0x69, 0xe8, 0xff, 0xdf, 0xdf, 0xfa, 0xff, 0xac, 0xab, 0xae, 0xff, 0x41, 0x3f, 0x3e, 0xff, 0x23, 0x21, 0x20, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x21, 0x1f, 0x1e, 0xff, 0x26, 0x24, 0x24, 0xff, 0x55, 0x53, 0x53, 0xff, 0xb6, 0xb6, 0xb5, 0xff, 0xfa, 0xfa, 0xfa, 0xff, + 0x77, 0x77, 0xea, 0xff, 0x31, 0x31, 0xe0, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x3b, 0x3b, 0xe2, 0xff, 0xb0, 0xb0, 0xf2, 0xff, 0xed, 0xed, 0xfd, 0xff, 0xa8, 0xa8, 0xf1, 0xff, 0x3d, 0x3d, 0xe2, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x28, 0x28, 0xde, 0xff, 0x34, 0x34, 0xe0, 0xff, 0x91, 0x91, 0xee, 0xff, 0xed, 0xed, 0xfc, 0xff, 0xd1, 0xd0, 0xd2, 0xff, 0x77, 0x75, 0x75, 0xff, 0x49, 0x48, 0x47, 0xff, 0x43, 0x41, 0x40, 0xff, 0x43, 0x41, 0x40, 0xff, 0x43, 0x41, 0x40, 0xff, 0x43, 0x41, 0x40, 0xff, 0x43, 0x41, 0x40, 0xff, 0x44, 0x42, 0x41, 0xff, 0x4b, 0x49, 0x48, 0xff, 0x6b, 0x69, 0x68, 0xff, 0xb1, 0xaf, 0xaf, 0xff, 0xe9, 0xe9, 0xe9, 0xff, 0xfe, 0xfe, 0xfe, 0xff, + 0xd8, 0xd8, 0xf9, 0xff, 0xb9, 0xb9, 0xf5, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xbe, 0xbe, 0xf5, 0xff, 0xe8, 0xe8, 0xfc, 0xff, 0xfa, 0xfa, 0xfe, 0xff, 0xe4, 0xe4, 0xfb, 0xff, 0xbf, 0xbf, 0xf5, 0xff, 0xaf, 0xaf, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xae, 0xae, 0xf2, 0xff, 0xaf, 0xaf, 0xf2, 0xff, 0xb9, 0xb9, 0xf4, 0xff, 0xde, 0xde, 0xfa, 0xff, 0xfb, 0xfb, 0xfe, 0xff, 0xf5, 0xf4, 0xf4, 0xff, 0xda, 0xda, 0xda, 0xff, 0xbf, 0xbe, 0xbd, 0xff, 0xb9, 0xb7, 0xb7, 0xff, 0xb9, 0xb7, 0xb7, 0xff, 0xb9, 0xb7, 0xb7, 0xff, 0xb9, 0xb7, 0xb7, 0xff, 0xb9, 0xb7, 0xb7, 0xff, 0xba, 0xb8, 0xb8, 0xff, 0xc1, 0xc0, 0xbf, 0xff, 0xd9, 0xd9, 0xd9, 0xff, 0xf2, 0xf2, 0xf2, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, +#endif +}; + +const lv_img_dsc_t img_lvgl_logo = { + .header.always_zero = 0, + .header.w = 42, + .header.h = 43, + .data_size = 1806 * LV_IMG_PX_SIZE_ALPHA_BYTE, + .header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA, + .data = img_lvgl_logo_map, +}; + + diff --git a/example/peripheral/media/lvgl_indev/src/lv_indev_port.c b/example/peripheral/media/lvgl_indev/src/lv_indev_port.c new file mode 100644 index 0000000000000000000000000000000000000000..283197060eaf22e62585ca79dcf93074cd4b2ebd --- /dev/null +++ b/example/peripheral/media/lvgl_indev/src/lv_indev_port.c @@ -0,0 +1,589 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * FilePath: lv_indev_port.c + * Date: 2023-02-05 18:27:47 + * LastEditTime: 2023-04-20 11:02:47 + * Description: This file is for providing the lvgl indev config + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/04/20 Modify the format and establish the version + */ +/********************* + * INCLUDES + *********************/ +#include +#include "FreeRTOS.h" +#include "task.h" +#include "fsleep.h" +#include "fcache.h" +#include "fmemory_pool.h" +#include "fcpu_info.h" +#include "fassert.h" + +#include "lv_indev_port.h" +#include "lv_port_disp.h" +#include "lvgl.h" +#include "usbh_core.h" +#include "usbh_hid.h" + +#define HID_KEYCODE_TO_ASCII \ + {0 , 0 }, /* 0x00 */ \ + {0 , 0 }, /* 0x01 */ \ + {0 , 0 }, /* 0x02 */ \ + {0 , 0 }, /* 0x03 */ \ + {'a' , 'A' }, /* 0x04 */ \ + {'b' , 'B' }, /* 0x05 */ \ + {'c' , 'C' }, /* 0x06 */ \ + {'d' , 'D' }, /* 0x07 */ \ + {'e' , 'E' }, /* 0x08 */ \ + {'f' , 'F' }, /* 0x09 */ \ + {'g' , 'G' }, /* 0x0a */ \ + {'h' , 'H' }, /* 0x0b */ \ + {'i' , 'I' }, /* 0x0c */ \ + {'j' , 'J' }, /* 0x0d */ \ + {'k' , 'K' }, /* 0x0e */ \ + {'l' , 'L' }, /* 0x0f */ \ + {'m' , 'M' }, /* 0x10 */ \ + {'n' , 'N' }, /* 0x11 */ \ + {'o' , 'O' }, /* 0x12 */ \ + {'p' , 'P' }, /* 0x13 */ \ + {'q' , 'Q' }, /* 0x14 */ \ + {'r' , 'R' }, /* 0x15 */ \ + {'s' , 'S' }, /* 0x16 */ \ + {'t' , 'T' }, /* 0x17 */ \ + {'u' , 'U' }, /* 0x18 */ \ + {'v' , 'V' }, /* 0x19 */ \ + {'w' , 'W' }, /* 0x1a */ \ + {'x' , 'X' }, /* 0x1b */ \ + {'y' , 'Y' }, /* 0x1c */ \ + {'z' , 'Z' }, /* 0x1d */ \ + {'1' , '!' }, /* 0x1e */ \ + {'2' , '@' }, /* 0x1f */ \ + {'3' , '#' }, /* 0x20 */ \ + {'4' , '$' }, /* 0x21 */ \ + {'5' , '%' }, /* 0x22 */ \ + {'6' , '^' }, /* 0x23 */ \ + {'7' , '&' }, /* 0x24 */ \ + {'8' , '*' }, /* 0x25 */ \ + {'9' , '(' }, /* 0x26 */ \ + {'0' , ')' }, /* 0x27 */ \ + {'\r' , '\r' }, /* 0x28 */ \ + {'\x1b', '\x1b' }, /* 0x29 */ \ + {'\b' , '\b' }, /* 0x2a */ \ + {'\t' , '\t' }, /* 0x2b */ \ + {' ' , ' ' }, /* 0x2c */ \ + {'-' , '_' }, /* 0x2d */ \ + {'=' , '+' }, /* 0x2e */ \ + {'[' , '{' }, /* 0x2f */ \ + {']' , '}' }, /* 0x30 */ \ + {'\\' , '|' }, /* 0x31 */ \ + {'#' , '~' }, /* 0x32 */ \ + {';' , ':' }, /* 0x33 */ \ + {'\'' , '\"' }, /* 0x34 */ \ + {'`' , '~' }, /* 0x35 */ \ + {',' , '<' }, /* 0x36 */ \ + {'.' , '>' }, /* 0x37 */ \ + {'/' , '?' }, /* 0x38 */ \ + \ + {0 , 0 }, /* 0x39 */ \ + {0 , 0 }, /* 0x3a */ \ + {0 , 0 }, /* 0x3b */ \ + {0 , 0 }, /* 0x3c */ \ + {0 , 0 }, /* 0x3d */ \ + {0 , 0 }, /* 0x3e */ \ + {0 , 0 }, /* 0x3f */ \ + {0 , 0 }, /* 0x40 */ \ + {0 , 0 }, /* 0x41 */ \ + {0 , 0 }, /* 0x42 */ \ + {0 , 0 }, /* 0x43 */ \ + {0 , 0 }, /* 0x44 */ \ + {0 , 0 }, /* 0x45 */ \ + {0 , 0 }, /* 0x46 */ \ + {0 , 0 }, /* 0x47 */ \ + {0 , 0 }, /* 0x48 */ \ + {0 , 0 }, /* 0x49 */ \ + {0 , 0 }, /* 0x4a */ \ + {0 , 0 }, /* 0x4b */ \ + {0 , 0 }, /* 0x4c */ \ + {0 , 0 }, /* 0x4d */ \ + {0 , 0 }, /* 0x4e */ \ + {0 , 0 }, /* 0x4f */ \ + {0 , 0 }, /* 0x50 */ \ + {0 , 0 }, /* 0x51 */ \ + {0 , 0 }, /* 0x52 */ \ + {0 , 0 }, /* 0x53 */ \ + \ + {'/' , '/' }, /* 0x54 */ \ + {'*' , '*' }, /* 0x55 */ \ + {'-' , '-' }, /* 0x56 */ \ + {'+' , '+' }, /* 0x57 */ \ + {'\r' , '\r' }, /* 0x58 */ \ + {'1' , '1' }, /* 0x59 */ \ + {'2' , '2' }, /* 0x5a */ \ + {'3' , '3' }, /* 0x5b */ \ + {'4' , '4' }, /* 0x5c */ \ + {'5' , '5' }, /* 0x5d */ \ + {'6' , '6' }, /* 0x5e */ \ + {'7' , '7' }, /* 0x5f */ \ + {'8' , '8' }, /* 0x60 */ \ + {'9' , '9' }, /* 0x61 */ \ + {'0' , 0 }, /* 0x62 */ \ + {'0' , 0 }, /* 0x63 */ \ + {'=' , '=' }, /* 0x67 */ \ + + +/************************** Variable Definitions *****************************/ +#define FUSB_MEMP_TOTAL_SIZE SZ_1M + +static char *keyborad_name = "/usb0/kbd0"; +static char *mouse_name = "/usb1/mouse1"; + +static FMemp memp; +static u8 memp_buf[FUSB_MEMP_TOTAL_SIZE]; +static struct usbh_bus usb[FUSB3_NUM]; +static struct usbh_urb kbd_intin_urb; +static bool botton_press_state = false; + +static struct usbh_urb mouse_intin_urb; +static uint8_t mouse_buffer[128] __attribute__((aligned(sizeof(unsigned long)))) = {0}; +static uint8_t kbd_buffer[128] __attribute__((aligned(sizeof(unsigned long)))) = {0}; +static u8 const keycode2ascii[128][2] = { HID_KEYCODE_TO_ASCII }; + +static f32 mouse_xdisp; +static f32 mouse_ydisp; +static uint8_t mouse_wdisp;/*reserved,w is the botton of mouse*/ +static u8 keyborad_code; + +lv_indev_t *indev_mouse; +lv_indev_t *indev_keypad; + +static void mouse_init(u32 id); +static void mouse_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data); +static bool mouse_is_pressed(void); +static void mouse_get_xy(lv_coord_t *x, lv_coord_t *y); +static void keypad_init(u32 id); +static void keypad_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data); +static uint32_t keypad_get_key(void); + +/************************** Function Prototypes ******************************/ +extern void USBH_IRQHandler(void *); + +static void UsbHcInterrruptHandler(s32 vector, void *param) +{ + USBH_IRQHandler(param); +} + +static u8 UsbInputGetInterfaceProtocol(struct usbh_hid *hid_class) +{ + struct usbh_hubport *hport = hid_class->hport; + u8 intf = hid_class->intf; + const struct usb_interface_descriptor *intf_desc = &hport->config.intf->altsetting[intf].intf_desc; + + return intf_desc->bInterfaceProtocol; +} + +static void UsbHcSetupInterrupt(u32 id) +{ + u32 cpu_id; + u32 irq_num = (id == FUSB3_ID_0) ? FUSB3_0_IRQ_NUM : FUSB3_1_IRQ_NUM; + u32 irq_priority = 13U; + + GetCpuId(&cpu_id); + InterruptSetTargetCpus(irq_num, cpu_id); + + InterruptSetPriority(irq_num, irq_priority); + + /* register intr callback */ + InterruptInstall(irq_num, + UsbHcInterrruptHandler, + &usb[id], + NULL); + + /* enable irq */ + InterruptUmask(irq_num); +} + +/*********************************hardware configure********************************************/ +void UsbHcSetupMemp(void) +{ + if (FT_COMPONENT_IS_READY != memp.is_ready) + { + USB_ASSERT(FT_SUCCESS == FMempInit(&memp, &memp_buf[0], &memp_buf[0] + FUSB_MEMP_TOTAL_SIZE)); + } +} + +/* implement cherryusb weak functions */ +void usb_hc_low_level_init(uint32_t id) +{ + UsbHcSetupMemp(); + UsbHcSetupInterrupt(id); +} + +unsigned long usb_hc_get_register_base(uint32_t id) +{ + if (FUSB3_ID_0 == id) + { + return FUSB3_0_BASE_ADDR + FUSB3_XHCI_OFFSET; + } + else + { + return FUSB3_1_BASE_ADDR + FUSB3_XHCI_OFFSET; + } +} + +void *usb_hc_malloc(size_t size) +{ + return usb_hc_malloc_align(sizeof(void *), size); +} + +void *usb_hc_malloc_align(size_t align, size_t size) +{ + void *result = FMempMallocAlign(&memp, size, align); + + if (result) + { + memset(result, 0U, size); + } + return result; +} + +void usb_hc_free(void *ptr) +{ + if (NULL != ptr) + { + FMempFree(&memp, ptr); + } +} + +void usb_assert(const char *filename, int linenum) +{ + FAssert(filename, linenum, 0xff); +} + +void usb_hc_dcache_invalidate(void *addr, unsigned long len) +{ + FCacheDCacheInvalidateRange((uintptr)addr, len); +} + +/*********************************usb indev function********************************************/ +/* look up new key in previous keys */ +static inline boolean FindKeyInPrevInput(const struct usb_hid_kbd_report *report, u8 keycode) +{ + for (u8 i = 0; i < 6; i++) + { + if (report->key[i] == keycode) + { + return TRUE; + } + } + return FALSE; +} + +static void UsbKeyBoardHandleInput(struct usb_hid_kbd_report *input) +{ + static struct usb_hid_kbd_report prev_input = { 0, 0, {0} }; /* previous report to check key released */ + + /* ------------- example code ignore control (non-printable) key affects ------------- */ + for (u8 i = 0; i < 6; i++) + { + if (input->key[i]) + { + if (FindKeyInPrevInput(&prev_input, input->key[i])) + { + /* exist in previous report means the current key is holding */ + } + else + { + /* not existed in previous report means the current key is pressed */ + boolean is_shift = input->modifier & (HID_MODIFER_LSHIFT | HID_MODIFER_RSHIFT); + keyborad_code = keycode2ascii[input->key[i]][is_shift ? 1 : 0]; + fflush(stdout); /* flush right away, else libc will wait for newline */ + } + } + } + prev_input = *input; +} + +static void UsbKeyboardCallback(void *arg, int nbytes) +{ + u8 intf_protocol; + struct usbh_hid *kbd_class = (struct usbh_hid *)arg; + intf_protocol = UsbInputGetInterfaceProtocol(kbd_class); + + if (HID_PROTOCOL_KEYBOARD == intf_protocol) /* handle input from keyboard */ + { + if (nbytes < (int)sizeof(struct usb_hid_kbd_report)) + { + printf("nbytes = %d", nbytes); + } + else + { + UsbKeyBoardHandleInput((struct usb_hid_kbd_report *)kbd_buffer); + } + } + else + { + printf("mismatch callback for protocol-%d", intf_protocol); + return; + } +} + +static inline void UsbMouseLeftButtonCB(void) +{ + printf("<-\r\n"); + botton_press_state = true; +} + +static inline void UsbMouseRightButtonCB(void) +{ + printf("->\r\n"); + botton_press_state = true; +} + +static inline void UsbMouseMiddleButtonCB(void) +{ + printf("C\r\n"); + botton_press_state = true; +} + +static void UsbMouseHandleInput(struct usb_hid_mouse_report *input) +{ + /*------------- button state -------------*/ + if (input->buttons & HID_MOUSE_INPUT_BUTTON_LEFT) + { + UsbMouseLeftButtonCB(); + } + + if (input->buttons & HID_MOUSE_INPUT_BUTTON_MIDDLE) + { + UsbMouseMiddleButtonCB(); + } + + if (input->buttons & HID_MOUSE_INPUT_BUTTON_RIGHT) + { + UsbMouseRightButtonCB(); + } + + mouse_xdisp = (f32)(LV_HOR_RES_MAX / 256.0) * input->xdisp + mouse_xdisp;/*relative to last position*/ + mouse_ydisp = (f32)(LV_VER_RES_MAX / 256.0) * input->ydisp + mouse_ydisp; + + if (mouse_xdisp < 0) + { + mouse_xdisp = 0;/*boundary of the screen*/ + } + if (mouse_ydisp < 0) + { + mouse_ydisp = 0; + } + if (mouse_xdisp > LV_HOR_RES_MAX) + { + mouse_xdisp = LV_HOR_RES_MAX; + } + if (mouse_ydisp > LV_VER_RES_MAX) + { + mouse_ydisp = LV_VER_RES_MAX; + } +} + +static void UsbMouseCallback(void *arg, int nbytes) +{ + u8 intf_protocol; + struct usbh_hid *mouse_class = (struct usbh_hid *)arg; + intf_protocol = UsbInputGetInterfaceProtocol(mouse_class); + + if (HID_PROTOCOL_MOUSE == intf_protocol) /* handle input from mouse */ + { + if (nbytes < (int)sizeof(struct usb_hid_mouse_report)) + { + printf("nbytes = %d", nbytes); + } + else + { + UsbMouseHandleInput((struct usb_hid_mouse_report *)mouse_buffer); + } + } + else + { + printf("mismatch callback for protocol-%d", intf_protocol); + return; + } +} + +/*********************************usb indev init********************************************/ + +void lv_port_kb_init(u32 id) +{ + static lv_indev_drv_t indev_drv_keyborad; + keypad_init(id); + /*Register a keypad input device*/ + lv_indev_drv_init(&indev_drv_keyborad); + indev_drv_keyborad.type = LV_INDEV_TYPE_KEYPAD; + indev_drv_keyborad.read_cb = keypad_read; + indev_keypad = lv_indev_drv_register(&indev_drv_keyborad); +} + +void lv_port_ms_init(u32 id) +{ + static lv_indev_drv_t indev_drv_mouse; + LV_IMG_DECLARE(lv_shubiao); + mouse_init(id); + /*Register a mouse input device*/ + lv_indev_drv_init(&indev_drv_mouse); + indev_drv_mouse.type = LV_INDEV_TYPE_POINTER; + indev_drv_mouse.read_cb = mouse_read; + indev_mouse = lv_indev_drv_register(&indev_drv_mouse); + + /*Set cursor. For simplicity set a HOME symbol now.*/ + lv_obj_t *mouse_cursor = lv_img_create(lv_scr_act()); + lv_img_set_src(mouse_cursor, &lv_shubiao); + lv_img_set_angle(mouse_cursor, 0); + + lv_img_set_zoom(mouse_cursor, 128); + lv_indev_set_cursor(indev_mouse, mouse_cursor); +} + +/*Initialize your mouse*/ +static void mouse_init(u32 id) +{ + u32 ret = 0; + memset(&usb[id], 0, sizeof(usb[id])); + ret = usbh_initialize(id, &usb[id]); + if (0 != ret) + { + printf("init usb failed \r\n"); + } + else + { + printf("init usb successd \r\n"); + } +} + +/*Will be called by the library to read the mouse*/ +static void mouse_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data) +{ + /*Get the current x and y coordinates*/ + mouse_get_xy(&data->point.x, &data->point.y); + + /*Get whether the mouse button is pressed or released*/ + if (mouse_is_pressed()) + { + data->state = LV_INDEV_STATE_PR; + botton_press_state = false; /*reserved, add event to control your demo*/ + } + else + { + data->state = LV_INDEV_STATE_REL; + } +} + +/*Return true is the mouse button is pressed*/ +static bool mouse_is_pressed(void) +{ + if (true == botton_press_state) + { + printf("botton_press_state \r\n"); + return true; + } + else + { + return false; + } +} + +/*Get the x and y coordinates if the mouse is pressed*/ +static void mouse_get_xy(lv_coord_t *x, lv_coord_t *y) +{ + struct usbh_hid *mouse_class; + u8 intf_protocol; + mouse_class = (struct usbh_hid *)usbh_find_class_instance(mouse_name); + + if (mouse_class == NULL) + { + printf("mouse_class null \r\n"); + vTaskDelete(NULL); + return; + } + else + { + usbh_int_urb_fill(&mouse_intin_urb, mouse_class->intin, mouse_buffer, 8, 0, UsbMouseCallback, mouse_class); + usbh_submit_urb(&mouse_intin_urb); + (*x) = mouse_xdisp; + (*y) = mouse_ydisp; + } +} + +/*Initialize your keypad*/ +static void keypad_init(u32 id) +{ + u32 ret = 0; + memset(&usb[id], 0, sizeof(usb[id])); + ret = usbh_initialize(id, &usb[id]); + if (0 != ret) + { + printf("init usb failed \r\n"); + } + else + { + printf("init usb successd \r\n"); + } +} + +/*Will be called by the library to read the mouse*/ +static void keypad_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data) +{ + static uint32_t last_key = 0; + + /*Get whether the a key is pressed and save the pressed key*/ + uint32_t act_key = keypad_get_key(); + keyborad_code = 0; + if (act_key != 0) + { + data->state = LV_INDEV_STATE_PR; + /*Translate the keys to LVGL control characters according to your key definitions*/ + last_key = act_key; + } + else + { + data->state = LV_INDEV_STATE_REL; + } + data->key = last_key; +} + +/*Get the currently being pressed key. 0 if no key is pressed*/ +static uint32_t keypad_get_key(void) +{ + /*Your code comes here*/ + struct usbh_hid *kbd_class; + u8 intf_protocol; + + kbd_class = (struct usbh_hid *)usbh_find_class_instance(keyborad_name); + if (kbd_class == NULL) + { + printf("kbd_class null \r\n"); + vTaskDelete(NULL); + return 0; + } + else + { + usbh_int_urb_fill(&kbd_intin_urb, kbd_class->intin, kbd_buffer, 8, 0, UsbKeyboardCallback, kbd_class); + usbh_submit_urb(&kbd_intin_urb); + return keyborad_code; + } + + return 0; +} + +/*This dummy typedef exists purely to silence -Wpedantic.*/ +typedef int keep_pedantic_happy; diff --git a/example/peripheral/media/lvgl_indev/src/lv_indev_test.c b/example/peripheral/media/lvgl_indev/src/lv_indev_test.c new file mode 100644 index 0000000000000000000000000000000000000000..6e4d8d626c67dc45d71a58b9c3a0476f2ea1fc17 --- /dev/null +++ b/example/peripheral/media/lvgl_indev/src/lv_indev_test.c @@ -0,0 +1,933 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * FilePath: lv_indev_test.c + * Date: 2023-02-05 18:27:47 + * LastEditTime: 2023-03-20 11:02:47 + * Description: This file is for providing the lvgl test config and commond + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/04/20 Modify the format and establish the version + */ + +#include +#include +#include "FreeRTOSConfig.h" +#include "FreeRTOS.h" +#include "task.h" +#include "timers.h" +#include "fassert.h" + +#include "../lvgl.h" +#include "lv_indev_test.h" +#include "lv_indev_port.h" +#include "lv_port_disp.h" +#include "lv_spinbox.h" +#include "lv_btn.h" + +#include "usbh_core.h" + +typedef enum +{ + DISP_SMALL, + DISP_MEDIUM, + DISP_LARGE, +} disp_size_t; + +#define LVGL_HEART_TIMER_PERIOD (pdMS_TO_TICKS(1UL)) +#define LVGL_CONTINUE_TIMER 10000000 + +extern lv_indev_t *indev_keypad; + +static TimerHandle_t xLvglHeartTimer; +static TaskHandle_t demo_task; + +static TaskHandle_t init_kb_task; +static TaskHandle_t init_ms_task; +static TaskHandle_t init_task; +static InputParm *input_config; + +static void profile_create(lv_obj_t *parent); +static void color_changer_create(lv_obj_t *parent); + +static void color_changer_event_cb(lv_event_t *e); +static void color_event_cb(lv_event_t *e); +static void ta_event_cb(lv_event_t *e); +static void birthday_event_cb(lv_event_t *e); +static void calendar_event_cb(lv_event_t *e); +static void slider_event_cb(lv_event_t *e); + +static disp_size_t disp_size; +static lv_obj_t *tv; +static lv_obj_t *calendar; +static lv_style_t style_text_muted; +static lv_style_t style_title; +static lv_style_t style_icon; +static lv_style_t style_bullet; + +static const lv_font_t *font_large; +static const lv_font_t *font_normal; + +static void LvglHeartTimerCallback(TimerHandle_t xTimer) +{ + lv_tick_inc(1); +} + +static void keyboardinit(void *pvParameters) +{ + u32 keyboard_id = (u32)(uintptr)pvParameters; + lv_port_kb_init(keyboard_id); + vTaskDelete(NULL); +} + +static void mouseinit(void *pvParameters) +{ + u32 mouse_id = (u32)(uintptr)pvParameters; + lv_port_ms_init(mouse_id); + vTaskDelete(NULL); +} + +static void FFreeRTOSLVGLDemoTask(void *args) +{ + lv_demo_indev(); + + while (1) + { + if (lv_disp_get_inactive_time(NULL) < LVGL_CONTINUE_TIMER) + { + lv_timer_handler(); //! run lv task + } + else + { + printf("task is over \n"); + break; + } + vTaskDelay(1); + } + vTaskDelete(NULL); +} + +static void FFreeRTOSMediaInitTask(void *pvParameters) +{ + FASSERT(NULL != pvParameters); + InputParm *input_config = (InputParm *)pvParameters ; + FFreeRTOSMediaDeviceInit(input_config->channel, input_config->width, input_config->height, input_config->multi_mode, input_config->color_depth, input_config->refresh_rate); + lv_init(); + FFreeRTOSPortInit(); + vTaskDelete(NULL); +} + +BaseType_t FFreeRTOSListUsbDev(int argc, char *argv[]) +{ + return lsusb(argc, argv); +} + +BaseType_t FFreeRTOSInitKbCreate(u32 id) +{ + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + BaseType_t timer_started = pdPASS; + taskENTER_CRITICAL(); + /* init keyborad task */ + xReturn = xTaskCreate((TaskFunction_t)keyboardinit, /* 任务入口函数 */ + (const char *)"keyboardinit", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + (void *)(uintptr)id, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 3, /* 任务的优先级 */ + (TaskHandle_t *)&init_kb_task); /* 任务控制 */ + /* exit critical region */ + taskEXIT_CRITICAL(); + + return xReturn; +} + +BaseType_t FFreeRTOSInitMsCreate(u32 id) +{ + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + BaseType_t timer_started = pdPASS; + taskENTER_CRITICAL(); + /* init mouse task */ + xReturn = xTaskCreate((TaskFunction_t)mouseinit, /* 任务入口函数 */ + (const char *)"mouseinit", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + (void *)(uintptr)id, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 3, /* 任务的优先级 */ + (TaskHandle_t *)&init_ms_task); /* 任务控制 */ + + /* exit critical region */ + taskEXIT_CRITICAL(); + + return xReturn; +} + +BaseType_t FFreeRTOSMediaInitCreate(void *args) +{ + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + /* enter critical region */ + taskENTER_CRITICAL(); + /* Media init task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaInitTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSMediaInitTask", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + (void *)args, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ + (TaskHandle_t *)&init_task); /* 任务控制 */ + return xReturn; +} + +BaseType_t FFreeRTOSDemoCreate(void) +{ + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + BaseType_t timer_started = pdPASS; + taskENTER_CRITICAL(); + /* lvgl demo task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSLVGLDemoTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSLVGLDemoTask", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + NULL, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ + (TaskHandle_t *)&demo_task); /* 任务控制 */ + xLvglHeartTimer = xTimerCreate("LVGL Heart Software Timer", /* Text name for the software timer - not used by FreeRTOS. */ + LVGL_HEART_TIMER_PERIOD, /* The software timer's period in ticks. */ + pdTRUE, /* Setting uxAutoRealod to pdFALSE creates a one-shot software timer. */ + NULL, /* This example use the timer id. */ + LvglHeartTimerCallback); /* The callback function to be used by the software timer being created. */ + if (xLvglHeartTimer != NULL) + { + timer_started = xTimerStart(xLvglHeartTimer, 0); + if (timer_started != pdPASS) + { + vPrintf("CreateSoftwareTimerTasks xTimerStart failed \r\n"); + } + } + else + { + vPrintf("CreateSoftwareTimerTasks xTimerCreate failed \r\n"); + } + /* exit critical region */ + taskEXIT_CRITICAL(); + + return xReturn; +} + +void lv_demo_indev(void) +{ + if (LV_HOR_RES <= 320) + { + disp_size = DISP_SMALL; + } + else if (LV_HOR_RES < 720) + { + disp_size = DISP_MEDIUM; + } + else + { + disp_size = DISP_LARGE; + } + + font_large = LV_FONT_DEFAULT; + font_normal = LV_FONT_DEFAULT; + + lv_coord_t tab_h; + if (disp_size == DISP_LARGE) + { + tab_h = 70; +#if LV_FONT_MONTSERRAT_24 + font_large = &lv_font_montserrat_24; +#else + LV_LOG_WARN("LV_FONT_MONTSERRAT_24 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); +#endif +#if LV_FONT_MONTSERRAT_16 + font_normal = &lv_font_montserrat_16; +#else + LV_LOG_WARN("LV_FONT_MONTSERRAT_16 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); +#endif + } + else if (disp_size == DISP_MEDIUM) + { + tab_h = 45; +#if LV_FONT_MONTSERRAT_20 + font_large = &lv_font_montserrat_20; +#else + LV_LOG_WARN("LV_FONT_MONTSERRAT_20 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); +#endif +#if LV_FONT_MONTSERRAT_14 + font_normal = &lv_font_montserrat_14; +#else + LV_LOG_WARN("LV_FONT_MONTSERRAT_14 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); +#endif + } + else /* disp_size == DISP_SMALL */ + { + tab_h = 45; +#if LV_FONT_MONTSERRAT_18 + font_large = &lv_font_montserrat_18; +#else + LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); +#endif +#if LV_FONT_MONTSERRAT_12 + font_normal = &lv_font_montserrat_12; +#else + LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); +#endif + } + +#if LV_USE_THEME_DEFAULT + lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK, + font_normal); +#endif + + lv_style_init(&style_text_muted); + lv_style_set_text_opa(&style_text_muted, LV_OPA_50); + + lv_style_init(&style_title); + lv_style_set_text_font(&style_title, font_large); + + lv_style_init(&style_icon); + lv_style_set_text_color(&style_icon, lv_theme_get_color_primary(NULL)); + lv_style_set_text_font(&style_icon, font_large); + + lv_style_init(&style_bullet); + lv_style_set_border_width(&style_bullet, 0); + lv_style_set_radius(&style_bullet, LV_RADIUS_CIRCLE); + + tv = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, tab_h); + + lv_obj_set_style_text_font(lv_scr_act(), font_normal, 0); + + if (disp_size == DISP_LARGE) + { + lv_obj_t *tab_btns = lv_tabview_get_tab_btns(tv); + lv_obj_set_style_pad_left(tab_btns, LV_HOR_RES / 2, 0); + lv_obj_t *logo = lv_img_create(tab_btns); + LV_IMG_DECLARE(img_lvgl_logo); + lv_img_set_src(logo, &img_lvgl_logo); + lv_obj_align(logo, LV_ALIGN_LEFT_MID, -LV_HOR_RES / 2 + 25, 0); + + lv_obj_t *label = lv_label_create(tab_btns); + lv_obj_add_style(label, &style_title, 0); + lv_label_set_text(label, "LVGL v8"); + lv_obj_align_to(label, logo, LV_ALIGN_OUT_RIGHT_TOP, 10, 0); + + label = lv_label_create(tab_btns); + lv_label_set_text(label, "Widgets demo"); + lv_obj_add_style(label, &style_text_muted, 0); + lv_obj_align_to(label, logo, LV_ALIGN_OUT_RIGHT_BOTTOM, 10, 0); + } + + lv_obj_t *t1 = lv_tabview_add_tab(tv, "Profile"); + profile_create(t1); + color_changer_create(tv); +} + +static void profile_create(lv_obj_t *parent) +{ + lv_group_t *group = lv_group_create(); + lv_indev_set_group(indev_keypad, group); + + lv_obj_t *panel1 = lv_obj_create(parent); + lv_obj_set_height(panel1, LV_SIZE_CONTENT); + + LV_IMG_DECLARE(img_demo_widgets_avatar); + lv_obj_t *avatar = lv_img_create(panel1); + lv_img_set_src(avatar, &img_demo_widgets_avatar); + + lv_obj_t *name = lv_label_create(panel1); + lv_label_set_text(name, "Elena Smith"); + lv_obj_add_style(name, &style_title, 0); + + lv_obj_t *dsc = lv_label_create(panel1); + lv_obj_add_style(dsc, &style_text_muted, 0); + lv_label_set_text(dsc, "This is a short description of me. Take a look at my profile!"); + lv_label_set_long_mode(dsc, LV_LABEL_LONG_WRAP); + + lv_obj_t *email_icn = lv_label_create(panel1); + lv_obj_add_style(email_icn, &style_icon, 0); + lv_label_set_text(email_icn, LV_SYMBOL_ENVELOPE); + + lv_obj_t *email_label = lv_label_create(panel1); + lv_label_set_text(email_label, "elena@smith.com"); + + lv_obj_t *call_icn = lv_label_create(panel1); + lv_obj_add_style(call_icn, &style_icon, 0); + lv_label_set_text(call_icn, LV_SYMBOL_CALL); + + lv_obj_t *call_label = lv_label_create(panel1); + lv_label_set_text(call_label, "+79 246 123 4567"); + + lv_obj_t *log_out_btn = lv_btn_create(panel1); + lv_obj_set_height(log_out_btn, LV_SIZE_CONTENT); + + lv_obj_t *label = lv_label_create(log_out_btn); + lv_label_set_text(label, "Log out"); + lv_obj_center(label); + + lv_obj_t *invite_btn = lv_btn_create(panel1); + lv_obj_add_state(invite_btn, LV_STATE_DISABLED); + lv_obj_set_height(invite_btn, LV_SIZE_CONTENT); + + label = lv_label_create(invite_btn); + lv_label_set_text(label, "Invite"); + lv_obj_center(label); + + /*Create the second panel*/ + lv_obj_t *panel2 = lv_obj_create(parent); + lv_obj_set_height(panel2, LV_SIZE_CONTENT); + + lv_obj_t *panel2_title = lv_label_create(panel2); + lv_label_set_text(panel2_title, "Your profile"); + lv_obj_add_style(panel2_title, &style_title, 0); + + lv_obj_t *user_name_label = lv_label_create(panel2); + lv_label_set_text(user_name_label, "User name"); + lv_obj_add_style(user_name_label, &style_text_muted, 0); + + lv_obj_t *user_name = lv_textarea_create(panel2); + lv_textarea_set_one_line(user_name, true); + lv_textarea_set_placeholder_text(user_name, "Your name"); + lv_obj_add_event_cb(user_name, ta_event_cb, LV_EVENT_ALL, NULL); + lv_group_add_obj(group, user_name); + + lv_obj_t *gender_label = lv_label_create(panel2); + lv_label_set_text(gender_label, "Gender"); + lv_obj_add_style(gender_label, &style_text_muted, 0); + + lv_obj_t *gender = lv_dropdown_create(panel2); + lv_dropdown_set_options_static(gender, "Male\nFemale\nOther"); + + lv_obj_t *birthday_label = lv_label_create(panel2); + lv_label_set_text(birthday_label, "Birthday"); + lv_obj_add_style(birthday_label, &style_text_muted, 0); + + lv_obj_t *birthdate = lv_textarea_create(panel2); + lv_textarea_set_one_line(birthdate, true); + lv_obj_add_event_cb(birthdate, birthday_event_cb, LV_EVENT_ALL, NULL); + + /*Create the third panel*/ + lv_obj_t *panel3 = lv_obj_create(parent); + lv_obj_t *panel3_title = lv_label_create(panel3); + lv_label_set_text(panel3_title, "Your skills"); + lv_obj_add_style(panel3_title, &style_title, 0); + + lv_obj_t *experience_label = lv_label_create(panel3); + lv_label_set_text(experience_label, "Experience"); + lv_obj_add_style(experience_label, &style_text_muted, 0); + + lv_obj_t *slider1 = lv_slider_create(panel3); + lv_obj_set_width(slider1, LV_PCT(95)); + lv_obj_add_event_cb(slider1, slider_event_cb, LV_EVENT_ALL, NULL); + lv_obj_refresh_ext_draw_size(slider1); + + lv_obj_t *team_player_label = lv_label_create(panel3); + lv_label_set_text(team_player_label, "Team player"); + lv_obj_add_style(team_player_label, &style_text_muted, 0); + + lv_obj_t *sw1 = lv_switch_create(panel3); + + lv_obj_t *hard_working_label = lv_label_create(panel3); + lv_label_set_text(hard_working_label, "Hard-working"); + lv_obj_add_style(hard_working_label, &style_text_muted, 0); + + lv_obj_t *sw2 = lv_switch_create(panel3); + + if (disp_size == DISP_LARGE) + { + static lv_coord_t grid_main_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_main_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; + + /*Create the top panel*/ + static lv_coord_t grid_1_col_dsc[] = {LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_1_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; + + static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_2_row_dsc[] = + { + LV_GRID_CONTENT, /*Title*/ + 5, /*Separator*/ + LV_GRID_CONTENT, /*Box title*/ + 30, /*Boxes*/ + 5, /*Separator*/ + LV_GRID_CONTENT, /*Box title*/ + 30, /*Boxes*/ + LV_GRID_TEMPLATE_LAST + }; + + lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); + lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); + lv_obj_set_grid_cell(avatar, LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_CENTER, 0, 5); + lv_obj_set_grid_cell(name, LV_GRID_ALIGN_START, 2, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(dsc, LV_GRID_ALIGN_STRETCH, 2, 4, LV_GRID_ALIGN_START, 1, 1); + lv_obj_set_grid_cell(email_icn, LV_GRID_ALIGN_CENTER, 2, 1, LV_GRID_ALIGN_CENTER, 3, 1); + lv_obj_set_grid_cell(email_label, LV_GRID_ALIGN_START, 3, 1, LV_GRID_ALIGN_CENTER, 3, 1); + lv_obj_set_grid_cell(call_icn, LV_GRID_ALIGN_CENTER, 2, 1, LV_GRID_ALIGN_CENTER, 4, 1); + lv_obj_set_grid_cell(call_label, LV_GRID_ALIGN_START, 3, 1, LV_GRID_ALIGN_CENTER, 4, 1); + lv_obj_set_grid_cell(log_out_btn, LV_GRID_ALIGN_STRETCH, 4, 1, LV_GRID_ALIGN_CENTER, 3, 2); + lv_obj_set_grid_cell(invite_btn, LV_GRID_ALIGN_STRETCH, 5, 1, LV_GRID_ALIGN_CENTER, 3, 2); + + lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); + lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); + lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(user_name, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 3, 1); + lv_obj_set_grid_cell(user_name_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 2, 1); + lv_obj_set_grid_cell(birthdate, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_CENTER, 6, 1); + lv_obj_set_grid_cell(birthday_label, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_START, 5, 1); + lv_obj_set_grid_cell(gender, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 6, 1); + lv_obj_set_grid_cell(gender_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 5, 1); + + lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); + lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); + lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(slider1, LV_GRID_ALIGN_CENTER, 0, 2, LV_GRID_ALIGN_CENTER, 3, 1); + lv_obj_set_grid_cell(experience_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 2, 1); + lv_obj_set_grid_cell(sw2, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_CENTER, 6, 1); + lv_obj_set_grid_cell(hard_working_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 5, 1); + lv_obj_set_grid_cell(sw1, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_CENTER, 6, 1); + lv_obj_set_grid_cell(team_player_label, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_START, 5, 1); + } + else if (disp_size == DISP_MEDIUM) + { + static lv_coord_t grid_main_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_main_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; + + /*Create the top panel*/ + static lv_coord_t grid_1_col_dsc[] = {LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_1_row_dsc[] = + { + LV_GRID_CONTENT, /*Name*/ + LV_GRID_CONTENT, /*Description*/ + LV_GRID_CONTENT, /*Email*/ + -20, + LV_GRID_CONTENT, /*Phone*/ + LV_GRID_CONTENT, /*Buttons*/ + LV_GRID_TEMPLATE_LAST + }; + + static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_2_row_dsc[] = + { + LV_GRID_CONTENT, /*Title*/ + 5, /*Separator*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_TEMPLATE_LAST + }; + + lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); + lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + + lv_obj_set_width(log_out_btn, 120); + lv_obj_set_width(invite_btn, 120); + + lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); + lv_obj_set_grid_cell(avatar, LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_START, 0, 4); + lv_obj_set_grid_cell(name, LV_GRID_ALIGN_START, 2, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(dsc, LV_GRID_ALIGN_STRETCH, 2, 2, LV_GRID_ALIGN_START, 1, 1); + lv_obj_set_grid_cell(email_label, LV_GRID_ALIGN_START, 3, 1, LV_GRID_ALIGN_CENTER, 2, 1); + lv_obj_set_grid_cell(email_icn, LV_GRID_ALIGN_CENTER, 2, 1, LV_GRID_ALIGN_CENTER, 2, 1); + lv_obj_set_grid_cell(call_icn, LV_GRID_ALIGN_CENTER, 2, 1, LV_GRID_ALIGN_CENTER, 4, 1); + lv_obj_set_grid_cell(call_label, LV_GRID_ALIGN_START, 3, 1, LV_GRID_ALIGN_CENTER, 4, 1); + lv_obj_set_grid_cell(log_out_btn, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_CENTER, 5, 1); + lv_obj_set_grid_cell(invite_btn, LV_GRID_ALIGN_END, 3, 1, LV_GRID_ALIGN_CENTER, 5, 1); + + lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); + lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); + lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(user_name_label, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_START, 2, 1); + lv_obj_set_grid_cell(user_name, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_START, 3, 1); + lv_obj_set_grid_cell(birthday_label, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_START, 6, 1); + lv_obj_set_grid_cell(birthdate, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_START, 7, 1); + lv_obj_set_grid_cell(gender_label, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_START, 8, 1); + lv_obj_set_grid_cell(gender, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_START, 9, 1); + + lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1); + lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); + lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(slider1, LV_GRID_ALIGN_CENTER, 0, 2, LV_GRID_ALIGN_CENTER, 3, 1); + lv_obj_set_grid_cell(experience_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 2, 1); + lv_obj_set_grid_cell(hard_working_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 4, 1); + lv_obj_set_grid_cell(sw2, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 5, 1); + lv_obj_set_grid_cell(team_player_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 6, 1); + lv_obj_set_grid_cell(sw1, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 7, 1); + } + + else if (disp_size == DISP_SMALL) + { + static lv_coord_t grid_main_col_dsc[] = {LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_main_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; + lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc); + + /*Create the top panel*/ + static lv_coord_t grid_1_col_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_1_row_dsc[] = {LV_GRID_CONTENT, /*Avatar*/ + LV_GRID_CONTENT, /*Name*/ + LV_GRID_CONTENT, /*Description*/ + LV_GRID_CONTENT, /*Email*/ + LV_GRID_CONTENT, /*Phone number*/ + LV_GRID_CONTENT, /*Button1*/ + LV_GRID_CONTENT, /*Button2*/ + LV_GRID_TEMPLATE_LAST + }; + + lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); + + static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_2_row_dsc[] = + { + LV_GRID_CONTENT, /*Title*/ + 5, /*Separator*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, LV_GRID_TEMPLATE_LAST /*Box*/ + }; + + lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); + lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc); + + lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); + + lv_obj_set_style_text_align(dsc, LV_TEXT_ALIGN_CENTER, 0); + + lv_obj_set_grid_cell(avatar, LV_GRID_ALIGN_CENTER, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(name, LV_GRID_ALIGN_CENTER, 0, 2, LV_GRID_ALIGN_CENTER, 1, 1); + lv_obj_set_grid_cell(dsc, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_START, 2, 1); + lv_obj_set_grid_cell(email_icn, LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_CENTER, 3, 1); + lv_obj_set_grid_cell(email_label, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_CENTER, 3, 1); + lv_obj_set_grid_cell(call_icn, LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_CENTER, 4, 1); + lv_obj_set_grid_cell(call_label, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_CENTER, 4, 1); + lv_obj_set_grid_cell(log_out_btn, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 5, 1); + lv_obj_set_grid_cell(invite_btn, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 6, 1); + + lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1); + lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(user_name_label, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_START, 2, 1); + lv_obj_set_grid_cell(user_name, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_START, 3, 1); + lv_obj_set_grid_cell(birthday_label, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_START, 6, 1); + lv_obj_set_grid_cell(birthdate, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_START, 7, 1); + lv_obj_set_grid_cell(gender_label, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_START, 8, 1); + lv_obj_set_grid_cell(gender, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_START, 9, 1); + + lv_obj_set_height(panel3, LV_SIZE_CONTENT); + lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1); + lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(experience_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 2, 1); + lv_obj_set_grid_cell(slider1, LV_GRID_ALIGN_CENTER, 0, 2, LV_GRID_ALIGN_CENTER, 3, 1); + lv_obj_set_grid_cell(hard_working_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 4, 1); + lv_obj_set_grid_cell(sw1, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 5, 1); + lv_obj_set_grid_cell(team_player_label, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_START, 4, 1); + lv_obj_set_grid_cell(sw2, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_START, 5, 1); + } +} + +static void color_changer_create(lv_obj_t *parent) +{ + static lv_palette_t palette[] = + { + LV_PALETTE_BLUE, LV_PALETTE_GREEN, LV_PALETTE_BLUE_GREY, LV_PALETTE_ORANGE, + LV_PALETTE_RED, LV_PALETTE_PURPLE, LV_PALETTE_TEAL, _LV_PALETTE_LAST + }; + + lv_obj_t *color_cont = lv_obj_create(parent); + lv_obj_remove_style_all(color_cont); + lv_obj_set_flex_flow(color_cont, LV_FLEX_FLOW_ROW); + lv_obj_set_flex_align(color_cont, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + lv_obj_add_flag(color_cont, LV_OBJ_FLAG_FLOATING); + + lv_obj_set_style_bg_color(color_cont, lv_color_white(), 0); + lv_obj_set_style_pad_right(color_cont, disp_size == DISP_SMALL ? LV_DPX(47) : LV_DPX(55), 0); + lv_obj_set_style_bg_opa(color_cont, LV_OPA_COVER, 0); + lv_obj_set_style_radius(color_cont, LV_RADIUS_CIRCLE, 0); + + if (disp_size == DISP_SMALL) + { + lv_obj_set_size(color_cont, LV_DPX(52), LV_DPX(52)); + } + else + { + lv_obj_set_size(color_cont, LV_DPX(60), LV_DPX(60)); + } + + lv_obj_align(color_cont, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10)); + + uint32_t i; + for (i = 0; palette[i] != _LV_PALETTE_LAST; i++) + { + lv_obj_t *c = lv_btn_create(color_cont); + lv_obj_set_style_bg_color(c, lv_palette_main(palette[i]), 0); + lv_obj_set_style_radius(c, LV_RADIUS_CIRCLE, 0); + lv_obj_set_style_opa(c, LV_OPA_TRANSP, 0); + lv_obj_set_size(c, 20, 20); + lv_obj_add_event_cb(c, color_event_cb, LV_EVENT_ALL, &palette[i]); + lv_obj_clear_flag(c, LV_OBJ_FLAG_SCROLL_ON_FOCUS); + } + + lv_obj_t *btn = lv_btn_create(parent); + lv_obj_add_flag(btn, LV_OBJ_FLAG_FLOATING | LV_OBJ_FLAG_CLICKABLE); + lv_obj_set_style_bg_color(btn, lv_color_white(), LV_STATE_CHECKED); + lv_obj_set_style_pad_all(btn, 10, 0); + lv_obj_set_style_radius(btn, LV_RADIUS_CIRCLE, 0); + lv_obj_add_event_cb(btn, color_changer_event_cb, LV_EVENT_ALL, color_cont); + lv_obj_set_style_shadow_width(btn, 0, 0); + lv_obj_set_style_bg_img_src(btn, LV_SYMBOL_TINT, 0); + + if (disp_size == DISP_SMALL) + { + lv_obj_set_size(btn, LV_DPX(42), LV_DPX(42)); + lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15)); + } + else + { + lv_obj_set_size(btn, LV_DPX(50), LV_DPX(50)); + lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15)); + } +} + +static void color_changer_anim_cb(void *var, int32_t v) +{ + lv_obj_t *obj = var; + lv_coord_t max_w = lv_obj_get_width(lv_obj_get_parent(obj)) - LV_DPX(20); + lv_coord_t w; + + if (disp_size == DISP_SMALL) + { + w = lv_map(v, 0, 256, LV_DPX(52), max_w); + lv_obj_set_width(obj, w); + lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10)); + } + else + { + w = lv_map(v, 0, 256, LV_DPX(60), max_w); + lv_obj_set_width(obj, w); + lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10)); + } + + if (v > LV_OPA_COVER) + { + v = LV_OPA_COVER; + } + + uint32_t i; + for (i = 0; i < lv_obj_get_child_cnt(obj); i++) + { + lv_obj_set_style_opa(lv_obj_get_child(obj, i), v, 0); + } + +} + +static void color_changer_event_cb(lv_event_t *e) +{ + if (lv_event_get_code(e) == LV_EVENT_CLICKED) + { + lv_obj_t *color_cont = lv_event_get_user_data(e); + if (lv_obj_get_width(color_cont) < LV_HOR_RES / 2) + { + lv_anim_t a; + lv_anim_init(&a); + lv_anim_set_var(&a, color_cont); + lv_anim_set_exec_cb(&a, color_changer_anim_cb); + lv_anim_set_values(&a, 0, 256); + lv_anim_set_time(&a, 200); + lv_anim_start(&a); + } + else + { + lv_anim_t a; + lv_anim_init(&a); + lv_anim_set_var(&a, color_cont); + lv_anim_set_exec_cb(&a, color_changer_anim_cb); + lv_anim_set_values(&a, 256, 0); + lv_anim_set_time(&a, 200); + lv_anim_start(&a); + } + } +} + +static void color_event_cb(lv_event_t *e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t *obj = lv_event_get_target(e); + + if (code == LV_EVENT_FOCUSED) + { + lv_obj_t *color_cont = lv_obj_get_parent(obj); + if (lv_obj_get_width(color_cont) < LV_HOR_RES / 2) + { + lv_anim_t a; + lv_anim_init(&a); + lv_anim_set_var(&a, color_cont); + lv_anim_set_exec_cb(&a, color_changer_anim_cb); + lv_anim_set_values(&a, 0, 256); + lv_anim_set_time(&a, 200); + lv_anim_start(&a); + } + } + else if (code == LV_EVENT_CLICKED) + { + lv_palette_t *palette_primary = lv_event_get_user_data(e); + lv_palette_t palette_secondary = (*palette_primary) + 3; /*Use another palette as secondary*/ + if (palette_secondary >= _LV_PALETTE_LAST) + { + palette_secondary = 0; + } +#if LV_USE_THEME_DEFAULT + lv_theme_default_init(NULL, lv_palette_main(*palette_primary), lv_palette_main(palette_secondary), + LV_THEME_DEFAULT_DARK, font_normal); +#endif + lv_color_t color = lv_palette_main(*palette_primary); + lv_style_set_text_color(&style_icon, color); + } +} + +static void ta_event_cb(lv_event_t *e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t *ta = lv_event_get_target(e); + if (code == LV_EVENT_FOCUSED) + { + if (lv_indev_get_type(lv_indev_get_act()) != LV_INDEV_TYPE_KEYPAD) + { + lv_obj_update_layout(tv); /*Be sure the sizes are recalculated*/ + lv_obj_scroll_to_view_recursive(ta, LV_ANIM_OFF); + } + } + else if (code == LV_EVENT_DEFOCUSED) + { + lv_obj_set_height(tv, LV_VER_RES); + lv_indev_reset(NULL, ta); + + } + else if (code == LV_EVENT_READY || code == LV_EVENT_CANCEL) + { + lv_obj_set_height(tv, LV_VER_RES); + + lv_obj_clear_state(ta, LV_STATE_FOCUSED); + lv_indev_reset(NULL, ta); /*To forget the last clicked object to make it focusable again*/ + } +} + +static void birthday_event_cb(lv_event_t *e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t *ta = lv_event_get_target(e); + + if (code == LV_EVENT_FOCUSED) + { + if (lv_indev_get_type(lv_indev_get_act()) == LV_INDEV_TYPE_POINTER) + { + if (calendar == NULL) + { + lv_obj_add_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE); + calendar = lv_calendar_create(lv_layer_top()); + lv_obj_set_style_bg_opa(lv_layer_top(), LV_OPA_50, 0); + lv_obj_set_style_bg_color(lv_layer_top(), lv_palette_main(LV_PALETTE_GREY), 0); + if (disp_size == DISP_SMALL) + { + lv_obj_set_size(calendar, 180, 200); + } + else if (disp_size == DISP_MEDIUM) + { + lv_obj_set_size(calendar, 200, 220); + } + else + { + lv_obj_set_size(calendar, 300, 330); + } + lv_calendar_set_showed_date(calendar, 1990, 01); + lv_obj_align(calendar, LV_ALIGN_CENTER, 0, 30); + lv_obj_add_event_cb(calendar, calendar_event_cb, LV_EVENT_ALL, ta); + + lv_calendar_header_dropdown_create(calendar); + } + } + } +} + +static void calendar_event_cb(lv_event_t *e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t *ta = lv_event_get_user_data(e); + lv_obj_t *obj = lv_event_get_current_target(e); + if (code == LV_EVENT_VALUE_CHANGED) + { + lv_calendar_date_t d; + lv_calendar_get_pressed_date(obj, &d); + char buf[32]; + lv_snprintf(buf, sizeof(buf), "%02d.%02d.%d", d.day, d.month, d.year); + lv_textarea_set_text(ta, buf); + + lv_obj_del(calendar); + calendar = NULL; + lv_obj_clear_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE); + lv_obj_set_style_bg_opa(lv_layer_top(), LV_OPA_TRANSP, 0); + } +} + +static void slider_event_cb(lv_event_t *e) +{ + lv_event_code_t code = lv_event_get_code(e); + lv_obj_t *obj = lv_event_get_target(e); + + if (code == LV_EVENT_REFR_EXT_DRAW_SIZE) + { + lv_coord_t *s = lv_event_get_param(e); + *s = LV_MAX(*s, 60); + } + else if (code == LV_EVENT_DRAW_PART_END) + { + lv_obj_draw_part_dsc_t *dsc = lv_event_get_param(e); + if (dsc->part == LV_PART_KNOB && lv_obj_has_state(obj, LV_STATE_PRESSED)) + { + char buf[8]; + lv_snprintf(buf, sizeof(buf), "%"LV_PRId32, lv_slider_get_value(obj)); + + lv_point_t text_size; + lv_txt_get_size(&text_size, buf, font_normal, 0, 0, LV_COORD_MAX, LV_TEXT_FLAG_NONE); + + lv_area_t txt_area; + txt_area.x1 = dsc->draw_area->x1 + lv_area_get_width(dsc->draw_area) / 2 - text_size.x / 2; + txt_area.x2 = txt_area.x1 + text_size.x; + txt_area.y2 = dsc->draw_area->y1 - 10; + txt_area.y1 = txt_area.y2 - text_size.y; + + lv_area_t bg_area; + bg_area.x1 = txt_area.x1 - LV_DPX(8); + bg_area.x2 = txt_area.x2 + LV_DPX(8); + bg_area.y1 = txt_area.y1 - LV_DPX(8); + bg_area.y2 = txt_area.y2 + LV_DPX(8); + + lv_draw_rect_dsc_t rect_dsc; + lv_draw_rect_dsc_init(&rect_dsc); + rect_dsc.bg_color = lv_palette_darken(LV_PALETTE_GREY, 3); + rect_dsc.radius = LV_DPX(5); + lv_draw_rect(dsc->draw_ctx, &rect_dsc, &bg_area); + + lv_draw_label_dsc_t label_dsc; + lv_draw_label_dsc_init(&label_dsc); + label_dsc.color = lv_color_white(); + label_dsc.font = font_normal; + lv_draw_label(dsc->draw_ctx, &label_dsc, &txt_area, buf, NULL); + } + } +} + diff --git a/example/peripheral/media/media_test/Kconfig b/example/peripheral/media/media_test/Kconfig new file mode 100644 index 0000000000000000000000000000000000000000..0277fb8553f2132f097012a78633194f6173c156 --- /dev/null +++ b/example/peripheral/media/media_test/Kconfig @@ -0,0 +1,19 @@ +# +# For a description of the syntax of this configuration file, +# see tools/kconfiglib/kconfig-language.txt. +# + + +mainmenu "Phytium Freertos Configuration" + + menu "Freertos Configuration" + config TARGET_NAME + string "Build Target Name" + default "freertos" + help + Build Target name for the demo + +endmenu + +source "$(FREERTOS_SDK_ROOT)/Kconfig" + diff --git a/example/peripheral/media/media_test/README.md b/example/peripheral/media/media_test/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1b2d19555cce47b48fc58052939cf1447b4529d6 --- /dev/null +++ b/example/peripheral/media/media_test/README.md @@ -0,0 +1,144 @@ +# media 点亮屏幕测试 + +## 1. 例程介绍 + +>介绍例程的用途,使用场景,相关基本概念,描述用户可以使用例程完成哪些工作 + +DC 是一个显示控制器,主要完成将 CPU/GPU/VPU 处理后的图像数据,按照 Display 协议处理后送给 DP PHY 接入显示器。 + +本司E2000系列型号芯片采用DisplayPort1.4协议,兼容 DisplayPort1.4/Embedded DisplayPort1.3 协议。 +本例程主要展示本司E2000系列芯片DC显示驱动功能。 + +本例程example主要是测试驱动能否正常点亮屏幕。 + +本例程支持的cmd包括 + +- md,读取一段内存的值 +- mw,修改一段内存的值 +- reboot, 重启baremetal运行环境 +- test, 展示如何通过shell获取用户输入参数 + +## 2. 如何使用例程 + +>描述开发平台准备,使用例程配置,构建和下载镜像的过程
+ +本例程需要用到 + +- Phytium开发板(E2000Q,E2000D) +- 显示器及连接线 +- [Phytium Standalone SDK](https://gitee.com/phytium_embedded/phytium-standalone-sdk) + +### 2.1 硬件配置方法 + +>哪些硬件平台是支持的,需要哪些外设,例程与开发板哪些IO口相关等(建议附录开发板照片,展示哪些IO口被引出)
+ +本例程支持的硬件平台包括 + +- E2000Q AARCH32/AARCH64 +- E2000D AARCH32/AARCH64 + +本例程所需的硬件设备包括 + +- 通过DP线将显示器与E2000板卡连接 +- 利用串口调试线连接板卡和调试电脑,波特率设为 115200-8-1-N + + +### 2.2 SDK配置方法 + +>依赖哪些驱动、库和第三方组件,如何完成配置(列出需要使能的关键配置项)
+ +- 本例子已经提供好具体的编译指令,以下进行介绍: + 1. make 将目录下的工程进行编译 + 2. make clean 将目录下的工程进行清理 + 3. make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址 + 4. make load_e2000q_aarch64 将预设64bit e2000q 下的配置加载至工程中 + 5. make load_e2000q_aarch32 将预设32bit e2000q 下的配置加载至工程中 + 6. make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中 + 7. make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中 + 8. make menuconfig 配置目录下的参数变量 + 9. make build_all 编译目录下的项目工程 + 10. make backup_kconfig 将目录下的sdkconfig 备份到./configs下 + +- 具体使用方法为: + - 在当前目录下 + - 执行以上指令 + +### 2.3 构建和下载 + +>描述构建、烧录下载镜像的过程,列出相关的命令
+ +#### 2.3.1 构建过程 + +- 在host侧完成配置 + +>配置成E2000,对于其它平台,使用对应的默认配置 +``` +$ make load_e2000q_aarch32 +$ make menuconfig + +![use fmedia lib to link](fig/fmedia_lib.jpg) + + +#### 2.3.2 下载过程 + +- host侧设置重启host侧tftp服务器 +``` + +sudo service tftpd-hpa restart + +``` + +- 开发板侧使用bootelf命令跳转 +``` + +setenv ipaddr 192.168.4.20 +setenv serverip 192.168.4.50 +setenv gatewayip 192.168.4.1 +tftpboot 0x90100000 baremetal.elf +bootelf -p 0x90100000 + +``` + +### 2.4 输出与实验现象 + +>描述输入输出情况,列出存在哪些输出,对应的输出是什么(建议附录相关现象图片)
+ +- 启动进入letter shell界面,按TAB键打印Command list + +![letter show](fig/letter_shell.jpg) + +#### 2.4.1 初始化硬件设备控制器 + +初始化DP: + +Media init 2 640 480 2 32 60 + +注:此色深32应与lvgl中的色深参数相等,否则可能出现画面填充错位的现象 + +2 : 通道号 +640 : 宽 +480 : 高 +2 :模式(克隆,水平,垂直) +32 :色深 +60 :刷新率 + +演示一个demo: + +Media demo + + +#### 2.4.2 试验现象 + + 显示器接上dp接口后,按照上述步骤输入命令,点亮屏幕 + +## 3. 如何解决问题 + +>主要记录使用例程中可能会遇到的问题,给出相应的解决方案
+ +## 4. 修改历史记录 + +>记录例程的重大修改记录,标明修改发生的版本号
+ +- 2022-12-6 :v0.0.1 添加example +- 2023-03-03: v0.0.2 添加多屏 + diff --git a/example/peripheral/media/media_test/configs/e2000d_aarch32_eg_configs b/example/peripheral/media/media_test/configs/e2000d_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..06d6e747fc6bec14fb4765de897d55cb14ad53ef --- /dev/null +++ b/example/peripheral/media/media_test/configs/e2000d_aarch32_eg_configs @@ -0,0 +1,280 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +# CONFIG_USE_CACHE is not set +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/media_test/configs/e2000d_aarch64_eg_configs b/example/peripheral/media/media_test/configs/e2000d_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..a848d9875886ccf56042a2db5491f4506ec03db7 --- /dev/null +++ b/example/peripheral/media/media_test/configs/e2000d_aarch64_eg_configs @@ -0,0 +1,276 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +# CONFIG_USE_CACHE is not set +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/media_test/configs/e2000q_aarch32_eg_configs b/example/peripheral/media/media_test/configs/e2000q_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..d61131c511ad3139f4efe7b7f4051666ddf907a0 --- /dev/null +++ b/example/peripheral/media/media_test/configs/e2000q_aarch32_eg_configs @@ -0,0 +1,280 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +# CONFIG_USE_CACHE is not set +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/media_test/configs/e2000q_aarch64_eg_configs b/example/peripheral/media/media_test/configs/e2000q_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..c4008a1b3c5bbc62fd1bdbb191ba6afac2f7c5e8 --- /dev/null +++ b/example/peripheral/media/media_test/configs/e2000q_aarch64_eg_configs @@ -0,0 +1,276 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +# CONFIG_USE_CACHE is not set +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/media_test/fig/fmedia_lib.jpg b/example/peripheral/media/media_test/fig/fmedia_lib.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1e418ef5b01281dd387c2d2e278910f14fadb7a Binary files /dev/null and b/example/peripheral/media/media_test/fig/fmedia_lib.jpg differ diff --git a/example/peripheral/media/media_test/fig/letter_shell.jpg b/example/peripheral/media/media_test/fig/letter_shell.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40b389813866a3a2693fc10ac0469577580ab173 Binary files /dev/null and b/example/peripheral/media/media_test/fig/letter_shell.jpg differ diff --git a/example/peripheral/media/media_test/fig/media_init.png b/example/peripheral/media/media_test/fig/media_init.png new file mode 100644 index 0000000000000000000000000000000000000000..66cc70d91981cb55dfc7d27059de727ab01879a9 Binary files /dev/null and b/example/peripheral/media/media_test/fig/media_init.png differ diff --git a/example/peripheral/media/media_test/inc/media_example.h b/example/peripheral/media/media_test/inc/media_example.h new file mode 100644 index 0000000000000000000000000000000000000000..cfa1ca7a5602e71900981c170b005a21067882b1 --- /dev/null +++ b/example/peripheral/media/media_test/inc/media_example.h @@ -0,0 +1,66 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: media_example.h + * Date: 2022-08-25 16:22:40 + * LastEditTime: 2022-12-20 15:40:40 + * Description: This file is for defining the config and functions + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + */ + +#ifndef MEDIA_EXAMPLE_H +#define MEDIA_EXAMPLE_H + +#include "ftypes.h" +#include "fdcdp.h" + +#ifdef __cplusplus +extern "C" +{ +#endif +typedef struct +{ + u32 channel; + u32 width; + u32 height; + u32 multi_mode; + u32 color_depth; + u32 refresh_rate; +} InputParm; + +typedef struct +{ + u8 Blue; + u8 Green; + u8 Red; + u8 reserve; +} GraphicsTest; + +/* return the input config */ +InputParm *InputParaReturn(void); + +/*create the media init task*/ +BaseType_t FFreeRTOSMediaCreate(void *args); + +/*deinit the media*/ +void FFreeRTOSMediaChannelDeinit(u32 id); + +#ifdef __cplusplus +} +#endif + +#endif // ! \ No newline at end of file diff --git a/example/peripheral/media/media_test/main.c b/example/peripheral/media/media_test/main.c new file mode 100644 index 0000000000000000000000000000000000000000..5042be90a173f8bf2a95ab49cf83a1e31238c6ad --- /dev/null +++ b/example/peripheral/media/media_test/main.c @@ -0,0 +1,46 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: main.c + * Date: 2022-06-17 08:17:59 + * LastEditTime: 2022-12-20 10:11:20 + * Description: This file is for providing the shell + * + * Modify History: + * Ver Who Date Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + */ + +#include "shell.h" +#include "shell_port.h" +#include + +int main(void) +{ + BaseType_t ret; + + ret = LSUserShellTask(); + if (ret != pdPASS) + { + goto FAIL_EXIT; + } + + vTaskStartScheduler(); /* 启动任务,开启调度 */ + while (1) + ; /* 正常不会执行到这里 */ + +FAIL_EXIT: + printf("failed 0x%x \r\n", ret); + return 0; +} diff --git a/example/peripheral/media/media_test/makefile b/example/peripheral/media/media_test/makefile new file mode 100644 index 0000000000000000000000000000000000000000..c1f632e855a09d5f79e458e1c21f110a88cb40ba --- /dev/null +++ b/example/peripheral/media/media_test/makefile @@ -0,0 +1,31 @@ +export PROJECT_DIR ?= $(shell pwd) + +export USR_SRC_DIR = $(PROJECT_DIR) \ + ./src +export USR_INC_DIR = $(PROJECT_DIR) \ + ./inc + +# 用户定义的编译目标文件上传路径 +ifeq ($(OS),Windows_NT) + USR_BOOT_DIR ?= $(subst \,/, $(PHYTIUM_DEV_PATH))/tftp +else + USR_BOOT_DIR ?= /mnt/d/tftboot +endif + + +# 设置启动镜像名 +BOOT_IMG_NAME ?= freertos + +# 指定编译freertos项目使用的makefile +include $(FREERTOS_SDK_ROOT)/make/build_freertos.mk + +# 完成编译 +boot: + make -j + @cp ./$(CONFIG_TARGET_NAME).elf $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).elf +ifdef CONFIG_OUTPUT_BINARY + @cp ./$(CONFIG_TARGET_NAME).bin $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).bin +endif + @ls $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).* -l + + diff --git a/example/peripheral/media/media_test/sdkconfig b/example/peripheral/media/media_test/sdkconfig new file mode 100644 index 0000000000000000000000000000000000000000..c4008a1b3c5bbc62fd1bdbb191ba6afac2f7c5e8 --- /dev/null +++ b/example/peripheral/media/media_test/sdkconfig @@ -0,0 +1,276 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="freertos" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +# CONFIG_USE_CACHE is not set +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +CONFIG_USE_MEDIA=y + +# +# Media Configuration +# +# CONFIG_ENABLE_FDC_DP is not set +CONFIG_ENABLE_FDC_DP_USE_LIB=y +# end of Media Configuration + +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +CONFIG_LOG_DEBUG=y +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +CONFIG_FREERTOS_USE_MEDIA=y +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/media/media_test/sdkconfig.h b/example/peripheral/media/media_test/sdkconfig.h new file mode 100644 index 0000000000000000000000000000000000000000..3a62b617c8eb6a6d4c3ffc97a65e971ea53a121c --- /dev/null +++ b/example/peripheral/media/media_test/sdkconfig.h @@ -0,0 +1,242 @@ +#ifndef SDK_CONFIG_H__ +#define SDK_CONFIG_H__ + +/* Freertos Configuration */ + +#define CONFIG_TARGET_NAME "freertos" +/* end of Freertos Configuration */ + +/* Standalone Setting */ + +#define CONFIG_USE_FREERTOS + +/* Arch Configuration */ + +/* CONFIG_TARGET_ARMV8_AARCH32 is not set */ +#define CONFIG_TARGET_ARMV8_AARCH64 +/* CONFIG_USE_CACHE is not set */ +/* CONFIG_MMU_DEBUG_PRINTS is not set */ +/* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ +/* end of Arch Configuration */ + +/* Board Configuration */ + +/* CONFIG_TARGET_F2000_4 is not set */ +/* CONFIG_TARGET_D2000 is not set */ +#define CONFIG_TARGET_E2000Q +/* CONFIG_TARGET_E2000D is not set */ +/* CONFIG_TARGET_E2000S is not set */ +#define CONFIG_TARGET_E2000 +#define CONFIG_DEFAULT_DEBUG_PRINT_UART1 +/* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ +/* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* end of Board Configuration */ + +/* Components Configuration */ + +/* CONFIG_USE_SPI is not set */ +/* CONFIG_USE_QSPI is not set */ +#define CONFIG_USE_GIC +#define CONFIG_ENABLE_GICV3 +#define CONFIG_USE_SERIAL + +/* Usart Configuration */ + +#define CONFIG_ENABLE_Pl011_UART +/* end of Usart Configuration */ +/* CONFIG_USE_GPIO is not set */ +/* CONFIG_USE_ETH is not set */ +/* CONFIG_USE_CAN is not set */ +/* CONFIG_USE_I2C is not set */ +/* CONFIG_USE_TIMER is not set */ +/* CONFIG_USE_MIO is not set */ +/* CONFIG_USE_SDMMC is not set */ +/* CONFIG_USE_PCIE is not set */ +/* CONFIG_USE_WDT is not set */ +/* CONFIG_USE_DMA is not set */ +/* CONFIG_USE_NAND is not set */ +/* CONFIG_USE_RTC is not set */ +/* CONFIG_USE_SATA is not set */ +/* CONFIG_USE_USB is not set */ +/* CONFIG_USE_ADC is not set */ +/* CONFIG_USE_PWM is not set */ +/* CONFIG_USE_IPC is not set */ +#define CONFIG_USE_MEDIA + +/* Media Configuration */ + +/* CONFIG_ENABLE_FDC_DP is not set */ +#define CONFIG_ENABLE_FDC_DP_USE_LIB +/* end of Media Configuration */ +/* CONFIG_USE_SCMI_MHU is not set */ +/* end of Components Configuration */ +#define CONFIG_USE_NEW_LIBC +/* end of Standalone Setting */ + +/* Building Option */ + +/* SDK common configuration */ + +/* CONFIG_LOG_VERBOS is not set */ +#define CONFIG_LOG_DEBUG +/* CONFIG_LOG_INFO is not set */ +/* CONFIG_LOG_WARN is not set */ +/* CONFIG_LOG_ERROR is not set */ +/* CONFIG_LOG_NONE is not set */ +/* CONFIG_LOG_EXTRA_INFO is not set */ +/* CONFIG_LOG_DISPALY_CORE_NUM is not set */ +/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of SDK common configuration */ + +/* Linker Options */ + +/* CONFIG_AARCH32_RAM_LD is not set */ +#define CONFIG_AARCH64_RAM_LD +/* CONFIG_USER_DEFINED_LD is not set */ +#define CONFIG_LINK_SCRIPT_ROM +#define CONFIG_ROM_START_UP_ADDR 0x80100000 +#define CONFIG_ROM_SIZE_MB 1 +#define CONFIG_LINK_SCRIPT_RAM +#define CONFIG_RAM_START_UP_ADDR 0x81000000 +#define CONFIG_RAM_SIZE_MB 64 +#define CONFIG_HEAP_SIZE 1 +#define CONFIG_STACK_SIZE 0x100000 +#define CONFIG_FPU_STACK_SIZE 0x1000 +/* end of Linker Options */ + +/* Compiler Options */ + +/* Cross-Compiler Setting */ + +#define CONFIG_GCC_OPTIMIZE_LEVEL 0 +/* CONFIG_USE_EXT_COMPILER is not set */ +/* CONFIG_USE_KLIN_SYS is not set */ +/* end of Cross-Compiler Setting */ +#define CONFIG_OUTPUT_BINARY +/* end of Compiler Options */ +/* end of Building Option */ + +/* Component Configuration */ + +/* Freertos Uart Drivers */ + +#define CONFIG_FREERTOS_USE_UART +/* end of Freertos Uart Drivers */ + +/* Freertos Pwm Drivers */ + +/* CONFIG_FREERTOS_USE_PWM is not set */ +/* end of Freertos Pwm Drivers */ + +/* Freertos Qspi Drivers */ + +/* CONFIG_FREERTOS_USE_QSPI is not set */ +/* end of Freertos Qspi Drivers */ + +/* Freertos Wdt Drivers */ + +/* CONFIG_FREERTOS_USE_WDT is not set */ +/* end of Freertos Wdt Drivers */ + +/* Freertos Eth Drivers */ + +/* CONFIG_FREERTOS_USE_XMAC is not set */ +/* CONFIG_FREERTOS_USE_GMAC is not set */ +/* end of Freertos Eth Drivers */ + +/* Freertos Gpio Drivers */ + +/* CONFIG_FREERTOS_USE_GPIO is not set */ +/* end of Freertos Gpio Drivers */ + +/* Freertos Spim Drivers */ + +/* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* end of Freertos Spim Drivers */ + +/* Freertos DMA Drivers */ + +/* CONFIG_FREERTOS_USE_FDDMA is not set */ +/* CONFIG_FREERTOS_USE_FGDMA is not set */ +/* end of Freertos DMA Drivers */ + +/* Freertos Adc Drivers */ + +/* CONFIG_FREERTOS_USE_ADC is not set */ +/* end of Freertos Adc Drivers */ + +/* Freertos Can Drivers */ + +/* CONFIG_FREERTOS_USE_CAN is not set */ +/* end of Freertos Can Drivers */ + +/* Freertos I2c Drivers */ + +/* CONFIG_FREERTOS_USE_I2C is not set */ +/* end of Freertos I2c Drivers */ + +/* Freertos Mio Drivers */ + +/* CONFIG_FREERTOS_USE_MIO is not set */ +/* end of Freertos Mio Drivers */ + +/* Freertos Timer Drivers */ + +/* CONFIG_FREERTOS_USE_TIMER is not set */ +/* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +#define CONFIG_FREERTOS_USE_MEDIA +/* end of Freertos Media Drivers */ +/* end of Component Configuration */ + +/* Third-Party Configuration */ + +/* CONFIG_USE_LWIP is not set */ +#define CONFIG_USE_BACKTRACE +/* CONFIG_USE_FATFS_0_1_4 is not set */ +/* CONFIG_USE_SFUD is not set */ +/* CONFIG_USE_SPIFFS is not set */ +/* CONFIG_USE_AMP is not set */ +#define CONFIG_USE_LETTER_SHELL + +/* Letter Shell Configuration */ + +#define CONFIG_LS_PL011_UART +#define CONFIG_DEFAULT_LETTER_SHELL_USE_UART1 +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */ +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */ +/* end of Letter Shell Configuration */ +/* CONFIG_USE_TLSF is not set */ +/* CONFIG_USE_SDMMC_CMD is not set */ +/* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ +/* end of Third-Party Configuration */ + +/* Kernel Configuration */ + +#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER +#define CONFIG_FREERTOS_HZ 1000 +#define CONFIG_FREERTOS_MAX_PRIORITIES 32 +#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13 +#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11 +#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 +#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024 +#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32 +#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 +#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 +#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 +#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 +#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS +#define CONFIG_FREERTOS_USE_TRACE_FACILITY +#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS +/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */ +#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240 +#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1 +/* end of Kernel Configuration */ + +#endif diff --git a/example/peripheral/media/media_test/src/cmd_media.c b/example/peripheral/media/media_test/src/cmd_media.c new file mode 100644 index 0000000000000000000000000000000000000000..35c7199c36d1942f5d29276718e11b69acd87400 --- /dev/null +++ b/example/peripheral/media/media_test/src/cmd_media.c @@ -0,0 +1,123 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: cmd_meida.c + * Date: 2023-02-15 14:34:44 + * LastEditTime: 2023-02-16 14:34:45 + * Description:  This file is for media shell command. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 wangzq 2023/02/16 init commit + */ +#include +#include +#include "strto.h" +#include "sdkconfig.h" + +#include "FreeRTOS.h" +#include "../src/shell.h" + +#include "fdc_common_hw.h" +#include "media_example.h" + +static InputParm input_config; + +InputParm *InputParaReturn(void) +{ + return &input_config; +} +static void FFreeRTOSMediaCmdUsage(void) +{ + printf("Usage:\r\n"); + printf(" Media init 0/1/2, 0:channel 0; 1:channel 1; 2: channel 0 and channel 1,all channel can use\r\n"); + printf(" -- the resolution of width\r\n"); + printf(" -- the resolution of height\r\n"); + printf(" -- the sigle screen or multi-display \r\n"); + printf(" -- the color_depth of screen ,default color_depth is 32\r\n"); + printf(" -- the refresh_rate of screen ,default refresh_rate is 60\r\n"); + printf(" Media deinit \r\n"); + printf(" Media demo\r\n"); + +} +static int MediaCmdEntry(int argc, char *argv[]) +{ + u32 id ; + static boolean inited = FALSE; + if (argc < 2) + { + FFreeRTOSMediaCmdUsage(); + return -1; + } + if (!strcmp(argv[1], "init")) + { + if (argc >= 3) + { + input_config.channel = (u32)simple_strtoul(argv[2], NULL, 10); + if (input_config.channel > FDCDP_INSTANCE_NUM) + { + printf("please insert the correct num,such as 0,1 or 2 \r\n"); + } + input_config.width = (u32)simple_strtoul(argv[3], NULL, 10); + input_config.height = (u32)simple_strtoul(argv[4], NULL, 10); + input_config.multi_mode = (u32)simple_strtoul(argv[5], NULL, 10); + input_config.color_depth = (u32)simple_strtoul(argv[6], NULL, 10); + input_config.refresh_rate = (u32)simple_strtoul(argv[7], NULL, 10); + } + else + { + input_config.channel = 0; + input_config.width = 1024; + input_config.height = 768; + input_config.multi_mode = 0; + input_config.color_depth = 32; + input_config.refresh_rate = 60; + } + BaseType_t task_ret = FFreeRTOSMediaCreate(&input_config); + + if (pdPASS != task_ret) + { + return -2; + } + inited = TRUE; + } + if (!strcmp(argv[1], "demo")) + { + if (inited != TRUE) + { + printf("please ensure the media has been inited \r\n"); + return -2; + } + FMediaDisplayDemo(); + } + if (!strcmp(argv[1], "deinit")) + { + if (inited != TRUE) + { + printf("please ensure the media has been inited \r\n"); + return -2; + } + if (argc >= 3) + { + id = (u32)simple_strtoul(argv[2], NULL, 10); + } + FFreeRTOSMediaChannelDeinit(id); + } + + return 0; +} + +SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), Media, MediaCmdEntry, test freertos media driver); \ No newline at end of file diff --git a/example/peripheral/media/media_test/src/media_example.c b/example/peripheral/media/media_test/src/media_example.c new file mode 100644 index 0000000000000000000000000000000000000000..a26a95108fd4f6691c0475328f971236fee5c1d8 --- /dev/null +++ b/example/peripheral/media/media_test/src/media_example.c @@ -0,0 +1,376 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: media_example.c + * Date: 2022-07-11 11:32:48 + * LastEditTime: 2022-12-20 10:25:48 + * Description: This file is for testing light the screen + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2022/12/20 Modify the format and establish the version + */ +#include +#include +#include +#include +#include "task.h" +#include "ftypes.h" +#include "fassert.h" +#include "fdebug.h" +#include "fparameters_comm.h" +#include "finterrupt.h" +#include "fkernel.h" +#include "event_groups.h" +#include "fcpu_info.h" + +#include "fmedia_os.h" +#include "fdcdp.h" +#include "fdp_hw.h" +#include "fdp.h" +#include"media_example.h" + + +/************************** Variable Definitions *****************************/ +#define FMEDIA_EVT_INTR(index) BIT(index) +#define FMEDIA_CHANNEL_0 0 +#define FMEDIA_CHANNEL_1 1 +/***************** Macros (Inline Functions) Definitions *********************/ +static TaskHandle_t init_task; +static TaskHandle_t hpd_task ; + +static FFreeRTOSMedia *os_media; +static InputParm *input_config; +static EventGroupHandle_t media_event = NULL; +static GraphicsTest blt_buffer; +/************************** Function Prototypes ******************************/ +static void FFreeRTOSMediaSendEvent(u32 evt_bits) +{ + FASSERT(media_event); + BaseType_t x_result = pdFALSE; + BaseType_t xhigher_priority_task_woken = pdFALSE; + /*set the irq event for the task*/ + x_result = xEventGroupSetBitsFromISR(media_event, evt_bits, &xhigher_priority_task_woken); +} + +static boolean FFreeRTOSMediaWaitEvent(u32 evt_bits, TickType_t wait_delay) +{ + FASSERT(media_event); + EventBits_t event; + event = xEventGroupWaitBits(media_event, evt_bits, + pdTRUE, pdFALSE, wait_delay);/*wait the irq event for the task*/ + if (event & evt_bits) + { + return TRUE; + } + return FALSE; +} + +static boolean FFreeRTOSMediaClearEvent(EventGroupHandle_t pvEventGroup, const uint32_t ulBitsToClear) +{ + FASSERT(media_event); + EventBits_t event; + event = xEventGroupClearBits(pvEventGroup, ulBitsToClear);/*clear the intr bits*/ + return TRUE; +} + +/** + * @name: FFreeRTOSMediaHpdConnectCallback + * @msg: the hpd connect event + * @param {void} *args is the instance of dcdp + * @param {u32} index is the channel + * @return Null + */ +static void FFreeRTOSMediaHpdConnectCallback(void *args, u32 index) +{ + FASSERT(args != NULL); + FDcDp *instance_p = (FDcDp *)args; + FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, FDP_TX_INTERRUPT); /*clear interrupt*/ + FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); + instance_p->connect_flg[index] = 1; + printf("Dp:%d connect\r\n", index); +} + +/** + * @name: FFreeRTOSMediaHpdBreakCallback + * @msg: the hpd disconnect event + * @param {void} *args is the instance of dcdp + * @param {u32} index is the channel + * @return Null + */ +static void FFreeRTOSMediaHpdBreakCallback(void *args, u32 index) +{ + FASSERT(args != NULL); + FDcDp *instance_p = (FDcDp *)args; + FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, FDP_TX_INTERRUPT); /*clear interrupt*/ + instance_p->connect_flg[index] = 0; + FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); + printf("Dp:%d disconnect\r\n", index); +} + +/** + * @name: FFreeRTOSMediaAuxTimeoutCallback + * @msg: the aux timeout event + * @param {void} *args is the instance of dcdp + * @param {u32} index is the channel + * @return Null + */ +static void FFreeRTOSMediaAuxTimeoutCallback(void *args, u32 index) +{ + FASSERT(args != NULL); + FDcDp *instance_p = (FDcDp *)args; + FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, FDP_TX_INTERRUPT); /*clear interrupt*/ + printf("Dp:%d aux connect timeout\r\n", index); +} + +/** + * @name: FFreeRTOSMediaAuxErrorCallback + * @msg: the aux error event + * @param {void} *args is the instance of dcdp + * @param {u32} index is the channel + * @return Null + */ +static void FFreeRTOSMediaAuxErrorCallback(void *args, u32 index) +{ + FASSERT(args != NULL); + FDcDp *instance_p = (FDcDp *)args; + FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, FDP_TX_INTERRUPT); /*clear interrupt*/ + printf("Dp:%d aux connect error\r\n", index); +} + +/** + * @name: FFreeRTOSMediaIrqSet + * @msg: set the irq event and instance + * @param {FDcDp} *instance_p is the instance of dcdp + * @return Null + */ +static void FFreeRTOSMediaIrqSet(FDcDp *instance_p) +{ + FASSERT(instance_p != NULL); + u32 cpu_id; + + GetCpuId(&cpu_id); + InterruptSetTargetCpus(instance_p->dp_instance_p[0].config.irq_num, cpu_id);/*the dc0 and dc1 have the same num of irq_num*/ + + FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_CONNECTED, FFreeRTOSMediaHpdConnectCallback, (void *)instance_p); + FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_DISCONNECTED, FFreeRTOSMediaHpdBreakCallback, (void *)instance_p); + FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_TIMEOUT, FFreeRTOSMediaAuxTimeoutCallback, (void *)instance_p); + FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_ERROR, FFreeRTOSMediaAuxErrorCallback, (void *)instance_p); + + InterruptSetPriority(instance_p->dp_instance_p[0].config.irq_num, FREERTOS_MEDIA_IRQ_PRIORITY);/*dp0 and dp1 have the same irq_num*/ + InterruptInstall(instance_p->dp_instance_p[0].config.irq_num, FDcDpInterruptHandler, instance_p, "media"); + InterruptUmask(instance_p->dp_instance_p[0].config.irq_num); +} + +/** + * @name: FDcDpIrqAllEnable + * @msg: enable the irq + * @param {FDcDp} *instance_p is the instance of dcdp + * @return Null + */ +static void FDcDpIrqAllEnable(FDcDp *instance_p) +{ + int index = 0; + FDcDpIntrEventType event_type = FDCDP_HPD_IRQ_CONNECTED; + for (index = 0; index < FDCDP_INSTANCE_NUM; index++) + { + for (event_type = 0; event_type < FDCDP_INSTANCE_NUM; event_type++) + { + FDcDpIrqEnable(instance_p, index, event_type); + } + } +} + +/** + * @name: FFreeRTOSMediaInitTask + * @msg: a task for init the media + * @param {void} *pvParameters is config of instance of dcdp + * @return Null + */ +static void FFreeRTOSMediaInitTask(void *pvParameters) +{ + input_config = (InputParm *)pvParameters; + u32 channel_num = input_config->channel; + u32 width = input_config->width; + u32 height = input_config->height; + u32 multi_mode = input_config->multi_mode; + u32 color_depth = input_config->color_depth; + u32 refresh_rate = input_config->refresh_rate; + + os_media = FFreeRTOSMediaHwInit(channel_num, width, height, multi_mode, color_depth, refresh_rate); + FFreeRTOSMediaIrqSet(&os_media->dcdp_ctrl); + FDcDpIrqAllEnable(&os_media->dcdp_ctrl); + vTaskDelete(NULL); +} + +/** + * @name: FFreeRTOSMediaChannelDeinit + * @msg: deinit the media + * @param {u32} id is channel of media + * @return Null + */ +void FFreeRTOSMediaChannelDeinit(u32 id) +{ + taskENTER_CRITICAL(); + vEventGroupDelete(media_event); + media_event = NULL; + FDcDpDeInitialize(&os_media->dcdp_ctrl, id); + taskEXIT_CRITICAL(); + return; +} + + +/** + * @name: BltVideoToFill + * @msg: write the rgb to the dc + * @param {FDcCtrl} *instance_p is the struct of dc + * @param {uintptr} offset is the addr + * @param {u32} length is the length of the pixel + * @param {void*} config is rgb value + * @return Null + */ +static void PhyFramebufferWrite(FDcCtrl *instance_p, uintptr offset, u32 length, void *config) +{ + u32 Index; + for (Index = 0; Index < length; Index++) + { + FtOut32(instance_p->fdc_current_config.framebuffer.framebuffer_p + offset + Index * 4, *((u32 *)(config + Index * 4))); + } +} + +/** + * @name: BltVideoToFill + * @msg: fill the rgb into the dc + * @param {FDcCtrl} *instance_p is the struct of dc + * @param {GraphicsTest} config is the RGB value + * @param {u32} width is the width of screen + * @return Null + */ +static void BltVideoToFill(FDcCtrl *instance_p, GraphicsTest *config, u32 width, u32 height) +{ + FASSERT(instance_p != NULL); + FASSERT(config != NULL); + + u32 ResWidth; + u32 ResHeight; + u32 Stride; + u32 I; + u32 J; + u32 Blt; + + Stride = FDcWidthToStride(width, 32, 1); + memcpy(&Blt, config, sizeof(GraphicsTest)); + for (I = 0; I < (height); I++) + { + for (J = 0; J < (width * 2); J++) + { + PhyFramebufferWrite(instance_p, I * Stride + J * 4, 1, &Blt); + } + } + +} + +/** + * @name: FMediaDisplayDemo + * @msg: the demo for testing the media + * @return Null + */ +FError FMediaDisplayDemo(void) +{ + FDcDp *instance_p = &os_media->dcdp_ctrl; + InputParm *input_config = InputParaReturn(); + for (u32 index = 0; index < 2; index ++) + { + blt_buffer.Red = 0xff; + blt_buffer.Green = 0xff; + blt_buffer.Blue = 0x0; + blt_buffer.reserve = 0; + BltVideoToFill(&instance_p->dc_instance_p[index], &blt_buffer, input_config->width, input_config->height); + } +} + +static void FFreeRTOSMediaHpdTask(void *pvParameters) +{ + input_config = (InputParm *)pvParameters; + u32 index; + u32 ret = 0 ; + u32 channel = input_config->channel; + u32 multi_mode = input_config->multi_mode; + u32 color_depth = input_config->color_depth; + u32 refresh_rate = input_config->refresh_rate; + u32 width = input_config->width; + u32 height = input_config->height; + u32 start_index; + u32 end_index;//ensure the channel number + + if (channel == FDCDP_PATH_NUM) + { + start_index = 0; + end_index = FDCDP_PATH_NUM; + } + else + { + start_index = channel; + end_index = channel + 1; + } + + FFreeRTOSMediaWaitEvent(FMEDIA_EVT_INTR(FMEDIA_CHANNEL_0) | FMEDIA_EVT_INTR(FMEDIA_CHANNEL_1), portMAX_DELAY); + + for (;;) + { + for (index = start_index; index < end_index; index++) + { + if (os_media->dcdp_ctrl.connect_flg[index] == 1) + { + ret = FFreeRTOSMediaHpdReInit(index, width, height, multi_mode, color_depth, refresh_rate); + FFreeRTOSMediaClearEvent(media_event, FMEDIA_EVT_INTR(index)); + if (ret == FMEDIA_DP_SUCCESS) + { + printf("Hpd task finish , reinit the dp success.\r\n"); + } + + os_media->dcdp_ctrl.connect_flg[index] == 0; + } + } + vTaskDelay(200); + } +} + +/* create media test, id is media module number */ +BaseType_t FFreeRTOSMediaCreate(void *args) +{ + BaseType_t xReturn = pdPASS; /* 定义一个创建信息返回值,默认为 pdPASS */ + FASSERT_MSG(NULL == media_event, "Event group exists."); + FASSERT_MSG((media_event = xEventGroupCreate()) != NULL, "Create event group failed."); + /* enter critical region */ + taskENTER_CRITICAL(); + /* Media init task */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaInitTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSMediaInitTask", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + (void *)args, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 2, /* 任务的优先级 */ + (TaskHandle_t *)&init_task); + + /* HPD任务控制 */ + xReturn = xTaskCreate((TaskFunction_t)FFreeRTOSMediaHpdTask, /* 任务入口函数 */ + (const char *)"FFreeRTOSMediaHpdTask", /* 任务名字 */ + (uint16_t)1024, /* 任务栈大小 */ + (void *)args, /* 任务入口函数参数 */ + (UBaseType_t)configMAX_PRIORITIES - 1, /* 任务的优先级 */ + (TaskHandle_t *)&hpd_task); + /* exit critical region */ + taskEXIT_CRITICAL(); + return xReturn; +} diff --git a/example/peripheral/pwm/configs/e2000d_aarch32_eg_configs b/example/peripheral/pwm/configs/e2000d_aarch32_eg_configs index 358ecee3fef7acc62dcb2ec41d722d53a42c4f21..d873e1b171da4a8f37ad4643dd4ffdb49eae97cd 100644 --- a/example/peripheral/pwm/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/pwm/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_PWM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/pwm/configs/e2000d_aarch64_eg_configs b/example/peripheral/pwm/configs/e2000d_aarch64_eg_configs index 60d3946526d985f0baead23eb720b561835289a4..75fdbf8ac6ac6cffb7e1af5a7d9a40e38899f0c6 100644 --- a/example/peripheral/pwm/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/pwm/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_PWM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/pwm/configs/e2000q_aarch32_eg_configs b/example/peripheral/pwm/configs/e2000q_aarch32_eg_configs index 56645c563075b0b2ef465e281047a01e09d26e86..8058bd751dc5917e05e832406bf9352c762fdaa3 100644 --- a/example/peripheral/pwm/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/pwm/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_PWM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/pwm/configs/e2000q_aarch64_eg_configs b/example/peripheral/pwm/configs/e2000q_aarch64_eg_configs index 332287f14b6b4910371ea101fb676153b6fb7bff..0ffa79c82e0779bc82eade84a3949a21e3760902 100644 --- a/example/peripheral/pwm/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/pwm/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_PWM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/pwm/sdkconfig b/example/peripheral/pwm/sdkconfig index 332287f14b6b4910371ea101fb676153b6fb7bff..0ffa79c82e0779bc82eade84a3949a21e3760902 100644 --- a/example/peripheral/pwm/sdkconfig +++ b/example/peripheral/pwm/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_PWM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/pwm/sdkconfig.h b/example/peripheral/pwm/sdkconfig.h index 0352891dc5fdbb36795360b61366ee4004ff9f73..5b7a29ade6ca9faf4ce069f2b9af49dff0e6098e 100644 --- a/example/peripheral/pwm/sdkconfig.h +++ b/example/peripheral/pwm/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -76,18 +75,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -185,6 +192,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -207,6 +219,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/qspi/configs/d2000_aarch32_eg_configs b/example/peripheral/qspi/configs/d2000_aarch32_eg_configs index 436e739fa695c4a8c7f46a56d83011d8a4fc37f5..2737254692acccb310cad63c31504526e8a6c2e4 100644 --- a/example/peripheral/qspi/configs/d2000_aarch32_eg_configs +++ b/example/peripheral/qspi/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/configs/d2000_aarch64_eg_configs b/example/peripheral/qspi/configs/d2000_aarch64_eg_configs index 04b9bf6b5f97f95f8bbea3bdf50816fd47894178..e872af84c33dda020d95684cf0e6a95d2167429f 100644 --- a/example/peripheral/qspi/configs/d2000_aarch64_eg_configs +++ b/example/peripheral/qspi/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/configs/e2000d_aarch32_eg_configs b/example/peripheral/qspi/configs/e2000d_aarch32_eg_configs index cc0fa54f6e2dba465e530108b24bf7d949e74949..37365dbfb21b8954f9f06875bf4f667ad2ef0c64 100644 --- a/example/peripheral/qspi/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/qspi/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/configs/e2000d_aarch64_eg_configs b/example/peripheral/qspi/configs/e2000d_aarch64_eg_configs index 8fd8fc89777cf9362462f6ac9433c7dea6e38fed..42a8c6319a2516750fa8546a5f72bd2460ef8d87 100644 --- a/example/peripheral/qspi/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/qspi/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/configs/e2000q_aarch32_eg_configs b/example/peripheral/qspi/configs/e2000q_aarch32_eg_configs index 0d1d4c91ebf7185179dd1d8880d0afb3c027f7ed..b5bbaa02fa9dd4bce2c21ba3ce4bd2798d0b55cd 100644 --- a/example/peripheral/qspi/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/qspi/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/configs/e2000q_aarch64_eg_configs b/example/peripheral/qspi/configs/e2000q_aarch64_eg_configs index 1ec5f5bad82b54e1f04c7c0cfdebc5bc64d5feae..21e969204248f20ce9d9eef6c96c89dea1f1215c 100644 --- a/example/peripheral/qspi/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/qspi/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/configs/ft2004_aarch32_eg_configs b/example/peripheral/qspi/configs/ft2004_aarch32_eg_configs index a38f95ce9778886e1c68dc87c3a090a342ec447a..a0adc93d98f4217e9385d1ffa5f3e911cbb32bbe 100644 --- a/example/peripheral/qspi/configs/ft2004_aarch32_eg_configs +++ b/example/peripheral/qspi/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/configs/ft2004_aarch64_eg_configs b/example/peripheral/qspi/configs/ft2004_aarch64_eg_configs index e4043e6c7795cf4db6bd8119e92e5ed49311bc0f..f0cf5a63cf5dbe448456680b2020648c9b642c39 100644 --- a/example/peripheral/qspi/configs/ft2004_aarch64_eg_configs +++ b/example/peripheral/qspi/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/sdkconfig b/example/peripheral/qspi/sdkconfig index 1ec5f5bad82b54e1f04c7c0cfdebc5bc64d5feae..21e969204248f20ce9d9eef6c96c89dea1f1215c 100644 --- a/example/peripheral/qspi/sdkconfig +++ b/example/peripheral/qspi/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/qspi/sdkconfig.h b/example/peripheral/qspi/sdkconfig.h index a678331974ec83c13991230926d3be4a8c15ba5d..1e19c28615e5a5d0d30b2d35df2ef22e248c588b 100644 --- a/example/peripheral/qspi/sdkconfig.h +++ b/example/peripheral/qspi/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -76,18 +75,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -185,6 +192,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -207,6 +219,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/sdio/configs/e2000d_aarch32_eg_configs b/example/peripheral/sdio/configs/e2000d_aarch32_eg_configs index 85166202b71da773da41cb7c4a4ac399ffa66168..6438c7cf3d16c3edd8fad6f089e0d39acd8bf809 100644 --- a/example/peripheral/sdio/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/sdio/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -213,6 +223,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,13 +255,14 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/sdio/configs/e2000d_aarch64_eg_configs b/example/peripheral/sdio/configs/e2000d_aarch64_eg_configs index e959d4886dd822193e4dfbfbc1bcae1f54020344..0b68c53ead9b5bc6199da02792a4446ae270e015 100644 --- a/example/peripheral/sdio/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/sdio/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -209,6 +219,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -235,13 +251,14 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/sdio/configs/e2000q_aarch32_eg_configs b/example/peripheral/sdio/configs/e2000q_aarch32_eg_configs index 962184851193b7c479f5b0c2d436eff7c1bcf6ba..3343c2e8f5598e6904ac7a57b9934ba6efaea53a 100644 --- a/example/peripheral/sdio/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/sdio/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -213,6 +223,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,13 +255,14 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/sdio/configs/e2000q_aarch64_eg_configs b/example/peripheral/sdio/configs/e2000q_aarch64_eg_configs index ca9fc901ecd2e75e12319606ad0aea4c311f4193..f83eb7239e809f24a9091fad0dcef5e9c81e0f96 100644 --- a/example/peripheral/sdio/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/sdio/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -209,6 +219,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -235,13 +251,14 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/sdio/sdkconfig b/example/peripheral/sdio/sdkconfig index ca9fc901ecd2e75e12319606ad0aea4c311f4193..f83eb7239e809f24a9091fad0dcef5e9c81e0f96 100644 --- a/example/peripheral/sdio/sdkconfig +++ b/example/peripheral/sdio/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -80,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -209,6 +219,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -235,13 +251,14 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/sdio/sdkconfig.h b/example/peripheral/sdio/sdkconfig.h index 7f8cabca315fb7e3433a7f7cd0735e58fd606ac8..ceaf64c0de0fd6162503552d5674d5ab87171825 100644 --- a/example/peripheral/sdio/sdkconfig.h +++ b/example/peripheral/sdio/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -/* CONFIG_USE_SYS_TICK is not set */ /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -73,18 +72,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ #define CONFIG_LOG_EXTRA_INFO /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -182,6 +189,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -204,12 +216,13 @@ #define CONFIG_USE_TLSF #define CONFIG_USE_SDMMC_CMD -/* SDMMC Configuration */ +/* Sdmmc configuration */ /* CONFIG_SDMMC_USE_FSDMMC is not set */ #define CONFIG_SDMMC_USE_FSDIO -/* end of SDMMC Configuration */ +/* end of Sdmmc configuration */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/sdio/src/sd_read_write.c b/example/peripheral/sdio/src/sd_read_write.c index d92790cbb082b1f3cb419b6abffb25d8ab1b8e6d..c6e62ed1cb1025ab6ecdb6cc881505bb5e6a8274 100644 --- a/example/peripheral/sdio/src/sd_read_write.c +++ b/example/peripheral/sdio/src/sd_read_write.c @@ -34,6 +34,7 @@ #include "fsleep.h" #include "fkernel.h" #include "fcache.h" +#include "fio.h" #include "sdmmc_host_os.h" /************************** Constant Definitions *****************************/ @@ -241,6 +242,8 @@ BaseType_t FFreeRTOSSdWriteRead(u32 slot_id, boolean is_emmc, u32 start_blk, u32 test_info.block_num = blk_num; taskENTER_CRITICAL(); /* no schedule when create task */ + FtOut32((uintptr)0x32b31178, 0x1f); /* set delay of SDIO-1 on E2000 Demo otherwise detect may fail */ + ret = xTaskCreate((TaskFunction_t)SDInitTask, (const char *)"SDInitTask", (uint16_t)2048, diff --git a/example/peripheral/spi/configs/e2000d_aarch32_eg_configs b/example/peripheral/spi/configs/e2000d_aarch32_eg_configs index 39a7ba02b5dd3fe4027c884192372a20ceb6acb6..65b06723123850d3e6e724aac917ec77a2f884e2 100644 --- a/example/peripheral/spi/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/spi/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,18 +78,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -212,6 +222,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -223,13 +239,13 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # CONFIG_SFUD_CTRL_FSPIM=y CONFIG_SFUD_TRANS_MODE_POLL_FIFO=y # CONFIG_SFUD_TRANS_MODE_INTRRUPT is not set # CONFIG_SFUD_CTRL_FQSPI is not set -# end of SFUD Configuration +# end of Sfud configuration # CONFIG_USE_SPIFFS is not set # CONFIG_USE_AMP is not set @@ -247,6 +263,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/spi/configs/e2000d_aarch64_eg_configs b/example/peripheral/spi/configs/e2000d_aarch64_eg_configs index 9404dace57c87f3b52736ce5764109f220665a7f..e9162539a68918fb6c05bdd6a5243614d21e52ac 100644 --- a/example/peripheral/spi/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/spi/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,18 +78,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -219,13 +235,13 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # CONFIG_SFUD_CTRL_FSPIM=y # CONFIG_SFUD_TRANS_MODE_POLL_FIFO is not set CONFIG_SFUD_TRANS_MODE_INTRRUPT=y # CONFIG_SFUD_CTRL_FQSPI is not set -# end of SFUD Configuration +# end of Sfud configuration # CONFIG_USE_SPIFFS is not set # CONFIG_USE_AMP is not set @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/spi/sdkconfig b/example/peripheral/spi/sdkconfig index 9404dace57c87f3b52736ce5764109f220665a7f..e9162539a68918fb6c05bdd6a5243614d21e52ac 100644 --- a/example/peripheral/spi/sdkconfig +++ b/example/peripheral/spi/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,18 +78,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -219,13 +235,13 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # CONFIG_SFUD_CTRL_FSPIM=y # CONFIG_SFUD_TRANS_MODE_POLL_FIFO is not set CONFIG_SFUD_TRANS_MODE_INTRRUPT=y # CONFIG_SFUD_CTRL_FQSPI is not set -# end of SFUD Configuration +# end of Sfud configuration # CONFIG_USE_SPIFFS is not set # CONFIG_USE_AMP is not set @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/spi/sdkconfig.h b/example/peripheral/spi/sdkconfig.h index 1e42a4786aa4c4c6d68df3f974a33fa0f3724b53..edc39e592c45da9e03a3c19ce1f801b1b760d506 100644 --- a/example/peripheral/spi/sdkconfig.h +++ b/example/peripheral/spi/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -72,18 +71,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ #define CONFIG_LOG_EXTRA_INFO /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -181,6 +188,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -190,13 +202,13 @@ /* CONFIG_USE_FATFS_0_1_4 is not set */ #define CONFIG_USE_SFUD -/* SFUD Configuration */ +/* Sfud configuration */ #define CONFIG_SFUD_CTRL_FSPIM /* CONFIG_SFUD_TRANS_MODE_POLL_FIFO is not set */ #define CONFIG_SFUD_TRANS_MODE_INTRRUPT /* CONFIG_SFUD_CTRL_FQSPI is not set */ -/* end of SFUD Configuration */ +/* end of Sfud configuration */ /* CONFIG_USE_SPIFFS is not set */ /* CONFIG_USE_AMP is not set */ #define CONFIG_USE_LETTER_SHELL @@ -211,6 +223,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/timer_tacho/configs/e2000d_aarch32_eg_configs b/example/peripheral/timer_tacho/configs/e2000d_aarch32_eg_configs index 7b106d1da8aa54210f32bd9cef1a2aea512b68ec..ea53bd8ba36c7b0edfd1d80d295124d2941d5425 100644 --- a/example/peripheral/timer_tacho/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/timer_tacho/configs/e2000d_aarch32_eg_configs @@ -16,7 +16,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set # CONFIG_USE_CACHE is not set -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -84,18 +83,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -217,6 +227,12 @@ CONFIG_FREERTOS_USE_UART=y # CONFIG_FREERTOS_USE_TIMER=y # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -242,6 +258,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/timer_tacho/configs/e2000d_aarch64_eg_configs b/example/peripheral/timer_tacho/configs/e2000d_aarch64_eg_configs index 7b7d8d1b073f620eaa64fc7f8cb89013e3bc206b..6244c469de63bb364c5462f43aaf92642068fee9 100644 --- a/example/peripheral/timer_tacho/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/timer_tacho/configs/e2000d_aarch64_eg_configs @@ -16,7 +16,6 @@ CONFIG_USE_FREERTOS=y # CONFIG_TARGET_ARMV8_AARCH32 is not set CONFIG_TARGET_ARMV8_AARCH64=y # CONFIG_USE_CACHE is not set -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -84,18 +83,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -213,6 +223,12 @@ CONFIG_FREERTOS_USE_UART=y # CONFIG_FREERTOS_USE_TIMER=y # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -238,6 +254,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/timer_tacho/configs/e2000q_aarch32_eg_configs b/example/peripheral/timer_tacho/configs/e2000q_aarch32_eg_configs index 8cec2184e7e662d81ded306e0f70237266426577..bb83edcc438901daf1941c46a8ece048aaab62de 100644 --- a/example/peripheral/timer_tacho/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/timer_tacho/configs/e2000q_aarch32_eg_configs @@ -16,7 +16,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set # CONFIG_USE_CACHE is not set -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -84,18 +83,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -217,6 +227,12 @@ CONFIG_FREERTOS_USE_UART=y # CONFIG_FREERTOS_USE_TIMER=y # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -242,6 +258,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/timer_tacho/configs/e2000q_aarch64_eg_configs b/example/peripheral/timer_tacho/configs/e2000q_aarch64_eg_configs index c9809bc23129816422182df4e8d2463de2ea1491..8eff955d6e456576da9c1254a049b98ffa3030c7 100644 --- a/example/peripheral/timer_tacho/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/timer_tacho/configs/e2000q_aarch64_eg_configs @@ -16,7 +16,6 @@ CONFIG_USE_FREERTOS=y # CONFIG_TARGET_ARMV8_AARCH32 is not set CONFIG_TARGET_ARMV8_AARCH64=y # CONFIG_USE_CACHE is not set -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -84,18 +83,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -213,6 +223,12 @@ CONFIG_FREERTOS_USE_UART=y # CONFIG_FREERTOS_USE_TIMER=y # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -238,6 +254,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/timer_tacho/sdkconfig b/example/peripheral/timer_tacho/sdkconfig index c9809bc23129816422182df4e8d2463de2ea1491..8eff955d6e456576da9c1254a049b98ffa3030c7 100644 --- a/example/peripheral/timer_tacho/sdkconfig +++ b/example/peripheral/timer_tacho/sdkconfig @@ -16,7 +16,6 @@ CONFIG_USE_FREERTOS=y # CONFIG_TARGET_ARMV8_AARCH32 is not set CONFIG_TARGET_ARMV8_AARCH64=y # CONFIG_USE_CACHE is not set -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -84,18 +83,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -213,6 +223,12 @@ CONFIG_FREERTOS_USE_UART=y # CONFIG_FREERTOS_USE_TIMER=y # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -238,6 +254,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/timer_tacho/sdkconfig.h b/example/peripheral/timer_tacho/sdkconfig.h index 96814334c11801c6d93246e8b4104243fe6815b5..b003cb319931b0bf8abf4298724c400320463202 100644 --- a/example/peripheral/timer_tacho/sdkconfig.h +++ b/example/peripheral/timer_tacho/sdkconfig.h @@ -15,7 +15,6 @@ /* CONFIG_TARGET_ARMV8_AARCH32 is not set */ #define CONFIG_TARGET_ARMV8_AARCH64 /* CONFIG_USE_CACHE is not set */ -/* CONFIG_USE_SYS_TICK is not set */ /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -75,18 +74,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -184,6 +191,11 @@ #define CONFIG_FREERTOS_USE_TIMER /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -206,6 +218,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/usb/cherryusb_host/README.md b/example/peripheral/usb/cherryusb_host/README.md index 9902b65b66093e3931a50d9b1fd7badf5208a37e..3d61b3b27040eae209d6254b4a12464f2aac8adb 100644 --- a/example/peripheral/usb/cherryusb_host/README.md +++ b/example/peripheral/usb/cherryusb_host/README.md @@ -25,9 +25,6 @@ CherryUSB 是一个用于嵌入式系统 USB 协议栈,支持运行在Host模 本例程需要的配置包括, - Letter Shell组件,依赖 USE_LETTER_SHELL -- FATFS组件,依赖 USE_FATFS 和 SELECT_FATFS_FSATA_PCIE -- PCIE组件,作为转接接口,依赖USE_PCIE -- SATA组件,依赖 USE_SATA 本例子已经提供好具体的编译指令,以下进行介绍: - make 将目录下的工程进行编译 @@ -35,6 +32,8 @@ CherryUSB 是一个用于嵌入式系统 USB 协议栈,支持运行在Host模 - make boot 将目录下的工程进行编译,并将生成的elf 复制到目标地址 - make load_e2000d_aarch64 将预设64bit e2000d 下的配置加载至工程中 - make load_e2000d_aarch32 将预设32bit e2000d 下的配置加载至工程中 +- make load_e2000q_aarch64 将预设64bit e2000q 下的配置加载至工程中 +- make load_e2000q_aarch32 将预设32bit e2000q 下的配置加载至工程中 - make menuconfig 配置目录下的参数变量 - make backup_kconfig 将目录下的sdkconfig 备份到./configs下 @@ -85,69 +84,60 @@ bootelf -p 0x90100000 #### 2.4.1 读写 U 盘 -- 目前 CherryUSB 的 USB 3.0 支持尚未完成,超高速设备需要通过2.0 Hub连接进行测试 +- 将 U 盘(USB3.0 接口U盘)插在 USB-0 口,初始化 USB-0 控制器后,查看 U 盘设备是否枚举成功,然后通过枚举成功后返回的设备路径`/usb0/sda`读写 U 盘 ``` -usb init -usb disk +usb init 0 +usb lsusb 0 -t +usb disk /usb0/sda ``` -![usb_disk](./figs/usb_disk_connection.png) +![usb_disk](./figs/usb_disk_connection.jpg) + +- 输入`usb disk`后,启动一个任务不断读写U盘 ![usb_disk_init](./figs/usb_disk_init.png) -- 输入`usb disk`后,启动一个任务不断读写U盘 +- 关于 U 盘的进一步使用,可以参考 storage/fatfs 中使用 U 盘文件系统 -#### 2.4.2 获取键盘输入 +#### 2.4.2 获取键盘和鼠标输入 -- 目前 USB (xhci port) 协议栈中 hub 的支持还不够完善,低速设备需要直连板上的 USB 插槽进行测试 +- 将键盘插在 USB-0 口,鼠标插在 USB-1 口,分别初始化 USB-0 和 USB-1 控制器,查看键盘和鼠标是否枚举成功,通过枚举成功后返回的设备路径`/usb0/kbd0`和`/usb1/mouse1`,开启键盘和鼠标输入后进行读取 ``` -usb init -usb input +usb init 0 +usb init 1 +usb lsusb 0 -t +usb lsusb 1 -t +usb kbd /usb0/kbd0 +usb mouse /usb1/mouse1 ``` -- 输入`usb input`后,可以通过中断处理键盘输入 - -![usb_keyboard](./figs/usb_keyboard_connect.jpg) - -![usb_keyboard_input](./figs/usb_keyboard_input.png) - -#### 2.4.3 获取鼠标输入 +![usb_keyboard_mouse](./figs/usb_keyboard_mouse.jpg) -- 目前 USB (xhci port) 协议栈中 hub 的支持还不够完善,低速设备需要直连板上的 USB 插槽进行测试 +![usb_keyboard_mouse](./figs/usb_keyboard_mouse_connect.jpg) -``` -usb init -usb input -``` - -- 输入`usb input`后,可以通过中断处理鼠标输入 +- 输入`usb input`后,可以通过中断处理键盘输入 -![usb_mouse](./figs/usb_mouse_connect.jpg) +![usb_keyboard_mouse_init](./figs/usb_keyboard_input.png) ![usb_mouse_input](./figs/usb_mouse_input.png) +- 上图中,首先打印的是通过 USB 键盘输入的字符串,已经一系列特殊字符,然后是鼠标的输入,x和y是鼠标的平面坐标位置,w是鼠标中间滚轮的位置,<-、-> 和 C 分别是按下鼠标左、右键和中间滚轮后的返回 + ## 3. 如何解决问题 >主要记录使用例程中可能会遇到的问题,给出相应的解决方案
-- 目前CherryUSB(xhci port)上的hub支持不完善,主要的影响是 -1. 不支持枚举hub上的低速设备,例如鼠标、键盘等需要直接插槽 - -- 目前CherryUSB上的USB3.0支持尚未完成,主要的影响是 -1. 不支持枚举超高速设备,例如高速U盘直接插槽枚举会失败 -2. 不支持枚举USB 3.0超高速hub - -- 因此,目前支持的两种连接方式是 -1. 板上USB插槽直连鼠标、键盘 -2. 通过USB 2.0全速/高速hub,连接U盘等超高速设备 +- 目前 USB 外接 HUB 功能支持未完成,建议 USB 设备直连 Roothub +1. 通过USB HUB 连接键盘鼠标等低速设备可能会有问题 ## 4. 修改历史记录 >记录例程的重大修改记录,标明修改发生的版本号
-V0.3.1 首次合入 +- V0.3.1 首次合入 +- v0.1.0 支持USB 3.0 设备枚举 diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch32_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch32_eg_configs index b5c8029470326eb7f879ff3a919b02bbfa61400d..4e9af529b1c088fe78103a941b2df06b154ea1ee 100644 --- a/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -79,7 +78,8 @@ CONFIG_USE_SATA=y CONFIG_ENABLE_FSATA=y # end of FSATA Configuration -# CONFIG_USE_USB is not set +CONFIG_USE_USB=y +CONFIG_ENABLE_USB_FXHCI=y # CONFIG_USE_ADC is not set # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set @@ -93,18 +93,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -226,6 +237,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,46 +250,7 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_USE_LWIP is not set CONFIG_USE_BACKTRACE=y -CONFIG_USE_FATFS_0_1_4=y - -# -# FATFS Configuration (0.1.4) -# -CONFIG_FATFS_RAM_DISK=y - -# -# RAM Disk Configuration -# -CONFIG_FATFS_RAM_DISK_BASE=0xa0000000 -CONFIG_FATFS_RAM_DISK_SIZE_MB=500 -CONFIG_FATFS_RAM_DISK_SECTOR_SIZE_BYTE=512 -# end of RAM Disk Configuration - -# CONFIG_FATFS_SDMMC_FSDIO_TF is not set -# CONFIG_FATFS_SDMMC_FSDIO_EMMC is not set -# CONFIG_FATFS_SDMMC_FSDMMC_TF is not set -CONFIG_FATFS_SATA_DISK=y - -# -# SATA Disk Configuration -# -# CONFIG_FATFS_FSATA is not set -CONFIG_FATFS_FSATA_PCIE=y -# end of SATA Disk Configuration - -# CONFIG_FATFS_USB is not set -CONFIG_FATFS_VOLUME_COUNT=6 -# CONFIG_FATFS_LFN_NONE is not set -CONFIG_FATFS_LFN_HEAP=y -# CONFIG_FATFS_LFN_STACK is not set -CONFIG_FATFS_MAX_LFN=255 -CONFIG_FATFS_FS_LOCK=0 -CONFIG_FATFS_TIMEOUT_MS=10000 -CONFIG_FATFS_PER_FILE_CACHE=y -CONFIG_FATFS_ALLOC_PREFER_MEMP=y -CONFIG_FATFS_MEMP_SIZE=2 -# end of FATFS Configuration (0.1.4) - +# CONFIG_USE_FATFS_0_1_4 is not set # CONFIG_USE_SFUD is not set # CONFIG_USE_SPIFFS is not set # CONFIG_USE_AMP is not set @@ -305,6 +283,8 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y CONFIG_CHERRY_USB_HOST_CDC=y CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch64_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch64_eg_configs index cb1515f1f50e7faee43fa86e8f9aaa99c4847a0c..92950a1f762ca3d16f35ab95a3a89124fcd517ff 100644 --- a/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/usb/cherryusb_host/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -65,7 +64,8 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_NAND is not set # CONFIG_USE_RTC is not set # CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set +CONFIG_USE_USB=y +CONFIG_ENABLE_USB_FXHCI=y # CONFIG_USE_ADC is not set # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set @@ -79,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set -CONFIG_LOG_DEBUG=y +# CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set -# CONFIG_LOG_ERROR is not set +CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -208,6 +219,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -248,6 +265,8 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y CONFIG_CHERRY_USB_HOST_CDC=y CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000q_aarch32_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000q_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..fc5bf9bb0938a3b0df4a29d7e45aff74f59324ac --- /dev/null +++ b/example/peripheral/usb/cherryusb_host/configs/e2000q_aarch32_eg_configs @@ -0,0 +1,297 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="e2000q_freertos_a32" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +CONFIG_USE_QSPI=y + +# +# Qspi Configuration +# +CONFIG_USE_FQSPI=y +# end of Qspi Configuration + +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +CONFIG_USE_USB=y +CONFIG_ENABLE_USB_FXHCI=y +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_INFO=y +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +CONFIG_FREERTOS_USE_QSPI=y +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +CONFIG_USE_CHERRY_USB=y + +# +# CherryUSB Configuration +# +CONFIG_CHERRY_USB_PORT_XHCI=y +# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set +CONFIG_CHERRYUSB_HOST=y +# CONFIG_CHERRYUSB_DEVICE is not set +CONFIG_CHERRY_USB_HOST_HUB=y +CONFIG_CHERRY_USB_HOST_MSC=y +CONFIG_CHERRY_USB_HOST_HID=y +CONFIG_CHERRY_USB_HOST_VEDIO=y +CONFIG_CHERRY_USB_HOST_CDC=y +CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y +# end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000q_aarch64_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000q_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..59044808c08c1f482d0f10d2f9e35120cf4d603d --- /dev/null +++ b/example/peripheral/usb/cherryusb_host/configs/e2000q_aarch64_eg_configs @@ -0,0 +1,293 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="e2000q_freertos_a64" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +CONFIG_USE_QSPI=y + +# +# Qspi Configuration +# +CONFIG_USE_FQSPI=y +# end of Qspi Configuration + +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +CONFIG_USE_USB=y +CONFIG_ENABLE_USB_FXHCI=y +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_INFO=y +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +CONFIG_FREERTOS_USE_QSPI=y +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +CONFIG_USE_CHERRY_USB=y + +# +# CherryUSB Configuration +# +CONFIG_CHERRY_USB_PORT_XHCI=y +# CONFIG_CHERRY_USB_PORT_PHYTIUM_OTG is not set +CONFIG_CHERRYUSB_HOST=y +# CONFIG_CHERRYUSB_DEVICE is not set +CONFIG_CHERRY_USB_HOST_HUB=y +CONFIG_CHERRY_USB_HOST_MSC=y +CONFIG_CHERRY_USB_HOST_HID=y +CONFIG_CHERRY_USB_HOST_VEDIO=y +CONFIG_CHERRY_USB_HOST_CDC=y +CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y +# end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch32_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch32_eg_configs index b11aedb34da8c1cbc0d89891c9913c50f3ebeaa2..112dbb77f2e47c1a0626d34dfcc06751f22a402a 100644 --- a/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch32_eg_configs +++ b/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -65,7 +64,8 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_NAND is not set # CONFIG_USE_RTC is not set # CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set +CONFIG_USE_USB=y +CONFIG_ENABLE_USB_FXHCI=y # CONFIG_USE_ADC is not set # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set @@ -79,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -212,6 +223,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -252,6 +269,8 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y CONFIG_CHERRY_USB_HOST_CDC=y CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch64_eg_configs b/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch64_eg_configs index 3dee44579f3192bded1907143d9deda716d0c7a6..d1d5f007e2cf05df62a737b73ecbfc1b01a3dbb4 100644 --- a/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch64_eg_configs +++ b/example/peripheral/usb/cherryusb_host/configs/e2000s_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -65,7 +64,8 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_NAND is not set # CONFIG_USE_RTC is not set # CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set +CONFIG_USE_USB=y +CONFIG_ENABLE_USB_FXHCI=y # CONFIG_USE_ADC is not set # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set @@ -79,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -208,6 +219,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -248,6 +265,8 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y CONFIG_CHERRY_USB_HOST_CDC=y CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_disk_connection.jpg b/example/peripheral/usb/cherryusb_host/figs/usb_disk_connection.jpg new file mode 100644 index 0000000000000000000000000000000000000000..72482bdfa1da66beef8c85bd989c707440514bc2 Binary files /dev/null and b/example/peripheral/usb/cherryusb_host/figs/usb_disk_connection.jpg differ diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_disk_connection.png b/example/peripheral/usb/cherryusb_host/figs/usb_disk_connection.png deleted file mode 100644 index dff4db139fff3cfd224f470a062b7d362118f40a..0000000000000000000000000000000000000000 Binary files a/example/peripheral/usb/cherryusb_host/figs/usb_disk_connection.png and /dev/null differ diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_disk_init.png b/example/peripheral/usb/cherryusb_host/figs/usb_disk_init.png index 385cd0086d6f4f5c88d762e48afeb32f5c256440..06e9831ad843239adcac0ff5410574d69f5aa342 100644 Binary files a/example/peripheral/usb/cherryusb_host/figs/usb_disk_init.png and b/example/peripheral/usb/cherryusb_host/figs/usb_disk_init.png differ diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_connect.jpg b/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_connect.jpg deleted file mode 100644 index d5a0aaec61643aab9a6c1936fdde410f7b0dc8ff..0000000000000000000000000000000000000000 Binary files a/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_connect.jpg and /dev/null differ diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_input.png b/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_input.png index e67d2daaba890bc459698a1e75f1e0f7d600ce89..930ff62d461791dac946e34c5592227416636dcb 100644 Binary files a/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_input.png and b/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_input.png differ diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_mouse.jpg b/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_mouse.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f963506419c886df8d8e1503adf57e46bb9167d5 Binary files /dev/null and b/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_mouse.jpg differ diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_mouse_connect.jpg b/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_mouse_connect.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1542210c8a0c1a26ced0483c90b7f07068d02dd7 Binary files /dev/null and b/example/peripheral/usb/cherryusb_host/figs/usb_keyboard_mouse_connect.jpg differ diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_mouse_connect.jpg b/example/peripheral/usb/cherryusb_host/figs/usb_mouse_connect.jpg deleted file mode 100644 index 4d960f035587a5541d4f72bffe162a4e631a3ac6..0000000000000000000000000000000000000000 Binary files a/example/peripheral/usb/cherryusb_host/figs/usb_mouse_connect.jpg and /dev/null differ diff --git a/example/peripheral/usb/cherryusb_host/figs/usb_mouse_input.png b/example/peripheral/usb/cherryusb_host/figs/usb_mouse_input.png index c3a6582103e10c5fd3200f448d6dfeb6c7dd3369..bf30b0703d770abb602b4d90d2cdf19360935a30 100644 Binary files a/example/peripheral/usb/cherryusb_host/figs/usb_mouse_input.png and b/example/peripheral/usb/cherryusb_host/figs/usb_mouse_input.png differ diff --git a/example/peripheral/usb/cherryusb_host/inc/usb_config.h b/example/peripheral/usb/cherryusb_host/inc/usb_config.h index 3a89de76f1fe88caa9f3b9abb257f548a962e81d..3cce59fdd809b0b3551651639bf4e8bd5ca9b069 100644 --- a/example/peripheral/usb/cherryusb_host/inc/usb_config.h +++ b/example/peripheral/usb/cherryusb_host/inc/usb_config.h @@ -107,7 +107,7 @@ void *usb_hc_malloc_align(size_t align, size_t size); /* ================ USB HOST Stack Configuration ================== */ -#define CONFIG_USBHOST_MAX_RHPORTS 1 +#define CONFIG_USBHOST_MAX_RHPORTS 2 #define CONFIG_USBHOST_MAX_EXTHUBS 2 #define CONFIG_USBHOST_MAX_EHPORTS 4 #define CONFIG_USBHOST_MAX_INTERFACES 6 @@ -120,7 +120,7 @@ void *usb_hc_malloc_align(size_t align, size_t size); #define CONFIG_USBHOST_PSC_PRIO 4 #endif #ifndef CONFIG_USBHOST_PSC_STACKSIZE - #define CONFIG_USBHOST_PSC_STACKSIZE 2048 + #define CONFIG_USBHOST_PSC_STACKSIZE 4096 #endif /* Ep0 max transfer buffer */ @@ -134,6 +134,11 @@ void *usb_hc_malloc_align(size_t align, size_t size); #define CONFIG_USBHOST_MSC_TIMEOUT 5000 #endif +/* do not try to enumrate one interface */ +#ifndef CONFIG_USBHOST_ENUM_FIRST_INTERFACE_ONLY + #define CONFIG_USBHOST_ENUM_FIRST_INTERFACE_ONLY +#endif + /* ================ USB Device Port Configuration ================*/ #define CONFIG_XHCI_PAGE_SIZE 4096U @@ -145,6 +150,7 @@ void *usb_hc_malloc_align(size_t align, size_t size); /* ================ XHCI Configuration ================ */ #define CONFIG_USBHOST_XHCI +#define CONFIG_USBHOST_XHCI_NUM 2 #ifdef __cplusplus } diff --git a/example/peripheral/usb/cherryusb_host/inc/usb_host.h b/example/peripheral/usb/cherryusb_host/inc/usb_host.h index 5888559c70f3604a4d48fe826ec852204952bda2..d3887ad17e84493d2a5601dda1670f51663b857e 100644 --- a/example/peripheral/usb/cherryusb_host/inc/usb_host.h +++ b/example/peripheral/usb/cherryusb_host/inc/usb_host.h @@ -40,9 +40,10 @@ extern "C" /************************** Function Prototypes ******************************/ /*****************************************************************************/ -BaseType_t FFreeRTOSInitUsb(void); -BaseType_t FFreeRTOSRunUsbDisk(void); -BaseType_t FFreeRTOSRunUsbInput(void); +BaseType_t FFreeRTOSInitUsb(u32 id); +BaseType_t FFreeRTOSRunUsbDisk(const char *devname); +BaseType_t FFreeRTOSRunUsbKeyboard(const char *devname); +BaseType_t FFreeRTOSRunUsbMouse(const char *devname); BaseType_t FFreeRTOSListUsbDev(int argc, char *argv[]); #ifdef __cplusplus diff --git a/example/peripheral/usb/cherryusb_host/sdkconfig b/example/peripheral/usb/cherryusb_host/sdkconfig index 3dee44579f3192bded1907143d9deda716d0c7a6..d1d5f007e2cf05df62a737b73ecbfc1b01a3dbb4 100644 --- a/example/peripheral/usb/cherryusb_host/sdkconfig +++ b/example/peripheral/usb/cherryusb_host/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -65,7 +64,8 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_NAND is not set # CONFIG_USE_RTC is not set # CONFIG_USE_SATA is not set -# CONFIG_USE_USB is not set +CONFIG_USE_USB=y +CONFIG_ENABLE_USB_FXHCI=y # CONFIG_USE_ADC is not set # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set @@ -79,18 +79,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set CONFIG_LOG_DEBUG=y # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -208,6 +219,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -248,6 +265,8 @@ CONFIG_CHERRY_USB_HOST_VEDIO=y CONFIG_CHERRY_USB_HOST_CDC=y CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS=y # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/usb/cherryusb_host/sdkconfig.h b/example/peripheral/usb/cherryusb_host/sdkconfig.h index e8e71a146f371dd10e559b009dcc33e93883c666..f3893a7b2099839ecc4f5bc32f605338c650fc67 100644 --- a/example/peripheral/usb/cherryusb_host/sdkconfig.h +++ b/example/peripheral/usb/cherryusb_host/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -60,7 +59,8 @@ /* CONFIG_USE_NAND is not set */ /* CONFIG_USE_RTC is not set */ /* CONFIG_USE_SATA is not set */ -/* CONFIG_USE_USB is not set */ +#define CONFIG_USE_USB +#define CONFIG_ENABLE_USB_FXHCI /* CONFIG_USE_ADC is not set */ /* CONFIG_USE_PWM is not set */ /* CONFIG_USE_IPC is not set */ @@ -72,18 +72,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ #define CONFIG_LOG_DEBUG /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ #define CONFIG_LOG_EXTRA_INFO /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -181,6 +189,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -217,6 +230,7 @@ #define CONFIG_CHERRY_USB_HOST_CDC #define CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS /* end of CherryUSB Configuration */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/usb/cherryusb_host/src/cmd_usb.c b/example/peripheral/usb/cherryusb_host/src/cmd_usb.c index 60d5a6f8bb670fd35d7abc65bba5274af860bfc6..8881c48161a33e4888e386154c76afbf36f7ef1d 100644 --- a/example/peripheral/usb/cherryusb_host/src/cmd_usb.c +++ b/example/peripheral/usb/cherryusb_host/src/cmd_usb.c @@ -34,22 +34,48 @@ static int USBCmdEntry(int argc, char *argv[]) { int ret = 0; + u32 usb_id = 0; + const char *devname; if (!strcmp(argv[1], "init")) { - ret = FFreeRTOSInitUsb(); + if (argc < 3) { + return -2; + } + + usb_id = (uint8_t)simple_strtoul(argv[2], NULL, 10); + ret = FFreeRTOSInitUsb(usb_id); + } + else if (!strcmp(argv[1], "lsusb")) + { + ret = FFreeRTOSListUsbDev(argc - 1, &argv[1]); } else if (!strcmp(argv[1], "disk")) { - ret = FFreeRTOSRunUsbDisk(); + if (argc < 3) { + return -2; + } + + devname = argv[2]; + ret = FFreeRTOSRunUsbDisk(devname); } - else if (!strcmp(argv[1], "input")) + else if (!strcmp(argv[1], "kbd")) { - ret = FFreeRTOSRunUsbInput(); + if (argc < 3) { + return -2; + } + + devname = argv[2]; + ret = FFreeRTOSRunUsbKeyboard(devname); } - else if (!strcmp(argv[1], "lsusb")) + else if (!strcmp(argv[1], "mouse")) { - ret = FFreeRTOSListUsbDev(argc - 1, &argv[1]); + if (argc < 3) { + return -2; + } + + devname = argv[2]; + ret = FFreeRTOSRunUsbMouse(devname); } return ret; diff --git a/example/peripheral/usb/cherryusb_host/src/usb_disk.c b/example/peripheral/usb/cherryusb_host/src/usb_disk.c index 7a76663b5c7bbafcc9d2963e810c7dbc197adf6f..31fd28a7e7e6b58a5ee9183ac24e080dad33d898 100644 --- a/example/peripheral/usb/cherryusb_host/src/usb_disk.c +++ b/example/peripheral/usb/cherryusb_host/src/usb_disk.c @@ -59,16 +59,17 @@ static void UsbMscTask(void *args) static uint8_t rd_table[512] = {0}; static uint8_t wr_table[512] = {0}; u32 loop = 0; + const char *devname = (const char *)args; - while (TRUE) + msc_class = (struct usbh_msc *)usbh_find_class_instance(devname); + if (msc_class == NULL) { - msc_class = (struct usbh_msc *)usbh_find_class_instance("/dev/sda"); - if (msc_class == NULL) - { - USB_LOG_RAW("Do not find /dev/sda. \r\n"); - goto err_exit; - } + USB_LOG_RAW("Do not find %s. \r\n", devname); + goto err_exit; + } + while (TRUE) + { /* write partition table */ memcpy(wr_table, rd_table, sizeof(rd_table)); for (uint32_t i = 0; i < 512; i++) @@ -99,17 +100,23 @@ static void UsbMscTask(void *args) } else { - printf("[%d] disk read and write successfully.\r\n", loop++); + printf("[%d] disk read and write successfully.\r\n", loop); + } + + loop++; + if (loop > 10) + { + break; } - vTaskDelay(10); + vTaskDelay(100); } err_exit: vTaskDelete(NULL); } -BaseType_t FFreeRTOSRunUsbDisk(void) +BaseType_t FFreeRTOSRunUsbDisk(const char *devname) { BaseType_t ret = pdPASS; @@ -118,7 +125,7 @@ BaseType_t FFreeRTOSRunUsbDisk(void) ret = xTaskCreate((TaskFunction_t)UsbMscTask, (const char *)"UsbMscTask", (uint16_t)2048, - NULL, + (void *)devname, (UBaseType_t)configMAX_PRIORITIES - 1, NULL); FASSERT_MSG(pdPASS == ret, "create task failed"); diff --git a/example/peripheral/usb/cherryusb_host/src/usb_host.c b/example/peripheral/usb/cherryusb_host/src/usb_host.c index 6ef0c0077b362ba3eb60b51e7520bdcaefc8a965..6b00e945f64cee52af45d76e41e187ee65048554 100644 --- a/example/peripheral/usb/cherryusb_host/src/usb_host.c +++ b/example/peripheral/usb/cherryusb_host/src/usb_host.c @@ -44,6 +44,7 @@ /************************** Variable Definitions *****************************/ static FMemp memp; static u8 memp_buf[FUSB_MEMP_TOTAL_SIZE]; +static struct usbh_bus usb[FUSB3_NUM]; /***************** Macros (Inline Functions) Definitions *********************/ #define FUSB_DEBUG_TAG "USB-HC" @@ -53,18 +54,18 @@ static u8 memp_buf[FUSB_MEMP_TOTAL_SIZE]; #define FUSB_DEBUG(format, ...) FT_DEBUG_PRINT_D(FUSB_DEBUG_TAG, format, ##__VA_ARGS__) /************************** Function Prototypes ******************************/ -extern void USBH_IRQHandler(void); +extern void USBH_IRQHandler(void *); /*****************************************************************************/ static void UsbHcInterrruptHandler(s32 vector, void *param) { - USBH_IRQHandler(); + USBH_IRQHandler(param); } -static void UsbHcSetupInterrupt(void) +static void UsbHcSetupInterrupt(u32 id) { u32 cpu_id; - u32 irq_num = FUSB3_0_IRQ_NUM; + u32 irq_num = (id == FUSB3_ID_0) ? FUSB3_0_IRQ_NUM : FUSB3_1_IRQ_NUM; u32 irq_priority = 13U; GetCpuId(&cpu_id); @@ -75,7 +76,7 @@ static void UsbHcSetupInterrupt(void) /* register intr callback */ InterruptInstall(irq_num, UsbHcInterrruptHandler, - NULL, + &usb[id], NULL); /* enable irq */ @@ -91,15 +92,18 @@ void UsbHcSetupMemp(void) } /* implement cherryusb weak functions */ -void usb_hc_low_level_init(void) +void usb_hc_low_level_init(uint32_t id) { UsbHcSetupMemp(); - UsbHcSetupInterrupt(); + UsbHcSetupInterrupt(id); } -unsigned long usb_hc_get_register_base(void) +unsigned long usb_hc_get_register_base(uint32_t id) { - return FUSB3_0_BASE_ADDR + FUSB3_XHCI_OFFSET; + if (FUSB3_ID_0 == id) + return FUSB3_0_BASE_ADDR + FUSB3_XHCI_OFFSET; + else + return FUSB3_1_BASE_ADDR + FUSB3_XHCI_OFFSET; } void *usb_hc_malloc(size_t size) @@ -140,7 +144,10 @@ void usb_hc_dcache_invalidate(void *addr, unsigned long len) static void UsbInitTask(void *args) { - if (0 == usbh_initialize()) + u32 id = (u32)(uintptr)args; + memset(&usb[id], 0 , sizeof(usb[id])); + + if (0 == usbh_initialize(id, &usb[id])) { printf("Init cherryusb host successfully.put 'usb lsusb -t' to see devices.\r\n"); } @@ -152,7 +159,7 @@ static void UsbInitTask(void *args) vTaskDelete(NULL); } -BaseType_t FFreeRTOSInitUsb(void) +BaseType_t FFreeRTOSInitUsb(u32 id) { BaseType_t ret = pdPASS; @@ -161,7 +168,7 @@ BaseType_t FFreeRTOSInitUsb(void) ret = xTaskCreate((TaskFunction_t)UsbInitTask, (const char *)"UsbInitTask", (uint16_t)2048, - NULL, + (void *)(uintptr)id, (UBaseType_t)configMAX_PRIORITIES - 1, NULL); FASSERT_MSG(pdPASS == ret, "create task failed"); diff --git a/example/peripheral/usb/cherryusb_host/src/usb_input.c b/example/peripheral/usb/cherryusb_host/src/usb_input.c index 04e06d99204cf06269ebf94e56f5e199a210a54e..513b3a2a8ae2040fb7535e4b2c59ea09a71a4a9d 100644 --- a/example/peripheral/usb/cherryusb_host/src/usb_input.c +++ b/example/peripheral/usb/cherryusb_host/src/usb_input.c @@ -145,8 +145,10 @@ /************************** Variable Definitions *****************************/ static u8 const keycode2ascii[128][2] = { HID_KEYCODE_TO_ASCII }; -static struct usbh_urb hid_intin_urb; -static uint8_t hid_buffer[128] __attribute__((aligned(sizeof(unsigned long)))) = {0}; +static struct usbh_urb kbd_intin_urb; +static struct usbh_urb mouse_intin_urb; +static uint8_t kbd_buffer[128] __attribute__((aligned(sizeof(unsigned long)))) = {0}; +static uint8_t mouse_buffer[128] __attribute__((aligned(sizeof(unsigned long)))) = {0}; /***************** Macros (Inline Functions) Definitions *********************/ #define FUSB_DEBUG_TAG "USB-INPUT" @@ -161,17 +163,17 @@ static uint8_t hid_buffer[128] __attribute__((aligned(sizeof(unsigned long)))) = /*****************************************************************************/ static inline void UsbMouseLeftButtonCB(void) { - printf("[Left Button] "); + printf("<-\r\n"); } static inline void UsbMouseRightButtonCB(void) { - printf("[Right Button] "); + printf("->\r\n"); } static inline void UsbMouseMiddleButtonCB(void) { - printf("[Middle Button] "); + printf("C\r\n"); } static void UsbMouseHandleInput(struct usb_hid_mouse_report *input) @@ -193,7 +195,7 @@ static void UsbMouseHandleInput(struct usb_hid_mouse_report *input) } /*------------- cursor movement -------------*/ - printf("[Cursor@ x:%d y:%d]\r\n", input->xdisp, input->ydisp); + printf("[x:%d y:%d w:%d]\r\n", input->xdisp, input->ydisp, input->wdisp); } /* look up new key in previous keys */ @@ -251,12 +253,12 @@ static u8 UsbInputGetInterfaceProtocol(struct usbh_hid *hid_class) return intf_desc->bInterfaceProtocol; } -static void UsbHidCallback(void *arg, int nbytes) +static void UsbKeyboardCallback(void *arg, int nbytes) { u8 intf_protocol; - struct usbh_hid *hid_class = (struct usbh_hid *)arg; + struct usbh_hid *kbd_class = (struct usbh_hid *)arg; + intf_protocol = UsbInputGetInterfaceProtocol(kbd_class); - intf_protocol = UsbInputGetInterfaceProtocol(hid_class); if (HID_PROTOCOL_KEYBOARD == intf_protocol) /* handle input from keyboard */ { if (nbytes < (int)sizeof(struct usb_hid_kbd_report)) @@ -265,10 +267,25 @@ static void UsbHidCallback(void *arg, int nbytes) } else { - UsbKeyBoardHandleInput((struct usb_hid_kbd_report *)hid_buffer); + UsbKeyBoardHandleInput((struct usb_hid_kbd_report *)kbd_buffer); } } - else if (HID_PROTOCOL_MOUSE == intf_protocol) /* handle input from mouse */ + else + { + FUSB_ERROR("mismatch callback for protocol-%d", intf_protocol); + return; + } + + usbh_submit_urb(&kbd_intin_urb); /* ask for next inputs */ +} + +static void UsbMouseCallback(void *arg, int nbytes) +{ + u8 intf_protocol; + struct usbh_hid *mouse_class = (struct usbh_hid *)arg; + intf_protocol = UsbInputGetInterfaceProtocol(mouse_class); + + if (HID_PROTOCOL_MOUSE == intf_protocol) /* handle input from mouse */ { if (nbytes < (int)sizeof(struct usb_hid_mouse_report)) { @@ -276,34 +293,62 @@ static void UsbHidCallback(void *arg, int nbytes) } else { - UsbMouseHandleInput((struct usb_hid_mouse_report *)hid_buffer); - } + UsbMouseHandleInput((struct usb_hid_mouse_report *)mouse_buffer); + } } else { - FUSB_ERROR("Unsupported hid interface %d", intf_protocol); + FUSB_ERROR("mismatch callback for protocol-%d", intf_protocol); + return; } - usbh_submit_urb(&hid_intin_urb); /* ask for next inputs */ + usbh_submit_urb(&mouse_intin_urb); /* ask for next inputs */ } -static void UsbInputTask(void *args) +static void UsbKeyboardTask(void *args) { int ret; - struct usbh_hid *hid_class; + struct usbh_hid *kbd_class; u8 intf_protocol; + const char *dev_name = (const char *)args; + + kbd_class = (struct usbh_hid *)usbh_find_class_instance(dev_name); + if (kbd_class == NULL) + { + FUSB_ERROR("Do not find %s.", dev_name); + goto err_exit; + } while (TRUE) { - hid_class = (struct usbh_hid *)usbh_find_class_instance("/dev/input0"); - if (hid_class == NULL) - { - FUSB_ERROR("Do not find /dev/input0."); - goto err_exit; - } + usbh_int_urb_fill(&kbd_intin_urb, kbd_class->intin, kbd_buffer, 8, 0, UsbKeyboardCallback, kbd_class); + ret = usbh_submit_urb(&kbd_intin_urb); + + vTaskDelay(1); + } + +err_exit: + vTaskDelete(NULL); +} + +static void UsbMouseTask(void *args) +{ + int ret; + struct usbh_hid *mouse_class; + u8 intf_protocol; + const char *dev_name = (const char *)args; + + mouse_class = (struct usbh_hid *)usbh_find_class_instance(dev_name); + if (mouse_class == NULL) + { + FUSB_ERROR("Do not find %s.", dev_name); + goto err_exit; + } - usbh_int_urb_fill(&hid_intin_urb, hid_class->intin, hid_buffer, 8, 0, UsbHidCallback, hid_class); - ret = usbh_submit_urb(&hid_intin_urb); + while (TRUE) + { + usbh_int_urb_fill(&mouse_intin_urb, mouse_class->intin, mouse_buffer, 8, 0, UsbMouseCallback, mouse_class); + ret = usbh_submit_urb(&mouse_intin_urb); vTaskDelay(1); } @@ -312,16 +357,35 @@ err_exit: vTaskDelete(NULL); } -BaseType_t FFreeRTOSRunUsbInput(void) +BaseType_t FFreeRTOSRunUsbKeyboard(const char *devname) +{ + BaseType_t ret = pdPASS; + + taskENTER_CRITICAL(); /* no schedule when create task */ + + ret = xTaskCreate((TaskFunction_t)UsbKeyboardTask, + (const char *)"UsbKeyboardTask", + (uint16_t)2048, + (void *)devname, + (UBaseType_t)configMAX_PRIORITIES - 1, + NULL); + FASSERT_MSG(pdPASS == ret, "create task failed"); + + taskEXIT_CRITICAL(); /* allow schedule since task created */ + + return ret; +} + +BaseType_t FFreeRTOSRunUsbMouse(const char *devname) { BaseType_t ret = pdPASS; taskENTER_CRITICAL(); /* no schedule when create task */ - ret = xTaskCreate((TaskFunction_t)UsbInputTask, - (const char *)"UsbInputTask", + ret = xTaskCreate((TaskFunction_t)UsbMouseTask, + (const char *)"UsbMouseTask", (uint16_t)2048, - NULL, + (void *)devname, (UBaseType_t)configMAX_PRIORITIES - 1, NULL); FASSERT_MSG(pdPASS == ret, "create task failed"); diff --git a/example/peripheral/wdt/configs/d2000_aarch32_eg_configs b/example/peripheral/wdt/configs/d2000_aarch32_eg_configs index a54fb4d12f7d5167dce5e52c7ffe0c97569c30b5..53f389606e09f7edf052a60ac3504b6313e6bd2c 100644 --- a/example/peripheral/wdt/configs/d2000_aarch32_eg_configs +++ b/example/peripheral/wdt/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/configs/d2000_aarch64_eg_configs b/example/peripheral/wdt/configs/d2000_aarch64_eg_configs index da381b84319d16278425fbdb28a3ca668fedb51a..2b9fc20fbe1cf0f91a8f7c564792b65dfdee7c2b 100644 --- a/example/peripheral/wdt/configs/d2000_aarch64_eg_configs +++ b/example/peripheral/wdt/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/configs/e2000d_aarch32_eg_configs b/example/peripheral/wdt/configs/e2000d_aarch32_eg_configs index 1ecfc292d38c2b64ceb408f70421d9d05df157b4..64002045e5952b979b0e3746d8b30840ba01e6f9 100644 --- a/example/peripheral/wdt/configs/e2000d_aarch32_eg_configs +++ b/example/peripheral/wdt/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/configs/e2000d_aarch64_eg_configs b/example/peripheral/wdt/configs/e2000d_aarch64_eg_configs index b036433debf140b68e1035dd4b5501a6be2cb165..3651231ce03250505ee08cbdb1fc127f9210cf5f 100644 --- a/example/peripheral/wdt/configs/e2000d_aarch64_eg_configs +++ b/example/peripheral/wdt/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/configs/e2000q_aarch32_eg_configs b/example/peripheral/wdt/configs/e2000q_aarch32_eg_configs index d719b8ab396823bab9a63c32bb46324593449fcb..e12231eb49ec284c5b895f13a28da03684ca98f5 100644 --- a/example/peripheral/wdt/configs/e2000q_aarch32_eg_configs +++ b/example/peripheral/wdt/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/configs/e2000q_aarch64_eg_configs b/example/peripheral/wdt/configs/e2000q_aarch64_eg_configs index ee32ba0291f0bc8b7189f93f2d460f923f77af04..91658500aa6bc937963949f5b41bf27adeec859c 100644 --- a/example/peripheral/wdt/configs/e2000q_aarch64_eg_configs +++ b/example/peripheral/wdt/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/configs/ft2004_aarch32_eg_configs b/example/peripheral/wdt/configs/ft2004_aarch32_eg_configs index 223a422a0b6f96c49d18a0dd42ba344436a57e0c..c3af10d455c5d4143f17311add6d6e237c1e5e6b 100644 --- a/example/peripheral/wdt/configs/ft2004_aarch32_eg_configs +++ b/example/peripheral/wdt/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -243,6 +259,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/configs/ft2004_aarch64_eg_configs b/example/peripheral/wdt/configs/ft2004_aarch64_eg_configs index 45bff2abb96324e371ace6f06e675fd75505faee..fa72abd40f233e064f413962450a128d13cfafbd 100644 --- a/example/peripheral/wdt/configs/ft2004_aarch64_eg_configs +++ b/example/peripheral/wdt/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/sdkconfig b/example/peripheral/wdt/sdkconfig index ee32ba0291f0bc8b7189f93f2d460f923f77af04..91658500aa6bc937963949f5b41bf27adeec859c 100644 --- a/example/peripheral/wdt/sdkconfig +++ b/example/peripheral/wdt/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_WDT=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -239,6 +255,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/peripheral/wdt/sdkconfig.h b/example/peripheral/wdt/sdkconfig.h index cb391a78bac8bbbfb9026f0c806d1b474cfb30f3..a556dc6a459abb047e37c0925e0d17554ce2ed2e 100644 --- a/example/peripheral/wdt/sdkconfig.h +++ b/example/peripheral/wdt/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -76,18 +75,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -185,6 +192,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -207,6 +219,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/peripheral/wdt/src/wdt_example.c b/example/peripheral/wdt/src/wdt_example.c index 9011e3eceb4931580d65c26630d583d2926ffd9b..95373e8c2958a3d14523b68103b32af96eb0ddd2 100644 --- a/example/peripheral/wdt/src/wdt_example.c +++ b/example/peripheral/wdt/src/wdt_example.c @@ -27,6 +27,7 @@ #include "task.h" #include "queue.h" #include "timers.h" +#include "fparameters.h" #include "fgeneric_timer.h" #include "fwdt.h" #include "fwdt_os.h" @@ -139,7 +140,7 @@ static void FFreeRTOSWdtQueueReceiveTask(void) for (;;) { xQueueReceive(xQueue, &xReceiveStructure, portMAX_DELAY); - u32 seconds = GenericTimerRead() / GenericTimerFrequecy(); + u32 seconds = GenericTimerRead(GENERIC_TIMER_ID0) / GenericTimerFrequecy(); vPrintf("FFreeRTOSWdtQueueReceiveTask run, count = %d, time seconds: %d\r\n", xReceiveStructure.count, seconds); } } @@ -152,7 +153,7 @@ static void FFreeRTOSWdtFeedTask(void *pvParameters) for (;;) { FFreeRTOSWdtControl(os_wdt_ctrl_p, FREERTOS_WDT_CTRL_KEEPALIVE, NULL); - u32 seconds = GenericTimerRead() / GenericTimerFrequecy(); + u32 seconds = GenericTimerRead(GENERIC_TIMER_ID0) / GenericTimerFrequecy(); vPrintf("FFreeRTOSWdtFeedTask run, time seconds: %d\r\n", seconds); vTaskDelay(WDT_FEED_PERIOD); } diff --git a/example/storage/fatfs/READEME.md b/example/storage/fatfs/READEME.md index 80e163dc909bf18c81d2374cf3826fe17ddd8dcf..9861487746796e080f01327f4ccf11b73f88a59d 100644 --- a/example/storage/fatfs/READEME.md +++ b/example/storage/fatfs/READEME.md @@ -34,6 +34,8 @@ - CONFIG_USE_LETTER_SHELL +>注意:初始化文件系统需要等待1分钟左右的时间,请在运行任务前将没有连接的介质选项关闭 + 本例子已经提供好具体的编译指令,以下进行介绍: - make 将目录下的工程进行编译 - make clean 将目录下的工程进行清理 @@ -116,3 +118,4 @@ bootelf -p 0x90100000 ![](./figures/test_5.png) ## 3. 如何解决问题 + \ No newline at end of file diff --git a/example/storage/fatfs/configs/e2000d_aarch32_eg_configs b/example/storage/fatfs/configs/e2000d_aarch32_eg_configs index d375620a211b04e93a61d0a7576dc4c473169dcb..cd6864b6d05e00dfff984ed9e5f845dacc9a244a 100644 --- a/example/storage/fatfs/configs/e2000d_aarch32_eg_configs +++ b/example/storage/fatfs/configs/e2000d_aarch32_eg_configs @@ -20,7 +20,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -83,18 +82,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -216,6 +226,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -226,7 +242,7 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_FATFS_0_1_4=y # -# FATFS Configuration (0.1.4) +# Fatfs configuration (0.1.4) # CONFIG_FATFS_RAM_DISK=y @@ -262,7 +278,7 @@ CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y CONFIG_FATFS_ALLOC_PREFER_MEMP=y CONFIG_FATFS_MEMP_SIZE=2 -# end of FATFS Configuration (0.1.4) +# end of Fatfs configuration (0.1.4) # CONFIG_USE_SFUD is not set # CONFIG_USE_SPIFFS is not set @@ -282,11 +298,11 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration CONFIG_USE_CHERRY_USB=y @@ -304,6 +320,8 @@ CONFIG_CHERRY_USB_HOST_MSC=y # CONFIG_CHERRY_USB_HOST_CDC is not set # CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/fatfs/configs/e2000d_aarch64_eg_configs b/example/storage/fatfs/configs/e2000d_aarch64_eg_configs index fd8feed2f5c57c64e1c406ab8f5a82819a19f266..96e0d78176e02110fadec279378a830b52de9874 100644 --- a/example/storage/fatfs/configs/e2000d_aarch64_eg_configs +++ b/example/storage/fatfs/configs/e2000d_aarch64_eg_configs @@ -20,7 +20,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -83,18 +82,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -212,6 +222,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -222,7 +238,7 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_FATFS_0_1_4=y # -# FATFS Configuration (0.1.4) +# Fatfs configuration (0.1.4) # CONFIG_FATFS_RAM_DISK=y @@ -258,7 +274,7 @@ CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y CONFIG_FATFS_ALLOC_PREFER_MEMP=y CONFIG_FATFS_MEMP_SIZE=2 -# end of FATFS Configuration (0.1.4) +# end of Fatfs configuration (0.1.4) # CONFIG_USE_SFUD is not set # CONFIG_USE_SPIFFS is not set @@ -278,11 +294,11 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration CONFIG_USE_CHERRY_USB=y @@ -300,6 +316,8 @@ CONFIG_CHERRY_USB_HOST_MSC=y # CONFIG_CHERRY_USB_HOST_CDC is not set # CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/fatfs/configs/e2000q_aarch32_eg_configs b/example/storage/fatfs/configs/e2000q_aarch32_eg_configs index 3b80c8c1bfca6b0d86e096f2a9035e7baa9e5c51..b466ea42e136b103aa07fd2ac8e23587f11e119c 100644 --- a/example/storage/fatfs/configs/e2000q_aarch32_eg_configs +++ b/example/storage/fatfs/configs/e2000q_aarch32_eg_configs @@ -20,7 +20,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -83,18 +82,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -216,6 +226,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -226,7 +242,7 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_FATFS_0_1_4=y # -# FATFS Configuration (0.1.4) +# Fatfs configuration (0.1.4) # CONFIG_FATFS_RAM_DISK=y @@ -262,7 +278,7 @@ CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y CONFIG_FATFS_ALLOC_PREFER_MEMP=y CONFIG_FATFS_MEMP_SIZE=2 -# end of FATFS Configuration (0.1.4) +# end of Fatfs configuration (0.1.4) # CONFIG_USE_SFUD is not set # CONFIG_USE_SPIFFS is not set @@ -282,11 +298,11 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration CONFIG_USE_CHERRY_USB=y @@ -304,6 +320,8 @@ CONFIG_CHERRY_USB_HOST_MSC=y # CONFIG_CHERRY_USB_HOST_CDC is not set # CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/fatfs/configs/e2000q_aarch64_eg_configs b/example/storage/fatfs/configs/e2000q_aarch64_eg_configs index d19240d1085e993d79e311719f4626f1dfccca69..3850937d1473e3bd7e9f3f82ddd52229b7737a48 100644 --- a/example/storage/fatfs/configs/e2000q_aarch64_eg_configs +++ b/example/storage/fatfs/configs/e2000q_aarch64_eg_configs @@ -20,7 +20,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -83,18 +82,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -212,6 +222,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -222,7 +238,7 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_FATFS_0_1_4=y # -# FATFS Configuration (0.1.4) +# Fatfs configuration (0.1.4) # CONFIG_FATFS_RAM_DISK=y @@ -258,7 +274,7 @@ CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y CONFIG_FATFS_ALLOC_PREFER_MEMP=y CONFIG_FATFS_MEMP_SIZE=2 -# end of FATFS Configuration (0.1.4) +# end of Fatfs configuration (0.1.4) # CONFIG_USE_SFUD is not set # CONFIG_USE_SPIFFS is not set @@ -278,11 +294,11 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration CONFIG_USE_CHERRY_USB=y @@ -300,6 +316,8 @@ CONFIG_CHERRY_USB_HOST_MSC=y # CONFIG_CHERRY_USB_HOST_CDC is not set # CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/fatfs/inc/usb_config.h b/example/storage/fatfs/inc/usb_config.h index 3a89de76f1fe88caa9f3b9abb257f548a962e81d..3cce59fdd809b0b3551651639bf4e8bd5ca9b069 100644 --- a/example/storage/fatfs/inc/usb_config.h +++ b/example/storage/fatfs/inc/usb_config.h @@ -107,7 +107,7 @@ void *usb_hc_malloc_align(size_t align, size_t size); /* ================ USB HOST Stack Configuration ================== */ -#define CONFIG_USBHOST_MAX_RHPORTS 1 +#define CONFIG_USBHOST_MAX_RHPORTS 2 #define CONFIG_USBHOST_MAX_EXTHUBS 2 #define CONFIG_USBHOST_MAX_EHPORTS 4 #define CONFIG_USBHOST_MAX_INTERFACES 6 @@ -120,7 +120,7 @@ void *usb_hc_malloc_align(size_t align, size_t size); #define CONFIG_USBHOST_PSC_PRIO 4 #endif #ifndef CONFIG_USBHOST_PSC_STACKSIZE - #define CONFIG_USBHOST_PSC_STACKSIZE 2048 + #define CONFIG_USBHOST_PSC_STACKSIZE 4096 #endif /* Ep0 max transfer buffer */ @@ -134,6 +134,11 @@ void *usb_hc_malloc_align(size_t align, size_t size); #define CONFIG_USBHOST_MSC_TIMEOUT 5000 #endif +/* do not try to enumrate one interface */ +#ifndef CONFIG_USBHOST_ENUM_FIRST_INTERFACE_ONLY + #define CONFIG_USBHOST_ENUM_FIRST_INTERFACE_ONLY +#endif + /* ================ USB Device Port Configuration ================*/ #define CONFIG_XHCI_PAGE_SIZE 4096U @@ -145,6 +150,7 @@ void *usb_hc_malloc_align(size_t align, size_t size); /* ================ XHCI Configuration ================ */ #define CONFIG_USBHOST_XHCI +#define CONFIG_USBHOST_XHCI_NUM 2 #ifdef __cplusplus } diff --git a/example/storage/fatfs/sdkconfig b/example/storage/fatfs/sdkconfig index d19240d1085e993d79e311719f4626f1dfccca69..3850937d1473e3bd7e9f3f82ddd52229b7737a48 100644 --- a/example/storage/fatfs/sdkconfig +++ b/example/storage/fatfs/sdkconfig @@ -20,7 +20,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -83,18 +82,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set CONFIG_LOG_EXTRA_INFO=y # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -212,6 +222,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -222,7 +238,7 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_FATFS_0_1_4=y # -# FATFS Configuration (0.1.4) +# Fatfs configuration (0.1.4) # CONFIG_FATFS_RAM_DISK=y @@ -258,7 +274,7 @@ CONFIG_FATFS_TIMEOUT_MS=10000 CONFIG_FATFS_PER_FILE_CACHE=y CONFIG_FATFS_ALLOC_PREFER_MEMP=y CONFIG_FATFS_MEMP_SIZE=2 -# end of FATFS Configuration (0.1.4) +# end of Fatfs configuration (0.1.4) # CONFIG_USE_SFUD is not set # CONFIG_USE_SPIFFS is not set @@ -278,11 +294,11 @@ CONFIG_USE_TLSF=y CONFIG_USE_SDMMC_CMD=y # -# SDMMC Configuration +# Sdmmc configuration # # CONFIG_SDMMC_USE_FSDMMC is not set CONFIG_SDMMC_USE_FSDIO=y -# end of SDMMC Configuration +# end of Sdmmc configuration CONFIG_USE_CHERRY_USB=y @@ -300,6 +316,8 @@ CONFIG_CHERRY_USB_HOST_MSC=y # CONFIG_CHERRY_USB_HOST_CDC is not set # CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set # end of CherryUSB Configuration + +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/fatfs/sdkconfig.h b/example/storage/fatfs/sdkconfig.h index 71b4e95f0c44e2c90045bd91781560bd968dff1b..1174b5fd70f0d9bdb3cee8377b44eef9aa205a53 100644 --- a/example/storage/fatfs/sdkconfig.h +++ b/example/storage/fatfs/sdkconfig.h @@ -19,7 +19,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -/* CONFIG_USE_SYS_TICK is not set */ /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -76,18 +75,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ #define CONFIG_LOG_EXTRA_INFO /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -185,6 +192,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -193,7 +205,7 @@ #define CONFIG_USE_BACKTRACE #define CONFIG_USE_FATFS_0_1_4 -/* FATFS Configuration (0.1.4) */ +/* Fatfs configuration (0.1.4) */ #define CONFIG_FATFS_RAM_DISK @@ -225,7 +237,7 @@ #define CONFIG_FATFS_PER_FILE_CACHE #define CONFIG_FATFS_ALLOC_PREFER_MEMP #define CONFIG_FATFS_MEMP_SIZE 2 -/* end of FATFS Configuration (0.1.4) */ +/* end of Fatfs configuration (0.1.4) */ /* CONFIG_USE_SFUD is not set */ /* CONFIG_USE_SPIFFS is not set */ /* CONFIG_USE_AMP is not set */ @@ -241,11 +253,11 @@ #define CONFIG_USE_TLSF #define CONFIG_USE_SDMMC_CMD -/* SDMMC Configuration */ +/* Sdmmc configuration */ /* CONFIG_SDMMC_USE_FSDMMC is not set */ #define CONFIG_SDMMC_USE_FSDIO -/* end of SDMMC Configuration */ +/* end of Sdmmc configuration */ #define CONFIG_USE_CHERRY_USB /* CherryUSB Configuration */ @@ -261,6 +273,7 @@ /* CONFIG_CHERRY_USB_HOST_CDC is not set */ /* CONFIG_CHERRY_USB_HOST_RNDIS_WIRELESS is not set */ /* end of CherryUSB Configuration */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/storage/qspi_spiffs/configs/d2000_aarch32_eg_configs b/example/storage/qspi_spiffs/configs/d2000_aarch32_eg_configs index 4c3f1c60876f0273cb6236ef544bb9b192cd8a10..f476107ff30431cf354759dcfde670ceb9497666 100644 --- a/example/storage/qspi_spiffs/configs/d2000_aarch32_eg_configs +++ b/example/storage/qspi_spiffs/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,14 +245,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -262,6 +278,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/configs/d2000_aarch64_eg_configs b/example/storage/qspi_spiffs/configs/d2000_aarch64_eg_configs index 71894494c7c66df45587c3f3cd2fcaceb4c86a71..ddde340d67449c3e8d7b64c759fbc3bb02fe4462 100644 --- a/example/storage/qspi_spiffs/configs/d2000_aarch64_eg_configs +++ b/example/storage/qspi_spiffs/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -225,14 +241,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -258,6 +274,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/configs/e2000d_aarch32_eg_configs b/example/storage/qspi_spiffs/configs/e2000d_aarch32_eg_configs index ff67e8c246c9c49041306b2452c0d6793e0e2bd9..634a1cfb760ed7a350b6288b27562a1e0046600d 100644 --- a/example/storage/qspi_spiffs/configs/e2000d_aarch32_eg_configs +++ b/example/storage/qspi_spiffs/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,14 +245,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -262,6 +278,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/configs/e2000d_aarch64_eg_configs b/example/storage/qspi_spiffs/configs/e2000d_aarch64_eg_configs index 661ad9896ceea2a7217a53e043290dce7b627b38..6df77d651abc9b00c7f46d8a0e034f638746dc55 100644 --- a/example/storage/qspi_spiffs/configs/e2000d_aarch64_eg_configs +++ b/example/storage/qspi_spiffs/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -225,14 +241,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -258,6 +274,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/configs/e2000q_aarch32_eg_configs b/example/storage/qspi_spiffs/configs/e2000q_aarch32_eg_configs index ee06279ad8b4d386da6be9399196ce32413147d4..44efcb7272d7e6cf74e4de6c77f68ad89369ea2f 100644 --- a/example/storage/qspi_spiffs/configs/e2000q_aarch32_eg_configs +++ b/example/storage/qspi_spiffs/configs/e2000q_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,14 +245,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -262,6 +278,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/configs/e2000q_aarch64_eg_configs b/example/storage/qspi_spiffs/configs/e2000q_aarch64_eg_configs index a2a70ee86273d7f758237a498afff0757a8667ac..75171c756aeb28a80eed5d64225377d9aeb086a1 100644 --- a/example/storage/qspi_spiffs/configs/e2000q_aarch64_eg_configs +++ b/example/storage/qspi_spiffs/configs/e2000q_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -225,14 +241,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -258,6 +274,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/configs/ft2004_aarch32_eg_configs b/example/storage/qspi_spiffs/configs/ft2004_aarch32_eg_configs index 32b1ff443be9e4b2bed7a02c93390ff873cc3e68..100da759eeb8dc41d7ece862a3dc08919c01f89d 100644 --- a/example/storage/qspi_spiffs/configs/ft2004_aarch32_eg_configs +++ b/example/storage/qspi_spiffs/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -218,6 +228,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,14 +245,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -262,6 +278,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/configs/ft2004_aarch64_eg_configs b/example/storage/qspi_spiffs/configs/ft2004_aarch64_eg_configs index fd1f8bf51ed352a670af9b84fa8592b2ab62a9d8..f32d8dd69e47af6b5e3047d4ef4ac43c35fbea38 100644 --- a/example/storage/qspi_spiffs/configs/ft2004_aarch64_eg_configs +++ b/example/storage/qspi_spiffs/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -225,14 +241,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -258,6 +274,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/sdkconfig b/example/storage/qspi_spiffs/sdkconfig index a2a70ee86273d7f758237a498afff0757a8667ac..75171c756aeb28a80eed5d64225377d9aeb086a1 100644 --- a/example/storage/qspi_spiffs/sdkconfig +++ b/example/storage/qspi_spiffs/sdkconfig @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -85,18 +84,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -214,6 +224,12 @@ CONFIG_FREERTOS_USE_QSPI=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -225,14 +241,14 @@ CONFIG_USE_BACKTRACE=y CONFIG_USE_SFUD=y # -# SFUD Configuration +# Sfud configuration # # CONFIG_SFUD_CTRL_FSPIM is not set CONFIG_SFUD_CTRL_FQSPI=y # CONFIG_SFUD_QSPI_READ_MODE_READ is not set # CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ=y -# end of SFUD Configuration +# end of Sfud configuration CONFIG_USE_SPIFFS=y @@ -258,6 +274,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/qspi_spiffs/sdkconfig.h b/example/storage/qspi_spiffs/sdkconfig.h index 1e977d356c4b877f8f3bd8a0217615427ff49850..5ff3bb9ce184e0fb824b569d9038eaa64668bac8 100644 --- a/example/storage/qspi_spiffs/sdkconfig.h +++ b/example/storage/qspi_spiffs/sdkconfig.h @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -76,18 +75,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -185,6 +192,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -194,14 +206,14 @@ /* CONFIG_USE_FATFS_0_1_4 is not set */ #define CONFIG_USE_SFUD -/* SFUD Configuration */ +/* Sfud configuration */ /* CONFIG_SFUD_CTRL_FSPIM is not set */ #define CONFIG_SFUD_CTRL_FQSPI /* CONFIG_SFUD_QSPI_READ_MODE_READ is not set */ /* CONFIG_SFUD_QSPI_READ_MODE_DUAL_READ is not set */ #define CONFIG_SFUD_QSPI_READ_MODE_QUAD_READ -/* end of SFUD Configuration */ +/* end of Sfud configuration */ #define CONFIG_USE_SPIFFS /* SPIFFS Configuration */ @@ -222,6 +234,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/storage/spim_spiffs/configs/e2000d_aarch32_eg_configs b/example/storage/spim_spiffs/configs/e2000d_aarch32_eg_configs index 669579a7b50c809e6e83cc265e5afd7175f1c03f..362e7c591477a28ae5cb8e1528fbd664eacf1fac 100644 --- a/example/storage/spim_spiffs/configs/e2000d_aarch32_eg_configs +++ b/example/storage/spim_spiffs/configs/e2000d_aarch32_eg_configs @@ -17,8 +17,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -69,6 +69,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -77,17 +78,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -209,6 +216,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -223,6 +236,8 @@ CONFIG_USE_SFUD=y # SFUD Configuration # CONFIG_SFUD_CTRL_FSPIM=y +CONFIG_SFUD_TRANS_MODE_POLL_FIFO=y +# CONFIG_SFUD_TRANS_MODE_INTRRUPT is not set # CONFIG_SFUD_CTRL_FQSPI is not set # end of SFUD Configuration @@ -250,6 +265,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/spim_spiffs/configs/e2000d_aarch64_eg_configs b/example/storage/spim_spiffs/configs/e2000d_aarch64_eg_configs index 86f59e21db46aa5ae4467657481d836de6ef73be..25a7ec5ba101e65030ebbb7352efa0ee9eaa1e42 100644 --- a/example/storage/spim_spiffs/configs/e2000d_aarch64_eg_configs +++ b/example/storage/spim_spiffs/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -86,17 +85,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -214,6 +219,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -257,6 +268,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/spim_spiffs/configs/e2000q_aarch32_eg_configs b/example/storage/spim_spiffs/configs/e2000q_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..ffdfde7ecd8ea0121295b27c5d82520da35997a0 --- /dev/null +++ b/example/storage/spim_spiffs/configs/e2000q_aarch32_eg_configs @@ -0,0 +1,299 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="e2000q_freertos_a32" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +CONFIG_USE_SPI=y +CONFIG_USE_FSPIM=y +CONFIG_USE_QSPI=y + +# +# Qspi Configuration +# +CONFIG_USE_FQSPI=y +# end of Qspi Configuration + +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +CONFIG_FREERTOS_USE_FSPIM=y +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +CONFIG_USE_SFUD=y + +# +# SFUD Configuration +# +CONFIG_SFUD_CTRL_FSPIM=y +CONFIG_SFUD_TRANS_MODE_POLL_FIFO=y +# CONFIG_SFUD_TRANS_MODE_INTRRUPT is not set +# CONFIG_SFUD_CTRL_FQSPI is not set +# end of SFUD Configuration + +CONFIG_USE_SPIFFS=y + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_ON_FSPIM_SFUD=y +# CONFIG_SPIFFS_ON_FQSPI_SFUD is not set +# end of SPIFFS Configuration + +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/storage/spim_spiffs/configs/e2000q_aarch64_eg_configs b/example/storage/spim_spiffs/configs/e2000q_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..034e7ca5626b1d5457da46ec6f5f4c6fca255f49 --- /dev/null +++ b/example/storage/spim_spiffs/configs/e2000q_aarch64_eg_configs @@ -0,0 +1,295 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="e2000q_freertos_a64" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +CONFIG_USE_SPI=y +CONFIG_USE_FSPIM=y +CONFIG_USE_QSPI=y + +# +# Qspi Configuration +# +CONFIG_USE_FQSPI=y +# end of Qspi Configuration + +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +CONFIG_FREERTOS_USE_FSPIM=y +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +CONFIG_USE_SFUD=y + +# +# SFUD Configuration +# +CONFIG_SFUD_CTRL_FSPIM=y +CONFIG_SFUD_TRANS_MODE_POLL_FIFO=y +# CONFIG_SFUD_TRANS_MODE_INTRRUPT is not set +# CONFIG_SFUD_CTRL_FQSPI is not set +# end of SFUD Configuration + +CONFIG_USE_SPIFFS=y + +# +# SPIFFS Configuration +# +CONFIG_SPIFFS_ON_FSPIM_SFUD=y +# CONFIG_SPIFFS_ON_FQSPI_SFUD is not set +# end of SPIFFS Configuration + +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +# CONFIG_USE_TLSF is not set +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/storage/spim_spiffs/sdkconfig b/example/storage/spim_spiffs/sdkconfig index 86f59e21db46aa5ae4467657481d836de6ef73be..034e7ca5626b1d5457da46ec6f5f4c6fca255f49 100644 --- a/example/storage/spim_spiffs/sdkconfig +++ b/example/storage/spim_spiffs/sdkconfig @@ -2,7 +2,7 @@ # # Freertos Configuration # -CONFIG_TARGET_NAME="e2000d_freertos_a64" +CONFIG_TARGET_NAME="e2000q_freertos_a64" # end of Freertos Configuration # @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -27,8 +26,8 @@ CONFIG_USE_SYS_TICK=y # # CONFIG_TARGET_F2000_4 is not set # CONFIG_TARGET_D2000 is not set -# CONFIG_TARGET_E2000Q is not set -CONFIG_TARGET_E2000D=y +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set # CONFIG_TARGET_E2000S is not set CONFIG_TARGET_E2000=y CONFIG_DEFAULT_DEBUG_PRINT_UART1=y @@ -86,17 +85,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -214,6 +219,12 @@ CONFIG_FREERTOS_USE_FSPIM=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -254,9 +265,10 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set # end of Letter Shell Configuration -CONFIG_USE_TLSF=y +# CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/storage/spim_spiffs/sdkconfig.h b/example/storage/spim_spiffs/sdkconfig.h index e839ff185a6fd6f1dbe3857c94f256d5b13a3e8e..a9c59fe40e267ae493ea0f9e0bb71f01516d9622 100644 --- a/example/storage/spim_spiffs/sdkconfig.h +++ b/example/storage/spim_spiffs/sdkconfig.h @@ -3,7 +3,7 @@ /* Freertos Configuration */ -#define CONFIG_TARGET_NAME "e2000d_freertos_a64" +#define CONFIG_TARGET_NAME "e2000q_freertos_a64" /* end of Freertos Configuration */ /* Standalone Setting */ @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -25,8 +24,8 @@ /* CONFIG_TARGET_F2000_4 is not set */ /* CONFIG_TARGET_D2000 is not set */ -/* CONFIG_TARGET_E2000Q is not set */ -#define CONFIG_TARGET_E2000D +#define CONFIG_TARGET_E2000Q +/* CONFIG_TARGET_E2000D is not set */ /* CONFIG_TARGET_E2000S is not set */ #define CONFIG_TARGET_E2000 #define CONFIG_DEFAULT_DEBUG_PRINT_UART1 @@ -77,17 +76,21 @@ /* Building Option */ +/* SDK common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ +/* CONFIG_LOG_EXTRA_INFO is not set */ +/* CONFIG_LOG_DISPALY_CORE_NUM is not set */ +/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ #define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG #define CONFIG_INTERRUPT_ROLE_MASTER /* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ -/* CONFIG_LOG_EXTRA_INFO is not set */ -/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +/* end of SDK common configuration */ /* Linker Options */ @@ -185,6 +188,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -218,9 +226,10 @@ /* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */ /* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */ /* end of Letter Shell Configuration */ -#define CONFIG_USE_TLSF +/* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/system/amp/openamp/core0/configs/d2000_aarch32_eg_configs b/example/system/amp/openamp/core0/configs/d2000_aarch32_eg_configs index 17396a47a64efbdcdf5bc98215eb488f579ac1bf..b00697e2fbd7ca60e2b5dcea35d3499a5bbd3b44 100644 --- a/example/system/amp/openamp/core0/configs/d2000_aarch32_eg_configs +++ b/example/system/amp/openamp/core0/configs/d2000_aarch32_eg_configs @@ -35,7 +35,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -228,6 +238,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -277,6 +293,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/amp/openamp/core0/configs/d2000_aarch64_eg_configs b/example/system/amp/openamp/core0/configs/d2000_aarch64_eg_configs index 6ffb4a584d4a2699ee5698822cfffb9bda10411c..4237363efd04f3f7917d2b9800875e963297ba88 100644 --- a/example/system/amp/openamp/core0/configs/d2000_aarch64_eg_configs +++ b/example/system/amp/openamp/core0/configs/d2000_aarch64_eg_configs @@ -35,7 +35,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -224,6 +234,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -273,6 +289,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/amp/openamp/core0/configs/e2000d_aarch32_eg_configs b/example/system/amp/openamp/core0/configs/e2000d_aarch32_eg_configs index 4084f34ea8496a616d934a4587f09024d86793ad..464fb7d8933f7942125dc087aa81f7ac40d0d389 100644 --- a/example/system/amp/openamp/core0/configs/e2000d_aarch32_eg_configs +++ b/example/system/amp/openamp/core0/configs/e2000d_aarch32_eg_configs @@ -34,7 +34,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration # # Linker Options @@ -228,6 +232,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -277,6 +287,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/amp/openamp/core0/configs/e2000d_aarch64_eg_configs b/example/system/amp/openamp/core0/configs/e2000d_aarch64_eg_configs index 9263e0a7beb14e6e5817d554ffd607e7e9317089..61eb58bf49fa000460a471ad5b110bea9d1f5350 100644 --- a/example/system/amp/openamp/core0/configs/e2000d_aarch64_eg_configs +++ b/example/system/amp/openamp/core0/configs/e2000d_aarch64_eg_configs @@ -34,7 +34,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration # # Linker Options @@ -224,6 +228,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -273,6 +283,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/amp/openamp/core0/configs/e2000q_aarch32_eg_configs b/example/system/amp/openamp/core0/configs/e2000q_aarch32_eg_configs index 6744ef564125c1d588f58434aaff1c6c3bb19850..7b637015709884398b34728616708d0beeb2cc5f 100644 --- a/example/system/amp/openamp/core0/configs/e2000q_aarch32_eg_configs +++ b/example/system/amp/openamp/core0/configs/e2000q_aarch32_eg_configs @@ -34,7 +34,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set CONFIG_LOG_DISPALY_CORE_NUM=y # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration # # Linker Options @@ -228,6 +232,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -277,6 +287,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/amp/openamp/core0/configs/e2000q_aarch64_eg_configs b/example/system/amp/openamp/core0/configs/e2000q_aarch64_eg_configs index f1a80c9613ed2adc74ac0136cf4026782b695f08..fe05e723a99b08d72a7e285928ef92b3134606cb 100644 --- a/example/system/amp/openamp/core0/configs/e2000q_aarch64_eg_configs +++ b/example/system/amp/openamp/core0/configs/e2000q_aarch64_eg_configs @@ -34,7 +34,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set CONFIG_LOG_DISPALY_CORE_NUM=y # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration # # Linker Options @@ -224,6 +228,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -273,6 +283,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/amp/openamp/core0/configs/ft2004_aarch32_eg_configs b/example/system/amp/openamp/core0/configs/ft2004_aarch32_eg_configs index b5a1472691c661c7388f7670ce79b0a5e33b089c..a131766eb1253af56972ff777461943b1136619c 100644 --- a/example/system/amp/openamp/core0/configs/ft2004_aarch32_eg_configs +++ b/example/system/amp/openamp/core0/configs/ft2004_aarch32_eg_configs @@ -35,7 +35,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -228,6 +238,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -277,6 +293,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/amp/openamp/core0/configs/ft2004_aarch64_eg_configs b/example/system/amp/openamp/core0/configs/ft2004_aarch64_eg_configs index b01987284371e7454d30a781e6a13233ef442d8c..57c43cf6493bc06f52fce519400e0754a8db5a78 100644 --- a/example/system/amp/openamp/core0/configs/ft2004_aarch64_eg_configs +++ b/example/system/amp/openamp/core0/configs/ft2004_aarch64_eg_configs @@ -35,7 +35,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -95,18 +94,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# CONFIG_LOG_VERBOS=y # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -224,6 +234,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -273,6 +289,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/amp/openamp/core0/rpmsg-echo_os.c b/example/system/amp/openamp/core0/rpmsg-echo_os.c index 11cf85b05f3a5beb0f5aae3d7bc7fa05e9da1c88..8831f43ba0a9966c0ef36361f22594b8065a566a 100644 --- a/example/system/amp/openamp/core0/rpmsg-echo_os.c +++ b/example/system/amp/openamp/core0/rpmsg-echo_os.c @@ -161,7 +161,7 @@ int rpmsg_echo(int argc, char *argv[]) } else { #ifdef CONFIG_DEBUG_CODE LPERROR("CONFIG_TARGET_CPU_ID is %x \r\n",CONFIG_TARGET_CPU_ID); - PsciCpuOn(1< 配置成e2000q,对于其它平台,使用对于的默认配置,如D2000 `make load_d2000_aarch32` + +- 选择目标平台 + +``` +make load_e2000q_aarch32 +``` + +- 选择例程需要的配置 + +``` +make menuconfig +``` + +- 进行编译 + +``` +make +``` + +- 将编译出的镜像放置到tftp目录下 + +``` +make boot +``` + +#### 2.3.2 下载过程 + +- host侧设置重启host侧tftp服务器 + +``` +sudo service tftpd-hpa restart +``` + +- 开发板侧使用bootelf命令跳转 + +``` +setenv ipaddr 192.168.4.20 +setenv serverip 192.168.4.50 +setenv gatewayip 192.168.4.1 +tftpboot 0x90100000 freertos.elf +bootelf -p 0x90100000 +``` + +### 2.4 输出与实验现象 + +### 2.4.1 进行原子操作测试 + +- 创建原子操作测试任务 +``` +$ atomic cre +``` + +- 删除原子操作测试任务 +``` +$ atomic del +``` + +## 3. 如何解决问题 diff --git a/example/system/atomic/configs/d2000_aarch32_eg_configs b/example/system/atomic/configs/d2000_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..10c586454b7e2b69ea793caac1e66241af104c26 --- /dev/null +++ b/example/system/atomic/configs/d2000_aarch32_eg_configs @@ -0,0 +1,276 @@ + +# +# Project Configuration +# +CONFIG_TARGET_NAME="d2000_freertos_a32" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set +# end of Project Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_L3CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +CONFIG_TARGET_D2000=y +# CONFIG_TARGET_E2000Q is not set +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_INFO=y +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +# CONFIG_OUTPUT_BINARY is not set +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/configs/d2000_aarch64_eg_configs b/example/system/atomic/configs/d2000_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..634a0a468899b441fb59839d94f9f952ccccedd7 --- /dev/null +++ b/example/system/atomic/configs/d2000_aarch64_eg_configs @@ -0,0 +1,276 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="d2000_freertos_a64" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_L3CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_FPEN is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +CONFIG_TARGET_D2000=y +# CONFIG_TARGET_E2000Q is not set +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# Sdk common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_INFO=y +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +# CONFIG_OUTPUT_BINARY is not set +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/configs/e2000d_aarch32_eg_configs b/example/system/atomic/configs/e2000d_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..08c4aa6496dbb8f66715d217838e026b0f8f961b --- /dev/null +++ b/example/system/atomic/configs/e2000d_aarch32_eg_configs @@ -0,0 +1,279 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="e2000d_freertos_a32" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# Sdk common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/configs/e2000d_aarch64_eg_configs b/example/system/atomic/configs/e2000d_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..ab929dcf2036326c322d0cc4c6b88daebf65c1bf --- /dev/null +++ b/example/system/atomic/configs/e2000d_aarch64_eg_configs @@ -0,0 +1,276 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="e2000d_freertos_a64" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_FPEN is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +CONFIG_TARGET_E2000D=y +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# Sdk common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/configs/e2000q_aarch32_eg_configs b/example/system/atomic/configs/e2000q_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..bbbdcc525935b9cc912affedfd6a13e98a655125 --- /dev/null +++ b/example/system/atomic/configs/e2000q_aarch32_eg_configs @@ -0,0 +1,279 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="e2000q_freertos_a32" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# Sdk common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/configs/e2000q_aarch64_eg_configs b/example/system/atomic/configs/e2000q_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..eed614413a7a9c86f2f68fc3b5fc645ee532dcea --- /dev/null +++ b/example/system/atomic/configs/e2000q_aarch64_eg_configs @@ -0,0 +1,276 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="e2000q_freertos_a64" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_FPEN is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +# CONFIG_TARGET_D2000 is not set +CONFIG_TARGET_E2000Q=y +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_TARGET_E2000=y +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# Sdk common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +# CONFIG_LOG_INFO is not set +# CONFIG_LOG_WARN is not set +CONFIG_LOG_ERROR=y +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=2 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +CONFIG_OUTPUT_BINARY=y +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/configs/ft2004_aarch32_eg_configs b/example/system/atomic/configs/ft2004_aarch32_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..a47ca8e33bf96b7867351133d4b43a4fd95cf66f --- /dev/null +++ b/example/system/atomic/configs/ft2004_aarch32_eg_configs @@ -0,0 +1,276 @@ + +# +# Project Configuration +# +CONFIG_TARGET_NAME="ft2004_freertos_a32" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set +# end of Project Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +CONFIG_TARGET_ARMV8_AARCH32=y +# CONFIG_TARGET_ARMV8_AARCH64 is not set +CONFIG_USE_CACHE=y +CONFIG_USE_L3CACHE=y +CONFIG_USE_MMU=y +CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +CONFIG_TARGET_F2000_4=y +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# SDK common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_INFO=y +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration + +# +# Linker Options +# +CONFIG_AARCH32_RAM_LD=y +# CONFIG_AARCH64_RAM_LD is not set +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_SVC_STACK_SIZE=0x1000 +CONFIG_SYS_STACK_SIZE=0x1000 +CONFIG_IRQ_STACK_SIZE=0x1000 +CONFIG_ABORT_STACK_SIZE=0x1000 +CONFIG_FIQ_STACK_SIZE=0x1000 +CONFIG_UNDEF_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +# CONFIG_OUTPUT_BINARY is not set +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/configs/ft2004_aarch64_eg_configs b/example/system/atomic/configs/ft2004_aarch64_eg_configs new file mode 100644 index 0000000000000000000000000000000000000000..5f75e26419243a3dc8a27cbfcdef27480bf07698 --- /dev/null +++ b/example/system/atomic/configs/ft2004_aarch64_eg_configs @@ -0,0 +1,276 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="ft2004_freertos_a64" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_L3CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_FPEN is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +CONFIG_TARGET_F2000_4=y +# CONFIG_TARGET_D2000 is not set +# CONFIG_TARGET_E2000Q is not set +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# Sdk common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_INFO=y +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +# CONFIG_OUTPUT_BINARY is not set +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/inc/atomic_example.h b/example/system/atomic/inc/atomic_example.h new file mode 100644 index 0000000000000000000000000000000000000000..f430b3a6da2c9df0941e892884ae433f7e25d2ca --- /dev/null +++ b/example/system/atomic/inc/atomic_example.h @@ -0,0 +1,42 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: atomic_example.h + * Date: 2022-06-17 10:42:40 + * LastEditTime: 2022-06-17 10:42:40 + * Description: This file is for task function define + * + * Modify History: + * Ver Who Date Changes + * ----- ------ -------- -------------------------------------- + * 1.0 wangxiaodong 2023/02/25 first commit + */ + + +#ifndef ATOMIC_EXAMPLE_H +#define ATOMIC_EXAMPLE_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* atomic task */ +void CreateAtomicTasks(void); +void DeleteAtomicTasks(void); + +#ifdef __cplusplus +} +#endif + +#endif // ! \ No newline at end of file diff --git a/example/system/atomic/main.c b/example/system/atomic/main.c new file mode 100644 index 0000000000000000000000000000000000000000..0da4caf9efd25eaa401935bf312059e09bae3aee --- /dev/null +++ b/example/system/atomic/main.c @@ -0,0 +1,51 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: main.c + * Date: 2022-02-24 13:42:19 + * LastEditTime: 2022-03-21 17:02:53 + * Description:  This file is for atomic example main entry. + * + * Modify History: + * Ver   Who         Date         Changes + * ----- ------      --------    -------------------------------------- + * 1.0 wangxiaodong 2023/6/28 init commit + */ +#include +#include +#include "FreeRTOS.h" +#include "task.h" +#include "ftypes.h" +#include "shell.h" +#include "shell_port.h" +#include "sdkconfig.h" + +int main() +{ + printf("Atomic test func, FT Date: %s, Time: %s\n", __DATE__, __TIME__); + BaseType_t xReturn = pdPASS; + + xReturn = LSUserShellTask(); + if (xReturn != pdPASS) + { + goto FAIL_EXIT; + } + + vTaskStartScheduler(); /* 启动任务,开启调度 */ + + while (1); /* 正常不会执行到这里 */ + +FAIL_EXIT: + printf("Failed,the xReturn value is 0x%x. \r\n", xReturn); + return 0; +} \ No newline at end of file diff --git a/example/system/atomic/makefile b/example/system/atomic/makefile new file mode 100644 index 0000000000000000000000000000000000000000..baf1a3fe8785c93b1907e67b6d8dc31f0712b4e7 --- /dev/null +++ b/example/system/atomic/makefile @@ -0,0 +1,30 @@ +# 指定工程项目根目录为当前(只能指定一个目录) +export PROJECT_DIR ?= $(shell pwd) +export KCONFIG_DIR ?= $(PROJECT_DIR) +# 用户添加的源文件夹和头文件夹(可以指定多个) +export USR_SRC_DIR ?= $(PROJECT_DIR) \ + $(PROJECT_DIR)/src +export USR_INC_DIR ?= $(PROJECT_DIR) \ + $(PROJECT_DIR)/inc + +# 用户定义的编译目标文件上传路径 +ifeq ($(OS),Windows_NT) +USR_BOOT_DIR ?= /d/tftboot +else +USR_BOOT_DIR ?= /mnt/d/tftboot +endif + +# 设置启动镜像名 +BOOT_IMG_NAME ?= freertos + +# 指定编译freertos项目使用的makefile +include $(FREERTOS_SDK_ROOT)/make/build_freertos.mk + +# 完成编译 +boot: + make -j + @cp ./$(CONFIG_TARGET_NAME).elf $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).elf +ifdef CONFIG_OUTPUT_BINARY + @cp ./$(CONFIG_TARGET_NAME).bin $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).bin +endif + @ls $(USR_BOOT_DIR)/$(BOOT_IMG_NAME).* -l \ No newline at end of file diff --git a/example/system/atomic/sdkconfig b/example/system/atomic/sdkconfig new file mode 100644 index 0000000000000000000000000000000000000000..634a0a468899b441fb59839d94f9f952ccccedd7 --- /dev/null +++ b/example/system/atomic/sdkconfig @@ -0,0 +1,276 @@ + +# +# Freertos Configuration +# +CONFIG_TARGET_NAME="d2000_freertos_a64" +# end of Freertos Configuration + +# +# Standalone Setting +# +CONFIG_USE_FREERTOS=y + +# +# Arch Configuration +# +# CONFIG_TARGET_ARMV8_AARCH32 is not set +CONFIG_TARGET_ARMV8_AARCH64=y +CONFIG_USE_CACHE=y +CONFIG_USE_L3CACHE=y +CONFIG_USE_MMU=y +# CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_FPEN is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set +# end of Arch Configuration + +# +# Board Configuration +# +# CONFIG_TARGET_F2000_4 is not set +CONFIG_TARGET_D2000=y +# CONFIG_TARGET_E2000Q is not set +# CONFIG_TARGET_E2000D is not set +# CONFIG_TARGET_E2000S is not set +CONFIG_DEFAULT_DEBUG_PRINT_UART1=y +# CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set +# CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set +# end of Board Configuration + +# +# Components Configuration +# +# CONFIG_USE_SPI is not set +# CONFIG_USE_QSPI is not set +CONFIG_USE_GIC=y +CONFIG_ENABLE_GICV3=y +CONFIG_USE_SERIAL=y + +# +# Usart Configuration +# +CONFIG_ENABLE_Pl011_UART=y +# end of Usart Configuration + +# CONFIG_USE_GPIO is not set +# CONFIG_USE_ETH is not set +# CONFIG_USE_CAN is not set +# CONFIG_USE_I2C is not set +# CONFIG_USE_TIMER is not set +# CONFIG_USE_MIO is not set +# CONFIG_USE_SDMMC is not set +# CONFIG_USE_PCIE is not set +# CONFIG_USE_WDT is not set +# CONFIG_USE_DMA is not set +# CONFIG_USE_NAND is not set +# CONFIG_USE_RTC is not set +# CONFIG_USE_SATA is not set +# CONFIG_USE_USB is not set +# CONFIG_USE_ADC is not set +# CONFIG_USE_PWM is not set +# CONFIG_USE_IPC is not set +# CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set +# end of Components Configuration + +CONFIG_USE_NEW_LIBC=y +# end of Standalone Setting + +# +# Building Option +# + +# +# Sdk common configuration +# +# CONFIG_LOG_VERBOS is not set +# CONFIG_LOG_DEBUG is not set +CONFIG_LOG_INFO=y +# CONFIG_LOG_WARN is not set +# CONFIG_LOG_ERROR is not set +# CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration + +# +# Linker Options +# +# CONFIG_AARCH32_RAM_LD is not set +CONFIG_AARCH64_RAM_LD=y +# CONFIG_USER_DEFINED_LD is not set +CONFIG_LINK_SCRIPT_ROM=y +CONFIG_ROM_START_UP_ADDR=0x80100000 +CONFIG_ROM_SIZE_MB=1 +CONFIG_LINK_SCRIPT_RAM=y +CONFIG_RAM_START_UP_ADDR=0x81000000 +CONFIG_RAM_SIZE_MB=64 +CONFIG_HEAP_SIZE=1 +CONFIG_STACK_SIZE=0x100000 +CONFIG_FPU_STACK_SIZE=0x1000 +# end of Linker Options + +# +# Compiler Options +# + +# +# Cross-Compiler Setting +# +CONFIG_GCC_OPTIMIZE_LEVEL=0 +# CONFIG_USE_EXT_COMPILER is not set +# CONFIG_USE_KLIN_SYS is not set +# end of Cross-Compiler Setting + +# CONFIG_OUTPUT_BINARY is not set +# end of Compiler Options +# end of Building Option + +# +# Component Configuration +# + +# +# Freertos Uart Drivers +# +CONFIG_FREERTOS_USE_UART=y +# end of Freertos Uart Drivers + +# +# Freertos Pwm Drivers +# +# CONFIG_FREERTOS_USE_PWM is not set +# end of Freertos Pwm Drivers + +# +# Freertos Qspi Drivers +# +# CONFIG_FREERTOS_USE_QSPI is not set +# end of Freertos Qspi Drivers + +# +# Freertos Wdt Drivers +# +# CONFIG_FREERTOS_USE_WDT is not set +# end of Freertos Wdt Drivers + +# +# Freertos Eth Drivers +# +# CONFIG_FREERTOS_USE_XMAC is not set +# CONFIG_FREERTOS_USE_GMAC is not set +# end of Freertos Eth Drivers + +# +# Freertos Gpio Drivers +# +# CONFIG_FREERTOS_USE_GPIO is not set +# end of Freertos Gpio Drivers + +# +# Freertos Spim Drivers +# +# CONFIG_FREERTOS_USE_FSPIM is not set +# end of Freertos Spim Drivers + +# +# Freertos DMA Drivers +# +# CONFIG_FREERTOS_USE_FDDMA is not set +# CONFIG_FREERTOS_USE_FGDMA is not set +# end of Freertos DMA Drivers + +# +# Freertos Adc Drivers +# +# CONFIG_FREERTOS_USE_ADC is not set +# end of Freertos Adc Drivers + +# +# Freertos Can Drivers +# +# CONFIG_FREERTOS_USE_CAN is not set +# end of Freertos Can Drivers + +# +# Freertos I2c Drivers +# +# CONFIG_FREERTOS_USE_I2C is not set +# end of Freertos I2c Drivers + +# +# Freertos Mio Drivers +# +# CONFIG_FREERTOS_USE_MIO is not set +# end of Freertos Mio Drivers + +# +# Freertos Timer Drivers +# +# CONFIG_FREERTOS_USE_TIMER is not set +# end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers +# end of Component Configuration + +# +# Third-Party Configuration +# +# CONFIG_USE_LWIP is not set +CONFIG_USE_BACKTRACE=y +# CONFIG_USE_FATFS_0_1_4 is not set +# CONFIG_USE_SFUD is not set +# CONFIG_USE_SPIFFS is not set +# CONFIG_USE_AMP is not set +CONFIG_USE_LETTER_SHELL=y + +# +# Letter Shell Configuration +# +CONFIG_LS_PL011_UART=y +CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set +# CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set +# end of Letter Shell Configuration + +CONFIG_USE_TLSF=y +# CONFIG_USE_SDMMC_CMD is not set +# CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set +# end of Third-Party Configuration + +# +# Kernel Configuration +# +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_MAX_PRIORITIES=32 +CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES=13 +CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES=11 +CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=1 +CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE=1024 +CONFIG_FREERTOS_MAX_TASK_NAME_LEN=32 +CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 +CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 +CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 +CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS=y +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS=y +# CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set +CONFIG_FREERTOS_TOTAL_HEAP_SIZE=10240 +CONFIG_FREERTOS_TASK_FPU_SUPPORT=1 +# end of Kernel Configuration diff --git a/example/system/atomic/sdkconfig.h b/example/system/atomic/sdkconfig.h new file mode 100644 index 0000000000000000000000000000000000000000..ca2e88bec5d423587e9af52056f2121a3fa6a1db --- /dev/null +++ b/example/system/atomic/sdkconfig.h @@ -0,0 +1,243 @@ +#ifndef SDK_CONFIG_H__ +#define SDK_CONFIG_H__ + +/* Freertos Configuration */ + +#define CONFIG_TARGET_NAME "d2000_freertos_a64" +/* end of Freertos Configuration */ + +/* Standalone Setting */ + +#define CONFIG_USE_FREERTOS + +/* Arch Configuration */ + +/* CONFIG_TARGET_ARMV8_AARCH32 is not set */ +#define CONFIG_TARGET_ARMV8_AARCH64 +#define CONFIG_USE_CACHE +#define CONFIG_USE_L3CACHE +#define CONFIG_USE_MMU +/* CONFIG_MMU_DEBUG_PRINTS is not set */ +/* CONFIG_FPEN is not set */ +/* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ +/* end of Arch Configuration */ + +/* Board Configuration */ + +/* CONFIG_TARGET_F2000_4 is not set */ +#define CONFIG_TARGET_D2000 +/* CONFIG_TARGET_E2000Q is not set */ +/* CONFIG_TARGET_E2000D is not set */ +/* CONFIG_TARGET_E2000S is not set */ +#define CONFIG_DEFAULT_DEBUG_PRINT_UART1 +/* CONFIG_DEFAULT_DEBUG_PRINT_UART0 is not set */ +/* CONFIG_DEFAULT_DEBUG_PRINT_UART2 is not set */ +/* end of Board Configuration */ + +/* Components Configuration */ + +/* CONFIG_USE_SPI is not set */ +/* CONFIG_USE_QSPI is not set */ +#define CONFIG_USE_GIC +#define CONFIG_ENABLE_GICV3 +#define CONFIG_USE_SERIAL + +/* Usart Configuration */ + +#define CONFIG_ENABLE_Pl011_UART +/* end of Usart Configuration */ +/* CONFIG_USE_GPIO is not set */ +/* CONFIG_USE_ETH is not set */ +/* CONFIG_USE_CAN is not set */ +/* CONFIG_USE_I2C is not set */ +/* CONFIG_USE_TIMER is not set */ +/* CONFIG_USE_MIO is not set */ +/* CONFIG_USE_SDMMC is not set */ +/* CONFIG_USE_PCIE is not set */ +/* CONFIG_USE_WDT is not set */ +/* CONFIG_USE_DMA is not set */ +/* CONFIG_USE_NAND is not set */ +/* CONFIG_USE_RTC is not set */ +/* CONFIG_USE_SATA is not set */ +/* CONFIG_USE_USB is not set */ +/* CONFIG_USE_ADC is not set */ +/* CONFIG_USE_PWM is not set */ +/* CONFIG_USE_IPC is not set */ +/* CONFIG_USE_MEDIA is not set */ +/* CONFIG_USE_SCMI_MHU is not set */ +/* end of Components Configuration */ +#define CONFIG_USE_NEW_LIBC +/* end of Standalone Setting */ + +/* Building Option */ + +/* Sdk common configuration */ + +/* CONFIG_LOG_VERBOS is not set */ +/* CONFIG_LOG_DEBUG is not set */ +#define CONFIG_LOG_INFO +/* CONFIG_LOG_WARN is not set */ +/* CONFIG_LOG_ERROR is not set */ +/* CONFIG_LOG_NONE is not set */ +/* CONFIG_LOG_EXTRA_INFO is not set */ +/* CONFIG_LOG_DISPALY_CORE_NUM is not set */ +/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ + +/* Linker Options */ + +/* CONFIG_AARCH32_RAM_LD is not set */ +#define CONFIG_AARCH64_RAM_LD +/* CONFIG_USER_DEFINED_LD is not set */ +#define CONFIG_LINK_SCRIPT_ROM +#define CONFIG_ROM_START_UP_ADDR 0x80100000 +#define CONFIG_ROM_SIZE_MB 1 +#define CONFIG_LINK_SCRIPT_RAM +#define CONFIG_RAM_START_UP_ADDR 0x81000000 +#define CONFIG_RAM_SIZE_MB 64 +#define CONFIG_HEAP_SIZE 1 +#define CONFIG_STACK_SIZE 0x100000 +#define CONFIG_FPU_STACK_SIZE 0x1000 +/* end of Linker Options */ + +/* Compiler Options */ + +/* Cross-Compiler Setting */ + +#define CONFIG_GCC_OPTIMIZE_LEVEL 0 +/* CONFIG_USE_EXT_COMPILER is not set */ +/* CONFIG_USE_KLIN_SYS is not set */ +/* end of Cross-Compiler Setting */ +/* CONFIG_OUTPUT_BINARY is not set */ +/* end of Compiler Options */ +/* end of Building Option */ + +/* Component Configuration */ + +/* Freertos Uart Drivers */ + +#define CONFIG_FREERTOS_USE_UART +/* end of Freertos Uart Drivers */ + +/* Freertos Pwm Drivers */ + +/* CONFIG_FREERTOS_USE_PWM is not set */ +/* end of Freertos Pwm Drivers */ + +/* Freertos Qspi Drivers */ + +/* CONFIG_FREERTOS_USE_QSPI is not set */ +/* end of Freertos Qspi Drivers */ + +/* Freertos Wdt Drivers */ + +/* CONFIG_FREERTOS_USE_WDT is not set */ +/* end of Freertos Wdt Drivers */ + +/* Freertos Eth Drivers */ + +/* CONFIG_FREERTOS_USE_XMAC is not set */ +/* CONFIG_FREERTOS_USE_GMAC is not set */ +/* end of Freertos Eth Drivers */ + +/* Freertos Gpio Drivers */ + +/* CONFIG_FREERTOS_USE_GPIO is not set */ +/* end of Freertos Gpio Drivers */ + +/* Freertos Spim Drivers */ + +/* CONFIG_FREERTOS_USE_FSPIM is not set */ +/* end of Freertos Spim Drivers */ + +/* Freertos DMA Drivers */ + +/* CONFIG_FREERTOS_USE_FDDMA is not set */ +/* CONFIG_FREERTOS_USE_FGDMA is not set */ +/* end of Freertos DMA Drivers */ + +/* Freertos Adc Drivers */ + +/* CONFIG_FREERTOS_USE_ADC is not set */ +/* end of Freertos Adc Drivers */ + +/* Freertos Can Drivers */ + +/* CONFIG_FREERTOS_USE_CAN is not set */ +/* end of Freertos Can Drivers */ + +/* Freertos I2c Drivers */ + +/* CONFIG_FREERTOS_USE_I2C is not set */ +/* end of Freertos I2c Drivers */ + +/* Freertos Mio Drivers */ + +/* CONFIG_FREERTOS_USE_MIO is not set */ +/* end of Freertos Mio Drivers */ + +/* Freertos Timer Drivers */ + +/* CONFIG_FREERTOS_USE_TIMER is not set */ +/* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ +/* end of Component Configuration */ + +/* Third-Party Configuration */ + +/* CONFIG_USE_LWIP is not set */ +#define CONFIG_USE_BACKTRACE +/* CONFIG_USE_FATFS_0_1_4 is not set */ +/* CONFIG_USE_SFUD is not set */ +/* CONFIG_USE_SPIFFS is not set */ +/* CONFIG_USE_AMP is not set */ +#define CONFIG_USE_LETTER_SHELL + +/* Letter Shell Configuration */ + +#define CONFIG_LS_PL011_UART +#define CONFIG_DEFAULT_LETTER_SHELL_USE_UART1 +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART0 is not set */ +/* CONFIG_DEFAULT_LETTER_SHELL_USE_UART2 is not set */ +/* end of Letter Shell Configuration */ +#define CONFIG_USE_TLSF +/* CONFIG_USE_SDMMC_CMD is not set */ +/* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ +/* end of Third-Party Configuration */ + +/* Kernel Configuration */ + +#define CONFIG_FREERTOS_OPTIMIZED_SCHEDULER +#define CONFIG_FREERTOS_HZ 1000 +#define CONFIG_FREERTOS_MAX_PRIORITIES 32 +#define CONFIG_FREERTOS_KERNEL_INTERRUPT_PRIORITIES 13 +#define CONFIG_FREERTOS_MAX_API_CALL_INTERRUPT_PRIORITIES 11 +#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1 +#define CONFIG_FREERTOS_MINIMAL_TASK_STACKSIZE 1024 +#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 32 +#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1 +#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048 +#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10 +#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0 +#define CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS +#define CONFIG_FREERTOS_USE_TRACE_FACILITY +#define CONFIG_FREERTOS_USE_STATS_FORMATTING_FUNCTIONS +/* CONFIG_FREERTOS_USE_TICKLESS_IDLE is not set */ +#define CONFIG_FREERTOS_TOTAL_HEAP_SIZE 10240 +#define CONFIG_FREERTOS_TASK_FPU_SUPPORT 1 +/* end of Kernel Configuration */ + +#endif diff --git a/example/system/atomic/src/atomic_example.c b/example/system/atomic/src/atomic_example.c new file mode 100644 index 0000000000000000000000000000000000000000..85aaf20049ab336ef5b8645971dbaa28b083b30d --- /dev/null +++ b/example/system/atomic/src/atomic_example.c @@ -0,0 +1,125 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: atomic_example.c + * Date: 2023-02-23 14:53:42 + * LastEditTime: 2023-03-01 17:57:36 + * Description:  This file is for atomic test function. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 wangxiaodong 2023/06/23 first release + */ + +#include +#include "FreeRTOSConfig.h" +#include "FreeRTOS.h" +#include "task.h" +#include "fatomic.h" +#include "fassert.h" +#include "fkernel.h" + +static xTaskHandle xtask_handle; + +#define TASK_STACK_SIZE 1024 + + +void FAtomicExample(void *pvParameters) +{ + int ret; + int i = 0; + u32 count = 0; + u32 times = 0; + for (;;) + { + i = 0; + count = 0; + while (i++ < 10) + { + ret = FATOMIC_ADD(count, 1); + } + FASSERT_MSG(count == 10, "FATOMIC_ADD error\r\n"); + + i = 0; + while (i++ < 10) + { + ret = FATOMIC_INC(count); + } + FASSERT_MSG(count == 20, "FATOMIC_INC error\r\n"); + + i = 0; + while (i++ < 10) + { + ret = FATOMIC_SUB(count, 1); + } + FASSERT_MSG(count == 10, "FATOMIC_SUB error\r\n"); + + i = 0; + while (i++ < 10) + { + ret = FATOMIC_DEC(count); + } + FASSERT_MSG(count == 0, "FATOMIC_DEC error\r\n"); + + i = 0; + count = 0; + while (i++ < 16) + { + ret = FATOMIC_OR(count, BIT(i-1)); + } + FASSERT_MSG(count == 0xFFFF, "FATOMIC_OR error\r\n"); + + i = 0; + count = 0xFFFF; + while (i++ < 16) + { + ret = FATOMIC_AND(count, ~BIT(i-1)); + } + FASSERT_MSG(count == 0, "FATOMIC_AND error\r\n"); + + FATOMIC_CAS_BOOL(count, 0, 1); + FASSERT_MSG(count == 1, "FATOMIC_CAS_BOOL error\r\n"); + + FATOMIC_CAS_VAL(count, 0xFF, 0); + FASSERT_MSG(count == 1, "FATOMIC_CAS_VAL error\r\n"); + + FATOMIC_LOCK(count, 1); + FASSERT_MSG(count == 1, "FATOMIC_LOCK error\r\n"); + + FATOMIC_UNLOCK(count); + FASSERT_MSG(count == 0, "FATOMIC_UNLOCK error\r\n"); + + printf("Atomic example test success, times = %d!!! \r\n", times++); + + vTaskDelay(1000); + } + +} + + +void CreateAtomicTasks(void) +{ + printf("Create Atomic Task \r\n"); + xTaskCreate(FAtomicExample, "AtomicPeriodic", TASK_STACK_SIZE, NULL, 6, &xtask_handle); + +} + +void DeleteAtomicTasks(void) +{ + if (xtask_handle) + { + vTaskDelete(xtask_handle); + printf("AtomicPeriodic deletion \r\n"); + } +} \ No newline at end of file diff --git a/example/system/atomic/src/atomic_example_cmd.c b/example/system/atomic/src/atomic_example_cmd.c new file mode 100644 index 0000000000000000000000000000000000000000..b199618f2a0ded21e264075555ecd5f19ecc7cbd --- /dev/null +++ b/example/system/atomic/src/atomic_example_cmd.c @@ -0,0 +1,83 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: atomic_example_cmd.c + * Date: 2022-06-17 10:41:45 + * LastEditTime: 2022-06-17 10:41:45 + * Description: This file is for atomic command interface + * + * Modify History: + * Ver Who Date Changes + * ----- ------ -------- -------------------------------------- + * 1.0 wangxiaodong 2023/06/25 first commit + */ + +#include +#include +#include "shell.h" +#include "atomic_example.h" + +static void CreateAtomicCmdUsage(void) +{ + printf("Usage:\r\n"); + printf(" atomic cre \r\n"); + printf(" -- Create atomic test task now.\r\n"); + printf(" atomic del \r\n"); + printf(" -- Del atomic test task now.\r\n"); +} + +int CreateAtomicCmd(int argc, char *argv[]) +{ + static int create_flg = 0; /* 1 is tasks has been created*/ + + if (argc < 2) + { + CreateAtomicCmdUsage(); + return -1; + } + + if (!strcmp(argv[1], "cre")) + { + if (create_flg == 0) + { + CreateAtomicTasks(); + create_flg = 1; + } + else + { + printf("Please use atomic del cmd first. \r\n"); + } + } + else if (!strcmp(argv[1], "del")) + { + if (create_flg == 1) + { + DeleteAtomicTasks(); + create_flg = 0; + } + else + { + printf("Please use atomic cre cmd first. \r\n"); + } + } + else + { + printf("Error: Invalid arguments. \r\n"); + CreateAtomicCmdUsage(); + } + return 0; +} + +SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), atomic, CreateAtomicCmd, atomic task test); + + diff --git a/example/system/exception_debug/configs/d2000_aarch32_eg_configs b/example/system/exception_debug/configs/d2000_aarch32_eg_configs index db43ff18c5d70451dfd40a6e332bccf9798ff3df..10c586454b7e2b69ea793caac1e66241af104c26 100644 --- a/example/system/exception_debug/configs/d2000_aarch32_eg_configs +++ b/example/system/exception_debug/configs/d2000_aarch32_eg_configs @@ -3,6 +3,9 @@ # Project Configuration # CONFIG_TARGET_NAME="d2000_freertos_a32" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set # end of Project Configuration # @@ -18,8 +21,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +249,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/configs/d2000_aarch64_eg_configs b/example/system/exception_debug/configs/d2000_aarch64_eg_configs index 0476ac572c1fa01d5dd08eb3d06a27cc25081b9d..6a32efdf58a7de877b5f30341c9c8cccac5a9adc 100644 --- a/example/system/exception_debug/configs/d2000_aarch64_eg_configs +++ b/example/system/exception_debug/configs/d2000_aarch64_eg_configs @@ -3,6 +3,9 @@ # Project Configuration # CONFIG_TARGET_NAME="d2000_freertos_a64" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set # end of Project Configuration # @@ -18,8 +21,8 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -204,6 +214,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,6 +245,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/configs/e2000d_aarch32_eg_configs b/example/system/exception_debug/configs/e2000d_aarch32_eg_configs index 93bbaf5775f6dfca8cf3eaa54157a624c9942970..d1865e3bb409a58bcc550e67b3bbc3fd2b80206a 100644 --- a/example/system/exception_debug/configs/e2000d_aarch32_eg_configs +++ b/example/system/exception_debug/configs/e2000d_aarch32_eg_configs @@ -3,6 +3,9 @@ # Project Configuration # CONFIG_TARGET_NAME="e2000d_freertos_a32" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set # end of Project Configuration # @@ -17,8 +20,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +249,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/configs/e2000d_aarch64_eg_configs b/example/system/exception_debug/configs/e2000d_aarch64_eg_configs index 53b09ef86d5430750e865a6688662ff742f3a3d2..9162d6bc009a59bc9130e8b0366cb61db4210a31 100644 --- a/example/system/exception_debug/configs/e2000d_aarch64_eg_configs +++ b/example/system/exception_debug/configs/e2000d_aarch64_eg_configs @@ -20,7 +20,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -81,18 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration # # Linker Options @@ -210,6 +214,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -235,6 +245,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/configs/e2000q_aarch32_eg_configs b/example/system/exception_debug/configs/e2000q_aarch32_eg_configs index 504364d5e9ecd72a8452531d947bdb2e44ac675b..c7a4cc95ac9551bcd1848d6ac0d6bfc7302687ea 100644 --- a/example/system/exception_debug/configs/e2000q_aarch32_eg_configs +++ b/example/system/exception_debug/configs/e2000q_aarch32_eg_configs @@ -2,7 +2,10 @@ # # Project Configuration # -CONFIG_TARGET_NAME="e2000d_freertos_a32" +CONFIG_TARGET_NAME="e2000q_freertos_a32" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set # end of Project Configuration # @@ -17,8 +20,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +249,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/configs/e2000q_aarch64_eg_configs b/example/system/exception_debug/configs/e2000q_aarch64_eg_configs index dcf9e9eb5fc9f6e4613357a995e8c3c95b8659b5..258fae308a5c7f1eb5f9e7ced5fb74310dff6315 100644 --- a/example/system/exception_debug/configs/e2000q_aarch64_eg_configs +++ b/example/system/exception_debug/configs/e2000q_aarch64_eg_configs @@ -2,7 +2,10 @@ # # Project Configuration # -CONFIG_TARGET_NAME="e2000d_freertos_a64" +CONFIG_TARGET_NAME="e2000q_freertos_a64" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set # end of Project Configuration # @@ -17,8 +20,8 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -204,6 +214,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,6 +245,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/configs/ft2004_aarch32_eg_configs b/example/system/exception_debug/configs/ft2004_aarch32_eg_configs index 57be672bba529983973c95665d7b62db2ae73854..a47ca8e33bf96b7867351133d4b43a4fd95cf66f 100644 --- a/example/system/exception_debug/configs/ft2004_aarch32_eg_configs +++ b/example/system/exception_debug/configs/ft2004_aarch32_eg_configs @@ -3,6 +3,9 @@ # Project Configuration # CONFIG_TARGET_NAME="ft2004_freertos_a32" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set # end of Project Configuration # @@ -18,8 +21,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -208,6 +218,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +249,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/configs/ft2004_aarch64_eg_configs b/example/system/exception_debug/configs/ft2004_aarch64_eg_configs index bcb9a56d97735ad3e7a6496f914985873173c9eb..a6643f04bbe6d160e19afefb63b52d709e131292 100644 --- a/example/system/exception_debug/configs/ft2004_aarch64_eg_configs +++ b/example/system/exception_debug/configs/ft2004_aarch64_eg_configs @@ -3,6 +3,9 @@ # Project Configuration # CONFIG_TARGET_NAME="ft2004_freertos_a64" +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set +# CONFIG_EXCEPTION_ACCESS_VIOLATION is not set # end of Project Configuration # @@ -18,8 +21,8 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +71,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -204,6 +214,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,6 +245,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/main.c b/example/system/exception_debug/main.c index d7c99892399d9e1b112b9a3e94bb868ab19f0ff9..815d693f83e633f2b4445e1e0beffe38e7df5a4a 100644 --- a/example/system/exception_debug/main.c +++ b/example/system/exception_debug/main.c @@ -14,7 +14,7 @@ * FilePath: main.c * Date: 2022-02-24 13:42:19 * LastEditTime: 2022-03-21 17:02:53 - * Description:  This file is for providing a template main.c file when creating new freertos examples. + * Description:  This file is for exception debug example main entry. * * Modify History: * Ver   Who         Date         Changes diff --git a/example/system/exception_debug/sdkconfig b/example/system/exception_debug/sdkconfig index b5677782a744aad0df2441769790b59adfa7f3f7..9162d6bc009a59bc9130e8b0366cb61db4210a31 100644 --- a/example/system/exception_debug/sdkconfig +++ b/example/system/exception_debug/sdkconfig @@ -3,8 +3,8 @@ # Project Configuration # CONFIG_TARGET_NAME="e2000d_freertos_a64" -# CONFIG_EXCEPTION_INVALID_INSTRUCTION is not set -CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR=y +CONFIG_EXCEPTION_INVALID_INSTRUCTION=y +# CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set # CONFIG_EXCEPTION_ACCESS_VIOLATION is not set # end of Project Configuration @@ -20,7 +20,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -81,18 +80,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of SDK common configuration # # Linker Options @@ -210,6 +214,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -235,6 +245,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/exception_debug/sdkconfig.h b/example/system/exception_debug/sdkconfig.h index 2bc5c7ff4b6b06fd032bdc2bd31e6a6f027523d6..8a738ca05cb1480e37593afd3c1f6f789cef072f 100644 --- a/example/system/exception_debug/sdkconfig.h +++ b/example/system/exception_debug/sdkconfig.h @@ -4,8 +4,8 @@ /* Project Configuration */ #define CONFIG_TARGET_NAME "e2000d_freertos_a64" -/* CONFIG_EXCEPTION_INVALID_INSTRUCTION is not set */ -#define CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR +#define CONFIG_EXCEPTION_INVALID_INSTRUCTION +/* CONFIG_EXCEPTION_ACCESS_PERMISSION_ERROR is not set */ /* CONFIG_EXCEPTION_ACCESS_VIOLATION is not set */ /* end of Project Configuration */ @@ -19,7 +19,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -/* CONFIG_USE_SYS_TICK is not set */ /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -74,18 +73,21 @@ /* Building Option */ +/* SDK common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of SDK common configuration */ /* Linker Options */ @@ -183,6 +185,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -205,6 +212,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/system/nested_interrupt/configs/d2000_aarch32_eg_configs b/example/system/nested_interrupt/configs/d2000_aarch32_eg_configs index a16785ad54af36153e37c6b401b31d847493f42d..27b9ebf32133666e16878a8be34b0b14963e7e03 100644 --- a/example/system/nested_interrupt/configs/d2000_aarch32_eg_configs +++ b/example/system/nested_interrupt/configs/d2000_aarch32_eg_configs @@ -18,8 +18,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -208,6 +215,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +246,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/configs/d2000_aarch64_eg_configs b/example/system/nested_interrupt/configs/d2000_aarch64_eg_configs index 4731ef2f28f88014b15fe54b9662689cee32274f..5e58920c0f6cc458ae23887a17ac1006a8854197 100644 --- a/example/system/nested_interrupt/configs/d2000_aarch64_eg_configs +++ b/example/system/nested_interrupt/configs/d2000_aarch64_eg_configs @@ -18,8 +18,8 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -204,6 +211,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,6 +242,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/configs/e2000d_aarch32_eg_configs b/example/system/nested_interrupt/configs/e2000d_aarch32_eg_configs index 4c1569574661823c508bdb209e99667aca7d13e7..aef51d9042cec76b9382d7f0ec67f75160915738 100644 --- a/example/system/nested_interrupt/configs/e2000d_aarch32_eg_configs +++ b/example/system/nested_interrupt/configs/e2000d_aarch32_eg_configs @@ -17,8 +17,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -77,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -209,6 +215,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -234,6 +246,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/configs/e2000d_aarch64_eg_configs b/example/system/nested_interrupt/configs/e2000d_aarch64_eg_configs index a4715cf0c4cf0610dc98790055909e853688b010..497cea4926a55d62139202bd64ee65c65a7ce9ae 100644 --- a/example/system/nested_interrupt/configs/e2000d_aarch64_eg_configs +++ b/example/system/nested_interrupt/configs/e2000d_aarch64_eg_configs @@ -17,8 +17,8 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -204,6 +211,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,6 +242,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/configs/e2000q_aarch32_eg_configs b/example/system/nested_interrupt/configs/e2000q_aarch32_eg_configs index a786509e156f1440be7e9837485af11a833f9e5d..cea431c0f7d39213e981354dd1fc011633326fbc 100644 --- a/example/system/nested_interrupt/configs/e2000q_aarch32_eg_configs +++ b/example/system/nested_interrupt/configs/e2000q_aarch32_eg_configs @@ -17,8 +17,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -208,6 +215,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +246,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/configs/e2000q_aarch64_eg_configs b/example/system/nested_interrupt/configs/e2000q_aarch64_eg_configs index 9183d77b6ebf704e132f641e17c7fdfd254ec12d..d2e6dfcb878d89838932963bf51605e6ec1c2441 100644 --- a/example/system/nested_interrupt/configs/e2000q_aarch64_eg_configs +++ b/example/system/nested_interrupt/configs/e2000q_aarch64_eg_configs @@ -17,8 +17,8 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -204,6 +211,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,6 +242,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/configs/ft2004_aarch32_eg_configs b/example/system/nested_interrupt/configs/ft2004_aarch32_eg_configs index f0510b59527c3bb025d72f8ccca16b539ea7c56c..56e0d27541808615d0d6b4fbf96dad5f0c08f951 100644 --- a/example/system/nested_interrupt/configs/ft2004_aarch32_eg_configs +++ b/example/system/nested_interrupt/configs/ft2004_aarch32_eg_configs @@ -18,8 +18,8 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -208,6 +215,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -233,6 +246,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/configs/ft2004_aarch64_eg_configs b/example/system/nested_interrupt/configs/ft2004_aarch64_eg_configs index d99e8ace055af1b9260a237f1ce8ba6374d9f8e3..78353d2527b22670e50e35324424f13026b689cb 100644 --- a/example/system/nested_interrupt/configs/ft2004_aarch64_eg_configs +++ b/example/system/nested_interrupt/configs/ft2004_aarch64_eg_configs @@ -18,8 +18,8 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -204,6 +211,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,6 +242,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/sdkconfig b/example/system/nested_interrupt/sdkconfig index a4715cf0c4cf0610dc98790055909e853688b010..497cea4926a55d62139202bd64ee65c65a7ce9ae 100644 --- a/example/system/nested_interrupt/sdkconfig +++ b/example/system/nested_interrupt/sdkconfig @@ -17,8 +17,8 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set +# CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration # @@ -68,6 +68,7 @@ CONFIG_ENABLE_Pl011_UART=y # CONFIG_USE_PWM is not set # CONFIG_USE_IPC is not set # CONFIG_USE_MEDIA is not set +# CONFIG_USE_SCMI_MHU is not set # end of Components Configuration CONFIG_USE_NEW_LIBC=y @@ -76,17 +77,23 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# SDK common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set +# CONFIG_LOG_EXTRA_INFO is not set +# CONFIG_LOG_DISPALY_CORE_NUM is not set +# CONFIG_BOOTUP_DEBUG_PRINTS is not set CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y CONFIG_INTERRUPT_ROLE_MASTER=y # CONFIG_INTERRUPT_ROLE_SLAVE is not set -# CONFIG_LOG_EXTRA_INFO is not set -# CONFIG_BOOTUP_DEBUG_PRINTS is not set +# end of SDK common configuration # # Linker Options @@ -204,6 +211,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -229,6 +242,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y # CONFIG_USE_TLSF is not set # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/system/nested_interrupt/sdkconfig.h b/example/system/nested_interrupt/sdkconfig.h index 188475802d918fd71515a5e3f952d5ef63f4288e..96b9c7f0db37b435a11a59d9642a292aadee7261 100644 --- a/example/system/nested_interrupt/sdkconfig.h +++ b/example/system/nested_interrupt/sdkconfig.h @@ -16,8 +16,8 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -#define CONFIG_USE_SYS_TICK /* CONFIG_MMU_DEBUG_PRINTS is not set */ +/* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ /* Board Configuration */ @@ -63,23 +63,28 @@ /* CONFIG_USE_PWM is not set */ /* CONFIG_USE_IPC is not set */ /* CONFIG_USE_MEDIA is not set */ +/* CONFIG_USE_SCMI_MHU is not set */ /* end of Components Configuration */ #define CONFIG_USE_NEW_LIBC /* end of Standalone Setting */ /* Building Option */ +/* SDK common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ #define CONFIG_LOG_INFO /* CONFIG_LOG_WARN is not set */ /* CONFIG_LOG_ERROR is not set */ /* CONFIG_LOG_NONE is not set */ +/* CONFIG_LOG_EXTRA_INFO is not set */ +/* CONFIG_LOG_DISPALY_CORE_NUM is not set */ +/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ #define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG #define CONFIG_INTERRUPT_ROLE_MASTER /* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ -/* CONFIG_LOG_EXTRA_INFO is not set */ -/* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +/* end of SDK common configuration */ /* Linker Options */ @@ -177,6 +182,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -199,6 +209,7 @@ /* CONFIG_USE_TLSF is not set */ /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/example/template/configs/d2000_aarch32_eg_configs b/example/template/configs/d2000_aarch32_eg_configs index c4b10012b8f21e091e438f9a2e876a34138287b4..1244784c3e728e49237f36569028f9e669211b81 100644 --- a/example/template/configs/d2000_aarch32_eg_configs +++ b/example/template/configs/d2000_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/configs/d2000_aarch64_eg_configs b/example/template/configs/d2000_aarch64_eg_configs index a418e0c7bcef63c362c332e9b71c68397a6e6a9c..f2328971513fac2fa77cdf033def333a63d3252d 100644 --- a/example/template/configs/d2000_aarch64_eg_configs +++ b/example/template/configs/d2000_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/configs/e2000d_aarch32_eg_configs b/example/template/configs/e2000d_aarch32_eg_configs index aaca9cb8c32b0134bc622769384095a3f2780355..c083a74552d69719ecd1b175a14fda6d0ce6a776 100644 --- a/example/template/configs/e2000d_aarch32_eg_configs +++ b/example/template/configs/e2000d_aarch32_eg_configs @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/configs/e2000d_aarch64_eg_configs b/example/template/configs/e2000d_aarch64_eg_configs index b25e766f02e945c7c3deceeb39ae82e38989efc6..2f32b40dccf47d121bdb92a5d249fede57b4688f 100644 --- a/example/template/configs/e2000d_aarch64_eg_configs +++ b/example/template/configs/e2000d_aarch64_eg_configs @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/configs/e2000q_aarch32_eg_configs b/example/template/configs/e2000q_aarch32_eg_configs index 66ad916b9a781fc6c55700b54992a70e096052f1..bd1a5e6b7894e9d747a26d40063183a92e35f181 100644 --- a/example/template/configs/e2000q_aarch32_eg_configs +++ b/example/template/configs/e2000q_aarch32_eg_configs @@ -2,7 +2,7 @@ # # Project Configuration # -CONFIG_TARGET_NAME="e2000d_freertos_a32" +CONFIG_TARGET_NAME="e2000q_freertos_a32" # end of Project Configuration # @@ -17,7 +17,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y # CONFIG_TARGET_ARMV8_AARCH64 is not set CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/configs/e2000q_aarch64_eg_configs b/example/template/configs/e2000q_aarch64_eg_configs index 97ae1ab96141ace057a40aa5b3132840ae40373f..2bcc9ff0c351ecf0a1d80501e043fcf48eebe9a7 100644 --- a/example/template/configs/e2000q_aarch64_eg_configs +++ b/example/template/configs/e2000q_aarch64_eg_configs @@ -2,7 +2,7 @@ # # Project Configuration # -CONFIG_TARGET_NAME="e2000d_freertos_a64" +CONFIG_TARGET_NAME="e2000q_freertos_a64" # end of Project Configuration # @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/configs/ft2004_aarch32_eg_configs b/example/template/configs/ft2004_aarch32_eg_configs index 1aab6f0c5b1fd3d28d0c6336eb83bb8fefd08d8c..dd2b11d6c6b400b9771e6c499673964782d39db9 100644 --- a/example/template/configs/ft2004_aarch32_eg_configs +++ b/example/template/configs/ft2004_aarch32_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH32=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y CONFIG_USE_AARCH64_L1_TO_AARCH32=y # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -211,6 +221,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -236,6 +252,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/configs/ft2004_aarch64_eg_configs b/example/template/configs/ft2004_aarch64_eg_configs index d3af652531c78fd206a88c71ae66096a068cb295..2c69c972e0efb002fe361efd3dfdaae842a8fd93 100644 --- a/example/template/configs/ft2004_aarch64_eg_configs +++ b/example/template/configs/ft2004_aarch64_eg_configs @@ -18,7 +18,6 @@ CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_L3CACHE=y CONFIG_USE_MMU=y -CONFIG_USE_SYS_TICK=y # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set CONFIG_LOG_INFO=y # CONFIG_LOG_WARN is not set # CONFIG_LOG_ERROR is not set # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/sdkconfig b/example/template/sdkconfig index 97ae1ab96141ace057a40aa5b3132840ae40373f..2bcc9ff0c351ecf0a1d80501e043fcf48eebe9a7 100644 --- a/example/template/sdkconfig +++ b/example/template/sdkconfig @@ -2,7 +2,7 @@ # # Project Configuration # -CONFIG_TARGET_NAME="e2000d_freertos_a64" +CONFIG_TARGET_NAME="e2000q_freertos_a64" # end of Project Configuration # @@ -17,7 +17,6 @@ CONFIG_USE_FREERTOS=y CONFIG_TARGET_ARMV8_AARCH64=y CONFIG_USE_CACHE=y CONFIG_USE_MMU=y -# CONFIG_USE_SYS_TICK is not set # CONFIG_MMU_DEBUG_PRINTS is not set # CONFIG_BOOT_WITH_FLUSH_CACHE is not set # end of Arch Configuration @@ -78,18 +77,29 @@ CONFIG_USE_NEW_LIBC=y # # Building Option # + +# +# Sdk common configuration +# # CONFIG_LOG_VERBOS is not set # CONFIG_LOG_DEBUG is not set # CONFIG_LOG_INFO is not set # CONFIG_LOG_WARN is not set CONFIG_LOG_ERROR=y # CONFIG_LOG_NONE is not set -CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y -CONFIG_INTERRUPT_ROLE_MASTER=y -# CONFIG_INTERRUPT_ROLE_SLAVE is not set # CONFIG_LOG_EXTRA_INFO is not set # CONFIG_LOG_DISPALY_CORE_NUM is not set # CONFIG_BOOTUP_DEBUG_PRINTS is not set +CONFIG_USE_DEFAULT_INTERRUPT_CONFIG=y +CONFIG_INTERRUPT_ROLE_MASTER=y +# CONFIG_INTERRUPT_ROLE_SLAVE is not set +# end of Sdk common configuration + +# +# Image information configuration +# +# CONFIG_IMAGE_INFO is not set +# end of Image information configuration # # Linker Options @@ -207,6 +217,12 @@ CONFIG_FREERTOS_USE_UART=y # # CONFIG_FREERTOS_USE_TIMER is not set # end of Freertos Timer Drivers + +# +# Freertos Media Drivers +# +# CONFIG_FREERTOS_USE_MEDIA is not set +# end of Freertos Media Drivers # end of Component Configuration # @@ -232,6 +248,7 @@ CONFIG_DEFAULT_LETTER_SHELL_USE_UART1=y CONFIG_USE_TLSF=y # CONFIG_USE_SDMMC_CMD is not set # CONFIG_USE_CHERRY_USB is not set +# CONFIG_USE_LVGL is not set # end of Third-Party Configuration # diff --git a/example/template/sdkconfig.h b/example/template/sdkconfig.h index 50800cea78537fc29cf0b375c6a48fd273100605..914f4255ec290a7178f47c27872c97e9ce70fcfe 100644 --- a/example/template/sdkconfig.h +++ b/example/template/sdkconfig.h @@ -3,7 +3,7 @@ /* Project Configuration */ -#define CONFIG_TARGET_NAME "e2000d_freertos_a64" +#define CONFIG_TARGET_NAME "e2000q_freertos_a64" /* end of Project Configuration */ /* Standalone Setting */ @@ -16,7 +16,6 @@ #define CONFIG_TARGET_ARMV8_AARCH64 #define CONFIG_USE_CACHE #define CONFIG_USE_MMU -/* CONFIG_USE_SYS_TICK is not set */ /* CONFIG_MMU_DEBUG_PRINTS is not set */ /* CONFIG_BOOT_WITH_FLUSH_CACHE is not set */ /* end of Arch Configuration */ @@ -71,18 +70,26 @@ /* Building Option */ +/* Sdk common configuration */ + /* CONFIG_LOG_VERBOS is not set */ /* CONFIG_LOG_DEBUG is not set */ /* CONFIG_LOG_INFO is not set */ /* CONFIG_LOG_WARN is not set */ #define CONFIG_LOG_ERROR /* CONFIG_LOG_NONE is not set */ -#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG -#define CONFIG_INTERRUPT_ROLE_MASTER -/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ /* CONFIG_LOG_EXTRA_INFO is not set */ /* CONFIG_LOG_DISPALY_CORE_NUM is not set */ /* CONFIG_BOOTUP_DEBUG_PRINTS is not set */ +#define CONFIG_USE_DEFAULT_INTERRUPT_CONFIG +#define CONFIG_INTERRUPT_ROLE_MASTER +/* CONFIG_INTERRUPT_ROLE_SLAVE is not set */ +/* end of Sdk common configuration */ + +/* Image information configuration */ + +/* CONFIG_IMAGE_INFO is not set */ +/* end of Image information configuration */ /* Linker Options */ @@ -180,6 +187,11 @@ /* CONFIG_FREERTOS_USE_TIMER is not set */ /* end of Freertos Timer Drivers */ + +/* Freertos Media Drivers */ + +/* CONFIG_FREERTOS_USE_MEDIA is not set */ +/* end of Freertos Media Drivers */ /* end of Component Configuration */ /* Third-Party Configuration */ @@ -202,6 +214,7 @@ #define CONFIG_USE_TLSF /* CONFIG_USE_SDMMC_CMD is not set */ /* CONFIG_USE_CHERRY_USB is not set */ +/* CONFIG_USE_LVGL is not set */ /* end of Third-Party Configuration */ /* Kernel Configuration */ diff --git a/install.py b/install.py index d892b33072e6d1aa15af9a2ac146cee81a1176ea..8abca1b0464de614251f1537602d444fb1f3f3df 100644 --- a/install.py +++ b/install.py @@ -86,7 +86,7 @@ os.system("chmod +x ./make/*.mk --silent ") os.system("chmod +x ./lib/Kconfiglib/*.py --silent ") # Add standalone sdk -standalone_sdk_v="a2dc5e2a6e8dd705f6667a9d58d3d78f25ca528e" +standalone_sdk_v="af507ee949dfba64c5206b14f8aa39537480c7eb" standalone_path=freertos_sdk_path + '/standalone' standalone_branche="master" standalone_remote="https://gitee.com/phytium_embedded/phytium-standalone-sdk.git" @@ -109,6 +109,7 @@ if not os.path.exists(standalone_path): os.system("echo \"third-party/sdmmc/*\" >> {}".format(r'.git/info/sparse-checkout')) os.system("echo \"third-party/lwip-2.1.2/*\" >> {}".format(r'.git/info/sparse-checkout')) os.system("echo \"third-party/sfud-1.1.0/*\" >> {}".format(r'.git/info/sparse-checkout')) + os.system("echo \"third-party/lvgl-8.3/*\" >> {}".format(r'.git/info/sparse-checkout')) os.system("git checkout {}".format(standalone_sdk_v)) print('[1]: Standalone sdk download is succeed') diff --git a/make/default_load.mk b/make/default_load.mk old mode 100644 new mode 100755 diff --git a/make/standalone_dependence.mk b/make/standalone_dependence.mk old mode 100644 new mode 100755 index b2dbf1013bf6da62b700f7ea684e72f43b148b12..c344f832d9984cb0fab3872420942aaed587ae39 --- a/make/standalone_dependence.mk +++ b/make/standalone_dependence.mk @@ -5,8 +5,6 @@ include $(STANDALONE_DIR)/lib/lib.mk#libc 相关依赖 EXCL_SRC += $(STANDALONE_DIR)/common/fmemory_pool.c -ifdef CONFIG_TARGET_ARMV8_AARCH64 -EXCL_SRC += $(STANDALONE_DIR)/arch/armv8/aarch64/gcc/fboot.S -else -EXCL_SRC += $(STANDALONE_DIR)/arch/armv8/aarch32/gcc/fvector.S +ifdef CONFIG_TARGET_ARMV8_AARCH32 +EXCL_SRC += $(STANDALONE_DIR)/arch/armv8/aarch32/gcc/fvectors.S endif diff --git a/scripts/release_tag.sh b/scripts/release_tag.sh old mode 100644 new mode 100755 diff --git a/third-party/Kconfig b/third-party/Kconfig index 3244c358ae4a2e9398c773972bc6aa5a24a98ead..4ec7ffc8e7c4c97d0a7d5d57255804316b4228ff 100644 --- a/third-party/Kconfig +++ b/third-party/Kconfig @@ -2,7 +2,6 @@ config USE_LWIP bool prompt "Use LWIP" - select USE_SYS_TICK help Include LWIP for Network Protocol @@ -101,11 +100,22 @@ config USE_SDMMC_CMD config USE_CHERRY_USB bool default n - prompt "Use CherryUSB(0.7.0)" + prompt "Use CherryUSB(0.8.0)" help Include CherryUSB for XHCI controller if USE_CHERRY_USB - source "$(FREERTOS_SDK_ROOT)/third-party/cherryusb-0.7.0/Kconfig" + source "$(FREERTOS_SDK_ROOT)/third-party/cherryusb/Kconfig" + endif + +config USE_LVGL + bool + default n + prompt "Use LVGL" + help + Include LVGL + + if USE_LVGL + source "$(FREERTOS_SDK_ROOT)/third-party/lvgl-8.3/Kconfig" endif diff --git a/third-party/cherryusb-0.7.0/class/mtp/usbd_mtp.c b/third-party/cherryusb-0.7.0/class/mtp/usbd_mtp.c deleted file mode 100644 index 38661e914648d72646a6833e56f7645f4a31ca3b..0000000000000000000000000000000000000000 --- a/third-party/cherryusb-0.7.0/class/mtp/usbd_mtp.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2022, sakumisu - * - * SPDX-License-Identifier: Apache-2.0 - */ -#include "usbd_core.h" -#include "usbd_mtp.h" - -struct mtp_cfg_priv { - uint8_t device_status; -} usbd_mtp_cfg; - -/* max USB packet size */ -#ifndef CONFIG_USB_HS -#define MTP_BULK_EP_MPS 64 -#else -#define MTP_BULK_EP_MPS 512 -#endif - -#define MSD_OUT_EP_IDX 0 -#define MSD_IN_EP_IDX 1 - -/* Describe EndPoints configuration */ -static struct usbd_interface mtp_ep_data[2]; - -static int mtp_class_interface_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) -{ - USB_LOG_DBG("MTP Class request: " - "bRequest 0x%02x\r\n", - setup->bRequest); - - switch (setup->bRequest) { - case MTP_REQUEST_CANCEL: - - break; - case MTP_REQUEST_GET_EXT_EVENT_DATA: - - break; - case MTP_REQUEST_RESET: - - break; - case MTP_REQUEST_GET_DEVICE_STATUS: - - break; - - default: - USB_LOG_WRN("Unhandled MTP Class bRequest 0x%02x\r\n", setup->bRequest); - return -1; - } - - return 0; -} - -static void usbd_mtp_bulk_out(uint8_t ep) -{ -} - -static void usbd_mtp_bulk_in(uint8_t ep) -{ -} - -static void mtp_notify_handler(uint8_t event, void *arg) -{ - switch (event) { - case USBD_EVENT_RESET: - break; - - default: - break; - } -} \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/port/xhci/usb_hc_xhci.c b/third-party/cherryusb-0.7.0/port/xhci/usb_hc_xhci.c deleted file mode 100644 index e45dd2338863e50487524895c819c793431f2cf5..0000000000000000000000000000000000000000 --- a/third-party/cherryusb-0.7.0/port/xhci/usb_hc_xhci.c +++ /dev/null @@ -1,1675 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: usb_hc_xhci.c - * Date: 2022-09-19 17:24:36 - * LastEditTime: 2022-09-19 17:24:36 - * Description:  This file is for xhci function implementation. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/9/19 init commit - * 1.1 zhugengyu 2022/10/9 add dumpers and fix command abort - */ - -/***************************** Include Files *********************************/ -#include "usbh_core.h" -#include "usbh_hub.h" -#include "xhci_reg.h" -#include "usb_hc_xhci.h" - -/************************** Constant Definitions *****************************/ - -/************************** Variable Definitions *****************************/ -/* input is xhci speed */ -static const char *speed_name[16] = -{ - [ 0 ] = " - ", - [ 1 ] = "Full", - [ 2 ] = "Low", - [ 3 ] = "High", - [ 4 ] = "Super", -}; - -static const int speed_from_xhci[16] = -{ - [ 0 ] = -1, - [ 1 ] = USB_SPEED_FULL, - [ 2 ] = USB_SPEED_LOW, - [ 3 ] = USB_SPEED_HIGH, - [ 4 ] = USB_SPEED_SUPER, - [ 5 ... 15 ] = -1, -}; - -static const int speed_to_xhci[] = -{ - [ USB_SPEED_FULL ] = 1, - [ USB_SPEED_LOW ] = 2, - [ USB_SPEED_HIGH ] = 3, - [ USB_SPEED_SUPER ] = 4, -}; - -static volatile struct xhci_pipe *cur_cmd_pipe = NULL; /* pass current command pipe to interrupt */ -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ -void usb_hc_dcache_invalidate(void *addr, unsigned long len); -struct xhci_pipe *xhci_event_process(struct xhci_s *xhci); - -/*****************************************************************************/ -static void xhci_dump_slot_ctx(const struct xhci_slotctx *const sc) -{ - USB_LOG_DBG("ctx[0]=0x%x\n", sc->ctx[0]); - USB_LOG_DBG(" route=0x%x\n", - XHCI_SLOTCTX_0_ROUTE_GET(sc->ctx[0])); - USB_LOG_DBG("ctx[1]=0x%x\n", sc->ctx[1]); - USB_LOG_DBG("ctx[2]=0x%x\n", sc->ctx[2]); - USB_LOG_DBG(" tt-port=0x%x, tt-hub-slot=0x%x\n", - XHCI_SLOTCTX_2_HUB_PORT_GET(sc->ctx[2]), - XHCI_SLOTCTX_2_HUB_SLOT_GET(sc->ctx[2])); - USB_LOG_DBG("ctx[3]=0x%x\n", sc->ctx[3]); -} - -static void xhci_dump_ep_ctx(const struct xhci_epctx *const ec) -{ - USB_LOG_DBG("ctx[0]=0x%x\n", ec->ctx[0]); - USB_LOG_DBG("ctx[1]=0x%x\n", ec->ctx[1]); - USB_LOG_DBG(" ep_type=%d, mps=%d\n", - XHCI_EPCTX_1_EPTYPE_GET(ec->ctx[1]), - XHCI_EPCTX_1_MPS_GET(ec->ctx[1])); - USB_LOG_DBG("deq_low=0x%x\n", ec->deq_low); - USB_LOG_DBG("deq_high=0x%x\n", ec->deq_high); - USB_LOG_DBG("length=0x%x\n", ec->length); -} - -static void xhci_dump_input_ctx(struct xhci_s *xhci, const struct xhci_inctx *const inctx) -{ - USB_LOG_DBG("===input ctx====\n"); - USB_LOG_DBG("add=0x%x\n", inctx->add); - USB_LOG_DBG("del=0x%x\n", inctx->del); - if (inctx->add & (0x1)) - { - USB_LOG_DBG("===slot ctx====\n"); - const struct xhci_slotctx *const sc = (void *)&inctx[1 << xhci->context64]; - xhci_dump_slot_ctx(sc); - } - - for (int epid = 1; epid <= 31; epid++) - { - if (inctx->add & (0x1 << (epid))) - { - USB_LOG_DBG("===ep-%d ctx====\n", epid); - const struct xhci_epctx *const ec = (void *)&inctx[(epid + 1) << xhci->context64]; - xhci_dump_ep_ctx(ec); - } - } - USB_LOG_DBG("\n"); -} - -static void xhci_dump_pipe(const struct xhci_pipe *const ppipe) -{ - USB_LOG_DBG("pipe@%p\n", ppipe); - if (NULL == ppipe) - { - return; - } - - USB_LOG_DBG("epaddr=%d\n", ppipe->epaddr); - USB_LOG_DBG("speed=%d\n", ppipe->speed); - USB_LOG_DBG("interval=%d\n", ppipe->interval); - USB_LOG_DBG("maxpacket=%d\n", ppipe->maxpacket); - USB_LOG_DBG("eptype=%d\n", ppipe->eptype); - USB_LOG_DBG("slotid=%d\n", ppipe->slotid); - USB_LOG_DBG("epid=%d\n", ppipe->epid); - USB_LOG_DBG("timeout=%d\n", ppipe->timeout); - USB_LOG_DBG("waiter=%d\n", ppipe->waiter); - USB_LOG_DBG("waitsem=%p\n", ppipe->waitsem); - USB_LOG_DBG("hport=%p\n", ppipe->hport); - USB_LOG_DBG("urb=%p\n", ppipe->urb); -} - -/* Wait until bit = value or timeout */ -static int xhci_wait_bit(unsigned long reg_off, uint32_t mask, uint32_t value, uint32_t timeout) -{ - uint32_t delay = 0U; /* calc wait end time */ - - while ((readl(reg_off) & mask) != value) - { - if (++delay > timeout) /* check if timeout */ - { - USB_LOG_ERR("Wait timeout !!!\n"); - return -1; - } - usb_osal_msleep(1U); - } - return 0; -} - -/* Check if device attached to port */ -static void xhci_print_port_state(const char *prefix, uint32_t port, uint32_t portsc) -{ - uint32_t pls = XHCI_REG_OP_PORTS_PORTSC_PLS_GET(portsc); - uint32_t speed = XHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(portsc); - - USB_LOG_DBG("%s port #%d: 0x%08x,%s%s pls %d, speed %d [%s]\n", - prefix, port + 1, portsc, - (portsc & XHCI_REG_OP_PORTS_PORTSC_PP) ? " powered," : "", - (portsc & XHCI_REG_OP_PORTS_PORTSC_PED) ? " enabled," : "", - pls, speed, speed_name[speed]); -} - -static inline uint32_t xhci_readl_port(struct xhci_s *xhci, uint32_t port, uint32_t offset) -{ - /* Operational Base + (400h + (10h * (n–1))) */ - return readl(xhci->pr + port * XHCI_REG_OP_PORTS_SIZE + offset); -} - -static inline void xhci_writel_port(struct xhci_s *xhci, uint32_t port, uint32_t offset, uint32_t val) -{ - /* Operational Base + (400h + (10h * (n–1))) */ - return writel(xhci->pr + port * XHCI_REG_OP_PORTS_SIZE + offset, val); -} - -static void xhci_setup_mmio(struct xhci_s *xhci, unsigned long base_addr) -{ - xhci->base = base_addr; - xhci->caps = xhci->base; - - /* add to register base to find the beginning of the Operational Register Space */ - xhci->op = xhci->base + readb(xhci->caps + XHCI_REG_CAP_CAPLENGTH); - xhci->db = xhci->base + XHCI_REG_CAP_DBOFF_GET(readl(xhci->caps + XHCI_REG_CAP_DBOFF)); - xhci->ir = xhci->base + XHCI_REG_CAP_RTSOFF_GET(readl(xhci->caps + XHCI_REG_CAP_RTSOFF)) + - XHCI_REG_RT_IR0; - xhci->pr = xhci->op + XHCI_REG_OP_PORTS_BASE; - - /* cache static information of CAP_HCSPARAMS */ - xhci->hcs[0] = readl(xhci->caps + XHCI_REG_CAP_HCS1); - xhci->hcs[1] = readl(xhci->caps + XHCI_REG_CAP_HCS2); - xhci->hcs[2] = readl(xhci->caps + XHCI_REG_CAP_HCS3); - xhci->hcc = readl(xhci->caps + XHCI_REG_CAP_HCC); - - /* avoid access XHCI_REG_CAP_HCIVERSION = 0x2, unaligned memory */ - xhci->version = ((readl(xhci->caps + XHCI_REG_CAP_CAPLENGTH) >> 16) & 0xffff); - - xhci->ports = XHCI_REG_CAP_HCS1_MAX_PORTS_GET(xhci->hcs[0]); /* bit[31:24] max ports */ - xhci->slots = XHCI_REG_CAP_HCS1_MAX_SLOTS_GET(xhci->hcs[0]); /* bit[7:0] max device slots */ - - /* For example, using the offset of Base is 1000h and the xECP value of 0068h, we can calculated - the following effective address of the first extended capability: - 1000h + (0068h << 2) -> 1000h + 01A0h -> 11A0h */ - xhci->xcap = XHCI_REG_CAP_HCC_XECP_GET(xhci->hcc) << 2; /* bit[31:16] xHCI extended cap pointer */ - xhci->context64 = (XHCI_REG_CAP_HCC_CSZ & xhci->hcc) ? true : false; /* use context64 or not */ - - USB_LOG_INFO(" hc version: 0x%x\n", xhci->version); - USB_LOG_INFO(" mmio base: 0x%x\n", xhci->base); - USB_LOG_INFO(" oper base: 0x%x\n", xhci->op); - USB_LOG_INFO(" doorbell base: 0x%x\n", xhci->db); - USB_LOG_INFO(" runtime base: 0x%x\n", xhci->ir); - USB_LOG_INFO(" port base: 0x%x\n", xhci->pr); - USB_LOG_INFO(" xcap base: 0x%x\n", xhci->xcap); - - USB_LOG_INFO(" slot num: 0x%x\n", xhci->slots); - USB_LOG_INFO(" port num: 0x%x\n", xhci->ports); - USB_LOG_INFO(" context: %d bit\n", xhci->context64 ? 64 : 32); -} - - -/* Reset device on port */ -static int xhci_hub_reset(struct xhci_s *xhci, uint32_t port) -{ - uint32_t portsc = xhci_readl_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC); - if (!(portsc & XHCI_REG_OP_PORTS_PORTSC_CCS)) /* double check if connected */ - /* Device no longer connected?! */ - { - return -1; - } - - switch (XHCI_REG_OP_PORTS_PORTSC_PLS_GET(portsc)) - { - case PLS_U0: - /* A USB3 port - controller automatically performs reset */ - break; - case PLS_POLLING: - /* A USB2 port - perform device reset */ - xhci_print_port_state(__func__, port, portsc); - xhci_writel_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC, - portsc | XHCI_REG_OP_PORTS_PORTSC_PR); /* reset port */ - break; - default: - return -1; - } - - // Wait for device to complete reset and be enabled - uint32_t end = 1000U, start = 0U; - for (;;) - { - portsc = xhci_readl_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC); - if (!(portsc & XHCI_REG_OP_PORTS_PORTSC_CCS)) - /* Device disconnected during reset */ - { - return -1; - } - - if (portsc & XHCI_REG_OP_PORTS_PORTSC_PED) /* check if port enabled */ - /* Reset complete */ - { - break; - } - - if (++start > end) - { - USB_LOG_ERR("Wait timeout, portsc=0x%x !!!\n", portsc); - return -1; - } - - usb_osal_msleep(1); - } - - int rc = speed_from_xhci[XHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(portsc)]; - xhci_print_port_state("XHCI", port, portsc); - return rc; -} - -/* Add a TRB to the given ring */ -static void xhci_trb_fill(struct xhci_ring *ring, void *data, uint32_t xferlen, uint32_t flags) -{ - struct xhci_trb *dst = &ring->ring[ring->nidx]; - if (flags & TRB_TR_IDT) - { - memcpy(&dst->ptr_low, data, xferlen); - } - else - { - dst->ptr_low = (uint32_t)(unsigned long)data; -#ifdef XHCI_AARCH64 - dst->ptr_high = (uint32_t)((uint64_t)data >> 32U); -#else - dst->ptr_high = 0U; -#endif - } - dst->status = xferlen; - /* cycle bit */ - dst->control = flags | (ring->cs ? TRB_C : 0); -} - -/* Queue a TRB onto a ring, wrapping ring as needed */ -static void xhci_trb_queue(struct xhci_ring *ring, void *data, uint32_t xferlen, uint32_t flags) -{ - if (ring->nidx >= ARRAY_SIZE(ring->ring) - 1) /* if it is the last trb in the list */ - { - /* indicate the end of ring, bit[1], toggle cycle = 1, xHc shall toggle cycle bit interpretation */ - xhci_trb_fill(ring, ring->ring, 0, (TR_LINK << 10) | TRB_LK_TC); - ring->nidx = 0; /* adjust dequeue index to 0 */ - ring->cs ^= 1; /* toggle cycle interpretation of sw */ - } - - xhci_trb_fill(ring, data, xferlen, flags); - ring->nidx++; /* ahead dequeue index */ -} - -/* Signal the hardware to process events on a TRB ring */ -static void xhci_doorbell(struct xhci_s *xhci, uint32_t slotid, uint32_t value) -{ - writel(xhci->db + slotid * XHCI_REG_DB_SIZE, value); /* bit[7:0] db target, is ep_id */ -} - -/* Wait for a ring to empty (all TRBs processed by hardware) */ -static int xhci_event_wait(struct xhci_s *xhci, - struct xhci_pipe *pipe, - struct xhci_ring *ring) -{ - int ret = CC_SUCCESS; - - if (pipe->timeout > 0) - { - ret = usb_osal_sem_take(pipe->waitsem, pipe->timeout); - if (ret < 0) - { - ret = CC_TIMEOUT; - } - else - { - ret = TRB_CC_GET(ring->evt.status); /* bit[31:24] completion code */ - } - } - - return ret; -} - -static int xhci_cmd_abort(struct xhci_s *xhci, struct xhci_pipe *pipe) -{ - uint64_t crcr; - - crcr = readq(xhci->op + XHCI_REG_OP_CRCR); - USB_LOG_WRN("Aborting command, crcr = 0x%llx .\r\n", crcr); - crcr |= XHCI_REG_OP_CRCR_CA; - writeq(xhci->op + XHCI_REG_OP_CRCR, crcr); /* abort command */ - - usb_osal_msleep(500); /* allow time for command to abort */ - - crcr = readl(xhci->op + XHCI_REG_OP_CRCR); - if (XHCI_REG_OP_CRCR_CRR & crcr) - { - /* Device has failed to abort a command and is almost - * certainly beyond repair. Reset device, abandoning - * all state, and mark device as failed to avoid - * delays on any future command attempts. - */ - USB_LOG_ERR("Failed to abort command.\r\n"); - return -1; - } - - pipe->timeout = 5000; - pipe->waiter = true; - cur_cmd_pipe = pipe; - - int rc = xhci_event_wait(xhci, pipe, xhci->cmds); - - /* Reset the command ring control register */ - memset(xhci->cmds->ring, 0U, XHCI_RING_ITEMS * sizeof(struct xhci_trb)); - writeq(xhci->op + XHCI_REG_OP_CRCR, (uint64_t)(unsigned long)xhci->cmds | xhci->cmds->cs); - - return rc; -} - -/* Submit a command to the xhci controller ring */ -static int xhci_cmd_submit(struct xhci_s *xhci, struct xhci_inctx *inctx, - struct xhci_pipe *pipe, uint32_t flags) -{ - if (inctx) - { - struct xhci_slotctx *slot = (void *)&inctx[1 << xhci->context64]; - uint32_t port = XHCI_SLOTCTX_1_ROOT_PORT_GET(slot->ctx[1]) - 1; - uint32_t portsc = xhci_readl_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC); - if (!(portsc & XHCI_REG_OP_PORTS_PORTSC_CCS)) - { - /* Device no longer connected?! */ - xhci_print_port_state(__func__, port, portsc); - return CC_DISCONNECTED; - } - } - - usb_osal_mutex_take(xhci->cmds->lock); /* handle command one by one */ - - pipe->timeout = 5000; - pipe->waiter = true; - cur_cmd_pipe = pipe; - - xhci_trb_queue(xhci->cmds, inctx, 0, flags); - - /* pass command trb to hardware */ - DSB(); - - xhci_doorbell(xhci, 0, 0); /* 0 = db host controller, 0 = db targe hc command */ - int rc = xhci_event_wait(xhci, pipe, xhci->cmds); - - if (CC_SUCCESS != rc) - { - rc = xhci_cmd_abort(xhci, pipe); - } - - usb_osal_mutex_give(xhci->cmds->lock); - - return rc; -} - -static int xhci_cmd_nop(struct xhci_s *xhci, struct xhci_pipe *pipe) -{ - USB_LOG_DBG("%s\n", __func__); - return xhci_cmd_submit(xhci, NULL, pipe, TRB_TYPE_SET(CR_NOOP)); -} - -static int xhci_cmd_enable_slot(struct xhci_s *xhci, struct xhci_pipe *pipe) -{ - int cc = xhci_cmd_submit(xhci, NULL, pipe, TRB_TYPE_SET(CR_ENABLE_SLOT)); - if (cc != CC_SUCCESS) - { - return cc; - } - - struct xhci_trb *evt = &(xhci->cmds->evt); - return TRB_CR_SLOTID_GET(evt->control); /* bit [31:24] slot id */ -} - -static int xhci_cmd_disable_slot(struct xhci_s *xhci, struct xhci_pipe *pipe) -{ - USB_LOG_DBG("%s: slotid %d\n", __func__, pipe->slotid); - return xhci_cmd_submit(xhci, NULL, pipe, TRB_TYPE_SET(CR_DISABLE_SLOT) | TRB_CR_SLOTID_SET(pipe->slotid)); -} - -static int xhci_cmd_address_device(struct xhci_s *xhci, struct xhci_pipe *pipe, struct xhci_inctx *inctx) -{ - USB_LOG_DBG("%s: slotid %d\n", __func__, pipe->slotid); - return xhci_cmd_submit(xhci, inctx, pipe, TRB_TYPE_SET(CR_ADDRESS_DEVICE) | TRB_CR_SLOTID_SET(pipe->slotid)); -} - -static int xhci_cmd_configure_endpoint(struct xhci_s *xhci, struct xhci_pipe *pipe, - struct xhci_inctx *inctx, bool defconfig) -{ - USB_LOG_DBG("%s: slotid %d\n", __func__, pipe->slotid); - return xhci_cmd_submit(xhci, inctx, pipe, TRB_TYPE_SET(CR_CONFIGURE_ENDPOINT) | - TRB_CR_SLOTID_SET(pipe->slotid) | - (defconfig ? TRB_CR_DC : 0)); -} - -static int xhci_cmd_evaluate_context(struct xhci_s *xhci, struct xhci_pipe *pipe, struct xhci_inctx *inctx) -{ - USB_LOG_DBG("%s: slotid %d\n", __func__, pipe->slotid); - /* bit[15:10] TRB type, bit[31:24] Slot id */ - return xhci_cmd_submit(xhci, inctx, pipe, TRB_TYPE_SET(CR_EVALUATE_CONTEXT) | TRB_CR_SLOTID_SET(pipe->slotid)); -} -static int xhci_cmd_reset_endpoint(struct xhci_s *xhci, struct xhci_pipe *pipe) -{ - USB_LOG_DBG("%s: slotid %d, epid %d\n", __func__, pipe->slotid, pipe->epid); - /* bit[15:10] TRB type, bit[31:24] Slot id */ - return xhci_cmd_submit(xhci, NULL, pipe, TRB_TYPE_SET(CR_RESET_ENDPOINT) | TRB_CR_SLOTID_SET(pipe->slotid) | - TRB_CR_EPID_SET(pipe->epid)); -} - -/* xhci controller configure operation */ -static int xhci_controller_configure(struct xhci_s *xhci) -{ - uint32_t reg; - - /* trbs */ - xhci->devs = usb_align(XHCI_ALIGMENT, sizeof(*xhci->devs) * (xhci->slots + 1)); /* device slot */ - xhci->eseg = usb_align(XHCI_ALIGMENT, sizeof(*xhci->eseg)); /* event segment */ - xhci->cmds = usb_align(XHCI_RING_SIZE, sizeof(*xhci->cmds)); /* command ring */ - xhci->evts = usb_align(XHCI_RING_SIZE, sizeof(*xhci->evts)); /* event ring */ - - if (!xhci->devs || !xhci->cmds || !xhci->evts || !xhci->eseg) - { - USB_LOG_ERR("Allocate memory failed !!!\n"); - goto fail; - } - - memset(xhci->devs, 0U, sizeof(*xhci->devs) * (xhci->slots + 1)); - memset(xhci->cmds, 0U, sizeof(*xhci->cmds)); - memset(xhci->evts, 0U, sizeof(*xhci->evts)); - memset(xhci->eseg, 0U, sizeof(*xhci->eseg)); - - xhci->cmds->lock = usb_osal_mutex_create(); - USB_ASSERT(xhci->cmds->lock); - - reg = readl(xhci->op + XHCI_REG_OP_USBCMD); - if (reg & XHCI_REG_OP_USBCMD_RUN_STOP) /* if xHc running, stop it first */ - { - reg &= ~XHCI_REG_OP_USBCMD_RUN_STOP; - writel(xhci->op + XHCI_REG_OP_USBCMD, reg); /* stop xHc */ - - if (xhci_wait_bit(xhci->op + XHCI_REG_OP_USBSTS, - XHCI_REG_OP_USBSTS_HCH, XHCI_REG_OP_USBSTS_HCH, 32) != 0) /* wait xHc halt */ - { - goto fail; - } - } - - USB_LOG_DBG("%s: resetting\n", __func__); - - writel(xhci->op + XHCI_REG_OP_USBCMD, XHCI_REG_OP_USBCMD_HCRST); /* reset xHc */ - if (xhci_wait_bit(xhci->op + XHCI_REG_OP_USBCMD, XHCI_REG_OP_USBCMD_HCRST, 0, 1000) != 0) /* wait reset process done */ - { - goto fail; - } - - if (xhci_wait_bit(xhci->op + XHCI_REG_OP_USBSTS, XHCI_REG_OP_USBSTS_CNR, 0, 1000) != 0) /* wait until xHc ready */ - { - goto fail; - } - - writel(xhci->op + XHCI_REG_OP_CONFIG, xhci->slots); /* bit[7:0], set max num of device slot enabled */ - writeq(xhci->op + XHCI_REG_OP_DCBAAP, (uint64_t)(unsigned long)xhci->devs); /* bit[63:6] device context base address array pointer */ - writeq(xhci->op + XHCI_REG_OP_CRCR, (uint64_t)(unsigned long)xhci->cmds | 1); /* command ring pointer, cycle state = 1 */ - xhci->cmds->cs = 1; /* cycle state = 1 */ - - xhci->eseg->ptr_low = (uint32_t)((unsigned long)xhci->evts); /* event ring pointer */ -#ifdef XHCI_AARCH64 - xhci->eseg->ptr_high = (uint32_t)((unsigned long)xhci->evts >> 32U); -#else - xhci->eseg->ptr_high = 0U; -#endif - - xhci->eseg->size = XHCI_RING_ITEMS; /* items of event ring TRB */ - writel(xhci->ir + XHCI_REG_RT_IR_ERSTSZ, 1); /* bit[15:0] event ring segment table size */ - writeq(xhci->ir + XHCI_REG_RT_IR_ERDP, (uint64_t)(unsigned long)xhci->evts); /* bit[63:4] event ring dequeue pointer */ - writeq(xhci->ir + XHCI_REG_RT_IR_ERSTBA, (uint64_t)(unsigned long)xhci->eseg); /* bit[63:6] event ring segment table base addr */ - xhci->evts->cs = 1; /* cycle state = 1 */ - - reg = xhci->hcs[1]; - uint32_t spb = XHCI_REG_CAP_HCS2_MAX_SCRATCHPAD_BUFS_GET(reg); /* bit [25:21] | bit [31:27] max scratchpad buffers */ - if (spb) - { - /* reserve scratchpad buffers for xHc */ - USB_LOG_DBG("%s: setup %d scratch pad buffers.\n", __func__, spb); - uint64_t *spba = usb_align(XHCI_ALIGMENT, sizeof(*spba) * spb); /* base addr of scratchpad buffers */ - void *pad = usb_align(CONFIG_XHCI_PAGE_SIZE, CONFIG_XHCI_PAGE_SIZE * spb); /* the whole scratchpad buffers */ - if (!spba || !pad) - { - USB_LOG_ERR("Allocate memory failed !!!\n"); - usb_free(spba); - usb_free(pad); - goto fail; - } - for (uint32_t i = 0; i < spb; i++) - { - spba[i] = (uint64_t)(unsigned long)(pad + (i * CONFIG_XHCI_PAGE_SIZE)); /* assign base addr for each pad */ - } - xhci->devs[0].ptr_low = (uint32_t)((unsigned long)spba); /* bit[63:6] scratchpad buffers base addr */ -#ifdef XHCI_AARCH64 - xhci->devs[0].ptr_high = (uint32_t)((uint64_t)spba >> 32U); -#else - xhci->devs[0].ptr_high = 0U; -#endif - } - - /* enable port interrupt */ - writel(xhci->ir + XHCI_REG_RT_IR_IMOD, 500U); - reg = readl(xhci->ir + XHCI_REG_RT_IR_IMAN); - reg |= XHCI_REG_RT_IR_IMAN_IE; - writel(xhci->ir + + XHCI_REG_RT_IR_IMAN, reg); - - reg = readl(xhci->op + XHCI_REG_OP_USBCMD); - reg |= XHCI_REG_OP_USBCMD_INTE; /* enable interrupt */ - writel(xhci->op + XHCI_REG_OP_USBCMD, reg); - - USB_LOG_DBG("Start xHc ....\n"); - - reg = readl(xhci->op + XHCI_REG_OP_USBCMD); - reg |= XHCI_REG_OP_USBCMD_RUN_STOP; /* start xHc */ - writel(xhci->op + XHCI_REG_OP_USBCMD, reg); - - return 0U; /* Success */ -fail: - USB_LOG_ERR("Configure Roothub failed !!!\n"); - usb_free(xhci->eseg); - usb_free(xhci->evts); - usb_free(xhci->cmds); - usb_free(xhci->devs); - return -1; /* Failed */ -} - -static void xhci_check_xcap(struct xhci_s *xhci) -{ - if (xhci->xcap) /* read Extended Capabilities */ - { - uint32_t off; - unsigned long addr = xhci->base + xhci->xcap; /* start read ext-cap */ - - do - { - unsigned long xcap = addr; - uint32_t ports, name, cap = readl(xcap + XHCI_REG_EXT_CAP_USBSPCF_OFFSET); - switch (XHCI_REG_EXT_CAP_CAP_ID_GET(cap)) - { - case XHCI_EXT_CAP_ID_SUPPORT_PROTOCOL: /* 0x2, supported protocol */ - name = readl(xcap + XHCI_REG_EXT_CAP_USBSPCFDEF_OFFSET); - ports = readl(xcap + XHCI_REG_EXT_CAP_USBSPCFDEF2_OFFSET); - uint8_t major = XHCI_USBSPCF_MAJOR_REVERSION_GET(cap); - uint8_t minor = XHCI_USBSPCF_MINOR_REVERSION_GET(cap); - uint8_t count = XHCI_USBSPCFDEF2_COMPATIBLE_PORT_CNT_GET(ports); - uint8_t start = XHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(ports); - USB_LOG_INFO("XHCI protocol %c%c%c%c %x.%02x" - ", %d ports (offset %d), def %x\n" - , (name >> 0) & 0xff - , (name >> 8) & 0xff - , (name >> 16) & 0xff - , (name >> 24) & 0xff /* Print string 'USB' */ - , major, minor - , count, start - , ports >> 16); - if (name == XHCI_USBSPCFDEF_NAME_STRING_USB /* ASCII "USB " */) - { - if (major == 2) - { - xhci->usb2.start = start; /* USB 2.0 port range */ - xhci->usb2.count = count; - } - if (major == 3) - { - xhci->usb3.start = start; /* USB 3.0 port range */ - xhci->usb3.count = count; - } - } - break; - default: - USB_LOG_INFO("XHCI extcap 0x%x @ %p\n", - XHCI_REG_EXT_CAP_CAP_ID_GET(cap), addr); - break; - } - off = XHCI_REG_EXT_NEXT_CAP_PTR_GET(cap); - addr += off << 2; /* addr of next ext-cap */ - } - while (off > 0); - } - -} - -static int xhci_controller_setup(struct xhci_s *xhci, unsigned long baseaddr) -{ - USB_LOG_INFO("%s@0x%x\n", __func__, baseaddr); - - /* get register offset */ - xhci_setup_mmio(xhci, baseaddr); - if (xhci->version < 0x96 || xhci->version > 0x120) - { - USB_LOG_ERR("XHCI-0x%x not support.\n", xhci->version); - return -1; - } - - xhci_check_xcap(xhci); - - uint32_t pagesize = readl(xhci->op + XHCI_REG_OP_PAGESIZE); /* get page-size */ - USB_LOG_INFO("XHCI page size %d \n", (pagesize << CONFIG_XHCI_PAGE_SHIFT)); - if (CONFIG_XHCI_PAGE_SIZE != (pagesize << CONFIG_XHCI_PAGE_SHIFT)) - { - USB_LOG_ERR("XHCI driver does not support page size code %d.\n" - , pagesize << CONFIG_XHCI_PAGE_SHIFT); - return -1; - } - - USB_LOG_INFO("Config XHCI ....\n"); - if (xhci_controller_configure(xhci)) - { - USB_LOG_ERR("Init XHCI failed !!!\n"); - return -1; - } - else - { - USB_LOG_INFO("Init XHCI success !!!\n"); - } - - return 0; -} - -struct xhci_pipe *xhci_event_process(struct xhci_s *xhci) -{ - struct xhci_pipe *work_pipe = NULL; - struct xhci_ring *evts = xhci->evts; - - /* check and ack event */ - for (;;) - { - uint32_t nidx = evts->nidx; /* index of dequeue trb */ - uint32_t cs = evts->cs; /* cycle state toggle by xHc */ - struct xhci_trb *etrb = evts->ring + nidx; /* current trb */ - uint32_t control = etrb->control; /* trb control field */ - - if ((control & TRB_C) != (cs ? 1 : 0)) /* if cycle state not toggle, no events need to handle */ - { - break; - } - - /* process event on etrb */ - uint32_t evt_type = TRB_TYPE_GET(control); - uint32_t evt_cc = TRB_CC_GET(etrb->status); /* bit[31:24] completion code */ - - if (ER_PORT_STATUS_CHANGE == evt_type) - { - /* bit[31:24] port id, the port num of root hub port that generated this event */ - uint32_t port = TRB_PORT_ID_GET(etrb->ptr_low) - 1; - uint32_t portsc = xhci_readl_port(xhci, port, XHCI_REG_OP_PORTS_PORTSC); /* Read status */ - - xhci_print_port_state(__func__, port, portsc); - if (portsc & XHCI_REG_OP_PORTS_PORTSC_CSC) - { - usbh_roothub_thread_wakeup(port + 1); /* wakeup when connection status changed */ - } - } - else if ((ER_COMMAND_COMPLETE == evt_type) || (ER_TRANSFER_COMPLETE == evt_type)) - { - struct xhci_trb *rtrb = (void *)(unsigned long)etrb->ptr_low; - struct xhci_ring *ring = XHCI_RING(rtrb); /* to align addr is ring base */ - struct xhci_trb *evt = &ring->evt; /* first event trb */ - uint32_t eidx = rtrb - ring->ring + 1; /* calculate current evt trb index */ - - memcpy(evt, etrb, sizeof(*etrb)); /* copy current trb to cmd/transfer ring */ - ring->eidx = eidx; - - if (ER_COMMAND_COMPLETE == evt_type) - { - work_pipe = (struct xhci_pipe *)cur_cmd_pipe; - } - else if (ER_TRANSFER_COMPLETE == evt_type) - { - /* xhci_pipe begin with reqs ring, therefore we get pipe instance from reqs ring */ - work_pipe = (struct xhci_pipe *)(void *)ring; - } - - if (work_pipe) - { - if (work_pipe->waiter) - { - work_pipe->waiter = false; - usb_osal_sem_give(work_pipe->waitsem); - } - - if (work_pipe->urb) - { - struct usbh_urb *cur_urb = work_pipe->urb; - cur_urb->errorcode = evt_cc; - /* bit [23:0] TRB Transfer length, residual number of bytes not transferred - for OUT, is the value of (len of trb) - (data bytes transmitted), '0' means successful - for IN, is the value of (len of trb) - (data bytes received), - if cc is Short Packet, value is the diff between expected trans size and actual recv bytes - if cc is other error, value is the diff between expected trans size and actual recv bytes */ - cur_urb->actual_length += cur_urb->transfer_buffer_length - - TRB_TR_TRANS_LEN_SET(evt->status); /* bit [23:0] */ - } - } - } - else - { - USB_LOG_ERR("%s: Unknown event, type %d, cc %d.\n", - __func__, evt_type, evt_cc); - } - - /* move ring index, notify xhci */ - nidx++; /* head to next trb */ - if (nidx == XHCI_RING_ITEMS) - { - nidx = 0; /* roll-back if reach end of list */ - cs = cs ? 0 : 1; - evts->cs = cs; /* sw toggle cycle state */ - } - evts->nidx = nidx; - uint64_t erdp = (uint64_t)(unsigned long)(evts->ring + nidx); - writeq(xhci->ir + XHCI_REG_RT_IR_ERDP, erdp | XHCI_REG_RT_IR_ERDP_EHB); /* bit[63:4] update current event ring dequeue pointer */ - } - - return work_pipe; -} - -static struct xhci_inctx *xhci_alloc_inctx_config_ep(struct xhci_s *xhci, struct usbh_hubport *hport, int maxepid) -{ - USB_ASSERT(xhci && hport); - - int size = (sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM) << xhci->context64; - struct xhci_inctx *in = usb_align(XHCI_INCTX_ALIGMENT << xhci->context64, size); - int devport = hport->port; - - if (!in) - { - USB_LOG_ERR("Allocate memory failed !!!\n"); - return NULL; - } - memset(in, 0, size); - - struct xhci_slotctx *slot = (void *)&in[1 << xhci->context64]; /* slot context */ - slot->ctx[0] |= XHCI_SLOTCTX_0_MAX_EPID_SET(maxepid); /* bit[31:27] index of the last valid ep context */ - slot->ctx[0] |= XHCI_SLOTCTX_0_SPEED_SET(speed_to_xhci[hport->speed]); /* bit[23:20] speed of this device */ - - /* Set high-speed hub flags. */ - struct usbh_hub *hubdev = hport->parent; - USB_ASSERT(hubdev); - if (!hubdev->is_roothub) /* if device is not under roothub */ - { - /* Is this the first high-speed hub with a non-high-speed device following in chain */ - struct usbh_hubport *hub_port = hubdev->parent; - if (hport->speed == USB_SPEED_LOW || hport->speed == USB_SPEED_FULL) - { - if (hub_port->speed == USB_SPEED_HIGH) - { - slot->ctx[2] |= XHCI_SLOTCTX_2_HUB_SLOT_SET(hub_port->dev_addr); /* bit[7:0] parent hub slot id */ - slot->ctx[2] |= XHCI_SLOTCTX_2_HUB_PORT_SET(hport->port); /* bit[15:8] parent port num */ - slot->ctx[0] |= XHCI_SLOTCTX_0_MULTI_TT; - } - else - { - struct xhci_slotctx *hslot = (void *)(unsigned long)xhci->devs[hub_port->dev_addr].ptr_low; - slot->ctx[2] = hslot->ctx[2]; /* 08h, copy hub slot context */ - } - } - - uint32_t route = 0U; - do - { - route <<= 4; - route |= (hport->port) & 0xf; /* record port for each tire */ - - hport = hubdev->parent; - hubdev = hport->parent; - } - while ((!hubdev) || (!hubdev->is_roothub)); - - slot->ctx[0] |= XHCI_SLOTCTX_0_ROUTE_SET(route); /* bit[19:0] route string, max 5 tires */ - } - - /* refer to spec. Ports are numbered from 1 to MaxPorts. */ - slot->ctx[1] |= XHCI_SLOTCTX_1_ROOT_PORT_SET(hport->port); /* bit[23:16] root hub port number */ - - return in; -} - -/* allocate input context to update max packet size of endpoint-0 */ -static struct xhci_inctx *xhci_alloc_inctx_set_ep_mps(struct xhci_s *xhci, uint32_t slotid, uint16_t ep_mps) -{ - USB_ASSERT(xhci); - - int size = (sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM) << xhci->context64; - struct xhci_inctx *in = usb_align(XHCI_INCTX_ALIGMENT << xhci->context64, size); - if (!in) - { - USB_LOG_ERR("Allocate memory failed !!!\n"); - return NULL; - } - memset(in, 0, size); - - /* copy 32 entries after inctx controller field from devctx to inctx */ -#ifdef XHCI_AARCH64 - struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[slotid].ptr_high << 32U) | - ((uint64_t)xhci->devs[slotid].ptr_low)); -#else - struct xhci_slotctx *devctx = (struct xhci_slotctx *)(unsigned long)xhci->devs[slotid].ptr_low; -#endif - struct xhci_slotctx *input_devctx = (void *)&in[1 << xhci->context64]; - - memcpy(input_devctx, devctx, XHCI_SLOTCTX_ENTRY_NUM * sizeof(struct xhci_slotctx)); - - /* - input ctrl context - slot - ep-0 context, offset = 2 * xhci->context64, e.g, for 64 bit (0x40), offset = 0x80 - */ - struct xhci_epctx *ep = (void *)&in[2 << xhci->context64]; /* ep context */ - ep->ctx[1] |= XHCI_EPCTX_1_MPS_SET(ep_mps); /* bit[31:16] update maxpacket size */ - - return in; -} - -static struct xhci_inctx *xhci_alloc_inctx_enable_hub_func(struct xhci_s *xhci, uint32_t slotid, struct xhci_hubinfo *hub_info) -{ - USB_ASSERT(xhci); - - int size = (sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM) << xhci->context64; - struct xhci_inctx *in = usb_align(XHCI_INCTX_ALIGMENT << xhci->context64, size); - if (!in) - { - USB_LOG_ERR("Allocate memory failed !!!\n"); - return NULL; - } - memset(in, 0, size); - - /* copy 32 entries after inctx controller field from devctx to inctx */ -#ifdef XHCI_AARCH64 - struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[slotid].ptr_high << 32U) | - ((uint64_t)xhci->devs[slotid].ptr_low)); -#else - struct xhci_slotctx *devctx = (struct xhci_slotctx *)(unsigned long)xhci->devs[slotid].ptr_low; -#endif - struct xhci_slotctx *input_devctx = (void *)&in[1 << xhci->context64]; - - memcpy(input_devctx, devctx, XHCI_SLOTCTX_ENTRY_NUM * sizeof(struct xhci_slotctx)); - - input_devctx->ctx[0] |= XHCI_SLOTCTX_0_MAX_EPID_SET(XHCI_SLOTCTX_ENTRY_NUM); - input_devctx->ctx[0] |= XHCI_SLOTCTX_0_HUB; - input_devctx->ctx[0] |= XHCI_SLOTCTX_0_SPEED_SET(hub_info->speed); - input_devctx->ctx[1] |= XHCI_SLOTCTX_1_PORTS_NUM_SET(hub_info->num_of_ports); - - if (hub_info->speed == USB_SPEED_HIGH) - { - input_devctx->ctx[0] |= hub_info->has_multiple_tts ? XHCI_SLOTCTX_0_MULTI_TT : 0U; - input_devctx->ctx[2] |= XHCI_SLOTCTX_2_TTT_THINK_SET(hub_info->tt_think_time); - } - - return in; -} - -/* Submit a USB "setup" message request to the pipe's ring */ -static void xhci_xfer_setup(struct xhci_s *xhci, struct xhci_pipe *pipe, - bool dir_in, void *cmd, void *data, int datalen) -{ - /* SETUP TRB ctrl, bit[15:10] trb type - bit[6] Immediate Data (IDT), parameters take effect - bit[17:16] Transfer type, 2 = OUT Data, 3 = IN Data */ - uint32_t trans_type = (datalen > 0) ? (dir_in ? TRB_TR_IN_DATA : TRB_TR_OUT_DATA) : TRB_TR_NO_DATA; - xhci_trb_queue(&pipe->reqs, cmd, USB_SIZEOF_SETUP_PACKET, - TRB_TYPE_SET(TR_SETUP) | TRB_TR_IDT | TRB_TR_TYPE_SET(trans_type)); - - /* DATA TRB ctrl, bit[15:10] trb type - bit[16] Direction, 0 = OUT, 1 = IN */ - if (datalen) - { - xhci_trb_queue(&pipe->reqs, data, datalen, - TRB_TYPE_SET(TR_DATA) | (dir_in ? TRB_TR_DIR : 0)); - } - - /* STATUS TRB ctrl, bit[5] Interrupt On Completion (IOC). - bit[16] Direction, 0 = OUT, 1 = IN */ - xhci_trb_queue(&pipe->reqs, NULL, 0, - TRB_TYPE_SET(TR_STATUS) | TRB_TR_IOC | ((dir_in ? 0 : TRB_TR_DIR))); - - /* pass command trb to hardware */ - DSB(); - - /* notfiy xHc that device slot - epid */ - xhci_doorbell(xhci, pipe->slotid, pipe->epid); -} - -/* Submit a USB transfer request to the pipe's ring */ -static void xhci_xfer_normal(struct xhci_s *xhci, struct xhci_pipe *pipe, - void *data, int datalen) -{ - /* Normal trb, used in bulk and interrupt transfer */ - xhci_trb_queue(&pipe->reqs, data, datalen, TRB_TYPE_SET(TR_NORMAL) | TRB_TR_IOC); - - /* pass command trb to hardware */ - DSB(); - - xhci_doorbell(xhci, pipe->slotid, pipe->epid); -} - -/* -------------------------------------------------------------- */ -/* port functions */ -static struct xhci_s xhci_host; - -__WEAK void usb_hc_low_level_init(void) -{ -} - -__WEAK void *usb_hc_malloc(size_t size) -{ - return NULL; -} - -__WEAK void *usb_hc_malloc_align(size_t align, size_t size) -{ - return NULL; -} - -__WEAK void usb_hc_free() -{ -} - -/* one may get xhci register base address by PCIe bus emuration */ -__WEAK unsigned long usb_hc_get_register_base(void) -{ - return 0U; -} - -/* xhci hardware init */ -int usb_hc_init(void) -{ - usb_hc_low_level_init(); /* set gic and memp */ - - memset(&xhci_host, 0, sizeof(xhci_host)); - if (xhci_controller_setup(&xhci_host, usb_hc_get_register_base())) - { - return -1; - } - - return 0; -} - -/* turn usb para into xhci para */ -int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf) -{ - uint8_t nports; - uint8_t port; - uint32_t portsc; - uint32_t status; - int ret = 0; - struct xhci_s *xhci = &xhci_host; - - nports = CONFIG_USBHOST_MAX_RHPORTS; - - port = setup->wIndex; - if (setup->bmRequestType & USB_REQUEST_RECIPIENT_DEVICE) - { - switch (setup->bRequest) - { - case HUB_REQUEST_CLEAR_FEATURE: - switch (setup->wValue) - { - case HUB_FEATURE_HUB_C_LOCALPOWER: - break; - case HUB_FEATURE_HUB_C_OVERCURRENT: - break; - default: - return -EPIPE; - } - break; - case HUB_REQUEST_SET_FEATURE: - switch (setup->wValue) - { - case HUB_FEATURE_HUB_C_LOCALPOWER: - break; - case HUB_FEATURE_HUB_C_OVERCURRENT: - break; - default: - return -EPIPE; - } - break; - case HUB_REQUEST_GET_DESCRIPTOR: - USB_LOG_ERR("HUB_REQUEST_GET_DESCRIPTOR not implmented.\n"); - break; - case HUB_REQUEST_GET_STATUS: - memset(buf, 0, 4); - break; - default: - break; - } - } - else if (setup->bmRequestType & USB_REQUEST_RECIPIENT_OTHER) - { - switch (setup->bRequest) - { - case HUB_REQUEST_CLEAR_FEATURE: - if (!port || port > nports) - { - return -EPIPE; - } - - portsc = xhci_readl_port(xhci, port - 1, XHCI_REG_OP_PORTS_PORTSC); - - switch (setup->wValue) - { - case HUB_PORT_FEATURE_ENABLE: - break; - case HUB_PORT_FEATURE_SUSPEND: - case HUB_PORT_FEATURE_C_SUSPEND: - break; - case HUB_PORT_FEATURE_POWER: - break; - case HUB_PORT_FEATURE_C_CONNECTION: - portsc |= XHCI_REG_OP_PORTS_PORTSC_CSC; - break; - case HUB_PORT_FEATURE_C_ENABLE: - portsc |= XHCI_REG_OP_PORTS_PORTSC_PEC; - break; - case HUB_PORT_FEATURE_C_OVER_CURREN: - break; - case HUB_PORT_FEATURE_C_RESET: - break; - default: - return -EPIPE; - } - - uint32_t pclear = portsc & XHCI_REG_OP_PORTS_PORTSC_RW_MASK; - xhci_writel_port(xhci, port - 1, XHCI_REG_OP_PORTS_PORTSC, pclear); /* clear port status */ - - break; - case HUB_REQUEST_SET_FEATURE: - if (!port || port > nports) - { - return -EPIPE; - } - - switch (setup->wValue) - { - case HUB_PORT_FEATURE_SUSPEND: - break; - case HUB_PORT_FEATURE_POWER: - break; - case HUB_PORT_FEATURE_RESET: - ret = xhci_hub_reset(xhci, port - 1); - break; - - default: - return -EPIPE; - } - break; - case HUB_REQUEST_GET_STATUS: - if (!port || port > nports) - { - return -EPIPE; - } - - portsc = xhci_readl_port(xhci, port - 1, XHCI_REG_OP_PORTS_PORTSC); - - status = 0; - if (portsc & XHCI_REG_OP_PORTS_PORTSC_CSC) - { - /* Port connection status changed */ - status |= (1 << HUB_PORT_FEATURE_C_CONNECTION); - } - - if (portsc & XHCI_REG_OP_PORTS_PORTSC_PEC) - { - /* Port enabled status changed */ - status |= (1 << HUB_PORT_FEATURE_C_ENABLE); - } - - if (portsc & XHCI_REG_OP_PORTS_PORTSC_OCC) - { - /* Port status changed due to over-current */ - status |= (1 << HUB_PORT_FEATURE_C_OVER_CURREN); - } - - if (portsc & XHCI_REG_OP_PORTS_PORTSC_CCS) - { - /* Port connected */ - status |= (1 << HUB_PORT_FEATURE_CONNECTION); - } - - if (portsc & XHCI_REG_OP_PORTS_PORTSC_PED) - { - /* Port enabled */ - status |= (1 << HUB_PORT_FEATURE_ENABLE); - - const int speed = speed_from_xhci[XHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(portsc)]; - if (speed == USB_SPEED_LOW) - { - status |= (1 << HUB_PORT_FEATURE_LOWSPEED); - } - else if ((speed == USB_SPEED_HIGH) || (speed == USB_SPEED_SUPER) || - (speed == USB_SPEED_FULL)) - { - status |= (1 << HUB_PORT_FEATURE_HIGHSPEED); - } - } - - if (portsc & XHCI_REG_OP_PORTS_PORTSC_OCA) - { - /* Over-current condition */ - status |= (1 << HUB_PORT_FEATURE_OVERCURRENT); - } - - if (portsc & XHCI_REG_OP_PORTS_PORTSC_PR) - { - /* Reset is in progress */ - status |= (1 << HUB_PORT_FEATURE_RESET); - } - - if (portsc & XHCI_REG_OP_PORTS_PORTSC_PP) - { - /* Port is not power off */ - status |= (1 << HUB_PORT_FEATURE_POWER); - } - memcpy(buf, &status, 4); - break; - default: - break; - } - } - - return ret; -} - -int usbh_get_xhci_devaddr(usbh_pipe_t *pipe) -{ - struct xhci_pipe *ppipe = (struct xhci_pipe *)pipe; - return ppipe->slotid; -} - -int usbh_ep0_pipe_reconfigure(usbh_pipe_t pipe, uint8_t dev_addr, uint8_t ep_mps, uint8_t speed) -{ - int ret = 0; - struct xhci_s *xhci = &xhci_host; - struct xhci_pipe *ppipe = (struct xhci_pipe *)pipe; - int oldmaxpacket = ppipe->maxpacket; /* original max packetsz */ - - if (ep_mps != oldmaxpacket) - { - /* maxpacket has changed on control endpoint - update controller. */ - USB_LOG_DBG("Update ep0 mps from %d to %d.\r\n", oldmaxpacket, ep_mps); - struct xhci_inctx *in = xhci_alloc_inctx_set_ep_mps(xhci, ppipe->slotid, ep_mps); /* allocate input context */ - if (!in) - { - return -1; - } - - in->add = (1 << 1); /* update ep0 context */ - in->del = (1 << 1); - - usb_hc_dcache_invalidate(in, sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM); - xhci_dump_input_ctx(xhci, in); - - int cc = xhci_cmd_evaluate_context(xhci, ppipe, in); - if (cc != CC_SUCCESS) - { - USB_LOG_ERR("%s: reconf ctl endpoint: failed (cc %d) (mps %d => %d).\n", - __func__, cc, oldmaxpacket, ep_mps); - ret = -1; - } - else - { - ppipe->maxpacket = ep_mps; /* mps update success */ - } - - usb_free(in); - } - - return ret; -} - -static int usbh_get_period(int speed, int interval) -{ - if (speed != USB_SPEED_HIGH) - { - /* fls - find last (most-significant) bit set */ - return (interval <= 4) ? 0 : fls(interval); - } - - return (interval <= 4) ? 0 : interval - 4; -} - -int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg) -{ - int ret = 0; - struct xhci_s *xhci = &xhci_host; - struct xhci_pipe *ppipe = usb_align(XHCI_RING_SIZE, sizeof(struct xhci_pipe)); - struct usbh_hubport *hport = ep_cfg->hport; - - uint32_t epid = 0U; - uint8_t eptype = 0U; - - if (ppipe == NULL) - { - return -ENOMEM; - } - - memset(ppipe, 0, sizeof(struct xhci_pipe)); - - ppipe->epaddr = ep_cfg->ep_addr; - if (ep_cfg->ep_addr == 0) - { - epid = 1; /* ep0, ep_id = 1 */ - } - else - { - /* refer to spec. Figure 4-4: Endpoint Context Addressing - ep0 = 1, ep1-out = 2, ep1-in = 3, ... ep15-out = 30, ep15-in = 31 */ - epid = (ep_cfg->ep_addr & 0x0f) * 2; - epid += (ep_cfg->ep_addr & USB_EP_DIR_IN) ? 1 : 0; - } - ppipe->epid = epid; - eptype = ep_cfg->ep_type; - ppipe->eptype = eptype; - ppipe->maxpacket = ep_cfg->ep_mps; - ppipe->interval = ep_cfg->ep_interval; - ppipe->speed = ep_cfg->hport->speed; - ppipe->hport = ep_cfg->hport; - ppipe->waitsem = usb_osal_sem_create(0); - ppipe->waiter = false; - ppipe->urb = NULL; - - USB_LOG_DBG("%s epid = %d, epaddr = 0x%x eptype = %d, mps = %d, speed = %d, urb = %p\n", - __func__, ppipe->epid, ppipe->epaddr, ppipe->eptype, ppipe->maxpacket, - ppipe->speed, ppipe->urb); - - ppipe->reqs.cs = 1; /* cycle state = 1 */ - - /* Allocate input context and initialize endpoint info. */ - struct xhci_inctx *in = xhci_alloc_inctx_config_ep(xhci, hport, epid); - if (!in) - { - ret = -1; - goto fail; - } - - if (ppipe->epid == 1) - { - /* address device */ - in->add = 0x01 /* Slot Context */ | (1 << epid); /* EP Context */ - } - else - { - /* config endpoint */ - in->add = (1 << epid); - in->del = (1 << epid); - } - - struct xhci_epctx *ep = (void *)&in[(epid + 1) << xhci->context64]; - if (eptype == USB_ENDPOINT_TYPE_INTERRUPT) - { - ep->ctx[0] = XHCI_EPCTX_0_INTERVAL_SET(usbh_get_period(ppipe->speed, ppipe->interval) + 3); /* bit[23:16] for interrupt ep, set interval to control interrupt period */ - } - - /* - Value Endpoint Type Direction - 0 Not Valid N/A - 1 Isoch Out - 2 Bulk Out - 3 Interrupt Out - 4 Control Bidirectional - 5 Isoch In - 6 Bulk In - 7 Interrupt In - */ - ep->ctx[1] |= eptype << 3; /* bit[5:3] endpoint type */ - if (ppipe->epaddr & USB_EP_DIR_IN || eptype == USB_ENDPOINT_TYPE_CONTROL) - { - ep->ctx[1] |= 1 << 5; /* ep_type 4 ~ 7 */ - } - - ep->ctx[1] |= XHCI_EPCTX_1_MPS_SET(ppipe->maxpacket); /* bit[31:16] max packet size */ - if (eptype == USB_ENDPOINT_TYPE_INTERRUPT) - { - ep->ctx[1] |= XHCI_EPCTX_1_CERR_SET(3); - } - - ep->deq_low = (uint32_t)((unsigned long)&ppipe->reqs.ring[0]); /* bit[63:4] tr dequeue pointer */ - ep->deq_low |= 1; /* bit[0] dequeue cycle state */ -#ifdef XHCI_AARCH64 - ep->deq_high = (uint32_t)((uint64_t)&ppipe->reqs.ring[0] >> 32U); -#else - ep->deq_high = 0U; -#endif - - if (eptype == USB_ENDPOINT_TYPE_BULK) - { - ep->length = XHCI_EPCTX_AVE_TRB_LEN_SET(256U); /* bit[15:0] average trb length */ - - } - else if (eptype == USB_ENDPOINT_TYPE_INTERRUPT) - { - ep->length = XHCI_EPCTX_AVE_TRB_LEN_SET(16U) | /* bit[15:0] average trb length */ - XHCI_EPCTX_MAX_ESIT_SET(ppipe->maxpacket); /* bit[31:16] max ESIT payload */ - } - - if (ppipe->epid == 1) /* when allocate ep-0, allocate device first */ - { - struct usbh_hub *hubdev = hport->parent; - if (!hubdev->is_roothub) - { - /* make sure parent hub has been configured */ - struct usbh_hubport *hubport = hubdev->parent; - struct xhci_pipe *hubep0 = (struct xhci_pipe *)hubport->ep0; - struct xhci_slotctx *hdslot = (void *)(unsigned long)xhci->devs[hubep0->slotid].ptr_low; - if (XHCI_SLOTCTX_3_SLOT_STATE_GET(hdslot->ctx[3]) != XHCI_SLOT_CONFIG) /* bit [31:27] slot state, 3 means configured */ - { - USB_LOG_ERR("%s parent hub-%d not yet configured.\n", __func__, hubep0->slotid); - ret = -1; - goto fail; - } - } - - /* enable slot. */ - size_t size = (sizeof(struct xhci_slotctx) * XHCI_SLOTCTX_ENTRY_NUM) << xhci->context64; - struct xhci_slotctx *dev = usb_align(XHCI_SLOTCTX_ALIGMENT << xhci->context64, size); - if (!dev) - { - USB_LOG_ERR("Allocate memory failed !!!\n"); - ret = -1; - goto fail; - } - - /* send nop command to test if command ring ok */ - for (int i = 0 ; i < 3; ++i) - { - int cc = xhci_cmd_nop(xhci, ppipe); - if (cc != CC_SUCCESS) - { - USB_LOG_ERR("%s: nop: failed\n", __func__); - usb_free(dev); - ret = -1; - goto fail; - } - } - - int slotid = xhci_cmd_enable_slot(xhci, ppipe); /* get slot-id */ - if (slotid < 0) - { - USB_LOG_ERR("%s: enable slot: failed.\n", __func__); - usb_free(dev); - ret = -1; - goto fail; - } - - ppipe->slotid = slotid; - USB_LOG_DBG("%s: enable slot: got slotid %d.\n", __func__, ppipe->slotid); - memset(dev, 0, size); - xhci->devs[slotid].ptr_low = (uint32_t)(unsigned long)dev; /* DCBAA */ -#ifdef XHCI_AARCH64 - xhci->devs[slotid].ptr_high = (uint32_t)((uint64_t)dev >> 32U); -#else - xhci->devs[slotid].ptr_high = 0; -#endif - - usb_hc_dcache_invalidate(in, sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM); - - /* Send set_address command. */ - int cc = xhci_cmd_address_device(xhci, ppipe, in); - if (cc != CC_SUCCESS) - { - USB_LOG_ERR("%s: address device: failed (cc %d).\n", __func__, cc); - cc = xhci_cmd_disable_slot(xhci, ppipe); - if (cc != CC_SUCCESS) - { - USB_LOG_ERR("%s: disable failed (cc %d).\n", __func__, cc); - ret = -1; - goto fail; - } - - xhci->devs[slotid].ptr_low = 0; /* free DCBAA */ - xhci->devs[slotid].ptr_high = 0; - usb_free(dev); - - ret = -1; - goto fail; - } - } - else /* when allocate other ep, config ep */ - { - struct xhci_pipe *defpipe = (struct xhci_pipe *)hport->ep0; - ppipe->slotid = defpipe->slotid; - - /* handle hub device */ - struct usb_device_descriptor *device_desc = &hport->device_desc; - if (device_desc->bDeviceClass == USB_DEVICE_CLASS_HUB) - { - /* enable hub function */ - struct usb_interface_descriptor *intf = &hport->config.intf[0U].altsetting[0U].intf_desc; - struct usbh_hub *this_hub = hport->config.intf[0U].priv; - USB_ASSERT(this_hub); - struct usb_hub_descriptor *hub_desc = &this_hub->hub_desc; - struct xhci_hubinfo hub_info = {0}; - -#define HUB_TT_THINK_TIME(reg) (((reg) >> 5) & 3) - - hub_info.num_of_ports = hub_desc->bNbrPorts; - hub_info.has_multiple_tts = (intf->bInterfaceProtocol == 2); - hub_info.tt_think_time = ((hub_desc->wHubCharacteristics) & HUB_CHAR_TTTT_MASK) >> HUB_CHAR_TTTT_SHIFT; - hub_info.speed = hport->speed; - - USB_LOG_INFO("Enable hub function, num_of_ports=%d, multi_tt=%d, tt_think=%d, speed=%d.\r\n", - hub_info.num_of_ports, - hub_info.has_multiple_tts, - hub_info.tt_think_time, - hub_info.speed); - struct xhci_inctx *inctx_hub = xhci_alloc_inctx_enable_hub_func(xhci, ppipe->slotid, &hub_info); - - inctx_hub->add = 0x01; - inctx_hub->del = 0x01; - - usb_hc_dcache_invalidate(in, sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM); - if (CC_SUCCESS != xhci_cmd_evaluate_context(xhci, ppipe, inctx_hub)) - { - USB_LOG_ERR("Cannot enable hub function.\r\n"); - } - - usb_free(inctx_hub); - } - - /* reset if endpoint is not running */ -#ifdef XHCI_AARCH64 - struct xhci_slotctx *devctx = (struct xhci_slotctx *)(((uint64_t)xhci->devs[ppipe->slotid].ptr_high << 32U) | - ((uint64_t)xhci->devs[ppipe->slotid].ptr_low)); -#else - struct xhci_slotctx *devctx = (struct xhci_slotctx *)(unsigned long)xhci->devs[ppipe->slotid].ptr_low; -#endif - struct xhci_epctx *epctx = (void *)&devctx[epid << xhci->context64]; /* ep0 context */ - uint32_t epstate = XHCI_EPCTX_0_EP_STATE_GET(epctx->ctx[0]); - int cc; - - - /* Reset endpoint in case it is not running */ - if (epstate > 1) - { - cc = xhci_cmd_reset_endpoint(xhci, ppipe); - if (cc != CC_SUCCESS) - { - USB_LOG_ERR("%s: reset endpoint: failed (cc %d).\n", __func__, cc); - ret = -1; - goto fail; - } - } - - usb_hc_dcache_invalidate(in, sizeof(struct xhci_inctx) * XHCI_INCTX_ENTRY_NUM); - xhci_dump_input_ctx(xhci, in); - - /* Send configure command. */ - cc = xhci_cmd_configure_endpoint(xhci, ppipe, in, false); - if (cc != CC_SUCCESS) - { - epctx = (void *)&devctx[epid << xhci->context64]; /* ep0 context */ - epstate = XHCI_EPCTX_0_EP_STATE_GET(epctx->ctx[0]); - USB_LOG_ERR("%s: configure endpoint: failed (cc %d, epstate %d).\n", __func__, cc, epstate); - ret = -1; - goto fail; - } - } - - *pipe = (usbh_pipe_t)ppipe; - -fail: - usb_free(in); - return ret; -} - -int usbh_pipe_free(usbh_pipe_t pipe) -{ - int ret = 0; - struct xhci_s *xhci = &xhci_host; - struct xhci_pipe *ppipe = (struct xhci_pipe *)pipe; - - if (!ppipe) - { - return -EINVAL; - } - - struct usbh_urb *urb = ppipe->urb; - - if (urb) - { - usbh_kill_urb(urb); - } - - return -1; -} - -int usbh_submit_urb(struct usbh_urb *urb) -{ - int ret = 0; - if (!urb || !urb->pipe) - { - return -EINVAL; - } - - struct xhci_s *xhci = &xhci_host; - struct xhci_pipe *ppipe = urb->pipe; - struct usb_setup_packet *setup = urb->setup; - size_t flags; - - flags = usb_osal_enter_critical_section(); - - urb->errorcode = -EBUSY; - urb->actual_length = 0U; - - ppipe->waiter = false; - ppipe->urb = urb; - ppipe->timeout = urb->timeout; - - if (ppipe->timeout > 0) - { - ppipe->waiter = true; - } - - usb_osal_leave_critical_section(flags); - switch (ppipe->eptype) - { - case USB_ENDPOINT_TYPE_CONTROL: - USB_ASSERT(setup); - if (setup->bRequest == USB_REQUEST_SET_ADDRESS) - { - /* Set address command sent during xhci_alloc_pipe. */ - goto skip_req; - } - - USB_LOG_DBG("%s request-%d.\n", __func__, setup->bRequest); - /* send setup in/out for command */ - xhci_xfer_setup(xhci, ppipe, setup->bmRequestType & USB_EP_DIR_IN, (void *)setup, - urb->transfer_buffer, urb->transfer_buffer_length); - break; - case USB_ENDPOINT_TYPE_INTERRUPT: - case USB_ENDPOINT_TYPE_BULK: - xhci_xfer_normal(xhci, ppipe, urb->transfer_buffer, urb->transfer_buffer_length); - break; - default: - USB_ASSERT(0U); - break; - } - - /* wait all ring handled by xHc */ - int cc = xhci_event_wait(xhci, ppipe, &ppipe->reqs); - if ((cc != CC_SUCCESS) && - !((cc == CC_TIMEOUT) && (ppipe->eptype == USB_ENDPOINT_TYPE_INTERRUPT))) - { - /* ignore transfer timeout for interrupt type */ - USB_LOG_ERR("%s: xfer failed (cc %d).\n", __func__, cc); - ret = -1; - urb->errorcode = cc; - goto errout_timeout; - } - -skip_req: -errout_timeout: - /* Timeout will run here */ - usbh_kill_urb(urb); - return ret; -} - -int usbh_kill_urb(struct usbh_urb *urb) -{ - return 0; -} - -void USBH_IRQHandler(void) -{ - uint32_t reg, status; - struct xhci_s *xhci = &xhci_host; - struct xhci_pipe *work_pipe = NULL; - - USB_LOG_DBG("%s\n", __func__); - - status = readl(xhci->op + XHCI_REG_OP_USBSTS); - status |= XHCI_REG_OP_USBSTS_EINT; /* clear interrupt status */ - writel(xhci->op + XHCI_REG_OP_USBSTS, status); - - reg = readl(xhci->ir + XHCI_REG_RT_IR_IMAN); - reg |= XHCI_REG_RT_IR_IMAN_IP; /* ack interrupt */ - writel(xhci->ir + XHCI_REG_RT_IR_IMAN, reg); - - work_pipe = xhci_event_process(xhci); - - /* handle callbacks in interrupt */ - if ((work_pipe) && (work_pipe->urb)) - { - struct usbh_urb *cur_urb = work_pipe->urb; - if (cur_urb->complete) - { - if (cur_urb->errorcode < 0) - { - cur_urb->complete(cur_urb->arg, cur_urb->errorcode); - } - else - { - cur_urb->complete(cur_urb->arg, cur_urb->actual_length); - } - } - } - - USB_LOG_DBG("%s exit.\n", __func__); - return; -} \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/port/xhci/usb_hc_xhci.h b/third-party/cherryusb-0.7.0/port/xhci/usb_hc_xhci.h deleted file mode 100644 index 869944a584c222609658454e796bb31bc6a64d3d..0000000000000000000000000000000000000000 --- a/third-party/cherryusb-0.7.0/port/xhci/usb_hc_xhci.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: usb_hc_xhci.h - * Date: 2022-07-19 09:26:25 - * LastEditTime: 2022-07-19 09:26:25 - * Description:  This file is for xhci data structure definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/9/19 init commit - */ -#ifndef USB_HC_XHCI_H -#define USB_HC_XHCI_H - -/***************************** Include Files *********************************/ -#include "usbh_core.h" - -/************************** Constant Definitions *****************************/ - -/************************** Type Definitions *****************************/ -/* slot context */ -#ifdef __cplusplus -extern "C" -{ -#endif - -struct xhci_slotctx -{ - uint32_t ctx[4]; -#define XHCI_SLOTCTX_0_ROUTE_SET(route) XHCI32_SET_BITS(route, 19, 0) -#define XHCI_SLOTCTX_0_ROUTE_GET(route) XHCI32_GET_BITS(route, 19, 0) -#define XHCI_SLOTCTX_0_MAX_EPID_SET(maxid) XHCI32_SET_BITS(maxid, 31, 27) -#define XHCI_SLOTCTX_0_SPEED_SET(speed) XHCI32_SET_BITS(speed, 23, 20) -#define XHCI_SLOTCTX_0_MULTI_TT (1 << 25U) -#define XHCI_SLOTCTX_0_HUB (1 << 26U) - -#define XHCI_SLOTCTX_1_ROOT_PORT_GET(val) XHCI32_GET_BITS(val, 23, 16) -#define XHCI_SLOTCTX_1_ROOT_PORT_SET(port) XHCI32_SET_BITS(port, 23, 16) -#define XHCI_SLOTCTX_1_PORTS_NUM_SET(ports) XHCI32_SET_BITS(ports, 31, 24) -#define XHCI_SLOTCTX_1_PORTS_NUM_GET(val) XHCI32_GET_BITS(val, 31, 24) - -#define XHCI_SLOTCTX_2_HUB_SLOT_SET(slot) XHCI32_SET_BITS(slot, 7, 0) -#define XHCI_SLOTCTX_2_HUB_SLOT_GET(slot) XHCI32_GET_BITS(slot, 7, 0) -#define XHCI_SLOTCTX_2_HUB_PORT_SET(port) XHCI32_SET_BITS(port, 15, 8) -#define XHCI_SLOTCTX_2_HUB_PORT_GET(port) XHCI32_GET_BITS(port, 15, 8) -#define XHCI_SLOTCTX_2_TTT_THINK_SET(ttt) XHCI32_SET_BITS(ttt, 17, 16) - -#define XHCI_SLOTCTX_3_SLOT_STATE_GET(ctx) XHCI32_GET_BITS(ctx, 31, 27) - uint32_t reserved_01[4]; -#define XHCI_SLOTCTX_ENTRY_NUM 32U -#define XHCI_SLOTCTX_ALIGMENT 1024U -} __PACKED; - -enum xhci_slot_state -{ - XHCI_SLOT_DEFAULT = 1, - XHCI_SLOT_ADDRESS = 2, - XHCI_SLOT_CONFIG = 3 -}; - -/* endpoint context */ -struct xhci_epctx -{ - uint32_t ctx[2]; -#define XHCI_EPCTX_0_EP_STATE_GET(ctx) XHCI32_GET_BITS(ctx, 2, 0) -#define XHCI_EPCTX_0_INTERVAL_SET(interval) XHCI32_SET_BITS(interval, 23, 16) -#define XHCI_EPCTX_1_MPS_SET(mps) XHCI32_SET_BITS(mps, 31, 16) -#define XHCI_EPCTX_1_MPS_GET(ctx) XHCI32_GET_BITS(ctx, 31, 16) -#define XHCI_EPCTX_1_EPTYPE_GET(ctx) XHCI32_GET_BITS(ctx, 5, 3) -#define XHCI_EPCTX_1_CERR_SET(cerr) XHCI32_SET_BITS(cerr, 2, 1) - uint32_t deq_low; - uint32_t deq_high; - uint32_t length; -#define XHCI_EPCTX_AVE_TRB_LEN_SET(len) XHCI32_SET_BITS(len, 15, 0) -#define XHCI_EPCTX_MAX_ESIT_SET(esit) XHCI32_SET_BITS(esit, 31, 16) - uint32_t reserved_01[3]; -} __PACKED; - -/* device context array element */ -struct xhci_devlist -{ - uint32_t ptr_low; - uint32_t ptr_high; -} __PACKED; - -/* input context */ -struct xhci_inctx -{ - uint32_t del; - uint32_t add; - uint32_t reserved_01[6]; - /* refer to spec. The Input Context is an array of up to 33 context data structure entries */ -#define XHCI_INCTX_ENTRY_NUM 33U -#define XHCI_INCTX_ALIGMENT 2048 -} __PACKED; - -/* transfer block (ring element) */ -struct xhci_trb -{ - uint32_t ptr_low; - uint32_t ptr_high; - uint32_t status; - uint32_t control; -} __PACKED; - -/* event ring segment */ -struct xhci_er_seg -{ - uint32_t ptr_low; - uint32_t ptr_high; - uint32_t size; - uint32_t reserved_01; -} __PACKED; - -struct xhci_portmap -{ - uint8_t start; - uint8_t count; -}; - -struct xhci_ring -{ - struct xhci_trb ring[XHCI_RING_ITEMS]; - struct xhci_trb evt; - uint32_t eidx; - uint32_t nidx; - uint32_t cs; - usb_osal_mutex_t lock; -}; - -struct xhci_pipe -{ - struct xhci_ring reqs; /* DO NOT MOVE reqs from structure beg */ - uint8_t epaddr; - uint8_t speed; - uint8_t interval; - uint8_t eptype; - uint16_t maxpacket; - uint32_t slotid; - uint32_t epid; - - /* command or transfer waiter */ - int timeout; /* = 0 no need to wait */ - bool waiter; - usb_osal_sem_t waitsem; - - /* handle urb */ - struct usbh_hubport *hport; - struct usbh_urb *urb; /* NULL if no active URB */ -}; - -struct xhci_s -{ - /* devinfo */ - uint32_t ports; - uint32_t slots; - bool context64; - struct xhci_portmap usb2; - struct xhci_portmap usb3; - - /* xhci registers base addr */ - unsigned long base; /* register base */ - unsigned long caps; /* capability register base */ - unsigned long op; /* operational register base */ - unsigned long pr; /* port register base */ - unsigned long ir; /* interrupt runtime register base */ - unsigned long db; /* doorbell register base */ - unsigned long xcap; /* extended capability */ - uint32_t hcs[3]; /* capability cache */ - uint32_t hcc; - uint16_t version; /* xhci version */ - - /* xhci data structures */ - struct xhci_devlist *devs; - struct xhci_ring *cmds; - struct xhci_ring *evts; - struct xhci_er_seg *eseg; -}; - -struct xhci_hubinfo -{ - uint32_t num_of_ports; - bool has_multiple_tts; - uint8_t tt_think_time; - int speed; -}; -/***************** Macros (Inline Functions) Definitions *********************/ - -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/port/xhci/xhci_reg.h b/third-party/cherryusb-0.7.0/port/xhci/xhci_reg.h deleted file mode 100644 index dc87d87df6adc4d17b0faa5839f4a5b733589b1c..0000000000000000000000000000000000000000 --- a/third-party/cherryusb-0.7.0/port/xhci/xhci_reg.h +++ /dev/null @@ -1,540 +0,0 @@ -/* - * Copyright : (C) 2022 Phytium Information Technology, Inc. - * All Rights Reserved. - * - * This program is OPEN SOURCE software: you can redistribute it and/or modify it - * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, - * either version 1.0 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * See the Phytium Public License for more details. - * - * - * FilePath: xhci_reg.h - * Date: 2022-07-19 09:26:25 - * LastEditTime: 2022-07-19 09:26:25 - * Description:  This file is for xhci register definition. - * - * Modify History: - * Ver   Who        Date         Changes - * ----- ------     --------    -------------------------------------- - * 1.0 zhugengyu 2022/9/19 init commit - */ -#ifndef XHCI_REG_H -#define XHCI_REG_H - -/***************************** Include Files *********************************/ -#include "usbh_core.h" - -/************************** Constant Definitions *****************************/ -#ifdef __cplusplus -extern "C" -{ -#endif - -#if defined(__aarch64__) -#define BITS_PER_LONG 64U -#define XHCI_AARCH64 -#else -#define BITS_PER_LONG 32U -#define XHCI_AARCH32 -#endif - -#define XHCI_GENMASK(h, l) \ - (((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) - -#define XHCI_GENMASK_ULL(h, l) \ - (((~0ULL) - (1ULL << (l)) + 1) & \ - (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h)))) - -#define XHCI32_GET_BITS(x, a, b) (uint32_t)((((uint32_t)(x)) & XHCI_GENMASK(a, b)) >> b) -#define XHCI32_SET_BITS(x, a, b) (uint32_t)((((uint32_t)(x)) << b) & XHCI_GENMASK(a, b)) -#define XHCI64_GET_BITS(x, a, b) (uint64_t)((((uint64_t)(x)) & XHCI_GENMASK_ULL(a, b)) >> b) -#define XHCI64_SET_BITS(x, a, b) (uint64_t)((((uint64_t)(x)) << b) & XHCI_GENMASK_ULL(a, b)) - -/** @name Register Map - * - * Register offsets from the base address of an XHCI device. - * @{ - */ -#define XHCI_REG_CAP_CAPLENGTH 0x00 /* specify the limits, restrictions and capabilities */ -#define XHCI_REG_CAP_HCIVERSION 0x02 /* Interface Version Number */ -#define XHCI_REG_CAP_HCS1 0x04 /* Host Controller Structural Parameters 1 */ -#define XHCI_REG_CAP_HCS2 0x08 /* Host Controller Structural Parameters 2 */ -#define XHCI_REG_CAP_HCS3 0x0C /* Host Controller Structural Parameters 3 */ -#define XHCI_REG_CAP_HCC 0x10 /* Capability Parameters 1 */ -#define XHCI_REG_CAP_DBOFF 0x14 /* Doorbell Offset Register */ -#define XHCI_REG_CAP_RTSOFF 0x18 /* Runtime Register Space Offset Register */ - -/***************** Host Controller Operational Registers ***********************/ -#define XHCI_REG_OP_USBCMD 0x00 /* USB Command Register */ -#define XHCI_REG_OP_USBSTS 0x04 /* USB Status Register */ -#define XHCI_REG_OP_PAGESIZE 0x08 /* Page Size Register */ -#define XHCI_REG_OP_DNCTRL 0x14 /* Device Notification Control Register */ -#define XHCI_REG_OP_CRCR 0x18 /* Command Ring Control Register */ -#define XHCI_REG_OP_DCBAAP 0x30 /* Device Context Base Address Array Pointer Register */ -#define XHCI_REG_OP_CONFIG 0x38 /* Configure Register */ - -/* Port Status and Ctrl Register : OP Base + (400h + (10h * (n–1))) 'n' is port num */ -#define XHCI_REG_OP_PORTS_BASE 0x400 /* Port Status and Control Register Base */ -#define XHCI_REG_OP_PORTS_SIZE 0x10 /* Size of one Port SC Register */ -#define XHCI_REG_OP_PORTS_OFF(port, off) ((port) * XHCI_REG_OP_PORTS_SIZE + offset) - -#define XHCI_REG_OP_PORTS_PORTSC 0x00 /* Port Status and Control Register */ -#define XHCI_REG_OP_PORTS_PORTPMSC 0x04 /* USB3 Port Power Management Status and Control Register */ -#define XHCI_REG_OP_PORTS_PORTLI 0x08 /* Port Link Info Register */ - -/***************** Host Controller Runtime Registers ***********************/ -#define XHCI_REG_RT_MFINDEX 0x00 /* Microframe Index */ -#define XHCI_REG_RT_IR0 0x20 /* Interrupter Register Set 0 */ -#define XHCI_REG_RT_IR1023 0x8000 /* Interrupter Register Set 1023 */ - -/* Interrupter Register Set : RT Base + 020h + (32 * Interrupter) */ -#define XHCI_REG_RT_IR_IMAN 0x00 /* Interrupter Management Register */ -#define XHCI_REG_RT_IR_IMOD 0x04 /* Interrupter Moderation Register */ -#define XHCI_REG_RT_IR_ERSTSZ 0x08 /* Event Ring Segment Table Size Register */ -#define XHCI_REG_RT_IR_ERSTBA 0x10 /* Event Ring Segment Table Base Address Register */ -#define XHCI_REG_RT_IR_ERDP 0x18 /* Event Ring Dequeue Pointer Register */ -#define XHCI_REG_RT_IR_SIZE 0x20 /* Size of one IR Register */ - -/***************** Doorbell Register ***********************/ -#define XHCI_REG_DB_SIZE 4 /* Doorbell registers are 32 bits in length */ - -/***************** eXtensible Host Controller Capability Registers ***********************/ - -/** @name XHCI_REG_CAP_HCS1 Register - */ -#define XHCI_REG_CAP_HCS1_MAX_SLOTS_GET(x) XHCI32_GET_BITS(x, 7, 0) /* Number of Device Slots (MaxSlots) */ -#define XHCI_REG_CAP_HCS1_MAX_INTRS_GET(x) XHCI32_GET_BITS(x, 18, 8) /* Number of Interrupters (MaxIntrs) */ -#define XHCI_REG_CAP_HCS1_MAX_PORTS_GET(x) XHCI32_GET_BITS(x, 31, 24) /* Number of Ports (MaxPorts) */ - -/** @name XHCI_REG_CAP_HCS2 Register - */ -#define XHCI_REG_CAP_HCS2_IST_GET(x) XHCI32_GET_BITS(x, 3, 0) /* Isochronous Scheduling Threshold (IST) */ -#define XHCI_REG_CAP_HCS2_ERST_MAX_GET(x) XHCI32_GET_BITS(x, 7, 4) /* Event Ring Segment Table Max (ERST Max) */ -#define XHCI_REG_CAP_HCS2_SPR (1 << 26) /* Scratchpad Restore (SPR) */ -#define XHCI_REG_CAP_HCS2_MAX_SCRATCHPAD_BUFS_GET(x) XHCI32_GET_BITS(x, 25, 21) | XHCI32_GET_BITS(x, 31, 27) /* Max Scratchpad Buffers (Max Scratchpad Bufs) */ - -/** @name XHCI_REG_CAP_HCS3 Register - */ -#define XHCI_REG_CAP_HCS3_U1_DEV_EXIT_LATENCY_GET(x) XHCI32_GET_BITS(x, 7, 0) /* U1 Device Exit Latency */ -#define XHCI_REG_CAP_HCS3_U2_DEV_EXIT_LATENCY_GET(x) XHCI32_GET_BITS(x, 31, 16) /* U2 Device Exit Latency */ - -/** @name XHCI_REG_CAP_HCC Register - */ -#define XHCI_REG_CAP_HCC_AC64 (1 << 0) /* 64-bit Addressing Capabilitya 1: 64-bit */ -#define XHCI_REG_CAP_HCC_BNC (1 << 1) /* BW Negotiation Capability (BNC) 1: support */ -#define XHCI_REG_CAP_HCC_CSZ (1 << 2) /* Context Size (CSZ) 1: 64 byte context data */ -#define XHCI_REG_CAP_HCC_PPC (1 << 3) /* Port Power Control (PPC) 1: support */ -#define XHCI_REG_CAP_HCC_PIND (1 << 4) /* Port Indicators (PIND) 1: support */ -#define XHCI_REG_CAP_HCC_LHRC (1 << 5) /* Light HC Reset Capability (LHRC) 1: support */ -#define XHCI_REG_CAP_HCC_LTC (1 << 6) /* Latency Tolerance Messaging Capability (LTC) */ -#define XHCI_REG_CAP_HCC_NSS (1 << 7) /* No Secondary SID Support (NSS) */ -#define XHCI_REG_CAP_HCC_MAX_PSA_SIZE_GET(x) XHCI32_GET_BITS(x, 15, 12) /* Maximum Primary Stream Array Size (MaxPSASize) */ -#define XHCI_REG_CAP_HCC_XECP_GET(x) XHCI32_GET_BITS(x, 31, 16) /* xHCI Extended Capabilities Pointer (xECP) */ - -/** @name XHCI_REG_CAP_DBOFF Register - */ -#define XHCI_REG_CAP_DBOFF_GET(x) ((x) & XHCI_GENMASK(31, 2)) /* 32-byte offset of the Doorbell Array base address from the Base */ - -/** @name XHCI_REG_CAP_RTSOFF Register - */ -#define XHCI_REG_CAP_RTSOFF_GET(x) ((x) & XHCI_GENMASK(31, 5)) /* 32-byte offset of the xHCI Runtime Registers */ - - -/***************** Host Controller Operational Registers ***********************/ - -/** @name XHCI_REG_OP_USBCMD Register - */ -#define XHCI_REG_OP_USBCMD_RUN_STOP (1 << 0) /* Run/Stop (R/S) 1: RUN, 0: STOP - RW */ -#define XHCI_REG_OP_USBCMD_HCRST (1 << 1) /* Host Controller Reset (HCRST) 1: RESET - RW */ -#define XHCI_REG_OP_USBCMD_INTE (1 << 2) /* Interrupter Enable (INTE) 1: enabled - RW */ -#define XHCI_REG_OP_USBCMD_HSEE (1 << 3) /* Host System Error Enable (HSEE) - RW */ -#define XHCI_REG_OP_USBCMD_LHCRST (1 << 7) /* Light Host Controller Reset (LHCRST) - RW */ -#define XHCI_REG_OP_USBCMD_CSS (1 << 8) /* Controller Save State (CSS) - RW */ -#define XHCI_REG_OP_USBCMD_CRS (1 << 9) /* Controller Restore State (CRS) - RW */ -#define XHCI_REG_OP_USBCMD_EWE (1 << 10) /* Enable Wrap Event (EWE) - RW */ -#define XHCI_REG_OP_USBCMD_EU3S (1 << 11) /* Enable U3 MFINDEX Stop (EU3S) - RW */ - -/** @name XHCI_REG_OP_USBSTS Register - */ -#define XHCI_REG_OP_USBSTS_HCH (1 << 0) /* 1: Stopped executing */ -#define XHCI_REG_OP_USBSTS_HSE (1 << 2) /* 1: Serious error detected */ -#define XHCI_REG_OP_USBSTS_EINT (1 << 3) /* 1: Interrupt Pending (IP) */ -#define XHCI_REG_OP_USBSTS_PCD (1 << 4) /* 1: Port Change Detect */ -#define XHCI_REG_OP_USBSTS_SSS (1 << 8) /* remain 1 while the xHC saves its internal state */ -#define XHCI_REG_OP_USBSTS_RSS (1 << 9) /* remain 1 while the xHC restores its internal state */ -#define XHCI_REG_OP_USBSTS_SRE (1 << 10) /* if error occurs during a Save or Restore operation this bit shall be set to ‘1’. */ -#define XHCI_REG_OP_USBSTS_CNR (1 << 11) /* 1: Controller Not Ready */ -#define XHCI_REG_OP_USBSTS_HCE (1 << 12) /* 1: Internal xHC error condition */ -#define XHCI_REG_OP_USBSTS_PRSRV_MASK ((1 << 1) | 0xffffe000) /* Rsvd bits */ - - -/** @name XHCI_REG_OP_PAGESIZE Register - */ -/* This xHC supports a page size of 2^(n+12) if bit n is Set */ -#define XHCI_REG_OP_PAGESIZE_4K (1 << 0) /* if bit 0 is Set, the xHC supports 4k byte page sizes */ - -/** @name XHCI_REG_OP_CRCR Register - */ -#define XHCI_REG_OP_CRCR_RCS (1 << 0) /* Ring Cycle State, value of the xHC Consumer Cycle State (CCS) flag */ -#define XHCI_REG_OP_CRCR_CS (1 << 1) /* Command Stop, 1 */ -#define XHCI_REG_OP_CRCR_CA (1 << 2) /* Command Abort, 1 */ -#define XHCI_REG_OP_CRCR_CRR (1 << 3) /* Command Ring Running */ -#define XHCI_REG_OP_CRCR_CR_PTR_MASK XHCI_GENMASK_ULL(63, 6) /* Command Ring Pointer, Dequeue Ptr of Command Ring */ - -/** @name XHCI_REG_OP_DCBAAP Register - */ -#define XHCI_REG_OP_DCBAAP_MASK XHCI_GENMASK_ULL(63, 6) /* bit[31:6] Ptr of DCBAA */ - -/** @name XHCI_REG_OP_CONFIG Register - */ -#define XHCI_REG_OP_CONFIG_MAX_SLOTS_EN_MASK XHCI_GENMASK(7, 0) /* Max Device Slots Enabled (MaxSlotsEn) – RW */ -#define XHCI_REG_OP_CONFIG_MAX_SLOTS_EN_SET(x) XHCI32_SET_BITS(x, 7, 0) /* bit[7:0] Max Device Slots Enabled */ -#define XHCI_REG_OP_CONFIG_MAX_SLOTS_EN_GET(x) XHCI32_GET_BITS(x, 7, 0) - -/** @name XHCI_REG_OP_PORTS_PORTSC Register - */ -#define XHCI_REG_OP_PORTS_PORTSC_CCS (1 << 0) /* Current Connect Status (CCS) – ROS */ -#define XHCI_REG_OP_PORTS_PORTSC_PED (1 << 1) /* Port Enabled/Disabled (PED) – RW1CS */ -#define XHCI_REG_OP_PORTS_PORTSC_OCA (1 << 3) /* Over-current Active (OCA) – RO */ -#define XHCI_REG_OP_PORTS_PORTSC_PR (1 << 4) /* Port Reset (PR) – RW1S */ -#define XHCI_REG_OP_PORTS_PORTSC_PLS_GET(x) XHCI32_GET_BITS(x, 8, 5) /* Port Link State (PLS) – RWS */ -#define XHCI_REG_OP_PORTS_PORTSC_PLS_SET(x) XHCI32_SET_BITS(x, 8, 5) -#define XHCI_REG_OP_PORTS_PORTSC_PLS_MASK XHCI_GENMASK(8, 5) -#define XHCI_REG_OP_PORTS_PORTSC_PLS(x) (x << 5) -#define XHCI_REG_OP_PORTS_PORTSC_PLS_SET(x) XHCI32_SET_BITS(x, 8, 5) - -enum PLSStatus -{ - PLS_U0 = 0, - PLS_U1 = 1, - PLS_U2 = 2, - PLS_U3 = 3, - PLS_DISABLED = 4, - PLS_RX_DETECT = 5, - PLS_INACTIVE = 6, - PLS_POLLING = 7, - PLS_RECOVERY = 8, - PLS_HOT_RESET = 9, - PLS_COMPILANCE_MODE = 10, - PLS_TEST_MODE = 11, - PLS_RESUME = 15, -}; /* Port status type */ - -#define XHCI_REG_OP_PORTS_PORTSC_PP (1 << 9) /* Port Power (PP) – RWS */ -#define XHCI_REG_OP_PORTS_PORTSC_PORT_SPEED_GET(x) XHCI32_GET_BITS(x, 13, 10) /* Port Speed (Port Speed) – ROS */ - -/* Protocol Speed ID (PSI) */ -#define XHCI_PORT_SPEED_UNKOWN 0U -#define XHCI_PORT_SPEED_FULL 1U -#define XHCI_PORT_SPEED_LOW 2U -#define XHCI_PORT_SPEED_HIGH 3U -#define XHCI_PORT_SPEED_SUPER 4U - -#define XHCI_REG_OP_PORTS_PORTSC_PIC_SET(x) XHCI32_SET_BITS(x, 15, 14) -#define XHCI_REG_OP_PORTS_PORTSC_PIC_MASK XHCI_GENMASK(15, 14) - -#define XHCI_REG_OP_PORTS_PORTSC_LWS (1 << 16) /* Port Link State Write Strobe (LWS) */ -#define XHCI_REG_OP_PORTS_PORTSC_CSC (1 << 17) /* Connect Status Change (CSC) */ -#define XHCI_REG_OP_PORTS_PORTSC_PEC (1 << 18) /* Port Enabled/Disabled Change (PEC) 1: clear PED */ -#define XHCI_REG_OP_PORTS_PORTSC_WRC (1 << 19) /* Warm Port Reset Change 1: Warm Reset complete */ -#define XHCI_REG_OP_PORTS_PORTSC_OCC (1 << 20) /* Over-current Change 1: Over-current Active */ -#define XHCI_REG_OP_PORTS_PORTSC_PRC (1 << 21) /* Port Reset Change 1: Transition of Port Reset */ -#define XHCI_REG_OP_PORTS_PORTSC_PLC (1 << 22) /* Port Link State Change 1: PLS transition */ -#define XHCI_REG_OP_PORTS_PORTSC_CEC (1 << 23) /* Port Config Error Change 1: Port Config Error detected */ -#define XHCI_REG_OP_PORTS_PORTSC_CAS (1 << 24) /* Cold Attach Status 1: Far-end Receiver Terminations were detected */ -#define XHCI_REG_OP_PORTS_PORTSC_WCE (1 << 25) /* Wake on Connect Enable 1: enable port to be sensitive to device connects */ -#define XHCI_REG_OP_PORTS_PORTSC_WDE (1 << 26) /* Wake on Disconnect Enable 1: enable port to be sensitive to device disconnects */ -#define XHCI_REG_OP_PORTS_PORTSC_WOE (1 << 27) /* Wake on Over-current Enable 1: enable port to be sensitive to over-current conditions */ -#define XHCI_REG_OP_PORTS_PORTSC_DR (1 << 30) /* Device Removable, 0: Device is removable. 1: Device is non-removable */ -#define XHCI_REG_OP_PORTS_PORTSC_WPR (1 << 31) /* Warm Port Reset 1: follow Warm Reset sequence */ -#define XHCI_REG_OP_PORTS_PORTSC_RW_MASK (XHCI_REG_OP_PORTS_PORTSC_PR | XHCI_REG_OP_PORTS_PORTSC_PLS_MASK | XHCI_REG_OP_PORTS_PORTSC_PP \ - | XHCI_REG_OP_PORTS_PORTSC_PIC_MASK | XHCI_REG_OP_PORTS_PORTSC_LWS | XHCI_REG_OP_PORTS_PORTSC_WCE \ - | XHCI_REG_OP_PORTS_PORTSC_WDE | XHCI_REG_OP_PORTS_PORTSC_WOE) - - -/***************** Host Controller Runtime Registers ***********************/ - -/** @name XHCI_REG_RT_IR_IMAN Register - */ -#define XHCI_REG_RT_IR_IMAN_IP (1 << 0) /* Interrupt Pending, 1: an interrupt is pending for this Interrupter */ -#define XHCI_REG_RT_IR_IMAN_IE (1 << 1) /* Interrupt Enable, 1: capable of generating an interrupt. */ - -/** @name XHCI_REG_RT_IR_IMOD Register - */ -#define XHCI_REG_RT_IR_IMOD_IMODI_MASK XHCI_GENMASK(15, 0) /* bit[15:0] Interrupt Moderation Interval default 4000 ==> 1ms */ -#define XHCI_REG_RT_IR_IMOD_IMODC_MASK XHCI_GENMASK(31, 16) /* bit[31:16] Interrupt Moderation Counter(Down counter) */ - -/** @name XHCI_REG_RT_IR_ERSTSZ Register - */ -#define XHCI_REG_RT_IR_ERSTSZ_MASK XHCI_GENMASK(15, 0) /* bit[15:0] the number of valid Event Ring Segment Table entries */ - -/** @name XHCI_REG_RT_IR_ERSTBA Register - */ -#define XHCI_REG_RT_IR_ERSTBA_MASK XHCI_GENMASK_ULL(63, 6) /* Event Ring Segment Table Base Address */ - -/** @name XHCI_REG_RT_IR_ERDP Register - */ -#define XHCI_REG_RT_IR_ERDP_DESI_MASK XHCI_GENMASK_ULL(2, 0) /* bit[2:0] Dequeue ERST Segment Index */ -#define XHCI_REG_RT_IR_ERDP_EHB (1 << 3) /* Event Handler Busy */ -#define XHCI_REG_RT_IR_ERDP_MASK XHCI_GENMASK_ULL(63, 4) /* Event Ring Dequeue Pointer */ - -/***************** Doorbell Register ***********************/ -#define XHCI_REG_DB_TARGET_HC_COMMAND 0 /* Host Controller Doorbell (0) Command Doorbell */ -#define XHCI_REG_DB_TARGET_EP0 1 /* Device Context Doorbells Control EP 0 Enqueue Pointer Update */ -#define XHCI_REG_DB_TARGET_EP1_OUT 2 /* EP 1 OUT Enqueue Pointer Update */ -#define XHCI_REG_DB_TARGET_EP1_IN 3 /* EP 1 IN Enqueue Pointer Update */ -#define XHCI_REG_DB_TARGET_EP15_OUT 30 /* EP 15 OUT Enqueue Pointer Update */ -#define XHCI_REG_DB_TARGET_EP15_IN 31 /* EP 15 IN Enqueue Pointer Update */ - -/***************** xHCI Extended Capabilities Registers ***********************/ -#define XHCI_REG_EXT_CAP_USBSPCF_OFFSET 0x0 -#define XHCI_REG_EXT_CAP_CAP_ID_GET(x) XHCI32_GET_BITS(x, 7, 0) -#define XHCI_REG_EXT_NEXT_CAP_PTR_GET(x) XHCI32_GET_BITS(x, 15, 8) -/* refer to 'Table 138: xHCI Extended Capability Codes' for more details */ -enum -{ - XHCI_EXT_CAP_ID_USB_LEGACY_SUPPORT = 1, - XHCI_EXT_CAP_ID_SUPPORT_PROTOCOL = 2, - XHCI_EXT_CAP_ID_EXTEND_POWER_MANAGEMENT = 3, - XHCI_EXT_CAP_ID_IO_VIRTUALIZATION = 4, - XHCI_EXT_CAP_ID_MESSAGE_INTERRUPT = 5, - XHCI_EXT_CAP_ID_LOCAL_MEMORY = 6, - XHCI_EXT_CAP_ID_USB_DEBUG_CAPABILITY = 10, - XHCI_EXT_CAP_ID_EXT_MESSAGE_INTERRUPT = 17, - - XHCI_EXT_CAP_ID_VENDOR_DEFINED_MIN = 192, - XHCI_EXT_CAP_ID_VENDOR_DEFINED_MAX = 255 -}; - -/* xHCI Supported Protocol Capability */ -#define XHCI_REG_EXT_CAP_USBSPCFDEF_OFFSET 0x4 - -#define XHCI_USBSPCF_MINOR_REVERSION_GET(x) XHCI32_GET_BITS(x, 23, 16) -#define XHCI_USBSPCF_MAJOR_REVERSION_GET(x) XHCI32_GET_BITS(x, 31, 24) - -#define XHCI_USBSPCFDEF_NAME_STRING_GET(x) XHCI32_GET_BITS(x, 31, 0) /* four ASCII characters may be defined */ -#define XHCI_USBSPCFDEF_NAME_STRING_USB 0x20425355 /* ASCII = "USB" */ - -#define XHCI_REG_EXT_CAP_USBSPCFDEF2_OFFSET 0x8 -#define XHCI_USBSPCFDEF2_COMPATIBLE_PORT_OFF_GET(x) XHCI32_GET_BITS(x, 7, 0) -#define XHCI_USBSPCFDEF2_COMPATIBLE_PORT_CNT_GET(x) XHCI32_GET_BITS(x, 15, 8) -#define XHCI_USBSPCFDEF2_PROTOCOL_DEFINED_GET(x) XHCI32_GET_BITS(x, 27, 16) - -/* trb bit definitions */ - -/* configuration */ -#define XHCI_RING_ITEMS 16U -#define XHCI_ALIGMENT 64U -#define XHCI_RING_SIZE (XHCI_RING_ITEMS*sizeof(struct xhci_trb)) - -#define TRB_C (1<<0) -#define TRB_TYPE_SHIFT 10 -#define TRB_TYPE_MASK 0x3f -#define TRB_TYPE_GET(val) XHCI32_GET_BITS(val, 15, 10) -#define TRB_TYPE_SET(t) XHCI32_SET_BITS(t, 15, 10) - -#define TRB_EV_ED (1<<2) - -#define TRB_TR_ENT (1<<1) -#define TRB_TR_ISP (1<<2) -#define TRB_TR_NS (1<<3) -#define TRB_TR_CH (1<<4) -#define TRB_TR_IOC (1<<5) -#define TRB_TR_IDT (1<<6) -#define TRB_TR_TBC_SHIFT 7 -#define TRB_TR_TBC_MASK 0x3 -#define TRB_TR_BEI (1<<9) -#define TRB_TR_TLBPC_SHIFT 16 -#define TRB_TR_TLBPC_MASK 0xf -#define TRB_TR_FRAMEID_SHIFT 20 -#define TRB_TR_FRAMEID_MASK 0x7ff -#define TRB_TR_SIA (1<<31) -#define TRB_TR_TRANS_LEN_SET(len) XHCI32_SET_BITS(len, 23, 0) -#define TRB_TR_TRANS_LEN_MASK XHCI_GENMASK(23, 0) - -#define TRB_TR_DIR (1<<16) -#define TRB_TR_TYPE_SET(t) XHCI32_SET_BITS(t, 17, 16) -#define TRB_TR_NO_DATA 0U -#define TRB_TR_OUT_DATA 2U -#define TRB_TR_IN_DATA 3U - -#define TRB_CC_GET(val) XHCI32_GET_BITS(val, 31, 24) -#define TRB_PORT_ID_GET(val) XHCI32_GET_BITS(val, 31, 24) - - -#define TRB_CR_SLOTID_SHIFT 24 -#define TRB_CR_SLOTID_MASK 0xff -#define TRB_CR_SLOTID_SET(id) XHCI32_SET_BITS(id, 31, 24) -#define TRB_CR_SLOTID_GET(val) XHCI32_GET_BITS(val, 31, 24) - -#define TRB_CR_EPID_SHIFT 16 -#define TRB_CR_EPID_MASK 0x1f -#define TRB_CR_EPID_SET(id) XHCI32_SET_BITS(id, 20, 16) -#define TRB_CR_EPID_GET(field) XHCI32_GET_BITS(field, 20, 16) - -#define TRB_CR_BSR (1<<9) -#define TRB_CR_DC (1<<9) - -#define TRB_LK_TC (1<<1) - -#define TRB_INTR_SHIFT 22 -#define TRB_INTR_MASK 0x3ff -#define TRB_INTR(t) (((t).status >> TRB_INTR_SHIFT) & TRB_INTR_MASK) - -/************************** Type Definitions *********************************/ -enum TRBType -{ - TRB_RESERVED = 0, - TR_NORMAL, - TR_SETUP, - TR_DATA, - TR_STATUS, - TR_ISOCH, - TR_LINK, - TR_EVDATA, - TR_NOOP, - CR_ENABLE_SLOT, - CR_DISABLE_SLOT, - CR_ADDRESS_DEVICE, - CR_CONFIGURE_ENDPOINT, - CR_EVALUATE_CONTEXT, - CR_RESET_ENDPOINT, - CR_STOP_ENDPOINT, - CR_SET_TR_DEQUEUE, - CR_RESET_DEVICE, - CR_FORCE_EVENT, - CR_NEGOTIATE_BW, - CR_SET_LATENCY_TOLERANCE, - CR_GET_PORT_BANDWIDTH, - CR_FORCE_HEADER, - CR_NOOP, - ER_TRANSFER_COMPLETE = 32, - ER_COMMAND_COMPLETE, - ER_PORT_STATUS_CHANGE, - ER_BANDWIDTH_REQUEST, - ER_DOORBELL, - ER_HOST_CONTROLLER, - ER_DEVICE_NOTIFICATION, - ER_MFINDEX_WRAP, -}; - -enum TRBCCode -{ - CC_DISCONNECTED = -2, - CC_TIMEOUT = -1, - CC_INVALID = 0, - CC_SUCCESS, - CC_DATA_BUFFER_ERROR, - CC_BABBLE_DETECTED, - CC_USB_TRANSACTION_ERROR, - CC_TRB_ERROR, - CC_STALL_ERROR, - CC_RESOURCE_ERROR, - CC_BANDWIDTH_ERROR, - CC_NO_SLOTS_ERROR, - CC_INVALID_STREAM_TYPE_ERROR, - CC_SLOT_NOT_ENABLED_ERROR, - CC_EP_NOT_ENABLED_ERROR, - CC_SHORT_PACKET, - CC_RING_UNDERRUN, - CC_RING_OVERRUN, - CC_VF_ER_FULL, - CC_PARAMETER_ERROR, - CC_BANDWIDTH_OVERRUN, - CC_CONTEXT_STATE_ERROR, - CC_NO_PING_RESPONSE_ERROR, - CC_EVENT_RING_FULL_ERROR, - CC_INCOMPATIBLE_DEVICE_ERROR, - CC_MISSED_SERVICE_ERROR, - CC_COMMAND_RING_STOPPED, - CC_COMMAND_ABORTED, - CC_STOPPED, - CC_STOPPED_LENGTH_INVALID, - CC_MAX_EXIT_LATENCY_TOO_LARGE_ERROR = 29, - CC_ISOCH_BUFFER_OVERRUN = 31, - CC_EVENT_LOST_ERROR, - CC_UNDEFINED_ERROR, - CC_INVALID_STREAM_ID_ERROR, - CC_SECONDARY_BANDWIDTH_ERROR, - CC_SPLIT_TRANSACTION_ERROR -}; - -/***************** Macros (Inline Functions) Definitions *********************/ -/* - * xhci_ring structs are allocated with XHCI_RING_SIZE alignment, - * then we can get it from a trb pointer (provided by evt ring). - */ -#define XHCI_RING(_trb) \ - ((struct xhci_ring*)((unsigned long)(_trb) & ~(XHCI_RING_SIZE-1))) - -#define BARRIER() __asm__ __volatile__("": : :"memory") - -#ifdef XHCI_AARCH64 -#define DSB() __asm__ __volatile__("dsb sy": : : "memory") -#else -#define DSB() __asm__ __volatile__("dsb": : : "memory") -#endif - -/************************** Function Prototypes ******************************/ - -/*****************************************************************************/ -static inline void writeq(unsigned long addr, uint64_t val) -{ - BARRIER(); - *(volatile uint64_t *)addr = val; -} - -static inline void writel(unsigned long addr, uint32_t val) -{ - BARRIER(); - *(volatile uint32_t *)addr = val; -} - -static inline void writew(unsigned long addr, uint16_t val) -{ - BARRIER(); - *(volatile uint16_t *)addr = val; -} - -static inline void writeb(unsigned long addr, uint8_t val) -{ - BARRIER(); - *(volatile uint8_t *)addr = val; -} - -static inline uint64_t readq(unsigned long addr) -{ - uint64_t val = *(volatile const uint64_t *)addr; - BARRIER(); - return val; -} - -static inline uint32_t readl(unsigned long addr) -{ - uint32_t val = *(volatile const uint32_t *)addr; - BARRIER(); - return val; -} - -static inline uint16_t readw(unsigned long addr) -{ - uint16_t val = *(volatile const uint16_t *)addr; - BARRIER(); - return val; -} - -static inline uint8_t readb(unsigned long addr) -{ - uint8_t val = *(volatile const uint8_t *)addr; - BARRIER(); - return val; -} - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/Kconfig b/third-party/cherryusb/Kconfig similarity index 100% rename from third-party/cherryusb-0.7.0/Kconfig rename to third-party/cherryusb/Kconfig diff --git a/third-party/cherryusb-0.7.0/LICENSE b/third-party/cherryusb/LICENSE similarity index 100% rename from third-party/cherryusb-0.7.0/LICENSE rename to third-party/cherryusb/LICENSE diff --git a/third-party/cherryusb-0.7.0/README.md b/third-party/cherryusb/README.md similarity index 89% rename from third-party/cherryusb-0.7.0/README.md rename to third-party/cherryusb/README.md index aee4c6362f926194fd7b626805790d931f85434a..e051ebf88ff0281b761fae9592d91f096f9e59d1 100644 --- a/third-party/cherryusb-0.7.0/README.md +++ b/third-party/cherryusb/README.md @@ -88,7 +88,8 @@ CherryUSB Host Stack has the following functions: - Support Communication Device Class (CDC) - Support Human Interface Device (HID) - Support Mass Storage Class (MSC) -- Support USB VIDEO CLASS +- Support USB Video CLASS +- Support USB Audio CLASS - Support Remote NDIS (RNDIS) - Support Vendor class @@ -98,12 +99,13 @@ CherryUSB Host Stack resource usage (GCC 10.2 with -O2): | file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) | |:-------------:|:--------------:|:-------------------------------:|:---------------------------:|:-------------------------------:| -|usbh_core.c | 4261 | 512 | 28 | sizeof(struct usbh_urb) | -|usbh_hub.c | 4633 | sizeof(struct usbh_hub) * (1+n) | sizeof(struct usbh_hubport) + 20 | 0 | -|usbh_cdc_acm.c | 1004 | 7 | 4 | sizeof(struct usbh_cdc_acm) * x | +|usbh_core.c | 4417 | 512 | 28 | sizeof(struct usbh_urb) | +|usbh_hub.c | 4895 | 32 + 1* (1+n) | 16 + sizeof(struct usbh_hub) * (1+n) | 0 | +|usbh_cdc_acm.c | 1064 | 7 | 4 | sizeof(struct usbh_cdc_acm) * x | |usbh_msc.c | 1776 | 32 | 4 | sizeof(struct usbh_msc) * x | -|usbh_hid.c | 822 | 128 | 4 | sizeof(struct usbh_hid) * x | -|usbh_video.c | 3587 | 128 | 4100(yuv2rgb) | sizeof(struct usbh_video) * x | +|usbh_hid.c | 922 | 128 | 4 | sizeof(struct usbh_hid) * x | +|usbh_video.c | 3592 | 128 | 4 | sizeof(struct usbh_video) * x | +|usbh_audio.c | 3230 | 128 | 4 | sizeof(struct usbh_audio) * x | Among them, `sizeof(struct usbh_hub)` and `sizeof(struct usbh_hubport)` are affected by the following macros: @@ -133,19 +135,19 @@ Note: After version 0.4.1, the dcd drivers have been refactored and some reposit | Manufacturer | CHIP or Series | USB IP| Repo Url |Corresponds to master version| |:--------------------:|:------------------:|:-----:|:--------:|:---------------------------:| -|Bouffalolab | BL702 | bouffalolab|[bl_mcu_sdk](https://github.com/bouffalolab/bl_mcu_sdk/tree/master/examples/usb)| latest | -|Essemi | ES32F36xx | musb |[es32f369_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/es32)|latest | -|AllwinnerTech | F1C100S | musb |[cherryusb_rtt_f1c100s](https://github.com/CherryUSB/cherryusb_rtt_f1c100s)|latest | +|Bouffalolab | BL702/BL616/BL808 | bouffalolab/ehci|[bl_mcu_sdk](https://github.com/CherryUSB/cherryusb_bouffalolab)| latest | |ST | STM32F103C8T6 | fsdev |[stm32f103_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_device/stm32f103c8t6)|latest | |ST | STM32F4 | dwc2 |[stm32f429_device_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_device/stm32f429igt6) [stm32f429_host_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_host/stm32f429igt6)|latest | |ST | STM32H7 | dwc2 |[stm32h743_device_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_device/stm32h743vbt6) [stm32h743_host_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_host/stm32h743xih6)|latest | -|HPMicro | HPM6750 | hpm/ehci |[hpm_repo](https://github.com/CherryUSB/cherryusb_hpmicro)|latest | +|HPMicro | HPM6750 | hpm/ehci |[hpm_repo](https://github.com/CherryUSB/cherryusb_hpmicro)|v0.6.0 | +|Essemi | ES32F36xx | musb |[es32f369_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/es32)|latest | +|AllwinnerTech | F1C100S | musb |[cherryusb_rtt_f1c100s](https://github.com/CherryUSB/cherryusb_rtt_f1c100s)|latest | |Phytium | e2000 | xhci |[phytium _repo](https://gitee.com/phytium_embedded/phytium-standalone-sdk)|latest | -|WCH | CH32V307 | ch32_usbfs/ch32_usbhs|[ch32v307_repo](https://github.com/CherryUSB/cherryusb_ch32v307)|latest | -|WCH | CH57x | ch58x |[ch57x_repo](https://github.com/CherryUSB/cherryusb_ch57x)|v0.4.1 | +|Raspberry pi | rp2040 | rp2040 |[rp2040_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/rp2040)|latest | +|WCH | CH32V307/ch58x | ch32_usbfs/ch32_usbhs/ch58x |[wch_repo](https://github.com/CherryUSB/cherryusb_wch)|latest | +|Nordicsemi | Nrf52840 | nrf5x |[nrf5x_repo](https://github.com/CherryUSB/cherryusb_nrf5x)|latest | |Nuvoton | Nuc442 | nuvoton |[nuc442_repo](https://github.com/CherryUSB/cherryusb_nuc442)|v0.4.1 | |Geehy | APM32E10x APM32F0xx| fsdev |[apm32_repo](https://github.com/CherryUSB/cherryusb_apm32)|v0.4.1 | -|Nordicsemi | Nrf52840 | nrf5x |[nrf5x_repo](https://github.com/CherryUSB/cherryusb_nrf5x)|latest | |Espressif | esp32 | dwc2 |[esp32_repo](https://github.com/CherryUSB/cherryusb_esp32)|v0.4.1 | |Mindmotion | MM32L3xx | mm32 |[mm32_repo](https://github.com/CherryUSB/cherryusb_mm32)|v0.4.1 | diff --git a/third-party/cherryusb-0.7.0/README_zh.md b/third-party/cherryusb/README_zh.md similarity index 88% rename from third-party/cherryusb-0.7.0/README_zh.md rename to third-party/cherryusb/README_zh.md index 2efcfeaf8ecb7a850fb1dbb4c4dcee8fbf7b9eeb..2441589c55f00e3eaa0adeb35cbaccff5f8eea99 100644 --- a/third-party/cherryusb-0.7.0/README_zh.md +++ b/third-party/cherryusb/README_zh.md @@ -87,7 +87,8 @@ CherryUSB Host 协议栈当前实现以下功能: - 支持 Communication Device Class (CDC) - 支持 Human Interface Device (HID) - 支持 Mass Storage Class (MSC) -- 支持 USB VIDEO CLASS +- Support USB Video CLASS +- Support USB Audio CLASS - 支持 Remote NDIS (RNDIS) - 支持 Vendor 类 class @@ -97,12 +98,13 @@ CherryUSB Host 协议栈资源占用说明(GCC 10.2 with -O2): | file | FLASH (Byte) | No Cache RAM (Byte) | RAM (Byte) | Heap (Byte) | |:-------------:|:--------------:|:-------------------------------:|:---------------------------:|:-------------------------------:| -|usbh_core.c | 4261 | 512 | 28 | sizeof(struct usbh_urb) | -|usbh_hub.c | 4633 | sizeof(struct usbh_hub) * (1+n) | sizeof(struct usbh_hubport) + 20 | 0 | -|usbh_cdc_acm.c | 1004 | 7 | 4 | sizeof(struct usbh_cdc_acm) * x | +|usbh_core.c | 4417 | 512 | 28 | sizeof(struct usbh_urb) | +|usbh_hub.c | 4895 | 32 + 1* (1+n) | 16 + sizeof(struct usbh_hub) * (1+n) | 0 | +|usbh_cdc_acm.c | 1064 | 7 | 4 | sizeof(struct usbh_cdc_acm) * x | |usbh_msc.c | 1776 | 32 | 4 | sizeof(struct usbh_msc) * x | -|usbh_hid.c | 822 | 128 | 4 | sizeof(struct usbh_hid) * x | -|usbh_video.c | 3587 | 128 | 4100(yuv2rgb) | sizeof(struct usbh_video) * x | +|usbh_hid.c | 922 | 128 | 4 | sizeof(struct usbh_hid) * x | +|usbh_video.c | 3592 | 128 | 4 | sizeof(struct usbh_video) * x | +|usbh_audio.c | 3230 | 128 | 4 | sizeof(struct usbh_audio) * x | 其中,`sizeof(struct usbh_hub)` 和 `sizeof(struct usbh_hubport)` 受以下宏影响: @@ -132,19 +134,19 @@ USB 基本知识点与 CherryUSB Device 协议栈是如何编写的,参考 [Ch | 厂商 | 芯片或者系列 | USB IP| 仓库链接 | 对应 master 版本 | |:--------------------:|:------------------:|:-----:|:--------:|:---------------------------:| -|Bouffalolab | BL702 | bouffalolab|[bl_mcu_sdk](https://github.com/bouffalolab/bl_mcu_sdk/tree/master/examples/usb)| latest | -|Essemi | ES32F36xx | musb |[es32f369_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/es32)|latest | -|AllwinnerTech | F1C100S | musb |[cherryusb_rtt_f1c100s](https://github.com/CherryUSB/cherryusb_rtt_f1c100s)|latest | +|Bouffalolab | BL702/BL616/BL808 | bouffalolab/ehci|[bl_mcu_sdk](https://github.com/CherryUSB/cherryusb_bouffalolab)| latest | |ST | STM32F103C8T6 | fsdev |[stm32f103_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_device/stm32f103c8t6)|latest | |ST | STM32F4 | dwc2 |[stm32f429_device_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_device/stm32f429igt6) [stm32f429_host_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_host/stm32f429igt6)|latest | |ST | STM32H7 | dwc2 |[stm32h743_device_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_device/stm32h743vbt6) [stm32h743_host_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/stm32/usb_host/stm32h743xih6)|latest | -|HPMicro | HPM6750 | hpm/ehci |[hpm_repo](https://github.com/CherryUSB/cherryusb_hpmicro)|latest | +|HPMicro | HPM6750 | hpm/ehci |[hpm_repo](https://github.com/CherryUSB/cherryusb_hpmicro)|v0.6.0 | +|Essemi | ES32F36xx | musb |[es32f369_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/es32)|latest | +|AllwinnerTech | F1C100S | musb |[cherryusb_rtt_f1c100s](https://github.com/CherryUSB/cherryusb_rtt_f1c100s)|latest | |Phytium | e2000 | xhci |[phytium _repo](https://gitee.com/phytium_embedded/phytium-standalone-sdk)|latest | -|WCH | CH32V307 | ch32_usbfs/ch32_usbhs|[ch32v307_repo](https://github.com/CherryUSB/cherryusb_ch32v307)|latest | -|WCH | CH57x | ch58x |[ch57x_repo](https://github.com/CherryUSB/cherryusb_ch57x)|v0.4.1 | +|Raspberry pi | rp2040 | rp2040 |[rp2040_repo](https://github.com/sakumisu/CherryUSB/tree/master/demo/rp2040)|latest | +|WCH | CH32V307/ch58x | ch32_usbfs/ch32_usbhs/ch58x |[wch_repo](https://github.com/CherryUSB/cherryusb_wch)|latest | +|Nordicsemi | Nrf52840 | nrf5x |[nrf5x_repo](https://github.com/CherryUSB/cherryusb_nrf5x)|latest | |Nuvoton | Nuc442 | nuvoton |[nuc442_repo](https://github.com/CherryUSB/cherryusb_nuc442)|v0.4.1 | |Geehy | APM32E10x APM32F0xx| fsdev |[apm32_repo](https://github.com/CherryUSB/cherryusb_apm32)|v0.4.1 | -|Nordicsemi | Nrf52840 | nrf5x |[nrf5x_repo](https://github.com/CherryUSB/cherryusb_nrf5x)|latest | |Espressif | esp32 | dwc2 |[esp32_repo](https://github.com/CherryUSB/cherryusb_esp32)|v0.4.1 | |Mindmotion | MM32L3xx | mm32 |[mm32_repo](https://github.com/CherryUSB/cherryusb_mm32)|v0.4.1 | diff --git a/third-party/cherryusb-0.7.0/class/audio/usb_audio.h b/third-party/cherryusb/class/audio/usb_audio.h similarity index 98% rename from third-party/cherryusb-0.7.0/class/audio/usb_audio.h rename to third-party/cherryusb/class/audio/usb_audio.h index e9d4ff494cce37ed143e8631fd59157684f9ef77..cdb0bd988900c39d295461bb1b279757d808d355 100644 --- a/third-party/cherryusb-0.7.0/class/audio/usb_audio.h +++ b/third-party/cherryusb/class/audio/usb_audio.h @@ -132,6 +132,12 @@ #define AUDIO_FORMAT_ALAW 0x0004 #define AUDIO_FORMAT_MULAW 0x0005 +#define AUDIO_V2_FORMAT_PCM 0x00000001 +#define AUDIO_V2_FORMAT_PCM8 0x00000002 +#define AUDIO_V2_FORMAT_IEEE_FLOAT 0x00000004 +#define AUDIO_V2_FORMAT_ALAW 0x00000008 +#define AUDIO_V2_FORMAT_MULAW 0x00000010 + /* bmChannelConfig: a bitmap field that indicates which spatial locations * are occupied by the channels present in the cluster. The bit allocations * are as follows: @@ -640,7 +646,7 @@ struct audio_cs_if_ac_feature_unit_descriptor { uint8_t iFeature; } __PACKED; -#define AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(ch, n) (7 + ch * n) +#define AUDIO_SIZEOF_AC_FEATURE_UNIT_DESC(ch, n) (7 + (ch + 1) * n) struct audio_cs_if_as_general_descriptor { uint8_t bLength; @@ -754,7 +760,7 @@ struct audio_cs_ep_ep_general_descriptor { __VA_ARGS__, /* bmaControls(0) Mute */ \ 0x00 /* iTerminal */ -#define AUDIO_AS_DESCRIPTOR_INIT(bInterfaceNumber, bTerminalLink, bNrChannels, bEndpointAddress, wMaxPacketSize, bInterval, ...) \ +#define AUDIO_AS_DESCRIPTOR_INIT(bInterfaceNumber, bTerminalLink, bNrChannels, bSubFrameSize, bBitResolution, bEndpointAddress, wMaxPacketSize, bInterval, ...) \ 0x09, /* bLength */ \ USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ bInterfaceNumber, /* bInterfaceNumber */ \ @@ -784,8 +790,8 @@ struct audio_cs_ep_ep_general_descriptor { AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype */ \ AUDIO_FORMAT_TYPE_I, /* bFormatType */ \ bNrChannels, /* bNrChannels */ \ - 0x02, /* bSubFrameSize : 2 Bytes per audio subframe */ \ - 0x10, /* bBitResolution : 16 bits per sample */ \ + bSubFrameSize, /* bSubFrameSize : Bytes per audio subframe */ \ + bBitResolution, /* bBitResolution : bits per sample */ \ (PP_NARG(__VA_ARGS__)/3), /* bSamFreqType : only one frequency supported */ \ __VA_ARGS__, /* tSamFreq : Audio sampling frequency coded on 3 bytes */ \ 0x09, /* bLength */ \ @@ -905,7 +911,7 @@ struct audio_v2_cs_if_ac_feature_unit_descriptor { uint8_t iFeature; } __PACKED; -#define AUDIO_V2_SIZEOF_AC_FEATURE_UNIT_DESC(ch) (6 + ch * 4) +#define AUDIO_V2_SIZEOF_AC_FEATURE_UNIT_DESC(ch) (6 + (ch + 1) * 4) struct audio_v2_cs_if_as_general_descriptor { uint8_t bLength; @@ -959,7 +965,7 @@ struct audio_v2_control_range3_param_block { bFirstInterface, \ bInterfaceCount, \ USB_DEVICE_CLASS_AUDIO, \ - AUDIO_SUBCLASS_AUDIOCONTROL, \ + AUDIO_SUBCLASS_UNDEFINED, \ AUDIO_PROTOCOLv20, \ 0x00, \ /* ------------------ AudioControl Interface ------------------ */\ @@ -1049,10 +1055,10 @@ struct audio_v2_control_range3_param_block { 0x10, /* bLength */ \ AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */ \ AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */ \ - bTerminalLink, /* bTerminalLink : Unit ID of the Output Terminal*/ \ + bTerminalLink, /* bTerminalLink : Unit ID of the Output or Input Terminal*/ \ 0x00, /* bmControls */ \ AUDIO_FORMAT_TYPE_I, /* bFormatType : AUDIO_FORMAT_TYPE_I */ \ - DBVAL(AUDIO_FORMAT_PCM), /* bmFormats PCM */ \ + DBVAL(AUDIO_V2_FORMAT_PCM), /* bmFormats PCM */ \ bNrChannels, /* bNrChannels */ \ DBVAL(bmChannelConfig), /* bmChannelConfig */ \ 0x00, /* iChannelNames */ \ @@ -1063,10 +1069,10 @@ struct audio_v2_control_range3_param_block { bSubslotSize, /* bSubslotSize */ \ bBitResolution, /* bBitResolution */ \ 0x07, /* bLength */ \ - 0x05, /* bDescriptorType */ \ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ bEndpointAddress, /* bEndpointAddress 3 out endpoint for Audio */ \ 0x01, /* bmAttributes */ \ - WBVAL(wMaxPacketSize), /* XXXX wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */ \ + WBVAL(wMaxPacketSize), /* XXXX wMaxPacketSize in Bytes (SampleRate * SlotByteSize * NumChannels) */ \ bInterval, /* bInterval */ \ 0x08, /* bLength */ \ AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType */ \ diff --git a/third-party/cherryusb-0.7.0/class/audio/usbd_audio.c b/third-party/cherryusb/class/audio/usbd_audio.c similarity index 93% rename from third-party/cherryusb-0.7.0/class/audio/usbd_audio.c rename to third-party/cherryusb/class/audio/usbd_audio.c index 4baab5a4acf123fc20eed692c5d34cb5402343da..b6b3d274f312cfbe924ee30dae9493d295504e84 100644 --- a/third-party/cherryusb-0.7.0/class/audio/usbd_audio.c +++ b/third-party/cherryusb/class/audio/usbd_audio.c @@ -46,36 +46,6 @@ struct audio_entity_info { static usb_slist_t usbd_audio_entity_info_head = USB_SLIST_OBJECT_INIT(usbd_audio_entity_info_head); -#if CONFIG_USBDEV_AUDIO_VERSION >= 0x0200 -const uint8_t default_sampling_freq_table[] = { - AUDIO_SAMPLE_FREQ_NUM(1), - // AUDIO_SAMPLE_FREQ_4B(8000), - // AUDIO_SAMPLE_FREQ_4B(8000), - // AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(16000), - AUDIO_SAMPLE_FREQ_4B(16000), - AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(32000), - AUDIO_SAMPLE_FREQ_4B(32000), - AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(44100), - AUDIO_SAMPLE_FREQ_4B(44100), - AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(48000), - AUDIO_SAMPLE_FREQ_4B(48000), - AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(88200), - AUDIO_SAMPLE_FREQ_4B(88200), - AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(96000), - AUDIO_SAMPLE_FREQ_4B(96000), - AUDIO_SAMPLE_FREQ_4B(0x00), - AUDIO_SAMPLE_FREQ_4B(192000), - AUDIO_SAMPLE_FREQ_4B(192000), - AUDIO_SAMPLE_FREQ_4B(0x00), -}; -#endif - #if CONFIG_USBDEV_AUDIO_VERSION < 0x0200 static int audio_class_endpoint_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) { @@ -109,6 +79,7 @@ static int audio_class_endpoint_request_handler(struct usb_setup_packet *setup, sampling_freq = 16000; memcpy(*data, &sampling_freq, 4); *len = 4; + USB_LOG_DBG("Get ep:%02x %d Hz\r\n", ep, (int)sampling_freq); break; default: USB_LOG_WRN("Unhandled Audio Class bRequest 0x%02x\r\n", setup->bRequest); @@ -246,6 +217,7 @@ static int audio_class_interface_request_handler(struct usb_setup_packet *setup, *len = 1; } else { mute = (*data)[0]; + current_feature_control->mute_bCUR = mute; USB_LOG_DBG("Set UnitId:%d ch[%d] mute %s\r\n", entity_id, ch, mute_string[mute]); usbd_audio_set_mute(entity_id, ch, mute); } @@ -299,6 +271,7 @@ static int audio_class_interface_request_handler(struct usb_setup_packet *setup, case AUDIO_CS_CONTROL_SAM_FREQ: if (setup->bmRequestType & USB_REQUEST_DIR_MASK) { memcpy(*data, &sampling_freq[ch], sizeof(uint32_t)); + USB_LOG_DBG("Get ClockId:%d ch[%d] %d Hz\r\n", entity_id, ch, (int)sampling_freq[ch]); *len = 4; } else { memcpy(&sampling_freq[ch], *data, setup->wLength); @@ -327,8 +300,9 @@ static int audio_class_interface_request_handler(struct usb_setup_packet *setup, usbd_audio_get_sampling_freq_table(entity_id, &sampling_freq_table); num = (uint16_t)((uint16_t)(sampling_freq_table[1] << 8) | ((uint16_t)sampling_freq_table[0])); - *data = sampling_freq_table; + memcpy(*data, sampling_freq_table, (12 * num + 2)); *len = (12 * num + 2); + USB_LOG_DBG("Get sampling_freq_table entity_id:%d ch[%d] addr:%x\r\n", entity_id, ch, (uint32_t)sampling_freq_table); } else { } break; @@ -415,7 +389,7 @@ void usbd_audio_add_entity(uint8_t entity_id, uint16_t bDescriptorSubtype) control->volume.subrange[ch].wMax = 100; control->volume.subrange[ch].wRes = 1; control->mute[ch] = 0; - control->volume_bCUR = 50; + control->volume_bCUR = 0; control->mute_bCUR = 0; } #endif @@ -446,12 +420,13 @@ __WEAK void usbd_audio_set_mute(uint8_t entity_id, uint8_t ch, uint8_t enable) __WEAK void usbd_audio_set_sampling_freq(uint8_t entity_id, uint8_t ep_ch, uint32_t sampling_freq) { } + #if CONFIG_USBDEV_AUDIO_VERSION >= 0x0200 __WEAK void usbd_audio_get_sampling_freq_table(uint8_t entity_id, uint8_t **sampling_freq_table) { - *sampling_freq_table = (uint8_t *)default_sampling_freq_table; } #endif + __WEAK void usbd_audio_set_pitch(uint8_t ep, bool enable) { } \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/class/audio/usbd_audio.h b/third-party/cherryusb/class/audio/usbd_audio.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/audio/usbd_audio.h rename to third-party/cherryusb/class/audio/usbd_audio.h diff --git a/third-party/cherryusb/class/audio/usbh_audio.c b/third-party/cherryusb/class/audio/usbh_audio.c new file mode 100644 index 0000000000000000000000000000000000000000..6e7d94e88b700b82b2ab46b30973468cd4e12f37 --- /dev/null +++ b/third-party/cherryusb/class/audio/usbh_audio.c @@ -0,0 +1,484 @@ +/* + * Copyright (c) 2022, sakumisu + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include "usbh_core.h" +#include "usbh_audio.h" + +#define DEV_FORMAT "/dev/audio%d" + +/* general descriptor field offsets */ +#define DESC_bLength 0 /** Length offset */ +#define DESC_bDescriptorType 1 /** Descriptor type offset */ +#define DESC_bDescriptorSubType 2 /** Descriptor subtype offset */ + +/* interface descriptor field offsets */ +#define INTF_DESC_bInterfaceNumber 2 /** Interface number offset */ +#define INTF_DESC_bAlternateSetting 3 /** Alternate setting offset */ + +static uint32_t g_devinuse = 0; + +USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_audio_buf[128]; + +static int usbh_audio_devno_alloc(struct usbh_audio *audio_class) +{ + int devno; + + for (devno = 0; devno < 32; devno++) { + uint32_t bitno = 1 << devno; + if ((g_devinuse & bitno) == 0) { + g_devinuse |= bitno; + audio_class->minor = devno; + return 0; + } + } + + return -EMFILE; +} + +static void usbh_audio_devno_free(struct usbh_audio *audio_class) +{ + int devno = audio_class->minor; + + if (devno >= 0 && devno < 32) { + g_devinuse &= ~(1 << devno); + } +} + +int usbh_audio_open(struct usbh_audio *audio_class, const char *name, uint32_t samp_freq) +{ + struct usb_setup_packet *setup = audio_class->hport->setup; + struct usb_endpoint_descriptor *ep_desc; + uint8_t mult; + uint16_t mps; + int ret; + uint8_t intf = 0xff; + uint8_t altsetting = 1; + + if (audio_class->is_opened) { + return -EMFILE; + } + + for (uint8_t i = 0; i < audio_class->module_num; i++) { + if (strcmp(name, audio_class->module[i].name) == 0) { + for (uint8_t j = 0; j < audio_class->num_of_intf_altsettings; j++) { + for (uint8_t k = 0; k < audio_class->module[i].altsetting[j].sampfreq_num; k++) { + if (audio_class->module[i].altsetting[j].sampfreq[k] == samp_freq) { + intf = audio_class->module[i].data_intf; + altsetting = j; + goto freq_found; + } + } + } + } + } + + return -ENODEV; + +freq_found: + + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; + setup->bRequest = USB_REQUEST_SET_INTERFACE; + setup->wValue = altsetting; + setup->wIndex = intf; + setup->wLength = 0; + + ret = usbh_control_transfer(audio_class->hport->ep0, setup, NULL); + if (ret < 0) { + return ret; + } + + ep_desc = &audio_class->hport->config.intf[intf].altsetting[altsetting].ep[0].ep_desc; + + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_ENDPOINT; + setup->bRequest = AUDIO_REQUEST_SET_CUR; + setup->wValue = (AUDIO_EP_CONTROL_SAMPLING_FEQ << 8) | 0x00; + setup->wIndex = ep_desc->bEndpointAddress; + setup->wLength = 3; + + memcpy(g_audio_buf, &samp_freq, 3); + ret = usbh_control_transfer(audio_class->hport->ep0, setup, g_audio_buf); + if (ret < 0) { + return ret; + } + + mult = (ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_MASK) >> USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_SHIFT; + mps = ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_MASK; + if (ep_desc->bEndpointAddress & 0x80) { + audio_class->isoin_mps = mps * (mult + 1); + usbh_hport_activate_epx(&audio_class->isoin, audio_class->hport, ep_desc); + } else { + audio_class->isoout_mps = mps * (mult + 1); + usbh_hport_activate_epx(&audio_class->isoout, audio_class->hport, ep_desc); + } + + USB_LOG_INFO("Open audio module :%s, altsetting: %u\r\n", name, altsetting); + audio_class->is_opened = true; + return ret; +} + +int usbh_audio_close(struct usbh_audio *audio_class, const char *name) +{ + struct usb_setup_packet *setup = audio_class->hport->setup; + struct usb_endpoint_descriptor *ep_desc; + int ret; + uint8_t intf = 0xff; + uint8_t altsetting = 1; + + for (size_t i = 0; i < audio_class->module_num; i++) { + if (strcmp(name, audio_class->module[i].name) == 0) { + intf = audio_class->module[i].data_intf; + } + } + + if (intf == 0xff) { + return -ENODEV; + } + + USB_LOG_INFO("Close audio module :%s\r\n", name); + audio_class->is_opened = false; + + ep_desc = &audio_class->hport->config.intf[intf].altsetting[altsetting].ep[0].ep_desc; + if (ep_desc->bEndpointAddress & 0x80) { + if (audio_class->isoin) { + usbh_pipe_free(audio_class->isoin); + audio_class->isoin = NULL; + } + } else { + if (audio_class->isoout) { + usbh_pipe_free(audio_class->isoout); + audio_class->isoout = NULL; + } + } + + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; + setup->bRequest = USB_REQUEST_SET_INTERFACE; + setup->wValue = 0; + setup->wIndex = intf; + setup->wLength = 0; + + ret = usbh_control_transfer(audio_class->hport->ep0, setup, NULL); + + return ret; +} + +int usbh_audio_set_volume(struct usbh_audio *audio_class, const char *name, uint8_t ch, uint8_t volume) +{ + struct usb_setup_packet *setup = audio_class->hport->setup; + int ret; + uint8_t intf = 0xff; + uint8_t feature_id = 0xff; + uint16_t volume_hex; + + for (size_t i = 0; i < audio_class->module_num; i++) { + if (strcmp(name, audio_class->module[i].name) == 0) { + intf = audio_class->ctrl_intf; + feature_id = audio_class->module[i].feature_unit_id; + } + } + + if (intf == 0xff) { + return -ENODEV; + } + + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; + setup->bRequest = AUDIO_REQUEST_SET_CUR; + setup->wValue = (AUDIO_FU_CONTROL_VOLUME << 8) | ch; + setup->wIndex = (feature_id << 8) | intf; + setup->wLength = 2; + + volume_hex = -0xDB00 / 100 * volume + 0xdb00; + + memcpy(g_audio_buf, &volume_hex, 2); + ret = usbh_control_transfer(audio_class->hport->ep0, setup, NULL); + + return ret; +} + +int usbh_audio_set_mute(struct usbh_audio *audio_class, const char *name, uint8_t ch, bool mute) +{ + struct usb_setup_packet *setup = audio_class->hport->setup; + int ret; + uint8_t intf = 0xff; + uint8_t feature_id = 0xff; + + for (size_t i = 0; i < audio_class->module_num; i++) { + if (strcmp(name, audio_class->module[i].name) == 0) { + intf = audio_class->ctrl_intf; + feature_id = audio_class->module[i].feature_unit_id; + } + } + + if (intf == 0xff) { + return -ENODEV; + } + + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; + setup->bRequest = AUDIO_REQUEST_SET_CUR; + setup->wValue = (AUDIO_FU_CONTROL_MUTE << 8) | ch; + setup->wIndex = (feature_id << 8) | intf; + setup->wLength = 1; + + memcpy(g_audio_buf, &mute, 1); + ret = usbh_control_transfer(audio_class->hport->ep0, setup, g_audio_buf); + + return ret; +} + +void usbh_audio_list_module(struct usbh_audio *audio_class) +{ + USB_LOG_INFO("============= Audio module information ===================\r\n"); + USB_LOG_INFO("bcdADC :%04x\r\n", audio_class->bcdADC); + USB_LOG_INFO("Num of modules :%u\r\n", audio_class->module_num); + USB_LOG_INFO("Num of altsettings:%u\r\n", audio_class->num_of_intf_altsettings); + + for (uint8_t i = 0; i < audio_class->module_num; i++) { + USB_LOG_INFO(" module name :%s\r\n", audio_class->module[i].name); + USB_LOG_INFO(" module feature unit id :%d\r\n", audio_class->module[i].feature_unit_id); + + for (uint8_t j = 0; j < audio_class->num_of_intf_altsettings; j++) { + if (j == 0) { + USB_LOG_INFO(" Ingore altsetting 0\r\n"); + continue; + } + USB_LOG_INFO(" Altsetting %u\r\n", j); + USB_LOG_INFO(" module channels :%u\r\n", audio_class->module[i].altsetting[j].channels); + //USB_LOG_INFO(" module format_type :%u\r\n",audio_class->module[i].altsetting[j].format_type); + USB_LOG_INFO(" module bitresolution :%u\r\n", audio_class->module[i].altsetting[j].bitresolution); + USB_LOG_INFO(" module sampfreq num :%u\r\n", audio_class->module[i].altsetting[j].sampfreq_num); + + for (uint8_t k = 0; k < audio_class->module[i].altsetting[j].sampfreq_num; k++) { + USB_LOG_INFO(" module sampfreq :%d hz\r\n", audio_class->module[i].altsetting[j].sampfreq[k]); + } + } + } + + USB_LOG_INFO("============= Audio module information ===================\r\n"); +} + +static int usbh_audio_ctrl_connect(struct usbh_hubport *hport, uint8_t intf) +{ + int ret; + uint8_t cur_iface = 0xff; + uint8_t cur_iface_count = 0xff; + uint8_t cur_alt_setting = 0xff; + uint8_t input_offset = 0; + uint8_t output_offset = 0; + uint8_t feature_unit_offset = 0; + uint8_t format_offset = 0; + uint8_t *p; + + struct usbh_audio *audio_class = usb_malloc(sizeof(struct usbh_audio)); + if (audio_class == NULL) { + USB_LOG_ERR("Fail to alloc audio_class\r\n"); + return -ENOMEM; + } + + memset(audio_class, 0, sizeof(struct usbh_audio)); + usbh_audio_devno_alloc(audio_class); + audio_class->hport = hport; + audio_class->ctrl_intf = intf; + audio_class->num_of_intf_altsettings = hport->config.intf[intf + 1].altsetting_num; + + hport->config.intf[intf].priv = audio_class; + + p = hport->raw_config_desc; + while (p[DESC_bLength]) { + switch (p[DESC_bDescriptorType]) { + case USB_DESCRIPTOR_TYPE_INTERFACE_ASSOCIATION: + cur_iface_count = p[3]; + break; + case USB_DESCRIPTOR_TYPE_INTERFACE: + cur_iface = p[INTF_DESC_bInterfaceNumber]; + cur_alt_setting = p[INTF_DESC_bAlternateSetting]; + break; + case USB_DESCRIPTOR_TYPE_ENDPOINT: + break; + case AUDIO_INTERFACE_DESCRIPTOR_TYPE: + if (cur_iface == audio_class->ctrl_intf) { + switch (p[DESC_bDescriptorSubType]) { + case AUDIO_CONTROL_HEADER: { + struct audio_cs_if_ac_header_descriptor *desc = (struct audio_cs_if_ac_header_descriptor *)p; + audio_class->bcdADC = desc->bcdADC; + audio_class->bInCollection = desc->bInCollection; + } break; + case AUDIO_CONTROL_INPUT_TERMINAL: { + struct audio_cs_if_ac_input_terminal_descriptor *desc = (struct audio_cs_if_ac_input_terminal_descriptor *)p; + + audio_class->module[input_offset].input_terminal_id = desc->bTerminalID; + audio_class->module[input_offset].input_terminal_type = desc->wTerminalType; + audio_class->module[input_offset].input_channel_config = desc->wChannelConfig; + + if (desc->wTerminalType == AUDIO_TERMINAL_STREAMING) { + audio_class->module[input_offset].terminal_link_id = desc->bTerminalID; + } + if (desc->wTerminalType == AUDIO_INTERM_MIC) { + audio_class->module[input_offset].name = "mic"; + } + input_offset++; + } break; + break; + case AUDIO_CONTROL_OUTPUT_TERMINAL: { + struct audio_cs_if_ac_output_terminal_descriptor *desc = (struct audio_cs_if_ac_output_terminal_descriptor *)p; + audio_class->module[output_offset].output_terminal_id = desc->bTerminalID; + audio_class->module[output_offset].output_terminal_type = desc->wTerminalType; + if (desc->wTerminalType == AUDIO_TERMINAL_STREAMING) { + audio_class->module[output_offset].terminal_link_id = desc->bTerminalID; + } + if (desc->wTerminalType == AUDIO_OUTTERM_SPEAKER) { + audio_class->module[output_offset].name = "speaker"; + } + output_offset++; + } break; + case AUDIO_CONTROL_FEATURE_UNIT: { + struct audio_cs_if_ac_feature_unit_descriptor *desc = (struct audio_cs_if_ac_feature_unit_descriptor *)p; + audio_class->module[feature_unit_offset].feature_unit_id = desc->bUnitID; + audio_class->module[feature_unit_offset].feature_unit_controlsize = desc->bControlSize; + + for (uint8_t j = 0; j < desc->bControlSize; j++) { + audio_class->module[feature_unit_offset].feature_unit_controls[j] = p[6 + j]; + } + feature_unit_offset++; + } break; + case AUDIO_CONTROL_PROCESSING_UNIT: + + break; + default: + break; + } + } else if ((cur_iface < (audio_class->ctrl_intf + cur_iface_count)) && (cur_iface > audio_class->ctrl_intf)) { + switch (p[DESC_bDescriptorSubType]) { + case AUDIO_STREAMING_GENERAL: + + break; + case AUDIO_STREAMING_FORMAT_TYPE: { + struct audio_cs_if_as_format_type_descriptor *desc = (struct audio_cs_if_as_format_type_descriptor *)p; + + audio_class->module[format_offset].data_intf = cur_iface; + audio_class->module[format_offset].altsetting[cur_alt_setting].channels = desc->bNrChannels; + audio_class->module[format_offset].altsetting[cur_alt_setting].format_type = desc->bFormatType; + audio_class->module[format_offset].altsetting[cur_alt_setting].bitresolution = desc->bBitResolution; + audio_class->module[format_offset].altsetting[cur_alt_setting].sampfreq_num = desc->bSamFreqType; + + for (uint8_t j = 0; j < desc->bSamFreqType; j++) { + audio_class->module[format_offset].altsetting[cur_alt_setting].sampfreq[j] = (uint32_t)(p[10 + j] << 16) | + (uint32_t)(p[9 + j] << 8) | + (uint32_t)(p[8 + j] << 0); + } + if (cur_alt_setting == (hport->config.intf[intf + 1].altsetting_num - 1)) { + format_offset++; + } + } break; + default: + break; + } + } + break; + default: + break; + } + /* skip to next descriptor */ + p += p[DESC_bLength]; + } + + if ((input_offset != output_offset) && (input_offset != feature_unit_offset) && (input_offset != format_offset)) { + return -EINVAL; + } + + audio_class->module_num = input_offset; + + for (size_t i = 0; i < audio_class->module_num; i++) { + ret = usbh_audio_close(audio_class, audio_class->module[i].name); + if (ret < 0) { + USB_LOG_ERR("Fail to close audio module :%s\r\n", audio_class->module[i].name); + return ret; + } + } + + usbh_audio_list_module(audio_class); + + snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, audio_class->minor); + USB_LOG_INFO("Register Audio Class:%s\r\n", hport->config.intf[intf].devname); + + usbh_audio_run(audio_class); + return 0; +} + +static int usbh_audio_ctrl_disconnect(struct usbh_hubport *hport, uint8_t intf) +{ + int ret = 0; + + struct usbh_audio *audio_class = (struct usbh_audio *)hport->config.intf[intf].priv; + + if (audio_class) { + usbh_audio_devno_free(audio_class); + + if (audio_class->isoin) { + usbh_pipe_free(audio_class->isoin); + } + + if (audio_class->isoout) { + usbh_pipe_free(audio_class->isoout); + } + + usbh_audio_stop(audio_class); + memset(audio_class, 0, sizeof(struct usbh_audio)); + usb_free(audio_class); + + if (hport->config.intf[intf].devname[0] != '\0') + USB_LOG_INFO("Unregister Audio Class:%s\r\n", hport->config.intf[intf].devname); + } + + return ret; +} + +static int usbh_audio_data_connect(struct usbh_hubport *hport, uint8_t intf) +{ + return 0; +} + +static int usbh_audio_data_disconnect(struct usbh_hubport *hport, uint8_t intf) +{ + return 0; +} + +__WEAK void usbh_audio_run(struct usbh_audio *audio_class) +{ +} + +__WEAK void usbh_audio_stop(struct usbh_audio *audio_class) +{ +} + +const struct usbh_class_driver audio_ctrl_class_driver = { + .driver_name = "audio_ctrl", + .connect = usbh_audio_ctrl_connect, + .disconnect = usbh_audio_ctrl_disconnect +}; + +const struct usbh_class_driver audio_streaming_class_driver = { + .driver_name = "audio_streaming", + .connect = usbh_audio_data_connect, + .disconnect = usbh_audio_data_disconnect +}; + +CLASS_INFO_DEFINE const struct usbh_class_info audio_ctrl_intf_class_info = { + .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS, + .class = USB_DEVICE_CLASS_AUDIO, + .subclass = AUDIO_SUBCLASS_AUDIOCONTROL, + .protocol = 0x00, + .vid = 0x00, + .pid = 0x00, + .class_driver = &audio_ctrl_class_driver +}; + +CLASS_INFO_DEFINE const struct usbh_class_info audio_streaming_intf_class_info = { + .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS, + .class = USB_DEVICE_CLASS_AUDIO, + .subclass = AUDIO_SUBCLASS_AUDIOSTREAMING, + .protocol = 0x00, + .vid = 0x00, + .pid = 0x00, + .class_driver = &audio_streaming_class_driver +}; diff --git a/third-party/cherryusb/class/audio/usbh_audio.h b/third-party/cherryusb/class/audio/usbh_audio.h new file mode 100644 index 0000000000000000000000000000000000000000..dcfed604e73a7930ca3c630262d69033e5de7ae1 --- /dev/null +++ b/third-party/cherryusb/class/audio/usbh_audio.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2022, sakumisu + * + * SPDX-License-Identifier: Apache-2.0 + */ +#ifndef USBH_AUDIO_H +#define USBH_AUDIO_H + +#include "usb_audio.h" + +struct usbh_audio_format_type { + uint8_t channels; + uint8_t format_type; + uint8_t bitresolution; + uint8_t sampfreq_num; + uint32_t sampfreq[3]; +}; + +/** + * bSourceID in feature_unit = input_terminal_id + * bSourceID in output_terminal = feature_unit_id + * terminal_link_id = input_terminal_id or output_terminal_id (if input_terminal_type or output_terminal_type is 0x0101) + * + * +*/ +struct usbh_audio_module { + const char *name; + uint8_t data_intf; + uint8_t input_terminal_id; + uint16_t input_terminal_type; + uint16_t input_channel_config; + uint8_t output_terminal_id; + uint16_t output_terminal_type; + uint8_t feature_unit_id; + uint8_t feature_unit_controlsize; + uint8_t feature_unit_controls[8]; + uint8_t terminal_link_id; + struct usbh_audio_format_type altsetting[CONFIG_USBHOST_MAX_INTF_ALTSETTINGS]; +}; + +struct usbh_audio { + struct usbh_hubport *hport; + + uint8_t ctrl_intf; /* interface number */ + uint8_t minor; + usbh_pipe_t isoin; /* ISO IN endpoint */ + usbh_pipe_t isoout; /* ISO OUT endpoint */ + uint16_t isoin_mps; + uint16_t isoout_mps; + bool is_opened; + uint16_t bcdADC; + uint8_t bInCollection; + uint8_t num_of_intf_altsettings; + struct usbh_audio_module module[2]; + uint8_t module_num; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +int usbh_audio_open(struct usbh_audio *audio_class, const char *name, uint32_t samp_freq); +int usbh_audio_close(struct usbh_audio *audio_class, const char *name); +int usbh_audio_set_volume(struct usbh_audio *audio_class, const char *name, uint8_t ch, uint8_t volume); +int usbh_audio_set_mute(struct usbh_audio *audio_class, const char *name, uint8_t ch, bool mute); + +void usbh_audio_run(struct usbh_audio *audio_class); +void usbh_audio_stop(struct usbh_audio *audio_class); + +#ifdef __cplusplus +} +#endif + +#endif /* USBH_AUDIO_H */ diff --git a/third-party/cherryusb-0.7.0/class/cdc/usb_cdc.h b/third-party/cherryusb/class/cdc/usb_cdc.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/cdc/usb_cdc.h rename to third-party/cherryusb/class/cdc/usb_cdc.h diff --git a/third-party/cherryusb-0.7.0/class/cdc/usbd_cdc.c b/third-party/cherryusb/class/cdc/usbd_cdc.c similarity index 95% rename from third-party/cherryusb-0.7.0/class/cdc/usbd_cdc.c rename to third-party/cherryusb/class/cdc/usbd_cdc.c index 2f4977f4d52e1ff905aaf9b7afdde90d1604a764..1820037eb6af78d32c2237a880fdd605a7f8d4af 100644 --- a/third-party/cherryusb-0.7.0/class/cdc/usbd_cdc.c +++ b/third-party/cherryusb/class/cdc/usbd_cdc.c @@ -80,22 +80,12 @@ static int cdc_acm_class_interface_request_handler(struct usb_setup_packet *setu return 0; } -static void cdc_notify_handler(uint8_t event, void *arg) -{ - switch (event) { - case USBD_EVENT_RESET: - break; - default: - break; - } -} - struct usbd_interface *usbd_cdc_acm_init_intf(struct usbd_interface *intf) { intf->class_interface_handler = cdc_acm_class_interface_request_handler; intf->class_endpoint_handler = NULL; intf->vendor_handler = NULL; - intf->notify_handler = cdc_notify_handler; + intf->notify_handler = NULL; return intf; } diff --git a/third-party/cherryusb-0.7.0/class/cdc/usbd_cdc.h b/third-party/cherryusb/class/cdc/usbd_cdc.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/cdc/usbd_cdc.h rename to third-party/cherryusb/class/cdc/usbd_cdc.h diff --git a/third-party/cherryusb-0.7.0/class/cdc/usbh_cdc_acm.c b/third-party/cherryusb/class/cdc/usbh_cdc_acm.c similarity index 84% rename from third-party/cherryusb-0.7.0/class/cdc/usbh_cdc_acm.c rename to third-party/cherryusb/class/cdc/usbh_cdc_acm.c index 77300a9c094080462fb274c4cc7638bdd1f4089c..bf1babb82a7275b0374fbd90bef0504fe423cf8e 100644 --- a/third-party/cherryusb-0.7.0/class/cdc/usbh_cdc_acm.c +++ b/third-party/cherryusb/class/cdc/usbh_cdc_acm.c @@ -38,7 +38,7 @@ static void usbh_cdc_acm_devno_free(struct usbh_cdc_acm *cdc_acm_class) int usbh_cdc_acm_set_line_coding(struct usbh_cdc_acm *cdc_acm_class, struct cdc_line_coding *line_coding) { - struct usb_setup_packet *setup = &cdc_acm_class->hport->setup; + struct usb_setup_packet *setup = cdc_acm_class->hport->setup; setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = CDC_REQUEST_SET_LINE_CODING; @@ -53,7 +53,7 @@ int usbh_cdc_acm_set_line_coding(struct usbh_cdc_acm *cdc_acm_class, struct cdc_ int usbh_cdc_acm_get_line_coding(struct usbh_cdc_acm *cdc_acm_class, struct cdc_line_coding *line_coding) { - struct usb_setup_packet *setup = &cdc_acm_class->hport->setup; + struct usb_setup_packet *setup = cdc_acm_class->hport->setup; int ret; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; @@ -72,7 +72,7 @@ int usbh_cdc_acm_get_line_coding(struct usbh_cdc_acm *cdc_acm_class, struct cdc_ int usbh_cdc_acm_set_line_state(struct usbh_cdc_acm *cdc_acm_class, bool dtr, bool rts) { - struct usb_setup_packet *setup = &cdc_acm_class->hport->setup; + struct usb_setup_packet *setup = cdc_acm_class->hport->setup; setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = CDC_REQUEST_SET_CONTROL_LINE_STATE; @@ -146,6 +146,7 @@ static int usbh_cdc_acm_connect(struct usbh_hubport *hport, uint8_t intf) USB_LOG_INFO("Register CDC ACM Class:%s\r\n", hport->config.intf[intf].devname); + usbh_cdc_acm_run(cdc_acm_class); return ret; } @@ -166,6 +167,7 @@ static int usbh_cdc_acm_disconnect(struct usbh_hubport *hport, uint8_t intf) usbh_pipe_free(cdc_acm_class->bulkout); } + usbh_cdc_acm_stop(cdc_acm_class); memset(cdc_acm_class, 0, sizeof(struct usbh_cdc_acm)); usb_free(cdc_acm_class); @@ -176,12 +178,38 @@ static int usbh_cdc_acm_disconnect(struct usbh_hubport *hport, uint8_t intf) return ret; } +static int usbh_cdc_data_connect(struct usbh_hubport *hport, uint8_t intf) +{ + return 0; +} + +static int usbh_cdc_data_disconnect(struct usbh_hubport *hport, uint8_t intf) +{ + return 0; +} + +__WEAK void usbh_cdc_acm_run(struct usbh_cdc_acm *cdc_acm_class) +{ + +} + +__WEAK void usbh_cdc_acm_stop(struct usbh_cdc_acm *cdc_acm_class) +{ + +} + const struct usbh_class_driver cdc_acm_class_driver = { .driver_name = "cdc_acm", .connect = usbh_cdc_acm_connect, .disconnect = usbh_cdc_acm_disconnect }; +const struct usbh_class_driver cdc_data_class_driver = { + .driver_name = "cdc_data", + .connect = usbh_cdc_data_connect, + .disconnect = usbh_cdc_data_disconnect +}; + CLASS_INFO_DEFINE const struct usbh_class_info cdc_acm_class_info = { .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL, .class = USB_DEVICE_CLASS_CDC, @@ -191,3 +219,13 @@ CLASS_INFO_DEFINE const struct usbh_class_info cdc_acm_class_info = { .pid = 0x00, .class_driver = &cdc_acm_class_driver }; + +CLASS_INFO_DEFINE const struct usbh_class_info cdc_data_class_info = { + .match_flags = USB_CLASS_MATCH_INTF_CLASS, + .class = USB_DEVICE_CLASS_CDC_DATA, + .subclass = 0x00, + .protocol = 0x00, + .vid = 0x00, + .pid = 0x00, + .class_driver = &cdc_data_class_driver +}; diff --git a/third-party/cherryusb-0.7.0/class/cdc/usbh_cdc_acm.h b/third-party/cherryusb/class/cdc/usbh_cdc_acm.h similarity index 89% rename from third-party/cherryusb-0.7.0/class/cdc/usbh_cdc_acm.h rename to third-party/cherryusb/class/cdc/usbh_cdc_acm.h index eda1ea935f8ad96751fa6b2910ee868d23e26505..3ffa64d0f8f8d2d6691d7f1ed4b0d3db52b73299 100644 --- a/third-party/cherryusb-0.7.0/class/cdc/usbh_cdc_acm.h +++ b/third-party/cherryusb/class/cdc/usbh_cdc_acm.h @@ -32,6 +32,9 @@ int usbh_cdc_acm_set_line_coding(struct usbh_cdc_acm *cdc_acm_class, struct cdc_ int usbh_cdc_acm_get_line_coding(struct usbh_cdc_acm *cdc_acm_class, struct cdc_line_coding *line_coding); int usbh_cdc_acm_set_line_state(struct usbh_cdc_acm *cdc_acm_class, bool dtr, bool rts); +void usbh_cdc_acm_run(struct usbh_cdc_acm *cdc_acm_class); +void usbh_cdc_acm_stop(struct usbh_cdc_acm *cdc_acm_class); + #ifdef __cplusplus } #endif diff --git a/third-party/cherryusb-0.7.0/class/dfu/usb_dfu.h b/third-party/cherryusb/class/dfu/usb_dfu.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/dfu/usb_dfu.h rename to third-party/cherryusb/class/dfu/usb_dfu.h diff --git a/third-party/cherryusb-0.7.0/class/dfu/usbd_dfu.c b/third-party/cherryusb/class/dfu/usbd_dfu.c similarity index 98% rename from third-party/cherryusb-0.7.0/class/dfu/usbd_dfu.c rename to third-party/cherryusb/class/dfu/usbd_dfu.c index 3042e4df4bff9ea10120add78828ce089964f899..e22dfcaf84911f1aa5d7d6b27b4c203a3f31739c 100644 --- a/third-party/cherryusb-0.7.0/class/dfu/usbd_dfu.c +++ b/third-party/cherryusb/class/dfu/usbd_dfu.c @@ -130,7 +130,7 @@ static void dfu_request_upload(struct usb_setup_packet *setup, uint8_t **data, u usbd_dfu_cfg.buffer.d8[2] = DFU_CMD_ERASE; /* Send the status data over EP0 */ - *data = usbd_dfu_cfg.buffer.d8; + memcpy(*data, usbd_dfu_cfg.buffer.d8, 3); *len = 3; } else if (usbd_dfu_cfg.wblock_num > 1U) { usbd_dfu_cfg.dev_state = DFU_STATE_DFU_UPLOAD_IDLE; @@ -146,7 +146,7 @@ static void dfu_request_upload(struct usb_setup_packet *setup, uint8_t **data, u phaddr = dfu_read_flash((uint8_t *)addr, usbd_dfu_cfg.buffer.d8, usbd_dfu_cfg.wlength); /* Send the status data over EP0 */ - *data = usbd_dfu_cfg.buffer.d8; + memcpy(*data, usbd_dfu_cfg.buffer.d8, usbd_dfu_cfg.wlength); *len = usbd_dfu_cfg.wlength; } else /* unsupported usbd_dfu_cfg.wblock_num */ { @@ -369,9 +369,7 @@ static void dfu_request_getstatus(struct usb_setup_packet *setup, uint8_t **data } /* Send the status data over EP0 */ - uint8_t temp_data[6]; - memcpy(temp_data, usbd_dfu_cfg.dev_status, 6); - *data = temp_data; + memcpy(*data, usbd_dfu_cfg.dev_status, 6); *len = 6; if (usbd_dfu_cfg.firmwar_flag == 1) { @@ -407,7 +405,7 @@ static void dfu_request_clrstatus(void) static void dfu_request_getstate(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) { /* Return the current state of the DFU interface */ - *data = &usbd_dfu_cfg.dev_state; + (*data)[0] = usbd_dfu_cfg.dev_state; *len = 1; } diff --git a/third-party/cherryusb-0.7.0/class/dfu/usbd_dfu.h b/third-party/cherryusb/class/dfu/usbd_dfu.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/dfu/usbd_dfu.h rename to third-party/cherryusb/class/dfu/usbd_dfu.h diff --git a/third-party/cherryusb-0.7.0/class/hid/usb_hid.h b/third-party/cherryusb/class/hid/usb_hid.h similarity index 99% rename from third-party/cherryusb-0.7.0/class/hid/usb_hid.h rename to third-party/cherryusb/class/hid/usb_hid.h index 19539e7fb6715b0fdb1c82044153785ff654c8f2..65913fb3abf478628c58269414a39e366a105809 100644 --- a/third-party/cherryusb-0.7.0/class/hid/usb_hid.h +++ b/third-party/cherryusb/class/hid/usb_hid.h @@ -387,7 +387,7 @@ #define HID_KBD_USAGE_PAGEDOWN 0x4e /* Keyboard PageDown */ #define HID_KBD_USAGE_RIGHT 0x4f /* eyboard RightArrow */ #define HID_KBD_USAGE_LEFT 0x50 /* Keyboard LeftArrow */ -#define HID_KBD_USAGE_DOWN 0x5a /* Keyboard DownArrow */ +#define HID_KBD_USAGE_DOWN 0x51 /* Keyboard DownArrow */ #define HID_KBD_USAGE_UP 0x52 /* Keyboard UpArrow */ #define HID_KBD_USAGE_KPDNUMLOCK 0x53 /* Keypad Num Lock and Clear */ #define HID_KBD_USAGE_KPDNUMLOCKCLEAR 0x53 /* Keypad Num Lock and Clear */ @@ -565,8 +565,8 @@ struct usb_hid_kbd_report struct usb_hid_mouse_report { uint8_t buttons; /* See HID_MOUSE_INPUT_BUTTON_* definitions */ - uint8_t xdisp; /* X displacement */ - uint8_t ydisp; /* y displacement */ + int8_t xdisp; /* X displacement */ + int8_t ydisp; /* y displacement */ /* Device specific additional bytes may follow */ #ifdef CONFIG_INPUT_MOUSE_WHEEL uint8_t wdisp; /* Wheel displacement */ diff --git a/third-party/cherryusb-0.7.0/class/hid/usbd_hid.c b/third-party/cherryusb/class/hid/usbd_hid.c similarity index 100% rename from third-party/cherryusb-0.7.0/class/hid/usbd_hid.c rename to third-party/cherryusb/class/hid/usbd_hid.c diff --git a/third-party/cherryusb-0.7.0/class/hid/usbd_hid.h b/third-party/cherryusb/class/hid/usbd_hid.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/hid/usbd_hid.h rename to third-party/cherryusb/class/hid/usbd_hid.h diff --git a/third-party/cherryusb-0.7.0/class/hid/usbh_hid.c b/third-party/cherryusb/class/hid/usbh_hid.c similarity index 74% rename from third-party/cherryusb-0.7.0/class/hid/usbh_hid.c rename to third-party/cherryusb/class/hid/usbh_hid.c index 1ad95f1fdcc89cdc43466723472ec37625851da5..7a7bee78c39a8f099f109e65aaf26a56ae40d18b 100644 --- a/third-party/cherryusb-0.7.0/class/hid/usbh_hid.c +++ b/third-party/cherryusb/class/hid/usbh_hid.c @@ -6,7 +6,9 @@ #include "usbh_core.h" #include "usbh_hid.h" -#define DEV_FORMAT "/dev/input%d" +#define DEV_FORMAT "/usb%d/input%d" +#define KBD_FORMAT "/usb%d/kbd%d" +#define MOUSE_FORMAT "/usb%d/mouse%d" static uint32_t g_devinuse = 0; @@ -39,7 +41,7 @@ static void usbh_hid_devno_free(struct usbh_hid *hid_class) static int usbh_hid_get_report_descriptor(struct usbh_hid *hid_class, uint8_t *buffer) { - struct usb_setup_packet *setup = &hid_class->hport->setup; + struct usb_setup_packet *setup = hid_class->hport->setup; int ret; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; @@ -58,7 +60,7 @@ static int usbh_hid_get_report_descriptor(struct usbh_hid *hid_class, uint8_t *b int usbh_hid_set_idle(struct usbh_hid *hid_class, uint8_t report_id, uint8_t duration) { - struct usb_setup_packet *setup = &hid_class->hport->setup; + struct usb_setup_packet *setup = hid_class->hport->setup; setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = HID_REQUEST_SET_IDLE; @@ -71,7 +73,7 @@ int usbh_hid_set_idle(struct usbh_hid *hid_class, uint8_t report_id, uint8_t dur int usbh_hid_get_idle(struct usbh_hid *hid_class, uint8_t *buffer) { - struct usb_setup_packet *setup = &hid_class->hport->setup; + struct usb_setup_packet *setup = hid_class->hport->setup; int ret; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; @@ -90,7 +92,7 @@ int usbh_hid_get_idle(struct usbh_hid *hid_class, uint8_t *buffer) int usbh_hid_set_protocol(struct usbh_hid *hid_class, uint8_t protocol) { - struct usb_setup_packet *setup = &hid_class->hport->setup; + struct usb_setup_packet *setup = hid_class->hport->setup; setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = HID_REQUEST_SET_PROTOCOL; @@ -104,6 +106,7 @@ int usbh_hid_set_protocol(struct usbh_hid *hid_class, uint8_t protocol) int usbh_hid_connect(struct usbh_hubport *hport, uint8_t intf) { struct usb_endpoint_descriptor *ep_desc; + struct usbh_bus *usb = usbh_get_bus_of_port(hport); int ret; struct usbh_hid *hid_class = usb_malloc(sizeof(struct usbh_hid)); @@ -144,11 +147,18 @@ int usbh_hid_connect(struct usbh_hubport *hport, uint8_t intf) } } - snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, hid_class->minor); + /* register hid device with different name */ + if (HID_PROTOCOL_KEYBOARD == hport->config.intf[intf].altsetting[0].intf_desc.bInterfaceProtocol) + snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, KBD_FORMAT, usb->id, hid_class->minor); + else if (HID_PROTOCOL_MOUSE == hport->config.intf[intf].altsetting[0].intf_desc.bInterfaceProtocol) + snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, MOUSE_FORMAT, usb->id, hid_class->minor); + else + snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, usb->id, hid_class->minor); - USB_LOG_INFO("Register HID Class:%s\r\n", hport->config.intf[intf].devname); + USB_LOG_RAW("Register HID Class:%s for USB-%d\r\n", hport->config.intf[intf].devname, usb->id); - return 0; + usbh_hid_run(hid_class); + return ret; } int usbh_hid_disconnect(struct usbh_hubport *hport, uint8_t intf) @@ -168,37 +178,38 @@ int usbh_hid_disconnect(struct usbh_hubport *hport, uint8_t intf) usbh_pipe_free(hid_class->intout); } + usbh_hid_stop(hid_class); memset(hid_class, 0, sizeof(struct usbh_hid)); usb_free(hid_class); if (hport->config.intf[intf].devname[0] != '\0') - USB_LOG_INFO("Unregister HID Class:%s\r\n", hport->config.intf[intf].devname); + USB_LOG_RAW("Unregister HID Class:%s\r\n", hport->config.intf[intf].devname); } return ret; } +__WEAK void usbh_hid_run(struct usbh_hid *hid_class) +{ + +} + +__WEAK void usbh_hid_stop(struct usbh_hid *hid_class) +{ + +} + const struct usbh_class_driver hid_class_driver = { .driver_name = "hid", .connect = usbh_hid_connect, .disconnect = usbh_hid_disconnect }; -CLASS_INFO_DEFINE const struct usbh_class_info hid_keyboard_class_info = { - .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL, - .class = USB_DEVICE_CLASS_HID, - .subclass = HID_SUBCLASS_BOOTIF, - .protocol = HID_PROTOCOL_KEYBOARD, - .vid = 0x00, - .pid = 0x00, - .class_driver = &hid_class_driver -}; - -CLASS_INFO_DEFINE const struct usbh_class_info hid_mouse_class_info = { - .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL, +CLASS_INFO_DEFINE const struct usbh_class_info hid_custom_class_info = { + .match_flags = USB_CLASS_MATCH_INTF_CLASS, .class = USB_DEVICE_CLASS_HID, - .subclass = HID_SUBCLASS_BOOTIF, - .protocol = HID_PROTOCOL_MOUSE, + .subclass = 0x00, + .protocol = 0x00, .vid = 0x00, .pid = 0x00, .class_driver = &hid_class_driver diff --git a/third-party/cherryusb-0.7.0/class/hid/usbh_hid.h b/third-party/cherryusb/class/hid/usbh_hid.h similarity index 86% rename from third-party/cherryusb-0.7.0/class/hid/usbh_hid.h rename to third-party/cherryusb/class/hid/usbh_hid.h index 74e8b4082c96d72cfa4cb105832de63b27d0e7a7..9faf2023ba4880cec8fe65a09d80670fdd70c9b2 100644 --- a/third-party/cherryusb-0.7.0/class/hid/usbh_hid.h +++ b/third-party/cherryusb/class/hid/usbh_hid.h @@ -25,6 +25,9 @@ extern "C" { int usbh_hid_set_idle(struct usbh_hid *hid_class, uint8_t report_id, uint8_t duration); int usbh_hid_get_idle(struct usbh_hid *hid_class, uint8_t *buffer); +void usbh_hid_run(struct usbh_hid *hid_class); +void usbh_hid_stop(struct usbh_hid *hid_class); + #ifdef __cplusplus } #endif diff --git a/third-party/cherryusb-0.7.0/class/hub/usb_hub.h b/third-party/cherryusb/class/hub/usb_hub.h similarity index 97% rename from third-party/cherryusb-0.7.0/class/hub/usb_hub.h rename to third-party/cherryusb/class/hub/usb_hub.h index 022ca2a05c9300d0e5e001f4c18f5f4fb8f9c4e8..5ffa84726ea7a070739de7a343c7436e88fee378 100644 --- a/third-party/cherryusb-0.7.0/class/hub/usb_hub.h +++ b/third-party/cherryusb/class/hub/usb_hub.h @@ -7,7 +7,8 @@ #define USB_HUB_H /* HUB Class Descriptor Types */ -#define HUB_DESCRIPTOR_TYPE_HUB 0x29 +#define HUB_DESCRIPTOR_TYPE_HUB 0x29 +#define HUB_DESCRIPTOR_TYPE_HUB3 0x2a /* Hub class requests */ #define HUB_REQUEST_GET_STATUS USB_REQUEST_GET_STATUS @@ -19,6 +20,7 @@ #define HUB_REQUEST_RESET_TT (0x09) #define HUB_REQUEST_GET_TT_STATE (0x0a) #define HUB_REQUEST_STOP_TT (0x0b) +#define HUB_REQUEST_SET_HUB_DEPTH (0x0C) /* Hub class features */ #define HUB_FEATURE_HUB_C_LOCALPOWER (0x0) diff --git a/third-party/cherryusb-0.7.0/class/hub/usbh_hub.c b/third-party/cherryusb/class/hub/usbh_hub.c similarity index 57% rename from third-party/cherryusb-0.7.0/class/hub/usbh_hub.c rename to third-party/cherryusb/class/hub/usbh_hub.c index b62112176e68d36456a276c4c6c54c0f79924870..f1a320898f272c0657308c498fee0992c77868da 100644 --- a/third-party/cherryusb-0.7.0/class/hub/usbh_hub.c +++ b/third-party/cherryusb/class/hub/usbh_hub.c @@ -5,35 +5,32 @@ */ #include "usbh_hub.h" -#define DEV_FORMAT "/dev/hub%d" +#define DEV_FORMAT "/usb%d/hub%d" -#define DEBOUNCE_TIMEOUT 400 -#define DEBOUNCE_TIME_STEP 25 +#define HUB_DEBOUNCE_TIMEOUT 1500 +#define HUB_DEBOUNCE_STEP 25 +#define HUB_DEBOUNCE_STABLE 100 #define DELAY_TIME_AFTER_RESET 200 #define EXTHUB_FIRST_INDEX 2 +#if CONFIG_USBHOST_MAX_EXTHUBS > 0 static uint32_t g_devinuse = 0; - -USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_hub_buf[32]; - -usb_slist_t hub_event_head = USB_SLIST_OBJECT_INIT(hub_event_head); -usb_slist_t hub_class_head = USB_SLIST_OBJECT_INIT(hub_class_head); - -usb_osal_sem_t hub_event_wait; -usb_osal_thread_t hub_thread; - -USB_NOCACHE_RAM_SECTION struct usbh_hub roothub; -struct usbh_hubport roothub_parent_port; - -USB_NOCACHE_RAM_SECTION struct usbh_hub exthub[CONFIG_USBHOST_MAX_EXTHUBS]; +#endif extern int usbh_hport_activate_ep0(struct usbh_hubport *hport); extern int usbh_hport_deactivate_ep0(struct usbh_hubport *hport); extern int usbh_enumerate(struct usbh_hubport *hport); +static void usbh_hub_thread_wakeup(struct usbh_hub *hub); static const char *speed_table[] = { "error-speed", "low-speed", "full-speed", "high-speed", "wireless-speed", "super-speed", "superplus-speed" }; +struct usbh_hubport *usbh_get_roothub_port (struct usbh_bus *bus, unsigned int address) +{ + return &(bus->roothub.child[ address - 1 ]); +} + +#if CONFIG_USBHOST_MAX_EXTHUBS > 0 static int usbh_hub_devno_alloc(void) { int devno; @@ -55,25 +52,48 @@ static void usbh_hub_devno_free(uint8_t devno) g_devinuse &= ~(1 << devno); } } +#endif + +static void usbh_hub_register(struct usbh_hub *hub) +{ + struct usbh_bus *usb = hub->usb; + usb_slist_add_tail(&usb->hub_class_head, &hub->list); +} + +#if CONFIG_USBHOST_MAX_EXTHUBS > 0 +static void usbh_hub_unregister(struct usbh_hub *hub) +{ + struct usbh_bus *usb = hub->usb; + usb_slist_remove(&usb->hub_class_head, &hub->list); +} static int _usbh_hub_get_hub_descriptor(struct usbh_hub *hub, uint8_t *buffer) { struct usb_setup_packet *setup; int ret; - setup = &hub->parent->setup; + setup = hub->parent->setup; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_DEVICE; setup->bRequest = USB_REQUEST_GET_DESCRIPTOR; - setup->wValue = HUB_DESCRIPTOR_TYPE_HUB << 8; + + /* TODO: hub descriptor has some difference between USB 2.0 and USB 3.x, + and we havn't handle the difference here */ + if ((hub->parent->speed == USB_SPEED_SUPER) || + (hub->parent->speed == USB_SPEED_SUPER_PLUS)) { + setup->wValue = HUB_DESCRIPTOR_TYPE_HUB3 << 8; + } else { + setup->wValue = HUB_DESCRIPTOR_TYPE_HUB << 8; + } + setup->wIndex = 0; setup->wLength = USB_SIZEOF_HUB_DESC; - ret = usbh_control_transfer(hub->parent->ep0, setup, g_hub_buf); + ret = usbh_control_transfer(hub->parent->ep0, setup, hub->g_hub_buf); if (ret < 0) { return ret; } - memcpy(buffer, g_hub_buf, USB_SIZEOF_HUB_DESC); + memcpy(buffer, hub->g_hub_buf, USB_SIZEOF_HUB_DESC); return ret; } @@ -82,7 +102,7 @@ static int _usbh_hub_get_status(struct usbh_hub *hub, uint8_t *buffer) struct usb_setup_packet *setup; int ret; - setup = &hub->parent->setup; + setup = hub->parent->setup; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_DEVICE; setup->bRequest = HUB_REQUEST_GET_STATUS; @@ -90,20 +110,21 @@ static int _usbh_hub_get_status(struct usbh_hub *hub, uint8_t *buffer) setup->wIndex = 0; setup->wLength = 2; - ret = usbh_control_transfer(hub->parent->ep0, setup, g_hub_buf); + ret = usbh_control_transfer(hub->parent->ep0, setup, hub->g_hub_buf); if (ret < 0) { return ret; } - memcpy(buffer, g_hub_buf, 2); + memcpy(buffer, hub->g_hub_buf, 2); return ret; } +#endif static int _usbh_hub_get_portstatus(struct usbh_hub *hub, uint8_t port, struct hub_port_status *port_status) { struct usb_setup_packet *setup; int ret; - setup = &hub->parent->setup; + setup = hub->parent->setup; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_OTHER; setup->bRequest = HUB_REQUEST_GET_STATUS; @@ -111,11 +132,11 @@ static int _usbh_hub_get_portstatus(struct usbh_hub *hub, uint8_t port, struct h setup->wIndex = port; setup->wLength = 4; - ret = usbh_control_transfer(hub->parent->ep0, setup, g_hub_buf); + ret = usbh_control_transfer(hub->parent->ep0, setup, hub->g_hub_buf); if (ret < 0) { return ret; } - memcpy(port_status, g_hub_buf, 4); + memcpy(port_status, hub->g_hub_buf, 4); return ret; } @@ -123,7 +144,7 @@ static int _usbh_hub_set_feature(struct usbh_hub *hub, uint8_t port, uint8_t fea { struct usb_setup_packet *setup; - setup = &hub->parent->setup; + setup = hub->parent->setup; setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_OTHER; setup->bRequest = HUB_REQUEST_SET_FEATURE; @@ -138,7 +159,7 @@ static int _usbh_hub_clear_feature(struct usbh_hub *hub, uint8_t port, uint8_t f { struct usb_setup_packet *setup; - setup = &hub->parent->setup; + setup = hub->parent->setup; setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_OTHER; setup->bRequest = HUB_REQUEST_CLEAR_FEATURE; @@ -149,6 +170,22 @@ static int _usbh_hub_clear_feature(struct usbh_hub *hub, uint8_t port, uint8_t f return usbh_control_transfer(hub->parent->ep0, setup, NULL); } +static int _usbh_hub_set_depth(struct usbh_hub *hub, uint16_t depth) +{ + struct usb_setup_packet *setup; + + setup = hub->parent->setup; + + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_DEVICE; + setup->bRequest = HUB_REQUEST_SET_HUB_DEPTH; + setup->wValue = depth; + setup->wIndex = 0; + setup->wLength = 0; + + return usbh_control_transfer(hub->parent->ep0, setup, NULL); +} + +#if CONFIG_USBHOST_MAX_EXTHUBS > 0 static int parse_hub_descriptor(struct usb_hub_descriptor *desc, uint16_t length) { if (desc->bLength != USB_SIZEOF_HUB_DESC) { @@ -170,6 +207,7 @@ static int parse_hub_descriptor(struct usb_hub_descriptor *desc, uint16_t length } return 0; } +#endif static int usbh_hub_get_portstatus(struct usbh_hub *hub, uint8_t port, struct hub_port_status *port_status) { @@ -183,7 +221,7 @@ static int usbh_hub_get_portstatus(struct usbh_hub *hub, uint8_t port, struct hu setup->wValue = 0; setup->wIndex = port; setup->wLength = 4; - return usbh_roothub_control(&roothub_setup, (uint8_t *)port_status); + return usbh_roothub_control(hub->usb, &roothub_setup, (uint8_t *)port_status); } else { return _usbh_hub_get_portstatus(hub, port, port_status); } @@ -201,7 +239,7 @@ static int usbh_hub_set_feature(struct usbh_hub *hub, uint8_t port, uint8_t feat setup->wValue = feature; setup->wIndex = port; setup->wLength = 0; - return usbh_roothub_control(setup, NULL); + return usbh_roothub_control(hub->usb, setup, NULL); } else { return _usbh_hub_set_feature(hub, port, feature); } @@ -219,18 +257,31 @@ static int usbh_hub_clear_feature(struct usbh_hub *hub, uint8_t port, uint8_t fe setup->wValue = feature; setup->wIndex = port; setup->wLength = 0; - return usbh_roothub_control(setup, NULL); + return usbh_roothub_control(hub->usb, setup, NULL); } else { return _usbh_hub_clear_feature(hub, port, feature); } } -static void usbh_hub_thread_wakeup(struct usbh_hub *hub) +static int usbh_hub_set_depth(struct usbh_hub *hub, uint16_t depth) { - usb_slist_add_tail(&hub_event_head, &hub->hub_event_list); - usb_osal_sem_give(hub_event_wait); + struct usb_setup_packet roothub_setup; + struct usb_setup_packet *setup; + + if (hub->is_roothub) { + setup = &roothub_setup; + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_DEVICE; + setup->bRequest = HUB_REQUEST_SET_HUB_DEPTH; + setup->wValue = depth; + setup->wIndex = 0; + setup->wLength = 0; + return usbh_roothub_control(hub->usb, setup, NULL); + } else { + return _usbh_hub_set_depth(hub, depth); + } } +#if CONFIG_USBHOST_MAX_EXTHUBS > 0 static void hub_int_complete_callback(void *arg, int nbytes) { struct usbh_hub *hub = (struct usbh_hub *)arg; @@ -244,6 +295,7 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf) { struct usb_endpoint_descriptor *ep_desc; struct hub_port_status port_status; + struct usbh_bus *usb = usbh_get_bus_of_port(hport); int ret; int index; @@ -254,7 +306,7 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf) return -ENOMEM; } - struct usbh_hub *hub = &exthub[index - EXTHUB_FIRST_INDEX]; + struct usbh_hub *hub = &(usb->exthub[index - EXTHUB_FIRST_INDEX]); memset(hub, 0, sizeof(struct usbh_hub)); hub->hub_addr = hport->dev_addr; @@ -282,6 +334,20 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf) return -1; } + if (hport->speed == USB_SPEED_SUPER) { + uint16_t depth = 0; + struct usbh_hubport *parent = hport->parent->parent; + while (parent) { + depth++; + parent = parent->parent->parent; + } + + ret = usbh_hub_set_depth(hub, depth); + if (ret < 0) { + return ret; + } + } + for (uint8_t port = 0; port < hub->hub_desc.bNbrPorts; port++) { ret = usbh_hub_set_feature(hub, port + 1, HUB_PORT_FEATURE_POWER); if (ret < 0) { @@ -297,11 +363,14 @@ static int usbh_hub_connect(struct usbh_hubport *hport, uint8_t intf) } } + hub->ports = hub->hub_desc.bNbrPorts; hub->connected = true; - snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, hub->index); + hub->usb = usb; + snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, usb->id, hub->index); usbh_hub_register(hub); - USB_LOG_INFO("Register HUB Class:%s\r\n", hport->config.intf[intf].devname); + USB_LOG_RAW("Register HUB Class:%s for USB-%d\r\n", hport->config.intf[intf].devname, usb->id); + hub->int_buffer = hub->g_hub_intbuf[hub->index - 1]; usbh_int_urb_fill(&hub->intin_urb, hub->intin, hub->int_buffer, 1, 0, hub_int_complete_callback, hub); usbh_submit_urb(&hub->intin_urb); return 0; @@ -326,7 +395,7 @@ static int usbh_hub_disconnect(struct usbh_hubport *hport, uint8_t intf) usbh_hport_deactivate_ep0(child); for (uint8_t i = 0; i < child->config.config_desc.bNumInterfaces; i++) { if (child->config.intf[i].class_driver && child->config.intf[i].class_driver->disconnect) { - ret = CLASS_DISCONNECT(child, i); + CLASS_DISCONNECT(child, i); } } @@ -338,24 +407,52 @@ static int usbh_hub_disconnect(struct usbh_hubport *hport, uint8_t intf) memset(hub, 0, sizeof(struct usbh_hub)); if (hport->config.intf[intf].devname[0] != '\0') - USB_LOG_INFO("Unregister HUB Class:%s\r\n", hport->config.intf[intf].devname); + USB_LOG_RAW("Unregister HUB Class:%s\r\n", hport->config.intf[intf].devname); } return ret; } +#endif -static void usbh_roothub_register(void) +static void usbh_hubport_release(struct usbh_hubport *child) { - memset(&roothub, 0, sizeof(struct usbh_hub)); - memset(&roothub_parent_port, 0, sizeof(struct usbh_hubport)); - roothub_parent_port.port = 1; - roothub_parent_port.dev_addr = 1; - roothub.connected = true; - roothub.index = 1; - roothub.is_roothub = true; - roothub.parent = &roothub_parent_port; - roothub.hub_addr = roothub_parent_port.dev_addr; - roothub.hub_desc.bNbrPorts = CONFIG_USBHOST_MAX_RHPORTS; - usbh_hub_register(&roothub); + if (child->connected) { + child->connected = false; + usbh_hport_deactivate_ep0(child); + for (uint8_t i = 0; i < child->config.config_desc.bNumInterfaces; i++) { + if (child->config.intf[i].class_driver && child->config.intf[i].class_driver->disconnect) { + CLASS_DISCONNECT(child, i); + } + } + child->config.config_desc.bNumInterfaces = 0; + } +} + +static void usbh_hub_dump_status(struct usbh_hub *hub, uint8_t port, uint16_t portstatus, uint16_t portchange) +{ + USB_LOG_DBG("===================== \r\n"); + USB_LOG_DBG("hub-%d port-%d status 0x%x\r\n", hub->hub_addr, port, portstatus); + USB_LOG_DBG(" connection: %d\r\n", !!(portstatus & HUB_PORT_STATUS_CONNECTION)); + USB_LOG_DBG(" enable: %d\r\n", !!(portstatus & HUB_PORT_STATUS_ENABLE)); + USB_LOG_DBG(" suspend: %d\r\n", !!(portstatus & HUB_PORT_STATUS_SUSPEND)); + USB_LOG_DBG(" overcurrent: %d\r\n", !!(portstatus & HUB_PORT_STATUS_OVERCURRENT)); + USB_LOG_DBG(" reseting: %d\r\n", !!(portstatus & HUB_PORT_STATUS_RESET)); + USB_LOG_DBG(" power: %d\r\n", !!(portstatus & HUB_PORT_STATUS_POWER)); + if (portstatus & HUB_PORT_STATUS_LOW_SPEED) { + USB_LOG_DBG(" low-speed\r\n"); + } else if (portstatus & HUB_PORT_STATUS_HIGH_SPEED) { + USB_LOG_DBG(" high-speed\r\n"); + } else { + USB_LOG_DBG(" full-speed\r\n"); + } + USB_LOG_DBG(" test: %d\r\n", !!(portstatus & HUB_PORT_STATUS_TEST)); + USB_LOG_DBG(" indicator: %d\r\n", !!(portstatus & HUB_PORT_STATUS_INDICATOR)); + USB_LOG_DBG("hub-%d port-%d change 0x%x\r\n", hub->hub_addr, port, portchange); + USB_LOG_DBG(" connection change: %d\r\n", !!(portchange & HUB_PORT_STATUS_C_CONNECTION)); + USB_LOG_DBG(" enable change: %d\r\n", !!(portchange & HUB_PORT_STATUS_C_ENABLE)); + USB_LOG_DBG(" suspend change: %d\r\n", !!(portchange & HUB_PORT_STATUS_C_SUSPEND)); + USB_LOG_DBG(" overcurrent change: %d\r\n", !!(portchange & HUB_PORT_STATUS_C_OVERCURRENT)); + USB_LOG_DBG(" reset change: %d\r\n", !!(portchange & HUB_PORT_STATUS_C_RESET)); + USB_LOG_DBG("=====================\r\n"); } static void usbh_hub_events(struct usbh_hub *hub) @@ -377,7 +474,7 @@ static void usbh_hub_events(struct usbh_hub *hub) for (uint8_t port = 0; port < hub->hub_desc.bNbrPorts; port++) { portchange_index = hub->int_buffer[0]; - USB_LOG_DBG("Port change:0x%02x\r\n", portchange_index); + USB_LOG_DBG("Port change:0x%02x, Port:%u\r\n", portchange_index, port + 1); if (!(portchange_index & (1 << (port + 1)))) { continue; @@ -395,7 +492,7 @@ static void usbh_hub_events(struct usbh_hub *hub) portstatus = port_status.wPortStatus; portchange = port_status.wPortChange; - USB_LOG_DBG("port %u, status:0x%02x, change:0x%02x\r\n", port + 1, portstatus, portchange); + usbh_hub_dump_status(hub, port + 1, portstatus, portchange); /* First, clear all change bits */ mask = 1; @@ -419,8 +516,7 @@ static void usbh_hub_events(struct usbh_hub *hub) if (portchange & HUB_PORT_STATUS_C_CONNECTION) { uint16_t connection = 0; uint16_t debouncestable = 0; - for (uint32_t debouncetime = 0; debouncetime < DEBOUNCE_TIMEOUT; debouncetime += DEBOUNCE_TIME_STEP) { - usb_osal_msleep(DEBOUNCE_TIME_STEP); + for (uint32_t debouncetime = 0; debouncetime < HUB_DEBOUNCE_TIMEOUT; debouncetime += HUB_DEBOUNCE_STEP) { /* Read hub port status */ ret = usbh_hub_get_portstatus(hub, port + 1, &port_status); if (ret < 0) { @@ -432,28 +528,36 @@ static void usbh_hub_events(struct usbh_hub *hub) portchange = port_status.wPortChange; USB_LOG_DBG("Port %u, status:0x%02x, change:0x%02x\r\n", port + 1, portstatus, portchange); - if ((portstatus & HUB_PORT_STATUS_CONNECTION) == connection) { - if (connection) { - if (++debouncestable == 4) { - break; - } + + if (!(portchange & HUB_PORT_STATUS_C_CONNECTION) && + ((portstatus & HUB_PORT_STATUS_CONNECTION) == connection)) { + debouncestable += HUB_DEBOUNCE_STEP; + if (debouncestable >= HUB_DEBOUNCE_STABLE) { + break; } } else { debouncestable = 0; + connection = portstatus & HUB_PORT_STATUS_CONNECTION; } - connection = portstatus & HUB_PORT_STATUS_CONNECTION; - if (portchange & HUB_PORT_STATUS_C_CONNECTION) { usbh_hub_clear_feature(hub, port + 1, HUB_PORT_FEATURE_C_CONNECTION); } + + usb_osal_msleep(HUB_DEBOUNCE_STEP); + } + + /** check if debounce ok */ + if (debouncestable < HUB_DEBOUNCE_STABLE) { + USB_LOG_ERR("Failed to debounce port %u\r\n", port + 1); + break; } /* Last, check connect status */ if (portstatus & HUB_PORT_STATUS_CONNECTION) { ret = usbh_hub_set_feature(hub, port + 1, HUB_PORT_FEATURE_RESET); if (ret < 0) { - USB_LOG_ERR("Failed to reset port %u,errorcode:%d\r\n", port, ret); + USB_LOG_ERR("Failed to reset port %u,errorcode:%d\r\n", port + 1, ret); continue; } @@ -467,11 +571,14 @@ static void usbh_hub_events(struct usbh_hub *hub) portstatus = port_status.wPortStatus; portchange = port_status.wPortChange; + USB_LOG_DBG("Reset: %d, Enable: %d \r\n", + !!(portstatus & HUB_PORT_STATUS_RESET), + !!(portstatus & HUB_PORT_STATUS_ENABLE)); if (!(portstatus & HUB_PORT_STATUS_RESET) && (portstatus & HUB_PORT_STATUS_ENABLE)) { if (portchange & HUB_PORT_STATUS_C_RESET) { ret = usbh_hub_clear_feature(hub, port + 1, HUB_PORT_FEATURE_C_RESET); if (ret < 0) { - USB_LOG_ERR("Failed to clear port %u reset change, errorcode: %d\r\n", port, ret); + USB_LOG_ERR("Failed to clear port %u reset change, errorcode: %d\r\n", port + 1, ret); } } @@ -479,44 +586,66 @@ static void usbh_hub_events(struct usbh_hub *hub) speed = USB_SPEED_HIGH; } else if (portstatus & HUB_PORT_STATUS_LOW_SPEED) { speed = USB_SPEED_LOW; - } else { - speed = USB_SPEED_FULL; + } +#ifdef CONFIG_USBHOST_XHCI + /* USB3.0 speed cannot get from portstatus, checkout port speed instead */ + else { + extern uint8_t usbh_get_port_speed(struct usbh_hub *hub, const uint8_t port); + + uint8_t port_speed = usbh_get_port_speed(hub, port + 1); + if (port_speed >= USB_SPEED_SUPER) { + /* assert that when using USB 3.0 ports, attached device must also be USB 3.0 speed */ + speed = port_speed; + } else { + speed = USB_SPEED_FULL; + } } +#else + else { + speed = USB_SPEED_FULL; + } +#endif child = &hub->child[port]; + /** release child sources first */ + usbh_hubport_release(child); memset(child, 0, sizeof(struct usbh_hubport)); child->parent = hub; child->connected = true; child->port = port + 1; child->speed = speed; + + USB_LOG_RAW("New %s device on Hub %u, Port %u connected\r\n", speed_table[speed], hub->index, port + 1); - USB_LOG_INFO("New %s device on Hub %u, Port %u connected\r\n", speed_table[speed], hub->index, port + 1); + /* Configure EP0 with the default maximum packet size */ + usbh_hport_activate_ep0(child); if (usbh_enumerate(child) < 0) { + /** release child sources */ + usbh_hubport_release(child); USB_LOG_ERR("Port %u enumerate fail\r\n", port + 1); } } else { - USB_LOG_ERR("Failed to enable port %u\r\n", port + 1); + child = &hub->child[port]; + /** release child sources */ + usbh_hubport_release(child); + + /** some USB 3.0 ip may failed to enable USB 2.0 port for USB 3.0 device */ + USB_LOG_WRN("Failed to enable port %u\r\n", port + 1); + continue; } } else { child = &hub->child[port]; - child->connected = false; - usbh_hport_deactivate_ep0(child); - for (uint8_t i = 0; i < child->config.config_desc.bNumInterfaces; i++) { - if (child->config.intf[i].class_driver && child->config.intf[i].class_driver->disconnect) { - CLASS_DISCONNECT(child, i); - } - } - + /** release child sources */ + usbh_hubport_release(child); USB_LOG_INFO("Device on Hub %u, Port %u disconnected\r\n", hub->index, port + 1); - usbh_device_unmount_done_callback(child); - child->config.config_desc.bNumInterfaces = 0; } } } + hub->int_buffer[0] = 0; /* Start next hub int transfer */ if (!hub->is_roothub && hub->connected) { usbh_submit_urb(&hub->intin_urb); @@ -525,70 +654,87 @@ static void usbh_hub_events(struct usbh_hub *hub) static void usbh_hub_thread(void *argument) { - size_t flags; + struct usbh_hub *hub; int ret = 0; + struct usbh_bus *usb = (struct usbh_bus *)argument; - usb_hc_init(); + usb_hc_init(usb->id); while (1) { - ret = usb_osal_sem_take(hub_event_wait, 0xffffffff); + USB_LOG_DBG("wait event of mq@%p \r\n", usb->hub_mq); + ret = usb_osal_mq_recv(usb->hub_mq, (void *)&hub, 0xffffffff); if (ret < 0) { continue; } - - while (!usb_slist_isempty(&hub_event_head)) { - struct usbh_hub *hub = usb_slist_first_entry(&hub_event_head, struct usbh_hub, hub_event_list); - flags = usb_osal_enter_critical_section(); - usb_slist_remove(&hub_event_head, &hub->hub_event_list); - usb_osal_leave_critical_section(flags); - usbh_hub_events(hub); - } + USB_LOG_DBG("handle event of hub@%p \r\n", hub); + usbh_hub_events(hub); } } -void usbh_roothub_thread_wakeup(uint8_t port) +static void usbh_roothub_register(struct usbh_bus *usb) { - roothub.int_buffer[0] |= (1 << port); - usbh_hub_thread_wakeup(&roothub); + struct usbh_hub* roothub = &(usb->roothub); + memset(roothub, 0, sizeof(struct usbh_hub)); + + roothub->connected = true; + roothub->index = 1; + roothub->is_roothub = true; + roothub->parent = NULL; + roothub->hub_addr = 1; + roothub->hub_desc.bNbrPorts = CONFIG_USBHOST_MAX_RHPORTS; + roothub->usb = usb; + usbh_hub_register(roothub); } -void usbh_hub_register(struct usbh_hub *hub) +static void usbh_hub_thread_wakeup(struct usbh_hub *hub) { - usb_slist_add_tail(&hub_class_head, &hub->list); + USB_LOG_DBG("try to wakeup hub0x%x \r\n", hub); + struct usbh_bus *usb = hub->usb; + usb_osal_mq_send(usb->hub_mq, (uintptr_t)hub); } -void usbh_hub_unregister(struct usbh_hub *hub) +void usbh_roothub_thread_wakeup(uint32_t usb_id, uint8_t port) { - usb_slist_remove(&hub_class_head, &hub->list); + struct usbh_bus* usb = usbh_get_bus_of_index(usb_id); + struct usbh_hub* roothub = &(usb->roothub); + + roothub->int_buffer = roothub->g_hub_intbuf[roothub->index - 1]; + roothub->int_buffer[0] |= (1 << port); + USB_LOG_DBG("port-%u wakeup roothub@%p \r\n", port, roothub); + usbh_hub_thread_wakeup(roothub); } -int usbh_hub_initialize(void) +int usbh_hub_initialize(struct usbh_bus *usb) { - usbh_roothub_register(); + usbh_roothub_register(usb); - hub_event_wait = usb_osal_sem_create(0); - if (hub_event_wait == NULL) { + usb->hub_mq = usb_osal_mq_create(7); + if (usb->hub_mq == NULL) { return -1; } - hub_thread = usb_osal_thread_create("usbh_hub", CONFIG_USBHOST_PSC_STACKSIZE, CONFIG_USBHOST_PSC_PRIO, usbh_hub_thread, NULL); - if (hub_thread == NULL) { + char thread_name[12]; + snprintf(thread_name, 12, "usb%d_hub", usb->id); + usb->hub_thread = usb_osal_thread_create(thread_name, CONFIG_USBHOST_PSC_STACKSIZE, CONFIG_USBHOST_PSC_PRIO, usbh_hub_thread, usb); + if (usb->hub_thread == NULL) { return -1; } + return 0; } - -const struct usbh_class_driver hub_driver = { +#if CONFIG_USBHOST_MAX_EXTHUBS > 0 +const struct usbh_class_driver hub_class_driver = { .driver_name = "hub", .connect = usbh_hub_connect, .disconnect = usbh_hub_disconnect }; -CLASS_INFO_DEFINE const struct usbh_class_info hub_info = { +CLASS_INFO_DEFINE const struct usbh_class_info hub_class_info = { .match_flags = USB_CLASS_MATCH_INTF_CLASS, .class = USB_DEVICE_CLASS_HUB, .subclass = 0, .protocol = 0, .vid = 0x00, .pid = 0x00, - .class_driver = &hub_driver + .class_driver = &hub_class_driver }; +#endif diff --git a/third-party/cherryusb-0.7.0/class/hub/usbh_hub.h b/third-party/cherryusb/class/hub/usbh_hub.h similarity index 65% rename from third-party/cherryusb-0.7.0/class/hub/usbh_hub.h rename to third-party/cherryusb/class/hub/usbh_hub.h index 41807de04390d91aa103ed69dcdfeb4e38aecb99..f0142068d7ad79074c46bf357de824151410e79b 100644 --- a/third-party/cherryusb-0.7.0/class/hub/usbh_hub.h +++ b/third-party/cherryusb/class/hub/usbh_hub.h @@ -13,15 +13,14 @@ /* Maximum size of an interrupt IN transfer */ #define USBH_HUB_INTIN_BUFSIZE ((USBH_HUB_MAX_PORTS + 8) >> 3) -extern usb_slist_t hub_class_head; - #ifdef __cplusplus extern "C" { #endif -void usbh_roothub_thread_wakeup(uint8_t port); -void usbh_hub_register(struct usbh_hub *hub); -void usbh_hub_unregister(struct usbh_hub *hub); -int usbh_hub_initialize(void); + +void usbh_roothub_thread_wakeup(uint32_t usb_id, uint8_t port); +int usbh_hub_initialize(struct usbh_bus *usb); +struct usbh_hubport *usbh_get_roothub_port (struct usbh_bus *bus, unsigned int port); + #ifdef __cplusplus } #endif diff --git a/third-party/cherryusb-0.7.0/class/midi/usb_midi.h b/third-party/cherryusb/class/midi/usb_midi.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/midi/usb_midi.h rename to third-party/cherryusb/class/midi/usb_midi.h diff --git a/third-party/cherryusb-0.7.0/class/msc/usb_msc.h b/third-party/cherryusb/class/msc/usb_msc.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/msc/usb_msc.h rename to third-party/cherryusb/class/msc/usb_msc.h diff --git a/third-party/cherryusb-0.7.0/class/msc/usb_scsi.h b/third-party/cherryusb/class/msc/usb_scsi.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/msc/usb_scsi.h rename to third-party/cherryusb/class/msc/usb_scsi.h diff --git a/third-party/cherryusb-0.7.0/class/msc/usbd_msc.c b/third-party/cherryusb/class/msc/usbd_msc.c similarity index 87% rename from third-party/cherryusb-0.7.0/class/msc/usbd_msc.c rename to third-party/cherryusb/class/msc/usbd_msc.c index 9655c95179cc12db4995e4f54592be0a8a4b2caf..cf249611b3bcdf6670a78fe6915c39721b4276f4 100644 --- a/third-party/cherryusb-0.7.0/class/msc/usbd_msc.c +++ b/third-party/cherryusb/class/msc/usbd_msc.c @@ -6,13 +6,6 @@ #include "usbd_core.h" #include "usbd_msc.h" #include "usb_scsi.h" -#ifdef CONFIG_USBDEV_MSC_THREAD -#include "usb_osal.h" -#endif - -#define MSC_THREAD_OP_READ_MEM 1 -#define MSC_THREAD_OP_WRITE_MEM 2 -#define MSC_THREAD_OP_WRITE_DONE 3 #define MSD_OUT_EP_IDX 0 #define MSD_IN_EP_IDX 1 @@ -49,13 +42,6 @@ USB_NOCACHE_RAM_SECTION struct usbd_msc_cfg_priv { uint8_t block_buffer[CONFIG_USBDEV_MSC_BLOCK_SIZE]; } usbd_msc_cfg; -#ifdef CONFIG_USBDEV_MSC_THREAD -static volatile uint8_t thread_op; -static usb_osal_sem_t msc_sem; -static usb_osal_thread_t msc_thread; -static volatile uint32_t current_byte_read; -#endif - static void usbd_msc_reset(void) { usbd_msc_cfg.stage = MSC_READ_CBW; @@ -74,7 +60,7 @@ static int msc_storage_class_interface_request_handler(struct usb_setup_packet * break; case MSC_REQUEST_GET_MAX_LUN: - *data = (uint8_t *)(&usbd_msc_cfg.max_lun); + (*data)[0] = usbd_msc_cfg.max_lun; *len = 1; break; @@ -635,17 +621,11 @@ static bool SCSI_processRead(void) transfer_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - /* Start reading one sector */ -#ifdef CONFIG_USBDEV_MSC_THREAD - thread_op = MSC_THREAD_OP_READ_MEM; - usb_osal_sem_give(msc_sem); - return true; -#else if (usbd_msc_sector_read(usbd_msc_cfg.start_sector, usbd_msc_cfg.block_buffer, transfer_len) != 0) { SCSI_SetSenseData(SCSI_KCQHE_UREINRESERVEDAREA); return false; } -#endif + usbd_ep_start_write(mass_ep_data[MSD_IN_EP_IDX].ep_addr, usbd_msc_cfg.block_buffer, transfer_len); usbd_msc_cfg.start_sector += (transfer_len / usbd_msc_cfg.scsi_blk_size); @@ -659,47 +639,15 @@ static bool SCSI_processRead(void) return true; } -#ifdef CONFIG_USBDEV_MSC_THREAD -static void usbd_msc_thread_memory_read_done(void) -{ - size_t flags; - uint32_t transfer_len; - - flags = usb_osal_enter_critical_section(); - - transfer_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - - usbd_ep_start_write(mass_ep_data[MSD_IN_EP_IDX].ep_addr, - usbd_msc_cfg.block_buffer, transfer_len); - - usbd_msc_cfg.start_sector += (transfer_len / usbd_msc_cfg.scsi_blk_size); - usbd_msc_cfg.nsectors -= (transfer_len / usbd_msc_cfg.scsi_blk_size); - usbd_msc_cfg.csw.dDataResidue -= transfer_len; - - if (usbd_msc_cfg.nsectors == 0) { - usbd_msc_cfg.stage = MSC_SEND_CSW; - } - usb_osal_leave_critical_section(flags); -} -#endif - static bool SCSI_processWrite(uint32_t nbytes) { uint32_t data_len = 0; USB_LOG_DBG("write lba:%d\r\n", usbd_msc_cfg.start_sector); - /* Start writing one sector */ -#ifdef CONFIG_USBDEV_MSC_THREAD - thread_op = MSC_THREAD_OP_WRITE_MEM; - current_byte_read = nbytes; - usb_osal_sem_give(msc_sem); - return true; -#else if (usbd_msc_sector_write(usbd_msc_cfg.start_sector, usbd_msc_cfg.block_buffer, nbytes) != 0) { SCSI_SetSenseData(SCSI_KCQHE_WRITEFAULT); return false; } -#endif usbd_msc_cfg.start_sector += (nbytes / usbd_msc_cfg.scsi_blk_size); usbd_msc_cfg.nsectors -= (nbytes / usbd_msc_cfg.scsi_blk_size); @@ -715,29 +663,6 @@ static bool SCSI_processWrite(uint32_t nbytes) return true; } -#ifdef CONFIG_USBDEV_MSC_THREAD -static void usbd_msc_thread_memory_write_done() -{ - size_t flags; - uint32_t data_len = 0; - - flags = usb_osal_enter_critical_section(); - - usbd_msc_cfg.start_sector += (current_byte_read / usbd_msc_cfg.scsi_blk_size); - usbd_msc_cfg.nsectors -= (current_byte_read / usbd_msc_cfg.scsi_blk_size); - usbd_msc_cfg.csw.dDataResidue -= current_byte_read; - - if (usbd_msc_cfg.nsectors == 0) { - usbd_msc_send_csw(CSW_STATUS_CMD_PASSED); - } else { - data_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - usbd_ep_start_read(mass_ep_data[MSD_OUT_EP_IDX].ep_addr, usbd_msc_cfg.block_buffer, data_len); - } - - usb_osal_leave_critical_section(flags); -} -#endif - static bool SCSI_CBWDecode(uint32_t nbytes) { uint8_t *buf2send = usbd_msc_cfg.block_buffer; @@ -883,35 +808,6 @@ void mass_storage_bulk_in(uint8_t ep, uint32_t nbytes) } } -#ifdef CONFIG_USBDEV_MSC_THREAD -static void usbd_msc_thread(void *argument) -{ - uint32_t data_len = 0; - while (1) { - usb_osal_sem_take(msc_sem, 0xffffffff); - - switch (thread_op) { - case MSC_THREAD_OP_READ_MEM: - data_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - if (usbd_msc_sector_read(usbd_msc_cfg.start_sector, usbd_msc_cfg.block_buffer, data_len) != 0) { - SCSI_SetSenseData(SCSI_KCQHE_UREINRESERVEDAREA); - } - usbd_msc_thread_memory_read_done(); - break; - case MSC_THREAD_OP_WRITE_MEM: - data_len = MIN(usbd_msc_cfg.nsectors * usbd_msc_cfg.scsi_blk_size, CONFIG_USBDEV_MSC_BLOCK_SIZE); - if (usbd_msc_sector_write(usbd_msc_cfg.start_sector, usbd_msc_cfg.block_buffer, data_len) != 0) { - SCSI_SetSenseData(SCSI_KCQHE_WRITEFAULT); - } - usbd_msc_thread_memory_write_done(); - break; - default: - break; - } - } -} -#endif - struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uint8_t out_ep, const uint8_t in_ep) { intf->class_interface_handler = msc_storage_class_interface_request_handler; @@ -935,14 +831,6 @@ struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uin USB_LOG_ERR("msc block buffer overflow\r\n"); return NULL; } -#ifdef CONFIG_USBDEV_MSC_THREAD - msc_sem = usb_osal_sem_create(1); - msc_thread = usb_osal_thread_create("usbd_msc", CONFIG_USBDEV_MSC_STACKSIZE, CONFIG_USBDEV_MSC_PRIO, usbd_msc_thread, NULL); - if (msc_thread == NULL) { - USB_LOG_ERR("no enough memory to alloc msc thread\r\n"); - return NULL; - } -#endif return intf; } diff --git a/third-party/cherryusb-0.7.0/class/msc/usbd_msc.h b/third-party/cherryusb/class/msc/usbd_msc.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/msc/usbd_msc.h rename to third-party/cherryusb/class/msc/usbd_msc.h diff --git a/third-party/cherryusb-0.7.0/class/msc/usbh_msc.c b/third-party/cherryusb/class/msc/usbh_msc.c similarity index 58% rename from third-party/cherryusb-0.7.0/class/msc/usbh_msc.c rename to third-party/cherryusb/class/msc/usbh_msc.c index 550b0c25d0a80c869aa2d4640fccb9afac8c22ed..467618fce05e607f90c4573719b53a9e9338e350 100644 --- a/third-party/cherryusb-0.7.0/class/msc/usbh_msc.c +++ b/third-party/cherryusb/class/msc/usbh_msc.c @@ -7,12 +7,10 @@ #include "usbh_msc.h" #include "usb_scsi.h" -#define DEV_FORMAT "/dev/sd%c" +#define DEV_FORMAT "/usb%d/sd%c" static uint32_t g_devinuse = 0; -USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_msc_buf[32]; - static int usbh_msc_devno_alloc(struct usbh_msc *msc_class) { int devno; @@ -40,7 +38,7 @@ static void usbh_msc_devno_free(struct usbh_msc *msc_class) static int usbh_msc_get_maxlun(struct usbh_msc *msc_class, uint8_t *buffer) { - struct usb_setup_packet *setup = &msc_class->hport->setup; + struct usb_setup_packet *setup = msc_class->hport->setup; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = MSC_REQUEST_GET_MAX_LUN; @@ -53,36 +51,32 @@ static int usbh_msc_get_maxlun(struct usbh_msc *msc_class, uint8_t *buffer) static void usbh_msc_cbw_dump(struct CBW *cbw) { -#if 0 int i; - USB_LOG_INFO("CBW:\r\n"); - USB_LOG_INFO(" signature: 0x%08x\r\n", (unsigned int)cbw->dSignature); - USB_LOG_INFO(" tag: 0x%08x\r\n", (unsigned int)cbw->dTag); - USB_LOG_INFO(" datlen: 0x%08x\r\n", (unsigned int)cbw->dDataLength); - USB_LOG_INFO(" flags: 0x%02x\r\n", cbw->bmFlags); - USB_LOG_INFO(" lun: 0x%02x\r\n", cbw->bLUN); - USB_LOG_INFO(" cblen: 0x%02x\r\n", cbw->bCBLength); + USB_LOG_DBG("CBW:\r\n"); + USB_LOG_DBG(" signature: 0x%08x\r\n", (unsigned int)cbw->dSignature); + USB_LOG_DBG(" tag: 0x%08x\r\n", (unsigned int)cbw->dTag); + USB_LOG_DBG(" datlen: 0x%08x\r\n", (unsigned int)cbw->dDataLength); + USB_LOG_DBG(" flags: 0x%02x\r\n", cbw->bmFlags); + USB_LOG_DBG(" lun: 0x%02x\r\n", cbw->bLUN); + USB_LOG_DBG(" cblen: 0x%02x\r\n", cbw->bCBLength); - USB_LOG_INFO("CB:\r\n"); + USB_LOG_DBG("CB:\r\n"); for (i = 0; i < cbw->bCBLength; i += 8) { - USB_LOG_INFO(" 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\r\n", + USB_LOG_DBG(" 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\r\n", cbw->CB[i], cbw->CB[i + 1], cbw->CB[i + 2], cbw->CB[i + 3], cbw->CB[i + 4], cbw->CB[i + 5], cbw->CB[i + 6], cbw->CB[i + 7]); } -#endif } static void usbh_msc_csw_dump(struct CSW *csw) { -#if 0 - USB_LOG_INFO("CSW:\r\n"); - USB_LOG_INFO(" signature: 0x%08x\r\n", (unsigned int)csw->dSignature); - USB_LOG_INFO(" tag: 0x%08x\r\n", (unsigned int)csw->dTag); - USB_LOG_INFO(" residue: 0x%08x\r\n", (unsigned int)csw->dDataResidue); - USB_LOG_INFO(" status: 0x%02x\r\n", csw->bStatus); -#endif + USB_LOG_DBG("CSW:\r\n"); + USB_LOG_DBG(" signature: 0x%08x\r\n", (unsigned int)csw->dSignature); + USB_LOG_DBG(" tag: 0x%08x\r\n", (unsigned int)csw->dTag); + USB_LOG_DBG(" residue: 0x%08x\r\n", (unsigned int)csw->dDataResidue); + USB_LOG_DBG(" status: 0x%02x\r\n", csw->bStatus); } static inline int usbh_msc_bulk_in_transfer(struct usbh_msc *msc_class, uint8_t *buffer, uint32_t buflen, uint32_t timeout) @@ -113,39 +107,84 @@ static inline int usbh_msc_bulk_out_transfer(struct usbh_msc *msc_class, uint8_t return ret; } -static inline int usbh_msc_scsi_testunitready(struct usbh_msc *msc_class) +int usbh_bulk_cbw_csw_xfer(struct usbh_msc *msc_class, struct CBW *cbw, struct CSW *csw, uint8_t *buffer) { int nbytes; + + usbh_msc_cbw_dump(cbw); + + /* Send the CBW */ + nbytes = usbh_msc_bulk_out_transfer(msc_class, (uint8_t *)cbw, USB_SIZEOF_MSC_CBW, CONFIG_USBHOST_MSC_TIMEOUT); + if (nbytes < 0) { + USB_LOG_ERR("cbw transfer error\r\n"); + goto __err_exit; + } + + if (cbw->dDataLength != 0) { + if (cbw->CB[0] == SCSI_CMD_WRITE10) { + nbytes = usbh_msc_bulk_out_transfer(msc_class, buffer, cbw->dDataLength, CONFIG_USBHOST_MSC_TIMEOUT); + } else if (cbw->CB[0] == SCSI_CMD_READCAPACITY10) { + nbytes = usbh_msc_bulk_in_transfer(msc_class, buffer, cbw->dDataLength, CONFIG_USBHOST_MSC_TIMEOUT); + if (nbytes >= 0) { + /* Save the capacity information */ + msc_class->blocknum = GET_BE32(&buffer[0]) + 1; + msc_class->blocksize = GET_BE32(&buffer[4]); + } + } else { + nbytes = usbh_msc_bulk_in_transfer(msc_class, buffer, cbw->dDataLength, CONFIG_USBHOST_MSC_TIMEOUT); + } + + if (nbytes < 0) { + USB_LOG_ERR("msc data transfer error\r\n"); + goto __err_exit; + } + } + + /* Receive the CSW */ + memset(csw, 0, USB_SIZEOF_MSC_CSW); + nbytes = usbh_msc_bulk_in_transfer(msc_class, (uint8_t *)csw, USB_SIZEOF_MSC_CSW, CONFIG_USBHOST_MSC_TIMEOUT); + if (nbytes < 0) { + USB_LOG_ERR("csw transfer error\r\n"); + goto __err_exit; + } + + usbh_msc_csw_dump(csw); + + /* check csw status */ + if (csw->dSignature != MSC_CSW_Signature) { + USB_LOG_ERR("csw signature error\r\n"); + return -EINVAL; + } + + if (csw->bStatus != 0) { + USB_LOG_ERR("csw bStatus %d\r\n", csw->bStatus); + return -EINVAL; + } +__err_exit: + return nbytes < 0 ? (int)nbytes : 0; +} + +static inline int usbh_msc_scsi_testunitready(struct usbh_msc *msc_class) +{ struct CBW *cbw; /* Construct the CBW */ - cbw = (struct CBW *)g_msc_buf; + cbw = (struct CBW *)msc_class->g_msc_buf; memset(cbw, 0, USB_SIZEOF_MSC_CBW); cbw->dSignature = MSC_CBW_Signature; cbw->bCBLength = SCSICMD_TESTUNITREADY_SIZEOF; cbw->CB[0] = SCSI_CMD_TESTUNITREADY; - usbh_msc_cbw_dump(cbw); - /* Send the CBW */ - nbytes = usbh_msc_bulk_out_transfer(msc_class, (uint8_t *)cbw, USB_SIZEOF_MSC_CBW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the CSW */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, USB_SIZEOF_MSC_CSW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - usbh_msc_csw_dump((struct CSW *)g_msc_buf); - } - } - return nbytes < 0 ? (int)nbytes : 0; + return usbh_bulk_cbw_csw_xfer(msc_class, cbw, (struct CSW *)msc_class->g_msc_buf, NULL); } static inline int usbh_msc_scsi_requestsense(struct usbh_msc *msc_class) { - int nbytes; struct CBW *cbw; /* Construct the CBW */ - cbw = (struct CBW *)g_msc_buf; + cbw = (struct CBW *)msc_class->g_msc_buf; memset(cbw, 0, USB_SIZEOF_MSC_CBW); cbw->dSignature = MSC_CBW_Signature; @@ -155,30 +194,15 @@ static inline int usbh_msc_scsi_requestsense(struct usbh_msc *msc_class) cbw->CB[0] = SCSI_CMD_REQUESTSENSE; cbw->CB[4] = SCSIRESP_FIXEDSENSEDATA_SIZEOF; - usbh_msc_cbw_dump(cbw); - /* Send the CBW */ - nbytes = usbh_msc_bulk_out_transfer(msc_class, (uint8_t *)cbw, USB_SIZEOF_MSC_CBW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the sense data response */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, SCSIRESP_FIXEDSENSEDATA_SIZEOF, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the CSW */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, USB_SIZEOF_MSC_CSW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - usbh_msc_csw_dump((struct CSW *)g_msc_buf); - } - } - } - return nbytes < 0 ? (int)nbytes : 0; + return usbh_bulk_cbw_csw_xfer(msc_class, cbw, (struct CSW *)msc_class->g_msc_buf, msc_class->g_msc_buf); } static inline int usbh_msc_scsi_inquiry(struct usbh_msc *msc_class) { - int nbytes; struct CBW *cbw; /* Construct the CBW */ - cbw = (struct CBW *)g_msc_buf; + cbw = (struct CBW *)msc_class->g_msc_buf; memset(cbw, 0, USB_SIZEOF_MSC_CBW); cbw->dSignature = MSC_CBW_Signature; @@ -188,30 +212,15 @@ static inline int usbh_msc_scsi_inquiry(struct usbh_msc *msc_class) cbw->CB[0] = SCSI_CMD_INQUIRY; cbw->CB[4] = SCSIRESP_INQUIRY_SIZEOF; - usbh_msc_cbw_dump(cbw); - /* Send the CBW */ - nbytes = usbh_msc_bulk_out_transfer(msc_class, (uint8_t *)cbw, USB_SIZEOF_MSC_CBW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the sense data response */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, SCSIRESP_INQUIRY_SIZEOF, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the CSW */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, USB_SIZEOF_MSC_CSW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - usbh_msc_csw_dump((struct CSW *)g_msc_buf); - } - } - } - return nbytes < 0 ? (int)nbytes : 0; + return usbh_bulk_cbw_csw_xfer(msc_class, cbw, (struct CSW *)msc_class->g_msc_buf, msc_class->g_msc_buf); } static inline int usbh_msc_scsi_readcapacity10(struct usbh_msc *msc_class) { - int nbytes; struct CBW *cbw; /* Construct the CBW */ - cbw = (struct CBW *)g_msc_buf; + cbw = (struct CBW *)msc_class->g_msc_buf; memset(cbw, 0, USB_SIZEOF_MSC_CBW); cbw->dSignature = MSC_CBW_Signature; @@ -220,33 +229,15 @@ static inline int usbh_msc_scsi_readcapacity10(struct usbh_msc *msc_class) cbw->bCBLength = SCSICMD_READCAPACITY10_SIZEOF; cbw->CB[0] = SCSI_CMD_READCAPACITY10; - usbh_msc_cbw_dump(cbw); - /* Send the CBW */ - nbytes = usbh_msc_bulk_out_transfer(msc_class, (uint8_t *)cbw, USB_SIZEOF_MSC_CBW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the sense data response */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, SCSIRESP_READCAPACITY10_SIZEOF, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Save the capacity information */ - msc_class->blocknum = GET_BE32(&g_msc_buf[0]) + 1; - msc_class->blocksize = GET_BE32(&g_msc_buf[4]); - /* Receive the CSW */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, USB_SIZEOF_MSC_CSW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - usbh_msc_csw_dump((struct CSW *)g_msc_buf); - } - } - } - return nbytes < 0 ? (int)nbytes : 0; + return usbh_bulk_cbw_csw_xfer(msc_class, cbw, (struct CSW *)msc_class->g_msc_buf, msc_class->g_msc_buf); } int usbh_msc_scsi_write10(struct usbh_msc *msc_class, uint32_t start_sector, const uint8_t *buffer, uint32_t nsectors) { - int nbytes; struct CBW *cbw; /* Construct the CBW */ - cbw = (struct CBW *)g_msc_buf; + cbw = (struct CBW *)msc_class->g_msc_buf; memset(cbw, 0, USB_SIZEOF_MSC_CBW); cbw->dSignature = MSC_CBW_Signature; @@ -257,30 +248,15 @@ int usbh_msc_scsi_write10(struct usbh_msc *msc_class, uint32_t start_sector, con SET_BE32(&cbw->CB[2], start_sector); SET_BE16(&cbw->CB[7], nsectors); - usbh_msc_cbw_dump(cbw); - /* Send the CBW */ - nbytes = usbh_msc_bulk_out_transfer(msc_class, (uint8_t *)cbw, USB_SIZEOF_MSC_CBW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Send the user data */ - nbytes = usbh_msc_bulk_out_transfer(msc_class, (uint8_t *)buffer, msc_class->blocksize * nsectors, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the CSW */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, USB_SIZEOF_MSC_CSW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - usbh_msc_csw_dump((struct CSW *)g_msc_buf); - } - } - } - return nbytes < 0 ? (int)nbytes : 0; + return usbh_bulk_cbw_csw_xfer(msc_class, cbw, (struct CSW *)msc_class->g_msc_buf, (uint8_t *)buffer); } int usbh_msc_scsi_read10(struct usbh_msc *msc_class, uint32_t start_sector, const uint8_t *buffer, uint32_t nsectors) { - int nbytes; struct CBW *cbw; /* Construct the CBW */ - cbw = (struct CBW *)g_msc_buf; + cbw = (struct CBW *)msc_class->g_msc_buf; memset(cbw, 0, USB_SIZEOF_MSC_CBW); cbw->dSignature = MSC_CBW_Signature; @@ -292,26 +268,13 @@ int usbh_msc_scsi_read10(struct usbh_msc *msc_class, uint32_t start_sector, cons SET_BE32(&cbw->CB[2], start_sector); SET_BE16(&cbw->CB[7], nsectors); - usbh_msc_cbw_dump(cbw); - /* Send the CBW */ - nbytes = usbh_msc_bulk_out_transfer(msc_class, (uint8_t *)cbw, USB_SIZEOF_MSC_CBW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the user data */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, (uint8_t *)buffer, msc_class->blocksize * nsectors, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - /* Receive the CSW */ - nbytes = usbh_msc_bulk_in_transfer(msc_class, g_msc_buf, USB_SIZEOF_MSC_CSW, CONFIG_USBHOST_MSC_TIMEOUT); - if (nbytes >= 0) { - usbh_msc_csw_dump((struct CSW *)g_msc_buf); - } - } - } - return nbytes < 0 ? (int)nbytes : 0; + return usbh_bulk_cbw_csw_xfer(msc_class, cbw, (struct CSW *)msc_class->g_msc_buf, (uint8_t *)buffer); } static int usbh_msc_connect(struct usbh_hubport *hport, uint8_t intf) { struct usb_endpoint_descriptor *ep_desc; + struct usbh_bus *usb = usbh_get_bus_of_port(hport); int ret; struct usbh_msc *msc_class = usb_malloc(sizeof(struct usbh_msc)); @@ -327,12 +290,12 @@ static int usbh_msc_connect(struct usbh_hubport *hport, uint8_t intf) hport->config.intf[intf].priv = msc_class; - ret = usbh_msc_get_maxlun(msc_class, g_msc_buf); + ret = usbh_msc_get_maxlun(msc_class, msc_class->g_msc_buf); if (ret < 0) { return ret; } - USB_LOG_INFO("Get max LUN:%u\r\n", g_msc_buf[0] + 1); + USB_LOG_INFO("Get max LUN:%u\r\n", msc_class->g_msc_buf[0] + 1); for (uint8_t i = 0; i < hport->config.intf[intf].altsetting[0].intf_desc.bNumEndpoints; i++) { ep_desc = &hport->config.intf[intf].altsetting[0].ep[i].ep_desc; @@ -345,8 +308,11 @@ static int usbh_msc_connect(struct usbh_hubport *hport, uint8_t intf) ret = usbh_msc_scsi_testunitready(msc_class); if (ret < 0) { - USB_LOG_ERR("Fail to scsi_testunitready\r\n"); - return ret; + ret = usbh_msc_scsi_requestsense(msc_class); + if (ret < 0) { + USB_LOG_ERR("Fail to scsi_testunitready\r\n"); + return ret; + } } ret = usbh_msc_scsi_inquiry(msc_class); if (ret < 0) { @@ -367,10 +333,11 @@ static int usbh_msc_connect(struct usbh_hubport *hport, uint8_t intf) return -ERANGE; } - snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, msc_class->sdchar); + snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, usb->id, msc_class->sdchar); - USB_LOG_INFO("Register MSC Class:%s\r\n", hport->config.intf[intf].devname); + USB_LOG_RAW("Register MSC Class:%s for USB-%d\r\n", hport->config.intf[intf].devname, usb->id); + usbh_msc_run(msc_class); return ret; } @@ -391,16 +358,25 @@ static int usbh_msc_disconnect(struct usbh_hubport *hport, uint8_t intf) usbh_pipe_free(msc_class->bulkout); } + usbh_msc_stop(msc_class); memset(msc_class, 0, sizeof(struct usbh_msc)); usb_free(msc_class); if (hport->config.intf[intf].devname[0] != '\0') - USB_LOG_INFO("Unregister MSC Class:%s\r\n", hport->config.intf[intf].devname); + USB_LOG_RAW("Unregister MSC Class:%s\r\n", hport->config.intf[intf].devname); } return ret; } +__WEAK void usbh_msc_run(struct usbh_msc *msc_class) +{ +} + +__WEAK void usbh_msc_stop(struct usbh_msc *msc_class) +{ +} + const struct usbh_class_driver msc_class_driver = { .driver_name = "msc", .connect = usbh_msc_connect, diff --git a/third-party/cherryusb-0.7.0/class/msc/usbh_msc.h b/third-party/cherryusb/class/msc/usbh_msc.h similarity index 87% rename from third-party/cherryusb-0.7.0/class/msc/usbh_msc.h rename to third-party/cherryusb/class/msc/usbh_msc.h index 5a61de7d0e8efa397414dcf3d5e1b65e89251828..f2d253b98a54eaceecd26f0321ec2765a8995dc5 100644 --- a/third-party/cherryusb-0.7.0/class/msc/usbh_msc.h +++ b/third-party/cherryusb/class/msc/usbh_msc.h @@ -20,11 +20,15 @@ struct usbh_msc { struct usbh_urb bulkout_urb; /* Bulk OUT urb */ uint32_t blocknum; /* Number of blocks on the USB mass storage device */ uint16_t blocksize; /* Block size of USB mass storage device */ + USB_MEM_ALIGNX uint8_t g_msc_buf[32]; }; int usbh_msc_scsi_write10(struct usbh_msc *msc_class, uint32_t start_sector, const uint8_t *buffer, uint32_t nsectors); int usbh_msc_scsi_read10(struct usbh_msc *msc_class, uint32_t start_sector, const uint8_t *buffer, uint32_t nsectors); +void usbh_msc_run(struct usbh_msc *msc_class); +void usbh_msc_stop(struct usbh_msc *msc_class); + #ifdef __cplusplus extern "C" { #endif diff --git a/third-party/cherryusb-0.7.0/class/mtp/usb_mtp.h b/third-party/cherryusb/class/mtp/usb_mtp.h similarity index 66% rename from third-party/cherryusb-0.7.0/class/mtp/usb_mtp.h rename to third-party/cherryusb/class/mtp/usb_mtp.h index a3b68789dd575ddcc84527f6408c67a0faada384..968c4d0eb47055d35bf748bf407c8d668828ae75 100644 --- a/third-party/cherryusb-0.7.0/class/mtp/usb_mtp.h +++ b/third-party/cherryusb/class/mtp/usb_mtp.h @@ -11,15 +11,196 @@ #define USB_MTP_SUB_CLASS 0x01U #define USB_MTP_PROTOCOL 0x01U +/* MTP class requests */ #define MTP_REQUEST_CANCEL 0x64U #define MTP_REQUEST_GET_EXT_EVENT_DATA 0x65U #define MTP_REQUEST_RESET 0x66U #define MTP_REQUEST_GET_DEVICE_STATUS 0x67U +/* Container Types */ +#define MTP_CONTAINER_TYPE_UNDEFINED 0U +#define MTP_CONTAINER_TYPE_COMMAND 1U +#define MTP_CONTAINER_TYPE_DATA 2U +#define MTP_CONTAINER_TYPE_RESPONSE 3U +#define MTP_CONTAINER_TYPE_EVENT 4U + +/* + * MTP Class specification Revision 1.1 + * Appendix D. Operations + */ + +/* Operations code */ +#define MTP_OP_GET_DEVICE_INFO 0x1001U +#define MTP_OP_OPEN_SESSION 0x1002U +#define MTP_OP_CLOSE_SESSION 0x1003U +#define MTP_OP_GET_STORAGE_IDS 0x1004U +#define MTP_OP_GET_STORAGE_INFO 0x1005U +#define MTP_OP_GET_NUM_OBJECTS 0x1006U +#define MTP_OP_GET_OBJECT_HANDLES 0x1007U +#define MTP_OP_GET_OBJECT_INFO 0x1008U +#define MTP_OP_GET_OBJECT 0x1009U +#define MTP_OP_GET_THUMB 0x100AU +#define MTP_OP_DELETE_OBJECT 0x100BU +#define MTP_OP_SEND_OBJECT_INFO 0x100CU +#define MTP_OP_SEND_OBJECT 0x100DU +#define MTP_OP_FORMAT_STORE 0x100FU +#define MTP_OP_RESET_DEVICE 0x1010U +#define MTP_OP_GET_DEVICE_PROP_DESC 0x1014U +#define MTP_OP_GET_DEVICE_PROP_VALUE 0x1015U +#define MTP_OP_SET_DEVICE_PROP_VALUE 0x1016U +#define MTP_OP_RESET_DEVICE_PROP_VALUE 0x1017U +#define MTP_OP_TERMINATE_OPEN_CAPTURE 0x1018U +#define MTP_OP_MOVE_OBJECT 0x1019U +#define MTP_OP_COPY_OBJECT 0x101AU +#define MTP_OP_GET_PARTIAL_OBJECT 0x101BU +#define MTP_OP_INITIATE_OPEN_CAPTURE 0x101CU +#define MTP_OP_GET_OBJECT_PROPS_SUPPORTED 0x9801U +#define MTP_OP_GET_OBJECT_PROP_DESC 0x9802U +#define MTP_OP_GET_OBJECT_PROP_VALUE 0x9803U +#define MTP_OP_SET_OBJECT_PROP_VALUE 0x9804U +#define MTP_OP_GET_OBJECT_PROPLIST 0x9805U +#define MTP_OP_GET_OBJECT_PROP_REFERENCES 0x9810U +#define MTP_OP_GETSERVICEIDS 0x9301U +#define MTP_OP_GETSERVICEINFO 0x9302U +#define MTP_OP_GETSERVICECAPABILITIES 0x9303U +#define MTP_OP_GETSERVICEPROPDESC 0x9304U + +/* MTP response code */ +#define MTP_RESPONSE_OK 0x2001U +#define MTP_RESPONSE_GENERAL_ERROR 0x2002U +#define MTP_RESPONSE_PARAMETER_NOT_SUPPORTED 0x2006U +#define MTP_RESPONSE_INCOMPLETE_TRANSFER 0x2007U +#define MTP_RESPONSE_INVALID_STORAGE_ID 0x2008U +#define MTP_RESPONSE_INVALID_OBJECT_HANDLE 0x2009U +#define MTP_RESPONSE_DEVICEPROP_NOT_SUPPORTED 0x200AU +#define MTP_RESPONSE_STORE_FULL 0x200CU +#define MTP_RESPONSE_ACCESS_DENIED 0x200FU +#define MTP_RESPONSE_STORE_NOT_AVAILABLE 0x2013U +#define MTP_RESPONSE_SPECIFICATION_BY_FORMAT_NOT_SUPPORTED 0x2014U +#define MTP_RESPONSE_NO_VALID_OBJECT_INFO 0x2015U +#define MTP_RESPONSE_DEVICE_BUSY 0x2019U +#define MTP_RESPONSE_INVALID_PARENT_OBJECT 0x201AU +#define MTP_RESPONSE_INVALID_PARAMETER 0x201DU +#define MTP_RESPONSE_SESSION_ALREADY_OPEN 0x201EU +#define MTP_RESPONSE_TRANSACTION_CANCELLED 0x201FU +#define MTP_RESPONSE_INVALID_OBJECT_PROP_CODE 0xA801U +#define MTP_RESPONSE_SPECIFICATION_BY_GROUP_UNSUPPORTED 0xA807U +#define MTP_RESPONSE_OBJECT_PROP_NOT_SUPPORTED 0xA80AU + +/* MTP Object format codes */ +#define MTP_OBJ_FORMAT_UNDEFINED 0x3000U +#define MTP_OBJ_FORMAT_ASSOCIATION 0x3001U +#define MTP_OBJ_FORMAT_SCRIPT 0x3002U +#define MTP_OBJ_FORMAT_EXECUTABLE 0x3003U +#define MTP_OBJ_FORMAT_TEXT 0x3004U +#define MTP_OBJ_FORMAT_HTML 0x3005U +#define MTP_OBJ_FORMAT_DPOF 0x3006U +#define MTP_OBJ_FORMAT_AIFF 0x3007U +#define MTP_OBJ_FORMAT_WAV 0x3008U +#define MTP_OBJ_FORMAT_MP3 0x3009U +#define MTP_OBJ_FORMAT_AVI 0x300AU +#define MTP_OBJ_FORMAT_MPEG 0x300BU +#define MTP_OBJ_FORMAT_ASF 0x300CU +#define MTP_OBJ_FORMAT_DEFINED 0x3800U +#define MTP_OBJ_FORMAT_EXIF_JPEG 0x3801U +#define MTP_OBJ_FORMAT_TIFF_EP 0x3802U +#define MTP_OBJ_FORMAT_FLASHPIX 0x3803U +#define MTP_OBJ_FORMAT_BMP 0x3804U +#define MTP_OBJ_FORMAT_CIFF 0x3805U +#define MTP_OBJ_FORMAT_UNDEFINED_RESERVED0 0x3806U +#define MTP_OBJ_FORMAT_GIF 0x3807U +#define MTP_OBJ_FORMAT_JFIF 0x3808U +#define MTP_OBJ_FORMAT_CD 0x3809U +#define MTP_OBJ_FORMAT_PICT 0x380AU +#define MTP_OBJ_FORMAT_PNG 0x380BU +#define MTP_OBJ_FORMAT_UNDEFINED_RESERVED1 0x380CU +#define MTP_OBJ_FORMAT_TIFF 0x380DU +#define MTP_OBJ_FORMAT_TIFF_IT 0x380EU +#define MTP_OBJ_FORMAT_JP2 0x380FU +#define MTP_OBJ_FORMAT_JPX 0x3810U +#define MTP_OBJ_FORMAT_UNDEFINED_FIRMWARE 0xB802U +#define MTP_OBJ_FORMAT_WINDOWS_IMAGE_FORMAT 0xB881U +#define MTP_OBJ_FORMAT_UNDEFINED_AUDIO 0xB900U +#define MTP_OBJ_FORMAT_WMA 0xB901U +#define MTP_OBJ_FORMAT_OGG 0xB902U +#define MTP_OBJ_FORMAT_AAC 0xB903U +#define MTP_OBJ_FORMAT_AUDIBLE 0xB904U +#define MTP_OBJ_FORMAT_FLAC 0xB906U +#define MTP_OBJ_FORMAT_UNDEFINED_VIDEO 0xB980U +#define MTP_OBJ_FORMAT_WMV 0xB981U +#define MTP_OBJ_FORMAT_MP4_CONTAINER 0xB982U +#define MTP_OBJ_FORMAT_MP2 0xB983U +#define MTP_OBJ_FORMAT_3GP_CONTAINER 0xB984U + +/* MTP event codes*/ +#define MTP_EVENT_UNDEFINED 0x4000U +#define MTP_EVENT_CANCELTRANSACTION 0x4001U +#define MTP_EVENT_OBJECTADDED 0x4002U +#define MTP_EVENT_OBJECTREMOVED 0x4003U +#define MTP_EVENT_STOREADDED 0x4004U +#define MTP_EVENT_STOREREMOVED 0x4005U +#define MTP_EVENT_DEVICEPROPCHANGED 0x4006U +#define MTP_EVENT_OBJECTINFOCHANGED 0x4007U +#define MTP_EVENT_DEVICEINFOCHANGED 0x4008U +#define MTP_EVENT_REQUESTOBJECTTRANSFER 0x4009U +#define MTP_EVENT_STOREFULL 0x400AU +#define MTP_EVENT_DEVICERESET 0x400BU +#define MTP_EVENT_STORAGEINFOCHANGED 0x400CU +#define MTP_EVENT_CAPTURECOMPLETE 0x400DU +#define MTP_EVENT_UNREPORTEDSTATUS 0x400EU +#define MTP_EVENT_OBJECTPROPCHANGED 0xC801U +#define MTP_EVENT_OBJECTPROPDESCCHANGED 0xC802U +#define MTP_EVENT_OBJECTREFERENCESCHANGED 0xC803U + +/* MTP device properties code*/ +#define MTP_DEV_PROP_UNDEFINED 0x5000U +#define MTP_DEV_PROP_BATTERY_LEVEL 0x5001U +#define MTP_DEV_PROP_FUNCTIONAL_MODE 0x5002U +#define MTP_DEV_PROP_IMAGE_SIZE 0x5003U +#define MTP_DEV_PROP_COMPRESSION_SETTING 0x5004U +#define MTP_DEV_PROP_WHITE_BALANCE 0x5005U +#define MTP_DEV_PROP_RGB_GAIN 0x5006U +#define MTP_DEV_PROP_F_NUMBER 0x5007U +#define MTP_DEV_PROP_FOCAL_LENGTH 0x5008U +#define MTP_DEV_PROP_FOCUS_DISTANCE 0x5009U +#define MTP_DEV_PROP_FOCUS_MODE 0x500AU +#define MTP_DEV_PROP_EXPOSURE_METERING_MODE 0x500BU +#define MTP_DEV_PROP_FLASH_MODE 0x500CU +#define MTP_DEV_PROP_EXPOSURE_TIME 0x500DU +#define MTP_DEV_PROP_EXPOSURE_PROGRAM_MODE 0x500EU +#define MTP_DEV_PROP_EXPOSURE_INDEX 0x500FU +#define MTP_DEV_PROP_EXPOSURE_BIAS_COMPENSATION 0x5010U +#define MTP_DEV_PROP_DATETIME 0x5011U +#define MTP_DEV_PROP_CAPTURE_DELAY 0x5012U +#define MTP_DEV_PROP_STILL_CAPTURE_MODE 0x5013U +#define MTP_DEV_PROP_CONTRAST 0x5014U +#define MTP_DEV_PROP_SHARPNESS 0x5015U +#define MTP_DEV_PROP_DIGITAL_ZOOM 0x5016U +#define MTP_DEV_PROP_EFFECT_MODE 0x5017U +#define MTP_DEV_PROP_BURST_NUMBER 0x5018U +#define MTP_DEV_PROP_BURST_INTERVAL 0x5019U +#define MTP_DEV_PROP_TIMELAPSE_NUMBER 0x501AU +#define MTP_DEV_PROP_TIMELAPSE_INTERVAL 0x501BU +#define MTP_DEV_PROP_FOCUS_METERING_MODE 0x501CU +#define MTP_DEV_PROP_UPLOAD_URL 0x501DU +#define MTP_DEV_PROP_ARTIST 0x501EU +#define MTP_DEV_PROP_COPYRIGHT_INFO 0x501FU +#define MTP_DEV_PROP_SYNCHRONIZATION_PARTNER 0xD401U +#define MTP_DEV_PROP_DEVICE_FRIENDLY_NAME 0xD402U +#define MTP_DEV_PROP_VOLUME 0xD403U +#define MTP_DEV_PROP_SUPPORTEDFORMATSORDERED 0xD404U +#define MTP_DEV_PROP_DEVICEICON 0xD405U +#define MTP_DEV_PROP_PLAYBACK_RATE 0xD410U +#define MTP_DEV_PROP_PLAYBACK_OBJECT 0xD411U +#define MTP_DEV_PROP_PLAYBACK_CONTAINER 0xD412U +#define MTP_DEV_PROP_SESSION_INITIATOR_VERSION_INFO 0xD406U +#define MTP_DEV_PROP_PERCEIVED_DEVICE_TYPE 0xD407U + /* * MTP Class specification Revision 1.1 * Appendix B. Object Properties */ + /* MTP OBJECT PROPERTIES supported*/ #define MTP_OB_PROP_STORAGE_ID 0xDC01U #define MTP_OB_PROP_OBJECT_FORMAT 0xDC02U @@ -188,130 +369,6 @@ #define MTP_OB_PROP_TIME_TO_LIVE 0xDD71U #define MTP_OB_PROP_MEDIA_GUID 0xDD72U -/* MTP event codes*/ -#define MTP_EVENT_UNDEFINED 0x4000U -#define MTP_EVENT_CANCELTRANSACTION 0x4001U -#define MTP_EVENT_OBJECTADDED 0x4002U -#define MTP_EVENT_OBJECTREMOVED 0x4003U -#define MTP_EVENT_STOREADDED 0x4004U -#define MTP_EVENT_STOREREMOVED 0x4005U -#define MTP_EVENT_DEVICEPROPCHANGED 0x4006U -#define MTP_EVENT_OBJECTINFOCHANGED 0x4007U -#define MTP_EVENT_DEVICEINFOCHANGED 0x4008U -#define MTP_EVENT_REQUESTOBJECTTRANSFER 0x4009U -#define MTP_EVENT_STOREFULL 0x400AU -#define MTP_EVENT_DEVICERESET 0x400BU -#define MTP_EVENT_STORAGEINFOCHANGED 0x400CU -#define MTP_EVENT_CAPTURECOMPLETE 0x400DU -#define MTP_EVENT_UNREPORTEDSTATUS 0x400EU -#define MTP_EVENT_OBJECTPROPCHANGED 0xC801U -#define MTP_EVENT_OBJECTPROPDESCCHANGED 0xC802U -#define MTP_EVENT_OBJECTREFERENCESCHANGED 0xC803U - -/* - * MTP Class specification Revision 1.1 - * Appendix D. Operations - */ - -/* Operations code */ -#define MTP_OP_GET_DEVICE_INFO 0x1001U -#define MTP_OP_OPEN_SESSION 0x1002U -#define MTP_OP_CLOSE_SESSION 0x1003U -#define MTP_OP_GET_STORAGE_IDS 0x1004U -#define MTP_OP_GET_STORAGE_INFO 0x1005U -#define MTP_OP_GET_NUM_OBJECTS 0x1006U -#define MTP_OP_GET_OBJECT_HANDLES 0x1007U -#define MTP_OP_GET_OBJECT_INFO 0x1008U -#define MTP_OP_GET_OBJECT 0x1009U -#define MTP_OP_GET_THUMB 0x100AU -#define MTP_OP_DELETE_OBJECT 0x100BU -#define MTP_OP_SEND_OBJECT_INFO 0x100CU -#define MTP_OP_SEND_OBJECT 0x100DU -#define MTP_OP_FORMAT_STORE 0x100FU -#define MTP_OP_RESET_DEVICE 0x1010U -#define MTP_OP_GET_DEVICE_PROP_DESC 0x1014U -#define MTP_OP_GET_DEVICE_PROP_VALUE 0x1015U -#define MTP_OP_SET_DEVICE_PROP_VALUE 0x1016U -#define MTP_OP_RESET_DEVICE_PROP_VALUE 0x1017U -#define MTP_OP_TERMINATE_OPEN_CAPTURE 0x1018U -#define MTP_OP_MOVE_OBJECT 0x1019U -#define MTP_OP_COPY_OBJECT 0x101AU -#define MTP_OP_GET_PARTIAL_OBJECT 0x101BU -#define MTP_OP_INITIATE_OPEN_CAPTURE 0x101CU -#define MTP_OP_GET_OBJECT_PROPS_SUPPORTED 0x9801U -#define MTP_OP_GET_OBJECT_PROP_DESC 0x9802U -#define MTP_OP_GET_OBJECT_PROP_VALUE 0x9803U -#define MTP_OP_SET_OBJECT_PROP_VALUE 0x9804U -#define MTP_OP_GET_OBJECT_PROPLIST 0x9805U -#define MTP_OP_GET_OBJECT_PROP_REFERENCES 0x9810U -#define MTP_OP_GETSERVICEIDS 0x9301U -#define MTP_OP_GETSERVICEINFO 0x9302U -#define MTP_OP_GETSERVICECAPABILITIES 0x9303U -#define MTP_OP_GETSERVICEPROPDESC 0x9304U - -/* - * MTP Class specification Revision 1.1 - * Appendix C. Device Properties - */ - -/* MTP device properties code*/ -#define MTP_DEV_PROP_UNDEFINED 0x5000U -#define MTP_DEV_PROP_BATTERY_LEVEL 0x5001U -#define MTP_DEV_PROP_FUNCTIONAL_MODE 0x5002U -#define MTP_DEV_PROP_IMAGE_SIZE 0x5003U -#define MTP_DEV_PROP_COMPRESSION_SETTING 0x5004U -#define MTP_DEV_PROP_WHITE_BALANCE 0x5005U -#define MTP_DEV_PROP_RGB_GAIN 0x5006U -#define MTP_DEV_PROP_F_NUMBER 0x5007U -#define MTP_DEV_PROP_FOCAL_LENGTH 0x5008U -#define MTP_DEV_PROP_FOCUS_DISTANCE 0x5009U -#define MTP_DEV_PROP_FOCUS_MODE 0x500AU -#define MTP_DEV_PROP_EXPOSURE_METERING_MODE 0x500BU -#define MTP_DEV_PROP_FLASH_MODE 0x500CU -#define MTP_DEV_PROP_EXPOSURE_TIME 0x500DU -#define MTP_DEV_PROP_EXPOSURE_PROGRAM_MODE 0x500EU -#define MTP_DEV_PROP_EXPOSURE_INDEX 0x500FU -#define MTP_DEV_PROP_EXPOSURE_BIAS_COMPENSATION 0x5010U -#define MTP_DEV_PROP_DATETIME 0x5011U -#define MTP_DEV_PROP_CAPTURE_DELAY 0x5012U -#define MTP_DEV_PROP_STILL_CAPTURE_MODE 0x5013U -#define MTP_DEV_PROP_CONTRAST 0x5014U -#define MTP_DEV_PROP_SHARPNESS 0x5015U -#define MTP_DEV_PROP_DIGITAL_ZOOM 0x5016U -#define MTP_DEV_PROP_EFFECT_MODE 0x5017U -#define MTP_DEV_PROP_BURST_NUMBER 0x5018U -#define MTP_DEV_PROP_BURST_INTERVAL 0x5019U -#define MTP_DEV_PROP_TIMELAPSE_NUMBER 0x501AU -#define MTP_DEV_PROP_TIMELAPSE_INTERVAL 0x501BU -#define MTP_DEV_PROP_FOCUS_METERING_MODE 0x501CU -#define MTP_DEV_PROP_UPLOAD_URL 0x501DU -#define MTP_DEV_PROP_ARTIST 0x501EU -#define MTP_DEV_PROP_COPYRIGHT_INFO 0x501FU -#define MTP_DEV_PROP_SYNCHRONIZATION_PARTNER 0xD401U -#define MTP_DEV_PROP_DEVICE_FRIENDLY_NAME 0xD402U -#define MTP_DEV_PROP_VOLUME 0xD403U -#define MTP_DEV_PROP_SUPPORTEDFORMATSORDERED 0xD404U -#define MTP_DEV_PROP_DEVICEICON 0xD405U -#define MTP_DEV_PROP_PLAYBACK_RATE 0xD410U -#define MTP_DEV_PROP_PLAYBACK_OBJECT 0xD411U -#define MTP_DEV_PROP_PLAYBACK_CONTAINER 0xD412U -#define MTP_DEV_PROP_SESSION_INITIATOR_VERSION_INFO 0xD406U -#define MTP_DEV_PROP_PERCEIVED_DEVICE_TYPE 0xD407U - -/* Container Types */ -#define MTP_CONT_TYPE_UNDEFINED 0U -#define MTP_CONT_TYPE_COMMAND 1U -#define MTP_CONT_TYPE_DATA 2U -#define MTP_CONT_TYPE_RESPONSE 3U -#define MTP_CONT_TYPE_EVENT 4U - -#ifndef MTP_STORAGE_ID -#define MTP_STORAGE_ID 0x00010001U /* SD card is inserted*/ -#endif /* MTP_STORAGE_ID */ - -#define MTP_NBR_STORAGE_ID 1U -#define FREE_SPACE_IN_OBJ_NOT_USED 0xFFFFFFFFU - /* MTP storage type */ #define MTP_STORAGE_UNDEFINED 0U #define MTP_STORAGE_FIXED_ROM 0x0001U @@ -346,4 +403,101 @@ #define MTP_PROP_GET 0x00U #define MTP_PROP_GET_SET 0x01U +#define MTP_SESSION_CLOSED 0x00 +#define MTP_SESSION_OPENED 0x01 + +struct mtp_container_command { + uint32_t conlen; + uint16_t contype; + uint16_t code; + uint32_t trans_id; + uint32_t param1; + uint32_t param2; + uint32_t param3; + uint32_t param4; + uint32_t param5; +} __PACKED; + +struct mtp_container_data { + uint32_t conlen; + uint16_t contype; + uint16_t code; + uint32_t trans_id; + uint8_t data[512]; +} __PACKED; + +struct mtp_container_response { + uint32_t conlen; + uint16_t contype; + uint16_t code; + uint32_t trans_id; +} __PACKED; + +/*Length of template descriptor: 23 bytes*/ +#define MTP_DESCRIPTOR_LEN (9 + 7 + 7 + 7) + +// clang-format off +#ifndef CONFIG_USB_HS +#define MTP_DESCRIPTOR_INIT(bFirstInterface, out_ep, in_ep, int_ep, str_idx) \ + /* Interface */ \ + 0x09, /* bLength */ \ + USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ + bFirstInterface, /* bInterfaceNumber */ \ + 0x00, /* bAlternateSetting */ \ + 0x03, /* bNumEndpoints */ \ + USB_DEVICE_CLASS_MASS_STORAGE, /* bInterfaceClass */ \ + USB_MTP_SUB_CLASS, /* bInterfaceSubClass */ \ + USB_MTP_PROTOCOL, /* bInterfaceProtocol */ \ + str_idx, /* iInterface */ \ + 0x07, /* bLength */ \ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ + out_ep, /* bEndpointAddress */ \ + 0x02, /* bmAttributes */ \ + 0x40, 0x00, /* wMaxPacketSize */ \ + 0x00, /* bInterval */ \ + 0x07, /* bLength */ \ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ + in_ep, /* bEndpointAddress */ \ + 0x02, /* bmAttributes */ \ + 0x40, 0x00, /* wMaxPacketSize */ \ + 0x00, /* bInterval */ \ + 0x07, /* bLength */ \ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ + int_ep, /* bEndpointAddress */ \ + 0x03, /* bmAttributes */ \ + 0x1c, 0x00, /* wMaxPacketSize */ \ + 0x06 /* bInterval */ +#else +#define MTP_DESCRIPTOR_INIT(bFirstInterface, out_ep, in_ep, int_ep, str_idx) \ + /* Interface */ \ + 0x09, /* bLength */ \ + USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */ \ + bFirstInterface, /* bInterfaceNumber */ \ + 0x00, /* bAlternateSetting */ \ + 0x03, /* bNumEndpoints */ \ + USB_DEVICE_CLASS_MASS_STORAGE, /* bInterfaceClass */ \ + USB_MTP_SUB_CLASS, /* bInterfaceSubClass */ \ + USB_MTP_PROTOCOL, /* bInterfaceProtocol */ \ + str_idx, /* iInterface */ \ + 0x07, /* bLength */ \ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ + out_ep, /* bEndpointAddress */ \ + 0x02, /* bmAttributes */ \ + 0x00, 0x02, /* wMaxPacketSize */ \ + 0x00, /* bInterval */ \ + 0x07, /* bLength */ \ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ + in_ep, /* bEndpointAddress */ \ + 0x02, /* bmAttributes */ \ + 0x00, 0x02, /* wMaxPacketSize */ \ + 0x00, /* bInterval */ \ + 0x07, /* bLength */ \ + USB_DESCRIPTOR_TYPE_ENDPOINT, /* bDescriptorType */ \ + int_ep, /* bEndpointAddress */ \ + 0x03, /* bmAttributes */ \ + 0x1c, 0x00, /* wMaxPacketSize */ \ + 0x06 /* bInterval */ +#endif +// clang-format on + #endif /* USB_MTP_H */ diff --git a/third-party/cherryusb/class/mtp/usbd_mtp.c b/third-party/cherryusb/class/mtp/usbd_mtp.c new file mode 100644 index 0000000000000000000000000000000000000000..adc3e5263e057f5fe601fdd89ccbf1d7ba0480e6 --- /dev/null +++ b/third-party/cherryusb/class/mtp/usbd_mtp.c @@ -0,0 +1,566 @@ +/* + * Copyright (c) 2022, sakumisu + * + * SPDX-License-Identifier: Apache-2.0 + */ +#include "usbd_core.h" +#include "usbd_mtp.h" +#include "usbd_mtp_config.h" + +/* MTP Stage */ +enum Stage { + MTP_READ_COMMAND = 0, + MTP_DATA_OUT = 1, + MTP_DATA_IN = 2, + MTP_SEND_RESPONSE = 3, + MTP_WAIT_RESPONSE = 4, +}; + +USB_NOCACHE_RAM_SECTION struct usbd_mtp { + USB_MEM_ALIGNX struct mtp_container_command con_command; + USB_MEM_ALIGNX struct mtp_container_data con_data; + USB_MEM_ALIGNX struct mtp_container_response con_response; + enum Stage stage; + uint8_t session_state; + uint32_t response_code; +} g_usbd_mtp; + +/* Max USB packet size */ +#ifndef CONFIG_USB_HS +#define MTP_BULK_EP_MPS 64 +#else +#define MTP_BULK_EP_MPS 512 +#endif + +#define MTP_OUT_EP_IDX 0 +#define MTP_IN_EP_IDX 1 +#define MTP_INT_EP_IDX 2 + +/* Describe EndPoints configuration */ +static struct usbd_endpoint mtp_ep_data[3]; + +static int mtp_class_interface_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) +{ + USB_LOG_DBG("MTP Class request: " + "bRequest 0x%02x\r\n", + setup->bRequest); + + switch (setup->bRequest) { + case MTP_REQUEST_CANCEL: + + break; + case MTP_REQUEST_GET_EXT_EVENT_DATA: + + break; + case MTP_REQUEST_RESET: + + break; + case MTP_REQUEST_GET_DEVICE_STATUS: + + break; + + default: + USB_LOG_WRN("Unhandled MTP Class bRequest 0x%02x\r\n", setup->bRequest); + return -1; + } + + return 0; +} + +static void usbd_mtp_send_response(uint32_t code) +{ + USB_LOG_DBG("Send response\r\n"); + + g_usbd_mtp.stage = MTP_WAIT_RESPONSE; + + g_usbd_mtp.con_response.conlen = 12; + g_usbd_mtp.con_response.contype = MTP_CONTAINER_TYPE_RESPONSE; + g_usbd_mtp.con_response.code = code; + g_usbd_mtp.con_response.trans_id = g_usbd_mtp.con_command.trans_id; + + usbd_ep_start_write(mtp_ep_data[MTP_IN_EP_IDX].ep_addr, (uint8_t *)&g_usbd_mtp.con_response, 12); +} + +static void usbd_mtp_send_info(uint8_t *data, uint32_t len) +{ + USB_LOG_DBG("Send info\r\n"); + + g_usbd_mtp.stage = MTP_SEND_RESPONSE; + + g_usbd_mtp.con_data.conlen = 12 + len; + g_usbd_mtp.con_data.contype = MTP_CONTAINER_TYPE_DATA; + g_usbd_mtp.con_data.code = MTP_RESPONSE_OK; + g_usbd_mtp.con_data.trans_id = g_usbd_mtp.con_command.trans_id; + + memcpy(g_usbd_mtp.con_data.data, data, len); + usbd_ep_start_write(mtp_ep_data[MTP_IN_EP_IDX].ep_addr, (uint8_t *)&g_usbd_mtp.con_data, 12 + len); +} + +static void usbd_mtp_get_device_info(void) +{ + struct mtp_device_info device_info; + uint16_t i; + + device_info.StandardVersion = 100; + device_info.VendorExtensionID = 0x06; + device_info.VendorExtensionVersion = 100; + device_info.VendorExtensionDesc_len = (uint8_t)CONFIG_MTP_VEND_EXT_DESC_LEN; + + for (i = 0; i < CONFIG_MTP_VEND_EXT_DESC_LEN; i++) { + device_info.VendorExtensionDesc[i] = VendExtDesc[i]; + } + + /* device supports one mode , standard mode */ + device_info.FunctionalMode = 0x0000; + + /* All supported operation */ + device_info.OperationsSupported_len = CONFIG_MTP_SUPP_OP_LEN; + for (i = 0U; i < CONFIG_MTP_SUPP_OP_LEN; i++) { + device_info.OperationsSupported[i] = SuppOP[i]; + } + + /* event that are currently generated by the device*/ + device_info.EventsSupported_len = CONFIG_MTP_SUPP_EVENTS_LEN; + + for (i = 0U; i < CONFIG_MTP_SUPP_EVENTS_LEN; i++) { + device_info.EventsSupported[i] = SuppEvents[i]; + } + + device_info.DevicePropertiesSupported_len = CONFIG_MTP_SUPP_DEVICE_PROP_LEN; + + for (i = 0U; i < CONFIG_MTP_SUPP_DEVICE_PROP_LEN; i++) { + device_info.DevicePropertiesSupported[i] = DevicePropSupp[i]; + } + + device_info.CaptureFormats_len = CONFIG_MTP_SUPP_CAPT_FORMAT_LEN; + + for (i = 0U; i < CONFIG_MTP_SUPP_CAPT_FORMAT_LEN; i++) { + device_info.CaptureFormats[i] = SuppCaptFormat[i]; + } + + device_info.ImageFormats_len = CONFIG_MTP_SUPP_IMG_FORMAT_LEN; /* number of image formats that are supported by the device*/ + for (i = 0U; i < CONFIG_MTP_SUPP_IMG_FORMAT_LEN; i++) { + device_info.ImageFormats[i] = SuppImgFormat[i]; + } + + device_info.Manufacturer_len = (uint8_t)CONFIG_MTP_MANUF_LEN; + for (i = 0U; i < CONFIG_MTP_MANUF_LEN; i++) { + device_info.Manufacturer[i] = Manuf[i]; + } + + device_info.Model_len = (uint8_t)CONFIG_MTP_MODEL_LEN; + for (i = 0U; i < CONFIG_MTP_MODEL_LEN; i++) { + device_info.Model[i] = Model[i]; + } + + device_info.DeviceVersion_len = (uint8_t)CONFIG_MTP_DEVICE_VERSION_LEN; + for (i = 0U; i < CONFIG_MTP_DEVICE_VERSION_LEN; i++) { + device_info.DeviceVersion[i] = DeviceVers[i]; + } + + device_info.SerialNumber_len = (uint8_t)CONFIG_MTP_SERIAL_NBR_LEN; + for (i = 0U; i < CONFIG_MTP_SERIAL_NBR_LEN; i++) { + device_info.SerialNumber[i] = SerialNbr[i]; + } + + usbd_mtp_send_info((uint8_t *)&device_info, sizeof(struct mtp_device_info)); +} + +static void usbd_mtp_open_session(void) +{ + usbd_mtp_send_response(MTP_RESPONSE_OK); +} + +static void usbd_mtp_get_storage_ids(void) +{ + struct mtp_storage_id storage_id; + + storage_id.StorageIDS_len = CONFIG_MTP_STORAGE_ID_LEN; + storage_id.StorageIDS[0] = MTP_STORAGE_ID; + + usbd_mtp_send_info((uint8_t *)&storage_id, sizeof(struct mtp_storage_id)); +} + +static void usbd_mtp_get_storage_info(void) +{ + struct mtp_storage_info storage_info; + + storage_info.StorageType = MTP_STORAGE_REMOVABLE_RAM; + storage_info.FilesystemType = MTP_FILESYSTEM_GENERIC_FLAT; + storage_info.AccessCapability = MTP_ACCESS_CAP_RW; + storage_info.MaxCapability = 0x0080DFA81A000000; // todo + storage_info.FreeSpaceInBytes = 0x00007EEB0D000000; // todo + storage_info.FreeSpaceInObjects = 0xFFFFFFFFU; /* not used */ + storage_info.StorageDescription = 0U; + storage_info.VolumeLabel = 0U; + + usbd_mtp_send_info((uint8_t *)&storage_info, sizeof(struct mtp_storage_info)); +} + +static void usbd_mtp_get_object_handles(void) +{ + struct mtp_object_handle object_handle; + + // todo + + usbd_mtp_send_info((uint8_t *)&object_handle, sizeof(struct mtp_object_handle)); +} + +static void usbd_mtp_get_object_info(void) +{ + struct mtp_object_info object_info; + + object_info.Storage_id = MTP_STORAGE_ID; + object_info.ObjectFormat = 0; // todo + object_info.ObjectCompressedSize = 0; //todo + object_info.ProtectionStatus = 0U; + object_info.ThumbFormat = MTP_OBJ_FORMAT_UNDEFINED; + object_info.ThumbCompressedSize = 0U; + object_info.ThumbPixWidth = 0U; /* not supported or not an image */ + object_info.ThumbPixHeight = 0U; + object_info.ImagePixWidth = 0U; + object_info.ImagePixHeight = 0U; + object_info.ImageBitDepth = 0U; + object_info.ParentObject = 0; // todo + object_info.AssociationType = 0U; + object_info.AssociationDesc = 0U; + object_info.SequenceNumber = 0U; + + /* we have to get this value before object_info.Filename */ + object_info.Filename_len = sizeof(DefaultFileName); + memcpy(object_info.Filename, DefaultFileName, (uint32_t)object_info.Filename_len + 1U); + + object_info.CaptureDate = 0U; + object_info.ModificationDate = 0U; + object_info.Keywords = 0U; + + usbd_mtp_send_info((uint8_t *)&object_info, sizeof(struct mtp_object_info)); +} + +static void usbd_mtp_get_object_prop_desc(void) +{ + struct mtp_object_prop_desc object_prop_desc; + + uint16_t undef_format = MTP_OBJ_FORMAT_UNDEFINED; + uint32_t storageid = MTP_STORAGE_ID; + + switch (g_usbd_mtp.con_command.param1) /* switch obj prop code */ + { + case MTP_OB_PROP_OBJECT_FORMAT: + object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1); + object_prop_desc.DataType = MTP_DATATYPE_UINT16; + object_prop_desc.GetSet = MTP_PROP_GET; + object_prop_desc.DefValue = (uint8_t *)&undef_format; + object_prop_desc.GroupCode = 0U; + object_prop_desc.FormFlag = 0U; + break; + + case MTP_OB_PROP_STORAGE_ID: + object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1); + object_prop_desc.DataType = MTP_DATATYPE_UINT32; + object_prop_desc.GetSet = MTP_PROP_GET; + object_prop_desc.DefValue = (uint8_t *)&storageid; + object_prop_desc.GroupCode = 0U; + object_prop_desc.FormFlag = 0U; + break; + + case MTP_OB_PROP_OBJ_FILE_NAME: + object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1); + object_prop_desc.DataType = MTP_DATATYPE_STR; + object_prop_desc.GetSet = MTP_PROP_GET; + object_prop_desc.DefValue = 0U; + object_prop_desc.GroupCode = 0U; + object_prop_desc.FormFlag = 0U; + break; + + case MTP_OB_PROP_PARENT_OBJECT: + object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1); + object_prop_desc.DataType = MTP_DATATYPE_STR; + object_prop_desc.GetSet = MTP_PROP_GET; + object_prop_desc.DefValue = 0U; + object_prop_desc.GroupCode = 0U; + object_prop_desc.FormFlag = 0U; + break; + + case MTP_OB_PROP_OBJECT_SIZE: + object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1); + object_prop_desc.DataType = MTP_DATATYPE_UINT64; + object_prop_desc.GetSet = MTP_PROP_GET; + object_prop_desc.DefValue = 0U; + object_prop_desc.GroupCode = 0U; + object_prop_desc.FormFlag = 0U; + break; + + case MTP_OB_PROP_NAME: + object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1); + object_prop_desc.DataType = MTP_DATATYPE_STR; + object_prop_desc.GetSet = MTP_PROP_GET; + object_prop_desc.DefValue = NULL; + object_prop_desc.GroupCode = 0U; + object_prop_desc.FormFlag = 0U; + break; + + case MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN: + object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1); + object_prop_desc.DataType = MTP_DATATYPE_UINT128; + object_prop_desc.GetSet = MTP_PROP_GET; + object_prop_desc.DefValue = 0U; + object_prop_desc.GroupCode = 0U; + object_prop_desc.FormFlag = 0U; + break; + + case MTP_OB_PROP_PROTECTION_STATUS: + object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1); + object_prop_desc.DataType = MTP_DATATYPE_UINT16; + object_prop_desc.GetSet = MTP_PROP_GET_SET; + object_prop_desc.DefValue = 0U; + object_prop_desc.GroupCode = 0U; + object_prop_desc.FormFlag = 0U; + break; + + default: + break; + } + // todo + usbd_mtp_send_info((uint8_t *)&object_prop_desc, sizeof(struct mtp_object_prop_desc)); +} + +static void usbd_mtp_get_object_props_supported(void) +{ + struct mtp_object_props_support object_props_support; + uint32_t i; + + object_props_support.ObjectPropCode_len = CONFIG_MTP_SUPP_OBJ_PROP_LEN; + + for (i = 0U; i < CONFIG_MTP_SUPP_OBJ_PROP_LEN; i++) { + object_props_support.ObjectPropCode[i] = ObjectPropCode[i]; + } + usbd_mtp_send_info((uint8_t *)&object_props_support, sizeof(struct mtp_object_props_support)); +} + +static void usbd_mtp_get_object_prop_list(void) +{ + struct mtp_object_prop_list object_prop_list; + + uint16_t filename[255]; + uint32_t storageid = MTP_STORAGE_ID; + uint32_t default_val = 0U; + uint32_t i; + uint16_t format; + uint64_t objsize; + uint32_t parent_proval; + + object_prop_list.Properties_len = CONFIG_MTP_SUPP_OBJ_PROP_LEN; + + for (i = 0U; i < CONFIG_MTP_SUPP_OBJ_PROP_LEN; i++) { + object_prop_list.Properties[i].ObjectHandle = g_usbd_mtp.con_command.param1; + + switch (ObjectPropCode[i]) { + case MTP_OB_PROP_STORAGE_ID: + object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_STORAGE_ID; + object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT32; + object_prop_list.Properties[i].propval = (uint8_t *)&storageid; + break; + + case MTP_OB_PROP_OBJECT_FORMAT: + object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_OBJECT_FORMAT; + object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT16; + object_prop_list.Properties[i].propval = (uint8_t *)&format; + break; + + case MTP_OB_PROP_OBJ_FILE_NAME: + object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_OBJ_FILE_NAME; + object_prop_list.Properties[i].Datatype = MTP_DATATYPE_STR; + object_prop_list.Properties[i].propval = NULL; + break; + + case MTP_OB_PROP_PARENT_OBJECT: + object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_PARENT_OBJECT; + object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT32; + object_prop_list.Properties[i].propval = (uint8_t *)&parent_proval; + break; + + case MTP_OB_PROP_OBJECT_SIZE: + object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_OBJECT_SIZE; + object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT64; + object_prop_list.Properties[i].propval = (uint8_t *)&objsize; + break; + + case MTP_OB_PROP_NAME: + object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_NAME; + object_prop_list.Properties[i].Datatype = MTP_DATATYPE_STR; + object_prop_list.Properties[i].propval = NULL; + break; + + case MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN: + object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN; + object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT128; + object_prop_list.Properties[i].propval = (uint8_t *)&g_usbd_mtp.con_command.param1; + break; + + case MTP_OB_PROP_PROTECTION_STATUS: + object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_PROTECTION_STATUS; + object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT16; + object_prop_list.Properties[i].propval = (uint8_t *)&default_val; + break; + + default: + break; + } + } + // todo + usbd_mtp_send_info((uint8_t *)&object_prop_list, sizeof(struct mtp_object_prop_list)); +} + +static void usbd_mtp_get_device_prop_desc(void) +{ + struct mtp_device_prop_desc device_prop_desc; + uint32_t i; + + device_prop_desc.DevicePropertyCode = MTP_DEV_PROP_DEVICE_FRIENDLY_NAME; + device_prop_desc.DataType = MTP_DATATYPE_STR; + device_prop_desc.GetSet = MTP_PROP_GET_SET; + device_prop_desc.DefaultValue_len = CONFIG_MTP_DEVICE_PROP_DESC_DEF_LEN; + + for (i = 0U; i < (sizeof(DevicePropDefVal) / 2U); i++) { + device_prop_desc.DefaultValue[i] = DevicePropDefVal[i]; + } + + device_prop_desc.CurrentValue_len = CONFIG_MTP_DEVICE_PROP_DESC_CUR_LEN; + + for (i = 0U; i < (sizeof(DevicePropCurDefVal) / 2U); i++) { + device_prop_desc.CurrentValue[i] = DevicePropCurDefVal[i]; + } + + device_prop_desc.FormFlag = 0U; + + usbd_mtp_send_info((uint8_t *)&device_prop_desc, sizeof(struct mtp_device_prop_desc)); +} + +static int usbd_mtp_decode_command(struct mtp_container_command *command) +{ + printf("code:%04x\r\n", command->code); + switch (command->code) { + case MTP_OP_GET_DEVICE_INFO: + usbd_mtp_get_device_info(); + break; + case MTP_OP_OPEN_SESSION: + usbd_mtp_open_session(); + break; + case MTP_OP_CLOSE_SESSION: + break; + case MTP_OP_GET_STORAGE_IDS: + usbd_mtp_get_storage_ids(); + break; + case MTP_OP_GET_STORAGE_INFO: + usbd_mtp_get_storage_info(); + break; + case MTP_OP_GET_OBJECT_HANDLES: + usbd_mtp_get_object_handles(); + break; + case MTP_OP_GET_OBJECT_INFO: + usbd_mtp_get_object_info(); + break; + case MTP_OP_GET_OBJECT_PROP_REFERENCES: + break; + case MTP_OP_GET_OBJECT_PROPS_SUPPORTED: + usbd_mtp_get_object_props_supported(); + break; + case MTP_OP_GET_OBJECT_PROP_DESC: + usbd_mtp_get_object_prop_desc(); + break; + case MTP_OP_GET_OBJECT_PROPLIST: + usbd_mtp_get_object_prop_list(); + break; + case MTP_OP_GET_OBJECT_PROP_VALUE: + break; + case MTP_OP_GET_DEVICE_PROP_DESC: + usbd_mtp_get_device_prop_desc(); + break; + case MTP_OP_GET_OBJECT: + break; + case MTP_OP_SEND_OBJECT_INFO: + break; + case MTP_OP_SEND_OBJECT: + break; + case MTP_OP_DELETE_OBJECT: + break; + + default: + break; + } + return 0; +} + +static void usbd_mtp_bulk_out(uint8_t ep, uint32_t nbytes) +{ + switch (g_usbd_mtp.stage) { + case MTP_READ_COMMAND: + usbd_mtp_decode_command(&g_usbd_mtp.con_command); + break; + case MTP_DATA_OUT: + break; + default: + break; + } +} + +static void usbd_mtp_bulk_in(uint8_t ep, uint32_t nbytes) +{ + printf("send:%d\r\n", nbytes); + switch (g_usbd_mtp.stage) { + case MTP_DATA_IN: + break; + case MTP_SEND_RESPONSE: + usbd_mtp_send_response(MTP_RESPONSE_OK); + break; + case MTP_WAIT_RESPONSE: + USB_LOG_DBG("Start reading command\r\n"); + g_usbd_mtp.stage = MTP_READ_COMMAND; + usbd_ep_start_read(mtp_ep_data[MTP_OUT_EP_IDX].ep_addr, (uint8_t *)&g_usbd_mtp.con_command, MTP_BULK_EP_MPS); + break; + + default: + break; + } +} + +static void mtp_notify_handler(uint8_t event, void *arg) +{ + switch (event) { + case USBD_EVENT_RESET: + break; + case USBD_EVENT_CONFIGURED: + USB_LOG_DBG("Start reading command\r\n"); + g_usbd_mtp.stage = MTP_READ_COMMAND; + usbd_ep_start_read(mtp_ep_data[MTP_OUT_EP_IDX].ep_addr, (uint8_t *)&g_usbd_mtp.con_command, MTP_BULK_EP_MPS); + break; + + default: + break; + } +} + +struct usbd_interface *usbd_mtp_init_intf(struct usbd_interface *intf, + const uint8_t out_ep, + const uint8_t in_ep, + const uint8_t int_ep) +{ + intf->class_interface_handler = mtp_class_interface_request_handler; + intf->class_endpoint_handler = NULL; + intf->vendor_handler = NULL; + intf->notify_handler = mtp_notify_handler; + + mtp_ep_data[MTP_OUT_EP_IDX].ep_addr = out_ep; + mtp_ep_data[MTP_OUT_EP_IDX].ep_cb = usbd_mtp_bulk_out; + mtp_ep_data[MTP_IN_EP_IDX].ep_addr = in_ep; + mtp_ep_data[MTP_IN_EP_IDX].ep_cb = usbd_mtp_bulk_in; + mtp_ep_data[MTP_INT_EP_IDX].ep_addr = int_ep; + mtp_ep_data[MTP_INT_EP_IDX].ep_cb = NULL; + + usbd_add_endpoint(&mtp_ep_data[MTP_OUT_EP_IDX]); + usbd_add_endpoint(&mtp_ep_data[MTP_IN_EP_IDX]); + usbd_add_endpoint(&mtp_ep_data[MTP_INT_EP_IDX]); + + return intf; +} \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/class/mtp/usbd_mtp.h b/third-party/cherryusb/class/mtp/usbd_mtp.h similarity index 47% rename from third-party/cherryusb-0.7.0/class/mtp/usbd_mtp.h rename to third-party/cherryusb/class/mtp/usbd_mtp.h index 7162141c9859d41fe338d52cb9d3450fc8180ab8..2e1854d2eaad39f91122a38088c7c6d0c180e205 100644 --- a/third-party/cherryusb-0.7.0/class/mtp/usbd_mtp.h +++ b/third-party/cherryusb/class/mtp/usbd_mtp.h @@ -12,6 +12,11 @@ extern "C" { #endif +struct usbd_interface *usbd_mtp_init_intf(struct usbd_interface *intf, + const uint8_t out_ep, + const uint8_t in_ep, + const uint8_t int_ep); + #ifdef __cplusplus } #endif diff --git a/third-party/cherryusb/class/mtp/usbd_mtp_config.h b/third-party/cherryusb/class/mtp/usbd_mtp_config.h new file mode 100644 index 0000000000000000000000000000000000000000..6c5e6eaf1033b20afe95c1e9a1bb4674ee2bda7d --- /dev/null +++ b/third-party/cherryusb/class/mtp/usbd_mtp_config.h @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2022, sakumisu + * + * SPDX-License-Identifier: Apache-2.0 + */ +#ifndef USB_MTP_CONFIG_H +#define USB_MTP_CONFIG_H + +#include "usb_mtp.h" + +static const uint16_t VendExtDesc[] = { 'm', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', ':', ' ', '1', '.', '0', ';', ' ', 0 }; /* last 2 bytes must be 0*/ + +static const uint16_t SuppOP[] = { MTP_OP_GET_DEVICE_INFO, MTP_OP_OPEN_SESSION, MTP_OP_CLOSE_SESSION, + MTP_OP_GET_STORAGE_IDS, MTP_OP_GET_STORAGE_INFO, MTP_OP_GET_NUM_OBJECTS, + MTP_OP_GET_OBJECT_HANDLES, MTP_OP_GET_OBJECT_INFO, MTP_OP_GET_OBJECT, + MTP_OP_DELETE_OBJECT, MTP_OP_SEND_OBJECT_INFO, MTP_OP_SEND_OBJECT, + MTP_OP_GET_DEVICE_PROP_DESC, MTP_OP_GET_DEVICE_PROP_VALUE, + MTP_OP_SET_OBJECT_PROP_VALUE, MTP_OP_GET_OBJECT_PROP_VALUE, + MTP_OP_GET_OBJECT_PROPS_SUPPORTED, MTP_OP_GET_OBJECT_PROPLIST, + MTP_OP_GET_OBJECT_PROP_DESC, MTP_OP_GET_OBJECT_PROP_REFERENCES }; + +static const uint16_t SuppEvents[] = { MTP_EVENT_OBJECTADDED }; + +static const uint16_t DevicePropSupp[] = { MTP_DEV_PROP_DEVICE_FRIENDLY_NAME, MTP_DEV_PROP_BATTERY_LEVEL }; + +static const uint16_t SuppCaptFormat[] = { MTP_OBJ_FORMAT_UNDEFINED, MTP_OBJ_FORMAT_ASSOCIATION, MTP_OBJ_FORMAT_TEXT }; + +static const uint16_t SuppImgFormat[] = { MTP_OBJ_FORMAT_UNDEFINED, MTP_OBJ_FORMAT_TEXT, MTP_OBJ_FORMAT_ASSOCIATION, + MTP_OBJ_FORMAT_EXECUTABLE, MTP_OBJ_FORMAT_WAV, MTP_OBJ_FORMAT_MP3, + MTP_OBJ_FORMAT_EXIF_JPEG, MTP_OBJ_FORMAT_MPEG, MTP_OBJ_FORMAT_MP4_CONTAINER, + MTP_OBJ_FORMAT_WINDOWS_IMAGE_FORMAT, MTP_OBJ_FORMAT_PNG, MTP_OBJ_FORMAT_WMA, + MTP_OBJ_FORMAT_WMV }; + +static const uint16_t Manuf[] = { 'C', 'h', 'e', 'r', 'r', 'y', 'U', 'S', 'B', 0 }; /* last 2 bytes must be 0*/ +static const uint16_t Model[] = { 'C', 'h', 'e', 'r', 'r', 'y', 'U', 'S', 'B', 0 }; /* last 2 bytes must be 0*/ +static const uint16_t DeviceVers[] = { 'V', '1', '.', '0', '0', 0 }; /* last 2 bytes must be 0*/ +/*SerialNbr shall be 32 character hexadecimal string for legacy compatibility reasons */ +static const uint16_t SerialNbr[] = { '0', '0', '0', '0', '1', '0', '0', '0', '0', '1', '0', '0', '0', '0', + '1', '0', '0', '0', '0', '1', '0', '0', '0', '0', '1', '0', '0', '0', + '0', '1', '0', '0', 0 }; /* last 2 bytes must be 0*/ + +static const uint16_t DefaultFileName[] = { 'N', 'e', 'w', ' ', 'F', 'o', 'l', 'd', 'e', 'r', 0 }; + +static const uint16_t DevicePropDefVal[] = { 'C', 'h', 'e', 'r', 'r', 'y', 'U', 'S', 'B', 0 }; /* last 2 bytes must be 0*/ +static const uint16_t DevicePropCurDefVal[] = { 'C', 'h', 'e', 'r', 'r', 'y', 'U', 'S', 'B', 0 }; + +/* required for all object format : storageID, objectFormat, ObjectCompressedSize, +persistent unique object identifier, name*/ +static const uint16_t ObjectPropCode[] = { MTP_OB_PROP_STORAGE_ID, MTP_OB_PROP_OBJECT_FORMAT, MTP_OB_PROP_OBJECT_SIZE, + MTP_OB_PROP_OBJ_FILE_NAME, MTP_OB_PROP_PARENT_OBJECT, MTP_OB_PROP_NAME, + MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN, MTP_OB_PROP_PROTECTION_STATUS }; + +#define MTP_STORAGE_ID 0x00010001U /* SD card is inserted*/ + +#define CONFIG_MTP_VEND_EXT_DESC_LEN (sizeof(VendExtDesc) / 2U) +#define CONFIG_MTP_SUPP_OP_LEN (sizeof(SuppOP) / 2U) +#define CONFIG_MTP_SUPP_EVENTS_LEN (sizeof(SuppEvents) / 2U) +#define CONFIG_MTP_SUPP_DEVICE_PROP_LEN (sizeof(DevicePropSupp) / 2U) +#define CONFIG_MTP_SUPP_CAPT_FORMAT_LEN (sizeof(SuppCaptFormat) / 2U) +#define CONFIG_MTP_SUPP_IMG_FORMAT_LEN (sizeof(SuppImgFormat) / 2U) +#define CONFIG_MTP_MANUF_LEN (sizeof(Manuf) / 2U) +#define CONFIG_MTP_MODEL_LEN (sizeof(Model) / 2U) +#define CONFIG_MTP_DEVICE_VERSION_LEN (sizeof(DeviceVers) / 2U) +#define CONFIG_MTP_SERIAL_NBR_LEN (sizeof(SerialNbr) / 2U) +#define CONFIG_MTP_SUPP_OBJ_PROP_LEN (sizeof(ObjectPropCode) / 2U) +#define CONFIG_MTP_DEVICE_PROP_DESC_DEF_LEN (sizeof(DevicePropDefVal) / 2U) +#define CONFIG_MTP_DEVICE_PROP_DESC_CUR_LEN (sizeof(DevicePropCurDefVal) / 2U) +#define CONFIG_MTP_STORAGE_ID_LEN 1 +#define CONFIG_MTP_OBJECT_HANDLE_LEN 100 + +struct mtp_device_info { + uint16_t StandardVersion; + uint32_t VendorExtensionID; + uint16_t VendorExtensionVersion; + uint8_t VendorExtensionDesc_len; + uint16_t VendorExtensionDesc[CONFIG_MTP_VEND_EXT_DESC_LEN]; + uint16_t FunctionalMode; + uint32_t OperationsSupported_len; + uint16_t OperationsSupported[CONFIG_MTP_SUPP_OP_LEN]; + uint32_t EventsSupported_len; + uint16_t EventsSupported[CONFIG_MTP_SUPP_EVENTS_LEN]; + uint32_t DevicePropertiesSupported_len; + uint16_t DevicePropertiesSupported[CONFIG_MTP_SUPP_DEVICE_PROP_LEN]; + uint32_t CaptureFormats_len; + uint16_t CaptureFormats[CONFIG_MTP_SUPP_CAPT_FORMAT_LEN]; + uint32_t ImageFormats_len; + uint16_t ImageFormats[CONFIG_MTP_SUPP_IMG_FORMAT_LEN]; + uint8_t Manufacturer_len; + uint16_t Manufacturer[CONFIG_MTP_MANUF_LEN]; + uint8_t Model_len; + uint16_t Model[CONFIG_MTP_MODEL_LEN]; + uint8_t DeviceVersion_len; + uint16_t DeviceVersion[CONFIG_MTP_DEVICE_VERSION_LEN]; + uint8_t SerialNumber_len; + uint16_t SerialNumber[CONFIG_MTP_SERIAL_NBR_LEN]; +} __PACKED; + +struct mtp_object_props_support { + uint32_t ObjectPropCode_len; + uint16_t ObjectPropCode[CONFIG_MTP_SUPP_OBJ_PROP_LEN]; +} __PACKED; + +struct mtp_device_prop_desc { + uint16_t DevicePropertyCode; + uint16_t DataType; + uint8_t GetSet; + uint8_t DefaultValue_len; + uint16_t DefaultValue[CONFIG_MTP_DEVICE_PROP_DESC_DEF_LEN]; + uint8_t CurrentValue_len; + uint16_t CurrentValue[CONFIG_MTP_DEVICE_PROP_DESC_CUR_LEN]; + uint8_t FormFlag; +} __PACKED; + +struct mtp_storage_id { + uint32_t StorageIDS_len; + uint32_t StorageIDS[CONFIG_MTP_STORAGE_ID_LEN]; +} __PACKED; + +struct mtp_storage_info { + uint16_t StorageType; + uint16_t FilesystemType; + uint16_t AccessCapability; + uint64_t MaxCapability; + uint64_t FreeSpaceInBytes; + uint32_t FreeSpaceInObjects; + uint8_t StorageDescription; + uint8_t VolumeLabel; +} __PACKED; + +struct mtp_object_handle { + uint32_t ObjectHandle_len; + uint32_t ObjectHandle[CONFIG_MTP_OBJECT_HANDLE_LEN]; +} __PACKED; + +struct mtp_object_info { + uint32_t Storage_id; + uint16_t ObjectFormat; + uint16_t ProtectionStatus; + uint32_t ObjectCompressedSize; + uint16_t ThumbFormat; + uint32_t ThumbCompressedSize; + uint32_t ThumbPixWidth; + uint32_t ThumbPixHeight; + uint32_t ImagePixWidth; + uint32_t ImagePixHeight; + uint32_t ImageBitDepth; + uint32_t ParentObject; + uint16_t AssociationType; + uint32_t AssociationDesc; + uint32_t SequenceNumber; + uint8_t Filename_len; + uint16_t Filename[255]; + uint32_t CaptureDate; + uint32_t ModificationDate; + uint8_t Keywords; +} __PACKED; + +struct mtp_object_prop_desc { + uint16_t ObjectPropertyCode; + uint16_t DataType; + uint8_t GetSet; + uint8_t *DefValue; + uint32_t GroupCode; + uint8_t FormFlag; +} __PACKED; + +struct mtp_object_prop_element { + uint32_t ObjectHandle; + uint16_t PropertyCode; + uint16_t Datatype; + uint8_t *propval; +} __PACKED; + +struct mtp_object_prop_list { + uint32_t Properties_len; + struct mtp_object_prop_element Properties[CONFIG_MTP_SUPP_OBJ_PROP_LEN]; +} __PACKED; + +#endif /* USB_MTP_CONFIG_H */ \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/class/mtp/usbh_mtp.c b/third-party/cherryusb/class/mtp/usbh_mtp.c similarity index 100% rename from third-party/cherryusb-0.7.0/class/mtp/usbh_mtp.c rename to third-party/cherryusb/class/mtp/usbh_mtp.c diff --git a/third-party/cherryusb-0.7.0/class/mtp/usbh_mtp.h b/third-party/cherryusb/class/mtp/usbh_mtp.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/mtp/usbh_mtp.h rename to third-party/cherryusb/class/mtp/usbh_mtp.h diff --git a/third-party/cherryusb-0.7.0/class/printer/usb_printer.h b/third-party/cherryusb/class/printer/usb_printer.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/printer/usb_printer.h rename to third-party/cherryusb/class/printer/usb_printer.h diff --git a/third-party/cherryusb-0.7.0/class/printer/usbd_printer.c b/third-party/cherryusb/class/printer/usbd_printer.c similarity index 74% rename from third-party/cherryusb-0.7.0/class/printer/usbd_printer.c rename to third-party/cherryusb/class/printer/usbd_printer.c index bdc5984c4c165b9b4d23536eddc057b97d9be9fc..586f69d16b801a69a04030658ce7dc7d5919999f 100644 --- a/third-party/cherryusb-0.7.0/class/printer/usbd_printer.c +++ b/third-party/cherryusb/class/printer/usbd_printer.c @@ -7,7 +7,8 @@ #include "usbd_printer.h" struct printer_cfg_priv { - uint8_t *device_id; + const uint8_t *device_id; + uint8_t device_id_len; uint8_t port_status; } usbd_printer_cfg; @@ -19,7 +20,8 @@ static int printer_class_interface_request_handler(struct usb_setup_packet *setu switch (setup->bRequest) { case PRINTER_REQUEST_GET_DEVICE_ID: - + memcpy(*data, usbd_printer_cfg.device_id, usbd_printer_cfg.device_id_len); + *len = usbd_printer_cfg.device_id_len; break; case PRINTER_REQUEST_GET_PORT_SATTUS: @@ -46,18 +48,14 @@ static void printer_notify_handler(uint8_t event, void *arg) } } -struct usbd_interface *usbd_printer_alloc_intf(void) +struct usbd_interface *usbd_printer_init_intf(struct usbd_interface *intf, const uint8_t *device_id, uint8_t device_id_len) { - struct usbd_interface *intf = usb_malloc(sizeof(struct usbd_interface)); - if (intf == NULL) { - USB_LOG_ERR("no mem to alloc intf\r\n"); - return NULL; - } - intf->class_interface_handler = printer_class_interface_request_handler; intf->class_endpoint_handler = NULL; intf->vendor_handler = NULL; intf->notify_handler = printer_notify_handler; + usbd_printer_cfg.device_id = device_id; + usbd_printer_cfg.device_id_len = device_id_len; return intf; } \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/class/printer/usbd_printer.h b/third-party/cherryusb/class/printer/usbd_printer.h similarity index 61% rename from third-party/cherryusb-0.7.0/class/printer/usbd_printer.h rename to third-party/cherryusb/class/printer/usbd_printer.h index 7f691dfcf0b3f86841105b4808bb9baf589ba744..b2bbdf49e2a87fb4e97e55971ca5a4ea6f85219b 100644 --- a/third-party/cherryusb-0.7.0/class/printer/usbd_printer.h +++ b/third-party/cherryusb/class/printer/usbd_printer.h @@ -12,8 +12,8 @@ extern "C" { #endif -/* Alloc printer interface driver */ -struct usbd_interface *usbd_printer_alloc_intf(void); +/* Init printer interface driver */ +struct usbd_interface *usbd_printer_init_intf(struct usbd_interface *intf, const uint8_t *device_id, uint8_t device_id_len); #ifdef __cplusplus } diff --git a/third-party/cherryusb-0.7.0/class/printer/usbh_printer.c b/third-party/cherryusb/class/printer/usbh_printer.c similarity index 100% rename from third-party/cherryusb-0.7.0/class/printer/usbh_printer.c rename to third-party/cherryusb/class/printer/usbh_printer.c diff --git a/third-party/cherryusb-0.7.0/class/printer/usbh_printer.h b/third-party/cherryusb/class/printer/usbh_printer.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/printer/usbh_printer.h rename to third-party/cherryusb/class/printer/usbh_printer.h diff --git a/third-party/cherryusb-0.7.0/class/template/usb_xxx.h b/third-party/cherryusb/class/template/usb_xxx.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/template/usb_xxx.h rename to third-party/cherryusb/class/template/usb_xxx.h diff --git a/third-party/cherryusb-0.7.0/class/template/usbd_xxx.c b/third-party/cherryusb/class/template/usbd_xxx.c similarity index 100% rename from third-party/cherryusb-0.7.0/class/template/usbd_xxx.c rename to third-party/cherryusb/class/template/usbd_xxx.c diff --git a/third-party/cherryusb-0.7.0/class/template/usbd_xxx.h b/third-party/cherryusb/class/template/usbd_xxx.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/template/usbd_xxx.h rename to third-party/cherryusb/class/template/usbd_xxx.h diff --git a/third-party/cherryusb-0.7.0/class/template/usbh_xxx.c b/third-party/cherryusb/class/template/usbh_xxx.c similarity index 100% rename from third-party/cherryusb-0.7.0/class/template/usbh_xxx.c rename to third-party/cherryusb/class/template/usbh_xxx.c diff --git a/third-party/cherryusb-0.7.0/class/template/usbh_xxx.h b/third-party/cherryusb/class/template/usbh_xxx.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/template/usbh_xxx.h rename to third-party/cherryusb/class/template/usbh_xxx.h diff --git a/third-party/cherryusb-0.7.0/class/vendor/asix.h b/third-party/cherryusb/class/vendor/asix.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/vendor/asix.h rename to third-party/cherryusb/class/vendor/asix.h diff --git a/third-party/cherryusb-0.7.0/class/vendor/axusbnet.c b/third-party/cherryusb/class/vendor/axusbnet.c similarity index 99% rename from third-party/cherryusb-0.7.0/class/vendor/axusbnet.c rename to third-party/cherryusb/class/vendor/axusbnet.c index 2faeb6b198346a4d3880ba6f4f674c3c2204b2ea..64282e03353907e18652b8dded84e99fe3a56c34 100644 --- a/third-party/cherryusb-0.7.0/class/vendor/axusbnet.c +++ b/third-party/cherryusb/class/vendor/axusbnet.c @@ -348,7 +348,7 @@ ax88772b_mdio_write(struct usbnet *dev, int phy_id, int loc, int val) ax8817x_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, (uint16_t)loc, 2, &res); if (loc == MII_ADVERTISE) { - res = cpu_to_le16(BMCR_ANENABLE | BMCR_ANRESTART); + res = CPU_TO_LE16(BMCR_ANENABLE | BMCR_ANRESTART); ax8817x_write_cmd(dev, AX_CMD_WRITE_MII_REG, phy_id, (uint16_t)MII_BMCR, 2, &res); } @@ -361,7 +361,7 @@ ax88772b_mdio_write(struct usbnet *dev, int phy_id, int loc, int val) static void ax8817x_mdio_write_le(struct usbnet *netdev, int phy_id, int loc, int val) { - ax8817x_mdio_write(netdev, phy_id, loc, cpu_to_le16(val)); + ax8817x_mdio_write(netdev, phy_id, loc, CPU_TO_LE16(val)); } static int access_eeprom_mac(struct usbnet *dev, u8 *buf, u8 offset, bool wflag) @@ -380,7 +380,7 @@ static int access_eeprom_mac(struct usbnet *dev, u8 *buf, u8 offset, bool wflag) for (i = 0; i < (ETH_ALEN >> 1); i++) { if (wflag) { - // u16 wd = cpu_to_le16(*(tmp + i)); + // u16 wd = CPU_TO_LE16(*(tmp + i)); u16 wd = (*(tmp + i)); ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_EEPROM, offset + i, wd, 0, NULL); diff --git a/third-party/cherryusb-0.7.0/class/vendor/axusbnet.h b/third-party/cherryusb/class/vendor/axusbnet.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/vendor/axusbnet.h rename to third-party/cherryusb/class/vendor/axusbnet.h diff --git a/third-party/cherryusb-0.7.0/class/vendor/usbh_air724.c b/third-party/cherryusb/class/vendor/usbh_air724.c similarity index 61% rename from third-party/cherryusb-0.7.0/class/vendor/usbh_air724.c rename to third-party/cherryusb/class/vendor/usbh_air724.c index 72ffcab345d11d8366ece3445870e8bda308e859..04de5646c0c8775b9e1f5439f83f1cd42ca68ced 100644 --- a/third-party/cherryusb-0.7.0/class/vendor/usbh_air724.c +++ b/third-party/cherryusb/class/vendor/usbh_air724.c @@ -7,15 +7,29 @@ #define DEV_FORMAT "/dev/air724" -static uint32_t g_devinuse = 0; - struct usbh_cdc_custom_air724 { struct usbh_hubport *hport; - usbh_pipe_t bulkin; /* Bulk IN endpoint */ - usbh_pipe_t bulkout; /* Bulk OUT endpoint */ + usbh_pipe_t bulkin; /* Bulk IN endpoint */ + usbh_pipe_t bulkout; /* Bulk OUT endpoint */ + struct usbh_urb bulkin_urb; /* Bulk IN urb */ + struct usbh_urb bulkout_urb; /* Bulk OUT urb */ }; +static inline int usbh_air724_bulk_out_transfer(struct usbh_cdc_custom_air724 *cdc_custom_class, uint8_t *buffer, uint32_t buflen, uint32_t timeout) +{ + int ret; + struct usbh_urb *urb = &cdc_custom_class->bulkout_urb; + memset(urb, 0, sizeof(struct usbh_urb)); + + usbh_bulk_urb_fill(urb, cdc_custom_class->bulkout, buffer, buflen, timeout, NULL, NULL); + ret = usbh_submit_urb(urb); + if (ret == 0) { + ret = urb->actual_length; + } + return ret; +} + int usbh_air724_connect(struct usbh_hubport *hport, uint8_t intf) { struct usbh_endpoint_cfg ep_cfg = { 0 }; @@ -50,22 +64,23 @@ int usbh_air724_connect(struct usbh_hubport *hport, uint8_t intf) } USB_LOG_INFO("Register air724 Class:%s\r\n", hport->config.intf[intf].devname); -// uint8_t cdc_buffer[32] = {0X41,0X54,0x0d,0x0a}; -// ret = usbh_ep_bulk_transfer(cdc_custom_class->bulkout, cdc_buffer, 4, 3000); -// if (ret < 0) { -// USB_LOG_ERR("bulk out error,ret:%d\r\n", ret); -// } else { -// USB_LOG_RAW("send over:%d\r\n", ret); -// } -// ret = usbh_ep_bulk_transfer(cdc_custom_class->bulkin, cdc_buffer, 10, 3000); -// if (ret < 0) { -// USB_LOG_ERR("bulk in error,ret:%d\r\n", ret); -// } else { -// USB_LOG_RAW("recv over:%d\r\n", ret); -// for (size_t i = 0; i < ret; i++) { -// USB_LOG_RAW("0x%02x ", cdc_buffer[i]); -// } -// } + + uint8_t cdc_buffer[32] = { 0x41, 0x54, 0x0d, 0x0a }; + ret = usbh_air724_bulk_out_transfer(cdc_custom_class->bulkout, cdc_buffer, 4, 3000); + if (ret < 0) { + USB_LOG_ERR("bulk out error,ret:%d\r\n", ret); + } else { + USB_LOG_RAW("send over:%d\r\n", ret); + } + ret = usbh_air724_bulk_out_transfer(cdc_custom_class->bulkin, cdc_buffer, 10, 3000); + if (ret < 0) { + USB_LOG_ERR("bulk in error,ret:%d\r\n", ret); + } else { + USB_LOG_RAW("recv over:%d\r\n", ret); + for (size_t i = 0; i < ret; i++) { + USB_LOG_RAW("0x%02x ", cdc_buffer[i]); + } + } return ret; } diff --git a/third-party/cherryusb-0.7.0/class/video/usb_video.h b/third-party/cherryusb/class/video/usb_video.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/video/usb_video.h rename to third-party/cherryusb/class/video/usb_video.h diff --git a/third-party/cherryusb-0.7.0/class/video/usbd_video.c b/third-party/cherryusb/class/video/usbd_video.c similarity index 98% rename from third-party/cherryusb-0.7.0/class/video/usbd_video.c rename to third-party/cherryusb/class/video/usbd_video.c index be27bba56be1d32df7a72bfed03cc70f62db0039..62982d201b038ad7c39b9468dcbaf65a25c04ba7 100644 --- a/third-party/cherryusb-0.7.0/class/video/usbd_video.c +++ b/third-party/cherryusb/class/video/usbd_video.c @@ -576,10 +576,10 @@ static int usbd_video_stream_request_handler(struct usb_setup_packet *setup, uin case VIDEO_VS_PROBE_CONTROL: switch (setup->bRequest) { case VIDEO_REQUEST_SET_CUR: - //memcpy((uint8_t *)usbd_video_cfg.probe, *data, setup->wLength); + //memcpy((uint8_t *)&usbd_video_cfg.probe, *data, setup->wLength); break; case VIDEO_REQUEST_GET_CUR: - *data = (uint8_t *)&usbd_video_cfg.probe; + memcpy(*data, (uint8_t *)&usbd_video_cfg.probe, setup->wLength); *len = sizeof(struct video_probe_and_commit_controls); break; @@ -587,7 +587,7 @@ static int usbd_video_stream_request_handler(struct usb_setup_packet *setup, uin case VIDEO_REQUEST_GET_MAX: case VIDEO_REQUEST_GET_RES: case VIDEO_REQUEST_GET_DEF: - *data = (uint8_t *)&usbd_video_cfg.probe; + memcpy(*data, (uint8_t *)&usbd_video_cfg.probe, setup->wLength); *len = sizeof(struct video_probe_and_commit_controls); break; case VIDEO_REQUEST_GET_LEN: @@ -608,17 +608,17 @@ static int usbd_video_stream_request_handler(struct usb_setup_packet *setup, uin case VIDEO_VS_COMMIT_CONTROL: switch (setup->bRequest) { case VIDEO_REQUEST_SET_CUR: - //memcpy((uint8_t *)usbd_video_cfg.commit, *data, setup->wLength); + //memcpy((uint8_t *)&usbd_video_cfg.commit, *data, setup->wLength); break; case VIDEO_REQUEST_GET_CUR: - *data = (uint8_t *)&usbd_video_cfg.commit; + memcpy(*data, (uint8_t *)&usbd_video_cfg.commit, setup->wLength); *len = sizeof(struct video_probe_and_commit_controls); break; case VIDEO_REQUEST_GET_MIN: case VIDEO_REQUEST_GET_MAX: case VIDEO_REQUEST_GET_RES: case VIDEO_REQUEST_GET_DEF: - *data = (uint8_t *)&usbd_video_cfg.commit; + memcpy(*data, (uint8_t *)&usbd_video_cfg.commit, setup->wLength); *len = sizeof(struct video_probe_and_commit_controls); break; @@ -640,7 +640,7 @@ static int usbd_video_stream_request_handler(struct usb_setup_packet *setup, uin case VIDEO_VS_STREAM_ERROR_CODE_CONTROL: switch (setup->bRequest) { case VIDEO_REQUEST_GET_CUR: - *data = &usbd_video_cfg.error_code; + (*data)[0] = usbd_video_cfg.error_code; *len = 1; break; case VIDEO_REQUEST_GET_INFO: diff --git a/third-party/cherryusb-0.7.0/class/video/usbd_video.h b/third-party/cherryusb/class/video/usbd_video.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/video/usbd_video.h rename to third-party/cherryusb/class/video/usbd_video.h diff --git a/third-party/cherryusb-0.7.0/class/video/usbh_video.c b/third-party/cherryusb/class/video/usbh_video.c similarity index 74% rename from third-party/cherryusb-0.7.0/class/video/usbh_video.c rename to third-party/cherryusb/class/video/usbh_video.c index e6952ca232b3e872835616d274f6b335be405db2..c123b120f4e8b58e1a6d4acd9120f4887e16e5ea 100644 --- a/third-party/cherryusb-0.7.0/class/video/usbh_video.c +++ b/third-party/cherryusb/class/video/usbh_video.c @@ -27,49 +27,6 @@ USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_video_buf[128]; static const char *format_type[] = { "uncompressed", "mjpeg" }; -static int __s_r_1370705v[256] = { 0 }; -static int __s_b_1732446u[256] = { 0 }; -static int __s_g_337633u[256] = { 0 }; -static int __s_g_698001v[256] = { 0 }; - -static void inityuyv2rgb_table(void) -{ - for (int i = 0; i < 256; i++) { - __s_r_1370705v[i] = (1.370705 * (i - 128)); - __s_b_1732446u[i] = (1.732446 * (i - 128)); - __s_g_337633u[i] = (0.337633 * (i - 128)); - __s_g_698001v[i] = (0.698001 * (i - 128)); - } -} - -static void yuyv2rgb565(void *input, void *output, uint32_t len) -{ - int y0, u, y1, v; - uint8_t r, g, b; - int val; - - for (uint32_t i = 0; i < len / 4; i++) { - y0 = (int)(((uint8_t *)input)[i * 4 + 0]); - u = (int)(((uint8_t *)input)[i * 4 + 1]); - y1 = (int)(((uint8_t *)input)[i * 4 + 2]); - v = (int)(((uint8_t *)input)[i * 4 + 3]); - val = y0 + __s_r_1370705v[v]; - r = (val < 0) ? 0 : ((val > 255) ? 255 : (uint8_t)val); - val = y0 - __s_g_337633u[u] - __s_g_698001v[v]; - g = (val < 0) ? 0 : ((val > 255) ? 255 : (uint8_t)val); - val = y0 + __s_b_1732446u[u]; - b = (val < 0) ? 0 : ((val > 255) ? 255 : (uint8_t)val); - ((uint16_t *)output)[i * 2] = (uint16_t)(b >> 3) | ((uint16_t)(g >> 2) << 5) | ((uint16_t)(r >> 3) << 11); - val = y1 + __s_r_1370705v[v]; - r = (val < 0) ? 0 : ((val > 255) ? 255 : (uint8_t)val); - val = y1 - __s_g_337633u[u] - __s_g_698001v[v]; - g = (val < 0) ? 0 : ((val > 255) ? 255 : (uint8_t)val); - val = y1 + __s_b_1732446u[u]; - b = (val < 0) ? 0 : ((val > 255) ? 255 : (uint8_t)val); - ((uint16_t *)output)[i * 2 + 1] = (uint16_t)(b >> 3) | ((uint16_t)(g >> 2) << 5) | ((uint16_t)(r >> 3) << 11); - } -} - static int usbh_video_devno_alloc(struct usbh_video *video_class) { int devno; @@ -97,7 +54,7 @@ static void usbh_video_devno_free(struct usbh_video *video_class) int usbh_video_get_cur(struct usbh_video *video_class, uint8_t intf, uint8_t entity_id, uint8_t cs, uint8_t *buf, uint16_t len) { - struct usb_setup_packet *setup = &video_class->hport->setup; + struct usb_setup_packet *setup = video_class->hport->setup; int ret; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; @@ -116,7 +73,8 @@ int usbh_video_get_cur(struct usbh_video *video_class, uint8_t intf, uint8_t ent int usbh_video_set_cur(struct usbh_video *video_class, uint8_t intf, uint8_t entity_id, uint8_t cs, uint8_t *buf, uint16_t len) { - struct usb_setup_packet *setup = &video_class->hport->setup; + struct usb_setup_packet *setup = video_class->hport->setup; + int ret; setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = VIDEO_REQUEST_SET_CUR; @@ -126,7 +84,9 @@ int usbh_video_set_cur(struct usbh_video *video_class, uint8_t intf, uint8_t ent memcpy(g_video_buf, buf, len); - return usbh_control_transfer(video_class->hport->ep0, setup, g_video_buf); + ret = usbh_control_transfer(video_class->hport->ep0, setup, g_video_buf); + usb_osal_msleep(5); + return ret; } int usbh_videostreaming_get_cur_probe(struct usbh_video *video_class) @@ -134,40 +94,88 @@ int usbh_videostreaming_get_cur_probe(struct usbh_video *video_class) return usbh_video_get_cur(video_class, video_class->data_intf, 0x00, VIDEO_VS_PROBE_CONTROL, (uint8_t *)&video_class->probe, 26); } -int usbh_videostreaming_set_cur_probe(struct usbh_video *video_class, uint8_t formatindex, uint8_t frameindex, uint32_t dwMaxVideoFrameSize, uint32_t dwMaxPayloadTransferSize) +int usbh_videostreaming_set_cur_probe(struct usbh_video *video_class, uint8_t formatindex, uint8_t frameindex) { video_class->probe.bFormatIndex = formatindex; video_class->probe.bFrameIndex = frameindex; - video_class->probe.dwMaxVideoFrameSize = dwMaxVideoFrameSize; - video_class->probe.dwMaxPayloadTransferSize = dwMaxPayloadTransferSize; + video_class->probe.dwMaxPayloadTransferSize = 0; return usbh_video_set_cur(video_class, video_class->data_intf, 0x00, VIDEO_VS_PROBE_CONTROL, (uint8_t *)&video_class->probe, 26); } -int usbh_videostreaming_set_cur_commit(struct usbh_video *video_class, uint8_t formatindex, uint8_t frameindex, uint32_t dwMaxVideoFrameSize, uint32_t dwMaxPayloadTransferSize) +int usbh_videostreaming_set_cur_commit(struct usbh_video *video_class, uint8_t formatindex, uint8_t frameindex) { + memcpy(&video_class->commit, &video_class->probe, sizeof(struct video_probe_and_commit_controls)); video_class->commit.bFormatIndex = formatindex; video_class->commit.bFrameIndex = frameindex; - video_class->commit.dwMaxVideoFrameSize = dwMaxVideoFrameSize; - video_class->commit.dwMaxPayloadTransferSize = dwMaxPayloadTransferSize; return usbh_video_set_cur(video_class, video_class->data_intf, 0x00, VIDEO_VS_COMMIT_CONTROL, (uint8_t *)&video_class->commit, 26); } -int usbh_video_open(struct usbh_video *video_class, uint8_t altsetting) +int usbh_video_open(struct usbh_video *video_class, + uint8_t format_type, + uint16_t wWidth, + uint16_t wHeight, + uint8_t altsetting) { - struct usb_setup_packet *setup = &video_class->hport->setup; + struct usb_setup_packet *setup = video_class->hport->setup; struct usb_endpoint_descriptor *ep_desc; uint8_t mult; uint16_t mps; int ret; + bool found = false; + uint8_t formatidx = 0; + uint8_t frameidx = 0; if (video_class->is_opened) { return -EMFILE; } + for (uint8_t i = 0; i < video_class->num_of_formats; i++) { + if (format_type == video_class->format[i].format_type) { + formatidx = i + 1; + for (uint8_t j = 0; j < video_class->format[i].num_of_frames; j++) { + if ((wWidth == video_class->format[i].frame[j].wWidth) && + (wHeight == video_class->format[i].frame[j].wHeight)) { + frameidx = j + 1; + found = true; + break; + } + } + } + } + + if (found == false) { + return -ENODEV; + } + if (altsetting > (video_class->num_of_intf_altsettings - 1)) { return -EINVAL; } + ret = usbh_videostreaming_get_cur_probe(video_class); + if (ret < 0) { + return ret; + } + ret = usbh_videostreaming_set_cur_probe(video_class, formatidx, frameidx); + if (ret < 0) { + return ret; + } + ret = usbh_videostreaming_get_cur_probe(video_class); + if (ret < 0) { + return ret; + } + ret = usbh_videostreaming_set_cur_probe(video_class, formatidx, frameidx); + if (ret < 0) { + return ret; + } + ret = usbh_videostreaming_get_cur_probe(video_class); + if (ret < 0) { + return ret; + } + ret = usbh_videostreaming_set_cur_commit(video_class, formatidx, frameidx); + if (ret < 0) { + return ret; + } + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; setup->bRequest = USB_REQUEST_SET_INTERFACE; setup->wValue = altsetting; @@ -189,26 +197,22 @@ int usbh_video_open(struct usbh_video *video_class, uint8_t altsetting) video_class->isoout_mps = mps * (mult + 1); usbh_hport_activate_epx(&video_class->isoout, video_class->hport, ep_desc); } - USB_LOG_INFO("Open video and select altsetting:%u\r\n", altsetting); + + USB_LOG_INFO("Open video and select formatidx:%u, frameidx:%u, altsetting:%u\r\n", formatidx, frameidx, altsetting); video_class->is_opened = true; + video_class->current_format = format_type; return ret; } int usbh_video_close(struct usbh_video *video_class) { - struct usb_setup_packet *setup = &video_class->hport->setup; - int ret; + struct usb_setup_packet *setup = video_class->hport->setup; + int ret = 0; - setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; - setup->bRequest = USB_REQUEST_SET_INTERFACE; - setup->wValue = 0; - setup->wIndex = video_class->data_intf; - setup->wLength = 0; + USB_LOG_INFO("Close video device\r\n"); + + video_class->is_opened = false; - ret = usbh_control_transfer(video_class->hport->ep0, setup, NULL); - if (ret < 0) { - return ret; - } if (video_class->isoin) { usbh_pipe_free(video_class->isoin); video_class->isoin = NULL; @@ -219,25 +223,34 @@ int usbh_video_close(struct usbh_video *video_class) video_class->isoout = NULL; } - USB_LOG_INFO("Close video device\r\n"); - video_class->is_opened = false; + setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_INTERFACE; + setup->bRequest = USB_REQUEST_SET_INTERFACE; + setup->wValue = 0; + setup->wIndex = video_class->data_intf; + setup->wLength = 0; + + ret = usbh_control_transfer(video_class->hport->ep0, setup, NULL); + if (ret < 0) { + return ret; + } return ret; } void usbh_video_list_info(struct usbh_video *video_class) { - struct usbh_hubport *hport; struct usb_endpoint_descriptor *ep_desc; uint8_t mult; uint16_t mps; USB_LOG_INFO("============= Video device information ===================\r\n"); USB_LOG_INFO("bcdVDC:%04x\r\n", video_class->bcdVDC); - USB_LOG_INFO("Num of altsettings:%02x\r\n", video_class->num_of_intf_altsettings); - - hport = video_class->hport; + USB_LOG_INFO("Num of altsettings:%u\r\n", video_class->num_of_intf_altsettings); - for (uint8_t i = 1; i < video_class->num_of_intf_altsettings; i++) { + for (uint8_t i = 0; i < video_class->num_of_intf_altsettings; i++) { + if (i == 0) { + USB_LOG_INFO("Ingore altsetting 0\r\n"); + continue; + } ep_desc = &video_class->hport->config.intf[video_class->data_intf].altsetting[i].ep[0].ep_desc; mult = (ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_MASK) >> USB_MAXPACKETSIZE_ADDITIONAL_TRANSCATION_SHIFT; @@ -266,18 +279,14 @@ void usbh_video_list_info(struct usbh_video *video_class) } } - usbh_videostreaming_get_cur_probe(video_class); - - USB_LOG_INFO("dwMaxVideoFrameSize:%u,dwMaxPayloadTransferSize:%u\r\n", (int)video_class->probe.dwMaxVideoFrameSize, (int)video_class->probe.dwMaxPayloadTransferSize); - USB_LOG_INFO("============= Video device information ===================\r\n"); } -static int usbh_video_ctrl_intf_connect(struct usbh_hubport *hport, uint8_t intf) +static int usbh_video_ctrl_connect(struct usbh_hubport *hport, uint8_t intf) { int ret; uint8_t cur_iface = 0xff; - uint8_t cur_alt_setting = 0xff; + // uint8_t cur_alt_setting = 0xff; uint8_t frame_index = 0xff; uint8_t format_index = 0xff; uint8_t num_of_frames = 0xff; @@ -379,13 +388,13 @@ static int usbh_video_ctrl_intf_connect(struct usbh_hubport *hport, uint8_t intf snprintf(hport->config.intf[intf].devname, CONFIG_USBHOST_DEV_NAMELEN, DEV_FORMAT, video_class->minor); - inityuyv2rgb_table(); USB_LOG_INFO("Register Video Class:%s\r\n", hport->config.intf[intf].devname); - return 0; + usbh_video_run(video_class); + return ret; } -static int usbh_video_ctrl_intf_disconnect(struct usbh_hubport *hport, uint8_t intf) +static int usbh_video_ctrl_disconnect(struct usbh_hubport *hport, uint8_t intf) { int ret = 0; @@ -402,6 +411,7 @@ static int usbh_video_ctrl_intf_disconnect(struct usbh_hubport *hport, uint8_t i usbh_pipe_free(video_class->isoout); } + usbh_video_stop(video_class); memset(video_class, 0, sizeof(struct usbh_video)); usb_free(video_class); @@ -412,24 +422,24 @@ static int usbh_video_ctrl_intf_disconnect(struct usbh_hubport *hport, uint8_t i return ret; } -static int usbh_video_data_intf_connect(struct usbh_hubport *hport, uint8_t intf) +static int usbh_video_streaming_connect(struct usbh_hubport *hport, uint8_t intf) { - USB_LOG_WRN("Ignore video data intf\r\n"); return 0; } -static int usbh_video_data_intf_disconnect(struct usbh_hubport *hport, uint8_t intf) +static int usbh_video_streaming_disconnect(struct usbh_hubport *hport, uint8_t intf) { return 0; } +#if 0 void usbh_videostreaming_parse_mjpeg(struct usbh_urb *urb, struct usbh_videostreaming *stream) { struct usbh_iso_frame_packet *iso_packet; uint32_t num_of_iso_packets; - uint8_t *tmp_buf; uint8_t data_offset; uint32_t data_len; + uint8_t header_len = 0; num_of_iso_packets = urb->num_of_iso_packets; iso_packet = urb->iso_packet; @@ -448,11 +458,10 @@ void usbh_videostreaming_parse_mjpeg(struct usbh_urb *urb, struct usbh_videostre if (iso_packet[i].actual_length == 0) { /* skip no data */ continue; } - if (iso_packet[i].actual_length < iso_packet[i].transfer_buffer[0]) { /* do not be illegal */ - while (1) { - } - } - if ((iso_packet[i].transfer_buffer[0] > 12) || (iso_packet[i].transfer_buffer[0] == 0)) { /* do not be illegal */ + + header_len = iso_packet[i].transfer_buffer[0]; + + if ((header_len > 12) || (header_len == 0)) { /* do not be illegal */ while (1) { } } @@ -461,38 +470,42 @@ void usbh_videostreaming_parse_mjpeg(struct usbh_urb *urb, struct usbh_videostre continue; } - data_offset = iso_packet[i].transfer_buffer[0]; - data_len = iso_packet[i].actual_length - iso_packet[i].transfer_buffer[0]; - - tmp_buf = stream->bufbase + stream->bufoffset; - stream->bufoffset += data_len; - - memcpy(tmp_buf, &iso_packet[i].transfer_buffer[data_offset], data_len); - if ((stream->bufbase[0] != 0xff) && (stream->bufbase[1] != 0xd8)) { + if ((stream->bufoffset == 0) && ((iso_packet[i].transfer_buffer[header_len] != 0xff) || (iso_packet[i].transfer_buffer[header_len + 1] != 0xd8))) { stream->bufoffset = 0; continue; } + data_offset = header_len; + data_len = iso_packet[i].actual_length - header_len; + + /** do something here */ + + stream->bufoffset += data_len; + if (iso_packet[i].transfer_buffer[1] & (1 << 1)) { - if ((stream->bufbase[stream->bufoffset - 2] != 0xff) && (stream->bufbase[stream->bufoffset - 1] != 0xd9)) { + if ((iso_packet[i].transfer_buffer[iso_packet[i].actual_length - 2] != 0xff) || (iso_packet[i].transfer_buffer[iso_packet[i].actual_length - 1] != 0xd9)) { stream->bufoffset = 0; continue; } + + /** do something here */ + if (stream->video_one_frame_callback) { stream->video_one_frame_callback(stream); } stream->bufoffset = 0; } } + /** do something here */ } -void usbh_videostreaming_parse_yuyv2rgb565(struct usbh_urb *urb, struct usbh_videostreaming *stream) +void usbh_videostreaming_parse_yuyv2(struct usbh_urb *urb, struct usbh_videostreaming *stream) { struct usbh_iso_frame_packet *iso_packet; uint32_t num_of_iso_packets; - uint8_t *tmp_buf; uint8_t data_offset; uint32_t data_len; + uint8_t header_len = 0; num_of_iso_packets = urb->num_of_iso_packets; iso_packet = urb->iso_packet; @@ -512,11 +525,10 @@ void usbh_videostreaming_parse_yuyv2rgb565(struct usbh_urb *urb, struct usbh_vid if (iso_packet[i].actual_length == 0) { /* skip no data */ continue; } - if (iso_packet[i].actual_length < iso_packet[i].transfer_buffer[0]) { /* do not be illegal */ - while (1) { - } - } - if ((iso_packet[i].transfer_buffer[0] > 12) || (iso_packet[i].transfer_buffer[0] == 0)) { /* do not be illegal */ + + header_len = iso_packet[i].transfer_buffer[0]; + + if ((header_len > 12) || (header_len == 0)) { /* do not be illegal */ while (1) { } } @@ -525,50 +537,67 @@ void usbh_videostreaming_parse_yuyv2rgb565(struct usbh_urb *urb, struct usbh_vid continue; } - data_offset = iso_packet[i].transfer_buffer[0]; - data_len = iso_packet[i].actual_length - iso_packet[i].transfer_buffer[0]; + data_offset = header_len; + data_len = iso_packet[i].actual_length - header_len; + + /** do something here */ - tmp_buf = stream->bufbase + stream->bufoffset; stream->bufoffset += data_len; - yuyv2rgb565(&iso_packet[i].transfer_buffer[data_offset], tmp_buf, data_len); if (iso_packet[i].transfer_buffer[1] & (1 << 1)) { - if (stream->video_one_frame_callback) { + /** do something here */ + + if (stream->video_one_frame_callback && (stream->bufoffset == stream->buflen)) { stream->video_one_frame_callback(stream); } stream->bufoffset = 0; } } + + /** do something here */ } +#endif -const struct usbh_class_driver video_class_ctrl_intf_driver = { - .driver_name = "video", - .connect = usbh_video_ctrl_intf_connect, - .disconnect = usbh_video_ctrl_intf_disconnect +__WEAK void usbh_video_run(struct usbh_video *video_class) +{ +} + +__WEAK void usbh_video_stop(struct usbh_video *video_class) +{ +} + +__WEAK void usbh_videostreaming_output(uint8_t *input, uint32_t input_len) +{ +} + +const struct usbh_class_driver video_ctrl_class_driver = { + .driver_name = "video_ctrl", + .connect = usbh_video_ctrl_connect, + .disconnect = usbh_video_ctrl_disconnect }; -const struct usbh_class_driver video_class_data_intf_driver = { - .driver_name = "video", - .connect = usbh_video_data_intf_connect, - .disconnect = usbh_video_data_intf_disconnect +const struct usbh_class_driver video_streaming_class_driver = { + .driver_name = "video_streaming", + .connect = usbh_video_streaming_connect, + .disconnect = usbh_video_streaming_disconnect }; -CLASS_INFO_DEFINE const struct usbh_class_info video_ctrl_intf_class_info = { +CLASS_INFO_DEFINE const struct usbh_class_info video_ctrl_class_info = { .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL, .class = USB_DEVICE_CLASS_VIDEO, .subclass = VIDEO_SC_VIDEOCONTROL, .protocol = VIDEO_PC_PROTOCOL_UNDEFINED, .vid = 0x00, .pid = 0x00, - .class_driver = &video_class_ctrl_intf_driver + .class_driver = &video_ctrl_class_driver }; -CLASS_INFO_DEFINE const struct usbh_class_info video_data_intf_class_info = { +CLASS_INFO_DEFINE const struct usbh_class_info video_streaming_class_info = { .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL, .class = USB_DEVICE_CLASS_VIDEO, .subclass = VIDEO_SC_VIDEOSTREAMING, .protocol = VIDEO_PC_PROTOCOL_UNDEFINED, .vid = 0x00, .pid = 0x00, - .class_driver = &video_class_data_intf_driver -}; \ No newline at end of file + .class_driver = &video_streaming_class_driver +}; diff --git a/third-party/cherryusb-0.7.0/class/video/usbh_video.h b/third-party/cherryusb/class/video/usbh_video.h similarity index 70% rename from third-party/cherryusb-0.7.0/class/video/usbh_video.h rename to third-party/cherryusb/class/video/usbh_video.h index 4cc0933a806eb12afbbf0a28dde4fd0b254b8373..eacfbb3c859d9e2cbafcd94e1f5159dde5237681 100644 --- a/third-party/cherryusb-0.7.0/class/video/usbh_video.h +++ b/third-party/cherryusb/class/video/usbh_video.h @@ -17,14 +17,14 @@ struct usbh_video_resolution { }; struct usbh_video_format { - struct usbh_video_resolution frame[8]; + struct usbh_video_resolution frame[12]; uint8_t format_type; uint8_t num_of_frames; }; struct usbh_videostreaming { - uint8_t *bufbase; uint32_t bufoffset; + uint32_t buflen; void (*video_one_frame_callback)(struct usbh_videostreaming *stream); }; @@ -41,6 +41,7 @@ struct usbh_video { uint16_t isoin_mps; uint16_t isoout_mps; bool is_opened; + uint8_t current_format; uint16_t bcdVDC; uint8_t num_of_intf_altsettings; uint8_t num_of_formats; @@ -51,19 +52,30 @@ struct usbh_video { extern "C" { #endif +void usbh_video_inityuyv2rgb_table(void); +void usbh_video_yuyv2rgb565(void *input, void *output, uint32_t len); + int usbh_video_get_cur(struct usbh_video *video_class, uint8_t intf, uint8_t entity_id, uint8_t cs, uint8_t *buf, uint16_t len); int usbh_video_set_cur(struct usbh_video *video_class, uint8_t intf, uint8_t entity_id, uint8_t cs, uint8_t *buf, uint16_t len); int usbh_videostreaming_get_cur_probe(struct usbh_video *video_class); -int usbh_videostreaming_set_cur_probe(struct usbh_video *video_class, uint8_t formatindex, uint8_t frameindex, uint32_t dwMaxVideoFrameSize, uint32_t dwMaxPayloadTransferSize); -int usbh_videostreaming_set_cur_commit(struct usbh_video *video_class, uint8_t formatindex, uint8_t frameindex, uint32_t dwMaxVideoFrameSize, uint32_t dwMaxPayloadTransferSize); +int usbh_videostreaming_set_cur_probe(struct usbh_video *video_class, uint8_t formatindex, uint8_t frameindex); +int usbh_videostreaming_set_cur_commit(struct usbh_video *video_class, uint8_t formatindex, uint8_t frameindex); -int usbh_video_open(struct usbh_video *video_class, uint8_t altsetting); +int usbh_video_open(struct usbh_video *video_class, + uint8_t format_type, + uint16_t wWidth, + uint16_t wHeight, + uint8_t altsetting); int usbh_video_close(struct usbh_video *video_class); void usbh_video_list_info(struct usbh_video *video_class); void usbh_videostreaming_parse_mjpeg(struct usbh_urb *urb, struct usbh_videostreaming *stream); -void usbh_videostreaming_parse_yuyv2rgb565(struct usbh_urb *urb, struct usbh_videostreaming *stream); +void usbh_videostreaming_parse_yuyv2(struct usbh_urb *urb, struct usbh_videostreaming *stream); +void usbh_videostreaming_output(uint8_t *input, uint32_t input_len); + +void usbh_video_run(struct usbh_video *video_class); +void usbh_video_stop(struct usbh_video *video_class); #ifdef __cplusplus } diff --git a/third-party/cherryusb-0.7.0/class/wireless/ndis.h b/third-party/cherryusb/class/wireless/ndis.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/wireless/ndis.h rename to third-party/cherryusb/class/wireless/ndis.h diff --git a/third-party/cherryusb-0.7.0/class/wireless/rndis_protocol.h b/third-party/cherryusb/class/wireless/rndis_protocol.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/wireless/rndis_protocol.h rename to third-party/cherryusb/class/wireless/rndis_protocol.h diff --git a/third-party/cherryusb-0.7.0/class/wireless/usbd_rndis.c b/third-party/cherryusb/class/wireless/usbd_rndis.c similarity index 96% rename from third-party/cherryusb-0.7.0/class/wireless/usbd_rndis.c rename to third-party/cherryusb/class/wireless/usbd_rndis.c index 6b58d9375cc5e9d5b3486653f59b3e17998c27d6..5d89338c4de2464d106a17f6030c984c6e2e26e3 100644 --- a/third-party/cherryusb-0.7.0/class/wireless/usbd_rndis.c +++ b/third-party/cherryusb/class/wireless/usbd_rndis.c @@ -48,7 +48,7 @@ USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_rndis_rx_buffer[CONFIG_USBDEV_R USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_rndis_tx_buffer[CONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE + 44]; USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t rndis_encapsulated_resp_buffer[CONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE]; -USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t NOTIFY_RESPONSE_AVAILABLE[8] = { 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t NOTIFY_RESPONSE_AVAILABLE[8]; volatile uint8_t *g_rndis_rx_data_buffer; volatile uint32_t g_rndis_rx_data_length; @@ -102,6 +102,8 @@ static int rndis_encapsulated_cmd_handler(uint8_t *data, uint32_t len); static void rndis_notify_rsp(void) { + memset(NOTIFY_RESPONSE_AVAILABLE, 0, 8); + NOTIFY_RESPONSE_AVAILABLE[0] = 0x01; usbd_ep_start_write(rndis_ep_data[RNDIS_INT_EP_IDX].ep_addr, NOTIFY_RESPONSE_AVAILABLE, 8); } @@ -469,6 +471,11 @@ void rndis_bulk_in(uint8_t ep, uint32_t nbytes) } } +void rndis_int_in(uint8_t ep, uint32_t nbytes) +{ + //USB_LOG_DBG("len:%d\r\n", nbytes); +} + #ifdef CONFIG_USBDEV_RNDIS_USING_LWIP #include @@ -486,6 +493,7 @@ struct pbuf *usbd_rndis_eth_rx(void) memcpy(p->payload, (uint8_t *)g_rndis_rx_data_buffer, g_rndis_rx_data_length); p->len = g_rndis_rx_data_length; + USB_LOG_DBG("rxlen:%d\r\n", g_rndis_rx_data_length); g_rndis_rx_data_length = 0; usbd_ep_start_read(rndis_ep_data[RNDIS_OUT_EP_IDX].ep_addr, g_rndis_rx_buffer, sizeof(g_rndis_rx_buffer)); @@ -526,13 +534,14 @@ int usbd_rndis_eth_tx(struct pbuf *p) g_rndis_tx_data_length = sizeof(rndis_data_packet_t) + p->tot_len; + USB_LOG_DBG("txlen:%d\r\n", g_rndis_tx_data_length); return usbd_ep_start_write(rndis_ep_data[RNDIS_IN_EP_IDX].ep_addr, g_rndis_tx_buffer, g_rndis_tx_data_length); } #endif struct usbd_interface *usbd_rndis_init_intf(struct usbd_interface *intf, - const uint8_t out_ep, - const uint8_t in_ep, - const uint8_t int_ep, uint8_t mac[6]) + const uint8_t out_ep, + const uint8_t in_ep, + const uint8_t int_ep, uint8_t mac[6]) { memcpy(usbd_rndis_cfg.mac, mac, 6); @@ -541,7 +550,7 @@ struct usbd_interface *usbd_rndis_init_intf(struct usbd_interface *intf, rndis_ep_data[RNDIS_IN_EP_IDX].ep_addr = in_ep; rndis_ep_data[RNDIS_IN_EP_IDX].ep_cb = rndis_bulk_in; rndis_ep_data[RNDIS_INT_EP_IDX].ep_addr = int_ep; - rndis_ep_data[RNDIS_INT_EP_IDX].ep_cb = NULL; + rndis_ep_data[RNDIS_INT_EP_IDX].ep_cb = rndis_int_in; usbd_add_endpoint(&rndis_ep_data[RNDIS_OUT_EP_IDX]); usbd_add_endpoint(&rndis_ep_data[RNDIS_IN_EP_IDX]); diff --git a/third-party/cherryusb-0.7.0/class/wireless/usbd_rndis.h b/third-party/cherryusb/class/wireless/usbd_rndis.h similarity index 100% rename from third-party/cherryusb-0.7.0/class/wireless/usbd_rndis.h rename to third-party/cherryusb/class/wireless/usbd_rndis.h diff --git a/third-party/cherryusb-0.7.0/class/wireless/usbh_rndis.c b/third-party/cherryusb/class/wireless/usbh_rndis.c similarity index 88% rename from third-party/cherryusb-0.7.0/class/wireless/usbh_rndis.c rename to third-party/cherryusb/class/wireless/usbh_rndis.c index 515b6456dd163fe643dc7de5630d1053dcb11093..49feb49107b5462dc9557ff8d662c6c14a2eb4ee 100644 --- a/third-party/cherryusb-0.7.0/class/wireless/usbh_rndis.c +++ b/third-party/cherryusb/class/wireless/usbh_rndis.c @@ -13,7 +13,7 @@ USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_rndis_buf[1024]; static int usbh_rndis_init_msg_transfer(struct usbh_rndis *rndis_class) { - struct usb_setup_packet *setup = &rndis_class->hport->setup; + struct usb_setup_packet *setup = rndis_class->hport->setup; int ret = 0; rndis_initialize_msg_t *cmd; rndis_initialize_cmplt_t *resp; @@ -60,7 +60,7 @@ static int usbh_rndis_init_msg_transfer(struct usbh_rndis *rndis_class) int usbh_rndis_query_msg_transfer(struct usbh_rndis *rndis_class, uint32_t oid, uint32_t query_len, uint8_t *info, uint32_t *info_len) { - struct usb_setup_packet *setup = &rndis_class->hport->setup; + struct usb_setup_packet *setup = rndis_class->hport->setup; int ret = 0; rndis_query_msg_t *cmd; rndis_query_cmplt_t *resp; @@ -111,7 +111,7 @@ int usbh_rndis_query_msg_transfer(struct usbh_rndis *rndis_class, uint32_t oid, static int usbh_rndis_set_msg_transfer(struct usbh_rndis *rndis_class, uint32_t oid, uint8_t *info, uint32_t info_len) { - struct usb_setup_packet *setup = &rndis_class->hport->setup; + struct usb_setup_packet *setup = rndis_class->hport->setup; int ret = 0; rndis_set_msg_t *cmd; rndis_set_cmplt_t *resp; @@ -158,9 +158,37 @@ static int usbh_rndis_set_msg_transfer(struct usbh_rndis *rndis_class, uint32_t return ret; } +int usbh_rndis_bulk_out_transfer(struct usbh_rndis *rndis_class, uint8_t *buffer, uint32_t buflen, uint32_t timeout) +{ + int ret; + struct usbh_urb *urb = &rndis_class->bulkout_urb; + memset(urb, 0, sizeof(struct usbh_urb)); + + usbh_bulk_urb_fill(urb, rndis_class->bulkout, buffer, buflen, timeout, NULL, NULL); + ret = usbh_submit_urb(urb); + if (ret == 0) { + ret = urb->actual_length; + } + return ret; +} + +int usbh_rndis_bulk_in_transfer(struct usbh_rndis *rndis_class, uint8_t *buffer, uint32_t buflen, uint32_t timeout) +{ + int ret; + struct usbh_urb *urb = &rndis_class->bulkin_urb; + memset(urb, 0, sizeof(struct usbh_urb)); + + usbh_bulk_urb_fill(urb, rndis_class->bulkin, buffer, buflen, timeout, NULL, NULL); + ret = usbh_submit_urb(urb); + if (ret == 0) { + ret = urb->actual_length; + } + return ret; +} + int usbh_rndis_keepalive(struct usbh_rndis *rndis_class) { - struct usb_setup_packet *setup = &rndis_class->hport->setup; + struct usb_setup_packet *setup = rndis_class->hport->setup; int ret = 0; rndis_keepalive_msg_t *cmd; rndis_keepalive_cmplt_t *resp; @@ -234,7 +262,7 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf) ep_cfg.ep_addr = ep_desc->bEndpointAddress; ep_cfg.ep_type = ep_desc->bmAttributes & USB_ENDPOINT_TYPE_MASK; ep_cfg.ep_mps = ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_MASK; - ; + ep_cfg.ep_interval = ep_desc->bInterval; ep_cfg.hport = hport; usbh_pipe_alloc(&rndis_class->intin, &ep_cfg); @@ -285,12 +313,19 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf) if (ret < 0) { goto query_errorout; } + + memcpy(&rndis_class->link_speed, data, 4); break; case OID_GEN_MEDIA_CONNECT_STATUS: ret = usbh_rndis_query_msg_transfer(rndis_class, OID_GEN_MEDIA_CONNECT_STATUS, 4, data, &data_len); if (ret < 0) { goto query_errorout; } + if (NDIS_MEDIA_STATE_CONNECTED == data[0]) { + rndis_class->link_status = true; + } else { + rndis_class->link_status = false; + } break; case OID_802_3_MAXIMUM_LIST_SIZE: ret = usbh_rndis_query_msg_transfer(rndis_class, OID_802_3_MAXIMUM_LIST_SIZE, 4, data, &data_len); @@ -303,6 +338,10 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf) if (ret < 0) { goto query_errorout; } + + for (uint8_t j = 0; j < 6; j++) { + rndis_class->mac[j] = data[j]; + } break; case OID_802_3_PERMANENT_ADDRESS: ret = usbh_rndis_query_msg_transfer(rndis_class, OID_802_3_PERMANENT_ADDRESS, 6, data, &data_len); @@ -334,6 +373,7 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf) strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN); USB_LOG_INFO("Register RNDIS Class:%s\r\n", hport->config.intf[intf].devname); + usbh_rndis_run(rndis_class); return ret; query_errorout: USB_LOG_ERR("rndis query iod:%08x error\r\n", oid); @@ -354,6 +394,8 @@ static int usbh_rndis_disconnect(struct usbh_hubport *hport, uint8_t intf) if (rndis_class->bulkout) { usbh_pipe_free(rndis_class->bulkout); } + + usbh_rndis_stop(rndis_class); memset(rndis_class, 0, sizeof(struct usbh_rndis)); usb_free(rndis_class); @@ -364,6 +406,14 @@ static int usbh_rndis_disconnect(struct usbh_hubport *hport, uint8_t intf) return ret; } +__WEAK void usbh_rndis_run(struct usbh_rndis *rndis_class) +{ +} + +__WEAK void usbh_rndis_stop(struct usbh_rndis *rndis_class) +{ +} + static const struct usbh_class_driver rndis_class_driver = { .driver_name = "rndis", .connect = usbh_rndis_connect, diff --git a/third-party/cherryusb-0.7.0/class/wireless/usbh_rndis.h b/third-party/cherryusb/class/wireless/usbh_rndis.h similarity index 43% rename from third-party/cherryusb-0.7.0/class/wireless/usbh_rndis.h rename to third-party/cherryusb/class/wireless/usbh_rndis.h index 88562c64ea971bdfcf59fd2c3ca26ca94da174e0..b9610b32d413773395e9de0147629f50333e5ab8 100644 --- a/third-party/cherryusb-0.7.0/class/wireless/usbh_rndis.h +++ b/third-party/cherryusb/class/wireless/usbh_rndis.h @@ -14,11 +14,15 @@ struct usbh_rndis { uint8_t ctrl_intf; /* Control interface number */ uint8_t data_intf; /* Data interface number */ - usbh_pipe_t bulkin; /* Bulk IN endpoint */ - usbh_pipe_t bulkout; /* Bulk OUT endpoint */ - usbh_pipe_t intin; /* Notify endpoint */ - + usbh_pipe_t bulkin; /* Bulk IN endpoint */ + usbh_pipe_t bulkout; /* Bulk OUT endpoint */ + usbh_pipe_t intin; /* Notify endpoint */ + struct usbh_urb bulkin_urb; /* Bulk IN urb */ + struct usbh_urb bulkout_urb; /* Bulk OUT urb */ uint32_t request_id; + + uint32_t link_speed; + bool link_status; uint8_t mac[6]; }; @@ -26,8 +30,14 @@ struct usbh_rndis { extern "C" { #endif +int usbh_rndis_bulk_out_transfer(struct usbh_rndis *rndis_class, uint8_t *buffer, uint32_t buflen, uint32_t timeout); +int usbh_rndis_bulk_in_transfer(struct usbh_rndis *rndis_class, uint8_t *buffer, uint32_t buflen, uint32_t timeout); + int usbh_rndis_keepalive(struct usbh_rndis *rndis_class); +void usbh_rndis_run(struct usbh_rndis *rndis_class); +void usbh_rndis_stop(struct usbh_rndis *rndis_class); + #ifdef __cplusplus } #endif diff --git a/third-party/cherryusb-0.7.0/common/usb_dc.h b/third-party/cherryusb/common/usb_dc.h similarity index 88% rename from third-party/cherryusb-0.7.0/common/usb_dc.h rename to third-party/cherryusb/common/usb_dc.h index b11f8a68985c0ce0d216d891b9148e0089fe040f..a541330aa49bc79b5bd14ed03d15e80054e4ac00 100644 --- a/third-party/cherryusb-0.7.0/common/usb_dc.h +++ b/third-party/cherryusb/common/usb_dc.h @@ -21,6 +21,7 @@ struct usbd_endpoint_cfg { uint8_t ep_addr; /* Endpoint addr with direction */ uint8_t ep_type; /* Endpoint type */ uint16_t ep_mps; /* Endpoint max packet size */ + uint8_t ep_mult; /* Endpoint additional transcations in micro frame */ }; /** @@ -44,6 +45,15 @@ int usb_dc_deinit(void); */ int usbd_set_address(const uint8_t addr); +/** + * @brief Get USB device speed + * + * @param[in] port port index + * + * @return port speed, USB_SPEED_LOW or USB_SPEED_FULL or USB_SPEED_HIGH + */ +uint8_t usbd_get_port_speed(const uint8_t port); + /** * @brief configure and enable endpoint. * @@ -133,15 +143,37 @@ int usbd_ep_start_read(const uint8_t ep, uint8_t *data, uint32_t data_len); /* usb dcd irq callback */ +/** + * @brief Usb connect irq callback. + */ +void usbd_event_connect_handler(void); + +/** + * @brief Usb disconnect irq callback. + */ +void usbd_event_disconnect_handler(void); + +/** + * @brief Usb resume irq callback. + */ +void usbd_event_resume_handler(void); + +/** + * @brief Usb suspend irq callback. + */ +void usbd_event_suspend_handler(void); + /** * @brief Usb reset irq callback. */ void usbd_event_reset_handler(void); + /** * @brief Usb setup packet recv irq callback. * @param[in] psetup setup packet. */ void usbd_event_ep0_setup_complete_handler(uint8_t *psetup); + /** * @brief In ep transfer complete irq callback. * @param[in] ep Endpoint address corresponding to the one @@ -149,6 +181,7 @@ void usbd_event_ep0_setup_complete_handler(uint8_t *psetup); * @param[in] nbytes How many nbytes have transferred. */ void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes); + /** * @brief Out ep transfer complete irq callback. * @param[in] ep Endpoint address corresponding to the one @@ -157,10 +190,6 @@ void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes); */ void usbd_event_ep_out_complete_handler(uint8_t ep, uint32_t nbytes); -/** - * @} - */ - #ifdef __cplusplus } #endif diff --git a/third-party/cherryusb-0.7.0/common/usb_def.h b/third-party/cherryusb/common/usb_def.h similarity index 99% rename from third-party/cherryusb-0.7.0/common/usb_def.h rename to third-party/cherryusb/common/usb_def.h index fdb17fb6711139a3b7368ddbf6a3d851a2a00f5c..be4830379ec27fd6fc0f048f18ec90b3097443fc 100644 --- a/third-party/cherryusb-0.7.0/common/usb_def.h +++ b/third-party/cherryusb/common/usb_def.h @@ -11,6 +11,8 @@ #define USB_2_0 0x0200 /* Set USB version to 2.1 so that the host will request the BOS descriptor */ #define USB_2_1 0x0210 +#define USB_3_0 0x0300 +#define USB_3_1 0x0310 /* Device speeds */ #define USB_SPEED_UNKNOWN 0 /* Transfer rate not yet set */ @@ -607,6 +609,12 @@ struct usb_webusb_url_descriptor { char URL[]; } __PACKED; +struct usb_webusb_url_ex_descriptor { + uint8_t vendor_code; + uint8_t *string; + uint32_t string_len; +} __PACKED; + struct usb_bos_descriptor { uint8_t *string; uint32_t string_len; diff --git a/third-party/cherryusb-0.7.0/common/usb_errno.h b/third-party/cherryusb/common/usb_errno.h similarity index 100% rename from third-party/cherryusb-0.7.0/common/usb_errno.h rename to third-party/cherryusb/common/usb_errno.h diff --git a/third-party/cherryusb-0.7.0/common/usb_hc.h b/third-party/cherryusb/common/usb_hc.h similarity index 85% rename from third-party/cherryusb-0.7.0/common/usb_hc.h rename to third-party/cherryusb/common/usb_hc.h index 9a2d4cd18c4dfc5d8092d40ac67f7fb294104c18..4f23f33c1e6c5e2792a6868041df704c29a7c542 100644 --- a/third-party/cherryusb-0.7.0/common/usb_hc.h +++ b/third-party/cherryusb/common/usb_hc.h @@ -15,6 +15,8 @@ extern "C" { typedef void (*usbh_complete_callback_t)(void *arg, int nbytes); typedef void *usbh_pipe_t; +struct usbh_bus; + /** * @brief USB Endpoint Configuration. * @@ -56,6 +58,7 @@ struct usbh_urb { uint32_t timeout; int errorcode; uint32_t num_of_iso_packets; + uint32_t start_frame; usbh_complete_callback_t complete; void *arg; struct usbh_iso_frame_packet iso_packet[0]; @@ -66,27 +69,34 @@ struct usbh_urb { * * @return On success will return 0, and others indicate fail. */ -int usb_hc_init(void); +int usb_hc_init(uint32_t id); +/** + * @brief Get frame number. + * + * @return frame number. + */ +uint16_t usbh_get_frame_number(void); /** * @brief control roothub. * + * @param usb usb bus instance * @param setup setup request buffer. * @param buf buf for reading response or write data. * @return On success will return 0, and others indicate fail. */ -int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf); +int usbh_roothub_control(struct usbh_bus *usb, struct usb_setup_packet *setup, uint8_t *buf); /** - * @brief reconfig control endpoint pipe. + * @brief reconfig endpoint pipe. * * @param pipe A memory allocated for pipe. * @param dev_addr device address. - * @param ep_mps control endpoint max packet size. - * @param speed port speed + * @param ep_mps endpoint max packet size. + * @param mult endpoint additional transcation * @return On success will return 0, and others indicate fail. */ -int usbh_ep0_pipe_reconfigure(usbh_pipe_t pipe, uint8_t dev_addr, uint8_t ep_mps, uint8_t speed); +int usbh_ep_pipe_reconfigure(struct usbh_bus *usb, usbh_pipe_t pipe, uint8_t dev_addr, uint8_t ep_mps, uint8_t mult); /** * @brief Allocate pipe for endpoint diff --git a/third-party/cherryusb-0.7.0/common/usb_list.h b/third-party/cherryusb/common/usb_list.h similarity index 100% rename from third-party/cherryusb-0.7.0/common/usb_list.h rename to third-party/cherryusb/common/usb_list.h diff --git a/third-party/cherryusb-0.7.0/common/usb_log.h b/third-party/cherryusb/common/usb_log.h similarity index 94% rename from third-party/cherryusb-0.7.0/common/usb_log.h rename to third-party/cherryusb/common/usb_log.h index 4d1eff84b6e0c15af0267652c97cd456208b8577..283c9527c1c20e901afc697ae68772ccacca3b9e 100644 --- a/third-party/cherryusb-0.7.0/common/usb_log.h +++ b/third-party/cherryusb/common/usb_log.h @@ -52,25 +52,25 @@ #if (CONFIG_USB_DBG_LEVEL >= USB_DBG_LOG) #define USB_LOG_DBG(fmt, ...) usb_dbg_log_line("D", 0, fmt, ##__VA_ARGS__) #else -#define USB_LOG_DBG(...) +#define USB_LOG_DBG(...) {} #endif #if (CONFIG_USB_DBG_LEVEL >= USB_DBG_INFO) #define USB_LOG_INFO(fmt, ...) usb_dbg_log_line("I", 32, fmt, ##__VA_ARGS__) #else -#define USB_LOG_INFO(...) +#define USB_LOG_INFO(...) {} #endif #if (CONFIG_USB_DBG_LEVEL >= USB_DBG_WARNING) #define USB_LOG_WRN(fmt, ...) usb_dbg_log_line("W", 33, fmt, ##__VA_ARGS__) #else -#define USB_LOG_WRN(...) +#define USB_LOG_WRN(...) {} #endif #if (CONFIG_USB_DBG_LEVEL >= USB_DBG_ERROR) #define USB_LOG_ERR(fmt, ...) usb_dbg_log_line("E", 31, fmt, ##__VA_ARGS__) #else -#define USB_LOG_ERR(...) +#define USB_LOG_ERR(...) {} #endif #define USB_LOG_RAW(...) CONFIG_USB_PRINTF(__VA_ARGS__) diff --git a/third-party/cherryusb-0.7.0/common/usb_mem.h b/third-party/cherryusb/common/usb_mem.h similarity index 100% rename from third-party/cherryusb-0.7.0/common/usb_mem.h rename to third-party/cherryusb/common/usb_mem.h diff --git a/third-party/cherryusb-0.7.0/common/usb_util.h b/third-party/cherryusb/common/usb_util.h similarity index 98% rename from third-party/cherryusb-0.7.0/common/usb_util.h rename to third-party/cherryusb/common/usb_util.h index 790dfe544a4f8e49a5e206e52aa6952557cfa60b..f19c507927525441626f025b5e8770173481ca31 100644 --- a/third-party/cherryusb-0.7.0/common/usb_util.h +++ b/third-party/cherryusb/common/usb_util.h @@ -44,12 +44,12 @@ #ifndef __ALIGNED #define __ALIGNED(x) __attribute__((aligned(x))) #endif -#elif defined(__ICCARM__) +#elif defined(__ICCARM__) || defined(__ICCRX__) #ifndef __USED #if __ICCARM_V8 #define __USED __attribute__((used)) #else -#define __USED _Pragma("__root") +#define __USED __root #endif #endif diff --git a/third-party/cherryusb-0.7.0/core/usbd_core.c b/third-party/cherryusb/core/usbd_core.c similarity index 63% rename from third-party/cherryusb-0.7.0/core/usbd_core.c rename to third-party/cherryusb/core/usbd_core.c index 612e79519229f2c58274273feae3cb9c1d3add9e..1afd52a6cf8009e2094af24e011ae4a020e6a0ee 100644 --- a/third-party/cherryusb-0.7.0/core/usbd_core.c +++ b/third-party/cherryusb/core/usbd_core.c @@ -6,6 +6,9 @@ * SPDX-License-Identifier: Apache-2.0 */ #include "usbd_core.h" +#if defined(CONFIG_USBDEV_TX_THREAD) || defined(CONFIG_USBDEV_RX_THREAD) +#include "usb_osal.h" +#endif /* general descriptor field offsets */ #define DESC_bLength 0 /** Length offset */ @@ -23,6 +26,12 @@ #define USB_EP_OUT_NUM 8 #define USB_EP_IN_NUM 8 +struct usbd_tx_rx_msg { + uint8_t ep; + uint32_t nbytes; + usbd_endpoint_callback cb; +}; + USB_NOCACHE_RAM_SECTION struct usbd_core_cfg_priv { /** Setup packet */ USB_MEM_ALIGNX struct usb_setup_packet setup; @@ -35,17 +44,19 @@ USB_NOCACHE_RAM_SECTION struct usbd_core_cfg_priv { /** Zero length packet flag of control transfer */ bool zlp_flag; /** Pointer to registered descriptors */ +#ifdef CONFIG_USBDEV_ADVANCE_DESC + struct usb_descriptor *descriptors; +#else const uint8_t *descriptors; +#endif /* Buffer used for storing standard, class and vendor request data */ USB_MEM_ALIGNX uint8_t req_data[CONFIG_USBDEV_REQUEST_BUFFER_LEN]; - usbd_endpoint_callback in_ep_cb[USB_EP_IN_NUM]; - usbd_endpoint_callback out_ep_cb[USB_EP_OUT_NUM]; - /** Variable to check whether the usb has been configured */ bool configured; /** Currently selected configuration */ uint8_t configuration; + uint8_t speed; #ifdef CONFIG_USBDEV_TEST_MODE bool test_mode; #endif @@ -58,6 +69,18 @@ static struct usb_msosv1_descriptor *msosv1_desc; static struct usb_msosv2_descriptor *msosv2_desc; static struct usb_bos_descriptor *bos_desc; +struct usbd_tx_rx_msg tx_msg[USB_EP_IN_NUM]; +struct usbd_tx_rx_msg rx_msg[USB_EP_OUT_NUM]; + +#if defined(CONFIG_USBDEV_TX_THREAD) +usb_osal_mq_t usbd_tx_mq; +usb_osal_thread_t usbd_tx_thread; +#endif +#if defined(CONFIG_USBDEV_RX_THREAD) +usb_osal_mq_t usbd_rx_mq; +usb_osal_thread_t usbd_rx_thread; +#endif + static void usbd_class_event_notify_handler(uint8_t event, void *arg); static void usbd_print_setup(struct usb_setup_packet *setup) @@ -94,7 +117,7 @@ static bool usbd_set_endpoint(const struct usb_endpoint_descriptor *ep_desc) ep_cfg.ep_mps = ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_MASK; ep_cfg.ep_type = ep_desc->bmAttributes & USB_ENDPOINT_TYPE_MASK; - USB_LOG_INFO("Open endpoint:0x%x type:%u mps:%u\r\n", + USB_LOG_INFO("Open ep:0x%02x type:%u mps:%u\r\n", ep_cfg.ep_addr, ep_cfg.ep_type, ep_cfg.ep_mps); return usbd_ep_open(&ep_cfg) == 0 ? true : false; @@ -117,7 +140,7 @@ static bool usbd_reset_endpoint(const struct usb_endpoint_descriptor *ep_desc) ep_cfg.ep_mps = ep_desc->wMaxPacketSize & USB_MAXPACKETSIZE_MASK; ep_cfg.ep_type = ep_desc->bmAttributes & USB_ENDPOINT_TYPE_MASK; - USB_LOG_INFO("Close endpoint:0x%x type:%u\r\n", + USB_LOG_INFO("Close ep:0x%02x type:%u\r\n", ep_cfg.ep_addr, ep_cfg.ep_type); return usbd_ep_close(ep_cfg.ep_addr) == 0 ? true : false; @@ -135,6 +158,119 @@ static bool usbd_reset_endpoint(const struct usb_endpoint_descriptor *ep_desc) * * @return true if the descriptor was found, false otherwise */ +#ifdef CONFIG_USBDEV_ADVANCE_DESC +static bool usbd_get_descriptor(uint16_t type_index, uint8_t **data, uint32_t *len) +{ + uint8_t type = 0U; + uint8_t index = 0U; + bool found = true; + uint8_t str_len = 0; + + type = HI_BYTE(type_index); + index = LO_BYTE(type_index); + + switch (type) { + case USB_DESCRIPTOR_TYPE_DEVICE: + *data = (uint8_t *)usbd_core_cfg.descriptors->device_descriptor; + *len = usbd_core_cfg.descriptors->device_descriptor[0]; + break; + case USB_DESCRIPTOR_TYPE_CONFIGURATION: + usbd_core_cfg.speed = usbd_get_port_speed(0); + if (usbd_core_cfg.speed == USB_SPEED_HIGH) { + if (usbd_core_cfg.descriptors->hs_config_descriptor) { + *data = (uint8_t *)usbd_core_cfg.descriptors->hs_config_descriptor; + *len = (usbd_core_cfg.descriptors->hs_config_descriptor[CONF_DESC_wTotalLength] | + (usbd_core_cfg.descriptors->hs_config_descriptor[CONF_DESC_wTotalLength + 1] << 8)); + } else { + found = false; + } + } else { + if (usbd_core_cfg.descriptors->fs_config_descriptor) { + *data = (uint8_t *)usbd_core_cfg.descriptors->fs_config_descriptor; + *len = (usbd_core_cfg.descriptors->fs_config_descriptor[CONF_DESC_wTotalLength] | + (usbd_core_cfg.descriptors->fs_config_descriptor[CONF_DESC_wTotalLength + 1] << 8)); + } else { + found = false; + } + } + + break; + case USB_DESCRIPTOR_TYPE_STRING: + if (index == USB_STRING_LANGID_INDEX) { + (*data)[0] = 0x04; + (*data)[1] = 0x03; + (*data)[2] = 0x09; + (*data)[3] = 0x04; + *len = 4; + } else if (index == USB_OSDESC_STRING_DESC_INDEX) { + if (usbd_core_cfg.descriptors->msosv1_descriptor) { + USB_LOG_INFO("read MS OS 1.0 descriptor string\r\n"); + *data = usbd_core_cfg.descriptors->msosv1_descriptor->string; + *len = usbd_core_cfg.descriptors->msosv1_descriptor->string_len; + } else { + } + } else { + if (usbd_core_cfg.descriptors->string_descriptor[index - 1]) { + str_len = strlen((const char *)usbd_core_cfg.descriptors->string_descriptor[index - 1]); + + (*data)[0] = str_len * 2 + 2; + (*data)[1] = 0x03; + for (uint16_t i = 0; i < str_len; i++) { + (*data)[i * 2 + 2] = usbd_core_cfg.descriptors->string_descriptor[index - 1][i]; + (*data)[i * 2 + 3] = 0; + } + + *len = str_len * 2 + 2; + } else { + found = false; + } + } + break; + case USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER: + if (usbd_core_cfg.descriptors->device_quality_descriptor) { + *data = (uint8_t *)usbd_core_cfg.descriptors->device_quality_descriptor; + *len = usbd_core_cfg.descriptors->device_quality_descriptor[0]; + } else { + found = false; + } + + break; + case USB_DESCRIPTOR_TYPE_OTHER_SPEED: + if (usbd_core_cfg.speed == USB_SPEED_HIGH) { + if (usbd_core_cfg.descriptors->fs_other_speed_descriptor) { + *data = (uint8_t *)usbd_core_cfg.descriptors->fs_other_speed_descriptor; + *len = (usbd_core_cfg.descriptors->fs_other_speed_descriptor[CONF_DESC_wTotalLength] | + (usbd_core_cfg.descriptors->fs_other_speed_descriptor[CONF_DESC_wTotalLength] << 8)); + } else { + found = false; + } + } else { + if (usbd_core_cfg.descriptors->hs_other_speed_descriptor) { + *data = (uint8_t *)usbd_core_cfg.descriptors->hs_other_speed_descriptor; + *len = (usbd_core_cfg.descriptors->hs_other_speed_descriptor[CONF_DESC_wTotalLength] | + (usbd_core_cfg.descriptors->hs_other_speed_descriptor[CONF_DESC_wTotalLength] << 8)); + } else { + found = false; + } + } + break; + + case USB_DESCRIPTOR_TYPE_BINARY_OBJECT_STORE: + USB_LOG_INFO("read BOS descriptor string\r\n"); + break; + + default: + found = false; + break; + } + + if (found == false) { + /* nothing found */ + USB_LOG_ERR("descriptor not found!\r\n", type, index); + } + return found; +} +#else static bool usbd_get_descriptor(uint16_t type_index, uint8_t **data, uint32_t *len) { uint8_t type = 0U; @@ -200,9 +336,6 @@ static bool usbd_get_descriptor(uint16_t type_index, uint8_t **data, uint32_t *l } if (found) { - /* found descriptor, save descriptor premiere address */ - *data = p; - if ((type == USB_DESCRIPTOR_TYPE_CONFIGURATION) || ((type == USB_DESCRIPTOR_TYPE_OTHER_SPEED))) { /* configuration or other speed descriptor is an * exception, length is at offset 2 and 3 @@ -213,6 +346,7 @@ static bool usbd_get_descriptor(uint16_t type_index, uint8_t **data, uint32_t *l /* normally length is at offset 0 */ *len = p[DESC_bLength]; } + memcpy(*data, p, *len); } else { /* nothing found */ USB_LOG_ERR("descriptor not found!\r\n", type, index); @@ -220,6 +354,7 @@ static bool usbd_get_descriptor(uint16_t type_index, uint8_t **data, uint32_t *l return found; } +#endif /** * @brief set USB configuration @@ -235,11 +370,19 @@ static bool usbd_get_descriptor(uint16_t type_index, uint8_t **data, uint32_t *l */ static bool usbd_set_configuration(uint8_t config_index, uint8_t alt_setting) { - uint8_t *p = (uint8_t *)usbd_core_cfg.descriptors; uint8_t cur_alt_setting = 0xFF; uint8_t cur_config = 0xFF; bool found = false; - + uint8_t *p; +#ifdef CONFIG_USBDEV_ADVANCE_DESC + if (usbd_core_cfg.speed == USB_SPEED_HIGH) { + p = (uint8_t *)usbd_core_cfg.descriptors->hs_config_descriptor; + } else { + p = (uint8_t *)usbd_core_cfg.descriptors->fs_config_descriptor; + } +#else + p = (uint8_t *)usbd_core_cfg.descriptors; +#endif /* configure endpoints for this configuration/altsetting */ while (p[DESC_bLength] != 0U) { switch (p[DESC_bDescriptorType]) { @@ -289,13 +432,21 @@ static bool usbd_set_configuration(uint8_t config_index, uint8_t alt_setting) */ static bool usbd_set_interface(uint8_t iface, uint8_t alt_setting) { - const uint8_t *p = usbd_core_cfg.descriptors; const uint8_t *if_desc = NULL; struct usb_endpoint_descriptor *ep_desc; uint8_t cur_alt_setting = 0xFF; uint8_t cur_iface = 0xFF; bool ret = false; - + uint8_t *p; +#ifdef CONFIG_USBDEV_ADVANCE_DESC + if (usbd_core_cfg.speed == USB_SPEED_HIGH) { + p = (uint8_t *)usbd_core_cfg.descriptors->hs_config_descriptor; + } else { + p = (uint8_t *)usbd_core_cfg.descriptors->fs_config_descriptor; + } +#else + p = (uint8_t *)usbd_core_cfg.descriptors; +#endif USB_LOG_DBG("iface %u alt_setting %u\r\n", iface, alt_setting); while (p[DESC_bLength] != 0U) { @@ -402,6 +553,7 @@ static bool usbd_std_device_req_handler(struct usb_setup_packet *setup, uint8_t usbd_core_cfg.configuration = value; usbd_core_cfg.configured = true; usbd_class_event_notify_handler(USBD_EVENT_CONFIGURED, NULL); + usbd_event_handler(USBD_EVENT_CONFIGURED); usbd_configure_done_callback(); } *len = 0; @@ -458,7 +610,8 @@ static bool usbd_std_interface_req_handler(struct usb_setup_packet *setup, struct usbd_interface *intf = usb_slist_entry(i, struct usbd_interface, list); if (intf->intf_num == intf_num) { - *data = (uint8_t *)intf->hid_report_descriptor; + //*data = (uint8_t *)intf->hid_report_descriptor; + memcpy(*data, intf->hid_report_descriptor, intf->hid_report_descriptor_len); *len = intf->hid_report_descriptor_len; return true; } @@ -638,18 +791,67 @@ static int usbd_class_request_handler(struct usb_setup_packet *setup, uint8_t ** */ static int usbd_vendor_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len) { +#ifdef CONFIG_USBDEV_ADVANCE_DESC + if (usbd_core_cfg.descriptors->msosv1_descriptor) { + if (setup->bRequest == usbd_core_cfg.descriptors->msosv1_descriptor->vendor_code) { + switch (setup->wIndex) { + case 0x04: + USB_LOG_INFO("get Compat ID\r\n"); + *data = (uint8_t *)usbd_core_cfg.descriptors->msosv1_descriptor->compat_id; + *len = usbd_core_cfg.descriptors->msosv1_descriptor->compat_id_len; + return 0; + case 0x05: + USB_LOG_INFO("get Compat id properties\r\n"); + *data = (uint8_t *)usbd_core_cfg.descriptors->msosv1_descriptor->comp_id_property; + *len = usbd_core_cfg.descriptors->msosv1_descriptor->comp_id_property_len; + return 0; + default: + USB_LOG_ERR("unknown vendor code\r\n"); + return -1; + } + } + } else if (usbd_core_cfg.descriptors->msosv2_descriptor) { + if (setup->bRequest == usbd_core_cfg.descriptors->msosv2_descriptor->vendor_code) { + switch (setup->wIndex) { + case WINUSB_REQUEST_GET_DESCRIPTOR_SET: + USB_LOG_INFO("GET MS OS 2.0 Descriptor\r\n"); + *data = (uint8_t *)usbd_core_cfg.descriptors->msosv2_descriptor->compat_id; + *len = usbd_core_cfg.descriptors->msosv2_descriptor->compat_id_len; + return 0; + default: + USB_LOG_ERR("unknown vendor code\r\n"); + return -1; + } + } + } else if (usbd_core_cfg.descriptors->webusb_url_descriptor) { + if (setup->bRequest == usbd_core_cfg.descriptors->webusb_url_descriptor->vendor_code) { + switch (setup->wIndex) { + case WINUSB_REQUEST_GET_DESCRIPTOR_SET: + USB_LOG_INFO("GET Webusb url Descriptor\r\n"); + *data = (uint8_t *)usbd_core_cfg.descriptors->webusb_url_descriptor->string; + *len = usbd_core_cfg.descriptors->webusb_url_descriptor->string_len; + return 0; + default: + USB_LOG_ERR("unknown vendor code\r\n"); + return -1; + } + } + } +#else if (msosv1_desc) { if (setup->bRequest == msosv1_desc->vendor_code) { switch (setup->wIndex) { case 0x04: USB_LOG_INFO("get Compat ID\r\n"); - *data = (uint8_t *)msosv1_desc->compat_id; + //*data = (uint8_t *)msosv1_desc->compat_id; + memcpy(*data, msosv1_desc->compat_id, msosv1_desc->compat_id_len); *len = msosv1_desc->compat_id_len; return 0; case 0x05: USB_LOG_INFO("get Compat id properties\r\n"); - *data = (uint8_t *)msosv1_desc->comp_id_property; + //*data = (uint8_t *)msosv1_desc->comp_id_property; + memcpy(*data, msosv1_desc->comp_id_property, msosv1_desc->comp_id_property_len); *len = msosv1_desc->comp_id_property_len; return 0; @@ -663,7 +865,8 @@ static int usbd_vendor_request_handler(struct usb_setup_packet *setup, uint8_t * switch (setup->wIndex) { case WINUSB_REQUEST_GET_DESCRIPTOR_SET: USB_LOG_INFO("GET MS OS 2.0 Descriptor\r\n"); - *data = (uint8_t *)msosv2_desc->compat_id; + //*data = (uint8_t *)msosv2_desc->compat_id; + memcpy(*data, msosv2_desc->compat_id, msosv2_desc->compat_id_len); *len = msosv2_desc->compat_id_len; return 0; default: @@ -672,7 +875,7 @@ static int usbd_vendor_request_handler(struct usb_setup_packet *setup, uint8_t * } } } - +#endif usb_slist_t *i; usb_slist_for_each(i, &usbd_intf_head) @@ -701,6 +904,12 @@ static bool usbd_setup_request_handler(struct usb_setup_packet *setup, uint8_t * switch (setup->bmRequestType & USB_REQUEST_TYPE_MASK) { case USB_REQUEST_STANDARD: if (usbd_standard_request_handler(setup, data, len) < 0) { +#ifndef CONFIG_USB_HS + if ((setup->bRequest == 0x06) && (setup->wValue == 0x0600)) { + USB_LOG_WRN("Ignore DQD in fs\r\n"); /* Device Qualifier Descriptor */ + return false; + } +#endif USB_LOG_ERR("standard request error\r\n"); usbd_print_setup(setup); return false; @@ -743,22 +952,22 @@ static void usbd_class_event_notify_handler(uint8_t event, void *arg) void usbd_event_connect_handler(void) { - usbd_class_event_notify_handler(USBD_EVENT_CONNECTED, NULL); + usbd_event_handler(USBD_EVENT_CONNECTED); } void usbd_event_disconnect_handler(void) { - usbd_class_event_notify_handler(USBD_EVENT_DISCONNECTED, NULL); + usbd_event_handler(USBD_EVENT_DISCONNECTED); } void usbd_event_resume_handler(void) { - usbd_class_event_notify_handler(USBD_EVENT_RESUME, NULL); + usbd_event_handler(USBD_EVENT_RESUME); } void usbd_event_suspend_handler(void) { - usbd_class_event_notify_handler(USBD_EVENT_SUSPEND, NULL); + usbd_event_handler(USBD_EVENT_SUSPEND); } void usbd_event_reset_handler(void) @@ -766,6 +975,7 @@ void usbd_event_reset_handler(void) usbd_set_address(0); usbd_core_cfg.configured = 0; usbd_core_cfg.configuration = 0; + #ifdef CONFIG_USBDEV_TEST_MODE usbd_core_cfg.test_mode = false; #endif @@ -780,6 +990,7 @@ void usbd_event_reset_handler(void) usbd_ep_open(&ep0_cfg); usbd_class_event_notify_handler(USBD_EVENT_RESET, NULL); + usbd_event_handler(USBD_EVENT_RESET); } void usbd_event_ep0_setup_complete_handler(uint8_t *psetup) @@ -823,26 +1034,18 @@ void usbd_event_ep0_setup_complete_handler(uint8_t *psetup) } #endif /* Send smallest of requested and offered length */ - usbd_core_cfg.ep0_data_buf_residue = MIN(usbd_core_cfg.ep0_data_buf_len, - setup->wLength); - - /* check if the data buf addr matches align size,if not, copy into align buf */ -#ifndef CONFIG_USBDEV_ALIGN_CHECK_DISABLE - if (((unsigned long)usbd_core_cfg.ep0_data_buf) & (CONFIG_USB_ALIGN_SIZE - 1)) { - if (usbd_core_cfg.ep0_data_buf_residue > CONFIG_USBDEV_REQUEST_BUFFER_LEN) { - USB_LOG_ERR("Request buffer too small\r\n"); - return; - } - /* copy data buf from misalignx addr to alignx addr */ - memcpy(usbd_core_cfg.req_data, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); - usbd_core_cfg.ep0_data_buf = usbd_core_cfg.req_data; + usbd_core_cfg.ep0_data_buf_residue = MIN(usbd_core_cfg.ep0_data_buf_len, setup->wLength); + if (usbd_core_cfg.ep0_data_buf_residue > CONFIG_USBDEV_REQUEST_BUFFER_LEN) { + USB_LOG_ERR("Request buffer too small\r\n"); + return; } -#endif + /* Send data or status to host */ usbd_ep_start_write(USB_CONTROL_IN_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); /* - * Set ZLP flag when host asks for a bigger length and the data size is multiplier of USB_CTRL_EP_MPS, - * to indicate the transfer done after zlp sent. + * Set ZLP flag when host asks for a bigger length and the data size is + * multiplier of USB_CTRL_EP_MPS, to indicate the transfer done after zlp + * sent. */ if ((setup->wLength > usbd_core_cfg.ep0_data_buf_len) && (!(usbd_core_cfg.ep0_data_buf_len % USB_CTRL_EP_MPS))) { usbd_core_cfg.zlp_flag = true; @@ -850,84 +1053,155 @@ void usbd_event_ep0_setup_complete_handler(uint8_t *psetup) } } -void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes) +void usbd_event_ep0_in_complete_handler(uint8_t ep, uint32_t nbytes) { - if (ep == USB_CONTROL_IN_EP0) { - struct usb_setup_packet *setup = &usbd_core_cfg.setup; + struct usb_setup_packet *setup = &usbd_core_cfg.setup; - usbd_core_cfg.ep0_data_buf += nbytes; - usbd_core_cfg.ep0_data_buf_residue -= nbytes; + usbd_core_cfg.ep0_data_buf += nbytes; + usbd_core_cfg.ep0_data_buf_residue -= nbytes; - USB_LOG_DBG("EP0 send %d bytes, %d remained\r\n", nbytes, usbd_core_cfg.ep0_data_buf_residue); + USB_LOG_DBG("EP0 send %d bytes, %d remained\r\n", nbytes, usbd_core_cfg.ep0_data_buf_residue); - if (usbd_core_cfg.ep0_data_buf_residue != 0) { - /* Start sending the remain data */ - usbd_ep_start_write(USB_CONTROL_IN_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); + if (usbd_core_cfg.ep0_data_buf_residue != 0) { + /* Start sending the remain data */ + usbd_ep_start_write(USB_CONTROL_IN_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); + } else { + if (usbd_core_cfg.zlp_flag == true) { + usbd_core_cfg.zlp_flag = false; + /* Send zlp to host */ + USB_LOG_DBG("EP0 Send zlp\r\n"); + usbd_ep_start_write(USB_CONTROL_IN_EP0, NULL, 0); } else { - if (usbd_core_cfg.zlp_flag == true) { - usbd_core_cfg.zlp_flag = false; - /* Send zlp to host */ - USB_LOG_DBG("EP0 Send zlp\r\n"); - usbd_ep_start_write(USB_CONTROL_IN_EP0, NULL, 0); - } else { - /* Satisfying three conditions will jump here. + /* Satisfying three conditions will jump here. * 1. send status completely * 2. send zlp completely * 3. send last data completely. */ - if (setup->wLength && ((setup->bmRequestType & USB_REQUEST_DIR_MASK) == USB_REQUEST_DIR_IN)) { - /* if all data has sent completely, start reading out status */ - usbd_ep_start_read(USB_CONTROL_OUT_EP0, NULL, 0); - } + if (setup->wLength && ((setup->bmRequestType & USB_REQUEST_DIR_MASK) == USB_REQUEST_DIR_IN)) { + /* if all data has sent completely, start reading out status */ + usbd_ep_start_read(USB_CONTROL_OUT_EP0, NULL, 0); } } - } else { - if (usbd_core_cfg.in_ep_cb[ep & 0x7f]) { - usbd_core_cfg.in_ep_cb[ep & 0x7f](ep, nbytes); - } } } -void usbd_event_ep_out_complete_handler(uint8_t ep, uint32_t nbytes) +void usbd_event_ep0_out_complete_handler(uint8_t ep, uint32_t nbytes) { - if (ep == USB_CONTROL_OUT_EP0) { - struct usb_setup_packet *setup = &usbd_core_cfg.setup; - - if (nbytes > 0) { - usbd_core_cfg.ep0_data_buf += nbytes; - usbd_core_cfg.ep0_data_buf_residue -= nbytes; + struct usb_setup_packet *setup = &usbd_core_cfg.setup; - USB_LOG_DBG("EP0 recv %d bytes, %d remained\r\n", nbytes, usbd_core_cfg.ep0_data_buf_residue); + if (nbytes > 0) { + usbd_core_cfg.ep0_data_buf += nbytes; + usbd_core_cfg.ep0_data_buf_residue -= nbytes; - if (usbd_core_cfg.ep0_data_buf_residue == 0) { - /* Received all, send data to handler */ - usbd_core_cfg.ep0_data_buf = usbd_core_cfg.req_data; - if (!usbd_setup_request_handler(setup, &usbd_core_cfg.ep0_data_buf, &usbd_core_cfg.ep0_data_buf_len)) { - usbd_ep_set_stall(USB_CONTROL_IN_EP0); - return; - } + USB_LOG_DBG("EP0 recv %d bytes, %d remained\r\n", nbytes, usbd_core_cfg.ep0_data_buf_residue); - /*Send status to host*/ - usbd_ep_start_write(USB_CONTROL_IN_EP0, NULL, 0); - } else { - /* Start reading the remain data */ - usbd_ep_start_read(USB_CONTROL_OUT_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); + if (usbd_core_cfg.ep0_data_buf_residue == 0) { + /* Received all, send data to handler */ + usbd_core_cfg.ep0_data_buf = usbd_core_cfg.req_data; + if (!usbd_setup_request_handler(setup, &usbd_core_cfg.ep0_data_buf, &usbd_core_cfg.ep0_data_buf_len)) { + usbd_ep_set_stall(USB_CONTROL_IN_EP0); + return; } + + /*Send status to host*/ + usbd_ep_start_write(USB_CONTROL_IN_EP0, NULL, 0); } else { - /* Read out status completely, do nothing */ - USB_LOG_DBG("EP0 recv out status\r\n"); + /* Start reading the remain data */ + usbd_ep_start_read(USB_CONTROL_OUT_EP0, usbd_core_cfg.ep0_data_buf, usbd_core_cfg.ep0_data_buf_residue); } } else { - if (usbd_core_cfg.out_ep_cb[ep & 0x7f]) { - usbd_core_cfg.out_ep_cb[ep & 0x7f](ep, nbytes); + /* Read out status completely, do nothing */ + USB_LOG_DBG("EP0 recv out status\r\n"); + } +} + +void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes) +{ +#ifndef CONFIG_USBDEV_TX_THREAD + if (tx_msg[ep & 0x7f].cb) { + tx_msg[ep & 0x7f].cb(ep, nbytes); + } +#else + tx_msg[ep & 0x7f].nbytes = nbytes; + usb_osal_mq_send(usbd_tx_mq, (uintptr_t)&tx_msg[ep & 0x7f]); +#endif +} + +void usbd_event_ep_out_complete_handler(uint8_t ep, uint32_t nbytes) +{ +#ifndef CONFIG_USBDEV_RX_THREAD + if (rx_msg[ep & 0x7f].cb) { + rx_msg[ep & 0x7f].cb(ep, nbytes); + } +#else + rx_msg[ep & 0x7f].nbytes = nbytes; + usb_osal_mq_send(usbd_rx_mq, (uintptr_t)&rx_msg[ep & 0x7f]); +#endif +} + +#ifdef CONFIG_USBDEV_TX_THREAD +static void usbdev_tx_thread(void *argument) +{ + struct usbd_tx_rx_msg *msg; + int ret; + + while (1) { + ret = usb_osal_mq_recv(usbd_tx_mq, (uintptr_t *)&msg, 0xffffffff); + if (ret < 0) { + continue; + } + + if (msg->cb) { + msg->cb(msg->ep, msg->nbytes); + } + } +} +#endif + +#ifdef CONFIG_USBDEV_RX_THREAD +static void usbdev_rx_thread(void *argument) +{ + struct usbd_tx_rx_msg *msg; + int ret; + + while (1) { + ret = usb_osal_mq_recv(usbd_rx_mq, (uintptr_t *)&msg, 0xffffffff); + if (ret < 0) { + continue; + } + + if (msg->cb) { + msg->cb(msg->ep, msg->nbytes); } } } +#endif + +#ifdef CONFIG_USBDEV_ADVANCE_DESC +void usbd_desc_register(struct usb_descriptor *desc) +{ + memset(&usbd_core_cfg, 0, sizeof(struct usbd_core_cfg_priv)); + + usbd_core_cfg.descriptors = desc; + usbd_core_cfg.intf_offset = 0; + tx_msg[0].ep = 0x80; + tx_msg[0].cb = usbd_event_ep0_in_complete_handler; + rx_msg[0].ep = 0x00; + rx_msg[0].cb = usbd_event_ep0_out_complete_handler; +} +#else void usbd_desc_register(const uint8_t *desc) { + memset(&usbd_core_cfg, 0, sizeof(struct usbd_core_cfg_priv)); + usbd_core_cfg.descriptors = desc; usbd_core_cfg.intf_offset = 0; + + tx_msg[0].ep = 0x80; + tx_msg[0].cb = usbd_event_ep0_in_complete_handler; + rx_msg[0].ep = 0x00; + rx_msg[0].cb = usbd_event_ep0_out_complete_handler; } /* Register MS OS Descriptors version 1 */ @@ -946,6 +1220,7 @@ void usbd_bos_desc_register(struct usb_bos_descriptor *desc) { bos_desc = desc; } +#endif void usbd_add_interface(struct usbd_interface *intf) { @@ -957,9 +1232,11 @@ void usbd_add_interface(struct usbd_interface *intf) void usbd_add_endpoint(struct usbd_endpoint *ep) { if (ep->ep_addr & 0x80) { - usbd_core_cfg.in_ep_cb[ep->ep_addr & 0x7f] = ep->ep_cb; + tx_msg[ep->ep_addr & 0x7f].ep = ep->ep_addr; + tx_msg[ep->ep_addr & 0x7f].cb = ep->ep_cb; } else { - usbd_core_cfg.out_ep_cb[ep->ep_addr & 0x7f] = ep->ep_cb; + rx_msg[ep->ep_addr & 0x7f].ep = ep->ep_addr; + rx_msg[ep->ep_addr & 0x7f].cb = ep->ep_cb; } } @@ -970,6 +1247,26 @@ bool usb_device_is_configured(void) int usbd_initialize(void) { +#ifdef CONFIG_USBDEV_TX_THREAD + usbd_tx_mq = usb_osal_mq_create(16); + if (usbd_tx_mq == NULL) { + return -1; + } + usbd_tx_thread = usb_osal_thread_create("usbd_tx", CONFIG_USBDEV_TX_STACKSIZE, CONFIG_USBDEV_TX_PRIO, usbdev_tx_thread, NULL); + if (usbd_tx_thread == NULL) { + return -1; + } +#endif +#ifdef CONFIG_USBDEV_RX_THREAD + usbd_rx_mq = usb_osal_mq_create(16); + if (usbd_rx_mq == NULL) { + return -1; + } + usbd_rx_thread = usb_osal_thread_create("usbd_rx", CONFIG_USBDEV_RX_STACKSIZE, CONFIG_USBDEV_RX_PRIO, usbdev_rx_thread, NULL); + if (usbd_rx_thread == NULL) { + return -1; + } +#endif return usb_dc_init(); } @@ -978,5 +1275,28 @@ int usbd_deinitialize(void) usbd_core_cfg.intf_offset = 0; usb_slist_init(&usbd_intf_head); usb_dc_deinit(); +#if defined(CONFIG_USBDEV_TX_THREAD) || defined(CONFIG_USBDEV_RX_THREAD) +#endif return 0; } + +__WEAK void usbd_event_handler(uint8_t event) +{ + switch (event) { + case USBD_EVENT_RESET: + break; + case USBD_EVENT_CONNECTED: + break; + case USBD_EVENT_DISCONNECTED: + break; + case USBD_EVENT_RESUME: + break; + case USBD_EVENT_SUSPEND: + break; + case USBD_EVENT_CONFIGURED: + break; + + default: + break; + } +} diff --git a/third-party/cherryusb-0.7.0/core/usbd_core.h b/third-party/cherryusb/core/usbd_core.h similarity index 77% rename from third-party/cherryusb-0.7.0/core/usbd_core.h rename to third-party/cherryusb/core/usbd_core.h index 2583fc916491136a29ac5602cbcd957e3646977b..3273b5e3511b277f2ec3cdd542ff7949d41fd5c6 100644 --- a/third-party/cherryusb-0.7.0/core/usbd_core.h +++ b/third-party/cherryusb/core/usbd_core.h @@ -62,10 +62,28 @@ struct usbd_interface { uint8_t intf_num; }; +struct usb_descriptor { + const uint8_t *device_descriptor; + const uint8_t *fs_config_descriptor; + const uint8_t *hs_config_descriptor; + const uint8_t *device_quality_descriptor; + const uint8_t *fs_other_speed_descriptor; + const uint8_t *hs_other_speed_descriptor; + const char **string_descriptor; + struct usb_msosv1_descriptor *msosv1_descriptor; + struct usb_msosv2_descriptor *msosv2_descriptor; + struct usb_webusb_url_ex_descriptor *webusb_url_descriptor; + struct usb_bos_descriptor *bos_descriptor; +}; + +#ifdef CONFIG_USBDEV_ADVANCE_DESC +void usbd_desc_register(struct usb_descriptor *desc); +#else void usbd_desc_register(const uint8_t *desc); void usbd_msosv1_desc_register(struct usb_msosv1_descriptor *desc); void usbd_msosv2_desc_register(struct usb_msosv2_descriptor *desc); void usbd_bos_desc_register(struct usb_bos_descriptor *desc); +#endif void usbd_add_interface(struct usbd_interface *intf); void usbd_add_endpoint(struct usbd_endpoint *ep); @@ -75,6 +93,8 @@ void usbd_configure_done_callback(void); int usbd_initialize(void); int usbd_deinitialize(void); +void usbd_event_handler(uint8_t event); + #ifdef __cplusplus } #endif diff --git a/third-party/cherryusb-0.7.0/core/usbh_core.c b/third-party/cherryusb/core/usbh_core.c similarity index 79% rename from third-party/cherryusb-0.7.0/core/usbh_core.c rename to third-party/cherryusb/core/usbh_core.c index b90eb2f5855fcf8ff4e3cacecb29eb06d43778c8..a1a5183e3bce6ed6f0650aaaa0adb7986c7b115e 100644 --- a/third-party/cherryusb-0.7.0/core/usbh_core.c +++ b/third-party/cherryusb/core/usbh_core.c @@ -9,7 +9,7 @@ struct usbh_class_info *usbh_class_info_table_begin = NULL; struct usbh_class_info *usbh_class_info_table_end = NULL; -USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t ep0_request_buffer[CONFIG_USBHOST_REQUEST_BUFFER_LEN]; +static usb_slist_t usb_buses = USB_SLIST_OBJECT_INIT(usb_buses); /* general descriptor field offsets */ #define DESC_bLength 0 /** Length offset */ @@ -19,21 +19,118 @@ USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t ep0_request_buffer[CONFIG_USBHOST #define USB_DEV_ADDR_MARK_OFFSET 5 #define USB_DEV_ADDR_MARK_MASK 0x1f -struct usbh_devaddr_map { - /** - * alloctab[0]:addr from 0~31 - * alloctab[1]:addr from 32~63 - * alloctab[2]:addr from 64~95 - * alloctab[3]:addr from 96~127 - * - */ - uint8_t next; /* Next device address */ - uint32_t alloctab[4]; /* Bit allocation table */ -}; - -struct usbh_bus { - struct usbh_devaddr_map devgen; -} g_usbh_bus; +struct usbh_bus* usbh_get_bus_of_index(uint8_t usb) +{ + usb_slist_t *i; + struct usbh_bus* target_bus = NULL; + struct usbh_bus* bus = NULL; + size_t flags = usb_osal_enter_critical_section(); + + usb_slist_for_each(i, &usb_buses) + { + bus = usb_slist_entry(i, struct usbh_bus, list); + if (bus->id == usb) { + target_bus = bus; + break; + } + } + usb_osal_leave_critical_section(flags); + + return target_bus; +} + +struct usbh_bus* usbh_get_bus_of_devname(const char *devname) +{ + uint8_t usb_id = 0, dev_id = 0; + int matched = 0; + uint32_t name_len = strlen(devname); + + /* e.g. /usb0/hub1, return the usb-id 0 */ + for (uint32_t i = 0; i < name_len; i++) { + if (('0' <= devname[i]) && ('9' >= devname[i])) { + usb_id = usb_id * 10 + (devname[i] - '0'); + if (!matched) { + matched = 1; + } + } else { + if (matched) { + break; + } + } + } + + /* success only if all items mathched */ + if (matched) { + USB_LOG_INFO("id = %d \r\n", usb_id); + return usbh_get_bus_of_index(usb_id); + } else { + return NULL; /* not matched */ + } +} + +/** + * Get USB transaction translator + * + * @v hport Hub port of USB device + * @ret port Transaction translator port, or NULL + */ +struct usbh_hubport *usbh_transaction_translator ( struct usbh_hubport *hport ) { + struct usbh_hubport *parent; + + if (hport->parent->is_roothub) { + return NULL; + } + + /* Navigate up to root hub. If we find a low-speed or + * full-speed device with a higher-speed parent hub, then that + * device's port is the transaction translator. + */ + for (; (parent = hport->parent->parent); hport = parent) { + if ((hport->speed <= USB_SPEED_FULL) && + (parent->speed > USB_SPEED_FULL)) { + return hport; + } + } + + return NULL; +} + +/** + * Get USB route string + * + * @v hport Hub Port of USB device + * @ret route USB route string + */ +unsigned int usbh_route_string ( struct usbh_hubport *hport ) { + struct usbh_hubport *parent; + unsigned int route; + + /* Navigate up to root hub, constructing route string as we go */ + for (route = 0; (parent = hport->parent->parent); hport = parent) { + route <<= 4; + route |= ( ( hport->dev_addr > 0xf ) ? + 0xf : hport->dev_addr ); + } + + return route; +} + +/** + * Get USB root hub port + * + * @v usb USB device + * @ret port Root hub port + */ +struct usbh_hubport * usbh_root_hub_port ( struct usbh_hubport *hport ) { + struct usbh_hubport *parent; + + /* Navigate up to root hub */ + while (parent = hport->parent->parent) { + hport = parent; + } + + return hport; +} static int usbh_allocate_devaddr(struct usbh_devaddr_map *devgen) { @@ -109,7 +206,11 @@ static const struct usbh_class_driver *usbh_find_class_driver(uint8_t class, uin if (index->vid == vid && index->pid == pid && index->class == class) { return index->class_driver; } - } else if (index->match_flags & (USB_CLASS_MATCH_INTF_CLASS)) { + } else if ((index->match_flags & (USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS)) == (USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS)) { + if (index->class == class && index->subclass == subclass) { + return index->class_driver; + } + } else if ((index->match_flags & (USB_CLASS_MATCH_INTF_CLASS)) == USB_CLASS_MATCH_INTF_CLASS) { if (index->class == class) { return index->class_driver; } @@ -368,9 +469,11 @@ int usbh_hport_activate_ep0(struct usbh_hubport *hport) int usbh_hport_deactivate_ep0(struct usbh_hubport *hport) { + struct usbh_bus *usb = usbh_get_bus_of_port(hport); + #ifndef CONFIG_USBHOST_XHCI if (hport->dev_addr > 0) { - usbh_free_devaddr(&g_usbh_bus.devgen, hport->dev_addr); + usbh_free_devaddr(&(usb->g_usbh_bus.devgen), hport->dev_addr); } #endif if (hport->ep0) { @@ -406,16 +509,15 @@ int usbh_hport_activate_epx(usbh_pipe_t *pipe, struct usbh_hubport *hport, struc int usbh_enumerate(struct usbh_hubport *hport) { struct usb_interface_descriptor *intf_desc; + struct usb_device_descriptor *dev_desc; struct usb_setup_packet *setup; + struct usbh_bus *usb = usbh_get_bus_of_port(hport); int dev_addr; uint16_t ep_mps; int ret; -#define USB_REQUEST_BUFFER_SIZE 256 - setup = &hport->setup; - - /* Configure EP0 with the default maximum packet size */ - usbh_hport_activate_ep0(hport); + hport->setup = &usb->g_setup[hport->parent->index - 1][hport->port - 1]; + setup = hport->setup; /* Read the first 8 bytes of the device descriptor */ setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_DEVICE; @@ -424,19 +526,28 @@ int usbh_enumerate(struct usbh_hubport *hport) setup->wIndex = 0; setup->wLength = 8; - ret = usbh_control_transfer(hport->ep0, setup, ep0_request_buffer); + dev_desc = (struct usb_device_descriptor *)usb->ep0_request_buffer; + ret = usbh_control_transfer(hport->ep0, setup, (uint8_t *)dev_desc); if (ret < 0) { USB_LOG_ERR("Failed to get device descriptor,errorcode:%d\r\n", ret); goto errout; } - parse_device_descriptor(hport, (struct usb_device_descriptor *)ep0_request_buffer, 8); + parse_device_descriptor(hport, dev_desc, 8); /* Extract the correct max packetsize from the device descriptor */ - ep_mps = ((struct usb_device_descriptor *)ep0_request_buffer)->bMaxPacketSize0; + if (dev_desc->bcdUSB >= USB_3_0) { + ep_mps = 1 << dev_desc->bMaxPacketSize0; + } else { + ep_mps = dev_desc->bMaxPacketSize0; + } + + USB_LOG_DBG("Device rev=%04x cls=%02x sub=%02x proto=%02x size=%d\r\n", + dev_desc->bcdUSB, dev_desc->bDeviceClass, dev_desc->bDeviceSubClass, + dev_desc->bDeviceProtocol, ep_mps); /* Reconfigure EP0 with the correct maximum packet size */ - usbh_ep0_pipe_reconfigure(hport->ep0, 0, ep_mps, hport->speed); + usbh_ep_pipe_reconfigure(usb, hport->ep0, 0, ep_mps, 0); #ifdef CONFIG_USBHOST_XHCI extern int usbh_get_xhci_devaddr(usbh_pipe_t * pipe); @@ -449,7 +560,7 @@ int usbh_enumerate(struct usbh_hubport *hport) } #else /* Assign a function address to the device connected to this port */ - dev_addr = usbh_allocate_devaddr(&g_usbh_bus.devgen); + dev_addr = usbh_allocate_devaddr(&usb->devgen); if (dev_addr < 0) { USB_LOG_ERR("Failed to allocate devaddr,errorcode:%d\r\n", ret); goto errout; @@ -476,7 +587,7 @@ int usbh_enumerate(struct usbh_hubport *hport) hport->dev_addr = dev_addr; /* And reconfigure EP0 with the correct address */ - usbh_ep0_pipe_reconfigure(hport->ep0, dev_addr, ep_mps, hport->speed); + usbh_ep_pipe_reconfigure(usb, hport->ep0, dev_addr, ep_mps, 0); /* Read the full device descriptor */ setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_DEVICE; @@ -485,17 +596,17 @@ int usbh_enumerate(struct usbh_hubport *hport) setup->wIndex = 0; setup->wLength = USB_SIZEOF_DEVICE_DESC; - ret = usbh_control_transfer(hport->ep0, setup, ep0_request_buffer); + ret = usbh_control_transfer(hport->ep0, setup, usb->ep0_request_buffer); if (ret < 0) { USB_LOG_ERR("Failed to get full device descriptor,errorcode:%d\r\n", ret); goto errout; } - parse_device_descriptor(hport, (struct usb_device_descriptor *)ep0_request_buffer, USB_SIZEOF_DEVICE_DESC); + parse_device_descriptor(hport, (struct usb_device_descriptor *)usb->ep0_request_buffer, USB_SIZEOF_DEVICE_DESC); USB_LOG_INFO("New device found,idVendor:%04x,idProduct:%04x,bcdDevice:%04x\r\n", - ((struct usb_device_descriptor *)ep0_request_buffer)->idVendor, - ((struct usb_device_descriptor *)ep0_request_buffer)->idProduct, - ((struct usb_device_descriptor *)ep0_request_buffer)->bcdDevice); + ((struct usb_device_descriptor *)usb->ep0_request_buffer)->idVendor, + ((struct usb_device_descriptor *)usb->ep0_request_buffer)->idProduct, + ((struct usb_device_descriptor *)usb->ep0_request_buffer)->bcdDevice); /* Read the first 9 bytes of the config descriptor */ setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_DEVICE; @@ -504,16 +615,16 @@ int usbh_enumerate(struct usbh_hubport *hport) setup->wIndex = 0; setup->wLength = USB_SIZEOF_CONFIG_DESC; - ret = usbh_control_transfer(hport->ep0, setup, ep0_request_buffer); + ret = usbh_control_transfer(hport->ep0, setup, usb->ep0_request_buffer); if (ret < 0) { USB_LOG_ERR("Failed to get config descriptor,errorcode:%d\r\n", ret); goto errout; } - parse_config_descriptor(hport, (struct usb_configuration_descriptor *)ep0_request_buffer, USB_SIZEOF_CONFIG_DESC); + parse_config_descriptor(hport, (struct usb_configuration_descriptor *)usb->ep0_request_buffer, USB_SIZEOF_CONFIG_DESC); /* Read the full size of the configuration data */ - uint16_t wTotalLength = ((struct usb_configuration_descriptor *)ep0_request_buffer)->wTotalLength; + uint16_t wTotalLength = ((struct usb_configuration_descriptor *)usb->ep0_request_buffer)->wTotalLength; setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_DEVICE; setup->bRequest = USB_REQUEST_GET_DESCRIPTOR; @@ -521,25 +632,25 @@ int usbh_enumerate(struct usbh_hubport *hport) setup->wIndex = 0; setup->wLength = wTotalLength; - ret = usbh_control_transfer(hport->ep0, setup, ep0_request_buffer); + ret = usbh_control_transfer(hport->ep0, setup, usb->ep0_request_buffer); if (ret < 0) { USB_LOG_ERR("Failed to get full config descriptor,errorcode:%d\r\n", ret); goto errout; } - ret = parse_config_descriptor(hport, (struct usb_configuration_descriptor *)ep0_request_buffer, wTotalLength); + ret = parse_config_descriptor(hport, (struct usb_configuration_descriptor *)usb->ep0_request_buffer, wTotalLength); if (ret < 0) { USB_LOG_ERR("Parse config fail\r\n"); goto errout; } - USB_LOG_INFO("The device has %d interfaces\r\n", ((struct usb_configuration_descriptor *)ep0_request_buffer)->bNumInterfaces); + USB_LOG_INFO("The device has %d interfaces\r\n", ((struct usb_configuration_descriptor *)usb->ep0_request_buffer)->bNumInterfaces); hport->raw_config_desc = usb_malloc(wTotalLength); if (hport->raw_config_desc == NULL) { ret = -ENOMEM; USB_LOG_ERR("No memory to alloc for raw_config_desc\r\n"); goto errout; } - memcpy(hport->raw_config_desc, ep0_request_buffer, wTotalLength); + memcpy(hport->raw_config_desc, usb->ep0_request_buffer, wTotalLength); #ifdef CONFIG_USBHOST_GET_STRING_DESC /* Get Manufacturer string */ setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_DEVICE; @@ -548,13 +659,13 @@ int usbh_enumerate(struct usbh_hubport *hport) setup->wIndex = 0x0409; setup->wLength = 255; - ret = usbh_control_transfer(hport->ep0, setup, ep0_request_buffer); + ret = usbh_control_transfer(hport->ep0, setup, usb->ep0_request_buffer); if (ret < 0) { USB_LOG_ERR("Failed to get Manufacturer string,errorcode:%d\r\n", ret); goto errout; } - usbh_print_string("Manufacturer: ", ep0_request_buffer); + usbh_print_string("Manufacturer: ", usb->ep0_request_buffer); /* Get Product string */ setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_DEVICE; @@ -563,13 +674,13 @@ int usbh_enumerate(struct usbh_hubport *hport) setup->wIndex = 0x0409; setup->wLength = 255; - ret = usbh_control_transfer(hport->ep0, setup, ep0_request_buffer); + ret = usbh_control_transfer(hport->ep0, setup, usb->ep0_request_buffer); if (ret < 0) { USB_LOG_ERR("Failed to get get Product string,errorcode:%d\r\n", ret); goto errout; } - usbh_print_string("Product: ", ep0_request_buffer); + usbh_print_string("Product: ", usb->ep0_request_buffer); /* Get SerialNumber string */ setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_DEVICE; @@ -578,13 +689,13 @@ int usbh_enumerate(struct usbh_hubport *hport) setup->wIndex = 0x0409; setup->wLength = 255; - ret = usbh_control_transfer(hport->ep0, setup, ep0_request_buffer); + ret = usbh_control_transfer(hport->ep0, setup, usb->ep0_request_buffer); if (ret < 0) { USB_LOG_ERR("Failed to get get SerialNumber string,errorcode:%d\r\n", ret); goto errout; } - usbh_print_string("SerialNumber: ", ep0_request_buffer); + usbh_print_string("SerialNumber: ", usb->ep0_request_buffer); #endif /* Select device configuration 1 */ setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_STANDARD | USB_REQUEST_RECIPIENT_DEVICE; @@ -600,6 +711,12 @@ int usbh_enumerate(struct usbh_hubport *hport) } USB_LOG_INFO("Enumeration success, start loading class driver\r\n"); + +#ifdef CONFIG_USBHOST_ENUM_FIRST_INTERFACE_ONLY + USB_LOG_INFO("Support %d Interfaces, select the first one \r\n", hport->config.config_desc.bNumInterfaces); + hport->config.config_desc.bNumInterfaces = 1U; +#endif + /*search supported class driver*/ for (uint8_t i = 0; i < hport->config.config_desc.bNumInterfaces; i++) { intf_desc = &hport->config.intf[i].altsetting[0].intf_desc; @@ -615,19 +732,15 @@ int usbh_enumerate(struct usbh_hubport *hport) continue; } hport->config.intf[i].class_driver = class_driver; - USB_LOG_INFO("Loading %s class driver\r\n", class_driver->driver_name); + USB_LOG_INFO("Class:0x%02x,Subclass:0x%02x,Protocl:0x%02x\r\n", + intf_desc->bInterfaceClass, + intf_desc->bInterfaceSubClass, + intf_desc->bInterfaceProtocol); + USB_LOG_RAW("Loading %s class driver\r\n", class_driver->driver_name); ret = CLASS_CONNECT(hport, i); - if (ret < 0) { - ret = CLASS_DISCONNECT(hport, i); - goto errout; - } } - usbh_device_mount_done_callback(hport); errout: - if (ret < 0) { - usbh_hport_deactivate_ep0(hport); - } if (hport->raw_config_desc) { usb_free(hport->raw_config_desc); hport->raw_config_desc = NULL; @@ -635,11 +748,12 @@ errout: return ret; } -struct usbh_hubport *usbh_find_hubport(uint8_t dev_addr) +struct usbh_hubport *usbh_find_hubport(uint32_t usb_id, uint8_t dev_addr) { struct usbh_hubport *hport; + struct usbh_bus *usb = usbh_get_bus_of_index(usb_id); usb_slist_t *hub_list; - usb_slist_for_each(hub_list, &hub_class_head) + usb_slist_for_each(hub_list, &usb->hub_class_head) { struct usbh_hub *hub = usb_slist_entry(hub_list, struct usbh_hub, list); for (uint8_t port = 0; port < hub->hub_desc.bNbrPorts; port++) { @@ -658,8 +772,12 @@ void *usbh_find_class_instance(const char *devname) { struct usbh_hubport *hport; usb_slist_t *hub_list; + struct usbh_bus* usb = usbh_get_bus_of_devname(devname); + if (!usb) { + return NULL; + } - usb_slist_for_each(hub_list, &hub_class_head) + usb_slist_for_each(hub_list, &usb->hub_class_head) { struct usbh_hub *hub = usb_slist_entry(hub_list, struct usbh_hub, list); for (uint8_t port = 0; port < hub->hub_desc.bNbrPorts; port++) { @@ -675,9 +793,9 @@ void *usbh_find_class_instance(const char *devname) return NULL; } -int usbh_initialize(void) +int usbh_initialize(uint32_t id, struct usbh_bus *usb) { - memset(&g_usbh_bus, 0, sizeof(struct usbh_bus)); + memset(usb, 0, sizeof(struct usbh_bus)); #ifdef __ARMCC_VERSION /* ARM C Compiler */ extern const int usbh_class_info$$Base; @@ -689,12 +807,23 @@ int usbh_initialize(void) extern uint32_t __usbh_class_info_end__; usbh_class_info_table_begin = (struct usbh_class_info *)&__usbh_class_info_start__; usbh_class_info_table_end = (struct usbh_class_info *)&__usbh_class_info_end__; +#elif defined(__ICCARM__) || defined(__ICCRX__) + usbh_class_info_table_begin = (struct usbh_class_info *)__section_begin("usbh_class_info"); + usbh_class_info_table_end = (struct usbh_class_info *)__section_end("usbh_class_info"); #endif + /* allocate usb bus */ + usb->mtu = 65536; + /* devaddr 1 is for roothub */ - g_usbh_bus.devgen.next = 2; + usb->devgen.next = 2; - usbh_hub_initialize(); + usb->hub_event_head.next = NULL; + usb->hub_class_head.next = NULL; + usb->id = id; + + usb_slist_add_tail(&usb_buses, &(usb->list)); + usbh_hub_initialize(usb); return 0; } @@ -720,9 +849,14 @@ int lsusb(int argc, char **argv) { usb_slist_t *i; struct usbh_hubport *hport; + const char *opt = NULL; + int min_argc = 3; + int max_argc = 4; + uint8_t usb_id = 0; - if (argc < 2) { + if (argc < min_argc) { USB_LOG_RAW("Usage: lsusb [options]...\r\n"); + USB_LOG_RAW("List USB devices\r\n"); USB_LOG_RAW(" -v, --verbose\r\n"); USB_LOG_RAW(" Increase verbosity (show descriptors)\r\n"); @@ -738,12 +872,21 @@ int lsusb(int argc, char **argv) USB_LOG_RAW(" Show usage and help\r\n"); return 0; } - if (argc > 3) { + + if (argc > max_argc) { + return 0; + } + + usb_id = (uint8_t)strtoul(argv[1], NULL, 10); + struct usbh_bus* usb = usbh_get_bus_of_index(usb_id); + if (NULL == usb) { return 0; } - if (strcmp(argv[1], "-t") == 0) { - usb_slist_for_each(i, &hub_class_head) + opt = argv[2]; + + if (strcmp(opt, "-t") == 0) { + usb_slist_for_each(i, &usb->hub_class_head) { struct usbh_hub *hub = usb_slist_entry(i, struct usbh_hub, list); @@ -759,9 +902,9 @@ int lsusb(int argc, char **argv) for (uint8_t port = 0; port < hub->hub_desc.bNbrPorts; port++) { hport = &hub->child[port]; - if (hport->connected) { + if (hport && hport->connected) { for (uint8_t i = 0; i < hport->config.config_desc.bNumInterfaces; i++) { - if (hport->config.intf[i].class_driver->driver_name) { + if (hport->config.intf[i].class_driver && hport->config.intf[i].class_driver->driver_name) { USB_LOG_RAW(" |__Port %u,Port addr:0x%02x,If %u,ClassDriver=%s\r\n", hport->port, hport->dev_addr, @@ -774,8 +917,8 @@ int lsusb(int argc, char **argv) } } - if (strcmp(argv[1], "-v") == 0) { - usb_slist_for_each(i, &hub_class_head) + if (strcmp(opt, "-v") == 0) { + usb_slist_for_each(i, &usb->hub_class_head) { struct usbh_hub *hub = usb_slist_entry(i, struct usbh_hub, list); for (uint8_t port = 0; port < hub->hub_desc.bNbrPorts; port++) { @@ -794,12 +937,4 @@ int lsusb(int argc, char **argv) } return 0; -} - -__WEAK void usbh_device_mount_done_callback(struct usbh_hubport *hport) -{ -} - -__WEAK void usbh_device_unmount_done_callback(struct usbh_hubport *hport) -{ -} +} \ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/core/usbh_core.h b/third-party/cherryusb/core/usbh_core.h similarity index 68% rename from third-party/cherryusb-0.7.0/core/usbh_core.h rename to third-party/cherryusb/core/usbh_core.h index ce5090e71289dcbe27937cd8c63830e668b9faed..cda0c3bdc5442c843ee8fb4670c11eea01072a69 100644 --- a/third-party/cherryusb-0.7.0/core/usbh_core.h +++ b/third-party/cherryusb/core/usbh_core.h @@ -39,6 +39,9 @@ extern "C" { #define CLASS_INFO_DEFINE __attribute__((section("usbh_class_info"))) __USED __ALIGNED(1) #elif defined(__GNUC__) #define CLASS_INFO_DEFINE __attribute__((section(".usbh_class_info"))) __USED __ALIGNED(1) +#elif defined(__ICCARM__) || defined(__ICCRX__) +#pragma section = "usbh_class_info" +#define CLASS_INFO_DEFINE __attribute__((section("usbh_class_info"))) __USED __ALIGNED(1) #endif static inline void usbh_control_urb_fill(struct usbh_urb *urb, @@ -120,11 +123,11 @@ struct usbh_interface_altsetting { }; struct usbh_interface { - struct usbh_interface_altsetting altsetting[CONFIG_USBHOST_MAX_INTF_ALTSETTINGS]; - uint8_t altsetting_num; char devname[CONFIG_USBHOST_DEV_NAMELEN]; struct usbh_class_driver *class_driver; void *priv; + struct usbh_interface_altsetting altsetting[CONFIG_USBHOST_MAX_INTF_ALTSETTINGS]; + uint8_t altsetting_num; }; struct usbh_configuration { @@ -132,7 +135,10 @@ struct usbh_configuration { struct usbh_interface intf[CONFIG_USBHOST_MAX_INTERFACES]; }; +struct usbh_hub; struct usbh_hubport { + /** Name */ + char name[32]; bool connected; /* True: device connected; false: disconnected */ uint8_t port; /* Hub port index */ uint8_t dev_addr; /* device address */ @@ -143,11 +149,16 @@ struct usbh_hubport { const char *iManufacturer; const char *iProduct; const char *iSerialNumber; - uint8_t* raw_config_desc; - USB_MEM_ALIGNX struct usb_setup_packet setup; + uint8_t *raw_config_desc; + struct usb_setup_packet *setup; struct usbh_hub *parent; +#ifdef CONFIG_USBHOST_XHCI + uint32_t protocol; /* port protocol, for xhci, some ports are USB2.0, others are USB3.0 */ +#endif }; + +struct usbh_bus; struct usbh_hub { usb_slist_t list; bool connected; @@ -155,12 +166,16 @@ struct usbh_hub { uint8_t index; uint8_t hub_addr; usbh_pipe_t intin; - USB_MEM_ALIGNX uint8_t int_buffer[1]; + uint8_t *int_buffer; struct usbh_urb intin_urb; struct usb_hub_descriptor hub_desc; struct usbh_hubport child[CONFIG_USBHOST_MAX_EHPORTS]; struct usbh_hubport *parent; usb_slist_t hub_event_list; + struct usbh_bus *usb; + uint ports; /* num of ports */ + USB_MEM_ALIGNX uint8_t g_hub_buf[32]; + USB_MEM_ALIGNX uint8_t g_hub_intbuf[CONFIG_USBHOST_MAX_EXTHUBS + 1][1]; }; int usbh_hport_activate_epx(usbh_pipe_t *pipe, struct usbh_hubport *hport, struct usb_endpoint_descriptor *ep_desc); @@ -177,14 +192,84 @@ int usbh_hport_activate_epx(usbh_pipe_t *pipe, struct usbh_hubport *hport, struc */ int usbh_control_transfer(usbh_pipe_t pipe, struct usb_setup_packet *setup, uint8_t *buffer); -int usbh_initialize(void); -struct usbh_hubport *usbh_find_hubport(uint8_t dev_addr); -void *usbh_find_class_instance(const char *devname); +struct usbh_devaddr_map { + /** + * alloctab[0]:addr from 0~31 + * alloctab[1]:addr from 32~63 + * alloctab[2]:addr from 64~95 + * alloctab[3]:addr from 96~127 + * + */ + uint8_t next; /* Next device address */ + uint32_t alloctab[4]; /* Bit allocation table */ +}; -void usbh_device_mount_done_callback(struct usbh_hubport *hport); -void usbh_device_unmount_done_callback(struct usbh_hubport *hport); +struct usbh_bus { + usb_slist_t list; + uint8_t id; + /** Largest transfer allowed on the bus */ + size_t mtu; + struct usbh_devaddr_map devgen; + struct usbh_hub roothub; +#if CONFIG_USBHOST_MAX_EXTHUBS > 0 + struct usbh_hub exthub[CONFIG_USBHOST_MAX_EXTHUBS]; +#endif + struct usbh_hubport roothub_parent_port; + usb_slist_t hub_event_head; + usb_slist_t hub_class_head; + usb_osal_sem_t hub_event_wait; + usb_osal_thread_t hub_thread; + usb_osal_mq_t hub_mq; + void *priv; /* private data, usb host */ + int (*hub_open)(struct usbh_hub *hub); + void (*hub_close)(struct usbh_hub *hub); + int (*root_open)(struct usbh_hub *hub); + USB_MEM_ALIGNX uint8_t ep0_request_buffer[CONFIG_USBHOST_REQUEST_BUFFER_LEN]; + USB_MEM_ALIGNX struct usb_setup_packet g_setup[CONFIG_USBHOST_MAX_EXTHUBS + 1][CONFIG_USBHOST_MAX_EHPORTS]; +}; + +/** + * Get USB transaction translator + * + * @v hport Hub port of USB device + * @ret port Transaction translator port, or NULL + */ +struct usbh_hubport *usbh_transaction_translator ( struct usbh_hubport *hport ); +/** + * Get USB route string + * + * @v hport Hub Port of USB device + * @ret route USB route string + */ +unsigned int usbh_route_string ( struct usbh_hubport *hport ); + +static inline struct usbh_bus* usbh_get_bus_of_port(struct usbh_hubport *hport) +{ + USB_ASSERT(hport && hport->parent); + return hport->parent->usb; +} + +static inline struct usbh_hub *usbh_get_roothub_of_port(struct usbh_hubport *hport) +{ + return &(usbh_get_bus_of_port(hport)->roothub); +} + +struct usbh_bus* usbh_get_bus_of_index(uint8_t usb); + +/** + * Get USB root hub port + * + * @v hport Hub port of USB device + * @ret port Root hub port + */ +struct usbh_hubport * usbh_root_hub_port ( struct usbh_hubport *hport ); + +int usbh_initialize(uint32_t id, struct usbh_bus *usb); +struct usbh_hubport *usbh_find_hubport(uint32_t id, uint8_t dev_addr); +void *usbh_find_class_instance(const char *devname); int lsusb(int argc, char **argv); + #ifdef __cplusplus } #endif diff --git a/third-party/cherryusb/docs/Makefile b/third-party/cherryusb/docs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d0c3cbf1020d5c292abdedf27627c6abe25e2293 --- /dev/null +++ b/third-party/cherryusb/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/third-party/cherryusb/docs/assets/usb_outline.png b/third-party/cherryusb/docs/assets/usb_outline.png new file mode 100644 index 0000000000000000000000000000000000000000..4414d92225941c5fce5dc0d7c5d6b0f3959b02ec Binary files /dev/null and b/third-party/cherryusb/docs/assets/usb_outline.png differ diff --git a/third-party/cherryusb/docs/make.bat b/third-party/cherryusb/docs/make.bat new file mode 100644 index 0000000000000000000000000000000000000000..9534b018135ed7d5caed6298980c55e8b1d2ec82 --- /dev/null +++ b/third-party/cherryusb/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/third-party/cherryusb/docs/requirements.txt b/third-party/cherryusb/docs/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..03cfbf106943cf2204059d7e16fd52f891e231ea --- /dev/null +++ b/third-party/cherryusb/docs/requirements.txt @@ -0,0 +1,9 @@ +# markdown suport +recommonmark +# markdown table suport +sphinx-markdown-tables + +# theme default rtd + +# crate-docs-theme +sphinx-rtd-theme \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/api/api_common.rst b/third-party/cherryusb/docs/source/api/api_common.rst new file mode 100644 index 0000000000000000000000000000000000000000..3c4653d93c97464c4fc599ec83ef60b487c1457f --- /dev/null +++ b/third-party/cherryusb/docs/source/api/api_common.rst @@ -0,0 +1,48 @@ +其他 +========================= + +usb_malloc +"""""""""""""""""""""""""""""""""""" + +``usb_malloc`` 用来申请内存。 + +.. code-block:: C + + void *usb_malloc(size_t size); + +- **size** 要申请的内存大小 +- **return** 申请的内存地址 + +usb_free +"""""""""""""""""""""""""""""""""""" + +``usb_free`` 用来释放申请的内存。 + +.. code-block:: C + + void usb_free(void *ptr); + +- **ptr** 要释放的内存地址 + +usb_iomalloc +"""""""""""""""""""""""""""""""""""" + +``usb_iomalloc`` 用来申请内存,并按照 `CONFIG_DCACHE_LINE_SIZE` 对齐,一般使用到 dcache 和 dma 需要对齐操作的时候使用。 + +.. code-block:: C + + void *usb_iomalloc(size_t size); + +- **size** 要申请的内存大小 +- **return** 申请的内存地址 + +usb_iofree +"""""""""""""""""""""""""""""""""""" + +``usb_iofree`` 用来释放申请的内存。 + +.. code-block:: C + + void usb_iofree(void *ptr); + +- **ptr** 要释放的内存地址 diff --git a/third-party/cherryusb/docs/source/api/api_config.rst b/third-party/cherryusb/docs/source/api/api_config.rst new file mode 100644 index 0000000000000000000000000000000000000000..836d3d85cb8c04234fefaf2bfa08c12436bfea66 --- /dev/null +++ b/third-party/cherryusb/docs/source/api/api_config.rst @@ -0,0 +1,11 @@ +USB CONFIG 宏 +========================= + +通用 CONFIG 宏 +--------------------- + +设备相关 CONFIG 宏 +--------------------- + +主机相关 CONFIG 宏 +--------------------- diff --git a/third-party/cherryusb/docs/source/api/api_device.rst b/third-party/cherryusb/docs/source/api/api_device.rst new file mode 100644 index 0000000000000000000000000000000000000000..7b5233cd88fb31cda247ca9cf1fdba25d842677d --- /dev/null +++ b/third-party/cherryusb/docs/source/api/api_device.rst @@ -0,0 +1,489 @@ +设备协议栈 +========================= + +设备协议栈主要负责枚举和驱动加载,枚举这边就不说了,驱动加载,也就是接口驱动加载,主要是依靠 `usbd_add_interface` 函数,记录传入的接口驱动保存到链表中,当主机进行类请求时就可以查找链表进行访问了。 +在调用 `usbd_desc_register` 以后需要进行接口注册和端点注册,口诀如下: + +- 有多少个接口就调用多少次 `usbd_add_interface`,参数填相关 `xxx_init_intf`, 如果没有支持的,手动创建一个填入 +- 有多少个端点就调用多少次 `usbd_add_endpoint`,当中断完成时,会调用到注册的端点回调中。 + +CORE +----------------- + +端点结构体 +"""""""""""""""""""""""""""""""""""" + +端点结构体主要用于注册不同端点地址的中断完成回调函数。 + +.. code-block:: C + + struct usbd_endpoint { + uint8_t ep_addr; + usbd_endpoint_callback ep_cb; + }; + +- **list** 端点的链表节点 +- **ep_addr** 端点地址(带方向) +- **ep_cb** 端点完成中断回调函数。 + +.. note:: 总结一句话:in 回调函数等价于 dma 发送完成中断回调函数;out 回调函数等价于 dma 接收完成中断回调函数 + +接口结构体 +"""""""""""""""""""""""""""""""""""" + +接口结构体主要用于注册不同类设备除了标准设备请求外的其他请求,包括类设备请求、厂商设备请求和自定义设备请求。以及协议栈中的相关通知回调函数。 + +.. code-block:: C + + struct usbd_interface { + usb_slist_t list; + usbd_request_handler class_interface_handler; + usbd_request_handler class_endpoint_handler; + usbd_request_handler vendor_handler; + usbd_notify_handler notify_handler; + const uint8_t *hid_report_descriptor; + uint32_t hid_report_descriptor_len; + uint8_t intf_num; + }; + +- **list** 接口的链表节点 +- **class_interface_handler** class setup 请求回调函数,接收者为接口 +- **class_endpoint_handler** class setup 请求回调函数,接收者为端点 +- **vendor_handler** vendor setup 请求回调函数 +- **notify_handler** 中断标志、协议栈相关状态回调函数 +- **hid_report_descriptor** hid 报告描述符 +- **hid_report_descriptor_len** hid 报告描述符长度 +- **intf_num** 当前接口偏移 +- **ep_list** 端点的链表节点 + +usbd_desc_register +"""""""""""""""""""""""""""""""""""" + +``usbd_desc_register`` 用来注册 USB 描述符,描述符种类包括:设备描述符、配置描述符(包含配置描述符、接口描述符、class 类描述符、端点描述符)、字符串描述符、设备限定描述符。 + +.. code-block:: C + + void usbd_desc_register(const uint8_t *desc); + +- **desc** 描述符的句柄 + +usbd_msosv1_desc_register +"""""""""""""""""""""""""""""""""""" + +``usbd_msosv1_desc_register`` 用来注册一个 WINUSB 1.0 描述符。 + +.. code-block:: C + + void usbd_msosv1_desc_register(struct usb_msosv1_descriptor *desc); + +- **desc** 描述符句柄 + +usbd_msosv2_desc_register +"""""""""""""""""""""""""""""""""""" + +``usbd_msosv2_desc_register`` 用来注册一个 WINUSB 2.0 描述符。 + +.. code-block:: C + + void usbd_msosv2_desc_register(struct usb_msosv2_descriptor *desc); + +- **desc** 描述符句柄 + +usbd_bos_desc_register +"""""""""""""""""""""""""""""""""""" + +``usbd_bos_desc_register`` 用来注册一个 BOS 描述符, USB 2.1 版本以上必须注册。 + +.. code-block:: C + + void usbd_bos_desc_register(struct usb_bos_descriptor *desc); + +- **desc** 描述符句柄 + +usbd_add_interface +"""""""""""""""""""""""""""""""""""" + +``usbd_add_interface`` 添加一个接口驱动。 + +.. code-block:: C + + void usbd_add_interface(struct usbd_interface *intf); + +- **intf** 接口驱动句柄,通常从不同 class 的 `xxx_init_intf` 函数获取 + +usbd_add_endpoint +"""""""""""""""""""""""""""""""""""" + +``usbd_add_endpoint`` 添加一个端点中断完成回调函数。 + +.. code-block:: C + + void usbd_add_endpoint(struct usbd_endpoint *ep);; + +- **ep** 端点句柄 + +usb_device_is_configured +"""""""""""""""""""""""""""""""""""" + +``usb_device_is_configured`` 用来检查 USB 设备是否被配置(枚举)。 + +.. code-block:: C + + bool usb_device_is_configured(void); + +- **return** 配置状态, 0 表示未配置, 1 表示配置成功 + +usbd_configure_done_callback +"""""""""""""""""""""""""""""""""""" + +``usbd_configure_done_callback`` 在执行 set_configuration 命令后触发,表示配置完成,用户需要实现该函数, **此函数一般用作启动第一次数据接收**,如果没有使用到 out 端点,则函数为空即可。 + +.. code-block:: C + + bool usbd_configure_done_callback(void); + +.. warning:: msc 端点不需要在该函数中手动启动,协议栈会自动启动第一次接收 + +usbd_initialize +"""""""""""""""""""""""""""""""""""" + +``usbd_initialize`` 用来初始化 usb device 寄存器配置、usb 时钟、中断等,需要注意,此函数必须在所有列出的 API 最后。 + +.. code-block:: C + + int usbd_initialize(void); + +CDC ACM +----------------- + +usbd_cdc_acm_init_intf +"""""""""""""""""""""""""""""""""""" + +``usbd_cdc_acm_init_intf`` 用来初始化 USB CDC ACM 类接口,并实现该接口相关的函数。 + +- ``cdc_acm_class_interface_request_handler`` 用来处理 USB CDC ACM 类 Setup 请求。 +- ``cdc_notify_handler`` 用来处理 USB CDC 其他中断回调函数。 + +.. code-block:: C + + struct usbd_interface *usbd_cdc_acm_init_intf(struct usbd_interface *intf); + +- **return** 接口句柄 + +usbd_cdc_acm_set_line_coding +"""""""""""""""""""""""""""""""""""" + +``usbd_cdc_acm_set_line_coding`` 用来对串口进行配置,如果仅使用 USB 而不用 串口,该接口不用用户实现,使用默认。 + +.. code-block:: C + + void usbd_cdc_acm_set_line_coding(uint8_t intf, struct cdc_line_coding *line_coding); + +- **intf** 控制接口号 +- **line_coding** 串口配置 + +usbd_cdc_acm_get_line_coding +"""""""""""""""""""""""""""""""""""" + +``usbd_cdc_acm_get_line_coding`` 用来获取串口进行配置,如果仅使用 USB 而不用 串口,该接口不用用户实现,使用默认。 + +.. code-block:: C + + void usbd_cdc_acm_get_line_coding(uint8_t intf, struct cdc_line_coding *line_coding); + +- **intf** 控制接口号 +- **line_coding** 串口配置 + +usbd_cdc_acm_set_dtr +"""""""""""""""""""""""""""""""""""" + +``usbd_cdc_acm_set_dtr`` 用来控制串口 DTR 。如果仅使用 USB 而不用 串口,该接口不用用户实现,使用默认。 + +.. code-block:: C + + void usbd_cdc_acm_set_dtr(uint8_t intf, bool dtr); + +- **intf** 控制接口号 +- **dtr** dtr 为1表示拉低电平,为0表示拉高电平 + +usbd_cdc_acm_set_rts +"""""""""""""""""""""""""""""""""""" + +``usbd_cdc_acm_set_rts`` 用来控制串口 RTS 。如果仅使用 USB 而不用 串口,该接口不用用户实现,使用默认。 + +.. code-block:: C + + void usbd_cdc_acm_set_rts(uint8_t intf, bool rts); + +- **intf** 控制接口号 +- **rts** rts 为1表示拉低电平,为0表示拉高电平 + +CDC_ACM_DESCRIPTOR_INIT +"""""""""""""""""""""""""""""""""""" + +``CDC_ACM_DESCRIPTOR_INIT`` 配置了默认的 cdc acm 需要的描述符以及参数,方便用户使用。总长度为 `CDC_ACM_DESCRIPTOR_LEN` 。 + +.. code-block:: C + + CDC_ACM_DESCRIPTOR_INIT(bFirstInterface, int_ep, out_ep, in_ep, str_idx); + +- **bFirstInterface** 表示该 cdc acm 第一个接口所在所有接口的偏移 +- **int_ep** 表示中断端点地址(带方向) +- **out_ep** 表示 bulk out 端点地址(带方向) +- **in_ep** 表示 bulk in 端点地址(带方向) +- **str_idx** 控制接口对应的字符串 id + +HID +----------------- + +usbd_hid_init_intf +"""""""""""""""""""""""""""""""""""" + +``usbd_hid_init_intf`` 用来初始化 USB HID 类接口,并实现该接口相关的函数: + +- ``hid_class_interface_request_handler`` 用来处理 USB HID 类的 Setup 请求。 +- ``hid_notify_handler`` 用来处理 USB HID 其他中断回调函数。 + +.. code-block:: C + + struct usbd_interface *usbd_hid_init_intf(struct usbd_interface *intf, const uint8_t *desc, uint32_t desc_len); + +- **desc** 报告描述符 +- **desc_len** 报告描述符长度 + +MSC +----------------- + +usbd_msc_init_intf +"""""""""""""""""""""""""""""""""""" +``usbd_msc_init_intf`` 用来初始化 MSC 类接口,并实现该接口相关函数,并且注册端点回调函数。(因为 msc bot 协议是固定的,所以不需要用于实现,因此端点回调函数自然不需要用户实现)。 + +- ``msc_storage_class_interface_request_handler`` 用于处理 USB MSC Setup 中断请求。 +- ``msc_storage_notify_handler`` 用于实现 USB MSC 其他中断回调函数。 + +- ``mass_storage_bulk_out`` 用于处理 USB MSC 端点 out 中断。 +- ``mass_storage_bulk_in`` 用于处理 USB MSC 端点 in 中断。 + +.. code-block:: C + + struct usbd_interface *usbd_msc_init_intf(struct usbd_interface *intf, const uint8_t out_ep, const uint8_t in_ep); + +- **out_ep** out 端点地址 +- **in_ep** in 端点地址 + +usbd_msc_get_cap +"""""""""""""""""""""""""""""""""""" + +``usbd_msc_get_cap`` 用来获取存储器的 lun、扇区个数和每个扇区大小。用户必须实现该函数。 + +.. code-block:: C + + void usbd_msc_get_cap(uint8_t lun, uint32_t *block_num, uint16_t *block_size); + +- **lun** 存储逻辑单元,暂时无用,默认支持一个 +- **block_num** 存储扇区个数 +- **block_size** 存储扇区大小 + +usbd_msc_sector_read +"""""""""""""""""""""""""""""""""""" + +``usbd_msc_sector_read`` 用来对存储器某个扇区开始的地址进行数据读取。用户必须实现该函数。 + +.. code-block:: C + + int usbd_msc_sector_read(uint32_t sector, uint8_t *buffer, uint32_t length); + +- **sector** 扇区偏移 +- **buffer** 存储读取的数据的指针 +- **length** 读取长度,当前为1个扇区的大小 + + +usbd_msc_sector_write +"""""""""""""""""""""""""""""""""""" + +``usbd_msc_sector_write`` 用来对存储器某个扇区开始写入数据。用户必须实现该函数。 + +.. code-block:: C + + int usbd_msc_sector_write(uint32_t sector, uint8_t *buffer, uint32_t length); + +- **sector** 扇区偏移 +- **buffer** 写入数据指针 +- **length** 写入长度,当前为1个扇区的大小 + +UAC +----------------- + +usbd_audio_init_intf +"""""""""""""""""""""""""""""""""""" +``usbd_audio_init_intf`` 用来初始化 USB Audio 类接口,并实现该接口相关的函数: + +- ``audio_class_interface_request_handler`` 用于处理 USB Audio Setup 接口接收者中断请求。 +- ``audio_class_endpoint_request_handler`` 用于处理 USB Audio Setup 端点接收者中断请求。 +- ``audio_notify_handler`` 用于实现 USB Audio 其他中断回调函数。 + +.. code-block:: C + + struct usbd_interface *usbd_audio_init_intf(struct usbd_interface *intf); + +- **class** 类的句柄 +- **intf** 接口句柄 + +usbd_audio_open +"""""""""""""""""""""""""""""""""""" + +``usbd_audio_open`` 用来开启音频数据传输。 + +.. code-block:: C + + void usbd_audio_open(uint8_t intf); + +- **intf** 开启的接口号 + +usbd_audio_close +"""""""""""""""""""""""""""""""""""" + +``usbd_audio_close`` 用来关闭音频数据传输。 + +.. code-block:: C + + void usbd_audio_close(uint8_t intf); + +- **intf** 关闭的接口号 + +usbd_audio_add_entity +"""""""""""""""""""""""""""""""""""" + +``usbd_audio_add_entity`` 用来添加 unit 相关控制,例如 feature unit、clock source。 + +.. code-block:: C + + void usbd_audio_add_entity(uint8_t entity_id, uint16_t bDescriptorSubtype); + +- **entity_id** 要添加的 unit id +- **bDescriptorSubtype** entity_id 的描述符子类型 + +usbd_audio_set_mute +"""""""""""""""""""""""""""""""""""" + +``usbd_audio_set_mute`` 用来设置静音。 + +.. code-block:: C + + void usbd_audio_set_mute(uint8_t ch, uint8_t enable); + +- **ch** 要设置静音的通道 +- **enable** 为1 表示静音,0相反 + +usbd_audio_set_volume +"""""""""""""""""""""""""""""""""""" + +``usbd_audio_set_volume`` 用来设置音量。 + +.. code-block:: C + + void usbd_audio_set_volume(uint8_t ch, float dB); + +- **ch** 要设置音量的通道 +- **dB** 要设置音量的分贝,其中 UAC1.0范围从 -127 ~ +127dB,UAC2.0 从 0 ~ 256dB + +usbd_audio_set_sampling_freq +"""""""""""""""""""""""""""""""""""" + +``usbd_audio_set_sampling_freq`` 用来设置设备上音频模块的采样率 + +.. code-block:: C + + void usbd_audio_set_sampling_freq(uint8_t ep_ch, uint32_t sampling_freq); + +- **ch** 要设置采样率的端点或者通道,UAC1.0为端点,UAC2.0 为通道 +- **dB** 要设置的采样率 + +usbd_audio_get_sampling_freq_table +"""""""""""""""""""""""""""""""""""" + +``usbd_audio_get_sampling_freq_table`` 用来获取支持的采样率列表,如果函数没有实现,则使用默认采样率列表。 + +.. code-block:: C + + void usbd_audio_get_sampling_freq_table(uint8_t **sampling_freq_table); + +- **sampling_freq_table** 采样率列表地址,格式参考默认采样率列表 + +usbd_audio_set_pitch +"""""""""""""""""""""""""""""""""""" + +``usbd_audio_set_pitch`` 用来设置音频音调,仅 UAC1.0 有这功能。 + +.. code-block:: C + + void usbd_audio_set_pitch(uint8_t ep, bool enable); + +- **ep** 要设置音调的端点 +- **enable** 开启或关闭音调 + +UVC +----------------- + +usbd_video_init_intf +"""""""""""""""""""""""""""""""""""" +``usbd_video_init_intf`` 用来初始化 USB Video 类接口,并实现该接口相关的函数: + +- ``video_class_interface_request_handler`` 用于处理 USB Video Setup 中断请求。 +- ``video_notify_handler`` 用于实现 USB Video 其他中断回调函数。 + +.. code-block:: C + + struct usbd_interface *usbd_video_init_intf(struct usbd_interface *intf, + uint32_t dwFrameInterval, + uint32_t dwMaxVideoFrameSize, + uint32_t dwMaxPayloadTransferSize); + +- **class** 类的句柄 +- **intf** 接口句柄 + +usbd_video_open +"""""""""""""""""""""""""""""""""""" + +``usbd_video_open`` 用来开启视频数据传输。 + +.. code-block:: C + + void usbd_video_open(uint8_t intf); + +- **intf** 开启的接口号 + +usbd_video_close +"""""""""""""""""""""""""""""""""""" + +``usbd_video_close`` 用来关闭视频数据传输。 + +.. code-block:: C + + void usbd_video_open(uint8_t intf); + +- **intf** 关闭的接口号 + +usbd_video_mjpeg_payload_fill +"""""""""""""""""""""""""""""""""""" + +``usbd_video_mjpeg_payload_fill`` 用来填充 mjpeg 到新的 buffer中,其中会对 mjpeg 数据按帧进行切分,切分大小由 ``dwMaxPayloadTransferSize`` 控制,并添加头部信息,当前头部字节数为 2。头部信息见 ``struct video_mjpeg_payload_header`` + +.. code-block:: C + + uint32_t usbd_video_mjpeg_payload_fill(uint8_t *input, uint32_t input_len, uint8_t *output, uint32_t *out_len); + +- **input** mjpeg 格式的数据包,从 FFD8~FFD9结束 +- **input_len** mjpeg数据包大小 +- **output** 输出缓冲区 +- **out_len** 输出实际要发送的长度大小 +- **return** 返回 usb 按照 ``dwMaxPayloadTransferSize`` 大小要发多少帧 + +DFU +----------------- + +PRINTER +----------------- + +MTP +----------------- \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/api/api_host.rst b/third-party/cherryusb/docs/source/api/api_host.rst new file mode 100644 index 0000000000000000000000000000000000000000..979aaa8e91ab0abe7e28ae4447b76c2277aabb3b --- /dev/null +++ b/third-party/cherryusb/docs/source/api/api_host.rst @@ -0,0 +1,155 @@ +主机协议栈 +========================= + +关于主机协议栈中结构体的命名、分类、成员组成,参考下面这两张图: + +.. figure:: img/api_host1.png +.. figure:: img/api_host2.png + +CORE +----------------- + +CLASS 驱动信息结构体 +"""""""""""""""""""""""""""""""""""" + +.. code-block:: C + + struct usbh_class_info { + uint8_t match_flags; /* Used for product specific matches; range is inclusive */ + uint8_t class; /* Base device class code */ + uint8_t subclass; /* Sub-class, depends on base class. Eg. */ + uint8_t protocol; /* Protocol, depends on base class. Eg. */ + uint16_t vid; /* Vendor ID (for vendor/product specific devices) */ + uint16_t pid; /* Product ID (for vendor/product specific devices) */ + const struct usbh_class_driver *class_driver; + }; + +端点结构体 +"""""""""""""""""""""""""""""""""""" + +.. code-block:: C + + struct usbh_endpoint { + struct usb_endpoint_descriptor ep_desc; + }; + +接口备用结构体 +"""""""""""""""""""""""""""""""""""" + +.. code-block:: C + + struct usbh_interface_altsetting { + struct usb_interface_descriptor intf_desc; + struct usbh_endpoint ep[CONFIG_USBHOST_MAX_ENDPOINTS]; + }; + +接口结构体 +"""""""""""""""""""""""""""""""""""" + +.. code-block:: C + + struct usbh_interface { + struct usbh_interface_altsetting altsetting[CONFIG_USBHOST_MAX_INTF_ALTSETTINGS]; + uint8_t altsetting_num; + char devname[CONFIG_USBHOST_DEV_NAMELEN]; + struct usbh_class_driver *class_driver; + void *priv; + }; + +配置结构体 +"""""""""""""""""""""""""""""""""""" + +.. code-block:: C + + struct usbh_configuration { + struct usb_configuration_descriptor config_desc; + struct usbh_interface intf[CONFIG_USBHOST_MAX_INTERFACES]; + }; + +hubport 结构体 +"""""""""""""""""""""""""""""""""""" + +.. code-block:: C + + struct usbh_hubport { + bool connected; /* True: device connected; false: disconnected */ + uint8_t port; /* Hub port index */ + uint8_t dev_addr; /* device address */ + uint8_t speed; /* device speed */ + usbh_pipe_t ep0; /* control ep pipe info */ + struct usb_device_descriptor device_desc; + struct usbh_configuration config; + const char *iManufacturer; + const char *iProduct; + const char *iSerialNumber; + #if 0 + uint8_t* raw_config_desc; + #endif + USB_MEM_ALIGNX struct usb_setup_packet setup; + struct usbh_hub *parent; + }; + +hub 结构体 +"""""""""""""""""""""""""""""""""""" + +.. code-block:: C + + struct usbh_hub { + usb_slist_t list; + bool connected; + bool is_roothub; + uint8_t index; + uint8_t hub_addr; + usbh_pipe_t intin; + USB_MEM_ALIGNX uint8_t int_buffer[1]; + struct usbh_urb intin_urb; + struct usb_hub_descriptor hub_desc; + struct usbh_hubport child[CONFIG_USBHOST_MAX_EHPORTS]; + struct usbh_hubport *parent; + usb_slist_t hub_event_list; + }; + +usbh_initialize +"""""""""""""""""""""""""""""""""""" + +``usbh_initialize`` 用来初始化 usb 主机协议栈,包括:初始化 usb 主机控制器,创建 roothub 设备,创建 hub 检测线程。 + +.. code-block:: C + + int usbh_initialize(void); + +usbh_find_class_instance +"""""""""""""""""""""""""""""""""""" + +``usbh_find_class_instance`` 根据注册的 class 名称查找对应的 class 结构体句柄。 + +.. code-block:: C + + void *usbh_find_class_instance(const char *devname); + +- **devname** class 名称 +- **return** class 结构体句柄 + +lsusb +"""""""""""""""""""""""""""""""""""" + +``lsusb`` 用来查看和操作 hub 上的设备信息。需要借助 shell 插件使用。 + +.. code-block:: C + + int lsusb(int argc, char **argv); + +CDC ACM +----------------- + +HID +----------------- + +MSC +----------------- + +RNDIS +----------------- + +PRINTER +----------------- \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/api/api_port.rst b/third-party/cherryusb/docs/source/api/api_port.rst new file mode 100644 index 0000000000000000000000000000000000000000..95be593d4b96e5ba675b058d695ebae8c8b62bff --- /dev/null +++ b/third-party/cherryusb/docs/source/api/api_port.rst @@ -0,0 +1,281 @@ +Porting +========================= + +device controller(dcd) +------------------------- + +usb_dc_init +"""""""""""""""""""""""""""""""""""" + +``usb_dc_init`` 用于初始化 usb device controller 寄存器,设置 usb 引脚、时钟、中断等等。 **此函数不对用户开放**。 + +.. code-block:: C + + int usb_dc_init(void); + +- **return** 返回 0 表示正确,其他表示错误 + +usb_dc_deinit +"""""""""""""""""""""""""""""""""""" + +``usb_dc_deinit`` 用于反初始化 usb device controller 寄存器。 **此函数不对用户开放**。 + +.. code-block:: C + + int usb_dc_deinit(void); + +- **return** 返回 0 表示正确,其他表示错误 + +usbd_set_address +"""""""""""""""""""""""""""""""""""" + +``usbd_set_address`` 设置设备地址。 **此函数不对用户开放**。 + +.. code-block:: C + + int usbd_set_address(const uint8_t addr); + +- **return** 返回 0 表示正确,其他表示错误 + +usbd_ep_open +"""""""""""""""""""""""""""""""""""" + +``usbd_ep_open`` 设置端点的属性,开启对应端点的中断。 **此函数不对用户开放**。 + +.. code-block:: C + + int usbd_ep_open(const struct usbd_endpoint_cfg *ep_cfg); + +- **return** 返回 0 表示正确,其他表示错误 + +usbd_ep_close +"""""""""""""""""""""""""""""""""""" + +``usbd_ep_close`` 关闭端点。 **此函数不对用户开放**。 + +.. code-block:: C + + int usbd_ep_close(const uint8_t ep); + +- **event** +- **return** 返回 0 表示正确,其他表示错误 + +usbd_ep_set_stall +"""""""""""""""""""""""""""""""""""" + +``usbd_ep_set_stall`` 将端点设置成 stall 状态并发送 stall 握手包。 **此函数对用户开放**。 + +.. code-block:: C + + int usbd_ep_set_stall(const uint8_t ep); + +- **ep** 端点地址 +- **return** 返回 0 表示正确,其他表示错误 + +usbd_ep_clear_stall +"""""""""""""""""""""""""""""""""""" + +``usbd_ep_clear_stall`` 清除端点的 stall 状态。 **此函数不对用户开放**。 + +.. code-block:: C + + int usbd_ep_clear_stall(const uint8_t ep); + +- **ep** 端点地址 +- **return** 返回 0 表示正确,其他表示错误 + +usbd_ep_is_stalled +"""""""""""""""""""""""""""""""""""" + +``usbd_ep_is_stalled`` 读取当前端点的 stall 状态。 **此函数不对用户开放**。 + +.. code-block:: C + + int usbd_ep_is_stalled(const uint8_t ep, uint8_t *stalled); + +- **ep** 端点地址 +- **return** 返回 1 表示 stalled,0 表示没有 stall + +usbd_ep_start_write +"""""""""""""""""""""""""""""""""""" + +``usbd_ep_start_write`` 启动端点发送,发送完成以后,会调用注册的 in 端点传输完成中断回调函数。该函数为异步发送。 **此函数对用户开放**。 + +.. code-block:: C + + int usbd_ep_start_write(const uint8_t ep, const uint8_t *data, uint32_t data_len); + +- **ep** in 端点地址 +- **data** 发送数据缓冲区 +- **data_len** 发送长度,原则上无限长,推荐 16K 字节以内 +- **return** 返回 0 表示正确,其他表示错误 + +usbd_ep_start_read +"""""""""""""""""""""""""""""""""""" + +``usbd_ep_start_read`` 启动端点接收,接收完成以后,会调用注册的 out 端点传输完成中断回调函数。该函数为异步接收。 **此函数对用户开放**。 + +.. code-block:: C + + int usbd_ep_start_read(const uint8_t ep, uint8_t *data, uint32_t data_len); + +- **ep** out 端点地址 +- **data** 接收数据缓冲区 +- **data_len** 接收长度,原则上无限长,推荐 16K 字节以内,并且推荐是最大包长的整数倍 +- **return** 返回 0 表示正确,其他表示错误 + +.. note:: 启动接收以后,以下两种情况,会进入传输完成中断:1、最后一包为短包;2、接收总长度等于 data_len + +host controller(hcd) +------------------------ + +usb_hc_init +"""""""""""""""""""""""""""""""""""" + +``usb_hc_init`` 用于初始化 usb host controller 寄存器,设置 usb 引脚、时钟、中断等等。 **此函数不对用户开放**。 + +.. code-block:: C + + int usb_hc_init(void); + +- **return** 返回 0 表示正确,其他表示错误 + +usbh_roothub_control +"""""""""""""""""""""""""""""""""""" + +``usbh_roothub_control`` 用来对 roothub 发起请求, **此函数不对用户开放**。 + +.. code-block:: C + + int usbh_roothub_control(struct usb_setup_packet *setup, uint8_t *buf); + +- **setup** 请求 +- **buf** 接收缓冲区 +- **return** 返回 0 表示正确,其他表示错误 + +usbh_ep0_pipe_reconfigure +"""""""""""""""""""""""""""""""""""" + +``usbh_ep0_pipe_reconfigure`` 重新设置端点 0 的 pipe 属性。 **此函数不对用户开放**。 + +.. code-block:: C + + int usbh_ep0_pipe_reconfigure(usbh_pipe_t pipe, uint8_t dev_addr, uint8_t ep_mps, uint8_t speed); + +- **pipe** pipe 句柄 +- **dev_addr** 端点所在设备地址 +- **ep_mps** 端点最大包长 +- **speed** 端点所在设备的速度 +- **return** 返回 0 表示正确,其他表示错误 + +usbh_pipe_alloc +"""""""""""""""""""""""""""""""""""" + +``usbh_pipe_alloc`` 为端点分配 pipe。 **此函数不对用户开放**。 + +.. code-block:: C + + int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg); + +- **pipe** pipe 句柄 +- **ep_cfg** 端点初始化需要的一些信息 +- **return** 返回 0 表示正确,其他表示错误 + +usbh_pipe_free +"""""""""""""""""""""""""""""""""""" + +``usbh_pipe_free`` 释放端点的一些属性。 **此函数不对用户开放**。 + +.. code-block:: C + + int usbh_pipe_free(usbh_pipe_t pipe); + +- **pipe** 端点信息 +- **return** 返回 0 表示正确,其他表示错误 + +usbh_submit_urb +"""""""""""""""""""""""""""""""""""" + +``usbh_submit_urb`` 对某个地址上的端点进行数据请求。 **此函数对用户开放**。 + +.. code-block:: C + + int usbh_submit_urb(struct usbh_urb *urb); + +- **urb** usb 请求块 +- **return** 返回 0 表示正确,其他表示错误 + +其中, `urb` 结构体信息如下: + +.. code-block:: C + + struct usbh_urb { + usbh_pipe_t pipe; + struct usb_setup_packet *setup; + uint8_t *transfer_buffer; + uint32_t transfer_buffer_length; + int transfer_flags; + uint32_t actual_length; + uint32_t timeout; + int errorcode; + uint32_t num_of_iso_packets; + usbh_complete_callback_t complete; + void *arg; + struct usbh_iso_frame_packet iso_packet[]; + }; + +- **pipe** 端点对应的 pipe 句柄 +- **setup** setup 请求缓冲区,端点0使用 +- **transfer_buffer** 传输的数据缓冲区 +- **transfer_buffer_length** 传输长度 +- **transfer_flags** 传输时携带的 flag +- **actual_length** 实际传输长度 +- **timeout** 传输超时时间,为 0 该函数则为非阻塞,可在中断中使用 +- **errorcode** 错误码 +- **num_of_iso_packets** iso 帧或者微帧个数 +- **complete** 传输完成回调函数 +- **arg** 传输完成时携带的参数 +- **iso_packet** iso 数据包 + +`errorcode` 可以返回以下值: + +.. list-table:: + :widths: 30 30 + :header-rows: 1 + + * - ERROR CODE + - desc + * - ENOMEM + - 内存不足 + * - ENODEV + - 设备未连接 + * - EBUSY + - 当前数据发送或者接收还未完成 + * - ETIMEDOUT + - 数据发送或者接收超时 + * - EPERM + - 主机收到 STALL 包或者 BABBLE + * - EIO + - 数据传输错误 + * - EAGAIN + - 主机一直收到 NAK 包 + * - EPIPE + - 数据溢出 + * - ESHUTDOWN + - 设备断开,传输中止 + +其中 `iso_packet` 结构体信息如下: + +.. code-block:: C + + struct usbh_iso_frame_packet { + uint8_t *transfer_buffer; + uint32_t transfer_buffer_length; + uint32_t actual_length; + int errorcode; + }; + +- **transfer_buffer** 传输的数据缓冲区 +- **transfer_buffer_length** 传输长度 +- **actual_length** 实际传输长度 +- **errorcode** 错误码 \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/api/img/api_device1.png b/third-party/cherryusb/docs/source/api/img/api_device1.png new file mode 100644 index 0000000000000000000000000000000000000000..ba218b65631df49e19c024cad74ded7da33bf8e7 Binary files /dev/null and b/third-party/cherryusb/docs/source/api/img/api_device1.png differ diff --git a/third-party/cherryusb/docs/source/api/img/api_host1.png b/third-party/cherryusb/docs/source/api/img/api_host1.png new file mode 100644 index 0000000000000000000000000000000000000000..82932f50caa3f69bfa0bd4ab518d9326b3fc43a0 Binary files /dev/null and b/third-party/cherryusb/docs/source/api/img/api_host1.png differ diff --git a/third-party/cherryusb/docs/source/api/img/api_host2.png b/third-party/cherryusb/docs/source/api/img/api_host2.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6d60b87b1291cd0626ede7886bea4da0819d4c Binary files /dev/null and b/third-party/cherryusb/docs/source/api/img/api_host2.png differ diff --git a/third-party/cherryusb/docs/source/class/class_audio.rst b/third-party/cherryusb/docs/source/class/class_audio.rst new file mode 100644 index 0000000000000000000000000000000000000000..d1a9e2076dc4e57bf7df1239a1c0307acce5a8b8 --- /dev/null +++ b/third-party/cherryusb/docs/source/class/class_audio.rst @@ -0,0 +1,4 @@ +UAC +========================= + +参考官方 audio 相关 pdf \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/class/class_cdc.rst b/third-party/cherryusb/docs/source/class/class_cdc.rst new file mode 100644 index 0000000000000000000000000000000000000000..d3ed560f86b98e7e23f1e787489f96c6d649a523 --- /dev/null +++ b/third-party/cherryusb/docs/source/class/class_cdc.rst @@ -0,0 +1,4 @@ +CDC +========================= + +参考官方 cdc 相关 pdf \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/class/class_hid.rst b/third-party/cherryusb/docs/source/class/class_hid.rst new file mode 100644 index 0000000000000000000000000000000000000000..0f9ef13dcf591aa65abd2df99d901fd1242d3501 --- /dev/null +++ b/third-party/cherryusb/docs/source/class/class_hid.rst @@ -0,0 +1,4 @@ +HID +========================= + +参考官方 hid 相关 pdf \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/class/class_msc.rst b/third-party/cherryusb/docs/source/class/class_msc.rst new file mode 100644 index 0000000000000000000000000000000000000000..c01a359c7aab2f68542b97b603ffa6800a25b59c --- /dev/null +++ b/third-party/cherryusb/docs/source/class/class_msc.rst @@ -0,0 +1,4 @@ +MSC +========================= + +参考官方 msc 相关 pdf \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/class/class_video.rst b/third-party/cherryusb/docs/source/class/class_video.rst new file mode 100644 index 0000000000000000000000000000000000000000..cabe517334439745fcfbe5f40a7190fa364448d7 --- /dev/null +++ b/third-party/cherryusb/docs/source/class/class_video.rst @@ -0,0 +1,4 @@ +UVC +========================= + +参考官方 video 相关 pdf \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/class/winusb.rst b/third-party/cherryusb/docs/source/class/winusb.rst new file mode 100644 index 0000000000000000000000000000000000000000..8c74d3b75c60867e51c45ed924ab864627acf17f --- /dev/null +++ b/third-party/cherryusb/docs/source/class/winusb.rst @@ -0,0 +1,2 @@ +WINUSB +========================= diff --git a/third-party/cherryusb/docs/source/conf.py b/third-party/cherryusb/docs/source/conf.py new file mode 100644 index 0000000000000000000000000000000000000000..7896d6e8988ae26358e24db6b0a76ac147d440ae --- /dev/null +++ b/third-party/cherryusb/docs/source/conf.py @@ -0,0 +1,37 @@ +# Configuration file for the Sphinx documentation builder. + +# -- Project information + +project = 'CherryUSB' +copyright = '2022, sakumisu' +author = 'sakumisu' + +release = '0.8' +version = '0.8.0' + +# -- General configuration + +extensions = [ + 'sphinx.ext.duration', + 'sphinx.ext.doctest', + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.intersphinx', + 'recommonmark', + 'sphinx_markdown_tables' +] + +intersphinx_mapping = { +# 'python': ('https://docs.python.org/3/', None), +# 'sphinx': ('https://www.sphinx-doc.org/en/master/', None), +} +intersphinx_disabled_domains = ['std'] + +templates_path = ['_templates'] + +# -- Options for HTML output + +html_theme = 'sphinx_rtd_theme' + +# -- Options for EPUB output +epub_show_urls = 'footnote' diff --git a/third-party/cherryusb/docs/source/demo/audio_mic_speaker.rst b/third-party/cherryusb/docs/source/demo/audio_mic_speaker.rst new file mode 100644 index 0000000000000000000000000000000000000000..3c1d2ca9b3a813c63029c5c5274ce8990a27a5bb --- /dev/null +++ b/third-party/cherryusb/docs/source/demo/audio_mic_speaker.rst @@ -0,0 +1,43 @@ +USB 双通道麦克风和扬声器 +============================ + +软件实现 +------------ + +详细代码参考 `demo/audio_v1_mic_speaker_multichan_template.c` + +.. code-block:: C + + usbd_desc_register(audio_descriptor); + usbd_add_interface(usbd_audio_alloc_intf()); + usbd_add_interface(usbd_audio_alloc_intf()); + usbd_add_interface(usbd_audio_alloc_intf()); + usbd_add_endpoint(&audio_in_ep); + usbd_add_endpoint(&audio_out_ep); + + usbd_audio_add_entity(0x02, AUDIO_CONTROL_FEATURE_UNIT); + usbd_audio_add_entity(0x05, AUDIO_CONTROL_FEATURE_UNIT); + + usbd_initialize(); + +- 调用 `audio_init` 配置 audio 描述符并初始化 usb 硬件 +- 因为 麦克风+扬声器+控制需要 3 个接口,所以我们需要调用 `usbd_add_interface` 3 次 +- 默认描述符中开启了 mute 和 volume 的控制,所以需要注册对应的 entity,使用 `usbd_audio_add_entity` + +.. code-block:: C + + void usbd_audio_open(uint8_t intf) + { + } + void usbd_audio_close(uint8_t intf) + { + } + +- 当我们打开 PC 的音量图标,或者音乐播放器、麦克风界面时,会调用到这两个接口,用于启动或者停止数据传输 + +.. code-block:: C + + usbd_ep_start_write(AUDIO_IN_EP, write_buffer, 2048); + +- 由于 audio 协议中没有应用层相关的协议,传输的只有音频的原始数据,所以直接调用 `usbd_ep_start_write` 即可,发送完成会进入完成中断 +- 由于扬声器需要使用 out 端点,所以需要在 `usbd_configure_done_callback` 中启动第一次接收,当然如果没有能力接收,可以不启动,在想启动的时候启动 \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/demo/cdc_acm.rst b/third-party/cherryusb/docs/source/demo/cdc_acm.rst new file mode 100644 index 0000000000000000000000000000000000000000..3f6629d2c7344bf732f643158ebdbd6ca0c30cdc --- /dev/null +++ b/third-party/cherryusb/docs/source/demo/cdc_acm.rst @@ -0,0 +1,78 @@ +USB 虚拟串口(无 UART 功能) +============================ + +USB 虚拟串口主要是借助 USB CDC ACM 类实现,将其模拟成一个 VCP 设备,当插在电脑上的时候,可以显示成一个串口设备。跟市面上的 USB2TTL模块的区别在于,虚拟串口仅仅只使用到了 USB ,没有与串口(UART外设)进行连动。 + +软件实现 +------------ + +详细代码参考 `demo/cdc_acm_template.c` + +.. code-block:: C + + usbd_desc_register(cdc_descriptor); + usbd_add_interface(usbd_cdc_acm_alloc_intf()); + usbd_add_interface(usbd_cdc_acm_alloc_intf()); + usbd_add_endpoint(&cdc_out_ep); + usbd_add_endpoint(&cdc_in_ep); + usbd_initialize(); + +- 调用 `cdc_acm_init` 配置 cdc acm 描述符并初始化 usb 硬件 +- 因为 cdc 有 2 个接口,所以我们需要调用 `usbd_add_interface` 2 次 + +.. code-block:: C + + void usbd_configure_done_callback(void) + { + /* setup first out ep read transfer */ + usbd_ep_start_read(CDC_OUT_EP, read_buffer, 2048); + } + + void usbd_cdc_acm_bulk_out(uint8_t ep, uint32_t nbytes) + { + USB_LOG_RAW("actual out len:%d\r\n", nbytes); + // for (int i = 0; i < 100; i++) { + // printf("%02x ", read_buffer[i]); + // } + // printf("\r\n"); + /* setup next out ep read transfer */ + usbd_ep_start_read(CDC_OUT_EP, read_buffer, 2048); + } + + void usbd_cdc_acm_bulk_in(uint8_t ep, uint32_t nbytes) + { + USB_LOG_RAW("actual in len:%d\r\n", nbytes); + + if ((nbytes % CDC_MAX_MPS) == 0 && nbytes) { + /* send zlp */ + usbd_ep_start_write(CDC_IN_EP, NULL, 0); + } else { + ep_tx_busy_flag = false; + } + } + + void usbd_cdc_acm_set_dtr(uint8_t intf, bool dtr) + { + if (dtr) { + dtr_enable = 1; + } else { + dtr_enable = 0; + } + } + + void cdc_acm_data_send_with_dtr_test(void) + { + if (dtr_enable) { + memset(&write_buffer[10], 'a', 2038); + ep_tx_busy_flag = true; + usbd_ep_start_write(CDC_IN_EP, write_buffer, 2048); + while (ep_tx_busy_flag) { + } + } + } + +- `usbd_cdc_acm_set_dtr` 函数是主机发送流控命令时的回调函数,这里我们使用 dtr ,当开启 dtr 时,启动发送 +- `usbd_configure_done_callback` 是枚举完成的回调函数,因为 cdc acm 有 out 端点,所以我们需要在这里启动第一次数据的接收,当然,如果你现在没有能力接收数据,可以不启动。 **数据长度需要是最大包长的整数倍**。 +- `usbd_cdc_acm_bulk_out` 是接收完成中断回调,我们在这里面启动下一次接收 +- `usbd_cdc_acm_bulk_in` 是发送完成中断回调,我们在这里检查发送长度是否是最大包长的整数,如果是,需要发送 zlp 包表示结束 +- 调用 `usbd_ep_start_write` 进行发送,需要注意,如果返回值小于0,不能执行下面的 while \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/demo/msc_ram.rst b/third-party/cherryusb/docs/source/demo/msc_ram.rst new file mode 100644 index 0000000000000000000000000000000000000000..3a97238dbd5dd0ddceeb00f8a74c44c360b05f44 --- /dev/null +++ b/third-party/cherryusb/docs/source/demo/msc_ram.rst @@ -0,0 +1,42 @@ +USB 模拟 U 盘 +============================ + +软件实现 +------------ + +详细代码参考 `demo/msc_ram_template.c` + +.. code-block:: C + + usbd_desc_register(msc_ram_descriptor); + usbd_add_interface(usbd_msc_alloc_intf(MSC_OUT_EP, MSC_IN_EP)); + + usbd_initialize(); + +- 调用 `msc_ram_init` 配置 msc 描述符并初始化 usb 硬件 +- 因为 msc 有1个接口,所以我们需要调用 `usbd_add_interface` 1次 +- msc 中的端点的数据流是协议栈这边管理,所以不需要用户注册端点的回调函数。同理 `usbd_configure_done_callback` 也不需要,为空即可 + +.. code-block:: C + + void usbd_msc_get_cap(uint8_t lun, uint32_t *block_num, uint16_t *block_size) + { + *block_num = 1000; //Pretend having so many buffer,not has actually. + *block_size = BLOCK_SIZE; + } + int usbd_msc_sector_read(uint32_t sector, uint8_t *buffer, uint32_t length) + { + return 0; + } + + int usbd_msc_sector_write(uint32_t sector, uint8_t *buffer, uint32_t length) + { + return 0; + } + +- 实现三个接口即可使用 msc,读写操作如果没有 os 则是在中断中 +- `CONFIG_USBDEV_MSC_BLOCK_SIZE` 可以为 512 的整数倍,更改此项,可以增加 msc 的读写速度,当然,也会消耗更多的 ram + + +.. note:: MSC 一般配合 rtos 使用,因为读写操作是阻塞的,放中断是不合适的, `CONFIG_USBDEV_MSC_THREAD` 则是使能 os 管理 + diff --git a/third-party/cherryusb/docs/source/demo/usb_video.rst b/third-party/cherryusb/docs/source/demo/usb_video.rst new file mode 100644 index 0000000000000000000000000000000000000000..0e9b25eaabb938766f9c175d862fc79e090f6b26 --- /dev/null +++ b/third-party/cherryusb/docs/source/demo/usb_video.rst @@ -0,0 +1,2 @@ +USB 摄像头 +============================ diff --git a/third-party/cherryusb/docs/source/index.rst b/third-party/cherryusb/docs/source/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..0bbb9fe8458e3030c706120abd13c23e32d3a636 --- /dev/null +++ b/third-party/cherryusb/docs/source/index.rst @@ -0,0 +1,96 @@ +.. CherryUSB 使用指南 documentation master file, created by + sphinx-quickstart on Thu Nov 21 10:50:33 2019. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +CherryUSB 使用指南 +====================================================== + +CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统的 USB 主从协议栈。同时 CherryUSB 具有以下优点: + +- 代码精简,并且内存占用极小,而且还可进一步的裁剪 +- 全面的 class 驱动,并且主从 class 驱动全部模板化,方便用户增加新的 class 驱动以及学习的时候查找规律 +- 可供用户使用的 API 非常少,并且分类清晰。从机:初始化 + 注册、命令回调类、数据收发类;主机:初始化 + 查找类、数据收发类 +- 树状化编程,代码层层递进,方便用户理清函数调用关系、枚举和 class 驱动加载过程 +- 标准化的 porting 接口,相同 ip 无需重写驱动,并且 porting 驱动也进行了模板化,方便用户新增 porting。 +- 主从收发接口的使用等价于 uart tx/rx dma 的使用,长度也没有限制 +- 能够达到 USB 硬件理论带宽 + +从机协议栈整体执行流程: + +.. figure:: usbdev.svg + +主机协议栈整体执行流程: + +.. figure:: usbhost.svg + +其他相关链接: + +- **CherryUSB 大纲** https://www.bilibili.com/video/BV1st4y1H7K2 +- **从机协议栈视频教程** https://www.bilibili.com/video/BV1Ef4y1t73d +- **主机协议栈视频教程** TODO +- **github** https://github.com/sakumisu/CherryUSB + +.. toctree:: + :maxdepth: 1 + :caption: 快速上手 + + quick_start/bl702 + quick_start/stm32 + quick_start/hpm + quick_start/es32 + quick_start/rt-thread/rtthread + quick_start/other_chip + +.. toctree:: + :maxdepth: 1 + :caption: USB 基本知识点 + + usb/usb2.0_basic + usb/usb3.0_basic + usb/usb_desc + usb/usb_request + usb/usb_enum + +.. toctree:: + :maxdepth: 1 + :caption: API 手册 + + api/api_device + api/api_host + api/api_port + api/api_common + api/api_config + +.. toctree:: + :maxdepth: 1 + :caption: Class 指南 + + class/class_cdc + class/class_hid + class/class_msc + class/class_audio + class/class_video + class/winusb + +.. toctree:: + :maxdepth: 1 + :caption: 基本例程 + + demo/cdc_acm + demo/msc_ram + demo/audio_mic_speaker + demo/usb_video + +.. toctree:: + :maxdepth: 1 + :caption: Porting 说明 + + porting + porting_usbip + +.. toctree:: + :maxdepth: 1 + :caption: 工具使用 + + tools/index \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/porting.rst b/third-party/cherryusb/docs/source/porting.rst new file mode 100644 index 0000000000000000000000000000000000000000..5962e2295cd1a3a254e357efb675c24df5cb37a4 --- /dev/null +++ b/third-party/cherryusb/docs/source/porting.rst @@ -0,0 +1,24 @@ +Porting 如何编写 +============================== + +本节主要介绍没有支持的芯片如何做 porting。 + +从机 porting +---------------------------- + +- 首先复制一份从 `port/template` 复制一份 `usb_dc.c` 并参与编译,保证能编译过。 +- 实现 ``usb_dc_init`` 保证能进入中断 +- 在中断中判断 reset 中断并能够正常触发 reset 中断,在 reset 中断中调用 ``usbd_event_reset_handler``,如果可能,还需要启动读取 setup 包。 +- 在中断中判断 setup 中断并能够正常触发 setup 中断,然后将读取的数据传入 ``usbd_event_ep0_setup_complete_handler`` +- 实现 ``usbd_ep_start_write`` 并能够触发发送完成中断 +- 实现 ``usbd_ep_start_read`` 并能够触发接收完成中断 +- 分包处理 + +主机 porting +---------------------------- + +- 首先复制一份从 `port/template` 复制一份 `usb_hc.c` 并参与编译,保证能编译过。 +- 实现 ``usb_hc_init`` 保证能进入中断 +- 能够进入插拔中断,比如 ``connect`` 和 ``disconnect``,并调用 ``usbh_roothub_thread_wakeup`` 能够唤醒 hub 线程 +- 实现 ``usbh_roothub_control`` 并根据第三个条件,能够完成 ``usbh_hub_events`` 中 ``usbh_enumerate`` 之前的流程 +- 实现 ``usbh_submit_urb`` \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/porting_usbip.rst b/third-party/cherryusb/docs/source/porting_usbip.rst new file mode 100644 index 0000000000000000000000000000000000000000..3c7b721c5418efd78c3f4086d73ae69fc239c4f9 --- /dev/null +++ b/third-party/cherryusb/docs/source/porting_usbip.rst @@ -0,0 +1,216 @@ +USB IP 勘误 +============================== + +本节主要对已经支持的 USB IP 在不同厂家上的一些差别说明并进行校对。欢迎补充。 + +FSDEV +-------------------------- + +FSDEV 仅支持从机。这个 ip 不同厂家基本都是基于标准的 usb 寄存器,所以用户使用时,仅需要修改 `USBD_IRQHandler` 、 `USB_BASE` 、 `USB_NUM_BIDIR_ENDPOINTS` 即可。有些芯片可能还需要配置 `PMA_ACCESS` 的值,默认为2。下表为具体芯片相关宏的修改值: + +.. list-table:: + :widths: 30 20 30 30 30 + :header-rows: 1 + + * - 芯片 + - USBD_IRQHandler + - USB_BASE + - USB_NUM_BIDIR_ENDPOINTS + - PMA_ACCESS + * - STM32F0 + - USB_IRQHandler + - 0x40005C00 + - 8 + - 1 + * - STM32F1 + - USB_LP_CAN1_RX0_IRQHandler + - 同上 + - 同上 + - 同上 + * - STM32F3 + - USB_LP_CAN_RX0_IRQHandler + - 同上 + - 同上 + - 1 or 2 + * - STM32L0 + - USB_IRQHandler + - 同上 + - 同上 + - 1 + * - STM32L1 + - USB_LP_IRQHandler + - 同上 + - 同上 + - 2 + * - STM32L4 + - USB_IRQHandler + - 同上 + - 同上 + - 1 + +MUSB +-------------------------- + +MUSB IP 支持主从,并且由 **mentor** 定义了一套标准的寄存器偏移,所以如果是走的标准,则从机仅需要修改 `USBD_IRQHandler` 、 `USB_BASE` 、 `USB_NUM_BIDIR_ENDPOINTS` ,主机仅需要修改 `USBH_IRQHandler` 、 `USB_BASE` 以及 `CONIFG_USB_MUSB_EP_NUM` 即可。如果非标准,则需要实现以下宏的偏移,以标准为例: + +.. code-block:: C + + #define MUSB_FADDR_OFFSET 0x00 + #define MUSB_POWER_OFFSET 0x01 + #define MUSB_TXIS_OFFSET 0x02 + #define MUSB_RXIS_OFFSET 0x04 + #define MUSB_TXIE_OFFSET 0x06 + #define MUSB_RXIE_OFFSET 0x08 + #define MUSB_IS_OFFSET 0x0A + #define MUSB_IE_OFFSET 0x0B + + #define MUSB_EPIDX_OFFSET 0x0E + + #define MUSB_IND_TXMAP_OFFSET 0x10 + #define MUSB_IND_TXCSRL_OFFSET 0x12 + #define MUSB_IND_TXCSRH_OFFSET 0x13 + #define MUSB_IND_RXMAP_OFFSET 0x14 + #define MUSB_IND_RXCSRL_OFFSET 0x16 + #define MUSB_IND_RXCSRH_OFFSET 0x17 + #define MUSB_IND_RXCOUNT_OFFSET 0x18 + #define MUSB_IND_TXTYPE_OFFSET 0x1A + #define MUSB_IND_TXINTERVAL_OFFSET 0x1B + #define MUSB_IND_RXTYPE_OFFSET 0x1C + #define MUSB_IND_RXINTERVAL_OFFSET 0x1D + + #define MUSB_FIFO_OFFSET 0x20 + + #define MUSB_DEVCTL_OFFSET 0x60 + + #define MUSB_TXFIFOSZ_OFFSET 0x62 + #define MUSB_RXFIFOSZ_OFFSET 0x63 + #define MUSB_TXFIFOADD_OFFSET 0x64 + #define MUSB_RXFIFOADD_OFFSET 0x66 + + #define MUSB_TXFUNCADDR0_OFFSET 0x80 + #define MUSB_TXHUBADDR0_OFFSET 0x82 + #define MUSB_TXHUBPORT0_OFFSET 0x83 + #define MUSB_TXFUNCADDRx_OFFSET 0x88 + #define MUSB_TXHUBADDRx_OFFSET 0x8A + #define MUSB_TXHUBPORTx_OFFSET 0x8B + #define MUSB_RXFUNCADDRx_OFFSET 0x8C + #define MUSB_RXHUBADDRx_OFFSET 0x8E + #define MUSB_RXHUBPORTx_OFFSET 0x8F + + #define USB_TXADDR_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx) + #define USB_TXHUBADDR_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 2) + #define USB_TXHUBPORT_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 3) + #define USB_RXADDR_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 4) + #define USB_RXHUBADDR_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 6) + #define USB_RXHUBPORT_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 7) + +下表为具体芯片从机相关宏的修改值: + +.. list-table:: + :widths: 30 30 30 30 + :header-rows: 1 + + * - 芯片 + - USBD_IRQHandler + - USB_BASE + - USB_NUM_BIDIR_ENDPOINTS + * - ES32F3xx + - USB_INT_Handler + - 0x40086400 + - 5 + * - MSP432Ex + - 同上 + - 0x40050000 + - 同上 + * - F1C100S + - USB_INT_Handler + - 0x01c13000 + - 4 + +下表为具体芯片主机相关宏的修改值: + +.. list-table:: + :widths: 30 30 30 30 + :header-rows: 1 + + * - 芯片 + - USBH_IRQHandler + - USB_BASE + - CONIFG_USB_MUSB_EP_NUM + * - ES32F3xx + - USB_INT_Handler + - 0x40086400 + - 5 + * - MSP432Ex + - 同上 + - 0x40050000 + - 同上 + * - F1C100S + - USB_INT_Handler + - 0x01c13000 + - 4 + +DWC2 +-------------------------- + +DWC2 IP 支持主从,并且由 **synopsys** 定义了一套标准的寄存器偏移。大部分厂家都使用标准的寄存器偏移,所以如果是从机仅需要修改 `USBD_IRQHandler` 、 `USB_BASE` 、 `USB_NUM_BIDIR_ENDPOINTS` ,主机仅需要修改 `USBH_IRQHandler` 、 `USB_BASE` 即可。 + +其次还有需要注意 VBUS SENSING 这个项,也会影响 USB 的正常枚举,如何修改参考 `GD32 dwc2驱动的GCCFG_NOVBUSSENS寄存器兼容性和stm32存在区别 `_。 + +.. caution:: 主机 port 仅支持有高速功能的 dwc2 ip, 因为他支持 dma 模式,如果厂家买的 ip 不支持 dma 模式,则无法使用。 + +下表为具体芯片从机相关宏的修改值: + +.. list-table:: + :widths: 30 30 30 30 + :header-rows: 1 + + * - 芯片 + - USBH_IRQHandler + - USB_BASE + - USB_NUM_BIDIR_ENDPOINTS + * - STM32 非 H7 + - OTG_FS_IRQHandler/OTG_HS_IRQHandler + - 0x50000000UL/0x40040000UL + - 5 + * - STM32 H7 + - 同上 + - 0x40080000UL/0x40040000UL + - 9 + +下表为具体芯片主机相关宏的修改值: + +.. list-table:: + :widths: 30 30 30 30 + :header-rows: 1 + + * - 芯片 + - USBH_IRQHandler + - USB_BASE + - CONFIG_USB_DWC2_PIPE_NUM + * - STM32 全系列 + - OTG_HS_IRQHandler + - 0x40040000UL + - 12 + +EHCI +-------------------------- + +EHCI 是 intel 制定的标准主机控制器接口,任何厂家都必须实现 EHCI 中定义的寄存器以及寄存器的功能。EHCI 相关配置宏如下: + +.. code-block:: C + + //Host Controller Capability Register BASE + #define CONFIG_USB_EHCI_HCCR_BASE (0xxx) + //Host Controller Operational Register BASE + #define CONFIG_USB_EHCI_HCOR_BASE (0xxx) + //是否打印 ehci 配置信息 + #define CONFIG_USB_EHCI_INFO_ENABLE + //是否关闭保留寄存器的占位,默认保留 9 个双字的占位 + #define CONFIG_USB_ECHI_HCOR_RESERVED_DISABLE + //是否使能 configflag 寄存器中的 bit0 + #define CONFIG_USB_EHCI_CONFIGFLAG + //是否使能 port power bit + #define CONFIG_USB_EHCI_PORT_POWER + +同时由于 EHCI 只是主机控制器,一般配合一个 device 控制器+ otg 控制器,而速度的获取一般是在 otg 寄存器中,所以需要用户实现 `usbh_get_port_speed` 函数。 \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/quick_start/bl702.rst b/third-party/cherryusb/docs/source/quick_start/bl702.rst new file mode 100644 index 0000000000000000000000000000000000000000..1ae1f8fa2fec001405b87b3d6b99bd6f5def1d84 --- /dev/null +++ b/third-party/cherryusb/docs/source/quick_start/bl702.rst @@ -0,0 +1,6 @@ +基于 BL 系列开发指南 +========================= + +BL 系列 USB 的开发主要使用 bl_mcu_sdk,参考 `bl_mcu_sdk `_。 + +USB 的相关应用位于 `examples/usbdev` 和 `examples/usbhost` 目录下,环境搭建完成后,即可编译使用。 \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/quick_start/es32.rst b/third-party/cherryusb/docs/source/quick_start/es32.rst new file mode 100644 index 0000000000000000000000000000000000000000..dd1c0ab6920ce4ba40d2760ea6ad7ed19b394eeb --- /dev/null +++ b/third-party/cherryusb/docs/source/quick_start/es32.rst @@ -0,0 +1,84 @@ +基于 ES32F369 开发指南 +========================= + +ES32F3xx 系列单片机中 USB 外设使用标准的 musb ip,并且拥有 usb device 和 usb host 功能。本章主要介绍如何在东软载波的 ES32F369x 开发板中使用 CherryUSB。 + +在使用之前需要从 essemi 官网下载 `keil 芯片支持包 `_ 并安装, + + +工程样例试用 +----------------------- + +在 CherryUSB demo 目录下已经有主机跟从机的样例,在有板子的情况下,可以先跑工程样例,试用一下。 + +- 进入 MDK-ARM 目录下,双击 `example.uvprojx` 打开工程,选择好调试器后,编译烧录即可。 +- 如果是从机,默认提供的是 cdc acm 的示例,代码烧录以后,将 usb 线插到 板子的丝印为 USB-OTG 口,并接上电脑,按下复位键,电脑便会枚举出一个串口。打开串口,勾选 DTR 可以接收数据,在发送缓冲区填入数据并发送,调试器的串口便可以打印出接收的长度和数据。 +- 如果是主机,则需要一个 usb 母口转接线,并接入相关 usb 设备,就可以进行测试了。比如接上鼠标、U盘、4G 网卡等等。 + +USB Device 移植要点 +----------------------- + +针对自定义的工程移植,需要按照以下步骤: + +- 准备好可以进行调试打印的工程,并且实现 `printf`、 `malloc` 、 `free` 函数(也可以直接勾选 Use microlib 来使用)。 +- 拷贝 CherryUSB 源码到工程里 +- 添加 CherryUSB 源码和头文件路径,其中 `usbd_core.c` 和 `usb_dc_musb.c` 为必须添加项。 +- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径。所以根目录下的文件仅作为参考,不要添加根目录下的头文件。 + +.. figure:: img/es322.png +.. figure:: img/es323.png + +- 实现 `usb_dc_low_level_init` 函数,该函数主要负责 USB 时钟、引脚、中断的初始化。例如 + +.. code-block:: C + + void usb_dc_low_level_init(void) + { + ald_pmu_perh_power_config(PMU_POWER_USB, ENABLE); + ald_cmu_perh_clock_config(CMU_PERH_USB, ENABLE); + ald_cmu_perh_clock_config(CMU_PERH_GPIO, ENABLE); + ald_cmu_usb_clock_config(CMU_USB_CLOCK_SEL_HOSC, CMU_USB_DIV_1); + ald_rmu_reset_periperal(RMU_PERH_USB); + ald_mcu_irq_config(USB_INT_IRQn, 2, 2, ENABLE); + ald_mcu_irq_config(USB_DMA_IRQn, 2, 2, ENABLE); + usb_pin_init(); + } + +- 描述符的注册、class的注册、接口的注册、端点中断的注册。不会的参考 demo 下的 template 。 +- 调用 `usbd_initialize` 初始化 usb 硬件。 +- 正常使用。 + + +USB Host 移植要点 +----------------------- + +针对自定义的工程移植,需要以下步骤: + +- 准备好可以进行调试打印的带 FreeRTOS 或者 RT-Thread 的工程,并且实现 `printf`、 `malloc` 、 `free` 函数(也可以直接勾选 Use microlib 来使用)。 +- 拷贝 CherryUSB 源码到工程里 +- 添加 CherryUSB 源码和头文件路径,其中 `usbh_core.c` 和 `usb_hc_musb.c` 、 osal 下的文件为必须添加项,根据不同的 os 添加对应的文件。 +- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h` ,并添加相应的目录头文件路径。所以根目录下的文件仅作为参考,不要添加根目录下的头文件。 + +.. figure:: img/es324.png +.. figure:: img/es325.png + +- 由于是作为主机,推荐添加所有的 class,功能全面。当然如果只用一个 class ,就添加一个。 +- 实现 `usb_hc_low_level_init` 函数,该函数主要负责 USB 时钟、引脚、中断的初始化。例如 + +.. code-block:: C + + void usb_hc_low_level_init(void) + { + ald_pmu_perh_power_config(PMU_POWER_USB, ENABLE); + ald_cmu_perh_clock_config(CMU_PERH_USB, ENABLE); + ald_cmu_perh_clock_config(CMU_PERH_GPIO, ENABLE); + ald_cmu_usb_clock_config(CMU_USB_CLOCK_SEL_HOSC, CMU_USB_DIV_1); + ald_rmu_reset_periperal(RMU_PERH_USB); + ald_mcu_irq_config(USB_INT_IRQn, 2, 2, ENABLE); + ald_mcu_irq_config(USB_DMA_IRQn, 2, 2, ENABLE); + usb_pin_init(); + } + +- 调用 `usbh_initialize` 初始化 usb 硬件。 +- 此时编译会报错,因为协议栈中为每个 class 都添加了测试 demo,文件在 `usb_host.c` 中,如果不想要,可以直接删除。 +- 正常使用。 \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/quick_start/hpm.rst b/third-party/cherryusb/docs/source/quick_start/hpm.rst new file mode 100644 index 0000000000000000000000000000000000000000..21c41278df436243a2b6f468d1c33ea2020d8454 --- /dev/null +++ b/third-party/cherryusb/docs/source/quick_start/hpm.rst @@ -0,0 +1,6 @@ +基于 HPM 系列开发指南 +========================= + +HPM 系列 USB 的开发主要使用 hpm_sdk ,参考 `hpm sdk `_。 + +USB 的相关应用位于 `samples/cherryusb` 目录下,环境搭建完成后,即可编译使用。 \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/quick_start/img/es322.png b/third-party/cherryusb/docs/source/quick_start/img/es322.png new file mode 100644 index 0000000000000000000000000000000000000000..09095b524dc9c413bfb2cfe581f55393a946bcd0 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/es322.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/es323.png b/third-party/cherryusb/docs/source/quick_start/img/es323.png new file mode 100644 index 0000000000000000000000000000000000000000..2712dc503154fc0bf693d5682c294f07b083c2db Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/es323.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/es324.png b/third-party/cherryusb/docs/source/quick_start/img/es324.png new file mode 100644 index 0000000000000000000000000000000000000000..59cfcaeca107172199c0be382a07fa267c7ca7d1 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/es324.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/es325.png b/third-party/cherryusb/docs/source/quick_start/img/es325.png new file mode 100644 index 0000000000000000000000000000000000000000..b3fc9ed866c950f2b8396f3875ffb3ef437e01bd Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/es325.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_1.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b91044a561dd4f5ed66925a467f1cacda2f299cc Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_1.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_10.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_10.png new file mode 100644 index 0000000000000000000000000000000000000000..d55b38e78160cc95ff8a100e40c54bf0cd74485b Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_10.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_11.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_11.png new file mode 100644 index 0000000000000000000000000000000000000000..3ad5b074a9670f11018f68ce0a9f7547356a38a6 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_11.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_12.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_12.png new file mode 100644 index 0000000000000000000000000000000000000000..84aaffe8a3f1bf975254bb963571c3f75b95520e Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_12.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_13.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_13.png new file mode 100644 index 0000000000000000000000000000000000000000..d350a7762375da05915e5d3a0c825df8655dbdb7 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_13.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_14.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_14.png new file mode 100644 index 0000000000000000000000000000000000000000..e5aa5b1990c3dee2bfd1efb7b1e4430314817096 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_14.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_15.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_15.png new file mode 100644 index 0000000000000000000000000000000000000000..037bfbdf468e1f246e78d9150b5f0dc9083ba3c3 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_15.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_16.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_16.png new file mode 100644 index 0000000000000000000000000000000000000000..70f2e63c0574c676b1028f9e30ce004cf2c7b2e3 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_16.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_18.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_18.png new file mode 100644 index 0000000000000000000000000000000000000000..4a780b569fc6cce43fb3b7156f5c6071266d48fe Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_18.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_19.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_19.png new file mode 100644 index 0000000000000000000000000000000000000000..b779f7f77ee097201ad357d9864ed597596cef6e Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_19.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_2.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_2.png new file mode 100644 index 0000000000000000000000000000000000000000..671b1b82ad6e994491a56177df10eafcc8bc7f0a Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_2.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_20.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_20.png new file mode 100644 index 0000000000000000000000000000000000000000..96736d01dc99cbb30d7102cdd6354db82d5602a7 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_20.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_21.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_21.png new file mode 100644 index 0000000000000000000000000000000000000000..977bda825da8f937616037de19610bde5e07cb72 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_21.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_3.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_3.png new file mode 100644 index 0000000000000000000000000000000000000000..492d67391bc3fa19f865304ebbc89d922f54be74 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_3.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_3_1.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_3_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9e42196dfb7153779fbb2f97492dd3d88f727c27 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_3_1.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_4.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_4.png new file mode 100644 index 0000000000000000000000000000000000000000..dd90f5b86df67f59942da7219fd140ee7fe41d06 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_4.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_4_1.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_4_1.png new file mode 100644 index 0000000000000000000000000000000000000000..e81437bcd927037822a83a1f77f792d16269cd50 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_4_1.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_5.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_5.png new file mode 100644 index 0000000000000000000000000000000000000000..5bec9878b37ad822bedfabffed42525dadb29b29 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_5.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_6.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_6.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ad9a0b63a228e854f7765ba823cb25a3d34c28 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_6.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_7.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_7.png new file mode 100644 index 0000000000000000000000000000000000000000..8aef0bfa8b5860df180d9c9fbeb0261e645e622f Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_7.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_8.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_8.png new file mode 100644 index 0000000000000000000000000000000000000000..08d2e724ff5f0d0f232f8bcb6b23a546f4af758f Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_8.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/img/stm32_9.png b/third-party/cherryusb/docs/source/quick_start/img/stm32_9.png new file mode 100644 index 0000000000000000000000000000000000000000..57971d267bbe3c860af952c9494ceb5ea3acff12 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/img/stm32_9.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/other_chip.rst b/third-party/cherryusb/docs/source/quick_start/other_chip.rst new file mode 100644 index 0000000000000000000000000000000000000000..79075c85eeb90ab814d2aeb3b1b37bae679eef86 --- /dev/null +++ b/third-party/cherryusb/docs/source/quick_start/other_chip.rst @@ -0,0 +1,95 @@ +芯片通用移植指南 +========================= + +本节主要介绍所有带 USB IP 的芯片,移植 CherryUSB 主从协议栈时的通用步骤和注意事项。在往下看之前,需要 **你准备好一个可以打印 helloworld 的基本工程** ,并且实现了 `printf` 、 `malloc`、 `free`。如果是主机,需要 **准备好可以打印 helloworld 的带 OS 的工程**。 + +USB Device 移植要点 +----------------------- + +- 拷贝 CherryUSB 源码到工程目录下,并按需添加源文件和头文件路径,其中 `usbd_core.c` 和 `usb_dc_xxx.c` 为必须添加项。而 `usb_dc_xxx.c` 是芯片所对应的 USB IP dcd 部分驱动,如果不知道自己芯片属于那个 USB IP,参考 **port** 目录下的不同 USB IP 的 readme。如果使用的 USB IP 没有支持,只能自己实现了 +- 添加 `USBD_IRQHandler=xxxx` 、 `USB_NUM_BIDIR_ENDPOINTS=x` 以及 `USB_BASE=0xxxxx` 三个 cflag 编译选项,如果没有添加则使用 `usb_dc_xxx.c` 中默认配置 +- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径。 +- 实现 `usb_dc_low_level_init` 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。 +- 描述符的注册、class的注册、接口的注册、端点中断的注册。不会的参考 demo 下的 template +- 调用 `usbd_initialize` 初始化 usb 硬件 +- 编译使用。各个 class 如何使用,参考 demo 下的 template + +.. note:: device 移植要点其实就三个,实现 `usb_dc_low_level_init` ;改 `USBD_IRQHandler=xxxx` 、`USB_BASE=0xxxxx` 、 `USB_NUM_BIDIR_ENDPOINTS=x`;改 `usb_config.h` 中的内容。其中前面说到的3个宏也可以在 `usb_config.h` 添加 + +USB Host 移植要点 +----------------------- + +- 拷贝 CherryUSB 源码到工程目录下,并按需添加源文件和头文件路径,其中 `usbh_core.c` 、 `usb_hc_xxx.c` 以及 **osal** 目录下源文件(根据不同的 os 选择对应的源文件)为必须添加项。而 `usb_hc_xxx.c` 是芯片所对应的 USB IP dcd 部分驱动,如果不知道自己芯片属于那个 USB IP,参考 **port** 目录下的不同 USB IP 的 readme。如果使用的 USB IP 没有支持,只能自己实现了 +- 添加 `USBH_IRQHandler=xxxx` 以及 `USB_BASE=0xxxxx` 两个 cflag 编译选项,如果没有添加则使用 `usb_hc_xxx.c` 中默认配置 +- 拷贝 `cherryusb_config_template.h` 文件到自己工程目录下,命名为 `usb_config.h`,并添加相应的目录头文件路径。 +- 实现 `usb_hc_low_level_init` 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。 +- 调用 `usbh_initialize` 初始化 usb 硬件 +- 如果使用的是 GCC ,需要在链接脚本(ld)中添加如下代码: + +.. code-block:: C + + /* section information for usbh class */ + . = ALIGN(4); + __usbh_class_info_start__ = .; + KEEP(*(.usbh_class_info)) + __usbh_class_info_end__ = .; + +- 如果使用的是 Segger Embedded Studio ,需要在链接脚本(icf)中添加如下代码: + +.. code-block:: C + + define block cherryusb_usbh_class_info { section .usbh_class_info }; + + define exported symbol __usbh_class_info_start__ = start of block cherryusb_usbh_class_info; + define exported symbol __usbh_class_info_end__ = end of block cherryusb_usbh_class_info + 1; + + place in AXI_SRAM { block cherryusb_usbh_class_info }; + keep { section .usbh_class_info}; + +- 编译使用。各个 class 如何使用,参考 demo 下的 `usb_host.c` 文件 + +.. caution:: 如果主从 ip 共用一个中断,设置 `USBD_IRQHandler=USBD_IRQHandler` 、 `USBH_IRQHandler=USBH_IRQHandler` ,然后由真正的中断函数根据主从模式调用这两个函数。 + +带 cache 功能的芯片使用注意 +------------------------------- + +协议栈以及 port 中不会对 cache 区域的 ram 进行 clean 或者 invalid,所以需要使用一块非 cache 区域的 ram 来维护。 `USB_NOCACHE_RAM_SECTION` 宏表示将变量指定到非 cache ram上, +因此,用户需要在对应的链接脚本中添加 no cache ram 的 section。默认 `USB_NOCACHE_RAM_SECTION` 定义为 `__attribute__((section(".noncacheable")))`。 + +GCC: + +.. code-block:: C + + // 放在 no cache ram 的 region 中 + .no_cache_ram_region : AT (__no_cache_ram_addr) + { + . = ALIGN(4); + *(.noncacheable) + . = ALIGN(4); + } > no_cache_ram + +SCT: + +.. code-block:: C + + LR_IROM1 0x08000000 0x00200000 { ; load region size_region + ER_IROM1 0x08000000 0x00200000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + RW_IRAM2 0x24000000 0x00070000 { ; RW data + .ANY (+RW +ZI) + } + USB_NOCACHERAM 0x24070000 0x00010000 { ; RW data + *(.noncacheable) + } + } + +ICF: + +.. code-block:: C + + define region NONCACHEABLE_RAM = [from 0x1140000 size 256K]; + place in NONCACHEABLE_RAM { section .noncacheable, section .noncacheable.init, section .noncacheable.bss }; // Noncacheable diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/config_file.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/config_file.png new file mode 100644 index 0000000000000000000000000000000000000000..e2982b28d4b7644725518d855812f09086ab7a15 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/config_file.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env0.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env0.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9e8e19057ca80e3af7dd10a2d2cc24181ec7e9 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env0.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env1.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env1.png new file mode 100644 index 0000000000000000000000000000000000000000..d232a408db374af33a57c6056b0fb036c2525584 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env1.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env2.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env2.png new file mode 100644 index 0000000000000000000000000000000000000000..4865741327477694ae2e138d1c8b16b778184cb4 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env2.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env3.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env3.png new file mode 100644 index 0000000000000000000000000000000000000000..ed55056bb5a5bcde03a082b7bb646e4895a68eac Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env3.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env4.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env4.png new file mode 100644 index 0000000000000000000000000000000000000000..36c4e53c3494ba1ebd3856ee9851d1495b717ab5 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env4.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env5.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env5.png new file mode 100644 index 0000000000000000000000000000000000000000..85de879a5f7d7aa61c4794217f1b6b0eb3ad3c29 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env5.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env6.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env6.png new file mode 100644 index 0000000000000000000000000000000000000000..20a57d07300d00536db2302a6e388d7cfb335be5 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env6.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env7.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env7.png new file mode 100644 index 0000000000000000000000000000000000000000..dc63bebdf406639b4d66d3ef59e6061e5347b3ab Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env7.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env8.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env8.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e31f9a1029c4a41446f91e04982af32c340db6 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/env8.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32_init.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32_init.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce572018d589f0ae2aeb195df078e9e64b12b6e Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32_init.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32_init2.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32_init2.png new file mode 100644 index 0000000000000000000000000000000000000000..eae3c0260cf48b9d89e9fbe05449dc7bc2cb20eb Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32_init2.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx0.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx0.png new file mode 100644 index 0000000000000000000000000000000000000000..1ea33e04c98829877c16b197a214c5187126f045 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx0.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx1.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx1.png new file mode 100644 index 0000000000000000000000000000000000000000..a6ca5078552726c4434f70c99a6fea4439f5e238 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx1.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx2.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx2.png new file mode 100644 index 0000000000000000000000000000000000000000..e29254bbe7858304636f719c0c0f64b5de6d7550 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx2.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx_clk.png b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx_clk.png new file mode 100644 index 0000000000000000000000000000000000000000..41a7aae8752efa9655b85777a61d9ceed1699468 Binary files /dev/null and b/third-party/cherryusb/docs/source/quick_start/rt-thread/img/stm32cubemx_clk.png differ diff --git a/third-party/cherryusb/docs/source/quick_start/rt-thread/rtthread.rst b/third-party/cherryusb/docs/source/quick_start/rt-thread/rtthread.rst new file mode 100644 index 0000000000000000000000000000000000000000..cf0546e05376e403ec5f13cce552c56cbd5d938c --- /dev/null +++ b/third-party/cherryusb/docs/source/quick_start/rt-thread/rtthread.rst @@ -0,0 +1,87 @@ +基于 RT-Thread 软件包开发指南 +=============================== + +本节主要介绍使用 RT-Thread 提供的软件包管理器来配置工程,以 env 作为演示。本节操作不同芯片都一样,后续不再重复讲解。打开 env 以后使用 menuconfig 进入包管理器,并在如图所示路径中选择 CherryUSB。 + +.. figure:: img/env0.png + +从机配置 +-------------------------- + +* 选择 Enable usb device mode 并敲回车进入。 + +.. figure:: img/env1.png +.. figure:: img/env2.png + +* 首先第一个配置是配置 USB 的速度,分为 **FS、HS**,表示使用全速还是高速功能。 + +.. figure:: img/env3.png + +* 其次第二个配置则是选择 USB device ip,不清楚自己芯片是哪个 ip 的可以参考 **port** 目录下对应的 readme。 + +.. figure:: img/env4.png + +* 选择好 USB device ip 以后,还需要选择是哪款芯片,第三个配置则是用来选择芯片,选择以后会帮忙配置相对应的 ip 的一些信息,比如 `USB_BASE` 、 `USBD_Handler` 以及特殊的一些配置等等,如果没找到自己的芯片,可以手动在 `usb_dc_xxx.c` 中修改。 + +.. figure:: img/env5.png + +* 接下来是 class 的选择,用哪个 class 勾选哪个就可以了,使能 class 以后,双击进入可以选择一个 demo 的模板参与编译,当然也可以不选,自己写。 + +.. figure:: img/env6.png + +* 最后退出保存即可。 +* 退出以后不急着编译,需要在代码中实现 `usb_dc_low_level_init` 函数。 +* 复制一份 `usb_config.h` 到自己的目录中,并实现以下内容: + +.. figure:: img/config_file.png + +* 使用 `scons --target=mdk` 或者 `scons` 进行编译 + +主机配置 +-------------------------- + +* 选择 Enable usb host mode 并敲回车进入。 + +.. figure:: img/env7.png + +* 选择 USB host ip,不清楚自己芯片是哪个 ip 的可以参考 **port** 目录下对应的 readme。选择好 USB host ip 以后,还需要选择是哪款芯片,第二个箭头则是用来选择芯片,选择以后会帮忙配置相对应的 ip 的一些信息,比如 `USB_BASE` 、 `USBH_Handler` 以及特殊的一些配置等等,如果没找到自己的芯片,可以手动在 `usb_hc_xxx.c` 中修改。 + +.. figure:: img/env8.png + +* 默认使能除了 hub 之外的所有 class 驱动。 +* 设置 psc 线程的线程栈以及线程优先级。 +* 最后退出保存即可。 +* 退出以后不急着编译,需要在代码中实现 `usb_hc_low_level_init` 函数。 +* 复制一份 `usb_config.h` 到自己的目录中,并实现以下内容: + +.. figure:: img/config_file.png + +* 使用 `scons --target=mdk` 或者 `scons` 进行编译 +* 如果使用的是 GCC ,需要在链接脚本(ld)中添加如下代码: + +.. code-block:: C + + /* section information for usbh class */ + . = ALIGN(4); + __usbh_class_info_start__ = .; + KEEP(*(.usbh_class_info)) + __usbh_class_info_end__ = .; + + +借助 STM32CubeMX 生成 USB 初始化 +---------------------------------- + +使用 STM32CubeMX 主要是用来生成 usb 时钟、引脚、中断的配置。我们需要点击如图所示文件,并配置好 USB 的时钟、中断,点击 `Generate Code`。生成的时钟配置在 `main.c` 中的 `SystemClock_Config` 文件,将其拷贝到 `board.c` 中。 + +.. figure:: img/stm32cubemx0.png +.. figure:: img/stm32cubemx1.png +.. figure:: img/stm32cubemx2.png +.. figure:: img/stm32cubemx_clk.png + +然后将 `stm32xxxx_hal_msp.c` 中的 `HAL_PCD_MspInit` 或者是 `HAL_HCD_MspInit` 中的内容复制到 `usb_dc_low_level_init` 和 `usb_hc_low_level_init` 函数中,举例如下: + +.. figure:: img/stm32_init.png + +其次将 `main.c` 中的 `SystemClock_Config` 替换掉 `board.c` 中的配置 + +.. figure:: img/stm32_init2.png \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/quick_start/stm32.rst b/third-party/cherryusb/docs/source/quick_start/stm32.rst new file mode 100644 index 0000000000000000000000000000000000000000..906a1374cab795e63875354831ab900bf1e8e1e8 --- /dev/null +++ b/third-party/cherryusb/docs/source/quick_start/stm32.rst @@ -0,0 +1,132 @@ +基于 STM32F1/F4/H7 开发指南 +============================= + +本节是基于 STM32 三个系列芯片的使用,涵盖 F1/F4/H7,其余芯片基本类似,不再赘述,具体区别有: + +- usb ip 区别:F1使用 fsdev,F4/H7使用 dwc2 +- dwc2 ip 区别: fs port(引脚是 PA11/PA12) 和 hs port(引脚是 PB14/PB15), 其中 hs port 默认全速,可以接外部PHY 形成高速主机,并且带 dma 功能 +- F4 与 H7 cache 区别、USB BASE 区别 + + +如果是 STM32F7/STM32H7 这种带 cache 功能,需要将 usb 使用到的 ram 定位到 no cache ram 区域。举例如下 + +.. code-block:: C + + cpu_mpu_config(0, MPU_Normal_NonCache, 0x24070000, MPU_REGION_SIZE_64KB); + +对应 keil 中的 sct 脚本修改: + +.. code-block:: C + + LR_IROM1 0x08000000 0x00200000 { ; load region size_region + ER_IROM1 0x08000000 0x00200000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + RW_IRAM2 0x24000000 0x00070000 { ; RW data + .ANY (+RW +ZI) + } + USB_NOCACHERAM 0x24070000 0x00010000 { ; RW data + *(.noncacheable) + } + } + + +.. caution :: 如果使用 STM32F7 或者 STM32H7, 请在 CFLAG 中添加 STM32F7 或者 STM32H7 宏定义,否则无法枚举 + +工程样例试用 +----------------------- + +默认提供以下 demo 工程: + +- F103 使用 fsdev ip +- F429 主从使用 hs port,并且均用 dma 模式 +- H7 设备使用 fs port,主机使用 hs port,并且主机带 cache 支持 + + +默认删除 Drivers ,所以需要使用 stm32cubemx 生成一下 Drivers 目录下的文件,demo 底下提供了 **stm32xxx.ioc** 文件,双击打开,点击 **Generate Code** 即可。 + +.. caution:: 生成完以后,请使用 git reset 功能将被覆盖的 `main.c` 和 `stm32xxx_it.c` 文件撤回,禁止被 cubemx 覆盖。 + +USB Device 移植要点 +----------------------- + +- 使用 **stm32cubemx** 创建工程,配置基本的 RCC、UART (作为log使用) + +.. figure:: img/stm32_1.png +.. figure:: img/stm32_2.png + +- 如果使用 fsdev ip,勾选 **USB** 。如果使用 dwc2 ip,勾选 **USB_OTG_FS** 或者勾选 **USB_OTG_HS**。开启 USB 中断,其他配置对我们没用,代码中不会使用任何 st 的 usb 库。 + +.. figure:: img/stm32_3_1.png +.. figure:: img/stm32_3.png + +- 配置 usb clock 为 48M + +.. figure:: img/stm32_4_1.png +.. figure:: img/stm32_4.png + +- 选择好工程,这里我们选择 keil,设置好 stack 和 heap,如果使用 msc 可以推荐设置大点,然后点击 **Generate Code**。 + +.. figure:: img/stm32_5.png + +- 添加 CherryUSB 必须要的源码( **usbd_core.c** 、 **usb_dc_dwc2.c** 或者是 **usb_dc_fsdev.c** ),以及想要使用的 class 驱动,可以将对应的 class template 添加方便测试。 + +.. figure:: img/stm32_6.png + +- 头文件该加的加 + +.. figure:: img/stm32_7.png + +- 复制一份 **cherryusb_config_template.h**,放到 `Core/Inc` 目录下,并命名为 `usb_config.h` + +.. figure:: img/stm32_8.png + +- 如果使用 dwc2 ip,编译选项中需要添加 `CONFIG_USB_DWC2_PORT=xxx`,使用 PA11/PA12 则 **xxx=FS_PORT**,使用 PB14/PB15 则 **xxx=HS_PORT** + +.. figure:: img/stm32_9.png + +- 编译器推荐使用 **AC6**。勾选 **Microlib**,并实现 **printf** ,方便后续查看 log。 + +.. figure:: img/stm32_10.png +.. figure:: img/stm32_11.png + +- 拷贝 **xxx_msp.c** 中的 **HAL_PCD_MspInit** 函数中的内容到 **usb_dc_low_level_init** 函数中,屏蔽 st 生成的 usb 中断函数和 usb 初始化 + +.. figure:: img/stm32_12.png +.. figure:: img/stm32_13.png +.. figure:: img/stm32_14.png + +- 调用 template 的内容初始化,就可以使用了 + +.. figure:: img/stm32_15.png + +USB Host 移植要点 +----------------------- + +前面 7 步与 Device 一样。需要注意,host 驱动只支持带 dma 的 hs port (引脚是 PB14/PB15),所以 fs port (引脚是 PA11/PA12)不做支持(没有 dma 你玩什么主机)。 + +- 添加 CherryUSB 必须要的源码( **usbh_core.c** 、 **usbh_hub.c** 、 **usb_hc_dwc2.c** 、以及 **osal** 目录下的适配层文件),以及想要使用的 class 驱动,并且可以将对应的 **usb host.c** 添加方便测试。 + +.. figure:: img/stm32_16.png + +- 编译器推荐使用 **AC6**。勾选 **Microlib**,并实现 **printf** ,方便后续查看 log。 + +.. figure:: img/stm32_10.png +.. figure:: img/stm32_11.png + +- 拷贝 **xxx_msp.c** 中的 **HAL_HCD_MspInit** 函数中的内容到 **usb_hc_low_level_init** 函数中,屏蔽 st 生成的 usb 中断函数和 usb 初始化 + +.. figure:: img/stm32_18.png +.. figure:: img/stm32_13.png +.. figure:: img/stm32_19.png + +- 调用 **usbh_initialize** 以及 os 需要的启动线程的函数即可使用 + +.. figure:: img/stm32_20.png + +- 如果使用 **msc**,并且带文件系统,需要自行添加文件系统文件了,对应的 porting 编写参考 **fatfs_usbh.c** 文件。 + +.. figure:: img/stm32_21.png \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/tools/img/chrytool1.png b/third-party/cherryusb/docs/source/tools/img/chrytool1.png new file mode 100644 index 0000000000000000000000000000000000000000..8717316a4b7014d7dfa53cb29d7cb90036ccf7af Binary files /dev/null and b/third-party/cherryusb/docs/source/tools/img/chrytool1.png differ diff --git a/third-party/cherryusb/docs/source/tools/img/chrytool2.png b/third-party/cherryusb/docs/source/tools/img/chrytool2.png new file mode 100644 index 0000000000000000000000000000000000000000..a0eb419284261eb0bd7cdedab6f9245fbec61d6d Binary files /dev/null and b/third-party/cherryusb/docs/source/tools/img/chrytool2.png differ diff --git a/third-party/cherryusb/docs/source/tools/img/chrytool3.png b/third-party/cherryusb/docs/source/tools/img/chrytool3.png new file mode 100644 index 0000000000000000000000000000000000000000..52a3556b84c9a096d31098662e25e3b52c81ac92 Binary files /dev/null and b/third-party/cherryusb/docs/source/tools/img/chrytool3.png differ diff --git a/third-party/cherryusb/docs/source/tools/img/chrytool4.png b/third-party/cherryusb/docs/source/tools/img/chrytool4.png new file mode 100644 index 0000000000000000000000000000000000000000..8ad68400a6611cb7aca65285b0752b95dad485d9 Binary files /dev/null and b/third-party/cherryusb/docs/source/tools/img/chrytool4.png differ diff --git a/third-party/cherryusb/docs/source/tools/img/chrytool5.png b/third-party/cherryusb/docs/source/tools/img/chrytool5.png new file mode 100644 index 0000000000000000000000000000000000000000..1784932403a3198baf28d649bc35633f0ab73834 Binary files /dev/null and b/third-party/cherryusb/docs/source/tools/img/chrytool5.png differ diff --git a/third-party/cherryusb/docs/source/tools/img/chrytool6.png b/third-party/cherryusb/docs/source/tools/img/chrytool6.png new file mode 100644 index 0000000000000000000000000000000000000000..931ccad818271092a1612f836cd8ff1b3d0acba9 Binary files /dev/null and b/third-party/cherryusb/docs/source/tools/img/chrytool6.png differ diff --git a/third-party/cherryusb/docs/source/tools/img/chrytool7.png b/third-party/cherryusb/docs/source/tools/img/chrytool7.png new file mode 100644 index 0000000000000000000000000000000000000000..283a7fc930e42f7d894c66f8a823a0ce69635ca2 Binary files /dev/null and b/third-party/cherryusb/docs/source/tools/img/chrytool7.png differ diff --git a/third-party/cherryusb/docs/source/tools/index.rst b/third-party/cherryusb/docs/source/tools/index.rst new file mode 100644 index 0000000000000000000000000000000000000000..0ebfb31d24631b51daf34f22b188ada3a4255158 --- /dev/null +++ b/third-party/cherryusb/docs/source/tools/index.rst @@ -0,0 +1,50 @@ +chryusb_configurator +-------------------------- + +`chryusb_configurator `_ 主要服务在使用设备协议栈时,生成描述符数组,从而调用 `usbd_desc_register` 进行注册。 + +- 首先我们从 github 下载 chryusb_configurator.exe,然后一路安装就可以了。然后双击打开,点击 `工程`,并点击 `新建工程` + +.. figure:: img/chrytool1.png + +- 新建完成以后,会生成默认的描述符配置,包含 **设备描述符**、 **配置描述符**、 **字符串描述符**,并且 **字符串描述符** 默认支持三个 + +.. figure:: img/chrytool2.png + +- 然后我们可以根据需要修改相关描述符的信息,比如 **设备描述符** 中的 vid、pid,class 参数, **配置描述符** 中的 **Power** 等等 + +- 然后是 class 的添加,需要点击 `文件`,并点击 `新建文件` + +.. figure:: img/chrytool3.png + +- 然后右侧提供了一些 class 的描述符模板,选择一个进行初始化 + +.. figure:: img/chrytool4.png + +- 如果是多个 class ,则上述两步重复操作就可以了 + +- 然后我们根据需要修改相关端点的参数,比如方向、地址、size、interval + +.. figure:: img/chrytool5.png + +- 最后点击 `文件` 并保存文件,后缀为 `.chry` +- 切换到工程文件,后缀是 `.chrybase`, 然后点击 `添加分组配置` 导入刚刚配置好的 class 文件 + +.. figure:: img/chrytool6.png + +- 点击 `工程` 并点击 `保存工程` +- 点击 `编译`,生成描述符数组 + +.. figure:: img/chrytool7.png + +- 复制编译后的文件到自己的工程中使用即可 + + +力科 USB Protocol Suite +-------------------------- + +Wireshark +-------------------------- + +Audacity +-------------------------- diff --git a/third-party/cherryusb/docs/source/usb/img/1.png b/third-party/cherryusb/docs/source/usb/img/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e85ddf7af2fc7f5116faee5b45b22cff533e4ff7 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/1.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/10.png b/third-party/cherryusb/docs/source/usb/img/10.png new file mode 100644 index 0000000000000000000000000000000000000000..bb57645ecedbe9910192896faa37e35a9cb76beb Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/10.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/11.png b/third-party/cherryusb/docs/source/usb/img/11.png new file mode 100644 index 0000000000000000000000000000000000000000..11056e33ce0fe3f690a98bbe5eff5a88e1858e03 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/11.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/12.png b/third-party/cherryusb/docs/source/usb/img/12.png new file mode 100644 index 0000000000000000000000000000000000000000..4149d81efe2faa0e376633fc8f9601aad5457d34 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/12.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/13.png b/third-party/cherryusb/docs/source/usb/img/13.png new file mode 100644 index 0000000000000000000000000000000000000000..29a544b2fbe6c0b665285d4b0bf16c1f73c7e91f Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/13.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/14.png b/third-party/cherryusb/docs/source/usb/img/14.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca094a40d1c1ce385e502881af138f5100be880 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/14.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/15.png b/third-party/cherryusb/docs/source/usb/img/15.png new file mode 100644 index 0000000000000000000000000000000000000000..eba7b89b966fa7563dcc5de36b119546c408d816 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/15.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/16.png b/third-party/cherryusb/docs/source/usb/img/16.png new file mode 100644 index 0000000000000000000000000000000000000000..259336cafd359d6442d20f76f5ed73c619b6d3fa Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/16.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/17.png b/third-party/cherryusb/docs/source/usb/img/17.png new file mode 100644 index 0000000000000000000000000000000000000000..c42de3905e3277a3eb3360a86362eddced523fd0 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/17.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/18.png b/third-party/cherryusb/docs/source/usb/img/18.png new file mode 100644 index 0000000000000000000000000000000000000000..f08b63543963f4a6e7548ddb484e57180b09e8e0 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/18.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/19.png b/third-party/cherryusb/docs/source/usb/img/19.png new file mode 100644 index 0000000000000000000000000000000000000000..2e6eb9ce78d4e25d3891056a66255d402d0d5c7f Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/19.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/2.png b/third-party/cherryusb/docs/source/usb/img/2.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4f5f20da62ca4a2b41c89dbc102831cf867ce6 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/2.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/20.png b/third-party/cherryusb/docs/source/usb/img/20.png new file mode 100644 index 0000000000000000000000000000000000000000..a44898a8c82c2bf6d178ae1a53b665781490acc2 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/20.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/21.png b/third-party/cherryusb/docs/source/usb/img/21.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa81e955a3efbcd67e01a371654de8a57c8c2a9 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/21.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/22.png b/third-party/cherryusb/docs/source/usb/img/22.png new file mode 100644 index 0000000000000000000000000000000000000000..370d39f9988ab1316ad37f22e18de3c33631604e Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/22.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/23.png b/third-party/cherryusb/docs/source/usb/img/23.png new file mode 100644 index 0000000000000000000000000000000000000000..e08db16e179cad25fd039eed91b3e9aa94a4ce92 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/23.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/24.png b/third-party/cherryusb/docs/source/usb/img/24.png new file mode 100644 index 0000000000000000000000000000000000000000..fec98d49a0b124d4bd9ddc6dd7bf0459a710afd4 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/24.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/25.png b/third-party/cherryusb/docs/source/usb/img/25.png new file mode 100644 index 0000000000000000000000000000000000000000..9bcaf151d8c184d306f2756d02e206bd16a0ecb3 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/25.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/26.png b/third-party/cherryusb/docs/source/usb/img/26.png new file mode 100644 index 0000000000000000000000000000000000000000..d439b7c48b54d83b94f9908d7c5ebebfcd20fc3e Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/26.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/27.png b/third-party/cherryusb/docs/source/usb/img/27.png new file mode 100644 index 0000000000000000000000000000000000000000..1047da1b03cfd05d271a1c0876dc3de99ed730e3 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/27.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/28.png b/third-party/cherryusb/docs/source/usb/img/28.png new file mode 100644 index 0000000000000000000000000000000000000000..95b760c5fb16b041c78eba4ba5f97ec54e759ffa Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/28.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/29.png b/third-party/cherryusb/docs/source/usb/img/29.png new file mode 100644 index 0000000000000000000000000000000000000000..09538d161c0c3a4efc26a6373177d4ca0b78e5ff Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/29.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/3.png b/third-party/cherryusb/docs/source/usb/img/3.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ef08230c1896cc630513f771eb8a3684c90779 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/3.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/30.png b/third-party/cherryusb/docs/source/usb/img/30.png new file mode 100644 index 0000000000000000000000000000000000000000..d3014f95386849cd3e5717e18b0b8839d71c653d Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/30.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/4.png b/third-party/cherryusb/docs/source/usb/img/4.png new file mode 100644 index 0000000000000000000000000000000000000000..f80c536674e64fbd116a105e844289da2cc8091c Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/4.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/5.png b/third-party/cherryusb/docs/source/usb/img/5.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6a4ba20df159e76eb42d3f390ac86a8a1c77fa Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/5.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/6.png b/third-party/cherryusb/docs/source/usb/img/6.png new file mode 100644 index 0000000000000000000000000000000000000000..2d280398a5c7f506af1eb33b6f06bfbcad6e4a49 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/6.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/7.png b/third-party/cherryusb/docs/source/usb/img/7.png new file mode 100644 index 0000000000000000000000000000000000000000..e7562f1183c5346cb52cc5674bf910f6a07a272c Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/7.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/8.png b/third-party/cherryusb/docs/source/usb/img/8.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ac6ad4c9c34e439f57759d93abfb8685cba6ea Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/8.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/9.png b/third-party/cherryusb/docs/source/usb/img/9.png new file mode 100644 index 0000000000000000000000000000000000000000..a8b5b2a3b63a45c449f5f4a12be868d26e906d51 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/9.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/overview1.png b/third-party/cherryusb/docs/source/usb/img/overview1.png new file mode 100644 index 0000000000000000000000000000000000000000..fbaf5a193261f8c06a6c9377de29d92f24b83555 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/overview1.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/overview2.png b/third-party/cherryusb/docs/source/usb/img/overview2.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b3b779b472956d5ff5dd59942325effec96e7a Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/overview2.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/usb_enum.png b/third-party/cherryusb/docs/source/usb/img/usb_enum.png new file mode 100644 index 0000000000000000000000000000000000000000..01c67c1564c3c6ff2b9c13a58b4d78ae36650f41 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/usb_enum.png differ diff --git a/third-party/cherryusb/docs/source/usb/img/usb_request.png b/third-party/cherryusb/docs/source/usb/img/usb_request.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9f2637832fa533ee47ea73260ed53b0f6d7242 Binary files /dev/null and b/third-party/cherryusb/docs/source/usb/img/usb_request.png differ diff --git a/third-party/cherryusb/docs/source/usb/usb2.0_basic.rst b/third-party/cherryusb/docs/source/usb/usb2.0_basic.rst new file mode 100644 index 0000000000000000000000000000000000000000..4faa19ddae58531567591f3a829d3405250f31df --- /dev/null +++ b/third-party/cherryusb/docs/source/usb/usb2.0_basic.rst @@ -0,0 +1,292 @@ +USB 基本概念(2.0 为主) +=========================== + +本文主要对 USB 官方手册 `usb2.0.pdf `_ 中提供的第五章、第七章、第八章、第九章进行讲解。 +如果是初学 usb 的同学,推荐先不要看本节,而是将示例 demo 能够跑通了,熟悉了使用,再来看。 + +简介 +--------- + +USB 是什么?干什么用的?有什么优点?这些大家可以百度,我就不提了。主要先说 USB 的接口和速度根据不同的 USB 版本的分类,如图所示: + +.. figure:: img/overview1.png + +其次是 USB 需要满足的电平标准,有了电平标准后,下面说的信号状态就可以进行分类了。USB2.0 和 USB3.0 支持的电压范围和最大电流如下: + +.. figure:: img/overview2.png + +USB 信号状态 +----------------- + +首先我们需要了解的是 USB 的电气特性中的 Signaling Level,也就是信号状态。USB 主要是靠 D+ 和 D- 来实现不同的信号状态,然后进行通信。官方手册 7.1.7 中列举出了低速、全速和高速时的信号状态对应的 D+ 和 D- 需要满足的要求。 + +.. figure:: img/1.png +.. figure:: img/2.png +.. figure:: img/3.png + +- **差分 0 和差分 1**: 这两个状态用于通过 USB 进行的通用数据通信。当 D+线为高电平、 D-线为低电平时,该状态为差分 1。当 D+线为低电平、 D-线为高电平时,该状态为差分 0。 +- **J 状态和 K 状态**: 除了差分信号外, USB 规范还定义了其他两个差分状态: J 状态和 K 状态。它们的定义由设备速度决定。在全速和高速设备上, J 状态为差分 1 而 K 状态是差分 0。在低速设备上,该情况则相反。 +- **单端 0( SE0)**: 在 D+和 D-均为低电平时所发生的状态。该状态表示一个复位、断连或数据包的结束。 +- **单端 1( SE1)**: 在 D+和 D-均为高电平时发生的状态。不会故意生成该状态,并且不能在 USB 设计中出现。 +- **闲置**: 必须在发送一个数据包的前后发生的状态。如果一个数据线为低电平,而另一个数据线为高电平,则表示闲置状态。高电平和低电平的定义由设备的速度决定。在全速设备上,闲置状态是指 D+为高电平、 D-为低电平。在低速设备上,该情况则相反。 +- **恢复**: 用于使设备从挂起状态唤醒。通过发送一个 K 状态实现该操作。 +- **数据包的开始( SOP)**: 当 D+和 D-线从闲置状态转换到 K 状态时,将在开始低速或全速数据包前发生。 +- **数据包的结束( EOP)**: 在低速或全速数据包结束时发生。当 SE0 状态持续两位时间(后面的内容将介绍位时间)以及 J 状态持续 1 位时间时,将发生 EOP。 +- **复位**: 在 SE0 状态持续 10 ms 时发生。在 SE0 至少持续 2.5 ms 后,该设备会复位,并开始进入复位状态。 +- **保持活动( Keep Alive)**: 在低速设备中使用的信号。低速设备缺少了一个帧起始数据包(用于防止挂起状态)。每次经过 1 ms,它们都会使用一个 EOP 来防止设备进入挂起状态。 + +.. note::这里需要注意的一点就是, J K状态和差分0/1,对于低速来说,和全速/高速是相反的。 + +下面我们通过一个波形,来区分这些信号状态: + +.. figure:: img/4.png + +- 第一个红框,可以看出是一个数据包的开始,并且假设这是一个全速设备,那么D+ 为高,D- 为低,是一个闲置状态。 +- 第二个红框,D+为低,D- 为高,说明是一个 K 状态,由 闲置转 K 状态说明他是一个 SOP。 +- 第三个红框开始表示数据,表示 JKJKJKJKJK。 +- 第四个红框表示 SE0 ,因为D+和 D-均为低电平。 +- 第五个红框,而 SE0 持续了一段时间后,变成了 D+高,D- 低,说明他是一个 J 状态,从 SE0 切换成 J 状态,说明他是一个 EOP。 + +USB 速度识别 +--------------------- + +USB 的速度是如何判定的? 这个见手册 7.1.5.1。USB 的速度检测主要是靠 D+ 和 D-线上拉 1.5K决定,如果 D+上拉1.5k,则该设备为全速设备,如果 D-上拉1.5k,则为低速设备。而高速设备初始是以一个全速设备的身份出现,和全速设备一样,D+线上有一个1.5k的上拉电阻。USB2.0的hub把它当作一个全速设备,之后,hub 和设备通过一系列握手信号确认双方的身份,最终判定该设备为高速设备。 + +.. figure:: img/5.png + +USB 连接与断开检测 +--------------------- + +那么 当我们的设备插上 USB 主机时,主机是如何知道有设备插入或者拔出呢?手册 7.1.7.3 给出了答案,如图所示: + +.. figure:: img/6.png +.. figure:: img/7.png + +首先是连接检测,主机检测到某一个数据线电平拉高保持了一段时间,就认为有设备连接上来了。低速设备连接时,主机会检测到D-线被拉高,全速/高速设备连接时,主机会检测到D+线被拉高。 +而断开检测,则是主机端D+、D-数据线上的下拉电阻起作用,断开后使得二者都在低电平;当低电平持续 TDDIS 时间就会被主机认为是断开状态。上图中,TDDIS在2到2.5us之间。 + +USB 电源 +--------------------- + +作为 USB 电源时, USB 设备可被划分为两种设备类型:总线供电和自供电。 + +- 总线供电是 USB 设计的一个优势。由于设备通过总线供电,因此不需要使用笨重的内部或外部电源,它仍能够维持自身操作。总线可由主机或集线器供电。使用某个总线供电的设备时,用户将设备配置为某种状态前必须考虑其功耗。 +- 自供电设备通过使用外部电源(如直流电源适配器或电池)为自己供电。自供电设备在进行设计的过程中需要考虑到一些注意事项。 USB 规范要求自供电设备一直监控自己的 VBUS 线。 VBUS 不存在的时间内,设备必须断开提供给 D+/D-线上的上拉电阻的电源,从而防止向主机或集线器供电。 否则,会导致 USB 合规性测试发生失败。但是自供电集线器能够从总线获得最多 100 mA 的电流。 + +USB 设备状态 +--------------------- + +在 USB 插上主机的那一刻, USB 设备本身的设备状态是会变化的。而这个设备状态,后面如果学习到枚举过程,可以知道,其实这段变化描述的就是枚举过程。这部分见手册 9.1.1。 + +.. figure:: img/9.png + +- 连接状态: 当将某个设备插入到主机/集线器,但主机/集线器不给 VBUS 线供电时,会出现这种状态。它通常在集线器检测到一个过流事件时出现。虽然仍连接着设备,但主机移除了供给它的电源。 +- 供电: 某个设备被连接到 USB 上并得到供电,但仍未接收到一个复位请求。 +- 默认: 某个设备被连接到 USB 上、得到供电,并且由主机进行了复位。这时,设备没有任何设备地址。 设备会响应地址 0。 +- 地址: 某个设备被连接到 USB、得到供电、被复位,并且有一个唯一的地址。但是设备仍未得到配置。 +- 配置: 设备已经连接到 USB、得到供电、被复位、具有唯一的地址、得到配置,但尚未进入挂起状态。此时,总线供电设备能够消耗超过 100 mA 的电流。 +- 挂起: 如上面所述,设备已经建立好了连接,并且得到配置,但在 3 ms 时间内不会进行任意总线操作。 + +翻译成中文图就是: + +.. figure:: img/10.png + +USB 编码与位填充 +--------------------- + +首先,USB 的数据是串行发送的,就像 UART、I2C、SPI 等等,连续的01 信号只通过一根数据线发送给接受者。但是因为发送者和接收者运行的频率不一样,信号的同步就是个问题,比如,接受者接收到了一个持续一段时间的低电平,无法得知这究竟是代表了 5 个 0 还是 1000 个 0。一个解决办法,就是在传输数据信号的同时,附加一个时钟信号,用来同步两端的传输,接受者在时钟信号的辅助下对数据信号采样,就可以正确解析出发送的数据了,比如 I2C 就是这样做的,SDA 来传输数据,SCL 来传输同步时钟: + +.. figure:: img/11.png + +虽然这样解决了问题,但是却需要附加一根时钟信号线来传输时钟。因为USB没有时钟信号,有没有不需要附加的时钟信号,也能保持两端的同步呢? +有的,这就是 RZ 编码(Return-to-zero Code),也叫做归零编码。 + +RZ 编码(Return-to-zero Code) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +RZ 编码(Return-to-zero Code),也叫做归零编码。在 RZ 编码中,正电平代表逻辑 1,负电平代表逻辑 0,并且,每传输完一位数据,信号返回到零电平,也就是说,信号线上会出现 3 种电平:正电平、负电平、零电平。 + +.. figure:: img/12.png + +从图上就可以看出来,因为每位传输之后都要归零,所以接受者只要在信号归零后采样即可,这样就不在需要单独的时钟信号。实际上, RZ 编码就是相当于把时钟信号用归零编码在了数据之内。这样的信号也叫做自同步(self-clocking)信号。 +这样虽然省了时钟数据线,但是还是有缺点的,因为在 RZ 编码中,大部分的数据带宽,都用来传输“归零”而浪费掉了。 + +NRZ 编码(Non-return-to-zero Code) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +去掉这个归零步骤,NRZ 编码(Non-return-to-zero Code)就出现了,和 RZ 的区别就是 NRZ 是不需要归零的。 + +.. figure:: img/13.png + +NRZI 编码(Non-Return-to-Zero Inverted Code) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +NRZI 编码(Non-Return-to-Zero Inverted Code)和 NRZ 的区别就是 NRZI 用信号的翻转代表一个逻辑,信号保持不变代表另外一个逻辑。这个见手册 7.1.8。 + +.. figure:: img/14.png + +如图所示,可以得出一个简单的记忆方式:遇到 0 的边沿电平就翻转,遇到 1 的边沿则不变。 + +位填充(bit-stuffing) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +但是,这样还是会有一个问题,就是虽然接受者可以主动和发送者的频率匹配,但是两者之间总会有误差。假如数据信号是 1000 个逻辑 1,经过 USB 的 NRZI 编码之后,就是很长一段没有变化的电平,在这种情况下,即使接受者的频率和发送者相差千分之一,就会造成把数据采样成 1001 个或者 999 个 1了。 +USB 对这个问题的解决办法,就是强制插 0,也就是(位填充)bit-stuffing,如果要传输的数据中有 6个连续的 1,发送前就会在第 6 个 1 后面强制插入一个 0,让发送的信号强制出现翻转,从而强制接受者进行频率调整。 +接受者只要删除 6 个连续 1 之后的 0,就可以恢复原始的数据了。这部分见手册 7.1.9。 + +.. figure:: img/15.png +.. figure:: img/16.png +.. figure:: img/17.png + +在数据被NRZI编码之前,在数据流中每六个连续的1之后插入一个0,以强制NRZI数据流中的过渡,这使接收器逻辑至少每七位有一次数据转换,以保证数据和时钟的锁定。比特填充是从同步模式开始启用。结束同步模式的数据 "一 "被算作是序列中的第一个 "一"。序列中的第一个。除了高速EOP期间,发射器的位填充总是被强制执行。如果需要按照 +位填充规则的要求,零位将被插入,即使它是数据包结束(EOP)信号前的最后一位。接收器必须对NRZI数据进行解码,识别填充位,并将其丢弃。 + +USB 字段(域) +--------------------- + +USB 字段构成了 USB 通信中最基本也是最小的单元,后面的包、事务,最根本都是由字段构成,而字段又是由比特构成。字段部分见手册 8.1。 + +.. note:: USB 的比特先行模式是按照 LSB 先行原则。 + +同步字段 +^^^^^^^^^^^^^^^^^^^^^^^^ + +在 USB 系统中,主机和设备不是共享一个时钟,这使得接收方没办法准确知道发送方什么时候发送数据,尽管能检测到SOP,但是远远不够,所有这个时候就需要同步字段,使得接收方和发送方收发过程中保持同步,所以任何一个包都要以同步字段开始。同步字段0x01,经过编码以后就是01010100B。 + +.. figure:: img/18.png + +包标识符字段 +^^^^^^^^^^^^^^^^^^^^^^^^ + +PID 由一个四位数据包类型字段和一个四位校验字段组成,占用 8 个bit,如图所示。 PID指示数据包的类型,并通过推断,数据包的格式和应用于数据包的错误检测类型包。 PID的四位校验字段是通过执行分组类型字段的一个补码来生成,从而确保PID的可靠解码,以便正确解释分组的其余部分,如果四个PID校验位不是它们各自的分组标识符位的补码,则存在PID错误。 + +.. figure:: img/19.png + +既然是 4个比特,说明了 PID 类型可以分为16种,从16种中,又细分成4类:令牌 PID,数据 PID,握手 PID 和特殊 PID。 + +.. figure:: img/20.png + +地址字段 +^^^^^^^^^^^^^^^^^^^^^^^^ + +地址字段又分为设备地址字段和端点地址字段,其中设备地址字段占用 7 个bit,除去0 地址,主机可以分配的地址有 127个。 + +.. figure:: img/21.png + +端点地址字段占用 4个 bit,总共可以提供 16 个端点。 + +.. figure:: img/22.png + +帧号字段 +^^^^^^^^^^^^^^^^^^^^^^^^ + +帧号字段占用 11 个bit,主机每发出一个帧,帧号都会加1,如图所示。而高速设备中,帧中又包含微帧,1帧=8微帧,微帧则是加0.1。关于帧和微帧的概念,后续补充。 + +.. figure:: img/23.png + +数据字段 +^^^^^^^^^^^^^^^^^^^^^^^^ + +根据传输类型不同,数据字段中的数据长度也是不定的,从 0-1024不等。 + +.. figure:: img/24.png + +CRC 字段 +^^^^^^^^^^^^^^^^^^^^^^^^ + +循环冗余校验(CRC)用于保护令牌和数据包中的所有非PID字段。PID不包含在包含CRC的分组的CRC校验中。 在执行比特填充之前,在发送器中的各个字段上生成所有CRC。 类似地,在去除填充位之后,在接收器中对CRC进行解码。令牌和数据包CRC为所有单比特和双比特错误提供100%的覆盖。 CRC失败被认为表示一个或多个受保护字段已损坏并导致接收器忽略这些字段,并且在大多数情况下,忽略整个数据包。 + +.. figure:: img/24.png + +- 令牌CRC + +为令牌提供五位CRC字段,并覆盖IN,SETUP和OUT令牌的ADDR和ENDP字段或SOF令牌的时间戳字段。 PING和SPLIT特殊令牌还包括一个五位CRC字段。 + +生成多项式为: G(X)= X^5 + X^2 + 1 +表示该多项式的二进制位模式是00101B。 如果接收到所有令牌位而没有错误,则接收器处的五位校验和将为01100B。 + +- 数据CRC + +数据CRC是应用于数据分组的数据字段的16位多项式。 + +生成多项式是:G(X)= X^16 + X^15 + X^2 + 1 +表示该多项式的二进制位模式是1000000000000101B。 如果没有错误地接收到所有数据和CRC位,则16位校验和将为1000000000001101B。 + +USB 包 +--------------------- + +包由字段组成,根据 PID 类型,包分为四大类:令牌包、数据包、握手包、特殊包。此节内容见官方 8.4.1。 + +.. figure:: img/25.png + +算上 SOP,则如图,组成一个完整的包。 + +.. figure:: img/26.png + +令牌包 +^^^^^^^^^^^^^^^^^^^^^^^^ + +令牌包分为:SETUP、IN、OUT、SOF,其中 SETUP、IN、OUT的字段组成一样,如图: + +.. figure:: img/27.png + +- PID 字段:定义了数据传输方向为USB主机到USB设备。 +- ADDR 字段:指明了USB设备地址。 +- ENDP 字段:指明了接收数据的端点号。 +- CRC 字段:用于ADDR字段和ENDP字段进行循环冗余校验。 + +SOF 包的字段组成,如图: + +.. figure:: img/28.png + +- PID 字段:定义了数据传输方向为USB主机到USB设备。 +- 帧号 字段:指明了USB传输的帧号,其11位。 +- CRC 字段:用于ADDR字段和ENDP字段进行循环冗余校验。 + +数据包 +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. figure:: img/29.png + +- PID 字段:用于指明不同的数据包类型。支持 4 种数据包,分别为: DATAO 、 DATA1 、DATA2 和MDATA。 +- 数据 字段:其中包含了传输的数据。其数据的大小根据数据传输类吧和川户需要而定。根据 USB 协议的规定,对于低速 USB 数据传输, 最大长度为8字节对于全速SB 数据传输,其最大长度为 1023 字节;对于高速 USB 数据传输,数据最大长度为 1024 。 +- CRC 字段:这里使用 16 位的循环冗余校验来对数据字段进行保护。 + +握手包 +^^^^^^^^^^^^^^^^^^^^^^^^ + +握手包由8位的PID构成,用于数据传输的末位报告本次数据传输的状成。握手包之后使是整个事务处理的结束信号EOP. + +.. figure:: img/30.png + +特殊包 +^^^^^^^^^^^^^^^^^^^^^^^^ + +USB 事务 +--------------------- + +USB 常用事务共有三种:SETUP、IN、OUT,除了控制传输使用三个事务,其他传输都使用两个事务。特殊事务则是不携带数据的事务。 + +SETUP 事务 +^^^^^^^^^^^^^^^^^^^^^^^^ + +IN 事务 +^^^^^^^^^^^^^^^^^^^^^^^^ + +OUT 事务 +^^^^^^^^^^^^^^^^^^^^^^^^ + +特殊事务 +^^^^^^^^^^^^^^^^^^^^^^^^ + +USB 传输 +--------------------- + +控制传输 +^^^^^^^^^^^^^^^^^^^^^^^^ + +批量传输 +^^^^^^^^^^^^^^^^^^^^^^^^ + +中断传输 +^^^^^^^^^^^^^^^^^^^^^^^^ + +同步传输 +^^^^^^^^^^^^^^^^^^^^^^^^ \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/usb/usb3.0_basic.rst b/third-party/cherryusb/docs/source/usb/usb3.0_basic.rst new file mode 100644 index 0000000000000000000000000000000000000000..1dbbd8152a8d90e08c4ee9243fcbc2c568890ae0 --- /dev/null +++ b/third-party/cherryusb/docs/source/usb/usb3.0_basic.rst @@ -0,0 +1,33 @@ +USB 基本概念(3.0 为主) +=========================== + + +简介 +------------ + + + +与 USB 2.0 相同和不同点 +-------------------------- + + +Link Layer +-------------------- + +LCW +^^^^^^^^^^ + +Protocol Layer +-------------------- + +LMP +^^^^^^^^^^^^^^^^^^^^^^^^ + +TP +^^^^^^^^^^^^^^^^^^^^^^^^ + +DP +^^^^^^^^^^^^^^^^^^^^^^^^ + +ITP +^^^^^^^^^^^^^^^^^^^^^^^^ \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/usb/usb_desc.rst b/third-party/cherryusb/docs/source/usb/usb_desc.rst new file mode 100644 index 0000000000000000000000000000000000000000..f0bcc7fec441341663cac3b55a8ecbb7ea5e4f6a --- /dev/null +++ b/third-party/cherryusb/docs/source/usb/usb_desc.rst @@ -0,0 +1,37 @@ +USB 描述符 +=========================== + +本节参考官方 usb2.0 pdf 9.5 节即可。 + +设备描述符 +--------------------- + +配置描述符 +--------------------- + +接口描述符 +--------------------- + +端点描述符 +--------------------- + +字符串描述符 +--------------------- + +接口关联描述符 +--------------------- + +设备限定描述符 +--------------------- + +其他速度描述符 +--------------------- + +BOS 描述符 +--------------------- + +超高速端点伴随描述符 +--------------------- + +增加型超高速同步端点伴随描述符 +------------------------------- diff --git a/third-party/cherryusb/docs/source/usb/usb_enum.rst b/third-party/cherryusb/docs/source/usb/usb_enum.rst new file mode 100644 index 0000000000000000000000000000000000000000..1434424f5f46b054127ced1522234b3eb07ac7b7 --- /dev/null +++ b/third-party/cherryusb/docs/source/usb/usb_enum.rst @@ -0,0 +1,22 @@ +USB 枚举 +=========================== + +当我们了解了 usb 设备请求以后,就可以来学习下 USB 设备的整个枚举过程了,看看是如何枚举出一个串口、鼠标、u盘等设备了。枚举过程中主机会发送设备请求来获取相关信息(也就是描述符),具体发送哪些,参考下图。 + +.. figure:: img/usb_enum.png + +- 首先设备接上 USB 线,然后插上电脑 +- 设备插上以后上电,处于供电状态 +- 主机通过 D+/D- 识别到设备插入 +- 对设备进行复位 +- 主机发送 **获取设备描述符请求** +- 可选的复位操作 +- 主机发送 **设置设备地址请求** +- 主机发送 **获取配置描述符请求**,可能会获取多次,无所谓 +- 主机发送 **获取字符串描述符请求**,正常会获取3个字符串,如果后面的描述符中指定了字符串,则继续获取指定的字符串 +- 主机发送 **获取设备限定描述符请求**,用来获取在设备工作在其他速度上的请求,如果设备只能工作在全速模式,则必须回复 stall,并且协议栈中一定会打印该请求告诉你此命令设备不支持。 +- 主机发送 **设置配置请求**,对设备的端点进行配置,通常是根据端点描述符中的配置进行设置。 +- 到此标准的设备请求结束 +- 主机根据接口描述符加载对应支持的 class 驱动,如果主机不支持,则会提示该设备找不到驱动 +- 加载完成以后,开始执行该 class 相关的请求 +- 最终进行 class 的数据流传输 \ No newline at end of file diff --git a/third-party/cherryusb/docs/source/usb/usb_request.rst b/third-party/cherryusb/docs/source/usb/usb_request.rst new file mode 100644 index 0000000000000000000000000000000000000000..8e42565d3bd1b8d341b3349e60df25c921891ef2 --- /dev/null +++ b/third-party/cherryusb/docs/source/usb/usb_request.rst @@ -0,0 +1,6 @@ +USB 设备请求 +=========================== + +本节参考官方 usb2.0 pdf 9.3、9.4 节即可。 + +.. figure:: img/usb_request.png diff --git a/third-party/cherryusb/docs/source/usbdev.svg b/third-party/cherryusb/docs/source/usbdev.svg new file mode 100644 index 0000000000000000000000000000000000000000..d9fa9549a2d3c2fc149a07e6f125aa54d0e8be68 --- /dev/null +++ b/third-party/cherryusb/docs/source/usbdev.svg @@ -0,0 +1,21 @@ +
usbd_desc_register
usbd_desc_register +
usbd_add_interface
usbd_add_interface +
usbd_initialize
usbd_initialize +
usbd_add_endpoint
usbd_add_endpoint +
Listclass_interface_handlerclass_endpoint_handlervendor_handlernotify_handlerhid_report_descriptorhid_report_descriptor_lenintf_numusbd_intf_head
append into list
append into list
in_ep_cb[8]

out_ep_cb[8]
in_ep_cb[8]...
fill ep callback
fill ep callback
usb_dc_init
usb_dc_init +
USBD_IRQHandler
USBD_IRQHandler +
SETUP complete intstatus
SETUP complete intstatus
IN complete intstatus
IN complete intstatus +
OUT complete intstatus
OUT complete intstatus +
usbd_event_reset_handler
usbd_event_reset_handler +
RESET complete intstatus
RESET complete intstatus
usbd_event_ep0_setup_complete_handler
usbd_event_ep0_setup_complete_handler +
usbd_event_ep_in_complete_handler
usbd_event_ep_in_complete_handler +
usbd_event_ep_out_complete_handler
usbd_event_ep_out_complete_handler +
enable ep0

start reading setup
enable ep0...
usbd_setup_request_handler
usbd_setup_request_handler +
usbd_standard_request_handler
usbd_standard_request_handler +
usbd_class_request_handler
usbd_class_request_handler +
usbd_vendor_request_handler
usbd_vendor_request_handler +
usbd_class_interface_request_handler
usbd_class_interface_request_handler +
usbd_class_endpoint_request_handler
usbd_class_endpoint_request_handler +
if ep != 0x80
if ep != 0x80
if ep != 0x00
if ep != 0x00
in_ep_cb[ep & 0x7f]
in_ep_cb[ep & 0x7f] +
out_ep_cb[ep & 0x7f]
out_ep_cb[ep & 0x7f] +
NULL
NULL
Listclass_interface_handlerclass_endpoint_handlervendor_handlernotify_handlerhid_report_descriptorhid_report_descriptor_lenintf_num
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/third-party/cherryusb/docs/source/usbhost.svg b/third-party/cherryusb/docs/source/usbhost.svg new file mode 100644 index 0000000000000000000000000000000000000000..b7d537b56108f38a1181445c2b655a7ea4a50111 --- /dev/null +++ b/third-party/cherryusb/docs/source/usbhost.svg @@ -0,0 +1,9 @@ +
usbh_initialize
usbh_initialize
usbh_hub_initialize
usbh_hub_initialize
usbh_roothub_register
usbh_roothub_register
create usbh_hub_thread
create usbh_hub_thread
usb_hc_init
usb_hc_init
usbh_roothub_thread_wakeup
usbh_roothub_thread_wakeup +
hub_int_complete_callback
hub_int_complete_callback +
wakeup
wakeup
wakeup
wakeup
usbh_enumerate
usbh_enumerate +
search all ports
search all ports
usbh_hub_events
usbh_hub_events +
CLASS_CONNECT
CLASS_CONNECT +
search all interface drivers
search all interface drivers
usbh_find_class_driver
usbh_find_class_driver +
if hub class?
if hub class?
usbh_int_urb_fill


usbh_submit_urb
usbh_int_urb_fill...
Class Register
Class Register +
USBH_IRQHandler
USBH_IRQHandler +
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/third-party/cherryusb-0.7.0/makefile b/third-party/cherryusb/makefile similarity index 91% rename from third-party/cherryusb-0.7.0/makefile rename to third-party/cherryusb/makefile index dfc8f8c18e20f71545e1083a6092e6d8d96d5f82..eddbbbe04753abff5644573fe82980bfa9919a7a 100644 --- a/third-party/cherryusb-0.7.0/makefile +++ b/third-party/cherryusb/makefile @@ -1,5 +1,5 @@ -CHERRY_USB_DIR := $(THIRD_PARTY_CUR_DIR)/cherryusb-0.7.0 +CHERRY_USB_DIR := $(THIRD_PARTY_CUR_DIR)/cherryusb INC_DIR += $(CHERRY_USB_DIR)/core \ $(CHERRY_USB_DIR)/common \ @@ -14,6 +14,10 @@ ifdef CONFIG_CHERRY_USB_PORT_XHCI SRC_DIR += $(CHERRY_USB_DIR)/port/xhci endif #CONFIG_CHERRY_USB_PORT_XHCI +ifdef CONFIG_USE_FREERTOS + EXCL_SRC += $(CHERRY_USB_DIR)/osal/usb_osal_rtthread.c +endif #CONFIG_USE_FREERTOS + ifdef CONFIG_CHERRYUSB_HOST EXCL_SRC += $(CHERRY_USB_DIR)/core/usbd_core.c diff --git a/third-party/cherryusb-0.7.0/osal/usb_osal.h b/third-party/cherryusb/osal/usb_osal.h similarity index 82% rename from third-party/cherryusb-0.7.0/osal/usb_osal.h rename to third-party/cherryusb/osal/usb_osal.h index 45adf3133425d52f3462a5740b5a183f7c7552e0..7f72355974a5ef7ef01327de9b0043ce0ae9ba49 100644 --- a/third-party/cherryusb-0.7.0/osal/usb_osal.h +++ b/third-party/cherryusb/osal/usb_osal.h @@ -12,6 +12,7 @@ typedef void *usb_osal_thread_t; typedef void *usb_osal_sem_t; typedef void *usb_osal_mutex_t; +typedef void *usb_osal_mq_t; typedef void (*usb_thread_entry_t)(void *argument); usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args); @@ -26,10 +27,13 @@ void usb_osal_mutex_delete(usb_osal_mutex_t mutex); int usb_osal_mutex_take(usb_osal_mutex_t mutex); int usb_osal_mutex_give(usb_osal_mutex_t mutex); +usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs); +int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr); +int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout); + size_t usb_osal_enter_critical_section(void); void usb_osal_leave_critical_section(size_t flag); void usb_osal_msleep(uint32_t delay); #endif /* USB_OSAL_H */ - diff --git a/third-party/cherryusb-0.7.0/osal/usb_osal_freertos.c b/third-party/cherryusb/osal/usb_osal_freertos.c similarity index 64% rename from third-party/cherryusb-0.7.0/osal/usb_osal_freertos.c rename to third-party/cherryusb/osal/usb_osal_freertos.c index 009a61b32b9977f8eca99a549f5c758f47caf198..e33bf39de4a7debbb2c9e56f0839cd063d95e7ef 100644 --- a/third-party/cherryusb-0.7.0/osal/usb_osal_freertos.c +++ b/third-party/cherryusb/osal/usb_osal_freertos.c @@ -3,6 +3,13 @@ * * SPDX-License-Identifier: Apache-2.0 */ + +#if defined(__aarch64__) +#include "faarch64.h" +#else +#include "faarch32.h" +#endif + #include "usb_osal.h" #include "usb_errno.h" #include @@ -38,12 +45,13 @@ int usb_osal_sem_give(usb_osal_sem_t sem) BaseType_t xHigherPriorityTaskWoken = pdFALSE; int ret; + /* TODO: consider poll usb event */ ret = xSemaphoreGiveFromISR((SemaphoreHandle_t)sem, &xHigherPriorityTaskWoken); if (ret == pdPASS) { portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } - return (ret == pdPASS) ? 0 : -EINVAL; + return (ret == pdPASS) ? 0 : -ETIMEDOUT; } usb_osal_mutex_t usb_osal_mutex_create(void) @@ -63,18 +71,49 @@ int usb_osal_mutex_take(usb_osal_mutex_t mutex) int usb_osal_mutex_give(usb_osal_mutex_t mutex) { - return (xSemaphoreGive((SemaphoreHandle_t)mutex) == pdPASS) ? 0 : -EINVAL; + return (xSemaphoreGive((SemaphoreHandle_t)mutex) == pdPASS) ? 0 : -ETIMEDOUT; +} + +usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs) +{ + return (usb_osal_mq_t)xQueueCreate(max_msgs, sizeof(void *)); +} + +int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr) +{ + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + int ret; + + ret = xQueueSendFromISR((usb_osal_mq_t)mq, &addr, &xHigherPriorityTaskWoken); + if (ret == pdPASS) { + portYIELD_FROM_ISR(xHigherPriorityTaskWoken); + } + + return (ret == pdPASS) ? 0 : -ETIMEDOUT; +} + +int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout) +{ + return (xQueueReceive((usb_osal_mq_t)mq, addr, timeout) == pdPASS) ? 0 : -ETIMEDOUT; } size_t usb_osal_enter_critical_section(void) { - taskDISABLE_INTERRUPTS(); - return 1; + /* + taskDISABLE_INTERRUPTS(); + return 1; + */ + uint32_t cur; + + cur = MFCPSR(); + MTCPSR(cur | 0xC0); + return cur; } void usb_osal_leave_critical_section(size_t flag) { - taskENABLE_INTERRUPTS(); + /* taskENABLE_INTERRUPTS();*/ + MTCPSR(flag); } void usb_osal_msleep(uint32_t delay) diff --git a/third-party/cherryusb/port/xhci/usb_hc_xhci.c b/third-party/cherryusb/port/xhci/usb_hc_xhci.c new file mode 100644 index 0000000000000000000000000000000000000000..70761733b7146877639ef5189cc1f3e651eb8cbe --- /dev/null +++ b/third-party/cherryusb/port/xhci/usb_hc_xhci.c @@ -0,0 +1,510 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: usb_hc_xhci.c + * Date: 2022-09-19 17:24:36 + * LastEditTime: 2022-09-19 17:24:36 + * Description:  This file is for xhci function implementation. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 zhugengyu 2022/9/19 init commit + * 1.1 zhugengyu 2022/10/9 add dumpers and fix command abort + * 2.0 zhugengyu 2023/3/29 support usb3.0 device attached at roothub + */ + +/***************************** Include Files *********************************/ +#include "usbh_hub.h" + +#include "xhci.h" + +/************************** Constant Definitions *****************************/ + +/************************** Variable Definitions *****************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ + +/************************** Function Prototypes ******************************/ + +/*****************************************************************************/ +__WEAK void usb_hc_low_level_init(uint32_t id) +{ +} + +__WEAK void *usb_hc_malloc(size_t size) +{ + return NULL; +} + +__WEAK void *usb_hc_malloc_align(size_t align, size_t size) +{ + return NULL; +} + +__WEAK void usb_hc_free() +{ +} + +/* one may get xhci register base address by PCIe bus emuration */ +__WEAK unsigned long usb_hc_get_register_base(uint32_t id) +{ + return 0U; +} + +static inline struct xhci_host* xhci_get_inst_of_port(struct usbh_hubport *hport) { + USB_ASSERT(hport && hport->parent); + struct usbh_bus *usb = hport->parent->usb; + return (struct xhci_host*)usb->priv; +} + +static struct xhci_host xhci_host[CONFIG_USBHOST_XHCI_NUM]; + +/* xhci hardware init */ +int usb_hc_init(uint32_t id) +{ + USB_ASSERT(id < CONFIG_USBHOST_XHCI_NUM); + int rc = 0; + struct usbh_bus *bus = usbh_get_bus_of_index(id); + USB_ASSERT(bus); + struct xhci_host *xhci = &(xhci_host[id]); + + size_t flag = usb_osal_enter_critical_section(); /* no interrupt when init hc */ + + usb_hc_low_level_init(id); /* set gic and memp */ + + memset(xhci, 0, sizeof(*xhci)); + xhci->bus = bus; + bus->priv = xhci; + if (rc = xhci_probe(xhci, usb_hc_get_register_base(id)) != 0) { + goto err_open; + } + + if (rc = xhci_open(xhci) != 0 ) { + goto err_open; + } + + err_open: + usb_osal_leave_critical_section(flag); + return rc; +} + +int usbh_roothub_control(struct usbh_bus *usb, struct usb_setup_packet *setup, uint8_t *buf) +{ + uint8_t nports; + uint8_t port; + uint32_t portsc; + uint32_t status; + int ret = 0; + struct xhci_host *xhci = usb->priv; + nports = CONFIG_USBHOST_MAX_RHPORTS; + + port = setup->wIndex; + + /* + bmRequestType bit[4:0], define whether the request is directed to the device (0000b), + specific interface (00001b), endpoint (00010b), or other element (00011b) + bRequest, identifies the request + wValue, pass the request-specific info to the device + */ + if (setup->bmRequestType & USB_REQUEST_RECIPIENT_DEVICE) /* request is directed to device */ + { + switch (setup->bRequest) + { + case HUB_REQUEST_CLEAR_FEATURE: /* disable the feature */ + switch (setup->wValue) + { + case HUB_FEATURE_HUB_C_LOCALPOWER: + USB_LOG_ERR("HUB_FEATURE_HUB_C_LOCALPOWER not implmented.\n"); + break; + case HUB_FEATURE_HUB_C_OVERCURRENT: + USB_LOG_ERR("HUB_FEATURE_HUB_C_OVERCURRENT not implmented.\n"); + break; + default: + return -EPIPE; + } + break; + case HUB_REQUEST_SET_FEATURE: /* set a value reported in the hub status */ + switch (setup->wValue) + { + case HUB_FEATURE_HUB_C_LOCALPOWER: + USB_LOG_ERR("HUB_FEATURE_HUB_C_LOCALPOWER not implmented.\n"); + break; + case HUB_FEATURE_HUB_C_OVERCURRENT: + USB_LOG_ERR("HUB_FEATURE_HUB_C_OVERCURRENT not implmented.\n"); + break; + default: + return -EPIPE; + } + break; + case HUB_REQUEST_GET_DESCRIPTOR: + USB_LOG_ERR("HUB_REQUEST_GET_DESCRIPTOR not implmented.\n"); + break; + case HUB_REQUEST_GET_STATUS: + USB_ASSERT(buf); + memset(buf, 0, 4); + break; + default: + break; + } + } + else if (setup->bmRequestType & USB_REQUEST_RECIPIENT_OTHER) + { + switch (setup->bRequest) + { + case HUB_REQUEST_CLEAR_FEATURE: + if (!port || port > nports) + { + return -EPIPE; + } + + portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port ) ); + switch (setup->wValue) + { + case HUB_PORT_FEATURE_ENABLE: + break; + case HUB_PORT_FEATURE_SUSPEND: + case HUB_PORT_FEATURE_C_SUSPEND: + break; + case HUB_PORT_FEATURE_POWER: + break; + case HUB_PORT_FEATURE_C_CONNECTION: + portsc |= XHCI_PORTSC_CSC; + break; + case HUB_PORT_FEATURE_C_ENABLE: + portsc |= XHCI_PORTSC_PEC; + break; + case HUB_PORT_FEATURE_C_OVER_CURREN: + break; + case HUB_PORT_FEATURE_C_RESET: + break; + default: + return -EPIPE; + } + + uint32_t pclear = portsc & XHCI_PORTSC_RW_MASK; + /* clear port status */ + writel(pclear, xhci->op + XHCI_OP_PORTSC ( port )); + + break; + case HUB_REQUEST_SET_FEATURE: + if (!port || port > nports) + { + return -EPIPE; + } + + switch (setup->wValue) + { + case HUB_PORT_FEATURE_SUSPEND: + break; + case HUB_PORT_FEATURE_POWER: + break; + case HUB_PORT_FEATURE_RESET: + ret = xhci_port_enable(xhci, port); + break; + default: + return -EPIPE; + } + break; + case HUB_REQUEST_GET_STATUS: + if (!port || port > nports) + { + return -EPIPE; + } + + portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port ) ); + status = 0; + + if (portsc & XHCI_PORTSC_CSC) + { + /* Port connection status changed */ + status |= (1 << HUB_PORT_FEATURE_C_CONNECTION); + + /* always clear all the status change bits */ + uint32_t temp = portsc & ( XHCI_PORTSC_PRESERVE | XHCI_PORTSC_CHANGE ); + writel ( temp, xhci->op + XHCI_OP_PORTSC ( port ) ); + } + + if (portsc & XHCI_PORTSC_PEC) + { + /* Port enabled status changed */ + status |= (1 << HUB_PORT_FEATURE_C_ENABLE); + } + + if (portsc & XHCI_PORTSC_OCC) + { + /* Port status changed due to over-current */ + status |= (1 << HUB_PORT_FEATURE_C_OVER_CURREN); + } + + if (portsc & XHCI_PORTSC_CCS) + { + /* Port connected */ + status |= (1 << HUB_PORT_FEATURE_CONNECTION); + } + + if (portsc & XHCI_PORTSC_PED) + { + /* Port enabled */ + status |= (1 << HUB_PORT_FEATURE_ENABLE); + + const unsigned int speed = xhci_root_speed(xhci, port); + USB_LOG_DBG("Port-%d speed = %d \r\n", port, speed); + if (speed == USB_SPEED_LOW) + { + status |= (1 << HUB_PORT_FEATURE_LOWSPEED); + } + else if (speed == USB_SPEED_HIGH) + { + status |= (1 << HUB_PORT_FEATURE_HIGHSPEED); + } + /* else is full-speed */ + } + + if (portsc & XHCI_PORTSC_OCA) + { + /* Over-current condition */ + status |= (1 << HUB_PORT_FEATURE_OVERCURRENT); + } + + if (portsc & XHCI_PORTSC_PR) + { + /* Reset is in progress */ + status |= (1 << HUB_PORT_FEATURE_RESET); + } + + if (portsc & XHCI_PORTSC_PP) + { + /* Port is not power off */ + status |= (1 << HUB_PORT_FEATURE_POWER); + } + memcpy(buf, &status, 4); + break; + default: + break; + } + } + + return 0; +} + +uint8_t usbh_get_port_speed(struct usbh_hub *hub, const uint8_t port) +{ + USB_ASSERT(hub); + struct usbh_bus *usb = hub->usb; + USB_ASSERT(usb && usb->priv); + struct xhci_host *xhci = usb->priv; + + if (hub->is_roothub) { + return xhci_root_speed(xhci, port); + } else { + struct usbh_hubport *roothub_port = usbh_root_hub_port(&(hub->child[port])); + /* TODO, hanlde TT for low-speed device on high-speed hub, but it doesn't matter, since + we haven't well handle hub yet */ + USB_ASSERT(roothub_port); + return xhci_root_speed(xhci, roothub_port->port); + } +} + +int usbh_ep_pipe_reconfigure(struct usbh_bus *usb, usbh_pipe_t pipe, uint8_t dev_addr, uint8_t mtu, uint8_t speed) +{ + struct xhci_endpoint *ppipe = (struct xhci_endpoint *)pipe; + size_t old_mtu = ppipe->mtu; + int rc = 0; + + if (mtu != old_mtu) { + ppipe->mtu = mtu; + rc = xhci_endpoint_mtu(ppipe); + } + + return rc; +} + +int usbh_pipe_alloc(usbh_pipe_t *pipe, const struct usbh_endpoint_cfg *ep_cfg) +{ + int rc = 0; + int slot_id = 0; + struct xhci_host *xhci = xhci_get_inst_of_port(ep_cfg->hport); + struct usbh_hubport *hport = ep_cfg->hport; + struct xhci_endpoint *ppipe = usb_align(XHCI_RING_SIZE, sizeof(struct xhci_endpoint)); + struct xhci_slot *slot; + + if (NULL == ppipe) { + return -ENOMEM; + } + + memset(ppipe, 0, sizeof(struct xhci_endpoint)); + + ppipe->waitsem = usb_osal_sem_create(0); + ppipe->waiter = false; + ppipe->urb = NULL; + ppipe->hport = hport; + + ppipe->address = ep_cfg->ep_addr; + ppipe->mtu = ep_cfg->ep_mps; + ppipe->interval = ep_cfg->ep_interval; + ppipe->ep_type = ep_cfg->ep_type; + ppipe->burst = 0U; + + if (ppipe->address == 0) { /* if try to allocate ctrl ep, open device first */ + USB_LOG_DBG("allocate device for port-%d \r\n", hport->port); + rc = xhci_device_open(xhci, ppipe, &slot_id); + if (rc) { + goto failed; + } + + slot = xhci->slot[slot_id]; + USB_ASSERT(slot); + rc = xhci_ctrl_endpoint_open(xhci, slot, ppipe); + if (rc) { + goto failed; + } + + rc = xhci_device_address(xhci, slot, ppipe); + if (rc) { + goto failed; + } + } else { + slot_id = hport->dev_addr; + slot = xhci->slot[slot_id]; + + rc = xhci_work_endpoint_open(xhci, slot, ppipe); + if (rc) { + goto failed; + } + } + + *pipe = (usbh_pipe_t)ppipe; + return rc; +failed: + usb_free(ppipe); + *pipe = NULL; + return rc; +} + +int usbh_get_xhci_devaddr(usbh_pipe_t *pipe) +{ + struct xhci_endpoint *ppipe = (struct xhci_endpoint *)pipe; + USB_ASSERT(ppipe && (ppipe->slot)); + return ppipe->slot->id; +} + +int usbh_pipe_free(usbh_pipe_t pipe) +{ + int ret = 0; + struct xhci_endpoint *ppipe = (struct xhci_endpoint *)pipe; + + if (!ppipe) { + return -EINVAL; + } + + struct usbh_urb *urb = ppipe->urb; + if (urb) { + usbh_kill_urb(urb); + } + + size_t flags = usb_osal_enter_critical_section(); + xhci_endpoint_close(ppipe); + usb_osal_leave_critical_section(flags); + return 0; +} + +int usbh_submit_urb(struct usbh_urb *urb) +{ + int ret = 0; + if (!urb || !urb->pipe) { + return -EINVAL; + } + + struct xhci_endpoint *ppipe = (struct xhci_endpoint *)urb->pipe; + struct xhci_host *xhci = ppipe->xhci; + struct usb_setup_packet *setup = urb->setup; + size_t flags = usb_osal_enter_critical_section(); + + urb->errorcode = -EBUSY; + urb->actual_length = 0U; + + ppipe->urb = urb; + ppipe->timeout = urb->timeout; + if (ppipe->timeout > 0) { + ppipe->waiter = true; + } else { + ppipe->waiter = false; + } + + usb_osal_leave_critical_section(flags); + switch (ppipe->ep_type) { + case USB_ENDPOINT_TYPE_CONTROL: + USB_ASSERT(setup); + if (setup->bRequest == USB_REQUEST_SET_ADDRESS) { + /* Set address command sent during xhci_alloc_pipe. */ + goto skip_req; + } + + USB_LOG_DBG("%s request-%d.\n", __func__, setup->bRequest); + xhci_endpoint_message(ppipe, setup, urb->transfer_buffer, urb->transfer_buffer_length); + break; + case USB_ENDPOINT_TYPE_INTERRUPT: + case USB_ENDPOINT_TYPE_BULK: + xhci_endpoint_stream(ppipe, urb->transfer_buffer, urb->transfer_buffer_length); + break; + default: + USB_ASSERT(0U); + break; + } + + /* wait all ring handled by xHc */ + int cc = xhci_event_wait(xhci, ppipe, &ppipe->reqs); + if ((cc != XHCI_CMPLT_SUCCESS) && + !((cc == XHCI_CMPLT_TIMEOUT) && (ppipe->ep_type == USB_ENDPOINT_TYPE_INTERRUPT))) + { + /* ignore transfer timeout for interrupt type */ + USB_LOG_ERR("%s: xfer failed (cc %d).\n", __func__, cc); + ret = -1; + urb->errorcode = cc; + goto errout_timeout; + } + +skip_req: +errout_timeout: + /* Timeout will run here */ + usbh_kill_urb(urb); + return ret; +} + +int usbh_kill_urb(struct usbh_urb *urb) +{ + return 0; +} + +void USBH_IRQHandler(void *param) +{ + USB_ASSERT(param); + struct usbh_bus *bus = (struct usbh_bus *)param; + struct xhci_host *xhci = bus->priv; + USB_ASSERT(xhci); + uint32_t usbsts; + uint32_t runtime; + + /* clear interrupt status */ + usbsts = readl ( xhci->op + XHCI_OP_USBSTS ); + usbsts |= XHCI_USBSTS_EINT; + writel(usbsts, xhci->op + XHCI_OP_USBSTS); + + /* ack interrupt */ + runtime = readl(xhci->run + XHCI_RUN_IR_IMAN ( 0 )); + runtime |= XHCI_RUN_IR_IMAN_IP; + writel (runtime, xhci->run + XHCI_RUN_IR_IMAN ( 0 )); + + (void)xhci_event_process(xhci); +} \ No newline at end of file diff --git a/third-party/cherryusb/port/xhci/usb_hc_xhci.h b/third-party/cherryusb/port/xhci/usb_hc_xhci.h new file mode 100644 index 0000000000000000000000000000000000000000..151b5bdc348e2e733fcbaa78764f1aa5b3ca3c68 --- /dev/null +++ b/third-party/cherryusb/port/xhci/usb_hc_xhci.h @@ -0,0 +1,38 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: usb_hc_xhci.h + * Date: 2022-07-19 09:26:25 + * LastEditTime: 2022-07-19 09:26:25 + * Description:  This file is for xhci data structure definition. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 zhugengyu 2022/9/19 init commit + * 2.0 zhugengyu 2023/3/29 support usb3.0 device attached at roothub + */ + +#ifndef USB_HC_XHCI_H +#define USB_HC_XHCI_H + +/***************************** Include Files *********************************/ +#include "usbh_core.h" + +/************************** Constant Definitions *****************************/ + +/************************** Variable Definitions *****************************/ + +/***************** Macros (Inline Functions) Definitions *********************/ + +/************************** Function Prototypes ******************************/ diff --git a/third-party/cherryusb/port/xhci/xhci.c b/third-party/cherryusb/port/xhci/xhci.c new file mode 100644 index 0000000000000000000000000000000000000000..ed574db75a9cdc38d9ef1709a28f9c26805ea86d --- /dev/null +++ b/third-party/cherryusb/port/xhci/xhci.c @@ -0,0 +1,2564 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: xhci.c + * Date: 2022-07-19 09:26:25 + * LastEditTime: 2022-07-19 09:26:25 + * Description:  This file is for xhci functions implmentation. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 zhugengyu 2022/9/19 init commit + * 2.0 zhugengyu 2023/3/29 support usb3.0 device attached at roothub + */ + +#include "usbh_core.h" +#include "usbh_hub.h" + +#include "xhci_reg.h" +#include "xhci.h" + + +/** @file + * + * USB eXtensible Host Controller Interface (xHCI) driver + * + */ + +#define XHCI_DUMP 1 + +/** Define a XHCI speed in PSI + * + * @v mantissa Mantissa + * @v exponent Exponent (in engineering terms: 1=k, 2=M, 3=G) + * @ret speed USB speed + */ +#define XCHI_PSI( mantissa, exponent ) ( (exponent << 16) | (mantissa) ) + +/** USB device speeds */ +enum { + /** Not connected */ + XCHI_PSI_NONE = 0, + /** Low speed (1.5Mbps) */ + XCHI_PSI_LOW = XCHI_PSI ( 1500, 1 ), + /** Full speed (12Mbps) */ + XCHI_PSI_FULL = XCHI_PSI ( 12, 2 ), + /** High speed (480Mbps) */ + XCHI_PSI_HIGH = XCHI_PSI ( 480, 2 ), + /** Super speed (5Gbps) */ + XCHI_PSI_SUPER = XCHI_PSI ( 5, 3 ), +}; + + +/** + * Calculate buffer alignment + * + * @v len Length + * @ret align Buffer alignment + * + * Determine alignment required for a buffer which must be aligned to + * at least XHCI_MIN_ALIGN and which must not cross a page boundary. + */ +static inline size_t xhci_align ( size_t len ) { + size_t align; + + /* Align to own length (rounded up to a power of two) */ + align = ( 1 << fls ( len - 1 ) ); + + /* Round up to XHCI_MIN_ALIGN if needed */ + if ( align < XHCI_MIN_ALIGN ) + align = XHCI_MIN_ALIGN; + + return align; +} + +/** + * Write potentially 64-bit register + * + * @v xhci xHCI device + * @v value Value + * @v reg Register address + * @ret rc Return status code + */ +static inline int xhci_writeq ( struct xhci_host *xhci, uintptr_t value, void *reg ) { + + /* If this is a 32-bit build, then this can never fail + * (allowing the compiler to optimise out the error path). + */ + if ( sizeof ( value ) <= sizeof ( uint32_t ) ) { + writel ( value, reg ); + writel ( 0, ( reg + sizeof ( uint32_t ) ) ); + return 0; + } + + /* If the device does not support 64-bit addresses and this + * address is outside the 32-bit address space, then fail. + */ + if ( ( value & ~0xffffffffULL ) && ! xhci->addr64 ) { + USB_LOG_DBG("XHCI %s cannot access address %lx\n", + xhci->name, value ); + return -ENOTSUP; + } + + /* If this is a 64-bit build, then writeq() is available */ + writeq ( value, reg ); + return 0; +} + +/** + * Initialise device + * + * @v xhci xHCI device + * @v regs MMIO registers + */ +static void xhci_init ( struct xhci_host *xhci, void *regs ) { + uint32_t hcsparams1; + uint32_t hcsparams2; + uint32_t hccparams1; + uint32_t pagesize; + size_t caplength; + size_t rtsoff; + size_t dboff; + + /* Locate capability, operational, runtime, and doorbell registers */ + xhci->cap = regs; + caplength = readb ( xhci->cap + XHCI_CAP_CAPLENGTH ); + rtsoff = readl ( xhci->cap + XHCI_CAP_RTSOFF ); + dboff = readl ( xhci->cap + XHCI_CAP_DBOFF ); + xhci->op = ( xhci->cap + caplength ); + xhci->run = ( xhci->cap + rtsoff ); + xhci->db = ( xhci->cap + dboff ); + + /* avoid access XHCI_REG_CAP_HCIVERSION = 0x2, unaligned memory */ + xhci->version = ((readl ( xhci->cap + XHCI_CAP_CAPLENGTH ) >> 16) & 0xffff); + + USB_LOG_DBG("XHCI %s version %x cap %08lx op %08lx run %08lx db %08lx\n", + xhci->name, xhci->version, ( xhci->cap ), + ( xhci->op ), ( xhci->run ), + ( xhci->db ) ); + + if (xhci->version < 0x96 || xhci->version > 0x120) { + USB_LOG_WRN("XHCI %s not support.\n", xhci->name); + } + + /* Read structural parameters 1 */ + hcsparams1 = readl ( xhci->cap + XHCI_CAP_HCSPARAMS1 ); + xhci->slots = XHCI_HCSPARAMS1_SLOTS ( hcsparams1 ); + xhci->intrs = XHCI_HCSPARAMS1_INTRS ( hcsparams1 ); + xhci->ports = XHCI_HCSPARAMS1_PORTS ( hcsparams1 ); + USB_LOG_DBG("XHCI %s has %d slots %d intrs %d ports\n", + xhci->name, xhci->slots, xhci->intrs, xhci->ports ); + + /* Read structural parameters 2 */ + hcsparams2 = readl ( xhci->cap + XHCI_CAP_HCSPARAMS2 ); + xhci->scratch.count = XHCI_HCSPARAMS2_SCRATCHPADS ( hcsparams2 ); + USB_LOG_DBG("XHCI %s needs %d scratchpads\n", + xhci->name, xhci->scratch.count ); + + /* Read capability parameters 1 */ + hccparams1 = readl ( xhci->cap + XHCI_CAP_HCCPARAMS1 ); + xhci->addr64 = XHCI_HCCPARAMS1_ADDR64 ( hccparams1 ); + xhci->csz_shift = XHCI_HCCPARAMS1_CSZ_SHIFT ( hccparams1 ); + xhci->xecp = (XHCI_HCCPARAMS1_XECP ( hccparams1 )); + USB_LOG_DBG("XHCI %s context %d bit\n", + xhci->name, (xhci->addr64 ? 64 : 32) ); + + /* Read page size */ + pagesize = readl ( xhci->op + XHCI_OP_PAGESIZE ); + xhci->pagesize = XHCI_PAGESIZE ( pagesize ); + USB_ASSERT ( xhci->pagesize != 0 ); + USB_ASSERT ( ( ( xhci->pagesize ) & ( xhci->pagesize - 1 ) ) == 0 ); + USB_LOG_DBG("XHCI %s page size %zd bytes\n", + xhci->name, xhci->pagesize ); +} + +/** + * Find extended capability + * + * @v xhci xHCI device + * @v id Capability ID + * @v offset Offset to previous extended capability instance, or zero + * @ret offset Offset to extended capability, or zero if not found + */ +static unsigned int xhci_extended_capability ( struct xhci_host *xhci, + unsigned int id, + unsigned int offset ) { + uint32_t xecp; + unsigned int next; + + /* Locate the extended capability */ + while ( 1 ) { + + /* Locate first or next capability as applicable */ + if ( offset ) { + xecp = readl ( xhci->cap + offset ); + next = XHCI_XECP_NEXT ( xecp ); + } else { + next = xhci->xecp; + } + if ( ! next ) + return 0; + offset += next; + + /* Check if this is the requested capability */ + xecp = readl ( xhci->cap + offset ); + if ( XHCI_XECP_ID ( xecp ) == id ) + return offset; + } +} + +/** + * Initialise USB legacy support + * + * @v xhci xHCI device + */ +static void xhci_legacy_init ( struct xhci_host *xhci ) { + unsigned int legacy; + uint8_t bios; + + /* Locate USB legacy support capability (if present) */ + legacy = xhci_extended_capability ( xhci, XHCI_XECP_ID_LEGACY, 0 ); + if ( ! legacy ) { + /* Not an error; capability may not be present */ + USB_LOG_DBG("XHCI %s has no USB legacy support capability\n", + xhci->name ); + return; + } + + /* Check if legacy USB support is enabled */ + USB_LOG_DBG("XHCI %s bios offset 0x%x\n", xhci->name, (xhci->cap + legacy + XHCI_USBLEGSUP_BIOS)); + /* bios = readb ( xhci->cap + legacy + XHCI_USBLEGSUP_BIOS ); cannot access offset 0x2, work around */ + bios = readl ( xhci->cap + legacy ); + bios = (bios >> 16) & 0xffff; + if ( ! ( bios & XHCI_USBLEGSUP_BIOS_OWNED ) ) { + /* Not an error; already owned by OS */ + USB_LOG_DBG("XHCI %s USB legacy support already disabled\n", + xhci->name ); + return; + } + + /* Record presence of USB legacy support capability */ + xhci->legacy = legacy; +} + +/** + * Claim ownership from BIOS + * + * @v xhci xHCI device + */ +static void xhci_legacy_claim ( struct xhci_host *xhci ) { + uint32_t ctlsts; + uint8_t bios; + unsigned int i; + + /* Do nothing unless legacy support capability is present */ + if ( ! xhci->legacy ) + return; + + /* Claim ownership */ + writeb ( XHCI_USBLEGSUP_OS_OWNED, + xhci->cap + xhci->legacy + XHCI_USBLEGSUP_OS ); + + /* Wait for BIOS to release ownership */ + for ( i = 0 ; i < XHCI_USBLEGSUP_MAX_WAIT_MS ; i++ ) { + + /* Check if BIOS has released ownership */ + bios = readb ( xhci->cap + xhci->legacy + XHCI_USBLEGSUP_BIOS ); + if ( ! ( bios & XHCI_USBLEGSUP_BIOS_OWNED ) ) { + USB_LOG_DBG("XHCI %s claimed ownership from BIOS\n", + xhci->name ); + ctlsts = readl ( xhci->cap + xhci->legacy + + XHCI_USBLEGSUP_CTLSTS ); + if ( ctlsts ) { + USB_LOG_DBG("XHCI %s warning: BIOS retained " + "SMIs: %08x\n", xhci->name, ctlsts ); + } + return; + } + + /* Delay */ + usb_osal_msleep ( 1 ); + } + + /* BIOS did not release ownership. Claim it forcibly by + * disabling all SMIs. + */ + USB_LOG_DBG("XHCI %s could not claim ownership from BIOS: forcibly " + "disabling SMIs\n", xhci->name ); + writel ( 0, xhci->cap + xhci->legacy + XHCI_USBLEGSUP_CTLSTS ); +} + +/** Prevent the release of ownership back to BIOS */ +static int xhci_legacy_prevent_release; + +/** + * Release ownership back to BIOS + * + * @v xhci xHCI device + */ +static void xhci_legacy_release ( struct xhci_host *xhci ) { + + /* Do nothing unless legacy support capability is present */ + if ( ! xhci->legacy ) + return; + + /* Do nothing if releasing ownership is prevented */ + if ( xhci_legacy_prevent_release ) { + USB_LOG_DBG("XHCI %s not releasing ownership to BIOS\n", + xhci->name ); + return; + } + + /* Release ownership */ + writeb ( 0, xhci->cap + xhci->legacy + XHCI_USBLEGSUP_OS ); + USB_LOG_DBG("XHCI %s released ownership to BIOS\n", xhci->name ); +} + +/** + * Stop xHCI device + * + * @v xhci xHCI device + * @ret rc Return status code + */ +static int xhci_stop ( struct xhci_host *xhci ) { + uint32_t usbcmd; + uint32_t usbsts; + unsigned int i; + + /* Clear run/stop bit */ + usbcmd = readl ( xhci->op + XHCI_OP_USBCMD ); + usbcmd &= ~XHCI_USBCMD_RUN; + writel ( usbcmd, xhci->op + XHCI_OP_USBCMD ); + + /* Wait for device to stop */ + for ( i = 0 ; i < XHCI_STOP_MAX_WAIT_MS ; i++ ) { + + /* Check if device is stopped */ + usbsts = readl ( xhci->op + XHCI_OP_USBSTS ); + if ( usbsts & XHCI_USBSTS_HCH ) + return 0; + + /* Delay */ + usb_osal_msleep ( 1 ); + } + + USB_LOG_DBG("XHCI %s timed out waiting for stop\n", xhci->name ); + return -ETIMEDOUT; +} + +/** + * Reset xHCI device + * + * @v xhci xHCI device + * @ret rc Return status code + */ +static int xhci_reset ( struct xhci_host *xhci ) { + uint32_t usbcmd; + unsigned int i; + int rc; + + /* The xHCI specification states that resetting a running + * device may result in undefined behaviour, so try stopping + * it first. + */ + if ( ( rc = xhci_stop ( xhci ) ) != 0 ) { + /* Ignore errors and attempt to reset the device anyway */ + } + + /* Reset device */ + writel ( XHCI_USBCMD_HCRST, xhci->op + XHCI_OP_USBCMD ); + + /* Wait for reset to complete */ + for ( i = 0 ; i < XHCI_RESET_MAX_WAIT_MS ; i++ ) { + + /* Check if reset is complete */ + usbcmd = readl ( xhci->op + XHCI_OP_USBCMD ); + if ( ! ( usbcmd & XHCI_USBCMD_HCRST ) ) + return 0; + + /* Delay */ + usb_osal_msleep ( 1 ); + } + + USB_LOG_DBG("XHCI %s timed out waiting for reset\n", xhci->name ); + return -ETIMEDOUT; +} + + +/** + * Find supported protocol extended capability for a port + * + * @v xhci xHCI device + * @v port Port number + * @ret supported Offset to extended capability, or zero if not found + */ +static unsigned int xhci_supported_protocol ( struct xhci_host *xhci, + unsigned int port ) { + unsigned int supported = 0; + unsigned int offset; + unsigned int count; + uint32_t ports; + + /* Iterate over all supported protocol structures */ + while ( ( supported = xhci_extended_capability ( xhci, + XHCI_XECP_ID_SUPPORTED, + supported ) ) ) { + + /* Determine port range */ + ports = readl ( xhci->cap + supported + XHCI_SUPPORTED_PORTS ); + offset = XHCI_SUPPORTED_PORTS_OFFSET ( ports ); + count = XHCI_SUPPORTED_PORTS_COUNT ( ports ); + + /* Check if port lies within this range */ + if ( ( port - offset ) < count ) + return supported; + } + + USB_LOG_DBG("XHCI %s Port-%d has no supported protocol\n", + xhci->name, port ); + return 0; +} + +/** + * Transcribe port speed (for debugging) + * + * @v psi Protocol speed ID + * @ret speed Transcribed speed + */ +static inline const char * xhci_speed_name ( uint32_t psi ) { + static const char *exponents[4] = { "", "k", "M", "G" }; + static char buf[ 10 /* "xxxxxXbps" + NUL */ ]; + unsigned int mantissa; + unsigned int exponent; + + /* Extract mantissa and exponent */ + mantissa = XHCI_SUPPORTED_PSI_MANTISSA ( psi ); + exponent = XHCI_SUPPORTED_PSI_EXPONENT ( psi ); + + /* Transcribe speed */ + snprintf ( buf, sizeof ( buf ), "%d%sbps", + mantissa, exponents[exponent] ); + return buf; +} + +/** + * Find port protocol + * + * @v xhci xHCI device + * @v port Port number + * @ret protocol USB protocol, or zero if not found + */ +static unsigned int xhci_port_protocol ( struct xhci_host *xhci, + unsigned int port ) { + unsigned int supported = xhci_supported_protocol ( xhci, port ); + union { + uint32_t raw; + char text[5]; + } name; + unsigned int protocol; + unsigned int type; + unsigned int psic; + unsigned int psiv; + unsigned int i; + uint32_t revision; + uint32_t ports; + uint32_t slot; + uint32_t psi; + + /* Fail if there is no supported protocol */ + if ( ! supported ) + return 0; + + /* Determine protocol version */ + revision = readl ( xhci->cap + supported + XHCI_SUPPORTED_REVISION ); + protocol = XHCI_SUPPORTED_REVISION_VER ( revision ); + + /* Describe port protocol */ +#if XHCI_DUMP + { + name.raw = CPU_TO_LE32 ( readl ( xhci->cap + supported + + XHCI_SUPPORTED_NAME ) ); + name.text[4] = '\0'; + slot = readl ( xhci->cap + supported + XHCI_SUPPORTED_SLOT ); + type = XHCI_SUPPORTED_SLOT_TYPE ( slot ); + USB_LOG_DBG("XHCI %s-%d %sv%04x type %d \r\n", + xhci->name, port, name.text, protocol, type ); + ports = readl ( xhci->cap + supported + XHCI_SUPPORTED_PORTS ); + psic = XHCI_SUPPORTED_PORTS_PSIC ( ports ); + if ( psic ) { + USB_LOG_DBG(" speeds \r\n" ); + for ( i = 0 ; i < psic ; i++ ) { + psi = readl ( xhci->cap + supported + + XHCI_SUPPORTED_PSI ( i ) ); + psiv = XHCI_SUPPORTED_PSI_VALUE ( psi ); + USB_LOG_DBG(" %d:%s \r\n", psiv, xhci_speed_name ( psi ) ); + } + } + } +#endif + + return protocol; +} + +/** + * Probe XCHI device + * + * @v xhci XCHI device + * @v baseaddr XHCI device register base address + * @ret rc Return status code + */ +int xhci_probe ( struct xhci_host *xhci, unsigned long baseaddr ) { + USB_ASSERT(xhci && (xhci->bus)); + int error = 0; + struct usbh_hubport *port; + unsigned int i; + + xhci->base = (void *)baseaddr; + xhci->name[0] = '0' + xhci->bus->id; + xhci->name[1] = '\0'; + + /* Initialise xHCI device */ + xhci_init ( xhci, xhci->base ); + + /* Initialise USB legacy support and claim ownership */ + xhci_legacy_init ( xhci ); + xhci_legacy_claim ( xhci ); + + /* Reset device */ + if ( ( error = xhci_reset ( xhci ) ) != 0 ) + goto err_reset; + + /* Set port protocols */ + for ( i = 1 ; i <= xhci->ports ; i++ ) { + port = usbh_get_roothub_port ( xhci->bus, i ); + port->protocol = xhci_port_protocol ( xhci, i ); + } + + return error; + +err_reset: + xhci_legacy_release ( xhci ); + return -1; +} + +/*********************************************************************/ + +/** + * Allocate device context base address array + * + * @v xhci xHCI device + * @ret rc Return status code + */ +static int xhci_dcbaa_alloc ( struct xhci_host *xhci ) { + size_t len; + uintptr_t dcbaap; + int rc; + + /* Allocate and initialise structure. Must be at least + * 64-byte aligned and must not cross a page boundary, so + * align on its own size (rounded up to a power of two and + * with a minimum of 64 bytes). + */ + len = ( ( xhci->slots + 1 ) * sizeof ( xhci->dcbaa.context[0] ) ); + xhci->dcbaa.context = usb_align(xhci_align ( len ), len); + if ( ! xhci->dcbaa.context ) { + USB_LOG_ERR("XHCI %s could not allocate DCBAA\n", xhci->name ); + rc = -ENOMEM; + goto err_alloc; + } + memset ( xhci->dcbaa.context, 0, len ); + + /* Program DCBAA pointer */ + dcbaap = (uintptr_t)( xhci->dcbaa.context ); + if ( ( rc = xhci_writeq ( xhci, dcbaap, + xhci->op + XHCI_OP_DCBAAP ) ) != 0 ) + goto err_writeq; + + USB_LOG_DBG("XHCI %s DCBAA at [%08lx,%08lx)\n", xhci->name, + ( xhci->dcbaa.context ), + ( ( xhci->dcbaa.context ) + len ) ); + return 0; + + err_writeq: + usb_free ( xhci->dcbaa.context ); + err_alloc: + return rc; +} + + +/** + * Allocate scratchpad buffers + * + * @v xhci xHCI device + * @ret rc Return status code + */ +static int xhci_scratchpad_alloc ( struct xhci_host *xhci ) { + struct xhci_scratchpad *scratch = &xhci->scratch; + size_t buffer_len; + size_t array_len; + uintptr_t addr; + unsigned int i; + int rc; + + /* Do nothing if no scratchpad buffers are used */ + if ( ! scratch->count ) { + USB_LOG_INFO("XHCI %s no need to allocate scratchpad buffers\n", + xhci->name ); + return 0; + } + + /* Allocate scratchpad buffers */ + buffer_len = ( scratch->count * xhci->pagesize ); + scratch->buffer = (uintptr_t)usb_align ( xhci->pagesize, buffer_len ); + if ( ! scratch->buffer ) { + USB_LOG_ERR("XHCI %s could not allocate scratchpad buffers\n", + xhci->name ); + rc = -ENOMEM; + goto err_alloc; + } + memset ( (void *)scratch->buffer, 0, buffer_len ); + + /* Allocate scratchpad array */ + array_len = ( scratch->count * sizeof ( scratch->array[0] ) ); + scratch->array = usb_align(xhci_align ( array_len ), array_len); + if ( ! scratch->array ) { + USB_LOG_ERR("XHCI %s could not allocate scratchpad buffer " + "array\n", xhci->name ); + rc = -ENOMEM; + goto err_alloc_array; + } + + /* Populate scratchpad array */ + addr = ( scratch->buffer + 0 ); + for ( i = 0 ; i < scratch->count ; i++ ) { + scratch->array[i] = CPU_TO_LE64 ( (uintptr_t)addr ); + addr += xhci->pagesize; + } + + /* Set scratchpad array pointer */ + USB_ASSERT ( xhci->dcbaa.context != NULL ); + xhci->dcbaa.context[0] = CPU_TO_LE64 ( ( (uintptr_t)scratch->array ) ); + + USB_LOG_DBG("XHCI %s scratchpad [%08lx,%08lx) array [%08lx,%08lx)\n", + xhci->name, ( scratch->buffer, 0 ), + ( scratch->buffer, buffer_len ), + ( scratch->array ), + ( ( scratch->array ) + array_len ) ); + return 0; + + usb_free ( scratch->array ); + err_alloc_array: + usb_free ( scratch->buffer ); + err_alloc: + return rc; +} + +/** + * Allocate command ring + * + * @v xhci xHCI device + * @ret rc Return status code + */ +static int xhci_command_alloc ( struct xhci_host *xhci ) { + uintptr_t crp; + int rc; + + /* Allocate TRB ring */ + xhci->cmds = usb_align(XHCI_RING_SIZE, sizeof(*xhci->cmds)); /* command ring */ + if (! xhci->cmds) + goto err_ring_alloc; + + memset(xhci->cmds, 0U, sizeof(*xhci->cmds)); + + xhci->cmds->lock = usb_osal_mutex_create(); + USB_ASSERT(xhci->cmds->lock); + + xhci->cmds->cs = 1; /* cycle state = 1 */ + + /* Program command ring control register */ + crp = (uintptr_t)( xhci->cmds ); + if ( ( rc = xhci_writeq ( xhci, ( crp | XHCI_CRCR_RCS ), + xhci->op + XHCI_OP_CRCR ) ) != 0 ) + goto err_writeq; + + USB_LOG_DBG("XHCI %s CRCR at [%08lx,%08lx)\n", xhci->name, + ( xhci->cmds->ring ), + ( ( xhci->cmds->ring ) + sizeof(xhci->cmds->ring) ) ); + return 0; + + err_writeq: + usb_free(xhci->cmds);; + err_ring_alloc: + return rc; +} + +/** + * Allocate event ring + * + * @v xhci xHCI device + * @ret rc Return status code + */ +static int xhci_event_alloc ( struct xhci_host *xhci ) { + unsigned int count; + size_t len; + int rc; + + /* Allocate event ring */ + xhci->evts = usb_align(XHCI_RING_SIZE, sizeof(*xhci->evts)); /* event ring */ + if ( ! xhci->evts ) { + rc = -ENOMEM; + goto err_alloc_trb; + } + + memset(xhci->evts, 0U, sizeof(*xhci->evts)); + + /* Allocate event ring segment table */ + xhci->eseg = usb_align(XHCI_ALIGMENT, sizeof(*xhci->eseg)); /* event segment */ + if ( ! xhci->eseg ) { + rc = -ENOMEM; + goto err_alloc_segment; + } + memset(xhci->eseg, 0U, sizeof(*xhci->eseg)); + xhci->eseg->base = CPU_TO_LE64 ( ( (uintptr_t)xhci->evts ) ); + xhci->eseg->count = XHCI_RING_ITEMS; /* items of event ring TRB */ + + /* Program event ring registers */ + writel ( 1, xhci->run + XHCI_RUN_ERSTSZ ( 0 ) ); /* bit[15:0] event ring segment table size */ + if ( ( rc = xhci_writeq ( xhci, (uintptr_t)( xhci->evts ), + xhci->run + XHCI_RUN_ERDP ( 0 ) ) ) != 0 ) /* bit[63:4] event ring dequeue pointer */ + goto err_writeq_erdp; + if ( ( rc = xhci_writeq ( xhci, (uintptr_t)( xhci->eseg ), + xhci->run + XHCI_RUN_ERSTBA ( 0 ) ) ) != 0 ) /* bit[63:6] event ring segment table base addr */ + goto err_writeq_erstba; + + xhci->evts->cs = 1; /* cycle state = 1 */ + USB_LOG_DBG("XHCI %s event ring [%08lx,%08lx) table [%08lx,%08lx)\n", + xhci->name, ( xhci->evts->ring ), + ( ( xhci->evts->ring ) + sizeof(xhci->evts->ring) ), + ( xhci->eseg ), + ( ( xhci->eseg ) + + sizeof ( xhci->eseg[0] ) ) ); + return 0; + + xhci_writeq ( xhci, 0, xhci->run + XHCI_RUN_ERSTBA ( 0 ) ); + err_writeq_erstba: + xhci_writeq ( xhci, 0, xhci->run + XHCI_RUN_ERDP ( 0 ) ); + err_writeq_erdp: + usb_free ( xhci->eseg ); + err_alloc_segment: + usb_free ( xhci->evts ); + err_alloc_trb: + return rc; +} + +/** + * Start xHCI device + * + * @v xhci xHCI device + */ +static void xhci_run ( struct xhci_host *xhci ) { + uint32_t config; + uint32_t usbcmd; + uint32_t runtime; + + /* Configure number of device slots */ + config = readl ( xhci->op + XHCI_OP_CONFIG ); + config &= ~XHCI_CONFIG_MAX_SLOTS_EN_MASK; + config |= XHCI_CONFIG_MAX_SLOTS_EN ( xhci->slots ); + writel ( config, xhci->op + XHCI_OP_CONFIG ); + + /* Enable port interrupt */ + writel ( 500U, xhci->run + XHCI_RUN_IR_IMOD ( 0 ) ); + runtime = readl(xhci->run + XHCI_RUN_IR_IMAN ( 0 )); + runtime |= XHCI_RUN_IR_IMAN_IE; + writel (runtime, xhci->run + XHCI_RUN_IR_IMAN ( 0 )); + + /* Set run/stop bit and enable interrupt */ + usbcmd = readl ( xhci->op + XHCI_OP_USBCMD ); + usbcmd |= XHCI_USBCMD_RUN | XHCI_USBCMD_INTE; + writel ( usbcmd, xhci->op + XHCI_OP_USBCMD ); + + USB_LOG_DBG("XHCI %s start running\n", xhci->name ); +} + +/** + * Free event ring + * + * @v xhci xHCI device + */ +static void xhci_event_free ( struct xhci_host *xhci ) { + + /* Clear event ring registers */ + writel ( 0, xhci->run + XHCI_RUN_ERSTSZ ( 0 ) ); + xhci_writeq ( xhci, 0, xhci->run + XHCI_RUN_ERSTBA ( 0 ) ); + xhci_writeq ( xhci, 0, xhci->run + XHCI_RUN_ERDP ( 0 ) ); + + /* Free event ring segment table */ + usb_free ( xhci->eseg ); + + /* Free event ring */ + usb_free ( xhci->evts ); +} + +/** + * Free command ring + * + * @v xhci xHCI device + */ +static void xhci_command_free ( struct xhci_host *xhci ) { + + /* Sanity check */ + USB_ASSERT ( ( readl ( xhci->op + XHCI_OP_CRCR ) & XHCI_CRCR_CRR ) == 0 ); + + /* Clear command ring control register */ + xhci_writeq ( xhci, 0, xhci->op + XHCI_OP_CRCR ); + + /* Free TRB ring */ + usb_free ( xhci->cmds ); +} + +/** + * Free scratchpad buffers + * + * @v xhci xHCI device + */ +static void xhci_scratchpad_free ( struct xhci_host *xhci ) { + struct xhci_scratchpad *scratch = &xhci->scratch; + size_t array_len; + size_t buffer_len; + + /* Do nothing if no scratchpad buffers are used */ + if ( ! scratch->count ) + return; + + /* Clear scratchpad array pointer */ + USB_ASSERT ( xhci->dcbaa.context != NULL ); + xhci->dcbaa.context[0] = 0; + + /* Free scratchpad array */ + array_len = ( scratch->count * sizeof ( scratch->array[0] ) ); + usb_free ( scratch->array ); + + /* Free scratchpad buffers */ + buffer_len = ( scratch->count * xhci->pagesize ); + usb_free ( scratch->buffer ); +} + +/** + * Free device context base address array + * + * @v xhci xHCI device + */ +static void xhci_dcbaa_free ( struct xhci_host *xhci ) { + size_t len; + unsigned int i; + + /* Sanity check */ + for ( i = 0 ; i <= xhci->slots ; i++ ) + USB_ASSERT ( xhci->dcbaa.context[i] == 0 ); + + /* Clear DCBAA pointer */ + xhci_writeq ( xhci, 0, xhci->op + XHCI_OP_DCBAAP ); + + /* Free DCBAA */ + len = ( ( xhci->slots + 1 ) * sizeof ( xhci->dcbaa.context[0] ) ); + usb_free ( xhci->dcbaa.context ); +} + +/** + * Open XHCI device + * + * @v xhci XHCI device + * @ret rc Return status code + */ +int xhci_open ( struct xhci_host *xhci ) { + int rc; + + /* Allocate device slot array */ + xhci->slot = usb_malloc ( ( xhci->slots + 1 ) * sizeof ( xhci->slot[0] ) ); + if ( ! xhci->slot ) { + rc = -ENOMEM; + goto err_slot_alloc; + } + + /* Allocate device context base address array */ + if ( ( rc = xhci_dcbaa_alloc ( xhci ) ) != 0 ) + goto err_dcbaa_alloc; + + /* Allocate scratchpad buffers */ + if ( ( rc = xhci_scratchpad_alloc ( xhci ) ) != 0 ) + goto err_scratchpad_alloc; + + /* Allocate command ring */ + if ( ( rc = xhci_command_alloc ( xhci ) ) != 0 ) + goto err_command_alloc; + + /* Allocate event ring */ + if ( ( rc = xhci_event_alloc ( xhci ) ) != 0 ) + goto err_event_alloc; + + /* Start controller */ + xhci_run ( xhci ); + + return 0; + + xhci_stop ( xhci ); + xhci_event_free ( xhci ); + err_event_alloc: + xhci_command_free ( xhci ); + err_command_alloc: + xhci_scratchpad_free ( xhci ); + err_scratchpad_alloc: + xhci_dcbaa_free ( xhci ); + err_dcbaa_alloc: + usb_free ( xhci->slot ); + err_slot_alloc: + return rc; + +} + +/** + * Close XHCI device + * + * @v xhci XHCI Device + */ +void xhci_close ( struct xhci_host *xhci ) { + unsigned int i; + + /* Sanity checks */ + USB_ASSERT ( xhci->slot != NULL ); + for ( i = 0 ; i <= xhci->slots ; i++ ) + USB_ASSERT ( xhci->slot[i] == NULL ); + + xhci_stop ( xhci ); + usb_free (xhci->evts); + usb_free (xhci->eseg); + usb_free (xhci->cmds); + xhci_scratchpad_free ( xhci ); + xhci_dcbaa_free ( xhci ); + usb_free ( xhci->slot ); +} + +/** + * Remove XHCI device + * + * @v xhci XHCI device + */ +void xhci_remove ( struct xhci_host *xhci ) { + xhci_reset ( xhci ); + xhci_legacy_release ( xhci ); + usb_free ( xhci ); + + /* If we are shutting down to boot an OS, then prevent the + * release of ownership back to BIOS. + */ + xhci_legacy_prevent_release = 0; +} + +/*********************************************************************/ + +/** + * Enable port + * + * @v xhci XHCI device + * @v port Port number + * @ret rc Return status code + */ +int xhci_port_enable(struct xhci_host *xhci, uint32_t port) { + uint32_t portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port ) ); + + /* double check if connected */ + if (!(portsc & XHCI_PORTSC_CCS)) { + USB_LOG_ERR("device connectiong lost !!! \r\n"); + return -ENOENT; + } + + switch ( portsc & XHCI_PORTSC_PLS_MASK ) + { + case XHCI_PORTSC_PLS_U0: + /* A USB3 port - controller automatically performs reset */ + break; + case XHCI_PORTSC_PLS_POLLING: + /* A USB2 port - perform device reset */ + xhci_dump_port_status(port, portsc); + writel ((portsc | XHCI_PORTSC_PR), (xhci->op + XHCI_OP_PORTSC ( port ))); /* reset port */ + break; + default: + USB_LOG_ERR("PLS: %d \r\n", (portsc & XHCI_PORTSC_PLS_MASK)); + return -ENOENT; + } + + /* Wait for device to complete reset and be enabled */ + uint32_t end = 1000U, start = 0U; + for (;;) { + portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port ) ); + if (!(portsc & XHCI_PORTSC_CCS)) { + /* USB 2.0 port would be disconnected after reset */ + USB_LOG_INFO("USB 2.0 port disconnected during reset, need rescan \r\n"); + return 0; + } + + if (portsc & XHCI_PORTSC_PED) { /* check if port enabled */ + /* Reset complete */ + break; + } + + if (++start > end) { + USB_LOG_ERR("Wait timeout, portsc=0x%x !!!\n", portsc); + return -ENXIO; + } + + usb_osal_msleep(1); + } + + xhci_dump_port_status(port, portsc); + return 0; +} + +/** + * Convert USB Speed to PSI + * + * @v speed USB speed + * @ret psi USB speed in PSI + */ +static unsigned int xhci_speed_to_psi(int speed) { + unsigned int psi = USB_SPEED_UNKNOWN; + + switch (speed) { + case USB_SPEED_LOW: + psi = XCHI_PSI_LOW; + break; + case USB_SPEED_FULL: + psi = XCHI_PSI_FULL; + break; + case USB_SPEED_HIGH: + psi = XCHI_PSI_HIGH; + break; + case USB_SPEED_SUPER: + psi = XCHI_PSI_SUPER; + break; + } + + return psi; +} + +/** + * Convert USB PSI to Speed + * + * @v psi USB speed in PSI + * @ret speed USB speed + */ +static int xhci_psi_to_speed(int psi) { + int speed = USB_SPEED_UNKNOWN; + + switch (psi) { + case XCHI_PSI_LOW: + speed = USB_SPEED_LOW; + break; + case XCHI_PSI_FULL: + speed = USB_SPEED_FULL; + break; + case XCHI_PSI_HIGH: + speed = USB_SPEED_HIGH; + break; + case XCHI_PSI_SUPER: + speed = USB_SPEED_SUPER; + break; + } + + return speed; +} + +/** + * Find port speed + * + * @v xhci xHCI device + * @v port Port number + * @v psiv Protocol speed ID value + * @ret speed Port speed, or negative error + */ +static int xhci_port_speed ( struct xhci_host *xhci, unsigned int port, + unsigned int psiv ) { + unsigned int supported = xhci_supported_protocol ( xhci, port ); + unsigned int psic; + unsigned int mantissa; + unsigned int exponent; + unsigned int speed; + unsigned int i; + uint32_t ports; + uint32_t psi; + + /* Fail if there is no supported protocol */ + if ( ! supported ) + return -ENOTSUP; + + /* Get protocol speed ID count */ + ports = readl ( xhci->cap + supported + XHCI_SUPPORTED_PORTS ); + psic = XHCI_SUPPORTED_PORTS_PSIC ( ports ); + + /* Use protocol speed ID table unless device is known to be faulty */ + /* Iterate over PSI dwords looking for a match */ + for ( i = 0 ; i < psic ; i++ ) { + psi = readl ( xhci->cap + supported + + XHCI_SUPPORTED_PSI ( i ) ); + if ( psiv == XHCI_SUPPORTED_PSI_VALUE ( psi ) ) { + mantissa = XHCI_SUPPORTED_PSI_MANTISSA ( psi ); + exponent = XHCI_SUPPORTED_PSI_EXPONENT ( psi ); + return xhci_psi_to_speed(XCHI_PSI ( mantissa, exponent )); + } + } + + /* Record device as faulty if no match is found */ + if ( psic != 0 ) { + USB_LOG_ERR("XHCI %s-%d spurious PSI value %d: " + "assuming PSI table is invalid\n", + xhci->name, port, psiv ); + } + + /* Use the default mappings */ + switch ( psiv ) { + case XHCI_SPEED_LOW : return USB_SPEED_LOW; + case XHCI_SPEED_FULL : return USB_SPEED_FULL; + case XHCI_SPEED_HIGH : return USB_SPEED_HIGH; + case XHCI_SPEED_SUPER : return USB_SPEED_SUPER; + default: + USB_LOG_ERR("XHCI %s-%d unrecognised PSI value %d\n", + xhci->name, port, psiv ); + return -ENOTSUP; + } +} + +/** + * Find protocol speed ID value + * + * @v xhci xHCI device + * @v port Port number + * @v speed USB speed + * @ret psiv Protocol speed ID value, or negative error + */ +static int xhci_port_psiv ( struct xhci_host *xhci, unsigned int port, + unsigned int speed ) { + unsigned int supported = xhci_supported_protocol ( xhci, port ); + unsigned int psic; + unsigned int mantissa; + unsigned int exponent; + unsigned int psiv; + unsigned int i; + uint32_t ports; + uint32_t psi; + + /* Fail if there is no supported protocol */ + if ( ! supported ) + return -ENOTSUP; + + /* Get protocol speed ID count */ + ports = readl ( xhci->cap + supported + XHCI_SUPPORTED_PORTS ); + psic = XHCI_SUPPORTED_PORTS_PSIC ( ports ); + + /* Use the default mappings if applicable */ + if ( psic == 0 ) { + switch ( speed ) { + case USB_SPEED_LOW : return XHCI_SPEED_LOW; + case USB_SPEED_FULL : return XHCI_SPEED_FULL; + case USB_SPEED_HIGH : return XHCI_SPEED_HIGH; + case USB_SPEED_SUPER : return XHCI_SPEED_SUPER; + default: + USB_LOG_DBG("XHCI %s-%d non-standard speed %d\n", + xhci->name, port, speed ); + return -ENOTSUP; + } + } + + /* Iterate over PSI dwords looking for a match */ + for ( i = 0 ; i < psic ; i++ ) { + psi = readl ( xhci->cap + supported + XHCI_SUPPORTED_PSI ( i )); + mantissa = XHCI_SUPPORTED_PSI_MANTISSA ( psi ); + exponent = XHCI_SUPPORTED_PSI_EXPONENT ( psi ); + if ( xhci_speed_to_psi(speed) == XCHI_PSI ( mantissa, exponent ) ) { + psiv = XHCI_SUPPORTED_PSI_VALUE ( psi ); + return psiv; + } + } + + USB_LOG_DBG("XHCI %s-%d unrepresentable speed %#x\n", + xhci->name, port, speed ); + return -ENOENT; +} + +/** + * Update root hub port speed + * + * @v xhci XHCI device + * @v port Port number + * @ret rc Return status code (speed) + */ +uint32_t xhci_root_speed ( struct xhci_host *xhci, uint8_t port ) { + uint32_t portsc; + unsigned int psiv; + int ccs; + int ped; + int csc; + int speed; + unsigned int protocol = xhci_port_protocol(xhci, port); + + /* Read port status */ + portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port ) ); + USB_LOG_DBG("XHCI %s-%d status is 0x%08x, protocol 0x%x\n", + xhci->name, port, portsc, protocol ); + ccs = ( portsc & XHCI_PORTSC_CCS ); + ped = ( portsc & XHCI_PORTSC_PED ); + csc = ( portsc & XHCI_PORTSC_CSC ); + psiv = XHCI_PORTSC_PSIV ( portsc ); + + USB_LOG_DBG("XHCI %s port-%d ccs: %d, ped: %d, csc: %d, psiv: 0x%x\n", + xhci->name, port, !!ccs, !!ped, !!csc, psiv); + + /* Port speed is not valid unless port is connected */ + if ( ! ccs ) { + speed = USB_SPEED_UNKNOWN; + USB_LOG_ERR("XHCI %s port-%d speed unkown\n", xhci->name, port); + return speed; + } + + /* For USB2 ports, the PSIV field is not valid until the port + * completes reset and becomes enabled. + */ + if ( ( protocol < USB_3_0 ) && ! ped ) { + speed = USB_SPEED_FULL; + return speed; + } + + /* Get port speed and map to generic USB speed */ + speed = xhci_port_speed ( xhci, port, psiv ); + if ( speed < 0 ) { + return speed; + } + + return speed; +} + +/*********************************************************************/ +/** + * Add a TRB to the given ring + * + * @v ring XHCI TRB ring + * @v trb TRB content to be added + */ +static inline void xhci_trb_fill(struct xhci_ring *ring, union xhci_trb *trb) { + union xhci_trb *dst = &ring->ring[ring->nidx]; + memcpy((void *)dst, (void *)trb, sizeof(*trb)); + dst->template.control |= (ring->cs ? XHCI_TRB_C : 0); + xhci_dump_trbs(dst, 1); +} + +/** + * Queue a TRB onto a ring, wrapping ring as needed + * + * @v ring XHCI TRB ring + * @v trb TRB content to be added + */ +static void xhci_trb_queue(struct xhci_ring *ring, union xhci_trb *trb) { + + if (ring->nidx >= XHCI_RING_ITEMS - 1) { + /* if it is the last trb in the list, put a link trb in the end */ + union xhci_trb link_trb; + link_trb.link.type = XHCI_TRB_LINK; + link_trb.link.flags = XHCI_TRB_TC; + link_trb.link.next = CPU_TO_LE64(((uintptr_t)ring->ring)); + + xhci_trb_fill(ring, &link_trb); + + ring->nidx = 0; /* adjust dequeue index to 0 */ + ring->cs ^= 1; /* toggle cycle interpretation of sw */ + } + + xhci_trb_fill(ring, trb); + ring->nidx++; /* ahead dequeue index */ +} + +/** + * Wait for a ring to empty (all TRBs processed by hardware) + * + * @v xhci XHCI Device + * @v ep Owner Endpoint of current TRB ring + * @ ring XHCI TRB ring + */ +int xhci_event_wait(struct xhci_host *xhci, + struct xhci_endpoint *ep, + struct xhci_ring *ring) { + int cc = XHCI_CMPLT_SUCCESS; + + if (ep->timeout > 0) + { + if (usb_osal_sem_take(ep->waitsem, ep->timeout) < 0) + { + cc = XHCI_CMPLT_TIMEOUT; + } + else + { + cc = ring->evt.complete.code; /* bit[31:24] completion code */ + } + } + + return cc; +} + +/** + * Ring doorbell register + * + * @v xhci XHCI device + * @v slotid Slot id to ring + * @v value Value send to doorbell + */ +static inline void xhci_doorbell ( struct xhci_host *xhci, uint32_t slotid, uint32_t value ) { + + DSB(); + writel ( value, xhci->db + slotid * XHCI_REG_DB_SIZE ); /* bit[7:0] db target, is ep_id */ +} + +/** + * Abort command + * + * @v xhci xHCI device + */ +static void xhci_abort ( struct xhci_host *xhci ) { + uintptr_t crp; + + /* Abort the command */ + USB_LOG_WRN("XHCI %s aborting command\n", xhci->name ); + xhci_writeq ( xhci, XHCI_CRCR_CA, xhci->op + XHCI_OP_CRCR ); + + /* Allow time for command to abort */ + usb_osal_msleep ( XHCI_COMMAND_ABORT_DELAY_MS ); + + /* Sanity check */ + USB_ASSERT ( ( readl ( xhci->op + XHCI_OP_CRCR ) & XHCI_CRCR_CRR ) == 0 ); + + /* Consume (and ignore) any final command status */ + int cc = xhci_event_wait(xhci, xhci->cur_cmd_pipe, xhci->cmds); + if (XHCI_CMPLT_SUCCESS != cc) { + USB_LOG_ERR("XHCI %s abort command failed, cc %d\n", xhci->name, cc); + } + + /* Reset the command ring control register */ + memset(xhci->cmds->ring, 0U, XHCI_RING_ITEMS * sizeof(union xhci_trb)); + xhci_writeq ( xhci, ( (uint64_t)(uintptr_t)xhci->cmds | xhci->cmds->cs ), xhci->op + XHCI_OP_CRCR ); +} + +/** + * Submit a command to the xhci controller ring + * + * @v xhci XHCI Device + * @v ep Owner Endpoint of current TRB ring + * @ trb Command TRB to be sent + */ +static int xhci_cmd_submit(struct xhci_host *xhci, struct xhci_endpoint *ep, union xhci_trb *trb) { + + int rc = 0; + usb_osal_mutex_take(xhci->cmds->lock); /* handle command one by one */ + + ep->timeout = 5000; + ep->waiter = true; + xhci->cur_cmd_pipe = ep; + + xhci_trb_queue(xhci->cmds, trb); + + /* pass command trb to hardware */ + DSB(); + + xhci_doorbell(xhci, 0, 0); /* 0 = db host controller, 0 = db targe hc command */ + int cc = xhci_event_wait(xhci, ep, xhci->cmds); + if (XHCI_CMPLT_SUCCESS != cc) { + USB_LOG_ERR("XHCI %s cmd failed, cc %d\n", xhci->name, cc); + xhci_abort(xhci); /* Abort command */ + rc = -ENOTSUP; + } + + usb_osal_mutex_give(xhci->cmds->lock); + xhci->cur_cmd_pipe = NULL; + return rc; +} + +/** + * Issue NOP and wait for completion + * + * @v xhci xHCI device + * @v ep Command Endpoint + * @ret rc Return status code + */ +static int xhci_nop ( struct xhci_host *xhci, struct xhci_endpoint *ep ) { + union xhci_trb trb; + struct xhci_trb_common *nop = &trb.common; + int rc; + + /* Construct command */ + memset ( nop, 0, sizeof ( *nop ) ); + nop->flags = XHCI_TRB_IOC; + nop->type = XHCI_TRB_NOP_CMD; + + /* Issue command and wait for completion */ + if ( ( rc = xhci_cmd_submit(xhci, ep, &trb ) ) != 0 ) + return rc; + + return 0; +} + +/** + * Issue Enable slot and wait for completion + * + * @v xhci xHCI device + * @v ep Command Endpoint + * @v type Type of Slot to be enabled + * @ret rc Return status code + */ +static int xhci_enable_slot(struct xhci_host *xhci, struct xhci_endpoint *ep, unsigned int type) { + union xhci_trb trb; + struct xhci_trb_enable_slot *enable = &trb.enable; + struct xhci_trb_complete *enabled; + unsigned int slot; + int rc; + + /* Construct command */ + memset ( enable, 0, sizeof ( *enable ) ); + enable->slot = type; + enable->type = XHCI_TRB_ENABLE_SLOT; + + /* Issue command and Wait for completion */ + if ( ( rc = xhci_cmd_submit(xhci, ep, &trb) ) != 0 ) { + USB_LOG_ERR("XHCI %s could not enable new slot, type %d\n", + xhci->name, type ); + return rc; + } + + /* Extract slot number */ + enabled = &(xhci->cmds->evt.complete); + slot = enabled->slot; + + USB_LOG_DBG("XHCI %s slot %d enabled\n", xhci->name, slot ); + return slot; +} + +/** + * Disable slot + * + * @v xhci xHCI device + * @v ep Command Endpoint + * @v slot Device slot + * @ret rc Return status code + */ +static int xhci_disable_slot ( struct xhci_host *xhci, struct xhci_endpoint *ep, + unsigned int slot ) { + union xhci_trb trb; + struct xhci_trb_disable_slot *disable = &trb.disable; + int rc; + + /* Construct command */ + memset ( disable, 0, sizeof ( *disable ) ); + disable->type = XHCI_TRB_DISABLE_SLOT; + disable->slot = slot; + + /* Issue command and wait for completion */ + if ( ( rc = xhci_cmd_submit ( xhci, ep, &trb ) ) != 0 ) { + USB_LOG_DBG("XHCI %s could not disable slot %d: %s\n", + xhci->name, slot, strerror ( rc ) ); + return rc; + } + + USB_LOG_DBG("XHCI %s slot %d disabled\n", xhci->name, slot ); + return 0; +} + +/** + * Issue context-based command and wait for completion + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @v type TRB type + * @v populate Input context populater + * @ret rc Return status code + */ +static int xhci_context ( struct xhci_host *xhci, struct xhci_slot *slot, + struct xhci_endpoint *ep, unsigned int type, + void ( * populate ) ( struct xhci_host *xhci, + struct xhci_slot *slot, + struct xhci_endpoint *ep, + void *input ) ) { + union xhci_trb trb; + struct xhci_trb_context *context = &trb.context; + size_t len; + void *input; + int rc; + + /* Allocate an input context */ + len = xhci_input_context_offset ( xhci, XHCI_CTX_END ); + input = usb_align(xhci_align ( len ), len); + if ( ! input ) { + rc = -ENOMEM; + goto err_alloc; + } + memset ( input, 0, len ); + + /* Populate input context */ + populate ( xhci, slot, ep, input ); + + /* Construct command */ + memset ( context, 0, sizeof ( *context ) ); + context->type = type; + context->input = CPU_TO_LE64 ( ( (uintptr_t)input ) ); + context->slot = slot->id; + + /* Issue command and wait for completion */ + if ( ( rc = xhci_cmd_submit ( xhci, ep, &trb ) ) != 0 ) { + xhci_dump_input_ctx(xhci, ep, input); + goto err_command; + } + + err_command: + usb_free ( input ); + err_alloc: + return rc; +} + +/** + * Populate address device input context + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @v input Input context + */ +static void xhci_address_device_input ( struct xhci_host *xhci, + struct xhci_slot *slot, + struct xhci_endpoint *endpoint, + void *input ) { + struct xhci_control_context *control_ctx; + struct xhci_slot_context *slot_ctx; + struct xhci_endpoint_context *ep_ctx; + + /* Sanity checks */ + USB_ASSERT ( endpoint->ctx == XHCI_CTX_EP0 ); + + /* Populate control context, add slot context and ep context */ + control_ctx = input; + control_ctx->add = CPU_TO_LE32 ( ( 1 << XHCI_CTX_SLOT ) | + ( 1 << XHCI_CTX_EP0 ) ); + + /* Populate slot context */ + slot_ctx = ( input + xhci_input_context_offset ( xhci, XHCI_CTX_SLOT )); + slot_ctx->info = CPU_TO_LE32 ( XHCI_SLOT_INFO ( 1, 0, slot->psiv, + slot->route ) ); + slot_ctx->port = slot->port; + slot_ctx->tt_id = slot->tt_id; + slot_ctx->tt_port = slot->tt_port; + + /* Populate control endpoint context */ + ep_ctx = ( input + xhci_input_context_offset ( xhci, XHCI_CTX_EP0 ) ); + ep_ctx->type = XHCI_EP_TYPE_CONTROL; /* bit[5:3] endpoint type */ + ep_ctx->burst = endpoint->burst; /* bit[16:8] max burst size */ + ep_ctx->mtu = CPU_TO_LE16 ( endpoint->mtu ); /* bit[31:16] max packet size */ + + /* + bit[63:4] tr dequeue pointer + bit[0] dequeue cycle state + */ + ep_ctx->dequeue = CPU_TO_LE64 ( (uint64_t)( (uintptr_t)&endpoint->reqs.ring[0] ) | XHCI_EP_DCS ); + ep_ctx->trb_len = CPU_TO_LE16 ( XHCI_EP0_TRB_LEN ); /* bit[15:0] average trb length */ +} + +/** + * Address device + * + * @v xhci xHCI device + * @v endpoint Endpoint + * @v slot Device slot + * @ret rc Return status code + */ +static inline int xhci_address_device ( struct xhci_host *xhci, + struct xhci_endpoint *ep, + struct xhci_slot *slot ) { + struct xhci_slot_context *slot_ctx; + int rc; + + /* Assign device address */ + if ( ( rc = xhci_context ( xhci, slot, slot->endpoint[XHCI_CTX_EP0], + XHCI_TRB_ADDRESS_DEVICE, + xhci_address_device_input ) ) != 0 ) + + USB_LOG_DBG("XHCI %s slot ctx 0x%x\n", xhci->name, slot->context); + + /* Get assigned address for check */ + slot_ctx = ( slot->context + + xhci_device_context_offset ( xhci, XHCI_CTX_SLOT ) ); + USB_LOG_DBG("XHCI %s slot ctx 0x%x assigned address 0x%x\n", + xhci->name, slot_ctx, slot_ctx->address ); + + return rc; +} + +/** + * Reset endpoint + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @ret rc Return status code + */ +int xhci_reset_endpoint ( struct xhci_host *xhci, + struct xhci_slot *slot, + struct xhci_endpoint *endpoint ) { + union xhci_trb trb; + struct xhci_trb_reset_endpoint *reset = &trb.reset; + int rc; + + /* Construct command */ + memset ( reset, 0, sizeof ( *reset ) ); + reset->slot = slot->id; + reset->endpoint = endpoint->ctx; + reset->type = XHCI_TRB_RESET_ENDPOINT; + + /* Issue command and wait for completion */ + if ( ( rc = xhci_cmd_submit ( xhci, endpoint, &trb ) ) != 0 ) { + USB_LOG_DBG("XHCI %s slot %d ctx %d could not reset endpoint " + "in state %d: %s\n", xhci->name, slot->id, endpoint->ctx, + endpoint->context->state, strerror ( rc ) ); + return rc; + } + + return 0; +} + +/** + * Stop endpoint + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @ret rc Return status code + */ +static inline int xhci_stop_endpoint ( struct xhci_host *xhci, + struct xhci_slot *slot, + struct xhci_endpoint *endpoint ) { + union xhci_trb trb; + struct xhci_trb_stop_endpoint *stop = &trb.stop; + int rc; + + /* Construct command */ + memset ( stop, 0, sizeof ( *stop ) ); + stop->slot = slot->id; + stop->endpoint = endpoint->ctx; + stop->type = XHCI_TRB_STOP_ENDPOINT; + + /* Issue command and wait for completion */ + if ( ( rc = xhci_cmd_submit ( xhci, endpoint, &trb ) ) != 0 ) { + USB_LOG_DBG("XHCI %s slot %d ctx %d could not stop endpoint " + "in state %d: %s\n", xhci->name, slot->id, endpoint->ctx, + endpoint->context->state, strerror ( rc ) ); + return rc; + } + + return 0; +} + +/*********************************************************************/ + +/** + * Find port slot type + * + * @v xhci xHCI device + * @v port Port number + * @ret type Slot type, or negative error + */ +static int xhci_port_slot_type ( struct xhci_host *xhci, unsigned int port ) { + unsigned int supported = xhci_supported_protocol ( xhci, port ); + unsigned int type; + uint32_t slot; + + /* Fail if there is no supported protocol */ + if ( ! supported ) + return -ENOTSUP; + + /* Get slot type */ + slot = readl ( xhci->cap + supported + XHCI_SUPPORTED_SLOT ); + type = XHCI_SUPPORTED_SLOT_TYPE ( slot ); + + return type; +} + +/** + * Open device + * + * @v xhci XHCI device + * @v ep Endpoint + * @ret slot_id Return device slot id + * @ret rc Return status code + */ +int xhci_device_open ( struct xhci_host *xhci, struct xhci_endpoint *ep, int *slot_id ) { + struct usbh_hubport *hport = ep->hport; + struct usbh_hubport *tt = usbh_transaction_translator(hport); + struct xhci_slot *slot; + struct xhci_slot *tt_slot; + int type; + int rc; + int id; + size_t len; + + /* Determine applicable slot type */ + type = xhci_port_slot_type ( xhci, hport->port ); + if ( type < 0 ) { + rc = type; + USB_LOG_ERR("XHCI %s-%d has no slot type\n", + xhci->name, hport->port ); + goto err_type; + } + + /* Allocate a device slot number */ + id = xhci_enable_slot ( xhci, ep, type ); + if ( id < 0 ) { + rc = id; + goto err_enable_slot; + } + + USB_ASSERT ( ( id > 0 ) && ( ( unsigned int ) id <= xhci->slots ) ); + USB_ASSERT ( xhci->slot[id] == NULL ); + + /* Allocate and initialise structure */ + slot = usb_malloc ( sizeof ( *slot ) ); + if ( ! slot ) { + rc = -ENOMEM; + goto err_alloc; + } + slot->id = id; + xhci->slot[id] = slot; + slot->xhci = xhci; + if ( tt ) { + tt_slot = xhci->slot[tt->dev_addr]; + slot->tt_id = tt_slot->id; + slot->tt_port = tt->port; + } + + /* Allocate a device context */ + len = xhci_device_context_offset ( xhci, XHCI_CTX_END ); + slot->context = usb_align(xhci_align ( len ), len); + if ( ! slot->context ) { + rc = -ENOMEM; + goto err_alloc_context; + } + memset ( slot->context, 0, len ); + + /* Set device context base address */ + USB_ASSERT ( xhci->dcbaa.context[id] == 0 ); + xhci->dcbaa.context[id] = CPU_TO_LE64 ( ( (uintptr_t)slot->context ) ); + + USB_LOG_DBG("XHCI %s slot %d device context [%08lx,%08lx)\n", + xhci->name, slot->id, ( slot->context ), + ( ( slot->context ) + len ) ); + *slot_id = id; + return 0; + + xhci->dcbaa.context[id] = 0; + usb_free ( slot->context ); + +err_alloc_context: + xhci->slot[id] = NULL; + usb_free ( slot ); +err_alloc: + xhci_disable_slot ( xhci, ep, id ); +err_enable_slot: +err_type: + return rc; +} + +/*********************************************************************/ + +/** + * Assign device address + * + * @v xhci XHCI device + * @v slot Slot + * @v ep Endpoint + * @ret rc Return status code + */ +int xhci_device_address ( struct xhci_host *xhci, struct xhci_slot *slot, struct xhci_endpoint *ep ) { + USB_ASSERT((slot->xhci) && (ep->hport)); + struct usbh_hubport *hport = ep->hport; + int psiv; + int rc; + + /* Calculate route string */ + slot->route = usbh_route_string (hport); + + /* Calculate root hub port number */ + struct usbh_hubport *root_port = usbh_root_hub_port (hport); + slot->port = root_port->port; + + /* Calculate protocol speed ID */ + psiv = xhci_port_psiv ( xhci, slot->port, hport->speed ); + if ( psiv < 0 ) { + rc = psiv; + return rc; + } + slot->psiv = psiv; + + /* Address device */ + if ( ( rc = xhci_address_device ( xhci, ep, slot ) ) != 0 ) + return rc; + + return 0; +} + + +/** + * Close device + * + * @v slot Slot + */ +void xhci_device_close ( struct xhci_slot *slot ) { + struct xhci_host *xhci = slot->xhci; + size_t len = xhci_device_context_offset ( xhci, XHCI_CTX_END ); + unsigned int id = slot->id; + int rc; + + /* Disable slot */ + if ( ( rc = xhci_disable_slot ( xhci, slot->endpoint[0], id ) ) != 0 ) { + /* Slot is still enabled. Leak the slot context, + * since the controller may still write to this + * memory, and leave the DCBAA entry intact. + * + * If the controller later reports that this same slot + * has been re-enabled, then some assertions will be + * triggered. + */ + USB_LOG_DBG("XHCI %s slot %d leaking context memory\n", + xhci->name, slot->id ); + slot->context = NULL; + } + + /* Free slot */ + if ( slot->context ) { + usb_free ( slot->context ); + xhci->dcbaa.context[id] = 0; + } + xhci->slot[id] = NULL; + usb_free ( slot ); +} + + +/** + * Populate configure endpoint input context + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @v input Input context + */ +static void xhci_configure_endpoint_input ( struct xhci_host *xhci, + struct xhci_slot *slot, + struct xhci_endpoint *endpoint, + void *input ) { + struct xhci_control_context *control_ctx; + struct xhci_slot_context *slot_ctx; + struct xhci_endpoint_context *ep_ctx; + + xhci_dump_endpoint(endpoint); + + /* Populate control context */ + control_ctx = input; + control_ctx->add = CPU_TO_LE32 (( 1 << XHCI_CTX_SLOT ) | ( 1 << endpoint->ctx ) ); + control_ctx->drop = CPU_TO_LE32 (( 1 << XHCI_CTX_SLOT ) | ( 1 << endpoint->ctx ) ); + + /* Populate slot context */ + slot_ctx = ( input + xhci_input_context_offset ( xhci, XHCI_CTX_SLOT )); + slot_ctx->info = CPU_TO_LE32 ( XHCI_SLOT_INFO ( ( XHCI_CTX_END - 1 ), + ( slot->ports ? 1 : 0 ), + slot->psiv, 0 ) ); + slot_ctx->ports = slot->ports; + + /* Populate endpoint context */ + ep_ctx = ( input + xhci_input_context_offset ( xhci, endpoint->ctx ) ); + ep_ctx->interval = endpoint->interval; /* bit[23:16] for interrupt ep, set interval to control interrupt period */ + /* + Value Endpoint Type Direction + 0 Not Valid N/A + 1 Isoch Out + 2 Bulk Out + 3 Interrupt Out + 4 Control Bidirectional + 5 Isoch In + 6 Bulk In + 7 Interrupt In + */ + ep_ctx->type = endpoint->ctx_type; + ep_ctx->burst = endpoint->burst; + ep_ctx->mtu = CPU_TO_LE16 ( endpoint->mtu ); /* bit[31:16] max packet size */ + ep_ctx->dequeue = CPU_TO_LE64 ( (uint64_t)( (uintptr_t)&(endpoint->reqs.ring[0]) ) | XHCI_EP_DCS ); + + /* TODO: endpoint attached on hub may need different setting here */ + if (endpoint->ep_type == USB_ENDPOINT_TYPE_BULK) { + ep_ctx->trb_len = CPU_TO_LE16 ( 256U ); /* bit[15:0] average trb length */ + } else if (endpoint->ep_type == USB_ENDPOINT_TYPE_INTERRUPT) { + ep_ctx->trb_len = CPU_TO_LE16 (16U); + ep_ctx->esit_low = CPU_TO_LE16 ( endpoint->mtu ); /* bit[31:16] max ESIT payload */ + } + + xhci_dump_input_ctx(xhci, endpoint, input); +} + +/** + * Configure endpoint + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @ret rc Return status code + */ +static inline int xhci_configure_endpoint ( struct xhci_host *xhci, + struct xhci_slot *slot, + struct xhci_endpoint *endpoint ){ + int rc; + + /* Configure endpoint */ + if ( ( rc = xhci_context ( xhci, slot, endpoint, + XHCI_TRB_CONFIGURE_ENDPOINT, + xhci_configure_endpoint_input ) ) != 0 ){ + USB_LOG_ERR("XHCI %s slot %d ctx %d configure failed, error %d !!!\n", + xhci->name, slot->id, endpoint->ctx, rc ); + return rc; + } + + /* Sanity check */ + if ( ( endpoint->context->state & XHCI_ENDPOINT_STATE_MASK ) + != XHCI_ENDPOINT_RUNNING ){ + xhci_dump_slot_ctx(endpoint->slot->context); + xhci_dump_ep_ctx(endpoint->context); + USB_LOG_ERR("XHCI %s slot %d ctx %d configure failed !!!\n", + xhci->name, slot->id, endpoint->ctx ); + return -1; + } + + USB_LOG_DBG("XHCI %s slot %d ctx %d configured\n", + xhci->name, slot->id, endpoint->ctx ); + return 0; +} + +/** + * Populate deconfigure endpoint input context + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @v input Input context + */ +static void +xhci_deconfigure_endpoint_input ( struct xhci_host *xhci __unused, + struct xhci_slot *slot __unused, + struct xhci_endpoint *endpoint, + void *input ) { + struct xhci_control_context *control_ctx; + struct xhci_slot_context *slot_ctx; + + /* Populate control context */ + control_ctx = input; + control_ctx->add = CPU_TO_LE32 ( 1 << XHCI_CTX_SLOT ); + control_ctx->drop = CPU_TO_LE32 ( 1 << endpoint->ctx ); + + /* Populate slot context */ + slot_ctx = ( input + xhci_input_context_offset ( xhci, XHCI_CTX_SLOT )); + slot_ctx->info = CPU_TO_LE32 ( XHCI_SLOT_INFO ( ( XHCI_CTX_END - 1 ), + 0, 0, 0 ) ); +} + +/** + * Deconfigure endpoint + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @ret rc Return status code + */ +static inline int xhci_deconfigure_endpoint ( struct xhci_host *xhci, + struct xhci_slot *slot, + struct xhci_endpoint *endpoint ) { + int rc; + + /* Deconfigure endpoint */ + if ( ( rc = xhci_context ( xhci, slot, endpoint, + XHCI_TRB_CONFIGURE_ENDPOINT, + xhci_deconfigure_endpoint_input ) ) != 0 ) + return rc; + + USB_LOG_DBG("XHCI %s slot %d ctx %d deconfigured\n", + xhci->name, slot->id, endpoint->ctx ); + return 0; +} + +/*********************************************************************/ + +/** + * Open control endpoint + * + * @v xhci XHCI device + * @v slot Slot + * @v ep Endpoint + * @ret rc Return status code + */ +int xhci_ctrl_endpoint_open ( struct xhci_host *xhci, struct xhci_slot *slot, struct xhci_endpoint *ep ) { + unsigned int ctx; + + /* Calculate context index */ + ctx = XHCI_CTX ( ep->address ); + USB_ASSERT ( slot->endpoint[ctx] == NULL ); + + if (USB_ENDPOINT_TYPE_CONTROL != ep->ep_type) { + return -EINVAL; + } + + /* initialise structure */ + slot->endpoint[ctx] = ep; + ep->xhci = xhci; + ep->slot = slot; + ep->ctx = ctx; + ep->ctx_type = XHCI_EP_TYPE_CONTROL; + ep->context = ( ( ( void * ) slot->context ) + + xhci_device_context_offset ( xhci, ctx ) ); + ep->reqs.cs = 1; /* cycle state = 1 */ + + USB_LOG_DBG("XHCI %s slot %d endpoint 0x%x ep type %d xhci ep type 0x%x\n", + xhci->name, slot->id, ep->address, ep->ep_type, + (ep->ctx_type >> 3) ); + + USB_LOG_DBG("XHCI %s slot %d ctx %d ring [%08lx,%08lx)\n", + xhci->name, slot->id, ctx, ( ep->reqs.ring ), + ( ( ep->reqs.ring ) + sizeof(ep->reqs.ring) ) ); + + return 0; +} + +/*********************************************************************/ + +/** + * Open work endpoint + * + * @v xhci XHCI device + * @v slot Slot + * @v ep USB endpoint + * @ret rc Return status code + */ +int xhci_work_endpoint_open ( struct xhci_host *xhci, struct xhci_slot *slot, struct xhci_endpoint *ep ) { + unsigned int ctx; + unsigned int interval; + unsigned int ctx_type; + int rc; + + /* Calculate context index */ + ctx = XHCI_CTX ( ep->address ); + USB_ASSERT ( slot->endpoint[ctx] == NULL ); + + if (USB_ENDPOINT_TYPE_CONTROL == ep->ep_type) { + return -EINVAL; + } + + /* Calculate endpoint type */ + /* + Value Endpoint Type Direction, bit[5:3] + 0 Not Valid N/A + 1 Isoch Out + 2 Bulk Out + 3 Interrupt Out + 4 Control Bidirectional + 5 Isoch In + 6 Bulk In + 7 Interrupt In + */ + ctx_type = XHCI_EP_TYPE ( ep->ep_type ); + if ( ep->address & USB_EP_DIR_IN ) + ctx_type |= XHCI_EP_TYPE_IN; + + /* initialise structure */ + slot->endpoint[ctx] = ep; + ep->xhci = xhci; + ep->slot = slot; + ep->ctx = ctx; + + /* Calculate interval */ + if ( ctx_type & XHCI_EP_TYPE_PERIODIC ) { + ep->interval = ( fls ( ep->interval ) - 1 ); + } + + ep->ctx_type = ctx_type; + ep->context = ( ( ( void * ) slot->context ) + + xhci_device_context_offset ( xhci, ctx ) ); + ep->reqs.cs = 1; /* cycle state = 1 */ + + USB_LOG_DBG("XHCI %s slot %d endpoint 0x%x ep type %d xhci ep type 0x%x\n", + xhci->name, slot->id, ep->address, ep->ep_type, + (ep->ctx_type >> 3) ); + + /* Configure endpoint */ + if (( rc = xhci_configure_endpoint ( xhci, slot, ep ) ) != 0) { + goto err_configure_endpoint; + } + + USB_LOG_DBG("XHCI %s slot %d ctx %d ring [%08lx,%08lx)\n", + xhci->name, slot->id, ctx, ( ep->reqs.ring ), + ( ( ep->reqs.ring ) + sizeof(ep->reqs.ring) ) ); + + return 0; + err_configure_endpoint: + (void)xhci_deconfigure_endpoint ( xhci, slot, ep ); + slot->endpoint[ctx] = NULL; + return rc; +} + +/** + * Close endpoint + * + * @v ep USB endpoint + */ +void xhci_endpoint_close ( struct xhci_endpoint *ep ) { + struct xhci_slot *slot = ep->slot; + struct xhci_host *xhci = slot->xhci; + unsigned int ctx = ep->ctx; + + /* Deconfigure endpoint, if applicable */ + if ( ctx != XHCI_CTX_EP0 ) + (void)xhci_deconfigure_endpoint ( xhci, slot, ep ); + + slot->endpoint[ctx] = NULL; + usb_free(ep); +} + +/*********************************************************************/ + +/** + * Enqueue message transfer + * + * @v ep USB endpoint + * @v packet Setup packet buffer + * @v data_buff Data buffer + * @v datalen Data length + * @ret rc Return status code + */ +void xhci_endpoint_message ( struct xhci_endpoint *ep, + struct usb_setup_packet *packet, + void *data_buff, + int datalen ) { + struct xhci_host *xhci = ep->xhci; + struct xhci_slot *slot = ep->slot; + union xhci_trb trb; + struct xhci_trb_setup *setup; + struct xhci_trb_data *data; + struct xhci_trb_status *status; + unsigned int input; + + /* Construct setup stage TRB */ + setup = &(trb.setup); + memset ( setup, 0, sizeof ( *setup ) ); + + memcpy ( &setup->packet, packet, sizeof ( setup->packet ) ); + setup->len = CPU_TO_LE32 ( sizeof ( *packet ) ); /* bit[16:0] trb transfer length, always 8 */ + setup->flags = XHCI_TRB_IDT; /* bit[6] Immediate Data (IDT), parameters take effect */ + setup->type = XHCI_TRB_SETUP; /* bit[15:10] trb type */ + input = ( packet->bmRequestType & CPU_TO_LE16 ( USB_REQUEST_DIR_IN ) ); + if (datalen > 0) { + /* bit[17:16] Transfer type, 2 = OUT Data, 3 = IN Data */ + setup->direction = ( input ? XHCI_SETUP_IN : XHCI_SETUP_OUT ); + } + + xhci_trb_queue(&(ep->reqs), &trb); + + /* Construct data stage TRB, if applicable */ + if (datalen > 0) { + data = &(trb.data); + memset ( data, 0, sizeof ( *data ) ); + + data->data = CPU_TO_LE64 ( (uintptr_t)data_buff ); + data->len = CPU_TO_LE32 ( datalen ); + data->type = XHCI_TRB_DATA; /* bit[15:10] trb type */ + data->direction = ( input ? XHCI_DATA_IN : XHCI_DATA_OUT ); /* bit[16] Direction, 0 = OUT, 1 = IN */ + + xhci_trb_queue(&(ep->reqs), &trb); + } + + status = &(trb.status); + memset ( status, 0, sizeof ( *status ) ); + status->flags = XHCI_TRB_IOC; + status->type = XHCI_TRB_STATUS; + status->direction = + ( ( datalen && input ) ? XHCI_STATUS_OUT : XHCI_STATUS_IN ); + + xhci_trb_queue(&(ep->reqs), &trb); + + /* pass command trb to hardware */ + DSB(); + + USB_LOG_DBG("ring doorbell slot-%d ep-%d \r\n", slot->id, ep->ctx); + xhci_doorbell(xhci, slot->id, ep->ctx); /* 0 = db host controller, 0 = db targe hc command */ + + return; +} + +/*********************************************************************/ + +/** + * Enqueue stream transfer + * + * @v ep USB endpoint + * @v data_buff Data buffer + * @v datalen Data length + * @ret rc Return status code + */ +void xhci_endpoint_stream ( struct xhci_endpoint *ep, + void *data_buff, + int datalen ) { + struct xhci_host *xhci = ep->xhci; + struct xhci_slot *slot = ep->slot; + union xhci_trb trbs; + union xhci_trb *trb = &trbs; + struct xhci_trb_normal *normal; + int trb_len; + + /* Calculate TRB length */ + trb_len = XHCI_MTU; + if ( trb_len > datalen ) { + trb_len = datalen; + } else { + USB_LOG_ERR("transfer length %d exceed MTU %d \r\n", datalen, trb_len); + goto err_enqueue; + } + + /* Construct normal TRBs */ + normal = &trb->normal; + memset ( normal, 0, sizeof ( *normal ) ); + normal->data = CPU_TO_LE64 ( (uintptr_t)data_buff ); + normal->len = CPU_TO_LE32 ( trb_len ); + normal->type = XHCI_TRB_NORMAL; + normal->flags = XHCI_TRB_IOC; + + xhci_trb_queue(&(ep->reqs), trb); + + /* pass command trb to hardware */ + DSB(); + + xhci_doorbell(xhci, slot->id, ep->ctx); + +err_enqueue: + return; +} + +/*********************************************************************/ + +/** + * Populate evaluate context input context + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @v input Input context + */ +static void xhci_evaluate_context_input ( struct xhci_host *xhci, + struct xhci_slot *slot __unused, + struct xhci_endpoint *endpoint, + void *input ) { + struct xhci_control_context *control_ctx; + struct xhci_slot_context *slot_ctx; + struct xhci_endpoint_context *ep_ctx; + + /* Populate control context */ + control_ctx = input; + control_ctx->add = CPU_TO_LE32 ( ( 1 << XHCI_CTX_SLOT ) /*| + ( 1 << endpoint->ctx )*/ ); + control_ctx->drop = CPU_TO_LE32 ( ( 1 << XHCI_CTX_SLOT ) /* | + ( 1 << endpoint->ctx )*/ ); + + /* Populate slot context */ + slot_ctx = ( input + xhci_input_context_offset ( xhci, XHCI_CTX_SLOT )); + slot_ctx->info = CPU_TO_LE32 ( XHCI_SLOT_INFO ( ( XHCI_CTX_END - 1 ), + 0, 0, 0 ) ); + + /* Populate endpoint context */ + ep_ctx = ( input + xhci_input_context_offset ( xhci, endpoint->ctx ) ); + ep_ctx->mtu = CPU_TO_LE16 ( endpoint->mtu ); +} + +/** + * Evaluate context + * + * @v xhci xHCI device + * @v slot Device slot + * @v endpoint Endpoint + * @ret rc Return status code + */ +static inline int xhci_evaluate_context ( struct xhci_host *xhci, + struct xhci_slot *slot, + struct xhci_endpoint *endpoint ) { + int rc; + + /* Configure endpoint */ + if ( ( rc = xhci_context ( xhci, slot, endpoint, + XHCI_TRB_EVALUATE_CONTEXT, + xhci_evaluate_context_input ) ) != 0 ) + return rc; + + USB_LOG_DBG("XHCI %s slot %d ctx %d (re-)evaluated\n", + xhci->name, slot->id, endpoint->ctx ); + return 0; +} + +/** + * Update MTU + * + * @v ep USB endpoint + * @ret rc Return status code + */ +int xhci_endpoint_mtu ( struct xhci_endpoint *ep ) { + struct xhci_endpoint *endpoint = ( ep ); + struct xhci_slot *slot = endpoint->slot; + struct xhci_host *xhci = slot->xhci; + int rc; + + /* Evalulate context */ + if ( ( rc = xhci_evaluate_context ( xhci, slot, endpoint ) ) != 0 ) + return rc; + + return 0; +} + +/*********************************************************************/ + +/** + * Handle port status event + * + * @v xhci xHCI device + * @v trb Port status event + */ +static void xhci_port_status ( struct xhci_host *xhci, + struct xhci_trb_port_status *trb ) { + struct usbh_bus *bus = xhci->bus; + USB_ASSERT(bus); + + uint32_t portsc; + + /* Sanity check */ + USB_ASSERT ( ( trb->port > 0 ) && ( trb->port <= xhci->ports ) ); + + /* Record disconnections, changes flag will be cleared later */ + portsc = readl ( xhci->op + XHCI_OP_PORTSC ( trb->port ) ); + xhci_dump_port_status(trb->port, portsc); + + if (portsc & XHCI_PORTSC_CSC) { + /* Report port status change */ + usbh_roothub_thread_wakeup ( bus->id, trb->port ); + } +} + +/** + * Handle transfer event + * + * @v xhci xHCI device + * @v trb Transfer event TRB + */ +static void xhci_transfer ( struct xhci_host *xhci, + struct xhci_trb_transfer *trb ) { + struct xhci_slot *slot; + struct xhci_endpoint *endpoint; + union xhci_trb *trans_trb = (void *)(uintptr_t)(trb->transfer); + struct xhci_ring *trans_ring = XHCI_RING(trans_trb); /* to align addr is ring base */ + union xhci_trb *pending = &trans_ring->evt; /* preserve event trb pending to handle */ + uint32_t eidx = trans_trb - trans_ring->ring + 1; /* calculate current evt trb index */ + int rc; + + /* Identify slot */ + if ( ( trb->slot > xhci->slots ) || + ( ( slot = xhci->slot[trb->slot] ) == NULL ) ) { + USB_LOG_DBG("XHCI %s transfer event invalid slot %d:\n", + xhci->name, trb->slot ); + return; + } + + /* Identify endpoint */ + if ( ( trb->endpoint >= XHCI_CTX_END ) || + ( ( endpoint = slot->endpoint[trb->endpoint] ) == NULL ) ) { + USB_LOG_DBG("XHCI %s slot %d transfer event invalid epid " + "%d:\n", xhci->name, slot->id, trb->endpoint ); + return; + } + + /* Record completion */ + memcpy(pending, trb, sizeof(*trb)); /* copy current trb to cmd/transfer ring */ + trans_ring->eidx = eidx; + + /* Check for errors */ + if ( ! ( ( trb->code == XHCI_CMPLT_SUCCESS ) || + ( trb->code == XHCI_CMPLT_SHORT ) ) ) { + USB_LOG_ERR("XHCI %s slot %d ctx %d failed (code %d)\n", + xhci->name, slot->id, endpoint->ctx, trb->code); + + /* Sanity check */ + USB_ASSERT ( ( endpoint->context->state & XHCI_ENDPOINT_STATE_MASK ) + != XHCI_ENDPOINT_RUNNING ); + + xhci_dump_ep_ctx(endpoint->context); + return; + } + + if (endpoint->waiter) { + endpoint->waiter = false; + usb_osal_sem_give(endpoint->waitsem); + } + + if (endpoint->urb) { + struct usbh_urb *cur_urb = endpoint->urb; + cur_urb->errorcode = trb->code; + /* bit [23:0] TRB Transfer length, residual number of bytes not transferred + for OUT, is the value of (len of trb) - (data bytes transmitted), '0' means successful + for IN, is the value of (len of trb) - (data bytes received), + if cc is Short Packet, value is the diff between expected trans size and actual recv bytes + if cc is other error, value is the diff between expected trans size and actual recv bytes */ + cur_urb->actual_length += cur_urb->transfer_buffer_length - trb->residual; /* bit [23:0] */ + + if (cur_urb->complete) { + if (cur_urb->errorcode < 0) { + cur_urb->complete(cur_urb->arg, cur_urb->errorcode); + } else { + cur_urb->complete(cur_urb->arg, cur_urb->actual_length); + } + } + } + + return; +} + +/** + * Handle command completion event + * + * @v xhci xHCI device + * @v trb Command completion event + */ +static void xhci_complete ( struct xhci_host *xhci, + struct xhci_trb_complete *trb ) { + int rc; + union xhci_trb *cmd_trb = (void *)(uintptr_t)(trb->command); + struct xhci_ring *cmd_ring = XHCI_RING(cmd_trb); /* to align addr is ring base */ + union xhci_trb *pending = &cmd_ring->evt; /* preserve event trb pending to handle */ + uint32_t eidx = cmd_trb - cmd_ring->ring + 1; /* calculate current evt trb index */ + struct xhci_endpoint *work_pipe = xhci->cur_cmd_pipe; + + /* Ignore "command ring stopped" notifications */ + if ( trb->code == XHCI_CMPLT_CMD_STOPPED ) { + USB_LOG_DBG("XHCI %s command ring stopped\n", xhci->name ); + return; + } + + /* Record completion */ + USB_LOG_DBG("command-0x%x completed !!! \r\n", pending); + memcpy(pending, trb, sizeof(*trb)); /* copy current trb to cmd/transfer ring */ + cmd_ring->eidx = eidx; + + USB_ASSERT(work_pipe); + if (work_pipe->waiter) + { + work_pipe->waiter = false; + usb_osal_sem_give(work_pipe->waitsem); + } +} + +/** + * Handle host controller event + * + * @v xhci xHCI device + * @v trb Host controller event + */ +static void xhci_host_controller ( struct xhci_host *xhci, + struct xhci_trb_host_controller *trb ) { + int rc; + + /* Construct error */ + rc = -( trb->code ); + USB_LOG_ERR("XHCI %s host controller event (code %d)\n", + xhci->name, trb->code ); +} + +/** + * Process event ring in interrupt + * + * @v xhci xHCI device + */ +void xhci_event_process(struct xhci_host *xhci) { + struct xhci_ring *evts = xhci->evts; + unsigned int evt_type; + uint32_t nidx; + uint32_t cs; + union xhci_trb *trb; + uint32_t control; + uint64_t erdp; + + /* check and ack event */ + for (;;) { + /* Stop if we reach an empty TRB */ + DSB(); + + nidx = evts->nidx; /* index of dequeue trb */ + cs = evts->cs; /* cycle state toggle by xHc */ + trb = evts->ring + nidx; /* current trb */ + control = trb->common.flags; /* trb control field */ + + if ((control & XHCI_TRB_C) != (cs ? 1 : 0)) { /* if cycle state not toggle, no events need to handle */ + break; + } + + /* Handle TRB */ + evt_type = ( trb->common.type & XHCI_TRB_TYPE_MASK ); + switch ( evt_type ) { + + case XHCI_TRB_TRANSFER : + xhci_transfer ( xhci, &trb->transfer ); + break; + + case XHCI_TRB_COMPLETE : + xhci_complete ( xhci, &trb->complete ); + break; + + case XHCI_TRB_PORT_STATUS: + xhci_port_status ( xhci, &trb->port ); + break; + + case XHCI_TRB_HOST_CONTROLLER: + xhci_host_controller ( xhci, &trb->host ); + break; + + default: + USB_LOG_DBG("XHCI %s unrecognised event type %d\n:", + xhci->name, ( evt_type ) ); + break; + } + + /* move ring index, notify xhci */ + nidx++; /* head to next trb */ + if (nidx == XHCI_RING_ITEMS) + { + nidx = 0; /* roll-back if reach end of list */ + cs = cs ? 0 : 1; + evts->cs = cs; /* sw toggle cycle state */ + } + evts->nidx = nidx; + + /* Update dequeue pointer if applicable */ + erdp = (uint64_t)(unsigned long)(evts->ring + nidx); + xhci_writeq ( xhci, (uintptr_t)( erdp ) | XHCI_RUN_ERDP_EHB, + xhci->run + XHCI_RUN_ERDP ( 0 ) ); + } + + return; +} \ No newline at end of file diff --git a/third-party/cherryusb/port/xhci/xhci.h b/third-party/cherryusb/port/xhci/xhci.h new file mode 100644 index 0000000000000000000000000000000000000000..eb94ee14dd1f9f5b098eca2b88b949ba266b2abf --- /dev/null +++ b/third-party/cherryusb/port/xhci/xhci.h @@ -0,0 +1,940 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: xhci.h + * Date: 2022-07-19 09:26:25 + * LastEditTime: 2022-07-19 09:26:25 + * Description:  This file is for xhci register definition. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 zhugengyu 2022/9/19 init commit + * 2.0 zhugengyu 2023/3/29 support usb3.0 device attached at roothub + */ +#ifndef XHCI_H +#define XHCI_H + +#include "xhci_reg.h" + +#include "usbh_core.h" + +/** @file + * + * USB eXtensible Host Controller Interface (xHCI) driver + * + */ + +#define XHCI_RING_ITEMS 16U +#define XHCI_ALIGMENT 64U +#define XHCI_RING_SIZE (XHCI_RING_ITEMS * sizeof(union xhci_trb)) + +/* + * xhci_ring structs are allocated with XHCI_RING_SIZE alignment, + * then we can get it from a trb pointer (provided by evt ring). + */ +#define XHCI_RING(_trb) \ + ((struct xhci_ring*)((unsigned long)(_trb) & ~(XHCI_RING_SIZE-1))) + +/** Device context base address array */ +struct xhci_dcbaa { + /** Context base addresses */ + uint64_t *context; +}; + +/** Scratchpad buffer */ +struct xhci_scratchpad { + /** Number of page-sized scratchpad buffers */ + unsigned int count; + /** Scratchpad buffer area */ + uintptr_t buffer; + /** Scratchpad array */ + uint64_t *array; +}; + +/** An input control context */ +struct xhci_control_context { + /** Drop context flags */ + uint32_t drop; + /** Add context flags */ + uint32_t add; + /** Reserved */ + uint32_t reserved_a[5]; + /** Configuration value */ + uint8_t config; + /** Interface number */ + uint8_t intf; + /** Alternate setting */ + uint8_t alt; + /** Reserved */ + uint8_t reserved_b; +} __attribute__ (( packed )); + +/** A slot context */ +struct xhci_slot_context { + /** Device info 03-00h */ + uint32_t info; + /** Maximum exit latency */ + uint16_t latency; + /** Root hub port number */ + uint8_t port; + /** Number of downstream ports 07-04h */ + uint8_t ports; + /** TT hub slot ID */ + uint8_t tt_id; + /** TT port number */ + uint8_t tt_port; + /** Interrupter target 0b-08h */ + uint16_t intr; + /** USB address */ + uint8_t address; + /** Reserved */ + uint16_t reserved_a; + /** Slot state 0f-0ch */ + uint8_t state; + /** Reserved */ + uint32_t reserved_b[4]; +} __attribute__ (( packed )); + +/** Construct slot context device info */ +#define XHCI_SLOT_INFO( entries, hub, speed, route ) \ + ( ( (entries) << 27 ) | ( (hub) << 26 ) | ( (speed) << 20 ) | (route) ) + +/** An endpoint context */ +struct xhci_endpoint_context { + /** Endpoint state 03-00h*/ + uint8_t state; + /** Stream configuration */ + uint8_t stream; +#define XHCI_EPCTX_MULT_GET(stream) XHCI32_GET_BITS(stream, 1, 0) +#define XHCI_EPCTX_STREAM_GET(stream) XHCI32_GET_BITS(stream, 6, 2) +#define XHCI_EPCTX_LSA BIT(7) + /** Polling interval */ + uint8_t interval; + /** Max ESIT payload high */ + uint8_t esit_high; + /** Endpoint type 04-04h */ + uint8_t type; +#define XHCI_EPCTX_CERR_GET(type) XHCI32_GET_BITS(type, 2, 1) +#define XHCI_EPCTX_TYPE_GET(type) XHCI32_GET_BITS(type, 5, 3) +#define XHCI_EPCTX_HID BIT(7) + /** Maximum burst size */ + uint8_t burst; + /** Maximum packet size */ + uint16_t mtu; + /** Transfer ring dequeue pointer 0f-08h */ + uint64_t dequeue; +#define XHCI_EPCTX_DCS BIT(0) + /** Average TRB length 13-10h */ + uint16_t trb_len; + /** Max ESIT payload low */ + uint16_t esit_low; + /** Reserved */ + uint32_t reserved[3]; +} __attribute__ (( packed )); + +/** Endpoint states */ +enum { + /** Endpoint is disabled */ + XHCI_ENDPOINT_DISABLED = 0, + /** Endpoint is running */ + XHCI_ENDPOINT_RUNNING = 1, + /** Endpoint is halted due to a USB Halt condition */ + XHCI_ENDPOINT_HALTED = 2, + /** Endpoint is stopped */ + XHCI_ENDPOINT_STOPPED = 3, + /** Endpoint is halted due to a TRB error */ + XHCI_ENDPOINT_ERROR = 4, +}; + +/** Endpoint state mask */ +#define XHCI_ENDPOINT_STATE_MASK 0x07 + +/** Endpoint type */ +#define XHCI_EP_TYPE(type) ( (type) << 3 ) + +/** Control endpoint type */ +#define XHCI_EP_TYPE_CONTROL XHCI_EP_TYPE ( 4 ) + +/** Input endpoint type */ +#define XHCI_EP_TYPE_IN XHCI_EP_TYPE ( 4 ) + +/** Periodic endpoint type */ +#define XHCI_EP_TYPE_PERIODIC XHCI_EP_TYPE ( 1 ) + +/** Endpoint dequeue cycle state */ +#define XHCI_EP_DCS 0x00000001UL + +/** Control endpoint average TRB length */ +#define XHCI_EP0_TRB_LEN 8 + +/** + * Calculate doorbell register value + * + * @v target Doorbell target + * @v stream Doorbell stream ID + * @ret dbval Doorbell register value + */ +#define XHCI_DBVAL( target, stream ) ( (target) | ( (stream) << 16 ) ) + + +/** Slot context index */ +#define XHCI_CTX_SLOT 0 + +/** Calculate context index from USB endpoint address */ +/* refer to spec. Figure 4-4: Endpoint Context Addressing + ep0 = 1, ep1-out = 2, ep1-in = 3, ... ep15-out = 30, ep15-in = 31 */ +#define XHCI_CTX(address) \ + ( (address) ? ( ( ( (address) & 0x0f ) << 1 ) | \ + ( ( (address) & 0x80 ) >> 7 ) ) : 1 ) + +/** Endpoint zero context index */ +#define XHCI_CTX_EP0 XHCI_CTX ( 0x00 ) + +/** End of contexts */ +#define XHCI_CTX_END 32 + +/** Device context index */ +#define XHCI_DCI(ctx) ( (ctx) + 0 ) + +/** Input context index */ +#define XHCI_ICI(ctx) ( (ctx) + 1 ) + +/** Number of TRBs (excluding Link TRB) in the command ring + * + * This is a policy decision. + */ +#define XHCI_CMD_TRBS_LOG2 2 + +/** Number of TRBs in the event ring + * + * This is a policy decision. + */ +#define XHCI_EVENT_TRBS_LOG2 6 + +/** Number of TRBs in a transfer ring + * + * This is a policy decision. + */ +#define XHCI_TRANSFER_TRBS_LOG2 6 + +/** Maximum time to wait for BIOS to release ownership + * + * This is a policy decision. + */ +#define XHCI_USBLEGSUP_MAX_WAIT_MS 100 + +/** Maximum time to wait for host controller to stop + * + * This is a policy decision. + */ +#define XHCI_STOP_MAX_WAIT_MS 100 + +/** Maximum time to wait for reset to complete + * + * This is a policy decision. + */ +#define XHCI_RESET_MAX_WAIT_MS 500 + +/** Maximum time to wait for a command to complete + * + * The "address device" command involves waiting for a response to a + * USB control transaction, and so we must wait for up to the 5000ms + * that USB allows for devices to respond to control transactions. + */ +#define XHCI_COMMAND_MAX_WAIT_MS 5000 + +/** Time to delay after aborting a command + * + * This is a policy decision + */ +#define XHCI_COMMAND_ABORT_DELAY_MS 500 + +/** Maximum time to wait for a port reset to complete + * + * This is a policy decision. + */ +#define XHCI_PORT_RESET_MAX_WAIT_MS 500 + +/** A transfer request block template */ +struct xhci_trb_template { + /** Parameter */ + uint64_t parameter; + /** Status */ + uint32_t status; + /** Control */ + uint32_t control; +}; + +/** A transfer request block */ +struct xhci_trb_common { + /** Reserved */ + uint64_t reserved_a; + /** Reserved */ + uint32_t reserved_b; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Reserved */ + uint16_t reserved_c; +} __attribute__ (( packed )); + +/** Transfer request block cycle bit flag */ +#define XHCI_TRB_C 0x01 + +/** Transfer request block toggle cycle bit flag */ +#define XHCI_TRB_TC 0x02 + +/** Transfer request block chain flag */ +#define XHCI_TRB_CH 0x10 + +/** Transfer request block interrupt on completion flag */ +#define XHCI_TRB_IOC 0x20 + +/** Transfer request block immediate data flag */ +#define XHCI_TRB_IDT 0x40 + +/** Transfer request block type */ +#define XHCI_TRB_TYPE(type) ( (type) << 2 ) + +/** Transfer request block type mask */ +#define XHCI_TRB_TYPE_MASK XHCI_TRB_TYPE ( 0x3f ) + +/** A normal transfer request block */ +struct xhci_trb_normal { + /** Data buffer */ + uint64_t data; + /** Length */ + uint32_t len; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Reserved */ + uint16_t reserved; +} __attribute__ (( packed )); + +/** A normal transfer request block */ +#define XHCI_TRB_NORMAL XHCI_TRB_TYPE ( 1 ) + +/** Construct TD size field */ +#define XHCI_TD_SIZE(remaining) \ + ( ( ( (remaining) <= 0xf ) ? remaining : 0xf ) << 17 ) + +/** A setup stage transfer request block */ +struct xhci_trb_setup { + /** Setup packet, 04-00h sw will copy request content to this field */ + struct usb_setup_packet packet; + /** Length 08h */ + uint32_t len; + /** Flags 0ch */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Transfer direction */ + uint8_t direction; + /** Reserved */ + uint8_t reserved; +} __attribute__ (( packed )); + +/** A setup stage transfer request block */ +#define XHCI_TRB_SETUP XHCI_TRB_TYPE ( 2 ) + +/** Setup stage input data direction */ +#define XHCI_SETUP_IN 3 + +/** Setup stage output data direction */ +#define XHCI_SETUP_OUT 2 + +/** A data stage transfer request block */ +struct xhci_trb_data { + /** Data buffer */ + uint64_t data; + /** Length */ + uint32_t len; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Transfer direction */ + uint8_t direction; + /** Reserved */ + uint8_t reserved; +} __attribute__ (( packed )); + +/** A data stage transfer request block */ +#define XHCI_TRB_DATA XHCI_TRB_TYPE ( 3 ) + +/** Input data direction */ +#define XHCI_DATA_IN 0x01 + +/** Output data direction */ +#define XHCI_DATA_OUT 0x00 + +/** A status stage transfer request block */ +struct xhci_trb_status { + /** Reserved */ + uint64_t reserved_a; + /** Reserved */ + uint32_t reserved_b; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Direction */ + uint8_t direction; + /** Reserved */ + uint8_t reserved_c; +} __attribute__ (( packed )); + +/** A status stage transfer request block */ +#define XHCI_TRB_STATUS XHCI_TRB_TYPE ( 4 ) + +/** Input status direction */ +#define XHCI_STATUS_IN 0x01 + +/** Output status direction */ +#define XHCI_STATUS_OUT 0x00 + +/** A link transfer request block */ +struct xhci_trb_link { + /** Next ring segment */ + uint64_t next; + /** Reserved */ + uint32_t reserved_a; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Reserved */ + uint16_t reserved_c; +} __attribute__ (( packed )); + +/** A link transfer request block */ +#define XHCI_TRB_LINK XHCI_TRB_TYPE ( 6 ) + +/** A no-op transfer request block */ +#define XHCI_TRB_NOP XHCI_TRB_TYPE ( 8 ) + +/** An enable slot transfer request block */ +struct xhci_trb_enable_slot { + /** Reserved */ + uint64_t reserved_a; + /** Reserved */ + uint32_t reserved_b; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Slot type */ + uint8_t slot; + /** Reserved */ + uint8_t reserved_c; +} __attribute__ (( packed )); + +/** An enable slot transfer request block */ +#define XHCI_TRB_ENABLE_SLOT XHCI_TRB_TYPE ( 9 ) + +/** A disable slot transfer request block */ +struct xhci_trb_disable_slot { + /** Reserved */ + uint64_t reserved_a; + /** Reserved */ + uint32_t reserved_b; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Reserved */ + uint8_t reserved_c; + /** Slot ID */ + uint8_t slot; +} __attribute__ (( packed )); + +/** A disable slot transfer request block */ +#define XHCI_TRB_DISABLE_SLOT XHCI_TRB_TYPE ( 10 ) + +/** A context transfer request block */ +struct xhci_trb_context { + /** Input context */ + uint64_t input; + /** Reserved */ + uint32_t reserved_a; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Reserved */ + uint8_t reserved_b; + /** Slot ID */ + uint8_t slot; +} __attribute__ (( packed )); + +/** An address device transfer request block */ +#define XHCI_TRB_ADDRESS_DEVICE XHCI_TRB_TYPE ( 11 ) + +/** A configure endpoint transfer request block */ +#define XHCI_TRB_CONFIGURE_ENDPOINT XHCI_TRB_TYPE ( 12 ) + +/** An evaluate context transfer request block */ +#define XHCI_TRB_EVALUATE_CONTEXT XHCI_TRB_TYPE ( 13 ) + +/** A reset endpoint transfer request block */ +struct xhci_trb_reset_endpoint { + /** Reserved */ + uint64_t reserved_a; + /** Reserved */ + uint32_t reserved_b; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Endpoint ID */ + uint8_t endpoint; + /** Slot ID */ + uint8_t slot; +} __attribute__ (( packed )); + +/** A reset endpoint transfer request block */ +#define XHCI_TRB_RESET_ENDPOINT XHCI_TRB_TYPE ( 14 ) + +/** A stop endpoint transfer request block */ +struct xhci_trb_stop_endpoint { + /** Reserved */ + uint64_t reserved_a; + /** Reserved */ + uint32_t reserved_b; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Endpoint ID */ + uint8_t endpoint; + /** Slot ID */ + uint8_t slot; +} __attribute__ (( packed )); + +/** A stop endpoint transfer request block */ +#define XHCI_TRB_STOP_ENDPOINT XHCI_TRB_TYPE ( 15 ) + +/** A set transfer ring dequeue pointer transfer request block */ +struct xhci_trb_set_tr_dequeue_pointer { + /** Dequeue pointer */ + uint64_t dequeue; + /** Reserved */ + uint32_t reserved; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Endpoint ID */ + uint8_t endpoint; + /** Slot ID */ + uint8_t slot; +} __attribute__ (( packed )); + +/** A set transfer ring dequeue pointer transfer request block */ +#define XHCI_TRB_SET_TR_DEQUEUE_POINTER XHCI_TRB_TYPE ( 16 ) + +/** A no-op command transfer request block */ +#define XHCI_TRB_NOP_CMD XHCI_TRB_TYPE ( 23 ) + +/** A transfer event transfer request block */ +struct xhci_trb_transfer { + /** Transfer TRB pointer */ + uint64_t transfer; + /** Residual transfer length */ + uint16_t residual; + /** Reserved */ + uint8_t reserved; + /** Completion code */ + uint8_t code; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Endpoint ID */ + uint8_t endpoint; + /** Slot ID */ + uint8_t slot; +} __attribute__ (( packed )); + +/** A transfer event transfer request block */ +#define XHCI_TRB_TRANSFER XHCI_TRB_TYPE ( 32 ) + +/** A command completion event transfer request block */ +struct xhci_trb_complete { + /** Command TRB pointer */ + uint64_t command; + /** Parameter */ + uint8_t parameter[3]; + /** Completion code */ + uint8_t code; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Virtual function ID */ + uint8_t vf; + /** Slot ID */ + uint8_t slot; +} __attribute__ (( packed )); + +/** A command completion event transfer request block */ +#define XHCI_TRB_COMPLETE XHCI_TRB_TYPE ( 33 ) + +/** xHCI completion codes */ +enum xhci_completion_code { + /** Timeout */ + XHCI_CMPLT_TIMEOUT = -1, + /** Success */ + XHCI_CMPLT_SUCCESS = 1, + /** Stall Error */ + XHCI_CMPLT_STALL = 6, + /** Bandwidth Error */ + XHCI_CMPLT_BANDWIDTH = 8, + /** Endpoint Not Enabled Error */ + XHCI_CMPLT_ENDPOINT_NOT_ENABLED = 12, + /** Short packet */ + XHCI_CMPLT_SHORT = 13, + /** Parameter Error */ + XHCI_CMPLT_PARAMETER = 17, + /** Command ring stopped */ + XHCI_CMPLT_CMD_STOPPED = 24, +}; + +/** A port status change transfer request block */ +struct xhci_trb_port_status { + /** Reserved */ + uint8_t reserved_a[3]; + /** Port ID */ + uint8_t port; + /** Reserved */ + uint8_t reserved_b[7]; + /** Completion code */ + uint8_t code; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Reserved */ + uint16_t reserved_c; +} __attribute__ (( packed )); + +/** A port status change transfer request block */ +#define XHCI_TRB_PORT_STATUS XHCI_TRB_TYPE ( 34 ) + +/** A port status change transfer request block */ +struct xhci_trb_host_controller { + /** Reserved */ + uint64_t reserved_a; + /** Reserved */ + uint8_t reserved_b[3]; + /** Completion code */ + uint8_t code; + /** Flags */ + uint8_t flags; + /** Type */ + uint8_t type; + /** Reserved */ + uint16_t reserved_c; +} __attribute__ (( packed )); + +/** A port status change transfer request block */ +#define XHCI_TRB_HOST_CONTROLLER XHCI_TRB_TYPE ( 37 ) + +/** A transfer request block */ +union xhci_trb { + /** Template */ + struct xhci_trb_template template; + /** Common fields */ + struct xhci_trb_common common; + /** Normal TRB */ + struct xhci_trb_normal normal; + /** Setup stage TRB */ + struct xhci_trb_setup setup; + /** Data stage TRB */ + struct xhci_trb_data data; + /** Status stage TRB */ + struct xhci_trb_status status; + /** Link TRB */ + struct xhci_trb_link link; + /** Enable slot TRB */ + struct xhci_trb_enable_slot enable; + /** Disable slot TRB */ + struct xhci_trb_disable_slot disable; + /** Input context TRB */ + struct xhci_trb_context context; + /** Reset endpoint TRB */ + struct xhci_trb_reset_endpoint reset; + /** Stop endpoint TRB */ + struct xhci_trb_stop_endpoint stop; + /** Set transfer ring dequeue pointer TRB */ + struct xhci_trb_set_tr_dequeue_pointer dequeue; + /** Transfer event */ + struct xhci_trb_transfer transfer; + /** Command completion event */ + struct xhci_trb_complete complete; + /** Port status changed event */ + struct xhci_trb_port_status port; + /** Host controller event */ + struct xhci_trb_host_controller host; +} __attribute__ (( packed )); + +struct xhci_ring { + union xhci_trb ring[XHCI_RING_ITEMS]; + union xhci_trb evt; + uint32_t eidx; + uint32_t nidx; + uint32_t cs; + usb_osal_mutex_t lock; +}; + +/** An event ring segment */ +struct xhci_er_seg { + /** Base address */ + uint64_t base; + /** Number of TRBs */ + uint32_t count; + /** Reserved */ + uint32_t reserved; +} __attribute__ (( packed )); + +/** An xHCI endpoint */ +struct xhci_endpoint { + struct xhci_ring reqs; /* DO NOT MOVE reqs from structure beg */ + /** xHCI device */ + struct xhci_host *xhci; + /** xHCI slot */ + struct xhci_slot *slot; + /** Endpoint address */ + unsigned int address; + /** Context index */ + unsigned int ctx; + /** Endpoint type in USB definition */ + unsigned int ep_type; + /** Endpoint type in XHCI Endpoint context definition */ + unsigned int ctx_type; + + /** Maximum transfer size (Maximum packet size) */ + unsigned int mtu; + /** Maximum burst size */ + unsigned int burst; + /** Endpoint interval */ + unsigned int interval; + + /** Endpoint context */ + struct xhci_endpoint_context *context; + + /* command or transfer waiter */ + int timeout; /* = 0 no need to wait */ + bool waiter; + usb_osal_sem_t waitsem; + + /* handle urb */ + struct usbh_hubport *hport; + struct usbh_urb *urb; /* NULL if no active URB */ +}; + +/** An xHCI device slot */ +struct xhci_slot { + /** xHCI device */ + struct xhci_host *xhci; + /** Slot ID */ + unsigned int id; + /** Slot context */ + struct xhci_slot_context *context; + + /** Route string */ + unsigned int route; + /** Root hub port number */ + unsigned int port; + /** Protocol speed ID */ + unsigned int psiv; + /** Number of ports (if this device is a hub) */ + unsigned int ports; + /** Transaction translator slot ID */ + unsigned int tt_id; + /** Transaction translator port */ + unsigned int tt_port; + + /** Endpoints, indexed by context ID */ + struct xhci_endpoint *endpoint[XHCI_CTX_END]; +}; + +/** An xHCI device */ +struct xhci_host { + /** USB bus */ + struct usbh_bus *bus; + /** Name */ + char name[4]; + + /* xhci registers base addr */ + /** Registers base */ + void *base; + /** Capability registers */ + void *cap; + /** Operational registers */ + void *op; + /** Runtime registers */ + void *run; + /** Doorbell registers */ + void *db; + /** extended capability */ + unsigned int xecp; + /** capability cache */ + uint32_t hcs[3]; + uint32_t hcc; + /** xhci version */ + uint16_t version; + + /** Number of device slots */ + unsigned int slots; + /** Number of interrupters */ + unsigned int intrs; + /** Number of ports */ + unsigned int ports; + + /** 64-bit addressing capability */ + int addr64; + /** Context size shift */ + unsigned int csz_shift; + /** Page size */ + size_t pagesize; + + /** USB legacy support capability (if present and enabled) */ + unsigned int legacy; + + /** Device context base address array */ + struct xhci_dcbaa dcbaa; + + /** Scratchpad buffer */ + struct xhci_scratchpad scratch; + + /** Device slots, indexed by slot ID */ + struct xhci_slot **slot; + + /** Command ring */ + struct xhci_ring *cmds; + /** Event ring */ + struct xhci_ring *evts; + struct xhci_er_seg *eseg; + + struct xhci_endpoint *cur_cmd_pipe; +}; + +/** + * Calculate input context offset + * + * @v xhci xHCI device + * @v ctx Context index + */ +static inline size_t xhci_input_context_offset ( struct xhci_host *xhci, + unsigned int ctx ) { + + return ( XHCI_ICI ( ctx ) << xhci->csz_shift ); +} + +/** + * Calculate device context offset + * + * @v xhci xHCI device + * @v ctx Context index + */ +static inline size_t xhci_device_context_offset ( struct xhci_host *xhci, + unsigned int ctx ) { + + return ( XHCI_DCI ( ctx ) << xhci->csz_shift ); +} + +/* Probe XCHI device */ +int xhci_probe ( struct xhci_host *xhci, unsigned long baseaddr ); + +/* Open XHCI device and start running */ +int xhci_open ( struct xhci_host *xhci ); + +/* Close XHCI device and stop running */ +void xhci_close ( struct xhci_host *xhci ); + +/* Remove XHCI device and free allocated memory */ +void xhci_remove ( struct xhci_host *xhci ); + +/* Enable port */ +int xhci_port_enable (struct xhci_host *xhci, uint32_t port); + +/* Get port speed */ +uint32_t xhci_root_speed ( struct xhci_host *xhci, uint8_t port ); + +/* Open and enable device */ +int xhci_device_open ( struct xhci_host *xhci, struct xhci_endpoint *pipe, int *slot_id ); + +/* Assign device address */ +int xhci_device_address ( struct xhci_host *xhci, struct xhci_slot *slot, struct xhci_endpoint *pipe ); + +/* Close device and free allocated memory */ +void xhci_device_close ( struct xhci_slot *slot ); + +/* Open control endpoint for slot */ +int xhci_ctrl_endpoint_open ( struct xhci_host *xhci, struct xhci_slot *slot, struct xhci_endpoint *pipe ); + +/* Open work endpoint for slot */ +int xhci_work_endpoint_open ( struct xhci_host *xhci, struct xhci_slot *slot, struct xhci_endpoint *pipe ); + +/* Close endpoint and free allocated memory */ +void xhci_endpoint_close ( struct xhci_endpoint *ep ); + +/* Update MTU (Max packet size) of endpoint */ +int xhci_endpoint_mtu ( struct xhci_endpoint *ep ); + +/* Enqueue message transfer, usually for control transfer */ +void xhci_endpoint_message ( struct xhci_endpoint *ep, struct usb_setup_packet *packet, + void *data_buff, int datalen ); + +/* Enqueue stream transfer, usually for bulk/interrupt transfer */ +void xhci_endpoint_stream ( struct xhci_endpoint *ep, void *data_buff, int datalen ); + +/* Process event ring in interrupt */ +void xhci_event_process(struct xhci_host *xhci); + +/* Wait for a ring to empty (all TRBs processed by hardware) */ +int xhci_event_wait(struct xhci_host *xhci, + struct xhci_endpoint *pipe, + struct xhci_ring *ring); + +/* Dump host controller registers */ +void xhci_dump(struct xhci_host *xhci); + +/* Dump port registers */ +void xhci_dump_port ( struct xhci_host *xhci, + unsigned int port ); + +/* Dump Port status */ +void xhci_dump_port_status(uint32_t port, uint32_t portsc); + +/* Dump input context */ +void xhci_dump_input_ctx( struct xhci_host *xhci, const struct xhci_endpoint *endpoint, const void *input); + +/* Dump Endpoint */ +void xhci_dump_endpoint(const struct xhci_endpoint *ep); + +/* Dump endpoint context */ +void xhci_dump_ep_ctx(const struct xhci_endpoint_context *ep); + +/* Dump TRB */ +void xhci_dump_trbs(const union xhci_trb *trbs, unsigned int count); + +/* Dump slot context */ +void xhci_dump_slot_ctx(const struct xhci_slot_context *const sc); + +#endif /* XHCI_H */ \ No newline at end of file diff --git a/third-party/cherryusb/port/xhci/xhci_dbg.c b/third-party/cherryusb/port/xhci/xhci_dbg.c new file mode 100644 index 0000000000000000000000000000000000000000..a828219991965a42dcd65d7c7393ee32585e30d5 --- /dev/null +++ b/third-party/cherryusb/port/xhci/xhci_dbg.c @@ -0,0 +1,353 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: xhci_dbg.c + * Date: 2022-07-19 09:26:25 + * LastEditTime: 2022-07-19 09:26:25 + * Description:  This file is for implment xhci debug functions + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 zhugengyu 2022/9/19 init commit + * 2.0 zhugengyu 2023/3/29 support usb3.0 device attached at roothub + */ +#include +#include +#include +#include +#include + +#include "usbh_core.h" + +#include "xhci.h" + +/* macro to enable dump */ +#define XHCI_DUMP 1 +#define XHCI_DUMP_PORT 1 +#define XHCI_DUMP_TRB 0 +#define XHCI_DUMP_SLOT 0 +#define XHCI_DUMP_EP_CTX 0 +#define XHCI_DUMP_INPUT_CTX 0 +#define XHCI_DUMP_ENDPOINT 0 +#define XHCI_DUMP_PORT_STATUS 0 + +/** + * Dump host controller registers + * + * @v xhci xHCI device + */ +void xhci_dump(struct xhci_host *xhci) { +#if XHCI_DUMP + uint32_t usbcmd; + uint32_t usbsts; + uint32_t pagesize; + uint32_t dnctrl; + uint32_t config; + + /* Dump USBCMD */ + usbcmd = readl ( xhci->op + XHCI_OP_USBCMD ); + USB_LOG_DBG ( "XHCI %s USBCMD %08x%s%s\n", xhci->name, usbcmd, + ( ( usbcmd & XHCI_USBCMD_RUN ) ? " run" : "" ), + ( ( usbcmd & XHCI_USBCMD_HCRST ) ? " hcrst" : "" ) ); + + /* Dump USBSTS */ + usbsts = readl ( xhci->op + XHCI_OP_USBSTS ); + USB_LOG_DBG ( "XHCI %s USBSTS %08x%s\n", xhci->name, usbsts, + ( ( usbsts & XHCI_USBSTS_HCH ) ? " hch" : "" ) ); + + /* Dump PAGESIZE */ + pagesize = readl ( xhci->op + XHCI_OP_PAGESIZE ); + USB_LOG_DBG ( "XHCI %s PAGESIZE %08x\n", xhci->name, pagesize ); + + /* Dump DNCTRL */ + dnctrl = readl ( xhci->op + XHCI_OP_DNCTRL ); + USB_LOG_DBG ( "XHCI %s DNCTRL %08x\n", xhci->name, dnctrl ); + + /* Dump CONFIG */ + config = readl ( xhci->op + XHCI_OP_CONFIG ); + USB_LOG_DBG ( "XHCI %s CONFIG %08x\n", xhci->name, config ); +#endif +} + +/** + * Dump port registers + * + * @v xhci xHCI device + * @v port Port number + */ +void xhci_dump_port ( struct xhci_host *xhci, + unsigned int port ) { +#if XHCI_DUMP_PORT + uint32_t portsc; + uint32_t portpmsc; + uint32_t portli; + uint32_t porthlpmc; + + /* Dump PORTSC */ + portsc = readl ( xhci->op + XHCI_OP_PORTSC ( port ) ); + USB_LOG_DBG ( "XHCI %s-%d PORTSC %08x%s%s%s%s psiv=%d\n", + xhci->name, port, portsc, + ( ( portsc & XHCI_PORTSC_CCS ) ? " ccs" : "" ), + ( ( portsc & XHCI_PORTSC_PED ) ? " ped" : "" ), + ( ( portsc & XHCI_PORTSC_PR ) ? " pr" : "" ), + ( ( portsc & XHCI_PORTSC_PP ) ? " pp" : "" ), + XHCI_PORTSC_PSIV ( portsc ) ); + + /* Dump PORTPMSC */ + portpmsc = readl ( xhci->op + XHCI_OP_PORTPMSC ( port ) ); + USB_LOG_DBG ( "XHCI %s-%d PORTPMSC %08x\n", xhci->name, port, portpmsc ); + + /* Dump PORTLI */ + portli = readl ( xhci->op + XHCI_OP_PORTLI ( port ) ); + USB_LOG_DBG ( "XHCI %s-%d PORTLI %08x\n", xhci->name, port, portli ); + + /* Dump PORTHLPMC */ + porthlpmc = readl ( xhci->op + XHCI_OP_PORTHLPMC ( port ) ); + USB_LOG_DBG ( "XHCI %s-%d PORTHLPMC %08x\n", + xhci->name, port, porthlpmc ); +#endif +} + +/** + * Dump slot context + * + * @v sc Slot context + */ +void xhci_dump_slot_ctx(const struct xhci_slot_context *const sc) { +#if XHCI_DUMP_SLOT + const uint8_t *ctx = (uint8_t *)sc; + + USB_LOG_DBG("===== slot ctx ===== \r\n"); + USB_LOG_DBG("ctx[0]=0x%x\n", *((uint32_t*)ctx)); + USB_LOG_DBG(" info: 0x%x \r\n", sc->info); + USB_LOG_DBG("ctx[1]=0x%x\n", *((uint32_t*)ctx + 1)); + USB_LOG_DBG(" latency: 0x%x \r\n", sc->latency); + USB_LOG_DBG(" port: 0x%x \r\n", sc->port); + USB_LOG_DBG(" ports: 0x%x \r\n", sc->ports); + USB_LOG_DBG("ctx[2]=0x%x\n", *((uint32_t*)ctx + 2)); + USB_LOG_DBG(" tt_id: 0x%x \r\n", sc->tt_id); + USB_LOG_DBG(" tt_port: 0x%x \r\n", sc->tt_port); + USB_LOG_DBG("ctx[3]=0x%x\n", *((uint32_t*)ctx + 3)); + USB_LOG_DBG(" intr: 0x%x \r\n", sc->intr); + USB_LOG_DBG(" address: 0x%x \r\n", sc->address); + USB_LOG_DBG(" state: 0x%x \r\n", sc->state); + USB_LOG_DBG("=====+++++++++===== \r\n"); +#endif +} + +/** + * Dump endpoint context + * + * @v ep Endpoint context + */ +void xhci_dump_ep_ctx(const struct xhci_endpoint_context *ep) { +#if XHCI_DUMP_EP_CTX + const uint8_t *ctx = (uint8_t *)ep; + + USB_LOG_DBG("===== ep ctx ===== \r\n"); + USB_LOG_DBG("ctx[0]=0x%x\n", *((uint32_t*)ctx)); + USB_LOG_DBG(" ep_state: 0x%x \r\n", ep->state); + USB_LOG_DBG(" mult: 0x%x \r\n", XHCI_EPCTX_MULT_GET(ep->stream)); + USB_LOG_DBG(" stream: 0x%x \r\n", XHCI_EPCTX_STREAM_GET(ep->stream)); + USB_LOG_DBG(" lsa: 0x%x \r\n", !!(XHCI_EPCTX_LSA & (ep->stream))); + USB_LOG_DBG(" interval: 0x%x \r\n", ep->interval); + USB_LOG_DBG(" esit_high: 0x%x \r\n", ep->esit_high); + USB_LOG_DBG("ctx[1]=0x%x\n", *((uint32_t*)ctx + 1)); + USB_LOG_DBG(" cerr: 0x%x \r\n", XHCI_EPCTX_CERR_GET(ep->type)); + USB_LOG_DBG(" type: 0x%x \r\n", XHCI_EPCTX_TYPE_GET(ep->type)); + USB_LOG_DBG(" hid: 0x%x \r\n", !!(XHCI_EPCTX_HID & (ep->type))); + USB_LOG_DBG(" burst: 0x%x \r\n", ep->burst); + USB_LOG_DBG(" mtu: 0x%x \r\n", ep->mtu); + USB_LOG_DBG("ctx[2]=0x%x\n", *((uint32_t*)ctx + 2)); + USB_LOG_DBG("ctx[3]=0x%x\n", *((uint32_t*)ctx + 3)); + USB_LOG_DBG(" dequeue: 0x%lx \r\n", ep->dequeue); + USB_LOG_DBG(" dcs: 0x%lx \r\n", !!(XHCI_EPCTX_DCS & ep->dequeue)); + USB_LOG_DBG("ctx[4]=0x%x\n", *((uint32_t*)ctx + 4)); + USB_LOG_DBG(" trb_len: 0x%x \r\n", ep->trb_len); + USB_LOG_DBG(" esit_low: 0x%x \r\n", ep->esit_low); + USB_LOG_DBG("=====+++++++++===== \r\n"); +#endif +} + +/** + * Dump input context + * + * @v xhci XHCI device + * @v endpoint Endpoint + * @v input Input context + */ +void xhci_dump_input_ctx( struct xhci_host *xhci, const struct xhci_endpoint *endpoint, const void *input) { +#if XHCI_DUMP_INPUT_CTX + const struct xhci_control_context *control_ctx; + const struct xhci_slot_context *slot_ctx; + const struct xhci_endpoint_context *ep_ctx; + + control_ctx = input; + slot_ctx = ( input + xhci_input_context_offset ( xhci, XHCI_CTX_SLOT )); + ep_ctx = ( input + xhci_input_context_offset ( xhci, endpoint->ctx ) ); + + USB_LOG_DBG("===input ctx====\n"); + USB_LOG_DBG("ctrl@%p=0x%x\n", control_ctx, *control_ctx); + USB_LOG_DBG("add=0x%x\n", control_ctx->add); + USB_LOG_DBG("del=0x%x\n", control_ctx->drop); + + USB_LOG_DBG("slot@%p\n", slot_ctx); + xhci_dump_slot_ctx(slot_ctx); + + USB_LOG_DBG("ep-%d@%p\n", endpoint->ctx, ep_ctx); + xhci_dump_ep_ctx(ep_ctx); + + USB_LOG_DBG("=====+++++++++===== \r\n"); +#endif +} + +/** + * Get next TRB in ring + * + * @v trbs TRB in ring + * @v trb Next TRB + */ +static const union xhci_trb * xhci_get_next_trb(const union xhci_trb *trbs) { + const struct xhci_trb_link *link = &(trbs->link); + if (link->type == XHCI_TRB_LINK) { + return (link->next) ? (const union xhci_trb *)(uintptr_t)(link->next) : NULL; + } else { + return trbs + 1; + } +} + +/** + * Dump TRB + * + * @v trbs TRB header + * @v count Number of TRB to dump + */ +void xhci_dump_trbs(const union xhci_trb *trbs, unsigned int count) { +#if XHCI_DUMP_TRB + const union xhci_trb *cur; + const struct xhci_trb_common *comm; + const uint8_t *dword; + + USB_LOG_DBG("===trbs ====\n"); + for (unsigned int i = 0; i < count; i++) { + cur = &(trbs[i]); + dword = (const uint8_t *)cur; + + comm = &(cur->common); + USB_LOG_DBG("[0x%x-0x%x-0x%x-0x%x]\n", + *((uint32_t *)dword), *((uint32_t *)dword + 1), + *((uint32_t *)dword + 2), *((uint32_t *)dword + 3)); + if (XHCI_TRB_SETUP == comm->type) { + const struct xhci_trb_setup *setup = (const struct xhci_trb_setup *)comm; + + USB_LOG_DBG("setup trb\n"); + USB_LOG_DBG(" packet=0x%x\n", setup->packet); + USB_LOG_DBG(" bmRequestType type=0x%x\n", setup->packet.bmRequestType); + USB_LOG_DBG(" bRequest=0x%x\n", setup->packet.bRequest); + USB_LOG_DBG(" wValue=0x%x\n", setup->packet.wValue); + USB_LOG_DBG(" wIndex=0x%x\n", setup->packet.wIndex); + USB_LOG_DBG(" wLength=0x%x\n", setup->packet.wLength); + USB_LOG_DBG(" trb_trans_len=%d\n", setup->len); + USB_LOG_DBG(" flags=0x%x\n", setup->flags); + USB_LOG_DBG(" direction=%d\n", setup->direction); + } else if (XHCI_TRB_DATA == comm->type) { + const struct xhci_trb_data *data = (const struct xhci_trb_data *)comm; + + USB_LOG_DBG("data trb......\n"); + USB_LOG_DBG(" data=0x%x\n", data->data); + USB_LOG_DBG(" len=%d\n", data->len); + USB_LOG_DBG(" direction=%d\n", data->direction); + } else if (XHCI_TRB_STATUS == comm->type) { + const struct xhci_trb_status *status = (const struct xhci_trb_status *)comm; + + USB_LOG_DBG("status trb......\n"); + USB_LOG_DBG(" direction=%d\n", status->direction); + } + } + USB_LOG_DBG("=====+++++++++===== \r\n"); +#endif +} + +static const char *xhci_endpoint_xhci_type (unsigned int ep_xhci_type) { + static const char *ep_names[] = {"not_valid", "isoc_out", "bulk_out", + "intr_out", "ctrl", "isoc_in", + "bulk_in", "intr_in"}; + unsigned int index = ep_xhci_type >> 3; + if (index < sizeof(ep_names)/sizeof(ep_names[0])) { + return ep_names[index]; + } + + return "unkown"; +} + +static const char *xhci_endpoint_type (unsigned int ep_type) { + const char *ep_name = "unkown"; + + switch (ep_type) + { + case USB_ENDPOINT_TYPE_CONTROL: + ep_name = "ctrl-ep"; + break; + case USB_ENDPOINT_TYPE_ISOCHRONOUS: + ep_name = "isoc-ep"; + break; + case USB_ENDPOINT_TYPE_BULK: + ep_name = "bulk-ep"; + break; + case USB_ENDPOINT_TYPE_INTERRUPT: + ep_name = "intr-ep"; + break; + default: + break; + } + + return ep_name; +} + +/** + * Dump Endpoint + * + * @v ep Endpoint + */ +void xhci_dump_endpoint(const struct xhci_endpoint *ep) { +#if XHCI_DUMP_ENDPOINT + USB_LOG_DBG("===endpoint====\n"); + USB_LOG_DBG("xhci=0x%x\n", ep->xhci); + USB_LOG_DBG("slot=0x%x\n", ep->slot); + USB_LOG_DBG("address=0x%x\n", ep->address); + USB_LOG_DBG("mtu=0x%x\n", ep->mtu); + USB_LOG_DBG("burst=0x%x\n", ep->burst); + USB_LOG_DBG("ctx=0x%x\n", ep->ctx); + USB_LOG_DBG("ep_type=%s\n", xhci_endpoint_type(ep->ep_type)); + USB_LOG_DBG("xhci_type=%s\n", xhci_endpoint_xhci_type(ep->ctx_type)); + USB_LOG_DBG("interval=0x%x\n", ep->interval); + USB_LOG_DBG("=====+++++++++===== \r\n"); +#endif +} + +/** + * Dump Port status + * + * @v port Port number + * @v portsc Port status + */ +void xhci_dump_port_status(uint32_t port, uint32_t portsc) { +#if XHCI_DUMP_PORT_STATUS + USB_LOG_DBG("====port-%d====\n"); + USB_LOG_DBG("connect=%d \n", !!(XHCI_PORTSC_CCS & port)); + USB_LOG_DBG("enabled=%d \n", !!(XHCI_PORTSC_PED & port)); + USB_LOG_DBG("powered=%d \n", !!(XHCI_PORTSC_PP & port)); + USB_LOG_DBG("=====+++++++++===== \r\n"); +#endif +} \ No newline at end of file diff --git a/third-party/cherryusb/port/xhci/xhci_reg.h b/third-party/cherryusb/port/xhci/xhci_reg.h new file mode 100644 index 0000000000000000000000000000000000000000..a981daa672eb8b2a3f5ed4cb24b30bb69f34e0cd --- /dev/null +++ b/third-party/cherryusb/port/xhci/xhci_reg.h @@ -0,0 +1,499 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: xhci_reg.h + * Date: 2022-07-19 09:26:25 + * LastEditTime: 2022-07-19 09:26:25 + * Description:  This file is for xhci register definition. + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------     --------    -------------------------------------- + * 1.0 zhugengyu 2022/9/19 init commit + * 2.0 zhugengyu 2023/3/29 support usb3.0 device attached at roothub + */ + +#ifndef XHCI_REG_H +#define XHCI_REG_H + +#if defined(__aarch64__) +#define BITS_PER_LONG 64U +#define XHCI_AARCH64 +#else +#define BITS_PER_LONG 32U +#define XHCI_AARCH32 +#endif + +#define XHCI_GENMASK(h, l) \ + (((~0UL) - (1UL << (l)) + 1) & (~0UL >> (BITS_PER_LONG - 1 - (h)))) + +#define XHCI_GENMASK_ULL(h, l) \ + (((~0ULL) - (1ULL << (l)) + 1) & \ + (~0ULL >> (BITS_PER_LONG_LONG - 1 - (h)))) + +#define XHCI32_GET_BITS(x, a, b) (uint32_t)((((uint32_t)(x)) & XHCI_GENMASK(a, b)) >> b) +#define XHCI32_SET_BITS(x, a, b) (uint32_t)((((uint32_t)(x)) << b) & XHCI_GENMASK(a, b)) +#define XHCI64_GET_BITS(x, a, b) (uint64_t)((((uint64_t)(x)) & XHCI_GENMASK_ULL(a, b)) >> b) +#define XHCI64_SET_BITS(x, a, b) (uint64_t)((((uint64_t)(x)) << b) & XHCI_GENMASK_ULL(a, b)) + +/** Capability register length */ +#define XHCI_CAP_CAPLENGTH 0x00 + +/** Host controller interface version number */ +#define XHCI_CAP_HCIVERSION 0x02 + +/** Structural parameters 1 */ +#define XHCI_CAP_HCSPARAMS1 0x04 + +/** Number of device slots */ +#define XHCI_HCSPARAMS1_SLOTS(params) ( ( (params) >> 0 ) & 0xff ) + +/** Number of interrupters */ +#define XHCI_HCSPARAMS1_INTRS(params) ( ( (params) >> 8 ) & 0x3ff ) + +/** Number of ports */ +#define XHCI_HCSPARAMS1_PORTS(params) ( ( (params) >> 24 ) & 0xff ) + +/** Structural parameters 2 */ +#define XHCI_CAP_HCSPARAMS2 0x08 + +/** Number of page-sized scratchpad buffers */ +#define XHCI_HCSPARAMS2_SCRATCHPADS(params) \ + ( ( ( (params) >> 16 ) & 0x3e0 ) | ( ( (params) >> 27 ) & 0x1f ) ) + +/** Capability parameters */ +#define XHCI_CAP_HCCPARAMS1 0x10 + +/** 64-bit addressing capability */ +#define XHCI_HCCPARAMS1_ADDR64(params) ( ( (params) >> 0 ) & 0x1 ) + +/** Context size shift */ +#define XHCI_HCCPARAMS1_CSZ_SHIFT(params) ( 5 + ( ( (params) >> 2 ) & 0x1 ) ) + +/** xHCI extended capabilities pointer */ +#define XHCI_HCCPARAMS1_XECP(params) ( ( ( (params) >> 16 ) & 0xffff ) << 2 ) + +/** Doorbell offset */ +#define XHCI_CAP_DBOFF 0x14 + +/** Runtime register space offset */ +#define XHCI_CAP_RTSOFF 0x18 + +/** xHCI extended capability ID */ +#define XHCI_XECP_ID(xecp) ( ( (xecp) >> 0 ) & 0xff ) + +/** Next xHCI extended capability pointer */ +#define XHCI_XECP_NEXT(xecp) ( ( ( (xecp) >> 8 ) & 0xff ) << 2 ) + +/** USB legacy support extended capability */ +#define XHCI_XECP_ID_LEGACY 1 + +/** USB legacy support BIOS owned semaphore */ +#define XHCI_USBLEGSUP_BIOS 0x02 + +/** USB legacy support BIOS ownership flag */ +#define XHCI_USBLEGSUP_BIOS_OWNED 0x01 + +/** USB legacy support OS owned semaphore */ +#define XHCI_USBLEGSUP_OS 0x03 + +/** USB legacy support OS ownership flag */ +#define XHCI_USBLEGSUP_OS_OWNED 0x01 + +/** USB legacy support control/status */ +#define XHCI_USBLEGSUP_CTLSTS 0x04 + +/** Supported protocol extended capability */ +#define XHCI_XECP_ID_SUPPORTED 2 + +/** Supported protocol revision */ +#define XHCI_SUPPORTED_REVISION 0x00 + +/** Supported protocol minor revision */ +#define XHCI_SUPPORTED_REVISION_VER(revision) ( ( (revision) >> 16 ) & 0xffff ) + +/** Supported protocol name */ +#define XHCI_SUPPORTED_NAME 0x04 + +/** Supported protocol ports */ +#define XHCI_SUPPORTED_PORTS 0x08 + +/** Supported protocol port offset */ +#define XHCI_SUPPORTED_PORTS_OFFSET(ports) ( ( (ports) >> 0 ) & 0xff ) + +/** Supported protocol port count */ +#define XHCI_SUPPORTED_PORTS_COUNT(ports) ( ( (ports) >> 8 ) & 0xff ) + +/** Supported protocol PSI count */ +#define XHCI_SUPPORTED_PORTS_PSIC(ports) ( ( (ports) >> 28 ) & 0x0f ) + +/** Supported protocol slot */ +#define XHCI_SUPPORTED_SLOT 0x0c + +/** Supported protocol slot type */ +#define XHCI_SUPPORTED_SLOT_TYPE(slot) ( ( (slot) >> 0 ) & 0x1f ) + +/** Supported protocol PSI */ +#define XHCI_SUPPORTED_PSI(index) ( 0x10 + ( (index) * 4 ) ) + +/** Supported protocol PSI value */ +#define XHCI_SUPPORTED_PSI_VALUE(psi) ( ( (psi) >> 0 ) & 0x0f ) + +/** Supported protocol PSI mantissa */ +#define XHCI_SUPPORTED_PSI_MANTISSA(psi) ( ( (psi) >> 16 ) & 0xffff ) + +/** Supported protocol PSI exponent */ +#define XHCI_SUPPORTED_PSI_EXPONENT(psi) ( ( (psi) >> 4 ) & 0x03 ) + +/** Default PSI values */ +enum { + /** Full speed (12Mbps) */ + XHCI_SPEED_FULL = 1, + /** Low speed (1.5Mbps) */ + XHCI_SPEED_LOW = 2, + /** High speed (480Mbps) */ + XHCI_SPEED_HIGH = 3, + /** Super speed */ + XHCI_SPEED_SUPER = 4, +}; + +/** USB command register */ +#define XHCI_OP_USBCMD 0x00 + +/** Run/stop */ +#define XHCI_USBCMD_RUN 0x00000001UL + +/* Interrupter Enable (INTE) 1: enabled - RW */ +#define XHCI_USBCMD_INTE (1UL << 2) + +/** Host controller reset */ +#define XHCI_USBCMD_HCRST 0x00000002UL + +/** USB status register */ +#define XHCI_OP_USBSTS 0x04 + +/** Host controller halted */ +#define XHCI_USBSTS_HCH 0x00000001UL + +/** Interrupt Pending (IP) */ +#define XHCI_USBSTS_EINT (1UL << 3) + +/** Page size register */ +#define XHCI_OP_PAGESIZE 0x08 + +/** Page size */ +#define XHCI_PAGESIZE(pagesize) ( (pagesize) << 12 ) + +/** Device notifcation control register */ +#define XHCI_OP_DNCTRL 0x14 + +/** Command ring control register */ +#define XHCI_OP_CRCR 0x18 + +/** Command ring cycle state */ +#define XHCI_CRCR_RCS 0x00000001UL + +/** Command abort */ +#define XHCI_CRCR_CA 0x00000004UL + +/** Command ring running */ +#define XHCI_CRCR_CRR 0x00000008UL + +/** Device context base address array pointer */ +#define XHCI_OP_DCBAAP 0x30 + +/** Configure register */ +#define XHCI_OP_CONFIG 0x38 + +/** Maximum device slots enabled */ +#define XHCI_CONFIG_MAX_SLOTS_EN(slots) ( (slots) << 0 ) + +/** Maximum device slots enabled mask */ +#define XHCI_CONFIG_MAX_SLOTS_EN_MASK \ + XHCI_CONFIG_MAX_SLOTS_EN ( 0xff ) + +/** Port status and control register */ +#define XHCI_OP_PORTSC(port) ( 0x400 - 0x10 + ( (port) << 4 ) ) + +/** Current connect status */ +#define XHCI_PORTSC_CCS 0x00000001UL + +/** Port enabled */ +#define XHCI_PORTSC_PED 0x00000002UL + +#define XHCI_PORTSC_OCA (1 << 3) + +/** Port reset */ +#define XHCI_PORTSC_PR 0x00000010UL + +/** Port link state */ +#define XHCI_PORTSC_PLS(pls) ( (pls) << 5 ) + +/** U0 state */ +#define XHCI_PORTSC_PLS_U0 XHCI_PORTSC_PLS ( 0 ) + +/** Disabled port link state */ +#define XHCI_PORTSC_PLS_DISABLED XHCI_PORTSC_PLS ( 4 ) + +/** RxDetect port link state */ +#define XHCI_PORTSC_PLS_RXDETECT XHCI_PORTSC_PLS ( 5 ) + +/** Polling state */ +#define XHCI_PORTSC_PLS_POLLING XHCI_PORTSC_PLS ( 7 ) + +/** Port link state mask */ +#define XHCI_PORTSC_PLS_MASK XHCI_PORTSC_PLS ( 0xf ) + +/** Port power */ +#define XHCI_PORTSC_PP 0x00000200UL + +/** Time to delay after enabling power to a port */ +#define XHCI_PORT_POWER_DELAY_MS 20 + +/** Port speed ID value */ +#define XHCI_PORTSC_PSIV(portsc) ( ( (portsc) >> 10 ) & 0xf ) + +/** Port indicator control */ +#define XHCI_PORTSC_PIC(indicators) ( (indicators) << 14 ) + +/** Port indicator control mask */ +#define XHCI_PORTSC_PIC_MASK XHCI_PORTSC_PIC ( 3 ) + +/** Port link state write strobe */ +#define XHCI_PORTSC_LWS 0x00010000UL + +/** Time to delay after writing the port link state */ +#define XHCI_LINK_STATE_DELAY_MS 100 + +/** Connect status change */ +#define XHCI_PORTSC_CSC (1 << 17) + +/** Port enabled/disabled change */ +#define XHCI_PORTSC_PEC (1 << 18) + +/** Warm port reset change */ +#define XHCI_PORTSC_WRC (1 << 19) + +/** Over-current change */ +#define XHCI_PORTSC_OCC (1 << 20) + +/** Port reset change */ +#define XHCI_PORTSC_PRC (1 << 21) + +/** Port link state change */ +#define XHCI_PORTSC_PLC (1 << 22) + +/** Port config error change */ +#define XHCI_PORTSC_CEC (1 << 23) + +/* Cold Attach Status 1: Far-end Receiver Terminations were detected */ +#define XHCI_PORTSC_CAS (1 << 24) + +/* Wake on Connect Enable 1: enable port to be sensitive to device connects */ +#define XHCI_PORTSC_WCE (1 << 25) + +/* Wake on Disconnect Enable 1: enable port to be sensitive to device disconnects */ +#define XHCI_PORTSC_WDE (1 << 26) + +/* Wake on Over-current Enable 1: enable port to be sensitive to over-current conditions */ +#define XHCI_PORTSC_WOE (1 << 27) + +/* Device Removable, 0: Device is removable. 1: Device is non-removable */ +#define XHCI_PORTSC_DR (1 << 30) + +/* Warm Port Reset 1: follow Warm Reset sequence */ +#define XHCI_PORTSC_WPR (1 << 31) + +/** Port status change mask */ +#define XHCI_PORTSC_CHANGE \ + ( XHCI_PORTSC_CSC | XHCI_PORTSC_PEC | XHCI_PORTSC_WRC | \ + XHCI_PORTSC_OCC | XHCI_PORTSC_PRC | XHCI_PORTSC_PLC | \ + XHCI_PORTSC_CEC ) + +#define XHCI_PORTSC_RW_MASK (XHCI_PORTSC_PR | XHCI_PORTSC_PLS_MASK | XHCI_PORTSC_PP \ + | XHCI_PORTSC_PIC_MASK | XHCI_PORTSC_LWS | XHCI_PORTSC_WCE \ + | XHCI_PORTSC_WDE | XHCI_PORTSC_WOE) + +/** Port status and control bits which should be preserved + * + * The port status and control register is a horrendous mix of + * differing semantics. Some bits are written to only when a separate + * write strobe bit is set. Some bits should be preserved when + * modifying other bits. Some bits will be cleared if written back as + * a one. Most excitingly, the "port enabled" bit has the semantics + * that 1=enabled, 0=disabled, yet writing a 1 will disable the port. + */ +#define XHCI_PORTSC_PRESERVE ( XHCI_PORTSC_PP | XHCI_PORTSC_PIC_MASK ) + +/** Port power management status and control register */ +#define XHCI_OP_PORTPMSC(port) ( 0x404 - 0x10 + ( (port) << 4 ) ) + +/** Port link info register */ +#define XHCI_OP_PORTLI(port) ( 0x408 - 0x10 + ( (port) << 4 ) ) + +/** Port hardware link power management control register */ +#define XHCI_OP_PORTHLPMC(port) ( 0x40c - 0x10 + ( (port) << 4 ) ) + +/* Doorbell registers are 32 bits in length */ +#define XHCI_REG_DB_SIZE 4 + +/** Interrupter Management Register */ +#define XHCI_RUN_IR_IMAN(intr) ( 0x20 + ( (intr) << 5 ) ) + +/* Interrupt Pending, 1: an interrupt is pending for this Interrupter */ +#define XHCI_RUN_IR_IMAN_IP (1 << 0) + +/* Interrupt Enable, 1: capable of generating an interrupt. */ +#define XHCI_RUN_IR_IMAN_IE (1 << 1) + +/** Interrupter Moderation Register */ +#define XHCI_RUN_IR_IMOD(intr) ( 0x24 + ( (intr) << 5 ) ) + +/** Event ring segment table size register */ +#define XHCI_RUN_ERSTSZ(intr) ( 0x28 + ( (intr) << 5 ) ) + +/** Event ring segment table base address register */ +#define XHCI_RUN_ERSTBA(intr) ( 0x30 + ( (intr) << 5 ) ) + +/** Event ring dequeue pointer register */ +#define XHCI_RUN_ERDP(intr) ( 0x38 + ( (intr) << 5 ) ) + +/** Event Handler Busy */ +#define XHCI_RUN_ERDP_EHB (1 << 3) + +/** Minimum alignment required for data structures + * + * With the exception of the scratchpad buffer pages (which are + * page-aligned), data structures used by xHCI generally require from + * 16 to 64 byte alignment and must not cross an (xHCI) page boundary. + * We simplify this requirement by aligning each structure on its own + * size, with a minimum of a 64 byte alignment. + */ +#define XHCI_MIN_ALIGN 64 + +/** Maximum transfer size */ +#define XHCI_MTU 65536 + +/** Read/Write Data Barrier for ARM */ +#define BARRIER() __asm__ __volatile__("": : :"memory") + +#ifdef XHCI_AARCH64 +#define DSB() __asm__ __volatile__("dsb sy": : : "memory") +#else +#define DSB() __asm__ __volatile__("dsb": : : "memory") +#endif + +/** + * Read byte from memory-mapped device + * + * @v io_addr I/O address + * @ret data Value read + */ +static inline uint8_t readb(void *io_addr ) { + uint8_t val = *(volatile const uint8_t *)io_addr; + BARRIER(); + return val; +} + +/** + * Read 16-bit word from memory-mapped device + * + * @v io_addr I/O address + * @ret data Value read + */ +static inline uint16_t readw(void * io_addr ) { + uint16_t val = *(volatile const uint16_t *)io_addr; + BARRIER(); + return val; +} + +/** + * Read 32-bit dword from memory-mapped device + * + * @v io_addr I/O address + * @ret data Value read + */ +static inline uint32_t readl(void * io_addr ) { + uint32_t val = *(volatile const uint32_t *)io_addr; + BARRIER(); + return val; +} + +/** + * Read 64-bit qword from memory-mapped device + * + * @v io_addr I/O address + * @ret data Value read + */ +static inline uint64_t readq(void * io_addr ) { + uint64_t val = *(volatile const uint64_t *)io_addr; + BARRIER(); + return val; +} + +/** + * Write byte to memory-mapped device + * + * @v data Value to write + * @v io_addr I/O address + */ +static inline void writeb(uint8_t data, void * io_addr ) { + BARRIER(); + *(volatile uint8_t *)io_addr = data; +} + +/** + * Write 16-bit word to memory-mapped device + * + * @v data Value to write + * @v io_addr I/O address + */ +static inline void writew(uint16_t data, void * io_addr ) { + BARRIER(); + *(volatile uint16_t *)io_addr = data; +} + +/** + * Write 32-bit dword to memory-mapped device + * + * @v data Value to writed + * @v io_addr I/O address + */ +static inline void writel(uint32_t data, void * io_addr ) { + BARRIER(); + *(volatile uint32_t *)io_addr = data; +} + +/** + * Write 64-bit qword to memory-mapped device + * + * @v data Value to write + * @v io_addr I/O address + */ +static inline void writeq(uint64_t data, void * io_addr ) { + BARRIER(); + *(volatile uint64_t *)io_addr = data; +} + +/** + * Byte-order converter for ARM-Little-End + */ +#define CPU_TO_LE64(x) ((uint64_t)(x)) +#define LE64_to_CPU(x) ((uint64_t)(x)) +#define CPU_TO_LE32(x) ((uint32_t)(x)) +#define LE32_TO_CPU(x) ((uint32_t)(x)) +#define CPU_TO_LE16(x) ((uint16_t)(x)) +#define LE16_TO_CPU(x) ((uint16_t)(x)) + + +#endif /* XHCI_REG_H */ \ No newline at end of file diff --git a/third-party/fatfs-0.1.4/port/fusb/diskio_usb.c b/third-party/fatfs-0.1.4/port/fusb/diskio_usb.c index 3865a9ac2967a973966eb26de0bd20cd2db7bfe4..f3647cb2a48cf299f87380d57a9bcded4761d8f2 100644 --- a/third-party/fatfs-0.1.4/port/fusb/diskio_usb.c +++ b/third-party/fatfs-0.1.4/port/fusb/diskio_usb.c @@ -57,27 +57,29 @@ typedef struct boolean init_ok; BYTE pdrv; const TCHAR *disk_name; + struct usbh_bus usb; } ff_usb_disk; static ff_usb_disk usb_disk = { + .id = FUSB_FATFS_ID, .pdrv = FF_DRV_NOT_USED, .init_ok = FALSE, - .disk_name = "/dev/sda" + .disk_name = "/usb0/sda" }; /*****************************************************************************/ -extern void USBH_IRQHandler(void); +extern void USBH_IRQHandler(void *); static void UsbHcInterrruptHandler(s32 vector, void *param) { - USBH_IRQHandler(); + USBH_IRQHandler(param); } -static void UsbHcSetupInterrupt(void) +static void UsbHcSetupInterrupt(u32 id) { u32 cpu_id; - u32 irq_num = usb_irq_num[FUSB_FATFS_ID]; + u32 irq_num = usb_irq_num[id]; u32 irq_priority = 13U; GetCpuId(&cpu_id); @@ -88,7 +90,7 @@ static void UsbHcSetupInterrupt(void) /* register intr callback */ InterruptInstall(irq_num, UsbHcInterrruptHandler, - NULL, + &(usb_disk.usb), NULL); /* enable irq */ @@ -104,15 +106,15 @@ void UsbHcSetupMemp(void) } /* implement cherryusb weak functions */ -void usb_hc_low_level_init(void) +void usb_hc_low_level_init(uint32_t id) { UsbHcSetupMemp(); - UsbHcSetupInterrupt(); + UsbHcSetupInterrupt(id); } -unsigned long usb_hc_get_register_base(void) +unsigned long usb_hc_get_register_base(uint32_t id) { - return xhci_base_addr[FUSB_FATFS_ID]; + return xhci_base_addr[id]; } void *usb_hc_malloc(size_t size) @@ -189,7 +191,8 @@ static DSTATUS usb_disk_initialize( if (FALSE == disk->init_ok) { - (void)usbh_initialize(); /* start a task to emurate usb hub and attached usb disk */ + memset(&disk->usb, 0, sizeof(disk->usb)); + (void)usbh_initialize(disk->id, &disk->usb); /* start a task to emurate usb hub and attached usb disk */ while (TRUE) { if (NULL != usbh_find_class_instance(disk->disk_name)) diff --git a/third-party/freertos/Kconfig b/third-party/freertos/Kconfig index a04ab000f1bcc4e5cfd9b71886429e14febd8e68..001149b1470d196833bf482cd8be6c6a0db2488d 100644 --- a/third-party/freertos/Kconfig +++ b/third-party/freertos/Kconfig @@ -10,7 +10,7 @@ config FREERTOS_HZ int "Tick rate (Hz)" - range 1 10000 + range 1 1000 default 1000 help Select the tick rate at which FreeRTOS does pre-emptive context switching. diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch32/port.c b/third-party/freertos/portable/GCC/ft_platform/aarch32/port.c index 091d3d171f76dc5d0568f32fc2105ba57398de09..4f408b09a35cf70a240c3467576059a476dcfdb8 100644 --- a/third-party/freertos/portable/GCC/ft_platform/aarch32/port.c +++ b/third-party/freertos/portable/GCC/ft_platform/aarch32/port.c @@ -29,10 +29,12 @@ #include #include #include -#include "faarch32.h" + /* Scheduler includes. */ #include "FreeRTOS.h" #include "task.h" +#include "finterrupt.h" +#include "fgic_cpu_interface.h" #ifndef configINTERRUPT_CONTROLLER_BASE_ADDRESS #error configINTERRUPT_CONTROLLER_BASE_ADDRESS must be defined. See https://www.FreeRTOS.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html @@ -112,7 +114,6 @@ point is zero. */ mode. */ #define portAPSR_USER_MODE (0x10) -static void vPortSetPriorityMask(uint32_t value); /* The critical section macros only mask interrupts up to an application determined priority level. Sometimes it is necessary to turn interrupt off in @@ -133,7 +134,7 @@ the CPU itself before modifying certain hardware registers. */ #define portCLEAR_INTERRUPT_MASK() \ { \ portCPU_IRQ_DISABLE(); \ - vPortSetPriorityMask(portUNMASK_VALUE); \ + InterruptSetPriorityMask(portUNMASK_VALUE); \ __asm volatile("DSB \n" \ "ISB \n"); \ portCPU_IRQ_ENABLE(); \ @@ -171,7 +172,6 @@ extern void vPortRestoreTaskContext(void); static void prvTaskExitError(void); - /* * If the application provides an implementation of vApplicationIRQHandler(), * then it will get called directly without saving the FPU registers on @@ -213,13 +213,14 @@ volatile uint32_t ulPortYieldRequired = pdFALSE; if the nesting depth is 0. */ volatile uint32_t ulPortInterruptNesting = 0UL; +/* Used in the asm file. */ +volatile uint32_t ulMaxAPIPriorityMask = (configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT); -#define PRIORITY_TRANSLATE_SET(x) ((((x)>> 1) | 0x80) & 0xff) +volatile uint32_t ulPortUnmask = portUNMASK_VALUE; -#define PRIORITY_TRANSLATE_GET(x) (((x)<< 1) & 0xff) +volatile uint8_t ucPriorityConfig = 0; -/* Used in the asm file. */ -__attribute__((used)) const uint32_t ulMaxAPIPriorityMask = PRIORITY_TRANSLATE_SET(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT); +static void vPortPriorityConfigCheck(void); /*-----------------------------------------------------------*/ @@ -335,6 +336,9 @@ BaseType_t xPortStartScheduler(void) { uint32_t ulAPSR; + /* check gic configuration */ + vPortPriorityConfigCheck(); + /* Only continue if the CPU is not in User mode. The CPU must be in a Privileged mode for the scheduler to start. */ __asm volatile("MRS %0, APSR" @@ -350,9 +354,9 @@ BaseType_t xPortStartScheduler(void) setting. See the comments in vPortValidateInterruptPriority() below for more information. */ - configASSERT((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE); + configASSERT((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE); - if ((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE) + if ((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE) { /* Interrupts are turned off in the CPU itself to ensure tick does not execute while the scheduler is being started. Interrupts are @@ -436,7 +440,7 @@ void FreeRTOS_Tick_Handler(void) necessary to turn off interrupts in the CPU itself while the ICCPMR is being updated. */ - vPortSetPriorityMask((uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)); + InterruptSetPriorityMask((uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)); __asm volatile("dsb \n" "isb \n" :: @@ -449,7 +453,7 @@ void FreeRTOS_Tick_Handler(void) } /* unmask all interrupt priorities. */ - vPortSetPriorityMask(portUNMASK_VALUE); + InterruptSetPriorityMask(portUNMASK_VALUE); /* interrupt clear. */ configCLEAR_TICK_INTERRUPT(); @@ -483,31 +487,6 @@ void vPortClearInterruptMask(uint32_t ulNewMaskValue) } /*-----------------------------------------------------------*/ -/*-----------------------------------------------------------*/ -/* -Set current interrupt priority mask and translate, ICC_PMR -• The value is right-shifted by one bit. -• Bit [7] of the value is set to 1. -*/ -static void vPortSetPriorityMask(uint32_t value) -{ - uint32_t priority = PRIORITY_TRANSLATE_SET(value); - sys_icc_pmr_set(priority); -} - -/* Get current interrupt priority mask and translate, ICC_PMR, priority << portPRIORITY_SHIFT */ -static uint32_t vPortGetPriorityMask(void) -{ - return PRIORITY_TRANSLATE_GET(sys_icc_pmr_get()); -} - -/* Get current interrupt priority and translate, ICC_RPR, priority << portPRIORITY_SHIFT */ -static uint32_t vPortGetCurrentPriority(void) -{ - return PRIORITY_TRANSLATE_GET(sys_icc_rpr_get()); -} - - uint32_t ulPortSetInterruptMask(void) { uint32_t ulReturn; @@ -515,7 +494,7 @@ uint32_t ulPortSetInterruptMask(void) /* Interrupt in the CPU must be turned off while the ICCPMR is being updated. */ portCPU_IRQ_DISABLE(); - if (vPortGetPriorityMask() == (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)) + if (InterruptGetPriorityMask() == (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)) { /* Interrupts were already masked. */ ulReturn = pdTRUE; @@ -523,7 +502,7 @@ uint32_t ulPortSetInterruptMask(void) else { ulReturn = pdFALSE; - vPortSetPriorityMask((uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)); + InterruptSetPriorityMask((uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)); __asm volatile("dsb \n" "isb \n" :: : "memory"); @@ -551,7 +530,7 @@ void vPortValidateInterruptPriority(void) FreeRTOS maintains separate thread and ISR API functions to ensure interrupt entry is as fast and simple as possible. */ - configASSERT(vPortGetCurrentPriority() >= (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)); + configASSERT(InterruptGetCurrentPriority() >= (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)); /* Priority grouping: The interrupt controller (GIC) allows the bits that define each interrupt's priority to be split between bits that @@ -563,7 +542,7 @@ void vPortValidateInterruptPriority(void) The priority grouping is configured by the GIC's binary point register (ICCBPR). Writting 0 to ICCBPR will ensure it is set to its lowest possible value (which may be above 0). */ - configASSERT((sys_icc_bpr_get() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE); + configASSERT((FGicGetICC_BPR1() & portBINARY_POINT_BITS) <= portMAX_BINARY_POINT_VALUE); } #endif /* configASSERT_DEFINED */ @@ -575,4 +554,16 @@ _WEAK void vApplicationTickHook(void) _WEAK void vApplicationIdleHook(void) { +} + + +static void vPortPriorityConfigCheck(void) +{ + ucPriorityConfig = InterruptGetPriorityConfig(); + + if(ucPriorityConfig) + { + ulMaxAPIPriorityMask = PRIORITY_TRANSLATE_SET(ulMaxAPIPriorityMask); + ulPortUnmask = PRIORITY_TRANSLATE_SET(ulPortUnmask); + } } \ No newline at end of file diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch32/portASM.S b/third-party/freertos/portable/GCC/ft_platform/aarch32/portASM.S index 64c0ce1c7a2ddfa810e81c254d41d4bd6372c93f..636d50a63ee5ac4281c12bf323741346f0c2c3b8 100644 --- a/third-party/freertos/portable/GCC/ft_platform/aarch32/portASM.S +++ b/third-party/freertos/portable/GCC/ft_platform/aarch32/portASM.S @@ -44,6 +44,7 @@ .extern vApplicationIRQHandler .extern ulPortInterruptNesting .extern ulPortTaskHasFPUContext + .extern ulPortUnmask .global FreeRTOS_IRQ_Handler .global FreeRTOS_SWI_Handler @@ -118,9 +119,9 @@ /* Ensure the priority mask is correct for the critical nesting depth. */ - CMP R1, #0 - MOVEQ R4, #255 + LDREQ R4, ulPortUnmaskConst + LDREQ R4, [R4] LDRNE R4, ulMaxAPIPriorityMaskConst LDRNE R4, [R4] MCR P15, 0, R4, C4, C6, 0 @@ -322,6 +323,7 @@ vTaskSwitchContextConst: .word vTaskSwitchContext vApplicationIRQHandlerConst: .word vApplicationIRQHandler ulPortInterruptNestingConst: .word ulPortInterruptNesting vApplicationFPUSafeIRQHandlerConst: .word vApplicationInterruptHandler +ulPortUnmaskConst: .word ulPortUnmask .end diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch64/boot.S b/third-party/freertos/portable/GCC/ft_platform/aarch64/boot.S deleted file mode 100644 index 1c9f992c8f2e7615b218893a089a72eac7aa34e1..0000000000000000000000000000000000000000 --- a/third-party/freertos/portable/GCC/ft_platform/aarch64/boot.S +++ /dev/null @@ -1,129 +0,0 @@ -.global _boot - -.global _vector_table - - -.set vector_base, _vector_table -.set el1_stack, __el1_stack - - - -.section .boot,"ax" - -_boot: - bl FTraceUartInit - bl FTraceBootup - mrs x0, CurrentEL - cmp x0, 0xc - b.eq El3Entry - cmp x0, 0x8 - b.eq El2Entry - cmp x0, 0x4 - b.eq El1Entry - bne hang - El3Entry: - /* initialize sctlr_el2 and hcr_el2 to save values before entering el2.*/ - msr sctlr_el2, xzr - msr hcr_el2, xzr - /* determine the el2 execution state.*/ - mrs x0, scr_el3 - orr x0, x0, #(1<<10) - /* rw el2 execution state is aarch64.*/ - orr x0, x0, #(1<<0) - /* ns el1 is non-secure world.*/ - msr scr_el3, x0 - mov x0, #0b01001 - /* daif=0000 */ - msr spsr_el3, x0 - /* m[4:0]=01001 el2h must match scr_el3.rw*/ - - bl FTraceEL3 - /* determine el2 entry.*/ - adr x0, El2Entry - /* El2Entry points to the first instruction of */ - msr elr_el3, x0 - /* el2 code.*/ - eret - El2Entry: - mov x1, #0x0 - msr sctlr_el1, x1 - /* initialize the sctlr_el1 register before entering el1.*/ - msr sctlr_el1, xzr - mrs x0, hcr_el2 - orr x0, x0, #(1<<31) - bic x0, x0, #(1<<27) /* HCR_EL2.TGE = 0 */ - /* rw=1 el1 execution state is aarch64.*/ - msr hcr_el2, x0 - mov x0, #0b00101 - /* daif=0000 */ - msr spsr_el2, x0 - /* m[4:0]=00101 el1h must match hcr_el2.rw.*/ - - bl FTraceEL2 - adr x0, El1Entry - /* El1Entry points to the first instruction of */ - msr elr_el2, x0 - /* el1 code.*/ - eret - -El1Entry: -InitEl1: - mov x0, #0 - mov x1, #0 - mov x2, #0 - mov x3, #0 - mov x4, #0 - mov x5, #0 - mov x6, #0 - mov x7, #0 - mov x8, #0 - mov x9, #0 - mov x10, #0 - mov x11, #0 - mov x12, #0 - mov x13, #0 - mov x14, #0 - mov x15, #0 - mov x16, #0 - mov x17, #0 - mov x18, #0 - mov x19, #0 - mov x20, #0 - mov x21, #0 - mov x22, #0 - mov x23, #0 - mov x24, #0 - mov x25, #0 - mov x26, #0 - mov x27, #0 - mov x28, #0 - mov x29, #0 - mov x30, #0 - mov x1,#0x0 - msr SCTLR_EL1, x1 - isb - - /* Set vector table base address */ - ldr x1,=vector_base - msr VBAR_EL1,x1 - - - /* Trap floating point access only in case of standalone BSP */ - mrs x0, CPACR_EL1 - orr x0, x0, #(0x3 << 20) /*This control does not cause any instructions to be trapped. */ - msr CPACR_EL1, x0 - isb - - - /* Define stack pointer for current exception level */ - ldr x2,=el1_stack - mov sp,x2 - - bl FTraceEL1 - bl _startup /* jump to start */ - - -hang: - wfi - b HangPrint - b hang diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch64/port.c b/third-party/freertos/portable/GCC/ft_platform/aarch64/port.c index c541989b72131b686b2396740880a91fedd5c749..8a5302ec02d20e95cce75f5bd73e38e97e4527f7 100644 --- a/third-party/freertos/portable/GCC/ft_platform/aarch64/port.c +++ b/third-party/freertos/portable/GCC/ft_platform/aarch64/port.c @@ -35,6 +35,7 @@ #include "ftypes.h" #include "finterrupt.h" #include "fgic_cpu_interface.h" + #ifndef configUNIQUE_INTERRUPT_PRIORITIES #error configUNIQUE_INTERRUPT_PRIORITIES must be defined. See http://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html #endif @@ -111,13 +112,12 @@ point is zero. */ /* The I bit in the DAIF bits. */ #define portDAIF_I (0x80) -static void vPortSetPriorityMask(uint32_t value); /* Macro to unmask all interrupt priorities. */ #define portCLEAR_INTERRUPT_MASK() \ { \ portDISABLE_INTERRUPTS(); \ - vPortSetPriorityMask(portUNMASK_VALUE); \ + InterruptSetPriorityMask(portUNMASK_VALUE); \ __asm volatile("DSB SY \n" \ "ISB SY \n"); \ portENABLE_INTERRUPTS(); \ @@ -160,13 +160,14 @@ uint64_t ullPortInterruptNesting = pdFALSE; * registers, that means (64 * 8) 64 double words */ #define portFPU_REGISTER_DOUBLE_WORDS ( 64 ) -#define PRIORITY_TRANSLATE_SET(x) ((((x)>> 1) | 0x80) & 0xff) +/* Used in the ASM code. */ +volatile uint64_t ullMaxAPIPriorityMask = (configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT); -#define PRIORITY_TRANSLATE_GET(x) (((x)<< 1) & 0xff) +volatile uint64_t ullPortUnmask = portUNMASK_VALUE; -/* Used in the ASM code. */ -__attribute__((used)) const uint64_t ullMaxAPIPriorityMask = PRIORITY_TRANSLATE_SET(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT); +volatile uint8_t ucPriorityConfig = 0; +static void vPortPriorityConfigCheck(void); /*-----------------------------------------------------------*/ /* @@ -290,42 +291,8 @@ BaseType_t xPortStartScheduler(void) { uint32_t ulAPSR; -#if (configASSERT_DEFINED == 1) - { - volatile uint32_t ulOriginalPriority; - volatile uint8_t *const pucFirstUserPriorityRegister = (volatile uint8_t *const)(configINTERRUPT_CONTROLLER_BASE_ADDRESS + portINTERRUPT_PRIORITY_REGISTER_OFFSET); - volatile uint8_t ucMaxPriorityValue; - if (pucFirstUserPriorityRegister != 0) - { - /* Determine how many priority bits are implemented in the GIC. - Save the interrupt priority value that is about to be clobbered. */ - ulOriginalPriority = *pucFirstUserPriorityRegister; - /* Determine the number of priority bits available. First write to - all possible bits. */ - *pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; - - /* Read the value back to see how many bits stuck. */ - ucMaxPriorityValue = *pucFirstUserPriorityRegister; - - if (ucMaxPriorityValue != 0) - { - /* Shift to the least significant bits. */ - while ((ucMaxPriorityValue & portBIT_0_SET) != portBIT_0_SET) - { - ucMaxPriorityValue >>= (uint8_t)0x01; - } - /* Sanity check configUNIQUE_INTERRUPT_PRIORITIES matches the read - value. */ - configASSERT(ucMaxPriorityValue >= portLOWEST_INTERRUPT_PRIORITY); - } - - /* Restore the clobbered interrupt priority register to its original - value. */ - *pucFirstUserPriorityRegister = ulOriginalPriority; - } - - } -#endif /* conifgASSERT_DEFINED */ + /* check gic configuration */ + vPortPriorityConfigCheck(); /* At the time of writing, the BSP only supports EL1. */ __asm volatile("MRS %0, CurrentEL" @@ -433,7 +400,7 @@ void FreeRTOS_Tick_Handler(void) necessary to turn off interrupts in the CPU itself while the ICCPMR is being updated. */ - vPortSetPriorityMask(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT); + InterruptSetPriorityMask(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT); __asm volatile("dsb sy \n" "isb sy \n" :: : "memory"); @@ -445,7 +412,7 @@ void FreeRTOS_Tick_Handler(void) } /* unmask all interrupt priorities. */ - vPortSetPriorityMask(portUNMASK_VALUE); + InterruptSetPriorityMask(portUNMASK_VALUE); /* interrupt clear. */ configCLEAR_TICK_INTERRUPT(); @@ -470,29 +437,6 @@ void vPortClearInterruptMask(UBaseType_t uxNewMaskValue) portCLEAR_INTERRUPT_MASK(); } } -/*-----------------------------------------------------------*/ -/* -Set current interrupt priority mask and translate, ICC_PMR -• The value is right-shifted by one bit. -• Bit [7] of the value is set to 1. -*/ -static void vPortSetPriorityMask(uint32_t value) -{ - uint32_t priority = PRIORITY_TRANSLATE_SET(value); - InterruptSetPriorityMask(priority); -} - -/* Get current interrupt priority mask and translate, ICC_PMR, priority << portPRIORITY_SHIFT */ -static uint32_t vPortGetPriorityMask(void) -{ - return PRIORITY_TRANSLATE_GET(InterruptGetPriorityMask()); -} - -/* Get current interrupt priority and translate, ICC_RPR, priority << portPRIORITY_SHIFT */ -static uint32_t vPortGetCurrentPriority(void) -{ - return PRIORITY_TRANSLATE_GET(FGicGetICC_RPR()); -} UBaseType_t uxPortSetInterruptMask(void) @@ -502,7 +446,7 @@ UBaseType_t uxPortSetInterruptMask(void) /* Interrupt in the CPU must be turned off while the ICCPMR is being updated. */ portDISABLE_INTERRUPTS(); - if (vPortGetPriorityMask() == (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)) + if (InterruptGetPriorityMask() == (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)) { /* Interrupts were already masked. */ ulReturn = pdTRUE; @@ -510,12 +454,13 @@ UBaseType_t uxPortSetInterruptMask(void) else { ulReturn = pdFALSE; - vPortSetPriorityMask(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT); + InterruptSetPriorityMask(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT); __asm volatile("dsb sy \n" "isb sy \n" :: : "memory"); } portENABLE_INTERRUPTS(); + return ulReturn; } /*-----------------------------------------------------------*/ @@ -538,7 +483,7 @@ void vPortValidateInterruptPriority(void) FreeRTOS maintains separate thread and ISR API functions to ensure interrupt entry is as fast and simple as possible. */ - configASSERT(vPortGetCurrentPriority() >= (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)); + configASSERT(InterruptGetCurrentPriority() >= (uint32_t)(configMAX_API_CALL_INTERRUPT_PRIORITY << portPRIORITY_SHIFT)); /* Priority grouping: The interrupt controller (GIC) allows the bits that define each interrupt's priority to be split between bits that @@ -570,3 +515,13 @@ void vTaskSwitchSPx(void) configASSERT(0); } +static void vPortPriorityConfigCheck(void) +{ + ucPriorityConfig = InterruptGetPriorityConfig(); + + if(ucPriorityConfig) + { + ullMaxAPIPriorityMask = PRIORITY_TRANSLATE_SET(ullMaxAPIPriorityMask); + ullPortUnmask = PRIORITY_TRANSLATE_SET(ullPortUnmask); + } +} diff --git a/third-party/freertos/portable/GCC/ft_platform/aarch64/portASM.S b/third-party/freertos/portable/GCC/ft_platform/aarch64/portASM.S index da1b232e266b89b80ec87b9b406eec4a8e1f0a61..9473ca1d198cabad4d0071a83b2d03430739be06 100644 --- a/third-party/freertos/portable/GCC/ft_platform/aarch64/portASM.S +++ b/third-party/freertos/portable/GCC/ft_platform/aarch64/portASM.S @@ -42,6 +42,7 @@ .extern ullPortYieldRequired .extern ullICCEOIR .extern ullICCIAR + .extern ullPortUnmask .global FreeRTOS_IRQ_Handler .global vSynchronousInterruptHandler @@ -175,7 +176,8 @@ /* Set the PMR register to be correct for the current critical nesting depth. */ LDR X0, ullCriticalNestingConst /* X0 holds the address of ullCriticalNesting. */ - MOV X1, #255 /* X1 holds the unmask value. */ + LDR X1, ullPortUnmaskConst /* X1 holds the unmask value. */ + LDR X1, [X1] CMP X3, #0 B.EQ 1f LDR X6, ullMaxAPIPriorityMaskConst @@ -533,9 +535,7 @@ ullMaxAPIPriorityMaskConst: .dword ullMaxAPIPriorityMask vApplicationIRQHandlerConst: .dword vApplicationInterruptHandler ullPortInterruptNestingConst: .dword ullPortInterruptNesting ullPortYieldRequiredConst: .dword ullPortYieldRequired - - - +ullPortUnmaskConst: .dword ullPortUnmask .end diff --git a/third-party/freertos/portable/freertos_configs.c b/third-party/freertos/portable/freertos_configs.c index 64587790c6f3099f7b1fab31f0188e29a9c24de1..db593901a9ae9aa1d801a96515a3ef6e278af704 100644 --- a/third-party/freertos/portable/freertos_configs.c +++ b/third-party/freertos/portable/freertos_configs.c @@ -25,15 +25,14 @@ * 2.0 wangxiaodong 2022/8/9 adapt E2000D * 2.1 liuzhihong 2023/1/12 improve lwip functions */ - +#include +#include #include "FreeRTOS.h" #include "task.h" #include "ftypes.h" #include "fparameters.h" #include "fgeneric_timer.h" #include "finterrupt.h" -#include -#include #include "fcpu_info.h" #include "fassert.h" #include "fexception.h" @@ -59,7 +58,7 @@ void vApplicationMallocFailedHook(void) void vApplicationTickHook(void) { - + } /* @@ -79,24 +78,24 @@ static u32 cntfrq; /* System frequency */ void vConfigureTickInterrupt(void) { /* Disable the timer */ - GenericTimerStop(); + GenericTimerStop(GENERIC_TIMER_ID0); /* Get system frequency */ cntfrq = GenericTimerFrequecy(); /* Set tick rate */ - GenericTimerCompare(cntfrq / configTICK_RATE_HZ); - GenericTimerInterruptEnable(); + GenericTimerSetTimerValue(GENERIC_TIMER_ID0, cntfrq / configTICK_RATE_HZ); + GenericTimerInterruptEnable(GENERIC_TIMER_ID0); /* Set as the lowest priority */ InterruptSetPriority(GENERIC_TIMER_NS_IRQ_NUM, configKERNEL_INTERRUPT_PRIORITY); InterruptUmask(GENERIC_TIMER_NS_IRQ_NUM); - GenericTimerStart(); + GenericTimerStart(GENERIC_TIMER_ID0); } void vClearTickInterrupt(void) { - GenericTimerCompare(cntfrq / configTICK_RATE_HZ); + GenericTimerSetTimerValue(GENERIC_TIMER_ID0, cntfrq / configTICK_RATE_HZ); } volatile unsigned int gCpuRuntime; diff --git a/third-party/letter-shell-3.1/port/cmd/cmd_reboot.c b/third-party/letter-shell-3.1/port/cmd/cmd_reboot.c index 2b63c167b52125f7bb6ca851ac4ecf87674b46f3..46acdae58cf70bc7311d30c41739f1cdb6b855e3 100644 --- a/third-party/letter-shell-3.1/port/cmd/cmd_reboot.c +++ b/third-party/letter-shell-3.1/port/cmd/cmd_reboot.c @@ -28,7 +28,7 @@ int RebootCmdEntry() { - PsciCpuReset(); + FPsciSystemReset(FPSCI_SYSTEM_RESET_TYPE_COLD); return 0; } SHELL_EXPORT_CMD(SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), reboot, diff --git a/third-party/letter-shell-3.1/src/shell_cfg.h b/third-party/letter-shell-3.1/src/shell_cfg.h index bc9835259f88a2eb6d98a34c14d2a74a21ed6955..54ebb59160e3159b482dcf2a99e74e8b7b1f0311 100644 --- a/third-party/letter-shell-3.1/src/shell_cfg.h +++ b/third-party/letter-shell-3.1/src/shell_cfg.h @@ -84,9 +84,9 @@ /** * @brief shell命令参数最大数量 - * 包含命令名在内,超过8个参数并且使用了参数自动转换的情况下,需要修改源码 + * 包含命令名在内,超过10个参数并且使用了参数自动转换的情况下,需要修改源码 */ -#define SHELL_PARAMETER_MAX_NUMBER 8 +#define SHELL_PARAMETER_MAX_NUMBER 10 /** * @brief 历史命令记录数量 diff --git a/third-party/libmetal/metal/system/freertos/ft_platform/sys.c b/third-party/libmetal/metal/system/freertos/ft_platform/sys.c index 48191c95d6554bacd34a23707a23e4be13c6c364..551b93620d39e369288abc3f7c9f64f856d1a780 100644 --- a/third-party/libmetal/metal/system/freertos/ft_platform/sys.c +++ b/third-party/libmetal/metal/system/freertos/ft_platform/sys.c @@ -27,7 +27,7 @@ #include #include #ifndef __aarch64__ -#include "fcp15.h" +#include "faarch32.h" #endif #include "fmmu.h" #include "fcache.h" diff --git a/third-party/lvgl-8.3/Kconfig b/third-party/lvgl-8.3/Kconfig new file mode 100644 index 0000000000000000000000000000000000000000..25187d0632927e0039daa43d6d236abc12ad9747 --- /dev/null +++ b/third-party/lvgl-8.3/Kconfig @@ -0,0 +1,1092 @@ +# Kconfig file for LVGL v8.0 + +menu "LVGL configuration" + + # Define CONFIG_LV_CONF_SKIP so we can use LVGL + # without lv_conf.h file, the lv_conf_internal.h and + # lv_conf_kconfig.h files are used instead. + config LV_CONF_SKIP + bool "Uncheck this to use custom lv_conf.h" + default y + + config LV_CONF_MINIMAL + bool "LVGL minimal configuration." + + menu "Color settings" + choice LV_COLOR_DEPTH + prompt "Color depth." + default LV_COLOR_DEPTH_16 + help + Color depth to be used. + + config LV_COLOR_DEPTH_32 + bool "32: ARGB8888" + config LV_COLOR_DEPTH_16 + bool "16: RGB565" + config LV_COLOR_DEPTH_8 + bool "8: RGB232" + config LV_COLOR_DEPTH_1 + bool "1: 1 byte per pixel" + endchoice + + config LV_COLOR_DEPTH + int + default 1 if LV_COLOR_DEPTH_1 + default 8 if LV_COLOR_DEPTH_8 + default 16 if LV_COLOR_DEPTH_16 + default 32 if LV_COLOR_DEPTH_32 + + config LV_COLOR_MIX_ROUND_OFS + int "Adjust color mix functions rounding" + default 128 if !LV_COLOR_DEPTH_32 + default 0 if LV_COLOR_DEPTH_32 + range 0 254 + help + 0: no adjustment, get the integer part of the result (round down) + 64: round up from x.75 + 128: round up from half + 192: round up from x.25 + 254: round up + + config LV_COLOR_CHROMA_KEY_HEX + hex "Images pixels with this color will not be drawn (if they are chroma keyed)." + range 0x000000 0xFFFFFF + default 0x00FF00 + help + See misc/lv_color.h for some color values examples. + endmenu + + menu "Memory settings" + config LV_MEM_CUSTOM + bool "If true use custom malloc/free, otherwise use the built-in `lv_mem_alloc()` and `lv_mem_free()`" + + config LV_MEM_SIZE_KILOBYTES + int "Size of the memory used by `lv_mem_alloc` in kilobytes (>= 2kB)" + range 2 128 + default 32 + depends on !LV_MEM_CUSTOM + + config LV_MEM_ADDR + hex "Address for the memory pool instead of allocating it as a normal array" + default 0x0 + depends on !LV_MEM_CUSTOM + + config LV_MEM_CUSTOM_INCLUDE + string "Header to include for the custom memory function" + default "stdlib.h" + depends on LV_MEM_CUSTOM + + config LV_MEM_BUF_MAX_NUM + int "Number of the memory buffer" + default 16 + help + Number of the intermediate memory buffer used during rendering and other + internal processing mechanisms. You will see an error log message if + there wasn't enough buffers. + + config LV_MEMCPY_MEMSET_STD + bool "Use the standard memcpy and memset instead of LVGL's own functions" + endmenu + + menu "HAL Settings" + config LV_TICK_CUSTOM + bool "Use a custom tick source" + + config LV_TICK_CUSTOM_INCLUDE + string "Header for the system time function" + default "Arduino.h" + depends on LV_TICK_CUSTOM + + config LV_DPI_DEF + int "Default Dots Per Inch (in px)." + default 130 + help + Used to initialize default sizes such as widgets sized, style paddings. + (Not so important, you can adjust it to modify default sizes and spaces) + endmenu + + menu "Feature configuration" + + menu "Drawing" + config LV_DRAW_COMPLEX + bool "Enable complex draw engine" + default y + help + Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, + image transformations or any masks. + + config LV_SHADOW_CACHE_SIZE + int "Allow buffering some shadow calculation" + depends on LV_DRAW_COMPLEX + default 0 + help + LV_SHADOW_CACHE_SIZE is the max shadow size to buffer, where + shadow size is `shadow_width + radius`. + Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost. + + config LV_CIRCLE_CACHE_SIZE + int "Set number of maximally cached circle data" + depends on LV_DRAW_COMPLEX + default 4 + help + The circumference of 1/4 circle are saved for anti-aliasing + radius * 4 bytes are used per circle (the most often used + radiuses are saved). + Set to 0 to disable caching. + + config LV_LAYER_SIMPLE_BUF_SIZE + int "Optimal size to buffer the widget with opacity" + default 24576 + help + "Simple layers" are used when a widget has `style_opa < 255` + to buffer the widget into a layer and blend it as an image + with the given opacity. Note that `bg_opa`, `text_opa` etc + don't require buffering into layer. + + config LV_IMG_CACHE_DEF_SIZE + int "Default image cache size. 0 to disable caching." + default 0 + help + If only the built-in image formats are used there is no real advantage of caching. + (I.e. no new image decoder is added). + + With complex image decoders (e.g. PNG or JPG) caching can + save the continuous open/decode of images. + However the opened images might consume additional RAM. + + config LV_GRADIENT_MAX_STOPS + int "Number of stops allowed per gradient." + default 2 + help + Increase this to allow more stops. + This adds (sizeof(lv_color_t) + 1) bytes per additional stop + + config LV_GRAD_CACHE_DEF_SIZE + int "Default gradient buffer size." + default 0 + help + When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. + LV_GRAD_CACHE_DEF_SIZE sets the size of this cache in bytes. + If the cache is too small the map will be allocated only while it's required for the drawing. + 0 mean no caching. + + config LV_DITHER_GRADIENT + bool "Allow dithering the gradients" + help + Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) + LV_DITHER_GRADIENT implies allocating one or two more lines of the object's rendering surface + The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion + + config LV_DITHER_ERROR_DIFFUSION + bool "Add support for error diffusion dithering" + depends on LV_DITHER_GRADIENT + help + Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. + The increase in memory consumption is (24 bits * object's width) + + config LV_DISP_ROT_MAX_BUF + int "Maximum buffer size to allocate for rotation" + default 10240 + help + Only used if software rotation is enabled in the display driver. + endmenu + + menu "GPU" + config LV_USE_GPU_ARM2D + bool "Enable Arm's 2D image processing library (Arm-2D) for all Cortex-M processors." + default n + help + Must deploy arm-2d library to your project and add include PATH for "arm_2d.h". + + config LV_USE_GPU_STM32_DMA2D + bool "Enable STM32 DMA2D (aka Chrom Art) GPU." + config LV_GPU_DMA2D_CMSIS_INCLUDE + string "include path of CMSIS header of target processor" + depends on LV_USE_GPU_STM32_DMA2D + default "" + help + Must be defined to include path of CMSIS header of target processor + e.g. "stm32f769xx.h" or "stm32f429xx.h" + + config LV_USE_GPU_SWM341_DMA2D + bool "Enable SWM341 DMA2D GPU." + config LV_GPU_SWM341_DMA2D_INCLUDE + string "include path of CMSIS header of target processor" + depends on LV_USE_GPU_SWM341_DMA2D + default "SWM341.h" + help + Must be defined to include path of CMSIS header of target processor + e.g. "SWM341.h" + + config LV_USE_GPU_NXP_PXP + bool "Use NXP's PXP GPU iMX RTxxx platforms." + config LV_USE_GPU_NXP_PXP_AUTO_INIT + bool "Call lv_gpu_nxp_pxp_init() automatically or manually." + depends on LV_USE_GPU_NXP_PXP + help + 1: Add default bare metal and FreeRTOS interrupt handling + routines for PXP (lv_gpu_nxp_pxp_osa.c) and call + lv_gpu_nxp_pxp_init() automatically during lv_init(). + Note that symbol SDK_OS_FREE_RTOS has to be defined in order + to use FreeRTOS OSA, otherwise bare-metal implementation is + selected. + 0: lv_gpu_nxp_pxp_init() has to be called manually before + lv_init(). + + config LV_USE_GPU_NXP_VG_LITE + bool "Use NXP's VG-Lite GPU iMX RTxxx platforms." + + config LV_USE_GPU_SDL + bool "Use SDL renderer API" + default n + config LV_GPU_SDL_INCLUDE_PATH + string "include path of SDL header" + depends on LV_USE_GPU_SDL + default "SDL2/SDL.h" + config LV_GPU_SDL_LRU_SIZE + int "Maximum buffer size to allocate for rotation" + depends on LV_USE_GPU_SDL + default 8388608 + help + Texture cache size, 8MB by default. + endmenu + + menu "Logging" + config LV_USE_LOG + bool "Enable the log module" + + choice + bool "Default log verbosity" if LV_USE_LOG + default LV_LOG_LEVEL_WARN + help + Specify how important log should be added. + + config LV_LOG_LEVEL_TRACE + bool "A lot of logs to give detailed information" + config LV_LOG_LEVEL_INFO + bool "Log important events" + config LV_LOG_LEVEL_WARN + bool "Log if something unwanted happened but didn't cause a problem" + config LV_LOG_LEVEL_ERROR + bool "Only critical issues, when the system may fail" + config LV_LOG_LEVEL_USER + bool "Only logs added by the user" + config LV_LOG_LEVEL_NONE + bool "Do not log anything" + endchoice + + config LV_LOG_LEVEL + int + default 0 if LV_LOG_LEVEL_TRACE + default 1 if LV_LOG_LEVEL_INFO + default 2 if LV_LOG_LEVEL_WARN + default 3 if LV_LOG_LEVEL_ERROR + default 4 if LV_LOG_LEVEL_USER + default 5 if LV_LOG_LEVEL_NONE + + config LV_LOG_PRINTF + bool "Print the log with 'printf'" if LV_USE_LOG + help + Use printf for log output. + If not set the user needs to register a callback with `lv_log_register_print_cb`. + + config LV_LOG_TRACE_MEM + bool "Enable/Disable LV_LOG_TRACE in mem module" + default y + depends on LV_USE_LOG + + config LV_LOG_TRACE_TIMER + bool "Enable/Disable LV_LOG_TRACE in timer module" + default y + depends on LV_USE_LOG + + config LV_LOG_TRACE_INDEV + bool "Enable/Disable LV_LOG_TRACE in indev module" + default y + depends on LV_USE_LOG + + config LV_LOG_TRACE_DISP_REFR + bool "Enable/Disable LV_LOG_TRACE in disp refr module" + default y + depends on LV_USE_LOG + + config LV_LOG_TRACE_EVENT + bool "Enable/Disable LV_LOG_TRACE in event module" + default y + depends on LV_USE_LOG + + config LV_LOG_TRACE_OBJ_CREATE + bool "Enable/Disable LV_LOG_TRACE in obj create module" + default y + depends on LV_USE_LOG + + config LV_LOG_TRACE_LAYOUT + bool "Enable/Disable LV_LOG_TRACE in layout module" + default y + depends on LV_USE_LOG + + config LV_LOG_TRACE_ANIM + bool "Enable/Disable LV_LOG_TRACE in anim module" + default y + depends on LV_USE_LOG + endmenu + + menu "Asserts" + config LV_USE_ASSERT_NULL + bool "Check if the parameter is NULL. (Very fast, recommended)" + default y if !LV_CONF_MINIMAL + + config LV_USE_ASSERT_MALLOC + bool "Checks if the memory is successfully allocated or no. (Very fast, recommended)" + default y if !LV_CONF_MINIMAL + + config LV_USE_ASSERT_STYLE + bool "Check if the styles are properly initialized. (Very fast, recommended)" + + config LV_USE_ASSERT_MEM_INTEGRITY + bool "Check the integrity of `lv_mem` after critical operations. (Slow)" + + config LV_USE_ASSERT_OBJ + bool "Check NULL, the object's type and existence (e.g. not deleted). (Slow)." + + config LV_ASSERT_HANDLER_INCLUDE + string "Header to include for the custom assert function" + default "assert.h" + endmenu + + menu "Others" + config LV_USE_PERF_MONITOR + bool "Show CPU usage and FPS count." + + choice + prompt "Performance monitor position." + depends on LV_USE_PERF_MONITOR + default LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT + + config LV_PERF_MONITOR_ALIGN_TOP_LEFT + bool "Top left" + config LV_PERF_MONITOR_ALIGN_TOP_MID + bool "Top middle" + config LV_PERF_MONITOR_ALIGN_TOP_RIGHT + bool "Top right" + config LV_PERF_MONITOR_ALIGN_BOTTOM_LEFT + bool "Bottom left" + config LV_PERF_MONITOR_ALIGN_BOTTOM_MID + bool "Bottom middle" + config LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT + bool "Bottom right" + config LV_PERF_MONITOR_ALIGN_LEFT_MID + bool "Left middle" + config LV_PERF_MONITOR_ALIGN_RIGHT_MID + bool "Right middle" + config LV_PERF_MONITOR_ALIGN_CENTER + bool "Center" + endchoice + + config LV_USE_MEM_MONITOR + bool "Show the used memory and the memory fragmentation." + depends on !LV_MEM_CUSTOM + + choice + prompt "Memory monitor position." + depends on LV_USE_MEM_MONITOR + default LV_MEM_MONITOR_ALIGN_BOTTOM_LEFT + + config LV_MEM_MONITOR_ALIGN_TOP_LEFT + bool "Top left" + config LV_MEM_MONITOR_ALIGN_TOP_MID + bool "Top middle" + config LV_MEM_MONITOR_ALIGN_TOP_RIGHT + bool "Top right" + config LV_MEM_MONITOR_ALIGN_BOTTOM_LEFT + bool "Bottom left" + config LV_MEM_MONITOR_ALIGN_BOTTOM_MID + bool "Bottom middle" + config LV_MEM_MONITOR_ALIGN_BOTTOM_RIGHT + bool "Bottom right" + config LV_MEM_MONITOR_ALIGN_LEFT_MID + bool "Left middle" + config LV_MEM_MONITOR_ALIGN_RIGHT_MID + bool "Right middle" + config LV_MEM_MONITOR_ALIGN_CENTER + bool "Center" + endchoice + + config LV_USE_REFR_DEBUG + bool "Draw random colored rectangles over the redrawn areas." + + config LV_SPRINTF_CUSTOM + bool "Change the built-in (v)snprintf functions" + + config LV_SPRINTF_INCLUDE + string "Header to include for the custom sprintf function" + depends on LV_SPRINTF_CUSTOM + default "stdio.h" + + config LV_SPRINTF_USE_FLOAT + bool "Enable float in built-in (v)snprintf functions" + depends on !LV_SPRINTF_CUSTOM + + config LV_USE_USER_DATA + bool "Add a 'user_data' to drivers and objects." + default y + + config LV_ENABLE_GC + bool "Enable garbage collector" + + config LV_GC_INCLUDE + string "Header to include for the garbage collector related things" + depends on LV_ENABLE_GC + default "gc.h" + endmenu + + menu "Compiler settings" + config LV_BIG_ENDIAN_SYSTEM + bool "For big endian systems set to 1" + + config LV_ATTRIBUTE_MEM_ALIGN_SIZE + int "Required alignment size for buffers" + default 1 + + config LV_ATTRIBUTE_FAST_MEM_USE_IRAM + bool "Set IRAM as LV_ATTRIBUTE_FAST_MEM" + help + Set this option to configure IRAM as LV_ATTRIBUTE_FAST_MEM + + config LV_USE_LARGE_COORD + bool "Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t" + endmenu + endmenu + + menu "Font usage" + menu "Enable built-in fonts" + config LV_FONT_MONTSERRAT_8 + bool "Enable Montserrat 8" + config LV_FONT_MONTSERRAT_10 + bool "Enable Montserrat 10" + config LV_FONT_MONTSERRAT_12 + bool "Enable Montserrat 12" + config LV_FONT_MONTSERRAT_14 + bool "Enable Montserrat 14" + default y if !LV_CONF_MINIMAL + config LV_FONT_MONTSERRAT_16 + bool "Enable Montserrat 16" + config LV_FONT_MONTSERRAT_18 + bool "Enable Montserrat 18" + config LV_FONT_MONTSERRAT_20 + bool "Enable Montserrat 20" + config LV_FONT_MONTSERRAT_22 + bool "Enable Montserrat 22" + config LV_FONT_MONTSERRAT_24 + bool "Enable Montserrat 24" + config LV_FONT_MONTSERRAT_26 + bool "Enable Montserrat 26" + config LV_FONT_MONTSERRAT_28 + bool "Enable Montserrat 28" + config LV_FONT_MONTSERRAT_30 + bool "Enable Montserrat 30" + config LV_FONT_MONTSERRAT_32 + bool "Enable Montserrat 32" + config LV_FONT_MONTSERRAT_34 + bool "Enable Montserrat 34" + config LV_FONT_MONTSERRAT_36 + bool "Enable Montserrat 36" + config LV_FONT_MONTSERRAT_38 + bool "Enable Montserrat 38" + config LV_FONT_MONTSERRAT_40 + bool "Enable Montserrat 40" + config LV_FONT_MONTSERRAT_42 + bool "Enable Montserrat 42" + config LV_FONT_MONTSERRAT_44 + bool "Enable Montserrat 44" + config LV_FONT_MONTSERRAT_46 + bool "Enable Montserrat 46" + config LV_FONT_MONTSERRAT_48 + bool "Enable Montserrat 48" + + config LV_FONT_MONTSERRAT_12_SUBPX + bool "Enable Montserrat 12 sub-pixel" + config LV_FONT_MONTSERRAT_28_COMPRESSED + bool "Enable Montserrat 28 compressed" + config LV_FONT_DEJAVU_16_PERSIAN_HEBREW + bool "Enable Dejavu 16 Persian, Hebrew, Arabic letters" + config LV_FONT_SIMSUN_16_CJK + bool "Enable Simsun 16 CJK" + + config LV_FONT_UNSCII_8 + bool "Enable UNSCII 8 (Perfect monospace font)" + default y if LV_CONF_MINIMAL + config LV_FONT_UNSCII_16 + bool "Enable UNSCII 16 (Perfect monospace font)" + endmenu + + choice LV_FONT_DEFAULT + prompt "Select theme default title font" + default LV_FONT_DEFAULT_MONTSERRAT_14 if !LV_CONF_MINIMAL + default LV_FONT_DEFAULT_UNSCII_8 if LV_CONF_MINIMAL + help + Select theme default title font + + config LV_FONT_DEFAULT_MONTSERRAT_8 + bool "Montserrat 8" + select LV_FONT_MONTSERRAT_8 + config LV_FONT_DEFAULT_MONTSERRAT_12 + bool "Montserrat 12" + select LV_FONT_MONTSERRAT_12 + config LV_FONT_DEFAULT_MONTSERRAT_14 + bool "Montserrat 14" + select LV_FONT_MONTSERRAT_14 + config LV_FONT_DEFAULT_MONTSERRAT_16 + bool "Montserrat 16" + select LV_FONT_MONTSERRAT_16 + config LV_FONT_DEFAULT_MONTSERRAT_18 + bool "Montserrat 18" + select LV_FONT_MONTSERRAT_18 + config LV_FONT_DEFAULT_MONTSERRAT_20 + bool "Montserrat 20" + select LV_FONT_MONTSERRAT_20 + config LV_FONT_DEFAULT_MONTSERRAT_22 + bool "Montserrat 22" + select LV_FONT_MONTSERRAT_22 + config LV_FONT_DEFAULT_MONTSERRAT_24 + bool "Montserrat 24" + select LV_FONT_MONTSERRAT_24 + config LV_FONT_DEFAULT_MONTSERRAT_26 + bool "Montserrat 26" + select LV_FONT_MONTSERRAT_26 + config LV_FONT_DEFAULT_MONTSERRAT_28 + bool "Montserrat 28" + select LV_FONT_MONTSERRAT_28 + config LV_FONT_DEFAULT_MONTSERRAT_30 + bool "Montserrat 30" + select LV_FONT_MONTSERRAT_30 + config LV_FONT_DEFAULT_MONTSERRAT_32 + bool "Montserrat 32" + select LV_FONT_MONTSERRAT_32 + config LV_FONT_DEFAULT_MONTSERRAT_34 + bool "Montserrat 34" + select LV_FONT_MONTSERRAT_34 + config LV_FONT_DEFAULT_MONTSERRAT_36 + bool "Montserrat 36" + select LV_FONT_MONTSERRAT_36 + config LV_FONT_DEFAULT_MONTSERRAT_38 + bool "Montserrat 38" + select LV_FONT_MONTSERRAT_38 + config LV_FONT_DEFAULT_MONTSERRAT_40 + bool "Montserrat 40" + select LV_FONT_MONTSERRAT_40 + config LV_FONT_DEFAULT_MONTSERRAT_42 + bool "Montserrat 42" + select LV_FONT_MONTSERRAT_42 + config LV_FONT_DEFAULT_MONTSERRAT_44 + bool "Montserrat 44" + select LV_FONT_MONTSERRAT_44 + config LV_FONT_DEFAULT_MONTSERRAT_46 + bool "Montserrat 46" + select LV_FONT_MONTSERRAT_46 + config LV_FONT_DEFAULT_MONTSERRAT_48 + bool "Montserrat 48" + select LV_FONT_MONTSERRAT_48 + config LV_FONT_DEFAULT_MONTSERRAT_12_SUBPX + bool "Montserrat 12 sub-pixel" + select LV_FONT_MONTSERRAT_12_SUBPX + config LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED + bool "Montserrat 28 compressed" + select LV_FONT_MONTSERRAT_28_COMPRESSED + config LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW + bool "Dejavu 16 Persian, Hebrew, Arabic letters" + select LV_FONT_DEJAVU_16_PERSIAN_HEBREW + config LV_FONT_DEFAULT_SIMSUN_16_CJK + bool "Simsun 16 CJK" + select LV_FONT_SIMSUN_16_CJK + config LV_FONT_DEFAULT_UNSCII_8 + bool "UNSCII 8 (Perfect monospace font)" + select LV_FONT_UNSCII_8 + config LV_FONT_DEFAULT_UNSCII_16 + bool "UNSCII 16 (Perfect monospace font)" + select LV_FONT_UNSCII_16 + endchoice + + config LV_FONT_FMT_TXT_LARGE + bool "Enable it if you have fonts with a lot of characters." + help + The limit depends on the font size, font face and bpp + but with > 10,000 characters if you see issues probably you + need to enable it. + + config LV_USE_FONT_COMPRESSED + bool "Sets support for compressed fonts." + + config LV_USE_FONT_SUBPX + bool "Enable subpixel rendering." + + config LV_FONT_SUBPX_BGR + bool "Use BGR instead RGB for sub-pixel rendering." + depends on LV_USE_FONT_SUBPX + help + Set the pixel order of the display. + Important only if "subpx fonts" are used. + With "normal" font it doesn't matter. + + config LV_USE_FONT_PLACEHOLDER + bool "Enable drawing placeholders when glyph dsc is not found." + default y + endmenu + + menu "Text Settings" + choice LV_TXT_ENC + prompt "Select a character encoding for strings" + help + Select a character encoding for strings. Your IDE or editor should have the same character encoding. + default LV_TXT_ENC_UTF8 if !LV_CONF_MINIMAL + default LV_TXT_ENC_ASCII if LV_CONF_MINIMAL + + config LV_TXT_ENC_UTF8 + bool "UTF8" + config LV_TXT_ENC_ASCII + bool "ASCII" + endchoice + + config LV_TXT_BREAK_CHARS + string "Can break (wrap) texts on these chars" + default " ,.;:-_" + + config LV_TXT_LINE_BREAK_LONG_LEN + int "Line break long length" + default 0 + help + If a word is at least this long, will break wherever 'prettiest'. + To disable, set to a value <= 0. + + config LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN + int "Min num chars before break" + default 3 + depends on LV_TXT_LINE_BREAK_LONG_LEN > 0 + help + Minimum number of characters in a long word to put on a line before a break. + + config LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN + int "Min num chars after break" + default 3 + depends on LV_TXT_LINE_BREAK_LONG_LEN > 0 + help + Minimum number of characters in a long word to put on a line after a break. + + config LV_TXT_COLOR_CMD + string "The control character to use for signalling text recoloring" + default "#" + + config LV_USE_BIDI + bool "Support bidirectional texts" + help + Allows mixing Left-to-Right and Right-to-Left texts. + The direction will be processed according to the Unicode Bidirectional Algorithm: + https://www.w3.org/International/articles/inline-bidi-markup/uba-basics + + choice + prompt "Set the default BIDI direction" + default LV_BIDI_DIR_AUTO + depends on LV_USE_BIDI + + config LV_BIDI_DIR_LTR + bool "Left-to-Right" + config LV_BIDI_DIR_RTL + bool "Right-to-Left" + config LV_BIDI_DIR_AUTO + bool "Detect texts base direction" + endchoice + + config LV_USE_ARABIC_PERSIAN_CHARS + bool "Enable Arabic/Persian processing" + help + In these languages characters should be replaced with + an other form based on their position in the text. + endmenu + + menu "Widget usage" + config LV_USE_ARC + bool "Arc." + default y if !LV_CONF_MINIMAL + config LV_USE_BAR + bool "Bar." + default y if !LV_CONF_MINIMAL + config LV_USE_BTN + bool "Button." + default y if !LV_CONF_MINIMAL + config LV_USE_BTNMATRIX + bool "Button matrix." + default y if !LV_CONF_MINIMAL + config LV_USE_CANVAS + bool "Canvas. Dependencies: lv_img." + select LV_USE_IMG + default y if !LV_CONF_MINIMAL + config LV_USE_CHECKBOX + bool "Check Box" + default y if !LV_CONF_MINIMAL + config LV_USE_DROPDOWN + bool "Drop down list. Requires: lv_label." + select LV_USE_LABEL + default y if !LV_CONF_MINIMAL + config LV_USE_IMG + bool "Image. Requires: lv_label." + select LV_USE_LABEL + default y if !LV_CONF_MINIMAL + config LV_USE_LABEL + bool "Label." + default y if !LV_CONF_MINIMAL + config LV_LABEL_TEXT_SELECTION + bool "Enable selecting text of the label." + depends on LV_USE_LABEL + default y + config LV_LABEL_LONG_TXT_HINT + bool "Store extra some info in labels (12 bytes) to speed up drawing of very long texts." + depends on LV_USE_LABEL + default y + config LV_USE_LINE + bool "Line." + default y if !LV_CONF_MINIMAL + config LV_USE_ROLLER + bool "Roller. Requires: lv_label." + select LV_USE_LABEL + default y if !LV_CONF_MINIMAL + config LV_ROLLER_INF_PAGES + int "Number of extra 'pages' when the controller is infinite." + default 7 + depends on LV_USE_ROLLER + config LV_USE_SLIDER + bool "Slider. Requires: lv_bar." + select LV_USE_BAR + default y if !LV_CONF_MINIMAL + config LV_USE_SWITCH + bool "Switch." + default y if !LV_CONF_MINIMAL + config LV_USE_TEXTAREA + bool "Text area. Requires: lv_label." + select LV_USE_LABEL + default y if !LV_CONF_MINIMAL + config LV_TEXTAREA_DEF_PWD_SHOW_TIME + int "Text area def. pwd show time [ms]." + default 1500 + depends on LV_USE_TEXTAREA + config LV_USE_TABLE + bool "Table." + default y if !LV_CONF_MINIMAL + endmenu + + menu "Extra Widgets" + config LV_USE_ANIMIMG + bool "Anim image." + default y if !LV_CONF_MINIMAL + config LV_USE_CALENDAR + bool "Calendar." + default y if !LV_CONF_MINIMAL + config LV_CALENDAR_WEEK_STARTS_MONDAY + bool "Calendar week starts monday." + depends on LV_USE_CALENDAR + config LV_USE_CALENDAR_HEADER_ARROW + bool "Use calendar header arrow" + depends on LV_USE_CALENDAR + default y + config LV_USE_CALENDAR_HEADER_DROPDOWN + bool "Use calendar header dropdown" + depends on LV_USE_CALENDAR + default y + config LV_USE_CHART + bool "Chart." + default y if !LV_CONF_MINIMAL + config LV_USE_COLORWHEEL + bool "Colorwheel." + default y if !LV_CONF_MINIMAL + config LV_USE_IMGBTN + bool "Imgbtn." + default y if !LV_CONF_MINIMAL + config LV_USE_KEYBOARD + bool "Keyboard." + default y if !LV_CONF_MINIMAL + config LV_USE_LED + bool "LED." + default y if !LV_CONF_MINIMAL + config LV_USE_LIST + bool "List." + default y if !LV_CONF_MINIMAL + config LV_USE_MENU + bool "Menu." + default y if !LV_CONF_MINIMAL + config LV_USE_METER + bool "Meter." + default y if !LV_CONF_MINIMAL + config LV_USE_MSGBOX + bool "Msgbox." + default y if !LV_CONF_MINIMAL + config LV_USE_SPAN + bool "span" + default y if !LV_CONF_MINIMAL + config LV_SPAN_SNIPPET_STACK_SIZE + int "Maximum number of span descriptor" + default 64 + depends on LV_USE_SPAN + config LV_USE_SPINBOX + bool "Spinbox." + default y if !LV_CONF_MINIMAL + config LV_USE_SPINNER + bool "Spinner." + default y if !LV_CONF_MINIMAL + config LV_USE_TABVIEW + bool "Tabview." + default y if !LV_CONF_MINIMAL + config LV_USE_TILEVIEW + bool "Tileview" + default y if !LV_CONF_MINIMAL + config LV_USE_WIN + bool "Win" + default y if !LV_CONF_MINIMAL + endmenu + + menu "Themes" + config LV_USE_THEME_DEFAULT + bool "A simple, impressive and very complete theme" + default y if !LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL + config LV_THEME_DEFAULT_DARK + bool "Yes to set dark mode, No to set light mode" + depends on LV_USE_THEME_DEFAULT + config LV_THEME_DEFAULT_GROW + bool "Enable grow on press" + default y + depends on LV_USE_THEME_DEFAULT + config LV_THEME_DEFAULT_TRANSITION_TIME + int "Default transition time in [ms]" + default 80 + depends on LV_USE_THEME_DEFAULT + config LV_USE_THEME_BASIC + bool "A very simple theme that is a good starting point for a custom theme" + default y if !LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL + config LV_USE_THEME_MONO + bool "Monochrome theme, suitable for some E-paper & dot matrix displays" + default y if LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL + endmenu + + menu "Layouts" + config LV_USE_FLEX + bool "A layout similar to Flexbox in CSS." + default y if !LV_CONF_MINIMAL + config LV_USE_GRID + bool "A layout similar to Grid in CSS." + default y if !LV_CONF_MINIMAL + endmenu + + menu "3rd Party Libraries" + config LV_USE_FS_STDIO + bool "File system on top of stdio API" + config LV_FS_STDIO_LETTER + int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65 )" + default 0 + depends on LV_USE_FS_STDIO + config LV_FS_STDIO_PATH + string "Set the working directory" + depends on LV_USE_FS_STDIO + config LV_FS_STDIO_CACHE_SIZE + string ">0 to cache this number of bytes in lv_fs_read()" + depends on LV_USE_FS_STDIO + + config LV_USE_FS_POSIX + bool "File system on top of posix API" + config LV_FS_POSIX_LETTER + int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)" + default 0 + depends on LV_USE_FS_POSIX + config LV_FS_POSIX_PATH + string "Set the working directory" + depends on LV_USE_FS_POSIX + config LV_FS_POSIX_CACHE_SIZE + int ">0 to cache this number of bytes in lv_fs_read()" + default 0 + depends on LV_USE_FS_POSIX + + config LV_USE_FS_WIN32 + bool "File system on top of Win32 API" + config LV_FS_WIN32_LETTER + int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)" + default 0 + depends on LV_USE_FS_WIN32 + config LV_FS_WIN32_PATH + string "Set the working directory" + depends on LV_USE_FS_WIN32 + config LV_FS_WIN32_CACHE_SIZE + int ">0 to cache this number of bytes in lv_fs_read()" + default 0 + depends on LV_USE_FS_WIN32 + + config LV_USE_FS_FATFS + bool "File system on top of FatFS" + config LV_FS_FATFS_LETTER + int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)" + default 0 + depends on LV_USE_FS_FATFS + config LV_FS_FATFS_CACHE_SIZE + int ">0 to cache this number of bytes in lv_fs_read()" + default 0 + depends on LV_USE_FS_FATFS + + config LV_USE_PNG + bool "PNG decoder library" + + config LV_USE_BMP + bool "BMP decoder library" + + config LV_USE_SJPG + bool "JPG + split JPG decoder library" + + config LV_USE_GIF + bool "GIF decoder library" + + config LV_USE_QRCODE + bool "QR code library" + + config LV_USE_FREETYPE + bool "FreeType library" + if LV_USE_FREETYPE + menu "FreeType cache config" + config LV_FREETYPE_CACHE_SIZE + int "Memory used by FreeType to cache characters [bytes] (-1: no caching)" + default 16384 + if LV_FREETYPE_CACHE_SIZE >= 0 + config LV_FREETYPE_SBIT_CACHE + bool "enable sbit cache" + default n + config LV_FREETYPE_CACHE_FT_FACES + int "The maximum number of FT_Face(0: use defaults)" + default 0 + config LV_FREETYPE_CACHE_FT_SIZES + int "The maximum number of FT_Size(0: use defaults)" + default 0 + endif + endmenu + endif + + config LV_USE_RLOTTIE + bool "Lottie library" + + config LV_USE_FFMPEG + bool "FFmpeg library" + config LV_FFMPEG_DUMP_FORMAT + bool "Dump format" + depends on LV_USE_FFMPEG + default n + endmenu + + menu "Others" + config LV_USE_SNAPSHOT + bool "Enable API to take snapshot" + default y if !LV_CONF_MINIMAL + + config LV_USE_MONKEY + bool "Enable Monkey test" + default n + + config LV_USE_GRIDNAV + bool "Enable grid navigation" + default n + + config LV_USE_FRAGMENT + bool "Enable lv_obj fragment" + default n + + config LV_USE_IMGFONT + bool "draw img in label or span obj" + default n + config LV_IMGFONT_PATH_MAX_LEN + int "Imgfont image file path maximum length" + depends on LV_USE_IMGFONT + default 64 + config LV_IMGFONT_USE_IMG_CACHE_HEADER + bool "Use img cache to buffer header information" + depends on LV_USE_IMGFONT + default n + + config LV_USE_MSG + bool "Enable a published subscriber based messaging system" + default n + + config LV_USE_IME_PINYIN + bool "Enable Pinyin input method" + default n + config LV_IME_PINYIN_USE_K9_MODE + bool "Enable Pinyin input method 9 key input mode" + depends on LV_USE_IME_PINYIN + default n + config LV_IME_PINYIN_K9_CAND_TEXT_NUM + int "Maximum number of candidate panels for 9-key input mode" + depends on LV_IME_PINYIN_USE_K9_MODE + default 3 + config LV_IME_PINYIN_USE_DEFAULT_DICT + bool "Use built-in Thesaurus" + depends on LV_USE_IME_PINYIN + default y + help + If you do not use the default thesaurus, be sure to use lv_ime_pinyin after setting the thesauruss + config LV_IME_PINYIN_CAND_TEXT_NUM + int "Maximum number of candidate panels" + depends on LV_USE_IME_PINYIN + default 6 + help + Set the maximum number of candidate panels that can be displayed. + This needs to be adjusted according to the size of the screen. + endmenu + + menu "Examples" + config LV_BUILD_EXAMPLES + bool "Enable the examples to be built" + default y if !LV_CONF_MINIMAL + endmenu + + menu "Demos" + config LV_USE_DEMO_WIDGETS + bool "Show some widget" + default n + config LV_DEMO_WIDGETS_SLIDESHOW + bool "Enable slide show" + depends on LV_USE_DEMO_WIDGETS + default n + + config LV_USE_DEMO_KEYPAD_AND_ENCODER + bool "Demonstrate the usage of encoder and keyboard" + default n + + config LV_USE_DEMO_BENCHMARK + bool "Benchmark your system" + default n + config LV_DEMO_BENCHMARK_RGB565A8 + bool "Use RGB565A8 images with 16 bit color depth instead of ARGB8565" + depends on LV_USE_DEMO_BENCHMARK + default n + + config LV_USE_DEMO_STRESS + bool "Stress test for LVGL" + default n + + config LV_USE_DEMO_MUSIC + bool "Music player demo" + default n + config LV_DEMO_MUSIC_SQUARE + bool "Enable Square" + depends on LV_USE_DEMO_MUSIC + default n + config LV_DEMO_MUSIC_LANDSCAPE + bool "Enable Landscape" + depends on LV_USE_DEMO_MUSIC + default n + config LV_DEMO_MUSIC_ROUND + bool "Enable Round" + depends on LV_USE_DEMO_MUSIC + default n + config LV_DEMO_MUSIC_LARGE + bool "Enable Large" + depends on LV_USE_DEMO_MUSIC + default n + config LV_DEMO_MUSIC_AUTO_PLAY + bool "Enable Auto play" + depends on LV_USE_DEMO_MUSIC + default n + endmenu + +endmenu diff --git a/third-party/lvgl-8.3/lvgl.mk b/third-party/lvgl-8.3/lvgl.mk new file mode 100644 index 0000000000000000000000000000000000000000..27b6c97346db5505203a7d257cba1fd629d79e97 --- /dev/null +++ b/third-party/lvgl-8.3/lvgl.mk @@ -0,0 +1,15 @@ +THIRD_PARTY_CUR_DIR := $(FREERTOS_SDK_ROOT)/third-party + +include $(STANDALONE_DIR)/third-party/lvgl-8.3/lvgl.mk + +include + +ifdef CONFIG_USE_FREERTOS + + INC_DIR += $(THIRD_PARTY_CUR_DIR)/lvgl-8.3/port\ + + + SRC_DIR += $(THIRD_PARTY_CUR_DIR)/lvgl-8.3/port\ + + +endif \ No newline at end of file diff --git a/third-party/lvgl-8.3/port/lv_conf.h b/third-party/lvgl-8.3/port/lv_conf.h new file mode 100644 index 0000000000000000000000000000000000000000..77c3678b3ec841ccdf28484574f07a3563fcb0c4 --- /dev/null +++ b/third-party/lvgl-8.3/port/lv_conf.h @@ -0,0 +1,809 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * FilePath: lv_conf.c + * Date: 2023-02-05 18:27:47 + * LastEditTime: 2023-02-10 11:02:47 + * Description: This file is for providing the lvgl config + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/02/10 Modify the format and establish the version + */ + +/** + * @file lv_conf.c + * + */ + +/* clang-format off */ + + +#ifndef LV_CONF_H +#define LV_CONF_H + +#include + +/*==================== +COLOR SETTINGS +*====================*/ + +/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/ +#ifdef CONFIG_LV_COLOR_DEPTH + #define LV_COLOR_DEPTH CONFIG_LV_COLOR_DEPTH +#else + #define LV_COLOR_DEPTH 32 +#endif + +#define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00) + +/*========================= +STDLIB WRAPPER SETTINGS +*=========================*/ + +/*Enable and configure the built-in memory manager*/ +#define LV_USE_BUILTIN_MALLOC 1 +#if LV_USE_BUILTIN_MALLOC + /*Size of the memory available for `lv_malloc()` in bytes (>= 2kB)*/ + #define LV_MEM_SIZE (128U * 1024U) /*[bytes]*/ + + /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ + #define LV_MEM_ADR 0 /*0: unused*/ + /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ + #if LV_MEM_ADR == 0 + #undef LV_MEM_POOL_INCLUDE + #undef LV_MEM_POOL_ALLOC + #endif +#endif /*LV_USE_BUILTIN_MALLOC*/ + +/*Enable lv_memcpy_builtin, lv_memset_builtin, lv_strlen_builtin, lv_strncpy_builtin*/ +#define LV_USE_BUILTIN_MEMCPY 1 + +/*Enable and configure the built-in (v)snprintf */ +#define LV_USE_BUILTIN_SNPRINTF 1 +#if LV_USE_BUILTIN_SNPRINTF + #define LV_SPRINTF_USE_FLOAT 0 +#endif /*LV_USE_BUILTIN_SNPRINTF*/ + +#define LV_STDLIB_INCLUDE +#define LV_MALLOC lv_malloc_builtin +#define LV_REALLOC lv_realloc_builtin +#define LV_FREE lv_free_builtin +#define LV_MEMSET lv_memset_builtin +#define LV_MEMCPY lv_memcpy_builtin +#define LV_SNPRINTF lv_snprintf_builtin +#define LV_VSNPRINTF lv_vsnprintf_builtin +#define LV_STRLEN lv_strlen_builtin +#define LV_STRNCPY lv_strncpy_builtin + +/*==================== +HAL SETTINGS +*====================*/ + +/*Use a custom tick source that tells the elapsed time in milliseconds. +*It removes the need to manually update the tick with `lv_tick_inc()`)*/ +#define LV_TICK_CUSTOM 0 +#if LV_TICK_CUSTOM + #define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/ + #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/ +#endif /*LV_TICK_CUSTOM*/ + +/*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. +*(Not so important, you can adjust it to modify default sizes and spaces)*/ +#define LV_DPI_DEF 130 /*[px/inch]*/ + +/*======================== +* DRAW CONFIGURATION +*========================*/ + +/*Enable the built in mask engine. +*Required to draw shadow, rounded corners, circles, arc, skew lines, or any other masks*/ +#define LV_USE_DRAW_MASKS 1 + +#define LV_USE_DRAW_SW 1 +#if LV_USE_DRAW_SW + + /*Enable complex draw engine. + *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/ + #define LV_DRAW_SW_COMPLEX 1 + + /* If a widget has `style_opa < 255` (not `bg_opa`, `text_opa` etc) or not NORMAL blend mode + * it is buffered into a "simple" layer before rendering. The widget can be buffered in smaller chunks. + * "Transformed layers" (if `transform_angle/zoom` are set) use larger buffers + * and can't be drawn in chunks. */ + + /*The target buffer size for simple layer chunks.*/ + #define LV_DRAW_SW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /*[bytes]*/ + + /*Used if `LV_DRAW_SW_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated.*/ + #define LV_DRAW_SW_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024) /*[bytes]*/ + + /*Allow buffering some shadow calculation. + *LV_DRAW_SW_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` + *Caching has LV_DRAW_SW_SHADOW_CACHE_SIZE^2 RAM cost*/ + #define LV_DRAW_SW_SHADOW_CACHE_SIZE 0 + + /* Set number of maximally cached circle data. + * The circumference of 1/4 circle are saved for anti-aliasing + * radius * 4 bytes are used per circle (the most often used radiuses are saved) + * 0: to disable caching */ + #define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4 + + /*Default gradient buffer size. + *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. + *LV_DRAW_SW_GRADIENT_CACHE_DEF_SIZE sets the size of this cache in bytes. + *If the cache is too small the map will be allocated only while it's required for the drawing. + *0 mean no caching.*/ + #define LV_DRAW_SW_GRADIENT_CACHE_DEF_SIZE 0 + + /*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) + *LV_DRAW_SW_GRADIENT_DITHER implies allocating one or two more lines of the object's rendering surface + *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */ + #define LV_DRAW_SW_GRADIENT_DITHER 0 + #if LV_DRAW_SW_GRADIENT_DITHER + /*Add support for error diffusion dithering. + *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. + *The increase in memory consumption is (24 bits * object's width)*/ + #define LV_DRAW_SW_GRADIENT_DITHER_ERROR_DIFFUSION 0 + #endif + + /*Enable subpixel rendering*/ + #define LV_DRAW_SW_FONT_SUBPX 0 + #if LV_DRAW_SW_FONT_SUBPX + /*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/ + #define LV_DRAW_SW_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/ + #endif +#endif + +/*Use SDL renderer API*/ +#define LV_USE_DRAW_SDL 0 +#if LV_USE_DRAW_SDL + #define LV_DRAW_SDL_INCLUDE_PATH + /*Texture cache size, 8MB by default*/ + #define LV_DRAW_SDL_LRU_SIZE (1024 * 1024 * 8) + /*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/ + #define LV_DRAW_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6)) +#endif + +/*===================== +* GPU CONFIGURATION +*=====================*/ + +/*Use Arm's 2D acceleration library Arm-2D */ +#define LV_USE_GPU_ARM2D 0 + +/*Use STM32's DMA2D (aka Chrom Art) GPU*/ +#define LV_USE_GPU_STM32_DMA2D 0 +#if LV_USE_GPU_STM32_DMA2D + /*Must be defined to include path of CMSIS header of target processor + e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ + #define LV_GPU_DMA2D_CMSIS_INCLUDE +#endif + +/*Use NXP's PXP GPU iMX RTxxx platforms*/ +#define LV_USE_GPU_NXP_PXP 0 +#if LV_USE_GPU_NXP_PXP + /*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) + * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS + * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. + *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() + */ + #define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 +#endif + +/*Use NXP's VG-Lite GPU iMX RTxxx platforms*/ +#define LV_USE_GPU_NXP_VG_LITE 0 + +/*Use SWM341's DMA2D GPU*/ +#define LV_USE_GPU_SWM341_DMA2D 0 +#if LV_USE_GPU_SWM341_DMA2D + #define LV_GPU_SWM341_DMA2D_INCLUDE "SWM341.h" +#endif + +/*======================= +* FEATURE CONFIGURATION +*=======================*/ + +/*------------- +* Logging +*-----------*/ + +/*Enable the log module*/ +#define LV_USE_LOG 0 +#if LV_USE_LOG + + /*How important log should be added: + *LV_LOG_LEVEL_TRACE A lot of logs to give detailed information + *LV_LOG_LEVEL_INFO Log important events + *LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem + *LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail + *LV_LOG_LEVEL_USER Only logs added by the user + *LV_LOG_LEVEL_NONE Do not log anything*/ + #define LV_LOG_LEVEL LV_LOG_LEVEL_TRACE + + /*1: Print the log with 'printf'; + *0: User need to register a callback with `lv_log_register_print_cb()`*/ + #define LV_LOG_PRINTF 1 + + /*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ + #define LV_LOG_TRACE_MEM 1 + #define LV_LOG_TRACE_TIMER 1 + #define LV_LOG_TRACE_INDEV 1 + #define LV_LOG_TRACE_DISP_REFR 1 + #define LV_LOG_TRACE_EVENT 1 + #define LV_LOG_TRACE_OBJ_CREATE 1 + #define LV_LOG_TRACE_LAYOUT 1 + #define LV_LOG_TRACE_ANIM 1 + +#endif /*LV_USE_LOG*/ + +/*------------- +* Asserts +*-----------*/ + +/*Enable asserts if an operation is failed or an invalid data is found. +*If LV_USE_LOG is enabled an error message will be printed on failure*/ +#define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/ +#define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/ +#define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/ + +/*Add a custom handler when assert happens e.g. to restart the MCU*/ +#define LV_ASSERT_HANDLER_INCLUDE +#define LV_ASSERT_HANDLER while(1); /*Halt by default*/ + +/*------------- +* Others +*-----------*/ + +/*1: Show CPU usage and FPS count*/ +#define LV_USE_PERF_MONITOR 0 +#if LV_USE_PERF_MONITOR + #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT +#endif + +/*1: Show the used memory and the memory fragmentation +* Requires `LV_USE_BUILTIN_MALLOC = 1`*/ +#define LV_USE_MEM_MONITOR 0 +#if LV_USE_MEM_MONITOR + #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT +#endif + +/*1: Draw random colored rectangles over the redrawn areas*/ +#define LV_USE_REFR_DEBUG 0 + +/*Maximum buffer size to allocate for rotation. +*Only used if software rotation is enabled in the display driver.*/ +#define LV_DISP_ROT_MAX_BUF (10*1024) + +#define LV_USE_USER_DATA 1 + +/*Garbage Collector settings +*Used if lvgl is bound to higher level language and the memory is managed by that language*/ +#define LV_ENABLE_GC 0 +#if LV_ENABLE_GC != 0 + #define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ +#endif /*LV_ENABLE_GC*/ + +/*Default image cache size. Image caching keeps some images opened. +*If only the built-in image formats are used there is no real advantage of caching. +*With other image decoders (e.g. PNG or JPG) caching save the continuous open/decode of images. +*However the opened images consume additional RAM. +*0: to disable caching*/ +#define LV_IMG_CACHE_DEF_SIZE 0 + + +/*Number of stops allowed per gradient. Increase this to allow more stops. +*This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ +#define LV_GRADIENT_MAX_STOPS 2 + +/* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. +* 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */ +#define LV_COLOR_MIX_ROUND_OFS 0 + +/*===================== +* COMPILER SETTINGS +*====================*/ + +/*For big endian systems set to 1*/ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/*Define a custom attribute to `lv_tick_inc` function*/ +#define LV_ATTRIBUTE_TICK_INC + +/*Define a custom attribute to `lv_timer_handler` function*/ +#define LV_ATTRIBUTE_TIMER_HANDLER + +/*Define a custom attribute to `lv_disp_flush_ready` function*/ +#define LV_ATTRIBUTE_FLUSH_READY + +/*Required alignment size for buffers*/ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 + +/*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). +* E.g. __attribute__((aligned(4)))*/ +#define LV_ATTRIBUTE_MEM_ALIGN + +/*Attribute to mark large constant arrays for example font's bitmaps*/ +#define LV_ATTRIBUTE_LARGE_CONST + +/*Compiler prefix for a big array declaration in RAM*/ +#define LV_ATTRIBUTE_LARGE_RAM_ARRAY + +/*Place performance critical functions into a faster memory (e.g RAM)*/ +#define LV_ATTRIBUTE_FAST_MEM + + +/*Export integer constant to binding. This macro is used with constants in the form of LV_ that +*should also appear on LVGL binding API such as Micropython.*/ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ + +/*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/ +#define LV_USE_LARGE_COORD 0 + +/*================== +* FONT USAGE +*===================*/ + +/*Montserrat fonts with ASCII range and some symbols using bpp = 4 +*https://fonts.google.com/specimen/Montserrat*/ +#define LV_FONT_MONTSERRAT_8 0 +#define LV_FONT_MONTSERRAT_10 0 +#define LV_FONT_MONTSERRAT_12 0 +#define LV_FONT_MONTSERRAT_14 1 +#define LV_FONT_MONTSERRAT_16 0 +#define LV_FONT_MONTSERRAT_18 0 +#define LV_FONT_MONTSERRAT_20 0 +#define LV_FONT_MONTSERRAT_22 0 +#define LV_FONT_MONTSERRAT_24 0 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#define LV_FONT_MONTSERRAT_30 0 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 0 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/*Demonstrate special features*/ +#define LV_FONT_MONTSERRAT_12_SUBPX 0 +#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /*bpp = 3*/ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, Persian letters and all their forms*/ +#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/ + +/*Pixel perfect monospace fonts*/ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/*Optionally declare custom fonts here. +*You can use these fonts as default font too and they will be available globally. +*E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ +#define LV_FONT_CUSTOM_DECLARE + +/*Always set a default font*/ +#define LV_FONT_DEFAULT &lv_font_montserrat_14 + +/*Enable handling large font and/or fonts with a lot of characters. +*The limit depends on the font size, font face and bpp. +*Compiler error will be triggered if a font needs it.*/ +#define LV_FONT_FMT_TXT_LARGE 0 + +/*Enables/disables support for compressed fonts.*/ +#define LV_USE_FONT_COMPRESSED 0 + +/*Enable drawing placeholders when glyph dsc is not found*/ +#define LV_USE_FONT_PLACEHOLDER 1 + +/*================= +* TEXT SETTINGS +*=================*/ + +/** +* Select a character encoding for strings. +* Your IDE or editor should have the same character encoding +* - LV_TXT_ENC_UTF8 +* - LV_TXT_ENC_ASCII +*/ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + +/*Can break (wrap) texts on these chars*/ +#define LV_TXT_BREAK_CHARS " ,.;:-_" + +/*If a word is at least this long, will break wherever "prettiest" +*To disable, set to a value <= 0*/ +#define LV_TXT_LINE_BREAK_LONG_LEN 0 + +/*Minimum number of characters in a long word to put on a line before a break. +*Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/*Minimum number of characters in a long word to put on a line after a break. +*Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/*The control character to use for signalling text recoloring.*/ +#define LV_TXT_COLOR_CMD "#" + +/*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. +*The direction will be processed according to the Unicode Bidirectional Algorithm: +*https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI + /*Set the default direction. Supported values: + *`LV_BASE_DIR_LTR` Left-to-Right + *`LV_BASE_DIR_RTL` Right-to-Left + *`LV_BASE_DIR_AUTO` detect texts base direction*/ + #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO +#endif + +/*Enable Arabic/Persian processing +*In these languages characters should be replaced with an other form based on their position in the text*/ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*================== +* WIDGETS +*================*/ + +/*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ + +#define LV_USE_ANIMIMG 1 + +#define LV_USE_ARC 1 + +#define LV_USE_BAR 1 + +#define LV_USE_BTN 1 + +#define LV_USE_BTNMATRIX 1 + +#define LV_USE_CALENDAR 1 +#if LV_USE_CALENDAR + #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 + #if LV_CALENDAR_WEEK_STARTS_MONDAY + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} + #else + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} + #endif + + #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} + #define LV_USE_CALENDAR_HEADER_ARROW 1 + #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 +#endif /*LV_USE_CALENDAR*/ + +#define LV_USE_CANVAS 1 + +#define LV_USE_CHART 1 + +#define LV_USE_CHECKBOX 1 + +#define LV_USE_COLORWHEEL 1 + +#define LV_USE_DROPDOWN 1 /*Requires: lv_label*/ + +#define LV_USE_IMG 1 /*Requires: lv_label*/ + +#define LV_USE_IMGBTN 1 + +#define LV_USE_KEYBOARD 1 + +#define LV_USE_LABEL 1 +#if LV_USE_LABEL + #define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/ + #define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/ +#endif + +#define LV_USE_LED 1 + +#define LV_USE_LINE 1 + +#define LV_USE_LIST 1 + +#define LV_USE_MENU 1 + +#define LV_USE_METER 1 + +#define LV_USE_MSGBOX 1 + +#define LV_USE_ROLLER 1 /*Requires: lv_label*/ +#if LV_USE_ROLLER + #define LV_ROLLER_INF_PAGES 7 /*Number of extra "pages" when the roller is infinite*/ +#endif + +#define LV_USE_SLIDER 1 /*Requires: lv_bar*/ + +#define LV_USE_SPAN 1 +#if LV_USE_SPAN + /*A line text can contain maximum num of span descriptor */ + #define LV_SPAN_SNIPPET_STACK_SIZE 64 +#endif + +#define LV_USE_SPINBOX 1 + +#define LV_USE_SPINNER 1 + +#define LV_USE_SWITCH 1 + +#define LV_USE_TEXTAREA 1 /*Requires: lv_label*/ +#if LV_USE_TEXTAREA != 0 + #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ +#endif + +#define LV_USE_TABLE 1 + +#define LV_USE_TABVIEW 1 + +#define LV_USE_TILEVIEW 1 + +#define LV_USE_WIN 1 + +/*================== +* THEMES +*==================*/ + +/*A simple, impressive and very complete theme*/ +#define LV_USE_THEME_DEFAULT 1 +#if LV_USE_THEME_DEFAULT + + /*0: Light mode; 1: Dark mode*/ + #define LV_THEME_DEFAULT_DARK 0 + + /*1: Enable grow on press*/ + #define LV_THEME_DEFAULT_GROW 1 + + /*Default transition time in [ms]*/ + #define LV_THEME_DEFAULT_TRANSITION_TIME 80 +#endif /*LV_USE_THEME_DEFAULT*/ + +/*A very simple theme that is a good starting point for a custom theme*/ +#define LV_USE_THEME_BASIC 1 + +/*A theme designed for monochrome displays*/ +#define LV_USE_THEME_MONO 1 + +/*================== +* LAYOUTS +*==================*/ + +/*A layout similar to Flexbox in CSS.*/ +#define LV_USE_FLEX 1 + +/*A layout similar to Grid in CSS.*/ +#define LV_USE_GRID 1 + +/*==================== +* 3RD PARTS LIBRARIES +*====================*/ + +/*File system interfaces for common APIs */ + +/*API for fopen, fread, etc*/ +#define LV_USE_FS_STDIO 0 +#if LV_USE_FS_STDIO + #define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for open, read, etc*/ +#define LV_USE_FS_POSIX 0 +#if LV_USE_FS_POSIX + #define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for CreateFile, ReadFile, etc*/ +#define LV_USE_FS_WIN32 0 +#if LV_USE_FS_WIN32 + #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ + #define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/ +#define LV_USE_FS_FATFS 0 +#if LV_USE_FS_FATFS + #define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ + #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ +#endif + +/*PNG decoder library*/ +#define LV_USE_PNG 0 + +/*BMP decoder library*/ +#define LV_USE_BMP 0 + +/* JPG + split JPG decoder library. +* Split JPG is a custom format optimized for embedded systems. */ +#define LV_USE_SJPG 0 + +/*GIF decoder library*/ +#define LV_USE_GIF 0 + +/*QR code library*/ +#define LV_USE_QRCODE 0 + +/*FreeType library*/ +#define LV_USE_FREETYPE 0 +#if LV_USE_FREETYPE + /*Memory used by FreeType to cache characters [bytes] (-1: no caching)*/ + #define LV_FREETYPE_CACHE_SIZE (16 * 1024) + #if LV_FREETYPE_CACHE_SIZE >= 0 + /* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. */ + /* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) */ + /* if font size >= 256, must be configured as image cache */ + #define LV_FREETYPE_SBIT_CACHE 0 + /* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */ + /* (0:use system defaults) */ + #define LV_FREETYPE_CACHE_FT_FACES 0 + #define LV_FREETYPE_CACHE_FT_SIZES 0 + #endif +#endif + +/*Rlottie library*/ +#define LV_USE_RLOTTIE 0 + +/*FFmpeg library for image decoding and playing videos +*Supports all major image formats so do not enable other image decoder with it*/ +#define LV_USE_FFMPEG 0 +#if LV_USE_FFMPEG + /*Dump input information to stderr*/ + #define LV_FFMPEG_DUMP_FORMAT 0 +#endif + +/*================== +* OTHERS +*==================*/ + +/*1: Enable API to take snapshot for object*/ +#define LV_USE_SNAPSHOT 0 + +/*1: Enable Monkey test*/ +#define LV_USE_MONKEY 0 + +/*1: Enable grid navigation*/ +#define LV_USE_GRIDNAV 0 + +/*1: Enable lv_obj fragment*/ +#define LV_USE_FRAGMENT 0 + +/*1: Support using images as font in label or span widgets */ +#define LV_USE_IMGFONT 0 +#if LV_USE_IMGFONT + /*Imgfont image file path maximum length*/ + #define LV_IMGFONT_PATH_MAX_LEN 64 + + /*1: Use img cache to buffer header information*/ + #define LV_IMGFONT_USE_IMG_CACHE_HEADER 0 +#endif + +/*1: Enable a published subscriber based messaging system */ +#define LV_USE_MSG 0 + +/*1: Enable Pinyin input method*/ +/*Requires: lv_keyboard*/ +#define LV_USE_IME_PINYIN 0 +#if LV_USE_IME_PINYIN + /*1: Use default thesaurus*/ + /*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/ + #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 + /*Set the maximum number of candidate panels that can be displayed*/ + /*This needs to be adjusted according to the size of the screen*/ + #define LV_IME_PINYIN_CAND_TEXT_NUM 6 + + /*Use 9 key input(k9)*/ + #define LV_IME_PINYIN_USE_K9_MODE 1 + #if LV_IME_PINYIN_USE_K9_MODE == 1 + #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 + #endif // LV_IME_PINYIN_USE_K9_MODE +#endif + +/*================== +* EXAMPLES +*==================*/ + +/*Enable the examples to be built with the library*/ +#define LV_BUILD_EXAMPLES 1 + +/*=================== +* DEMO USAGE +====================*/ + +/*Show some widget. It might be required to increase `LV_MEM_SIZE` */ +#ifdef CONFIG_LV_USE_DEMO_WIDGETS + #define LV_USE_DEMO_WIDGETS 1 +#else + #define LV_USE_DEMO_WIDGETS 0 +#endif +#if LV_USE_DEMO_WIDGETS + #ifndef LV_DEMO_WIDGETS_SLIDESHOW + #ifdef CONFIG_LV_DEMO_WIDGETS_SLIDESHOW + #define LV_DEMO_WIDGETS_SLIDESHOW 1 + #else + #define LV_DEMO_WIDGETS_SLIDESHOW 0 + #endif + #endif +#endif + +/*Demonstrate the usage of encoder and keyboard*/ +#ifdef CONFIG_LV_USE_DEMO_KEYPAD_AND_ENCODER + #define LV_USE_DEMO_KEYPAD_AND_ENCODER 1 +#else + #define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 +#endif + +/*Benchmark your system*/ +#ifdef CONFIG_LV_USE_DEMO_BENCHMARK + #define LV_USE_DEMO_BENCHMARK 1 +#else + #define LV_USE_DEMO_BENCHMARK 0 +#endif +#if LV_USE_DEMO_BENCHMARK + /*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ + #ifdef CONFIG_LV_DEMO_BENCHMARK_RGB565A8 + #define LV_DEMO_BENCHMARK_RGB565A8 1 + #else + #define LV_DEMO_BENCHMARK_RGB565A8 0 + #endif +#endif + +/*Stress test for LVGL*/ +#ifdef CONFIG_LV_USE_DEMO_STRESS + #define LV_USE_DEMO_STRESS 1 +#else + #define LV_USE_DEMO_STRESS 0 +#endif + +/*Music player demo*/ +#ifdef CONFIG_LV_USE_DEMO_MUSIC + #define LV_USE_DEMO_MUSIC 1 +#else + #define LV_USE_DEMO_MUSIC 0 +#endif +#if LV_USE_DEMO_MUSIC + #ifdef CONFIG_LV_DEMO_MUSIC_SQUARE + #define LV_DEMO_MUSIC_SQUARE 1 + #else + #define LV_DEMO_MUSIC_SQUARE 0 + #endif + #ifdef CONFIG_LV_DEMO_MUSIC_LANDSCAPE + #define LV_DEMO_MUSIC_LANDSCAPE 1 + #else + #define LV_DEMO_MUSIC_LANDSCAPE 0 + #endif + #ifdef CONFIG_LV_DEMO_MUSIC_ROUND + #define LV_DEMO_MUSIC_ROUND 1 + #else + #define LV_DEMO_MUSIC_ROUND 0 + #endif + #ifdef CONFIG_LV_DEMO_MUSIC_LARGE + #define LV_DEMO_MUSIC_LARGE 1 + #else + #define LV_DEMO_MUSIC_LARGE 0 + #endif + #ifdef CONFIG_LV_DEMO_MUSIC_AUTO_PLAY + #define LV_DEMO_MUSIC_AUTO_PLAY 1 + #else + #define LV_DEMO_MUSIC_AUTO_PLAY 0 + #endif +#endif + +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + diff --git a/third-party/lvgl-8.3/port/lv_port_disp.c b/third-party/lvgl-8.3/port/lv_port_disp.c new file mode 100644 index 0000000000000000000000000000000000000000..32103ec1ddd890755561a8a61250119b71b185ad --- /dev/null +++ b/third-party/lvgl-8.3/port/lv_port_disp.c @@ -0,0 +1,418 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: lv_port_disp.c + * Date: 2022-09-05 17:38:05 + * LastEditTime: 2022-03-20 12:11:05 + * Description: This file is for providing the interface of lvgl test + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/03/20 Modify the format and establish the version + */ + +#include +#include +#include "FreeRTOS.h" +#include "fassert.h" +#include "finterrupt.h" +#include "timers.h" +#include "task.h" +#include "fcpu_info.h" +#include + +#include "fmedia_os.h" +#include "fdcdp.h" +#include "fdc.h" +#include "fdp.h" +#include "fdp_hw.h" +#include "fdc_hw.h" +#include "fdcdp_multi_display.h" +#include "lv_port_disp.h" +#include "lv_conf.h" + +/************************** Variable Definitions *****************************/ + +#define FMEDIA_EVT_INTR(index) BIT(index) +#define FMEDIA_CHANNEL_0 0 +#define FMEDIA_CHANNEL_1 1 + +/**********************Macros (Inline Functions) Definitions *********************/ +static TaskHandle_t lvgl_event = NULL; +static EventGroupHandle_t media_event = NULL; +static TaskHandle_t init_task; +static TaskHandle_t hpd_task ; + +static FFreeRTOSMedia *os_media; +static void FFreeRTOSMediaDispFlush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p); +/************************ Function Prototypes ******************************/ +static void FFreeRTOSMediaSendEvent(u32 evt_bits) +{ + FASSERT(media_event); + + BaseType_t x_result = pdFALSE; + BaseType_t xhigher_priority_task_woken = pdFALSE; + /*set the irq event for the task*/ + x_result = xEventGroupSetBitsFromISR(media_event, evt_bits, &xhigher_priority_task_woken); + +} + +static boolean FFreeRTOSMediaWaitEvent(u32 evt_bits, TickType_t wait_delay) +{ + FASSERT(media_event); + + EventBits_t event; + event = xEventGroupWaitBits(media_event, evt_bits, + pdTRUE, pdFALSE, wait_delay);/*wait the irq event for the task*/ + if (event & evt_bits) + { + return TRUE; + } + return FALSE; +} + +static boolean FFreeRTOSMediaClearEvent(EventGroupHandle_t pvEventGroup, const uint32_t ulBitsToClear) +{ + FASSERT(media_event); + + EventBits_t event; + event = xEventGroupClearBits(pvEventGroup, ulBitsToClear);/*clear the intr bits*/ + return TRUE; +} + +/** + * @name: FFreeRTOSMediaHpdConnectCallback + * @msg: the hpd connect event + * @param {void} *args is the instance of dcdp + * @param {u32} index is the channel + * @return Null + */ +static void FFreeRTOSMediaHpdConnectCallback(void *args, u32 index) +{ + FASSERT(args != NULL); + FDcDp *instance_p = (FDcDp *)args; + FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, FDP_TX_INTERRUPT); /*clear interrupt*/ + FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); + instance_p->connect_flg[index] = 1; + printf("Dp:%d connect\r\n", index); + +} + +/** + * @name: FFreeRTOSMediaHpdBreakCallback + * @msg: the hpd disconnect event + * @param {void} *args is the instance of dcdp + * @param {u32} index is the channel + * @return Null + */ +static void FFreeRTOSMediaHpdBreakCallback(void *args, u32 index) +{ + FASSERT(args != NULL); + FDcDp *instance_p = (FDcDp *)args; + FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, FDP_TX_INTERRUPT); /*clear interrupt*/ + instance_p->connect_flg[index] = 0; + FFreeRTOSMediaSendEvent(FMEDIA_EVT_INTR(index)); + printf("Dp:%d disconnect\r\n", index); +} + +/** + * @name: FFreeRTOSMediaAuxTimeoutCallback + * @msg: the aux timeout event + * @param {void} *args is the instance of dcdp + * @param {u32} index is the channel + * @return Null + */ +static void FFreeRTOSMediaAuxTimeoutCallback(void *args, u32 index) +{ + FASSERT(args != NULL); + FDcDp *instance_p = (FDcDp *)args; + FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, FDP_TX_INTERRUPT); /*clear interrupt*/ + printf("Dp:%d aux connect timeout\r\n", index); +} + +/** + * @name: FFreeRTOSMediaAuxErrorCallback + * @msg: the aux error event + * @param {void} *args is the instance of dcdp + * @param {u32} index is the channel + * @return Null + */ +static void FFreeRTOSMediaAuxErrorCallback(void *args, u32 index) +{ + FASSERT(args != NULL); + FDcDp *instance_p = (FDcDp *)args; + FDpChannelRegRead(instance_p->dp_instance_p[index].config.dp_channe_base_addr, FDP_TX_INTERRUPT); /*clear interrupt*/ + printf("Dp:%d aux connect error\r\n", index); +} + +/** + * @name: FFreeRTOSMediaIrqSet + * @msg: set the irq event and instance + * @param {FDcDp} *instance_p is the instance of dcdp + * @return Null + */ +static void FFreeRTOSMediaIrqSet(FDcDp *instance_p) +{ + FASSERT(instance_p != NULL); + u32 cpu_id; + u32 index; + FMediaIntrConfig intr_config; + memset(&intr_config, 0, sizeof(intr_config)); + + GetCpuId(&cpu_id); + InterruptSetTargetCpus(instance_p->dp_instance_p[0].config.irq_num, cpu_id);/*the dc0 and dc1 have the same num of irq_num*/ + + FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_CONNECTED, FFreeRTOSMediaHpdConnectCallback, (void *)instance_p); + FDcDpRegisterHandler(instance_p, FDCDP_HPD_IRQ_DISCONNECTED, FFreeRTOSMediaHpdBreakCallback, (void *)instance_p); + FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_TIMEOUT, FFreeRTOSMediaAuxTimeoutCallback, (void *)instance_p); + FDcDpRegisterHandler(instance_p, FDCDP_AUX_REPLY_ERROR, FFreeRTOSMediaAuxErrorCallback, (void *)instance_p); + + InterruptSetPriority(instance_p->dp_instance_p[0].config.irq_num, FREERTOS_MEDIA_IRQ_PRIORITY);/*dp0 and dp1 have the same irq_num*/ + InterruptInstall(instance_p->dp_instance_p[0].config.irq_num, FDcDpInterruptHandler, instance_p, "media"); + InterruptUmask(instance_p->dp_instance_p[0].config.irq_num); +} + +/** + * @name: FFreeRTOSMediaIrqAllEnable + * @msg: enable the irq + * @param {FDcDp} *instance_p is the instance of dcdp + * @return Null + */ +static void FFreeRTOSMediaIrqAllEnable(FDcDp *instance_p) +{ + int index = 0; + FDcDpIntrEventType event_type = FDCDP_HPD_IRQ_CONNECTED; + for (index = 0; index < FDCDP_INSTANCE_NUM; index++) + { + for (event_type = 0; event_type < FDCDP_INSTANCE_NUM; event_type++) + { + FDcDpIrqEnable(instance_p, index, event_type); + } + } +} + +/** + * @name: FFreeRTOSMediaDeviceInit + * @msg: enable the Dc and Dp + * @param {u32} channel is the dc channel + * @param {u32} width is the width + * @param {u32} height is the height + * @param {u32} multi_mode is multi display mode,0:clone,1:hor,2:ver + * @param {u32} color_depth is the color depth + * @param {u32} refresh_rate is the refresh rate of screen + * @return Null + */ +void FFreeRTOSMediaDeviceInit(u32 channel, u32 width, u32 height, u32 multi_mode, u32 color_depth, u32 refresh_rate) +{ + os_media = FFreeRTOSMediaHwInit(channel, width, height, multi_mode, color_depth, refresh_rate); + FASSERT_MSG(NULL == media_event, "Event group exists."); + FASSERT_MSG((media_event = xEventGroupCreate()) != NULL, "Create event group failed."); + FFreeRTOSMediaIrqSet(&os_media->dcdp_ctrl); + FFreeRTOSMediaIrqAllEnable(&os_media->dcdp_ctrl); +} +/** + * @name: FFreeRTOSMediaChannelDeinit + * @msg: deinit the media + * @param {u32} id is the channel of dcdp + * @return Null + */ +void FFreeRTOSMediaChannelDeinit(u32 id) +{ + taskENTER_CRITICAL(); + vEventGroupDelete(media_event); + media_event = NULL; + FDcDpDeInitialize(&os_media->dcdp_ctrl, id); + taskEXIT_CRITICAL(); /* allow schedule after deinit */ + return ; +} + +/** + * @name: FFreeRTOSMediaHpdHandle + * @msg: handle the hpd event + * @param {u32} channel is the dc channel + * @param {u32} width is the width + * @param {u32} height is the height + * @param {u32} multi_mode is multi display mode,0:clone,1:hor,2:ver + * @param {u32} color_depth is the color depth + * @param {u32} refresh_rate is the refresh rate of screen + * @return Null + */ +void FFreeRTOSMediaHpdHandle(u32 channel, u32 width, u32 height, u32 multi_mode, u32 color_depth, u32 refresh_rate) +{ + u32 index; + u32 ret = FMEDIA_DP_SUCCESS; + u32 start_index; + u32 end_index;//ensure the channel number + + if (channel == FDCDP_PATH_NUM) + { + start_index = 0; + end_index = FDCDP_PATH_NUM; + } + else + { + start_index = channel; + end_index = channel + 1; + } + FFreeRTOSMediaWaitEvent(FMEDIA_EVT_INTR(FMEDIA_CHANNEL_0) | FMEDIA_EVT_INTR(FMEDIA_CHANNEL_1), portMAX_DELAY); + + for (;;) + { + for (index = start_index; index < end_index; index++) + { + if (os_media->dcdp_ctrl.connect_flg[index] == 1) + { + ret = FFreeRTOSMediaHpdReInit(index, width, height, multi_mode, color_depth, refresh_rate); + FFreeRTOSMediaClearEvent(media_event, FMEDIA_EVT_INTR(index)); + if (ret == FMEDIA_DP_SUCCESS) + { + printf("Hpd task finish , reinit the dp success.\r\n"); + } + os_media->dcdp_ctrl.connect_flg[index] == 0; + } + } + vTaskDelay(200); + } +} +/** + * @name: FFreeRTOSPortInit + * @msg: init the lv config and set the instance + * @return null + */ +void FFreeRTOSPortInit(void) +{ + static lv_disp_draw_buf_t draw_buf_dsc_1; + static lv_color_t buf_1[LV_HOR_RES_MAX * 10]; /*A buffer for 10 rows*/ + lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, LV_HOR_RES_MAX * 10); /*Initialize the display buffer*/ + + static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/ + lv_disp_drv_init(&disp_drv); /*Basic initialization*/ + + /*Set the resolution of the display*/ + disp_drv.hor_res = LV_HOR_RES_MAX; + disp_drv.ver_res = LV_VER_RES_MAX; + + /*Used to copy the buffer's content to the display*/ + disp_drv.flush_cb = FFreeRTOSMediaDispFlush; + /*Set a display buffer*/ + disp_drv.draw_buf = &draw_buf_dsc_1; + + /*Finally register the driver*/ + lv_disp_drv_register(&disp_drv); + return; +} + +volatile bool disp_flush_enabled = true; + +/** + * @name: FFreeRTOSDispdEnableUpdate + * @msg: Enable updating the screen (the flushing process) when FMediaDispFlush() is called by LVGL + * @return null + */ +void FFreeRTOSDispdEnableUpdate(void) +{ + disp_flush_enabled = true; +} + +/** + * @name: FFreeRTOSDispdDisableUpdate + * @msg: Disable updating the screen (the flushing process) when FMediaDispFlush() is called by LVGL + * @return null + */ +void FFreeRTOSDispdDisableUpdate(void) +{ + disp_flush_enabled = false; +} + +/** + * @name: FMediaDispFlush + * @msg: flush the framebuffer + * @param {lv_disp_drv_t *} disp_drv is the Display Driver structure to be registered by HAL + * @param {const lv_area_t *} area is the specific area on the display you want to flush + * @param {lv_color_t *} color_p is the image pixel of + * @return null + */ +static void FFreeRTOSMediaDispFlush(lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p) +{ + long int location = 0; + u32 mode ; + if (disp_flush_enabled) + { + + lv_color_int_t *rtt_fbp = (lv_color_int_t *)os_media->dcdp_ctrl.fb_config[0];/*the framebuffer of dc 0*/ + lv_color_int_t *rtt_fbp1 = (lv_color_int_t *)os_media->dcdp_ctrl.fb_config[1];/*the framebuffer of dc 1*/ + mode = os_media->dcdp_ctrl.dc_instance_p[0].multi_mode; + int32_t x; + int32_t y; + if (mode == 0) + { + for (y = area->y1; y <= area->y2; y++) + { + + for (x = area->x1; x <= area->x2; x++) + { + location = (x) + (y) * LV_HOR_RES_MAX; + rtt_fbp[location] = color_p->full; + color_p++; + + } + } + } + else if (mode == 1) + { + for (y = area->y1; y <= area->y2; y++) + { + for (x = area->x1; x <= (area->x2); x++) + { + if (x < area->x2 / 2) + { + location = (x) + (y) * (LV_HOR_RES_MAX); + rtt_fbp[(location) * 2] = (color_p->full); + rtt_fbp[(location) * 2 + 1] = (color_p->full); + } + else + { + location = (x) + (y) * (LV_HOR_RES_MAX); + rtt_fbp1[(location - area->x2 / 2) * 2 ] = (color_p->full); + rtt_fbp1[(location - area->x2 / 2) * 2 + 1 ] = (color_p->full); + } + color_p++; + } + } + } + else + { + for (y = area->y1; y <= area->y2; y++) + { + for (x = area->x1; x <= (area->x2); x++) + { + if (y < LV_VER_RES_MAX / 2) + { + location = (x) + (y) * (LV_HOR_RES_MAX) * 2; + rtt_fbp[location] = (color_p->full); + rtt_fbp[(location) + LV_HOR_RES_MAX] = (color_p->full); + } + else + { + location = (x) + (y - LV_VER_RES_MAX / 2) * (LV_HOR_RES_MAX) * 2 ; + rtt_fbp1[(location) ] = (color_p->full); + rtt_fbp1[(location) + LV_HOR_RES_MAX] = (color_p->full); + } + color_p++; + } + } + } + } + lv_disp_flush_ready(disp_drv); +} diff --git a/third-party/lvgl-8.3/port/lv_port_disp.h b/third-party/lvgl-8.3/port/lv_port_disp.h new file mode 100644 index 0000000000000000000000000000000000000000..e137ad16bd068b9050ee4d0fe72797403988fdde --- /dev/null +++ b/third-party/lvgl-8.3/port/lv_port_disp.h @@ -0,0 +1,94 @@ +/* + * Copyright : (C) 2022 Phytium Information Technology, Inc. + * All Rights Reserved. + * + * This program is OPEN SOURCE software: you can redistribute it and/or modify it + * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd, + * either version 1.0 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the Phytium Public License for more details. + * + * + * FilePath: lv_port_disp.h + * Date: 2022-09-05 17:38:05 + * LastEditTime: 2023-03-20 12:11:05 + * Description: This file is for providing the interface of lvgl test + * + * Modify History: + * Ver   Who        Date         Changes + * ----- ------ -------- -------------------------------------- + * 1.0 Wangzq 2023/03/20 Modify the format and establish the version + */ +/** + * @file lv_port_disp.h + * + */ + +/*Copy this file as "lv_port_disp.h" and set this value to "1" to enable content*/ + +#ifndef LV_PORT_DISP_H +#define LV_PORT_DISP_H + +#define LV_HOR_RES_MAX (640) +#define LV_VER_RES_MAX (480) + +#include "ftypes.h" +#include "fparameters.h" +#ifdef __cplusplus +extern "C" +{ +#endif + +/********************* + * INCLUDES + *********************/ +#if defined(LV_LVGL_H_INCLUDE_SIMPLE) +#include "lvgl.h" +#else +#include "lvgl-8.3/lvgl.h" +#endif + +typedef struct +{ + u32 channel; + u32 width; + u32 height; + u32 multi_mode; + u32 color_depth; + u32 refresh_rate; +} InputParm; + +/********************** + * GLOBAL PROTOTYPES + **********************/ +/* Enable updating the screen (the flushing process) when disp_flush() is called by LVGL + */ +void FFreeRTOSDispdEnableUpdate(void); + +/* Disable updating the screen (the flushing process) when disp_flush() is called by LVGL + */ +void FFreeRTOSDispdDisableUpdate(void); + +/*init the lv config and set the instance*/ +void FFreeRTOSPortInit(void); + +/*deinit the media*/ +void FFreeRTOSMediaChannelDeinit(u32 id); + +/*handle the hpd event*/ +void FFreeRTOSMediaHpdHandle(u32 channel, u32 width, u32 height, u32 multi_mode, u32 color_depth, u32 refresh_rate); + +/*enable the Dc and Dp*/ +void FFreeRTOSMediaDeviceInit(u32 channel, u32 width, u32 height, u32 multi_mode, u32 color_depth, u32 refresh_rate); +/********************** + * MACROS + **********************/ + +#ifdef __cplusplus +} /*extern "C"*/ +#endif + +#endif /*LV_PORT_DISP_TEMPL_H*/ + diff --git a/third-party/lwip-2.1.2/ports/arch/sys_arch.c b/third-party/lwip-2.1.2/ports/arch/sys_arch.c index ecee4fb2f189161fe2a4c7fec5b6fc6b7786c54e..796046da0cbc877555b946ec536e14c715a927fb 100644 --- a/third-party/lwip-2.1.2/ports/arch/sys_arch.c +++ b/third-party/lwip-2.1.2/ports/arch/sys_arch.c @@ -19,7 +19,7 @@ * Modify History: * Ver Who Date Changes * ----- ------ -------- -------------------------------------- - * 1.0 liuzhihong 2022/5/26 first release + * 1.0 liuzhihong 2022/5/26 first release */ /* lwIP includes. */ @@ -32,7 +32,7 @@ #ifdef __aarch64__ #include "faarch64.h" #else - #include "fcp15.h" + #include "faarch32.h" #endif #include "fdebug.h" diff --git a/third-party/lwip-2.1.2/ports/fgmac/ethernetif.c b/third-party/lwip-2.1.2/ports/fgmac/ethernetif.c index 7afe7c69df6f8afb087557097ffb8ea55d400ab2..63a3c81384d6b4c9c5b88f17bdcdda45728b2e63 100644 --- a/third-party/lwip-2.1.2/ports/fgmac/ethernetif.c +++ b/third-party/lwip-2.1.2/ports/fgmac/ethernetif.c @@ -51,12 +51,6 @@ #error "Please include sdkconfig.h first" #endif -#ifndef CONFIG_USE_SYS_TICK - #error "Please enable system tick by CONFIG_USE_SYS_TICK first" -#endif - - - /* The time to block waiting for input. */ #define TIME_WAITING_FOR_INPUT (portMAX_DELAY) diff --git a/third-party/lwip-2.1.2/ports/fxmac/ethernetif.c b/third-party/lwip-2.1.2/ports/fxmac/ethernetif.c index 01dd18b01a0dd093dfe00e0c4b4ba2cf12f0fe90..2c1c5136cc77b536cd78f0ee3789129207f173a0 100644 --- a/third-party/lwip-2.1.2/ports/fxmac/ethernetif.c +++ b/third-party/lwip-2.1.2/ports/fxmac/ethernetif.c @@ -83,6 +83,24 @@ static void ethernetif_start(struct netif *netif) FXmacOsStart(instance_p); } +static void ethernetif_poll(struct netif *netif) +{ + struct LwipPort *lwip_port = (struct LwipPort *)(netif->state); + + if(lwip_port == NULL) + { + FXMAC_LWIP_NET_PRINT_E("%s,lwip_port is NULL\n", __FUNCTION__); + return; + } + FXmacOs *instance_p = (FXmacOs *)(lwip_port->state); + + if(instance_p == NULL) + { + FXMAC_LWIP_NET_PRINT_E("%s,Fxmac instance_p is NULL\n", __FUNCTION__); + return; + } + FXmacOsRecvHandler(instance_p); +} static void ethernetif_deinit(struct netif *netif) { struct LwipPort *xmac_netif_p = (struct LwipPort *)(netif->state); @@ -149,7 +167,7 @@ static struct pbuf *low_level_input(struct netif *netif) FASSERT(netif->state != NULL); struct LwipPort *xmac_netif_p = (struct LwipPort *)(netif->state); FASSERT(xmac_netif_p != NULL); - instance_p = (FXmacOs *)(xmac_netif_p->state) ; + instance_p = (FXmacOs *)(xmac_netif_p->state); return FXmacOsRx(instance_p); } @@ -173,9 +191,7 @@ static void ethernetif_input(struct netif *netif) struct pbuf *p; SYS_ARCH_DECL_PROTECT(lev); - - while (1) - + while (1) { /* move received packet into a new pbuf */ SYS_ARCH_PROTECT(lev); @@ -311,7 +327,7 @@ static err_t low_level_init(struct netif *netif) } else { - netif->mtu = FXMAC_MTU - FXMAC_HDR_SIZE; + netif->mtu = FXMAC_MTU ; } netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | @@ -329,7 +345,7 @@ static err_t low_level_init(struct netif *netif) xmac_netif_p->ops.eth_input = ethernetif_input; xmac_netif_p->ops.eth_deinit = ethernetif_deinit; xmac_netif_p->ops.eth_start = ethernetif_start; - + xmac_netif_p->ops.eth_poll= ethernetif_poll; FXMAC_LWIP_NET_PRINT_I("Ready to leave netif \r\n"); return ERR_OK; } diff --git a/third-party/third-party.mk b/third-party/third-party.mk index fdef814f3e7ae3e0914875cd3c60dae6072d0cb0..d02be19a48ef10225198bf14e242e830faf4a655 100644 --- a/third-party/third-party.mk +++ b/third-party/third-party.mk @@ -183,7 +183,14 @@ endif #CONFIG_USE_SDMMC_CMD ifdef CONFIG_USE_CHERRY_USB -include $(THIRD_PARTY_CUR_DIR)/cherryusb-0.7.0/makefile +include $(THIRD_PARTY_CUR_DIR)/cherryusb/makefile endif #CONFIG_USE_CHERRY_USB +ifdef CONFIG_USE_LVGL + +include $(THIRD_PARTY_CUR_DIR)/lvgl-8.3/lvgl.mk + +endif + +