feat(fs): add support for memory-mapped files (#4462)

Co-authored-by: Zoltan Janosy <zjanosy@fishman.com>
Co-authored-by: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
This commit is contained in:
Zoltan Janosy 2023-08-31 13:00:26 +02:00 committed by GitHub
parent 6d389ce979
commit ca54d127c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 1695 additions and 50 deletions

View File

@ -11,6 +11,7 @@ LVG has built in support for:
- STDIO (Linux and Windows using C standard function .e.g fopen, fread)
- POSIX (Linux and Windows using POSIX function .e.g open, read)
- WIN32 (Windows using Win32 API function .e.g CreateFileA, ReadFile)
- MEMFS (read a file from a memory buffer)
You still need to provide the drivers and libraries, this extension
provides only the bridge between FATFS, STDIO, POSIX, WIN32 and LVGL.
@ -30,6 +31,23 @@ Cached reading is also supported if ``LV_FS_..._CACHE_SIZE`` is set to
not ``0`` value. :c:func:`lv_fs_read` caches this size of data to lower the
number of actual reads from the storage.
To use the memory-mapped file emulation an ``lv_fs_path_ex_t`` object must be
created and initialized. This object can be passed to :c:func:`lv_fs_open()` as
the file name:
.. code:: c
lv_fs_path_ex_t mempath;
lv_fs_file_t file;
uint8_t *buffer;
uint32_t size;
/*Initialize buffer*/
...
lv_fs_make_path_from_buffer(&mempath, LV_FS_MEMFS_LETTER, (void*)buffer, size);
lv_fs_res_t res = lv_fs_open(&file, (const char *)&mempath, LV_FS_MODE_RD);
API
***

View File

@ -287,6 +287,35 @@ Example
/*Free the font if not required anymore*/
lv_font_free(my_font);
Load a font from a memory buffer at run-time
******************************************
:cpp:func:`lv_font_load_from_buffer` can be used to load a font from a memory buffer.
This function may be useful to load a font from an external file system, which is not
supported by LVGL. The font needs to be in the same format as if it were loaded from a file.
:note: To load a font from a buffer `LVGL's filesystem </overview/file-system>`__
needs to be enabled and the MEMFS driver must be added.
Example
.. code:: c
lv_font_t * my_font;
uint8_t *buf;
uint32_t bufsize;
/*Read font file into the buffer from the external file system*/
...
/*Load font from the buffer*/
my_font = lv_font_load_from_buffer((void *)buf, buf));
/*Use the font*/
/*Free the font if not required anymore*/
lv_font_free(my_font);
Add a new font engine
*********************

View File

@ -569,6 +569,12 @@
#define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/
#endif
/*API for memory-mapped file access. */
#define LV_USE_FS_MEMFS 0
#if LV_USE_FS_MEMFS
#define LV_FS_MEMFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#endif
/*PNG decoder library*/
#define LV_USE_PNG 0

View File

@ -1,4 +1,4 @@
/**
/**
* @file lv_obj.c
*
*/

View File

@ -78,11 +78,7 @@ static unsigned int read_bits(bit_iterator_t * it, int n_bits, lv_fs_res_t * res
* GLOBAL FUNCTIONS
**********************/
/**
* Loads a `lv_font_t` object from a binary font file
* @param font_name filename where the font file is located
* @return a pointer to the font or NULL in case of error
*/
lv_font_t * lv_font_load(const char * font_name)
{
lv_fs_file_t file;
@ -110,10 +106,16 @@ lv_font_t * lv_font_load(const char * font_name)
return font;
}
/**
* Frees the memory allocated by the `lv_font_load()` function
* @param font lv_font_t object created by the lv_font_load function
*/
#if LV_USE_FS_MEMFS
lv_font_t * lv_font_load_from_buffer(void * buffer, uint32_t size)
{
lv_fs_path_ex_t mempath;
lv_fs_make_path_from_buffer(&mempath, LV_FS_MEMFS_LETTER, buffer, size);
return lv_font_load((const char *)&mempath);
}
#endif
void lv_font_free(lv_font_t * font)
{
if(NULL != font) {

View File

@ -1,4 +1,4 @@
/**
/**
* @file lv_font_loader.h
*
*/
@ -26,7 +26,29 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
/**
* Loads a `lv_font_t` object from a binary font file
* @param font_name filename where the font file is located
* @return a pointer to the font or NULL in case of error
*/
lv_font_t * lv_font_load(const char * fontName);
#if LV_USE_FS_MEMFS
/**
* Loads a `lv_font_t` object from a memory buffer containing the binary font file.
* Requires LV_USE_FS_MEMFS
* @param buffer address of the font file in the memory
* @param size size of the font file buffer
* @return a pointer to the font or NULL in case of error
*/
lv_font_t * lv_font_load_from_buffer(void * buffer, uint32_t size);
#endif
/**
* Frees the memory allocated by the `lv_font_load()` function
* @param font lv_font_t object created by the lv_font_load function
*/
void lv_font_free(lv_font_t * font);
/**********************

View File

@ -0,0 +1,218 @@
/**
* @file lv_fs_memfs.c
*
* File System Interface driver for memory-mapped files
*
* This driver allows using a memory area as a file that can be read by normal file operations. It can
* be used, e.g., to store font files in slow flash memory, and load them into RAM on demand.
*
* You can enable it in lv_conf.h:
*
* #define LV_USE_FS_MEMFS 1
*
* The actual implementation uses the built-in cache mechanism of the file system interface.
*
* Since this is not an actual file system, file write and directories are not supported.
*
* The default drive letter is 'M', but this can be changed in lv_conf.h:
*
* #define LV_FS_MEMFS_LETTER 'M'
*
* To use it seamlessly with the file system interface a new extended path object has been introduced:
*
* lv_fs_path_ex_t mempath;
*
* This structure can be initialized with the helper function:
*
* lv_fs_make_path_ex(&mempath, (const uint8_t *) & my_mem_buffer, sizeof(my_mem_buffer));
*
* Then the "file" can be opened with:
*
* lv_fs_file_t file;
* lv_fs_res_t res = lv_fs_open(&file, (const char *) & mempath, LV_FS_MODE_RD);
*
* The path object can be used at any place where a file path is required, e.g.:
*
* lv_font_t* my_font = lv_font_load((const char *) & mempath);
*
*/
/*********************
* INCLUDES
*********************/
#include "../../../lvgl.h"
#if LV_USE_FS_MEMFS
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode);
static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p);
static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br);
static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence);
static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p);
/**********************
* STATIC VARIABLES
**********************/
static lv_fs_drv_t fs_drv; /*A driver descriptor*/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
* Register a driver for the File system interface
*/
void lv_fs_memfs_init(void)
{
/*---------------------------------------------------
* Register the file system interface in LVGL
*--------------------------------------------------*/
/*Add a simple drive to open images*/
lv_fs_drv_init(&fs_drv);
/*Set up fields...*/
fs_drv.letter = LV_FS_MEMFS_LETTER;
fs_drv.cache_size = LV_FS_CACHE_FROM_BUFFER;
fs_drv.open_cb = fs_open;
fs_drv.close_cb = fs_close;
fs_drv.read_cb = fs_read;
fs_drv.write_cb = NULL;
fs_drv.seek_cb = fs_seek;
fs_drv.tell_cb = fs_tell;
fs_drv.dir_close_cb = NULL;
fs_drv.dir_open_cb = NULL;
fs_drv.dir_read_cb = NULL;
lv_fs_drv_register(&fs_drv);
}
/**********************
* STATIC FUNCTIONS
**********************/
/**
* Open a file
* @param drv pointer to a driver where this function belongs
* @param path pointer to an extended path object containing the memory buffer address and size
* @param mode read: FS_MODE_RD (currently only reading from the buffer is supported)
* @return pointer to FIL struct or NULL in case of fail
*/
static void * fs_open(lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode)
{
LV_UNUSED(drv);
LV_UNUSED(mode);
return (void *)path;
}
/**
* Close an opened file
* @param drv pointer to a driver where this function belongs
* @param file_p pointer to a FILE variable. (opened with fs_open)
* @return LV_FS_RES_OK: no error, the file is read
* any error from lv_fs_res_t enum
*/
static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p)
{
LV_UNUSED(drv);
LV_UNUSED(file_p);
return LV_FS_RES_OK;
}
/**
* Read data from an opened file
* @param drv pointer to a driver where this function belongs
* @param file_p pointer to a FILE variable.
* @param buf pointer to a memory block where to store the read data
* @param btr number of Bytes To Read
* @param br the real number of read bytes (Byte Read)
* @return LV_FS_RES_OK: no error, the file is read
* any error from lv_fs_res_t enum
*/
static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf, uint32_t btr, uint32_t * br)
{
LV_UNUSED(drv);
LV_UNUSED(file_p);
LV_UNUSED(buf);
LV_UNUSED(btr);
*br = 0;
return LV_FS_RES_OK;
}
/**
* Set the read pointer.
* @param drv pointer to a driver where this function belongs
* @param file_p pointer to a FILE variable. (opened with fs_open )
* @param pos the new position of read pointer
* @return LV_FS_RES_OK: no error, the file is read
* any error from lv_fs_res_t enum
*/
static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t pos, lv_fs_whence_t whence)
{
/* NOTE: this function is only called to determine the end of the buffer when LV_FS_SEEK_END was given to lv_fs_seek() */
LV_UNUSED(drv);
lv_fs_file_t * fp = (lv_fs_file_t *)file_p;
switch(whence) {
case LV_FS_SEEK_SET: {
fp->cache->file_position = pos;
break;
}
case LV_FS_SEEK_CUR: {
fp->cache->file_position += pos;
break;
}
case LV_FS_SEEK_END: {
fp->cache->file_position = fp->cache->end - pos;
break;
}
}
if(fp->cache->file_position < fp->cache->start)
fp->cache->file_position = fp->cache->start;
else if(fp->cache->file_position > fp->cache->end)
fp->cache->file_position = fp->cache->end;
return LV_FS_RES_OK;
}
/**
* Give the position of the read write pointer
* @param drv pointer to a driver where this function belongs
* @param file_p pointer to a FILE variable.
* @param pos_p pointer to to store the result
* @return LV_FS_RES_OK: no error, the file is read
* any error from lv_fs_res_t enum
*/
static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * pos_p)
{
LV_UNUSED(drv);
*pos_p = ((lv_fs_file_t *)file_p)->cache->file_position;
return LV_FS_RES_OK;
}
#else /*LV_USE_FS_MEMFS == 0*/
#if defined(LV_FS_MEMFS_LETTER) && LV_FS_MEMFS_LETTER != '\0'
#warning "LV_USE_FS_MEMFS is not enabled but LV_FS_MEMFS_LETTER is set"
#endif
#endif /*LV_USE_FS_MEMFS*/

View File

@ -1,4 +1,4 @@
/**
/**
* @file lv_fsdrv.h
*
*/
@ -27,22 +27,26 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
#if LV_USE_FS_FATFS != '\0'
#if LV_USE_FS_FATFS
void lv_fs_fatfs_init(void);
#endif
#if LV_USE_FS_STDIO != '\0'
#if LV_USE_FS_STDIO
void lv_fs_stdio_init(void);
#endif
#if LV_USE_FS_POSIX != '\0'
#if LV_USE_FS_POSIX
void lv_fs_posix_init(void);
#endif
#if LV_USE_FS_WIN32 != '\0'
#if LV_USE_FS_WIN32
void lv_fs_win32_init(void);
#endif
#if LV_USE_FS_MEMFS
void lv_fs_memfs_init(void);
#endif
/**********************
* MACROS
**********************/

View File

@ -1909,6 +1909,24 @@
#endif
#endif
/*API for memory-mapped file access. */
#ifndef LV_USE_FS_MEMFS
#ifdef CONFIG_LV_USE_FS_MEMFS
#define LV_USE_FS_MEMFS CONFIG_LV_USE_FS_MEMFS
#else
#define LV_USE_FS_MEMFS 0
#endif
#endif
#if LV_USE_FS_MEMFS
#ifndef LV_FS_MEMFS_LETTER
#ifdef CONFIG_LV_FS_MEMFS_LETTER
#define LV_FS_MEMFS_LETTER CONFIG_LV_FS_MEMFS_LETTER
#else
#define LV_FS_MEMFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/
#endif
#endif
#endif
/*PNG decoder library*/
#ifndef LV_USE_PNG
#ifdef CONFIG_LV_USE_PNG

View File

@ -206,6 +206,10 @@ void lv_init(void)
lv_fs_win32_init();
#endif
#if LV_USE_FS_MEMFS
lv_fs_memfs_init();
#endif
#if LV_USE_PNG
lv_png_init();
#endif

View File

