diff --git a/examples/e-Paper/application_drivers/e-Paper/Config/DEV_Config.c b/examples/e-Paper/application_drivers/e-Paper/Config/DEV_Config.c new file mode 100644 index 000000000..3b92737df --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Config/DEV_Config.c @@ -0,0 +1,439 @@ +/***************************************************************************** +* | File : DEV_Config.c +* | Author : Waveshare team +* | Function : Hardware underlying interface +* | Info : 电子墨水屏硬件底层接口实现 +* 本文件实现了与TuyaOS平台的硬件抽象层对接 +* 包括GPIO控制、SPI通信、延时等基础功能 +*---------------- +* | This version: V1.0 +* | Date : 2025-11-19 +* | Info : 适配TuyaOS平台的版本 +* ----------------------------------------------------------------------------- +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of theex Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +******************************************************************************/ +#include "DEV_Config.h" + +/*============================================================================ + 全局变量定义 +============================================================================*/ + +/** + * @brief GPIO输出模式配置结构体 + * @details 用于配置GPIO为推挽输出模式,默认输出低电平 + * - mode: 推挽输出模式(TUYA_GPIO_PUSH_PULL) + * - direct: 输出方向 + * - level: 初始电平为低 + */ +TUYA_GPIO_BASE_CFG_T out_pin_cfg = { + .mode = TUYA_GPIO_PUSH_PULL, // 推挽输出模式,驱动能力强 + .direct = TUYA_GPIO_OUTPUT, // 设置为输出方向 + .level = TUYA_GPIO_LEVEL_LOW // 初始输出低电平 +}; + +/** + * @brief GPIO输入模式配置结构体 + * @details 用于配置GPIO为上拉输入模式,用于读取按键或状态信号 + * - mode: 上拉输入模式(TUYA_GPIO_PULLUP) + * - direct: 输入方向 + */ +TUYA_GPIO_BASE_CFG_T in_pin_cfg = { + .mode = TUYA_GPIO_PULLUP, // 上拉输入模式,空闲时为高电平 + .direct = TUYA_GPIO_INPUT, // 设置为输入方向 +}; + +/*============================================================================ + GPIO读写函数 +============================================================================*/ + +/** + * @function: DEV_Digital_Write + * @brief: GPIO数字输出函数 + * @details: 向指定GPIO引脚写入高/低电平 + * 这是墨水屏驱动最基础的GPIO控制函数 + * + * @param[in] Pin 要操作的GPIO引脚号(使用TUYA_GPIO_NUM_x宏) + * @param[in] Value 输出电平值 + * - 0: 输出低电平 + * - 1: 输出高电平 + * @return: 无 + */ +void DEV_Digital_Write(UWORD Pin, UBYTE Value) +{ + tkl_gpio_write(Pin, Value); +} + +/** + * @function: DEV_Digital_Read + * @brief: GPIO数字输入读取函数 + * @details: 读取指定GPIO引脚的当前电平状态 + * 主要用于读取墨水屏的BUSY引脚状态 + * + * @param[in] Pin 要读取的GPIO引脚号 + * @return: UBYTE + * - 0: 引脚为低电平 + * - 1: 引脚为高电平 + */ +UBYTE DEV_Digital_Read(UWORD Pin) +{ + TUYA_GPIO_LEVEL_E read_level = 0; // 用于存储读取到的电平值 + + // 调用TuyaOS的GPIO读取函数 + tkl_gpio_read(Pin, &read_level); + + // 将TuyaOS的电平枚举值转换为0/1返回 + if(read_level == TUYA_GPIO_LEVEL_LOW) + return 0; + else + return 1; +} + +/*============================================================================ + SPI通信函数 +============================================================================*/ + +/** + * @function: DEV_SPI_WriteByte + * @brief: SPI发送单字节函数 + * @details: 通过硬件SPI接口发送单个字节数据到墨水屏 + * 使用TuyaOS的SPI驱动接口实现 + * + * @param[in] Value 要发送的字节数据 + * @return: 无 + * + * @note: 此函数使用硬件SPI,速度较快,适合批量数据传输 + */ +void DEV_SPI_WriteByte(uint8_t Value) +{ + tkl_spi_send(SPI_ID, &Value, 1); // 发送1个字节 +} + +/** + * @function: DEV_SPI_Write_nByte + * @brief: SPI批量发送函数 + * @details: 通过硬件SPI接口批量发送多个字节数据 + * 用于发送图像数据等大量数据时效率更高 + * + * @param[in] pData 要发送的数据缓冲区指针 + * @param[in] Len 要发送的数据长度(字节数) + * @return: 无 + */ +void DEV_SPI_Write_nByte(uint8_t *pData, uint32_t Len) +{ + tkl_spi_send(SPI_ID, pData, Len); +} + +/*============================================================================ + GPIO模式配置函数 +============================================================================*/ + +/** + * @function: DEV_GPIO_Mode + * @brief: GPIO模式配置函数 + * @details: 设置指定GPIO引脚的输入/输出模式 + * 某些操作需要动态切换GPIO方向(如软件SPI的双向数据线) + * + * @param[in] Pin 要配置的GPIO引脚号 + * @param[in] Mode 模式选择 + * - 0: 输入模式(带上拉) + * - 1: 输出模式(推挽) + * @return: 无 + */ +void DEV_GPIO_Mode(UWORD Pin, UWORD Mode) +{ + if(Mode == 0) { + // 配置为输入模式 + tkl_gpio_init(Pin, &in_pin_cfg); + } else { + // 配置为输出模式 + tkl_gpio_init(Pin, &out_pin_cfg); + } +} + +/*============================================================================ + 延时函数 +============================================================================*/ + +/** + * @function: DEV_Delay_ms + * @brief: 毫秒级延时函数 + * @details: 让程序暂停执行指定的毫秒数 + * 墨水屏刷新过程中需要多次延时等待 + * + * @param[in] xms 延时时间(毫秒) + * @return: 无 + * + * @note: 使用TuyaOS的系统睡眠函数实现,会让出CPU给其他任务 + */ +void DEV_Delay_ms(UDOUBLE xms) +{ + tal_system_sleep(xms); +} + +/*============================================================================ + GPIO初始化函数 +============================================================================*/ + +/** + * @function: DEV_GPIO_Init + * @brief: 墨水屏GPIO引脚初始化 + * @details: 初始化墨水屏所需的所有GPIO引脚 + * 包括:BUSY(输入)、RST、DC、CS、PWR(输出) + * + * @return: 无 + * + * @note: 墨水屏引脚说明: + * - BUSY: 忙状态指示(输入),低电平表示忙 + * - RST: 复位引脚(输出),低电平复位 + * - DC: 数据/命令选择(输出),高=数据,低=命令 + * - CS: 片选引脚(输出),低电平选中 + * - PWR: 电源控制引脚(输出),高电平开启电源 + */ +void DEV_GPIO_Init(void) +{ + // 初始化BUSY引脚为输入模式(用于读取墨水屏状态) + DEV_GPIO_Mode(EPD_BUSY_PIN, 0); + + // 初始化RST复位引脚为输出模式 + DEV_GPIO_Mode(EPD_RST_PIN, 1); + + // 初始化DC数据/命令选择引脚为输出模式 + DEV_GPIO_Mode(EPD_DC_PIN, 1); + + // 初始化CS片选引脚为输出模式 + DEV_GPIO_Mode(EPD_CS_PIN, 1); + + // 初始化PWR电源控制引脚为输出模式 + DEV_GPIO_Mode(EPD_PWR_PIN, 1); + + // 以下两行被注释,因为使用硬件SPI时不需要手动控制MOSI和SCLK + // DEV_GPIO_Mode(EPD_MOSI_PIN, 0); + // DEV_GPIO_Mode(EPD_SCLK_PIN, 1); + + // 设置CS为高电平(不选中),准备通信时再拉低 + DEV_Digital_Write(EPD_CS_PIN, 1); + + // 开启墨水屏电源 + DEV_Digital_Write(EPD_PWR_PIN, 1); +} + +/*============================================================================ + 软件SPI函数(备用) +============================================================================*/ + +/** + * @function: DEV_SPI_SendnData + * @brief: 软件SPI批量发送函数 + * @details: 通过软件模拟SPI时序发送多个字节 + * 当硬件SPI不可用时使用此函数 + * + * @param[in] Reg 要发送的数据数组指针 + * @return: 无 + * + * @warning: 此函数中sizeof(Reg)获取的是指针大小而非数组大小, + * 实际使用时需要额外传入数据长度参数 + */ +void DEV_SPI_SendnData(UBYTE *Reg) +{ + UDOUBLE size; + size = sizeof(Reg); // 注意:这里获取的是指针大小(4或8字节) + for(UDOUBLE i=0 ; i // 标准整数类型定义(uint8_t, uint16_t等) +#include // 标准输入输出(printf等) +#include // 字符串操作函数(memset, memcpy等) +#include "Debug.h" // 调试日志输出宏定义 + +/*============================================================================ + TuyaOS平台头文件 +============================================================================*/ +#include "tkl_gpio.h" // TuyaOS GPIO操作接口 +#include "tkl_spi.h" // TuyaOS SPI通信接口 +#include "tal_system.h" // TuyaOS 系统函数(如tal_system_sleep延时) +#include "tal_log.h" // TuyaOS 日志输出接口 + +/*============================================================================ + 数据类型定义 +============================================================================*/ +/** + * @brief 数据类型别名定义 + * @details 为了代码可读性和跨平台兼容性,定义以下类型别名: + * - UBYTE: 无符号8位整数,用于存储单字节数据 + * - UWORD: 无符号16位整数,用于存储GPIO引脚号等 + * - UDOUBLE: 无符号32位整数,用于存储延时时间、数据长度等 + */ +#define UBYTE uint8_t // 无符号单字节(0-255) +#define UWORD uint16_t // 无符号双字节(0-65535) +#define UDOUBLE uint32_t // 无符号四字节(0-4294967295) + +/*============================================================================ + GPIO引脚配置 +============================================================================*/ +/** + * @brief 墨水屏GPIO引脚定义 + * @details 定义墨水屏驱动所需的GPIO引脚号 + * 使用 #ifndef 允许在编译时通过宏定义覆盖默认值 + * + * 墨水屏引脚功能说明: + * ┌──────────────┬────────────┬─────────────────────────────────┐ + * │ 引脚名称 │ 默认GPIO │ 功能说明 │ + * ├──────────────┼────────────┼─────────────────────────────────┤ + * │ EPD_SCLK_PIN │ GPIO2 │ SPI时钟信号(Serial Clock) │ + * │ EPD_MOSI_PIN │ GPIO4 │ SPI主出从入(Master Out) │ + * │ EPD_CS_PIN │ GPIO3 │ SPI片选信号(Chip Select) │ + * │ EPD_DC_PIN │ GPIO7 │ 数据/命令选择(Data/Command) │ + * │ EPD_RST_PIN │ GPIO8 │ 硬件复位信号(Reset) │ + * │ EPD_BUSY_PIN │ GPIO6 │ 忙状态指示(Busy Status) │ + * │ EPD_PWR_PIN │ GPIO28 │ 电源控制(Power Control) │ + * └──────────────┴────────────┴─────────────────────────────────┘ + */ + +/* SPI时钟引脚 - 用于同步SPI数据传输 */ +#ifndef EPD_SCLK_PIN +#define EPD_SCLK_PIN TUYA_GPIO_NUM_2 +#endif + +/* SPI数据输出引脚 - 主机向墨水屏发送数据 */ +#ifndef EPD_MOSI_PIN +#define EPD_MOSI_PIN TUYA_GPIO_NUM_4 +#endif + +/* SPI片选引脚 - 低电平有效,选中墨水屏进行通信 */ +#ifndef EPD_CS_PIN +#define EPD_CS_PIN TUYA_GPIO_NUM_3 +#endif + +/* 数据/命令选择引脚 - 高电平发送数据,低电平发送命令 */ +/* 注意:GPIO7 与 KEY_PIN 冲突,已禁用按键功能 */ +#ifndef EPD_DC_PIN +#define EPD_DC_PIN TUYA_GPIO_NUM_7 +#endif + +/* 硬件复位引脚 - 低电平复位墨水屏 */ +#ifndef EPD_RST_PIN +#define EPD_RST_PIN TUYA_GPIO_NUM_8 +#endif + +/* 忙状态引脚 - 墨水屏刷新时输出低电平,空闲时输出高电平 */ +#ifndef EPD_BUSY_PIN +#define EPD_BUSY_PIN TUYA_GPIO_NUM_6 +#endif + +/* 电源控制引脚 - 控制墨水屏电源,高电平开启 */ +#ifndef EPD_PWR_PIN +#define EPD_PWR_PIN TUYA_GPIO_NUM_28 +#endif + +/*============================================================================ + SPI通信配置 +============================================================================*/ +/** + * @brief SPI通信参数定义 + * @details 配置与墨水屏通信的SPI接口参数 + * + * SPI_ID: 使用的SPI外设编号(TuyaOS平台的SPI1) + * SPI_FREQ: SPI时钟频率,设置为4MHz + * 墨水屏通常支持的最高频率约为10MHz + * 4MHz是较为稳定的配置值 + */ +#define SPI_ID TUYA_SPI_NUM_1 // 使用SPI1外设 +#define SPI_FREQ 4 * 1000 * 1000 // SPI时钟频率: 4MHz + +/*============================================================================ + 函数声明 +============================================================================*/ + +/*------------------------------ GPIO操作函数 ------------------------------*/ + +/** + * @brief GPIO数字输出 + * @param Pin GPIO引脚号 + * @param Value 输出电平(0=低电平,1=高电平) + */ +void DEV_Digital_Write(UWORD Pin, UBYTE Value); + +/** + * @brief GPIO数字读取 + * @param Pin GPIO引脚号 + * @return 引脚电平(0=低电平,1=高电平) + */ +UBYTE DEV_Digital_Read(UWORD Pin); + +/*------------------------------ SPI通信函数 ------------------------------*/ + +/** + * @brief SPI发送单字节(硬件SPI) + * @param Value 要发送的字节 + */ +void DEV_SPI_WriteByte(UBYTE Value); + +/** + * @brief SPI批量发送(硬件SPI) + * @param pData 数据缓冲区指针 + * @param Len 数据长度 + */ +void DEV_SPI_Write_nByte(uint8_t *pData, uint32_t Len); + +/** + * @brief 软件SPI发送单字节 + * @param Reg 要发送的字节 + */ +void DEV_SPI_SendData(UBYTE Reg); + +/** + * @brief 软件SPI批量发送 + * @param Reg 数据数组指针 + */ +void DEV_SPI_SendnData(UBYTE *Reg); + +/** + * @brief 软件SPI读取单字节 + * @return 读取到的字节 + */ +UBYTE DEV_SPI_ReadData(void); + +/*------------------------------ 延时函数 ------------------------------*/ + +/** + * @brief 毫秒级延时 + * @param xms 延时毫秒数 + */ +void DEV_Delay_ms(UDOUBLE xms); + +/*------------------------------ 模块控制函数 ------------------------------*/ + +/** + * @brief 墨水屏模块初始化 + * @details 初始化SPI接口和所有GPIO引脚 + * @return 0=成功 + */ +UBYTE DEV_Module_Init(void); + +/** + * @brief 墨水屏模块退出 + * @details 释放所有硬件资源 + */ +void DEV_Module_Exit(void); + + +#endif /* _DEV_CONFIG_H_ */ diff --git a/examples/e-Paper/application_drivers/e-Paper/Config/Debug.h b/examples/e-Paper/application_drivers/e-Paper/Config/Debug.h new file mode 100644 index 000000000..d0985ff4d --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Config/Debug.h @@ -0,0 +1,124 @@ +/***************************************************************************** +* | File : Debug.h +* | Author : Waveshare team +* | Function : 调试日志输出接口 +* | Info : 调试信息输出宏定义 +* 提供统一的日志输出接口,便于调试和问题定位 +* +* 使用说明: +* - PR_DEBUG: 调试级别日志,用于开发调试 +* - PR_INFO: 信息级别日志,用于正常运行信息 +* - PR_WARN: 警告级别日志,用于潜在问题提示 +* - PR_ERR: 错误级别日志,用于错误信息输出 +* - Debug: 条件编译调试输出 +* +* Image scanning +* Please use progressive scanning to generate images or fonts +* (图像扫描:请使用逐行扫描方式生成图像或字体) +*---------------- +* | This version: V2.0 +* | Date : 2018-10-30 +* | Info : +* 1.USE_DEBUG -> DEBUG, If you need to see the debug information, +* clear the execution: make DEBUG=-DDEBUG +* (如果需要查看调试信息,请在编译时添加 -DDEBUG 宏定义) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# + +******************************************************************************/ +#ifndef __DEBUG_H +#define __DEBUG_H + +/*============================================================================ + 头文件包含 +============================================================================*/ +#include // 标准输入输出(printf函数) +#include "tal_log.h" // TuyaOS日志输出接口 + +/*============================================================================ + 日志输出宏定义 +============================================================================*/ +/** + * @brief 墨水屏模块日志输出宏 + * @details 封装TuyaOS的日志输出接口,为墨水屏模块添加统一的日志前缀[EPD] + * 便于在系统日志中快速定位墨水屏相关信息 + * + * 日志级别说明: + * ┌───────────┬─────────────────────────────────────────────────────────┐ + * │ 宏名称 │ 使用场景 │ + * ├───────────┼─────────────────────────────────────────────────────────┤ + * │ PR_DEBUG │ 调试信息,开发阶段使用,如变量值、执行流程跟踪 │ + * │ PR_INFO │ 运行信息,记录正常的运行状态,如初始化完成、刷新开始 │ + * │ PR_WARN │ 警告信息,提示潜在问题,如参数越界但已处理 │ + * │ PR_ERR │ 错误信息,记录错误状态,如初始化失败、通信超时 │ + * └───────────┴─────────────────────────────────────────────────────────┘ + * + * 使用示例: + * PR_DEBUG("pixel value: %d", pixel); + * PR_INFO("EPD init success"); + * PR_WARN("image size exceeds display area"); + * PR_ERR("SPI communication timeout"); + */ + +/* 调试级别日志 - 最详细的日志信息,用于开发调试 */ +#ifndef PR_DEBUG +#define PR_DEBUG(fmt, ...) TAL_PR_DEBUG("[EPD] " fmt, ##__VA_ARGS__) +#endif + +/* 信息级别日志 - 记录正常的运行信息 */ +#ifndef PR_INFO +#define PR_INFO(fmt, ...) TAL_PR_INFO("[EPD] " fmt, ##__VA_ARGS__) +#endif + +/* 警告级别日志 - 记录潜在问题或异常情况 */ +#ifndef PR_WARN +#define PR_WARN(fmt, ...) TAL_PR_WARN("[EPD] " fmt, ##__VA_ARGS__) +#endif + +/* 错误级别日志 - 记录错误和异常 */ +#ifndef PR_ERR +#define PR_ERR(fmt, ...) TAL_PR_ERR("[EPD] " fmt, ##__VA_ARGS__) +#endif + +/*============================================================================ + 条件编译调试宏 +============================================================================*/ +/** + * @brief 条件编译调试输出宏 + * @details 根据DEBUG宏的定义情况选择不同的调试输出方式: + * - DEBUG已定义:使用标准printf输出,带"Debug:"前缀 + * - DEBUG未定义:使用PR_DEBUG输出到TuyaOS日志系统 + * + * 编译选项: + * - 启用详细调试:编译时添加 -DDEBUG 参数 + * - 关闭详细调试:不添加 -DDEBUG 参数(默认) + * + * 使用示例: + * Debug("init complete, width=%d, height=%d\n", width, height); + */ +#if DEBUG + /* DEBUG模式:使用printf直接输出到控制台 */ + #define Debug(__info,...) printf("Debug: " __info, ##__VA_ARGS__) +#else + /* 非DEBUG模式:使用TuyaOS日志系统输出 */ + #define Debug PR_DEBUG +#endif + +#endif /* __DEBUG_H */ diff --git a/examples/e-Paper/application_drivers/e-Paper/Fonts/font12.c b/examples/e-Paper/application_drivers/e-Paper/Fonts/font12.c new file mode 100644 index 000000000..485c3f019 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Fonts/font12.c @@ -0,0 +1,1384 @@ +/** + ****************************************************************************** + * @file Font12.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +// +// Font data for Courier New 12pt +// + +const uint8_t Font12_Table[] = +{ + // @0 ' ' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @12 '!' (7 pixels wide) + 0x00, // + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @24 '"' (7 pixels wide) + 0x00, // + 0x6C, // ## ## + 0x48, // # # + 0x48, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @36 '#' (7 pixels wide) + 0x00, // + 0x14, // # # + 0x14, // # # + 0x28, // # # + 0x7C, // ##### + 0x28, // # # + 0x7C, // ##### + 0x28, // # # + 0x50, // # # + 0x50, // # # + 0x00, // + 0x00, // + + // @48 '$' (7 pixels wide) + 0x00, // + 0x10, // # + 0x38, // ### + 0x40, // # + 0x40, // # + 0x38, // ### + 0x48, // # # + 0x70, // ### + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + + // @60 '%' (7 pixels wide) + 0x00, // + 0x20, // # + 0x50, // # # + 0x20, // # + 0x0C, // ## + 0x70, // ### + 0x08, // # + 0x14, // # # + 0x08, // # + 0x00, // + 0x00, // + 0x00, // + + // @72 '&' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x18, // ## + 0x20, // # + 0x20, // # + 0x54, // # # # + 0x48, // # # + 0x34, // ## # + 0x00, // + 0x00, // + 0x00, // + + // @84 ''' (7 pixels wide) + 0x00, // + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @96 '(' (7 pixels wide) + 0x00, // + 0x08, // # + 0x08, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x08, // # + 0x08, // # + 0x00, // + + // @108 ')' (7 pixels wide) + 0x00, // + 0x20, // # + 0x20, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x20, // # + 0x00, // + + // @120 '*' (7 pixels wide) + 0x00, // + 0x10, // # + 0x7C, // ##### + 0x10, // # + 0x28, // # # + 0x28, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @132 '+' (7 pixels wide) + 0x00, // + 0x00, // + 0x10, // # + 0x10, // # + 0x10, // # + 0xFE, // ####### + 0x10, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @144 ',' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x18, // ## + 0x10, // # + 0x30, // ## + 0x20, // # + 0x00, // + + // @156 '-' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @168 '.' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x30, // ## + 0x30, // ## + 0x00, // + 0x00, // + 0x00, // + + // @180 '/' (7 pixels wide) + 0x00, // + 0x04, // # + 0x04, // # + 0x08, // # + 0x08, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x20, // # + 0x40, // # + 0x00, // + 0x00, // + + // @192 '0' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @204 '1' (7 pixels wide) + 0x00, // + 0x30, // ## + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @216 '2' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x04, // # + 0x08, // # + 0x10, // # + 0x20, // # + 0x44, // # # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @228 '3' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x04, // # + 0x18, // ## + 0x04, // # + 0x04, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @240 '4' (7 pixels wide) + 0x00, // + 0x0C, // ## + 0x14, // # # + 0x14, // # # + 0x24, // # # + 0x44, // # # + 0x7E, // ###### + 0x04, // # + 0x0E, // ### + 0x00, // + 0x00, // + 0x00, // + + // @252 '5' (7 pixels wide) + 0x00, // + 0x3C, // #### + 0x20, // # + 0x20, // # + 0x38, // ### + 0x04, // # + 0x04, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @264 '6' (7 pixels wide) + 0x00, // + 0x1C, // ### + 0x20, // # + 0x40, // # + 0x78, // #### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @276 '7' (7 pixels wide) + 0x00, // + 0x7C, // ##### + 0x44, // # # + 0x04, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @288 '8' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @300 '9' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x3C, // #### + 0x04, // # + 0x08, // # + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + + // @312 ':' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x30, // ## + 0x30, // ## + 0x00, // + 0x00, // + 0x30, // ## + 0x30, // ## + 0x00, // + 0x00, // + 0x00, // + + // @324 ';' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x18, // ## + 0x18, // ## + 0x00, // + 0x00, // + 0x18, // ## + 0x30, // ## + 0x20, // # + 0x00, // + 0x00, // + + // @336 '<' (7 pixels wide) + 0x00, // + 0x00, // + 0x0C, // ## + 0x10, // # + 0x60, // ## + 0x80, // # + 0x60, // ## + 0x10, // # + 0x0C, // ## + 0x00, // + 0x00, // + 0x00, // + + // @348 '=' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x7C, // ##### + 0x00, // + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @360 '>' (7 pixels wide) + 0x00, // + 0x00, // + 0xC0, // ## + 0x20, // # + 0x18, // ## + 0x04, // # + 0x18, // ## + 0x20, // # + 0xC0, // ## + 0x00, // + 0x00, // + 0x00, // + + // @372 '?' (7 pixels wide) + 0x00, // + 0x00, // + 0x18, // ## + 0x24, // # # + 0x04, // # + 0x08, // # + 0x10, // # + 0x00, // + 0x30, // ## + 0x00, // + 0x00, // + 0x00, // + + // @384 '@' (7 pixels wide) + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x4C, // # ## + 0x54, // # # # + 0x54, // # # # + 0x4C, // # ## + 0x40, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + + // @396 'A' (7 pixels wide) + 0x00, // + 0x30, // ## + 0x10, // # + 0x28, // # # + 0x28, // # # + 0x28, // # # + 0x7C, // ##### + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @408 'B' (7 pixels wide) + 0x00, // + 0xF8, // ##### + 0x44, // # # + 0x44, // # # + 0x78, // #### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xF8, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @420 'C' (7 pixels wide) + 0x00, // + 0x3C, // #### + 0x44, // # # + 0x40, // # + 0x40, // # + 0x40, // # + 0x40, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @432 'D' (7 pixels wide) + 0x00, // + 0xF0, // #### + 0x48, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x48, // # # + 0xF0, // #### + 0x00, // + 0x00, // + 0x00, // + + // @444 'E' (7 pixels wide) + 0x00, // + 0xFC, // ###### + 0x44, // # # + 0x50, // # # + 0x70, // ### + 0x50, // # # + 0x40, // # + 0x44, // # # + 0xFC, // ###### + 0x00, // + 0x00, // + 0x00, // + + // @456 'F' (7 pixels wide) + 0x00, // + 0x7E, // ###### + 0x22, // # # + 0x28, // # # + 0x38, // ### + 0x28, // # # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + + // @468 'G' (7 pixels wide) + 0x00, // + 0x3C, // #### + 0x44, // # # + 0x40, // # + 0x40, // # + 0x4E, // # ### + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @480 'H' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x7C, // ##### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @492 'I' (7 pixels wide) + 0x00, // + 0x7C, // ##### + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @504 'J' (7 pixels wide) + 0x00, // + 0x3C, // #### + 0x08, // # + 0x08, // # + 0x08, // # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + 0x00, // + + // @516 'K' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x48, // # # + 0x50, // # # + 0x70, // ### + 0x48, // # # + 0x44, // # # + 0xE6, // ### ## + 0x00, // + 0x00, // + 0x00, // + + // @528 'L' (7 pixels wide) + 0x00, // + 0x70, // ### + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x24, // # # + 0x24, // # # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @540 'M' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x6C, // ## ## + 0x6C, // ## ## + 0x54, // # # # + 0x54, // # # # + 0x44, // # # + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @552 'N' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x64, // ## # + 0x64, // ## # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x4C, // # ## + 0xEC, // ### ## + 0x00, // + 0x00, // + 0x00, // + + // @564 'O' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @576 'P' (7 pixels wide) + 0x00, // + 0x78, // #### + 0x24, // # # + 0x24, // # # + 0x24, // # # + 0x38, // ### + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + + // @588 'Q' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x1C, // ### + 0x00, // + 0x00, // + + // @600 'R' (7 pixels wide) + 0x00, // + 0xF8, // ##### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x78, // #### + 0x48, // # # + 0x44, // # # + 0xE2, // ### # + 0x00, // + 0x00, // + 0x00, // + + // @612 'S' (7 pixels wide) + 0x00, // + 0x34, // ## # + 0x4C, // # ## + 0x40, // # + 0x38, // ### + 0x04, // # + 0x04, // # + 0x64, // ## # + 0x58, // # ## + 0x00, // + 0x00, // + 0x00, // + + // @624 'T' (7 pixels wide) + 0x00, // + 0xFE, // ####### + 0x92, // # # # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @636 'U' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @648 'V' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x28, // # # + 0x28, // # # + 0x28, // # # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @660 'W' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x28, // # # + 0x00, // + 0x00, // + 0x00, // + + // @672 'X' (7 pixels wide) + 0x00, // + 0xC6, // ## ## + 0x44, // # # + 0x28, // # # + 0x10, // # + 0x10, // # + 0x28, // # # + 0x44, // # # + 0xC6, // ## ## + 0x00, // + 0x00, // + 0x00, // + + // @684 'Y' (7 pixels wide) + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x28, // # # + 0x28, // # # + 0x10, // # + 0x10, // # + 0x10, // # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @696 'Z' (7 pixels wide) + 0x00, // + 0x7C, // ##### + 0x44, // # # + 0x08, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x44, // # # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @708 '[' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x38, // ### + 0x00, // + + // @720 '\' (7 pixels wide) + 0x00, // + 0x40, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x10, // # + 0x10, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x00, // + 0x00, // + + // @732 ']' (7 pixels wide) + 0x00, // + 0x38, // ### + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x38, // ### + 0x00, // + + // @744 '^' (7 pixels wide) + 0x00, // + 0x10, // # + 0x10, // # + 0x28, // # # + 0x44, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @756 '_' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0xFE, // ####### + + // @768 '`' (7 pixels wide) + 0x00, // + 0x10, // # + 0x08, // # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @780 'a' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x38, // ### + 0x44, // # # + 0x3C, // #### + 0x44, // # # + 0x44, // # # + 0x3E, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @792 'b' (7 pixels wide) + 0x00, // + 0xC0, // ## + 0x40, // # + 0x58, // # ## + 0x64, // ## # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xF8, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @804 'c' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x3C, // #### + 0x44, // # # + 0x40, // # + 0x40, // # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @816 'd' (7 pixels wide) + 0x00, // + 0x0C, // ## + 0x04, // # + 0x34, // ## # + 0x4C, // # ## + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x3E, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @828 'e' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x38, // ### + 0x44, // # # + 0x7C, // ##### + 0x40, // # + 0x40, // # + 0x3C, // #### + 0x00, // + 0x00, // + 0x00, // + + // @840 'f' (7 pixels wide) + 0x00, // + 0x1C, // ### + 0x20, // # + 0x7C, // ##### + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @852 'g' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x36, // ## ## + 0x4C, // # ## + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x3C, // #### + 0x04, // # + 0x38, // ### + 0x00, // + + // @864 'h' (7 pixels wide) + 0x00, // + 0xC0, // ## + 0x40, // # + 0x58, // # ## + 0x64, // ## # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @876 'i' (7 pixels wide) + 0x00, // + 0x10, // # + 0x00, // + 0x70, // ### + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @888 'j' (7 pixels wide) + 0x00, // + 0x10, // # + 0x00, // + 0x78, // #### + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x08, // # + 0x70, // ### + 0x00, // + + // @900 'k' (7 pixels wide) + 0x00, // + 0xC0, // ## + 0x40, // # + 0x5C, // # ### + 0x48, // # # + 0x70, // ### + 0x50, // # # + 0x48, // # # + 0xDC, // ## ### + 0x00, // + 0x00, // + 0x00, // + + // @912 'l' (7 pixels wide) + 0x00, // + 0x30, // ## + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @924 'm' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xE8, // ### # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0xFE, // ####### + 0x00, // + 0x00, // + 0x00, // + + // @936 'n' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xD8, // ## ## + 0x64, // ## # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0xEE, // ### ### + 0x00, // + 0x00, // + 0x00, // + + // @948 'o' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x38, // ### + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x38, // ### + 0x00, // + 0x00, // + 0x00, // + + // @960 'p' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xD8, // ## ## + 0x64, // ## # + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x78, // #### + 0x40, // # + 0xE0, // ### + 0x00, // + + // @972 'q' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x36, // ## ## + 0x4C, // # ## + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x3C, // #### + 0x04, // # + 0x0E, // ### + 0x00, // + + // @984 'r' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x6C, // ## ## + 0x30, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @996 's' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x3C, // #### + 0x44, // # # + 0x38, // ### + 0x04, // # + 0x44, // # # + 0x78, // #### + 0x00, // + 0x00, // + 0x00, // + + // @1008 't' (7 pixels wide) + 0x00, // + 0x00, // + 0x20, // # + 0x7C, // ##### + 0x20, // # + 0x20, // # + 0x20, // # + 0x22, // # # + 0x1C, // ### + 0x00, // + 0x00, // + 0x00, // + + // @1020 'u' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xCC, // ## ## + 0x44, // # # + 0x44, // # # + 0x44, // # # + 0x4C, // # ## + 0x36, // ## ## + 0x00, // + 0x00, // + 0x00, // + + // @1032 'v' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x44, // # # + 0x28, // # # + 0x28, // # # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + + // @1044 'w' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x54, // # # # + 0x54, // # # # + 0x54, // # # # + 0x28, // # # + 0x00, // + 0x00, // + 0x00, // + + // @1056 'x' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xCC, // ## ## + 0x48, // # # + 0x30, // ## + 0x30, // ## + 0x48, // # # + 0xCC, // ## ## + 0x00, // + 0x00, // + 0x00, // + + // @1068 'y' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0xEE, // ### ### + 0x44, // # # + 0x24, // # # + 0x28, // # # + 0x18, // ## + 0x10, // # + 0x10, // # + 0x78, // #### + 0x00, // + + // @1080 'z' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x7C, // ##### + 0x48, // # # + 0x10, // # + 0x20, // # + 0x44, // # # + 0x7C, // ##### + 0x00, // + 0x00, // + 0x00, // + + // @1092 '{' (7 pixels wide) + 0x00, // + 0x08, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x08, // # + 0x00, // + + // @1104 '|' (7 pixels wide) + 0x00, // + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + + // @1116 '}' (7 pixels wide) + 0x00, // + 0x20, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x08, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x20, // # + 0x00, // + + // @1128 '~' (7 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x24, // # # + 0x58, // # ## + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // +}; + +sFONT Font12 = { + Font12_Table, + 7, /* Width */ + 12, /* Height */ +}; + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/examples/e-Paper/application_drivers/e-Paper/Fonts/font12CN.c b/examples/e-Paper/application_drivers/e-Paper/Fonts/font12CN.c new file mode 100644 index 000000000..d7e3a361c --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Fonts/font12CN.c @@ -0,0 +1,119 @@ +/** + ****************************************************************************** + * @file Font12.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +// +// Font data for Courier New 12pt +// + +const CH_CN Font12CN_Table[] = +{ +/*-- 文字: 你 --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"你"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0xC0,0x1D,0x80,0x3B,0xFF,0x3B,0x07, +0x3F,0x77,0x7E,0x76,0xF8,0x70,0xFB,0xFE,0xFB,0xFE,0x3F,0x77,0x3F,0x77,0x3E,0x73, +0x38,0x70,0x38,0x70,0x3B,0xE0,0x00,0x00,0x00,0x00}}, + +/*-- 文字: 好 --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"好"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x73,0xFF,0x70,0x0F,0xFE,0x1E, +0x7E,0x3C,0x6E,0x38,0xEE,0x30,0xEF,0xFF,0xFC,0x30,0x7C,0x30,0x38,0x30,0x3E,0x30, +0x7E,0x30,0xE0,0x30,0xC1,0xF0,0x00,0x00,0x00,0x00}}, + +/*-- 文字: 树 --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"树"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0E,0x30,0x0E,0x3F,0xEE,0x30,0xEE, +0xFC,0xFF,0x76,0xCE,0x77,0xFE,0x7B,0xFE,0xFF,0xFE,0xF3,0xDE,0xF3,0xCE,0x37,0xEE, +0x3E,0x6E,0x3C,0x0E,0x30,0x3E,0x00,0x00,0x00,0x00}}, + +/*-- 文字: 莓 --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"莓"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x70,0xFF,0xFF,0x3E,0x70,0x38,0x00, +0x7F,0xFF,0xE0,0x00,0xFF,0xFC,0x3B,0x8C,0x39,0xCC,0xFF,0xFF,0x73,0x9C,0x71,0xDC, +0x7F,0xFF,0x00,0x1C,0x01,0xF8,0x00,0x00,0x00,0x00}}, + +/*-- 文字: 派 --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"派"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0xFF,0xF0,0x3E,0x00,0x0E,0x1F, +0xCF,0xFB,0xFF,0xF8,0x3F,0xFF,0x0F,0xFF,0x7F,0xD8,0x7F,0xDC,0x6F,0xCE,0xED,0xFF, +0xFD,0xF7,0xF9,0xC0,0x00,0x00,0x00,0x00,0x00,0x00}}, + +/*-- 文字: a --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"a"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x3E,0x00,0x67,0x00,0x07,0x80,0x0F,0x80,0x7F,0x80,0xE3,0x80,0xE7,0x80,0xE7,0x80, +0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}, + +/*-- 文字: b --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"b"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00, +0x7F,0x00,0x7B,0x80,0x71,0xC0,0x71,0xC0,0x71,0xC0,0x71,0xC0,0x71,0xC0,0x7B,0x80, +0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}, + +/*-- 文字: c --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"c"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x3F,0x00,0x73,0x00,0xF0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xF0,0x00,0x73,0x00, +0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}, + +/*-- 文字: A --*/ +/*-- 微软雅黑12; 此字体下对应的点阵为:宽x高=16x21 --*/ +{{"A"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x1F,0x00,0x1F,0x00, +0x1F,0x00,0x3B,0x80,0x3B,0x80,0x71,0x80,0x7F,0xC0,0x71,0xC0,0xE0,0xE0,0xE0,0xE0, +0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} +}; + +cFONT Font12CN = { + Font12CN_Table, + sizeof(Font12CN_Table)/sizeof(CH_CN), /*size of table*/ + 11, /* ASCII Width */ + 16, /* Width */ + 21, /* Height */ +}; + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/examples/e-Paper/application_drivers/e-Paper/Fonts/font16.c b/examples/e-Paper/application_drivers/e-Paper/Fonts/font16.c new file mode 100644 index 000000000..58ce59b7b --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Fonts/font16.c @@ -0,0 +1,1764 @@ +/** + ****************************************************************************** + * @file font16.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text font16 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +// +// Font data for Courier New 12pt +// + +const uint8_t Font16_Table[] = +{ + // @0 ' ' (11 pixels wide) + 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, // + + // @32 '!' (11 pixels wide) + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @64 '"' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1D, 0xC0, // ### ### + 0x1D, 0xC0, // ### ### + 0x08, 0x80, // # # + 0x08, 0x80, // # # + 0x08, 0x80, // # # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @96 '#' (11 pixels wide) + 0x00, 0x00, // + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x3F, 0xC0, // ######## + 0x1B, 0x00, // ## ## + 0x3F, 0xC0, // ######## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @128 '$' (11 pixels wide) + 0x04, 0x00, // # + 0x1F, 0x80, // ###### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x38, 0x00, // ### + 0x1E, 0x00, // #### + 0x0F, 0x00, // #### + 0x03, 0x80, // ### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @160 '%' (11 pixels wide) + 0x00, 0x00, // + 0x18, 0x00, // ## + 0x24, 0x00, // # # + 0x24, 0x00, // # # + 0x18, 0xC0, // ## ## + 0x07, 0x80, // #### + 0x1E, 0x00, // #### + 0x31, 0x80, // ## ## + 0x02, 0x40, // # # + 0x02, 0x40, // # # + 0x01, 0x80, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @192 '&' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x0F, 0x00, // #### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x1D, 0x80, // ### ## + 0x37, 0x00, // ## ### + 0x33, 0x00, // ## ## + 0x1D, 0x80, // ### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @224 ''' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x02, 0x00, // # + 0x02, 0x00, // # + 0x02, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @256 '(' (11 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0E, 0x00, // ### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0E, 0x00, // ### + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @288 ')' (11 pixels wide) + 0x00, 0x00, // + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x1C, 0x00, // ### + 0x18, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @320 '*' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x3F, 0xC0, // ######## + 0x0F, 0x00, // #### + 0x1F, 0x80, // ###### + 0x19, 0x80, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @352 '+' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x3F, 0x80, // ####### + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x04, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @384 ',' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x0C, 0x00, // ## + 0x08, 0x00, // # + 0x08, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + + // @416 '-' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @448 '.' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @480 '/' (11 pixels wide) + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @512 '0' (11 pixels wide) + 0x00, 0x00, // + 0x0E, 0x00, // ### + 0x1B, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x0E, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @544 '1' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x3E, 0x00, // ##### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @576 '2' (11 pixels wide) + 0x00, 0x00, // + 0x0F, 0x00, // #### + 0x19, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x30, 0x00, // ## + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @608 '3' (11 pixels wide) + 0x00, 0x00, // + 0x3F, 0x00, // ###### + 0x61, 0x80, // ## ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x1F, 0x00, // ##### + 0x03, 0x80, // ### + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x61, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @640 '4' (11 pixels wide) + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x0F, 0x00, // #### + 0x0B, 0x00, // # ## + 0x1B, 0x00, // ## ## + 0x13, 0x00, // # ## + 0x33, 0x00, // ## ## + 0x3F, 0x80, // ####### + 0x03, 0x00, // ## + 0x0F, 0x80, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @672 '5' (11 pixels wide) + 0x00, 0x00, // + 0x1F, 0x80, // ###### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x1F, 0x00, // ##### + 0x11, 0x80, // # ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x21, 0x80, // # ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @704 '6' (11 pixels wide) + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x1C, 0x00, // ### + 0x18, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x00, // ## ### + 0x39, 0x80, // ### ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x19, 0x80, // ## ## + 0x0F, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @736 '7' (11 pixels wide) + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x43, 0x00, // # ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @768 '8' (11 pixels wide) + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @800 '9' (11 pixels wide) + 0x00, 0x00, // + 0x1E, 0x00, // #### + 0x33, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0x80, // ### ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x07, 0x00, // ### + 0x3C, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @832 ':' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @864 ';' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x08, 0x00, // # + 0x08, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @896 '<' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0xC0, // ## + 0x03, 0x00, // ## + 0x04, 0x00, // # + 0x18, 0x00, // ## + 0x60, 0x00, // ## + 0x18, 0x00, // ## + 0x04, 0x00, // # + 0x03, 0x00, // ## + 0x00, 0xC0, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @928 '=' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0xC0, // ######### + 0x00, 0x00, // + 0x7F, 0xC0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @960 '>' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x60, 0x00, // ## + 0x18, 0x00, // ## + 0x04, 0x00, // # + 0x03, 0x00, // ## + 0x00, 0xC0, // ## + 0x03, 0x00, // ## + 0x04, 0x00, // # + 0x18, 0x00, // ## + 0x60, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @992 '?' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x01, 0x80, // ## + 0x07, 0x00, // ### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1024 '@' (11 pixels wide) + 0x00, 0x00, // + 0x0E, 0x00, // ### + 0x11, 0x00, // # # + 0x21, 0x00, // # # + 0x21, 0x00, // # # + 0x27, 0x00, // # ### + 0x29, 0x00, // # # # + 0x29, 0x00, // # # # + 0x27, 0x00, // # ### + 0x20, 0x00, // # + 0x11, 0x00, // # # + 0x0E, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1056 'A' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x00, // ###### + 0x0F, 0x00, // #### + 0x09, 0x00, // # # + 0x19, 0x80, // ## ## + 0x19, 0x80, // ## ## + 0x1F, 0x80, // ###### + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x79, 0xE0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1088 'B' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7F, 0x00, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1120 'C' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x40, // ##### # + 0x30, 0xC0, // ## ## + 0x60, 0x40, // ## # + 0x60, 0x00, // ## + 0x60, 0x00, // ## + 0x60, 0x00, // ## + 0x60, 0x40, // ## # + 0x30, 0x80, // ## # + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1152 'D' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x31, 0x80, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x31, 0x80, // ## ## + 0x7F, 0x00, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1184 'E' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x80, // ######## + 0x30, 0x80, // ## # + 0x30, 0x80, // ## # + 0x32, 0x00, // ## # + 0x3E, 0x00, // ##### + 0x32, 0x00, // ## # + 0x30, 0x80, // ## # + 0x30, 0x80, // ## # + 0x7F, 0x80, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1216 'F' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0xC0, // ######### + 0x30, 0x40, // ## # + 0x30, 0x40, // ## # + 0x32, 0x00, // ## # + 0x3E, 0x00, // ##### + 0x32, 0x00, // ## # + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x7C, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1248 'G' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1E, 0x80, // #### # + 0x31, 0x80, // ## ## + 0x60, 0x80, // ## # + 0x60, 0x00, // ## + 0x60, 0x00, // ## + 0x67, 0xC0, // ## ##### + 0x61, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1280 'H' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x80, // ####### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1312 'I' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xC0, // ######## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1344 'J' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xC0, // ####### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x63, 0x00, // ## ## + 0x63, 0x00, // ## ## + 0x63, 0x00, // ## ## + 0x3E, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1376 'K' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x33, 0x00, // ## ## + 0x36, 0x00, // ## ## + 0x3C, 0x00, // #### + 0x3E, 0x00, // ##### + 0x33, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x79, 0xC0, // #### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1408 'L' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7E, 0x00, // ###### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x40, // ## # + 0x18, 0x40, // ## # + 0x18, 0x40, // ## # + 0x7F, 0xC0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1440 'M' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0xE0, 0xE0, // ### ### + 0x60, 0xC0, // ## ## + 0x71, 0xC0, // ### ### + 0x7B, 0xC0, // #### #### + 0x6A, 0xC0, // ## # # ## + 0x6E, 0xC0, // ## ### ## + 0x64, 0xC0, // ## # ## + 0x60, 0xC0, // ## ## + 0xFB, 0xE0, // ##### ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1472 'N' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x73, 0xC0, // ### #### + 0x31, 0x80, // ## ## + 0x39, 0x80, // ### ## + 0x3D, 0x80, // #### ## + 0x35, 0x80, // ## # ## + 0x37, 0x80, // ## #### + 0x33, 0x80, // ## ### + 0x31, 0x80, // ## ## + 0x79, 0x80, // #### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1504 'O' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1536 'P' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x7E, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1568 'Q' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x0C, 0xC0, // ## ## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1600 'R' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x00, // ####### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3E, 0x00, // ##### + 0x33, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7C, 0xE0, // ##### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1632 'S' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x80, // ###### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x38, 0x00, // ### + 0x1F, 0x00, // ##### + 0x03, 0x80, // ### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1664 'T' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x80, // ######## + 0x4C, 0x80, // # ## # + 0x4C, 0x80, // # ## # + 0x4C, 0x80, // # ## # + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1696 'U' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1728 'V' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x0A, 0x00, // # # + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1760 'W' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0xFB, 0xE0, // ##### ##### + 0x60, 0xC0, // ## ## + 0x64, 0xC0, // ## # ## + 0x6E, 0xC0, // ## ### ## + 0x6E, 0xC0, // ## ### ## + 0x2A, 0x80, // # # # # + 0x3B, 0x80, // ### ### + 0x3B, 0x80, // ### ### + 0x31, 0x80, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1792 'X' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x1B, 0x00, // ## ## + 0x31, 0x80, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1824 'Y' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x79, 0xE0, // #### #### + 0x30, 0xC0, // ## ## + 0x19, 0x80, // ## ## + 0x0F, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1856 'Z' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x80, // ####### + 0x21, 0x80, // # ## + 0x23, 0x00, // # ## + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x0C, 0x00, // ## + 0x18, 0x80, // ## # + 0x30, 0x80, // ## # + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1888 '[' (11 pixels wide) + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1920 '\' (11 pixels wide) + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1952 ']' (11 pixels wide) + 0x00, 0x00, // + 0x1E, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1E, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1984 '^' (11 pixels wide) + 0x04, 0x00, // # + 0x0A, 0x00, // # # + 0x0A, 0x00, // # # + 0x11, 0x00, // # # + 0x20, 0x80, // # # + 0x20, 0x80, // # # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2016 '_' (11 pixels wide) + 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, // + 0xFF, 0xE0, // ########### + + // @2048 '`' (11 pixels wide) + 0x08, 0x00, // # + 0x04, 0x00, // # + 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, // + + // @2080 'a' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x1F, 0x80, // ###### + 0x31, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0xC0, // ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2112 'b' (11 pixels wide) + 0x00, 0x00, // + 0x70, 0x00, // ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x00, // ## ### + 0x39, 0x80, // ### ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x39, 0x80, // ### ## + 0x77, 0x00, // ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2144 'c' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1E, 0x80, // #### # + 0x31, 0x80, // ## ## + 0x60, 0x80, // ## # + 0x60, 0x00, // ## + 0x60, 0x80, // ## # + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2176 'd' (11 pixels wide) + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x1D, 0x80, // ### ## + 0x33, 0x80, // ## ### + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0xC0, // ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2208 'e' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x60, 0xC0, // ## ## + 0x7F, 0xC0, // ######### + 0x60, 0x00, // ## + 0x30, 0xC0, // ## ## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2240 'f' (11 pixels wide) + 0x00, 0x00, // + 0x07, 0xE0, // ###### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0x80, // ####### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2272 'g' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1D, 0xC0, // ### ### + 0x33, 0x80, // ## ### + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0x80, // ### ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2304 'h' (11 pixels wide) + 0x00, 0x00, // + 0x70, 0x00, // ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x00, // ## ### + 0x39, 0x80, // ### ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2336 'i' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x00, 0x00, // + 0x1E, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2368 'j' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x00, 0x00, // + 0x3F, 0x00, // ###### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x3E, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2400 'k' (11 pixels wide) + 0x00, 0x00, // + 0x70, 0x00, // ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x80, // ## #### + 0x36, 0x00, // ## ## + 0x3C, 0x00, // #### + 0x3C, 0x00, // #### + 0x36, 0x00, // ## ## + 0x33, 0x00, // ## ## + 0x77, 0xC0, // ### ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2432 'l' (11 pixels wide) + 0x00, 0x00, // + 0x1E, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2464 'm' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x80, // ######## + 0x36, 0xC0, // ## ## ## + 0x36, 0xC0, // ## ## ## + 0x36, 0xC0, // ## ## ## + 0x36, 0xC0, // ## ## ## + 0x36, 0xC0, // ## ## ## + 0x76, 0xE0, // ### ## ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2496 'n' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x77, 0x00, // ### ### + 0x39, 0x80, // ### ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2528 'o' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x31, 0x80, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x60, 0xC0, // ## ## + 0x31, 0x80, // ## ## + 0x1F, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2560 'p' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x77, 0x00, // ### ### + 0x39, 0x80, // ### ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x39, 0x80, // ### ## + 0x37, 0x00, // ## ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x7C, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2592 'q' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1D, 0xC0, // ### ### + 0x33, 0x80, // ## ### + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x61, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0x80, // ### ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2624 'r' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0x80, // #### ### + 0x1C, 0xC0, // ### ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x7F, 0x00, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2656 's' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x80, // ###### + 0x31, 0x80, // ## ## + 0x3C, 0x00, // #### + 0x1F, 0x00, // ##### + 0x03, 0x80, // ### + 0x31, 0x80, // ## ## + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2688 't' (11 pixels wide) + 0x00, 0x00, // + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x7F, 0x00, // ####### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x80, // ## # + 0x0F, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2720 'u' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x73, 0x80, // ### ### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x33, 0x80, // ## ### + 0x1D, 0xC0, // ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2752 'v' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x31, 0x80, // ## ## + 0x31, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x1B, 0x00, // ## ## + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2784 'w' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0xF1, 0xE0, // #### #### + 0x60, 0xC0, // ## ## + 0x64, 0xC0, // ## # ## + 0x6E, 0xC0, // ## ### ## + 0x3B, 0x80, // ### ### + 0x3B, 0x80, // ### ### + 0x31, 0x80, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2816 'x' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7B, 0xC0, // #### #### + 0x1B, 0x00, // ## ## + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x0E, 0x00, // ### + 0x1B, 0x00, // ## ## + 0x7B, 0xC0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2848 'y' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x79, 0xE0, // #### #### + 0x30, 0xC0, // ## ## + 0x19, 0x80, // ## ## + 0x19, 0x80, // ## ## + 0x0B, 0x00, // # ## + 0x0F, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x3E, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2880 'z' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x80, // ####### + 0x21, 0x80, // # ## + 0x03, 0x00, // ## + 0x0E, 0x00, // ### + 0x18, 0x00, // ## + 0x30, 0x80, // ## # + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2912 '{' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2944 '|' (11 pixels wide) + 0x00, 0x00, // + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2976 '}' (11 pixels wide) + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3008 '~' (11 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x18, 0x00, // ## + 0x24, 0x80, // # # # + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // +}; + +sFONT Font16 = { + Font16_Table, + 11, /* Width */ + 16, /* Height */ +}; + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/examples/e-Paper/application_drivers/e-Paper/Fonts/font20.c b/examples/e-Paper/application_drivers/e-Paper/Fonts/font20.c new file mode 100644 index 000000000..697e3eddb --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Fonts/font20.c @@ -0,0 +1,2142 @@ +/** + ****************************************************************************** + * @file font20.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text font20 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +// Character bitmaps for Courier New 15pt +const uint8_t Font20_Table[] = +{ + // @0 ' ' (14 pixels wide) + 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, // + + // @40 '!' (14 pixels wide) + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x02, 0x00, // # + 0x02, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @80 '"' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1C, 0xE0, // ### ### + 0x1C, 0xE0, // ### ### + 0x1C, 0xE0, // ### ### + 0x08, 0x40, // # # + 0x08, 0x40, // # # + 0x08, 0x40, // # # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @120 '#' (14 pixels wide) + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @160 '$' (14 pixels wide) + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x07, 0xE0, // ###### + 0x0F, 0xE0, // ####### + 0x18, 0x60, // ## ## + 0x18, 0x00, // ## + 0x1F, 0x00, // ##### + 0x0F, 0xC0, // ###### + 0x00, 0xE0, // ### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x1F, 0xC0, // ####### + 0x1F, 0x80, // ###### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @200 '%' (14 pixels wide) + 0x00, 0x00, // + 0x1C, 0x00, // ### + 0x22, 0x00, // # # + 0x22, 0x00, // # # + 0x22, 0x00, // # # + 0x1C, 0x60, // ### ## + 0x01, 0xE0, // #### + 0x0F, 0x80, // ##### + 0x3C, 0x00, // #### + 0x31, 0xC0, // ## ### + 0x02, 0x20, // # # + 0x02, 0x20, // # # + 0x02, 0x20, // # # + 0x01, 0xC0, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @240 '&' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0xE0, // ##### + 0x0F, 0xE0, // ####### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x0F, 0x30, // #### ## + 0x1F, 0xF0, // ######### + 0x19, 0xE0, // ## #### + 0x18, 0xC0, // ## ## + 0x1F, 0xF0, // ######### + 0x07, 0xB0, // #### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @280 ''' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x01, 0x00, // # + 0x01, 0x00, // # + 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, // + + // @320 '(' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @360 ')' (14 pixels wide) + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @400 '*' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1B, 0x60, // ## ## ## + 0x1F, 0xE0, // ######## + 0x07, 0x80, // #### + 0x07, 0x80, // #### + 0x0F, 0xC0, // ###### + 0x0C, 0xC0, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @440 '+' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @480 ',' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @520 '-' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @560 '.' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @600 '/' (14 pixels wide) + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @640 '0' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x1F, 0xC0, // ####### + 0x18, 0xC0, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x1F, 0xC0, // ####### + 0x0F, 0x80, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @680 '1' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x1F, 0x00, // ##### + 0x1F, 0x00, // ##### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @720 '2' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x1F, 0xC0, // ####### + 0x38, 0xE0, // ### ### + 0x30, 0x60, // ## ## + 0x00, 0x60, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x18, 0x00, // ## + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @760 '3' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x3F, 0xC0, // ######## + 0x30, 0xE0, // ## ### + 0x00, 0x60, // ## + 0x00, 0xE0, // ### + 0x07, 0xC0, // ##### + 0x07, 0xC0, // ##### + 0x00, 0xE0, // ### + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x60, 0xE0, // ## ### + 0x7F, 0xC0, // ######### + 0x3F, 0x80, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @800 '4' (14 pixels wide) + 0x00, 0x00, // + 0x01, 0xC0, // ### + 0x03, 0xC0, // #### + 0x03, 0xC0, // #### + 0x06, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x30, 0xC0, // ## ## + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x00, 0xC0, // ## + 0x03, 0xE0, // ##### + 0x03, 0xE0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @840 '5' (14 pixels wide) + 0x00, 0x00, // + 0x1F, 0xC0, // ####### + 0x1F, 0xC0, // ####### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x1F, 0x80, // ###### + 0x1F, 0xC0, // ####### + 0x18, 0xE0, // ## ### + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x30, 0xE0, // ## ### + 0x3F, 0xC0, // ######## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @880 '6' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0xE0, // ##### + 0x0F, 0xE0, // ####### + 0x1E, 0x00, // #### + 0x18, 0x00, // ## + 0x38, 0x00, // ### + 0x37, 0x80, // ## #### + 0x3F, 0xC0, // ######## + 0x38, 0xE0, // ### ### + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x18, 0xE0, // ## ### + 0x1F, 0xC0, // ####### + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @920 '7' (14 pixels wide) + 0x00, 0x00, // + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x30, 0x60, // ## ## + 0x00, 0x60, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @960 '8' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x1F, 0xC0, // ####### + 0x38, 0xE0, // ### ### + 0x30, 0x60, // ## ## + 0x38, 0xE0, // ### ### + 0x1F, 0xC0, // ####### + 0x1F, 0xC0, // ####### + 0x38, 0xE0, // ### ### + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x38, 0xE0, // ### ### + 0x1F, 0xC0, // ####### + 0x0F, 0x80, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1000 '9' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x00, // #### + 0x1F, 0xC0, // ####### + 0x38, 0xC0, // ### ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x38, 0xE0, // ### ### + 0x1F, 0xE0, // ######## + 0x0F, 0x60, // #### ## + 0x00, 0xE0, // ### + 0x00, 0xC0, // ## + 0x03, 0xC0, // #### + 0x3F, 0x80, // ####### + 0x3E, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1040 ':' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x03, 0x80, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1080 ';' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x01, 0xC0, // ### + 0x01, 0xC0, // ### + 0x01, 0xC0, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x04, 0x00, // # + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1120 '<' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x30, // ## + 0x00, 0xF0, // #### + 0x03, 0xC0, // #### + 0x07, 0x00, // ### + 0x1C, 0x00, // ### + 0x78, 0x00, // #### + 0x1C, 0x00, // ### + 0x07, 0x00, // ### + 0x03, 0xC0, // #### + 0x00, 0xF0, // #### + 0x00, 0x30, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1160 '=' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0xF0, // ########### + 0x7F, 0xF0, // ########### + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0xF0, // ########### + 0x7F, 0xF0, // ########### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1200 '>' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x30, 0x00, // ## + 0x3C, 0x00, // #### + 0x0F, 0x00, // #### + 0x03, 0x80, // ### + 0x00, 0xE0, // ### + 0x00, 0x78, // #### + 0x00, 0xE0, // ### + 0x03, 0x80, // ### + 0x0F, 0x00, // #### + 0x3C, 0x00, // #### + 0x30, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1240 '?' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x0F, 0x80, // ##### + 0x1F, 0xC0, // ####### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x00, 0x60, // ## + 0x01, 0xC0, // ### + 0x03, 0x80, // ### + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1280 '@' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x80, // ### + 0x0C, 0x80, // ## # + 0x08, 0x40, // # # + 0x10, 0x40, // # # + 0x10, 0x40, // # # + 0x11, 0xC0, // # ### + 0x12, 0x40, // # # # + 0x12, 0x40, // # # # + 0x12, 0x40, // # # # + 0x11, 0xC0, // # ### + 0x10, 0x00, // # + 0x08, 0x00, // # + 0x08, 0x40, // # # + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1320 'A' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x80, // ###### + 0x1F, 0x80, // ###### + 0x03, 0x80, // ### + 0x06, 0xC0, // ## ## + 0x06, 0xC0, // ## ## + 0x0C, 0xC0, // ## ## + 0x0C, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x30, 0x30, // ## ## + 0x78, 0x78, // #### #### + 0x78, 0x78, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1360 'B' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x80, // ####### + 0x3F, 0xC0, // ######## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0xE0, // ## ### + 0x1F, 0xC0, // ####### + 0x1F, 0xE0, // ######## + 0x18, 0x70, // ## ### + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xE0, // ######### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1400 'C' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB0, // #### ## + 0x0F, 0xF0, // ######## + 0x1C, 0x70, // ### ### + 0x38, 0x30, // ### ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x38, 0x30, // ### ## + 0x1C, 0x70, // ### ### + 0x0F, 0xE0, // ####### + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1440 'D' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7F, 0x80, // ######## + 0x7F, 0xC0, // ######### + 0x30, 0xE0, // ## ### + 0x30, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x70, // ## ### + 0x30, 0xE0, // ## ### + 0x7F, 0xC0, // ######### + 0x7F, 0x80, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1480 'E' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x19, 0x80, // ## ## + 0x1F, 0x80, // ###### + 0x1F, 0x80, // ###### + 0x19, 0x80, // ## ## + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1520 'F' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x19, 0x80, // ## ## + 0x1F, 0x80, // ###### + 0x1F, 0x80, // ###### + 0x19, 0x80, // ## ## + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x3F, 0x00, // ###### + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1560 'G' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB0, // #### ## + 0x1F, 0xF0, // ######### + 0x18, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x31, 0xF8, // ## ###### + 0x31, 0xF8, // ## ###### + 0x30, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x1F, 0xF0, // ######### + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1600 'H' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1640 'I' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1680 'J' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x03, 0xF8, // ####### + 0x03, 0xF8, // ####### + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x30, 0xE0, // ## ### + 0x3F, 0xC0, // ######## + 0x0F, 0x80, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1720 'K' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3E, 0xF8, // ##### ##### + 0x3E, 0xF8, // ##### ##### + 0x18, 0xE0, // ## ### + 0x19, 0x80, // ## ## + 0x1B, 0x00, // ## ## + 0x1F, 0x00, // ##### + 0x1D, 0x80, // ### ## + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x18, 0x60, // ## ## + 0x3E, 0x78, // ##### #### + 0x3E, 0x38, // ##### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1760 'L' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0x00, // ###### + 0x3F, 0x00, // ###### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x30, // ## ## + 0x0C, 0x30, // ## ## + 0x0C, 0x30, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1800 'M' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0x78, // #### #### + 0x78, 0x78, // #### #### + 0x38, 0x70, // ### ### + 0x3C, 0xF0, // #### #### + 0x34, 0xB0, // ## # # ## + 0x37, 0xB0, // ## #### ## + 0x37, 0xB0, // ## #### ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x30, 0x30, // ## ## + 0x7C, 0xF8, // ##### ##### + 0x7C, 0xF8, // ##### ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1840 'N' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x39, 0xF0, // ### ##### + 0x3D, 0xF0, // #### ##### + 0x1C, 0x60, // ### ## + 0x1E, 0x60, // #### ## + 0x1E, 0x60, // #### ## + 0x1B, 0x60, // ## ## ## + 0x1B, 0x60, // ## ## ## + 0x19, 0xE0, // ## #### + 0x19, 0xE0, // ## #### + 0x18, 0xE0, // ## ### + 0x3E, 0xE0, // ##### ### + 0x3E, 0x60, // ##### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1880 'O' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x0F, 0xC0, // ###### + 0x1C, 0xE0, // ### ### + 0x38, 0x70, // ### ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x70, // ### ### + 0x1C, 0xE0, // ### ### + 0x0F, 0xC0, // ###### + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1920 'P' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xC0, // ######## + 0x3F, 0xE0, // ######### + 0x18, 0x70, // ## ### + 0x18, 0x30, // ## ## + 0x18, 0x30, // ## ## + 0x18, 0x70, // ## ### + 0x1F, 0xE0, // ######## + 0x1F, 0xC0, // ####### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x3F, 0x00, // ###### + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @1960 'Q' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x0F, 0xC0, // ###### + 0x1C, 0xE0, // ### ### + 0x38, 0x70, // ### ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x70, // ### ### + 0x1C, 0xE0, // ### ### + 0x0F, 0xC0, // ###### + 0x07, 0x80, // #### + 0x07, 0xB0, // #### ## + 0x0F, 0xF0, // ######## + 0x0C, 0xE0, // ## ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2000 'R' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xC0, // ######## + 0x3F, 0xE0, // ######### + 0x18, 0x70, // ## ### + 0x18, 0x30, // ## ## + 0x18, 0x70, // ## ### + 0x1F, 0xE0, // ######## + 0x1F, 0xC0, // ####### + 0x18, 0xE0, // ## ### + 0x18, 0x60, // ## ## + 0x18, 0x70, // ## ### + 0x3E, 0x38, // ##### ### + 0x3E, 0x18, // ##### ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2040 'S' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x0F, 0xB0, // ##### ## + 0x1F, 0xF0, // ######### + 0x38, 0x70, // ### ### + 0x30, 0x30, // ## ## + 0x38, 0x00, // ### + 0x1F, 0x80, // ###### + 0x07, 0xE0, // ###### + 0x00, 0x70, // ### + 0x30, 0x30, // ## ## + 0x38, 0x70, // ### ### + 0x3F, 0xE0, // ######### + 0x37, 0xC0, // ## ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2080 'T' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x0F, 0xC0, // ###### + 0x0F, 0xC0, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2120 'U' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x1C, 0xE0, // ### ### + 0x0F, 0xC0, // ###### + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2160 'V' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x30, 0x60, // ## ## + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2200 'W' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x7C, 0x7C, // ##### ##### + 0x7C, 0x7C, // ##### ##### + 0x30, 0x18, // ## ## + 0x33, 0x98, // ## ### ## + 0x33, 0x98, // ## ### ## + 0x33, 0x98, // ## ### ## + 0x36, 0xD8, // ## ## ## ## + 0x16, 0xD0, // # ## ## # + 0x1C, 0x70, // ### ### + 0x1C, 0x70, // ### ### + 0x1C, 0x70, // ### ### + 0x18, 0x30, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2240 'X' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x0D, 0x80, // ## ## + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x0D, 0x80, // ## ## + 0x18, 0xC0, // ## ## + 0x30, 0x60, // ## ## + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2280 'Y' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x18, 0x60, // ## ## + 0x0C, 0xC0, // ## ## + 0x07, 0x80, // #### + 0x07, 0x80, // #### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x0F, 0xC0, // ###### + 0x0F, 0xC0, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2320 'Z' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2360 '[' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0xC0, // #### + 0x03, 0xC0, // #### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0xC0, // #### + 0x03, 0xC0, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2400 '\' (14 pixels wide) + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x01, 0x80, // ## + 0x01, 0x80, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0x60, // ## + 0x00, 0x60, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2440 ']' (14 pixels wide) + 0x00, 0x00, // + 0x0F, 0x00, // #### + 0x0F, 0x00, // #### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x0F, 0x00, // #### + 0x0F, 0x00, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2480 '^' (14 pixels wide) + 0x00, 0x00, // + 0x02, 0x00, // # + 0x07, 0x00, // ### + 0x0D, 0x80, // ## ## + 0x18, 0xC0, // ## ## + 0x30, 0x60, // ## ## + 0x20, 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, // + + // @2520 '_' (14 pixels wide) + 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, // + 0xFF, 0xFC, // ############## + 0xFF, 0xFC, // ############## + + // @2560 '`' (14 pixels wide) + 0x00, 0x00, // + 0x04, 0x00, // # + 0x03, 0x00, // ## + 0x00, 0x80, // # + 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, // + + // @2600 'a' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0F, 0xC0, // ###### + 0x1F, 0xE0, // ######## + 0x00, 0x60, // ## + 0x0F, 0xE0, // ####### + 0x1F, 0xE0, // ######## + 0x38, 0x60, // ### ## + 0x30, 0xE0, // ## ### + 0x3F, 0xF0, // ########## + 0x1F, 0x70, // ##### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2640 'b' (14 pixels wide) + 0x00, 0x00, // + 0x70, 0x00, // ### + 0x70, 0x00, // ### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x37, 0x80, // ## #### + 0x3F, 0xE0, // ######### + 0x38, 0x60, // ### ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x60, // ### ## + 0x7F, 0xE0, // ########## + 0x77, 0x80, // ### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2680 'c' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB0, // #### ## + 0x1F, 0xF0, // ######### + 0x18, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x38, 0x30, // ### ## + 0x1F, 0xF0, // ######### + 0x0F, 0xC0, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2720 'd' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x70, // ### + 0x00, 0x70, // ### + 0x00, 0x30, // ## + 0x00, 0x30, // ## + 0x07, 0xB0, // #### ## + 0x1F, 0xF0, // ######### + 0x18, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x70, // ### ### + 0x1F, 0xF8, // ########## + 0x07, 0xB8, // #### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2760 'e' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x3F, 0xF0, // ########## + 0x3F, 0xF0, // ########## + 0x30, 0x00, // ## + 0x18, 0x30, // ## ## + 0x1F, 0xF0, // ######### + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2800 'f' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0xF0, // ###### + 0x07, 0xF0, // ####### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2840 'g' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB8, // #### ### + 0x1F, 0xF8, // ########## + 0x18, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x18, 0x70, // ## ### + 0x1F, 0xF0, // ######### + 0x07, 0xB0, // #### ## + 0x00, 0x30, // ## + 0x00, 0x70, // ### + 0x0F, 0xE0, // ####### + 0x0F, 0xC0, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + + // @2880 'h' (14 pixels wide) + 0x00, 0x00, // + 0x38, 0x00, // ### + 0x38, 0x00, // ### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x1B, 0xC0, // ## #### + 0x1F, 0xE0, // ######## + 0x1C, 0x60, // ### ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2920 'i' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x1F, 0x00, // ##### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @2960 'j' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xC0, // ####### + 0x1F, 0xC0, // ####### + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x00, 0xC0, // ## + 0x01, 0xC0, // ### + 0x3F, 0x80, // ####### + 0x3F, 0x00, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + + // @3000 'k' (14 pixels wide) + 0x00, 0x00, // + 0x38, 0x00, // ### + 0x38, 0x00, // ### + 0x18, 0x00, // ## + 0x18, 0x00, // ## + 0x1B, 0xE0, // ## ##### + 0x1B, 0xE0, // ## ##### + 0x1B, 0x00, // ## ## + 0x1E, 0x00, // #### + 0x1E, 0x00, // #### + 0x1B, 0x00, // ## ## + 0x19, 0x80, // ## ## + 0x39, 0xF0, // ### ##### + 0x39, 0xF0, // ### ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3040 'l' (14 pixels wide) + 0x00, 0x00, // + 0x1F, 0x00, // ##### + 0x1F, 0x00, // ##### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3080 'm' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x7E, 0xE0, // ###### ### + 0x7F, 0xF0, // ########### + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x33, 0x30, // ## ## ## + 0x7B, 0xB8, // #### ### ### + 0x7B, 0xB8, // #### ### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3120 'n' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3B, 0xC0, // ### #### + 0x3F, 0xE0, // ######### + 0x1C, 0x60, // ### ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3160 'o' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0x80, // #### + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x18, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x07, 0x80, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3200 'p' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x77, 0x80, // ### #### + 0x7F, 0xE0, // ########## + 0x38, 0x60, // ### ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x38, 0x60, // ### ## + 0x3F, 0xE0, // ######### + 0x37, 0x80, // ## #### + 0x30, 0x00, // ## + 0x30, 0x00, // ## + 0x7C, 0x00, // ##### + 0x7C, 0x00, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @3240 'q' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xB8, // #### ### + 0x1F, 0xF8, // ########## + 0x18, 0x70, // ## ### + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x30, 0x30, // ## ## + 0x18, 0x70, // ## ### + 0x1F, 0xF0, // ######### + 0x07, 0xB0, // #### ## + 0x00, 0x30, // ## + 0x00, 0x30, // ## + 0x00, 0xF8, // ##### + 0x00, 0xF8, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + + // @3280 'r' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xE0, // #### ### + 0x3D, 0xF0, // #### ##### + 0x0F, 0x30, // #### ## + 0x0E, 0x00, // ### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0xC0, // ######## + 0x3F, 0xC0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3320 's' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x07, 0xE0, // ###### + 0x1F, 0xE0, // ######## + 0x18, 0x60, // ## ## + 0x1E, 0x00, // #### + 0x0F, 0xC0, // ###### + 0x01, 0xE0, // #### + 0x18, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0x80, // ###### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3360 't' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x3F, 0xE0, // ######### + 0x3F, 0xE0, // ######### + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x00, // ## + 0x0C, 0x30, // ## ## + 0x0F, 0xF0, // ######## + 0x07, 0xC0, // ##### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3400 'u' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x38, 0xE0, // ### ### + 0x38, 0xE0, // ### ### + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0x60, // ## ## + 0x18, 0xE0, // ## ### + 0x1F, 0xF0, // ######### + 0x0F, 0x70, // #### ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3440 'v' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x0D, 0x80, // ## ## + 0x0D, 0x80, // ## ## + 0x07, 0x00, // ### + 0x07, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3480 'w' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x32, 0x60, // ## # ## + 0x32, 0x60, // ## # ## + 0x37, 0xE0, // ## ###### + 0x1D, 0xC0, // ### ### + 0x1D, 0xC0, // ### ### + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3520 'x' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x0C, 0xC0, // ## ## + 0x07, 0x80, // #### + 0x03, 0x00, // ## + 0x07, 0x80, // #### + 0x0C, 0xC0, // ## ## + 0x3C, 0xF0, // #### #### + 0x3C, 0xF0, // #### #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3560 'y' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x78, 0xF0, // #### #### + 0x78, 0xF0, // #### #### + 0x30, 0x60, // ## ## + 0x18, 0xC0, // ## ## + 0x18, 0xC0, // ## ## + 0x0D, 0x80, // ## ## + 0x0F, 0x80, // ##### + 0x07, 0x00, // ### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x00, // ## + 0x7F, 0x00, // ####### + 0x7F, 0x00, // ####### + 0x00, 0x00, // + 0x00, 0x00, // + + // @3600 'z' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x18, 0xC0, // ## ## + 0x01, 0x80, // ## + 0x03, 0x00, // ## + 0x06, 0x00, // ## + 0x0C, 0x60, // ## ## + 0x1F, 0xE0, // ######## + 0x1F, 0xE0, // ######## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3640 '{' (14 pixels wide) + 0x00, 0x00, // + 0x01, 0xC0, // ### + 0x03, 0xC0, // #### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x07, 0x00, // ### + 0x0E, 0x00, // ### + 0x07, 0x00, // ### + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0xC0, // #### + 0x01, 0xC0, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3680 '|' (14 pixels wide) + 0x00, 0x00, // + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x03, 0x00, // ## + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3720 '}' (14 pixels wide) + 0x00, 0x00, // + 0x1C, 0x00, // ### + 0x1E, 0x00, // #### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x07, 0x00, // ### + 0x03, 0x80, // ### + 0x07, 0x00, // ### + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x06, 0x00, // ## + 0x1E, 0x00, // #### + 0x1C, 0x00, // ### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + + // @3760 '~' (14 pixels wide) + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x0E, 0x00, // ### + 0x3F, 0x30, // ###### ## + 0x33, 0xF0, // ## ###### + 0x01, 0xE0, // #### + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // + 0x00, 0x00, // +}; + + +sFONT Font20 = { + Font20_Table, + 14, /* Width */ + 20, /* Height */ +}; + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/examples/e-Paper/application_drivers/e-Paper/Fonts/font24.c b/examples/e-Paper/application_drivers/e-Paper/Fonts/font24.c new file mode 100644 index 000000000..fea332129 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Fonts/font24.c @@ -0,0 +1,2520 @@ +/** + ****************************************************************************** + * @file font24.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text font24 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +const uint8_t Font24_Table [] = +{ + // @0 ' ' (17 pixels wide) + 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, // + + // @72 '!' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x01, 0x00, 0x00, // # + 0x01, 0x00, 0x00, // # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @144 '"' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0E, 0x70, 0x00, // ### ### + 0x0E, 0x70, 0x00, // ### ### + 0x0E, 0x70, 0x00, // ### ### + 0x04, 0x20, 0x00, // # # + 0x04, 0x20, 0x00, // # # + 0x04, 0x20, 0x00, // # # + 0x04, 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, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @216 '#' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x06, 0x60, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @288 '$' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x07, 0xB0, 0x00, // #### ## + 0x0F, 0xF0, 0x00, // ######## + 0x18, 0x70, 0x00, // ## ### + 0x18, 0x70, 0x00, // ## ### + 0x1C, 0x00, 0x00, // ### + 0x0F, 0x80, 0x00, // ##### + 0x07, 0xE0, 0x00, // ###### + 0x00, 0xF0, 0x00, // #### + 0x18, 0x30, 0x00, // ## ## + 0x1C, 0x30, 0x00, // ### ## + 0x1C, 0x70, 0x00, // ### ### + 0x1F, 0xE0, 0x00, // ######## + 0x1B, 0xC0, 0x00, // ## #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @360 '%' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0x80, 0x00, // #### + 0x0F, 0xC0, 0x00, // ###### + 0x1C, 0xE0, 0x00, // ### ### + 0x18, 0x60, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x1C, 0xE0, 0x00, // ### ### + 0x0F, 0xF8, 0x00, // ######### + 0x07, 0xE0, 0x00, // ###### + 0x1F, 0xF0, 0x00, // ######### + 0x07, 0x38, 0x00, // ### ### + 0x06, 0x18, 0x00, // ## ## + 0x06, 0x18, 0x00, // ## ## + 0x07, 0x38, 0x00, // ### ### + 0x03, 0xF0, 0x00, // ###### + 0x01, 0xE0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @432 '&' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xF0, 0x00, // ###### + 0x07, 0xF0, 0x00, // ####### + 0x0C, 0x60, 0x00, // ## ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x07, 0x00, 0x00, // ### + 0x0F, 0x9C, 0x00, // ##### ### + 0x1D, 0xFC, 0x00, // ### ####### + 0x18, 0xF0, 0x00, // ## #### + 0x18, 0x70, 0x00, // ## ### + 0x0F, 0xFC, 0x00, // ########## + 0x07, 0xDC, 0x00, // ##### ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @504 ''' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x01, 0x00, 0x00, // # + 0x01, 0x00, 0x00, // # + 0x01, 0x00, 0x00, // # + 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, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @576 '(' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x18, 0x00, // ## + 0x00, 0x38, 0x00, // ### + 0x00, 0x70, 0x00, // ### + 0x00, 0xF0, 0x00, // #### + 0x00, 0xE0, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x00, 0x70, 0x00, // ### + 0x00, 0x70, 0x00, // ### + 0x00, 0x38, 0x00, // ### + 0x00, 0x18, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @648 ')' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x18, 0x00, 0x00, // ## + 0x1C, 0x00, 0x00, // ### + 0x0E, 0x00, 0x00, // ### + 0x0E, 0x00, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x0F, 0x00, 0x00, // #### + 0x0E, 0x00, 0x00, // ### + 0x1C, 0x00, 0x00, // ### + 0x18, 0x00, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @720 '*' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x1D, 0xB8, 0x00, // ### ## ### + 0x1F, 0xF8, 0x00, // ########## + 0x07, 0xE0, 0x00, // ###### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 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, // + + // @792 '+' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 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, // + + // @864 ',' (17 pixels wide) + 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, 0xE0, 0x00, // ### + 0x00, 0xC0, 0x00, // ## + 0x01, 0xC0, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @936 '-' (17 pixels wide) + 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, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 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, // + + // @1008 '.' (17 pixels wide) + 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, // + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1080 '/' (17 pixels wide) + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x38, 0x00, // ### + 0x00, 0x30, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x00, 0x60, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x0E, 0x00, 0x00, // ### + 0x0C, 0x00, 0x00, // ## + 0x1C, 0x00, 0x00, // ### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1152 '0' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x07, 0xE0, 0x00, // ###### + 0x0C, 0x30, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x07, 0xE0, 0x00, // ###### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1224 '1' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x80, 0x00, // # + 0x07, 0x80, 0x00, // #### + 0x1F, 0x80, 0x00, // ###### + 0x1D, 0x80, 0x00, // ### ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1296 '2' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xC0, 0x00, // ##### + 0x1F, 0xF0, 0x00, // ######### + 0x38, 0x30, 0x00, // ### ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x01, 0xC0, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x06, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1368 '3' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x0F, 0xE0, 0x00, // ####### + 0x0C, 0x70, 0x00, // ## ### + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x03, 0xC0, 0x00, // #### + 0x03, 0xE0, 0x00, // ##### + 0x00, 0x70, 0x00, // ### + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF0, 0x00, // ######### + 0x0F, 0xC0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1440 '4' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xE0, 0x00, // ### + 0x01, 0xE0, 0x00, // #### + 0x01, 0xE0, 0x00, // #### + 0x03, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x0C, 0x60, 0x00, // ## ## + 0x0C, 0x60, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x30, 0x60, 0x00, // ## ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x00, 0x60, 0x00, // ## + 0x03, 0xF8, 0x00, // ####### + 0x03, 0xF8, 0x00, // ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1512 '5' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xF0, 0x00, // ######### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1B, 0xC0, 0x00, // ## #### + 0x1F, 0xF0, 0x00, // ######### + 0x1C, 0x30, 0x00, // ### ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x30, 0x30, 0x00, // ## ## + 0x3F, 0xF0, 0x00, // ########## + 0x0F, 0xC0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1584 '6' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xF8, 0x00, // ##### + 0x03, 0xF8, 0x00, // ####### + 0x07, 0x00, 0x00, // ### + 0x0E, 0x00, 0x00, // ### + 0x0C, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1B, 0xC0, 0x00, // ## #### + 0x1F, 0xF0, 0x00, // ######### + 0x1C, 0x30, 0x00, // ### ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x38, 0x00, // ## ### + 0x0F, 0xF0, 0x00, // ######## + 0x03, 0xE0, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1656 '7' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x00, 0x60, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x00, 0xE0, 0x00, // ### + 0x00, 0xC0, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x01, 0xC0, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1728 '8' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xE0, 0x00, // ###### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x07, 0xE0, 0x00, // ###### + 0x07, 0xE0, 0x00, // ###### + 0x0C, 0x30, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1C, 0x38, 0x00, // ### ### + 0x0F, 0xF0, 0x00, // ######## + 0x07, 0xE0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1800 '9' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xC0, 0x00, // ##### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x30, 0x00, // ### ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x38, 0x00, // ## ### + 0x0F, 0xF8, 0x00, // ######### + 0x03, 0xD8, 0x00, // #### ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x1F, 0xC0, 0x00, // ####### + 0x1F, 0x00, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1872 ':' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @1944 ';' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xF0, 0x00, // #### + 0x00, 0xF0, 0x00, // #### + 0x00, 0xF0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xE0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x02, 0x00, 0x00, // # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2016 '<' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x1C, 0x00, // ### + 0x00, 0x3C, 0x00, // #### + 0x00, 0xF0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x0F, 0x00, 0x00, // #### + 0x3C, 0x00, 0x00, // #### + 0xF0, 0x00, 0x00, // #### + 0x3C, 0x00, 0x00, // #### + 0x0F, 0x00, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0xF0, 0x00, // #### + 0x00, 0x3C, 0x00, // #### + 0x00, 0x1C, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2088 '=' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xFC, 0x00, // ############# + 0x7F, 0xFC, 0x00, // ############# + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xFC, 0x00, // ############# + 0x7F, 0xFC, 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, // + + // @2160 '>' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x70, 0x00, 0x00, // ### + 0x78, 0x00, 0x00, // #### + 0x1E, 0x00, 0x00, // #### + 0x07, 0x80, 0x00, // #### + 0x01, 0xE0, 0x00, // #### + 0x00, 0x78, 0x00, // #### + 0x00, 0x1E, 0x00, // #### + 0x00, 0x78, 0x00, // #### + 0x01, 0xE0, 0x00, // #### + 0x07, 0x80, 0x00, // #### + 0x1E, 0x00, 0x00, // #### + 0x78, 0x00, 0x00, // #### + 0x70, 0x00, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2232 '?' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xC0, 0x00, // ##### + 0x0F, 0xE0, 0x00, // ####### + 0x18, 0x70, 0x00, // ## ### + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x30, 0x00, // ## ## + 0x00, 0x70, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x03, 0xC0, 0x00, // #### + 0x03, 0x80, 0x00, // ### + 0x03, 0x00, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0x00, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2304 '@' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xE0, 0x00, // ##### + 0x07, 0xF0, 0x00, // ####### + 0x0E, 0x38, 0x00, // ### ### + 0x0C, 0x18, 0x00, // ## ## + 0x18, 0x78, 0x00, // ## #### + 0x18, 0xF8, 0x00, // ## ##### + 0x19, 0xD8, 0x00, // ## ### ## + 0x19, 0x98, 0x00, // ## ## ## + 0x19, 0x98, 0x00, // ## ## ## + 0x19, 0x98, 0x00, // ## ## ## + 0x18, 0xF8, 0x00, // ## ##### + 0x18, 0x78, 0x00, // ## #### + 0x18, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0E, 0x18, 0x00, // ### ## + 0x07, 0xF8, 0x00, // ######## + 0x03, 0xE0, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2376 'A' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0x80, 0x00, // ###### + 0x1F, 0xC0, 0x00, // ####### + 0x01, 0xC0, 0x00, // ### + 0x03, 0x60, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x0F, 0xF8, 0x00, // ######### + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0xFC, 0x7F, 0x00, // ###### ####### + 0xFC, 0x7F, 0x00, // ###### ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2448 'B' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xE0, 0x00, // ########## + 0x7F, 0xF0, 0x00, // ########### + 0x18, 0x38, 0x00, // ## ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x1C, 0x00, // ## ### + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x7F, 0xF8, 0x00, // ############ + 0x7F, 0xF0, 0x00, // ########### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2520 'C' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xEC, 0x00, // ##### ## + 0x0F, 0xFC, 0x00, // ########## + 0x1C, 0x1C, 0x00, // ### ### + 0x18, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x18, 0x0C, 0x00, // ## ## + 0x1C, 0x1C, 0x00, // ### ### + 0x0F, 0xF8, 0x00, // ######### + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2592 'D' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xC0, 0x00, // ######### + 0x7F, 0xF0, 0x00, // ########### + 0x18, 0x38, 0x00, // ## ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x7F, 0xF0, 0x00, // ########### + 0x7F, 0xE0, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2664 'E' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xF8, 0x00, // ############ + 0x7F, 0xF8, 0x00, // ############ + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x19, 0x98, 0x00, // ## ## ## + 0x19, 0x80, 0x00, // ## ## + 0x1F, 0x80, 0x00, // ###### + 0x1F, 0x80, 0x00, // ###### + 0x19, 0x80, 0x00, // ## ## + 0x19, 0x98, 0x00, // ## ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7F, 0xF8, 0x00, // ############ + 0x7F, 0xF8, 0x00, // ############ + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2736 'F' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0xCC, 0x00, // ## ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0F, 0xC0, 0x00, // ###### + 0x0F, 0xC0, 0x00, // ###### + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0xC0, 0x00, // ## ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x3F, 0xC0, 0x00, // ######## + 0x3F, 0xC0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2808 'G' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xEC, 0x00, // ##### ## + 0x0F, 0xFC, 0x00, // ########## + 0x1C, 0x1C, 0x00, // ### ### + 0x18, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x30, 0xFE, 0x00, // ## ####### + 0x30, 0xFE, 0x00, // ## ####### + 0x30, 0x0C, 0x00, // ## ## + 0x38, 0x0C, 0x00, // ### ## + 0x1C, 0x1C, 0x00, // ### ### + 0x0F, 0xFC, 0x00, // ########## + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2880 'H' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @2952 'I' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3024 'J' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xFE, 0x00, // ########## + 0x07, 0xFE, 0x00, // ########## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x60, 0x00, // ## ## + 0x3F, 0xE0, 0x00, // ######### + 0x0F, 0x80, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3096 'K' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0x3E, 0x00, // ####### ##### + 0x7F, 0x3E, 0x00, // ####### ##### + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x18, 0xC0, 0x00, // ## ## + 0x19, 0x80, 0x00, // ## ## + 0x1B, 0x80, 0x00, // ## ### + 0x1F, 0xC0, 0x00, // ####### + 0x1C, 0xE0, 0x00, // ### ### + 0x18, 0x70, 0x00, // ## ### + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x7F, 0x1F, 0x00, // ####### ##### + 0x7F, 0x1F, 0x00, // ####### ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3168 'L' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0x80, 0x00, // ######## + 0x7F, 0x80, 0x00, // ######## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x7F, 0xFC, 0x00, // ############# + 0x7F, 0xFC, 0x00, // ############# + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3240 'M' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0xF0, 0x0F, 0x00, // #### #### + 0xF8, 0x1F, 0x00, // ##### ##### + 0x38, 0x1C, 0x00, // ### ### + 0x3C, 0x3C, 0x00, // #### #### + 0x3C, 0x3C, 0x00, // #### #### + 0x36, 0x6C, 0x00, // ## ## ## ## + 0x36, 0x6C, 0x00, // ## ## ## ## + 0x33, 0xCC, 0x00, // ## #### ## + 0x33, 0xCC, 0x00, // ## #### ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0xFE, 0x7F, 0x00, // ####### ####### + 0xFE, 0x7F, 0x00, // ####### ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3312 'N' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0xFE, 0x00, // #### ####### + 0x78, 0xFE, 0x00, // #### ####### + 0x1C, 0x18, 0x00, // ### ## + 0x1E, 0x18, 0x00, // #### ## + 0x1F, 0x18, 0x00, // ##### ## + 0x1B, 0x18, 0x00, // ## ## ## + 0x1B, 0x98, 0x00, // ## ### ## + 0x19, 0xD8, 0x00, // ## ### ## + 0x18, 0xD8, 0x00, // ## ## ## + 0x18, 0xF8, 0x00, // ## ##### + 0x18, 0x78, 0x00, // ## #### + 0x18, 0x38, 0x00, // ## ### + 0x7F, 0x18, 0x00, // ####### ## + 0x7F, 0x18, 0x00, // ####### ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3384 'O' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x1C, 0x38, 0x00, // ### ### + 0x0F, 0xF0, 0x00, // ######## + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3456 'P' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3F, 0xF0, 0x00, // ########## + 0x3F, 0xF8, 0x00, // ########### + 0x0C, 0x1C, 0x00, // ## ### + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x0C, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x0F, 0xF8, 0x00, // ######### + 0x0F, 0xE0, 0x00, // ####### + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x3F, 0xC0, 0x00, // ######## + 0x3F, 0xC0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3528 'Q' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x1C, 0x38, 0x00, // ### ### + 0x0F, 0xF0, 0x00, // ######## + 0x07, 0xC0, 0x00, // ##### + 0x07, 0xCC, 0x00, // ##### ## + 0x0F, 0xFC, 0x00, // ########## + 0x0C, 0x38, 0x00, // ## ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3600 'R' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0xE0, 0x00, // ########## + 0x7F, 0xF0, 0x00, // ########### + 0x18, 0x38, 0x00, // ## ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xC0, 0x00, // ####### + 0x18, 0xE0, 0x00, // ## ### + 0x18, 0x70, 0x00, // ## ### + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x7F, 0x1E, 0x00, // ####### #### + 0x7F, 0x0E, 0x00, // ####### ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3672 'S' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xD8, 0x00, // ##### ## + 0x0F, 0xF8, 0x00, // ######### + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1E, 0x00, 0x00, // #### + 0x0F, 0xC0, 0x00, // ###### + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x78, 0x00, // #### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1C, 0x38, 0x00, // ### ### + 0x1F, 0xF0, 0x00, // ######### + 0x1B, 0xE0, 0x00, // ## ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3744 'T' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x0F, 0xF0, 0x00, // ######## + 0x0F, 0xF0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3816 'U' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x0F, 0xF0, 0x00, // ######## + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3888 'V' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7F, 0x7F, 0x00, // ####### ####### + 0x7F, 0x7F, 0x00, // ####### ####### + 0x18, 0x0C, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x01, 0xC0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x00, 0x80, 0x00, // # + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @3960 'W' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0xFE, 0x3F, 0x80, // ####### ####### + 0xFE, 0x3F, 0x80, // ####### ####### + 0x30, 0x06, 0x00, // ## ## + 0x30, 0x06, 0x00, // ## ## + 0x30, 0x86, 0x00, // ## # ## + 0x19, 0xCC, 0x00, // ## ### ## + 0x19, 0xCC, 0x00, // ## ### ## + 0x1B, 0x6C, 0x00, // ## ## ## ## + 0x1B, 0x6C, 0x00, // ## ## ## ## + 0x1E, 0x7C, 0x00, // #### ##### + 0x0E, 0x38, 0x00, // ### ### + 0x0E, 0x38, 0x00, // ### ### + 0x0C, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4032 'X' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x03, 0xC0, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0xC0, 0x00, // #### + 0x06, 0x60, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4104 'Y' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7C, 0x7E, 0x00, // ##### ###### + 0x7C, 0x7E, 0x00, // ##### ###### + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x03, 0xC0, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x0F, 0xF0, 0x00, // ######## + 0x0F, 0xF0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4176 'Z' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x18, 0xC0, 0x00, // ## ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x06, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4248 '[' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0xF0, 0x00, // ##### + 0x01, 0xF0, 0x00, // ##### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0xF0, 0x00, // ##### + 0x01, 0xF0, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4320 '\' (17 pixels wide) + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1C, 0x00, 0x00, // ### + 0x0C, 0x00, 0x00, // ## + 0x0E, 0x00, 0x00, // ### + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x00, 0x60, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x00, 0x30, 0x00, // ## + 0x00, 0x38, 0x00, // ### + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4392 ']' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0F, 0x80, 0x00, // ##### + 0x0F, 0x80, 0x00, // ##### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x0F, 0x80, 0x00, // ##### + 0x0F, 0x80, 0x00, // ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4464 '^' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x80, 0x00, // # + 0x01, 0xC0, 0x00, // ### + 0x03, 0xE0, 0x00, // ##### + 0x07, 0x70, 0x00, // ### ### + 0x06, 0x30, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x10, 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, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4536 '_' (17 pixels wide) + 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, // + 0xFF, 0xFF, 0x00, // ################ + 0xFF, 0xFF, 0x00, // ################ + + // @4608 '`' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x03, 0x00, 0x00, // ## + 0x03, 0x80, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x00, 0x60, 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, // + + // @4680 'a' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0F, 0xC0, 0x00, // ###### + 0x1F, 0xE0, 0x00, // ######## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x07, 0xF0, 0x00, // ####### + 0x1F, 0xF0, 0x00, // ######### + 0x38, 0x30, 0x00, // ### ## + 0x30, 0x30, 0x00, // ## ## + 0x30, 0x70, 0x00, // ## ### + 0x1F, 0xFC, 0x00, // ########### + 0x0F, 0xBC, 0x00, // ##### #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4752 'b' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0x00, 0x00, // #### + 0x78, 0x00, 0x00, // #### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1B, 0xE0, 0x00, // ## ##### + 0x1F, 0xF8, 0x00, // ########## + 0x1C, 0x18, 0x00, // ### ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x1C, 0x18, 0x00, // ### ## + 0x7F, 0xF8, 0x00, // ############ + 0x7B, 0xE0, 0x00, // #### ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4824 'c' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xEC, 0x00, // ##### ## + 0x0F, 0xFC, 0x00, // ########## + 0x1C, 0x1C, 0x00, // ### ### + 0x38, 0x0C, 0x00, // ### ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x38, 0x0C, 0x00, // ### ## + 0x1C, 0x1C, 0x00, // ### ### + 0x0F, 0xF8, 0x00, // ######### + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4896 'd' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x78, 0x00, // #### + 0x00, 0x78, 0x00, // #### + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x07, 0xD8, 0x00, // ##### ## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x38, 0x00, // ## ### + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xFE, 0x00, // ############ + 0x07, 0xDE, 0x00, // ##### #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @4968 'e' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xE0, 0x00, // ###### + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x18, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x30, 0x00, 0x00, // ## + 0x30, 0x00, 0x00, // ## + 0x18, 0x0C, 0x00, // ## ## + 0x1F, 0xFC, 0x00, // ########### + 0x07, 0xF0, 0x00, // ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5040 'f' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0xFC, 0x00, // ####### + 0x03, 0xFC, 0x00, // ######## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x3F, 0xF8, 0x00, // ########### + 0x3F, 0xF8, 0x00, // ########### + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x3F, 0xF0, 0x00, // ########## + 0x3F, 0xF0, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5112 'g' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xDE, 0x00, // ##### #### + 0x1F, 0xFE, 0x00, // ############ + 0x18, 0x38, 0x00, // ## ### + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF8, 0x00, // ########## + 0x07, 0xD8, 0x00, // ##### ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x38, 0x00, // ### + 0x0F, 0xF0, 0x00, // ######## + 0x0F, 0xC0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5184 'h' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0x00, 0x00, // #### + 0x78, 0x00, 0x00, // #### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x1B, 0xE0, 0x00, // ## ##### + 0x1F, 0xF0, 0x00, // ######### + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5256 'i' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0x80, 0x00, // ###### + 0x1F, 0x80, 0x00, // ###### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5328 'j' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xC0, 0x00, // ## + 0x00, 0xC0, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xF0, 0x00, // ######### + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x30, 0x00, // ## + 0x00, 0x70, 0x00, // ### + 0x1F, 0xE0, 0x00, // ######## + 0x1F, 0x80, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5400 'k' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3C, 0x00, 0x00, // #### + 0x3C, 0x00, 0x00, // #### + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0xF8, 0x00, // ## ##### + 0x0C, 0xF8, 0x00, // ## ##### + 0x0C, 0xC0, 0x00, // ## ## + 0x0D, 0x80, 0x00, // ## ## + 0x0F, 0x80, 0x00, // ##### + 0x0F, 0x00, 0x00, // #### + 0x0F, 0x80, 0x00, // ##### + 0x0D, 0xC0, 0x00, // ## ### + 0x0C, 0xE0, 0x00, // ## ### + 0x3C, 0x7C, 0x00, // #### ##### + 0x3C, 0x7C, 0x00, // #### ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5472 'l' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0x80, 0x00, // ###### + 0x1F, 0x80, 0x00, // ###### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x3F, 0xFC, 0x00, // ############ + 0x3F, 0xFC, 0x00, // ############ + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5544 'm' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0xF7, 0x78, 0x00, // #### ### #### + 0xFF, 0xFC, 0x00, // ############## + 0x39, 0xCC, 0x00, // ### ### ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0x31, 0x8C, 0x00, // ## ## ## + 0xFD, 0xEF, 0x00, // ###### #### #### + 0xFD, 0xEF, 0x00, // ###### #### #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5616 'n' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7B, 0xE0, 0x00, // #### ##### + 0x7F, 0xF0, 0x00, // ########### + 0x1C, 0x38, 0x00, // ### ### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x7E, 0x7E, 0x00, // ###### ###### + 0x7E, 0x7E, 0x00, // ###### ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5688 'o' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x03, 0xC0, 0x00, // #### + 0x0F, 0xF0, 0x00, // ######## + 0x1C, 0x38, 0x00, // ### ### + 0x38, 0x1C, 0x00, // ### ### + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x30, 0x0C, 0x00, // ## ## + 0x38, 0x1C, 0x00, // ### ### + 0x1C, 0x38, 0x00, // ### ### + 0x0F, 0xF0, 0x00, // ######## + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5760 'p' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7B, 0xE0, 0x00, // #### ##### + 0x7F, 0xF8, 0x00, // ############ + 0x1C, 0x18, 0x00, // ### ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x18, 0x0C, 0x00, // ## ## + 0x1C, 0x18, 0x00, // ### ## + 0x1F, 0xF8, 0x00, // ########## + 0x1B, 0xE0, 0x00, // ## ##### + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x18, 0x00, 0x00, // ## + 0x7F, 0x00, 0x00, // ####### + 0x7F, 0x00, 0x00, // ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5832 'q' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xDE, 0x00, // ##### #### + 0x1F, 0xFE, 0x00, // ############ + 0x18, 0x38, 0x00, // ## ### + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x30, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF8, 0x00, // ########## + 0x07, 0xD8, 0x00, // ##### ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0x18, 0x00, // ## + 0x00, 0xFE, 0x00, // ####### + 0x00, 0xFE, 0x00, // ####### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5904 'r' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3E, 0x78, 0x00, // ##### #### + 0x3E, 0xFC, 0x00, // ##### ###### + 0x07, 0xCC, 0x00, // ##### ## + 0x07, 0x00, 0x00, // ### + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x06, 0x00, 0x00, // ## + 0x3F, 0xF0, 0x00, // ########## + 0x3F, 0xF0, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @5976 's' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0xF8, 0x00, // ######## + 0x0F, 0xF8, 0x00, // ######### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x1F, 0x80, 0x00, // ###### + 0x0F, 0xF0, 0x00, // ######## + 0x00, 0xF8, 0x00, // ##### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x1F, 0xF0, 0x00, // ######### + 0x1F, 0xE0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6048 't' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x3F, 0xF0, 0x00, // ########## + 0x3F, 0xF0, 0x00, // ########## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x00, 0x00, // ## + 0x0C, 0x1C, 0x00, // ## ### + 0x07, 0xFC, 0x00, // ######### + 0x03, 0xF0, 0x00, // ###### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6120 'u' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0x78, 0x00, // #### #### + 0x78, 0x78, 0x00, // #### #### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x38, 0x00, // ## ### + 0x0F, 0xFE, 0x00, // ########### + 0x07, 0xDE, 0x00, // ##### #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6192 'v' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7C, 0x3E, 0x00, // ##### ##### + 0x7C, 0x3E, 0x00, // ##### ##### + 0x18, 0x18, 0x00, // ## ## + 0x18, 0x18, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x07, 0xE0, 0x00, // ###### + 0x03, 0xC0, 0x00, // #### + 0x03, 0xC0, 0x00, // #### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6264 'w' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x78, 0x3C, 0x00, // #### #### + 0x78, 0x3C, 0x00, // #### #### + 0x31, 0x18, 0x00, // ## # ## + 0x33, 0x98, 0x00, // ## ### ## + 0x33, 0x98, 0x00, // ## ### ## + 0x1A, 0xB0, 0x00, // ## # # ## + 0x1E, 0xF0, 0x00, // #### #### + 0x1E, 0xF0, 0x00, // #### #### + 0x1C, 0x60, 0x00, // ### ## + 0x0C, 0x60, 0x00, // ## ## + 0x0C, 0x60, 0x00, // ## ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6336 'x' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x3E, 0x7C, 0x00, // ##### ##### + 0x3E, 0x7C, 0x00, // ##### ##### + 0x0C, 0x30, 0x00, // ## ## + 0x06, 0x60, 0x00, // ## ## + 0x03, 0xC0, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x03, 0xC0, 0x00, // #### + 0x06, 0x60, 0x00, // ## ## + 0x0C, 0x30, 0x00, // ## ## + 0x3E, 0x7C, 0x00, // ##### ##### + 0x3E, 0x7C, 0x00, // ##### ##### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6408 'y' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x7E, 0x1F, 0x00, // ###### ##### + 0x7E, 0x1F, 0x00, // ###### ##### + 0x18, 0x0C, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x06, 0x30, 0x00, // ## ## + 0x03, 0x60, 0x00, // ## ## + 0x03, 0xE0, 0x00, // ##### + 0x01, 0xC0, 0x00, // ### + 0x00, 0xC0, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x3F, 0xC0, 0x00, // ######## + 0x3F, 0xC0, 0x00, // ######## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6480 'z' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x18, 0x30, 0x00, // ## ## + 0x18, 0x60, 0x00, // ## ## + 0x00, 0xC0, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x00, 0x00, // ## + 0x06, 0x18, 0x00, // ## ## + 0x0C, 0x18, 0x00, // ## ## + 0x1F, 0xF8, 0x00, // ########## + 0x1F, 0xF8, 0x00, // ########## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6552 '{' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0xE0, 0x00, // ### + 0x01, 0xE0, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x03, 0x80, 0x00, // ### + 0x07, 0x00, 0x00, // ### + 0x03, 0x80, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0xE0, 0x00, // #### + 0x00, 0xE0, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6624 '|' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6696 '}' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x07, 0x00, 0x00, // ### + 0x07, 0x80, 0x00, // #### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0xC0, 0x00, // ### + 0x00, 0xE0, 0x00, // ### + 0x01, 0xC0, 0x00, // ### + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x01, 0x80, 0x00, // ## + 0x07, 0x80, 0x00, // #### + 0x07, 0x00, 0x00, // ### + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + + // @6768 '~' (17 pixels wide) + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x00, 0x00, 0x00, // + 0x0E, 0x00, 0x00, // ### + 0x1F, 0x18, 0x00, // ##### ## + 0x3B, 0xB8, 0x00, // ### ### ### + 0x31, 0xF0, 0x00, // ## ##### + 0x00, 0xE0, 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, // +}; + +sFONT Font24 = { + Font24_Table, + 17, /* Width */ + 24, /* Height */ +}; + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/examples/e-Paper/application_drivers/e-Paper/Fonts/font24CN.c b/examples/e-Paper/application_drivers/e-Paper/Fonts/font24CN.c new file mode 100644 index 000000000..e4025e2e3 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Fonts/font24CN.c @@ -0,0 +1,460 @@ +/** + ****************************************************************************** + * @file Font12.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +const CH_CN Font24CN_Table[] = +{ +/*-- 文字: 你 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"你"},{ +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,0x01,0xC1,0xC0,0x00, +0x01,0xE3,0xE0,0x00,0x03,0xE3,0xC0,0x00,0x03,0xC7,0x80,0x00,0x03,0xC7,0xFF,0xFF, +0x07,0x8F,0xFF,0xFF,0x07,0x8F,0x00,0x0F,0x0F,0x1E,0x00,0x1E,0x0F,0x3C,0x1E,0x1E, +0x1F,0x3C,0x1E,0x3E,0x1F,0x18,0x1E,0x3C,0x3F,0x00,0x1E,0x1C,0x7F,0x00,0x1E,0x00, +0x7F,0x07,0x9E,0x70,0xFF,0x07,0x9E,0xF0,0xEF,0x0F,0x9E,0x78,0x6F,0x0F,0x1E,0x78, +0x0F,0x0F,0x1E,0x3C,0x0F,0x1E,0x1E,0x3C,0x0F,0x1E,0x1E,0x1E,0x0F,0x3C,0x1E,0x1E, +0x0F,0x3C,0x1E,0x1F,0x0F,0x7C,0x1E,0x0F,0x0F,0x78,0x1E,0x0E,0x0F,0x00,0x1E,0x00, +0x0F,0x00,0x1E,0x00,0x0F,0x00,0x3C,0x00,0x0F,0x07,0xFC,0x00,0x0F,0x07,0xF8,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 好 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"好"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00, +0x0F,0x07,0xFF,0xFE,0x0F,0x07,0xFF,0xFE,0x0F,0x00,0x00,0x3E,0x1E,0x00,0x00,0xFC, +0xFF,0xF8,0x01,0xF0,0xFF,0xF8,0x03,0xE0,0x1E,0x78,0x07,0xC0,0x1E,0x78,0x0F,0x80, +0x3C,0x78,0x0F,0x00,0x3C,0x78,0x0F,0x00,0x3C,0x78,0x0F,0x00,0x3C,0x78,0x0F,0x00, +0x3C,0x7F,0xFF,0xFF,0x78,0xFF,0xFF,0xFF,0x78,0xF0,0x0F,0x00,0x78,0xF0,0x0F,0x00, +0x3D,0xE0,0x0F,0x00,0x1F,0xE0,0x0F,0x00,0x0F,0xE0,0x0F,0x00,0x07,0xC0,0x0F,0x00, +0x07,0xE0,0x0F,0x00,0x07,0xF0,0x0F,0x00,0x0F,0xF8,0x0F,0x00,0x1E,0x7C,0x0F,0x00, +0x3C,0x38,0x0F,0x00,0x78,0x00,0x0F,0x00,0xF0,0x03,0xFF,0x00,0x60,0x01,0xFE,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 微 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"微"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x01,0xE0,0x07,0x87,0x01,0xE0, +0x07,0x07,0x01,0xC0,0x0F,0xF7,0x79,0xC0,0x1E,0xF7,0x7B,0xC0,0x1E,0xF7,0x7B,0x80, +0x3C,0xF7,0x7B,0xFF,0x78,0xF7,0x7B,0xFF,0xF8,0xF7,0x7F,0x9E,0xF7,0xFF,0xFF,0x9E, +0x67,0xFF,0xFF,0x9E,0x07,0x00,0x7F,0x9C,0x0F,0x00,0x0F,0x9C,0x1E,0x00,0x1F,0x9C, +0x1E,0x7F,0xFF,0xBC,0x3E,0x7F,0xF3,0xFC,0x3E,0x00,0x03,0xFC,0x7E,0x00,0x01,0xF8, +0xFE,0x00,0x01,0xF8,0xFE,0x7F,0xE1,0xF8,0xDE,0x7F,0xE1,0xF8,0x1E,0x78,0xE0,0xF0, +0x1E,0x78,0xEE,0xF0,0x1E,0x78,0xFF,0xF0,0x1E,0x78,0xFD,0xF8,0x1E,0x79,0xFB,0xFC, +0x1E,0xF1,0xF7,0xBC,0x1E,0xF0,0xEF,0x9E,0x1F,0xE0,0x0F,0x0F,0x1E,0xC0,0x1E,0x0F, +0x1E,0x00,0x0C,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 软 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"软"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x03,0xC0,0x78,0x00,0x07,0x80,0x78,0x00,0x07,0x80,0x78,0x00, +0x07,0x80,0xF0,0x00,0x0F,0x00,0xF0,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, +0x1E,0x03,0xC0,0x1F,0x1E,0x03,0xC0,0x1E,0x1F,0xE7,0x8F,0x3E,0x3D,0xE7,0x8F,0x3C, +0x3D,0xEF,0x0F,0x7C,0x3D,0xE7,0x0F,0x78,0x79,0xE0,0x0F,0x00,0x79,0xE0,0x0E,0x00, +0x7F,0xFE,0x0E,0x00,0x7F,0xFE,0x1F,0x00,0x01,0xE0,0x1F,0x00,0x01,0xE0,0x1F,0x00, +0x01,0xE0,0x1F,0x80,0x01,0xE0,0x1F,0x80,0x01,0xE0,0x3F,0x80,0x01,0xFF,0x3F,0xC0, +0x0F,0xFF,0x7B,0xC0,0xFF,0xF0,0x79,0xE0,0xF9,0xE0,0xF1,0xF0,0x01,0xE1,0xF0,0xF0, +0x01,0xE3,0xE0,0xF8,0x01,0xE7,0xC0,0x7C,0x01,0xFF,0x80,0x3F,0x01,0xFF,0x00,0x1F, +0x01,0xEC,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 雅 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"雅"},{ +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,0x77,0x00,0x00,0x00,0xFF,0x00, +0x7F,0xFC,0xF7,0x80,0x7F,0xFD,0xE3,0xC0,0x01,0xC1,0xE3,0xC0,0x01,0xC3,0xC1,0x80, +0x3D,0xC7,0xFF,0xFF,0x39,0xC7,0xFF,0xFF,0x39,0xCF,0x83,0x80,0x79,0xDF,0x83,0x80, +0x79,0xFF,0x83,0x80,0x79,0xDF,0x83,0x80,0x71,0xC3,0x83,0x80,0x7F,0xFF,0xFF,0xFE, +0x7F,0xFF,0xFF,0xFE,0x03,0xC3,0x83,0x80,0x07,0xC3,0x83,0x80,0x07,0xC3,0x83,0x80, +0x0F,0xC3,0x83,0x80,0x0F,0xC3,0x83,0x80,0x1F,0xC3,0xFF,0xFE,0x1D,0xC3,0xFF,0xFE, +0x3D,0xC3,0x83,0x80,0x79,0xC3,0x83,0x80,0xF1,0xC3,0x83,0x80,0xF1,0xC3,0x83,0x80, +0x61,0xC3,0x83,0x80,0x01,0xC3,0xFF,0xFF,0x03,0xC3,0xFF,0xFF,0x1F,0xC3,0x80,0x00, +0x1F,0x83,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 黑 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"黑"},{ +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, +0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1E,0x03,0xC0,0x3C,0x1E,0xC3,0xC7,0x3C, +0x1F,0xE3,0xC7,0xBC,0x1E,0xF3,0xCF,0x3C,0x1E,0xFB,0xDF,0x3C,0x1E,0x7B,0xDE,0x3C, +0x1E,0x33,0xDC,0x3C,0x1E,0x03,0xC0,0x3C,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC, +0x1E,0x03,0xC0,0x3C,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x3F,0xFF,0xFF,0xFC, +0x3F,0xFF,0xFF,0xFC,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00, +0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x1C,0x38,0x70,0x70, +0x3E,0x78,0xF8,0xF8,0x3C,0x7C,0x78,0x7C,0x7C,0x3C,0x3C,0x3E,0xF8,0x3E,0x3C,0x1F, +0xF0,0x1C,0x18,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 此 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"此"},{ +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,0x78,0x3C,0x00, +0x00,0x78,0x3C,0x00,0x00,0x78,0x3C,0x00,0x00,0x78,0x3C,0x00,0x00,0x78,0x3C,0x00, +0x00,0x78,0x3C,0x0C,0x3C,0x78,0x3C,0x1E,0x3C,0x78,0x3C,0x3F,0x3C,0x78,0x3C,0xF8, +0x3C,0x7F,0xFD,0xF0,0x3C,0x7F,0xFF,0xE0,0x3C,0x78,0x3F,0x80,0x3C,0x78,0x3E,0x00, +0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x00, +0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x0E,0x3C,0x78,0x3C,0x0F, +0x3C,0x78,0x3C,0x0F,0x3C,0x79,0xFC,0x0F,0x3C,0x7F,0xFC,0x0F,0x3F,0xFF,0x3C,0x0F, +0x3F,0xF0,0x3E,0x1E,0xFF,0x00,0x1F,0xFE,0xF0,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 字 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"字"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00, +0x00,0x03,0xE0,0x00,0x00,0x01,0xE0,0x00,0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE, +0x78,0x00,0x00,0x1E,0x78,0x00,0x00,0x1E,0x78,0x00,0x00,0x1E,0x78,0x00,0x00,0x1E, +0x7B,0xFF,0xFF,0xDE,0x03,0xFF,0xFF,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00, +0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00, +0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00, +0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00, +0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xFF,0xC0,0x00,0x00,0xFF,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 体 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"体"},{ +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,0x03,0xC0,0x3C,0x00, +0x03,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x07,0x80,0x3C,0x00,0x07,0x80,0x3C,0x00, +0x07,0x80,0x3C,0x00,0x0F,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x1F,0x01,0xFE,0x00, +0x1F,0x01,0xFF,0x00,0x3F,0x01,0xFF,0x00,0x3F,0x03,0xFF,0x00,0x7F,0x03,0xFF,0x80, +0x7F,0x07,0xBF,0x80,0xFF,0x07,0xBF,0xC0,0xEF,0x0F,0x3D,0xC0,0xCF,0x0F,0x3D,0xE0, +0x0F,0x1E,0x3D,0xE0,0x0F,0x1E,0x3C,0xF0,0x0F,0x3C,0x3C,0x78,0x0F,0x7C,0x3C,0x7C, +0x0F,0xF8,0x3C,0x3E,0x0F,0xF7,0xFF,0xDF,0x0F,0xE7,0xFF,0xCF,0x0F,0xC0,0x3C,0x06, +0x0F,0x00,0x3C,0x00,0x0F,0x00,0x3C,0x00,0x0F,0x00,0x3C,0x00,0x0F,0x00,0x3C,0x00, +0x0F,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 下 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"下"},{ +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, +0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00, +0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00, +0x00,0x0F,0xE0,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xFC,0x00,0x00,0x0F,0xBF,0x00, +0x00,0x0F,0x9F,0x80,0x00,0x0F,0x87,0xE0,0x00,0x0F,0x83,0xF0,0x00,0x0F,0x80,0xF8, +0x00,0x0F,0x80,0x7C,0x00,0x0F,0x80,0x38,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00, +0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00, +0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 对 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"对"},{ +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,0x78, +0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78,0x7F,0xFC,0x00,0x78,0x7F,0xFC,0x00,0x78, +0x00,0x3C,0x00,0x78,0x00,0x3F,0xFF,0xFF,0x30,0x3F,0xFF,0xFF,0x78,0x3C,0x00,0x78, +0x3C,0x38,0x00,0x78,0x3E,0x78,0x00,0x78,0x1E,0x78,0xC0,0x78,0x0F,0x79,0xE0,0x78, +0x0F,0xF0,0xF0,0x78,0x07,0xF0,0xF8,0x78,0x03,0xF0,0x78,0x78,0x01,0xE0,0x3C,0x78, +0x03,0xF0,0x3E,0x78,0x03,0xF0,0x18,0x78,0x07,0xF8,0x00,0x78,0x07,0xFC,0x00,0x78, +0x0F,0x3E,0x00,0x78,0x1F,0x1E,0x00,0x78,0x3E,0x1F,0x00,0x78,0x7C,0x0E,0x00,0xF8, +0xF8,0x00,0x00,0xF0,0xF0,0x00,0x3F,0xF0,0x60,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 应 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"应"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x01,0xE0,0x00, +0x00,0x01,0xF0,0x00,0x00,0x00,0xF0,0x00,0x1F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF, +0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x01,0xE0,0x78,0x1E,0x01,0xE0,0x78, +0x1E,0xE1,0xE0,0x78,0x1F,0xF1,0xF0,0xF8,0x1E,0xF0,0xF0,0xF0,0x1E,0xF0,0xF0,0xF0, +0x1E,0xF8,0xF0,0xF0,0x1E,0x78,0xF1,0xF0,0x1E,0x78,0xF9,0xE0,0x1E,0x78,0x79,0xE0, +0x1E,0x7C,0x7B,0xE0,0x1E,0x3C,0x7B,0xC0,0x1E,0x3C,0x7B,0xC0,0x1E,0x3C,0x7B,0xC0, +0x3C,0x3E,0x07,0x80,0x3C,0x1C,0x07,0x80,0x3C,0x00,0x07,0x80,0x3C,0x00,0x0F,0x00, +0x78,0x00,0x0F,0x00,0x7B,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00, +0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 的 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"的"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x3C,0x00,0x07,0xC0,0x3E,0x00, +0x07,0x80,0x3C,0x00,0x07,0x80,0x7C,0x00,0x0F,0x00,0x78,0x00,0x7F,0xFE,0x7F,0xFE, +0x7F,0xFE,0xFF,0xFE,0x78,0x1E,0xF0,0x1E,0x78,0x1F,0xE0,0x1E,0x78,0x1F,0xE0,0x1E, +0x78,0x1F,0xC0,0x1E,0x78,0x1F,0xC0,0x1E,0x78,0x1F,0xF0,0x1E,0x78,0x1E,0xF8,0x1E, +0x78,0x1E,0x7C,0x1E,0x7F,0xFE,0x3C,0x1E,0x7F,0xFE,0x1E,0x1E,0x78,0x1E,0x1F,0x1E, +0x78,0x1E,0x0F,0x9E,0x78,0x1E,0x07,0x9E,0x78,0x1E,0x07,0x1E,0x78,0x1E,0x00,0x1E, +0x78,0x1E,0x00,0x1E,0x78,0x1E,0x00,0x3E,0x78,0x1E,0x00,0x3C,0x78,0x1E,0x00,0x3C, +0x7F,0xFE,0x00,0x3C,0x7F,0xFE,0x00,0x7C,0x78,0x1E,0x3F,0xF8,0x78,0x1E,0x3F,0xF0, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 点 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"点"},{ +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,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00, +0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFF, +0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00, +0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78, +0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78, +0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0F,0x00,0x00,0x78,0x00,0x00,0x00,0x00, +0x0C,0x38,0x38,0x30,0x1E,0x7C,0x78,0x78,0x3E,0x3C,0x78,0x78,0x3C,0x3C,0x3C,0x3C, +0x7C,0x3E,0x3C,0x3E,0xF8,0x1E,0x3C,0x1E,0xF0,0x1E,0x1E,0x1F,0x70,0x1E,0x1C,0x0E, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 阵 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"阵"},{ +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,0x3C,0x00,0x00,0x00,0x78,0x00, +0x7F,0xF0,0x78,0x00,0x7F,0xF0,0x78,0x00,0x79,0xFF,0xFF,0xFF,0x79,0xFF,0xFF,0xFF, +0x79,0xE1,0xE0,0x00,0x79,0xE1,0xE0,0x00,0x7B,0xC1,0xEF,0x80,0x7B,0xC3,0xCF,0x80, +0x7B,0xC3,0xCF,0x80,0x7F,0x87,0xCF,0x80,0x7F,0x87,0x8F,0x80,0x7F,0x87,0x8F,0x80, +0x7B,0xCF,0x0F,0x80,0x7B,0xCF,0xFF,0xFE,0x79,0xEF,0xFF,0xFE,0x79,0xE0,0x0F,0x80, +0x78,0xE0,0x0F,0x80,0x78,0xF0,0x0F,0x80,0x78,0xF0,0x0F,0x80,0x78,0xF0,0x0F,0x80, +0x78,0xFF,0xFF,0xFF,0x79,0xFF,0xFF,0xFF,0x7F,0xE0,0x0F,0x80,0x7F,0xC0,0x0F,0x80, +0x78,0x00,0x0F,0x80,0x78,0x00,0x0F,0x80,0x78,0x00,0x0F,0x80,0x78,0x00,0x0F,0x80, +0x78,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 为 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"为"},{ +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,0x07,0x80,0x00, +0x0E,0x07,0x80,0x00,0x1F,0x07,0x80,0x00,0x0F,0x87,0x80,0x00,0x07,0xC7,0x80,0x00, +0x01,0xE7,0x80,0x00,0x00,0xC7,0x80,0x00,0x00,0x07,0x80,0x00,0x7F,0xFF,0xFF,0xFC, +0x7F,0xFF,0xFF,0xFC,0x00,0x07,0x80,0x3C,0x00,0x0F,0x80,0x3C,0x00,0x0F,0x00,0x3C, +0x00,0x0F,0x00,0x3C,0x00,0x0F,0x60,0x3C,0x00,0x1F,0xF0,0x3C,0x00,0x1E,0x78,0x3C, +0x00,0x3E,0x3C,0x3C,0x00,0x3C,0x3E,0x3C,0x00,0x7C,0x1F,0x3C,0x00,0x78,0x0F,0x3C, +0x00,0xF8,0x06,0x3C,0x01,0xF0,0x00,0x3C,0x03,0xE0,0x00,0x7C,0x07,0xC0,0x00,0x7C, +0x0F,0x80,0x00,0x78,0x1F,0x00,0x00,0xF8,0x3E,0x00,0xFF,0xF0,0x7C,0x00,0xFF,0xE0, +0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 树 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"树"},{ +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,0x0F,0x00,0x00,0x38, +0x0F,0x00,0x00,0x38,0x0F,0x00,0x00,0x38,0x0F,0x3F,0xF8,0x38,0x0F,0x3F,0xF8,0x38, +0x0F,0x00,0x78,0x38,0xFF,0xE0,0x7F,0xFF,0xFF,0xE0,0x7F,0xFF,0x0F,0x00,0x70,0x38, +0x0F,0x18,0xF0,0x38,0x1F,0x3C,0xF0,0x38,0x1F,0x1C,0xFE,0x38,0x1F,0xDE,0xFE,0x38, +0x3F,0xEF,0xEF,0x38,0x3F,0xFF,0xEF,0x38,0x3F,0xF7,0xE7,0xB8,0x7F,0x67,0xC7,0xB8, +0x7F,0x03,0xC3,0xB8,0xFF,0x07,0xE0,0x38,0xEF,0x07,0xE0,0x38,0xEF,0x0F,0xF0,0x38, +0xCF,0x1F,0xF0,0x38,0x0F,0x1E,0x78,0x38,0x0F,0x3C,0x7C,0x38,0x0F,0x78,0x3C,0x38, +0x0F,0xF8,0x38,0x38,0x0F,0x60,0x00,0x78,0x0F,0x00,0x0F,0xF8,0x0F,0x00,0x07,0xF0, +0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 莓 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"莓"},{ +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,0x3C,0x1E,0x00,0x00,0x3C,0x1E,0x00, +0x00,0x3C,0x1E,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x3C,0x1E,0x00, +0x07,0xBC,0x1E,0x00,0x07,0x80,0x00,0x00,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC, +0x1E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF0, +0xF7,0xFF,0xFF,0xF0,0x37,0x83,0x80,0xF0,0x07,0x87,0xC0,0xF0,0x07,0x83,0xF0,0xF0, +0x07,0x00,0xE0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x00,0xE0, +0x0F,0x0F,0x81,0xE0,0x0E,0x03,0xE1,0xE0,0x1E,0x01,0xC1,0xE0,0x1F,0xFF,0xFF,0xFE, +0x1F,0xFF,0xFF,0xFE,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xFF,0xC0, +0x00,0x00,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 派 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"派"},{ +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,0x38,0x00,0x00,0x3E, +0x7C,0x00,0x3F,0xFE,0x3F,0x3F,0xFF,0xF0,0x1F,0xBF,0xE0,0x00,0x07,0xBC,0x00,0x00, +0x03,0x3C,0x00,0x00,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x0F,0xFE,0x70,0x3D,0xFF,0xF8, +0xF8,0x3D,0xFF,0x00,0x7C,0x3D,0xE7,0x80,0x3F,0x3D,0xE7,0x80,0x1F,0x3D,0xE7,0x8E, +0x0E,0x3D,0xE7,0x9F,0x00,0x3D,0xE7,0xFE,0x00,0x39,0xE7,0xF8,0x00,0x39,0xE3,0xF0, +0x1C,0x39,0xE3,0xC0,0x1E,0x79,0xE3,0xC0,0x1E,0x79,0xE1,0xE0,0x1E,0x79,0xE1,0xE0, +0x3C,0x79,0xE0,0xF0,0x3C,0x79,0xE0,0xF8,0x3C,0xF1,0xE0,0x7C,0x3C,0xF1,0xE3,0x7C, +0x7D,0xF1,0xEF,0x3F,0x79,0xE1,0xFE,0x1F,0x7B,0xE1,0xF8,0x0E,0x7B,0xC3,0xE0,0x00, +0x79,0x81,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: A --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{ +"A"},{ +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,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00, +0x01,0xFF,0x00,0x00,0x01,0xFF,0x00,0x00,0x01,0xEF,0x00,0x00,0x03,0xEF,0x80,0x00, +0x03,0xCF,0x80,0x00,0x07,0xC7,0x80,0x00,0x07,0xC7,0xC0,0x00,0x07,0x87,0xC0,0x00, +0x0F,0x83,0xE0,0x00,0x0F,0x83,0xE0,0x00,0x0F,0x01,0xE0,0x00,0x1F,0xFF,0xF0,0x00, +0x1F,0xFF,0xF0,0x00,0x3F,0xFF,0xF8,0x00,0x3E,0x00,0xF8,0x00,0x3C,0x00,0xF8,0x00, +0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x78,0x00,0x3C,0x00,0xF8,0x00,0x3E,0x00, +0xF8,0x00,0x3E,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}}, + +/*-- 文字: a --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"a"},{ +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,0x07,0xF8,0x00,0x00, +0x1F,0xFE,0x00,0x00,0x3F,0xFE,0x00,0x00,0x3E,0x3F,0x00,0x00,0x38,0x1F,0x00,0x00, +0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0x03,0xFF,0x00,0x00,0x1F,0xFF,0x00,0x00, +0x3F,0x8F,0x00,0x00,0x7C,0x0F,0x00,0x00,0x7C,0x0F,0x00,0x00,0x78,0x1F,0x00,0x00, +0x7C,0x1F,0x00,0x00,0x7E,0x7F,0x00,0x00,0x7F,0xFF,0x00,0x00,0x3F,0xFF,0x00,0x00, +0x0F,0xCF,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}}, + +/*-- 文字: b --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"b"},{ +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,0x3C,0x00,0x00,0x00, +0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00, +0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0xFE,0x00,0x00, +0x3D,0xFF,0x80,0x00,0x3F,0xFF,0xC0,0x00,0x3F,0x8F,0xC0,0x00,0x3F,0x07,0xE0,0x00, +0x3E,0x03,0xE0,0x00,0x3E,0x03,0xE0,0x00,0x3C,0x01,0xE0,0x00,0x3C,0x01,0xE0,0x00, +0x3C,0x01,0xE0,0x00,0x3C,0x03,0xE0,0x00,0x3E,0x03,0xE0,0x00,0x3E,0x03,0xE0,0x00, +0x3F,0x07,0xC0,0x00,0x3F,0x8F,0xC0,0x00,0x3F,0xFF,0x80,0x00,0x3F,0xFF,0x00,0x00, +0x3C,0xFC,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}}, + +/*-- 文字: c --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"c"},{ +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,0x01,0xFC,0x00,0x00, +0x07,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x3F,0x86,0x00,0x00,0x3E,0x00,0x00,0x00, +0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x78,0x00,0x00,0x00, +0x78,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00, +0x3E,0x00,0x00,0x00,0x3F,0x86,0x00,0x00,0x1F,0xFE,0x00,0x00,0x0F,0xFE,0x00,0x00, +0x03,0xFC,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}}, + +/*-- 文字: 微 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"微"},{ +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x01,0xE0,0x07,0x87,0x01,0xE0, +0x07,0x07,0x01,0xC0,0x0F,0xF7,0x79,0xC0,0x1E,0xF7,0x7B,0xC0,0x1E,0xF7,0x7B,0x80, +0x3C,0xF7,0x7B,0xFF,0x78,0xF7,0x7B,0xFF,0xF8,0xF7,0x7F,0x9E,0xF7,0xFF,0xFF,0x9E, +0x67,0xFF,0xFF,0x9E,0x07,0x00,0x7F,0x9C,0x0F,0x00,0x0F,0x9C,0x1E,0x00,0x1F,0x9C, +0x1E,0x7F,0xFF,0xBC,0x3E,0x7F,0xF3,0xFC,0x3E,0x00,0x03,0xFC,0x7E,0x00,0x01,0xF8, +0xFE,0x00,0x01,0xF8,0xFE,0x7F,0xE1,0xF8,0xDE,0x7F,0xE1,0xF8,0x1E,0x78,0xE0,0xF0, +0x1E,0x78,0xEE,0xF0,0x1E,0x78,0xFF,0xF0,0x1E,0x78,0xFD,0xF8,0x1E,0x79,0xFB,0xFC, +0x1E,0xF1,0xF7,0xBC,0x1E,0xF0,0xEF,0x9E,0x1F,0xE0,0x0F,0x0F,0x1E,0xC0,0x1E,0x0F, +0x1E,0x00,0x0C,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 雪 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"雪"},{ +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, +0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00, +0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x78,0x03,0xC0,0x1E,0x78,0x03,0xC0,0x1E, +0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00, +0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00, +0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78, +0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78, +0x00,0x00,0x00,0x78,0x3F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x78, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 电 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"电"},{ +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,0x07,0x80,0x00,0x00,0x07,0x80,0x00, +0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x7F,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0xF8, +0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8, +0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x7F,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0xF8, +0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8, +0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x7F,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0xF8, +0x78,0x07,0x80,0x0E,0x78,0x07,0x80,0x0F,0x00,0x07,0x80,0x0F,0x00,0x07,0x80,0x0F, +0x00,0x07,0x80,0x1F,0x00,0x07,0x80,0x1E,0x00,0x03,0xFF,0xFE,0x00,0x01,0xFF,0xFC, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + +/*-- 文字: 子 --*/ +/*-- 微软雅黑24; 此字体下对应的点阵为:宽x高=32x41 --*/ +{{"子"},{ +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, +0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0, +0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00, +0x00,0x01,0xF8,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00, +0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00, +0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00, +0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00, +0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x00,0xFF,0x80,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00}}, + + +}; + +cFONT Font24CN = { + Font24CN_Table, + sizeof(Font24CN_Table)/sizeof(CH_CN), /*size of table*/ + 24, /* ASCII Width */ + 32, /* Width */ + 41, /* Height */ +}; + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/examples/e-Paper/application_drivers/e-Paper/Fonts/font8.c b/examples/e-Paper/application_drivers/e-Paper/Fonts/font8.c new file mode 100644 index 000000000..88450d989 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Fonts/font8.c @@ -0,0 +1,1004 @@ +/** + ****************************************************************************** + * @file Font8.c + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief This file provides text Font8 for STM32xx-EVAL's LCD driver. + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "fonts.h" + +// +// Font data for Courier New 12pt +// + +const uint8_t Font8_Table[] = +{ + // @0 ' ' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @8 '!' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + + // @16 '"' (5 pixels wide) + 0x50, // # # + 0x50, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @24 '#' (5 pixels wide) + 0x28, // # # + 0x50, // # # + 0xF8, // ##### + 0x50, // # # + 0xF8, // ##### + 0x50, // # # + 0xA0, // # # + 0x00, // + + // @32 '$' (5 pixels wide) + 0x20, // # + 0x30, // ## + 0x60, // ## + 0x30, // ## + 0x10, // # + 0x60, // ## + 0x20, // # + 0x00, // + + // @40 '%' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x18, // ## + 0x60, // ## + 0x10, // # + 0x10, // # + 0x00, // + 0x00, // + + // @48 '&' (5 pixels wide) + 0x00, // + 0x38, // ### + 0x20, // # + 0x60, // ## + 0x50, // # # + 0x78, // #### + 0x00, // + 0x00, // + + // @56 ''' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x20, // # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @64 '(' (5 pixels wide) + 0x10, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x10, // # + 0x00, // + + // @72 ')' (5 pixels wide) + 0x40, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x40, // # + 0x00, // + + // @80 '*' (5 pixels wide) + 0x20, // # + 0x70, // ### + 0x20, // # + 0x50, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @88 '+' (5 pixels wide) + 0x00, // + 0x20, // # + 0x20, // # + 0xF8, // ##### + 0x20, // # + 0x20, // # + 0x00, // + 0x00, // + + // @96 ',' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x10, // # + 0x20, // # + 0x20, // # + 0x00, // + + // @104 '-' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @112 '.' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + + // @120 '/' (5 pixels wide) + 0x10, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x40, // # + 0x40, // # + 0x80, // # + 0x00, // + + // @128 '0' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x50, // # # + 0x50, // # # + 0x50, // # # + 0x20, // # + 0x00, // + 0x00, // + + // @136 '1' (5 pixels wide) + 0x60, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0xF8, // ##### + 0x00, // + 0x00, // + + // @144 '2' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x20, // # + 0x20, // # + 0x40, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @152 '3' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x10, // # + 0x20, // # + 0x10, // # + 0x60, // ## + 0x00, // + 0x00, // + + // @160 '4' (5 pixels wide) + 0x10, // # + 0x30, // ## + 0x50, // # # + 0x78, // #### + 0x10, // # + 0x38, // ### + 0x00, // + 0x00, // + + // @168 '5' (5 pixels wide) + 0x70, // ### + 0x40, // # + 0x60, // ## + 0x10, // # + 0x50, // # # + 0x20, // # + 0x00, // + 0x00, // + + // @176 '6' (5 pixels wide) + 0x30, // ## + 0x40, // # + 0x60, // ## + 0x50, // # # + 0x50, // # # + 0x60, // ## + 0x00, // + 0x00, // + + // @184 '7' (5 pixels wide) + 0x70, // ### + 0x50, // # # + 0x10, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x00, // + 0x00, // + + // @192 '8' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x20, // # + 0x50, // # # + 0x50, // # # + 0x20, // # + 0x00, // + 0x00, // + + // @200 '9' (5 pixels wide) + 0x30, // ## + 0x50, // # # + 0x50, // # # + 0x30, // ## + 0x10, // # + 0x60, // ## + 0x00, // + 0x00, // + + // @208 ':' (5 pixels wide) + 0x00, // + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + + // @216 ';' (5 pixels wide) + 0x00, // + 0x00, // + 0x10, // # + 0x00, // + 0x10, // # + 0x20, // # + 0x00, // + 0x00, // + + // @224 '<' (5 pixels wide) + 0x00, // + 0x10, // # + 0x20, // # + 0xC0, // ## + 0x20, // # + 0x10, // # + 0x00, // + 0x00, // + + // @232 '=' (5 pixels wide) + 0x00, // + 0x70, // ### + 0x00, // + 0x70, // ### + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @240 '>' (5 pixels wide) + 0x00, // + 0x40, // # + 0x20, // # + 0x18, // ## + 0x20, // # + 0x40, // # + 0x00, // + 0x00, // + + // @248 '?' (5 pixels wide) + 0x20, // # + 0x50, // # # + 0x10, // # + 0x20, // # + 0x00, // + 0x20, // # + 0x00, // + 0x00, // + + // @256 '@' (5 pixels wide) + 0x30, // ## + 0x48, // # # + 0x48, // # # + 0x58, // # ## + 0x48, // # # + 0x40, // # + 0x38, // ### + 0x00, // + + // @264 'A' (5 pixels wide) + 0x60, // ## + 0x20, // # + 0x50, // # # + 0x70, // ### + 0x88, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @272 'B' (5 pixels wide) + 0xF0, // #### + 0x48, // # # + 0x70, // ### + 0x48, // # # + 0x48, // # # + 0xF0, // #### + 0x00, // + 0x00, // + + // @280 'C' (5 pixels wide) + 0x70, // ### + 0x50, // # # + 0x40, // # + 0x40, // # + 0x40, // # + 0x30, // ## + 0x00, // + 0x00, // + + // @288 'D' (5 pixels wide) + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0xF0, // #### + 0x00, // + 0x00, // + + // @296 'E' (5 pixels wide) + 0xF8, // ##### + 0x48, // # # + 0x60, // ## + 0x40, // # + 0x48, // # # + 0xF8, // ##### + 0x00, // + 0x00, // + + // @304 'F' (5 pixels wide) + 0xF8, // ##### + 0x48, // # # + 0x60, // ## + 0x40, // # + 0x40, // # + 0xE0, // ### + 0x00, // + 0x00, // + + // @312 'G' (5 pixels wide) + 0x70, // ### + 0x40, // # + 0x40, // # + 0x58, // # ## + 0x50, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @320 'H' (5 pixels wide) + 0xE8, // ### # + 0x48, // # # + 0x78, // #### + 0x48, // # # + 0x48, // # # + 0xE8, // ### # + 0x00, // + 0x00, // + + // @328 'I' (5 pixels wide) + 0x70, // ### + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @336 'J' (5 pixels wide) + 0x38, // ### + 0x10, // # + 0x10, // # + 0x50, // # # + 0x50, // # # + 0x20, // # + 0x00, // + 0x00, // + + // @344 'K' (5 pixels wide) + 0xD8, // ## ## + 0x50, // # # + 0x60, // ## + 0x70, // ### + 0x50, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @352 'L' (5 pixels wide) + 0xE0, // ### + 0x40, // # + 0x40, // # + 0x40, // # + 0x48, // # # + 0xF8, // ##### + 0x00, // + 0x00, // + + // @360 'M' (5 pixels wide) + 0xD8, // ## ## + 0xD8, // ## ## + 0xD8, // ## ## + 0xA8, // # # # + 0x88, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @368 'N' (5 pixels wide) + 0xD8, // ## ## + 0x68, // ## # + 0x68, // ## # + 0x58, // # ## + 0x58, // # ## + 0xE8, // ### # + 0x00, // + 0x00, // + + // @376 'O' (5 pixels wide) + 0x30, // ## + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @384 'P' (5 pixels wide) + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0x70, // ### + 0x40, // # + 0xE0, // ### + 0x00, // + 0x00, // + + // @392 'Q' (5 pixels wide) + 0x30, // ## + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x18, // ## + 0x00, // + + // @400 'R' (5 pixels wide) + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0x70, // ### + 0x48, // # # + 0xE8, // ### # + 0x00, // + 0x00, // + + // @408 'S' (5 pixels wide) + 0x70, // ### + 0x50, // # # + 0x20, // # + 0x10, // # + 0x50, // # # + 0x70, // ### + 0x00, // + 0x00, // + + // @416 'T' (5 pixels wide) + 0xF8, // ##### + 0xA8, // # # # + 0x20, // # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @424 'U' (5 pixels wide) + 0xD8, // ## ## + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @432 'V' (5 pixels wide) + 0xD8, // ## ## + 0x88, // # # + 0x48, // # # + 0x50, // # # + 0x50, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @440 'W' (5 pixels wide) + 0xD8, // ## ## + 0x88, // # # + 0xA8, // # # # + 0xA8, // # # # + 0xA8, // # # # + 0x50, // # # + 0x00, // + 0x00, // + + // @448 'X' (5 pixels wide) + 0xD8, // ## ## + 0x50, // # # + 0x20, // # + 0x20, // # + 0x50, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @456 'Y' (5 pixels wide) + 0xD8, // ## ## + 0x88, // # # + 0x50, // # # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @464 'Z' (5 pixels wide) + 0x78, // #### + 0x48, // # # + 0x10, // # + 0x20, // # + 0x48, // # # + 0x78, // #### + 0x00, // + 0x00, // + + // @472 '[' (5 pixels wide) + 0x30, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x30, // ## + 0x00, // + + // @480 '\' (5 pixels wide) + 0x80, // # + 0x40, // # + 0x40, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x10, // # + 0x00, // + + // @488 ']' (5 pixels wide) + 0x60, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x60, // ## + 0x00, // + + // @496 '^' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x50, // # # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @504 '_' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0xF8, // ##### + + // @512 '`' (5 pixels wide) + 0x20, // # + 0x10, // # + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + 0x00, // + + // @520 'a' (5 pixels wide) + 0x00, // + 0x00, // + 0x30, // ## + 0x10, // # + 0x70, // ### + 0x78, // #### + 0x00, // + 0x00, // + + // @528 'b' (5 pixels wide) + 0xC0, // ## + 0x40, // # + 0x70, // ### + 0x48, // # # + 0x48, // # # + 0xF0, // #### + 0x00, // + 0x00, // + + // @536 'c' (5 pixels wide) + 0x00, // + 0x00, // + 0x70, // ### + 0x40, // # + 0x40, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @544 'd' (5 pixels wide) + 0x18, // ## + 0x08, // # + 0x38, // ### + 0x48, // # # + 0x48, // # # + 0x38, // ### + 0x00, // + 0x00, // + + // @552 'e' (5 pixels wide) + 0x00, // + 0x00, // + 0x70, // ### + 0x70, // ### + 0x40, // # + 0x30, // ## + 0x00, // + 0x00, // + + // @560 'f' (5 pixels wide) + 0x10, // # + 0x20, // # + 0x70, // ### + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @568 'g' (5 pixels wide) + 0x00, // + 0x00, // + 0x38, // ### + 0x48, // # # + 0x48, // # # + 0x38, // ### + 0x08, // # + 0x30, // ## + + // @576 'h' (5 pixels wide) + 0xC0, // ## + 0x40, // # + 0x70, // ### + 0x48, // # # + 0x48, // # # + 0xE8, // ### # + 0x00, // + 0x00, // + + // @584 'i' (5 pixels wide) + 0x20, // # + 0x00, // + 0x60, // ## + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @592 'j' (5 pixels wide) + 0x20, // # + 0x00, // + 0x70, // ### + 0x10, // # + 0x10, // # + 0x10, // # + 0x10, // # + 0x70, // ### + + // @600 'k' (5 pixels wide) + 0xC0, // ## + 0x40, // # + 0x58, // # ## + 0x70, // ### + 0x50, // # # + 0xD8, // ## ## + 0x00, // + 0x00, // + + // @608 'l' (5 pixels wide) + 0x60, // ## + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @616 'm' (5 pixels wide) + 0x00, // + 0x00, // + 0xD0, // ## # + 0xA8, // # # # + 0xA8, // # # # + 0xA8, // # # # + 0x00, // + 0x00, // + + // @624 'n' (5 pixels wide) + 0x00, // + 0x00, // + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0xC8, // ## # + 0x00, // + 0x00, // + + // @632 'o' (5 pixels wide) + 0x00, // + 0x00, // + 0x30, // ## + 0x48, // # # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @640 'p' (5 pixels wide) + 0x00, // + 0x00, // + 0xF0, // #### + 0x48, // # # + 0x48, // # # + 0x70, // ### + 0x40, // # + 0xE0, // ### + + // @648 'q' (5 pixels wide) + 0x00, // + 0x00, // + 0x38, // ### + 0x48, // # # + 0x48, // # # + 0x38, // ### + 0x08, // # + 0x18, // ## + + // @656 'r' (5 pixels wide) + 0x00, // + 0x00, // + 0x78, // #### + 0x20, // # + 0x20, // # + 0x70, // ### + 0x00, // + 0x00, // + + // @664 's' (5 pixels wide) + 0x00, // + 0x00, // + 0x30, // ## + 0x20, // # + 0x10, // # + 0x60, // ## + 0x00, // + 0x00, // + + // @672 't' (5 pixels wide) + 0x00, // + 0x40, // # + 0xF0, // #### + 0x40, // # + 0x48, // # # + 0x30, // ## + 0x00, // + 0x00, // + + // @680 'u' (5 pixels wide) + 0x00, // + 0x00, // + 0xD8, // ## ## + 0x48, // # # + 0x48, // # # + 0x38, // ### + 0x00, // + 0x00, // + + // @688 'v' (5 pixels wide) + 0x00, // + 0x00, // + 0xC8, // ## # + 0x48, // # # + 0x30, // ## + 0x30, // ## + 0x00, // + 0x00, // + + // @696 'w' (5 pixels wide) + 0x00, // + 0x00, // + 0xD8, // ## ## + 0xA8, // # # # + 0xA8, // # # # + 0x50, // # # + 0x00, // + 0x00, // + + // @704 'x' (5 pixels wide) + 0x00, // + 0x00, // + 0x48, // # # + 0x30, // ## + 0x30, // ## + 0x48, // # # + 0x00, // + 0x00, // + + // @712 'y' (5 pixels wide) + 0x00, // + 0x00, // + 0xD8, // ## ## + 0x50, // # # + 0x50, // # # + 0x20, // # + 0x20, // # + 0x60, // ## + + // @720 'z' (5 pixels wide) + 0x00, // + 0x00, // + 0x78, // #### + 0x50, // # # + 0x28, // # # + 0x78, // #### + 0x00, // + 0x00, // + + // @728 '{' (5 pixels wide) + 0x10, // # + 0x20, // # + 0x20, // # + 0x60, // ## + 0x20, // # + 0x20, // # + 0x10, // # + 0x00, // + + // @736 '|' (5 pixels wide) + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x20, // # + 0x00, // + + // @744 '}' (5 pixels wide) + 0x40, // # + 0x20, // # + 0x20, // # + 0x30, // ## + 0x20, // # + 0x20, // # + 0x40, // # + 0x00, // + + // @752 '~' (5 pixels wide) + 0x00, // + 0x00, // + 0x00, // + 0x28, // # # + 0x50, // # # + 0x00, // + 0x00, // + 0x00, // +}; + +sFONT Font8 = { + Font8_Table, + 5, /* Width */ + 8, /* Height */ +}; + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/examples/e-Paper/application_drivers/e-Paper/Fonts/fonts.h b/examples/e-Paper/application_drivers/e-Paper/Fonts/fonts.h new file mode 100644 index 000000000..8a745becd --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/Fonts/fonts.h @@ -0,0 +1,202 @@ +/** + ****************************************************************************** + * @file fonts.h + * @author MCD Application Team + * @version V1.0.0 + * @date 18-February-2014 + * @brief 字体数据头文件 + * + * 本文件定义了用于电子墨水屏显示的字体数据结构和字体声明 + * + * 支持的字体: + * - 英文ASCII字体:Font8, Font12, Font16, Font20, Font24 + * - 中文字体:Font12CN, Font24CN(UTF-8编码) + * + * 字体数据格式: + * - 每个字符由点阵数据表示 + * - 每个像素占1位,8像素=1字节 + * - 数据按行存储,高位在左 + ****************************************************************************** + * @attention + * + *

© COPYRIGHT(c) 2014 STMicroelectronics

+ * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* 防止头文件重复包含 */ +#ifndef __FONTS_H +#define __FONTS_H + +/*============================================================================ + 字体尺寸限制定义 +============================================================================*/ +/** + * @brief 字体最大尺寸定义 + * @details 定义字体点阵数据的最大尺寸限制 + * 用于静态分配中文字符点阵数组大小 + * + * MAX_HEIGHT_FONT: 最大字体高度(像素) + * MAX_WIDTH_FONT: 最大字体宽度(像素) + * OFFSET_BITMAP: BMP文件头偏移量 + */ +#define MAX_HEIGHT_FONT 41 // 最大字体高度:41像素 +#define MAX_WIDTH_FONT 32 // 最大字体宽度:32像素 +#define OFFSET_BITMAP 54 // BMP文件数据偏移量 + +#ifdef __cplusplus + extern "C" { +#endif + +/*============================================================================ + 头文件包含 +============================================================================*/ +#include // 标准整数类型定义 + +/*============================================================================ + ASCII字体结构体定义 +============================================================================*/ +/** + * @brief ASCII字体结构体 + * @details 用于存储ASCII字符集(英文、数字、符号)的字体信息 + * + * 成员说明: + * - table: 点阵数据表指针,存储所有字符的点阵数据 + * - Width: 单个字符宽度(像素) + * - Height: 单个字符高度(像素) + * + * 点阵数据存储格式: + * - 按ASCII码顺序存储,从空格(' '=0x20)开始 + * - 每个字符占用 Height * ((Width+7)/8) 字节 + * - 每行按字节对齐,高位在左 + * + * 使用示例: + * 要获取字符'A'的点阵数据: + * offset = ('A' - ' ') * Height * ((Width+7)/8) + * data = &table[offset] + */ +typedef struct _tFont +{ + const uint8_t *table; // 点阵数据表指针 + uint16_t Width; // 字符宽度(像素) + uint16_t Height; // 字符高度(像素) +} sFONT; + +/*============================================================================ + 中文字体结构体定义 +============================================================================*/ +/** + * @brief 中文字符数据结构体 + * @details 存储单个中文字符的索引和点阵数据 + * + * 成员说明: + * - index: 字符索引(UTF-8编码,最多4字节) + * - matrix: 点阵数据数组 + * + * UTF-8编码说明: + * - ASCII字符:1字节(0x00-0x7F) + * - 中文字符:3字节(0xE0-0xEF开头) + * - index[3]用于字符串结束符'\0' + */ +typedef struct +{ + unsigned char index[4]; // UTF-8字符索引(3字节+结束符) + const char matrix[MAX_HEIGHT_FONT * MAX_WIDTH_FONT / 8]; // 点阵数据 +} CH_CN; + +/** + * @brief 中文字体结构体 + * @details 存储整个中文字体的信息,包含字符表和尺寸信息 + * + * 成员说明: + * - table: 字符数据表指针(CH_CN数组) + * - size: 字符表中的字符数量 + * - ASCII_Width: ASCII字符宽度(半角) + * - Width: 中文字符宽度(全角) + * - Height: 字符高度 + * + * 使用说明: + * - 中文字体通常包含常用汉字和ASCII字符 + * - ASCII字符宽度通常是中文字符宽度的一半 + * - 查找字符时需要遍历table数组匹配index + */ +typedef struct +{ + const CH_CN *table; // 字符数据表指针 + uint16_t size; // 字符数量 + uint16_t ASCII_Width; // ASCII字符宽度(像素) + uint16_t Width; // 中文字符宽度(像素) + uint16_t Height; // 字符高度(像素) +} cFONT; + +/*============================================================================ + 字体变量声明 +============================================================================*/ +/** + * @brief ASCII字体声明 + * @details 提供5种不同大小的ASCII字体 + * + * 字体规格: + * ┌─────────┬───────┬────────┬──────────────────────┐ + * │ 字体 │ 宽度 │ 高度 │ 适用场景 │ + * ├─────────┼───────┼────────┼──────────────────────┤ + * │ Font8 │ 5px │ 8px │ 小型标签、密集文字 │ + * │ Font12 │ 7px │ 12px │ 小型文字、注释 │ + * │ Font16 │ 11px │ 16px │ 正常文字显示 │ + * │ Font20 │ 14px │ 20px │ 较大文字、标题 │ + * │ Font24 │ 17px │ 24px │ 大标题、重要信息 │ + * └─────────┴───────┴────────┴──────────────────────┘ + */ +extern sFONT Font24; // 24像素高度字体(17x24) +extern sFONT Font20; // 20像素高度字体(14x20) +extern sFONT Font16; // 16像素高度字体(11x16) +extern sFONT Font12; // 12像素高度字体(7x12) +extern sFONT Font8; // 8像素高度字体(5x8) + +/** + * @brief 中文字体声明 + * @details 提供2种中文字体,支持UTF-8编码的汉字显示 + * + * 字体规格: + * ┌───────────┬────────┬────────┬──────────────────┐ + * │ 字体 │ 中文宽 │ 高度 │ 适用场景 │ + * ├───────────┼────────┼────────┼──────────────────┤ + * │ Font12CN │ 12px │ 12px │ 小型中文显示 │ + * │ Font24CN │ 24px │ 24px │ 正常中文显示 │ + * └───────────┴────────┴────────┴──────────────────┘ + * + * 注意:中文字体只包含预定义的常用汉字 + * 需要显示的汉字必须在字体表中存在 + */ +extern cFONT Font12CN; // 12像素中文字体 +extern cFONT Font24CN; // 24像素中文字体 + +#ifdef __cplusplus +} +#endif + +#endif /* __FONTS_H */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_BMPfile.c b/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_BMPfile.c new file mode 100644 index 000000000..57cd5f78d --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_BMPfile.c @@ -0,0 +1,529 @@ +/***************************************************************************** +* | File : GUI_BMPfile.h +* | Author : Waveshare team +* | Function : Hardware underlying interface +* | Info : +* Used to shield the underlying layers of each master +* and enhance portability +*---------------- +* | This version: V2.3 +* | Date : 2022-07-27 +* | Info : +* ----------------------------------------------------------------------------- +* V2.3(2022-07-27): +* 1.Add GUI_ReadBmp_RGB_4Color() +* V2.2(2020-07-08): +* 1.Add GUI_ReadBmp_RGB_7Color() +* V2.1(2019-10-10): +* 1.Add GUI_ReadBmp_4Gray() +* V2.0(2018-11-12): +* 1.Change file name: GUI_BMP.h -> GUI_BMPfile.h +* 2.fix: GUI_ReadBmp() +* Now Xstart and Xstart can control the position of the picture normally, +* and support the display of images of any size. If it is larger than +* the actual display range, it will not be displayed. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +******************************************************************************/ + +#include "GUI_BMPfile.h" +#include "GUI_Paint.h" +#include "Debug.h" + +#include +#include +#include +#include //exit() +#include //memset() +#include //memset() +#include + +UBYTE GUI_ReadBmp(const char *path, UWORD Xstart, UWORD Ystart) +{ + FILE *fp; //Define a file pointer + BMPFILEHEADER bmpFileHeader; //Define a bmp file header structure + BMPINFOHEADER bmpInfoHeader; //Define a bmp info header structure + + + // Binary file open + if((fp = fopen(path, "rb")) == NULL) { + Debug("Cann't open the file!\n"); + exit(0); + } + + // Set the file pointer from the beginning + fseek(fp, 0, SEEK_SET); + fread(&bmpFileHeader, sizeof(BMPFILEHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 14 + fread(&bmpInfoHeader, sizeof(BMPINFOHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 50 + printf("pixel = %d * %d\r\n", bmpInfoHeader.biWidth, bmpInfoHeader.biHeight); + + UWORD Image_Width_Byte = (bmpInfoHeader.biWidth % 8 == 0)? (bmpInfoHeader.biWidth / 8): (bmpInfoHeader.biWidth / 8 + 1); + UWORD Bmp_Width_Byte = (Image_Width_Byte % 4 == 0) ? Image_Width_Byte: ((Image_Width_Byte / 4 + 1) * 4); + UBYTE Image[Image_Width_Byte * bmpInfoHeader.biHeight]; + memset(Image, 0xFF, Image_Width_Byte * bmpInfoHeader.biHeight); + + // Determine if it is a monochrome bitmap + int readbyte = bmpInfoHeader.biBitCount; + if(readbyte != 1) { + Debug("the bmp Image is not a monochrome bitmap!\n"); + exit(0); + } + + // Determine black and white based on the palette + UWORD i; + UWORD Bcolor, Wcolor; + UWORD bmprgbquadsize = pow(2, bmpInfoHeader.biBitCount);// 2^1 = 2 + BMPRGBQUAD bmprgbquad[bmprgbquadsize]; //palette + // BMPRGBQUAD bmprgbquad[2]; //palette + + for(i = 0; i < bmprgbquadsize; i++){ + // for(i = 0; i < 2; i++) { + fread(&bmprgbquad[i], sizeof(BMPRGBQUAD), 1, fp); + } + if(bmprgbquad[0].rgbBlue == 0xff && bmprgbquad[0].rgbGreen == 0xff && bmprgbquad[0].rgbRed == 0xff) { + Bcolor = BLACK; + Wcolor = WHITE; + } else { + Bcolor = WHITE; + Wcolor = BLACK; + } + + // Read image data into the cache + UWORD x, y; + UBYTE Rdata; + fseek(fp, bmpFileHeader.bOffset, SEEK_SET); + for(y = 0; y < bmpInfoHeader.biHeight; y++) {//Total display column + for(x = 0; x < Bmp_Width_Byte; x++) {//Show a line in the line + if(fread((char *)&Rdata, 1, readbyte, fp) != readbyte) { + perror("get bmpdata:\r\n"); + break; + } + if(x < Image_Width_Byte) { //bmp + Image[x + (bmpInfoHeader.biHeight - y - 1) * Image_Width_Byte] = Rdata; + // printf("rdata = %d\r\n", Rdata); + } + } + } + fclose(fp); + + // Refresh the image to the display buffer based on the displayed orientation + UBYTE color, temp; + for(y = 0; y < bmpInfoHeader.biHeight; y++) { + for(x = 0; x < bmpInfoHeader.biWidth; x++) { + if(x > Paint.Width || y > Paint.Height) { + break; + } + temp = Image[(x / 8) + (y * Image_Width_Byte)]; + color = (((temp << (x%8)) & 0x80) == 0x80) ?Bcolor:Wcolor; + Paint_SetPixel(Xstart + x, Ystart + y, color); + } + } + return 0; +} +/************************************************************************* + +*************************************************************************/ +UBYTE GUI_ReadBmp_4Gray(const char *path, UWORD Xstart, UWORD Ystart) +{ + FILE *fp; //Define a file pointer + BMPFILEHEADER bmpFileHeader; //Define a bmp file header structure + BMPINFOHEADER bmpInfoHeader; //Define a bmp info header structure + + // Binary file open + if((fp = fopen(path, "rb")) == NULL) { + Debug("Cann't open the file!\n"); + exit(0); + } + + // Set the file pointer from the beginning + fseek(fp, 0, SEEK_SET); + fread(&bmpFileHeader, sizeof(BMPFILEHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 14 + fread(&bmpInfoHeader, sizeof(BMPINFOHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 50 + printf("pixel = %d * %d\r\n", bmpInfoHeader.biWidth, bmpInfoHeader.biHeight); + + UWORD Image_Width_Byte = (bmpInfoHeader.biWidth % 4 == 0)? (bmpInfoHeader.biWidth / 4): (bmpInfoHeader.biWidth / 4 + 1); + UWORD Bmp_Width_Byte = (bmpInfoHeader.biWidth % 2 == 0)? (bmpInfoHeader.biWidth / 2): (bmpInfoHeader.biWidth / 2 + 1); + UBYTE Image[Image_Width_Byte * bmpInfoHeader.biHeight * 2]; + memset(Image, 0xFF, Image_Width_Byte * bmpInfoHeader.biHeight * 2); + + // Determine if it is a monochrome bitmap + int readbyte = bmpInfoHeader.biBitCount; + printf("biBitCount = %d\r\n",readbyte); + if(readbyte != 4){ + Debug("Bmp image is not a 4-color bitmap!\n"); + exit(0); + } + // Read image data into the cache + UWORD x, y; + UBYTE Rdata; + fseek(fp, bmpFileHeader.bOffset, SEEK_SET); + + for(y = 0; y < bmpInfoHeader.biHeight; y++) {//Total display column + for(x = 0; x < Bmp_Width_Byte; x++) {//Show a line in the line + if(fread((char *)&Rdata, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + if(x < Image_Width_Byte*2) { //bmp + Image[x + (bmpInfoHeader.biHeight - y - 1) * Image_Width_Byte*2] = Rdata; + } + } + } + fclose(fp); + + // Refresh the image to the display buffer based on the displayed orientation + UBYTE color, temp; + printf("bmpInfoHeader.biWidth = %d\r\n",bmpInfoHeader.biWidth); + printf("bmpInfoHeader.biHeight = %d\r\n",bmpInfoHeader.biHeight); + for(y = 0; y < bmpInfoHeader.biHeight; y++) { + for(x = 0; x < bmpInfoHeader.biWidth; x++) { + if(x > Paint.Width || y > Paint.Height) { + break; + } + temp = Image[x/2 + y * bmpInfoHeader.biWidth/2] >> ((x%2)? 0:4);//0xf 0x8 0x7 0x0 + color = temp>>2; //11 10 01 00 + Paint_SetPixel(Xstart + x, Ystart + y, color); + } + } + return 0; +} + +UBYTE GUI_ReadBmp_16Gray(const char *path, UWORD Xstart, UWORD Ystart) +{ + FILE *fp; //Define a file pointer + BMPFILEHEADER bmpFileHeader; //Define a bmp file header structure + BMPINFOHEADER bmpInfoHeader; //Define a bmp info header structure + + // Binary file open + if((fp = fopen(path, "rb")) == NULL) { + Debug("Cann't open the file!\n"); + exit(0); + } + + // Set the file pointer from the beginning + fseek(fp, 0, SEEK_SET); + fread(&bmpFileHeader, sizeof(BMPFILEHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 14 + fread(&bmpInfoHeader, sizeof(BMPINFOHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 50 + printf("pixel = %d * %d\r\n", bmpInfoHeader.biWidth, bmpInfoHeader.biHeight); + + // They are both the same width in bytes + // round up to the next byte + UWORD Width_Byte = (bmpInfoHeader.biWidth + 1) / 2; + UBYTE Image[Width_Byte * bmpInfoHeader.biHeight]; + memset(Image, 0xFF, Width_Byte * bmpInfoHeader.biHeight); + + // Determine if it is a monochrome bitmap + int readbyte = bmpInfoHeader.biBitCount; + printf("biBitCount = %d\r\n",readbyte); + if(readbyte != 4) { + Debug("Bmp image is not a 4-bit bitmap!\n"); + exit(0); + } + + // Determine colors based on the palette + + // A map from palette entry to color + UBYTE colors[16]; + UBYTE i; + BMPRGBQUAD rgbData; + + for (i = 0; i < 16; i++){ + fread(&rgbData, sizeof(BMPRGBQUAD), 1, fp); + + // Work out the closest colour + // 16 colours over 0-255 => 0-8 => 0, 9-25 => 1 (17), 26-42 => 2 (34), etc + + // Base it on red + colors[i] = (rgbData.rgbRed + 8) / 17; + } + + // Read image data into the cache + UWORD x, y; + UBYTE Rdata; + fseek(fp, bmpFileHeader.bOffset, SEEK_SET); + + for (y = 0; y < bmpInfoHeader.biHeight; y++) {//Total display column + for (x = 0; x < Width_Byte; x++) {//Show a line in the line + if (fread((char *) &Rdata, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + Image[x + (bmpInfoHeader.biHeight - y - 1) * Width_Byte] = Rdata; + } + } + fclose(fp); + + // Refresh the image to the display buffer based on the displayed orientation + UBYTE coloridx; + printf("bmpInfoHeader.biWidth = %d\r\n", bmpInfoHeader.biWidth); + printf("bmpInfoHeader.biHeight = %d\r\n", bmpInfoHeader.biHeight); + for (y = 0; y < bmpInfoHeader.biHeight; y++) { + for (x = 0; x < bmpInfoHeader.biWidth; x++) { + if (Xstart + x > Paint.Width || Ystart + y > Paint.Height) + break; + + coloridx = (Image[x / 2 + y * Width_Byte] >> ((x % 2) ? 0 : 4)) & 15; + Paint_SetPixel(Xstart + x, Ystart + y, colors[coloridx]); + } + } + return 0; +} + +UBYTE GUI_ReadBmp_RGB_7Color(const char *path, UWORD Xstart, UWORD Ystart) +{ + FILE *fp; //Define a file pointer + BMPFILEHEADER bmpFileHeader; //Define a bmp file header structure + BMPINFOHEADER bmpInfoHeader; //Define a bmp info header structure + + // Binary file open + if((fp = fopen(path, "rb")) == NULL) { + Debug("Cann't open the file!\n"); + exit(0); + } + + // Set the file pointer from the beginning + fseek(fp, 0, SEEK_SET); + fread(&bmpFileHeader, sizeof(BMPFILEHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 14 + fread(&bmpInfoHeader, sizeof(BMPINFOHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 50 + printf("pixel = %d * %d\r\n", bmpInfoHeader.biWidth, bmpInfoHeader.biHeight); + + UDOUBLE Image_Byte = bmpInfoHeader.biWidth * bmpInfoHeader.biHeight * 3; + UBYTE Image[Image_Byte]; + memset(Image, 0xFF, Image_Byte); + + // Determine if it is a monochrome bitmap + int readbyte = bmpInfoHeader.biBitCount; + if(readbyte != 24){ + Debug("Bmp image is not 24 bitmap!\n"); + exit(0); + } + // Read image data into the cache + UWORD x, y; + UBYTE Rdata[3]; + fseek(fp, bmpFileHeader.bOffset, SEEK_SET); + + for(y = 0; y < bmpInfoHeader.biHeight; y++) {//Total display column + for(x = 0; x < bmpInfoHeader.biWidth ; x++) {//Show a line in the line + if(fread((char *)Rdata, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + if(fread((char *)Rdata+1, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + if(fread((char *)Rdata+2, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + + if(Rdata[0] == 0 && Rdata[1] == 0 && Rdata[2] == 0){ + Image[x+(y* bmpInfoHeader.biWidth )] = 0;//Black + }else if(Rdata[0] == 255 && Rdata[1] == 255 && Rdata[2] == 255){ + Image[x+(y* bmpInfoHeader.biWidth )] = 1;//White + }else if(Rdata[0] == 0 && Rdata[1] == 255 && Rdata[2] == 0){ + Image[x+(y* bmpInfoHeader.biWidth )] = 2;//Green + }else if(Rdata[0] == 255 && Rdata[1] == 0 && Rdata[2] == 0){ + Image[x+(y* bmpInfoHeader.biWidth )] = 3;//Blue + }else if(Rdata[0] == 0 && Rdata[1] == 0 && Rdata[2] == 255){ + Image[x+(y* bmpInfoHeader.biWidth )] = 4;//Red + }else if(Rdata[0] == 0 && Rdata[1] == 255 && Rdata[2] == 255){ + Image[x+(y* bmpInfoHeader.biWidth )] = 5;//Yellow + }else if(Rdata[0] == 0 && Rdata[1] == 128 && Rdata[2] == 255){ + Image[x+(y* bmpInfoHeader.biWidth )] = 6;//Orange + } + } + } + fclose(fp); + + // Refresh the image to the display buffer based on the displayed orientation + for(y = 0; y < bmpInfoHeader.biHeight; y++) { + for(x = 0; x < bmpInfoHeader.biWidth; x++) { + if(x > Paint.Width || y > Paint.Height) { + break; + } + Paint_SetPixel(Xstart + x, Ystart + y, Image[bmpInfoHeader.biHeight * bmpInfoHeader.biWidth - 1 -(bmpInfoHeader.biWidth-x-1+(y* bmpInfoHeader.biWidth))]); + } + } + return 0; +} + +UBYTE GUI_ReadBmp_RGB_4Color(const char *path, UWORD Xstart, UWORD Ystart) +{ + FILE *fp; //Define a file pointer + BMPFILEHEADER bmpFileHeader; //Define a bmp file header structure + BMPINFOHEADER bmpInfoHeader; //Define a bmp info header structure + + // Binary file open + if((fp = fopen(path, "rb")) == NULL) { + Debug("Cann't open the file!\n"); + exit(0); + } + + // Set the file pointer from the beginning + fseek(fp, 0, SEEK_SET); + fread(&bmpFileHeader, sizeof(BMPFILEHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 14 + fread(&bmpInfoHeader, sizeof(BMPINFOHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 50 + printf("pixel = %d * %d\r\n", bmpInfoHeader.biWidth, bmpInfoHeader.biHeight); + + UDOUBLE Image_Byte = bmpInfoHeader.biWidth * bmpInfoHeader.biHeight * 3; + UBYTE Image[Image_Byte]; + memset(Image, 0xFF, Image_Byte); + + // Determine if it is a monochrome bitmap + int readbyte = bmpInfoHeader.biBitCount; + if(readbyte != 24){ + Debug("Bmp image is not 24 bitmap!\n"); + exit(0); + } + // Read image data into the cache + UWORD x, y; + UBYTE Rdata[3]; + fseek(fp, bmpFileHeader.bOffset, SEEK_SET); + + for(y = 0; y < bmpInfoHeader.biHeight; y++) {//Total display column + for(x = 0; x < bmpInfoHeader.biWidth ; x++) {//Show a line in the line + if(fread((char *)Rdata, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + if(fread((char *)Rdata+1, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + if(fread((char *)Rdata+2, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + if(Rdata[0] < 128 && Rdata[1] < 128 && Rdata[2] < 128){ + Image[x+(y* bmpInfoHeader.biWidth )] = 0;//Black + }else if(Rdata[0] > 127 && Rdata[1] > 127 && Rdata[2] > 127){ + Image[x+(y* bmpInfoHeader.biWidth )] = 1;//White + }else if(Rdata[0] < 128 && Rdata[1] > 127 && Rdata[2] > 127){ + Image[x+(y* bmpInfoHeader.biWidth )] = 2;//Yellow + }else if(Rdata[0] < 128 && Rdata[1] < 128 && Rdata[2] > 127){ + Image[x+(y* bmpInfoHeader.biWidth )] = 3;//Red + } + } + if(bmpInfoHeader.biWidth % 4 != 0) + { + for (UWORD i = 0; i < (bmpInfoHeader.biWidth % 4); i++) + { + if(fread((char *)Rdata, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + } + } + } + fclose(fp); + + // Refresh the image to the display buffer based on the displayed orientation + for(y = 0; y < bmpInfoHeader.biHeight; y++) { + for(x = 0; x < bmpInfoHeader.biWidth; x++) { + if(x > Paint.Width || y > Paint.Height) { + break; + } + Paint_SetPixel(Xstart + x, Ystart + y, Image[bmpInfoHeader.biHeight * bmpInfoHeader.biWidth - 1 -(bmpInfoHeader.biWidth-x-1+(y* bmpInfoHeader.biWidth))]); + } + } + return 0; +} + +UBYTE GUI_ReadBmp_RGB_6Color(const char *path, UWORD Xstart, UWORD Ystart) +{ + FILE *fp; //Define a file pointer + BMPFILEHEADER bmpFileHeader; //Define a bmp file header structure + BMPINFOHEADER bmpInfoHeader; //Define a bmp info header structure + + // Binary file open + if((fp = fopen(path, "rb")) == NULL) { + Debug("Cann't open the file!\n"); + exit(0); + } + + // Set the file pointer from the beginning + fseek(fp, 0, SEEK_SET); + fread(&bmpFileHeader, sizeof(BMPFILEHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 14 + fread(&bmpInfoHeader, sizeof(BMPINFOHEADER), 1, fp); //sizeof(BMPFILEHEADER) must be 50 + printf("pixel = %d * %d\r\n", bmpInfoHeader.biWidth, bmpInfoHeader.biHeight); + + UDOUBLE Image_Byte = bmpInfoHeader.biWidth * bmpInfoHeader.biHeight * 3; + UBYTE Image[Image_Byte]; + memset(Image, 0xFF, Image_Byte); + + // Determine if it is a monochrome bitmap + int readbyte = bmpInfoHeader.biBitCount; + if(readbyte != 24){ + Debug("Bmp image is not 24 bitmap!\n"); + exit(0); + } + // Read image data into the cache + UWORD x, y; + UBYTE Rdata[3]; + fseek(fp, bmpFileHeader.bOffset, SEEK_SET); + + for(y = 0; y < bmpInfoHeader.biHeight; y++) {//Total display column + for(x = 0; x < bmpInfoHeader.biWidth ; x++) {//Show a line in the line + if(fread((char *)Rdata, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + if(fread((char *)Rdata+1, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + if(fread((char *)Rdata+2, 1, 1, fp) != 1) { + perror("get bmpdata:\r\n"); + break; + } + + if(Rdata[0] == 0 && Rdata[1] == 0 && Rdata[2] == 0){ + Image[x+(y* bmpInfoHeader.biWidth )] = 0;//Black + }else if(Rdata[0] == 255 && Rdata[1] == 255 && Rdata[2] == 255){ + Image[x+(y* bmpInfoHeader.biWidth )] = 1;//White + }else if(Rdata[0] == 0 && Rdata[1] == 255 && Rdata[2] == 255){ + Image[x+(y* bmpInfoHeader.biWidth )] = 2;//Yellow + }else if(Rdata[0] == 0 && Rdata[1] == 0 && Rdata[2] == 255){ + Image[x+(y* bmpInfoHeader.biWidth )] = 3;//Red + // }else if(Rdata[0] == 0 && Rdata[1] == 128 && Rdata[2] == 255){ + // Image[x+(y* bmpInfoHeader.biWidth )] = 4;//Orange + }else if(Rdata[0] == 255 && Rdata[1] == 0 && Rdata[2] == 0){ + Image[x+(y* bmpInfoHeader.biWidth )] = 5;//Blue + }else if(Rdata[0] == 0 && Rdata[1] == 255 && Rdata[2] == 0){ + Image[x+(y* bmpInfoHeader.biWidth )] = 6;//Green + } + + } + } + fclose(fp); + + // Refresh the image to the display buffer based on the displayed orientation + for(y = 0; y < bmpInfoHeader.biHeight; y++) { + for(x = 0; x < bmpInfoHeader.biWidth; x++) { + if(x > Paint.Width || y > Paint.Height) { + break; + } + Paint_SetPixel(Xstart + x, Ystart + y, Image[bmpInfoHeader.biHeight * bmpInfoHeader.biWidth - 1 -(bmpInfoHeader.biWidth-x-1+(y* bmpInfoHeader.biWidth))]); + } + } + return 0; +} + diff --git a/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_BMPfile.h b/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_BMPfile.h new file mode 100644 index 000000000..71da840f5 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_BMPfile.h @@ -0,0 +1,125 @@ +/***************************************************************************** +* | File : GUI_BMPfile.h +* | Author : Waveshare team +* | Function : BMP图片文件读取和显示头文件 +* | Info : +* 本文件定义了BMP文件格式的数据结构和读取函数 +* 支持从文件系统读取BMP图片并显示到墨水屏 +* +* 注意:需要文件系统支持(fopen/fread等) +* 嵌入式系统可能不支持这些函数 +* +* 支持的BMP格式: +* - 单色位图(1位) +* - 4色位图(2位) +* - 16色位图(4位) +* - 24位RGB位图 +*---------------- +* | This version: V2.3 +* | Date : 2022-07-27 +******************************************************************************/ +#ifndef __GUI_BMPFILE_H +#define __GUI_BMPFILE_H + +#include +#include +#include +#include +#include "DEV_Config.h" + +/*============================================================================ + BMP文件头结构体(14字节) +============================================================================*/ +/** + * @brief BMP文件头结构体 + * @details 位于BMP文件最开始的14字节,标识文件类型和大小 + * + * 成员说明: + * - bType: 文件类型标识("BM"=0x4D42) + * - bSize: 文件总大小(字节) + * - bReserved1: 保留字段,必须为0 + * - bReserved2: 保留字段,必须为0 + * - bOffset: 图像数据起始偏移量 + */ +typedef struct BMP_FILE_HEADER { + UWORD bType; // 文件类型标识(0x4D42 = "BM") + UDOUBLE bSize; // 文件大小 + UWORD bReserved1; // 保留字段1 + UWORD bReserved2; // 保留字段2 + UDOUBLE bOffset; // 图像数据偏移量 +} __attribute__ ((packed)) BMPFILEHEADER; + +/*============================================================================ + BMP信息头结构体(40字节) +============================================================================*/ +/** + * @brief BMP信息头结构体 + * @details 位于文件头之后的40字节,描述图像的详细信息 + */ +typedef struct BMP_INFO { + UDOUBLE biInfoSize; // 信息头大小(40字节) + UDOUBLE biWidth; // 图像宽度(像素) + UDOUBLE biHeight; // 图像高度(像素) + UWORD biPlanes; // 颜色平面数(通常为1) + UWORD biBitCount; // 每像素位数(1/4/8/24等) + UDOUBLE biCompression; // 压缩类型(0=不压缩) + UDOUBLE bimpImageSize; // 图像数据大小 + UDOUBLE biXPelsPerMeter; // 水平分辨率(像素/米) + UDOUBLE biYPelsPerMeter; // 垂直分辨率(像素/米) + UDOUBLE biClrUsed; // 使用的颜色数 + UDOUBLE biClrImportant; // 重要颜色数 +} __attribute__ ((packed)) BMPINFOHEADER; + +/*============================================================================ + 调色板结构体(4字节/条目) +============================================================================*/ +/** + * @brief RGB颜色表结构体(调色板) + * @details 用于索引色位图,每个条目描述一种颜色 + */ +typedef struct RGB_QUAD { + UBYTE rgbBlue; // 蓝色分量(0-255) + UBYTE rgbGreen; // 绿色分量(0-255) + UBYTE rgbRed; // 红色分量(0-255) + UBYTE rgbReversed; // 保留字段 +} __attribute__ ((packed)) BMPRGBQUAD; + +/*============================================================================ + 函数声明 +============================================================================*/ + +/** + * @brief 读取单色BMP图片 + * @param path BMP文件路径 + * @param Xstart 显示起始X坐标 + * @param Ystart 显示起始Y坐标 + * @return 0=成功 + */ +UBYTE GUI_ReadBmp(const char *path, UWORD Xstart, UWORD Ystart); + +/** + * @brief 读取4色灰度BMP图片 + */ +UBYTE GUI_ReadBmp_4Gray(const char *path, UWORD Xstart, UWORD Ystart); + +/** + * @brief 读取16色灰度BMP图片 + */ +UBYTE GUI_ReadBmp_16Gray(const char *path, UWORD Xstart, UWORD Ystart); + +/** + * @brief 读取24位RGB 4色BMP图片 + */ +UBYTE GUI_ReadBmp_RGB_4Color(const char *path, UWORD Xstart, UWORD Ystart); + +/** + * @brief 读取24位RGB 6色BMP图片 + */ +UBYTE GUI_ReadBmp_RGB_6Color(const char *path, UWORD Xstart, UWORD Ystart); + +/** + * @brief 读取24位RGB 7色BMP图片(5.65寸彩色屏用) + */ +UBYTE GUI_ReadBmp_RGB_7Color(const char *path, UWORD Xstart, UWORD Ystart); + +#endif diff --git a/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_Paint.c b/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_Paint.c new file mode 100644 index 000000000..794e15a80 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_Paint.c @@ -0,0 +1,707 @@ +/****************************************************************************** +* | File : GUI_Paint.c +* | Author : Waveshare electronics +* | Function : 图形绘制库实现 +* | Info : 实现点、线、矩形、圆等图形绘制和字符显示功能 +*---------------- +* | This version: V3.2 +* | Date : 2020-07-23 +******************************************************************************/ +#include "GUI_Paint.h" +#include "DEV_Config.h" +#include "Debug.h" +#include +#include +#include +#include + +/* 全局图像属性变量 */ +PAINT Paint; + +/****************************************************************************** + * @function: Paint_NewImage + * @brief: 创建新图像并初始化属性 + * @param image : 图像缓冲区指针 + * @param Width : 图像宽度(像素) + * @param Height : 图像高度(像素) + * @param Rotate : 旋转角度(0/90/180/270) + * @param Color : 背景颜色 +******************************************************************************/ +void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color) +{ + Paint.Image = NULL; + Paint.Image = image; + + Paint.WidthMemory = Width; + Paint.HeightMemory = Height; + Paint.Color = Color; + Paint.Scale = 2; // 默认2级色深(黑白) + + // 计算每行字节数(8像素=1字节) + Paint.WidthByte = (Width % 8 == 0) ? (Width / 8) : (Width / 8 + 1); + Paint.HeightByte = Height; + + Paint.Rotate = Rotate; + Paint.Mirror = MIRROR_NONE; + + // 根据旋转角度设置显示宽高 + if(Rotate == ROTATE_0 || Rotate == ROTATE_180) { + Paint.Width = Width; + Paint.Height = Height; + } else { + Paint.Width = Height; + Paint.Height = Width; + } +} + +/****************************************************************************** + * @function: Paint_SelectImage + * @brief: 选择要绑定的图像缓冲区 + * @param image : 图像缓冲区指针 +******************************************************************************/ +void Paint_SelectImage(UBYTE *image) +{ + Paint.Image = image; +} + +/****************************************************************************** + * @function: Paint_SetRotate + * @brief: 设置图像旋转角度 + * @param Rotate : 旋转角度(0/90/180/270) +******************************************************************************/ +void Paint_SetRotate(UWORD Rotate) +{ + if(Rotate == ROTATE_0 || Rotate == ROTATE_90 || + Rotate == ROTATE_180 || Rotate == ROTATE_270) { + Paint.Rotate = Rotate; + } else { + Debug("rotate = 0, 90, 180, 270\r\n"); + } +} + +/****************************************************************************** + * @function: Paint_SetMirroring + * @brief: 设置图像镜像方式 + * @param mirror : 镜像类型 +******************************************************************************/ +void Paint_SetMirroring(UBYTE mirror) +{ + if(mirror == MIRROR_NONE || mirror == MIRROR_HORIZONTAL || + mirror == MIRROR_VERTICAL || mirror == MIRROR_ORIGIN) { + Paint.Mirror = mirror; + } else { + Debug("mirror should be MIRROR_NONE, MIRROR_HORIZONTAL, \ + MIRROR_VERTICAL or MIRROR_ORIGIN\r\n"); + } +} + +/****************************************************************************** + * @function: Paint_SetScale + * @brief: 设置颜色深度/灰度级别 + * @param scale : 2=黑白, 4=4级灰度, 7=7色 + ******************************************************************************/ +void Paint_SetScale(UBYTE scale) +{ + if(scale == 2) { + Paint.Scale = scale; + // 黑白模式:8像素=1字节 + Paint.WidthByte = (Paint.WidthMemory % 8 == 0) ? + (Paint.WidthMemory / 8) : (Paint.WidthMemory / 8 + 1); + } else if(scale == 4) { + Paint.Scale = scale; + // 4灰度模式:4像素=1字节(每像素2位) + Paint.WidthByte = (Paint.WidthMemory % 4 == 0) ? + (Paint.WidthMemory / 4) : (Paint.WidthMemory / 4 + 1); + } else if(scale == 7) { + // 7色模式(5.65寸彩色屏):2像素=1字节 + Paint.Scale = 7; + Paint.WidthByte = (Paint.WidthMemory % 2 == 0) ? + (Paint.WidthMemory / 2) : (Paint.WidthMemory / 2 + 1); + } else { + Debug("Set Scale Input parameter error\r\n"); + Debug("Scale Only support: 2 4 7\r\n"); + } +} + +/****************************************************************************** + * @function: Paint_SetPixel + * @brief: 设置单个像素点颜色(核心绘图函数) + * @param Xpoint : X坐标 + * @param Ypoint : Y坐标 + * @param Color : 颜色值 + * @details: 处理旋转、镜像后计算实际内存地址并写入颜色 +******************************************************************************/ +void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color) +{ + // 边界检查 + if(Xpoint > Paint.Width || Ypoint > Paint.Height) { + Debug("Exceeding display boundaries\r\n"); + return; + } + + UWORD X, Y; + + // 根据旋转角度转换坐标 + switch(Paint.Rotate) { + case 0: + X = Xpoint; + Y = Ypoint; + break; + case 90: + X = Paint.WidthMemory - Ypoint - 1; + Y = Xpoint; + break; + case 180: + X = Paint.WidthMemory - Xpoint - 1; + Y = Paint.HeightMemory - Ypoint - 1; + break; + case 270: + X = Ypoint; + Y = Paint.HeightMemory - Xpoint - 1; + break; + default: + return; + } + + // 根据镜像设置转换坐标 + switch(Paint.Mirror) { + case MIRROR_NONE: + break; + case MIRROR_HORIZONTAL: + X = Paint.WidthMemory - X - 1; + break; + case MIRROR_VERTICAL: + Y = Paint.HeightMemory - Y - 1; + break; + case MIRROR_ORIGIN: + X = Paint.WidthMemory - X - 1; + Y = Paint.HeightMemory - Y - 1; + break; + default: + return; + } + + // 再次边界检查 + if(X > Paint.WidthMemory || Y > Paint.HeightMemory) { + Debug("Exceeding display boundaries\r\n"); + return; + } + + // 根据颜色深度写入像素 + if(Paint.Scale == 2) { + // 黑白模式:每字节8像素 + UDOUBLE Addr = X / 8 + Y * Paint.WidthByte; + UBYTE Rdata = Paint.Image[Addr]; + if(Color == BLACK) + Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8)); + else + Paint.Image[Addr] = Rdata | (0x80 >> (X % 8)); + } else if(Paint.Scale == 4) { + // 4灰度模式:每字节4像素 + UDOUBLE Addr = X / 4 + Y * Paint.WidthByte; + Color = Color % 4; // 确保颜色在0-3范围 + UBYTE Rdata = Paint.Image[Addr]; + Rdata = Rdata & (~(0xC0 >> ((X % 4) * 2))); + Paint.Image[Addr] = Rdata | ((Color << 6) >> ((X % 4) * 2)); + } else if(Paint.Scale == 7 || Paint.Scale == 16) { + // 7色/16色模式:每字节2像素 + UDOUBLE Addr = X / 2 + Y * Paint.WidthByte; + UBYTE Rdata = Paint.Image[Addr]; + Rdata = Rdata & (~(0xF0 >> ((X % 2) * 4))); + Paint.Image[Addr] = Rdata | ((Color << 4) >> ((X % 2) * 4)); + } +} + +/****************************************************************************** + * @function: Paint_Clear + * @brief: 清空整个图像缓冲区 + * @param Color : 填充颜色 +******************************************************************************/ +void Paint_Clear(UWORD Color) +{ + if(Paint.Scale == 2) { + // 黑白模式:直接填充 + for (UWORD Y = 0; Y < Paint.HeightByte; Y++) { + for (UWORD X = 0; X < Paint.WidthByte; X++) { + UDOUBLE Addr = X + Y * Paint.WidthByte; + Paint.Image[Addr] = Color; + } + } + } else if(Paint.Scale == 4) { + // 4灰度模式:每字节填充4个相同灰度 + for (UWORD Y = 0; Y < Paint.HeightByte; Y++) { + for (UWORD X = 0; X < Paint.WidthByte; X++) { + UDOUBLE Addr = X + Y * Paint.WidthByte; + Paint.Image[Addr] = (Color << 6) | (Color << 4) | (Color << 2) | Color; + } + } + } else if(Paint.Scale == 7 || Paint.Scale == 16) { + // 7色模式:每字节填充2个相同颜色 + for (UWORD Y = 0; Y < Paint.HeightByte; Y++) { + for (UWORD X = 0; X < Paint.WidthByte; X++) { + UDOUBLE Addr = X + Y * Paint.WidthByte; + Paint.Image[Addr] = (Color << 4) | Color; + } + } + } +} + +/****************************************************************************** + * @function: Paint_ClearWindows + * @brief: 清空指定窗口区域 +******************************************************************************/ +void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color) +{ + UWORD X, Y; + for (Y = Ystart; Y < Yend; Y++) { + for (X = Xstart; X < Xend; X++) { + Paint_SetPixel(X, Y, Color); + } + } +} + +/****************************************************************************** + * @function: Paint_DrawPoint + * @brief: 绘制指定大小的点 + * @param Xpoint : X坐标 + * @param Ypoint : Y坐标 + * @param Color : 颜色 + * @param Dot_Pixel : 点大小(1x1到8x8) + * @param Dot_Style : 填充方式 +******************************************************************************/ +void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, + DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_Style) +{ + if (Xpoint > Paint.Width || Ypoint > Paint.Height) { + Debug("Paint_DrawPoint Input exceeds the normal display range\r\n"); + return; + } + + int16_t XDir_Num, YDir_Num; + if (Dot_Style == DOT_FILL_AROUND) { + // 以点为中心向四周扩展 + for (XDir_Num = 0; XDir_Num < 2 * Dot_Pixel - 1; XDir_Num++) { + for (YDir_Num = 0; YDir_Num < 2 * Dot_Pixel - 1; YDir_Num++) { + if(Xpoint + XDir_Num - Dot_Pixel < 0 || + Ypoint + YDir_Num - Dot_Pixel < 0) + break; + Paint_SetPixel(Xpoint + XDir_Num - Dot_Pixel, + Ypoint + YDir_Num - Dot_Pixel, Color); + } + } + } else { + // 从点向右下扩展 + for (XDir_Num = 0; XDir_Num < Dot_Pixel; XDir_Num++) { + for (YDir_Num = 0; YDir_Num < Dot_Pixel; YDir_Num++) { + Paint_SetPixel(Xpoint + XDir_Num - 1, + Ypoint + YDir_Num - 1, Color); + } + } + } +} + +/****************************************************************************** + * @function: Paint_DrawLine + * @brief: 绘制任意斜率的直线(Bresenham算法) + * @param Xstart, Ystart : 起点坐标 + * @param Xend, Yend : 终点坐标 + * @param Color : 颜色 + * @param Line_width : 线宽 + * @param Line_Style : 线型(实线/虚线) +******************************************************************************/ +void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, + UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style) +{ + if (Xstart > Paint.Width || Ystart > Paint.Height || + Xend > Paint.Width || Yend > Paint.Height) { + Debug("Paint_DrawLine Input exceeds the normal display range\r\n"); + return; + } + + UWORD Xpoint = Xstart; + UWORD Ypoint = Ystart; + int dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend; + int dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend; + + // 方向增量 + int XAddway = Xstart < Xend ? 1 : -1; + int YAddway = Ystart < Yend ? 1 : -1; + + // 累积误差 + int Esp = dx + dy; + char Dotted_Len = 0; + + for (;;) { + Dotted_Len++; + // 虚线:每3个点画2个 + if (Line_Style == LINE_STYLE_DOTTED && Dotted_Len % 3 == 0) { + Paint_DrawPoint(Xpoint, Ypoint, IMAGE_BACKGROUND, Line_width, DOT_STYLE_DFT); + Dotted_Len = 0; + } else { + Paint_DrawPoint(Xpoint, Ypoint, Color, Line_width, DOT_STYLE_DFT); + } + + if (2 * Esp >= dy) { + if (Xpoint == Xend) + break; + Esp += dy; + Xpoint += XAddway; + } + if (2 * Esp <= dx) { + if (Ypoint == Yend) + break; + Esp += dx; + Ypoint += YAddway; + } + } +} + +/****************************************************************************** + * @function: Paint_DrawRectangle + * @brief: 绘制矩形 + * @param Xstart, Ystart : 左上角坐标 + * @param Xend, Yend : 右下角坐标 + * @param Color : 颜色 + * @param Line_width : 线宽 + * @param Draw_Fill : 空心/实心 +******************************************************************************/ +void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, + UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) +{ + if (Xstart > Paint.Width || Ystart > Paint.Height || + Xend > Paint.Width || Yend > Paint.Height) { + Debug("Input exceeds the normal display range\r\n"); + return; + } + + if (Draw_Fill) { + // 实心矩形:填充横线 + UWORD Ypoint; + for(Ypoint = Ystart; Ypoint < Yend; Ypoint++) { + Paint_DrawLine(Xstart, Ypoint, Xend, Ypoint, Color, Line_width, LINE_STYLE_SOLID); + } + } else { + // 空心矩形:四条边 + Paint_DrawLine(Xstart, Ystart, Xend, Ystart, Color, Line_width, LINE_STYLE_SOLID); + Paint_DrawLine(Xstart, Ystart, Xstart, Yend, Color, Line_width, LINE_STYLE_SOLID); + Paint_DrawLine(Xend, Yend, Xend, Ystart, Color, Line_width, LINE_STYLE_SOLID); + Paint_DrawLine(Xend, Yend, Xstart, Yend, Color, Line_width, LINE_STYLE_SOLID); + } +} + +/****************************************************************************** + * @function: Paint_DrawCircle + * @brief: 绘制圆形(8点对称算法) + * @param X_Center, Y_Center : 圆心坐标 + * @param Radius : 半径 + * @param Color : 颜色 + * @param Line_width : 线宽 + * @param Draw_Fill : 空心/实心 +******************************************************************************/ +void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, + UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) +{ + if (X_Center > Paint.Width || Y_Center >= Paint.Height) { + Debug("Paint_DrawCircle Input exceeds the normal display range\r\n"); + return; + } + + // 从(0, R)开始画圆 + int16_t XCurrent, YCurrent; + XCurrent = 0; + YCurrent = Radius; + + // 累积误差 + int16_t Esp = 3 - (Radius << 1); + + int16_t sCountY; + if (Draw_Fill == DRAW_FILL_FULL) { + // 实心圆 + while (XCurrent <= YCurrent) { + for (sCountY = XCurrent; sCountY <= YCurrent; sCountY++) { + // 8个对称点 + Paint_DrawPoint(X_Center + XCurrent, Y_Center + sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center - XCurrent, Y_Center + sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center - sCountY, Y_Center + XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center - sCountY, Y_Center - XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center - XCurrent, Y_Center - sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center + XCurrent, Y_Center - sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center + sCountY, Y_Center - XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center + sCountY, Y_Center + XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT); + } + if (Esp < 0) + Esp += 4 * XCurrent + 6; + else { + Esp += 10 + 4 * (XCurrent - YCurrent); + YCurrent--; + } + XCurrent++; + } + } else { + // 空心圆 + while (XCurrent <= YCurrent) { + Paint_DrawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color, Line_width, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color, Line_width, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color, Line_width, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color, Line_width, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color, Line_width, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color, Line_width, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color, Line_width, DOT_STYLE_DFT); + Paint_DrawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color, Line_width, DOT_STYLE_DFT); + + if (Esp < 0) + Esp += 4 * XCurrent + 6; + else { + Esp += 10 + 4 * (XCurrent - YCurrent); + YCurrent--; + } + XCurrent++; + } + } +} + +/****************************************************************************** + * @function: Paint_DrawChar + * @brief: 绘制单个英文字符 + * @param Xpoint, Ypoint : 坐标 + * @param Acsii_Char : ASCII字符 + * @param Font : 字体 + * @param Color_Foreground : 前景色 + * @param Color_Background : 背景色 +******************************************************************************/ +void Paint_DrawChar(UWORD Xpoint, UWORD Ypoint, const char Acsii_Char, + sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) +{ + UWORD Page, Column; + + if (Xpoint > Paint.Width || Ypoint > Paint.Height) { + Debug("Paint_DrawChar Input exceeds the normal display range\r\n"); + return; + } + + // 计算字符在字体表中的偏移 + uint32_t Char_Offset = (Acsii_Char - ' ') * Font->Height * + (Font->Width / 8 + (Font->Width % 8 ? 1 : 0)); + const unsigned char *ptr = &Font->table[Char_Offset]; + + // 逐行逐列绘制 + for (Page = 0; Page < Font->Height; Page++) { + for (Column = 0; Column < Font->Width; Column++) { + if (FONT_BACKGROUND == Color_Background) { + // 透明背景:只绘制前景 + if (*ptr & (0x80 >> (Column % 8))) + Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Foreground); + } else { + // 不透明背景 + if (*ptr & (0x80 >> (Column % 8))) { + Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Foreground); + } else { + Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Background); + } + } + if (Column % 8 == 7) + ptr++; + } + if (Font->Width % 8 != 0) + ptr++; + } +} + +/****************************************************************************** + * @function: Paint_DrawString_EN + * @brief: 绘制英文字符串 +******************************************************************************/ +void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, + sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) +{ + UWORD Xpoint = Xstart; + UWORD Ypoint = Ystart; + + if (Xstart > Paint.Width || Ystart > Paint.Height) { + Debug("Paint_DrawString_EN Input exceeds the normal display range\r\n"); + return; + } + + while (*pString != '\0') { + // X方向填满则换行 + if ((Xpoint + Font->Width) > Paint.Width) { + Xpoint = Xstart; + Ypoint += Font->Height; + } + // Y方向填满则回到起点 + if ((Ypoint + Font->Height) > Paint.Height) { + Xpoint = Xstart; + Ypoint = Ystart; + } + Paint_DrawChar(Xpoint, Ypoint, *pString, Font, Color_Background, Color_Foreground); + pString++; + Xpoint += Font->Width; + } +} + +/****************************************************************************** + * @function: Paint_DrawString_CN + * @brief: 绘制中英文混合字符串 + * @details: 支持UTF-8编码的中文和ASCII英文 +******************************************************************************/ +void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font, + UWORD Color_Foreground, UWORD Color_Background) +{ + const char* p_text = pString; + int x = Xstart, y = Ystart; + int i, j, Num; + + while (*p_text != 0) { + if(((unsigned char)*p_text) <= 0x7F) { + // ASCII字符(单字节) + for(Num = 0; Num < font->size; Num++) { + if(*p_text == font->table[Num].index[0]) { + const char* ptr = &font->table[Num].matrix[0]; + for (j = 0; j < font->Height; j++) { + for (i = 0; i < font->Width; i++) { + if (FONT_BACKGROUND == Color_Background) { + if (*ptr & (0x80 >> (i % 8))) { + Paint_SetPixel(x + i, y + j, Color_Foreground); + } + } else { + if (*ptr & (0x80 >> (i % 8))) { + Paint_SetPixel(x + i, y + j, Color_Foreground); + } else { + Paint_SetPixel(x + i, y + j, Color_Background); + } + } + if (i % 8 == 7) ptr++; + } + if (font->Width % 8 != 0) ptr++; + } + break; + } + } + p_text += 1; + x += font->ASCII_Width; + } else { + // 中文字符(UTF-8 3字节) + for(Num = 0; Num < font->size; Num++) { + if (((unsigned char)p_text[0] == (unsigned char)font->table[Num].index[0]) && + ((unsigned char)*(p_text + 1) == (unsigned char)font->table[Num].index[1]) && + ((unsigned char)*(p_text + 2) == (unsigned char)font->table[Num].index[2])) { + const char* ptr = &font->table[Num].matrix[0]; + for (j = 0; j < font->Height; j++) { + for (i = 0; i < font->Width; i++) { + if (FONT_BACKGROUND == Color_Background) { + if (*ptr & (0x80 >> (i % 8))) { + Paint_SetPixel(x + i, y + j, Color_Foreground); + } + } else { + if (*ptr & (0x80 >> (i % 8))) { + Paint_SetPixel(x + i, y + j, Color_Foreground); + } else { + Paint_SetPixel(x + i, y + j, Color_Background); + } + } + if (i % 8 == 7) ptr++; + } + if (font->Width % 8 != 0) ptr++; + } + break; + } + } + p_text += 3; + x += font->Width; + } + } +} + +/****************************************************************************** + * @function: Paint_DrawNum + * @brief: 绘制整数数字 +******************************************************************************/ +#define ARRAY_LEN 255 +void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Nummber, + sFONT* Font, UWORD Color_Foreground, UWORD Color_Background) +{ + int16_t Num_Bit = 0, Str_Bit = 0; + uint8_t Str_Array[ARRAY_LEN] = {0}, Num_Array[ARRAY_LEN] = {0}; + uint8_t *pStr = Str_Array; + + if (Xpoint > Paint.Width || Ypoint > Paint.Height) { + Debug("Paint_DisNum Input exceeds the normal display range\r\n"); + return; + } + + // 数字转字符串(逆序) + while (Nummber) { + Num_Array[Num_Bit] = Nummber % 10 + '0'; + Num_Bit++; + Nummber /= 10; + } + + // 反转字符串 + while (Num_Bit > 0) { + Str_Array[Str_Bit] = Num_Array[Num_Bit - 1]; + Str_Bit++; + Num_Bit--; + } + + Paint_DrawString_EN(Xpoint, Ypoint, (const char*)pStr, Font, Color_Background, Color_Foreground); +} + +/****************************************************************************** + * @function: Paint_DrawTime + * @brief: 绘制时间(HH:MM:SS格式) +******************************************************************************/ +void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font, + UWORD Color_Foreground, UWORD Color_Background) +{ + uint8_t value[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + UWORD Dx = Font->Width; + + // 绘制 HH:MM:SS + Paint_DrawChar(Xstart, Ystart, value[pTime->Hour / 10], Font, Color_Background, Color_Foreground); + Paint_DrawChar(Xstart + Dx, Ystart, value[pTime->Hour % 10], Font, Color_Background, Color_Foreground); + Paint_DrawChar(Xstart + Dx + Dx / 4 + Dx / 2, Ystart, ':', Font, Color_Background, Color_Foreground); + Paint_DrawChar(Xstart + Dx * 2 + Dx / 2, Ystart, value[pTime->Min / 10], Font, Color_Background, Color_Foreground); + Paint_DrawChar(Xstart + Dx * 3 + Dx / 2, Ystart, value[pTime->Min % 10], Font, Color_Background, Color_Foreground); + Paint_DrawChar(Xstart + Dx * 4 + Dx / 2 - Dx / 4, Ystart, ':', Font, Color_Background, Color_Foreground); + Paint_DrawChar(Xstart + Dx * 5, Ystart, value[pTime->Sec / 10], Font, Color_Background, Color_Foreground); + Paint_DrawChar(Xstart + Dx * 6, Ystart, value[pTime->Sec % 10], Font, Color_Background, Color_Foreground); +} + +/****************************************************************************** + * @function: Paint_DrawBitMap + * @brief: 绘制位图图片 + * @param image_buffer : 图片数据数组 +******************************************************************************/ +void Paint_DrawBitMap(const unsigned char* image_buffer) +{ + UWORD x, y; + UDOUBLE Addr = 0; + + for (y = 0; y < Paint.HeightByte; y++) { + for (x = 0; x < Paint.WidthByte; x++) { + Addr = x + y * Paint.WidthByte; + Paint.Image[Addr] = (unsigned char)image_buffer[Addr]; + } + } +} + +/****************************************************************************** + * @function: Paint_DrawImage + * @brief: 在指定位置绘制图片 +******************************************************************************/ +void Paint_DrawImage(const unsigned char *image_buffer, UWORD xStart, UWORD yStart, + UWORD W_Image, UWORD H_Image) +{ + UWORD x, y; + UWORD w_byte = (W_Image % 8) ? (W_Image / 8) + 1 : W_Image / 8; + UDOUBLE Addr = 0; + UDOUBLE pAddr = 0; + + for (y = 0; y < H_Image; y++) { + for (x = 0; x < w_byte; x++) { + Addr = x + y * w_byte; + pAddr = x + (xStart / 8) + ((y + yStart) * Paint.WidthByte); + Paint.Image[pAddr] = (unsigned char)image_buffer[Addr]; + } + } +} diff --git a/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_Paint.h b/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_Paint.h new file mode 100644 index 000000000..798d71889 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/GUI/GUI_Paint.h @@ -0,0 +1,134 @@ +/****************************************************************************** +* | File : GUI_Paint.h +* | Author : Waveshare electronics +* | Function : 图形绘制库头文件 +* | Info : 实现基础图形绘制和字符显示功能 +*---------------- +* | This version: V3.1 +* | Date : 2019-10-10 +******************************************************************************/ +#ifndef __GUI_PAINT_H +#define __GUI_PAINT_H + +#include "DEV_Config.h" +#include "../Fonts/fonts.h" + +/** + * @brief 图像属性结构体 - 存储图像缓冲区的所有属性 + */ +typedef struct { + UBYTE *Image; // 图像缓冲区指针 + UWORD Width; // 显示宽度(像素) + UWORD Height; // 显示高度(像素) + UWORD WidthMemory; // 内存中的实际宽度 + UWORD HeightMemory; // 内存中的实际高度 + UWORD Color; // 背景颜色 + UWORD Rotate; // 旋转角度 + UWORD Mirror; // 镜像设置 + UWORD WidthByte; // 每行字节数 + UWORD HeightByte; // 总行数 + UWORD Scale; // 颜色深度(2=黑白,4=4灰度) +} PAINT; +extern PAINT Paint; + +/* 旋转角度定义 */ +#define ROTATE_0 0 +#define ROTATE_90 90 +#define ROTATE_180 180 +#define ROTATE_270 270 + +/* 镜像方式枚举 */ +typedef enum { + MIRROR_NONE = 0x00, // 不镜像 + MIRROR_HORIZONTAL = 0x01, // 水平镜像 + MIRROR_VERTICAL = 0x02, // 垂直镜像 + MIRROR_ORIGIN = 0x03, // 原点镜像 +} MIRROR_IMAGE; +#define MIRROR_IMAGE_DFT MIRROR_NONE + +/* 颜色定义 */ +#define WHITE 0xFF // 白色 +#define BLACK 0x00 // 黑色 +#define RED BLACK + +#define IMAGE_BACKGROUND WHITE +#define FONT_FOREGROUND BLACK +#define FONT_BACKGROUND WHITE + +/* 4级灰度颜色 */ +#define GRAY1 0x03 // 最黑 +#define GRAY2 0x02 // 深灰 +#define GRAY3 0x01 // 浅灰 +#define GRAY4 0x00 // 最白 + +/* 点大小枚举 */ +typedef enum { + DOT_PIXEL_1X1 = 1, + DOT_PIXEL_2X2, + DOT_PIXEL_3X3, + DOT_PIXEL_4X4, + DOT_PIXEL_5X5, + DOT_PIXEL_6X6, + DOT_PIXEL_7X7, + DOT_PIXEL_8X8, +} DOT_PIXEL; +#define DOT_PIXEL_DFT DOT_PIXEL_1X1 + +/* 点填充样式 */ +typedef enum { + DOT_FILL_AROUND = 1, // 以点为中心 + DOT_FILL_RIGHTUP, // 向右上扩展 +} DOT_STYLE; +#define DOT_STYLE_DFT DOT_FILL_AROUND + +/* 线条样式 */ +typedef enum { + LINE_STYLE_SOLID = 0, // 实线 + LINE_STYLE_DOTTED, // 虚线 +} LINE_STYLE; + +/* 图形填充方式 */ +typedef enum { + DRAW_FILL_EMPTY = 0, // 空心 + DRAW_FILL_FULL, // 实心 +} DRAW_FILL; + +/* 时间结构体 */ +typedef struct { + UWORD Year; + UBYTE Month; + UBYTE Day; + UBYTE Hour; + UBYTE Min; + UBYTE Sec; +} PAINT_TIME; +extern PAINT_TIME sPaint_time; + +/* 初始化和清除函数 */ +void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color); +void Paint_SelectImage(UBYTE *image); +void Paint_SetRotate(UWORD Rotate); +void Paint_SetMirroring(UBYTE mirror); +void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color); +void Paint_SetScale(UBYTE scale); +void Paint_Clear(UWORD Color); +void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color); + +/* 图形绘制函数 */ +void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_FillWay); +void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style); +void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill); +void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill); + +/* 字符串显示函数 */ +void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Acsii_Char, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background); +void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background); +void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font, UWORD Color_Foreground, UWORD Color_Background); +void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Nummber, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background); +void Paint_DrawNumDecimals(UWORD Xpoint, UWORD Ypoint, double Nummber, sFONT* Font, UWORD Digit, UWORD Color_Foreground, UWORD Color_Background); +void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background); + +/* 图片显示函数 */ +void Paint_DrawBitMap(const unsigned char* image_buffer); + +#endif diff --git a/examples/e-Paper/application_drivers/e-Paper/e-Paper/EPD_4in26.c b/examples/e-Paper/application_drivers/e-Paper/e-Paper/EPD_4in26.c new file mode 100644 index 000000000..2cd89ec48 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/e-Paper/EPD_4in26.c @@ -0,0 +1,918 @@ +/***************************************************************************** +* | File : EPD_4in26.c +* | Author : Waveshare team +* | Function : 4.26英寸电子墨水屏驱动实现 +* | Info : +* 本文件实现了Waveshare 4.26英寸电子墨水屏的完整驱动 +* +* 技术规格: +* - 分辨率: 800 x 480 像素 +* - 显示颜色: 黑/白(支持4级灰度) +* - 接口: SPI +* - 工作电压: 3.3V +* - 刷新时间: 标准约4秒,快速约1.5秒 +* +* 支持功能: +* - 全屏刷新(标准/快速) +* - 局部刷新 +* - 4级灰度显示 +* - 深度睡眠模式 +*---------------- +* | This version: V1.0 +* | Date : 2023-12-19 +* | Info : +* ----------------------------------------------------------------------------- +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +******************************************************************************/ +#include "EPD_4in26.h" +#include "Debug.h" + +/*============================================================================ + 查找表数据(LUT) +============================================================================*/ +/** + * @brief 4级灰度模式查找表数据 + * @details LUT(Look-Up Table)定义了电子墨水屏的刷新波形 + * 波形控制电子墨水微胶囊中的带电粒子运动 + * 不同的LUT配置产生不同的显示效果和刷新速度 + * + * 数据结构(共112字节): + * - 字节0-99: VCOM和驱动电压波形数据 + * - 字节100-104: 相位时间配置 + * - 字节105: VGH(栅极高电压)设置 + * - 字节106-108: VSH1/VSH2/VSL(源极电压)设置 + * - 字节109: VCOM电压设置 + * - 字节110-111: 保留 + */ +const unsigned char LUT_DATA_4Gray[112] = { + // VCOM波形数据(50字节)- 控制公共电极的电压波形 + 0x80, 0x48, 0x4A, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0A, 0x48, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x48, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA8, 0x48, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + // 相位时间配置(25字节)- 定义每个刷新阶段的持续时间 + 0x07, 0x1E, 0x1C, 0x02, 0x00, // 阶段1时间配置 + 0x05, 0x01, 0x05, 0x01, 0x02, // 阶段2时间配置 + 0x08, 0x01, 0x01, 0x04, 0x04, // 阶段3时间配置 + 0x00, 0x02, 0x00, 0x02, 0x01, // 阶段4时间配置 + 0x00, 0x00, 0x00, 0x00, 0x00, // 阶段5时间配置 + + // 保留区域(20字节) + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, + + // 灰度映射和电压配置(12字节) + 0x22, 0x22, 0x22, 0x22, 0x22, // 灰度映射表 + 0x17, 0x41, 0xA8, 0x32, 0x30, // 电压参数 + 0x00, 0x00, // 保留 +}; + +/*============================================================================ + 内部函数实现 +============================================================================*/ + +/** + * @function: EPD_4in26_Reset + * @brief: 硬件复位电子墨水屏 + * @details: 通过RST引脚对墨水屏进行硬件复位 + * 复位时序:高电平100ms -> 低电平2ms -> 高电平100ms + * 复位后墨水屏恢复到初始状态,需要重新初始化 + * + * @return: 无 + */ +static void EPD_4in26_Reset(void) +{ + DEV_Digital_Write(EPD_RST_PIN, 1); // RST拉高 + DEV_Delay_ms(100); // 保持100ms + DEV_Digital_Write(EPD_RST_PIN, 0); // RST拉低,触发复位 + DEV_Delay_ms(2); // 保持2ms(复位有效时间) + DEV_Digital_Write(EPD_RST_PIN, 1); // RST拉高,结束复位 + DEV_Delay_ms(100); // 等待墨水屏稳定 +} + +/** + * @function: EPD_4in26_SendCommand + * @brief: 向墨水屏发送命令 + * @details: 发送单字节命令到墨水屏控制器 + * 发送命令时DC引脚需要为低电平 + * + * 时序说明: + * 1. DC拉低(选择命令模式) + * 2. CS拉低(选中芯片) + * 3. 通过SPI发送命令字节 + * 4. CS拉高(释放芯片) + * + * @param[in] Reg 命令寄存器地址/命令码 + * @return: 无 + */ +static void EPD_4in26_SendCommand(UBYTE Reg) +{ + DEV_Digital_Write(EPD_DC_PIN, 0); // DC=0 表示发送命令 + DEV_Digital_Write(EPD_CS_PIN, 0); // CS=0 选中芯片 + DEV_SPI_WriteByte(Reg); // SPI发送命令字节 + DEV_Digital_Write(EPD_CS_PIN, 1); // CS=1 释放芯片 +} + +/** + * @function: EPD_4in26_SendData + * @brief: 向墨水屏发送单字节数据 + * @details: 发送单字节数据到墨水屏控制器 + * 发送数据时DC引脚需要为高电平 + * + * @param[in] Data 要发送的数据字节 + * @return: 无 + */ +static void EPD_4in26_SendData(UBYTE Data) +{ + DEV_Digital_Write(EPD_DC_PIN, 1); // DC=1 表示发送数据 + DEV_Digital_Write(EPD_CS_PIN, 0); // CS=0 选中芯片 + DEV_SPI_WriteByte(Data); // SPI发送数据字节 + DEV_Digital_Write(EPD_CS_PIN, 1); // CS=1 释放芯片 +} + +/** + * @function: EPD_4in26_SendData2 + * @brief: 向墨水屏批量发送数据 + * @details: 批量发送多字节数据,用于传输图像数据时提高效率 + * + * @param[in] pData 数据缓冲区指针 + * @param[in] len 数据长度(字节数) + * @return: 无 + */ +static void EPD_4in26_SendData2(UBYTE *pData, UDOUBLE len) +{ + DEV_Digital_Write(EPD_DC_PIN, 1); // DC=1 表示发送数据 + DEV_Digital_Write(EPD_CS_PIN, 0); // CS=0 选中芯片 + DEV_SPI_Write_nByte(pData, len); // SPI批量发送数据 + DEV_Digital_Write(EPD_CS_PIN, 1); // CS=1 释放芯片 +} + +/** + * @function: EPD_4in26_ReadBusy + * @brief: 等待墨水屏空闲 + * @details: 轮询BUSY引脚状态,等待墨水屏完成当前操作 + * BUSY=0(低电平)表示墨水屏正忙 + * BUSY=1(高电平)表示墨水屏空闲 + * + * 电子墨水屏刷新需要较长时间(数秒), + * 在此期间不能发送新的命令或数据 + * + * @return: 无 + * + * @note: 此函数会阻塞,直到墨水屏空闲 + */ +void EPD_4in26_ReadBusy(void) +{ + Debug("e-Paper busy\r\n"); + + // 轮询等待BUSY引脚变为低电平(墨水屏空闲) + while(1) + { + // BUSY=0 表示墨水屏空闲,可以退出等待 + if(DEV_Digital_Read(EPD_BUSY_PIN) == 0) + break; + DEV_Delay_ms(20); // 每20ms检查一次,避免CPU占用过高 + } + + DEV_Delay_ms(20); // 额外等待20ms确保稳定 + Debug("e-Paper busy release\r\n"); +} + +/*============================================================================ + 显示刷新控制函数 +============================================================================*/ + +/** + * @function: EPD_4in26_TurnOnDisplay + * @brief: 触发标准显示刷新 + * @details: 启动墨水屏的显示更新序列 + * 使用标准刷新波形,显示质量最好,刷新时间约4秒 + * + * 命令说明: + * - 0x22: 显示更新控制命令 + * - 0xF7: 启用全部刷新序列 + * - 0x20: 激活显示更新序列 + * + * @return: 无 + */ +static void EPD_4in26_TurnOnDisplay(void) +{ + EPD_4in26_SendCommand(0x22); // 显示更新控制命令 + EPD_4in26_SendData(0xF7); // 0xF7: 使用完整刷新序列 + EPD_4in26_SendCommand(0x20); // 激活显示更新序列 + EPD_4in26_ReadBusy(); // 等待刷新完成 +} + +/** + * @function: EPD_4in26_TurnOnDisplay_Fast + * @brief: 触发快速显示刷新 + * @details: 启动墨水屏的快速刷新序列 + * 刷新时间约1.5秒,但可能有轻微残影 + * + * 命令说明: + * - 0xC7: 使用简化的刷新序列 + * + * @return: 无 + */ +static void EPD_4in26_TurnOnDisplay_Fast(void) +{ + EPD_4in26_SendCommand(0x22); // 显示更新控制命令 + EPD_4in26_SendData(0xC7); // 0xC7: 使用快速刷新序列 + EPD_4in26_SendCommand(0x20); // 激活显示更新序列 + EPD_4in26_ReadBusy(); // 等待刷新完成 +} + +/** + * @function: EPD_4in26_TurnOnDisplay_Part + * @brief: 触发局部显示刷新 + * @details: 启动墨水屏的局部刷新序列 + * 只刷新指定区域,速度更快 + * + * 命令说明: + * - 0xFF: 使用局部刷新序列 + * + * @return: 无 + */ +static void EPD_4in26_TurnOnDisplay_Part(void) +{ + EPD_4in26_SendCommand(0x22); // 显示更新控制命令 + EPD_4in26_SendData(0xFF); // 0xFF: 使用局部刷新序列 + EPD_4in26_SendCommand(0x20); // 激活显示更新序列 + EPD_4in26_ReadBusy(); // 等待刷新完成 +} + +/** + * @function: EPD_4in26_TurnOnDisplay_4GRAY + * @brief: 触发4级灰度显示刷新 + * @details: 启动墨水屏的4级灰度刷新序列 + * 使用自定义LUT实现灰度显示 + * + * @return: 无 + */ +static void EPD_4in26_TurnOnDisplay_4GRAY(void) +{ + EPD_4in26_SendCommand(0x22); // 显示更新控制命令 + EPD_4in26_SendData(0xC7); // 使用灰度刷新序列 + EPD_4in26_SendCommand(0x20); // 激活显示更新序列 + EPD_4in26_ReadBusy(); // 等待刷新完成 +} + +/*============================================================================ + 查找表配置函数 +============================================================================*/ + +/** + * @function: EPD_4in26_Lut + * @brief: 加载4级灰度查找表 + * @details: 将LUT数据加载到墨水屏控制器 + * LUT定义了灰度显示的刷新波形 + * + * 寄存器说明: + * - 0x32: VCOM/数据电压LUT寄存器 + * - 0x03: VGH电压设置 + * - 0x04: VSH1/VSH2/VSL电压设置 + * - 0x2C: VCOM电压设置 + * + * @return: 无 + */ +static void EPD_4in26_Lut(void) +{ + unsigned int count; + + // 加载波形数据到LUT寄存器(105字节) + EPD_4in26_SendCommand(0x32); // VCOM和数据电压LUT + for(count = 0; count < 105; count++) { + EPD_4in26_SendData(LUT_DATA_4Gray[count]); + } + + // 设置VGH(栅极高电压) + EPD_4in26_SendCommand(0x03); + EPD_4in26_SendData(LUT_DATA_4Gray[105]); + + // 设置VSH1、VSH2、VSL(源极电压) + EPD_4in26_SendCommand(0x04); + EPD_4in26_SendData(LUT_DATA_4Gray[106]); // VSH1 + EPD_4in26_SendData(LUT_DATA_4Gray[107]); // VSH2 + EPD_4in26_SendData(LUT_DATA_4Gray[108]); // VSL + + // 设置VCOM电压 + EPD_4in26_SendCommand(0x2C); + EPD_4in26_SendData(LUT_DATA_4Gray[109]); +} + +/*============================================================================ + 显示窗口和光标设置函数 +============================================================================*/ + +/** + * @function: EPD_4in26_SetWindows + * @brief: 设置显示窗口范围 + * @details: 定义RAM数据写入的X和Y地址范围 + * 后续写入的图像数据将填充到此窗口区域 + * + * 寄存器说明: + * - 0x44: 设置X方向地址起止范围 + * - 0x45: 设置Y方向地址起止范围 + * + * @param[in] Xstart 窗口起始X坐标 + * @param[in] Ystart 窗口起始Y坐标 + * @param[in] Xend 窗口结束X坐标 + * @param[in] Yend 窗口结束Y坐标 + * @return: 无 + */ +static void EPD_4in26_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend) +{ + // 设置X方向地址范围(10位地址,需要2字节) + EPD_4in26_SendCommand(0x44); + EPD_4in26_SendData(Xstart & 0xFF); // X起始地址低8位 + EPD_4in26_SendData((Xstart >> 8) & 0x03); // X起始地址高2位 + EPD_4in26_SendData(Xend & 0xFF); // X结束地址低8位 + EPD_4in26_SendData((Xend >> 8) & 0x03); // X结束地址高2位 + + // 设置Y方向地址范围(10位地址,需要2字节) + EPD_4in26_SendCommand(0x45); + EPD_4in26_SendData(Ystart & 0xFF); // Y起始地址低8位 + EPD_4in26_SendData((Ystart >> 8) & 0x03); // Y起始地址高2位 + EPD_4in26_SendData(Yend & 0xFF); // Y结束地址低8位 + EPD_4in26_SendData((Yend >> 8) & 0x03); // Y结束地址高2位 +} + +/** + * @function: EPD_4in26_SetCursor + * @brief: 设置RAM写入光标位置 + * @details: 设置下一次数据写入的起始地址 + * + * 寄存器说明: + * - 0x4E: 设置X方向地址计数器 + * - 0x4F: 设置Y方向地址计数器 + * + * @param[in] Xstart 光标X坐标 + * @param[in] Ystart 光标Y坐标 + * @return: 无 + */ +static void EPD_4in26_SetCursor(UWORD Xstart, UWORD Ystart) +{ + // 设置X方向地址计数器 + EPD_4in26_SendCommand(0x4E); + EPD_4in26_SendData(Xstart & 0xFF); + EPD_4in26_SendData((Xstart >> 8) & 0x03); + + // 设置Y方向地址计数器 + EPD_4in26_SendCommand(0x4F); + EPD_4in26_SendData(Ystart & 0xFF); + EPD_4in26_SendData((Ystart >> 8) & 0x03); +} + +/*============================================================================ + 公开API函数实现 +============================================================================*/ + +/** + * @function: EPD_4in26_Init + * @brief: 标准模式初始化 + * @details: 初始化墨水屏为标准全刷新模式 + * + * 初始化流程: + * 1. 硬件复位 + * 2. 软件复位(命令0x12) + * 3. 配置内部温度传感器 + * 4. 配置软启动参数 + * 5. 配置驱动输出控制 + * 6. 配置边框设置 + * 7. 配置数据入口模式 + * 8. 设置显示窗口和光标 + * + * @return: 无 + */ +void EPD_4in26_Init(void) +{ + // 硬件复位 + EPD_4in26_Reset(); + DEV_Delay_ms(100); + + // 等待墨水屏就绪 + EPD_4in26_ReadBusy(); + + // 软件复位 + EPD_4in26_SendCommand(0x12); // SWRESET命令 + EPD_4in26_ReadBusy(); + + // 使用内部温度传感器(自动温度补偿) + EPD_4in26_SendCommand(0x18); + EPD_4in26_SendData(0x80); // 0x80: 启用内部温度传感器 + + // 设置软启动参数(优化启动波形) + EPD_4in26_SendCommand(0x0C); + EPD_4in26_SendData(0xAE); + EPD_4in26_SendData(0xC7); + EPD_4in26_SendData(0xC3); + EPD_4in26_SendData(0xC0); + EPD_4in26_SendData(0x80); + + // 设置驱动输出控制(配置显示分辨率) + EPD_4in26_SendCommand(0x01); + EPD_4in26_SendData((EPD_4in26_HEIGHT - 1) % 256); // Y分辨率低8位 + EPD_4in26_SendData((EPD_4in26_HEIGHT - 1) / 256); // Y分辨率高8位 + EPD_4in26_SendData(0x02); // 扫描方向 + + // 设置边框显示 + EPD_4in26_SendCommand(0x3C); + EPD_4in26_SendData(0x01); // 边框设置 + + // 设置数据入口模式 + EPD_4in26_SendCommand(0x11); + EPD_4in26_SendData(0x01); // X模式: X递增, Y递减 + + // 设置显示窗口(全屏) + EPD_4in26_SetWindows(0, EPD_4in26_HEIGHT - 1, EPD_4in26_WIDTH - 1, 0); + + // 设置光标位置 + EPD_4in26_SetCursor(0, 0); + + // 等待配置完成 + EPD_4in26_ReadBusy(); +} + +/** + * @function: EPD_4in26_Init_Fast + * @brief: 快速模式初始化 + * @details: 初始化墨水屏为快速刷新模式 + * 在标准初始化基础上增加温度预设配置 + * 可将刷新时间缩短至约1.5秒 + * + * @return: 无 + */ +void EPD_4in26_Init_Fast(void) +{ + // 硬件复位 + EPD_4in26_Reset(); + DEV_Delay_ms(100); + + EPD_4in26_ReadBusy(); + EPD_4in26_SendCommand(0x12); // 软件复位 + EPD_4in26_ReadBusy(); + + // 使用内部温度传感器 + EPD_4in26_SendCommand(0x18); + EPD_4in26_SendData(0x80); + + // 设置软启动参数 + EPD_4in26_SendCommand(0x0C); + EPD_4in26_SendData(0xAE); + EPD_4in26_SendData(0xC7); + EPD_4in26_SendData(0xC3); + EPD_4in26_SendData(0xC0); + EPD_4in26_SendData(0x80); + + // 设置驱动输出控制 + EPD_4in26_SendCommand(0x01); + EPD_4in26_SendData((EPD_4in26_HEIGHT - 1) % 256); + EPD_4in26_SendData((EPD_4in26_HEIGHT - 1) / 256); + EPD_4in26_SendData(0x02); + + // 设置边框 + EPD_4in26_SendCommand(0x3C); + EPD_4in26_SendData(0x01); + + // 设置数据入口模式 + EPD_4in26_SendCommand(0x11); + EPD_4in26_SendData(0x01); + + // 设置显示窗口 + EPD_4in26_SetWindows(0, EPD_4in26_HEIGHT - 1, EPD_4in26_WIDTH - 1, 0); + + // 设置光标位置 + EPD_4in26_SetCursor(0, 0); + + EPD_4in26_ReadBusy(); + + // 快速模式特殊配置:设置温度寄存器以加速刷新 + EPD_4in26_SendCommand(0x1A); // 写入温度寄存器 + EPD_4in26_SendData(0x5A); // 预设温度值 + + // 触发温度加载序列 + EPD_4in26_SendCommand(0x22); + EPD_4in26_SendData(0x91); // 加载温度值 + EPD_4in26_SendCommand(0x20); // 激活序列 + + EPD_4in26_ReadBusy(); +} + +/** + * @function: EPD_4in26_Init_4GRAY + * @brief: 4级灰度模式初始化 + * @details: 初始化墨水屏为4级灰度显示模式 + * 加载自定义LUT实现灰度效果 + * + * @return: 无 + */ +void EPD_4in26_Init_4GRAY(void) +{ + // 硬件复位 + EPD_4in26_Reset(); + DEV_Delay_ms(100); + + EPD_4in26_ReadBusy(); + EPD_4in26_SendCommand(0x12); // 软件复位 + EPD_4in26_ReadBusy(); + + // 使用内部温度传感器 + EPD_4in26_SendCommand(0x18); + EPD_4in26_SendData(0x80); + + // 设置软启动参数 + EPD_4in26_SendCommand(0x0C); + EPD_4in26_SendData(0xAE); + EPD_4in26_SendData(0xC7); + EPD_4in26_SendData(0xC3); + EPD_4in26_SendData(0xC0); + EPD_4in26_SendData(0x80); + + // 设置驱动输出控制(灰度模式使用WIDTH作为Y分辨率) + EPD_4in26_SendCommand(0x01); + EPD_4in26_SendData((EPD_4in26_WIDTH - 1) % 256); + EPD_4in26_SendData((EPD_4in26_WIDTH - 1) / 256); + EPD_4in26_SendData(0x02); + + // 设置边框 + EPD_4in26_SendCommand(0x3C); + EPD_4in26_SendData(0x01); + + // 设置数据入口模式 + EPD_4in26_SendCommand(0x11); + EPD_4in26_SendData(0x01); + + // 设置显示窗口 + EPD_4in26_SetWindows(0, EPD_4in26_HEIGHT - 1, EPD_4in26_WIDTH - 1, 0); + + // 设置光标位置 + EPD_4in26_SetCursor(0, 0); + + EPD_4in26_ReadBusy(); + + // 加载4级灰度LUT + EPD_4in26_Lut(); +} + +/** + * @function: EPD_4in26_Clear + * @brief: 清屏(显示全白) + * @details: 将整个屏幕刷新为白色 + * 同时更新新旧两个显示RAM + * + * 图像数据说明: + * - 0xFF: 8个白色像素 + * - 0x00: 8个黑色像素 + * + * RAM说明: + * - 0x24: 新数据RAM(Black/White RAM) + * - 0x26: 旧数据RAM(用于局部刷新对比) + * + * @return: 无 + */ +void EPD_4in26_Clear(void) +{ + UWORD i; + UWORD height = EPD_4in26_HEIGHT; + UWORD width = EPD_4in26_WIDTH / 8; // 每字节8像素 + + // 创建一行全白数据 + UBYTE image[EPD_4in26_WIDTH / 8] = {0x00}; + for(i = 0; i < width; i++) { + image[i] = 0xff; // 全白 + } + + // 写入新数据RAM + EPD_4in26_SendCommand(0x24); + for(i = 0; i < height; i++) + { + EPD_4in26_SendData2(image, width); + } + + // 写入旧数据RAM(用于后续局部刷新) + EPD_4in26_SendCommand(0x26); + for(i = 0; i < height; i++) + { + EPD_4in26_SendData2(image, width); + } + + // 触发显示刷新 + EPD_4in26_TurnOnDisplay(); +} + +/** + * @function: EPD_4in26_Display + * @brief: 标准显示图像 + * @details: 将图像缓冲区数据写入墨水屏RAM并刷新显示 + * + * @param[in] Image 图像缓冲区指针 + * 大小: 800*480/8 = 48000字节 + * 格式: 每位1像素,1=白色,0=黑色 + * @return: 无 + */ +void EPD_4in26_Display(UBYTE *Image) +{ + UWORD i; + UWORD height = EPD_4in26_HEIGHT; + UWORD width = EPD_4in26_WIDTH / 8; + + // 写入图像数据到新数据RAM + EPD_4in26_SendCommand(0x24); + for(i = 0; i < height; i++) + { + EPD_4in26_SendData2((UBYTE *)(Image + i * width), width); + } + + // 触发显示刷新 + EPD_4in26_TurnOnDisplay(); +} + +/** + * @function: EPD_4in26_Display_Base + * @brief: 基础显示(更新新旧RAM) + * @details: 同时将图像写入新旧两个RAM + * 用于局部刷新前的初始画面设置 + * + * @param[in] Image 图像缓冲区指针 + * @return: 无 + */ +void EPD_4in26_Display_Base(UBYTE *Image) +{ + UWORD i; + UWORD height = EPD_4in26_HEIGHT; + UWORD width = EPD_4in26_WIDTH / 8; + + // 写入新数据RAM + EPD_4in26_SendCommand(0x24); + for(i = 0; i < height; i++) + { + EPD_4in26_SendData2((UBYTE *)(Image + i * width), width); + } + + // 写入旧数据RAM + EPD_4in26_SendCommand(0x26); + for(i = 0; i < height; i++) + { + EPD_4in26_SendData2((UBYTE *)(Image + i * width), width); + } + + // 触发显示刷新 + EPD_4in26_TurnOnDisplay(); +} + +/** + * @function: EPD_4in26_Display_Fast + * @brief: 快速显示图像 + * @details: 使用快速刷新模式显示图像 + * 需要先调用EPD_4in26_Init_Fast()初始化 + * + * @param[in] Image 图像缓冲区指针 + * @return: 无 + */ +void EPD_4in26_Display_Fast(UBYTE *Image) +{ + UWORD i; + UWORD height = EPD_4in26_HEIGHT; + UWORD width = EPD_4in26_WIDTH / 8; + + // 写入图像数据 + EPD_4in26_SendCommand(0x24); + for(i = 0; i < height; i++) + { + EPD_4in26_SendData2((UBYTE *)(Image + i * width), width); + } + + // 使用快速刷新 + EPD_4in26_TurnOnDisplay_Fast(); +} + +/** + * @function: EPD_4in26_Display_Part + * @brief: 局部显示 + * @details: 只刷新屏幕的指定矩形区域 + * 适用于小范围内容更新,如时钟显示等 + * + * @param[in] Image 局部图像缓冲区指针 + * @param[in] x 左上角X坐标 + * @param[in] y 左上角Y坐标 + * @param[in] w 区域宽度 + * @param[in] l 区域高度 + * @return: 无 + * + * @note: 连续多次局部刷新后建议进行全刷以消除残影 + */ +void EPD_4in26_Display_Part(UBYTE *Image, UWORD x, UWORD y, UWORD w, UWORD l) +{ + UWORD i; + UWORD height = l; + UWORD width = (w % 8 == 0) ? (w / 8) : (w / 8 + 1); // 向上取整到字节边界 + + // 重新配置墨水屏 + EPD_4in26_Reset(); + + // 使用内部温度传感器 + EPD_4in26_SendCommand(0x18); + EPD_4in26_SendData(0x80); + + // 设置边框(局部刷新使用不同设置) + EPD_4in26_SendCommand(0x3C); + EPD_4in26_SendData(0x80); + + // 设置局部显示窗口 + EPD_4in26_SetWindows(x, y, x + w - 1, y + l - 1); + + // 设置光标到窗口起始位置 + EPD_4in26_SetCursor(x, y); + + // 写入局部图像数据 + EPD_4in26_SendCommand(0x24); + for(i = 0; i < height; i++) + { + EPD_4in26_SendData2((UBYTE *)(Image + i * width), width); + } + + // 触发局部刷新 + EPD_4in26_TurnOnDisplay_Part(); +} + +/** + * @function: EPD_4in26_Display_Part_NoReset + * @brief: 局部刷新(无Reset版本) + * @details: 用于连续刷新多个区域,避免每次都reset EPD + * 第一个区域使用 EPD_4in26_Display_Part(带reset) + * 后续区域使用此函数(不reset) + */ +void EPD_4in26_Display_Part_NoReset(UBYTE *Image, UWORD x, UWORD y, UWORD w, UWORD l) +{ + UWORD i; + UWORD height = l; + UWORD width = (w % 8 == 0) ? (w / 8) : (w / 8 + 1); + + // 不调用 EPD_4in26_Reset(),直接设置窗口 + + // 设置局部显示窗口 + EPD_4in26_SetWindows(x, y, x + w - 1, y + l - 1); + + // 设置光标到窗口起始位置 + EPD_4in26_SetCursor(x, y); + + // 写入局部图像数据 + EPD_4in26_SendCommand(0x24); + for(i = 0; i < height; i++) + { + EPD_4in26_SendData2((UBYTE *)(Image + i * width), width); + } + + // 触发局部刷新 + EPD_4in26_TurnOnDisplay_Part(); +} + +/** + * @function: EPD_4in26_4GrayDisplay + * @brief: 4级灰度显示 + * @details: 显示4级灰度图像 + * 将2位灰度数据转换为墨水屏所需的格式 + * + * 灰度映射: + * - 0xC0: 白色 (11) + * - 0x80: 浅灰 (10) + * - 0x40: 深灰 (01) + * - 0x00: 黑色 (00) + * + * 需要同时写入两个RAM来实现灰度效果 + * + * @param[in] Image 灰度图像缓冲区指针 + * 大小: 800*480/4 = 96000字节 + * 格式: 每2位1像素 + * @return: 无 + */ +void EPD_4in26_4GrayDisplay(UBYTE *Image) +{ + UDOUBLE i, j, k; + UBYTE temp1, temp2, temp3; + + // 写入旧数据RAM(第一个RAM平面) + EPD_4in26_SendCommand(0x24); + for(i = 0; i < 48000; i++) { + temp3 = 0; + for(j = 0; j < 2; j++) { + temp1 = Image[i * 2 + j]; + for(k = 0; k < 2; k++) { + temp2 = temp1 & 0xC0; + // 根据灰度值设置对应位 + if(temp2 == 0xC0) // 白色 + temp3 |= 0x00; + else if(temp2 == 0x00) // 黑色 + temp3 |= 0x01; + else if(temp2 == 0x80) // 浅灰 + temp3 |= 0x01; + else // 深灰 (0x40) + temp3 |= 0x00; + temp3 <<= 1; + + temp1 <<= 2; + temp2 = temp1 & 0xC0; + if(temp2 == 0xC0) + temp3 |= 0x00; + else if(temp2 == 0x00) + temp3 |= 0x01; + else if(temp2 == 0x80) + temp3 |= 0x01; + else + temp3 |= 0x00; + if(j != 1 || k != 1) + temp3 <<= 1; + + temp1 <<= 2; + } + } + EPD_4in26_SendData(temp3); + } + + // 写入新数据RAM(第二个RAM平面) + EPD_4in26_SendCommand(0x26); + for(i = 0; i < 48000; i++) { + temp3 = 0; + for(j = 0; j < 2; j++) { + temp1 = Image[i * 2 + j]; + for(k = 0; k < 2; k++) { + temp2 = temp1 & 0xC0; + // 第二个RAM平面的灰度映射 + if(temp2 == 0xC0) // 白色 + temp3 |= 0x00; + else if(temp2 == 0x00) // 黑色 + temp3 |= 0x01; + else if(temp2 == 0x80) // 浅灰 + temp3 |= 0x00; + else // 深灰 (0x40) + temp3 |= 0x01; + temp3 <<= 1; + + temp1 <<= 2; + temp2 = temp1 & 0xC0; + if(temp2 == 0xC0) + temp3 |= 0x00; + else if(temp2 == 0x00) + temp3 |= 0x01; + else if(temp2 == 0x80) + temp3 |= 0x00; + else + temp3 |= 0x01; + if(j != 1 || k != 1) + temp3 <<= 1; + + temp1 <<= 2; + } + } + EPD_4in26_SendData(temp3); + } + + // 触发灰度显示刷新 + EPD_4in26_TurnOnDisplay_4GRAY(); +} + +/** + * @function: EPD_4in26_Sleep + * @brief: 进入深度睡眠模式 + * @details: 让墨水屏进入低功耗睡眠状态 + * 睡眠模式下功耗降至微安级别 + * 屏幕保持最后显示的内容 + * + * 唤醒方法: + * - 调用EPD_4in26_Init()或其他初始化函数 + * - 或者通过硬件复位(RST引脚) + * + * 命令说明: + * - 0x10: 深度睡眠命令 + * - 0x03: 睡眠检查码 + * + * @return: 无 + */ +void EPD_4in26_Sleep(void) +{ + EPD_4in26_SendCommand(0x10); // 进入深度睡眠命令 + EPD_4in26_SendData(0x03); // 睡眠检查码 + DEV_Delay_ms(100); // 等待进入睡眠状态 +} diff --git a/examples/e-Paper/application_drivers/e-Paper/e-Paper/EPD_4in26.h b/examples/e-Paper/application_drivers/e-Paper/e-Paper/EPD_4in26.h new file mode 100644 index 000000000..96b3006af --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/e-Paper/EPD_4in26.h @@ -0,0 +1,177 @@ +/***************************************************************************** +* | File : EPD_4in26.h +* | Author : Waveshare team +* | Function : 4.26英寸电子墨水屏驱动头文件 +* | Info : +* 本文件定义了4.26英寸电子墨水屏的: +* - 显示分辨率参数 +* - 驱动函数声明 +* +* 支持的显示模式: +* - 标准全刷新(约4秒) +* - 快速刷新(约1.5秒) +* - 局部刷新 +* - 4级灰度显示 +*---------------- +* | This version: V1.0 +* | Date : 2023-12-19 +* | Info : Waveshare 4.26寸电子墨水屏驱动 +* ----------------------------------------------------------------------------- +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +******************************************************************************/ +#ifndef __EPD_4in26_H_ +#define __EPD_4in26_H_ + +/*============================================================================ + 头文件包含 +============================================================================*/ +#include "DEV_Config.h" // 硬件配置和底层接口 + +/*============================================================================ + 显示屏参数定义 +============================================================================*/ +/** + * @brief 显示屏分辨率定义 + * @details 4.26英寸电子墨水屏的物理分辨率 + * - 宽度: 800像素 + * - 高度: 480像素 + * - 每像素1位(黑白)或2位(4灰度) + * - 显示区域: 800 x 480 = 384,000像素 + * - 黑白模式图像缓冲区大小: 800 * 480 / 8 = 48,000字节 + */ +#define EPD_4in26_WIDTH 800 // 显示屏宽度(像素) +#define EPD_4in26_HEIGHT 480 // 显示屏高度(像素) + +/*============================================================================ + 函数声明 +============================================================================*/ + +/*------------------------------ 初始化函数 ------------------------------*/ + +/** + * @brief 标准初始化 + * @details 初始化电子墨水屏为标准刷新模式 + * 适用于对刷新速度要求不高、需要最佳显示质量的场景 + * 刷新时间约4秒 + */ +void EPD_4in26_Init(void); + +/** + * @brief 快速初始化 + * @details 初始化电子墨水屏为快速刷新模式 + * 刷新速度较快(约1.5秒),但可能存在轻微残影 + * 适用于需要频繁更新显示内容的场景 + */ +void EPD_4in26_Init_Fast(void); + +/** + * @brief 4级灰度初始化 + * @details 初始化电子墨水屏为4级灰度显示模式 + * 支持显示:黑、深灰、浅灰、白四种灰度 + * 可显示更丰富的图像层次 + */ +void EPD_4in26_Init_4GRAY(void); + +/*------------------------------ 显示控制函数 ------------------------------*/ + +/** + * @brief 清屏 + * @details 将整个屏幕刷新为白色 + * 建议在首次显示前调用,消除可能的残影 + */ +void EPD_4in26_Clear(void); + +/** + * @brief 标准显示 + * @details 将图像缓冲区内容显示到屏幕上 + * 使用标准刷新波形,显示质量最好 + * @param Image 图像缓冲区指针,大小需为48000字节(800*480/8) + * 每个字节表示8个像素,1=白色,0=黑色 + */ +void EPD_4in26_Display(UBYTE *Image); + +/** + * @brief 基础显示(带旧数据更新) + * @details 同时更新新旧数据RAM,用于后续局部刷新的基础 + * 首次显示图像时建议使用此函数 + * @param Image 图像缓冲区指针 + */ +void EPD_4in26_Display_Base(UBYTE *Image); + +/** + * @brief 快速显示 + * @details 使用快速刷新模式显示图像 + * 刷新时间约1.5秒,可能有轻微残影 + * 需要先调用EPD_4in26_Init_Fast()初始化 + * @param Image 图像缓冲区指针 + */ +void EPD_4in26_Display_Fast(UBYTE *Image); + +/** + * @brief 局部显示 + * @details 只刷新屏幕的指定区域,刷新速度快 + * 适用于只有部分内容需要更新的场景 + * 注意:连续多次局部刷新后建议进行一次全刷清除残影 + * @param Image 局部图像缓冲区指针 + * @param x 显示区域左上角X坐标 + * @param y 显示区域左上角Y坐标 + * @param w 显示区域宽度 + * @param l 显示区域高度 + */ +void EPD_4in26_Display_Part(UBYTE *Image, UWORD x, UWORD y, UWORD w, UWORD l); + +/** + * @brief 局部刷新(连续调用版本,不重置EPD) + * @details 用于连续刷新多个区域时,避免每次都reset + * 第一个区域应该使用 EPD_4in26_Display_Part + * 后续区域使用此函数 + */ +void EPD_4in26_Display_Part_NoReset(UBYTE *Image, UWORD x, UWORD y, UWORD w, UWORD l); + +/** + * @brief 4级灰度显示 + * @details 显示4级灰度图像 + * 需要先调用EPD_4in26_Init_4GRAY()初始化 + * 每2位表示一个像素的灰度: + * - 0x00: 黑色 + * - 0x40: 深灰 + * - 0x80: 浅灰 + * - 0xC0: 白色 + * @param Image 灰度图像缓冲区指针,大小为96000字节(800*480/4) + */ +void EPD_4in26_4GrayDisplay(UBYTE *Image); + +/*------------------------------ 电源管理函数 ------------------------------*/ + +/** + * @brief 进入睡眠模式 + * @details 让电子墨水屏进入深度睡眠模式以降低功耗 + * 睡眠后屏幕保持最后显示的内容 + * 唤醒需要重新调用初始化函数 + * + * 功耗说明: + * - 工作模式: 约数十mA + * - 睡眠模式: 约几μA + */ +void EPD_4in26_Sleep(void); + + +#endif /* __EPD_4in26_H_ */ diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/EPD_4in26_test.c b/examples/e-Paper/application_drivers/e-Paper/examples/EPD_4in26_test.c new file mode 100644 index 000000000..1fb3bb77e --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/EPD_4in26_test.c @@ -0,0 +1,337 @@ +/***************************************************************************** +* | File : EPD_4in26_test.c +* | Author : Waveshare team +* | Function : 4.26英寸电子墨水屏测试Demo +* | Info : +* 本文件实现了4.26英寸墨水屏的综合功能测试 +* 演示了墨水屏的各种显示功能和使用方法 +* +* 测试流程: +* 1. 模块初始化和清屏 +* 2. 快速模式显示预置图片 +* 3. 绘制各种图形(点、线、矩形、圆) +* 4. 显示中英文文字和数字 +* 5. 局部刷新演示(动态时钟) +* 6. 4级灰度显示演示 +* 7. 进入睡眠模式 +*---------------- +* | This version: V1.0 +* | Date : 2023-12-19 +* | Info : +* ----------------------------------------------------------------------------- +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +******************************************************************************/ +#include "EPD_Test.h" // 测试头文件 +#include "EPD_4in26.h" // 4.26英寸墨水屏驱动 + +/** + * @function: EPD_test + * @brief: 4.26英寸墨水屏综合测试函数 + * @details: + * 演示墨水屏的完整功能,包括初始化、显示、刷新、睡眠等 + * + * 内存需求说明: + * - 黑白模式: 800*480/8 = 48,000字节 + * - 灰度模式: 800*480/4 = 96,000字节 + * + * 测试耗时说明: + * - 标准刷新: 约4秒 + * - 快速刷新: 约1.5秒 + * - 局部刷新: 约0.3秒 + * - 完整测试: 约2分钟 + * + * @return: int + * - 0: 测试成功 + * - -1: 测试失败 + */ +int EPD_test(void) +{ + printf("EPD_4in26_test Demo\r\n"); + + /*======================================================================== + 第1步:硬件初始化 + ========================================================================*/ + // 初始化硬件模块(SPI、GPIO等) + if(DEV_Module_Init() != 0) { + return -1; // 初始化失败 + } + + /*======================================================================== + 第2步:墨水屏初始化和清屏 + ========================================================================*/ + printf("e-Paper Init and Clear...\r\n"); + EPD_4in26_Init(); // 标准模式初始化 + EPD_4in26_Clear(); // 清屏(显示全白) + DEV_Delay_ms(500); // 等待500ms + + /*======================================================================== + 第3步:创建图像缓冲区 + ========================================================================*/ + UBYTE *BlackImage; // 图像缓冲区指针 + + // 计算图像缓冲区大小 + // 每8个像素占用1字节,需要向上取整 + UDOUBLE Imagesize = ((EPD_4in26_WIDTH % 8 == 0) ? + (EPD_4in26_WIDTH / 8) : + (EPD_4in26_WIDTH / 8 + 1)) * EPD_4in26_HEIGHT; + + // 动态分配图像缓冲区内存 + if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) { + printf("Failed to apply for black memory...\r\n"); + return -1; // 内存分配失败 + } + + // 创建新图像(设置缓冲区、尺寸、旋转角度、背景色) + printf("Paint_NewImage\r\n"); + Paint_NewImage(BlackImage, EPD_4in26_WIDTH, EPD_4in26_HEIGHT, 0, WHITE); + + /*======================================================================== + 第4步:快速模式显示预置图片 + ========================================================================*/ +#if 1 + // 使用快速模式初始化(刷新时间约1.5秒) + EPD_4in26_Init_Fast(); + printf("show image for array\r\n"); + + // 选择图像缓冲区并清空 + Paint_SelectImage(BlackImage); + Paint_Clear(WHITE); + + // 绘制预置的位图图片(gImage_4in26定义在ImageData.c中) + Paint_DrawBitMap(gImage_4in26); + + // 快速显示图片 + EPD_4in26_Display_Fast(BlackImage); + DEV_Delay_ms(2000); // 显示2秒 +#endif + + /*======================================================================== + 第5步:图形和文字绘制演示 + ========================================================================*/ +#if 1 + // 重新初始化为标准模式(显示质量更好) + EPD_4in26_Init(); + + // 选择图像缓冲区 + printf("SelectImage:BlackImage\r\n"); + Paint_SelectImage(BlackImage); + Paint_Clear(WHITE); // 清空为白色背景 + + // 绘制图形演示 + printf("Drawing:BlackImage\r\n"); + + /* 绘制点(不同大小) */ + Paint_DrawPoint(10, 80, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT); // 1x1像素的点 + Paint_DrawPoint(10, 90, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); // 2x2像素的点 + Paint_DrawPoint(10, 100, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); // 3x3像素的点 + + /* 绘制直线 */ + // 实线:从(20,70)到(70,120) + Paint_DrawLine(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + // 实线:从(70,70)到(20,120),与上面的线交叉形成X + Paint_DrawLine(70, 70, 20, 120, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + + /* 绘制矩形 */ + // 空心矩形:左上角(20,70),右下角(70,120) + Paint_DrawRectangle(20, 70, 70, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + // 实心矩形:左上角(80,70),右下角(130,120) + Paint_DrawRectangle(80, 70, 130, 120, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + + /* 绘制圆形 */ + // 空心圆:圆心(45,95),半径20 + Paint_DrawCircle(45, 95, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + // 实心白圆:圆心(105,95),半径20(在黑色矩形上显示白色圆) + Paint_DrawCircle(105, 95, 20, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); + + /* 绘制虚线 */ + // 水平虚线 + Paint_DrawLine(85, 95, 125, 95, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + // 垂直虚线 + Paint_DrawLine(105, 75, 105, 115, BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + + /* 绘制英文字符串 */ + // 16号字体,黑字白底 + Paint_DrawString_EN(10, 1, "waveshare", &Font16, BLACK, WHITE); + // 12号字体,白字黑底(反色显示) + Paint_DrawString_EN(10, 20, "hello world", &Font12, WHITE, BLACK); + + /* 绘制数字 */ + Paint_DrawNum(10, 33, 123456789, &Font12, BLACK, WHITE); + Paint_DrawNum(10, 50, 987654321, &Font16, WHITE, BLACK); + + /* 绘制中文字符串 */ + Paint_DrawString_CN(130, 1, "你好abc", &Font12CN, BLACK, WHITE); + Paint_DrawString_CN(130, 20, "微雪电子", &Font24CN, WHITE, BLACK); + + // 显示绘制结果 + printf("EPD_Display\r\n"); + // 使用Base显示,同时更新新旧RAM(为后续局部刷新做准备) + EPD_4in26_Display_Base(BlackImage); + DEV_Delay_ms(2000); +#endif + + /*======================================================================== + 第6步:局部刷新演示(动态时钟) + ========================================================================*/ +#if 1 + printf("Partial refresh\r\n"); + + // 为局部刷新创建较小的图像缓冲区 + Paint_NewImage(BlackImage, 200, 50, 0, WHITE); + + // 初始化时间结构体 + PAINT_TIME sPaint_time; + sPaint_time.Hour = 12; + sPaint_time.Min = 34; + sPaint_time.Sec = 56; + + UBYTE num = 10; // 刷新次数 + + // 循环更新时钟显示 + for (;;) { + // 秒数递增 + sPaint_time.Sec = sPaint_time.Sec + 1; + + // 处理进位(秒->分->时) + if (sPaint_time.Sec == 60) { + sPaint_time.Min = sPaint_time.Min + 1; + sPaint_time.Sec = 0; + if (sPaint_time.Min == 60) { + sPaint_time.Hour = sPaint_time.Hour + 1; + sPaint_time.Min = 0; + if (sPaint_time.Hour == 24) { + sPaint_time.Hour = 0; + sPaint_time.Min = 0; + sPaint_time.Sec = 0; + } + } + } + + // 清空并绘制时间 + Paint_Clear(WHITE); + Paint_DrawTime(20, 10, &sPaint_time, &Font20, WHITE, BLACK); + + // 局部刷新:只更新时钟区域(位置80,200,大小200x50) + EPD_4in26_Display_Part(BlackImage, 80, 200, 200, 50); + + DEV_Delay_ms(500); // 模拟时钟间隔(实际应为1秒) + + // 检查是否达到刷新次数 + num = num - 1; + if(num == 0) { + break; + } + } +#endif + + /*======================================================================== + 第7步:4级灰度显示演示 + ========================================================================*/ +#if 1 + // 释放之前的缓冲区 + free(BlackImage); + + printf("show Gray------------------------\r\n"); + + // 重新计算灰度模式的缓冲区大小(每像素2位,即每4像素1字节) + Imagesize = ((EPD_4in26_WIDTH % 4 == 0) ? + (EPD_4in26_WIDTH / 4) : + (EPD_4in26_WIDTH / 4 + 1)) * EPD_4in26_HEIGHT; + + // 分配灰度图像缓冲区 + if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) { + printf("Failed to apply for black memory...\r\n"); + return -1; + } + + // 初始化为4级灰度模式 + EPD_4in26_Init_4GRAY(); + printf("4 grayscale display\r\n"); + + // 创建灰度图像(旋转90度) + Paint_NewImage(BlackImage, EPD_4in26_WIDTH, EPD_4in26_HEIGHT, 90, WHITE); + Paint_SetScale(4); // 设置为4级灰度模式 + Paint_Clear(0xff); // 清空为白色 + + /* 使用灰度绘制各种图形 */ + // 绘制不同大小的灰色点 + Paint_DrawPoint(10, 80, GRAY4, DOT_PIXEL_1X1, DOT_STYLE_DFT); + Paint_DrawPoint(10, 90, GRAY4, DOT_PIXEL_2X2, DOT_STYLE_DFT); + Paint_DrawPoint(10, 100, GRAY4, DOT_PIXEL_3X3, DOT_STYLE_DFT); + + // 灰色线条 + Paint_DrawLine(20, 70, 70, 120, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + Paint_DrawLine(70, 70, 20, 120, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_SOLID); + + // 灰色矩形 + Paint_DrawRectangle(20, 70, 70, 120, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawRectangle(80, 70, 130, 120, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_FULL); + + // 灰色圆形(使用不同灰度级别) + Paint_DrawCircle(45, 95, 20, GRAY4, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawCircle(105, 95, 20, GRAY2, DOT_PIXEL_1X1, DRAW_FILL_FULL); + + // 灰色虚线 + Paint_DrawLine(85, 95, 125, 95, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + Paint_DrawLine(105, 75, 105, 115, GRAY4, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + + /* 使用不同灰度组合显示文字 */ + Paint_DrawString_EN(10, 0, "waveshare", &Font16, GRAY4, GRAY1); + Paint_DrawString_EN(10, 20, "hello world", &Font12, GRAY3, GRAY1); + Paint_DrawNum(10, 33, 123456789, &Font12, GRAY4, GRAY2); + Paint_DrawNum(10, 50, 987654321, &Font16, GRAY1, GRAY4); + + /* 中文灰度显示演示(展示4种灰度组合效果) */ + Paint_DrawString_CN(150, 0, "你好abc", &Font12CN, GRAY4, GRAY1); // 黑字浅灰底 + Paint_DrawString_CN(150, 20, "你好abc", &Font12CN, GRAY3, GRAY2); // 深灰字灰底 + Paint_DrawString_CN(150, 40, "你好abc", &Font12CN, GRAY2, GRAY3); // 灰字深灰底 + Paint_DrawString_CN(150, 60, "你好abc", &Font12CN, GRAY1, GRAY4); // 浅灰字黑底 + Paint_DrawString_CN(10, 130, "微雪电子", &Font24CN, GRAY1, GRAY4); + + // 显示灰度图像 + EPD_4in26_4GrayDisplay(BlackImage); + DEV_Delay_ms(3000); +#endif + + /*======================================================================== + 第8步:清屏并进入睡眠模式 + ========================================================================*/ + // 重新初始化并清屏 + EPD_4in26_Init(); + EPD_4in26_Clear(); + + // 进入深度睡眠模式(降低功耗) + printf("Goto Sleep...\r\n"); + EPD_4in26_Sleep(); + + // 释放图像缓冲区内存 + free(BlackImage); + BlackImage = NULL; + + // 等待2秒确保睡眠模式生效 + DEV_Delay_ms(2000); + + // 关闭硬件模块(释放GPIO、SPI等资源) + printf("close 5V, Module enters 0 power consumption ...\r\n"); + DEV_Module_Exit(); + + return 0; // 测试成功完成 +} diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/EPD_Test.h b/examples/e-Paper/application_drivers/e-Paper/examples/EPD_Test.h new file mode 100644 index 000000000..e0f3389f4 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/EPD_Test.h @@ -0,0 +1,76 @@ +/***************************************************************************** +* | File : EPD_Test.h +* | Author : Waveshare team +* | Function : 电子墨水屏测试Demo头文件 +* | Info : +* 本文件定义了墨水屏测试函数的接口 +* 包含所需的头文件依赖 +* +* 测试Demo功能: +* 1. 图片显示测试 +* 2. 图形绘制测试(点、线、矩形、圆) +* 3. 文字显示测试(中英文) +* 4. 局部刷新测试(时钟显示) +* 5. 4级灰度显示测试 +* 6. 睡眠模式测试 +*---------------- +* | This version: V1.1 +* | Date : 2022-07-28 +* | Info : +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +******************************************************************************/ +#ifndef _EPD_TEST_H_ +#define _EPD_TEST_H_ + +/*============================================================================ + 头文件包含 +============================================================================*/ +#include "DEV_Config.h" // 硬件配置(GPIO、SPI等) +#include "GUI_Paint.h" // 图形绘制库(点、线、矩形、圆、文字等) +#include "GUI_BMPfile.h" // BMP图片处理 +#include "ImageData.h" // 测试图片数据 +#include "Debug.h" // 调试日志输出 +#include // 标准库(malloc, free内存管理) + +/*============================================================================ + 函数声明 +============================================================================*/ + +/** + * @brief 电子墨水屏综合测试函数 + * @details 执行完整的墨水屏功能测试,包括: + * 1. 初始化和清屏 + * 2. 快速模式图片显示 + * 3. 图形绘制(点、线、矩形、圆) + * 4. 文字显示(中英文、数字) + * 5. 局部刷新(时钟动态显示) + * 6. 4级灰度显示 + * 7. 进入睡眠模式 + * + * @return int + * - 0: 测试成功完成 + * - -1: 测试失败(初始化失败或内存分配失败) + * + * @note 运行此测试需要约1-2分钟(包含多次刷新等待时间) + */ +int EPD_test(void); + +#endif /* _EPD_TEST_H_ */ diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/ImageData.c b/examples/e-Paper/application_drivers/e-Paper/examples/ImageData.c new file mode 100644 index 000000000..e297491a8 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/ImageData.c @@ -0,0 +1,3035 @@ +/***************************************************************************** +* | File : ImageData.c +* | Author : Waveshare team +* | Function : +*---------------- +* | This version: V1.1 +* | Date : 2019-06-12 +* | Info : +* +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documnetation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# + +******************************************************************************/ + +#include "ImageData.h" + +const unsigned char gImage_4in26[48000] = { /* 0X00,0X01,0X20,0X03,0XE0,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,0X00,0X00, +0X00,0X00,0X01,0XC0,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,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,0X00,0X00,0X01,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,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,0X01,0XC0,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,0X01,0XC0, +0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X03,0XC0,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,0XC0,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,0X01,0XC0,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0, +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,0X01,0XC0,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,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,0X01,0XC0,0X00,0X00,0X1F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,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,0X01,0XC0, +0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X07,0XE0,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,0XC0,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,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0, +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,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,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,0X01,0XC0,0X00,0X00,0X1F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,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,0X01,0XC0, +0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X07,0XE0,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,0XC0,0X00,0X00,0X00,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFC,0X00,0X00,0X00,0X00,0X00,0X0F, +0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0, +0X00,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFC,0X00,0X00, +0X00,0X00,0X00,0X0F,0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X3F,0XFC,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X80,0X01,0XC0, +0X00,0X00,0X1F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X07,0XE0,0X00,0X7E,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X70,0X00,0X00, +0X07,0XE0,0X00,0X00,0X1C,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X01,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0XFF,0XFF, +0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X7F,0XFC,0X03, +0XFF,0XC0,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFC,0X00,0X00,0X07,0XE0,0X00,0X00,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00, +0X00,0X07,0XFF,0XFF,0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0XFF,0XFC,0X07,0XFF,0XE0,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFC,0X00,0X00,0X07,0XE0,0X00,0X00,0X7F,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFC,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0XFF,0XFC,0X07,0XFF,0XE0,0X00,0X00,0X00,0X00,0X0F,0XFF, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0X00,0X00,0X07,0XE0,0X00,0X00, +0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X03,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0X80,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X7F,0XF0,0X00,0X00,0X00,0XF8,0X3E,0X0F,0XC3,0XE0,0X01,0XE0, +0X00,0X00,0X1F,0XFC,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00, +0X07,0XC0,0X00,0X01,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X03,0XFF, +0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X1F,0XFF,0XFF, +0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X3F,0XFE,0X00,0X00,0X01,0XF0,0X1E,0X0F, +0X81,0XF0,0X01,0XE0,0X00,0X00,0XFF,0XF8,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X7F,0XC0,0X00,0X03,0X00,0X00,0X03,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFC,0X00,0X00, +0X00,0X3F,0XFF,0XC0,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X0F,0XFF,0X00,0X00, +0X01,0XF0,0X1F,0X0F,0X00,0XF0,0X01,0XE0,0X00,0X01,0XFF,0XF0,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X07,0XFE,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFC,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X07,0XFF,0X80,0X00,0X01,0XF0,0X1F,0X0F,0X00,0XF0,0X01,0XE0,0X00,0X03,0XFF,0X80, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X00,0X00,0X0F, +0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X07,0XFE,0XFF,0XC0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X3F,0XFC,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X07,0XFF,0X80,0X00,0X01,0XF0,0X1F,0X0F,0X00,0XF0,0X01,0XE0, +0X00,0X03,0XFF,0X80,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF0,0X00, +0X00,0X00,0X00,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X07,0XFE, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XDF,0XFC,0X00,0X00,0X00,0XFF,0XF8,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X03,0XFF,0XE0,0X00,0X01,0XF0,0X1F,0X0F, +0X00,0XF0,0X01,0XE0,0X00,0X07,0XFF,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X07,0XFE,0XFF,0XE0,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X00,0X3F, +0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X1F,0XFC,0X00,0X00, +0X01,0XFF,0XF0,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X7F,0XF8,0X00, +0X01,0XF8,0X1F,0X0F,0X81,0XF0,0X01,0XE0,0X00,0X3F,0XFE,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X1F,0XF0,0X00,0X7F,0X80,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XF8,0X7F,0XE0,0X00,0X01,0XFF,0X80,0X00,0X7F, +0XF8,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFC, +0X1F,0XFC,0X00,0X00,0X01,0XFF,0XC0,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X3F,0XFC,0X00,0X00,0XFF,0XFF,0X0F,0XFF,0XF0,0XFF,0XFF,0X80,0X7F,0XF8,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFE,0X03,0XFF,0XFF,0X00,0X7F, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X00,0X00,0X01,0XFF,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XF8,0X7F,0XE0,0X00,0X01, +0XFF,0X80,0X00,0X7F,0XF8,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X07,0XE0,0X1F,0XFC,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X1F,0XFF,0X00,0X00,0X7F,0XFF,0X07,0XFF,0XF0,0XFF,0XFF, +0X80,0XFF,0XF0,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFE,0X03, +0XFF,0XFF,0X00,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE,0X00,0X00, +0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XF8, +0X7F,0XE0,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X1F,0XFC,0X00,0X00,0X01,0XFF,0X80,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X1F,0XFF,0X00,0X00,0X7F,0XFF,0X07, +0XFF,0XF0,0XFF,0XFF,0X80,0XFF,0XF0,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7C,0X0F,0XFF,0XFF,0XC0,0X7E,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X3F,0XFF,0X80,0X00,0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XF8,0X7F,0XF0,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X07,0XFF, +0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0X80,0X1F,0XFC,0X00,0X00, +0X03,0XFF,0X80,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X0F,0XFF,0X80, +0X00,0X0F,0XDF,0X00,0XFC,0XF0,0XFF,0XFF,0X83,0XFF,0XE0,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X30,0X1F,0XFF,0XFF,0XF8,0X3C,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XF0,0X7F,0XF0,0X00,0X01,0XFF,0X80,0X00,0X7F, +0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00, +0X1F,0XFC,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X01,0XFF,0XC0,0X00,0X00,0X1E,0X00,0X00,0XF0,0X01,0XE0,0X07,0XFF,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFC,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X3F,0XF0,0X3F,0XF0,0X00,0X01, +0XFF,0X80,0X00,0X7F,0XF8,0X00,0X0F,0XFE,0X03,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X03,0XFF,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0XFF,0XF8,0X00,0X00,0X1E,0X00,0X01,0XF0,0X01,0XE0, +0X1F,0XFE,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XF8,0X00, +0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X3F,0XF0, +0X3F,0XFC,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X3F,0XFC,0X00,0X7F,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X7F,0XFC,0X00,0X00,0X3E,0X00, +0X03,0XE0,0X01,0XE0,0X7F,0XFC,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07, +0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X3F,0XF0,0X3F,0XFC,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X3F,0XFC, +0X00,0X7F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00, +0X07,0XFF,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X7F,0XFC, +0X00,0X00,0X3E,0X00,0X03,0XE0,0X01,0XE0,0X7F,0XFC,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X07,0XF8,0X03,0XF8,0X00,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X3F,0XF0,0X3F,0XFC,0X00,0X01,0XFF,0X80,0X00,0X7F, +0XF8,0X00,0X3F,0XF0,0X00,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFC,0X00,0X00,0X07,0XFF,0X03,0XFF,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X7C,0X00,0X07,0XE0,0X01,0XE0,0XFF,0XF8,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XC0,0X01,0XFC,0X00,0X01,0XC0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X7F,0XE0,0X3F,0XFC,0X00,0X01, +0XFF,0X80,0X00,0X7F,0XF8,0X00,0X7F,0XE0,0X00,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0X7F,0XFF,0XF0,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X07,0XFF,0X00,0XFF,0XF0,0X07,0XFF,0XC0,0X01,0XE1, +0XFF,0XC0,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF, +0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X80,0X00,0XFC,0X00, +0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X7F,0XE0, +0X0F,0XFC,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X7F,0XE0,0X00,0X3F,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0XFF,0XFF, +0XFC,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X03,0XFF,0XE0,0XFF,0XE0,0X07, +0XFF,0X00,0X01,0XEF,0XFF,0X80,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0XFC,0X00,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X7F,0XE0,0X0F,0XFE,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X7F,0XE0, +0X00,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00, +0X07,0XFF,0XFF,0XFF,0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0XFF, +0XF0,0XFE,0X00,0X07,0XF8,0X00,0X00,0X1F,0XFF,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFC,0X00,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X7F,0XE0,0X0F,0XFE,0X00,0X01,0XFF,0X80,0X00,0X7F, +0XF8,0X00,0X7F,0XE0,0X00,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFC,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X00,0XFF,0XF0,0XFE,0X00,0X07,0XF8,0X00,0X00,0X1F,0XFF,0X00,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFC,0X00,0X01,0XC0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X7F,0XE0,0X0F,0XFE,0X00,0X01, +0XFF,0X80,0X00,0X7F,0XF8,0X00,0X7F,0XE0,0X00,0X1F,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XC0,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X7F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X3F, +0XFC,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00, +0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0XFF,0XC0, +0X07,0XFE,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X7F,0XE0,0X00,0X1F,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0XFF,0XFF, +0XFF,0XC0,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0X00,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0XFF,0XC0,0X07,0XFF,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X7F,0XE0, +0X00,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00, +0X07,0XFF,0XFF,0XFF,0XFF,0XE0,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X07, +0XFF,0X80,0X00,0X00,0X00,0X00,0X03,0XFF,0XE0,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X01,0XC0,0X00,0X00,0X01,0XE0,0X00,0X3F, +0XE0,0X00,0X01,0XC0,0X00,0X00,0XFF,0XC0,0X07,0XFF,0X00,0X01,0XFF,0X80,0X00,0X7F, +0XF8,0X00,0X7F,0XE0,0X00,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFC,0X00,0X00,0X07,0XFF,0XF0,0X03,0XFF,0XF8,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X00,0X03,0XFF,0XC0,0X00,0X00,0X00,0X00,0X07,0XFF,0X80,0X00,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X01,0XC0,0X00,0X00, +0X01,0XE0,0X00,0X3F,0XE0,0X00,0X01,0XC0,0X00,0X00,0XFF,0XC0,0X07,0XFF,0X00,0X01, +0XFF,0X80,0X00,0X7F,0XF8,0X00,0X7F,0XE0,0X00,0X3F,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0XF0,0X03,0XFF,0XF8,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X03,0XFF,0XC0,0X00,0X00,0X00,0X00,0X07,0XFF, +0X80,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF, +0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00, +0X01,0XC0,0X00,0X00,0X07,0XF0,0X00,0X7F,0XF8,0X00,0X01,0XC0,0X00,0X03,0XFF,0X00, +0X07,0XFF,0X00,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X3F,0XF0,0X00,0X7F,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00, +0XFF,0XF8,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X01,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X0F,0XFF,0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X07, +0XFF,0XF0,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC,0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7C,0X00,0X01,0XC0,0X00,0X00,0X1F,0XF8,0X01,0XFF,0XFC,0X00,0X01,0XC0, +0X00,0X03,0XFF,0X00,0X03,0XFF,0X80,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X3F,0XFC, +0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00, +0X07,0XFF,0X00,0X00,0X7F,0XF8,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X00, +0X3F,0XF8,0X00,0X00,0X00,0X00,0X3F,0XFC,0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFC,0X00,0X01,0XC0,0X00,0X00,0X1E,0X3E,0X03,0XE0, +0X1F,0X00,0X01,0XC0,0X00,0X03,0XFF,0X00,0X03,0XFF,0X80,0X01,0XFF,0X80,0X00,0X7F, +0XF8,0X00,0X3F,0XFE,0X03,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00,0X7F,0XF8,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X00,0X00,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC, +0X7F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFC,0X00,0X01,0XC0,0X00,0X00, +0X3C,0X1E,0X07,0XC0,0X07,0X00,0X01,0XC0,0X00,0X07,0XFF,0X00,0X03,0XFF,0X80,0X01, +0XFF,0X80,0X00,0X7F,0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00,0X1F,0XFC,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X00,0X0F,0XFF,0X80,0X00,0X00,0X01,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XF8,0X3F,0XFF, +0XFF,0XFF,0XFF,0XFC,0X7F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFC,0X00, +0X01,0XC0,0X00,0X00,0X3C,0X1E,0X07,0XC0,0X07,0X00,0X01,0XC0,0X00,0X07,0XFF,0X00, +0X03,0XFF,0X80,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XC0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00, +0X1F,0XFC,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X00,0X0F,0XFF,0X80,0X00, +0X00,0X01,0XFF,0XE0,0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC,0X7F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0XFC,0X00,0X01,0XFF,0XFC,0X00,0X38,0X0F,0X07,0X80,0X07,0X80,0X01,0XC0, +0X00,0X07,0XFE,0X00,0X03,0XFF,0X80,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X07,0XFF, +0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00, +0X07,0XFF,0X00,0X00,0X1F,0XFC,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X00, +0X07,0XFF,0XC0,0X00,0X00,0X07,0XFF,0XC0,0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X07,0XFF,0XF8,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC,0X1F,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X00,0X01,0XFF,0XFF,0X00,0X38,0X0F,0X06,0X00, +0X03,0X80,0X01,0XC0,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0X80,0X00,0X7F, +0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00,0X1F,0XFC,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X00,0X00,0X07,0XFF,0XE0,0X00,0X00,0X0F,0XFF,0XC0,0X00,0X00,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X00,0X01,0XFF,0XFF,0XE0, +0X38,0X1F,0X06,0X00,0X03,0X80,0X01,0XC0,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XE0,0X01, +0XFF,0X80,0X00,0X7F,0XF8,0X00,0X0F,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00,0X1F,0XFC,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X1F,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF, +0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF0,0X00, +0X01,0XFF,0XFF,0XF0,0X1C,0X3E,0X06,0X00,0X03,0X80,0X01,0XC0,0X00,0X0F,0XFF,0XFF, +0XFF,0XFF,0XE0,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X3F,0XFF,0XFF,0XF8,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00, +0X1F,0XFC,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFE,0X00, +0X00,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XF0,0X00,0X01,0XFF,0XFF,0XF0,0X1C,0X3E,0X06,0X00,0X03,0X80,0X01,0XC0, +0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0X80,0X00,0X7F,0XF8,0X00,0X3F,0XFF, +0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00, +0X07,0XFF,0X00,0X00,0X1F,0XFC,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X00, +0X1F,0XFF,0XFE,0X00,0X00,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XF0,0X00,0X00,0X00,0X3F,0XF8,0X1F,0XFE,0X06,0X00, +0X00,0X00,0X01,0XC0,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF0,0X01,0XFF,0X80,0X00,0X7F, +0XF8,0X00,0X7F,0XE1,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00,0X1F,0XFC,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XE0,0X00,0X00,0X00,0X03,0XF8, +0X07,0XF8,0X06,0X00,0X00,0X00,0X01,0XC0,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XF0,0X01, +0XFF,0X80,0X00,0XFF,0XF8,0X00,0X7F,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X07,0XFF,0X00,0X00,0X1F,0XF8,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X01,0XFF,0XF7,0XFF,0X80,0X03,0XFF,0XCF,0XFE, +0X00,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X80,0X00, +0X00,0X00,0X00,0XFC,0X01,0XE0,0X06,0X00,0X00,0X00,0X01,0XC0,0X00,0X1F,0XFF,0XFF, +0XFF,0XFF,0XF0,0X01,0XFF,0X80,0X00,0XFF,0XF8,0X00,0X7F,0XC0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X03,0XFF,0X80,0X00, +0X7F,0XF8,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X03,0XFF,0XC1,0XFF,0XE0, +0X07,0XFF,0X07,0XFF,0X80,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X7C,0X00,0X00,0X06,0X00,0X00,0X00,0X01,0XC0, +0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF0,0X01,0XFF,0XC0,0X01,0XFF,0XF8,0X00,0XFF,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00, +0X03,0XFF,0X80,0X00,0X7F,0XF8,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X07, +0XFF,0X80,0X7F,0XF8,0X3F,0XFE,0X03,0XFF,0XE0,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X7C,0X00,0X00,0X06,0X00, +0X00,0X00,0X01,0XC0,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF0,0X01,0XFF,0XC0,0X01,0XFF, +0XF8,0X00,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFC,0X00,0X00,0X03,0XFF,0X80,0X00,0X7F,0XF8,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X00,0X07,0XFF,0X80,0X7F,0XF8,0X3F,0XFE,0X03,0XFF,0XE0,0X00,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X00,0X00,0X00,0X00,0X7F, +0X00,0X00,0X06,0X00,0X00,0X00,0X01,0XC0,0X00,0X1F,0XF8,0X00,0X00,0X3F,0XF8,0X01, +0XFF,0XC0,0X03,0XFF,0XF8,0X00,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFC,0X00,0X00,0X03,0XFF,0XC0,0X00,0XFF,0XF8,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X1F,0XFF,0X00,0X3F,0XFC,0X7F,0XF8,0X01,0XFF, +0XF0,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF, +0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFE,0X00,0X00, +0X00,0X00,0X00,0X1F,0X00,0X00,0X06,0X00,0X00,0X00,0X01,0XC0,0X00,0X1F,0XF8,0X00, +0X00,0X3F,0XF8,0X01,0XFF,0XC0,0X0F,0XFF,0XF8,0X00,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X01,0XFF,0XF0,0X01, +0XFF,0XE0,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0X7F,0XF8,0X00,0X1F,0XFF, +0XFF,0XF0,0X00,0X3F,0XF8,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X03,0XFC,0X00,0X00,0X00,0X00,0X00,0X1F,0X00,0X00,0X06,0X00,0X00,0X00,0X01,0XC0, +0X00,0X7F,0XE0,0X00,0X00,0X3F,0XF8,0X00,0XFF,0XF8,0X3F,0XFF,0XF8,0X00,0X7F,0XFC, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0, +0X01,0XFF,0XF8,0X03,0XFF,0XE0,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X00,0XFF, +0XF0,0X00,0X0F,0XFF,0XFF,0XC0,0X00,0X1F,0XFF,0X00,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X03,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0X00,0X00,0X06,0X00, +0X00,0X00,0X01,0XC0,0X00,0X7F,0XE0,0X00,0X00,0X3F,0XFC,0X00,0XFF,0XFF,0XFF,0XFF, +0XF8,0X00,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF, +0XFF,0XFF,0XFF,0XE0,0X00,0XFF,0XFF,0XFF,0XFF,0XC0,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X03,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0X00,0X00,0X0F,0XFF,0X80,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F, +0X00,0X00,0X06,0X00,0X00,0X00,0X01,0XC0,0X00,0X7F,0XE0,0X00,0X00,0X3F,0XFC,0X00, +0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0XFF,0XFF,0XFF,0XFF,0XC0,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0X03,0XFF,0XE0,0X00,0X01,0XFF,0XFF,0X00,0X00,0X0F, +0XFF,0X80,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X00,0X00, +0X00,0X00,0X00,0X1F,0X00,0X00,0X06,0X00,0X00,0X00,0X01,0XC0,0X00,0X7F,0XE0,0X00, +0X00,0X1F,0XFC,0X00,0XFF,0XFF,0XFF,0X8F,0XF8,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X3F,0XFF,0XFF, +0XFF,0X80,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X07,0XFF,0XC0,0X00,0X00,0XFF, +0XFE,0X00,0X00,0X03,0XFF,0XC0,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X7F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X1F,0X00,0X00,0X06,0X00,0X00,0X00,0X01,0XC0, +0X00,0XFF,0XE0,0X00,0X00,0X1F,0XFC,0X00,0X3F,0XFF,0XFF,0X1F,0XF8,0X00,0X3F,0XFF, +0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0, +0X00,0X3F,0XFF,0XFF,0XFF,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0X0F,0XFE, +0X00,0X00,0X00,0X7F,0XFC,0X00,0X00,0X00,0XFF,0XE0,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7C,0X0F,0XFF,0XFF,0XF0,0X3E,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X3F,0XC0,0X00,0X00,0X00,0X00,0X00,0X1F,0X00,0X00,0X06,0X00, +0X00,0X00,0X01,0XC0,0X00,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0X00,0X1F,0XFF,0XFE,0X1F, +0XF8,0X00,0X07,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF, +0XFF,0XFF,0XFF,0XE0,0X00,0X1F,0XFF,0XFF,0XFC,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X00,0X7F,0XFC,0X00,0X00,0X00,0X1F,0XF8,0X00,0X00,0X00,0X7F,0XFC,0X00,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFC,0X03,0XFF,0XFF,0X80,0X7F, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X7C, +0X00,0X00,0X06,0X00,0X03,0X80,0X01,0XC0,0X00,0XFF,0XC0,0X00,0X00,0X0F,0XFF,0X00, +0X0F,0XFF,0XFC,0X1F,0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XFF,0XFF,0XF8,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X00,0XFF,0XF8,0X00,0X00,0X00,0X07,0XC0,0X00,0X00,0X00, +0X1F,0XFE,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFC,0X03, +0XFF,0XFF,0X80,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X00,0X00, +0X00,0X00,0X00,0X7C,0X00,0X00,0X06,0X00,0X03,0X80,0X01,0XC0,0X00,0XFF,0XC0,0X00, +0X00,0X0F,0XFF,0X00,0X0F,0XFF,0XFC,0X1F,0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X07,0XFF,0XFF, +0XF8,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X00,0XFF,0XF8,0X00,0X00,0X00,0X07, +0XC0,0X00,0X00,0X00,0X1F,0XFE,0X00,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFC,0X00,0X7F,0XFE,0X00,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X7C,0X00,0X00,0X06,0X00,0X03,0X80,0X01,0XC0, +0X01,0XFF,0XC0,0X00,0X00,0X0F,0XFF,0X00,0X07,0XFF,0XF0,0X1F,0XF8,0X00,0X3F,0XFF, +0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XE0, +0X00,0X00,0XFF,0XFF,0X80,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X01,0XFF,0XE0, +0X00,0X00,0X00,0X03,0X00,0X00,0X00,0X00,0X0F,0XFF,0X00,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XFC,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X00, +0X00,0X00,0X00,0X01,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X00,0X00,0X06,0X00, +0X03,0X80,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X00, +0X00,0X00,0X7F,0XF0,0X00,0X1F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFC,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X03,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XC0,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XF0,0X00,0X00,0X00,0X00,0X1F, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XF8,0X00,0X00,0X00,0X00,0X00,0X01,0XF8, +0X00,0X00,0X06,0X00,0X07,0X80,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XE0,0X00,0X07,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X00,0X1F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFF,0XF0,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00, +0X00,0X00,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF8,0X00,0X00,0X00, +0X00,0X00,0X03,0XF0,0X00,0X00,0X07,0X80,0X07,0X80,0X01,0XC0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XC0,0X00,0X03,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X3F,0XFC,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0XF8,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0XE0,0X00,0X00,0X00,0X00,0X0F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X07, +0XF8,0X00,0X00,0X00,0X00,0X00,0X03,0XF0,0X00,0X00,0X07,0X80,0X07,0X80,0X01,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XC0, +0X00,0X03,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X00,0X3F,0XFC,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XF8,0X00,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X00,0X00,0X03,0XFC,0X00,0X00,0X00, +0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XC0,0X0E,0X00,0X1F,0XE0,0X00,0X00,0X03,0XC0, +0X0F,0X00,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XC0,0X00,0X03,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X00,0X7F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFE,0X00, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X07,0XC0,0X00,0X01, +0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XC0,0X0F,0XFF,0XFF,0X80, +0X00,0X00,0X03,0XFF,0XFC,0X00,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X80,0X00,0X03,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X01,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XFF,0X00,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFE,0X00,0X00, +0X07,0XE0,0X00,0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XC0, +0X0F,0XFF,0XFF,0X00,0X00,0X00,0X01,0XFF,0XF8,0X00,0X01,0XC0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X80,0X00,0X03,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X07,0XFF,0X80,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XC0,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFC,0X00,0X00,0X07,0XE0,0X00,0X00,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X0F, +0XFF,0XFF,0XFF,0XC0,0X0F,0XFF,0XFE,0X00,0X00,0X00,0X00,0X3F,0XF0,0X00,0X01,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XC0, +0X00,0X07,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X0F,0XFF,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XF0,0X7F,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFC,0X00,0X00,0X07,0XE0,0X00,0X00,0X7F,0X00,0X00,0X00, +0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XC0,0X0F,0XFF,0XFE,0X00,0X00,0X00,0X00,0X3F, +0XF0,0X00,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XC0,0X00,0X07,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE, +0X0F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XF0, +0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XF8,0X00,0X00,0X07,0XE0,0X00,0X00, +0X1C,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XC0,0X0F,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XE0,0X00,0X1F,0XFF,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFE,0X3F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0XFF,0XF8,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X07,0XE0,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,0XC0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XF0,0X00,0X7F,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFE,0X7F,0XFC,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFC,0X7F,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF, +0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFF, +0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X07,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X07,0XE0,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,0XC0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF, +0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XC0, +0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X07,0XE0,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,0XC0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0, +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,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,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,0XC0,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,0X01,0XC0,0X00,0X00,0X1F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XC0,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,0XC0,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,0X01,0XC0, +0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,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,0X01,0XC0,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,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,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,0X01,0XC0, +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,0X01,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,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,0X01,0XC0,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,0X01,0XC0,0X00,0X00,0X07,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XE0,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,0X01,0XC0,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,0X01,0XC0, +0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,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,0X01,0XC0,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,0X01,0XC0,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,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,0X01,0XC0,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,0X01,0XC0, +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,0X01,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,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,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,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,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,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,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,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, +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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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, +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,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,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,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,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,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,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,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,0X3F,0XFF,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,0X3F,0XFF,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, +0X07,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X07,0XFF,0XFC,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,0X01,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XF8,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0X80,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,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF, +0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XF8,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,0X3F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF, +0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF, +0XFF,0XFF,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,0X3F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07, +0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0XFF,0XFF,0XFF,0XFF,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,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,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,0X07,0XFF,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,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, +0X3F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF, +0XFF,0XFF,0XF8,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,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00, +0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,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,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80, +0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,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,0X07,0XFF,0XFF,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X07,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X80,0X00, +0X00,0X1F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XE0,0X07,0XFF, +0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0X80,0X00,0X00,0X1F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XFE,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XFF,0XE0,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X01, +0XFF,0XFF,0XF8,0X00,0X7F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0X80,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFF,0XE0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X00,0X00,0X00,0XFF,0XFF,0XF8, +0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X0F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XC0,0X00,0X00,0X1F,0XFF,0XFF, +0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X00,0X00, +0X00,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X0F,0XFF,0XFF,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X1F,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XC0,0X00, +0X00,0X1F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0,0X00,0X00,0X07, +0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X06,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00, +0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XC0,0X00,0X00,0X3F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0XC0,0X00,0X00,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFC,0X00,0X00,0X00,0X00, +0XFF,0XF8,0X00,0X00,0X00,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X3F,0XFF,0XFF,0XE0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XEF,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0X80,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFC, +0X00,0X00,0X00,0X00,0XFF,0XE0,0X00,0X00,0X00,0X7F,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF, +0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X3F,0XFF,0XFF, +0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00,0X00,0X7F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00, +0X00,0X7F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF, +0XFF,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X01, +0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0XC0,0X00,0X00, +0X00,0X7F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XF0,0X00,0X00,0X7F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XFC,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF, +0X00,0X00,0X00,0X00,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00, +0X1F,0X80,0X00,0X00,0X00,0X1F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X7F,0XFF,0XFF,0XE0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XE0,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF, +0X00,0X00,0X00,0X00,0X0F,0X00,0X00,0X00,0X00,0X1F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XF8,0X00,0X00,0X7F,0XFF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X3F,0XFF,0XC0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X0C,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XF8,0X00, +0X00,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00, +0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X7F, +0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFF,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XF8,0X00, +0X00,0X00,0X00,0X7F,0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XF8,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF8,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF, +0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFC,0X00,0X00,0XFF,0XFF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XE0,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X7F,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFC,0X00, +0X00,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F, +0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X3C,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XBF,0XFF,0XFC,0X00, +0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X3C,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X03, +0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF, +0XBF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XFF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X20,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XBF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFE,0X00, +0X03,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X3F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XBF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X7F, +0XFF,0XFF,0XFE,0X00,0X07,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0, +0X00,0X00,0X00,0X00,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0X0F,0XFF,0XFF,0X00, +0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFE,0X00,0X07,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFC, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF, +0X0F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X7F,0XFF,0X3F,0XFF,0X80,0X07,0XFF,0XEF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFC,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XFF,0XFF,0X0F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X7F,0XFF,0X3F,0XFF,0X80, +0X07,0XFF,0XEF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X07, +0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0X0F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X7F, +0XFF,0X3F,0XFF,0X80,0X0F,0XFF,0XEF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XF8,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0X0F,0XFF,0XFF,0X80, +0X00,0X00,0X00,0X7F,0XFF,0X3F,0XFF,0X80,0X0F,0XFF,0XEF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFE, +0X07,0XFF,0XFF,0X80,0X00,0X00,0X00,0X7F,0XFF,0X1F,0XFF,0X80,0X0F,0XFF,0XEF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFC,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XFE,0X07,0XFF,0XFF,0X80,0X00,0X00,0X00,0X7F,0XFF,0X1F,0XFF,0XC0, +0X0F,0XFF,0XCF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0XFF, +0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFE,0X07,0XFF,0XFF,0X80,0X00,0X00,0X00,0X7F, +0XFF,0X1F,0XFF,0XC0,0X0F,0XFF,0XCF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0, +0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFE,0X07,0XFF,0XFF,0XC0, +0X00,0X00,0X00,0X7F,0XFF,0X1F,0XFF,0XC0,0X1F,0XFF,0XCF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X0F, +0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XF8, +0X07,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X7F,0XFF,0X1F,0XFF,0XC0,0X1F,0XFF,0XCF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X0F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X1F,0XFF,0XF8,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X7F,0XFF,0X0F,0XFF,0XE0, +0X1F,0XFF,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X7F,0XFF, +0XFE,0XFF,0XFE,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XF8,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X7F, +0XFF,0X0F,0XFF,0XE0,0X7F,0XFF,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00, +0X00,0X00,0X7F,0XFF,0XFE,0XFF,0XFE,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XF8,0X03,0XFF,0XFF,0XC0, +0X00,0X00,0X00,0X7F,0XFF,0X0F,0XFF,0XE0,0X7F,0XFF,0X0F,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0X00,0X00,0X01,0XFF,0XFF,0XF0,0XFF,0XFE,0X00,0X00,0X00,0X00,0X03, +0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8, +0X03,0XFF,0XFF,0XE0,0X00,0X00,0X00,0XFF,0XFF,0X0F,0XFF,0XE0,0X7F,0XFF,0X0F,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X03,0XFF,0XFF,0XE0,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0XF0,0X01,0XFF,0XFF,0XE0,0X00,0X00,0X00,0XFF,0XFF,0X0F,0XFF,0XE0, +0X7F,0XFE,0X0F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X0F,0XFF,0XFF, +0XC0,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF0,0X01,0XFF,0XFF,0XE0,0X00,0X00,0X00,0XFF, +0XFF,0X07,0XFF,0XF0,0X7F,0XFE,0X0F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00, +0X00,0X3F,0XFF,0XFE,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X0F,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF0,0X01,0XFF,0XFF,0XF8, +0X00,0X00,0X00,0XFF,0XFF,0X07,0XFF,0XF0,0XFF,0XFE,0X0F,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0X00,0X00,0X3F,0XFF,0XFE,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00, +0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF0, +0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0XFF,0XFF,0X07,0XFF,0XF0,0XFF,0XFE,0X0F,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X7F,0XFF,0XFC,0X00,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF, +0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFF,0XFF,0XE0,0X01,0XFF,0XFF,0XF8,0X00,0X00,0X00,0XFF,0XFF,0X07,0XFF,0XF0, +0XFF,0XFC,0X0F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X01,0XFF,0XFF,0XF8, +0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XE0,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0XFF, +0XFF,0X01,0XFF,0XF0,0XFF,0XFC,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00, +0X07,0XFF,0XFF,0XC0,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XE0,0X00,0X7F,0XFF,0XFC, +0X00,0X00,0X00,0XFF,0XFF,0X01,0XFF,0XF0,0XFF,0XFC,0X07,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0X00,0X0F,0XFF,0XFF,0X80,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XE0, +0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFF,0X01,0XFF,0XFD,0XFF,0XF8,0X07,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X0F,0XFF,0XFF,0X80,0X00,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF, +0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFC,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X01,0XFF,0XFF,0XE0,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFF,0X01,0XFF,0XFD, +0XFF,0XF8,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X3F,0XFF,0XFF,0X00, +0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0XFF, +0XFF,0X01,0XFF,0XFD,0XFF,0XF8,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00, +0XFF,0XFF,0XF8,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X3F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X00,0X3F,0XFF,0XFC, +0X00,0X00,0X00,0XFF,0XFF,0X00,0XFF,0XFD,0XFF,0XF8,0X07,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0X01,0XFF,0XFF,0XF0,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0, +0X00,0X3F,0XFF,0XFE,0X00,0X00,0X00,0XFF,0XFF,0X00,0XFF,0XFD,0XFF,0XE0,0X07,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X07,0XFF,0XFF,0XE0,0X00,0X00,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XC0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X03,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFE,0X00,0X00,0X00,0XFF,0XFF,0X00,0XFF,0XFF, +0XFF,0XE0,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X07,0XFF,0XFF,0XE0,0X00, +0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X7F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00,0X3F,0XFF,0XFE,0X00,0X00,0X00,0XFF, +0XFF,0X00,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X1F, +0XFF,0XFF,0X00,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFC,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00,0X1F,0XFF,0XFE, +0X00,0X00,0X00,0XFF,0XFF,0X00,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0X3F,0XFF,0XFE,0X00,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00, +0X00,0X1F,0XFF,0XFF,0X00,0X00,0X00,0XFF,0XFF,0X00,0X7F,0XFF,0XFF,0XE0,0X07,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFC,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X0F,0XFF,0XFF,0X00,0X00,0X1F,0XFF,0XFF,0X00,0X00,0X00,0XFF,0XFF,0X00,0X7F,0XFF, +0XFF,0XC0,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X0F, +0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X0F,0XFF,0XFE,0X00,0X00,0X1F,0XFF,0XFF,0X00,0X00,0X00,0XFF, +0XFF,0X00,0X7F,0XFF,0XFF,0XC0,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X00,0X00,0X00, +0X00,0X00,0X00,0X0F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFE,0X00,0X00,0X1F,0XFF,0XFF, +0X00,0X00,0X00,0XFF,0XFF,0X00,0X7F,0XFF,0XFF,0XC0,0X07,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF, +0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFE,0X00, +0X00,0X0F,0XFF,0XFF,0XC0,0X00,0X00,0XFF,0XFE,0X00,0X3F,0XFF,0XFF,0XC0,0X07,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X01,0XFF,0XFC,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFF,0XFE,0X00,0X00,0X0F,0XFF,0XFF,0XC0,0X00,0X00,0XFF,0XFE,0X00,0X3F,0XFF, +0XFF,0X80,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFC,0X00,0X00,0X00, +0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X0F,0XFF,0XFF,0XC0,0X00,0X00,0XFF, +0XFE,0X00,0X3F,0XFF,0XFF,0X80,0X07,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF, +0XF8,0X00,0X00,0X00,0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X0F,0XFF,0XFF, +0XC0,0X00,0X01,0XFF,0XFE,0X00,0X3F,0XFF,0XFF,0X80,0X07,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X1F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF, +0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFC,0X00, +0X00,0X0F,0XFF,0XFF,0XC0,0X00,0X01,0XFF,0XFE,0X00,0X3F,0XFF,0XFF,0X80,0X07,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X01,0XFF,0XFC,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X0F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X3F,0XFF,0XFC,0X00,0X00,0X03,0XFF,0XFF,0XE0,0X00,0X01,0XFF,0XFE,0X00,0X0F,0XFF, +0XFF,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X80,0X00,0X00,0X00, +0X01,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X03,0XFF,0XFF,0XE0,0X00,0X01,0XFF, +0XFE,0X00,0X0F,0XFF,0XFF,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF, +0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00, +0X00,0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X03,0XFF,0XFF, +0XE0,0X00,0X01,0XFF,0XFE,0X00,0X0F,0XFF,0XFF,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF, +0XF8,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8,0X00, +0X00,0X01,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0XFE,0X00,0X0F,0XFF,0XFC,0X00,0X07,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X3F,0XFF,0XF8,0X00,0X00,0X01,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0XFE,0X00,0X0F,0XFF, +0XFC,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X07,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF, +0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X01,0XFF,0XFF,0XF0,0X00,0X01,0XFF, +0XFE,0X00,0X07,0XFF,0XFC,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XE0,0X00,0X00,0X01,0XFF,0XFF, +0XF0,0X00,0X01,0XFF,0XFE,0X00,0X07,0XFF,0XFC,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF, +0XF8,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XE0,0X00, +0X00,0X01,0XFF,0XFF,0XF0,0X00,0X01,0XFF,0XFE,0X00,0X07,0XFF,0XF8,0X00,0X07,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFE,0X00,0X03,0XFF, +0XF8,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X07,0XFF,0XFE, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF, +0XFE,0X00,0X03,0XFF,0XF8,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00, +0X00,0X1F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XF8,0X00,0X01,0XFF,0XFE,0X00,0X03,0XFF,0XF8,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF, +0XE0,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XFF,0XFE,0X00,0X03,0XFF,0XF8,0X00,0X07,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X1F,0XFF,0XC0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X01,0XFF,0XFE,0X00,0X03,0XFF, +0XF0,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00, +0X3F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00,0XFF,0XFF,0XC0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X01,0XFF, +0XFE,0X00,0X01,0XFF,0XF0,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFE, +0X00,0X00,0X00,0X00,0X3F,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X0F,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XE0,0X00,0X00,0X00, +0X00,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFE,0X00,0X01,0XFF,0XFE,0X00,0X01,0XFF,0XF0,0X00,0X07,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00, +0X7F,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XE0,0X00,0X00,0X00,0X03,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00, +0X00,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X1F,0XFF,0XC0,0X00,0X00,0X00,0X07,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X01, +0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XC0,0X00,0X00,0X00,0X0F,0XFF,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X01,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0XC0,0X00,0X00,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X80,0X00,0X00,0X00, +0X1F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0XC0,0X00,0X00,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X03, +0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0X80,0X00,0X00,0X00,0X1F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF0,0X00,0X00,0X07,0XFF,0XFC,0X00,0X00, +0X00,0X00,0X00,0X0F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X7F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X3F, +0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0X00,0X00,0X00,0X00,0XFF,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X01,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XFE,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X01, +0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X1F,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X38,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFC, +0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X38,0X00,0X00,0X00, +0X00,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, +0X3F,0XFC,0X00,0X00,0X3F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XC0,0X03,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X03,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X03, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00,0X00,0X00,0X07,0XFF, +0XFF,0XC0,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0, +0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFC,0X00,0X00, +0X00,0X00,0X07,0XFF,0XFF,0XC0,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F, +0XFF,0XF8,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XF0,0X03,0XFF,0XFE,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, +0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X3F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XF0,0X03,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X3F, +0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X03, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00,0X00,0X00,0X07,0XFF, +0XFF,0XF0,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X0F, +0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00, +0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X00,0X00, +0X00,0X00,0X03,0XFF,0XFF,0XF0,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00, +0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF, +0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XF0,0X03,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFE, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00, +0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XF8,0X03,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00, +0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XC0,0X00, +0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X03, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X03,0XFF, +0XFF,0XF8,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00, +0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01, +0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0X00, +0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X03,0XFF,0XFF,0XF8,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X7F,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF, +0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF8,0X03,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,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,0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XFF,0XC0,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,0X01,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFC,0X03,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,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,0X01,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0XFC,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,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,0X01,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0XFC,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFF,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,0X01,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFC,0X03,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,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,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFC,0X03,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,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,0X07,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X7F, +0XFF,0XFE,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,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,0X07,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X7F,0XFF,0XFE,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFF,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,0X07,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFE,0X03,0XFF,0XFC,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,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,0X07,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFE,0X03,0XFF, +0XFC,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,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,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,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,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,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,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,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, +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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X0F,0XFF,0XFF, +0X80,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X1F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X7F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X3F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XFF,0XC0,0X00,0X00, +0X00,0X03,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0,0X03,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X1F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFF,0XFE,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF, +0XFF,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XC0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0X80, +0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00, +0X00,0X7F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFF,0XF8,0X00,0X00,0X00,0X00, +0X03,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XC0,0X03,0XFF,0XFF, +0XFF,0XFF,0XFF,0X80,0X03,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XF8,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF, +0XC0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X7F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X07,0XFF,0XF0,0X01,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X07,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X3F, +0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF, +0XF0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF0,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0X00, +0X1F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00,0X00, +0X00,0X7F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFF,0X00,0X00,0X00,0X00,0X00, +0X00,0X1F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03, +0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XF8,0X00,0XFF,0XFF, +0XFF,0XFF,0XFE,0X00,0X1F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFE,0X00, +0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X03,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF, +0XF8,0X00,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X1F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X0F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0X00,0X00,0X00,0X07,0XFF,0XFF,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0X80,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XF8,0X00,0X7F,0XFF,0XFF,0XFF,0XFE,0X00,0X3F,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0X00,0X00,0X00,0X03, +0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFC,0X00,0X7F,0XFF,0XFF,0XFF,0XFC,0X00, +0X3F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X7F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF8,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F, +0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFC,0X00,0X1F,0XFF, +0XFF,0XFF,0XFC,0X00,0X7F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF8,0X00, +0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X7F,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0X00,0X00,0XFF,0XFF,0XFF,0XE0,0X00,0X3F, +0XFE,0X00,0X1F,0XFF,0XFF,0XFF,0XF0,0X00,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X00,0X03,0XFF,0XFF,0XFE,0X00,0X01,0XFF,0X80,0X3F,0XFF,0XFF,0XFF, +0XFF,0X00,0X07,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X00,0X00,0X00,0X7F,0XFF,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFF,0X00,0X00,0XFF,0XFF, +0XFF,0XE0,0X00,0X3F,0XFE,0X00,0X1F,0XFF,0XFF,0XFF,0XF0,0X00,0XFF,0XE0,0X03,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00,0X03,0XFF,0XFF,0XFE,0X00,0X01,0XFF,0X80, +0X3F,0XFF,0XFF,0XFF,0XFF,0X00,0X07,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X00,0X00,0X00,0X00, +0X7F,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0X03,0XFF,0XFF,0XFF,0XF8,0X00,0X1F,0XFE,0X00,0X0F,0XFF,0XFF,0XFF,0XF0,0X00, +0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00,0X1F,0XFF,0XFF,0XFF, +0X80,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF, +0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFE,0X00,0X07,0XFF,0XFF,0XFF,0XFC,0X00,0X1F,0XFF,0X80,0X0F,0XFF, +0XFF,0XFF,0XE0,0X03,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X3F, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00, +0X3F,0XFF,0XFF,0XFF,0XF0,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X07,0XFF,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0X00,0X1F, +0XFF,0X80,0X07,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X01,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF, +0XFF,0XE0,0X07,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X3F,0XFF,0XFF, +0XFF,0XFF,0X80,0X1F,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XC0,0X07,0XFF,0XE0,0X03,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X01,0XFF,0XFF,0XFF,0XFF,0XF8,0X00,0XFF,0X80, +0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X00,0X00,0X00,0X00, +0X0F,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0X80,0X1F,0XFF,0XC0,0X07,0XFF,0XFF,0XFF,0XC0,0X07, +0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X1F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X01,0XFF,0XFF,0XFF,0XFF, +0XF8,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF, +0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFE,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X1F,0XFF,0XC0,0X03,0XFF, +0XFF,0XFF,0XC0,0X07,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X0F, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X1F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XF0,0X03, +0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X3F,0XFF,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X1F, +0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0X80,0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01, +0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF, +0XFF,0XE0,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X1F,0XFF,0XE0,0X00,0XFF,0XFF,0XFF,0X80,0X0F,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0X80,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80, +0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X00, +0X01,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XF0,0X00,0XFF,0XFF,0XFE,0X00,0X1F, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00, +0X07,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF, +0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF, +0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XF0,0X00,0XFF, +0XFF,0XFE,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00, +0X00,0X00,0X00,0X00,0X07,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X07, +0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F, +0XFF,0XF0,0X00,0X7F,0XFF,0XFE,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01, +0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X80,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF, +0XFF,0XE0,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X1F,0XFF,0XFC,0X00,0X7F,0XFF,0XFC,0X00,0X7F,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0X01,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80, +0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0X00,0X00,0X00,0X00, +0X00,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFC,0X00,0X3F,0XFF,0XFC,0X00,0X7F, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00, +0X00,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF, +0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFF,0XE0,0X07,0XE0,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF, +0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFE,0X00,0X3F, +0XFF,0XF8,0X00,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X07, +0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFF,0XC0,0X07,0XE0, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F, +0XFF,0XFE,0X00,0X3F,0XFF,0XF8,0X00,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01, +0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X00,0X00,0X00,0X00,0X00, +0X00,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF, +0XFF,0XC0,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X7F,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0X00,0X1F,0XFF,0XF0,0X00,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0X01,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00, +0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF, +0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00, +0X00,0X7F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0X80,0X1F,0XFF,0XFF,0X00,0X1F,0XFF,0XF0,0X01,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X03,0XFF,0XFF,0XFF,0XFF, +0XFC,0X00,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XFF,0X80,0X1F,0XFF,0XF0,0X00,0X1F,0XF8,0X00,0X01,0XFF,0XFF, +0X00,0X3F,0XF0,0X00,0X00,0X1F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X00,0X07, +0XFF,0XC0,0X01,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFE, +0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0X80,0X1F,0XFF,0XF8,0X00,0X3F,0XFC, +0X00,0X01,0XFF,0XFF,0X00,0X7F,0XF8,0X00,0X00,0X1F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0X80,0X07,0XFF,0XC0,0X03,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X3F,0X80,0X1F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X07,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X1F,0XFF, +0XF8,0X00,0X3F,0XFC,0X00,0X01,0XFF,0XFF,0X00,0X7F,0XF8,0X00,0X00,0X1F,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0X80,0X07,0XFF,0XC0,0X03,0XFF,0XFF,0XE0,0X03,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X3F,0X80,0X1F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X1F,0XFF,0XF8,0X00,0X7F,0XFC,0X00,0X07,0XFF,0XF3,0X00,0X7F,0XF8,0X00, +0X00,0X0F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0X80,0X03,0XFF,0X80,0X03,0XFF, +0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0X00,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XE0,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X0F,0XFF,0XF8,0X00,0X7F,0XFC,0X00,0X07,0XFF,0XF0, +0X00,0XFF,0XFE,0X00,0X00,0X0F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XE0,0X03, +0XFF,0X80,0X0F,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XE0, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X0F,0XFF,0XFE,0X00,0X7F,0XFF, +0X00,0X0F,0XFF,0XE0,0X00,0XFF,0XFE,0X00,0X00,0X0F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XF0,0X01,0XFF,0X00,0X0F,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X00,0X3F,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X07,0XFF, +0XFE,0X01,0XFF,0XFF,0X00,0X0F,0XFF,0XE0,0X03,0XFF,0XFF,0X00,0X00,0X0F,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X01,0XFF,0X00,0X1F,0XFF,0XFF,0XE0,0X03,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X07,0XFF,0XFE,0X01,0XFF,0XFF,0X00,0X0F,0XFF,0XE0,0X03,0XFF,0XFF,0X00, +0X00,0X0F,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X01,0XFF,0X00,0X1F,0XFF, +0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XC0,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XE0,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X07,0XFF,0XFE,0X01,0XFF,0XFF,0X80,0X1F,0XFF,0XE0, +0X03,0XFF,0XFF,0X00,0X00,0X07,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF0,0X00, +0XFE,0X00,0X1F,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XE0, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X07,0XFF,0XFF,0X01,0XFF,0XFF, +0X80,0X1F,0XFF,0XC0,0X03,0XFF,0XFF,0X80,0X00,0X07,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0XF8,0X00,0XFE,0X00,0X3F,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X00,0X00,0X00,0X00, +0X00,0X0F,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X07,0XFF, +0XFF,0X03,0XFF,0XFF,0X80,0X1F,0XFF,0XC0,0X07,0XFF,0XFF,0X80,0X00,0X07,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0XF8,0X00,0X38,0X00,0X3F,0XFF,0XFF,0XE0,0X03,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80, +0X1F,0X00,0X00,0X1F,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X03,0XFF,0XFF,0X03,0XFF,0XFF,0XC0,0X3F,0XFF,0X80,0X07,0XFF,0XFF,0XC0, +0X00,0X07,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFC,0X00,0X38,0X00,0X7F,0XFF, +0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XC0,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0XFF,0X80,0X3F,0X80,0X00,0X0F,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0X03,0XFF,0XFF,0XC0,0X3F,0XFF,0X80, +0X07,0XFF,0XFF,0XC0,0X00,0X07,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XF0,0X03,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0XFF,0XFC,0X00, +0X38,0X00,0X7F,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X3F,0X80,0X00,0X0F,0XFF,0XFF,0XFF,0XE0, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0X83,0XFF,0XFF, +0XC0,0X3F,0XFF,0X80,0X0F,0XFF,0XFF,0XC0,0X00,0X07,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F, +0XFF,0XFF,0XFF,0X00,0X18,0X01,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XF0,0X00,0X07, +0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X03,0XFF, +0XFF,0X87,0XFF,0XFF,0XC0,0XFF,0XFE,0X00,0X0F,0XFF,0XFF,0XF0,0X00,0X03,0XFF,0XF8, +0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE,0X00,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XE0,0X03,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X3F,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80, +0X3F,0XF8,0X00,0X00,0XFF,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X00,0XFF,0XFF,0X87,0XFF,0XFF,0XE0,0XFF,0XFE,0X00,0X1F,0XFF,0XFF,0XF0, +0X00,0X03,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF0,0X03,0XFE, +0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF, +0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XC0,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF, +0XFC,0X00,0XFF,0X80,0X3F,0XFE,0X00,0X00,0X7F,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0XFF,0XFF,0XC7,0XFF,0XFF,0XE1,0XFF,0XFE,0X00, +0X1F,0XFF,0XFF,0XF8,0X00,0X03,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XF8,0X01,0XFF,0XFF, +0XFF,0XE0,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0X80, +0X00,0X03,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07, +0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0X80,0X00,0X1F,0XFF,0XFF,0XE0, +0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0XFF,0XFF,0XC7,0XFF,0XFF, +0XE1,0XFF,0XFE,0X00,0X1F,0XFF,0XFF,0XF8,0X00,0X03,0XFF,0XF8,0X01,0XFF,0XFF,0XFF, +0XF8,0X01,0XFF,0XFF,0XFF,0XE0,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F, +0XFF,0XFF,0XFF,0X80,0X00,0X03,0XFF,0XFF,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0X80,0X00, +0X1F,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0XFF, +0XFF,0XCF,0XFF,0XFF,0XF9,0XFF,0XFC,0X00,0X1F,0XFF,0XFF,0XF8,0X00,0X03,0XFF,0XF8, +0X00,0X3F,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFF,0XC0,0X03,0XFE,0X00,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XC0,0X00,0X07,0XFF,0XFF,0XFF,0XE0,0X03,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X3F,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80, +0X3F,0XFF,0XE0,0X00,0X07,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0X80,0X00,0X7F,0XFF,0XCF,0XFF,0XFF,0XF9,0XFF,0XFC,0X00,0X7F,0XFF,0XFF,0XFC, +0X00,0X03,0XFF,0XF8,0X00,0X0F,0XFF,0XFF,0XF8,0X01,0XFF,0XFF,0XFC,0X00,0X03,0XFE, +0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XC0,0X00,0X07,0XFF,0XFF, +0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XE0, +0X00,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF, +0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XF0,0X00,0X01,0XFF,0XFF,0XE0,0X07,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFB,0XFF,0XF8,0X00, +0X7F,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XE0, +0X00,0X0F,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07, +0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFC,0X00,0X00,0XFF,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X7F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XF8,0X40,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F, +0XFF,0XFF,0XFF,0XE0,0X00,0X0F,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0X00, +0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X7F, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8,0X40,0XFF,0XFF,0XFF,0XFC,0X00,0X03,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFE,0X00,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XE0,0X00,0X0F,0XFF,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80, +0X3F,0XFF,0XFF,0X00,0X00,0X1F,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF1,0XE0,0XFF,0XFF,0XFF,0XFE, +0X00,0X03,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFE, +0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XF8,0X00,0X3F,0XFF,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF, +0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0X80,0X00,0X0F,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF3,0XE1, +0XFF,0XFF,0XFF,0XFE,0X00,0X03,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X07,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XF8, +0X00,0X3F,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07, +0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XF0,0X00,0X07,0XFF,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X3F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XF3,0XC1,0XFF,0XFE,0XFF,0XFF,0X80,0X03,0XFF,0XFF,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F, +0XFF,0XFF,0XFF,0XFC,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XF8, +0X00,0X00,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X1F, +0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XC3,0XDF,0XFF,0XFC,0XFF,0XFF,0X80,0X03,0XFF,0XFF, +0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFE,0X00,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80, +0X3F,0XFF,0XFF,0XFC,0X00,0X00,0X7F,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0X80,0X00,0X1F,0XFF,0XFF,0XFD,0XFF,0XFF,0XFF,0XC3,0XDF,0XFF,0XFC,0XFF,0XFF, +0X80,0X03,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFE, +0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XFC,0X00,0X7F,0XFF,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X00, +0X01,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF, +0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFC,0X00,0X00,0X7F,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X1F,0XFF,0XFF,0XFC,0XFF,0XFF,0XFF,0XC7,0X9F, +0XFF,0XFC,0X3F,0XFF,0XC0,0X03,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X3F,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XFE, +0X00,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00, +0X00,0X00,0X00,0X00,0X07,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07, +0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0X80,0X00,0X0F,0XE0, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X00,0X07,0XFF,0XFF,0XFC,0XFF, +0XFF,0XFF,0X87,0XBF,0XFF,0XFC,0X3F,0XFF,0XC0,0X03,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F, +0XFF,0XFF,0XFF,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X1F,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF, +0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF, +0XC0,0X00,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XC0,0X00,0X07, +0XFF,0XFF,0XF0,0XFF,0XFF,0XFF,0X8E,0X1F,0XFF,0XF8,0X1F,0XFF,0XE0,0X03,0XFF,0XFF, +0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XFE,0X00,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XFF,0X01,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X7F,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0X80,0X7F, +0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80, +0X3F,0XFF,0XFF,0XFF,0XF8,0X00,0X01,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF, +0XFF,0XC0,0X00,0X07,0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0X8E,0X3F,0XFF,0XF8,0X1F,0XFF, +0XE0,0X03,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFE, +0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XFF,0XC7,0XFF,0XFF,0XFF, +0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00,0X00,0X00,0X00,0X1F, +0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07,0XFF,0XFF,0XFF,0XFF, +0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X70,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0XFF,0XFF,0XC0,0X00,0X07,0XFF,0XFF,0XF0,0X7F,0XFF,0XFF,0X8E,0X3F, +0XFF,0XF8,0X1F,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0XFF,0XFF,0XFE,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X1F,0XFF,0XFF,0XFF,0XFF, +0XC7,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00, +0X00,0X00,0X00,0X1F,0XFF,0XFF,0X80,0X7F,0XFF,0XFF,0XFF,0XFF,0XF0,0X07,0XF0,0X07, +0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0XFF,0X80,0X3F,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X70, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XC0,0X00,0X07,0XFF,0XFF,0XF0,0X7F, +0XFF,0XFF,0X3E,0X3F,0XFF,0XE0,0X0F,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03, +0XFF,0XFF,0XE0,0X7F,0XFF,0XFF,0X3C,0X7F,0XFF,0XE0,0X0F,0XFF,0XF0,0X03,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XC0,0X00,0X03,0XFF,0XFF,0XE0,0X1F,0XFF,0XFF,0X3D,0XFF,0XFF,0XC0,0X07,0XFF, +0XFC,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XFF,0XFF,0XE0,0X1F,0XFF,0XFE,0X7D,0XFF, +0XFF,0XC0,0X07,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X03,0XFF,0XFF,0XE0,0X1F, +0XFF,0XFE,0X7D,0XFF,0XFF,0XC0,0X07,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,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,0X00,0X01, +0XFF,0XFF,0XC0,0X1F,0XFF,0XFE,0X7B,0XFF,0XFF,0XC0,0X0F,0XFF,0XF0,0X03,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X00,0X01,0XFF,0XFF,0XC0,0X0F,0XFF,0XF8,0X39,0XFF,0XFF,0X80,0X0F,0XFF, +0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X00,0X01,0XFF,0XFF,0XC0,0X0F,0XFF,0XF8,0X03,0XFF, +0XFF,0X80,0X1F,0XFF,0XE0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,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,0X00,0X00,0XFF,0XFF,0X80,0X07, +0XFF,0XF0,0X03,0XFF,0XFF,0X00,0X1F,0XFF,0XC0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,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,0X00,0X00, +0XFF,0XFF,0X80,0X07,0XFF,0XF0,0X03,0XFF,0XFF,0X00,0X1F,0XFF,0XC0,0X03,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X00,0X00,0XFF,0XFF,0X80,0X07,0XFF,0XF0,0X07,0XFF,0XFF,0X00,0X3F,0XFF, +0XC0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X00,0X00,0XFF,0XFF,0X80,0X07,0XFF,0XF0,0X03,0XFF, +0XFC,0X00,0X3F,0XFF,0X80,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,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,0X00,0X00,0X3F,0XFE,0X00,0X03, +0XFF,0XE0,0X03,0XFF,0XFC,0X00,0X3F,0XFF,0X80,0X03,0XFF,0XFF,0XFF,0XFF,0X1F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X3F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00, +0X3F,0XFE,0X00,0X03,0XFF,0XE0,0X03,0XFF,0XFC,0X00,0XFF,0XFE,0X00,0X03,0XFF,0XFF, +0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFC,0X00,0X00,0X3F,0XFE,0X00,0X03,0XFF,0XE0,0X03,0XFF,0XFC,0X00,0XFF,0XFE, +0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X3F,0XFC,0X00,0X03,0XFF,0XC0,0X01,0XFF, +0XF8,0X00,0XFF,0XFE,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,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,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X1F,0XFC,0X00,0X00, +0XFF,0XC0,0X01,0XFF,0XF8,0X01,0XFF,0XFC,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X0F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,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,0X3F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00, +0X1F,0XFC,0X00,0X00,0XFF,0XC0,0X00,0X7F,0XF0,0X39,0XFF,0XFC,0X00,0X03,0XFF,0XFF, +0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8, +0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0XFF,0XF8,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,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,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0X0F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,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,0X3F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0,0X00,0X03,0XFF,0XFF, +0XFF,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0, +0X00,0X03,0XFF,0XFE,0X03,0XFF,0X0F,0XC0,0X3F,0XFF,0XFE,0X00,0XFE,0XFF,0XBE,0X0F, +0XFF,0X00,0X3F,0XFF,0XFF,0XFF,0XFE,0X00,0XFE,0X7E,0XFF,0XFF,0XFF,0XFF,0XE3,0XFF, +0XC0,0X0F,0XFF,0XFE,0X03,0XFF,0XFF,0X00,0X3F,0XFF,0XDF,0XC0,0X7F,0XF0,0X0F,0XFF, +0XFF,0X00,0X3F,0XFF,0XFF,0XFE,0X3F,0X80,0XFF,0XFF,0XF8,0X01,0XFC,0XFF,0X7C,0X0F, +0XFE,0X00,0XFC,0X3E,0XFF,0XFF,0XFF,0XFF,0XFB,0XFF,0XF0,0X0F,0XF7,0XF9,0XF0,0X7F, +0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0XFF,0XC0,0X00,0X03,0XFF,0XF8,0X00,0X7F,0X0F,0X00,0X0F,0XFF,0XF0,0X00, +0X3C,0X3F,0X08,0X0F,0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XF8,0X00,0X3C,0X3C,0X7F,0XFF, +0XCF,0XFF,0XE1,0XFF,0X00,0X00,0XFF,0XFC,0X00,0X7F,0XF8,0X00,0X0F,0XFF,0X86,0X00, +0X0F,0XC0,0X03,0XFF,0XF8,0X00,0X0F,0XFF,0XFF,0XFE,0X3C,0X00,0X1F,0XFF,0XE0,0X00, +0X30,0XFC,0X38,0X0F,0XF8,0X00,0X1C,0X3E,0X1F,0XFF,0XDF,0XFF,0XE1,0XFF,0X80,0X01, +0XE3,0XF8,0XC0,0X7F,0XC0,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XC0,0X00,0X03,0XFF,0XF8,0X00,0X7F,0X0F,0X00, +0X0F,0XFF,0XF0,0X00,0X3C,0X3F,0X08,0X0F,0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XF8,0X00, +0X3C,0X3C,0X7F,0XFF,0XCF,0XFF,0XE1,0XFF,0X00,0X00,0XFF,0XFC,0X00,0X7F,0XF8,0X00, +0X0F,0XFF,0X86,0X00,0X0F,0XC0,0X03,0XFF,0XF8,0X00,0X0F,0XFF,0XFF,0XFE,0X3C,0X00, +0X1F,0XFF,0XE0,0X00,0X30,0XFC,0X38,0X0F,0XF8,0X00,0X1C,0X3E,0X1F,0XFF,0XDF,0XFF, +0XE1,0XFF,0X80,0X01,0XE3,0XF8,0XC0,0X7F,0XC0,0X00,0X7F,0XFF,0XFF,0XFF,0XE0,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XC0,0X00,0X03,0XFF,0XF0, +0X70,0X3F,0X08,0X1C,0X07,0XFF,0XE0,0X18,0X04,0X3F,0X08,0X5F,0XF0,0X1C,0X07,0XFF, +0XFF,0XFF,0XC0,0X38,0X0C,0X3E,0X1F,0XFF,0X0F,0XFF,0XC3,0XFC,0X03,0X00,0X3F,0XF0, +0X70,0X3F,0XF0,0X0C,0X03,0XFF,0X86,0X0E,0X07,0X81,0X00,0XFF,0XF0,0X0C,0X03,0XFF, +0XFF,0XFE,0X38,0X1C,0X0F,0XFF,0XC0,0X70,0X1C,0XFC,0X21,0X1F,0XC0,0X1C,0X0C,0X3E, +0X1F,0XFF,0X8F,0XFF,0XC3,0XFE,0X03,0XC0,0XE3,0XF8,0X06,0XFF,0X80,0XE0,0X3F,0XFF, +0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF8, +0X00,0X03,0XFF,0XF0,0XFC,0X3F,0X00,0X7F,0XC7,0XFF,0XC1,0XFF,0X80,0X3F,0X03,0XFF, +0XE0,0XFF,0XC1,0XFF,0XFF,0XFF,0X81,0XFF,0X80,0X3E,0X1F,0XFF,0X0F,0XFF,0XC3,0XF8, +0X3F,0XF0,0X3F,0XF0,0XFC,0X3F,0XE0,0XFF,0XC1,0XFF,0X80,0X3F,0X86,0X1F,0XF0,0XFF, +0XE0,0XFF,0XC1,0XFF,0XFF,0XFE,0X01,0XFF,0X07,0XFF,0X07,0XFE,0X00,0XFC,0X03,0XFF, +0X81,0XFF,0X84,0X3E,0X1F,0XFF,0X8F,0XFF,0XC3,0XF8,0X0F,0XFC,0X63,0XF8,0X1F,0XFE, +0X0F,0XFC,0X1F,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0XFF,0XF8,0X00,0X03,0XFF,0XE1,0XFF,0XFF,0X03,0XFF,0XE1,0XFF,0X8F,0XFF, +0XC0,0X3F,0X07,0XFF,0X83,0XFF,0XF0,0XFF,0XFF,0XFF,0X07,0XFF,0XC0,0X3F,0X0F,0XFE, +0X07,0XFF,0X8F,0XF0,0X7F,0XFE,0X0F,0XE1,0XFF,0XFF,0XC1,0XFF,0XE0,0XFF,0X81,0XFF, +0XC0,0X3F,0XF0,0X7F,0XC1,0XFF,0XF0,0XFF,0XFF,0XFE,0X03,0XFF,0X87,0XFE,0X0F,0XFF, +0XC0,0XFC,0X07,0XFF,0X87,0XFF,0XE0,0X3F,0X0F,0XFE,0X03,0XFF,0X87,0XF8,0X7F,0XFE, +0X03,0XF8,0X3F,0XFC,0X1F,0XFF,0X07,0XFF,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0,0X00,0X03,0XFF,0XE1,0XFF,0XFF,0X03,0XFF, +0XE1,0XFE,0X1F,0XFF,0XE0,0X3F,0X07,0XFF,0X87,0XFF,0XF8,0X7F,0XFF,0XFF,0X1F,0XFF, +0XF0,0X3F,0X0F,0XFE,0X07,0XFF,0X8F,0XF0,0XFF,0XFF,0X07,0XE1,0XFF,0XFF,0X07,0XFF, +0XF0,0X7F,0X81,0XFF,0XC0,0X7F,0XF8,0X7F,0XC7,0XFF,0XFC,0X7F,0XFF,0XFE,0X07,0XFF, +0XE3,0XFC,0X1F,0XFF,0XE0,0XFC,0X1F,0XFF,0X0F,0XFF,0XF0,0X3F,0X0F,0XFE,0X03,0XFF, +0X87,0XF0,0XFF,0XFF,0X03,0XF8,0X3F,0XF8,0X3F,0XFF,0X83,0XFF,0XFF,0XFF,0XF8,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XF0,0X00,0X03,0XFF,0XE1, +0XFF,0XFF,0X03,0XFF,0XE1,0XFE,0X1F,0XFF,0XE0,0X3F,0X07,0XFF,0X87,0XFF,0XF8,0X7F, +0XFF,0XFF,0X1F,0XFF,0XF0,0X3F,0X0F,0XFE,0X07,0XFF,0X8F,0XF0,0XFF,0XFF,0X07,0XE1, +0XFF,0XFF,0X07,0XFF,0XF0,0X7F,0X81,0XFF,0XC0,0X7F,0XF8,0X7F,0XC7,0XFF,0XFC,0X7F, +0XFF,0XFE,0X07,0XFF,0XE3,0XFC,0X1F,0XFF,0XE0,0XFC,0X1F,0XFF,0X0F,0XFF,0XF0,0X3F, +0X0F,0XFE,0X03,0XFF,0X87,0XF0,0XFF,0XFF,0X03,0XF8,0X3F,0XF8,0X3F,0XFF,0X83,0XFF, +0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0X80, +0X00,0X03,0XFF,0XE1,0XFF,0XFF,0X07,0XFF,0XE1,0XFC,0X1F,0XFF,0XF8,0X3F,0X07,0XFF, +0X0F,0XFF,0XF8,0X7F,0XFF,0XFC,0X1F,0XFF,0XF8,0X3F,0X8F,0XFC,0X07,0XFF,0X9F,0XE3, +0XFF,0XFF,0X07,0XE1,0XFF,0XFF,0X0F,0XFF,0XFC,0X7F,0X83,0XFF,0XF1,0XFF,0XF8,0X7F, +0X0F,0XFF,0XFC,0X7F,0XFF,0XFE,0X0F,0XFF,0XE3,0XFC,0X3F,0XFF,0XE0,0XFC,0X1F,0XFE, +0X0F,0XFF,0XF8,0X3F,0XC7,0XFE,0X03,0XFF,0X87,0XE0,0XFF,0XFF,0X83,0XF8,0XFF,0XF8, +0X7F,0XFF,0XC3,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0XFF,0X00,0X00,0X03,0XFF,0XF0,0XFF,0XFF,0X0F,0XFF,0XF1,0XFC,0X3F,0XFF, +0XFC,0X3F,0X0F,0XFF,0X0F,0XFF,0XFE,0X3F,0XFF,0XFC,0X3F,0XFF,0XF8,0X3F,0X87,0XFC, +0X31,0XFE,0X1F,0XE3,0XFF,0XFF,0X83,0XF0,0XFF,0XFF,0X0F,0XFF,0XFE,0X1F,0X83,0XFF, +0XF1,0XFF,0XF8,0X7F,0X0F,0XFF,0XFE,0X1F,0XFF,0XFE,0X0F,0XFF,0XE3,0XFC,0X3F,0XFF, +0XF0,0XFC,0X3F,0XFE,0X3F,0XFF,0XFC,0X3F,0XC7,0XFC,0X21,0XFF,0X1F,0XE1,0XFF,0XFF, +0X83,0XF8,0XFF,0XF1,0XFF,0XFF,0XE3,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3F,0XFE,0X00,0X00,0X03,0XFF,0XF0,0X7F,0XFF,0X0F,0XFF, +0XF0,0XFC,0X3F,0XFF,0XFC,0X3F,0X0F,0XFE,0X0F,0XFF,0XFE,0X3F,0XFF,0XFC,0X3F,0XFF, +0XFC,0X3F,0X87,0XFC,0XE1,0XFE,0X1F,0XE3,0XFF,0XFF,0X83,0XF0,0X7F,0XFE,0X1F,0XFF, +0XFE,0X1F,0X87,0XFF,0XF1,0XFF,0XF8,0X7E,0X1F,0XFF,0XFE,0X1F,0XFF,0XFE,0X3F,0XFF, +0XE3,0XF8,0XFF,0XFF,0XF0,0XFC,0X3F,0XFE,0X3F,0XFF,0XFC,0X3F,0XE7,0XFC,0X21,0XFF, +0X1F,0XE1,0XFF,0XFF,0XE3,0XF8,0XFF,0XF1,0XFF,0XFF,0XE1,0XFF,0XFF,0XFF,0XFF,0X80, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XF8,0X00,0X00,0X03,0XFF,0XF8, +0X0F,0XFF,0X0F,0XFF,0XF0,0XFC,0X3F,0XFF,0XFC,0X3F,0X0F,0XFE,0X00,0X00,0X00,0X3F, +0XFF,0XFC,0X7F,0XFF,0XFC,0X3F,0XE3,0XF8,0XF0,0XFC,0X3F,0X80,0X00,0X00,0X03,0XFC, +0X0F,0XFE,0X1F,0XFF,0XFE,0X1F,0X87,0XFF,0XF1,0XFF,0XF8,0X7E,0X00,0X00,0X00,0X1F, +0XFF,0XFE,0X3F,0XFF,0XE3,0XF8,0XFF,0XFF,0XFC,0XFC,0X3F,0XFE,0X7F,0XFF,0XFC,0X3F, +0XE1,0XF8,0X70,0XFC,0X3F,0XC7,0XFF,0XFF,0XE3,0XF8,0XFF,0XF0,0X00,0X00,0X01,0XFF, +0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XF8,0X00, +0X00,0X03,0XFF,0XF8,0X0F,0XFF,0X0F,0XFF,0XF0,0XFC,0X3F,0XFF,0XFC,0X3F,0X0F,0XFE, +0X00,0X00,0X00,0X3F,0XFF,0XFC,0X7F,0XFF,0XFC,0X3F,0XE3,0XF8,0XF0,0XFC,0X3F,0X80, +0X00,0X00,0X03,0XFC,0X0F,0XFE,0X1F,0XFF,0XFE,0X1F,0X87,0XFF,0XF1,0XFF,0XF8,0X7E, +0X00,0X00,0X00,0X1F,0XFF,0XFE,0X3F,0XFF,0XE3,0XF8,0XFF,0XFF,0XFC,0XFC,0X3F,0XFE, +0X7F,0XFF,0XFC,0X3F,0XE1,0XF8,0X70,0XFC,0X3F,0XC7,0XFF,0XFF,0XE3,0XF8,0XFF,0XF0, +0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3F,0XF0,0X00,0X00,0X03,0XFF,0XFE,0X03,0XFF,0X0F,0XFF,0XF0,0XFC,0X7F,0XFF, +0XFC,0X3F,0X0F,0XFE,0X00,0X00,0X00,0X3F,0XFF,0XF8,0X7F,0XFF,0XFC,0X3F,0XE3,0XF8, +0XF0,0XFC,0X3F,0X80,0X00,0X00,0X03,0XFE,0X03,0XFE,0X1F,0XFF,0XFF,0X1F,0X87,0XFF, +0XF1,0XFF,0XF8,0X7E,0X00,0X00,0X00,0X1F,0XFF,0XFE,0X3F,0XFF,0XE3,0XF8,0XFF,0XFF, +0XFC,0XFC,0X3F,0XF8,0X7F,0XFF,0XFC,0X3F,0XE1,0XF8,0X70,0XFC,0X3F,0XC7,0XFF,0XFF, +0XE3,0XF8,0XFF,0XF0,0X00,0X00,0X01,0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X00,0X03,0XFF,0XFF,0X81,0XFF,0X0F,0XFF, +0XF0,0XFC,0X7F,0XFF,0XFC,0X3F,0X0F,0XFE,0X1F,0XFF,0XFF,0XFF,0XFF,0XF8,0X7F,0XFF, +0XFC,0X3F,0XF0,0XE1,0XF8,0X78,0X7F,0X87,0XFF,0XFF,0XFF,0XFF,0X80,0XFE,0X1F,0XFF, +0XFF,0X1F,0X87,0XFF,0XF1,0XFF,0XF8,0X7E,0X1F,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF, +0XE3,0XF8,0XFF,0XFF,0XFC,0XFC,0X3F,0XF8,0X7F,0XFF,0XFC,0X3F,0XF0,0XF1,0XFC,0X78, +0X7F,0XC7,0XFF,0XFF,0XE3,0XF8,0XFF,0XF1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF8, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0X00,0X00,0X00,0X03,0XFF,0XFF, +0XF0,0X7F,0X0F,0XFF,0XF0,0XFC,0X3F,0XFF,0XFC,0X3F,0X0F,0XFE,0X1F,0XFF,0XFF,0XFF, +0XFF,0XFC,0X7F,0XFF,0XFC,0X3F,0XF0,0XE1,0XF8,0X78,0X7F,0X87,0XFF,0XFF,0XFF,0XFF, +0XF0,0X7E,0X1F,0XFF,0XFE,0X1F,0X87,0XFF,0XF1,0XFF,0XF8,0X7E,0X1F,0XFF,0XFF,0XFF, +0XFF,0XFE,0X3F,0XFF,0XE3,0XF8,0XFF,0XFF,0XFC,0XFC,0X3F,0XFE,0X7F,0XFF,0XFC,0X3F, +0XF0,0XF1,0XFC,0X78,0X7F,0XC7,0XFF,0XFF,0XE3,0XF8,0XFF,0XF1,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3E,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XF8,0X3F,0X0F,0XFF,0XF0,0XFC,0X3F,0XFF,0XFC,0X3F,0X0F,0XFE, +0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFC,0X3F,0XF0,0XC3,0XFE,0X39,0XFF,0XE7, +0XFF,0XFF,0XFF,0XFF,0XF8,0X3E,0X1F,0XFF,0XFE,0X1F,0X87,0XFF,0XF1,0XFF,0XF8,0X7E, +0X1F,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XE3,0XF8,0XFF,0XFF,0XF0,0XFC,0X3F,0XFE, +0X3F,0XFF,0XFC,0X3F,0XF8,0XF3,0XFE,0X18,0XFF,0XE1,0XFF,0XFF,0XE3,0XF8,0XFF,0XF1, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X3E,0X00,0X00,0X00,0X03,0XFF,0XFF,0XF8,0X3F,0X0F,0XFF,0XF0,0XFC,0X3F,0XFF, +0XFC,0X3F,0X0F,0XFE,0X1F,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF,0XFC,0X3F,0XF0,0XC3, +0XFE,0X39,0XFF,0XE7,0XFF,0XFF,0XFF,0XFF,0XF8,0X3E,0X1F,0XFF,0XFE,0X1F,0X87,0XFF, +0XF1,0XFF,0XF8,0X7E,0X1F,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF,0XE3,0XF8,0XFF,0XFF, +0XF0,0XFC,0X3F,0XFE,0X3F,0XFF,0XFC,0X3F,0XF8,0XF3,0XFE,0X18,0XFF,0XE1,0XFF,0XFF, +0XE3,0XF8,0XFF,0XF1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X3C,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFC,0X3F,0X0F,0XFF, +0XF0,0XFC,0X3F,0XFF,0XFC,0X3F,0X0F,0XFF,0X0F,0XFF,0XFF,0XFF,0XFF,0XFC,0X3F,0XFF, +0XF8,0X3F,0XF8,0X43,0XFE,0X39,0XFF,0XE3,0XFF,0XFF,0XFF,0XFF,0XFC,0X3E,0X1F,0XFF, +0XFE,0X1F,0X87,0XFF,0XF1,0XFF,0XF8,0X7F,0X0F,0XFF,0XFF,0XFF,0XFF,0XFE,0X3F,0XFF, +0XE3,0XFC,0X3F,0XFF,0XF0,0XFC,0X3F,0XFE,0X3F,0XFF,0XFC,0X3F,0XF8,0X43,0XFE,0X10, +0XFF,0XE1,0XFF,0XFF,0X83,0XF8,0XFF,0XF1,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X38,0X00,0X00,0X00,0X03,0XFF,0XFF, +0XFE,0X3F,0X0F,0XFF,0XF0,0XFC,0X1F,0XFF,0XF8,0X3F,0X0F,0XFF,0X0F,0XFF,0XFE,0X7F, +0XFF,0XFC,0X3F,0XFF,0XF8,0X3F,0XF8,0X07,0XFE,0X01,0XFF,0XE3,0XFF,0XFF,0X87,0XFF, +0XFC,0X3F,0X0F,0XFF,0XFC,0X7F,0X87,0XFF,0XF1,0XFF,0XF8,0X7F,0X0F,0XFF,0XFE,0X7F, +0XFF,0XFE,0X3F,0XFF,0XE3,0XFC,0X3F,0XFF,0XF0,0XFC,0X3F,0XFE,0X0F,0XFF,0XF8,0X3F, +0XFE,0X03,0XFE,0X00,0XFF,0XE1,0XFF,0XFF,0X83,0XF8,0XFF,0XF8,0X7F,0XFF,0XC3,0XFF, +0XFF,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XFE,0X3F,0X0F,0XFF,0XF0,0XFE,0X1F,0XFF,0XF8,0X3F,0X0F,0XFF, +0X07,0XFF,0XF8,0X7F,0XFF,0XFF,0X1F,0XFF,0XF0,0X3F,0XFC,0X07,0XFF,0X03,0XFF,0XF0, +0XFF,0XFF,0X07,0XFF,0XFC,0X3F,0X07,0XFF,0XFC,0X7F,0X87,0XFF,0XF1,0XFF,0XF8,0X7F, +0X07,0XFF,0XFC,0X7F,0XFF,0XFE,0X3F,0XFF,0XE3,0XFC,0X1F,0XFF,0XE0,0XFC,0X3F,0XFF, +0X0F,0XFF,0XF0,0X3F,0XFE,0X07,0XFF,0X03,0XFF,0XF0,0XFF,0XFF,0X03,0XF8,0XFF,0XF8, +0X7F,0XFF,0XC3,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFC,0X3F,0X0F,0XFF,0XF0,0XFF,0X8F,0XFF, +0XC0,0X3F,0X0F,0XFF,0X83,0XFF,0XF0,0XFF,0XFF,0XFF,0X07,0XFF,0XC0,0X3F,0XFC,0X1F, +0XFF,0X03,0XFF,0XF0,0X7F,0XFE,0X07,0XFF,0XFC,0X3F,0XC1,0XFF,0XF0,0XFF,0X87,0XFF, +0XF1,0XFF,0XF8,0X7F,0XC1,0XFF,0XF0,0XFF,0XFF,0XFE,0X3F,0XFF,0XE3,0XFE,0X0F,0XFF, +0XC0,0XFC,0X3F,0XFF,0X87,0XFF,0XE0,0X3F,0XFE,0X07,0XFF,0X03,0XFF,0XF0,0X7F,0XFE, +0X03,0XF8,0XFF,0XFC,0X3F,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFC,0X3F,0X0F,0XFF, +0XF0,0XFF,0X8F,0XFF,0XC0,0X3F,0X0F,0XFF,0X83,0XFF,0XF0,0XFF,0XFF,0XFF,0X07,0XFF, +0XC0,0X3F,0XFC,0X1F,0XFF,0X03,0XFF,0XF0,0X7F,0XFE,0X07,0XFF,0XFC,0X3F,0XC1,0XFF, +0XF0,0XFF,0X87,0XFF,0XF1,0XFF,0XF8,0X7F,0XC1,0XFF,0XF0,0XFF,0XFF,0XFE,0X3F,0XFF, +0XE3,0XFE,0X0F,0XFF,0XC0,0XFC,0X3F,0XFF,0X87,0XFF,0XE0,0X3F,0XFE,0X07,0XFF,0X03, +0XFF,0XF0,0X7F,0XFE,0X03,0XF8,0XFF,0XFC,0X3F,0XFF,0X87,0XFF,0XFF,0XFF,0XFF,0XFF, +0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XE7, +0XF8,0X3F,0X0F,0XFF,0XF0,0XFF,0X81,0XFF,0X80,0X3F,0X0F,0XFF,0XE0,0XFF,0XC0,0XFF, +0XFF,0XFF,0X83,0XFF,0X80,0X3F,0XFF,0X1F,0XFF,0X87,0XFF,0XF8,0X3F,0XF8,0X0F,0XE3, +0XF8,0X3F,0XE0,0XFF,0XC0,0XFF,0X87,0XFF,0XF1,0XFF,0XF8,0X7F,0XE0,0XFF,0XC0,0XFF, +0XFF,0XFE,0X3F,0XFF,0XE3,0XFF,0X07,0XFE,0X00,0XFC,0X3F,0XFF,0X81,0XFF,0X80,0X3F, +0XFF,0X0F,0XFF,0X87,0XFF,0XF8,0X3F,0XFC,0X03,0XF8,0XFF,0XFE,0X0F,0XFC,0X1F,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XE0,0XF0,0X7F,0X0F,0XFF,0XF0,0XFF,0XC0,0X78,0X04,0X3F,0X0F,0XFF, +0XF0,0X3E,0X01,0XFF,0XFF,0XFF,0XC0,0X38,0X04,0X3F,0XFF,0X1F,0XFF,0X87,0XFF,0XFC, +0X03,0XC0,0X3F,0XE0,0X70,0X7F,0XF0,0X3E,0X01,0XFF,0X87,0XFF,0XF1,0XFF,0XF8,0X7F, +0XF0,0X3E,0X01,0XFF,0XFF,0XFE,0X3F,0XFF,0XE3,0XFF,0XC0,0X78,0X1C,0XFC,0X3F,0XFF, +0XC0,0X3C,0X04,0X3F,0XFF,0X0F,0XFF,0X87,0XFF,0XFE,0X03,0XC0,0X63,0XF8,0XFF,0XFE, +0X01,0XE0,0X1F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF0,0X01,0XFF,0X0F,0XFF,0XF0,0XFF,0XF0,0X00, +0X3C,0X3F,0X0F,0XFF,0XF8,0X00,0X0F,0XFF,0XFF,0XFF,0XE0,0X00,0X3C,0X3F,0XFF,0X3F, +0XFF,0XC7,0XFF,0XFF,0X00,0X00,0XFF,0XF0,0X00,0XFF,0XF8,0X00,0X0F,0XFF,0X87,0XFF, +0XF1,0XFF,0XF8,0X7F,0XF8,0X00,0X0F,0XFF,0XFF,0XFE,0X3F,0XFF,0XE3,0XFF,0XE0,0X00, +0X30,0XFC,0X3F,0XFF,0XF8,0X00,0X1C,0X3F,0XFF,0XBF,0XFF,0XEF,0XFF,0XFF,0X80,0X01, +0XE3,0XF8,0XFF,0XFF,0XC0,0X00,0X7F,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XF0,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8,0X03,0XFF,0X0F,0XFF, +0XF1,0XFF,0XFC,0X00,0X7C,0X3F,0X0F,0XFF,0XFF,0X00,0X1F,0XFF,0XFF,0XFF,0XFC,0X00, +0XFC,0X7F,0XFF,0XFF,0XFF,0XC7,0XFF,0XFF,0XC0,0X01,0XFF,0XFC,0X03,0XFF,0XFF,0X00, +0X3F,0XFF,0XC7,0XFF,0XF3,0XFF,0XFC,0X7F,0XFF,0X00,0X1F,0XFF,0XFF,0XFF,0X3F,0XFF, +0XE3,0XFF,0XF8,0X01,0XFC,0XFC,0X3F,0XFF,0XFC,0X00,0X7C,0X3F,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XC0,0X0F,0XE7,0XF9,0XFF,0XFF,0XF0,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XF8, +0X03,0XFF,0X0F,0XFF,0XF1,0XFF,0XFC,0X00,0X7C,0X3F,0X0F,0XFF,0XFF,0X00,0X1F,0XFF, +0XFF,0XFF,0XFC,0X00,0XFC,0X7F,0XFF,0XFF,0XFF,0XC7,0XFF,0XFF,0XC0,0X01,0XFF,0XFC, +0X03,0XFF,0XFF,0X00,0X3F,0XFF,0XC7,0XFF,0XF3,0XFF,0XFC,0X7F,0XFF,0X00,0X1F,0XFF, +0XFF,0XFF,0X3F,0XFF,0XE3,0XFF,0XF8,0X01,0XFC,0XFC,0X3F,0XFF,0XFC,0X00,0X7C,0X3F, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,0X0F,0XE7,0XF9,0XFF,0XFF,0XF0,0X03,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X00, +0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00, +0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,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,0X00,0X00,0X00,0X00, +0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,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,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, +}; diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/ImageData.h b/examples/e-Paper/application_drivers/e-Paper/examples/ImageData.h new file mode 100644 index 000000000..6de766666 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/ImageData.h @@ -0,0 +1,43 @@ +/***************************************************************************** +* | File : ImageData.h +* | Author : Waveshare team +* | Function : 测试图片数据头文件 +* | Info : +* 本文件声明了测试用的预置图片数据数组 +* 图片数据以C数组形式存储在ImageData.c中 +* +* 图片格式说明: +* - 数据为位图格式,每位1像素 +* - 1 = 白色,0 = 黑色 +* - 数据按行存储,高位在左 +* - 数组大小 = 宽度/8 * 高度 +* +* 如何生成图片数据: +* 1. 使用图像处理软件创建黑白图片 +* 2. 使用Waveshare的Image2Lcd工具转换 +* 3. 设置输出格式为C数组 +* 4. 将生成的数组复制到ImageData.c +*---------------- +* | This version: V1.0 +* | Date : 2018-10-23 +******************************************************************************/ + +#ifndef _IMAGEDATA_H_ +#define _IMAGEDATA_H_ + +/*============================================================================ + 图片数据声明 +============================================================================*/ +/** + * @brief 4.26英寸墨水屏测试图片 + * @details 预置的测试图片数据(800x480像素) + * 数据大小:800/8 * 480 = 48000字节 + * 图片内容:Waveshare logo或测试图案 + * + * 使用示例: + * Paint_DrawBitMap(gImage_4in26); + * EPD_4in26_Display(BlackImage); + */ +extern const unsigned char gImage_4in26[]; + +#endif /* _IMAGEDATA_H_ */ diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/epd_clock.c b/examples/e-Paper/application_drivers/e-Paper/examples/epd_clock.c new file mode 100644 index 000000000..3a07c9083 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/epd_clock.c @@ -0,0 +1,546 @@ +/***************************************************************************** + * @file epd_clock.c + * @author Custom + * @brief 电子墨水屏信息栏显示模块(使用统一缓冲区版本) + * @version 1.2 + * @date 2025-12-12 + * + * @details 功能概述: + * 本模块实现了一个电子墨水屏(E-Paper/EPD)信息栏显示系统, + * 并统一管理整个屏幕的刷新,避免多区域刷新冲突。 + * + * 【主要特性】 + * 1. 自动刷新:独立线程每分钟检测时间变化并刷新 + * 2. 光照感应:根据光敏传感器读数显示不同天气图标 + * 3. 统一缓冲区:信息栏和宠物区共用全屏缓冲区 + * 4. 同步刷新:一次刷新整个屏幕,避免区域互相覆盖 + * 5. 时间同步:等待网络时间同步后才显示正确时间 + * + *****************************************************************************/ + +#include "epd_clock.h" /* 本模块头文件 */ +#include "epd_display.h" /* 统一显示管理 */ +#include "epd_pet.h" /* 宠物模块(用于绘制)*/ +#include "epd_mutex.h" /* 墨水屏互斥锁 */ +#include "EPD_4in26.h" /* 4.26寸墨水屏驱动 */ +#include "GUI_Paint.h" /* 图形绘制库 */ +#include "tal_thread.h" /* TuyaOS 线程API */ +#include "tal_system.h" /* TuyaOS 系统API(延时等)*/ +#include "tal_time_service.h" /* TuyaOS 时间服务API */ +#include "tal_log.h" /* TuyaOS 日志打印API */ +#include "light_sensor.h" /* 光敏传感器驱动 */ +#include "soil_moisture.h" /* 土壤湿度传感器驱动 */ +#include /* 标准输入输出(snprintf)*/ +#include /* 标准库(malloc/free)*/ +#include /* 字符串处理(memset)*/ + +/*============================================================================ + 私有宏定义 +============================================================================*/ + +/** + * @brief 判断时间是否已同步的年份阈值 + */ +#define TIME_SYNC_YEAR_THRESHOLD 2024 + +/*============================================================================ + 私有变量定义 +============================================================================*/ + +static THREAD_HANDLE sg_clock_thread = NULL; +static BOOL_T sg_clock_running = FALSE; +static BOOL_T sg_clock_stop_flag = FALSE; +static BOOL_T sg_epd_initialized = FALSE; +static INT_T sg_last_display_min = -1; +static BOOL_T sg_time_synced = FALSE; + +/*============================================================================ + 私有函数声明 +============================================================================*/ + +static VOID_T _clock_thread_func(PVOID_T args); +static VOID_T _draw_info_bar(POSIX_TM_S *tm); +static VOID_T _draw_waiting_sync(VOID_T); +static VOID_T _refresh_all(POSIX_TM_S *tm); +static BOOL_T _is_time_synced(POSIX_TM_S *tm); + +/*============================================================================ + 公共函数实现 +============================================================================*/ + +/** + * @brief 启动信息栏显示 + */ +OPERATE_RET epd_clock_start(VOID_T) +{ + OPERATE_RET ret = OPRT_OK; + + if (sg_clock_running) { + TAL_PR_WARN("EPD info bar is already running"); + return OPRT_OK; + } + + TAL_PR_NOTICE("=== Starting EPD Info Bar (Unified Buffer) ==="); + + /* 步骤1: 初始化统一显示管理器 */ + TAL_PR_NOTICE("Step 1: Initializing display manager..."); + ret = epd_display_init(); + if (ret != OPRT_OK) { + TAL_PR_ERR("Display manager init failed, ret=%d", ret); + return ret; + } + + /* 步骤2: 初始化底层硬件 */ + TAL_PR_NOTICE("Step 2: DEV_Module_Init..."); + if (DEV_Module_Init() != 0) { + TAL_PR_ERR("DEV_Module_Init failed"); + return OPRT_COM_ERROR; + } + TAL_PR_NOTICE("Hardware init OK"); + + /* 步骤3: 初始化墨水屏(快速模式) */ + TAL_PR_NOTICE("Step 3: EPD_4in26_Init_Fast..."); + EPD_4in26_Init_Fast(); + TAL_PR_NOTICE("EPD init OK (fast mode)"); + + /* 步骤4: 清屏 */ + TAL_PR_NOTICE("Step 4: EPD_4in26_Clear..."); + EPD_4in26_Clear(); + TAL_PR_NOTICE("Clear OK"); + + /* 步骤5: 启动光敏传感器 */ + TAL_PR_NOTICE("Step 5: Starting light sensor..."); + ret = light_sensor_start_periodic(1000, NULL); + if (ret != OPRT_OK) { + TAL_PR_WARN("Light sensor start failed, ret=%d", ret); + } else { + TAL_PR_NOTICE("Light sensor started OK"); + } + tal_system_sleep(100); + + /* 步骤6: 显示初始内容 */ + TAL_PR_NOTICE("Step 6: Showing initial display..."); + POSIX_TM_S tm; + memset(&tm, 0, sizeof(tm)); + tal_time_get_local_time_custom(0, &tm); + + sg_time_synced = _is_time_synced(&tm); + sg_last_display_min = tm.tm_min; + + /* 绘制并刷新(包括信息栏和宠物) */ + _refresh_all(&tm); + TAL_PR_NOTICE("Initial display OK (time_synced=%d)", sg_time_synced); + + sg_clock_running = TRUE; + sg_epd_initialized = TRUE; + + /* 步骤7: 创建刷新线程 */ + TAL_PR_NOTICE("Step 7: Creating refresh thread..."); + sg_clock_stop_flag = FALSE; + + THREAD_CFG_T thread_cfg = { + .stackDepth = 4096, + .priority = THREAD_PRIO_3, + .thrdname = "epd_refresh" + }; + + ret = tal_thread_create_and_start( + &sg_clock_thread, NULL, NULL, + _clock_thread_func, NULL, &thread_cfg + ); + + if (ret != OPRT_OK) { + TAL_PR_WARN("Thread create failed, ret=%d", ret); + } else { + TAL_PR_NOTICE("Refresh thread started"); + } + + TAL_PR_NOTICE("=== EPD Info Bar Ready ==="); + return OPRT_OK; +} + +/** + * @brief 停止信息栏显示 + */ +OPERATE_RET epd_clock_stop(VOID_T) +{ + if (!sg_clock_running) { + return OPRT_OK; + } + + sg_clock_stop_flag = TRUE; + + UINT32_T timeout = 0; + while (sg_clock_running && timeout < 100) { + tal_system_sleep(100); + timeout++; + } + + if (sg_clock_thread != NULL) { + tal_thread_delete(sg_clock_thread); + sg_clock_thread = NULL; + } + + light_sensor_stop_periodic(); + + if (sg_epd_initialized) { + EPD_4in26_Sleep(); + DEV_Module_Exit(); + sg_epd_initialized = FALSE; + } + + epd_display_deinit(); + + sg_clock_running = FALSE; + TAL_PR_NOTICE("EPD info bar stopped"); + return OPRT_OK; +} + +/** + * @brief 检查是否运行中 + */ +BOOL_T epd_clock_is_running(VOID_T) +{ + return sg_clock_running; +} + +/** + * @brief 立即刷新显示 + */ +OPERATE_RET epd_clock_refresh_now(VOID_T) +{ + if (!sg_clock_running) { + return OPRT_COM_ERROR; + } + + POSIX_TM_S tm; + memset(&tm, 0, sizeof(tm)); + tal_time_get_local_time_custom(0, &tm); + + _refresh_all(&tm); + + return OPRT_OK; +} + +/*============================================================================ + 私有函数实现 +============================================================================*/ + +/** + * @brief 检查时间是否已同步 + */ +static BOOL_T _is_time_synced(POSIX_TM_S *tm) +{ + if (tm == NULL) { + return FALSE; + } + return ((tm->tm_year + 1900) >= TIME_SYNC_YEAR_THRESHOLD); +} + +/** + * @brief 绘制"等待时间同步"界面到全屏缓冲区的信息栏区域 + */ +static VOID_T _draw_waiting_sync(VOID_T) +{ + /* 选择全屏画布 */ + epd_display_select_canvas(); + + /* 清空信息栏区域 */ + Paint_ClearWindows(EPD_INFO_X, EPD_INFO_Y, + EPD_INFO_X + EPD_INFO_WIDTH, + EPD_INFO_Y + EPD_INFO_HEIGHT, WHITE); + + /* 绘制边框 */ + Paint_DrawRectangle(EPD_INFO_X + 2, EPD_INFO_Y + 2, + EPD_INFO_X + EPD_INFO_WIDTH - 3, EPD_INFO_Y + EPD_INFO_HEIGHT - 3, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawRectangle(EPD_INFO_X + 5, EPD_INFO_Y + 5, + EPD_INFO_X + EPD_INFO_WIDTH - 6, EPD_INFO_Y + EPD_INFO_HEIGHT - 6, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + + /* 时钟图标 */ + UINT16_T icon_x = EPD_INFO_X + 60; + UINT16_T icon_y = EPD_INFO_Y + 60; + Paint_DrawCircle(icon_x, icon_y, 30, BLACK, DOT_PIXEL_2X2, DRAW_FILL_EMPTY); + Paint_DrawCircle(icon_x, icon_y, 3, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawLine(icon_x, icon_y, icon_x, icon_y - 20, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x, icon_y, icon_x + 15, icon_y, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + + /* 分隔线 */ + Paint_DrawLine(EPD_INFO_X + 120, EPD_INFO_Y + 15, + EPD_INFO_X + 120, EPD_INFO_Y + EPD_INFO_HEIGHT - 15, + BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + + /* 文字 */ + Paint_DrawString_EN(EPD_INFO_X + 140, EPD_INFO_Y + 25, + "Waiting for time sync...", &Font24, WHITE, BLACK); + Paint_DrawString_EN(EPD_INFO_X + 140, EPD_INFO_Y + 65, + "Please ensure network connection", &Font20, WHITE, BLACK); + + TAL_PR_NOTICE("Display: Waiting for time sync..."); +} + +/** + * @brief 绘制信息栏到全屏缓冲区 + */ +static VOID_T _draw_info_bar(POSIX_TM_S *tm) +{ + CHAR_T time_str[64]; + CHAR_T light_str[64]; + + if (tm == NULL) { + return; + } + + /* 选择全屏画布 */ + epd_display_select_canvas(); + + /* 清空信息栏区域 */ + Paint_ClearWindows(EPD_INFO_X, EPD_INFO_Y, + EPD_INFO_X + EPD_INFO_WIDTH, + EPD_INFO_Y + EPD_INFO_HEIGHT, WHITE); + + /* 星期名称 */ + static const CHAR_T *weekday_names[] = { + "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" + }; + + /* 格式化时间 */ + snprintf(time_str, sizeof(time_str), + "%04d-%02d-%02d %s %02d:%02d", + tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, + weekday_names[tm->tm_wday], tm->tm_hour, tm->tm_min); + + /* 获取光照 */ + UINT8_T light_percent = light_sensor_get_light_percent(); + + /* 生成进度条 */ + CHAR_T progress_bar[13]; + INT_T filled = light_percent / 10; + if (filled > 10) filled = 10; + progress_bar[0] = '['; + for (INT_T i = 0; i < 10; i++) { + progress_bar[1 + i] = (i < filled) ? '#' : '-'; + } + progress_bar[11] = ']'; + progress_bar[12] = '\0'; + + /* 光照状态 */ + if (light_percent >= 71) { + snprintf(light_str, sizeof(light_str), "%s %d%% SUNNY", progress_bar, light_percent); + } else if (light_percent >= 40) { + snprintf(light_str, sizeof(light_str), "%s %d%% CLOUDY", progress_bar, light_percent); + } else { + snprintf(light_str, sizeof(light_str), "%s %d%% DARK", progress_bar, light_percent); + } + + TAL_PR_NOTICE("Display: %s | Light:%d%% | Soil:%d%%", time_str, light_percent, soil_moisture_get_percent()); + + /* 绘制边框 */ + Paint_DrawRectangle(EPD_INFO_X + 2, EPD_INFO_Y + 2, + EPD_INFO_X + EPD_INFO_WIDTH - 3, EPD_INFO_Y + EPD_INFO_HEIGHT - 3, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawRectangle(EPD_INFO_X + 5, EPD_INFO_Y + 5, + EPD_INFO_X + EPD_INFO_WIDTH - 6, EPD_INFO_Y + EPD_INFO_HEIGHT - 6, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + + /* 天气图标 */ + UINT16_T icon_x = EPD_INFO_X + 45; + UINT16_T icon_y = EPD_INFO_Y + 60; + + if (light_percent >= 71) { + /* 太阳 */ + Paint_DrawCircle(icon_x, icon_y, 15, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawLine(icon_x, icon_y - 25, icon_x, icon_y - 35, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x, icon_y + 25, icon_x, icon_y + 35, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x - 25, icon_y, icon_x - 35, icon_y, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x + 25, icon_y, icon_x + 35, icon_y, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x - 18, icon_y - 18, icon_x - 25, icon_y - 25, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x + 18, icon_y - 18, icon_x + 25, icon_y - 25, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x - 18, icon_y + 18, icon_x - 25, icon_y + 25, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x + 18, icon_y + 18, icon_x + 25, icon_y + 25, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + } else if (light_percent >= 40) { + /* 多云 */ + Paint_DrawCircle(icon_x - 15, icon_y + 5, 18, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x + 5, icon_y + 8, 15, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x + 20, icon_y + 5, 12, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x - 5, icon_y - 5, 14, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x + 10, icon_y - 3, 12, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x - 12, icon_y + 8, 12, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x + 5, icon_y + 10, 10, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x - 3, icon_y, 10, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x - 25, icon_y - 20, 10, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawLine(icon_x - 25, icon_y - 35, icon_x - 25, icon_y - 40, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x - 40, icon_y - 20, icon_x - 45, icon_y - 20, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(icon_x - 35, icon_y - 30, icon_x - 40, icon_y - 35, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + } else { + /* 月亮 */ + Paint_DrawCircle(icon_x, icon_y, 20, BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawCircle(icon_x + 12, icon_y - 5, 18, WHITE, DOT_PIXEL_1X1, DRAW_FILL_FULL); + Paint_DrawPoint(icon_x - 25, icon_y - 25, BLACK, DOT_PIXEL_3X3, DOT_STYLE_DFT); + Paint_DrawPoint(icon_x + 30, icon_y - 20, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); + Paint_DrawPoint(icon_x - 20, icon_y + 20, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); + Paint_DrawPoint(icon_x + 25, icon_y + 15, BLACK, DOT_PIXEL_2X2, DOT_STYLE_DFT); + } + + /* 分隔线 */ + Paint_DrawLine(EPD_INFO_X + 90, EPD_INFO_Y + 15, + EPD_INFO_X + 90, EPD_INFO_Y + EPD_INFO_HEIGHT - 15, + BLACK, DOT_PIXEL_1X1, LINE_STYLE_DOTTED); + + /* 时间日期 */ + Paint_DrawString_EN(EPD_INFO_X + 100, EPD_INFO_Y + 25, time_str, &Font24, WHITE, BLACK); + + /* 光照状态 */ + Paint_DrawString_EN(EPD_INFO_X + 100, EPD_INFO_Y + 55, light_str, &Font16, WHITE, BLACK); + + /* 获取土壤湿度 */ + UINT8_T soil_percent = soil_moisture_get_percent(); + CHAR_T soil_str[48]; + + /* 生成土壤湿度进度条 */ + CHAR_T soil_bar[13]; + INT_T soil_filled = soil_percent / 10; + if (soil_filled > 10) soil_filled = 10; + soil_bar[0] = '['; + for (INT_T i = 0; i < 10; i++) { + soil_bar[1 + i] = (i < soil_filled) ? '#' : '-'; + } + soil_bar[11] = ']'; + soil_bar[12] = '\0'; + + /* 土壤湿度状态 */ + if (soil_percent >= 70) { + snprintf(soil_str, sizeof(soil_str), "Soil:%s %d%% WET", soil_bar, soil_percent); + } else if (soil_percent >= 30) { + snprintf(soil_str, sizeof(soil_str), "Soil:%s %d%% OK", soil_bar, soil_percent); + } else { + snprintf(soil_str, sizeof(soil_str), "Soil:%s %d%% DRY!", soil_bar, soil_percent); + } + + /* 土壤湿度显示 */ + Paint_DrawString_EN(EPD_INFO_X + 100, EPD_INFO_Y + 80, soil_str, &Font16, WHITE, BLACK); + + /* 励志短语 */ + static const CHAR_T *phrases[] = { + "Have a nice day!", "Keep smiling!", "Stay positive!", "You are awesome!", + "Enjoy today!", "Be happy!", "Good vibes only!", "Make it count!" + }; + static const CHAR_T *happy_faces[] = {"^_^", "^o^", ":D", "=)"}; + static const CHAR_T *neutral_faces[] = {"-_-", "._.", ":|", "=|"}; + static const CHAR_T *sad_faces[] = {"T_T", ";_;", ":(", "='("}; + + INT_T phrase_idx = tm->tm_min % 8; + INT_T face_idx = tm->tm_min % 4; + + Paint_DrawString_EN(EPD_INFO_X + 500, EPD_INFO_Y + 25, phrases[phrase_idx], &Font20, WHITE, BLACK); + + const CHAR_T *face; + if (light_percent >= 71) { + face = happy_faces[face_idx]; + } else if (light_percent >= 40) { + face = neutral_faces[face_idx]; + } else { + face = sad_faces[face_idx]; + } + Paint_DrawString_EN(EPD_INFO_X + 560, EPD_INFO_Y + 70, face, &Font24, WHITE, BLACK); + + /* 角落装饰 */ + Paint_DrawLine(EPD_INFO_X + EPD_INFO_WIDTH - 30, EPD_INFO_Y + 10, + EPD_INFO_X + EPD_INFO_WIDTH - 10, EPD_INFO_Y + 10, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(EPD_INFO_X + EPD_INFO_WIDTH - 10, EPD_INFO_Y + 10, + EPD_INFO_X + EPD_INFO_WIDTH - 10, EPD_INFO_Y + 30, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(EPD_INFO_X + EPD_INFO_WIDTH - 30, EPD_INFO_Y + EPD_INFO_HEIGHT - 10, + EPD_INFO_X + EPD_INFO_WIDTH - 10, EPD_INFO_Y + EPD_INFO_HEIGHT - 10, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); + Paint_DrawLine(EPD_INFO_X + EPD_INFO_WIDTH - 10, EPD_INFO_Y + EPD_INFO_HEIGHT - 30, + EPD_INFO_X + EPD_INFO_WIDTH - 10, EPD_INFO_Y + EPD_INFO_HEIGHT - 10, BLACK, DOT_PIXEL_2X2, LINE_STYLE_SOLID); +} + +/** + * @brief 刷新整个屏幕(信息栏 + 宠物) + */ +static VOID_T _refresh_all(POSIX_TM_S *tm) +{ + UBYTE *buffer = epd_display_get_buffer(); + if (buffer == NULL) { + return; + } + + /* 1. 绘制信息栏 */ + if (!_is_time_synced(tm)) { + _draw_waiting_sync(); + } else { + sg_time_synced = TRUE; + _draw_info_bar(tm); + } + + /* 2. 绘制宠物(如果宠物模块运行中) */ + if (epd_pet_is_running()) { + epd_pet_draw_to_buffer(); + } + + /* 3. 刷新到墨水屏 */ + epd_display_refresh(); +} + +/** + * @brief 刷新线程 + */ +static VOID_T _clock_thread_func(PVOID_T args) +{ + (VOID_T)args; + + TAL_PR_NOTICE("EPD refresh thread started"); + + POSIX_TM_S tm; + UINT32_T loop_count = 0; + + while (!sg_clock_stop_flag) { + tal_system_sleep(1000); + loop_count++; + + memset(&tm, 0, sizeof(tm)); + OPERATE_RET ret = tal_time_get_local_time_custom(0, &tm); + if (ret != OPRT_OK) { + TAL_PR_WARN("Failed to get time, ret=%d", ret); + continue; + } + + /* 每10秒打印一次状态 */ + if (loop_count % 10 == 0) { + TAL_PR_DEBUG("EPD thread alive: %04d-%02d-%02d %02d:%02d:%02d, synced=%d, last_min=%d", + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, + tm.tm_hour, tm.tm_min, tm.tm_sec, + sg_time_synced, sg_last_display_min); + } + + /* 检查时间同步状态变化 */ + BOOL_T now_synced = _is_time_synced(&tm); + if (!sg_time_synced && now_synced) { + TAL_PR_NOTICE("Time synced! Year=%d, Refreshing...", tm.tm_year + 1900); + sg_time_synced = TRUE; + sg_last_display_min = tm.tm_min; + _refresh_all(&tm); + continue; + } + + /* 检查分钟变化 */ + if (tm.tm_min != sg_last_display_min) { + TAL_PR_NOTICE("Time changed: min %02d -> %02d, refreshing...", + sg_last_display_min, tm.tm_min); + sg_last_display_min = tm.tm_min; + _refresh_all(&tm); + } + + /* 检查是否有脏区域需要刷新(如宠物状态变化) */ + if (epd_display_is_dirty()) { + TAL_PR_NOTICE("Dirty flag set, refreshing..."); + memset(&tm, 0, sizeof(tm)); + tal_time_get_local_time_custom(0, &tm); + _refresh_all(&tm); + } + } + + TAL_PR_NOTICE("EPD refresh thread exiting"); + sg_clock_running = FALSE; +} diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/epd_clock.h b/examples/e-Paper/application_drivers/e-Paper/examples/epd_clock.h new file mode 100644 index 000000000..2ce76be0f --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/epd_clock.h @@ -0,0 +1,75 @@ +/***************************************************************************** +* | File : epd_clock.h +* | Author : Custom +* | Function : 电子墨水屏时钟显示模块(使用统一缓冲区版本) +* | Info : +* 负责整个墨水屏的刷新管理: +* - 初始化墨水屏和全屏缓冲区 +* - 管理信息栏区域的绘制 +* - 统一刷新信息栏和宠物区域 +* - 避免多区域刷新冲突 +*---------------- +* | This version: V1.1 +* | Date : 2024-12-11 +******************************************************************************/ +#ifndef __EPD_CLOCK_H__ +#define __EPD_CLOCK_H__ + +#include "tuya_cloud_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================================================================ + 配置参数(使用epd_display.h的定义) +============================================================================*/ +/* 信息栏区域定义 - 与 epd_display.h 保持一致 */ +/* 视觉上方,Y=0~120 */ +#define EPD_CLOCK_X 0 +#define EPD_CLOCK_Y 0 /* 信息栏顶边 */ +#define EPD_CLOCK_WIDTH 800 +#define EPD_CLOCK_HEIGHT 120 + +/** + * @brief 刷新间隔配置(秒) + */ +#define EPD_CLOCK_REFRESH_SECONDS 60 + +/*============================================================================ + 函数声明 +============================================================================*/ + +/** + * @brief 启动信息栏显示线程 + * @details 初始化墨水屏、全屏缓冲区,创建刷新线程 + * 同时负责刷新信息栏和宠物区域 + * @return OPRT_OK 成功,其他值 失败 + */ +OPERATE_RET epd_clock_start(VOID_T); + +/** + * @brief 停止信息栏显示线程 + * @details 停止并销毁线程,释放资源 + * @return OPRT_OK 成功,其他值 失败 + */ +OPERATE_RET epd_clock_stop(VOID_T); + +/** + * @brief 检查时钟是否在运行 + * @return TRUE 正在运行,FALSE 已停止 + */ +BOOL_T epd_clock_is_running(VOID_T); + +/** + * @brief 立即刷新显示(无需等待下一分钟) + * @details 强制立即刷新整个屏幕 + * @return OPRT_OK 成功,其他值 失败 + */ +OPERATE_RET epd_clock_refresh_now(VOID_T); + +#ifdef __cplusplus +} +#endif + +#endif /* __EPD_CLOCK_H__ */ diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/epd_display.c b/examples/e-Paper/application_drivers/e-Paper/examples/epd_display.c new file mode 100644 index 000000000..77a49f922 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/epd_display.c @@ -0,0 +1,200 @@ +/***************************************************************************** + * @file epd_display.c + * @author Custom + * @brief 墨水屏统一显示管理模块实现 + * @version 1.0 + * @date 2025-01-01 + * + *****************************************************************************/ + +#include "epd_display.h" +#include "epd_mutex.h" +#include "tal_log.h" +#include +#include + +/*============================================================================ + 私有变量 +============================================================================*/ +static UBYTE *sg_screen_buffer = NULL; /**< 全屏缓冲区 */ +static BOOL_T sg_initialized = FALSE; /**< 初始化标志 */ +static BOOL_T sg_dirty = FALSE; /**< 脏区域标志 */ + +/*============================================================================ + 公共函数实现 +============================================================================*/ + +/** + * @brief 初始化显示管理器 + */ +OPERATE_RET epd_display_init(VOID_T) +{ + if (sg_initialized) { + return OPRT_OK; + } + + TAL_PR_NOTICE("[EPD_DISPLAY] Initializing..."); + + /* 初始化互斥锁 */ + epd_mutex_init(); + + /* 分配全屏缓冲区 */ + /* 800 x 480 / 8 = 48000 字节 */ + UINT32_T buf_size = (EPD_SCREEN_WIDTH * EPD_SCREEN_HEIGHT) / 8; + sg_screen_buffer = (UBYTE *)malloc(buf_size); + if (sg_screen_buffer == NULL) { + TAL_PR_ERR("[EPD_DISPLAY] malloc failed! size=%d", buf_size); + return OPRT_MALLOC_FAILED; + } + + /* 初始化为白色 */ + memset(sg_screen_buffer, 0xFF, buf_size); + + sg_initialized = TRUE; + sg_dirty = FALSE; + + TAL_PR_NOTICE("[EPD_DISPLAY] Initialized, buffer=%d bytes", buf_size); + return OPRT_OK; +} + +/** + * @brief 释放显示管理器资源 + */ +OPERATE_RET epd_display_deinit(VOID_T) +{ + if (!sg_initialized) { + return OPRT_OK; + } + + if (sg_screen_buffer != NULL) { + free(sg_screen_buffer); + sg_screen_buffer = NULL; + } + + sg_initialized = FALSE; + TAL_PR_NOTICE("[EPD_DISPLAY] Deinitialized"); + return OPRT_OK; +} + +/** + * @brief 获取全屏缓冲区指针 + */ +UBYTE* epd_display_get_buffer(VOID_T) +{ + return sg_screen_buffer; +} + +/** + * @brief 选择全屏画布用于绘图 + */ +VOID_T epd_display_select_canvas(VOID_T) +{ + if (sg_screen_buffer == NULL) { + return; + } + + Paint_NewImage(sg_screen_buffer, EPD_SCREEN_WIDTH, EPD_SCREEN_HEIGHT, ROTATE_0, WHITE); + Paint_SelectImage(sg_screen_buffer); +} + +/** + * @brief 清空整个画布 + */ +VOID_T epd_display_clear(VOID_T) +{ + if (sg_screen_buffer == NULL) { + return; + } + + UINT32_T buf_size = (EPD_SCREEN_WIDTH * EPD_SCREEN_HEIGHT) / 8; + memset(sg_screen_buffer, 0xFF, buf_size); + sg_dirty = TRUE; +} + +/** + * @brief 清空信息栏区域 + */ +VOID_T epd_display_clear_info(VOID_T) +{ + if (sg_screen_buffer == NULL) { + return; + } + + epd_display_select_canvas(); + + /* 填充信息栏区域为白色 */ + Paint_ClearWindows(EPD_INFO_X, EPD_INFO_Y, + EPD_INFO_X + EPD_INFO_WIDTH, + EPD_INFO_Y + EPD_INFO_HEIGHT, WHITE); + sg_dirty = TRUE; +} + +/** + * @brief 清空宠物区域 + */ +VOID_T epd_display_clear_pet(VOID_T) +{ + if (sg_screen_buffer == NULL) { + return; + } + + epd_display_select_canvas(); + + /* 填充宠物区域为白色 */ + Paint_ClearWindows(EPD_PET_AREA_X, EPD_PET_AREA_Y, + EPD_PET_AREA_X + EPD_PET_AREA_WIDTH, + EPD_PET_AREA_Y + EPD_PET_AREA_HEIGHT, WHITE); + sg_dirty = TRUE; +} + +/** + * @brief 刷新整个屏幕到墨水屏 + */ +VOID_T epd_display_refresh(VOID_T) +{ + if (sg_screen_buffer == NULL) { + return; + } + + TAL_PR_NOTICE("[EPD_DISPLAY] Refreshing screen..."); + + /* 获取互斥锁 */ + epd_mutex_lock(); + + /* 使用快速刷新模式(约1.5秒,而不是标准的4秒) */ + EPD_4in26_Display_Fast(sg_screen_buffer); + + /* 释放互斥锁 */ + epd_mutex_unlock(); + + sg_dirty = FALSE; + + TAL_PR_NOTICE("[EPD_DISPLAY] Refresh done"); +} + +/** + * @brief 标记需要刷新 + */ +VOID_T epd_display_mark_dirty(VOID_T) +{ + sg_dirty = TRUE; +} + +/** + * @brief 检查是否需要刷新 + */ +BOOL_T epd_display_is_dirty(VOID_T) +{ + return sg_dirty; +} + +/** + * @brief 如果有脏区域则刷新 + */ +VOID_T epd_display_flush_if_dirty(VOID_T) +{ + if (sg_dirty) { + epd_display_refresh(); + } +} + diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/epd_display.h b/examples/e-Paper/application_drivers/e-Paper/examples/epd_display.h new file mode 100644 index 000000000..51dcf3a0c --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/epd_display.h @@ -0,0 +1,123 @@ +/***************************************************************************** + * @file epd_display.h + * @author Custom + * @brief 墨水屏统一显示管理模块 + * @version 1.0 + * @date 2025-01-01 + * + * @details 解决多区域刷新互相覆盖的问题 + * - 管理一个全屏缓冲区 + * - 各模块绘制到全屏缓冲区的不同区域 + * - 统一刷新,避免区域互相覆盖 + * + *****************************************************************************/ +#ifndef __EPD_DISPLAY_H__ +#define __EPD_DISPLAY_H__ + +#include "tuya_cloud_types.h" +#include "EPD_4in26.h" +#include "GUI_Paint.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================================================================ + 显示区域定义 +============================================================================*/ +/** + * @brief 屏幕总尺寸 + */ +#define EPD_SCREEN_WIDTH 800 +#define EPD_SCREEN_HEIGHT 480 + +/** + * @brief 信息栏区域(视觉上方) + * 信息栏在 Y=0~120 + */ +#define EPD_INFO_X 0 +#define EPD_INFO_Y 0 /* 信息栏顶边Y=0,范围0~120 */ +#define EPD_INFO_WIDTH 800 +#define EPD_INFO_HEIGHT 120 + +/** + * @brief 宠物区域(视觉下方) + * 宠物在 Y=140~480 + */ +#define EPD_PET_AREA_X 0 +#define EPD_PET_AREA_Y 140 /* 宠物区域 140~480,留20像素间距 */ +#define EPD_PET_AREA_WIDTH 800 +#define EPD_PET_AREA_HEIGHT 340 + +/*============================================================================ + 函数声明 +============================================================================*/ + +/** + * @brief 初始化显示管理器 + * @return OPRT_OK: 成功 + */ +OPERATE_RET epd_display_init(VOID_T); + +/** + * @brief 释放显示管理器资源 + * @return OPRT_OK: 成功 + */ +OPERATE_RET epd_display_deinit(VOID_T); + +/** + * @brief 获取全屏缓冲区指针 + * @return 缓冲区指针,NULL表示未初始化 + */ +UBYTE* epd_display_get_buffer(VOID_T); + +/** + * @brief 获取画布(Paint对象),用于绘图 + * @note 调用此函数后,画布已选中全屏缓冲区 + */ +VOID_T epd_display_select_canvas(VOID_T); + +/** + * @brief 清空整个画布(填充白色) + */ +VOID_T epd_display_clear(VOID_T); + +/** + * @brief 清空信息栏区域 + */ +VOID_T epd_display_clear_info(VOID_T); + +/** + * @brief 清空宠物区域 + */ +VOID_T epd_display_clear_pet(VOID_T); + +/** + * @brief 刷新整个屏幕到墨水屏 + * @note 将全屏缓冲区内容发送到墨水屏并刷新 + */ +VOID_T epd_display_refresh(VOID_T); + +/** + * @brief 标记需要刷新 + * @note 用于延迟刷新,多个区域更新后再统一刷新 + */ +VOID_T epd_display_mark_dirty(VOID_T); + +/** + * @brief 检查是否需要刷新 + * @return TRUE: 需要刷新 + */ +BOOL_T epd_display_is_dirty(VOID_T); + +/** + * @brief 如果有脏区域则刷新 + */ +VOID_T epd_display_flush_if_dirty(VOID_T); + +#ifdef __cplusplus +} +#endif + +#endif /* __EPD_DISPLAY_H__ */ + diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/epd_mutex.c b/examples/e-Paper/application_drivers/e-Paper/examples/epd_mutex.c new file mode 100644 index 000000000..b6b2ab99e --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/epd_mutex.c @@ -0,0 +1,90 @@ +/***************************************************************************** + * @file epd_mutex.c + * @author Custom + * @brief 墨水屏访问互斥锁模块实现 + * @version 1.0 + * @date 2025-01-01 + * + *****************************************************************************/ + +#include "epd_mutex.h" +#include "tal_mutex.h" +#include "tal_log.h" + +/*============================================================================ + 私有变量 +============================================================================*/ +static MUTEX_HANDLE sg_epd_mutex = NULL; +static BOOL_T sg_mutex_initialized = FALSE; + +/*============================================================================ + 公共函数实现 +============================================================================*/ + +/** + * @brief 初始化EPD互斥锁 + */ +OPERATE_RET epd_mutex_init(VOID_T) +{ + if (sg_mutex_initialized) { + return OPRT_OK; + } + + OPERATE_RET ret = tal_mutex_create_init(&sg_epd_mutex); + if (ret != OPRT_OK) { + TAL_PR_ERR("EPD mutex create failed, ret=%d", ret); + return ret; + } + + sg_mutex_initialized = TRUE; + TAL_PR_NOTICE("EPD mutex initialized"); + return OPRT_OK; +} + +/** + * @brief 获取EPD互斥锁 + */ +OPERATE_RET epd_mutex_lock(VOID_T) +{ + if (!sg_mutex_initialized || sg_epd_mutex == NULL) { + /* 未初始化时自动初始化 */ + OPERATE_RET ret = epd_mutex_init(); + if (ret != OPRT_OK) { + return ret; + } + } + + return tal_mutex_lock(sg_epd_mutex); +} + +/** + * @brief 释放EPD互斥锁 + */ +OPERATE_RET epd_mutex_unlock(VOID_T) +{ + if (!sg_mutex_initialized || sg_epd_mutex == NULL) { + return OPRT_COM_ERROR; + } + + return tal_mutex_unlock(sg_epd_mutex); +} + +/** + * @brief 销毁EPD互斥锁 + */ +OPERATE_RET epd_mutex_deinit(VOID_T) +{ + if (!sg_mutex_initialized) { + return OPRT_OK; + } + + if (sg_epd_mutex != NULL) { + tal_mutex_release(sg_epd_mutex); + sg_epd_mutex = NULL; + } + + sg_mutex_initialized = FALSE; + TAL_PR_NOTICE("EPD mutex destroyed"); + return OPRT_OK; +} + diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/epd_mutex.h b/examples/e-Paper/application_drivers/e-Paper/examples/epd_mutex.h new file mode 100644 index 000000000..a4232fe62 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/epd_mutex.h @@ -0,0 +1,51 @@ +/***************************************************************************** + * @file epd_mutex.h + * @author Custom + * @brief 墨水屏访问互斥锁模块 + * @version 1.0 + * @date 2025-01-01 + * + * @details 解决多线程同时操作墨水屏导致显示冲突的问题 + * - epd_clock 和 epd_pet 线程需要共享这个互斥锁 + * - 所有墨水屏刷新操作必须先获取锁 + * + *****************************************************************************/ +#ifndef __EPD_MUTEX_H__ +#define __EPD_MUTEX_H__ + +#include "tuya_cloud_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief 初始化EPD互斥锁 + * @return OPRT_OK: 成功 + */ +OPERATE_RET epd_mutex_init(VOID_T); + +/** + * @brief 获取EPD互斥锁(阻塞等待) + * @return OPRT_OK: 成功获取 + */ +OPERATE_RET epd_mutex_lock(VOID_T); + +/** + * @brief 释放EPD互斥锁 + * @return OPRT_OK: 成功释放 + */ +OPERATE_RET epd_mutex_unlock(VOID_T); + +/** + * @brief 销毁EPD互斥锁 + * @return OPRT_OK: 成功 + */ +OPERATE_RET epd_mutex_deinit(VOID_T); + +#ifdef __cplusplus +} +#endif + +#endif /* __EPD_MUTEX_H__ */ + diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/epd_pet.c b/examples/e-Paper/application_drivers/e-Paper/examples/epd_pet.c new file mode 100644 index 000000000..5902daf17 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/epd_pet.c @@ -0,0 +1,818 @@ +/***************************************************************************** + * @file epd_pet.c + * @author Custom + * @brief 电子墨水屏虚拟宠物模块实现(使用统一缓冲区版本) + * @version 1.1 + * @date 2025-01-01 + * + * @details 实现虚拟电子宠物的完整功能: + * - 状态管理(饥饿/心情/精力) + * - 绘制到全屏缓冲区(由epd_clock统一刷新) + * - App远程喂食(DP点) + * - 语音喂食(关键词检测) + * - 数据持久化(Flash存储) + * + *****************************************************************************/ + +#include "epd_pet.h" +#include "epd_display.h" /* 统一显示管理 */ +#include "EPD_4in26.h" +#include "GUI_Paint.h" +#include "tal_thread.h" +#include "tal_system.h" +#include "tal_time_service.h" +#include "tal_log.h" +#include "tuya_ws_db.h" +#include "light_sensor.h" +#include "tuya_iot_com_api.h" /* DP上报 */ +#include +#include +#include + +/*============================================================================ + 私有宏定义 +============================================================================*/ +#define PET_TAG "PET" +#define PET_SAVE_KEY "pet_data" +#define PET_UPDATE_INTERVAL_MS (60 * 1000) + +/*============================================================================ + 喂食关键词定义 +============================================================================*/ +static const CHAR_T *sg_feed_keywords[] = { + "喂食", "吃饭", "吃东西", "喂饭", "饿了吗", "给你吃", + "喂猫", "喂狗", "开饭", "投食", "喂它", + "feed", "eat", "food", "hungry", "dinner", "lunch", "breakfast", + NULL +}; + +static const CHAR_T *sg_play_keywords[] = { + "摸摸", "抚摸", "玩", "陪你", "乖乖", "好可爱", "真乖", + "play", "pet", "cute", "good", + NULL +}; + +/*============================================================================ + 私有变量 +============================================================================*/ +static PET_DATA_T sg_pet_data; +static THREAD_HANDLE sg_pet_thread = NULL; +static BOOL_T sg_pet_running = FALSE; +static BOOL_T sg_pet_stop_flag = FALSE; +static PET_EVENT_CB sg_event_cb = NULL; +static UINT32_T sg_last_feed_tick = 0; +static BOOL_T sg_initialized = FALSE; + +/*============================================================================ + 私有函数声明 +============================================================================*/ +static VOID_T _pet_thread_func(PVOID_T args); +static VOID_T _pet_update_state(VOID_T); +static VOID_T _pet_save_data(VOID_T); +static VOID_T _pet_load_data(VOID_T); +static PET_STATE_E _pet_calculate_state(VOID_T); +static VOID_T _pet_draw_cat(UINT16_T x, UINT16_T y, PET_STATE_E state); +static VOID_T _pet_draw_status_bars(VOID_T); +static VOID_T _pet_draw_info(VOID_T); +static BOOL_T _check_keyword(CONST CHAR_T *text, CONST CHAR_T **keywords); + +/*============================================================================ + 公共函数实现 +============================================================================*/ + +/** + * @brief 初始化虚拟宠物模块 + */ +OPERATE_RET epd_pet_init(VOID_T) +{ + if (sg_initialized) { + TAL_PR_WARN("[%s] Already initialized", PET_TAG); + return OPRT_OK; + } + + TAL_PR_NOTICE("[%s] Initializing virtual pet...", PET_TAG); + + _pet_load_data(); + + sg_initialized = TRUE; + TAL_PR_NOTICE("[%s] Pet initialized: hunger=%d, mood=%d, energy=%d, age=%d days", + PET_TAG, sg_pet_data.hunger, sg_pet_data.mood, + sg_pet_data.energy, sg_pet_data.age_days); + + return OPRT_OK; +} + +/** + * @brief 启动虚拟宠物 + */ +OPERATE_RET epd_pet_start(VOID_T) +{ + OPERATE_RET ret = OPRT_OK; + + if (sg_pet_running) { + TAL_PR_WARN("[%s] Already running", PET_TAG); + return OPRT_OK; + } + + if (!sg_initialized) { + ret = epd_pet_init(); + if (ret != OPRT_OK) { + return ret; + } + } + + TAL_PR_NOTICE("[%s] Starting virtual pet...", PET_TAG); + + sg_pet_running = TRUE; + + /* 创建状态更新线程(只更新状态,不刷新显示) */ + sg_pet_stop_flag = FALSE; + THREAD_CFG_T thread_cfg = { + .stackDepth = 2048, + .priority = THREAD_PRIO_4, + .thrdname = "epd_pet_state" + }; + + ret = tal_thread_create_and_start(&sg_pet_thread, NULL, NULL, + _pet_thread_func, NULL, &thread_cfg); + if (ret != OPRT_OK) { + TAL_PR_WARN("[%s] State thread create failed, ret=%d", PET_TAG, ret); + } + + /* 标记需要刷新 */ + epd_display_mark_dirty(); + + TAL_PR_NOTICE("[%s] Virtual pet started!", PET_TAG); + return OPRT_OK; +} + +/** + * @brief 停止虚拟宠物 + */ +OPERATE_RET epd_pet_stop(VOID_T) +{ + if (!sg_pet_running) { + return OPRT_OK; + } + + TAL_PR_NOTICE("[%s] Stopping virtual pet...", PET_TAG); + + _pet_save_data(); + + sg_pet_stop_flag = TRUE; + UINT32_T timeout = 0; + while (sg_pet_running && timeout < 50) { + tal_system_sleep(100); + timeout++; + } + + if (sg_pet_thread) { + tal_thread_delete(sg_pet_thread); + sg_pet_thread = NULL; + } + + sg_pet_running = FALSE; + TAL_PR_NOTICE("[%s] Virtual pet stopped", PET_TAG); + + return OPRT_OK; +} + +/** + * @brief 绘制宠物到全屏缓冲区(由epd_clock调用) + */ +VOID_T epd_pet_draw_to_buffer(VOID_T) +{ + if (!sg_pet_running) { + return; + } + + UBYTE *buffer = epd_display_get_buffer(); + if (buffer == NULL) { + return; + } + + /* 选择全屏画布 */ + epd_display_select_canvas(); + + /* 清空宠物区域 */ + Paint_ClearWindows(EPD_PET_AREA_X, EPD_PET_AREA_Y, + EPD_PET_AREA_X + EPD_PET_AREA_WIDTH, + EPD_PET_AREA_Y + EPD_PET_AREA_HEIGHT, WHITE); + + /* 绘制边框 */ + Paint_DrawRectangle(EPD_PET_AREA_X + 5, EPD_PET_AREA_Y + 5, + EPD_PET_AREA_X + EPD_PET_AREA_WIDTH - 6, + EPD_PET_AREA_Y + EPD_PET_AREA_HEIGHT - 6, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + + /* 绘制宠物(左侧区域,避免与状态条重叠) */ + _pet_draw_cat(EPD_PET_AREA_X + 150, EPD_PET_AREA_Y + 180, sg_pet_data.state); + + /* 绘制状态条(右侧) */ + _pet_draw_status_bars(); + + /* 绘制信息(底部) */ + _pet_draw_info(); +} + +/** + * @brief 喂食 + */ +OPERATE_RET epd_pet_feed(VOID_T) +{ + UINT32_T now = tal_system_get_millisecond(); + + if (now - sg_last_feed_tick < PET_FEED_COOLDOWN_MS) { + UINT32_T remaining = (PET_FEED_COOLDOWN_MS - (now - sg_last_feed_tick)) / 1000; + TAL_PR_WARN("[%s] Feed cooldown, please wait %d seconds", PET_TAG, remaining); + + /* 冷却中也触发全屏刷新,显示最新倒计时 */ + epd_display_mark_dirty(); + + return OPRT_RESOURCE_NOT_READY; + } + + TAL_PR_NOTICE("[%s] Feeding pet!", PET_TAG); + + sg_pet_data.hunger += PET_FEED_HUNGER_GAIN; + if (sg_pet_data.hunger > 100) sg_pet_data.hunger = 100; + + sg_pet_data.mood += PET_FEED_MOOD_GAIN; + if (sg_pet_data.mood > 100) sg_pet_data.mood = 100; + + sg_pet_data.energy += PET_FEED_ENERGY_GAIN; + if (sg_pet_data.energy > 100) sg_pet_data.energy = 100; + + sg_pet_data.feed_count++; + sg_pet_data.last_feed_time = tal_time_get_posix(); + sg_last_feed_tick = now; + + sg_pet_data.state = PET_STATE_EATING; + + _pet_save_data(); + + /* 标记需要刷新 */ + epd_display_mark_dirty(); + + /* 立即上报状态到App */ + epd_pet_report_status(); + + if (sg_event_cb) { + sg_event_cb(&sg_pet_data); + } + + TAL_PR_NOTICE("[%s] Fed! hunger=%d, mood=%d, energy=%d, total_feeds=%d", + PET_TAG, sg_pet_data.hunger, sg_pet_data.mood, sg_pet_data.energy, sg_pet_data.feed_count); + + return OPRT_OK; +} + +/** + * @brief 互动/抚摸 + */ +OPERATE_RET epd_pet_play(VOID_T) +{ + TAL_PR_NOTICE("[%s] Playing with pet!", PET_TAG); + + sg_pet_data.mood += PET_PLAY_MOOD_GAIN; + if (sg_pet_data.mood > 100) sg_pet_data.mood = 100; + + if (sg_pet_data.energy > PET_PLAY_ENERGY_COST) { + sg_pet_data.energy -= PET_PLAY_ENERGY_COST; + } else { + sg_pet_data.energy = 0; + } + + sg_pet_data.play_count++; + sg_pet_data.last_play_time = tal_time_get_posix(); + + sg_pet_data.state = PET_STATE_PLAYING; + + _pet_save_data(); + + /* 标记需要刷新 */ + epd_display_mark_dirty(); + + /* 立即上报状态到App */ + epd_pet_report_status(); + + TAL_PR_NOTICE("[%s] Played! mood=%d, energy=%d, total_plays=%d", + PET_TAG, sg_pet_data.mood, sg_pet_data.energy, sg_pet_data.play_count); + + return OPRT_OK; +} + +/** + * @brief 处理DP点指令 + */ +BOOL_T epd_pet_dp_handler(UINT8_T dpid, INT_T value) +{ + switch (dpid) { + case DP_PET_FEED: + if (value) { + TAL_PR_NOTICE("[%s] DP feed command received!", PET_TAG); + epd_pet_feed(); + } + return TRUE; + + case DP_PET_PLAY: + if (value) { + TAL_PR_NOTICE("[%s] DP play command received!", PET_TAG); + epd_pet_play(); + } + return TRUE; + + default: + return FALSE; + } +} + +/** + * @brief 处理语音识别结果 + */ +BOOL_T epd_pet_voice_handler(CONST CHAR_T *asr_text) +{ + if (asr_text == NULL || strlen(asr_text) == 0) { + return FALSE; + } + + TAL_PR_DEBUG("[%s] Checking voice: %s", PET_TAG, asr_text); + + if (_check_keyword(asr_text, sg_feed_keywords)) { + TAL_PR_NOTICE("[%s] Voice feed command detected: %s", PET_TAG, asr_text); + epd_pet_feed(); + return TRUE; + } + + if (_check_keyword(asr_text, sg_play_keywords)) { + TAL_PR_NOTICE("[%s] Voice play command detected: %s", PET_TAG, asr_text); + epd_pet_play(); + return TRUE; + } + + return FALSE; +} + +/** + * @brief 获取当前宠物数据 + */ +CONST PET_DATA_T* epd_pet_get_data(VOID_T) +{ + return &sg_pet_data; +} + +/** + * @brief 强制刷新显示 + */ +OPERATE_RET epd_pet_refresh(VOID_T) +{ + if (!sg_pet_running) { + return OPRT_COM_ERROR; + } + + epd_display_mark_dirty(); + return OPRT_OK; +} + +/** + * @brief 设置事件回调 + */ +VOID_T epd_pet_set_callback(PET_EVENT_CB cb) +{ + sg_event_cb = cb; +} + +/** + * @brief 检查是否运行中 + */ +BOOL_T epd_pet_is_running(VOID_T) +{ + return sg_pet_running; +} + +/** + * @brief 上报宠物状态到App + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET epd_pet_report_status(VOID_T) +{ + CHAR_T *devid = tuya_iot_get_gw_id(); + if (devid == NULL) { + TAL_PR_WARN("[%s] Device not online, skip report", PET_TAG); + return OPRT_COM_ERROR; + } + + /* 上报3个DP点:饥饿度(103)、心情(104)、状态(105) */ + TY_OBJ_DP_S dps[3]; + + /* DP 103: 饥饿度 */ + dps[0].dpid = DP_PET_HUNGER; + dps[0].type = PROP_VALUE; + dps[0].time_stamp = 0; + dps[0].value.dp_value = sg_pet_data.hunger; + + /* DP 104: 心情 */ + dps[1].dpid = DP_PET_MOOD; + dps[1].type = PROP_VALUE; + dps[1].time_stamp = 0; + dps[1].value.dp_value = sg_pet_data.mood; + + /* DP 105: 状态枚举 */ + dps[2].dpid = DP_PET_STATE; + dps[2].type = PROP_ENUM; + dps[2].time_stamp = 0; + dps[2].value.dp_enum = (UINT_T)sg_pet_data.state; + + OPERATE_RET ret = tuya_report_dp_async(devid, dps, 3, NULL); + + if (ret == OPRT_OK) { + TAL_PR_NOTICE("[%s] DP reported: hunger=%d, mood=%d, state=%d", + PET_TAG, sg_pet_data.hunger, sg_pet_data.mood, sg_pet_data.state); + } else { + TAL_PR_ERR("[%s] DP report failed: %d", PET_TAG, ret); + } + + return ret; +} + +/*============================================================================ + 私有函数实现 +============================================================================*/ + +/** + * @brief 宠物状态更新线程(只更新状态,不刷新显示) + */ +static VOID_T _pet_thread_func(PVOID_T args) +{ + (VOID_T)args; + + TAL_PR_NOTICE("[%s] Pet state thread started", PET_TAG); + + UINT32_T last_update = 0; + UINT32_T now; + + while (!sg_pet_stop_flag) { + tal_system_sleep(1000); + now = tal_system_get_millisecond(); + + /* 每分钟更新状态 */ + if (now - last_update >= PET_UPDATE_INTERVAL_MS) { + last_update = now; + PET_STATE_E old_state = sg_pet_data.state; + _pet_update_state(); + _pet_save_data(); + + /* 如果状态变化了,触发屏幕刷新 */ + if (sg_pet_data.state != old_state) { + TAL_PR_NOTICE("[%s] State changed: %d -> %d, refreshing display", + PET_TAG, old_state, sg_pet_data.state); + epd_display_mark_dirty(); + } + } + } + + TAL_PR_NOTICE("[%s] Pet state thread exiting", PET_TAG); + sg_pet_running = FALSE; +} + +/** + * @brief 更新宠物状态 + */ +static VOID_T _pet_update_state(VOID_T) +{ + POSIX_TM_S tm; + memset(&tm, 0, sizeof(tm)); + tal_time_get_local_time_custom(0, &tm); + + UINT8_T light = light_sensor_get_light_percent(); + BOOL_T is_night = (tm.tm_hour >= 22 || tm.tm_hour < 6); + + static UINT8_T minute_counter = 0; + minute_counter++; + + if (minute_counter >= 60) { + minute_counter = 0; + + if (sg_pet_data.hunger > PET_HUNGER_DECAY_PER_HOUR) { + sg_pet_data.hunger -= PET_HUNGER_DECAY_PER_HOUR; + } else { + sg_pet_data.hunger = 0; + } + + if (sg_pet_data.mood > PET_MOOD_DECAY_PER_HOUR) { + sg_pet_data.mood -= PET_MOOD_DECAY_PER_HOUR; + } else { + sg_pet_data.mood = 0; + } + + if (is_night) { + sg_pet_data.energy += PET_ENERGY_GAIN_NIGHT; + if (sg_pet_data.energy > 100) sg_pet_data.energy = 100; + } else { + if (sg_pet_data.energy > PET_ENERGY_DECAY_DAY) { + sg_pet_data.energy -= PET_ENERGY_DECAY_DAY; + } else { + sg_pet_data.energy = 0; + } + } + + UINT32_T now = tal_time_get_posix(); + sg_pet_data.age_days = (now - sg_pet_data.birth_time) / (24 * 3600); + + TAL_PR_DEBUG("[%s] Hourly update: hunger=%d, mood=%d, energy=%d", + PET_TAG, sg_pet_data.hunger, sg_pet_data.mood, sg_pet_data.energy); + } + + if (is_night && light < 20) { + sg_pet_data.state = PET_STATE_SLEEPING; + } else { + sg_pet_data.state = _pet_calculate_state(); + } +} + +/** + * @brief 计算宠物状态 + */ +static PET_STATE_E _pet_calculate_state(VOID_T) +{ + UINT32_T now = tal_time_get_posix(); + + if (sg_pet_data.state == PET_STATE_EATING) { + if (now - sg_pet_data.last_feed_time > 60) { + /* 吃完了 */ + } else { + return PET_STATE_EATING; + } + } + if (sg_pet_data.state == PET_STATE_PLAYING) { + if (now - sg_pet_data.last_play_time > 60) { + /* 玩完了 */ + } else { + return PET_STATE_PLAYING; + } + } + + if (sg_pet_data.hunger < 30) { + return PET_STATE_HUNGRY; + } + + if (sg_pet_data.energy < 20) { + return PET_STATE_SLEEPY; + } + + if (sg_pet_data.mood < 30) { + return PET_STATE_SAD; + } + + if (sg_pet_data.hunger >= 70 && sg_pet_data.mood >= 70 && sg_pet_data.energy >= 50) { + return PET_STATE_HAPPY; + } + + return PET_STATE_NORMAL; +} + +/** + * @brief 绘制猫咪 + */ +static VOID_T _pet_draw_cat(UINT16_T x, UINT16_T y, PET_STATE_E state) +{ + const CHAR_T *line1, *line2, *line3, *line4, *line5, *dialog; + + switch (state) { + case PET_STATE_HAPPY: + line1 = " /\\_/\\ "; + line2 = " ( ^.^ ) "; + line3 = " > ^ < "; + line4 = " /| |\\ "; + line5 = "(_| |_)"; + dialog = "I'm so happy! ^_^"; + break; + + case PET_STATE_HUNGRY: + line1 = " /\\_/\\ "; + line2 = " ( T.T ) "; + line3 = " > o < "; + line4 = " /| |\\ "; + line5 = "(_| |_)"; + dialog = "I'm hungry... Feed me!"; + break; + + case PET_STATE_EATING: + line1 = " /\\_/\\ "; + line2 = " ( @.@ ) "; + line3 = " >mmm< "; + line4 = " /| |\\ "; + line5 = "(_| |_)"; + dialog = "Yummy! *nom nom*"; + break; + + case PET_STATE_SLEEPY: + line1 = " /\\_/\\ "; + line2 = " ( -.- ) "; + line3 = " > ~ < "; + line4 = " /| |\\ "; + line5 = "(_| |_)"; + dialog = "So tired... zzZ"; + break; + + case PET_STATE_SLEEPING: + line1 = " /\\_/\\ "; + line2 = " ( -.- ) "; + line3 = " > ~ < "; + line4 = " /| |\\ "; + line5 = "(_|___|_)"; + dialog = "zzZ... Sleeping..."; + break; + + case PET_STATE_PLAYING: + line1 = " /\\_/\\ "; + line2 = " ( >w< ) "; + line3 = " > v < "; + line4 = " \\| |/ "; + line5 = " (_\\_/_) "; + dialog = "Let's play! Wheee~"; + break; + + case PET_STATE_SAD: + line1 = " /\\_/\\ "; + line2 = " ( ;_; ) "; + line3 = " > n < "; + line4 = " /| |\\ "; + line5 = "(_| |_)"; + dialog = "I feel lonely..."; + break; + + default: + line1 = " /\\_/\\ "; + line2 = " ( o.o ) "; + line3 = " > ^ < "; + line4 = " /| |\\ "; + line5 = "(_| |_)"; + dialog = "Meow~"; + break; + } + + Paint_DrawString_EN(x - 60, y - 80, line1, &Font24, WHITE, BLACK); + Paint_DrawString_EN(x - 60, y - 50, line2, &Font24, WHITE, BLACK); + Paint_DrawString_EN(x - 60, y - 20, line3, &Font24, WHITE, BLACK); + Paint_DrawString_EN(x - 60, y + 10, line4, &Font24, WHITE, BLACK); + Paint_DrawString_EN(x - 60, y + 40, line5, &Font24, WHITE, BLACK); + + /* 对话气泡 */ + Paint_DrawRectangle(x + 80, y - 60, x + 350, y, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + Paint_DrawString_EN(x + 90, y - 45, dialog, &Font20, WHITE, BLACK); +} + +/** + * @brief 绘制状态条 + */ +static VOID_T _pet_draw_status_bars(VOID_T) +{ + UINT16_T bar_x = EPD_PET_AREA_X + 500; + UINT16_T bar_y = EPD_PET_AREA_Y + 80; + UINT16_T bar_width = 200; + UINT16_T bar_height = 20; + UINT16_T bar_spacing = 50; + + CHAR_T percent_str[16]; + + /* 饥饿度 */ + Paint_DrawString_EN(bar_x, bar_y, "Hunger:", &Font20, WHITE, BLACK); + Paint_DrawRectangle(bar_x, bar_y + 25, bar_x + bar_width, bar_y + 25 + bar_height, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + UINT16_T hunger_fill = (sg_pet_data.hunger * bar_width) / 100; + if (hunger_fill > 0) { + Paint_DrawRectangle(bar_x + 2, bar_y + 27, bar_x + 2 + hunger_fill, bar_y + 23 + bar_height, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + } + snprintf(percent_str, sizeof(percent_str), "%d%%", sg_pet_data.hunger); + Paint_DrawString_EN(bar_x + bar_width + 10, bar_y + 25, percent_str, &Font16, WHITE, BLACK); + + /* 心情 */ + bar_y += bar_spacing + bar_height; + Paint_DrawString_EN(bar_x, bar_y, "Mood:", &Font20, WHITE, BLACK); + Paint_DrawRectangle(bar_x, bar_y + 25, bar_x + bar_width, bar_y + 25 + bar_height, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + UINT16_T mood_fill = (sg_pet_data.mood * bar_width) / 100; + if (mood_fill > 0) { + Paint_DrawRectangle(bar_x + 2, bar_y + 27, bar_x + 2 + mood_fill, bar_y + 23 + bar_height, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + } + snprintf(percent_str, sizeof(percent_str), "%d%%", sg_pet_data.mood); + Paint_DrawString_EN(bar_x + bar_width + 10, bar_y + 25, percent_str, &Font16, WHITE, BLACK); + + /* 精力 */ + bar_y += bar_spacing + bar_height; + Paint_DrawString_EN(bar_x, bar_y, "Energy:", &Font20, WHITE, BLACK); + Paint_DrawRectangle(bar_x, bar_y + 25, bar_x + bar_width, bar_y + 25 + bar_height, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY); + UINT16_T energy_fill = (sg_pet_data.energy * bar_width) / 100; + if (energy_fill > 0) { + Paint_DrawRectangle(bar_x + 2, bar_y + 27, bar_x + 2 + energy_fill, bar_y + 23 + bar_height, + BLACK, DOT_PIXEL_1X1, DRAW_FILL_FULL); + } + snprintf(percent_str, sizeof(percent_str), "%d%%", sg_pet_data.energy); + Paint_DrawString_EN(bar_x + bar_width + 10, bar_y + 25, percent_str, &Font16, WHITE, BLACK); +} + +/** + * @brief 绘制底部信息 + */ +static VOID_T _pet_draw_info(VOID_T) +{ + CHAR_T info_str[128]; + UINT32_T now = tal_system_get_millisecond(); + UINT32_T elapsed = now - sg_last_feed_tick; + + /* 统计信息 + 冷却状态,同一行 */ + if (elapsed < PET_FEED_COOLDOWN_MS) { + UINT32_T remaining_sec = (PET_FEED_COOLDOWN_MS - elapsed) / 1000; + snprintf(info_str, sizeof(info_str), + "Age:%d Fed:%d Played:%d | Cooldown:%ds", + sg_pet_data.age_days, sg_pet_data.feed_count, + sg_pet_data.play_count, remaining_sec); + } else { + snprintf(info_str, sizeof(info_str), + "Age:%d Fed:%d Played:%d | Feed Ready!", + sg_pet_data.age_days, sg_pet_data.feed_count, + sg_pet_data.play_count); + } + + Paint_DrawString_EN(EPD_PET_AREA_X + 20, EPD_PET_AREA_Y + EPD_PET_AREA_HEIGHT - 30, + info_str, &Font16, WHITE, BLACK); +} + +/** + * @brief 保存宠物数据 + */ +static VOID_T _pet_save_data(VOID_T) +{ + sg_pet_data.last_update_time = tal_time_get_posix(); + + OPERATE_RET ret = wd_common_write(PET_SAVE_KEY, (BYTE_T *)&sg_pet_data, sizeof(PET_DATA_T)); + if (ret != OPRT_OK) { + TAL_PR_WARN("[%s] Save data failed, ret=%d", PET_TAG, ret); + } else { + TAL_PR_DEBUG("[%s] Data saved", PET_TAG); + } +} + +/** + * @brief 加载宠物数据 + */ +static VOID_T _pet_load_data(VOID_T) +{ + BYTE_T *data = NULL; + UINT_T len = 0; + OPERATE_RET ret = wd_common_read(PET_SAVE_KEY, &data, &len); + + if (ret != OPRT_OK || data == NULL || len != sizeof(PET_DATA_T)) { + TAL_PR_NOTICE("[%s] No save data, creating new pet!", PET_TAG); + memset(&sg_pet_data, 0, sizeof(PET_DATA_T)); + sg_pet_data.hunger = 80; + sg_pet_data.mood = 80; + sg_pet_data.energy = 100; + sg_pet_data.state = PET_STATE_HAPPY; + sg_pet_data.birth_time = tal_time_get_posix(); + sg_pet_data.age_days = 0; + _pet_save_data(); + } else { + memcpy(&sg_pet_data, data, sizeof(PET_DATA_T)); + + /* 检查 birth_time 有效性(应该大于 2024-01-01 的时间戳 1704067200) */ + UINT32_T min_valid_time = 1704067200; /* 2024-01-01 00:00:00 UTC */ + if (sg_pet_data.birth_time < min_valid_time) { + TAL_PR_WARN("[%s] Invalid birth_time=%u, resetting pet!", PET_TAG, sg_pet_data.birth_time); + sg_pet_data.birth_time = tal_time_get_posix(); + sg_pet_data.age_days = 0; + sg_pet_data.feed_count = 0; + sg_pet_data.play_count = 0; + _pet_save_data(); + } + + TAL_PR_NOTICE("[%s] Loaded save data, pet age=%d days", PET_TAG, sg_pet_data.age_days); + } + + if (data != NULL) { + wd_common_free_data(data); + } +} + +/** + * @brief 检查关键词 + */ +static BOOL_T _check_keyword(CONST CHAR_T *text, CONST CHAR_T **keywords) +{ + if (text == NULL || keywords == NULL) { + return FALSE; + } + + for (INT_T i = 0; keywords[i] != NULL; i++) { + if (strstr(text, keywords[i]) != NULL) { + return TRUE; + } + } + + return FALSE; +} + diff --git a/examples/e-Paper/application_drivers/e-Paper/examples/epd_pet.h b/examples/e-Paper/application_drivers/e-Paper/examples/epd_pet.h new file mode 100644 index 000000000..037e255c7 --- /dev/null +++ b/examples/e-Paper/application_drivers/e-Paper/examples/epd_pet.h @@ -0,0 +1,228 @@ +/***************************************************************************** + * @file epd_pet.h + * @author Custom + * @brief 电子墨水屏虚拟宠物模块 + * @version 1.0 + * @date 2025-01-01 + * + * @details 功能概述: + * 在墨水屏下方区域显示一只可爱的虚拟电子宠物,具备: + * - 饥饿度、心情、精力等状态属性 + * - 多种状态表情(开心/饥饿/困倦/睡觉等) + * - App远程喂食(通过DP点) + * - 语音喂食(说"喂食"/"吃饭"/"feed"等) + * - 光照感应(根据光照变化状态) + * + * 【状态系统】 + * - 饥饿度: 0-100,每小时-5,喂食+25 + * - 心情: 0-100,每小时-2,互动+15 + * - 精力: 0-100,白天-3/h,晚上+5/h + * + * 【喂食方式】 + * 1. App下发DP点 101 + * 2. 语音说"喂食"/"吃饭"/"feed"等关键词 + * 3. 定时喂食提醒 + * + *****************************************************************************/ +#ifndef __EPD_PET_H__ +#define __EPD_PET_H__ + +#include "tuya_cloud_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================================================================ + DP点定义 +============================================================================*/ +/** + * @brief 宠物相关DP点ID + * @note 需要在涂鸦IoT平台添加对应的DP点 + */ +#define DP_PET_FEED 101 /**< 喂食指令 (bool: true=喂食一次) */ +#define DP_PET_PLAY 102 /**< 互动指令 (bool: true=互动一次) */ +#define DP_PET_HUNGER 103 /**< 饥饿度上报 (value: 0-100) */ +#define DP_PET_MOOD 104 /**< 心情上报 (value: 0-100) */ +#define DP_PET_STATE 105 /**< 状态上报 (enum: 0=开心,1=普通,2=饥饿,3=困倦,4=睡觉) */ + +/*============================================================================ + 配置参数 +============================================================================*/ +/** + * @brief 宠物显示区域(与 epd_display.h 保持一致) + * @note 墨水屏分辨率:800 × 480 + * 信息栏占用:Y=0~120(视觉上方,高度120) + * 宠物区域:Y=140~480(视觉下方,高度340) + */ +#define EPD_PET_X 0 /**< 宠物区域X坐标 */ +#define EPD_PET_Y 140 /**< 宠物区域Y坐标(信息栏下方,留20像素间距)*/ +#define EPD_PET_WIDTH 800 /**< 宠物区域宽度 */ +#define EPD_PET_HEIGHT 340 /**< 宠物区域高度 */ + +/** + * @brief 状态变化速率(每小时变化量) + */ +#define PET_HUNGER_DECAY_PER_HOUR 5 /**< 饥饿度每小时下降 */ +#define PET_MOOD_DECAY_PER_HOUR 2 /**< 心情每小时下降 */ +#define PET_ENERGY_DECAY_DAY 3 /**< 精力白天每小时下降 */ +#define PET_ENERGY_GAIN_NIGHT 5 /**< 精力夜晚每小时恢复 */ + +/** + * @brief 喂食/互动效果 + */ +#define PET_FEED_HUNGER_GAIN 25 /**< 喂食增加饥饿度 */ +#define PET_FEED_MOOD_GAIN 10 /**< 喂食增加心情 */ +#define PET_FEED_ENERGY_GAIN 5 /**< 喂食增加精力 */ +#define PET_PLAY_MOOD_GAIN 15 /**< 互动增加心情 */ +#define PET_PLAY_ENERGY_COST 5 /**< 互动消耗精力 */ + +/** + * @brief 喂食冷却时间(防止刷喂食) + */ +#define PET_FEED_COOLDOWN_MS (30 * 1000) /**< 喂食冷却30秒 */ + +/*============================================================================ + 数据类型定义 +============================================================================*/ + +/** + * @brief 宠物状态枚举 + */ +typedef enum { + PET_STATE_HAPPY = 0, /**< 😊 开心 - 所有属性良好 */ + PET_STATE_NORMAL, /**< 😐 普通 - 属性一般 */ + PET_STATE_HUNGRY, /**< 😿 饥饿 - 饥饿度低 */ + PET_STATE_SLEEPY, /**< 😴 困倦 - 精力低 */ + PET_STATE_SLEEPING, /**< 💤 睡觉 - 夜间休息 */ + PET_STATE_EATING, /**< 😋 吃东西 - 刚喂食后 */ + PET_STATE_PLAYING, /**< 😸 玩耍 - 互动中 */ + PET_STATE_SAD, /**< 😢 难过 - 心情低 */ + PET_STATE_MAX +} PET_STATE_E; + +/** + * @brief 宠物数据结构 + */ +typedef struct { + UINT8_T hunger; /**< 饥饿度 0-100 (0=饿死, 100=吃饱) */ + UINT8_T mood; /**< 心情 0-100 (0=抑郁, 100=开心) */ + UINT8_T energy; /**< 精力 0-100 (0=疲惫, 100=精神) */ + PET_STATE_E state; /**< 当前状态 */ + UINT32_T last_feed_time; /**< 上次喂食时间戳 */ + UINT32_T last_play_time; /**< 上次互动时间戳 */ + UINT32_T last_update_time; /**< 上次状态更新时间戳 */ + UINT32_T birth_time; /**< 宠物"出生"时间 */ + UINT16_T age_days; /**< 宠物年龄(天) */ + UINT16_T feed_count; /**< 累计喂食次数 */ + UINT16_T play_count; /**< 累计互动次数 */ +} PET_DATA_T; + +/** + * @brief 喂食事件回调函数类型 + * @param data 宠物当前数据 + */ +typedef VOID_T (*PET_EVENT_CB)(PET_DATA_T *data); + +/*============================================================================ + 函数声明 +============================================================================*/ + +/** + * @brief 初始化虚拟宠物模块 + * @return OPRT_OK: 成功, 其他: 失败 + * + * @note 会自动从Flash加载保存的宠物数据 + * 如果没有存档,会创建新宠物 + */ +OPERATE_RET epd_pet_init(VOID_T); + +/** + * @brief 启动虚拟宠物(开始显示和状态更新) + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET epd_pet_start(VOID_T); + +/** + * @brief 停止虚拟宠物 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET epd_pet_stop(VOID_T); + +/** + * @brief 喂食 + * @return OPRT_OK: 成功, OPRT_RESOURCE_NOT_READY: 冷却中 + * + * @note 可被App/语音/定时调用 + */ +OPERATE_RET epd_pet_feed(VOID_T); + +/** + * @brief 互动/抚摸 + * @return OPRT_OK: 成功 + */ +OPERATE_RET epd_pet_play(VOID_T); + +/** + * @brief 处理DP点指令 + * @param dpid DP点ID + * @param value DP点值 + * @return TRUE: 已处理, FALSE: 非宠物相关DP + * + * @note 在 ty_ai_toy_dp_cmd_cb() 中调用 + */ +BOOL_T epd_pet_dp_handler(UINT8_T dpid, INT_T value); + +/** + * @brief 处理语音识别结果,检测喂食关键词 + * @param asr_text 语音识别文字 + * @return TRUE: 检测到喂食指令, FALSE: 未检测到 + * + * @note 在ASR结果回调中调用,检测"喂食"/"吃饭"/"feed"等关键词 + */ +BOOL_T epd_pet_voice_handler(CONST CHAR_T *asr_text); + +/** + * @brief 获取当前宠物数据 + * @return 宠物数据指针(只读) + */ +CONST PET_DATA_T* epd_pet_get_data(VOID_T); + +/** + * @brief 强制刷新显示 + * @return OPRT_OK: 成功 + */ +OPERATE_RET epd_pet_refresh(VOID_T); + +/** + * @brief 绘制宠物到全屏缓冲区 + * @note 由 epd_clock 模块调用,统一刷新时使用 + */ +VOID_T epd_pet_draw_to_buffer(VOID_T); + +/** + * @brief 设置事件回调 + * @param cb 回调函数 + */ +VOID_T epd_pet_set_callback(PET_EVENT_CB cb); + +/** + * @brief 检查宠物是否在运行 + * @return TRUE: 运行中, FALSE: 未运行 + */ +BOOL_T epd_pet_is_running(VOID_T); + +/** + * @brief 上报宠物状态到App + * @return OPRT_OK: 成功, 其他: 失败 + * + * @note 上报 DP 103(饥饿度)、104(心情)、105(状态) + */ +OPERATE_RET epd_pet_report_status(VOID_T); + +#ifdef __cplusplus +} +#endif + +#endif /* __EPD_PET_H__ */ + diff --git a/examples/e-Paper/application_drivers/light_sensor/light_sensor.c b/examples/e-Paper/application_drivers/light_sensor/light_sensor.c new file mode 100644 index 000000000..541544e11 --- /dev/null +++ b/examples/e-Paper/application_drivers/light_sensor/light_sensor.c @@ -0,0 +1,606 @@ +/** + * @file light_sensor.c + * @brief 光敏电阻传感器驱动实现 + * @details 使用TuyaOS ADC API读取光敏电阻的模拟信号,实现环境光照强度检测 + * + * 【硬件原理】 + * 光敏电阻(LDR/Light Dependent Resistor)是一种光控可变电阻,其阻值随光照强度变化: + * - 光照越强 → 阻值越小(几百欧姆) + * - 光照越弱 → 阻值越大(可达几兆欧姆) + * + * 【电路连接】(典型分压电路) + * VCC (3.3V) + * │ + * ┌┴┐ + * │ │ 光敏电阻 (LDR) + * └┬┘ + * ├──────── GPIO13 (ADC输入) + * ┌┴┐ + * │ │ 固定电阻 (10K) + * └┬┘ + * │ + * GND + * + * 【ADC读数与光照关系】(当LDR在上端时) + * - 光照强 → LDR阻值低 → 分压点电压低 → ADC值小 + * - 光照弱 → LDR阻值高 → 分压点电压高 → ADC值大 + * 因此需要反转处理,使光照强时百分比为100% + * + * @version 1.0 + * @date 2025-12-12 + */ + +#include "light_sensor.h" +#include "tkl_adc.h" /* TuyaOS ADC底层驱动API */ +#include "tkl_pinmux.h" /* TuyaOS 引脚复用配置API */ +#include "tal_system.h" /* TuyaOS 系统API(延时等) */ +#include "tal_thread.h" /* TuyaOS 线程管理API */ +#include "tal_log.h" /* TuyaOS 日志打印API */ + +/*============================================================================*/ +/* 私有变量定义 */ +/*============================================================================*/ + +/** + * @brief 模块初始化标志 + * @note TRUE表示ADC已完成初始化,可以进行读取操作 + */ +static BOOL_T sg_initialized = FALSE; + +/** + * @brief ADC通道号 + * @note 通过GPIO引脚映射得到,不同GPIO对应不同ADC通道 + * 例如:GPIO13 对应 ADC通道15 + */ +static UINT8_T sg_adc_channel = 0; + +/** + * @brief 周期读取线程句柄 + * @note 用于管理后台自动采集线程的生命周期 + */ +static THREAD_HANDLE sg_thread_handle = NULL; + +/** + * @brief 线程运行状态标志 + * @note TRUE表示线程正在运行中,用于防止重复启动 + */ +static BOOL_T sg_thread_running = FALSE; + +/** + * @brief 线程停止请求标志 + * @note 设为TRUE时,线程会在下一个循环周期中退出 + * 这是一种优雅的线程退出机制 + */ +static BOOL_T sg_thread_stop_flag = FALSE; + +/** + * @brief 周期读取间隔时间(毫秒) + * @note 默认1000ms,可通过light_sensor_start_periodic()设置 + */ +static UINT32_T sg_read_interval_ms = 1000; + +/** + * @brief 用户注册的数据回调函数 + * @note 每次读取到新数据时调用,传递给上层应用处理 + */ +static LIGHT_SENSOR_CB sg_user_callback = NULL; + +/** + * @brief 缓存的光照百分比值 + * @note 用于线程安全地获取最新光照值 + * 其他模块调用light_sensor_get_light_percent()时返回此值 + * 避免多线程同时访问ADC导致的资源竞争 + */ +static UINT8_T sg_cached_light_percent = 50; + +/*============================================================================*/ +/* 私有函数实现 */ +/*============================================================================*/ + +/** + * @brief 光敏传感器周期性读取线程函数 + * @param[in] args 线程参数(未使用) + * + * @details 线程工作流程: + * 1. 进入循环,检查停止标志 + * 2. 调用light_sensor_read()读取完整传感器数据 + * 3. 更新缓存值(供其他线程安全获取) + * 4. 打印调试日志 + * 5. 调用用户回调函数(如果已注册) + * 6. 休眠指定间隔时间 + * 7. 重复步骤1-6,直到停止标志被设置 + * + * @note 线程优先级为THREAD_PRIO_2(中等优先级) + * 栈大小为2048字节,对于简单的ADC读取足够 + */ +static VOID_T _light_sensor_thread(PVOID_T args) +{ + /* 消除未使用参数的编译警告 */ + (VOID_T)args; + + /* 打印线程启动信息,便于调试 */ + TAL_PR_NOTICE("Light sensor thread started, interval=%dms", sg_read_interval_ms); + + /* 设置运行标志,表示线程已开始工作 */ + sg_thread_running = TRUE; + + /*=== 主循环:持续读取传感器数据直到收到停止信号 ===*/ + while (!sg_thread_stop_flag) { + /* 定义传感器数据结构,用于存储读取结果 */ + LIGHT_SENSOR_DATA_T data; + + /* 读取传感器完整数据(原始值、电压、百分比) */ + if (light_sensor_read(&data) == OPRT_OK) { + + /*--- 步骤1: 更新缓存值 ---*/ + /* 将最新的光照百分比保存到缓存变量 + * 这样其他线程可以通过light_sensor_get_light_percent() + * 安全地获取光照值,而不需要直接访问ADC硬件 */ + sg_cached_light_percent = data.light_percent; + + /*--- 步骤2: 打印调试日志 ---*/ + /* 输出原始ADC值、电压值和光照百分比,便于调试和校准 */ + TAL_PR_NOTICE("Light: raw=%d, voltage=%dmV, percent=%d%%", + data.raw_value, data.voltage_mv, data.light_percent); + + /*--- 步骤3: 调用用户回调函数 ---*/ + /* 如果用户注册了回调函数,将数据传递给上层应用 + * 回调函数可用于:触发亮度调节、记录数据、联动其他设备等 */ + if (sg_user_callback) { + sg_user_callback(&data); + } + } + + /*--- 步骤4: 休眠等待下一次采集 ---*/ + /* 释放CPU资源,等待指定间隔后再次采集 + * 间隔时间越短,响应越灵敏,但CPU占用越高 */ + tal_system_sleep(sg_read_interval_ms); + } + + /* 线程即将退出,打印通知信息 */ + TAL_PR_NOTICE("Light sensor thread exiting"); + + /* 清除运行标志,表示线程已停止 */ + sg_thread_running = FALSE; +} + +/*============================================================================*/ +/* 公共API函数实现 */ +/*============================================================================*/ + +/** + * @brief 初始化光敏传感器模块 + * @return OPRT_OK: 初始化成功 + * OPRT_COM_ERROR: GPIO到ADC通道映射失败 + * 其他: ADC初始化失败 + * + * @details 初始化流程: + * 1. 检查是否已初始化(避免重复初始化) + * 2. 将GPIO引脚映射到对应的ADC通道 + * 3. 配置ADC参数(位宽、采样模式等) + * 4. 调用底层API完成ADC硬件初始化 + * + * @note 使用前必须先调用此函数 + * 如果调用light_sensor_start_periodic()时未初始化, + * 会自动调用本函数进行初始化 + */ +OPERATE_RET light_sensor_init(VOID_T) +{ + OPERATE_RET ret; + TUYA_ADC_BASE_CFG_T adc_cfg; + + /*=== 步骤1: 检查初始化状态 ===*/ + /* 如果已经初始化过,直接返回成功,避免重复配置 */ + if (sg_initialized) { + TAL_PR_WARN("Light sensor already initialized"); + return OPRT_OK; + } + + /*=== 步骤2: GPIO引脚到ADC通道的映射 ===*/ + /* T5芯片的GPIO和ADC通道有对应关系,需要通过API查询 + * 例如: GPIO13 -> ADC通道15 + * tkl_io_pin_to_func()函数返回该GPIO对应的ADC功能编号 + * 返回值的低8位即为ADC通道号 */ + INT32_T adc_func = tkl_io_pin_to_func(LIGHT_SENSOR_GPIO_PIN, TUYA_IO_TYPE_ADC); + if (adc_func < 0) { + /* 映射失败,可能是该GPIO不支持ADC功能 */ + TAL_PR_ERR("Failed to get ADC channel for GPIO %d, ret=%d", + LIGHT_SENSOR_GPIO_PIN, adc_func); + return OPRT_COM_ERROR; + } + + /* 提取ADC通道号(低8位) */ + sg_adc_channel = adc_func & 0xFF; + TAL_PR_NOTICE("Light sensor using GPIO %d, ADC channel %d", + LIGHT_SENSOR_GPIO_PIN, sg_adc_channel); + + /*=== 步骤3: 配置ADC参数 ===*/ + /* 清零配置结构体,确保所有字段初始化 */ + memset(&adc_cfg, 0, sizeof(adc_cfg)); + + /* ch_list.data: 使用位图方式指定要使用的通道 + * 例如:通道5 -> BIT(5) = 0x20 */ + adc_cfg.ch_list.data = BIT(sg_adc_channel); + + /* ch_nums: 同时使用的通道数量,这里只用一个通道 */ + adc_cfg.ch_nums = 1; + + /* width: ADC采样位宽,12位对应0~4095的范围 + * 位宽越高,精度越高,但转换时间也越长 */ + adc_cfg.width = LIGHT_SENSOR_ADC_WIDTH; + + /* type: 参考电压类型 + * TUYA_ADC_INNER_SAMPLE_VOL: 使用芯片内部参考电压(约2.4V) + * 也可以选择外部参考电压,但需要额外硬件支持 */ + adc_cfg.type = TUYA_ADC_INNER_SAMPLE_VOL; + + /* mode: 采样模式 + * TUYA_ADC_CONTINUOUS: 连续采样模式,ADC持续工作 + * TUYA_ADC_SINGLE: 单次采样模式,触发后只采样一次 */ + adc_cfg.mode = TUYA_ADC_CONTINUOUS; + + /* conv_cnt: 每次读取时进行多少次采样并取平均 + * 增加采样次数可以减少噪声干扰,提高读数稳定性 + * 但会增加每次读取的时间 */ + adc_cfg.conv_cnt = 8; + + /*=== 步骤4: 执行ADC硬件初始化 ===*/ + ret = tkl_adc_init(TUYA_ADC_NUM_0, &adc_cfg); + if (ret != OPRT_OK) { + TAL_PR_ERR("ADC init failed, ret=%d", ret); + return ret; + } + + /* 标记初始化完成 */ + sg_initialized = TRUE; + TAL_PR_NOTICE("Light sensor initialized successfully"); + + return OPRT_OK; +} + +/** + * @brief 反初始化光敏传感器模块 + * @return OPRT_OK: 反初始化成功 + * + * @details 释放流程: + * 1. 停止周期性读取线程(如果正在运行) + * 2. 释放ADC硬件资源 + * 3. 清除初始化标志 + * + * @note 在系统休眠或不需要光照检测时调用,可降低功耗 + */ +OPERATE_RET light_sensor_deinit(VOID_T) +{ + /* 如果未初始化,无需反初始化 */ + if (!sg_initialized) { + return OPRT_OK; + } + + /* 首先停止周期性读取线程,避免访问已释放的资源 */ + light_sensor_stop_periodic(); + + /* 释放ADC硬件资源 */ + tkl_adc_deinit(TUYA_ADC_NUM_0); + + /* 清除初始化标志 */ + sg_initialized = FALSE; + TAL_PR_NOTICE("Light sensor deinitialized"); + + return OPRT_OK; +} + +/** + * @brief 读取ADC原始值 + * @param[out] raw_value 输出参数,存储ADC原始读数(0~4095) + * @return OPRT_OK: 读取成功 + * OPRT_COM_ERROR: 模块未初始化 + * OPRT_INVALID_PARM: 参数无效(空指针) + * 其他: ADC读取错误 + * + * @details ADC原始值范围说明(12位ADC): + * - 0: 输入电压 = 0V + * - 4095: 输入电压 = 参考电压(约2.4V) + * - 中间值线性对应 + * + * @note 此函数直接访问ADC硬件,如需频繁读取建议使用周期读取模式 + */ +OPERATE_RET light_sensor_read_raw(INT32_T *raw_value) +{ + OPERATE_RET ret; + + /*=== 参数检查 ===*/ + /* 检查模块是否已初始化 */ + if (!sg_initialized) { + TAL_PR_ERR("Light sensor not initialized"); + return OPRT_COM_ERROR; + } + + /* 检查输出参数是否有效 */ + if (raw_value == NULL) { + return OPRT_INVALID_PARM; + } + + /*=== 读取ADC值 ===*/ + /* tkl_adc_read_single_channel(): 从指定通道读取一个ADC值 + * 参数1: ADC设备号(TUYA_ADC_NUM_0) + * 参数2: 通道号 + * 参数3: 输出值指针 */ + ret = tkl_adc_read_single_channel(TUYA_ADC_NUM_0, sg_adc_channel, raw_value); + if (ret != OPRT_OK) { + TAL_PR_ERR("ADC read failed, ret=%d", ret); + return ret; + } + + return OPRT_OK; +} + +/** + * @brief 读取电压值(毫伏) + * @param[out] voltage_mv 输出参数,存储计算得到的电压值(mV) + * @return OPRT_OK: 读取成功 + * OPRT_INVALID_PARM: 参数无效 + * 其他: 读取错误 + * + * @details 电压计算公式: + * voltage = raw_value × 参考电压 / ADC最大值 + * 例如: raw=2048 → voltage = 2048 × 2400 / 4095 ≈ 1200mV + * + * @note 返回的电压值是ADC输入引脚的电压,即分压点电压 + */ +OPERATE_RET light_sensor_read_voltage(INT32_T *voltage_mv) +{ + OPERATE_RET ret; + INT32_T raw_value; + + /* 检查输出参数 */ + if (voltage_mv == NULL) { + return OPRT_INVALID_PARM; + } + + /* 首先读取原始ADC值 */ + ret = light_sensor_read_raw(&raw_value); + if (ret != OPRT_OK) { + return ret; + } + + /*=== 电压换算 ===*/ + /* 公式: 电压(mV) = ADC原始值 × 参考电压(mV) / ADC最大值 + * LIGHT_SENSOR_REF_VOLTAGE_MV = 2400 (2.4V) + * LIGHT_SENSOR_ADC_MAX = 4095 (12位ADC) */ + *voltage_mv = (raw_value * LIGHT_SENSOR_REF_VOLTAGE_MV) / LIGHT_SENSOR_ADC_MAX; + + return OPRT_OK; +} + +/** + * @brief 读取完整的传感器数据(原始值+电压+光照百分比) + * @param[out] data 输出参数,存储完整的传感器数据 + * @return OPRT_OK: 读取成功 + * OPRT_INVALID_PARM: 参数无效 + * 其他: 读取错误 + * + * @details 光照百分比计算流程: + * 1. 读取ADC原始值 + * 2. 计算电压值(可选,用于调试) + * 3. 使用校准参数将原始值映射到0~100% + * 4. 根据配置决定是否反转(光强时百分比高) + * + * 【校准参数说明】 + * LIGHT_SENSOR_CAL_MIN: 强光时的ADC值(如30) + * LIGHT_SENSOR_CAL_MAX: 暗环境时的ADC值(如200) + * 映射公式: percent = (raw - CAL_MIN) × 100 / (CAL_MAX - CAL_MIN) + * + * @note 这是最常用的读取函数,一次调用获取所有数据 + */ +OPERATE_RET light_sensor_read(LIGHT_SENSOR_DATA_T *data) +{ + OPERATE_RET ret; + + /* 检查输出参数 */ + if (data == NULL) { + return OPRT_INVALID_PARM; + } + + /*=== 步骤1: 读取ADC原始值 ===*/ + ret = light_sensor_read_raw(&data->raw_value); + if (ret != OPRT_OK) { + return ret; + } + + /*=== 步骤2: 计算电压值(mV)===*/ + /* 电压 = 原始值 × 参考电压 / 最大值 */ + data->voltage_mv = (data->raw_value * LIGHT_SENSOR_REF_VOLTAGE_MV) / LIGHT_SENSOR_ADC_MAX; + + /*=== 步骤3: 计算光照百分比 ===*/ + /* 使用校准参数进行范围映射,将实际ADC范围映射到0~100% */ + + /* 计算校准范围 */ + INT32_T cal_range = LIGHT_SENSOR_CAL_MAX - LIGHT_SENSOR_CAL_MIN; + INT32_T percent; + + if (cal_range > 0) { + /*--- 使用校准参数进行映射 ---*/ + + /* 首先将原始值限制在校准范围内(钳位处理) + * 防止计算结果超出0~100范围 */ + INT32_T clamped = data->raw_value; + if (clamped < LIGHT_SENSOR_CAL_MIN) { + clamped = LIGHT_SENSOR_CAL_MIN; /* 超亮环境,限制为最小值 */ + } + if (clamped > LIGHT_SENSOR_CAL_MAX) { + clamped = LIGHT_SENSOR_CAL_MAX; /* 极暗环境,限制为最大值 */ + } + + /* 线性映射: 将[CAL_MIN, CAL_MAX]映射到[0, 100] + * percent = (clamped - CAL_MIN) × 100 / (CAL_MAX - CAL_MIN) */ + percent = ((clamped - LIGHT_SENSOR_CAL_MIN) * 100) / cal_range; + } else { + /* 校准参数无效(范围为0或负数),使用默认全范围映射 */ + percent = (data->raw_value * 100) / LIGHT_SENSOR_ADC_MAX; + } + + /*=== 步骤4: 反转处理(可选)===*/ +#if LIGHT_SENSOR_INVERT + /* 光敏电阻特性:光照越强 → 阻值越低 → ADC值越低 + * 为了直观表示(光照强时百分比高),需要反转 + * 反转公式: 最终百分比 = 100 - 原始百分比 */ + percent = 100 - percent; +#endif + + /*=== 步骤5: 边界检查 ===*/ + /* 确保最终值在0~100范围内 */ + if (percent < 0) percent = 0; + if (percent > 100) percent = 100; + + /* 转换为8位无符号数存储 */ + data->light_percent = (UINT8_T)percent; + + return OPRT_OK; +} + +/** + * @brief 获取光照强度百分比(从缓存读取,线程安全) + * @return 光照强度百分比(0~100%) + * + * @details 此函数返回由周期读取线程更新的缓存值: + * - 不直接访问ADC硬件 + * - 可从任何线程安全调用 + * - 值的实时性取决于周期读取间隔 + * + * 使用场景: + * - 屏幕亮度自动调节 + * - 光控开关逻辑 + * - 环境光记录 + * + * @note 调用此函数前需先启动周期读取:light_sensor_start_periodic() + * 否则返回的是初始默认值(50%) + */ +UINT8_T light_sensor_get_light_percent(VOID_T) +{ + /* 直接返回缓存值 + * 缓存值由_light_sensor_thread()线程定期更新 + * 避免多线程同时访问ADC硬件导致的资源竞争问题 */ + return sg_cached_light_percent; +} + +/** + * @brief 启动周期性自动读取(创建独立线程) + * @param[in] interval_ms 读取间隔时间(毫秒),0或过小会使用默认值1000ms + * @param[in] callback 数据回调函数,每次读取后调用,可为NULL + * @return OPRT_OK: 启动成功 + * 其他: 初始化或线程创建失败 + * + * @details 功能说明: + * - 创建一个后台线程,按指定间隔自动读取传感器数据 + * - 每次读取后更新缓存值,可通过light_sensor_get_light_percent()获取 + * - 如果注册了回调函数,每次读取后会调用回调 + * + * 线程参数: + * - 优先级: THREAD_PRIO_2(中等) + * - 栈大小: 2048字节 + * - 线程名: "light_sensor" + * + * @note 如果模块未初始化,会自动调用light_sensor_init() + * 重复调用不会创建多个线程,会直接返回成功 + */ +OPERATE_RET light_sensor_start_periodic(UINT32_T interval_ms, LIGHT_SENSOR_CB callback) +{ + OPERATE_RET ret; + + /* 线程配置参数 */ + THREAD_CFG_T thread_cfg = { + .priority = THREAD_PRIO_2, /* 中等优先级,不影响关键任务 */ + .stackDepth = 2048, /* 2KB栈空间,足够ADC读取使用 */ + .thrdname = "light_sensor" /* 线程名,便于调试时识别 */ + }; + + /*=== 步骤1: 确保模块已初始化 ===*/ + if (!sg_initialized) { + /* 自动执行初始化,简化使用流程 */ + ret = light_sensor_init(); + if (ret != OPRT_OK) { + return ret; + } + } + + /*=== 步骤2: 检查是否已在运行 ===*/ + if (sg_thread_running) { + /* 线程已在运行,避免重复创建 */ + TAL_PR_WARN("Light sensor periodic read already running"); + return OPRT_OK; + } + + /*=== 步骤3: 保存配置参数 ===*/ + /* 间隔时间,至少1ms,默认1000ms */ + sg_read_interval_ms = (interval_ms > 0) ? interval_ms : 1000; + + /* 保存用户回调函数 */ + sg_user_callback = callback; + + /* 清除停止标志,允许线程运行 */ + sg_thread_stop_flag = FALSE; + + /*=== 步骤4: 创建并启动线程 ===*/ + /* tal_thread_create_and_start(): 一步完成线程创建和启动 + * 参数1: 线程句柄输出 + * 参数2: 运行函数(已启动时调用,这里不用) + * 参数3: 退出函数(线程退出时调用,这里不用) + * 参数4: 线程入口函数 + * 参数5: 传给线程的参数 + * 参数6: 线程配置 */ + ret = tal_thread_create_and_start(&sg_thread_handle, NULL, NULL, + _light_sensor_thread, NULL, &thread_cfg); + if (ret != OPRT_OK) { + TAL_PR_ERR("Failed to create light sensor thread, ret=%d", ret); + return ret; + } + + return OPRT_OK; +} + +/** + * @brief 停止周期性自动读取 + * @return OPRT_OK: 停止成功 + * + * @details 停止流程: + * 1. 设置停止标志,通知线程退出 + * 2. 等待线程自然退出(最多5秒) + * 3. 删除线程资源 + * + * 优雅退出机制: + * - 不强制终止线程,而是设置标志等待其在下一个循环中退出 + * - 这样可以确保线程正常完成当前操作,避免资源泄漏 + * + * @note 如果线程未在运行,直接返回成功 + * 调用此函数后,可以再次调用start_periodic重新启动 + */ +OPERATE_RET light_sensor_stop_periodic(VOID_T) +{ + /* 如果线程未运行,无需停止 */ + if (!sg_thread_running) { + return OPRT_OK; + } + + /*=== 步骤1: 设置停止标志 ===*/ + /* 线程在下一个循环检测到此标志后会自动退出 */ + sg_thread_stop_flag = TRUE; + + /*=== 步骤2: 等待线程退出 ===*/ + /* 循环等待,每100ms检查一次,最多等待50次(5秒) + * 超时后强制继续,避免无限等待 */ + UINT32_T wait_count = 0; + while (sg_thread_running && wait_count < 50) { + tal_system_sleep(100); /* 休眠100ms */ + wait_count++; + } + + /*=== 步骤3: 释放线程资源 ===*/ + if (sg_thread_handle) { + /* 删除线程,释放系统资源 */ + tal_thread_delete(sg_thread_handle); + sg_thread_handle = NULL; + } + + TAL_PR_NOTICE("Light sensor periodic read stopped"); + return OPRT_OK; +} diff --git a/examples/e-Paper/application_drivers/light_sensor/light_sensor.h b/examples/e-Paper/application_drivers/light_sensor/light_sensor.h new file mode 100644 index 000000000..2f7a57366 --- /dev/null +++ b/examples/e-Paper/application_drivers/light_sensor/light_sensor.h @@ -0,0 +1,137 @@ +/** + * @file light_sensor.h + * @brief 光敏电阻传感器驱动模块 + * @details 使用ADC读取光敏电阻的模拟信号,获取环境光照强度 + * @version 1.0 + * @date 2025-12-12 + */ + +#ifndef __LIGHT_SENSOR_H__ +#define __LIGHT_SENSOR_H__ + +#include "tuya_cloud_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================ 配置参数 ====================================*/ + +/** + * @brief 光敏电阻连接的GPIO引脚 + * @note GPIO 13 对应 ADC通道15 + */ +#ifndef LIGHT_SENSOR_GPIO_PIN +#define LIGHT_SENSOR_GPIO_PIN 13 +#endif + +/** + * @brief ADC采样位宽(12位 = 0~4095) + */ +#define LIGHT_SENSOR_ADC_WIDTH 12 + +/** + * @brief ADC最大值(12位) + */ +#define LIGHT_SENSOR_ADC_MAX 4095 + +/** + * @brief 参考电压(mV) + * @note T5的ADC参考电压约为2.4V + */ +#define LIGHT_SENSOR_REF_VOLTAGE_MV 2400 + +/** + * @brief 校准参数 - 强光时的ADC值(光照最强时) + * @note 光敏电阻特性:光照越强 → 阻值越低 → ADC值越低 + * 调整后:raw=97 显示约60% + */ +#define LIGHT_SENSOR_CAL_MIN 30 + +/** + * @brief 校准参数 - 暗环境时的ADC值(光照最弱时) + * @note 调整后使 raw=97 对应约65% + */ +#define LIGHT_SENSOR_CAL_MAX 200 + +/** + * @brief 是否反转光照百分比(1=反转,光强时数值高) + * @note 因为光敏电阻在分压电路上端,光照越强ADC值越低 + * 反转后:光照越强 → 百分比越高(100%) + */ +#define LIGHT_SENSOR_INVERT 1 + +/*============================ 数据结构 ====================================*/ + +/** + * @brief 光敏传感器数据结构 + */ +typedef struct { + INT32_T raw_value; /**< ADC原始值 (0~4095) */ + INT32_T voltage_mv; /**< 电压值 (mV) */ + UINT8_T light_percent; /**< 光照强度百分比 (0~100%) */ +} LIGHT_SENSOR_DATA_T; + +/*============================ API函数声明 =================================*/ + +/** + * @brief 初始化光敏传感器 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET light_sensor_init(VOID_T); + +/** + * @brief 反初始化光敏传感器 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET light_sensor_deinit(VOID_T); + +/** + * @brief 读取ADC原始值 + * @param[out] raw_value: ADC原始值指针 (0~4095) + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET light_sensor_read_raw(INT32_T *raw_value); + +/** + * @brief 读取电压值(mV) + * @param[out] voltage_mv: 电压值指针(毫伏) + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET light_sensor_read_voltage(INT32_T *voltage_mv); + +/** + * @brief 读取完整的传感器数据 + * @param[out] data: 传感器数据结构指针 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET light_sensor_read(LIGHT_SENSOR_DATA_T *data); + +/** + * @brief 获取光照强度百分比 + * @return 光照强度 0~100% + * @note 值越大表示光照越强 + */ +UINT8_T light_sensor_get_light_percent(VOID_T); + +/** + * @brief 启动周期性读取(独立线程) + * @param[in] interval_ms: 读取间隔(毫秒) + * @param[in] callback: 数据回调函数,可为NULL + * @return OPRT_OK: 成功, 其他: 失败 + */ +typedef VOID_T (*LIGHT_SENSOR_CB)(LIGHT_SENSOR_DATA_T *data); +OPERATE_RET light_sensor_start_periodic(UINT32_T interval_ms, LIGHT_SENSOR_CB callback); + +/** + * @brief 停止周期性读取 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET light_sensor_stop_periodic(VOID_T); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIGHT_SENSOR_H__ */ + diff --git a/examples/e-Paper/application_drivers/soil_moisture/soil_moisture.c b/examples/e-Paper/application_drivers/soil_moisture/soil_moisture.c new file mode 100644 index 000000000..d37da2d2d --- /dev/null +++ b/examples/e-Paper/application_drivers/soil_moisture/soil_moisture.c @@ -0,0 +1,323 @@ +/** + * @file soil_moisture.c + * @brief 土壤湿度传感器驱动实现 + * @details 使用TuyaOS ADC API读取土壤湿度传感器的模拟信号 + * + * 【硬件连接】 + * 传感器VCC ──── 3.3V + * 传感器GND ──── GND + * 传感器AO ──── GPIO12 (ADC输入) + * + * 【ADC读数与湿度关系】(典型特性) + * - 土壤干燥 → 传感器阻值高 → 输出电压高 → ADC值大 + * - 土壤湿润 → 传感器阻值低 → 输出电压低 → ADC值小 + * + * 【校准说明】 + * 1. 将传感器放在干燥空气中,记录ADC值作为 SOIL_MOISTURE_CAL_DRY + * 2. 将传感器插入湿润土壤或水中,记录ADC值作为 SOIL_MOISTURE_CAL_WET + * 3. 根据记录的值修改头文件中的校准参数 + * + * @version 1.0 + * @date 2025-01-18 + */ + +#include "soil_moisture.h" +#include "tkl_adc.h" +#include "tkl_pinmux.h" +#include "tal_system.h" +#include "tal_thread.h" +#include "tal_log.h" + +/*============================================================================*/ +/* 私有变量定义 */ +/*============================================================================*/ + +static BOOL_T sg_initialized = FALSE; +static UINT8_T sg_adc_channel = 0; +static THREAD_HANDLE sg_thread_handle = NULL; +static BOOL_T sg_thread_running = FALSE; +static BOOL_T sg_thread_stop_flag = FALSE; +static UINT32_T sg_read_interval_ms = 1000; +static SOIL_MOISTURE_CB sg_user_callback = NULL; +static UINT8_T sg_cached_moisture_percent = 50; + +/* 用于记录ADC值范围的统计变量 */ +static INT32_T sg_adc_min = 4095; +static INT32_T sg_adc_max = 0; +static UINT32_T sg_sample_count = 0; + +/*============================================================================*/ +/* 私有函数实现 */ +/*============================================================================*/ + +/** + * @brief 土壤湿度传感器周期性读取线程函数 + */ +static VOID_T _soil_moisture_thread(PVOID_T args) +{ + (VOID_T)args; + + TAL_PR_NOTICE("=============================================="); + TAL_PR_NOTICE("Soil moisture sensor thread started"); + TAL_PR_NOTICE("GPIO Pin: %d, ADC Channel: %d", SOIL_MOISTURE_GPIO_PIN, sg_adc_channel); + TAL_PR_NOTICE("Read interval: %d ms", sg_read_interval_ms); + TAL_PR_NOTICE("=============================================="); + TAL_PR_NOTICE("【校准模式】请观察以下日志确定ADC范围:"); + TAL_PR_NOTICE(" 1. 干燥状态(空气中)的ADC值 -> CAL_DRY"); + TAL_PR_NOTICE(" 2. 湿润状态(水中/湿土)的ADC值 -> CAL_WET"); + TAL_PR_NOTICE("=============================================="); + + sg_thread_running = TRUE; + + while (!sg_thread_stop_flag) { + SOIL_MOISTURE_DATA_T data; + + if (soil_moisture_read(&data) == OPRT_OK) { + sg_cached_moisture_percent = data.moisture_percent; + sg_sample_count++; + + /* 更新统计值 */ + if (data.raw_value < sg_adc_min) { + sg_adc_min = data.raw_value; + } + if (data.raw_value > sg_adc_max) { + sg_adc_max = data.raw_value; + } + + /* 详细日志输出,便于校准 */ + TAL_PR_NOTICE("--------------------------------------------"); + TAL_PR_NOTICE("[Soil Moisture #%d]", sg_sample_count); + TAL_PR_NOTICE(" RAW ADC : %d (范围: 0~4095)", data.raw_value); + TAL_PR_NOTICE(" Voltage : %d mV (范围: 0~2400)", data.voltage_mv); + TAL_PR_NOTICE(" Moisture : %d%% (未校准,仅参考)", data.moisture_percent); + TAL_PR_NOTICE(" ----------"); + TAL_PR_NOTICE(" 统计: MIN=%d, MAX=%d, Range=%d", + sg_adc_min, sg_adc_max, sg_adc_max - sg_adc_min); + + if (sg_user_callback) { + sg_user_callback(&data); + } + } + + tal_system_sleep(sg_read_interval_ms); + } + + TAL_PR_NOTICE("=============================================="); + TAL_PR_NOTICE("Soil moisture sensor thread exiting"); + TAL_PR_NOTICE("Final statistics: MIN=%d, MAX=%d, Samples=%d", + sg_adc_min, sg_adc_max, sg_sample_count); + TAL_PR_NOTICE("=============================================="); + + sg_thread_running = FALSE; +} + +/*============================================================================*/ +/* 公共API函数实现 */ +/*============================================================================*/ + +OPERATE_RET soil_moisture_init(VOID_T) +{ + OPERATE_RET ret; + TUYA_ADC_BASE_CFG_T adc_cfg; + + if (sg_initialized) { + TAL_PR_WARN("Soil moisture sensor already initialized"); + return OPRT_OK; + } + + /* GPIO引脚到ADC通道的映射 */ + INT32_T adc_func = tkl_io_pin_to_func(SOIL_MOISTURE_GPIO_PIN, TUYA_IO_TYPE_ADC); + if (adc_func < 0) { + TAL_PR_ERR("Failed to get ADC channel for GPIO %d, ret=%d", + SOIL_MOISTURE_GPIO_PIN, adc_func); + return OPRT_COM_ERROR; + } + + sg_adc_channel = adc_func & 0xFF; + TAL_PR_NOTICE("Soil moisture sensor using GPIO %d, ADC channel %d", + SOIL_MOISTURE_GPIO_PIN, sg_adc_channel); + + /* 重新配置 ADC_NUM_0,同时包含光敏电阻(ADC15)和土壤湿度(ADC14)两个通道 */ + memset(&adc_cfg, 0, sizeof(adc_cfg)); + adc_cfg.ch_list.data = BIT(sg_adc_channel) | BIT(15); /* ADC14 + ADC15 */ + adc_cfg.ch_nums = 2; + adc_cfg.width = SOIL_MOISTURE_ADC_WIDTH; + adc_cfg.type = TUYA_ADC_INNER_SAMPLE_VOL; + adc_cfg.mode = TUYA_ADC_CONTINUOUS; + adc_cfg.conv_cnt = 8; + + /* 先释放之前的配置,再重新初始化 */ + tkl_adc_deinit(TUYA_ADC_NUM_0); + + ret = tkl_adc_init(TUYA_ADC_NUM_0, &adc_cfg); + if (ret != OPRT_OK) { + TAL_PR_ERR("ADC init failed for soil moisture, ret=%d", ret); + return ret; + } + + sg_initialized = TRUE; + TAL_PR_NOTICE("Soil moisture sensor initialized successfully (ADC ch14+ch15)"); + + return OPRT_OK; +} + +OPERATE_RET soil_moisture_deinit(VOID_T) +{ + if (!sg_initialized) { + return OPRT_OK; + } + + soil_moisture_stop_periodic(); + /* 不释放ADC,因为是与光敏电阻共享的 */ + sg_initialized = FALSE; + + TAL_PR_NOTICE("Soil moisture sensor deinitialized"); + return OPRT_OK; +} + +OPERATE_RET soil_moisture_read_raw(INT32_T *raw_value) +{ + OPERATE_RET ret; + + if (!sg_initialized) { + TAL_PR_ERR("Soil moisture sensor not initialized"); + return OPRT_COM_ERROR; + } + + if (raw_value == NULL) { + return OPRT_INVALID_PARM; + } + + ret = tkl_adc_read_single_channel(TUYA_ADC_NUM_0, sg_adc_channel, raw_value); + if (ret != OPRT_OK) { + TAL_PR_ERR("ADC read failed, ret=%d", ret); + return ret; + } + + return OPRT_OK; +} + +OPERATE_RET soil_moisture_read_voltage(INT32_T *voltage_mv) +{ + OPERATE_RET ret; + INT32_T raw_value; + + if (voltage_mv == NULL) { + return OPRT_INVALID_PARM; + } + + ret = soil_moisture_read_raw(&raw_value); + if (ret != OPRT_OK) { + return ret; + } + + *voltage_mv = (raw_value * SOIL_MOISTURE_REF_VOLTAGE_MV) / SOIL_MOISTURE_ADC_MAX; + return OPRT_OK; +} + +OPERATE_RET soil_moisture_read(SOIL_MOISTURE_DATA_T *data) +{ + OPERATE_RET ret; + + if (data == NULL) { + return OPRT_INVALID_PARM; + } + + /* 读取ADC原始值 */ + ret = soil_moisture_read_raw(&data->raw_value); + if (ret != OPRT_OK) { + return ret; + } + + /* 计算电压值(mV) */ + data->voltage_mv = (data->raw_value * SOIL_MOISTURE_REF_VOLTAGE_MV) / SOIL_MOISTURE_ADC_MAX; + + /* ============ 校准测试模式 ============ + * 暂时禁用校准,直接输出原始值 + * 请记录: + * 1. 空气中的 RAW ADC 值 + * 2. 水中的 RAW ADC 值 + * 然后告诉我这两个值,我来设置正确的校准参数 + */ + INT32_T percent; + + /* 未校准:简单映射到0-100%,仅供参考 */ + percent = (data->raw_value * 100) / SOIL_MOISTURE_ADC_MAX; + + /* 边界检查 */ + if (percent < 0) percent = 0; + if (percent > 100) percent = 100; + + data->moisture_percent = (UINT8_T)percent; + + return OPRT_OK; +} + +UINT8_T soil_moisture_get_percent(VOID_T) +{ + return sg_cached_moisture_percent; +} + +OPERATE_RET soil_moisture_start_periodic(UINT32_T interval_ms, SOIL_MOISTURE_CB callback) +{ + OPERATE_RET ret; + + THREAD_CFG_T thread_cfg = { + .priority = THREAD_PRIO_2, + .stackDepth = 2048, + .thrdname = "soil_moisture" + }; + + if (!sg_initialized) { + ret = soil_moisture_init(); + if (ret != OPRT_OK) { + return ret; + } + } + + if (sg_thread_running) { + TAL_PR_WARN("Soil moisture periodic read already running"); + return OPRT_OK; + } + + /* 重置统计变量 */ + sg_adc_min = 4095; + sg_adc_max = 0; + sg_sample_count = 0; + + sg_read_interval_ms = (interval_ms > 0) ? interval_ms : 1000; + sg_user_callback = callback; + sg_thread_stop_flag = FALSE; + + ret = tal_thread_create_and_start(&sg_thread_handle, NULL, NULL, + _soil_moisture_thread, NULL, &thread_cfg); + if (ret != OPRT_OK) { + TAL_PR_ERR("Failed to create soil moisture thread, ret=%d", ret); + return ret; + } + + return OPRT_OK; +} + +OPERATE_RET soil_moisture_stop_periodic(VOID_T) +{ + if (!sg_thread_running) { + return OPRT_OK; + } + + sg_thread_stop_flag = TRUE; + + UINT32_T wait_count = 0; + while (sg_thread_running && wait_count < 50) { + tal_system_sleep(100); + wait_count++; + } + + if (sg_thread_handle) { + tal_thread_delete(sg_thread_handle); + sg_thread_handle = NULL; + } + + TAL_PR_NOTICE("Soil moisture periodic read stopped"); + return OPRT_OK; +} diff --git a/examples/e-Paper/application_drivers/soil_moisture/soil_moisture.h b/examples/e-Paper/application_drivers/soil_moisture/soil_moisture.h new file mode 100644 index 000000000..08c036ab4 --- /dev/null +++ b/examples/e-Paper/application_drivers/soil_moisture/soil_moisture.h @@ -0,0 +1,129 @@ +/** + * @file soil_moisture.h + * @brief 土壤湿度传感器驱动模块 + * @details 使用ADC读取土壤湿度传感器的模拟信号,获取土壤湿度 + * @version 1.0 + * @date 2025-01-18 + */ + +#ifndef __SOIL_MOISTURE_H__ +#define __SOIL_MOISTURE_H__ + +#include "tuya_cloud_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================ 配置参数 ====================================*/ + +/** + * @brief 土壤湿度传感器连接的GPIO引脚 + * @note GPIO 12 对应 ADC通道14 + */ +#ifndef SOIL_MOISTURE_GPIO_PIN +#define SOIL_MOISTURE_GPIO_PIN 12 +#endif + +/** + * @brief ADC采样位宽(12位 = 0~4095) + */ +#define SOIL_MOISTURE_ADC_WIDTH 12 + +/** + * @brief ADC最大值(12位) + */ +#define SOIL_MOISTURE_ADC_MAX 4095 + +/** + * @brief 参考电压(mV) + * @note T5的ADC参考电压约为2.4V + */ +#define SOIL_MOISTURE_REF_VOLTAGE_MV 2400 + +/** + * @brief 校准参数 - 干燥时的ADC值(已校准) + * @note 您的传感器特性:干燥时ADC值低,湿润时ADC值高 + * 空气中ADC约386,设为380作为0%基准 + */ +#define SOIL_MOISTURE_CAL_DRY 380 // 干燥时的ADC值(对应0%) + +/** + * @brief 校准参数 - 湿润时的ADC值(已校准) + * @note 水中ADC约400,设为400作为100%基准 + */ +#define SOIL_MOISTURE_CAL_WET 400 // 湿润时的ADC值(对应100%) + +/*============================ 数据结构 ====================================*/ + +/** + * @brief 土壤湿度传感器数据结构 + */ +typedef struct { + INT32_T raw_value; /**< ADC原始值 (0~4095) */ + INT32_T voltage_mv; /**< 电压值 (mV) */ + UINT8_T moisture_percent; /**< 湿度百分比 (0~100%) */ +} SOIL_MOISTURE_DATA_T; + +/*============================ API函数声明 =================================*/ + +/** + * @brief 初始化土壤湿度传感器 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET soil_moisture_init(VOID_T); + +/** + * @brief 反初始化土壤湿度传感器 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET soil_moisture_deinit(VOID_T); + +/** + * @brief 读取ADC原始值 + * @param[out] raw_value: ADC原始值指针 (0~4095) + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET soil_moisture_read_raw(INT32_T *raw_value); + +/** + * @brief 读取电压值(mV) + * @param[out] voltage_mv: 电压值指针(毫伏) + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET soil_moisture_read_voltage(INT32_T *voltage_mv); + +/** + * @brief 读取完整的传感器数据 + * @param[out] data: 传感器数据结构指针 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET soil_moisture_read(SOIL_MOISTURE_DATA_T *data); + +/** + * @brief 获取土壤湿度百分比 + * @return 湿度 0~100% + * @note 值越大表示土壤越湿润 + */ +UINT8_T soil_moisture_get_percent(VOID_T); + +/** + * @brief 启动周期性读取(独立线程) + * @param[in] interval_ms: 读取间隔(毫秒) + * @param[in] callback: 数据回调函数,可为NULL + * @return OPRT_OK: 成功, 其他: 失败 + */ +typedef VOID_T (*SOIL_MOISTURE_CB)(SOIL_MOISTURE_DATA_T *data); +OPERATE_RET soil_moisture_start_periodic(UINT32_T interval_ms, SOIL_MOISTURE_CB callback); + +/** + * @brief 停止周期性读取 + * @return OPRT_OK: 成功, 其他: 失败 + */ +OPERATE_RET soil_moisture_stop_periodic(VOID_T); + +#ifdef __cplusplus +} +#endif + +#endif /* __SOIL_MOISTURE_H__ */ diff --git a/examples/e-Paper/tuya_app_main.c b/examples/e-Paper/tuya_app_main.c new file mode 100644 index 000000000..7b7b23fca --- /dev/null +++ b/examples/e-Paper/tuya_app_main.c @@ -0,0 +1,716 @@ +/** + * @file tuya_app_main.c + * @author www.tuya.com + * @brief tuya_app_main module is used to + * @version 0.1 + * @date 2022-10-28 + * + * @copyright Copyright (c) tuya.inc 2022 + * + */ + +#include +#include +#include + +#include "tuya_cloud_types.h" +#include "tuya_device_cfg.h" +#include "tuya_svc_netmgr.h" +#if defined(ENABLE_WIFI_SERVICE) && (ENABLE_WIFI_SERVICE == 1) +#include "tuya_iot_wifi_api.h" +#endif +#if defined(ENABLE_WIRED) && (ENABLE_WIRED == 1) +#include "tuya_iot_base_api.h" +#endif +#include "tuya_iot_com_api.h" +#include "tuya_ws_db.h" + +#include "tal_system.h" +#include "tal_log.h" +#include "base_event.h" +#include "mf_test.h" +#include "mqc_app.h" +#if defined(ENABLE_LWIP) && (ENABLE_LWIP == 1) +#include "lwip_init.h" +#endif + +#include "tal_uart.h" +#include "tuya_ai_toy.h" +#include "tuya_device_cfg.h" +#include "tuya_ai_battery.h" + +// e-Paper 墨水屏时钟显示 +#include "epd_clock.h" +#include "epd_pet.h" // 虚拟电子宠物 + +#if defined(T5AI_BOARD_CELLULAR) && (T5AI_BOARD_CELLULAR == 1) +#include "tal_cellular.h" +#include "tuya_svc_cellular.h" +#include "tuya_iot_internal_api.h" +#endif + +/*********************************************************** +************************macro define************************ +***********************************************************/ + +#define PID "nhjetawhwodzbki6" // TUYA T5AI-EVB xiaozhi box +// #define PID "zbwbmdyemfa4ipkw" // AI-Chat Multi-Mode PID +// #define PID "yr4ybissxrezmu2u" // AI-Chat Demo PID +// #define PID "a3gahyytd3g8oatg" // T5AI_BOARD_CELLULAR +// #define PID "y0k6ydkxphvv5g7a" // AI-ROBOT-DOG Demo PID + +// #define UUID "your uuid" +// #define AUTHKEY "your authkey" + +/*********************************************************** +***********************typedef define*********************** +***********************************************************/ + + +/*********************************************************** +********************function declaration******************** +***********************************************************/ +extern void tuya_ble_enable_debug(bool enable); +extern VOID_T tuya_ai_camera_init(VOID_T); + +/*********************************************************** +***********************variable define********************** +***********************************************************/ +/* app thread handle */ +STATIC THREAD_HANDLE ty_app_thread = NULL; + +#if defined(T5AI_BOARD_CELLULAR ) && (T5AI_BOARD_CELLULAR == 1) +#define TI_META_SAVE "tuya.device.meta.save" +BOOL_T is_cellular_ccid_reported = FALSE; +#endif +/*********************************************************** +***********************function define********************** +***********************************************************/ + +#if (defined(T5AI_BOARD_CELLULAR) && (T5AI_BOARD_CELLULAR == 1)) +// qrcode打印 +extern INT_T qrcode_exec(INT_T argc, CHAR_T **argv); +STATIC INT_T __qrcode_printf(CHAR_T *msg) +{ + CHAR_T *qrcode_argv[] = { + "qrcode_exec", "-m", "3", "-t", "ansiutf8", msg + }; + + return qrcode_exec(sizeof(qrcode_argv)/sizeof(qrcode_argv[0]), qrcode_argv); +} + +// TuyaOS获取到短链接之后调用此接口输出qrcode打印 +STATIC VOID __qrcode_active_shourturl_cb(CONST CHAR_T *shorturl) +{ + if (NULL == shorturl) { + return; + } + + TAL_PR_DEBUG("shorturl : %s", shorturl); + // ty_cJSON *item = ty_cJSON_Parse(shorturl); + // __qrcode_printf(ty_cJSON_GetObjectItem(item, "shortUrl")->valuestring); + // ty_cJSON_Delete(item); + + return; +} + +OPERATE_RET httpc_put_iccid(IN CHAR_T iccid[21]) +{ + OPERATE_RET op_ret = OPRT_OK; + INT_T buffer_len = 72; + CHAR_T *post_data = Malloc(buffer_len); + if(post_data == NULL) + { + TAL_PR_ERR("Malloc Fail"); + return OPRT_MALLOC_FAILED; + } + + memset(post_data, 0, buffer_len); + snprintf(post_data, buffer_len, "{\"metas\":{\"catIccId\":\"%s\"}}", iccid); + + op_ret = iot_httpc_common_post_simple(TI_META_SAVE, "1.0",post_data, NULL,NULL); + Free(post_data); + return op_ret; +} + +OPERATE_RET cellular_http_upload_iccid(VOID_T) +{ + OPERATE_RET op_ret; + CHAR_T iccid[TAL_CELLULAR_CCID_LEN+1] = { 0 }; + + if (is_cellular_ccid_reported) { + return OPRT_OK; + } + + op_ret = tal_cellular_get_ccid(iccid); + if (OPRT_OK != op_ret) { + return OPRT_COM_ERROR; + } + + if ('\0' == iccid[0]) { + return OPRT_COM_ERROR; + } + + op_ret = httpc_put_iccid(iccid); + if (OPRT_OK != op_ret) { + return OPRT_COM_ERROR; + } + + is_cellular_ccid_reported = TRUE; + TAL_PR_NOTICE("cellular report ccid %s to Tuya cloud", iccid); + return op_ret; +} +#endif + +/** + * @brief SOC device upgrade entry + * + * @param[in] fw: firmware info + * + * @return OPRT_OK on success. Others on error, please refer to "tuya_error_code.h". + */ +STATIC OPERATE_RET __soc_dev_rev_upgrade_info_cb(IN CONST FW_UG_S *fw) +{ + TAL_PR_DEBUG("SOC Rev Upgrade Info"); + TAL_PR_DEBUG("fw->tp:%d", fw->tp); + TAL_PR_DEBUG("fw->fw_url:%s", fw->fw_url); + TAL_PR_DEBUG("fw->fw_hmac:%s", fw->fw_hmac); + TAL_PR_DEBUG("fw->sw_ver:%s", fw->sw_ver); + TAL_PR_DEBUG("fw->file_size:%u", fw->file_size); + + return OPRT_OK; +} + +/** + * @brief SOC device cloud state change callback + * + * @param[in] status: current status + * + * @return none + */ +STATIC VOID_T __soc_dev_status_changed_cb(IN CONST GW_STATUS_E status) +{ + TAL_PR_DEBUG("SOC TUYA-Cloud Status:%d", status); + return; +} + + +/** + * @brief SOC device DP query entry + * + * @param[in] dp_qry: DP query list + * + * @return none + */ +STATIC VOID_T __soc_dev_dp_query_cb(IN CONST TY_DP_QUERY_S *dp_qry) +{ + UINT32_T index = 0; + + TAL_PR_DEBUG("SOC Rev DP Query Cmd"); + if (dp_qry->cid != NULL) { + TAL_PR_ERR("soc not have cid.%s", dp_qry->cid); + } + + if (dp_qry->cnt == 0) { + TAL_PR_DEBUG("soc rev all dp query"); + } else { + TAL_PR_DEBUG("soc rev dp query cnt:%d", dp_qry->cnt); + for (index = 0; index < dp_qry->cnt; index++) { + TAL_PR_DEBUG("rev dp query:%d", dp_qry->dpid[index]); + // UserTODO + } + } + + return; +} + +/** + * @brief SOC device format command data delivery entry + * + * @param[in] dp: obj dp info + * + * @return none + */ +STATIC VOID_T __soc_dev_obj_dp_cmd_cb(IN CONST TY_RECV_OBJ_DP_S *dp) +{ + + TAL_PR_DEBUG("SOC Rev DP Obj Cmd t1:%d t2:%d CNT:%u", dp->cmd_tp, dp->dtt_tp, dp->dps_cnt); + + // invoke ai toy dp command callback + ty_ai_toy_dp_cmd_cb(dp); + + return; +} + +/** + * @brief SOC device transparently transmits command data delivery entry + * + * @param[in] dp: raw dp info + * + * @return none + */ +STATIC VOID_T __soc_dev_raw_dp_cmd_cb(IN CONST TY_RECV_RAW_DP_S *dp) +{ + TAL_PR_DEBUG("SOC Rev DP Raw Cmd t1:%d t2:%d dpid:%d len:%u", dp->cmd_tp, dp->dtt_tp, dp->dpid, dp->len); + + return; +} + +/** + * @brief app process when device reset + * + * @param[in] type: gateway reset type + * + * @return none + */ +STATIC VOID_T __soc_dev_reset_inform_cb(GW_RESET_TYPE_E type) +{ + TAL_PR_DEBUG("reset type %d", type); + + return; +} + +/** + * @brief SOC external network status change callback + * + * @param[in/out] data + * @return STATIC + */ +STATIC OPERATE_RET __soc_dev_net_status_cb(VOID *data) +{ + STATIC BOOL_T s_syn_all_status = FALSE; + + TAL_PR_DEBUG("network status changed!"); + if (tuya_svc_netmgr_linkage_is_up(LINKAGE_TYPE_DEFAULT)) { + TAL_PR_DEBUG("linkage status changed, current status is up"); + if (get_mqc_conn_stat()) { + TAL_PR_DEBUG("mqtt is connected!"); + + if (FALSE == s_syn_all_status) { + s_syn_all_status = TRUE; + } + // UserTODO +#if defined(T5AI_BOARD_CELLULAR) && (T5AI_BOARD_CELLULAR == 1) + cellular_http_upload_iccid(); +#endif + } + } else { + TAL_PR_DEBUG("linkage status changed, current status is down"); + + // UserTODO + } + + return OPRT_OK; +} + +STATIC OPERATE_RET __soc_dev_reset_cb(VOID *data) +{ + __soc_dev_reset_inform_cb((GW_RESET_TYPE_E)data); + tal_system_reset(); + return OPRT_OK; +} + +/** + * @brief mf uart init + * + * @param[in] baud: Baud rate + * @param[in] bufsz: uart receive buffer size + * + * @return none + */ +VOID mf_uart_init_callback(UINT_T baud, UINT_T bufsz) +{ + TAL_UART_CFG_T cfg; + memset(&cfg, 0, sizeof(TAL_UART_CFG_T)); + cfg.base_cfg.baudrate = baud; + cfg.base_cfg.databits = TUYA_UART_DATA_LEN_8BIT; + cfg.base_cfg.parity = TUYA_UART_PARITY_TYPE_NONE; + cfg.base_cfg.stopbits = TUYA_UART_STOP_LEN_1BIT; + cfg.rx_buffer_size = bufsz; + + tal_uart_init(TUYA_UART_NUM_0, &cfg); + + return; +} + +/** + * @brief mf uart free + * + * @param[in] none + * + * @return none + */ +VOID mf_uart_free_callback(VOID) +{ + tal_uart_deinit(TUYA_UART_NUM_0); + return; +} + +/** + * @brief mf uart send function + * + * @param[in] data: send data + * @param[in] len: send data length + * + * @return none + */ +VOID mf_uart_send_callback(IN BYTE_T *data, IN CONST UINT_T len) +{ + tal_uart_write(TUYA_UART_NUM_0, data, len); + return; +} + +/** + * @brief mf uart receive function + * + * @param[in] buf: receive buffer + * @param[in] len: receive buffer max length + * + * @return receive data length + */ +UINT_T mf_uart_recv_callback(OUT BYTE_T *buf, IN CONST UINT_T len) +{ + return tal_uart_read(TUYA_UART_NUM_0, buf, len); +} + +/** + * @brief Product test callback function + * + * @param[in] cmd: Command + * @param[in] data: data + * @param[out] ret_data: Resulting data + * @param[out] ret_len: Resulting data length + * + * @return OPRT_OK on success. Others on error, please refer to "tuya_error_code.h". + */ +OPERATE_RET mf_user_product_test_callback(USHORT_T cmd, UCHAR_T *data, UINT_T len, OUT UCHAR_T **ret_data, OUT USHORT_T *ret_len) +{ + /* USER todo */ + //gpio test refer to tuyaos_demo_examples -> src/examples/service_mf_test + + return OPRT_OK; +} + +/** + * @brief mf configure write callback functions + * + * @param[in] none + * + * @return none + */ +VOID mf_user_callback(VOID) +{ + return ; +} + +/** + * @brief Callback function before entering the production test + * + * @param[in] none + * + * @return none + */ +VOID mf_user_enter_mf_callback(VOID) +{ + return ; +} + +/** + * @brief SOC device initialization + * + * @param[in] none + * + * @return OPRT_OK on success. Others on error, please refer to "tuya_error_code.h". + */ +OPERATE_RET __soc_device_init(VOID_T) +{ + OPERATE_RET rt = OPRT_OK; + + ty_subscribe_event(EVENT_RESET, "quickstart", __soc_dev_reset_cb, SUBSCRIBE_TYPE_EMERGENCY); + ty_subscribe_event(EVENT_LINK_UP, "quickstart", __soc_dev_net_status_cb, SUBSCRIBE_TYPE_NORMAL); + ty_subscribe_event(EVENT_LINK_DOWN, "quickstart", __soc_dev_net_status_cb, SUBSCRIBE_TYPE_NORMAL); + ty_subscribe_event(EVENT_MQTT_CONNECTED, "quickstart", __soc_dev_net_status_cb, SUBSCRIBE_TYPE_NORMAL); + +#if (defined(UUID) && defined(AUTHKEY)) +#ifndef ENABLE_KV_FILE + ws_db_init_mf(); +#endif + /* Set authorization information + * Note that if you use the default authorization information of the code, there may be problems of multiple users and conflicts, + * so try to use all the authorizations purchased from the tuya iot platform. + * Buying guide: https://developer.tuya.com/cn/docs/iot/lisence-management?id=Kb4qlem97idl0. + * You can also apply for two authorization codes for free in the five-step hardware development stage of the Tuya IoT platform. + * Authorization information can also be written through the production testing tool. + * When the production testing function is started and the authorization is burned with the Tuya Cloud module tool, + * please comment out this piece of code. + */ +#ifdef ENABLE_WIFI_SERVICE + WF_GW_PROD_INFO_S prod_info = {UUID, AUTHKEY}; + TUYA_CALL_ERR_RETURN(tuya_iot_set_wf_gw_prod_info(&prod_info)); +#else + GW_PROD_INFO_S prod_info = {UUID, AUTHKEY}; + TUYA_CALL_ERR_RETURN(tuya_iot_set_gw_prod_info(&prod_info)); +#endif + +#else + /*authorization is burned with the Tuya Cloud module tool + *If you want to get the specific details, such as GPIO TEST, + *please refer to the tuyaos_demo_examples -> src/examples/service_mf_test.*/ + MF_IMPORT_INTF_S intf = {0}; + + intf.uart_init = mf_uart_init_callback; + intf.uart_free = mf_uart_free_callback; + intf.uart_send = mf_uart_send_callback; + intf.uart_recv = mf_uart_recv_callback; + + intf.mf_user_product_test = mf_user_product_test_callback; + intf.user_callback = mf_user_callback; + intf.user_enter_mf_callback = mf_user_enter_mf_callback; + + TUYA_CALL_ERR_RETURN(mf_init(&intf, APP_BIN_NAME, USER_SW_VER, TRUE)); + + TAL_PR_NOTICE("mf_init successfully"); +#endif + + // TODO: OEM firmware: need recovery para form json config + TY_AI_TOY_CFG_T ai_toy_cfg = TY_AI_TOY_CFG_DEFAULT; + +#if defined(T5AI_BOARD_EVB) && T5AI_BOARD_EVB == 1 + ty_ai_toy_mf_test_init(&ai_toy_cfg); + TAL_PR_NOTICE("ty_ai_toy_mf_test_init"); +#endif + +#if (defined(ENABLE_PRODUCT_AUTOTEST) && (ENABLE_PRODUCT_AUTOTEST == 1)) + if (prodtest_ssid_scan(500)) { + TAL_PR_NOTICE("prodtest_ssid_scan"); + return; + } + TAL_PR_NOTICE("prodtest_ssid_scan ignored"); +#endif + + // set wifi dtim 3 + tal_cpu_set_lp_mode(TRUE); + tal_wifi_set_lps_dtim(3); + tal_cpu_lp_disable(); + tal_wifi_lp_disable(); + + /* Initialize TuyaOS product information */ + TY_IOT_CBS_S iot_cbs = {0}; + iot_cbs.gw_status_cb = __soc_dev_status_changed_cb; + iot_cbs.gw_ug_cb = __soc_dev_rev_upgrade_info_cb; + iot_cbs.gw_reset_cb = __soc_dev_reset_inform_cb; + iot_cbs.dev_obj_dp_cb = __soc_dev_obj_dp_cmd_cb; + iot_cbs.dev_raw_dp_cb = __soc_dev_raw_dp_cmd_cb; + iot_cbs.dev_dp_query_cb = __soc_dev_dp_query_cb; +#if (defined(T5AI_BOARD_CELLULAR) && (T5AI_BOARD_CELLULAR == 1)) + iot_cbs.active_shorturl = __qrcode_active_shourturl_cb; +#endif +#ifdef ENABLE_WIFI_SERVICE +#ifdef PID + TUYA_CALL_ERR_RETURN(tuya_iot_wf_soc_dev_init(GWCM_OLD, WF_START_AP_FIRST, &iot_cbs, PID, USER_SW_VER)); +#else + tuya_iot_oem_set(TRUE); + TUYA_CALL_ERR_RETURN(tuya_iot_wf_soc_dev_init_param(GWCM_OLD, WF_START_AP_FIRST, &iot_cbs, GFW_FIRMWARE_KEY, GFW_FIRMWARE_KEY, USER_SW_VER)); +#endif +#ifdef ENABLE_WIRED + // init wired linkage + TUYA_CALL_ERR_RETURN(tuya_svc_wired_init()); +#endif +#else + TUYA_CALL_ERR_RETURN(tuya_iot_soc_init(&iot_cbs, PID, USER_SW_VER)); +#endif + + tuya_ble_enable_debug(false); + + /* AI toy initialization */ + TUYA_CALL_ERR_RETURN(log_seq_set_enable(FALSE)); // disable log sequence, 减少flash写入操作 + TUYA_CALL_ERR_RETURN(ty_ai_toy_init(&ai_toy_cfg)); + + return 0; +} + +#if defined(T5AI_BOARD_CELLULAR) && (T5AI_BOARD_CELLULAR == 1) +VOID pre_device_init(VOID) +{ + tuya_svc_cellular_init(); + mqc_set_connection_switch(TRUE); + tuya_svc_netcfg_qrcode_init(); + + LINKAGE_TYPE_E linkage_pri[LINKAGE_TYPE_MAX] = { 0 }; + uint8_t cnt = 0; + linkage_pri[cnt++] = LINKAGE_TYPE_WIRED; + linkage_pri[cnt++] = LINKAGE_TYPE_WIFI; + linkage_pri[cnt] = LINKAGE_TYPE_CAT1; + tuya_svc_netmgr_linkage_set_priority(linkage_pri, cnt); +} + +STATIC VOID_T boot_cellular_module(VOID_T) +{ + TUYA_GPIO_BASE_CFG_T cfg; + + memset(&cfg, 0, sizeof(cfg)); + cfg.direct = TUYA_GPIO_OUTPUT; + cfg.level = TUYA_GPIO_LEVEL_HIGH; + + tkl_gpio_init(TUYA_GPIO_NUM_24, &cfg); + tkl_gpio_write(TUYA_GPIO_NUM_24, TUYA_GPIO_LEVEL_HIGH); + + memset(&cfg, 0, sizeof(cfg)); + cfg.direct = TUYA_GPIO_OUTPUT; + cfg.level = TUYA_GPIO_LEVEL_LOW; + + tkl_gpio_init(TUYA_GPIO_NUM_9, &cfg); + tkl_gpio_write(TUYA_GPIO_NUM_9, TUYA_GPIO_LEVEL_LOW); +} +#endif + +STATIC VOID_T user_main(VOID_T) +{ + OPERATE_RET rt = OPRT_OK; + +#if defined(T5AI_BOARD_CELLULAR) && (T5AI_BOARD_CELLULAR == 1) + boot_cellular_module(); +#endif + + /* Initialization, because DB initialization takes a long time, + * which affects the startup efficiency of some devices, + * so special processing is performed during initialization to delay initialization of DB + */ +#if OPERATING_SYSTEM == SYSTEM_LINUX + rt= system("mkdir -p ./tuya_db_files/"); + TUYA_CALL_ERR_LOG(tuya_iot_init_params("./tuya_db_files/", NULL)); +#else + TY_INIT_PARAMS_S init_param = {0}; + init_param.init_db = TRUE; + strcpy(init_param.sys_env, TARGET_PLATFORM); + TUYA_CALL_ERR_LOG(tuya_iot_init_params(NULL, &init_param)); +#endif + + TAL_PR_NOTICE("sdk_info:%s", tuya_iot_get_sdk_info()); /* print SDK information */ + TAL_PR_NOTICE("name:%s:%s", APP_BIN_NAME, USER_SW_VER); /* print the firmware name and version */ + TAL_PR_NOTICE("firmware compiled at %s %s", __DATE__, __TIME__); /* print firmware compilation time */ + TAL_PR_NOTICE("system reset reason:[%d]", tal_system_get_reset_reason(NULL)); /* print system reboot causes */ + + tal_log_set_manage_attr(TAL_LOG_LEVEL_DEBUG); + // tal_log_set_manage_attr(TAL_LOG_LEVEL_INFO); + +#if defined(ENABLE_TUYA_UI) && ENABLE_TUYA_UI == 1 + tuya_ai_display_init(); +#endif + +#if defined(ENABLE_TUYA_CAMERA) && ENABLE_TUYA_CAMERA == 1 + tuya_ai_camera_init(); +#endif + + /* Initialization device */ + TAL_PR_DEBUG("device_init in"); + TUYA_CALL_ERR_LOG(__soc_device_init()); + +#if defined(TUYA_AI_TOY_BATTERY_ENABLE) && (TUYA_AI_TOY_BATTERY_ENABLE == 1) + TUYA_CALL_ERR_LOG(tuya_ai_toy_battery_init()); +#endif + + /* e-Paper 墨水屏时钟显示初始化 */ + TAL_PR_NOTICE("Starting e-Paper clock display..."); + TUYA_CALL_ERR_LOG(epd_clock_start()); + + /* e-Paper 虚拟宠物初始化 */ + TAL_PR_NOTICE("Starting virtual pet..."); + TUYA_CALL_ERR_LOG(epd_pet_start()); + +#if defined(T5AI_BOARD_CELLULAR) && (T5AI_BOARD_CELLULAR == 1) + TAL_CELLULAR_BASE_CFG_T cfg; + memset(&cfg, 0, sizeof(cfg)); + strcpy(cfg.apn, ""); + tal_cellular_init(&cfg); +#endif + + return; +} + +int reset_netconfig_init(VOID); +/** +* @brief task thread +* +* @param[in] arg:Parameters when creating a task +* @return none +*/ +STATIC VOID_T tuya_app_thread(VOID_T *arg) +{ + tuya_base_utilities_init(); +#if defined(T5AI_BOARD_CELLULAR) && (T5AI_BOARD_CELLULAR == 1) + pre_device_init(); + #endif + /* Initialization LWIP first!!! */ +#if defined(ENABLE_LWIP) && (ENABLE_LWIP == 1) + TUYA_LwIP_Init(); +#endif + + reset_netconfig_init(); + + user_main(); + + tal_thread_delete(ty_app_thread); + ty_app_thread = NULL; +} + +/** + * @brief user entry function + * + * @param[in] none: + * + * @return none + */ +#if OPERATING_SYSTEM == SYSTEM_LINUX +INT_T main(INT_T argc, CHAR_T **argv) +#else +VOID_T tuya_app_main(VOID) +#endif +{ + extern VOID_T tkl_system_psram_malloc_force_set(BOOL_T enable); + tkl_system_psram_malloc_force_set(TRUE); + + THREAD_CFG_T thrd_param = {4096, THREAD_PRIO_2, "tuya_app_main"}; + tal_thread_create_and_start(&ty_app_thread, NULL, NULL, tuya_app_thread, NULL, &thrd_param); +#if OPERATING_SYSTEM == SYSTEM_LINUX + while (1) { + tal_system_sleep(1000); + } +#endif +} + +/* uncomment following comment to disable asr or enbale ty vad */ +#if 1 +/* + * @brief tuya_asr_enable + * @param none + * + * @return BOOL_T return TRUE if enable tuya KWS, FALSE if enable user KWS or disable KWS. + * @note this function is weak, user can override it + * if user want to disable asr, just return FALSE + */ +BOOL_T tuya_asr_enable(VOID_T) +{ + return TRUE; +} + +/* + * @brief tuya_vad_enable + * @param none + * + * @return uint8_t return 1 if enable ty vad + * @note this function is weak, user can override it + * if user want to disable vad, just return FALSE + */ +uint8_t tuya_vad_enable(void) +{ + return FALSE; +} + +VOID _tuya_asr_init(VOID_T) +{ + extern int tuya_wakeupword_default_init(void); //! 默认启用涂鸦唤醒算法 + tuya_wakeupword_default_init(); +} + +#endif