@ -1,4 +1,4 @@
/**
/**
* @file lv_fs.c
*
*/
@ -83,27 +83,53 @@ lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mo
return LV_FS_RES_NOT_IMP;
}
const char * real_path = lv_fs_get_real_path(path);
void * file_d = drv->open_cb(drv, real_path, mode);
if(file_d == NULL || file_d == (void *)(-1)) {
return LV_FS_RES_UNKNOWN;
}
file_p->drv = drv;
file_p->file_d = file_d;
/* For memory-mapped files we set the file handle to our file descriptor so that we can access the cache from the file operations */
if(drv->cache_size == LV_FS_CACHE_FROM_BUFFER) {
file_p->file_d = file_p;
}
else {
const char * real_path = lv_fs_get_real_path(path);
void * file_d = drv->open_cb(drv, real_path, mode);
if(file_d == NULL || file_d == (void *)(-1)) {
return LV_FS_RES_UNKNOWN;
}
file_p->file_d = file_d;
}
if(drv->cache_size) {
file_p->cache = lv_malloc(sizeof(lv_fs_file_cache_t));
LV_ASSERT_MALLOC(file_p->cache);
lv_memzero(file_p->cache, sizeof(lv_fs_file_cache_t));
file_p->cache->start = UINT32_MAX; /*Set an invalid range by default*/
file_p->cache->end = UINT32_MAX - 1;
/* If this is a memory-mapped file, then set "cache" to the memory buffer */
if(drv->cache_size == LV_FS_CACHE_FROM_BUFFER) {
lv_fs_path_ex_t * path_ex = (lv_fs_path_ex_t *)path;
file_p->cache->buffer = path_ex->buffer;
file_p->cache->start = 0;
file_p->cache->file_position = 0;
file_p->cache->end = path_ex->size;
}
/*Set an invalid range by default*/
else {
file_p->cache->start = UINT32_MAX;
file_p->cache->end = UINT32_MAX - 1;
}
}
return LV_FS_RES_OK;
}
void lv_fs_make_path_from_buffer(lv_fs_path_ex_t * path, char letter, void * buf, uint32_t size)
{
path->path[0] = letter;
path->path[1] = ':';
path->path[2] = 0;
path->buffer = buf;
path->size = size;
}
lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p)
{
if(file_p->drv == NULL) {
@ -117,7 +143,8 @@ lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p)
lv_fs_res_t res = file_p->drv->close_cb(file_p->drv, file_p->file_d);
if(file_p->drv->cache_size && file_p->cache) {
if(file_p->cache->buffer) {
/* Only free cache if it was pre-allocated (for memory-mapped files it is never allocated) */
if(file_p->drv->cache_size != LV_FS_CACHE_FROM_BUFFER && file_p->cache->buffer) {
lv_free(file_p->cache->buffer);
}
@ -138,12 +165,18 @@ static lv_fs_res_t lv_fs_read_cached(lv_fs_file_t * file_p, char * buf, uint32_t
uint32_t start = file_p->cache->start;
uint32_t end = file_p->cache->end;
char * buffer = file_p->cache->buffer;
uint16_t buffer_size = file_p->drv->cache_size;
uint32_t buffer_size = file_p->drv->cache_size;
if(start <= file_position && file_position <= end) {
/* Data can be read from cache buffer */
uint32_t buffer_remaining_length = (uint32_t)end - file_position + 1;
uint16_t buffer_offset = (end - start) - buffer_remaining_length + 1;
uint32_t buffer_offset = (end - start) - buffer_remaining_length + 1;
/* Do not allow reading beyond the actual memory block for memory-mapped files */
if(file_p->drv->cache_size == LV_FS_CACHE_FROM_BUFFER) {
if(btr > buffer_remaining_length)
btr = buffer_remaining_length;
}
if(btr <= buffer_remaining_length) {
/*Data is in cache buffer, and buffer end not reached, no need to read from FS*/

View File

@ -1,4 +1,4 @@
/**
/**
* @file lv_fs.h
*
*/
@ -24,6 +24,8 @@ extern "C" {
#define LV_FS_MAX_FN_LENGTH 64
#define LV_FS_MAX_PATH_LENGTH 256
#define LV_FS_CACHE_FROM_BUFFER UINT32_MAX
/**********************
* TYPEDEFS
**********************/
@ -80,7 +82,7 @@ typedef enum {
typedef struct _lv_fs_drv_t {
char letter;
uint16_t cache_size;
uint32_t cache_size;
bool (*ready_cb)(struct _lv_fs_drv_t * drv);
void * (*open_cb)(struct _lv_fs_drv_t * drv, const char * path, lv_fs_mode_t mode);
@ -110,6 +112,13 @@ typedef struct {
lv_fs_file_cache_t * cache;
} lv_fs_file_t;
/* Extended path object to specify the buffer for memory-mapped files */
typedef struct {
char path[4]; /* This is needed to make it compatible with a normal path */
void * buffer;
uint32_t size;
} lv_fs_path_ex_t;
typedef struct {
void * dir_d;
lv_fs_drv_t * drv;
@ -164,6 +173,15 @@ bool lv_fs_is_ready(char letter);
*/
lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_mode_t mode);
/**
* Make a path object for the memory-mapped file compatible with the file system interface
* @param path path to a lv_fs_path_ex object
* @param letter the letter of the driver. E.g. `LV_FS_MEMFS_LETTER`
* @param buf address of the memory buffer
* @param size size of the memory buffer in bytes
*/
void lv_fs_make_path_from_buffer(lv_fs_path_ex_t * path, char letter, void * buf, uint32_t size);
/**
* Close an already opened file
* @param file_p pointer to a lv_fs_file_t variable

View File

@ -154,6 +154,9 @@ add_library(test_common
src/test_assets/test_font_montserrat_ascii_2bpp.c
src/test_assets/test_font_montserrat_ascii_4bpp.c
src/test_assets/test_font_montserrat_ascii_4bpp_compressed.c
src/test_assets/font_1_bin.c
src/test_assets/font_2_bin.c
src/test_assets/font_3_bin.c
src/test_assets/test_img_caret_down.c
src/test_assets/test_arc_bg.c
src/test_assets/ubuntu_font.c

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

@ -58,6 +58,8 @@
#define LV_FS_STDIO_CACHE_SIZE 512
#define LV_USE_FS_POSIX 1
#define LV_FS_POSIX_LETTER 'B'
#define LV_USE_FS_MEMFS 1
#define LV_FS_MEMFS_LETTER 'M'
#define LV_USE_PNG 1
#define LV_USE_BMP 1

View File

@ -0,0 +1,438 @@
/* table exported by mirkes.de's tiny hexer
filename: D:\lvgl\test\lv_port_pc_visual_studio\LvglPlatform\lvgl\tests\src\test_assets\font_1.fnt
position 0, 6876 bytes */
unsigned char const font_1_buf[6876] =
{
44, 0, 0, 0, 104, 101, 97, 100, 1, 0, 0, 0, 4, 0, 8, 0,
8, 0, 254, 255, 8, 0, 254, 255, 0, 0, 254, 255, 8, 0, 0, 0,
16, 0, 0, 0, 1, 4, 4, 4, 9, 1, 0, 0, 164, 0, 0, 0,
99, 109, 97, 112, 2, 0, 0, 0, 44, 0, 0, 0, 32, 0, 0, 0,
95, 0, 1, 0, 95, 0, 2, 0, 44, 0, 0, 0, 176, 0, 0, 0,
243, 247, 96, 0, 59, 0, 3, 0, 0, 0, 114, 31, 81, 239, 88, 239,
91, 239, 92, 239, 93, 239, 97, 239, 99, 239, 101, 239, 105, 239, 108, 239,
113, 239, 118, 239, 119, 239, 120, 239, 142, 239, 152, 239, 155, 239, 156, 239,
157, 239, 161, 239, 162, 239, 163, 239, 164, 239, 183, 239, 184, 239, 190, 239,
192, 239, 193, 239, 196, 239, 199, 239, 200, 239, 201, 239, 203, 239, 227, 239,
229, 239, 20, 240, 21, 240, 23, 240, 55, 240, 58, 240, 67, 240, 108, 240,
116, 240, 171, 240, 59, 241, 144, 241, 145, 241, 146, 241, 147, 241, 148, 241,
215, 241, 227, 241, 61, 242, 84, 242, 170, 244, 18, 247, 242, 247, 0, 0,
68, 1, 0, 0, 108, 111, 99, 97, 155, 0, 0, 0, 8, 0, 8, 0,
12, 0, 21, 0, 29, 0, 48, 0, 69, 0, 90, 0, 111, 0, 118, 0,
133, 0, 144, 0, 154, 0, 167, 0, 174, 0, 179, 0, 185, 0, 206, 0,
222, 0, 230, 0, 246, 0, 6, 1, 25, 1, 42, 1, 59, 1, 75, 1,
91, 1, 107, 1, 115, 1, 125, 1, 141, 1, 151, 1, 167, 1, 183, 1,
209, 1, 229, 1, 248, 1, 10, 2, 30, 2, 47, 2, 63, 2, 82, 2,
98, 2, 104, 2, 118, 2, 137, 2, 147, 2, 168, 2, 185, 2, 206, 2,
225, 2, 249, 2, 11, 3, 27, 3, 39, 3, 55, 3, 76, 3, 102, 3,
121, 3, 141, 3, 160, 3, 171, 3, 190, 3, 198, 3, 209, 3, 214, 3,
219, 3, 233, 3, 249, 3, 6, 4, 22, 4, 36, 4, 49, 4, 65, 4,
80, 4, 88, 4, 100, 4, 115, 4, 122, 4, 140, 4, 153, 4, 165, 4,
182, 4, 197, 4, 207, 4, 219, 4, 232, 4, 245, 4, 4, 5, 24, 5,
38, 5, 57, 5, 69, 5, 82, 5, 90, 5, 103, 5, 112, 5, 120, 5,
127, 5, 160, 5, 183, 5, 214, 5, 239, 5, 5, 6, 40, 6, 75, 6,
113, 6, 141, 6, 168, 6, 211, 6, 227, 6, 250, 6, 30, 7, 54, 7,
76, 7, 105, 7, 122, 7, 136, 7, 158, 7, 190, 7, 214, 7, 238, 7,
9, 8, 18, 8, 48, 8, 94, 8, 135, 8, 169, 8, 191, 8, 213, 8,
254, 8, 17, 9, 50, 9, 85, 9, 120, 9, 143, 9, 171, 9, 202, 9,
229, 9, 1, 10, 27, 10, 68, 10, 85, 10, 124, 10, 148, 10, 175, 10,
203, 10, 230, 10, 252, 10, 35, 11, 67, 11, 90, 11, 129, 11, 159, 11,
182, 11, 0, 0, 212, 11, 0, 0, 103, 108, 121, 102, 17, 0, 0, 0,
17, 0, 18, 172, 7, 136, 153, 89, 64, 25, 1, 25, 185, 200, 8, 57,
72, 45, 0, 50, 130, 41, 48, 39, 228, 225, 161, 206, 65, 178, 69, 208,
178, 194, 192, 128, 39, 135, 171, 128, 32, 0, 86, 180, 75, 171, 68, 252,
176, 33, 11, 144, 180, 191, 75, 75, 102, 54, 0, 58, 172, 56, 49, 134,
199, 152, 24, 83, 237, 131, 137, 62, 208, 171, 131, 81, 125, 32, 44, 7,
179, 4, 204, 1, 21, 24, 0, 75, 224, 130, 107, 98, 1, 115, 6, 98,
58, 153, 136, 13, 129, 17, 185, 0, 28, 128, 21, 135, 155, 132, 16, 25,
8, 128, 136, 4, 64, 17, 0, 12, 128, 21, 135, 147, 185, 181, 9, 3,
131, 137, 53, 0, 25, 129, 161, 164, 32, 19, 96, 61, 200, 0, 37, 0,
170, 0, 8, 3, 64, 1, 37, 228, 82, 94, 68, 14, 135, 145, 128, 29,
65, 0, 24, 129, 24, 173, 48, 14, 128, 17, 0, 29, 0, 22, 255, 171,
128, 84, 1, 17, 0, 42, 160, 4, 68, 0, 38, 0, 90, 224, 1, 1,
0, 0, 42, 128, 42, 133, 93, 137, 178, 234, 125, 64, 95, 212, 5, 219,
46, 164, 23, 128, 26, 207, 20, 160, 7, 248, 36, 128, 42, 181, 92, 131,
85, 168, 4, 168, 0, 130, 128, 150, 218, 48, 36, 128, 42, 189, 95, 3,
208, 224, 1, 2, 192, 9, 70, 81, 84, 50, 43, 0, 50, 128, 18, 64,
35, 233, 0, 12, 84, 16, 72, 82, 201, 69, 210, 65, 0, 36, 128, 42,
158, 213, 1, 174, 168, 0, 218, 128, 91, 161, 55, 170, 25, 128, 39, 128,
42, 132, 213, 13, 186, 168, 127, 233, 162, 240, 152, 131, 12, 199, 0, 38,
128, 42, 229, 83, 90, 234, 130, 206, 13, 96, 21, 56, 1, 172, 0, 41,
0, 42, 141, 82, 201, 50, 190, 146, 234, 110, 101, 89, 23, 211, 126, 39,
128, 42, 165, 76, 131, 238, 65, 98, 228, 52, 234, 67, 78, 172, 84, 14,
128, 18, 58, 58, 0, 29, 0, 14, 135, 19, 58, 58, 0, 29, 69, 216,
128, 37, 0, 42, 128, 66, 0, 73, 144, 44, 84, 2, 234, 200, 128, 180,
136, 37, 0, 169, 164, 204, 41, 51, 10, 76, 194, 37, 0, 42, 136, 6,
41, 130, 3, 158, 241, 73, 45, 20, 148, 0, 0, 36, 128, 42, 181, 92,
131, 85, 168, 5, 80, 1, 74, 0, 10, 192, 0, 66, 7, 195, 1, 195,
186, 20, 10, 243, 121, 9, 106, 62, 165, 151, 64, 63, 84, 124, 200, 227,
138, 240, 123, 41, 128, 47, 120, 58, 128, 87, 32, 24, 206, 16, 10, 38,
80, 0, 70, 138, 65, 15, 201, 151, 64, 48, 128, 50, 150, 204, 172, 65,
230, 70, 160, 243, 74, 160, 121, 174, 128, 121, 148, 104, 46, 128, 50, 131,
221, 80, 151, 174, 168, 89, 64, 27, 40, 3, 47, 93, 80, 128, 53, 0,
58, 151, 85, 216, 192, 9, 87, 94, 1, 194, 164, 1, 133, 72, 18, 174,
188, 0, 43, 0, 42, 151, 85, 32, 18, 169, 0, 245, 68, 7, 170, 32,
37, 82, 64, 40, 128, 42, 151, 85, 32, 18, 169, 0, 149, 68, 4, 170,
32, 7, 0, 49, 128, 50, 131, 221, 80, 151, 174, 168, 89, 64, 2, 60,
160, 3, 34, 245, 215, 32, 52, 0, 50, 149, 0, 10, 128, 62, 74, 164,
128, 18, 169, 32, 31, 0, 20, 0, 18, 149, 0, 126, 33, 120, 42, 130,
214, 168, 45, 80, 3, 251, 196, 38, 141, 0, 46, 0, 50, 149, 0, 209,
0, 6, 160, 129, 183, 8, 0, 59, 202, 0, 113, 159, 64, 38, 0, 42,
149, 0, 127, 241, 210, 168, 224, 61, 0, 58, 150, 0, 71, 128, 46, 0,
128, 2, 113, 71, 128, 81, 34, 128, 16, 196, 128, 0, 52, 0, 50, 150,
136, 21, 0, 208, 6, 111, 176, 12, 157, 192, 12, 182, 0, 54, 0, 58,
131, 221, 198, 11, 215, 106, 241, 202, 0, 10, 46, 80, 0, 81, 85, 215,
106, 241, 46, 0, 50, 151, 85, 36, 0, 149, 65, 64, 12, 78, 9, 84,
195, 4, 170, 48, 0, 54, 7, 187, 3, 221, 198, 11, 215, 106, 241, 202,
0, 10, 46, 80, 4, 138, 174, 187, 188, 65, 238, 10, 140, 46, 128, 50,
151, 85, 36, 0, 149, 65, 64, 12, 78, 15, 88, 70, 15, 90, 66, 39,
128, 42, 149, 84, 75, 149, 66, 126, 152, 16, 137, 200, 90, 167, 80, 37,
128, 42, 213, 58, 154, 168, 84, 192, 31, 252, 48, 50, 128, 50, 156, 128,
18, 0, 63, 248, 4, 160, 2, 225, 171, 172, 96, 45, 248, 58, 133, 136,
1, 92, 62, 0, 28, 224, 138, 43, 128, 20, 66, 92, 2, 69, 176, 0,
72, 0, 74, 202, 0, 60, 64, 230, 184, 25, 160, 170, 27, 6, 206, 1,
24, 92, 152, 28, 224, 1, 153, 65, 76, 192, 43, 0, 50, 172, 1, 80,
40, 60, 216, 2, 33, 194, 0, 171, 225, 7, 196, 154, 0, 41, 248, 58,
133, 16, 2, 192, 23, 33, 48, 0, 30, 177, 48, 9, 90, 0, 56, 64,
32, 42, 0, 50, 181, 83, 52, 26, 173, 240, 2, 169, 16, 5, 193, 0,
33, 166, 168, 0, 21, 135, 155, 150, 160, 34, 0, 63, 248, 40, 128, 22,
255, 171, 140, 128, 66, 96, 27, 212, 2, 95, 0, 198, 32, 21, 48, 4,
122, 0, 21, 135, 147, 198, 64, 7, 244, 0, 37, 128, 169, 129, 224, 5,
80, 160, 92, 152, 0, 32, 7, 160, 187, 224, 38, 130, 152, 131, 48, 38,
128, 42, 20, 202, 0, 33, 80, 173, 129, 21, 252, 136, 0, 43, 128, 51,
36, 0, 127, 201, 86, 160, 6, 171, 144, 15, 205, 84, 144, 36, 128, 42,
13, 84, 51, 213, 65, 0, 233, 234, 160, 128, 43, 128, 43, 0, 107, 0,
225, 170, 130, 58, 164, 3, 8, 71, 77, 128, 39, 0, 42, 12, 204, 48,
2, 39, 28, 137, 105, 250, 160, 128, 22, 128, 35, 5, 80, 8, 40, 45,
220, 22, 142, 1, 252, 44, 7, 170, 141, 76, 174, 58, 97, 192, 35, 8,
234, 135, 2, 48, 128, 43, 128, 43, 36, 0, 127, 36, 218, 2, 205, 120,
8, 11, 128, 112, 18, 0, 19, 27, 155, 164, 0, 120, 18, 127, 155, 129,
184, 27, 129, 192, 7, 243, 70, 0, 39, 128, 43, 36, 0, 127, 212, 128,
57, 40, 9, 82, 0, 86, 215, 18, 0, 19, 36, 0, 127, 128, 67, 128,
66, 38, 77, 196, 218, 2, 204, 28, 223, 128, 128, 136, 0, 224, 31, 128,
43, 128, 42, 38, 77, 160, 44, 215, 128, 128, 184, 7, 0, 40, 128, 42,
13, 84, 51, 213, 54, 1, 211, 213, 54, 43, 135, 178, 166, 85, 168, 1,
170, 228, 3, 243, 85, 36, 0, 149, 69, 0, 43, 135, 170, 141, 82, 110,
58, 168, 1, 232, 234, 160, 13, 82, 64, 26, 0, 34, 37, 208, 0, 104,
0, 64, 30, 32, 0, 34, 45, 202, 238, 82, 194, 34, 94, 119, 192, 26,
128, 34, 148, 128, 45, 28, 45, 28, 3, 136, 146, 0, 43, 128, 42, 43,
128, 216, 7, 15, 129, 2, 20, 208, 0, 36, 120, 50, 5, 128, 33, 3,
156, 13, 1, 113, 248, 2, 218, 80, 57, 128, 66, 88, 3, 136, 40, 57,
84, 244, 68, 5, 255, 73, 85, 0, 6, 65, 134, 64, 35, 128, 42, 51,
141, 131, 117, 80, 0, 96, 96, 255, 82, 0, 36, 127, 178, 133, 136, 65,
132, 72, 145, 129, 149, 200, 5, 192, 96, 10, 248, 0, 0, 33, 128, 34,
44, 221, 150, 2, 130, 164, 101, 238, 0, 22, 135, 155, 133, 48, 51, 0,
37, 112, 87, 0, 230, 96, 19, 7, 147, 148, 0, 127, 240, 0, 22, 135,
155, 203, 132, 224, 7, 49, 131, 24, 5, 56, 0, 37, 1, 41, 20, 154,
139, 202, 232, 128, 27, 1, 153, 147, 34, 177, 171, 144, 20, 0, 145, 128,
23, 87, 192, 64, 7, 196, 128, 127, 240, 9, 175, 128, 17, 186, 148, 16,
3, 144, 181, 0, 108, 233, 80, 12, 96, 31, 213, 225, 94, 1, 202, 0,
80, 5, 125, 0, 64, 0, 67, 94, 230, 93, 86, 109, 153, 79, 154, 51,
109, 244, 0, 252, 140, 219, 125, 13, 179, 41, 243, 64, 7, 196, 26, 10,
38, 60, 182, 187, 216, 168, 104, 153, 69, 197, 223, 10, 25, 25, 228, 152,
104, 119, 166, 80, 208, 239, 74, 161, 162, 101, 64, 0, 67, 0, 122, 104,
3, 165, 130, 164, 1, 44, 180, 13, 50, 101, 160, 165, 102, 45, 0, 84,
204, 160, 8, 44, 0, 51, 49, 128, 32, 171, 18, 157, 180, 173, 101, 5,
192, 10, 20, 176, 88, 97, 47, 136, 0, 64, 7, 196, 0, 88, 162, 0,
29, 113, 63, 112, 144, 112, 5, 192, 165, 0, 74, 46, 32, 11, 64, 9,
40, 24, 144, 82, 15, 30, 45, 200, 125, 105, 38, 0, 64, 7, 196, 0,
89, 128, 8, 98, 6, 104, 128, 203, 184, 68, 238, 154, 1, 238, 8, 80,
7, 234, 1, 238, 8, 84, 187, 132, 78, 233, 24, 129, 154, 32, 32, 72,
7, 204, 0, 99, 2, 32, 6, 172, 168, 128, 0, 116, 36, 20, 0, 126,
163, 34, 232, 113, 5, 64, 69, 136, 95, 16, 32, 23, 88, 4, 118, 96,
27, 81, 0, 136, 208, 64, 7, 196, 0, 95, 224, 15, 254, 67, 248, 3,
220, 0, 236, 0, 103, 7, 142, 85, 116, 60, 60, 8, 161, 224, 2, 68,
192, 72, 0, 75, 2, 255, 242, 128, 222, 127, 217, 99, 108, 96, 17, 181,
171, 251, 3, 123, 168, 5, 63, 32, 17, 0, 124, 64, 64, 7, 69, 0,
124, 96, 87, 254, 179, 194, 194, 238, 30, 5, 164, 139, 160, 2, 172, 0,
145, 118, 117, 66, 34, 43, 221, 161, 0, 21, 64, 22, 53, 182, 128, 194,
153, 30, 14, 20, 102, 32, 64, 32, 7, 163, 128, 82, 105, 141, 150, 96,
28, 168, 0, 171, 176, 4, 156, 48, 7, 179, 128, 82, 0, 52, 198, 1,
203, 48, 26, 0, 242, 32, 0, 53, 119, 0, 4, 0, 156, 0, 72, 7,
204, 0, 121, 80, 3, 72, 19, 121, 153, 49, 128, 31, 16, 203, 48, 25,
146, 184, 7, 242, 160, 0, 102, 74, 213, 118, 0, 190, 36, 0, 156, 4,
222, 96, 64, 0, 67, 111, 255, 180, 190, 0, 49, 4, 88, 39, 32, 0,
229, 44, 108, 1, 107, 96, 24, 191, 252, 64, 56, 15, 172, 32, 4, 86,
65, 26, 0, 151, 0, 115, 0, 70, 1, 168, 64, 39, 193, 4, 50, 246,
56, 7, 61, 0, 125, 180, 32, 24, 151, 156, 3, 209, 168, 1, 197, 116,
1, 255, 21, 208, 5, 26, 128, 75, 206, 1, 109, 8, 6, 56, 7, 188,
77, 200, 77, 203, 35, 3, 35, 0, 127, 245, 246, 244, 54, 244, 56, 7,
188, 18, 39, 22, 221, 246, 128, 127, 245, 221, 19, 156, 56, 15, 172, 16,
4, 155, 0, 86, 15, 32, 25, 184, 3, 24, 4, 52, 0, 44, 112, 108,
35, 64, 56, 127, 204, 0, 98, 0, 250, 54, 0, 57, 220, 14, 224, 9,
96, 2, 133, 0, 88, 7, 88, 2, 221, 250, 192, 20, 239, 212, 0, 84,
78, 80, 40, 7, 172, 0, 76, 64, 7, 150, 7, 138, 69, 137, 80, 65,
208, 0, 226, 216, 0, 177, 88, 0, 94, 192, 40, 7, 172, 19, 0, 77,
46, 0, 74, 135, 0, 44, 194, 128, 52, 80, 45, 112, 89, 112, 129, 188,
128, 0, 56, 7, 188, 0, 72, 1, 199, 102, 1, 156, 28, 0, 241, 193,
208, 242, 234, 10, 243, 223, 97, 127, 192, 31, 202, 138, 0, 56, 1, 57,
60, 71, 60, 187, 244, 128, 72, 0, 75, 0, 35, 50, 128, 0, 234, 237,
122, 232, 233, 66, 71, 65, 107, 128, 32, 64, 53, 20, 116, 116, 22, 142,
175, 95, 174, 8, 80, 127, 220, 14, 152, 7, 225, 141, 140, 202, 136, 2,
92, 87, 136, 30, 160, 1, 227, 6, 237, 65, 66, 0, 91, 169, 4, 1,
0, 58, 168, 219, 36, 44, 64, 21, 63, 137, 233, 226, 1, 54, 97, 198,
206, 0, 72, 127, 220, 0, 99, 227, 0, 253, 227, 224, 31, 49, 156, 192,
30, 130, 194, 128, 14, 129, 48, 49, 128, 8, 156, 5, 132, 28, 128, 18,
0, 20, 16, 4, 0, 24, 0, 58, 32, 7, 0, 64, 7, 196, 0, 120,
129, 16, 1, 38, 173, 93, 135, 44, 35, 184, 122, 60, 120, 0, 80, 80,
11, 184, 58, 124, 121, 87, 131, 118, 8, 68, 0, 73, 170, 56, 0, 59,
0, 127, 39, 32, 4, 150, 86, 128, 150, 248, 246, 158, 240, 16, 255, 112,
1, 69, 128, 56, 0, 59, 0, 125, 112, 1, 69, 251, 192, 67, 250, 91,
227, 218, 2, 89, 90, 0, 73, 200, 0, 80, 127, 219, 128, 37, 5, 19,
0, 86, 215, 63, 245, 136, 0, 210, 58, 238, 16, 10, 0, 216, 0, 32,
96, 24, 209, 11, 227, 234, 0, 204, 127, 182, 193, 84, 0, 123, 186, 23,
96, 0, 64, 0, 67, 111, 250, 192, 49, 0, 19, 254, 208, 15, 136, 3,
255, 136, 64, 30, 32, 64, 7, 196, 0, 83, 32, 14, 150, 100, 128, 78,
192, 6, 112, 3, 248, 3, 220, 3, 249, 225, 0, 9, 15, 15, 78, 234,
120, 0, 11, 185, 80, 0, 64, 127, 204, 128, 127, 240, 223, 168, 3, 210,
40, 1, 226, 2, 0, 244, 5, 128, 112, 200, 184, 62, 226, 97, 104, 2,
72, 236, 240, 192, 8, 39, 28, 96, 0, 56, 7, 196, 1, 128, 123, 59,
0, 183, 0, 168, 203, 15, 130, 176, 52, 48, 129, 60, 0, 132, 0, 201,
6, 89, 0, 21, 12, 195, 72, 86, 208, 61, 224, 0, 56, 7, 188, 0,
63, 231, 71, 64, 8, 205, 24, 1, 92, 0, 127, 242, 142, 29, 232, 4,
135, 116, 56, 56, 7, 188, 18, 38, 16, 223, 254, 32, 187, 195, 224, 137,
128, 130, 237, 22, 1, 155, 24, 3, 34, 160, 1, 209, 185, 145, 192, 40,
127, 188, 3, 255, 152, 2, 208, 2, 0, 76, 0, 167, 0, 16, 1, 240,
1, 46, 33, 32, 7, 129, 114, 0, 140, 96, 3, 45, 128, 64, 56, 7,
188, 60, 220, 184, 2, 25, 218, 0, 53, 59, 140, 2, 231, 117, 216, 3,
198, 1, 206, 232, 112, 14, 120, 240, 12, 56, 7, 188, 0, 90, 1, 147,
139, 140, 1, 34, 3, 192, 2, 0, 136, 12, 3, 142, 0, 58, 49, 223,
181, 227, 31, 33, 128, 72, 0, 75, 111, 255, 218, 92, 238, 231, 119, 16,
121, 19, 72, 158, 1, 255, 121, 86, 81, 120, 23, 63, 252, 252, 64, 64,
127, 85, 0, 127, 241, 18, 240, 3, 151, 45, 28, 2, 110, 163, 0, 120,
3, 100, 64, 35, 64, 5, 187, 140, 1, 32, 19, 68, 16, 5, 64, 63,
64, 7, 218, 76, 1, 242, 232, 6, 48, 7, 180, 127, 209, 96, 28, 150,
1, 35, 152, 4, 110, 224, 15, 254, 96, 80, 7, 212, 0, 72, 238, 64,
13, 63, 119, 190, 67, 18, 255, 49, 246, 153, 218, 23, 254, 176, 222, 33,
177, 170, 13, 137, 0, 253, 58, 87, 136, 7, 103, 128, 126, 105, 0, 192,
80, 0, 83, 18, 39, 224, 223, 255, 166, 131, 21, 125, 10, 30, 35, 231,
0, 108, 207, 161, 31, 183, 124, 48, 80, 0, 83, 18, 39, 224, 223, 255,
166, 131, 21, 118, 92, 40, 120, 142, 240, 112, 6, 204, 237, 72, 71, 237,
221, 222, 48, 80, 0, 83, 18, 39, 224, 223, 255, 166, 131, 21, 107, 186,
20, 60, 70, 0, 156, 1, 179, 50, 37, 8, 253, 187, 127, 195, 0, 80,
0, 83, 18, 39, 224, 223, 255, 166, 131, 23, 46, 244, 40, 120, 248, 6,
112, 6, 206, 162, 104, 71, 237, 239, 252, 48, 80, 0, 83, 18, 39, 224,
223, 255, 166, 2, 239, 232, 112, 15, 206, 0, 68, 250, 9, 255, 254, 30,
80, 7, 220, 0, 127, 240, 223, 96, 3, 231, 75, 192, 13, 54, 60, 78,
162, 228, 14, 146, 57, 51, 85, 134, 108, 66, 240, 63, 100, 8, 128, 6,
38, 176, 15, 205, 216, 1, 0, 56, 7, 188, 3, 110, 176, 193, 36, 184,
184, 52, 209, 172, 138, 60, 79, 6, 0, 120, 8, 57, 24, 191, 128, 233,
178, 200, 146, 73, 104, 104, 0, 56, 7, 188, 60, 111, 236, 56, 1, 93,
64, 30, 239, 222, 6, 103, 51, 0, 127, 242, 180, 204, 230, 109, 64, 127,
76, 128, 121, 248, 192, 57, 48, 116, 3, 69, 146, 72, 5, 14, 13, 238,
0, 135, 0, 58, 0, 29, 192, 7, 128, 10, 64, 15, 0, 28, 49, 0,
14, 238, 56, 7, 0, 80, 0, 83, 0, 43, 255, 216, 22, 160, 198, 102,
3, 164, 0, 46, 233, 64, 63, 248, 20, 128, 5, 221, 40, 5, 106, 12,
102, 96, 48, 48, 7, 188, 3, 255, 220, 47, 147, 176, 68, 133, 219, 194,
0, 10, 50, 8, 7, 255, 40, 192, 48, 144, 64, 128, 75, 0, 124, 96,
2, 48, 8, 176, 11, 40, 138, 112, 7, 139, 110, 212, 0, 241, 109, 221,
192, 89, 68, 88, 64, 0, 0, 0, 244, 12, 0, 0, 107, 101, 114, 110,
3, 0, 0, 0, 155, 0, 61, 49, 0, 0, 1, 2, 0, 3, 4, 5,
2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 0, 13, 14, 15, 16, 17,
18, 19, 12, 20, 20, 0, 0, 0, 21, 22, 23, 24, 25, 22, 26, 27,
28, 29, 29, 30, 31, 32, 29, 29, 22, 33, 34, 35, 3, 36, 30, 37,
37, 38, 39, 40, 41, 42, 43, 0, 44, 0, 45, 46, 47, 48, 49, 50,
51, 45, 52, 52, 53, 48, 45, 45, 46, 46, 54, 55, 56, 57, 51, 58,
58, 59, 58, 60, 41, 0, 0, 9, 61, 9, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9,
10, 9, 10, 11, 12, 13, 14, 15, 16, 17, 12, 18, 19, 20, 21, 21,
0, 0, 0, 22, 23, 24, 25, 23, 25, 25, 25, 23, 25, 25, 26, 25,
25, 25, 25, 23, 25, 23, 25, 3, 27, 28, 29, 29, 30, 31, 32, 33,
34, 35, 0, 36, 0, 37, 38, 39, 39, 39, 0, 39, 38, 40, 41, 38,
38, 42, 42, 39, 42, 39, 42, 43, 44, 45, 46, 46, 47, 46, 48, 0,
0, 35, 9, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6, 0, 3, 253, 0, 0, 0, 0, 249, 248, 1, 6, 3, 2, 251, 1,
6, 0, 5, 1, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 1, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
0, 252, 0, 0, 0, 0, 0, 253, 2, 3, 0, 0, 255, 0, 255, 1,
0, 255, 0, 255, 255, 253, 0, 0, 0, 0, 255, 0, 0, 254, 254, 0,
0, 255, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0,
254, 0, 253, 0, 241, 0, 0, 253, 0, 3, 4, 0, 0, 253, 1, 1,
4, 3, 254, 3, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 253, 254, 250, 0, 251, 255, 0, 0, 0, 0, 0, 5, 0, 252, 255,
0, 0, 0, 254, 0, 0, 255, 247, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 246, 255, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1,
0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 3, 1, 4, 255, 0, 0, 3, 255, 252, 238,
1, 3, 3, 0, 254, 0, 5, 0, 4, 0, 4, 0, 244, 0, 254, 4,
0, 4, 255, 3, 1, 0, 0, 0, 255, 0, 0, 254, 10, 0, 10, 0,
4, 0, 5, 2, 2, 4, 0, 0, 0, 251, 0, 0, 0, 0, 0, 255,
0, 1, 254, 254, 253, 1, 0, 255, 0, 0, 0, 251, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 248, 0, 0, 0, 0, 255,
0, 13, 254, 254, 1, 1, 255, 0, 254, 1, 0, 0, 249, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 244, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 248, 0, 8, 0, 0, 251, 0, 4, 0,
247, 244, 247, 253, 4, 0, 0, 247, 0, 2, 253, 0, 254, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 240, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 1, 0, 0, 0, 0, 0,
1, 1, 254, 253, 0, 0, 0, 255, 0, 0, 255, 0, 0, 0, 253, 0,
255, 0, 253, 253, 0, 253, 252, 252, 254, 0, 253, 0, 253, 0, 0, 0,
0, 255, 0, 0, 1, 0, 1, 255, 0, 0, 0, 0, 0, 1, 255, 0,
0, 0, 255, 1, 1, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 255, 0, 254, 0, 254, 0, 0, 255, 0, 4, 0, 0,
255, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 0, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 255, 254, 0, 0, 0,
0, 0, 0, 0, 0, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0,
0, 0, 0, 255, 0, 0, 0, 0, 255, 254, 0, 254, 0, 252, 255, 252,
3, 0, 0, 253, 1, 3, 3, 0, 253, 0, 254, 0, 0, 250, 1, 255,
1, 249, 1, 0, 0, 0, 249, 0, 249, 255, 245, 255, 0, 250, 0, 3,
4, 0, 2, 0, 0, 0, 0, 0, 0, 254, 254, 0, 252, 0, 0, 0,
255, 0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 255, 0, 255, 254, 0,
0, 0, 0, 0, 0, 0, 255, 255, 0, 255, 254, 255, 0, 0, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 254, 0, 255,
0, 253, 1, 0, 0, 254, 1, 1, 1, 0, 0, 0, 0, 0, 0, 255,
0, 0, 0, 0, 0, 1, 0, 0, 255, 0, 255, 255, 254, 0, 0, 0,
0, 0, 0, 0, 1, 0, 255, 0, 0, 0, 0, 255, 254, 0, 254, 0,
4, 255, 0, 252, 0, 0, 3, 250, 249, 251, 253, 1, 0, 255, 248, 254,
0, 254, 0, 253, 2, 254, 248, 0, 253, 0, 0, 1, 0, 1, 255, 0,
1, 0, 252, 251, 0, 250, 253, 253, 253, 252, 254, 253, 0, 254, 253, 1,
0, 0, 0, 255, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 255, 0, 255, 0, 0, 255, 0, 254, 253, 253, 0,
0, 252, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 1, 255, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 0, 0, 0, 254, 0, 0, 0, 0, 250, 252, 0, 0, 0,
254, 250, 0, 0, 255, 1, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 254, 0, 0, 0, 0, 2, 0, 1, 253, 253, 0, 255,
255, 254, 0, 0, 0, 0, 0, 0, 252, 0, 255, 0, 254, 255, 0, 253,
253, 252, 255, 0, 253, 0, 252, 0, 0, 0, 0, 10, 0, 0, 1, 0,
0, 254, 0, 1, 0, 250, 0, 0, 0, 0, 0, 244, 254, 4, 4, 255,
251, 0, 1, 254, 0, 250, 255, 254, 1, 247, 255, 2, 0, 2, 252, 254,
251, 252, 251, 0, 0, 248, 0, 7, 0, 0, 255, 0, 0, 0, 255, 255,
255, 253, 252, 0, 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
0, 255, 255, 254, 0, 0, 253, 0, 255, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, 0, 3, 0, 2,
0, 253, 1, 255, 0, 253, 255, 0, 254, 255, 255, 0, 254, 254, 0, 0,
255, 0, 255, 254, 254, 0, 0, 255, 0, 1, 255, 0, 253, 0, 0, 0,
253, 0, 254, 0, 254, 254, 1, 0, 0, 0, 0, 0, 0, 0, 0, 253,
1, 0, 254, 0, 255, 254, 252, 255, 255, 255, 0, 255, 254, 0, 0, 0,
0, 0, 0, 255, 255, 255, 0, 0, 0, 0, 2, 255, 0, 255, 0, 0,
0, 255, 254, 255, 255, 254, 255, 0, 1, 5, 0, 0, 253, 0, 255, 3,
0, 255, 251, 254, 2, 0, 0, 250, 254, 1, 254, 1, 0, 255, 255, 252,
0, 254, 1, 0, 0, 254, 0, 0, 0, 1, 1, 253, 254, 0, 254, 255,
254, 255, 255, 0, 254, 1, 254, 254, 4, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 0, 254, 0, 0, 255, 255, 0, 0, 0, 0, 255, 0,
0, 0, 0, 255, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 254, 0,
253, 0, 0, 0, 252, 0, 1, 253, 3, 0, 255, 250, 0, 0, 253, 255,
0, 251, 253, 252, 0, 0, 250, 255, 251, 251, 250, 0, 253, 0, 1, 9,
254, 0, 253, 255, 0, 255, 254, 253, 254, 251, 251, 253, 255, 0, 0, 255,
0, 0, 0, 0, 247, 255, 4, 3, 253, 251, 0, 0, 252, 0, 250, 255,
255, 3, 244, 254, 0, 0, 0, 248, 254, 249, 255, 247, 0, 0, 247, 0,
8, 0, 0, 255, 0, 0, 0, 0, 255, 255, 251, 255, 0, 248, 0, 0,
0, 0, 252, 0, 255, 0, 0, 252, 250, 0, 0, 255, 254, 252, 255, 0,
255, 0, 0, 0, 0, 250, 255, 252, 252, 255, 254, 253, 255, 254, 0, 253,
255, 252, 254, 0, 254, 254, 255, 254, 0, 1, 0, 255, 252, 0, 3, 0,
254, 0, 0, 0, 0, 2, 0, 1, 253, 5, 0, 255, 255, 254, 0, 0,
0, 0, 0, 0, 252, 0, 255, 0, 254, 255, 0, 253, 253, 252, 255, 0,
253, 1, 5, 0, 0, 0, 0, 10, 0, 0, 1, 0, 0, 254, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 253,
0, 0, 0, 0, 0, 255, 0, 0, 0, 255, 255, 0, 0, 253, 255, 0,
0, 253, 0, 2, 255, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
2, 3, 1, 255, 0, 252, 254, 0, 4, 252, 252, 253, 253, 5, 2, 1,
245, 255, 3, 255, 0, 255, 1, 255, 252, 0, 255, 1, 254, 255, 252, 255,
0, 0, 4, 3, 0, 252, 0, 249, 254, 4, 254, 251, 0, 254, 252, 252,
255, 5, 1, 0, 254, 0, 253, 0, 1, 4, 253, 251, 251, 253, 4, 0,
0, 247, 255, 1, 254, 255, 253, 0, 253, 251, 254, 254, 255, 0, 0, 253,
253, 255, 0, 4, 3, 255, 249, 0, 249, 254, 0, 252, 249, 0, 252, 254,
252, 252, 3, 0, 0, 254, 0, 253, 255, 0, 255, 254, 0, 2, 252, 1,
0, 0, 249, 0, 255, 253, 254, 255, 252, 253, 252, 253, 0, 252, 255, 253,
254, 252, 255, 0, 0, 0, 6, 254, 0, 252, 255, 0, 255, 253, 253, 253,
252, 251, 254, 253, 3, 0, 254, 0, 250, 254, 1, 3, 252, 251, 253, 252,
4, 255, 1, 244, 254, 3, 253, 254, 251, 0, 252, 251, 254, 255, 255, 255,
253, 252, 0, 0, 0, 4, 4, 255, 248, 0, 248, 253, 3, 251, 247, 253,
252, 251, 250, 252, 3, 0, 0, 0, 0, 254, 0, 0, 1, 254, 3, 1,
254, 3, 0, 0, 252, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0,
0, 0, 255, 0, 0, 0, 0, 1, 4, 0, 0, 254, 0, 0, 0, 0,
255, 255, 254, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 255, 0,
5, 0, 2, 0, 0, 254, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 255, 2, 0, 4, 0, 0,
13, 2, 253, 253, 1, 1, 255, 0, 250, 0, 0, 6, 248, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 247, 5, 18, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 0, 254, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 253, 0, 0, 0,
0, 0, 1, 17, 253, 255, 4, 3, 253, 1, 0, 0, 1, 1, 254, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 0, 0,
0, 253, 0, 0, 0, 0, 253, 255, 0, 0, 0, 253, 0, 254, 0, 250,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 254, 0, 254, 0, 253, 0,
0, 0, 254, 1, 254, 0, 0, 253, 255, 253, 0, 0, 253, 0, 255, 0,
250, 0, 255, 0, 0, 246, 254, 251, 255, 251, 0, 0, 247, 0, 253, 255,
0, 0, 0, 0, 0, 0, 0, 0, 254, 254, 255, 254, 0, 0, 0, 0,
253, 0, 253, 2, 255, 3, 0, 255, 253, 255, 254, 254, 0, 254, 255, 255,
1, 253, 0, 0, 0, 0, 245, 255, 254, 0, 253, 0, 255, 250, 255, 0,
0, 255, 255, 0, 0, 0, 0, 1, 0, 255, 254, 255, 2, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 253,
0, 255, 0, 0, 0, 253, 1, 0, 0, 0, 253, 255, 253, 0, 0, 252,
0, 255, 0, 250, 0, 0, 0, 0, 244, 0, 253, 251, 250, 0, 0, 247,
0, 255, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 254, 255, 254, 0,
0, 0, 2, 254, 0, 4, 6, 255, 255, 252, 2, 6, 2, 3, 253, 2,
5, 2, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8, 6, 254, 255, 0, 255, 10, 6, 10, 0, 0, 0, 1, 0, 0, 5,
0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0,
0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 245, 254, 255, 251, 250, 0,
0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0,
0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 245, 254, 255, 251, 250,
0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 253, 1, 0, 255, 1, 2,
1, 252, 0, 0, 255, 1, 0, 1, 0, 0, 0, 0, 253, 0, 255, 255,
253, 0, 255, 251, 0, 8, 255, 0, 253, 255, 0, 255, 254, 0, 255, 252,
253, 254, 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 245, 254, 255,
251, 250, 0, 0, 247, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 254, 0, 252, 254, 255, 4, 255, 255, 251, 0,
255, 0, 255, 253, 0, 3, 0, 1, 0, 1, 253, 251, 254, 0, 251, 254,
253, 251, 251, 0, 254, 253, 254, 254, 255, 255, 254, 255, 0, 255, 0, 2,
0, 2, 255, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 255, 255, 255, 0, 0, 253, 0, 255, 0, 254, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 255, 0, 254, 0, 0, 0, 0, 255, 0, 0, 254, 255, 1,
0, 254, 254, 255, 0, 252, 255, 253, 255, 254, 0, 254, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 247, 0, 4, 0, 0, 254, 0, 0, 0,
0, 254, 0, 255, 0, 0, 255, 0, 0, 255, 0, 253, 0, 0, 5, 254,
252, 252, 1, 1, 1, 0, 252, 1, 2, 1, 4, 1, 4, 255, 253, 0,
0, 251, 0, 0, 252, 253, 0, 0, 253, 0, 254, 254, 0, 254, 0, 254,
0, 255, 2, 0, 255, 252, 255, 5, 0, 0, 255, 0, 253, 0, 0, 2,
253, 0, 1, 255, 1, 0, 0, 252, 0, 255, 0, 0, 255, 1, 255, 0,
0, 0, 251, 254, 253, 0, 252, 0, 0, 250, 0, 5, 255, 0, 254, 0,
1, 0, 255, 0, 255, 252, 0, 255, 1, 0, 0, 0, 0, 255, 0, 0,
1, 254, 0, 0, 0, 254, 255, 0, 254, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0, 3, 0, 0, 255,
0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 3, 0, 3, 0, 0,
0, 0, 0, 248, 249, 0, 6, 4, 2, 251, 1, 5, 0, 5, 0, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

View File

@ -0,0 +1,462 @@
/* table exported by mirkes.de's tiny hexer
filename: D:\lvgl\test\lv_port_pc_visual_studio\LvglPlatform\lvgl\tests\src\test_assets\font_2.fnt
position 0, 7252 bytes */
unsigned char const font_2_buf[7252] =
{
44, 0, 0, 0, 104, 101, 97, 100, 1, 0, 0, 0, 4, 0, 8, 0,
8, 0, 254, 255, 8, 0, 254, 255, 0, 0, 254, 255, 8, 0, 0, 0,
16, 0, 0, 0, 1, 4, 4, 4, 9, 0, 0, 0, 164, 0, 0, 0,
99, 109, 97, 112, 2, 0, 0, 0, 44, 0, 0, 0, 32, 0, 0, 0,
95, 0, 1, 0, 95, 0, 2, 0, 44, 0, 0, 0, 176, 0, 0, 0,
243, 247, 96, 0, 59, 0, 3, 0, 0, 0, 114, 31, 81, 239, 88, 239,
91, 239, 92, 239, 93, 239, 97, 239, 99, 239, 101, 239, 105, 239, 108, 239,
113, 239, 118, 239, 119, 239, 120, 239, 142, 239, 152, 239, 155, 239, 156, 239,
157, 239, 161, 239, 162, 239, 163, 239, 164, 239, 183, 239, 184, 239, 190, 239,
192, 239, 193, 239, 196, 239, 199, 239, 200, 239, 201, 239, 203, 239, 227, 239,
229, 239, 20, 240, 21, 240, 23, 240, 55, 240, 58, 240, 67, 240, 108, 240,
116, 240, 171, 240, 59, 241, 144, 241, 145, 241, 146, 241, 147, 241, 148, 241,
215, 241, 227, 241, 61, 242, 84, 242, 170, 244, 18, 247, 242, 247, 0, 0,
68, 1, 0, 0, 108, 111, 99, 97, 155, 0, 0, 0, 8, 0, 8, 0,
12, 0, 21, 0, 29, 0, 48, 0, 69, 0, 90, 0, 112, 0, 119, 0,
133, 0, 144, 0, 154, 0, 168, 0, 175, 0, 180, 0, 186, 0, 207, 0,
223, 0, 234, 0, 250, 0, 10, 1, 29, 1, 45, 1, 61, 1, 77, 1,
93, 1, 109, 1, 117, 1, 127, 1, 143, 1, 154, 1, 170, 1, 186, 1,
214, 1, 235, 1, 254, 1, 17, 2, 38, 2, 54, 2, 70, 2, 89, 2,
108, 2, 117, 2, 133, 2, 152, 2, 168, 2, 189, 2, 208, 2, 229, 2,
248, 2, 17, 3, 36, 3, 52, 3, 68, 3, 87, 3, 108, 3, 134, 3,
153, 3, 174, 3, 193, 3, 207, 3, 228, 3, 239, 3, 250, 3, 0, 4,
5, 4, 19, 4, 41, 4, 55, 4, 74, 4, 88, 4, 104, 4, 120, 4,
139, 4, 149, 4, 163, 4, 182, 4, 192, 4, 212, 4, 226, 4, 240, 4,
3, 5, 19, 5, 31, 5, 43, 5, 57, 5, 71, 5, 87, 5, 107, 5,
121, 5, 140, 5, 152, 5, 166, 5, 177, 5, 191, 5, 200, 5, 208, 5,
215, 5, 255, 5, 27, 6, 63, 6, 91, 6, 113, 6, 149, 6, 185, 6,
225, 6, 5, 7, 36, 7, 80, 7, 98, 7, 123, 7, 163, 7, 191, 7,
215, 7, 254, 7, 30, 8, 62, 8, 86, 8, 126, 8, 150, 8, 174, 8,
206, 8, 217, 8, 248, 8, 40, 9, 88, 9, 124, 9, 149, 9, 174, 9,
216, 9, 244, 9, 24, 10, 68, 10, 104, 10, 136, 10, 168, 10, 200, 10,
232, 10, 8, 11, 39, 11, 93, 11, 121, 11, 165, 11, 199, 11, 233, 11,
11, 12, 45, 12, 79, 12, 127, 12, 159, 12, 191, 12, 235, 12, 13, 13,
45, 13, 0, 0, 76, 13, 0, 0, 103, 108, 121, 102, 17, 0, 0, 0,
17, 0, 18, 172, 43, 163, 17, 163, 0, 25, 1, 25, 185, 203, 148, 128,
0, 45, 0, 50, 130, 41, 48, 37, 205, 209, 132, 3, 144, 54, 70, 64,
132, 132, 128, 0, 39, 135, 171, 128, 64, 1, 94, 209, 59, 64, 0, 70,
192, 128, 66, 74, 214, 217, 128, 64, 0, 54, 0, 58, 172, 56, 49, 132,
4, 27, 0, 19, 172, 51, 136, 4, 19, 147, 3, 16, 68, 16, 44, 7,
179, 4, 204, 128, 5, 157, 0, 12, 225, 16, 65, 141, 80, 29, 76, 201,
0, 0, 0, 0, 13, 129, 17, 185, 57, 0, 0, 21, 135, 155, 132, 16,
88, 13, 1, 192, 13, 0, 88, 4, 16, 21, 135, 147, 185, 140, 133, 134,
5, 140, 185, 128, 25, 129, 161, 164, 32, 55, 64, 10, 136, 0, 37, 0,
170, 0, 16, 0, 5, 0, 36, 236, 136, 5, 0, 0, 14, 135, 145, 128,
58, 184, 128, 24, 129, 24, 173, 48, 14, 128, 17, 0, 58, 0, 22, 255,
171, 128, 5, 0, 1, 64, 0, 65, 0, 5, 0, 2, 48, 0, 72, 128,
12, 128, 0, 42, 128, 42, 133, 93, 147, 48, 13, 201, 128, 99, 48, 13,
133, 93, 144, 23, 128, 26, 207, 16, 81, 5, 16, 81, 5, 16, 36, 128,
42, 181, 92, 128, 0, 96, 0, 44, 0, 67, 128, 79, 85, 24, 36, 128,
42, 189, 95, 0, 5, 16, 2, 84, 128, 0, 81, 69, 84, 128, 43, 0,
50, 128, 36, 128, 1, 208, 0, 13, 132, 16, 69, 214, 217, 0, 4, 152,
0, 36, 128, 42, 158, 213, 2, 176, 0, 45, 212, 0, 0, 73, 189, 85,
0, 39, 128, 42, 132, 213, 27, 56, 0, 76, 77, 19, 64, 21, 4, 205,
32, 38, 128, 42, 229, 86, 179, 128, 96, 0, 51, 128, 6, 0, 3, 56,
0, 41, 0, 42, 141, 85, 146, 176, 36, 14, 214, 156, 32, 13, 157, 77,
32, 39, 128, 42, 165, 76, 133, 136, 74, 157, 76, 192, 0, 74, 157, 92,
0, 14, 128, 18, 58, 0, 0, 58, 0, 14, 135, 19, 58, 0, 0, 58,
177, 0, 0, 37, 0, 42, 128, 0, 128, 36, 192, 46, 24, 0, 11, 72,
128, 0, 0, 37, 0, 169, 164, 204, 136, 0, 0, 36, 204, 136, 37, 0,
42, 136, 0, 1, 204, 16, 0, 54, 138, 74, 0, 0, 0, 0, 36, 128,
42, 181, 92, 128, 0, 96, 0, 82, 0, 1, 128, 1, 64, 0, 66, 7,
195, 1, 195, 188, 40, 20, 37, 78, 58, 192, 88, 5, 20, 64, 88, 5,
20, 20, 36, 204, 211, 1, 196, 58, 128, 0, 47, 120, 58, 128, 5, 200,
0, 1, 197, 8, 0, 88, 156, 128, 38, 204, 232, 133, 136, 1, 200, 48,
128, 50, 150, 204, 216, 149, 0, 66, 22, 205, 104, 149, 0, 28, 150, 204,
218, 0, 46, 128, 50, 131, 221, 81, 44, 128, 0, 73, 128, 0, 44, 128,
0, 3, 221, 81, 0, 53, 0, 58, 151, 85, 217, 129, 80, 0, 224, 21,
0, 4, 145, 80, 0, 224, 23, 85, 217, 128, 43, 0, 42, 151, 85, 65,
80, 0, 22, 213, 33, 80, 0, 23, 85, 72, 40, 128, 42, 151, 85, 65,
80, 0, 23, 85, 33, 80, 0, 21, 0, 0, 49, 128, 50, 131, 221, 81,
44, 128, 0, 73, 128, 17, 172, 128, 35, 131, 221, 81, 128, 52, 0, 50,
149, 0, 21, 21, 0, 21, 23, 85, 93, 21, 0, 21, 21, 0, 21, 0,
20, 0, 18, 149, 21, 21, 21, 21, 0, 33, 120, 42, 130, 214, 168, 0,
58, 128, 3, 168, 0, 66, 4, 213, 128, 46, 0, 50, 149, 0, 209, 21,
13, 144, 22, 99, 128, 22, 140, 168, 21, 0, 82, 0, 38, 0, 42, 149,
0, 1, 80, 0, 21, 0, 1, 80, 0, 23, 85, 56, 61, 0, 58, 150,
0, 1, 225, 107, 128, 94, 20, 201, 66, 97, 72, 220, 134, 20, 129, 128,
96, 52, 0, 50, 150, 136, 21, 22, 88, 21, 21, 37, 149, 21, 2, 229,
21, 0, 61, 0, 54, 0, 58, 131, 221, 217, 130, 200, 0, 224, 201, 128,
4, 34, 200, 0, 224, 131, 221, 217, 128, 46, 0, 50, 151, 85, 72, 21,
0, 66, 21, 0, 81, 151, 85, 48, 21, 0, 0, 0, 54, 7, 187, 3,
221, 217, 130, 200, 0, 224, 201, 128, 4, 34, 200, 0, 96, 131, 221, 217,
128, 0, 28, 201, 128, 46, 128, 50, 151, 85, 72, 21, 0, 66, 21, 0,
81, 150, 214, 64, 21, 0, 208, 128, 39, 128, 42, 149, 85, 19, 176, 0,
4, 76, 8, 0, 36, 173, 85, 24, 37, 128, 42, 213, 117, 48, 6, 0,
0, 96, 0, 6, 0, 0, 96, 0, 50, 128, 50, 156, 128, 36, 28, 128,
36, 28, 128, 36, 14, 0, 51, 3, 93, 80, 0, 45, 248, 58, 133, 136,
2, 184, 36, 128, 88, 0, 96, 171, 128, 2, 78, 0, 0, 6, 56, 0,
72, 0, 74, 202, 0, 120, 129, 201, 208, 52, 184, 73, 134, 5, 133, 133,
128, 60, 192, 68, 184, 0, 249, 1, 120, 128, 43, 0, 50, 172, 1, 80,
4, 61, 136, 0, 122, 128, 5, 37, 136, 59, 1, 88, 0, 41, 248, 58,
133, 16, 5, 128, 13, 132, 152, 0, 45, 192, 0, 0, 104, 0, 0, 6,
0, 0, 42, 0, 50, 181, 86, 104, 0, 13, 136, 0, 89, 0, 5, 152,
0, 70, 213, 80, 0, 21, 135, 155, 150, 161, 72, 20, 129, 72, 20, 129,
72, 22, 160, 22, 255, 171, 140, 128, 0, 80, 0, 2, 168, 0, 5, 0,
0, 72, 128, 1, 184, 0, 5, 0, 21, 135, 147, 198, 6, 6, 6, 6,
6, 70, 0, 37, 128, 169, 129, 224, 0, 74, 40, 19, 132, 128, 32, 7,
160, 187, 187, 128, 38, 130, 152, 131, 48, 38, 128, 42, 20, 204, 1, 76,
104, 66, 6, 9, 220, 232, 128, 43, 128, 51, 36, 0, 0, 36, 0, 0,
38, 85, 168, 37, 0, 96, 37, 0, 96, 38, 85, 40, 0, 36, 128, 42,
13, 85, 12, 32, 0, 66, 0, 0, 213, 80, 128, 43, 128, 43, 0, 0,
88, 0, 5, 141, 85, 92, 160, 29, 202, 1, 88, 212, 205, 128, 39, 0,
42, 12, 204, 140, 204, 67, 66, 128, 128, 213, 88, 128, 22, 128, 35, 5,
80, 21, 0, 78, 184, 20, 128, 20, 128, 20, 128, 0, 44, 7, 170, 141,
76, 220, 160, 14, 74, 1, 96, 213, 85, 140, 77, 24, 43, 128, 43, 36,
0, 2, 64, 0, 38, 77, 162, 72, 13, 164, 0, 98, 64, 6, 0, 18,
0, 19, 27, 128, 36, 36, 36, 36, 0, 18, 127, 155, 129, 184, 0, 1,
192, 28, 1, 192, 28, 53, 160, 39, 128, 43, 36, 0, 2, 64, 0, 36,
5, 34, 78, 24, 38, 181, 2, 64, 59, 128, 18, 0, 19, 36, 36, 36,
36, 36, 36, 0, 67, 128, 66, 38, 77, 196, 218, 36, 129, 216, 5, 164,
1, 80, 6, 36, 1, 80, 6, 0, 43, 128, 42, 38, 77, 162, 72, 13,
164, 0, 98, 64, 6, 0, 40, 128, 42, 13, 85, 12, 32, 29, 66, 1,
208, 213, 80, 128, 43, 135, 178, 166, 85, 168, 37, 0, 96, 37, 0, 96,
38, 85, 40, 36, 0, 0, 0, 43, 135, 170, 141, 84, 220, 160, 29, 202,
1, 216, 213, 77, 128, 0, 88, 26, 0, 34, 37, 208, 37, 0, 36, 0,
36, 0, 0, 32, 0, 34, 45, 202, 195, 152, 1, 188, 189, 83, 0, 26,
128, 34, 148, 128, 78, 184, 20, 128, 20, 128, 5, 200, 0, 43, 128, 42,
43, 128, 218, 184, 13, 164, 1, 216, 84, 205, 128, 36, 120, 50, 5, 128,
66, 2, 184, 88, 0, 91, 168, 0, 54, 128, 0, 57, 128, 66, 88, 7,
16, 80, 42, 172, 193, 64, 5, 80, 84, 16, 4, 192, 53, 128, 0, 35,
128, 42, 51, 141, 128, 77, 136, 5, 89, 3, 168, 216, 0, 36, 127, 178,
133, 136, 65, 129, 192, 208, 0, 85, 24, 0, 37, 0, 5, 89, 0, 0,
33, 128, 34, 44, 221, 128, 216, 133, 144, 78, 76, 0, 22, 135, 155, 133,
48, 96, 6, 2, 216, 6, 0, 96, 5, 48, 19, 7, 147, 148, 20, 20,
20, 20, 20, 20, 0, 22, 135, 155, 203, 128, 88, 5, 128, 105, 133, 128,
88, 75, 128, 37, 1, 41, 20, 154, 138, 131, 64, 0, 27, 1, 153, 147,
35, 131, 147, 168, 20, 0, 145, 128, 46, 129, 0, 64, 7, 196, 128, 0,
0, 0, 0, 0, 19, 95, 0, 70, 255, 255, 128, 127, 244, 175, 128, 121,
128, 7, 128, 120, 0, 7, 128, 120, 5, 127, 215, 248, 5, 125, 87, 208,
0, 0, 0, 64, 0, 67, 94, 230, 103, 85, 197, 128, 3, 172, 102, 179,
53, 86, 102, 179, 53, 86, 69, 128, 3, 172, 94, 230, 103, 85, 128, 64,
7, 196, 26, 10, 34, 33, 255, 191, 255, 255, 213, 165, 221, 221, 94, 46,
102, 101, 255, 191, 255, 255, 179, 139, 196, 67, 127, 191, 255, 255, 213, 165,
221, 221, 0, 64, 0, 67, 0, 0, 0, 77, 0, 0, 4, 253, 84, 128,
79, 208, 87, 204, 253, 0, 5, 127, 208, 0, 0, 76, 128, 0, 0, 44,
0, 51, 49, 128, 65, 103, 165, 122, 14, 255, 176, 5, 127, 152, 87, 190,
249, 211, 0, 217, 128, 64, 7, 196, 0, 6, 40, 128, 14, 190, 183, 56,
70, 134, 178, 248, 227, 134, 176, 115, 107, 131, 16, 115, 78, 128, 2, 121,
15, 99, 199, 192, 0, 206, 227, 0, 0, 64, 7, 196, 0, 6, 96, 0,
12, 71, 252, 64, 199, 255, 119, 252, 23, 240, 7, 121, 23, 240, 7, 121,
71, 255, 119, 252, 12, 71, 252, 64, 128, 6, 96, 0, 0, 72, 7, 204,
0, 0, 24, 17, 0, 0, 87, 213, 80, 0, 237, 53, 125, 1, 244, 95,
220, 113, 219, 111, 255, 235, 88, 71, 253, 255, 192, 4, 126, 6, 124, 0,
45, 192, 69, 168, 0, 64, 7, 196, 0, 7, 248, 0, 0, 7, 248, 0,
0, 7, 248, 0, 3, 255, 255, 184, 0, 79, 252, 128, 60, 61, 83, 195,
255, 253, 223, 255, 255, 255, 253, 223, 128, 72, 0, 75, 2, 255, 255, 250,
128, 241, 128, 1, 240, 212, 0, 0, 4, 87, 255, 176, 55, 255, 255, 255,
255, 255, 254, 255, 255, 255, 254, 128, 64, 7, 69, 0, 0, 0, 1, 129,
95, 253, 159, 151, 72, 140, 127, 205, 0, 54, 127, 152, 128, 18, 34, 34,
33, 0, 9, 255, 227, 0, 92, 255, 82, 173, 232, 249, 70, 100, 8, 24,
0, 0, 0, 0, 32, 7, 163, 128, 4, 154, 103, 255, 255, 255, 255, 213,
255, 128, 39, 128, 0, 128, 48, 7, 179, 128, 4, 128, 26, 103, 128, 255,
255, 141, 255, 255, 141, 221, 255, 128, 128, 39, 128, 0, 0, 128, 0, 72,
7, 204, 0, 0, 0, 42, 0, 0, 72, 17, 217, 154, 103, 129, 97, 223,
255, 248, 218, 182, 127, 255, 141, 171, 101, 95, 248, 22, 29, 0, 39, 129,
29, 152, 0, 8, 2, 160, 0, 64, 0, 67, 111, 255, 255, 254, 248, 63,
255, 255, 252, 103, 216, 223, 253, 173, 128, 7, 248, 0, 0, 7, 239, 255,
255, 254, 128, 56, 15, 172, 32, 0, 23, 144, 71, 249, 79, 255, 231, 255,
255, 255, 255, 175, 127, 249, 23, 125, 136, 12, 128, 56, 7, 61, 0, 0,
0, 6, 208, 128, 0, 127, 251, 128, 7, 255, 254, 160, 127, 255, 255, 215,
255, 255, 253, 127, 255, 234, 7, 255, 184, 0, 109, 8, 0, 0, 0, 0,
0, 0, 56, 7, 188, 77, 200, 77, 207, 255, 135, 255, 255, 248, 127, 255,
255, 135, 255, 255, 248, 127, 255, 255, 135, 255, 255, 248, 127, 249, 33, 1,
33, 0, 56, 7, 188, 18, 34, 34, 23, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 93, 221,
220, 0, 56, 15, 172, 16, 0, 39, 192, 23, 255, 201, 127, 255, 231, 255,
255, 255, 255, 47, 254, 145, 124, 136, 13, 128, 56, 127, 204, 0, 0, 16,
0, 0, 0, 71, 192, 0, 0, 63, 255, 184, 0, 47, 255, 255, 168, 7,
127, 255, 255, 0, 44, 68, 68, 40, 7, 255, 255, 255, 128, 85, 221, 221,
208, 0, 40, 7, 172, 0, 3, 16, 3, 250, 3, 250, 130, 251, 0, 15,
88, 0, 23, 88, 0, 23, 48, 0, 8, 0, 40, 7, 172, 19, 0, 2,
123, 128, 2, 251, 128, 3, 122, 128, 95, 8, 95, 16, 55, 16, 0, 8,
0, 0, 56, 7, 188, 0, 2, 0, 0, 1, 249, 128, 0, 39, 160, 3,
197, 125, 67, 247, 255, 255, 240, 2, 122, 0, 0, 39, 160, 0, 0, 216,
128, 0, 56, 1, 57, 60, 68, 68, 63, 127, 255, 255, 0, 72, 0, 75,
0, 70, 102, 64, 0, 238, 139, 30, 232, 231, 170, 246, 175, 229, 250, 239,
234, 254, 14, 233, 185, 238, 136, 4, 110, 100, 8, 0, 80, 127, 220, 14,
152, 0, 0, 0, 0, 47, 70, 102, 81, 0, 0, 22, 218, 36, 250, 0,
61, 13, 127, 159, 240, 131, 253, 3, 123, 255, 136, 5, 121, 129, 247, 160,
0, 3, 102, 56, 221, 136, 0, 0, 0, 0, 68, 128, 72, 127, 220, 0,
0, 31, 24, 0, 0, 0, 6, 126, 0, 0, 0, 3, 126, 123, 0, 0,
0, 118, 134, 240, 0, 0, 71, 240, 119, 192, 0, 23, 255, 183, 255, 144,
5, 255, 241, 119, 253, 0, 111, 255, 255, 255, 232, 0, 64, 7, 196, 0,
0, 0, 16, 34, 0, 2, 122, 247, 216, 231, 254, 128, 198, 104, 224, 128,
238, 64, 224, 247, 224, 223, 254, 162, 0, 2, 122, 128, 0, 0, 16, 0,
56, 0, 59, 0, 0, 0, 0, 2, 114, 0, 2, 126, 122, 2, 124, 4,
122, 92, 0, 4, 88, 0, 0, 0, 0, 56, 0, 59, 0, 0, 0, 5,
192, 0, 69, 167, 192, 71, 160, 39, 231, 160, 0, 39, 32, 0, 0, 0,
0, 0, 80, 127, 219, 128, 74, 10, 34, 32, 0, 95, 252, 93, 223, 136,
4, 91, 176, 0, 112, 128, 5, 160, 0, 15, 16, 0, 91, 162, 47, 126,
168, 3, 221, 220, 47, 192, 0, 0, 0, 0, 16, 0, 64, 0, 67, 111,
253, 128, 0, 127, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 239, 255, 255, 254, 128, 64, 7, 196, 0, 4, 200, 0, 0,
79, 252, 128, 3, 255, 255, 184, 0, 7, 248, 0, 0, 7, 248, 0, 60,
39, 250, 67, 255, 244, 71, 127, 255, 255, 253, 223, 128, 64, 127, 204, 128,
0, 0, 0, 0, 0, 0, 3, 245, 0, 0, 0, 119, 240, 0, 0, 6,
126, 0, 0, 0, 39, 184, 0, 0, 14, 240, 3, 238, 38, 249, 128, 119,
255, 241, 128, 5, 118, 56, 0, 0, 56, 7, 196, 1, 128, 0, 0, 102,
224, 22, 224, 115, 249, 119, 16, 37, 255, 241, 0, 2, 127, 208, 0, 102,
252, 252, 128, 115, 240, 63, 200, 37, 32, 2, 40, 0, 56, 7, 188, 0,
127, 251, 163, 167, 255, 163, 252, 127, 255, 255, 199, 255, 255, 252, 127, 255,
255, 199, 255, 255, 253, 188, 68, 63, 255, 255, 128, 0, 56, 7, 188, 18,
34, 32, 135, 221, 221, 241, 120, 0, 7, 239, 162, 34, 127, 255, 254, 127,
255, 252, 132, 255, 255, 234, 239, 252, 93, 221, 220, 0, 40, 127, 188, 3,
255, 176, 0, 87, 249, 0, 6, 127, 195, 128, 119, 255, 216, 3, 199, 121,
0, 0, 124, 0, 0, 31, 0, 0, 3, 40, 0, 0, 56, 7, 188, 60,
220, 184, 7, 254, 127, 128, 127, 180, 65, 135, 252, 127, 197, 255, 199, 252,
71, 252, 127, 255, 188, 71, 255, 248, 3, 255, 255, 128, 56, 7, 188, 0,
6, 128, 0, 39, 127, 24, 6, 255, 254, 128, 127, 255, 248, 31, 255, 255,
157, 255, 255, 253, 188, 68, 68, 48, 2, 122, 0, 0, 72, 0, 75, 111,
255, 255, 255, 239, 140, 64, 196, 15, 255, 85, 101, 87, 127, 245, 86, 85,
119, 248, 192, 0, 64, 254, 255, 255, 255, 254, 128, 64, 127, 85, 0, 0,
0, 0, 0, 0, 0, 0, 37, 224, 0, 0, 46, 127, 216, 0, 55, 127,
255, 160, 6, 255, 255, 254, 0, 3, 68, 103, 250, 128, 0, 0, 71, 240,
0, 0, 0, 71, 176, 0, 0, 0, 46, 128, 0, 0, 0, 0, 0, 0,
0, 48, 7, 180, 127, 252, 88, 127, 252, 125, 255, 254, 68, 127, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 128, 80, 7, 212,
0, 2, 59, 160, 0, 4, 255, 230, 127, 200, 102, 160, 0, 2, 110, 16,
37, 255, 218, 1, 0, 253, 42, 215, 136, 0, 0, 16, 128, 0, 0, 0,
119, 0, 0, 0, 0, 67, 128, 0, 0, 80, 0, 83, 18, 34, 34, 34,
32, 125, 221, 221, 221, 237, 123, 247, 119, 119, 47, 252, 127, 255, 255, 151,
250, 179, 51, 51, 85, 197, 221, 221, 221, 217, 128, 80, 0, 83, 18, 34,
34, 34, 32, 125, 221, 221, 221, 237, 123, 247, 119, 56, 47, 252, 127, 255,
192, 23, 250, 179, 51, 42, 85, 197, 221, 221, 221, 217, 128, 80, 0, 83,
18, 34, 34, 34, 32, 125, 221, 221, 221, 237, 123, 247, 112, 0, 47, 252,
127, 248, 0, 23, 250, 179, 50, 34, 85, 197, 221, 221, 221, 217, 128, 80,
0, 83, 18, 34, 34, 34, 32, 125, 221, 221, 221, 237, 123, 243, 128, 0,
47, 252, 124, 0, 0, 23, 250, 178, 162, 34, 85, 197, 221, 221, 221, 217,
128, 80, 0, 83, 18, 34, 34, 34, 32, 125, 221, 221, 221, 236, 120, 0,
0, 0, 47, 248, 0, 0, 0, 23, 250, 34, 34, 34, 86, 197, 221, 221,
221, 217, 128, 80, 7, 220, 0, 0, 0, 0, 0, 0, 0, 3, 236, 0,
0, 0, 3, 155, 32, 0, 4, 216, 200, 136, 139, 144, 119, 196, 108, 68,
108, 129, 16, 3, 36, 56, 0, 0, 0, 3, 118, 0, 0, 0, 0, 0,
0, 0, 0, 56, 7, 188, 3, 110, 225, 130, 127, 159, 104, 78, 90, 175,
149, 251, 141, 122, 95, 192, 223, 156, 228, 178, 121, 39, 249, 239, 0, 54,
246, 152, 0, 56, 7, 188, 60, 111, 236, 59, 196, 68, 67, 199, 255, 255,
196, 102, 70, 100, 70, 100, 102, 68, 102, 70, 100, 70, 100, 102, 66, 255,
255, 250, 128, 64, 127, 76, 128, 0, 0, 63, 24, 0, 0, 37, 255, 0,
0, 71, 205, 184, 0, 71, 255, 160, 0, 71, 255, 192, 0, 63, 255, 192,
0, 7, 127, 192, 0, 0, 119, 56, 0, 0, 0, 0, 0, 0, 0, 80,
0, 83, 0, 87, 255, 255, 254, 5, 255, 206, 100, 255, 215, 255, 224, 142,
127, 215, 255, 224, 142, 127, 133, 255, 206, 100, 255, 128, 87, 255, 255, 254,
0, 48, 7, 188, 3, 255, 255, 11, 219, 19, 225, 255, 92, 223, 31, 255,
255, 249, 255, 255, 255, 159, 255, 255, 249, 255, 255, 255, 158, 127, 255, 240,
128, 64, 128, 75, 0, 0, 0, 1, 128, 17, 128, 1, 120, 23, 73, 17,
47, 134, 255, 255, 255, 248, 23, 73, 17, 16, 128, 17, 128, 0, 0, 0,
244, 12, 0, 0, 107, 101, 114, 110, 3, 0, 0, 0, 155, 0, 61, 49,
0, 0, 1, 2, 0, 3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10,
11, 12, 0, 13, 14, 15, 16, 17, 18, 19, 12, 20, 20, 0, 0, 0,
21, 22, 23, 24, 25, 22, 26, 27, 28, 29, 29, 30, 31, 32, 29, 29,
22, 33, 34, 35, 3, 36, 30, 37, 37, 38, 39, 40, 41, 42, 43, 0,
44, 0, 45, 46, 47, 48, 49, 50, 51, 45, 52, 52, 53, 48, 45, 45,
46, 46, 54, 55, 56, 57, 51, 58, 58, 59, 58, 60, 41, 0, 0, 9,
61, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0,
3, 4, 5, 2, 6, 7, 8, 9, 10, 9, 10, 11, 12, 13, 14, 15,
16, 17, 12, 18, 19, 20, 21, 21, 0, 0, 0, 22, 23, 24, 25, 23,
25, 25, 25, 23, 25, 25, 26, 25, 25, 25, 25, 23, 25, 23, 25, 3,
27, 28, 29, 29, 30, 31, 32, 33, 34, 35, 0, 36, 0, 37, 38, 39,
39, 39, 0, 39, 38, 40, 41, 38, 38, 42, 42, 39, 42, 39, 42, 43,
44, 45, 46, 46, 47, 46, 48, 0, 0, 35, 9, 49, 9, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 3, 253, 0, 0, 0, 0,
249, 248, 1, 6, 3, 2, 251, 1, 6, 0, 5, 1, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 8, 1, 255, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3, 0, 252, 0, 0, 0, 0, 0, 253,
2, 3, 0, 0, 255, 0, 255, 1, 0, 255, 0, 255, 255, 253, 0, 0,
0, 0, 255, 0, 0, 254, 254, 0, 0, 255, 0, 253, 0, 0, 0, 0,
0, 0, 0, 0, 0, 255, 255, 0, 254, 0, 253, 0, 241, 0, 0, 253,
0, 3, 4, 0, 0, 253, 1, 1, 4, 3, 254, 3, 0, 0, 249, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 253, 254, 250, 0, 251, 255, 0,
0, 0, 0, 0, 5, 0, 252, 255, 0, 0, 0, 254, 0, 0, 255, 247,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 255, 5, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 4, 0, 1, 0, 0, 253, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 1,
4, 255, 0, 0, 3, 255, 252, 238, 1, 3, 3, 0, 254, 0, 5, 0,
4, 0, 4, 0, 244, 0, 254, 4, 0, 4, 255, 3, 1, 0, 0, 0,
255, 0, 0, 254, 10, 0, 10, 0, 4, 0, 5, 2, 2, 4, 0, 0,
0, 251, 0, 0, 0, 0, 0, 255, 0, 1, 254, 254, 253, 1, 0, 255,
0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
249, 0, 248, 0, 0, 0, 0, 255, 0, 13, 254, 254, 1, 1, 255, 0,
254, 1, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
244, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
0, 8, 0, 0, 251, 0, 4, 0, 247, 244, 247, 253, 4, 0, 0, 247,
0, 2, 253, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 3, 4, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
6, 0, 1, 0, 0, 0, 0, 0, 1, 1, 254, 253, 0, 0, 0, 255,
0, 0, 255, 0, 0, 0, 253, 0, 255, 0, 253, 253, 0, 253, 252, 252,
254, 0, 253, 0, 253, 0, 0, 0, 0, 255, 0, 0, 1, 0, 1, 255,
0, 0, 0, 0, 0, 1, 255, 0, 0, 0, 255, 1, 1, 0, 0, 0,
0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 255, 0, 254, 0,
254, 0, 0, 255, 0, 4, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0,
255, 255, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255, 255, 0, 255, 254, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255,
255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0,
255, 254, 0, 254, 0, 252, 255, 252, 3, 0, 0, 253, 1, 3, 3, 0,
253, 0, 254, 0, 0, 250, 1, 255, 1, 249, 1, 0, 0, 0, 249, 0,
249, 255, 245, 255, 0, 250, 0, 3, 4, 0, 2, 0, 0, 0, 0, 0,
0, 254, 254, 0, 252, 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0,
0, 0, 255, 255, 0, 255, 254, 0, 0, 0, 0, 0, 0, 0, 255, 255,
0, 255, 254, 255, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 255, 0, 254, 0, 255, 0, 253, 1, 0, 0, 254, 1, 1,
1, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 1, 0, 0,
255, 0, 255, 255, 254, 0, 0, 0, 0, 0, 0, 0, 1, 0, 255, 0,
0, 0, 0, 255, 254, 0, 254, 0, 4, 255, 0, 252, 0, 0, 3, 250,
249, 251, 253, 1, 0, 255, 248, 254, 0, 254, 0, 253, 2, 254, 248, 0,
253, 0, 0, 1, 0, 1, 255, 0, 1, 0, 252, 251, 0, 250, 253, 253,
253, 252, 254, 253, 0, 254, 253, 1, 0, 0, 0, 255, 0, 0, 0, 1,
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 255,
0, 0, 255, 0, 254, 253, 253, 0, 0, 252, 0, 0, 0, 0, 0, 0,
255, 0, 0, 0, 0, 1, 255, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 1, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 254, 0,
0, 0, 0, 250, 252, 0, 0, 0, 254, 250, 0, 0, 255, 1, 0, 253,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 254, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 254, 0, 0, 0,
0, 2, 0, 1, 253, 253, 0, 255, 255, 254, 0, 0, 0, 0, 0, 0,
252, 0, 255, 0, 254, 255, 0, 253, 253, 252, 255, 0, 253, 0, 252, 0,
0, 0, 0, 10, 0, 0, 1, 0, 0, 254, 0, 1, 0, 250, 0, 0,
0, 0, 0, 244, 254, 4, 4, 255, 251, 0, 1, 254, 0, 250, 255, 254,
1, 247, 255, 2, 0, 2, 252, 254, 251, 252, 251, 0, 0, 248, 0, 7,
0, 0, 255, 0, 0, 0, 255, 255, 255, 253, 252, 0, 244, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 255, 0, 255, 255, 254, 0, 0, 253, 0,
255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 253, 0, 0, 3, 0, 2, 0, 253, 1, 255, 0, 253, 255, 0,
254, 255, 255, 0, 254, 254, 0, 0, 255, 0, 255, 254, 254, 0, 0, 255,
0, 1, 255, 0, 253, 0, 0, 0, 253, 0, 254, 0, 254, 254, 1, 0,
0, 0, 0, 0, 0, 0, 0, 253, 1, 0, 254, 0, 255, 254, 252, 255,
255, 255, 0, 255, 254, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0,
0, 0, 2, 255, 0, 255, 0, 0, 0, 255, 254, 255, 255, 254, 255, 0,
1, 5, 0, 0, 253, 0, 255, 3, 0, 255, 251, 254, 2, 0, 0, 250,
254, 1, 254, 1, 0, 255, 255, 252, 0, 254, 1, 0, 0, 254, 0, 0,
0, 1, 1, 253, 254, 0, 254, 255, 254, 255, 255, 0, 254, 1, 254, 254,
4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 254, 0, 0,
255, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0, 255, 0, 0, 0, 0,
0, 255, 0, 0, 0, 0, 254, 0, 253, 0, 0, 0, 252, 0, 1, 253,
3, 0, 255, 250, 0, 0, 253, 255, 0, 251, 253, 252, 0, 0, 250, 255,
251, 251, 250, 0, 253, 0, 1, 9, 254, 0, 253, 255, 0, 255, 254, 253,
254, 251, 251, 253, 255, 0, 0, 255, 0, 0, 0, 0, 247, 255, 4, 3,
253, 251, 0, 0, 252, 0, 250, 255, 255, 3, 244, 254, 0, 0, 0, 248,
254, 249, 255, 247, 0, 0, 247, 0, 8, 0, 0, 255, 0, 0, 0, 0,
255, 255, 251, 255, 0, 248, 0, 0, 0, 0, 252, 0, 255, 0, 0, 252,
250, 0, 0, 255, 254, 252, 255, 0, 255, 0, 0, 0, 0, 250, 255, 252,
252, 255, 254, 253, 255, 254, 0, 253, 255, 252, 254, 0, 254, 254, 255, 254,
0, 1, 0, 255, 252, 0, 3, 0, 254, 0, 0, 0, 0, 2, 0, 1,
253, 5, 0, 255, 255, 254, 0, 0, 0, 0, 0, 0, 252, 0, 255, 0,
254, 255, 0, 253, 253, 252, 255, 0, 253, 1, 5, 0, 0, 0, 0, 10,
0, 0, 1, 0, 0, 254, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 255, 253, 0, 0, 0, 0, 0, 255, 0, 0,
0, 255, 255, 0, 0, 253, 255, 0, 0, 253, 0, 2, 255, 0, 0, 0,
0, 0, 0, 1, 0, 0, 0, 0, 2, 3, 1, 255, 0, 252, 254, 0,
4, 252, 252, 253, 253, 5, 2, 1, 245, 255, 3, 255, 0, 255, 1, 255,
252, 0, 255, 1, 254, 255, 252, 255, 0, 0, 4, 3, 0, 252, 0, 249,
254, 4, 254, 251, 0, 254, 252, 252, 255, 5, 1, 0, 254, 0, 253, 0,
1, 4, 253, 251, 251, 253, 4, 0, 0, 247, 255, 1, 254, 255, 253, 0,
253, 251, 254, 254, 255, 0, 0, 253, 253, 255, 0, 4, 3, 255, 249, 0,
249, 254, 0, 252, 249, 0, 252, 254, 252, 252, 3, 0, 0, 254, 0, 253,
255, 0, 255, 254, 0, 2, 252, 1, 0, 0, 249, 0, 255, 253, 254, 255,
252, 253, 252, 253, 0, 252, 255, 253, 254, 252, 255, 0, 0, 0, 6, 254,
0, 252, 255, 0, 255, 253, 253, 253, 252, 251, 254, 253, 3, 0, 254, 0,
250, 254, 1, 3, 252, 251, 253, 252, 4, 255, 1, 244, 254, 3, 253, 254,
251, 0, 252, 251, 254, 255, 255, 255, 253, 252, 0, 0, 0, 4, 4, 255,
248, 0, 248, 253, 3, 251, 247, 253, 252, 251, 250, 252, 3, 0, 0, 0,
0, 254, 0, 0, 1, 254, 3, 1, 254, 3, 0, 0, 252, 0, 0, 0,
0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 1,
4, 0, 0, 254, 0, 0, 0, 0, 255, 255, 254, 0, 0, 0, 0, 1,
0, 0, 0, 0, 1, 0, 255, 0, 5, 0, 2, 0, 0, 254, 0, 3,
0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,
0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
248, 0, 255, 2, 0, 4, 0, 0, 13, 2, 253, 253, 1, 1, 255, 0,
250, 0, 0, 6, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
247, 5, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 254, 255, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 255, 0, 253, 0, 0, 0, 0, 0, 1, 17, 253, 255, 4, 3,
253, 1, 0, 0, 1, 1, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 239, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 252, 0, 0, 0, 253, 0, 0, 0, 0, 253, 255,
0, 0, 0, 253, 0, 254, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255,
0, 0, 254, 0, 254, 0, 253, 0, 0, 0, 254, 1, 254, 0, 0, 253,
255, 253, 0, 0, 253, 0, 255, 0, 250, 0, 255, 0, 0, 246, 254, 251,
255, 251, 0, 0, 247, 0, 253, 255, 0, 0, 0, 0, 0, 0, 0, 0,
254, 254, 255, 254, 0, 0, 0, 0, 253, 0, 253, 2, 255, 3, 0, 255,
253, 255, 254, 254, 0, 254, 255, 255, 1, 253, 0, 0, 0, 0, 245, 255,
254, 0, 253, 0, 255, 250, 255, 0, 0, 255, 255, 0, 0, 0, 0, 1,
0, 255, 254, 255, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 0, 0, 253, 0, 255, 0, 0, 0, 253, 1, 0,
0, 0, 253, 255, 253, 0, 0, 252, 0, 255, 0, 250, 0, 0, 0, 0,
244, 0, 253, 251, 250, 0, 0, 247, 0, 255, 254, 0, 0, 0, 0, 0,
0, 0, 0, 255, 254, 255, 254, 0, 0, 0, 2, 254, 0, 4, 6, 255,
255, 252, 2, 6, 2, 3, 253, 2, 5, 2, 4, 3, 3, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 8, 6, 254, 255, 0, 255, 10, 6,
10, 0, 0, 0, 1, 0, 0, 5, 0, 0, 254, 0, 0, 0, 0, 0,
0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
0, 0, 245, 254, 255, 251, 250, 0, 0, 247, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0,
0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,
0, 0, 0, 245, 254, 255, 251, 250, 0, 0, 251, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0,
0, 0, 253, 1, 0, 255, 1, 2, 1, 252, 0, 0, 255, 1, 0, 1,
0, 0, 0, 0, 253, 0, 255, 255, 253, 0, 255, 251, 0, 8, 255, 0,
253, 255, 0, 255, 254, 0, 255, 252, 253, 254, 0, 0, 0, 254, 0, 0,
0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 0, 245, 254, 255, 251, 250, 0, 0, 247, 0, 0, 0,
0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, 0,
252, 254, 255, 4, 255, 255, 251, 0, 255, 0, 255, 253, 0, 3, 0, 1,
0, 1, 253, 251, 254, 0, 251, 254, 253, 251, 251, 0, 254, 253, 254, 254,
255, 255, 254, 255, 0, 255, 0, 2, 0, 2, 255, 0, 4, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 253, 0,
255, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 254, 0, 0,
0, 0, 255, 0, 0, 254, 255, 1, 0, 254, 254, 255, 0, 252, 255, 253,
255, 254, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247,
0, 4, 0, 0, 254, 0, 0, 0, 0, 254, 0, 255, 0, 0, 255, 0,
0, 255, 0, 253, 0, 0, 5, 254, 252, 252, 1, 1, 1, 0, 252, 1,
2, 1, 4, 1, 4, 255, 253, 0, 0, 251, 0, 0, 252, 253, 0, 0,
253, 0, 254, 254, 0, 254, 0, 254, 0, 255, 2, 0, 255, 252, 255, 5,
0, 0, 255, 0, 253, 0, 0, 2, 253, 0, 1, 255, 1, 0, 0, 252,
0, 255, 0, 0, 255, 1, 255, 0, 0, 0, 251, 254, 253, 0, 252, 0,
0, 250, 0, 5, 255, 0, 254, 0, 1, 0, 255, 0, 255, 252, 0, 255,
1, 0, 0, 0, 0, 255, 0, 0, 1, 254, 0, 0, 0, 254, 255, 0,
254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 248, 0, 3, 0, 0, 255, 0, 0, 0, 0, 0, 0, 255, 255,
0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 248, 249, 0, 6, 4,
2, 251, 1, 5, 0, 5, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0
};

View File

@ -0,0 +1,314 @@
/* table exported by mirkes.de's tiny hexer
filename: D:\lvgl\test\lv_port_pc_visual_studio\LvglPlatform\lvgl\tests\src\test_assets\font_3.fnt
position 0, 4892 bytes */
unsigned char const font_3_buf[4892] =
{
44, 0, 0, 0, 104, 101, 97, 100, 1, 0, 0, 0, 3, 0, 20, 0,
17, 0, 251, 255, 21, 0, 251, 255, 0, 0, 251, 255, 17, 0, 12, 0,
16, 0, 0, 0, 0, 4, 5, 5, 0, 1, 0, 0, 28, 0, 0, 0,
99, 109, 97, 112, 1, 0, 0, 0, 28, 0, 0, 0, 32, 0, 0, 0,
95, 0, 1, 0, 95, 0, 2, 0, 204, 0, 0, 0, 108, 111, 99, 97,
96, 0, 0, 0, 8, 0, 8, 0, 11, 0, 27, 0, 43, 0, 130, 0,
215, 0, 37, 1, 116, 1, 126, 1, 188, 1, 250, 1, 43, 2, 71, 2,
86, 2, 94, 2, 103, 2, 156, 2, 230, 2, 252, 2, 65, 3, 135, 3,
189, 3, 0, 4, 73, 4, 126, 4, 201, 4, 18, 5, 38, 5, 68, 5,
111, 5, 130, 5, 176, 5, 237, 5, 72, 6, 147, 6, 213, 6, 19, 7,
79, 7, 115, 7, 145, 7, 218, 7, 241, 7, 14, 8, 51, 8, 113, 8,
130, 8, 184, 8, 235, 8, 49, 9, 97, 9, 189, 9, 252, 9, 73, 10,
95, 10, 137, 10, 214, 10, 53, 11, 134, 11, 193, 11, 250, 11, 12, 12,
62, 12, 81, 12, 114, 12, 123, 12, 132, 12, 187, 12, 240, 12, 37, 13,
94, 13, 147, 13, 195, 13, 8, 14, 43, 14, 80, 14, 116, 14, 166, 14,
193, 14, 225, 14, 255, 14, 55, 15, 114, 15, 170, 15, 193, 15, 250, 15,
33, 16, 62, 16, 117, 16, 187, 16, 244, 16, 62, 17, 107, 17, 168, 17,
175, 17, 235, 17, 8, 18, 0, 0, 103, 108, 121, 102, 0, 0, 0, 32,
6, 241, 251, 0, 255, 230, 145, 7, 100, 3, 8, 23, 105, 139, 0, 26,
140, 88, 224, 7, 176, 7, 198, 1, 24, 8, 4, 60, 160, 3, 112, 0,
24, 240, 12, 94, 96, 126, 96, 28, 128, 96, 160, 96, 29, 228, 0, 243,
0, 242, 160, 1, 84, 1, 87, 248, 219, 252, 109, 238, 29, 46, 15, 46,
15, 40, 8, 216, 18, 218, 18, 198, 1, 24, 136, 8, 68, 1, 220, 64,
13, 32, 12, 34, 86, 17, 51, 4, 0, 221, 195, 94, 225, 175, 96, 61,
208, 69, 200, 77, 248, 10, 0, 25, 12, 25, 12, 2, 210, 16, 210, 0,
241, 184, 1, 16, 1, 128, 15, 149, 48, 12, 190, 32, 31, 252, 71, 128,
180, 0, 219, 6, 75, 110, 0, 130, 126, 221, 12, 8, 32, 64, 0, 164,
28, 4, 3, 140, 128, 14, 14, 1, 38, 176, 88, 69, 160, 7, 14, 154,
94, 168, 6, 44, 194, 149, 72, 7, 29, 105, 50, 18, 144, 4, 82, 26,
244, 160, 25, 192, 208, 36, 64, 42, 13, 23, 31, 136, 99, 19, 132, 73,
187, 137, 112, 2, 109, 97, 234, 16, 14, 16, 14, 0, 24, 240, 126, 228,
0, 124, 145, 11, 117, 0, 246, 19, 42, 120, 15, 24, 4, 32, 29, 38,
96, 6, 153, 137, 116, 94, 0, 37, 86, 106, 188, 18, 128, 106, 238, 88,
180, 128, 120, 68, 16, 104, 1, 248, 154, 0, 63, 161, 17, 61, 199, 0,
198, 176, 204, 168, 130, 0, 80, 135, 138, 140, 88, 1, 52, 0, 127, 180,
195, 21, 24, 176, 3, 204, 202, 136, 32, 8, 22, 240, 2, 103, 235, 0,
113, 89, 176, 202, 128, 106, 10, 156, 30, 0, 196, 14, 1, 56, 6, 48,
112, 97, 176, 13, 65, 47, 42, 224, 24, 216, 225, 168, 3, 137, 0, 20,
1, 195, 133, 1, 162, 11, 199, 3, 47, 35, 65, 162, 36, 6, 6, 84,
117, 18, 49, 0, 168, 160, 164, 16, 80, 2, 160, 3, 4, 5, 212, 92,
8, 64, 22, 170, 59, 71, 27, 32, 34, 134, 82, 245, 0, 225, 0, 56,
24, 128, 30, 205, 96, 14, 16, 13, 146, 1, 88, 200, 1, 211, 132, 1,
10, 96, 7, 9, 0, 172, 76, 0, 38, 128, 18, 134, 128, 68, 2, 1,
8, 24, 7, 8, 4, 32, 32, 17, 129, 128, 78, 30, 1, 16, 168, 6,
115, 16, 10, 194, 64, 34, 86, 0, 214, 20, 1, 14, 171, 128, 71, 168,
30, 205, 98, 0, 238, 144, 13, 237, 0, 17, 195, 152, 4, 229, 224, 26,
140, 192, 18, 133, 0, 68, 40, 1, 148, 132, 2, 16, 32, 8, 193, 192,
33, 0, 225, 7, 0, 140, 8, 2, 113, 16, 4, 72, 1, 40, 120, 5,
194, 160, 3, 72, 0, 184, 216, 1, 65, 160, 23, 224, 128, 64, 9, 84,
160, 13, 62, 32, 31, 8, 8, 6, 16, 7, 128, 97, 46, 180, 17, 3,
108, 10, 170, 228, 126, 76, 14, 187, 0, 13, 189, 32, 21, 10, 185, 128,
102, 100, 88, 208, 4, 50, 76, 48, 142, 0, 27, 224, 3, 188, 0, 8,
84, 176, 13, 16, 0, 252, 172, 1, 255, 214, 223, 248, 135, 254, 230, 34,
128, 4, 90, 247, 98, 29, 219, 0, 63, 250, 64, 31, 8, 96, 175, 64,
16, 9, 193, 128, 132, 148, 96, 22, 152, 0, 17, 144, 39, 136, 242, 83,
191, 180, 32, 8, 48, 140, 49, 115, 145, 64, 240, 23, 211, 0, 15, 102,
128, 120, 142, 128, 61, 64, 192, 30, 100, 16, 14, 65, 224, 15, 112, 40,
7, 149, 128, 60, 193, 64, 30, 210, 48, 14, 20, 160, 15, 48, 40, 7,
169, 8, 3, 140, 180, 3, 212, 12, 1, 230, 80, 15, 40, 112, 7, 128,
8, 20, 240, 2, 95, 251, 16, 2, 91, 86, 97, 90, 128, 44, 126, 101,
227, 64, 131, 34, 0, 25, 5, 48, 32, 12, 33, 190, 12, 1, 68, 128,
136, 2, 27, 117, 0, 227, 196, 184, 0, 213, 129, 168, 1, 8, 50, 233,
0, 128, 60, 30, 128, 56, 76, 60, 3, 40, 106, 12, 136, 5, 96, 161,
99, 243, 46, 41, 0, 45, 171, 48, 173, 128, 16, 12, 240, 12, 72, 0,
108, 220, 159, 147, 0, 50, 93, 128, 29, 104, 224, 1, 0, 255, 247, 128,
0, 22, 240, 0, 207, 127, 64, 6, 47, 101, 98, 125, 0, 164, 110, 211,
138, 78, 0, 67, 64, 10, 3, 0, 94, 64, 49, 128, 67, 10, 1, 144,
48, 3, 244, 3, 0, 125, 37, 34, 1, 231, 101, 96, 15, 36, 29, 0,
120, 236, 180, 3, 195, 163, 226, 1, 236, 29, 32, 15, 89, 26, 59, 241,
130, 129, 196, 121, 64, 0, 20, 240, 0, 207, 127, 64, 4, 62, 202, 234,
250, 0, 177, 171, 139, 114, 96, 65, 80, 10, 131, 3, 184, 1, 255, 194,
176, 240, 8, 94, 117, 157, 64, 35, 134, 33, 192, 12, 95, 235, 59, 64,
15, 39, 135, 128, 136, 3, 16, 168, 118, 0, 112, 152, 25, 32, 4, 192,
129, 193, 118, 139, 146, 128, 46, 101, 117, 125, 16, 0, 22, 240, 15, 31,
248, 3, 247, 128, 127, 49, 128, 126, 25, 67, 0, 250, 194, 128, 62, 69,
129, 0, 250, 73, 192, 62, 114, 144, 15, 138, 21, 0, 62, 144, 176, 15,
141, 3, 191, 227, 15, 240, 196, 120, 65, 224, 157, 252, 65, 14, 1, 255,
202, 8, 20, 240, 7, 255, 202, 2, 2, 103, 194, 6, 13, 153, 200, 12,
28, 1, 240, 129, 128, 124, 64, 113, 80, 96, 23, 132, 186, 190, 56, 3,
138, 123, 146, 16, 64, 218, 194, 38, 128, 160, 15, 148, 12, 3, 227, 0,
15, 216, 6, 32, 33, 52, 48, 10, 3, 3, 131, 42, 117, 16, 160, 90,
168, 192, 246, 0, 8, 20, 240, 8, 99, 125, 64, 50, 115, 154, 48, 4,
86, 21, 214, 96, 20, 133, 40, 7, 10, 26, 128, 121, 2, 197, 157, 64,
34, 13, 233, 138, 209, 14, 5, 142, 227, 21, 0, 80, 226, 41, 36, 16,
2, 0, 101, 5, 16, 96, 13, 224, 56, 26, 1, 180, 25, 9, 200, 0,
74, 38, 28, 27, 84, 208, 160, 1, 226, 42, 147, 16, 0, 8, 20, 254,
255, 253, 110, 205, 228, 3, 153, 248, 130, 64, 60, 44, 162, 1, 230, 9,
0, 250, 72, 192, 60, 163, 96, 31, 72, 176, 7, 140, 204, 1, 244, 133,
0, 120, 85, 8, 3, 210, 30, 1, 243, 18, 0, 121, 134, 128, 62, 176,
96, 14, 8, 20, 240, 1, 87, 126, 168, 4, 58, 168, 193, 82, 0, 176,
170, 78, 147, 16, 32, 40, 5, 64, 128, 96, 31, 24, 32, 40, 5, 64,
129, 39, 84, 157, 42, 16, 5, 2, 177, 26, 0, 30, 87, 126, 139, 4,
32, 168, 129, 108, 152, 193, 0, 50, 6, 0, 12, 3, 24, 0, 197, 72,
2, 176, 208, 160, 218, 140, 99, 96, 76, 69, 113, 124, 0, 8, 20, 240,
2, 103, 245, 16, 4, 214, 76, 170, 193, 0, 72, 252, 220, 141, 130, 132,
136, 1, 137, 67, 64, 192, 50, 130, 120, 7, 184, 4, 128, 192, 55, 1,
160, 72, 128, 13, 192, 197, 199, 230, 176, 64, 66, 36, 217, 225, 193, 128,
13, 191, 174, 162, 64, 30, 51, 56, 7, 147, 70, 0, 37, 190, 176, 209,
0, 181, 73, 252, 192, 0, 40, 8, 181, 251, 15, 4, 41, 54, 35, 201,
0, 255, 226, 158, 64, 73, 185, 120, 25, 0, 39, 10, 240, 111, 160, 6,
130, 128, 60, 220, 0, 153, 0, 31, 252, 244, 166, 0, 18, 240, 0, 64,
55, 6, 0, 16, 144, 0, 252, 0, 8, 82, 160, 15, 146, 192, 57, 182,
212, 0, 47, 210, 109, 131, 61, 5, 93, 36, 140, 55, 138, 1, 34, 141,
210, 0, 67, 90, 203, 122, 226, 0, 41, 232, 56, 240, 12, 47, 210, 64,
31, 54, 0, 9, 20, 99, 153, 252, 110, 205, 249, 83, 255, 243, 0, 127,
138, 103, 241, 179, 127, 40, 8, 84, 163, 163, 0, 249, 215, 48, 160, 28,
152, 199, 90, 224, 24, 231, 233, 163, 228, 64, 50, 222, 19, 32, 6, 91,
194, 84, 2, 142, 165, 126, 161, 61, 115, 158, 129, 0, 58, 94, 176, 7,
37, 160, 7, 192, 8, 20, 240, 1, 223, 126, 168, 4, 184, 138, 163, 168,
0, 88, 109, 215, 139, 136, 158, 8, 0, 46, 4, 50, 224, 24, 192, 64,
60, 74, 68, 0, 247, 4, 128, 123, 14, 16, 3, 164, 221, 192, 30, 113,
128, 15, 137, 192, 63, 100, 128, 126, 17, 0, 124, 61, 224, 31, 132, 128,
48, 0, 24, 240, 13, 27, 250, 224, 28, 58, 183, 106, 155, 0, 212, 218,
200, 254, 172, 0, 69, 176, 159, 211, 187, 0, 62, 66, 82, 217, 84, 66,
8, 162, 220, 128, 32, 68, 48, 36, 19, 7, 32, 23, 112, 129, 40, 0,
92, 2, 19, 14, 32, 1, 8, 11, 9, 128, 12, 4, 12, 76, 148, 69,
232, 138, 2, 148, 1, 38, 112, 178, 108, 91, 0, 92, 159, 114, 101, 218,
32, 6, 77, 132, 67, 168, 7, 84, 165, 93, 156, 2, 0, 24, 240, 14,
207, 0, 254, 19, 5, 0, 252, 224, 15, 0, 253, 160, 136, 0, 252, 139,
162, 96, 30, 64, 199, 11, 0, 246, 131, 137, 40, 7, 156, 196, 20, 136,
1, 140, 108, 1, 96, 160, 26, 195, 38, 96, 192, 12, 160, 140, 197, 4,
16, 1, 17, 191, 245, 2, 0, 20, 52, 3, 32, 120, 3, 1, 0, 48,
154, 0, 162, 0, 60, 130, 128, 8, 20, 244, 255, 221, 138, 1, 141, 152,
133, 84, 0, 174, 101, 92, 106, 128, 31, 72, 96, 7, 198, 30, 1, 225,
176, 80, 5, 196, 39, 202, 136, 0, 110, 230, 19, 96, 10, 63, 235, 28,
48, 15, 39, 4, 0, 124, 96, 160, 31, 8, 24, 7, 208, 10, 0, 184,
132, 235, 28, 0, 13, 220, 193, 24, 0, 8, 20, 240, 1, 95, 251, 24,
2, 77, 85, 49, 76, 128, 20, 63, 83, 198, 198, 195, 2, 1, 120, 78,
131, 128, 99, 83, 97, 16, 7, 84, 145, 128, 127, 244, 8, 192, 63, 48,
136, 3, 166, 52, 28, 3, 27, 19, 12, 8, 5, 1, 33, 67, 243, 45,
71, 48, 76, 87, 97, 152, 0, 8, 22, 247, 255, 187, 24, 3, 202, 238,
25, 209, 0, 223, 19, 178, 88, 1, 249, 152, 76, 1, 250, 3, 64, 63,
9, 32, 7, 240, 128, 127, 156, 4, 3, 243, 128, 128, 126, 16, 15, 225,
36, 0, 253, 1, 160, 31, 59, 27, 0, 95, 19, 176, 90, 1, 149, 220,
51, 162, 0, 8, 20, 243, 255, 252, 192, 2, 102, 242, 128, 18, 103, 198,
1, 255, 222, 111, 254, 128, 8, 157, 251, 0, 36, 136, 228, 0, 255, 234,
164, 71, 144, 0, 78, 254, 192, 8, 20, 242, 255, 253, 32, 2, 102, 246,
0, 30, 103, 202, 1, 255, 222, 95, 254, 144, 8, 157, 251, 0, 39, 136,
229, 0, 255, 243, 128, 0, 22, 240, 8, 175, 253, 138, 1, 147, 81, 10,
85, 32, 21, 14, 221, 113, 178, 3, 140, 16, 5, 225, 225, 128, 224, 24,
231, 129, 68, 64, 28, 202, 2, 64, 31, 252, 38, 136, 156, 3, 218, 239,
72, 9, 0, 87, 254, 32, 2, 136, 128, 63, 104, 72, 7, 230, 39, 64,
8, 136, 1, 120, 221, 166, 244, 40, 0, 94, 202, 204, 125, 64, 8, 20,
249, 241, 0, 195, 242, 1, 255, 242, 239, 253, 192, 25, 157, 243, 0, 104,
143, 0, 127, 250, 0, 8, 20, 244, 255, 252, 140, 216, 0, 205, 138, 102,
1, 153, 136, 3, 255, 254, 1, 255, 205, 41, 152, 6, 102, 38, 108, 0,
102, 192, 0, 22, 240, 15, 211, 230, 1, 255, 255, 0, 255, 230, 187, 0,
113, 128, 85, 32, 28, 224, 97, 65, 32, 19, 146, 128, 28, 219, 103, 32,
172, 2, 200, 6, 38, 193, 0, 8, 22, 244, 248, 0, 201, 250, 1, 241,
80, 120, 7, 220, 52, 64, 30, 147, 101, 0, 242, 177, 72, 7, 138, 131,
192, 60, 60, 16, 64, 30, 99, 10, 0, 252, 138, 80, 1, 226, 171, 23,
32, 14, 81, 20, 7, 0, 126, 99, 51, 0, 126, 224, 129, 0, 248, 156,
108, 3, 244, 18, 160, 8, 20, 240, 251, 0, 255, 255, 128, 127, 250, 150,
35, 204, 0, 23, 127, 96, 8, 20, 248, 253, 0, 213, 246, 0, 34, 0,
74, 1, 202, 0, 80, 14, 43, 0, 120, 136, 2, 67, 16, 86, 0, 218,
14, 161, 96, 25, 139, 124, 76, 64, 50, 162, 184, 7, 172, 1, 160, 28,
38, 34, 64, 15, 153, 128, 31, 162, 0, 31, 253, 96, 8, 20, 249, 247,
0, 199, 242, 0, 144, 15, 225, 112, 15, 233, 0, 252, 162, 224, 31, 112,
200, 7, 207, 2, 192, 31, 48, 192, 7, 232, 22, 0, 249, 134, 28, 3,
233, 30, 0, 249, 197, 64, 63, 72, 7, 243, 136, 7, 244, 128, 0, 8,
20, 240, 1, 223, 250, 200, 2, 76, 67, 50, 105, 128, 40, 119, 50, 13,
6, 25, 32, 1, 192, 182, 3, 0, 102, 12, 113, 16, 6, 17, 57, 24,
7, 140, 192, 32, 31, 8, 8, 7, 194, 70, 1, 227, 51, 136, 128, 48,
137, 240, 24, 3, 48, 99, 12, 24, 0, 164, 88, 40, 50, 237, 163, 64,
4, 212, 77, 136, 0, 8, 22, 242, 255, 238, 145, 0, 196, 239, 43, 121,
0, 79, 17, 92, 140, 128, 126, 98, 65, 0, 252, 224, 96, 31, 152, 12,
3, 229, 52, 16, 3, 196, 87, 67, 32, 17, 59, 202, 222, 64, 18, 255,
221, 34, 1, 255, 237, 7, 89, 32, 8, 239, 253, 102, 1, 201, 136, 102,
76, 64, 8, 108, 119, 49, 163, 98, 0, 96, 130, 0, 21, 131, 0, 44,
24, 3, 40, 88, 0, 200, 3, 196, 96, 19, 0, 121, 128, 2, 1, 254,
17, 0, 127, 132, 0, 192, 30, 96, 8, 200, 3, 196, 96, 11, 5, 0,
202, 22, 0, 96, 178, 0, 21, 131, 0, 6, 199, 110, 218, 52, 32, 18,
98, 36, 33, 160, 28, 119, 255, 27, 208, 7, 225, 196, 113, 0, 254, 189,
16, 8, 22, 243, 255, 236, 96, 14, 55, 115, 20, 208, 6, 72, 132, 241,
170, 128, 63, 120, 120, 7, 226, 1, 0, 252, 64, 32, 31, 188, 56, 2,
72, 132, 241, 178, 0, 70, 238, 97, 153, 0, 103, 255, 80, 112, 7, 229,
23, 16, 15, 208, 12, 1, 249, 134, 64, 63, 164, 92, 3, 243, 4, 128,
8, 22, 240, 1, 223, 126, 40, 6, 92, 69, 81, 85, 128, 6, 135, 110,
185, 16, 224, 128, 196, 1, 72, 80, 4, 32, 24, 166, 193, 1, 148, 3,
51, 0, 108, 43, 24, 64, 57, 53, 14, 122, 0, 56, 175, 160, 95, 64,
60, 47, 202, 84, 10, 192, 29, 64, 161, 210, 128, 31, 188, 36, 64, 39,
4, 4, 114, 234, 156, 129, 144, 4, 90, 33, 134, 60, 128, 0, 24, 243,
255, 255, 32, 179, 96, 3, 55, 20, 206, 33, 153, 196, 1, 255, 255, 0,
255, 252, 128, 8, 20, 250, 241, 0, 197, 242, 1, 255, 199, 48, 15, 254,
241, 128, 127, 243, 204, 4, 3, 8, 31, 130, 0, 100, 15, 112, 146, 0,
20, 131, 141, 14, 213, 52, 104, 65, 113, 21, 73, 138, 0, 0, 24, 242,
252, 0, 246, 248, 145, 12, 3, 132, 140, 65, 1, 64, 51, 133, 128, 52,
48, 3, 96, 32, 1, 1, 192, 50, 9, 128, 74, 36, 0, 49, 112, 13,
224, 128, 11, 13, 0, 200, 26, 0, 64, 64, 12, 38, 128, 38, 128, 30,
176, 68, 6, 128, 121, 67, 60, 28, 3, 196, 69, 67, 16, 15, 144, 133,
0, 63, 104, 2, 192, 63, 32, 9, 128, 96, 0, 24, 243, 247, 0, 95,
128, 15, 220, 131, 128, 10, 4, 12, 4, 32, 96, 34, 7, 3, 1, 1,
96, 32, 6, 135, 3, 1, 16, 20, 12, 128, 64, 129, 132, 60, 149, 192,
132, 0, 64, 36, 254, 64, 196, 0, 224, 53, 34, 1, 27, 0, 8, 28,
117, 65, 196, 128, 14, 24, 12, 34, 192, 240, 1, 3, 129, 129, 56, 16,
0, 64, 72, 0, 162, 12, 1, 16, 48, 3, 128, 4, 1, 48, 24, 0,
192, 2, 1, 16, 112, 1, 64, 128, 0, 0, 24, 240, 207, 80, 12, 63,
225, 15, 8, 0, 214, 16, 32, 106, 76, 0, 37, 23, 0, 160, 32, 1,
33, 96, 24, 156, 92, 208, 212, 3, 164, 103, 195, 192, 60, 48, 38, 134,
1, 243, 128, 56, 3, 244, 128, 36, 3, 225, 114, 99, 80, 15, 88, 68,
2, 0, 56, 212, 148, 92, 152, 3, 120, 72, 2, 66, 4, 0, 166, 100,
0, 11, 140, 128, 32, 60, 3, 64, 185, 0, 0, 24, 242, 253, 0, 225,
254, 2, 66, 80, 13, 33, 32, 8, 9, 0, 204, 12, 0, 51, 192, 6,
23, 16, 10, 2, 64, 22, 18, 1, 144, 148, 84, 152, 64, 58, 2, 100,
22, 1, 229, 39, 53, 32, 15, 172, 1, 32, 31, 152, 12, 192, 31, 253,
103, 0, 255, 232, 128, 8, 20, 252, 255, 252, 150, 205, 224, 3, 60, 207,
96, 41, 0, 122, 194, 192, 61, 3, 2, 1, 196, 228, 224, 30, 144, 144,
15, 34, 21, 0, 61, 33, 96, 30, 114, 129, 0, 225, 130, 112, 15, 88,
64, 7, 145, 81, 64, 61, 0, 8, 143, 32, 130, 59, 251, 0, 39, 75,
70, 136, 130, 221, 224, 1, 127, 128, 63, 255, 224, 2, 136, 0, 78, 224,
23, 209, 9, 241, 0, 234, 6, 0, 227, 42, 0, 245, 17, 128, 115, 5,
128, 112, 163, 0, 123, 133, 0, 57, 71, 128, 60, 234, 32, 29, 64, 224,
28, 101, 64, 30, 163, 32, 14, 96, 160, 14, 20, 96, 15, 112, 160, 7,
40, 112, 31, 75, 64, 136, 152, 29, 235, 15, 241, 0, 127, 255, 192, 17,
2, 0, 59, 128, 0, 17, 208, 128, 11, 116, 1, 198, 68, 48, 13, 64,
10, 0, 204, 170, 96, 9, 131, 184, 10, 0, 161, 68, 12, 129, 27, 0,
24, 202, 130, 128, 20, 20, 15, 212, 35, 119, 252, 105, 17, 249, 0, 35,
8, 53, 115, 4, 174, 1, 243, 144, 8, 20, 176, 2, 103, 246, 40, 4,
214, 46, 227, 166, 1, 146, 216, 157, 9, 0, 68, 128, 68, 128, 66, 232,
1, 132, 2, 25, 223, 249, 64, 44, 100, 171, 196, 0, 49, 68, 170, 24,
128, 126, 23, 0, 56, 196, 188, 249, 0, 139, 21, 225, 97, 193, 64, 8,
20, 244, 248, 0, 255, 238, 62, 254, 176, 6, 120, 117, 57, 112, 8, 118,
169, 131, 2, 0, 98, 0, 20, 131, 128, 124, 129, 224, 31, 8, 24, 7,
194, 6, 1, 242, 135, 128, 20, 3, 88, 56, 0, 181, 219, 10, 4, 1,
11, 50, 25, 112, 8, 20, 176, 1, 223, 126, 168, 4, 152, 142, 193, 82,
0, 160, 201, 150, 163, 26, 139, 152, 5, 228, 186, 24, 1, 147, 88, 65,
192, 62, 16, 112, 15, 180, 48, 3, 20, 34, 139, 144, 5, 14, 224, 160,
217, 141, 87, 48, 76, 71, 112, 220, 0, 8, 20, 240, 15, 163, 208, 3,
255, 168, 187, 252, 224, 25, 168, 149, 33, 192, 3, 35, 181, 77, 16, 3,
131, 16, 0, 152, 1, 225, 128, 31, 24, 56, 7, 198, 14, 1, 247, 134,
0, 124, 224, 196, 0, 21, 0, 12, 142, 213, 60, 128, 38, 162, 84, 104,
0, 0, 8, 20, 176, 1, 87, 126, 40, 4, 122, 168, 229, 80, 0, 209,
218, 142, 55, 38, 25, 32, 10, 65, 124, 50, 103, 120, 113, 130, 51, 101,
3, 0, 103, 255, 171, 66, 192, 62, 96, 116, 0, 138, 200, 108, 46, 162,
181, 76, 19, 85, 29, 239, 16, 8, 23, 0, 14, 38, 135, 64, 14, 125,
151, 139, 0, 199, 5, 127, 237, 0, 214, 16, 128, 2, 0, 194, 12, 1,
209, 254, 96, 207, 249, 2, 230, 70, 15, 51, 40, 27, 49, 66, 217, 161,
0, 255, 255, 128, 127, 240, 128, 15, 20, 240, 3, 111, 244, 63, 160, 60,
132, 74, 64, 0, 96, 113, 221, 134, 0, 112, 145, 0, 144, 1, 224, 96,
31, 206, 1, 252, 224, 31, 120, 96, 7, 206, 12, 64, 1, 96, 0, 200,
237, 83, 196, 2, 106, 37, 118, 112, 12, 187, 251, 4, 12, 16, 160, 17,
41, 16, 14, 174, 43, 66, 64, 23, 46, 229, 76, 64, 8, 20, 244, 247,
0, 255, 238, 29, 255, 72, 128, 87, 128, 198, 218, 1, 22, 220, 233, 25,
128, 12, 64, 21, 2, 128, 60, 3, 8, 7, 241, 128, 127, 250, 0, 8,
20, 240, 12, 222, 128, 31, 112, 16, 7, 209, 204, 1, 248, 64, 59, 255,
152, 3, 51, 70, 1, 233, 154, 128, 63, 254, 211, 53, 5, 76, 156, 25,
163, 3, 102, 80, 23, 15, 48, 13, 60, 64, 24, 196, 64, 26, 184, 192,
56, 64, 127, 248, 197, 154, 32, 10, 102, 80, 15, 255, 145, 0, 112, 168,
28, 66, 124, 32, 21, 216, 169, 192, 8, 22, 244, 248, 0, 255, 241, 175,
232, 128, 121, 40, 176, 64, 57, 44, 124, 64, 56, 236, 112, 128, 56, 180,
44, 128, 60, 162, 18, 1, 250, 212, 228, 3, 206, 150, 76, 160, 31, 15,
5, 16, 7, 199, 33, 224, 31, 153, 74, 128, 8, 20, 240, 255, 230, 0,
204, 209, 128, 122, 102, 160, 15, 255, 248, 7, 255, 78, 102, 160, 169, 147,
131, 52, 96, 108, 202, 0, 24, 177, 249, 191, 213, 191, 211, 0, 155, 28,
168, 160, 184, 2, 87, 129, 20, 186, 144, 4, 96, 3, 48, 0, 192, 64,
63, 255, 224, 31, 192, 8, 20, 180, 245, 76, 253, 145, 0, 186, 217, 128,
218, 1, 46, 212, 233, 152, 128, 12, 64, 21, 131, 128, 60, 3, 8, 24,
7, 255, 192, 8, 20, 176, 2, 95, 250, 208, 2, 107, 86, 98, 219, 1,
73, 124, 203, 202, 74, 130, 196, 0, 54, 20, 96, 224, 25, 0, 220, 4,
3, 16, 59, 128, 64, 48, 131, 152, 32, 6, 64, 58, 8, 16, 0, 192,
81, 73, 124, 203, 202, 72, 26, 201, 152, 86, 192, 15, 20, 244, 246, 125,
253, 96, 13, 18, 234, 82, 224, 17, 253, 83, 2, 4, 0, 162, 0, 55,
7, 0, 120, 6, 192, 224, 15, 156, 4, 3, 231, 1, 0, 251, 3, 64,
22, 1, 19, 2, 0, 15, 102, 90, 48, 32, 7, 87, 98, 151, 0, 190,
59, 245, 128, 63, 250, 128, 15, 20, 240, 2, 239, 244, 199, 160, 61, 4,
194, 184, 0, 96, 113, 153, 136, 0, 112, 145, 0, 140, 1, 224, 96, 31,
206, 1, 252, 224, 31, 120, 96, 7, 206, 12, 64, 1, 80, 0, 192, 228,
203, 200, 2, 122, 54, 118, 112, 12, 187, 253, 0, 31, 253, 80, 24, 16,
188, 240, 109, 254, 80, 4, 200, 136, 34, 0, 61, 254, 250, 0, 45, 0,
60, 160, 31, 254, 144, 8, 20, 176, 1, 223, 126, 184, 4, 152, 174, 193,
22, 0, 144, 249, 150, 162, 64, 16, 128, 83, 76, 22, 28, 230, 4, 164,
13, 107, 25, 244, 64, 18, 95, 219, 46, 9, 58, 0, 18, 100, 44, 113,
34, 1, 8, 8, 160, 190, 98, 224, 152, 30, 149, 157, 159, 0, 8, 20,
224, 9, 156, 3, 245, 192, 7, 255, 14, 127, 196, 31, 248, 54, 100, 33,
51, 129, 25, 134, 12, 216, 3, 255, 212, 192, 128, 31, 112, 93, 77, 152,
4, 180, 74, 206, 0, 8, 20, 179, 248, 0, 209, 232, 1, 255, 232, 16,
15, 132, 3, 248, 129, 192, 50, 128, 78, 54, 207, 166, 1, 68, 22, 106,
224, 0, 0, 22, 176, 223, 0, 225, 252, 10, 5, 0, 206, 20, 12, 28,
1, 168, 24, 5, 80, 64, 2, 108, 1, 112, 48, 1, 130, 128, 36, 42,
0, 81, 24, 6, 162, 45, 64, 28, 193, 84, 6, 0, 225, 70, 85, 8,
7, 188, 75, 128, 62, 65, 18, 0, 64, 0, 24, 182, 242, 0, 85, 128,
95, 10, 14, 0, 68, 0, 12, 52, 195, 64, 132, 12, 20, 16, 8, 128,
226, 72, 28, 34, 4, 112, 197, 124, 3, 80, 7, 144, 38, 97, 65, 76,
0, 160, 132, 136, 19, 28, 0, 24, 112, 25, 13, 2, 128, 70, 168, 0,
71, 17, 0, 74, 24, 0, 193, 80, 13, 224, 96, 4, 12, 0, 0, 8,
22, 183, 249, 0, 207, 244, 14, 140, 160, 3, 130, 160, 5, 13, 136, 112,
112, 4, 52, 53, 37, 6, 1, 145, 209, 145, 192, 61, 32, 15, 0, 250,
192, 18, 1, 230, 85, 73, 72, 6, 41, 26, 100, 100, 0, 184, 52, 1,
67, 66, 16, 110, 96, 1, 177, 160, 7, 24, 241, 254, 0, 247, 120, 137,
69, 64, 50, 138, 136, 72, 112, 6, 224, 144, 1, 153, 8, 0, 40, 102,
0, 164, 44, 0, 193, 32, 25, 73, 128, 18, 42, 1, 214, 12, 131, 32,
30, 97, 190, 6, 0, 249, 137, 88, 64, 62, 144, 5, 128, 126, 17, 33,
0, 126, 113, 240, 15, 197, 4, 128, 30, 58, 192, 224, 15, 149, 71, 102,
1, 224, 8, 20, 181, 255, 252, 110, 254, 80, 1, 18, 35, 156, 40, 64,
58, 137, 212, 3, 153, 78, 0, 56, 228, 116, 3, 135, 67, 68, 3, 168,
100, 192, 58, 17, 88, 3, 145, 192, 157, 249, 8, 0, 241, 29, 160, 31,
15, 64, 12, 153, 32, 17, 219, 88, 5, 1, 68, 1, 34, 0, 48, 128,
126, 16, 12, 96, 30, 64, 208, 1, 52, 19, 0, 62, 79, 4, 1, 44,
84, 1, 36, 194, 40, 6, 64, 192, 12, 64, 96, 30, 16, 12, 32, 224,
28, 102, 0, 232, 9, 0, 201, 77, 64, 25, 126, 192, 47, 5, 59, 176,
7, 255, 96, 31, 15, 74, 195, 0, 208, 248, 96, 17, 80, 72, 6, 18,
64, 14, 17, 0, 127, 240, 28, 4, 3, 24, 40, 6, 145, 165, 32, 0,
224, 84, 128, 92, 47, 224, 7, 57, 132, 0, 96, 56, 6, 112, 16, 15,
248, 68, 1, 132, 148, 3, 80, 64, 5, 139, 102, 1, 111, 32, 6, 1,
24, 64, 61, 253, 80, 12, 198, 58, 106, 117, 32, 2, 149, 113, 250, 229,
110, 172, 22, 74, 16, 5, 73, 169, 96, 0, 0, 0
};

View File

@ -1,4 +1,4 @@
/**
/**
* @file test_font_loader.c
*
*/
@ -9,6 +9,7 @@
#if LV_BUILD_TEST
#include "../../lvgl.h"
//#include "lvgl.h"
#include "unity/unity.h"
@ -25,7 +26,9 @@
**********************/
static int compare_fonts(lv_font_t * f1, lv_font_t * f2);
void test_font_loader(void);
void test_font_loader_with_cache(void);
void test_font_loader_no_cache(void);
void test_font_loader_from_buffer(void);
/**********************
* STATIC VARIABLES
@ -39,37 +42,88 @@ void test_font_loader(void);
* GLOBAL FUNCTIONS
**********************/
/* fonts converted to C structs using the LVGL Font Converter */
extern lv_font_t font_1;
extern lv_font_t font_2;
extern lv_font_t font_3;
void test_font_loader(void)
{
/*Test with cache ('A' has cache)*/
lv_font_t * font_1_bin = lv_font_load("A:src/test_assets/font_1.fnt");
lv_font_t * font_2_bin = lv_font_load("A:src/test_assets/font_2.fnt");
lv_font_t * font_3_bin = lv_font_load("A:src/test_assets/font_3.fnt");
/* font binaries converted to plain C arrays */
extern uint8_t const font_1_buf[6876];
extern uint8_t const font_2_buf[7252];
extern uint8_t const font_3_buf[4892];
compare_fonts(&font_1, font_1_bin);
compare_fonts(&font_2, font_2_bin);
compare_fonts(&font_3, font_3_bin);
static lv_font_t * font_1_bin;
static lv_font_t * font_2_bin;
static lv_font_t * font_3_bin;
void setUp(void)
{
/* Function run before every test */
}
void tearDown(void)
{
/* Function run after every test */
lv_obj_clean(lv_scr_act());
lv_font_free(font_1_bin);
lv_font_free(font_2_bin);
lv_font_free(font_3_bin);
}
/*Test with cache ('B' has NO cache)*/
static void common(void)
{
compare_fonts(&font_1, font_1_bin);
compare_fonts(&font_2, font_2_bin);
compare_fonts(&font_3, font_3_bin);
/* create labels for testing */
lv_obj_t * scr = lv_scr_act();
lv_obj_t * label1 = lv_label_create(scr);
lv_obj_t * label2 = lv_label_create(scr);
lv_obj_t * label3 = lv_label_create(scr);
lv_obj_set_flex_flow(scr, LV_FLEX_FLOW_COLUMN);
lv_obj_set_flex_align(scr, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
lv_label_set_text(label1, "The quick brown fox jumped over the lazy dog");
lv_obj_set_style_text_font(label1, font_1_bin, 0);
lv_label_set_text(label2, "The quick brown fox jumped over the lazy dog");
lv_obj_set_style_text_font(label2, font_2_bin, 0);
lv_label_set_text(label3, "The quick brown fox jumped over the lazy dog");
lv_obj_set_style_text_font(label3, font_3_bin, 0);
TEST_ASSERT_EQUAL_SCREENSHOT("font_loader_1.png");
}
void test_font_loader_with_cache(void)
{
/*Test with cache ('A' has cache)*/
font_1_bin = lv_font_load("A:src/test_assets/font_1.fnt");
font_2_bin = lv_font_load("A:src/test_assets/font_2.fnt");
font_3_bin = lv_font_load("A:src/test_assets/font_3.fnt");
common();
}
void test_font_loader_no_cache(void)
{
/*Test without cache ('B' has NO cache)*/
font_1_bin = lv_font_load("B:src/test_assets/font_1.fnt");
font_2_bin = lv_font_load("B:src/test_assets/font_2.fnt");
font_3_bin = lv_font_load("B:src/test_assets/font_3.fnt");
compare_fonts(&font_1, font_1_bin);
compare_fonts(&font_2, font_2_bin);
compare_fonts(&font_3, font_3_bin);
common();
}
lv_font_free(font_1_bin);
lv_font_free(font_2_bin);
lv_font_free(font_3_bin);
void test_font_loader_from_buffer(void)
{
/*Test with memfs*/
font_1_bin = lv_font_load_from_buffer((void *)&font_1_buf, sizeof(font_1_buf));
font_2_bin = lv_font_load_from_buffer((void *)&font_2_buf, sizeof(font_2_buf));
font_3_bin = lv_font_load_from_buffer((void *)&font_3_buf, sizeof(font_3_buf));
common();
}
static int compare_fonts(lv_font_t * f1, lv_font_t * f2)