diff --git a/.github/workflows/arduino.yml b/.github/workflows/arduino.yml index 5a2efa266..a6fbba1ba 100644 --- a/.github/workflows/arduino.yml +++ b/.github/workflows/arduino.yml @@ -6,6 +6,7 @@ on: branches: [ master, release/v8.* ] jobs: lint: + if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/build_micropython.yml b/.github/workflows/build_micropython.yml index a0d0230c0..e28de5f1e 100644 --- a/.github/workflows/build_micropython.yml +++ b/.github/workflows/build_micropython.yml @@ -6,6 +6,7 @@ on: jobs: build: + if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} name: Build ${{ matrix.port }} port runs-on: ubuntu-latest continue-on-error: true @@ -22,7 +23,7 @@ jobs: - name: Clone lv_micropython run: | git clone https://github.com/lvgl/lv_micropython.git . - git checkout master + git checkout release/v8 - name: Initialize lv_bindings submodule run: git submodule update --init --recursive lib/lv_bindings - name: Update ${{ matrix.port }} port submodules diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 48a218abd..37f46e5cf 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -8,6 +8,7 @@ on: jobs: build: + if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} runs-on: ubuntu-latest strategy: matrix: @@ -55,6 +56,7 @@ jobs: steps: - uses: actions/checkout@v2.1.0 + - uses: ammaraskar/gcc-problem-matcher@master - name: Setup cache uses: actions/cache@v2 with: diff --git a/.github/workflows/check_conf.yml b/.github/workflows/check_conf.yml index 34599d3f4..422237098 100644 --- a/.github/workflows/check_conf.yml +++ b/.github/workflows/check_conf.yml @@ -5,6 +5,7 @@ on: jobs: verify-conf-internal: + if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} runs-on: ubuntu-latest steps: - name: Checkout diff --git a/.github/workflows/check_style.yml b/.github/workflows/check_style.yml index 63495a4ca..b5cec3ef0 100644 --- a/.github/workflows/check_style.yml +++ b/.github/workflows/check_style.yml @@ -5,6 +5,7 @@ on: jobs: verify-formatting: + if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} runs-on: ubuntu-latest steps: - name: Checkout @@ -28,12 +29,3 @@ jobs: echo "Please apply the preceding diff to your code or run scripts/code-format.py" exit 1 fi - - name: Comment PR - uses: thollander/actions-comment-pull-request@v1 - if: github.event_name == 'pull_request' && failure() - with: - message: | - Your PR needs its formatting corrected before it can be merged upstream. - - Please run `scripts/code-format.py` and commit the resulting change. - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/close_old_issues.yml b/.github/workflows/close_old_issues.yml index 45742f419..7c9d16e18 100644 --- a/.github/workflows/close_old_issues.yml +++ b/.github/workflows/close_old_issues.yml @@ -9,12 +9,20 @@ jobs: if: github.repository == 'lvgl/lvgl' runs-on: ubuntu-latest steps: - - uses: actions/stale@v3 + - uses: actions/stale@v5 with: repo-token: ${{ secrets.LVGL_BOT_TOKEN }} stale-issue-message: 'This issue is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 7 days.' - stale-pr-message: 'This PR is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 7 days.' - close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.' + stale-pr-message: | + We need some feedback on this issue. + + Now we mark this as "stale" because there was no activity here for 14 days. + + Remove the "stale" label or comment else this will be closed in 7 days. + close-issue-message: | + As there was no activity here for a while we close this issue. But don't worry, the conversation is still here and you can get back to it at any time. + + So feel free to comment if you have remarks or ideas on this topic. days-before-stale: 14 days-before-close: 7 exempt-issue-labels: 'pinned' diff --git a/.github/workflows/makefile.yml b/.github/workflows/makefile.yml new file mode 100644 index 000000000..39a9a1329 --- /dev/null +++ b/.github/workflows/makefile.yml @@ -0,0 +1,21 @@ +name: Check Makefile + +on: + push: + branches: [ master, release/v8.* ] + pull_request: + branches: [ master, release/v8.* ] + +jobs: + build: + if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} + runs-on: ubuntu-latest + name: Build using Makefile + steps: + - uses: actions/checkout@v2 + - uses: ammaraskar/gcc-problem-matcher@master + - name: Install prerequisites + run: scripts/install-prerequisites.sh + - name: Build + working-directory: tests/makefile + run: make test_file diff --git a/.gitignore b/.gitignore index 6a8878be6..f05715425 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,6 @@ test_screenshot_error.h build/ tests/build_*/ tests/report/ +.DS_Store +.vscode +*.bak diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..9d8088a89 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,30 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 + hooks: + - id: trailing-whitespace + +- repo: local + hooks: + # Run astyle over the staged files with c and h extension found in the directories + # listed in the files regex pattern. Ignoring the files in the exclude pattern. + - id: format-source + name: Formatting source files + entry: astyle --options=scripts/code-format.cfg --ignore-exclude-errors + stages: [ commit ] + language: system + pass_filenames: true + verbose: true + files: | + (?x)^( + src/ | + tests/src/test_cases/ + ) + exclude: | + (?x)^( + src/extra/libs/ | + src/lv_conf_internal.h + ) + types_or: ["c", "header"] \ No newline at end of file diff --git a/Kconfig b/Kconfig index 0c4c78e11..894046410 100644 --- a/Kconfig +++ b/Kconfig @@ -6,7 +6,7 @@ menu "LVGL configuration" # without lv_conf.h file, the lv_conf_internal.h and # lv_conf_kconfig.h files are used instead. config LV_CONF_SKIP - bool + bool "Uncheck this to use custom lv_conf.h" default y config LV_CONF_MINIMAL @@ -42,11 +42,9 @@ menu "LVGL configuration" config LV_COLOR_SCREEN_TRANSP bool "Enable more complex drawing routines to manage screens transparency." - depends on LV_COLOR_DEPTH_32 help Can be used if the UI is above another layer, e.g. an OSD menu or video player. - Requires `LV_COLOR_DEPTH = 32` colors and the screen's `bg_opa` should be set to - non LV_OPA_COVER value + The screen's `bg_opa` should be set to non LV_OPA_COVER value config LV_COLOR_MIX_ROUND_OFS int "Adjust color mix functions rounding" @@ -156,6 +154,15 @@ menu "LVGL configuration" radiuses are saved). Set to 0 to disable caching. + config LV_LAYER_SIMPLE_BUF_SIZE + int "Optimal size to buffer the widget with opacity" + default 24576 + help + "Simple layers" are used when a widget has `style_opa < 255` + to buffer the widget into a layer and blend it as an image + with the given opacity. Note that `bg_opa`, `text_opa` etc + don't require buffering into layer. + config LV_IMG_CACHE_DEF_SIZE int "Default image cache size. 0 to disable caching." default 0 @@ -205,8 +212,11 @@ menu "LVGL configuration" endmenu menu "GPU" - config LV_USE_EXTERNAL_RENDERER - bool + config LV_USE_GPU_ARM2D + bool "Enable Arm's 2D image processing library (Arm-2D) for all Cortex-M processors." + default n + help + Must deploy arm-2d library to your project and add include PATH for "arm_2d.h". config LV_USE_GPU_STM32_DMA2D bool "Enable STM32 DMA2D (aka Chrom Art) GPU." @@ -218,6 +228,16 @@ menu "LVGL configuration" Must be defined to include path of CMSIS header of target processor e.g. "stm32f769xx.h" or "stm32f429xx.h" + config LV_USE_GPU_SWM341_DMA2D + bool "Enable SWM341 DMA2D GPU." + config LV_GPU_SWM341_DMA2D_INCLUDE + string "include path of CMSIS header of target processor" + depends on LV_USE_GPU_SWM341_DMA2D + default "SWM341.h" + help + Must be defined to include path of CMSIS header of target processor + e.g. "SWM341.h" + config LV_USE_GPU_NXP_PXP bool "Use NXP's PXP GPU iMX RTxxx platforms." config LV_USE_GPU_NXP_PXP_AUTO_INIT @@ -238,12 +258,17 @@ menu "LVGL configuration" config LV_USE_GPU_SDL bool "Use SDL renderer API" - select LV_USE_EXTERNAL_RENDERER default n config LV_GPU_SDL_INCLUDE_PATH string "include path of SDL header" depends on LV_USE_GPU_SDL default "SDL2/SDL.h" + config LV_GPU_SDL_LRU_SIZE + int "Maximum buffer size to allocate for rotation" + depends on LV_USE_GPU_SDL + default 8388608 + help + Texture cache size, 8MB by default. endmenu menu "Logging" @@ -374,7 +399,7 @@ menu "LVGL configuration" bool "Left middle" config LV_PERF_MONITOR_ALIGN_RIGHT_MID bool "Right middle" - config LV_PERF_MONITOR_ALIGN_BOTTOM_CENTER + config LV_PERF_MONITOR_ALIGN_CENTER bool "Center" endchoice @@ -403,7 +428,7 @@ menu "LVGL configuration" bool "Left middle" config LV_MEM_MONITOR_ALIGN_RIGHT_MID bool "Right middle" - config LV_MEM_MONITOR_ALIGN_BOTTOM_CENTER + config LV_MEM_MONITOR_ALIGN_CENTER bool "Center" endchoice @@ -628,6 +653,10 @@ menu "LVGL configuration" Set the pixel order of the display. Important only if "subpx fonts" are used. With "normal" font it doesn't matter. + + config LV_USE_FONT_PLACEHOLDER + bool "Enable drawing placeholders when glyph dsc is not found." + default y endmenu menu "Text Settings" @@ -715,6 +744,7 @@ menu "LVGL configuration" default y if !LV_CONF_MINIMAL config LV_USE_CANVAS bool "Canvas. Dependencies: lv_img." + select LV_USE_IMG default y if !LV_CONF_MINIMAL config LV_USE_CHECKBOX bool "Check Box" @@ -814,6 +844,13 @@ menu "LVGL configuration" config LV_USE_MSGBOX bool "Msgbox." default y if !LV_CONF_MINIMAL + config LV_USE_SPAN + bool "span" + default y if !LV_CONF_MINIMAL + config LV_SPAN_SNIPPET_STACK_SIZE + int "Maximum number of span descriptor" + default 64 + depends on LV_USE_SPAN config LV_USE_SPINBOX bool "Spinbox." default y if !LV_CONF_MINIMAL @@ -829,19 +866,12 @@ menu "LVGL configuration" config LV_USE_WIN bool "Win" default y if !LV_CONF_MINIMAL - config LV_USE_SPAN - bool "span" - default y if !LV_CONF_MINIMAL - config LV_SPAN_SNIPPET_STACK_SIZE - int "Maximum number of span descriptor" - default 64 - depends on LV_USE_SPAN endmenu menu "Themes" config LV_USE_THEME_DEFAULT bool "A simple, impressive and very complete theme" - default y if !LV_CONF_MINIMAL + default y if !LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL config LV_THEME_DEFAULT_DARK bool "Yes to set dark mode, No to set light mode" depends on LV_USE_THEME_DEFAULT @@ -855,7 +885,10 @@ menu "LVGL configuration" depends on LV_USE_THEME_DEFAULT config LV_USE_THEME_BASIC bool "A very simple theme that is a good starting point for a custom theme" - default y if !LV_CONF_MINIMAL + default y if !LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL + config LV_USE_THEME_MONO + bool "Monochrome theme, suitable for some E-paper & dot matrix displays" + default y if LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL endmenu menu "Layouts" @@ -871,53 +904,54 @@ menu "LVGL configuration" config LV_USE_FS_STDIO bool "File system on top of stdio API" config LV_FS_STDIO_LETTER - string "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65 )" - depends on LV_USE_FS_STDIO != 0 + int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65 )" + default 0 + depends on LV_USE_FS_STDIO config LV_FS_STDIO_PATH string "Set the working directory" - depends on LV_USE_FS_STDIO != 0 + depends on LV_USE_FS_STDIO config LV_FS_STDIO_CACHE_SIZE string ">0 to cache this number of bytes in lv_fs_read()" - depends on LV_USE_FS_STDIO != 0 + depends on LV_USE_FS_STDIO config LV_USE_FS_POSIX bool "File system on top of posix API" config LV_FS_POSIX_LETTER int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)" default 0 - depends on LV_USE_FS_POSIX != 0 + depends on LV_USE_FS_POSIX config LV_FS_POSIX_PATH string "Set the working directory" - depends on LV_USE_FS_POSIX != 0 + depends on LV_USE_FS_POSIX config LV_FS_POSIX_CACHE_SIZE int ">0 to cache this number of bytes in lv_fs_read()" default 0 - depends on LV_USE_FS_POSIX != 0 + depends on LV_USE_FS_POSIX config LV_USE_FS_WIN32 bool "File system on top of Win32 API" config LV_FS_WIN32_LETTER int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)" default 0 - depends on LV_USE_FS_WIN32 != 0 + depends on LV_USE_FS_WIN32 config LV_FS_WIN32_PATH string "Set the working directory" - depends on LV_USE_FS_WIN32 != 0 + depends on LV_USE_FS_WIN32 config LV_FS_WIN32_CACHE_SIZE int ">0 to cache this number of bytes in lv_fs_read()" default 0 - depends on LV_USE_FS_WIN32 != 0 + depends on LV_USE_FS_WIN32 config LV_USE_FS_FATFS bool "File system on top of FatFS" config LV_FS_FATFS_LETTER int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)" default 0 - depends on LV_USE_FS_FATFS != 0 + depends on LV_USE_FS_FATFS config LV_FS_FATFS_CACHE_SIZE int ">0 to cache this number of bytes in lv_fs_read()" default 0 - depends on LV_USE_FS_FATFS != 0 + depends on LV_USE_FS_FATFS config LV_USE_PNG bool "PNG decoder library" @@ -960,8 +994,8 @@ menu "LVGL configuration" config LV_USE_FFMPEG bool "FFmpeg library" - config LV_FFMPEG_AV_DUMP_FORMAT - bool "Dump av format" + config LV_FFMPEG_DUMP_FORMAT + bool "Dump format" depends on LV_USE_FFMPEG default n endmenu @@ -974,14 +1008,47 @@ menu "LVGL configuration" config LV_USE_MONKEY bool "Enable Monkey test" default n + config LV_USE_GRIDNAV bool "Enable grid navigation" - default n + default n config LV_USE_FRAGMENT bool "Enable lv_obj fragment" - default n + default n + config LV_USE_IMGFONT + bool "draw img in label or span obj" + default n + + config LV_USE_MSG + bool "Enable a published subscriber based messaging system" + default n + + config LV_USE_IME_PINYIN + bool "Enable Pinyin input method" + default n + config LV_IME_PINYIN_USE_K9_MODE + bool "Enable Pinyin input method 9 key input mode" + depends on LV_USE_IME_PINYIN + default n + config LV_IME_PINYIN_K9_CAND_TEXT_NUM + int "Maximum number of candidate panels for 9-key input mode" + depends on LV_IME_PINYIN_USE_K9_MODE + default 3 + config LV_IME_PINYIN_USE_DEFAULT_DICT + bool "Use built-in Thesaurus" + depends on LV_USE_IME_PINYIN + default y + help + If you do not use the default thesaurus, be sure to use lv_ime_pinyin after setting the thesauruss + config LV_IME_PINYIN_CAND_TEXT_NUM + int "Maximum number of candidate panels" + depends on LV_USE_IME_PINYIN + default 6 + help + Set the maximum number of candidate panels that can be displayed. + This needs to be adjusted according to the size of the screen. endmenu menu "Examples" @@ -1006,6 +1073,10 @@ menu "LVGL configuration" config LV_USE_DEMO_BENCHMARK bool "Benchmark your system" default n + config LV_DEMO_BENCHMARK_RGB565A8 + bool "Use RGB565A8 images with 16 bit color depth instead of ARGB8565" + depends on LV_USE_DEMO_BENCHMARK + default n config LV_USE_DEMO_STRESS bool "Stress test for LVGL" diff --git a/README.md b/README.md index e8a452ee1..aea07a841 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ LVGL provides everything you need to create an embedded GUI with easy-to-use gra -**English** | [中文](./README_zh.md) | +**English** | [中文](./README_zh.md) | [Português do Brasil](./README_pt_BR.md) --- @@ -40,11 +40,11 @@ LVGL provides everything you need to create an embedded GUI with easy-to-use gra * Multi-language support with UTF-8 handling, CJK, Bidirectional and Arabic script support * Fully customizable graphical elements via [CSS-like styles](https://docs.lvgl.io/master/overview/style.html) * Powerful layouts inspired by CSS: [Flexbox](https://docs.lvgl.io/master/layouts/flex.html) and [Grid](https://docs.lvgl.io/master/layouts/grid.html) -* OS, External memory and GPU are supported but not required. (built in support for STM32 DMA2D, and NXP PXP and VGLite) +* OS, External memory and GPU are supported but not required. (built in support for STM32 DMA2D, SWM341 DMA2D, and NXP PXP and VGLite) * Smooth rendering even with a [single frame buffer](https://docs.lvgl.io/master/porting/display.html) * Written in C and compatible with C++ * Micropython Binding exposes [LVGL API in Micropython](https://blog.lvgl.io/2019-02-20/micropython-bindings) -* [Simulator](https://docs.lvgl.io/master/get-started/pc-simulator.html) to develop on PC without embedded hardware +* [Simulator](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) to develop on PC without embedded hardware * 100+ simple [Examples](https://github.com/lvgl/lvgl/tree/master/examples) * [Documentation](http://docs.lvgl.io/) and API references online and in PDF @@ -93,26 +93,27 @@ Basically, every modern controller (which is able to drive a display) is suitabl *Note that the memory usage might vary depending on the architecture, compiler and build options.* ### Supported platforms -LVGL is completely platform independent and can be used with any MCU that fulfills the requirements. +LVGL is completely platform independent and can be used with any MCU that fulfills the requirements. Just to mention some platforms: - NXP: Kinetis, LPC, iMX, iMX RT - STM32F1, STM32F3, STM32F4, STM32F7, STM32L4, STM32L5, STM32H7 - Microchip dsPIC33, PIC24, PIC32MX, PIC32MZ - [Linux frame buffer](https://blog.lvgl.io/2018-01-03/linux_fb) (/dev/fb) -- [Raspberry Pi](http://www.vk3erw.com/index.php/16-software/63-raspberry-pi-official-7-touchscreen-and-littlevgl) +- [Raspberry Pi](https://github.com/lvgl/lv_port_linux_frame_buffer) - [Espressif ESP32](https://github.com/lvgl/lv_port_esp32) - [Infineon Aurix](https://github.com/lvgl/lv_port_aurix) - Nordic NRF52 Bluetooth modules - Quectel modems +- [SYNWIT SWM341](http://www.synwit.cn/) LVGL is also available as: -- [Arduino library](https://docs.lvgl.io/master/get-started/arduino.html) -- [PlatformIO package](https://platformio.org/lib/show/12440/lvgl) +- [Arduino library](https://docs.lvgl.io/master/get-started/platforms/arduino.html) +- [PlatformIO package](https://registry.platformio.org/libraries/lvgl/lvgl) - [Zephyr library](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_LVGL.html) -- [ESP32 component](https://docs.lvgl.io/master/get-started/espressif.html) +- [ESP32 component](https://docs.lvgl.io/master/get-started/platforms/espressif.html) - [NXP MCUXpresso component](https://www.nxp.com/design/software/embedded-software/lvgl-open-source-graphics-library:LITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY) -- [NuttX library](https://docs.lvgl.io/master/get-started/nuttx.html) -- [RT-Thread RTOS](https://docs.lvgl.io/master/get-started/rt-thread.html) +- [NuttX library](https://docs.lvgl.io/master/get-started/os/nuttx.html) +- [RT-Thread RTOS](https://docs.lvgl.io/master/get-started/os/rt-thread.html) ## Get started @@ -120,7 +121,7 @@ This list shows the recommended way of learning the library: 1. Check the [Online demos](https://lvgl.io/demos) to see LVGL in action (3 minutes) 2. Read the [Introduction](https://docs.lvgl.io/master/intro/index.html) page of the documentation (5 minutes) 3. Get familiar with the basics on the [Quick overview](https://docs.lvgl.io/master/get-started/quick-overview.html) page (15 minutes) -4. Set up a [Simulator](https://docs.lvgl.io/master/get-started/pc-simulator.html) (10 minutes) +4. Set up a [Simulator](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) (10 minutes) 5. Try out some [Examples](https://github.com/lvgl/lvgl/tree/master/examples) 6. Port LVGL to a board. See the [Porting](https://docs.lvgl.io/master/porting/index.html) guide or check the ready to use [Projects](https://github.com/lvgl?q=lv_port_) 7. Read the [Overview](https://docs.lvgl.io/master/overview/index.html) page to get a better understanding of the library (2-3 hours) @@ -152,7 +153,7 @@ void btn_event_cb(lv_event_t * e) } ``` ### Micropython -Learn more about [Micropython](https://docs.lvgl.io/master/get-started/micropython.html). +Learn more about [Micropython](https://docs.lvgl.io/master/get-started/bindings/micropython.html). ```python def btn_event_cb(e): print("Clicked") diff --git a/README_pt_BR.md b/README_pt_BR.md new file mode 100644 index 000000000..f62f0a0f8 --- /dev/null +++ b/README_pt_BR.md @@ -0,0 +1,206 @@ +

LVGL - Biblioteca gráfica leve e versátil

+

+ +

+

+ O LVGL fornece tudo o que você precisa para criar uma GUI incorporada com elementos gráficos fáceis de usar, belos efeitos visuais e um baixo consumo de memória. +

+

+ Site · + Documentação · + Fórum · + Serviços · + Exemplos interativos +

+ +[English](./README.md) | [中文](./README_zh.md) | **Português do Brasil** + +--- + +### Tabela de conteúdo + +- [Visão Geral](#visão-geral) +- [Iniciando](#iniciando) +- [Exemplos](#exemplos) +- [Serviços](#serviços) +- [Contribuindo](#contribuindo) + +## Visão Geral + +### Recursos +* Poderosos [widgets](https://docs.lvgl.io/master/widgets/index.html): botões, gráficos, listas, controles deslizantes (sliders), imagens, etc. +* Mecanismo gráfico avançado: animações, anti-aliasing, opacidade, rolagem suave, modos de mesclagem (blending modes), etc. +* Suporte à [vários dispositivos de entrada](https://docs.lvgl.io/master/overview/indev.html): tela sensível ao toque, mouse, teclado, codificador, botões, etc. +* Suporte à [vários monitores](https://docs.lvgl.io/master/overview/display.html) +* Pode ser usado com qualquer microcontrolador e display, independente do hardware +* Escalável para operar com pouca memória (64 kB Flash, 16 kB RAM) +* Suporte multilíngue com manipulação UTF-8, suporte ao alfabeto bidirecional, árabe e CJK (Chinês, Japonês e Coreano) +* Elementos gráficos totalmente personalizáveis por meio de [CSS](https://docs.lvgl.io/master/overview/style.html) +* Layouts poderosos inspirados em CSS: [Flexbox](https://docs.lvgl.io/master/layouts/flex.html) e [Grid](https://docs.lvgl.io/master/layouts/grid.html) +* SO, memória externa e GPU são suportados, mas não obrigatórios. (suporte integrado para STM32 DMA2D, SWM341 DMA2D e NXP PXP e VGLite) +* Renderização suave mesmo com um [buffer de quadro único](https://docs.lvgl.io/master/porting/display.html) (single frame buffer) +* Escrito em C e compatível com C++ +* Uso do LittlevGL com Micropython simplificado com [LVGL API in Micropython](https://blog.lvgl.io/2019-02-20/micropython-bindings) +* [Simulador](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) para desenvolver no PC sem hardware embutido +* Mais de 100 [exemplos simples](https://github.com/lvgl/lvgl/tree/master/examples) +* [Documentação](http://docs.lvgl.io/) e referências de API online e em PDF + +### Requerimentos +Basicamente, todo controlador moderno (que é capaz de acionar um display) é adequado para executar LVGL. Os requisitos mínimos são: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Nome + + Minímo + + Recomendado +
+ Arquitetura + Microcontrolador ou processador de 16, 32 ou 64 bits
+ Clock + > 16 MHz> 48 MHz
+ Flash/ROM + > 64 kB> 180 kB
+ RAM estática + > 16 kB> 48 kB
+ Draw buffer + > 1 × hor. res. pixels> tamanho da tela de 1/10
+ Compilador + Padrão C99 ou mais recente
+ +*Observe que o uso de memória pode variar dependendo da arquitetura, do compilador e das opções de compilação.* + +### Plataformas suportadas +O LVGL é completamente independente de plataforma e pode ser usado com qualquer MCU que atenda aos requisitos. +Apenas para citar algumas plataformas: + +- NXP: Kinetis, LPC, iMX, iMX RT +- STM32F1, STM32F3, STM32F4, STM32F7, STM32L4, STM32L5, STM32H7 +- Microchip dsPIC33, PIC24, PIC32MX, PIC32MZ +- [Linux frame buffer](https://blog.lvgl.io/2018-01-03/linux_fb) (/dev/fb) +- [Raspberry Pi](http://www.vk3erw.com/index.php/16-software/63-raspberry-pi-official-7-touchscreen-and-littlevgl) +- [Espressif ESP32](https://github.com/lvgl/lv_port_esp32) +- [Infineon Aurix](https://github.com/lvgl/lv_port_aurix) +- Nordic NRF52 Bluetooth modules +- Quectel modems +- [SYNWIT SWM341](https://www.synwit.cn/) + +LVGL também está disponível para: +- [Arduino library](https://docs.lvgl.io/master/get-started/platforms/arduino.html) +- [PlatformIO package](https://registry.platformio.org/libraries/lvgl/lvgl) +- [Zephyr library](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_LVGL.html) +- [ESP32 component](https://docs.lvgl.io/master/get-started/platforms/espressif.html) +- [NXP MCUXpresso component](https://www.nxp.com/design/software/embedded-software/lvgl-open-source-graphics-library:LITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY) +- [NuttX library](https://docs.lvgl.io/master/get-started/os/nuttx.html) +- [RT-Thread RTOS](https://docs.lvgl.io/master/get-started/os/rt-thread.html) + +## Iniciando +Esta lista mostra a maneira recomendada de aprender sobre a biblioteca: + +1. Confira as [demos on-line](https://lvgl.io/demos) para ver o LVGL em ação (3 minutos) +2. Leia a [introdução](https://docs.lvgl.io/master/intro/index.html) da documentação (5 minutos) +3. Familiarize-se com o básico da [Visão geral rápida](https://docs.lvgl.io/master/get-started/quick-overview.html) (15 minutos) +4. Configure um [simulador](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) (10 minutos) +5. Experimente alguns [Exemplos](https://github.com/lvgl/lvgl/tree/master/examples) +6. Placa para porta LVGL. Veja o guia [porting](https://docs.lvgl.io/master/porting/index.html) ou verifique o pronto para usar [Projects](https://github.com/lvgl?q=lv_port_) +7. Leia a [visão geral](https://docs.lvgl.io/master/overview/index.html) para entender melhor a biblioteca (2-3 horas) +8. Verifique a documentação dos [widgets](https://docs.lvgl.io/master/widgets/index.html) para ver seus recursos e como utilizá-los +9. Se você tiver dúvidas, acesse o [fórum](http://forum.lvgl.io/) +10. Leia o guia de [contribuição](https://docs.lvgl.io/master/CONTRIBUTING.html) para ver como você pode ajudar a melhorar o LVGL (15 minutos) + +## Exemplos +Para mais exemplos, veja a pasta [examples](https://github.com/lvgl/lvgl/tree/master/examples). + +![Exemplo de botão LVGL com rótulo (label)](https://github.com/lvgl/lvgl/raw/master/docs/misc/btn_example.png) + +### C + +```c +lv_obj_t * button = lv_btn_create(lv_scr_act()); /* Adiciona um botão à tela atual */ +lv_obj_set_pos(button, 10, 10); /* Define uma posição ao botão na tela */ +lv_obj_set_size(button, 100, 50); /* Define o tamanho */ +lv_obj_add_event_cb(button, button_event_callback, LV_EVENT_CLICKED, NULL); /* Atribui um retorno de chamada (callback) */ + +lv_obj_t * label = lv_label_create(button); /* Adiciona um rótulo (label) */ +lv_label_set_text(label, "Clique aqui"); /* Define o texto do rótulo (label) */ +lv_obj_center(label); /* Alinha o texto ao centro */ +... + +void button_event_callback(lv_event_t * e) +{ + printf("Clicado\n"); +} +``` + +### Micropython +Saiba mais em [Micropython](https://docs.lvgl.io/master/get-started/bindings/micropython.html) + +```python +def button_event_callback(event): + print("Clicado") + +# Cria um botão e um rótulo (label) +button = lv.btn(lv.scr_act()) +button.set_pos(10, 10) +button.set_size(100, 50) +button.add_event_cb(button_event_callback, lv.EVENT.CLICKED, None) + +label = lv.label(button) +label.set_text("Cliquq aqui") +label.center() +``` + +## Serviços +O LVGL Kft foi estabelecido para fornecer uma base sólida para a biblioteca LVGL. Oferecemos vários tipos de serviços +para ajudá-lo no desenvolvimento da interface do usuário: + +- Design gráfico +- Implementação de IU +- Consultoria/Suporte + +Para mais informações, consulte [LVGL Serviços](https://lvgl.io/services). Sinta-se à vontade para entrar em contato +conosco se tiver alguma dúvida. + +## Contribuindo +O LVGL é um projeto aberto e sua contribuição é muito bem-vinda. Há muitas maneiras de contribuir, desde simplesmente +falando sobre seu projeto, escrevendo exemplos, melhorando a documentação, corrigindo bugs até hospedar seu próprio +projeto sob a organização LVGL. + +Para obter uma descrição detalhada das oportunidades de contribuição, visite a seção de [contribuição](https://docs.lvgl.io/master/CONTRIBUTING.html) da documentação. diff --git a/README_zh.md b/README_zh.md index f8ede3799..cac080d4e 100644 --- a/README_zh.md +++ b/README_zh.md @@ -20,7 +20,7 @@ LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入 -[English](./README.md) | **中文** | +[English](./README.md) | **中文** | [Português do Brasil](./README_pt_BR.md) --- @@ -42,11 +42,11 @@ LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入 * 配置可裁剪(最低资源占用:64 kB Flash,16 kB RAM) * 基于UTF-8的多语种支持,例如中文、日文、韩文、阿拉伯文等 * 可以通过[类CSS](https://docs.lvgl.io/master/overview/style.html)的方式来设计、布局图形界面(例如:[Flexbox](https://docs.lvgl.io/master/layouts/flex.html)、[Grid](https://docs.lvgl.io/master/layouts/grid.html)) -* 支持操作系统、外置内存、以及硬件加速(LVGL已内建支持STM32 DMA2D、NXP PXP和VGLite) +* 支持操作系统、外置内存、以及硬件加速(LVGL已内建支持STM32 DMA2D、SWM341 DMA2D、NXP PXP和VGLite) * 即便仅有[单缓冲区(frame buffer)](https://docs.lvgl.io/master/porting/display.html)的情况下,也可保证渲染如丝般顺滑 * 全部由C编写完成,并支持C++调用 * 支持Micropython编程,参见:[LVGL API in Micropython](https://blog.lvgl.io/2019-02-20/micropython-bindings) -* 支持[模拟器](https://docs.lvgl.io/master/get-started/pc-simulator.html)仿真,可以无硬件依托进行开发 +* 支持[模拟器](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html)仿真,可以无硬件依托进行开发 * 丰富详实的[例程](https://github.com/lvgl/lvgl/tree/master/examples) * 详尽的[文档](http://docs.lvgl.io/)以及API参考手册,可线上查阅或可下载为PDF格式 @@ -95,7 +95,7 @@ LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入 *注意:资源占用情况与具体硬件平台、编译器等因素有关,上表中仅给出参考值* ### 已经支持的平台 -LVGL本身并不依赖特定的硬件平台,任何满足LVGL硬件配置要求的微控制器均可运行LVGL。 +LVGL本身并不依赖特定的硬件平台,任何满足LVGL硬件配置要求的微控制器均可运行LVGL。 如下仅列举其中一部分: - NXP: Kinetis, LPC, iMX, iMX RT @@ -107,14 +107,15 @@ LVGL本身并不依赖特定的硬件平台,任何满足LVGL硬件配置要求 - [Infineon Aurix](https://github.com/lvgl/lv_port_aurix) - Nordic NRF52 Bluetooth modules - Quectel modems +- [SYNWIT SWM341](https://www.synwit.cn/) LVGL也支持: -- [Arduino library](https://docs.lvgl.io/master/get-started/arduino.html) +- [Arduino library](https://docs.lvgl.io/master/get-started/platforms/arduino.html) - [PlatformIO package](https://platformio.org/lib/show/12440/lvgl) - [Zephyr library](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_LVGL.html) -- [ESP32 component](https://docs.lvgl.io/master/get-started/espressif.html) +- [ESP32 component](https://docs.lvgl.io/master/get-started/platforms/espressif.html) - [NXP MCUXpresso component](https://www.nxp.com/design/software/embedded-software/lvgl-open-source-graphics-library:LITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY) -- [NuttX library](https://docs.lvgl.io/master/get-started/nuttx.html) +- [NuttX library](https://docs.lvgl.io/master/get-started/os/nuttx.html) - [RT-Thread RTOS](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/packages-manual/lvgl-docs/introduction) @@ -123,7 +124,7 @@ LVGL也支持: 1. 使用[网页在线例程](https://lvgl.io/demos)来体验LVGL(3分钟) 2. 阅读文档[简介](https://docs.lvgl.io/master/intro/index.html)章节来初步了解LVGL(5分钟) 3. 再来阅读一下文档快速[快速概览](https://docs.lvgl.io/master/get-started/quick-overview.html)章节来了解LVGL的基本知识(15分钟) -4. 学习如何使用[模拟器](https://docs.lvgl.io/master/get-started/pc-simulator.html)来在电脑上仿真LVGL(10分钟) +4. 学习如何使用[模拟器](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html)来在电脑上仿真LVGL(10分钟) 5. 试着动手实践一些[例程](https://github.com/lvgl/lvgl/tree/master/examples) 6. 参考[移植指南](https://docs.lvgl.io/master/porting/index.html)尝试将LVGL移植到一块开发板上,LVGL也已经提供了一些移植好的[工程](https://github.com/lvgl?q=lv_port_) 7. 仔细阅读文档[总览](https://docs.lvgl.io/master/overview/index.html)章节来更加深入的了解和熟悉LVGL(2-3小时) @@ -155,7 +156,7 @@ void btn_event_cb(lv_event_t * e) } ``` ### Micropython -更多信息请到 [Micropython官网](https://docs.lvgl.io/master/get-started/micropython.html) 查询. +更多信息请到 [Micropython官网](https://docs.lvgl.io/master/get-started/bindings/micropython.html) 查询. ```python def btn_event_cb(e): print("Clicked") @@ -190,4 +191,3 @@ LVGL是一个开源项目,非常欢迎您参与到社区贡献当中。您有 - 修复bug 请参见文档[如何向社区贡献](https://docs.lvgl.io/master/CONTRIBUTING.html)章节来获取更多信息。 - diff --git a/demos/README.md b/demos/README.md index c44bdc9fa..d894ee306 100644 --- a/demos/README.md +++ b/demos/README.md @@ -1,7 +1,7 @@ # Demos for LVGL ## Add the examples to your projects -1. demos can be found in the 'demos' folder once you clone the lvgl. +1. demos can be found in the 'demos' folder once you clone the lvgl. 2. In the ***lv_conf.h*** or equivalent places, you can find demo related macros, change its value to enable or disable specified demos: @@ -38,7 +38,7 @@ ... ``` -3. If your development environment or toolchain does not add source files inside '***lvgl***' folder automatically, ensure the `demos` folder is included for compilation. +3. If your development environment or toolchain does not add source files inside '***lvgl***' folder automatically, ensure the `demos` folder is included for compilation. 4. Include "***demos/lv_demos.h***" in your application source file, for example: ```c @@ -53,11 +53,11 @@ ## Demos ### Widgets -Shows how the widgets look like out of the box using the built-in material theme. +Shows how the widgets look like out of the box using the built-in material theme. -See in [lv_demo_widgets](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_widgets) folder. +See in [widgets](https://github.com/lvgl/lvgl/tree/master/demos/widgets) folder. -Basic demo to show the widgets of LVGL +Basic demo to show the widgets of LVGL For running this demo properly, please make sure **LV_MEM_SIZE** is at least **38KB** (and **48KB** is recommended): @@ -68,29 +68,29 @@ For running this demo properly, please make sure **LV_MEM_SIZE** is at least **3 ### Music player -The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL. It works the best with display with 480x272 or 272x480 resolution. +The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL. It works the best with display with 480x272 or 272x480 resolution. -See in [lv_demo_music](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_music) folder. +See in [music](https://github.com/lvgl/lvgl/tree/master/demos/music) folder. -Music player demo with LVGL +Music player demo with LVGL ### Keypad and encoder -LVGL allows you to control the widgets with a keypad and/or encoder without a touchpad. This demo shows how to handle buttons, drop-down lists, rollers, sliders, switches, and text inputs without touchpad. -Learn more about the touchpad-less usage of LVGL [here](https://docs.lvgl.io/v7/en/html/overview/indev.html#keypad-and-encoder). +LVGL allows you to control the widgets with a keypad and/or encoder without a touchpad. This demo shows how to handle buttons, drop-down lists, rollers, sliders, switches, and text inputs without touchpad. +Learn more about the touchpad-less usage of LVGL [here](https://docs.lvgl.io/master/overview/indev.html#keypad-and-encoder). -See in [lv_demo_keypad_encoder](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_keypad_encoder) folder. +See in [keypad_encoder](https://github.com/lvgl/lvgl/tree/master/demos/keypad_encoder) folder. -Keypad and encoder navigation in LVGL embedded GUI library +Keypad and encoder navigation in LVGL embedded GUI library ### Benchmark -A demo to measure the performance of LVGL or to compare different settings. -See in [lv_demo_benchmark](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_benchmark) folder. -Benchmark demo with LVGL embedded GUI library +A demo to measure the performance of LVGL or to compare different settings. +See in [benchmark](https://github.com/lvgl/lvgl/tree/master/demos/benchmark) folder. +Benchmark demo with LVGL embedded GUI library ### Stress -A stress test for LVGL. It contains a lot of object creation, deletion, animations, style usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks. -See in [lv_demo_stress](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_stress) folder. -Stress test for LVGL +A stress test for LVGL. It contains a lot of object creation, deletion, animations, style usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks. +See in [stress](https://github.com/lvgl/lvgl/tree/master/demos/stress) folder. +Stress test for LVGL ## Contributing For contribution and coding style guidelines, please refer to the file docs/CONTRIBUTING.md in the main LVGL repo: diff --git a/demos/benchmark/README.md b/demos/benchmark/README.md index 7e7c07637..c913ae00d 100644 --- a/demos/benchmark/README.md +++ b/demos/benchmark/README.md @@ -2,48 +2,133 @@ ## Overview -The benchmark demo tests the performance in various cases. -For example rectangle, border, shadow, text, image blending, image transformation, blending modes, etc. +The benchmark demo tests the performance in various cases. +For example rectangle, border, shadow, text, image blending, image transformation, blending modes, etc. All tests are repeated with 50% opacity. -The size and position of the objects during testing are set with a pseudo random number to make the benchmark repeatable. +The size and position of the objects during testing are set with a pseudo random number to make the benchmark repeatable. On to top of the screen the title of the current test step, and the result of the previous step is displayed. ## Run the benchmark - In `lv_conf.h` or equivalent places set `LV_USE_DEMO_BENCHMARK 1` - After `lv_init()` and initializing the drivers call `lv_demo_benchmark()` +- If you only want to run a specific scene for any purpose (e.g. debug, performance optimization etc.), you can call `lv_demo_benchmark_run_scene()` instead of `lv_demo_benchmark()`and pass the scene number. +- If you enabled trace output by setting macro `LV_USE_LOG` to `1` and trace level `LV_LOG_LEVEL` to `LV_LOG_LEVEL_USER` or higher, benchmark results are printed out in `csv` format. +- If you want to know when the testing is finished, you can register a callback function via `lv_demo_benchmark_register_finished_handler()` before calling `lv_demo_benchmark()` or `lv_demo_benchmark_run_scene()`. +- If you want to know the maximum rendering performance of the system, call `lv_demo_benchmark_set_max_speed(true)` before `lv_demo_benchmark()`. ## Interpret the result The FPS is measured like this: - load the next step -- in the display driver's `monitor_cb` accumulate the time-to-render and the number of cycles +- in the display driver's `monitor_cb` accumulate the time-to-render and the number of cycles - measure for 1 second - calculate `FPS = time_sum / render_cnt` -Note that it can result in very high FPS results for simple cases. -E.g. if some simple rectangles are drawn in 5 ms, the benchmark will tell it's 200 FPS. -So it ignores `LV_DISP_REFR_PERIOD` which tells LVGL how often it should refresh the screen. +Note that it can result in very high FPS results for simple cases. +E.g. if some simple rectangles are drawn in 5 ms, the benchmark will tell it's 200 FPS. +So it ignores `LV_DISP_REFR_PERIOD` which tells LVGL how often it should refresh the screen. In other words, the benchmark shows the FPS from the pure rendering time. By default, only the changed areas are refreshed. It means if only a few pixels are changed in 1 ms the benchmark will show 1000 FPS. To measure the performance with full screen refresh uncomment `lv_obj_invalidate(lv_scr_act())` in `monitor_cb()` in `lv_demo_benchmark.c`. -![LVGL benchmark running](https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_benchmark/screenshot1.png?raw=true) +![LVGL benchmark running](screenshot1.png) +If you are doing performance analysis for 2D image processing optimization, LCD latency (flushing data to LCD) introduced by `disp_flush()` might dilute the performance results of the LVGL drawing process, hence make it harder to see your optimization results (gain or loss). To avoid such problem, please: -## Result summary +1. Use a flag to control the LCD flushing inside `disp_flush()`. For example: + +```c +volatile bool disp_flush_enabled = true; + +/* Enable updating the screen (the flushing process) when disp_flush() is called by LVGL + */ +void disp_enable_update(void) +{ + disp_flush_enabled = true; +} + +/* Disable updating the screen (the flushing process) when disp_flush() is called by LVGL + */ +void disp_disable_update(void) +{ + disp_flush_enabled = false; +} + +static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) +{ + if(disp_flush_enabled) { + GLCD_DrawBitmap(area->x1, //!< x + area->y1, //!< y + area->x2 - area->x1 + 1, //!< width + area->y2 - area->y1 + 1, //!< height + (const uint8_t *)color_p); + } + + /*IMPORTANT!!! + *Inform the graphics library that you are ready with the flushing*/ + lv_disp_flush_ready(disp_drv); +} +``` + +2. Disable flushing before calling `lv_demo_benchmark()` or `lv_demo_benchmark_run_scene()`, for example: + +```c +extern void disp_enable_update(void); +extern void disp_disable_update(void); + +static void on_benchmark_finished(void) +{ + disp_enable_update(); +} + +int main(void) +{ + lv_init(); + lv_port_disp_init(); + lv_port_indev_init(); + + LV_LOG("Running LVGL Benchmark..."); + LV_LOG("Please stand by..."); + LV_LOG("NOTE: You will NOT see anything until the end."); + + disp_disable_update(); + + lv_demo_benchmark_set_finished_cb(&on_benchmark_finished); + lv_demo_benchmark_set_max_speed(true); + lv_demo_benchmark(); + + //lv_demo_benchmark_run_scene(43); // run scene no 31 + + ... + while(1){ + lv_timer_handler(); //! run lv task at the max speed + } +} +``` + + + +3. Alternatively, you can use trace output to get the benchmark results in csv format by: + - Setting macro `LV_USE_LOG` to `1` + - Setting trace level `LV_LOG_LEVEL` to `LV_LOG_LEVEL_USER` or higher. + + + + +## Result summary In the end, a table is created to display measured FPS values. -On top of the summary screen, the "Weighted FPS" value is shown. -In this, the result of the more common cases are taken into account with a higher weight. +On top of the summary screen, the "Weighted FPS" value is shown. +In this, the result of the more common cases are taken into account with a higher weight. -"Opa. speed" shows the speed of the measurements with opacity compared to full opacity. -E.g. "Opa. speed = 90%" means that rendering with opacity is 10% slower. +"Opa. speed" shows the speed of the measurements with opacity compared to full opacity. +E.g. "Opa. speed = 90%" means that rendering with opacity is 10% slower. In the first section of the table, "Slow but common cases", those cases are displayed which are considered common but were slower than 20 FPS. Below this in the "All cases section" all the results are shown. The < 10 FPS results are shown with red, the >= 10 but < 20 FPS values are displayed with orange. -![LVGL benchmark result summary](https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_benchmark/screenshot2.png?raw=true) +![LVGL benchmark result summary](https://github.com/lvgl/lvgl/tree/master/demos/benchmark/screenshot2.png?raw=true) diff --git a/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.c b/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.c new file mode 100644 index 000000000..7d93948b9 --- /dev/null +++ b/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.c @@ -0,0 +1,224 @@ +#include "../../../lvgl.h" + +#ifndef LV_ATTRIBUTE_MEM_ALIGN +#define LV_ATTRIBUTE_MEM_ALIGN +#endif + +#ifndef LV_ATTRIBUTE_IMG_IMG_BENCHMARK_COGWHEEL_RGB565A8 +#define LV_ATTRIBUTE_IMG_IMG_BENCHMARK_COGWHEEL_RGB565A8 +#endif + +const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMG_BENCHMARK_COGWHEEL_RGB565A8 uint8_t img_benchmark_cogwheel_rgb565a8_map[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb2, 0x63, 0x33, 0x74, 0x5a, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x74, 0x7c, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xb2, 0x63, 0xd2, 0x6b, 0x74, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1d, 0xdf, 0x33, 0x7c, 0xd2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd2, 0x63, 0x13, 0x74, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0xbe, 0x36, 0x9d, 0xdc, 0xde, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1d, 0xdf, 0xf6, 0x8c, 0x34, 0x74, 0x57, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xd6, 0x54, 0x7c, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0xd2, 0x6b, 0x13, 0x74, 0xdc, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xb5, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x12, 0x74, 0xf5, 0x94, 0x1c, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xbe, 0xd6, 0x8c, 0x95, 0x84, 0x74, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0xb8, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xb5, 0x54, 0x7c, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0xd2, 0x6b, 0x12, 0x74, 0xb4, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0x74, 0x84, 0x90, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0x12, 0x74, 0x94, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xad, 0x75, 0x7c, 0x34, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0x95, 0x84, 0x7d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x33, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0x32, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x36, 0x9d, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x5b, 0x50, 0x5b, 0x90, 0x63, 0x5d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xf7, 0xd6, 0x8c, 0x34, 0x74, 0x55, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0xb8, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x95, 0x84, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0x12, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x33, 0x74, 0x91, 0x5b, 0xd1, 0x6b, 0xd1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x39, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x95, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x54, 0x7c, 0xfc, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x84, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd2, 0x6b, 0xf2, 0x73, 0x5a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb8, 0xad, 0xf2, 0x6b, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x6b, 0x15, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x9d, 0x75, 0x7c, 0x55, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0x37, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0xde, 0x98, 0xa5, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0x53, 0x84, 0x3a, 0xc6, 0xff, 0xff, 0x00, 0x00, 0xbb, 0xd6, 0x12, 0x74, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x6b, 0xf5, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0x9d, 0x74, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x57, 0x9d, 0x7b, 0xc6, 0x5a, 0xce, 0x1a, 0xbe, 0x78, 0xa5, 0xb5, 0x84, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x54, 0x7c, 0x36, 0x9d, 0xf8, 0xb5, 0x94, 0x84, 0xb1, 0x63, 0xb1, 0x63, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x73, 0x36, 0xa5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3a, 0xbe, 0x95, 0x84, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x63, 0xf2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x73, 0xbb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x95, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x7c, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0xd0, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0xf5, 0x94, 0x1c, 0xdf, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xe7, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xbe, 0x95, 0x84, 0x54, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x54, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xd0, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x57, 0xa5, 0x12, 0x74, 0xb1, 0x63, 0xf1, 0x6b, 0x56, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xad, 0x17, 0x95, 0x38, 0x9d, 0x3d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x37, 0x9d, 0x75, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x34, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x6b, 0x56, 0xa5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x94, 0xd1, 0x6b, 0x4f, 0x5b, 0x70, 0x5b, 0x0f, 0x53, 0xb0, 0x63, 0xf5, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0x9d, 0xd6, 0x8c, 0x75, 0x7c, 0x96, 0x84, 0xd6, 0x8c, 0xbc, 0xce, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xa5, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x12, 0x74, 0x36, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0x73, 0x7c, 0x90, 0x63, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x2f, 0x53, 0x90, 0x63, 0xb4, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0xa5, 0xd6, 0x8c, 0x96, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x76, 0x84, 0xb6, 0x84, 0xb9, 0xad, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xb5, 0xd6, 0x8c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x34, 0x74, 0x33, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xf2, 0x73, 0x39, 0xbe, 0xfc, 0xde, 0x12, 0x74, 0x90, 0x63, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x2e, 0x53, 0x90, 0x63, 0x36, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xad, 0xd7, 0x8c, 0x96, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x96, 0x84, 0xb6, 0x84, 0x78, 0xa5, 0x5e, 0xef, 0xff, 0xff, 0xf9, 0xb5, 0xd6, 0x8c, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0xf2, 0x6b, 0xb1, 0x63, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x53, 0x6f, 0x5b, 0xf2, 0x6b, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xb1, 0x63, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x32, 0x74, 0x12, 0x74, 0x70, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x53, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x37, 0x9d, 0x96, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x96, 0x84, 0x75, 0x84, 0x95, 0x84, 0xb6, 0x84, 0x95, 0x84, 0x95, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0xf2, 0x6b, 0xd1, 0x6b, 0x90, 0x63, 0x6f, 0x5b, 0x2e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x2e, 0x53, 0xd2, 0x6b, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0x90, 0x63, 0x0e, 0x53, 0xed, 0x4a, 0x0d, 0x4b, 0x0e, 0x4b, 0x2e, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x90, 0x63, 0x91, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x6f, 0x5b, 0x94, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x37, 0x9d, 0x96, 0x84, 0x96, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0x34, 0x7c, 0xf2, 0x6b, 0xb1, 0x63, 0x4f, 0x53, 0x0d, 0x53, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0x2f, 0x53, 0xd2, 0x6b, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0x90, 0x63, 0x2e, 0x53, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x4f, 0x53, 0x90, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x70, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x2f, 0x53, 0xb0, 0x6b, 0x35, 0xa5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xc6, 0xb6, 0x84, 0x75, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x75, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0xf2, 0x6b, 0x90, 0x5b, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x2f, 0x53, 0xd2, 0x6b, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0x91, 0x63, 0x2e, 0x53, 0xed, 0x4a, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0x91, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0xd1, 0x7b, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xbe, 0x75, 0x84, 0x96, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x96, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x75, 0x7c, 0x13, 0x74, 0xb1, 0x63, 0x4f, 0x5b, 0x0e, 0x53, 0x0d, 0x4b, 0x0d, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xee, 0x4a, 0xed, 0x4a, 0x0e, 0x53, 0x4f, 0x63, 0x90, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xd2, 0x6b, 0x4f, 0x5b, 0xcc, 0x52, 0x0d, 0x53, 0x6f, 0x5b, 0x4e, 0x5b, 0xed, 0x4a, 0xcd, 0x42, 0xed, 0x4a, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x8f, 0x6b, 0xd4, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xb5, 0x96, 0x84, 0x75, 0x7c, 0xb6, 0x84, 0x96, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0xf2, 0x6b, 0x70, 0x5b, 0x0e, 0x53, 0xed, 0x4a, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x53, 0x2e, 0x5b, 0x90, 0x6b, 0x52, 0x84, 0x15, 0x9d, 0xbb, 0xde, 0x39, 0xc6, 0x54, 0x84, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xb1, 0x6b, 0x2e, 0x5b, 0x4e, 0x6b, 0x56, 0xad, 0xdb, 0xde, 0xdb, 0xd6, 0xf8, 0xbd, 0x73, 0x84, 0xd1, 0x6b, 0x2e, 0x53, 0xee, 0x4a, 0x0e, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x2e, 0x5b, 0xd0, 0x7b, 0x3d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xf7, 0xf7, 0x94, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x4f, 0x63, 0xd0, 0x73, 0x52, 0x8c, 0x7a, 0xd6, 0x9e, 0xf7, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x13, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xb1, 0x63, 0x90, 0x6b, 0x35, 0xa5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xce, 0x73, 0x84, 0xb0, 0x6b, 0x6f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x0e, 0x53, 0x6f, 0x6b, 0x55, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xe7, 0xf7, 0x94, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x96, 0x84, 0x95, 0x84, 0x34, 0x74, 0x90, 0x63, 0x2e, 0x53, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x2e, 0x63, 0xf1, 0x7b, 0xf8, 0xbd, 0x9e, 0xf7, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x9d, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xb1, 0x6b, 0xd1, 0x73, 0x3e, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0x5d, 0xef, 0xb7, 0xad, 0xd1, 0x6b, 0x4f, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x2f, 0x5b, 0xf1, 0x7b, 0x7e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x95, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x96, 0x84, 0x95, 0x84, 0x33, 0x74, 0x90, 0x63, 0x0e, 0x53, 0x0d, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x52, 0x2e, 0x5b, 0xd0, 0x73, 0xb7, 0xb5, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xd1, 0x6b, 0xf1, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe7, 0x97, 0xad, 0xf1, 0x73, 0x2f, 0x53, 0x4f, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x12, 0x74, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xb5, 0xb6, 0x84, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x33, 0x74, 0x90, 0x5b, 0x0e, 0x53, 0x0e, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x6f, 0x63, 0x31, 0x8c, 0x18, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xd1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xb5, 0x32, 0x74, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0xb0, 0x63, 0x15, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0xd6, 0x8c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x33, 0x74, 0x90, 0x5b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x8f, 0x73, 0x35, 0xad, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xd1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xef, 0x94, 0x84, 0x90, 0x63, 0x90, 0x63, 0xb0, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x90, 0x63, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbb, 0xce, 0xf5, 0x94, 0x73, 0x84, 0x32, 0x7c, 0xdc, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0x9d, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x74, 0x90, 0x63, 0x0e, 0x53, 0x0e, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0d, 0x53, 0xf0, 0x7b, 0xf8, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x9d, 0xf2, 0x73, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x4f, 0x5b, 0x94, 0x84, 0x77, 0xad, 0x97, 0xad, 0x56, 0x9d, 0xd4, 0x8c, 0x12, 0x74, 0x90, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x12, 0x74, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xef, 0xf6, 0x94, 0x17, 0x95, 0x9b, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xad, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x0e, 0x53, 0x0d, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0e, 0x5b, 0xf1, 0x83, 0xf8, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xd1, 0x6b, 0xf2, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xa5, 0x12, 0x74, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0xb0, 0x63, 0xb0, 0x6b, 0x6f, 0x5b, 0x2e, 0x53, 0x0e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x93, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xf7, 0xd6, 0x8c, 0x54, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0xb5, 0x84, 0x17, 0x95, 0xd9, 0xb5, 0x98, 0xa5, 0xd6, 0x8c, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x84, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x7c, 0xd1, 0x63, 0x0e, 0x53, 0x0d, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0d, 0x53, 0x11, 0x84, 0x19, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0x12, 0x6c, 0x12, 0x6c, 0xf2, 0x6b, 0xd1, 0x6b, 0x12, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0xa5, 0x12, 0x74, 0xd1, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x53, 0xee, 0x4a, 0xd1, 0x6b, 0x7d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0xd6, 0x95, 0x84, 0x34, 0x74, 0x75, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0xb6, 0x84, 0xb5, 0x84, 0x75, 0x7c, 0x75, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x7c, 0xf2, 0x6b, 0x4f, 0x53, 0x0d, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xf0, 0x7b, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xd1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xa5, 0xf2, 0x73, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x0e, 0x4b, 0x4f, 0x5b, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0xb5, 0x8c, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x55, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x34, 0x74, 0x70, 0x5b, 0x0d, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x8f, 0x73, 0xf8, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x8c, 0xd2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0xd1, 0x6b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xf1, 0x73, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xef, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0d, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x52, 0x6f, 0x6b, 0x55, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xdf, 0x94, 0x84, 0xf2, 0x6b, 0xf3, 0x6b, 0x33, 0x74, 0xf2, 0x73, 0xb1, 0x63, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x4f, 0x5b, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5a, 0xc6, 0x34, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x13, 0x74, 0x4f, 0x53, 0x0d, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x63, 0x72, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xce, 0x33, 0x74, 0xf3, 0x6b, 0x33, 0x74, 0x33, 0x74, 0xf2, 0x6b, 0x90, 0x63, 0x4f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x2e, 0x53, 0x52, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5a, 0xc6, 0x54, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0xb1, 0x63, 0x0e, 0x53, 0x0e, 0x4b, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x11, 0x84, 0xfc, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x33, 0x74, 0x13, 0x74, 0x34, 0x74, 0x33, 0x74, 0xb1, 0x63, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x0e, 0x53, 0x2e, 0x5b, 0x11, 0x84, 0x7a, 0xce, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xad, 0x54, 0x7c, 0x13, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0xf2, 0x6b, 0x4f, 0x5b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x4f, 0x6b, 0x18, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xe7, 0x95, 0x84, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf2, 0x73, 0x5a, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xe6, 0x74, 0x84, 0xf3, 0x6b, 0x54, 0x7c, 0x54, 0x7c, 0xf2, 0x6b, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x0e, 0x53, 0x4f, 0x63, 0x93, 0x94, 0xfc, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xd6, 0x37, 0x9d, 0x75, 0x84, 0x33, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0xb1, 0x63, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x5b, 0x11, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x7a, 0xce, 0xf6, 0x94, 0x13, 0x74, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0x74, 0x84, 0x3a, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xa5, 0x33, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x74, 0xb1, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2e, 0x53, 0xed, 0x52, 0x8f, 0x73, 0xf4, 0xa4, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xb5, 0x95, 0x84, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0x90, 0x63, 0x0e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x0e, 0x53, 0x8f, 0x6b, 0x59, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xce, 0x94, 0x84, 0x53, 0x7c, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x33, 0x74, 0xb4, 0x8c, 0xfc, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xe7, 0xb5, 0x8c, 0x34, 0x74, 0x54, 0x7c, 0x75, 0x7c, 0xf2, 0x6b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0xed, 0x52, 0x2e, 0x6b, 0x15, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xff, 0xb9, 0xb5, 0x95, 0x84, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0xd1, 0x6b, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x5b, 0x11, 0x84, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xe7, 0x77, 0xa5, 0x33, 0x74, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x91, 0x63, 0xb1, 0x63, 0x12, 0x74, 0x98, 0xad, 0x5e, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xb5, 0x34, 0x74, 0x54, 0x7c, 0x95, 0x84, 0x33, 0x74, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x0e, 0x5b, 0x52, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0xce, 0x95, 0x84, 0x34, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x74, 0x90, 0x63, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x4e, 0x63, 0x35, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xef, 0xd5, 0x8c, 0xd2, 0x6b, 0x91, 0x63, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x63, 0x70, 0x5b, 0xb1, 0x63, 0xb4, 0x8c, 0x7d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xdf, 0x74, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x54, 0x7c, 0xd2, 0x6b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x5b, 0x4f, 0x53, 0x4f, 0x5b, 0xd8, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xbe, 0x54, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x54, 0x7c, 0x13, 0x74, 0x6f, 0x5b, 0x0e, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xd0, 0x7b, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x8c, 0xb1, 0x63, 0x70, 0x5b, 0xd1, 0x6b, 0x12, 0x74, 0x12, 0x74, 0xd2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb0, 0x63, 0x6f, 0x5b, 0x4f, 0x5b, 0x90, 0x63, 0xf5, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xef, 0xd6, 0x8c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x13, 0x74, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x2e, 0x53, 0xf4, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xbe, 0x13, 0x74, 0x54, 0x7c, 0x34, 0x74, 0x34, 0x74, 0x54, 0x74, 0x33, 0x74, 0xf2, 0x6b, 0x4f, 0x5b, 0x0e, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x5b, 0xd4, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xad, 0xf2, 0x6b, 0x4f, 0x53, 0x6f, 0x5b, 0xb4, 0x8c, 0x36, 0x9d, 0x74, 0x84, 0xd2, 0x6b, 0x91, 0x63, 0x90, 0x63, 0x90, 0x63, 0xb0, 0x63, 0xb1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xf1, 0x73, 0xf1, 0x73, 0xf1, 0x73, 0x6f, 0x5b, 0x4f, 0x5b, 0xd1, 0x6b, 0x3a, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xc6, 0xb6, 0x84, 0x95, 0x84, 0xb6, 0x84, 0x54, 0x7c, 0x6f, 0x5b, 0x2e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0xee, 0x4a, 0x32, 0x7c, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xad, 0xf3, 0x6b, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x33, 0x74, 0xd1, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4e, 0x63, 0x9b, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0xce, 0x54, 0x7c, 0xb2, 0x63, 0x70, 0x5b, 0x31, 0x74, 0xff, 0xff, 0x00, 0x00, 0x9e, 0xf7, 0x74, 0x84, 0x32, 0x7c, 0x93, 0x84, 0xf4, 0x94, 0xd4, 0x94, 0x15, 0x9d, 0x56, 0x9d, 0xd5, 0x8c, 0x13, 0x74, 0x33, 0x7c, 0x15, 0x9d, 0xff, 0xff, 0xff, 0xff, 0x74, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x32, 0x74, 0x1c, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xe7, 0xd6, 0x8c, 0x75, 0x7c, 0xd6, 0x8c, 0x75, 0x7c, 0x90, 0x63, 0x2f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x0e, 0x4b, 0xb0, 0x6b, 0x5a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0xf2, 0x6b, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x13, 0x74, 0x90, 0x63, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xb0, 0x73, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xdf, 0x94, 0x84, 0xf2, 0x6b, 0xf2, 0x6b, 0x91, 0x63, 0x93, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf7, 0x39, 0xc6, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x19, 0xbe, 0xdc, 0xde, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x94, 0x91, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x15, 0x95, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xe7, 0xf7, 0x94, 0x76, 0x7c, 0xd7, 0x8c, 0x95, 0x84, 0xf2, 0x6b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x2e, 0x53, 0x4f, 0x5b, 0x73, 0x84, 0xdb, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xd6, 0xb5, 0x8c, 0xf3, 0x6b, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x13, 0x74, 0x70, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x5b, 0x11, 0x7c, 0x7e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xc6, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0xd2, 0x6b, 0x53, 0x7c, 0x5a, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xb5, 0x33, 0x7c, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0xf1, 0x6b, 0x7b, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xef, 0x17, 0x95, 0x75, 0x7c, 0xd7, 0x8c, 0x96, 0x84, 0x13, 0x74, 0x70, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x63, 0x32, 0x7c, 0x7d, 0xef, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xef, 0xfc, 0xde, 0xb8, 0xad, 0xb5, 0x84, 0x33, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x13, 0x74, 0x90, 0x63, 0x6f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x63, 0x32, 0x84, 0x9b, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0x98, 0xa5, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xd1, 0x6b, 0x32, 0x74, 0x5f, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x7c, 0x91, 0x63, 0x90, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0xf5, 0x94, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xd6, 0x95, 0x84, 0x34, 0x74, 0x75, 0x7c, 0x54, 0x7c, 0xf2, 0x6b, 0x70, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0x4e, 0x5b, 0xf1, 0x6b, 0xff, 0xff, + 0x00, 0x00, 0x5e, 0xef, 0x57, 0x9d, 0x16, 0x95, 0xd5, 0x8c, 0x74, 0x84, 0x54, 0x7c, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x12, 0x7c, 0xb5, 0x8c, 0xf9, 0xb5, 0x9b, 0xce, 0x3a, 0xc6, 0x3a, 0xbe, 0x3a, 0xbe, 0x19, 0xbe, 0x39, 0xbe, 0x19, 0xbe, 0x19, 0xbe, 0x19, 0xbe, 0x5a, 0xc6, 0xb8, 0xad, 0xd5, 0x8c, 0x33, 0x7c, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf3, 0x73, 0x70, 0x5b, 0x90, 0x63, 0x39, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf7, 0x12, 0x74, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0xd1, 0x6b, 0x73, 0x84, 0xf5, 0x94, 0xf5, 0x94, 0xd5, 0x94, 0xd5, 0x8c, 0xd5, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd5, 0x94, 0x73, 0x84, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0xcd, 0x4a, 0x0e, 0x53, 0xff, 0xff, + 0xff, 0xff, 0x13, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0x3c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x95, 0x84, 0xd1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xcd, 0x42, 0x4e, 0x53, 0xfc, 0xe6, + 0x1c, 0xdf, 0x13, 0x74, 0xd2, 0x63, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x6c, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x70, 0x5b, 0xb0, 0x6b, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x95, 0xf2, 0x6b, 0x90, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xcd, 0x42, 0x2e, 0x53, 0x97, 0xad, + 0xfc, 0xde, 0x33, 0x74, 0xd2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x70, 0x5b, 0xd1, 0x73, 0x7e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0xa5, 0x13, 0x74, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x0e, 0x53, 0x52, 0x84, + 0x5e, 0xef, 0x33, 0x74, 0xd2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x90, 0x63, 0xd1, 0x73, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0x9d, 0xf2, 0x73, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xcd, 0x42, 0x0d, 0x4b, 0x32, 0x84, + 0x5d, 0xef, 0x13, 0x74, 0xd2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x63, 0xd2, 0x63, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0x90, 0x63, 0xf1, 0x73, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x8c, 0xd2, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x2f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xed, 0x4a, 0xcd, 0x4a, 0x4e, 0x5b, 0xb7, 0xb5, + 0x9e, 0xef, 0xf2, 0x73, 0xb1, 0x63, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf3, 0x73, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x6c, 0xf2, 0x6b, 0xf2, 0x6b, 0x12, 0x74, 0x12, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x91, 0x63, 0x12, 0x74, 0x3d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x7c, 0x91, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x70, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x5b, 0x8f, 0x6b, 0x52, 0x84, 0xff, 0xff, + 0xff, 0xff, 0x74, 0x7c, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x73, 0x12, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xb0, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x4f, 0x63, 0xb1, 0x73, 0x73, 0x8c, 0xf8, 0xb5, 0xbb, 0xd6, 0xbb, 0xd6, 0xbb, 0xd6, 0x9b, 0xce, 0x9b, 0xce, 0xbb, 0xd6, 0x9b, 0xce, 0x9b, 0xce, 0xdc, 0xd6, 0xf9, 0xbd, 0xb5, 0x8c, 0x12, 0x74, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x91, 0x63, 0x12, 0x74, 0x7a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xd6, 0x12, 0x74, 0x50, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x5b, 0x4f, 0x5b, 0x4f, 0x63, 0xb0, 0x73, 0x32, 0x84, 0xb4, 0x94, 0x97, 0xad, 0xf8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xb7, 0xb5, 0x15, 0x9d, 0x32, 0x7c, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xcd, 0x4a, 0xed, 0x5a, 0xaf, 0x73, 0x73, 0x8c, 0x18, 0xbe, 0x5d, 0xef, 0x7d, 0xef, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0xbe, 0xf7, 0xd8, 0xb5, 0xd5, 0x8c, 0x94, 0x8c, 0x94, 0x84, 0x74, 0x84, 0x53, 0x7c, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x73, 0x13, 0x74, 0xd1, 0x6b, 0x4f, 0x5b, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x52, 0x6f, 0x6b, 0x76, 0xb5, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xad, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x32, 0x7c, 0xfc, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x33, 0x7c, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x5b, 0x6f, 0x63, 0xf0, 0x83, 0x9a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xce, 0x12, 0x74, 0x91, 0x63, 0xd1, 0x6b, 0xb1, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xac, 0x52, 0xd0, 0x83, 0x7a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xf9, 0xbd, 0x74, 0x84, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x12, 0x74, 0xd2, 0x6b, 0x4f, 0x5b, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x73, 0x8c, 0x9e, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xce, 0x12, 0x74, 0xb1, 0x63, 0xd2, 0x6b, 0xb1, 0x63, 0xd1, 0x73, 0xf4, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xde, 0x12, 0x74, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x11, 0x7c, 0x9a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0x53, 0x7c, 0xb1, 0x63, 0xf2, 0x6b, 0xd1, 0x6b, 0x90, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x52, 0x6e, 0x6b, 0x18, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xd6, 0x74, 0x7c, 0xb1, 0x63, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x70, 0x5b, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0d, 0x4b, 0x72, 0x8c, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xe7, 0xb4, 0x8c, 0xb1, 0x63, 0xb1, 0x63, 0x70, 0x5b, 0x12, 0x74, 0x7e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x3a, 0xc6, 0xf6, 0x94, 0xdc, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf7, 0xd9, 0xb5, 0x5e, 0xef, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x8c, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0xd1, 0x73, 0x5a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xe7, 0x33, 0x74, 0xb1, 0x63, 0xf2, 0x6b, 0xd1, 0x6b, 0x70, 0x5b, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x52, 0x11, 0x84, 0xfc, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0xa5, 0xb1, 0x63, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x90, 0x63, 0x2e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0x0d, 0x4b, 0xf1, 0x73, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xd6, 0x33, 0x74, 0x91, 0x63, 0x70, 0x5b, 0x12, 0x74, 0xbb, 0xd6, 0xff, 0xff, 0x3d, 0xe7, 0x33, 0x7c, 0xf2, 0x6b, 0x74, 0x84, 0x36, 0x9d, 0x37, 0x9d, 0x57, 0x9d, 0x77, 0xa5, 0xb5, 0x8c, 0x13, 0x74, 0x53, 0x7c, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x94, 0xd2, 0x6b, 0x2f, 0x53, 0xd1, 0x6b, 0x39, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xc6, 0x13, 0x74, 0xd2, 0x6b, 0xf2, 0x73, 0xd1, 0x6b, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0d, 0x53, 0x93, 0x94, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xbd, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x2f, 0x53, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0x8f, 0x63, 0xfc, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0xbe, 0xb1, 0x63, 0x70, 0x5b, 0xd1, 0x6b, 0x74, 0x84, 0xd5, 0x8c, 0x33, 0x7c, 0x70, 0x5b, 0x90, 0x5b, 0xb1, 0x63, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x63, 0x50, 0x5b, 0x4f, 0x5b, 0x12, 0x74, 0xf5, 0x94, 0xf6, 0x94, 0x74, 0x84, 0xb1, 0x63, 0x70, 0x5b, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xef, 0xd5, 0x8c, 0xf2, 0x6b, 0xf2, 0x6b, 0xf3, 0x73, 0xb1, 0x63, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0x4f, 0x63, 0xf8, 0xc5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xbe, 0x13, 0x74, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd1, 0x6b, 0x4f, 0x53, 0x0d, 0x4b, 0x0e, 0x4b, 0x0d, 0x4b, 0x2e, 0x53, 0xdb, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x97, 0xa5, 0xb1, 0x63, 0xb1, 0x63, 0xd2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x90, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0xd1, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0xb1, 0x6b, 0xb7, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xdf, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0xf2, 0x6b, 0xb1, 0x63, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0xb0, 0x6b, 0xfb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xe7, 0xb5, 0x8c, 0xb1, 0x63, 0xd1, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x6f, 0x5b, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x35, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x9d, 0xd1, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0xb0, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0xb0, 0x63, 0x16, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xce, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0x90, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x6f, 0x5b, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xef, 0xb4, 0x84, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x90, 0x63, 0x2e, 0x53, 0x0e, 0x4b, 0x0d, 0x4b, 0xcd, 0x4a, 0xf1, 0x73, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xf7, 0xd8, 0xb5, 0x32, 0x74, 0x90, 0x63, 0x2f, 0x53, 0x70, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x50, 0x5b, 0x90, 0x63, 0x97, 0xad, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0xf3, 0x6b, 0x13, 0x74, 0x33, 0x74, 0xd1, 0x6b, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xd0, 0x6b, 0x76, 0xa5, 0x3f, 0xe7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xef, 0x36, 0x9d, 0xf2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x4f, 0x5b, 0x0d, 0x4b, 0x0d, 0x4b, 0xed, 0x4a, 0x2e, 0x53, 0xd4, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xe7, 0x36, 0x9d, 0x33, 0x7c, 0xf2, 0x73, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0xf1, 0x73, 0x59, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xd6, 0x74, 0x7c, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0xb1, 0x63, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0x8f, 0x63, 0x76, 0xa5, 0x7d, 0xef, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa5, 0x53, 0x7c, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x70, 0x5b, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0xed, 0x4a, 0xf1, 0x73, 0xbe, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xe7, 0xf9, 0xb5, 0xd1, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x63, 0xf1, 0x7b, 0x5a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0xf2, 0x6b, 0x70, 0x5b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x4f, 0x5b, 0xf1, 0x6b, 0x5f, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xc6, 0x94, 0x84, 0xf2, 0x6b, 0x90, 0x5b, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0x91, 0x63, 0x4f, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x6f, 0x5b, 0xf8, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x73, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x2e, 0x5b, 0xaf, 0x73, 0x7a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xbe, 0x74, 0x7c, 0x13, 0x74, 0x54, 0x7c, 0x33, 0x74, 0xb1, 0x63, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x42, 0xcd, 0x42, 0xb7, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xad, 0xf2, 0x6b, 0x70, 0x5b, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0x70, 0x5b, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x11, 0x74, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x8c, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x5b, 0x2f, 0x5b, 0x4f, 0x6b, 0xf5, 0xa4, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x84, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0x70, 0x5b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0xed, 0x4a, 0xed, 0x4a, 0xb3, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7e, 0xf7, 0xf2, 0x6b, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xb0, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x2f, 0x53, 0x77, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x8c, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x90, 0x6b, 0x3d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xbe, 0x54, 0x7c, 0x34, 0x74, 0x74, 0x7c, 0x34, 0x7c, 0xd1, 0x6b, 0x4f, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x53, 0x15, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0x33, 0x7c, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x5b, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xb0, 0x63, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xce, 0x95, 0x84, 0x54, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0x13, 0x74, 0x6f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x4e, 0x5b, 0x39, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0xbe, 0xd1, 0x6b, 0x70, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x6f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x0e, 0x53, 0x11, 0x74, 0x19, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x73, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xe6, 0xf6, 0x94, 0x34, 0x74, 0x75, 0x7c, 0x95, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xcd, 0x42, 0xcd, 0x42, 0xed, 0x42, 0xed, 0x4a, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xb0, 0x73, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0x12, 0x74, 0x70, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x91, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x12, 0x74, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x73, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x7c, 0xf2, 0x6b, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x52, 0x4e, 0x5b, 0xb0, 0x63, 0xd0, 0x6b, 0x8f, 0x5b, 0x2e, 0x53, 0xed, 0x4a, 0xcd, 0x4a, 0x4f, 0x5b, 0x93, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xbe, 0xf7, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x91, 0x63, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x5b, 0xf5, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0xa5, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x33, 0x74, 0x90, 0x5b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x4a, 0xed, 0x5a, 0x31, 0x84, 0x5a, 0xce, 0xfc, 0xde, 0xf4, 0x94, 0xd0, 0x6b, 0x4f, 0x5b, 0x4e, 0x5b, 0x31, 0x7c, 0x7d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0x12, 0x74, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xf1, 0x73, 0x32, 0x84, 0x93, 0x8c, 0x12, 0x74, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x90, 0x63, 0xd5, 0x94, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x6f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0x58, 0x9d, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0x90, 0x63, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x2e, 0x5b, 0x72, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xe7, 0xd5, 0x94, 0x16, 0x9d, 0x56, 0xa5, 0x56, 0xa5, 0xd8, 0xbd, 0x9e, 0xf7, 0xff, 0xff, 0x19, 0xc6, 0x73, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x63, 0xd4, 0x8c, 0x7e, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x6f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0xa5, 0x96, 0x84, 0x96, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x52, 0xf0, 0x7b, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xef, 0x12, 0x74, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x32, 0x7c, 0x19, 0xbe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0xd6, 0xf7, 0x94, 0x75, 0x7c, 0xb6, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x75, 0x7c, 0xd1, 0x6b, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x4e, 0x6b, 0x96, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa5, 0xd1, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x12, 0x74, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xf7, 0x93, 0x84, 0x70, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xad, 0xd6, 0x8c, 0x96, 0x84, 0xb6, 0x84, 0xd6, 0x8c, 0xb6, 0x84, 0x75, 0x7c, 0xd1, 0x6b, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0xed, 0x5a, 0xf0, 0x83, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x15, 0x95, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0x70, 0x5b, 0xf2, 0x6b, 0x36, 0x9d, 0x1d, 0xdf, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xbf, 0xf7, 0x93, 0x84, 0x70, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0xbe, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xde, 0x57, 0x9d, 0x96, 0x84, 0x75, 0x7c, 0x96, 0x84, 0xd7, 0x8c, 0xd7, 0x8c, 0x75, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xcd, 0x4a, 0x4e, 0x63, 0xd8, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xad, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xf2, 0x6b, 0x57, 0xa5, 0x3d, 0xe7, 0x9e, 0xef, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xbf, 0xf7, 0x94, 0x84, 0x70, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x2f, 0x5b, 0xb0, 0x6b, 0xff, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xef, 0x5e, 0xef, 0xd9, 0xad, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0xb6, 0x84, 0xb6, 0x8c, 0xb6, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0d, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x4a, 0x4f, 0x5b, 0x59, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x73, 0x84, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x94, 0x84, 0x7a, 0xce, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x93, 0x84, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2e, 0x53, 0x90, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xf7, 0x5a, 0xc6, 0xd6, 0x8c, 0x95, 0x84, 0x75, 0x84, 0x75, 0x7c, 0x95, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x33, 0x74, 0x90, 0x5b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x53, 0xf1, 0x6b, 0x3d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0xa5, 0xb1, 0x63, 0x50, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x91, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x63, 0xf2, 0x6b, 0x74, 0x7c, 0xf6, 0x94, 0xd9, 0xb5, 0x9b, 0xce, 0x1d, 0xe7, 0xff, 0xff, 0xbe, 0xf7, 0x32, 0x7c, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2e, 0x53, 0x90, 0x6b, 0xd8, 0xb5, 0x3d, 0xef, 0x3d, 0xe7, 0xbb, 0xd6, 0x98, 0xa5, 0xd6, 0x8c, 0x75, 0x84, 0x34, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x54, 0x7c, 0xd2, 0x6b, 0x6f, 0x5b, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0x2e, 0x53, 0x52, 0x7c, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xc6, 0x90, 0x63, 0x4f, 0x53, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x13, 0x74, 0xb5, 0x84, 0xb8, 0xad, 0x77, 0xa5, 0xb1, 0x6b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x90, 0x63, 0x53, 0x7c, 0xd5, 0x8c, 0x95, 0x84, 0x13, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x54, 0x74, 0x74, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0xf2, 0x6b, 0x90, 0x63, 0x4e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x42, 0x4f, 0x5b, 0xb3, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xd6, 0x32, 0x74, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0xb1, 0x63, 0xd1, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x13, 0x74, 0x90, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x91, 0x63, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x74, 0x12, 0x74, 0xb1, 0x63, 0x4f, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xcc, 0x42, 0xd0, 0x6b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x8c, 0x90, 0x5b, 0x4f, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xd2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x91, 0x63, 0xf3, 0x6b, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0xd2, 0x6b, 0x90, 0x5b, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0d, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xed, 0x4a, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xac, 0x3a, 0xb0, 0x63, 0x1c, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x7c, 0x4f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0x12, 0x6c, 0x33, 0x74, 0x54, 0x7c, 0x95, 0x84, 0x54, 0x7c, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x91, 0x63, 0x13, 0x74, 0x33, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x6b, 0xd1, 0x63, 0x90, 0x63, 0x6f, 0x5b, 0x4f, 0x5b, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x52, 0x2e, 0x5b, 0x2e, 0x53, 0xed, 0x4a, 0xed, 0x4a, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xf1, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x94, 0x90, 0x63, 0x2f, 0x53, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x2e, 0x5b, 0x6f, 0x63, 0x90, 0x63, 0x4f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x70, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x4f, 0x5b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x2e, 0x63, 0xd0, 0x7b, 0x97, 0xb5, 0x18, 0xbe, 0x11, 0x74, 0x0e, 0x4b, 0xcd, 0x42, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0xcd, 0x42, 0xb0, 0x6b, 0x56, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x32, 0x7c, 0x70, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x6f, 0x63, 0xb0, 0x7b, 0x73, 0x94, 0xb4, 0x8c, 0x12, 0x74, 0xb0, 0x63, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x53, 0xed, 0x52, 0x4e, 0x63, 0x52, 0x8c, 0x9a, 0xde, 0xff, 0xff, 0x00, 0x00, 0xfb, 0xde, 0x32, 0x7c, 0x2e, 0x53, 0xed, 0x4a, 0xcd, 0x42, 0x0e, 0x53, 0xb0, 0x6b, 0xf4, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xf7, 0x32, 0x7c, 0x90, 0x63, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x6f, 0x5b, 0xd0, 0x73, 0x52, 0x8c, 0xdc, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xad, 0x11, 0x74, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0xcc, 0x52, 0x6f, 0x73, 0x76, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xad, 0x2e, 0x53, 0x2e, 0x53, 0xd0, 0x6b, 0xb7, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x94, 0xb1, 0x6b, 0x4f, 0x5b, 0xd1, 0x6b, 0x73, 0x8c, 0xdb, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5e, 0xef, 0x73, 0x84, 0x6f, 0x5b, 0x2e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xcc, 0x4a, 0x4e, 0x6b, 0x96, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa5, 0x15, 0x95, 0xb8, 0xb5, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa5, 0x90, 0x63, 0x0e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x52, 0x11, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x94, 0x90, 0x63, 0x0e, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x0e, 0x53, 0x72, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x73, 0x4f, 0x5b, 0x2e, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x0d, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x32, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x0e, 0x53, 0xed, 0x52, 0x6f, 0x63, 0xd0, 0x6b, 0xb0, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0xed, 0x52, 0x4e, 0x5b, 0x8f, 0x6b, 0xd0, 0x73, 0x52, 0x84, 0x73, 0x84, 0x6f, 0x63, 0xcd, 0x42, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0xf1, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xce, 0x4f, 0x5b, 0x0e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x0e, 0x53, 0xed, 0x5a, 0xd0, 0x7b, 0xb7, 0xbd, 0xbb, 0xd6, 0x5a, 0xc6, 0xf5, 0x94, 0x6f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x2e, 0x5b, 0xd0, 0x7b, 0xd8, 0xbd, 0x9a, 0xd6, 0x7a, 0xd6, 0x3c, 0xe7, 0x9f, 0xf7, 0x35, 0x9d, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x42, 0xb0, 0x63, 0x39, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x8c, 0x2f, 0x53, 0x0e, 0x4b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x8f, 0x73, 0x59, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0xd0, 0x6b, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0xed, 0x52, 0xd0, 0x7b, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xef, 0x32, 0x74, 0xed, 0x4a, 0xed, 0x4a, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0d, 0x4b, 0xcd, 0x42, 0x6f, 0x5b, 0xb3, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, 0xa5, 0x2e, 0x53, 0xed, 0x4a, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x6f, 0x63, 0x76, 0xad, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x11, 0x74, 0x4f, 0x5b, 0x0e, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x2e, 0x63, 0xf4, 0xa4, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x97, 0xad, 0x2e, 0x53, 0xcd, 0x42, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xcd, 0x42, 0xb0, 0x6b, 0x9b, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xf7, 0x52, 0x7c, 0x6f, 0x5b, 0xee, 0x4a, 0xed, 0x4a, 0x0e, 0x4b, 0x0e, 0x53, 0xee, 0x4a, 0x2e, 0x5b, 0x32, 0x84, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x93, 0x8c, 0x6f, 0x5b, 0xed, 0x4a, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x6f, 0x63, 0xdb, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x5d, 0xef, 0x12, 0x74, 0xcd, 0x42, 0xac, 0x42, 0xcd, 0x4a, 0x0e, 0x53, 0x4f, 0x5b, 0xf1, 0x73, 0x5a, 0xce, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0xd8, 0xb5, 0x52, 0x7c, 0xd1, 0x6b, 0x6f, 0x5b, 0x2e, 0x53, 0x6f, 0x5b, 0x52, 0x84, 0x9a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x94, 0x6f, 0x5b, 0xed, 0x4a, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x6f, 0x6b, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xce, 0x52, 0x7c, 0xb0, 0x6b, 0x12, 0x74, 0xb3, 0x8c, 0x39, 0xc6, 0x9e, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xf7, 0x3d, 0xe7, 0xf5, 0x94, 0x11, 0x74, 0xf8, 0xb5, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0x9d, 0x4f, 0x5b, 0xcd, 0x42, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x53, 0xd0, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xf7, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xef, 0x8f, 0x63, 0xed, 0x4a, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0xed, 0x4a, 0xcd, 0x4a, 0x4f, 0x5b, 0x93, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x76, 0xa5, 0x11, 0x74, 0x11, 0x74, 0x11, 0x74, 0x11, 0x74, 0xf1, 0x73, 0xd0, 0x6b, 0x73, 0x84, 0x7e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + /*alpha channel*/ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0f, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0xff, 0x28, 0x06, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x2b, 0xff, 0xff, 0xa5, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x51, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x01, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x0e, 0x00, 0x00, 0x00, 0x07, 0x2d, 0x82, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x46, 0x05, 0x00, 0x31, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xbb, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa9, 0x3b, 0x34, 0x4e, 0xac, 0xff, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xa8, 0x59, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf3, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf3, 0xf0, 0xf3, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x95, 0x2e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x4b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x86, 0xe6, 0xff, 0xff, 0x93, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xaf, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xf4, 0xff, 0xff, 0xdc, 0xff, 0xff, 0xb1, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xcc, 0xff, 0xff, 0xff, 0xff, 0x4a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x89, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x83, 0x02, 0x00, 0x00, 0x0d, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc8, 0xff, 0xff, 0xf9, 0xf9, 0xff, 0xff, 0xbb, 0x19, 0x00, 0x00, 0x02, 0x78, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x6b, 0x2c, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xe6, 0x20, 0x06, 0x76, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xd7, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xc4, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8f, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0x12, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x62, 0x19, 0x14, 0x31, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x0f, 0x04, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x03, 0x00, 0x00, 0x00, 0x07, 0x36, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x55, 0x0f, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0b, 0x4f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x40, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x5e, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x89, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xc1, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x44, 0x7c, 0x70, 0x86, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x70, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xac, 0x80, 0x80, 0x78, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xf3, 0xe8, 0x64, 0x0b, 0x01, 0x02, 0x00, 0x04, 0x94, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xe6, 0xe8, 0xe6, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x11, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xcd, 0xcf, 0xad, 0xd5, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x51, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x02, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x92, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xad, 0x29, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x41, 0xd8, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x46, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x83, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x7f, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0x85, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x17, 0x79, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x8c, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0x5b, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x8a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb9, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0xff, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xe9, 0xff, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xde, 0xff, 0xb6, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x91, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x95, 0xff, 0xf4, 0xff, 0xd9, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xce, 0xfb, 0xf7, 0xff, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xff, 0xff, 0xff, 0xd5, 0x04, 0x00, 0x0f, 0xff, 0xff, 0xe8, 0xaf, 0xb5, 0xb4, 0xae, 0xe6, 0xff, 0xff, 0xb3, 0x03, 0x01, 0xcb, 0xff, 0xff, 0xff, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xed, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0xff, 0xff, 0xf8, 0xff, 0xdd, 0x02, 0x00, 0x00, 0x15, 0x79, 0x0d, 0x00, 0x01, 0x01, 0x00, 0x0a, 0x77, 0x3b, 0x01, 0x00, 0x02, 0xdf, 0xff, 0xf3, 0xff, 0xcb, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x01, 0x02, 0x02, 0x03, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf4, 0xff, 0xff, 0xff, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xd5, 0xdc, 0xdf, 0xff, 0xe6, 0x0d, 0x00, + 0x00, 0x00, 0x09, 0x11, 0x0b, 0x1a, 0x50, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x42, 0x02, 0x03, 0x04, 0x04, 0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x03, 0x05, 0x13, 0x81, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xb1, 0x11, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x01, + 0x00, 0x20, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0x65, 0x81, 0x80, 0x89, 0x8b, 0x89, 0x88, 0x87, 0x89, 0x78, 0xaf, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x08, + 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x3a, + 0x51, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xaf, + 0x60, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, + 0x3b, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, + 0x3d, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e, + 0x2d, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, + 0x0b, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0x56, 0x5b, 0x5b, 0x62, 0x62, 0x5a, 0x5c, 0x64, 0x53, 0x90, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x79, 0x85, 0x83, 0x83, 0x83, 0x83, 0x7e, 0x8b, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0x60, 0x16, 0x0d, 0x08, 0x00, + 0x00, 0x16, 0xa1, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0x1d, 0x04, 0x02, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x02, 0x05, 0x11, 0x71, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xff, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xf8, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x2b, 0x03, 0x06, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x05, 0x0c, 0x0b, 0x07, 0x19, 0x90, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xb2, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x50, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x29, 0x00, 0x02, 0x78, 0xed, 0x40, 0x01, 0x02, 0x02, 0x01, 0x20, 0x9e, 0x23, 0x00, 0x00, 0x02, 0xd9, 0xff, 0xfb, 0xff, 0xff, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7c, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xff, 0xff, 0xff, 0xff, 0x58, 0x06, 0x2e, 0xff, 0xff, 0xff, 0xbc, 0xbe, 0xc1, 0xbc, 0xfc, 0xff, 0xff, 0x37, 0x02, 0x07, 0xd9, 0xff, 0xff, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xfc, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xd9, 0xf8, 0xff, 0xff, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x54, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x8d, 0xff, 0xe8, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xef, 0xff, 0x6d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xee, 0xff, 0xfc, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf8, 0xff, 0xd9, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6c, 0xff, 0xff, 0xfc, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x76, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x53, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x29, 0x90, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xa4, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x84, 0x18, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x90, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x35, 0x65, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x64, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x05, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x09, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x1b, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x7d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x58, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x27, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x15, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x55, 0x35, 0xca, 0xd6, 0xca, 0xdc, 0xf8, 0x19, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xc6, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xc8, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xce, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xaa, 0x02, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xbd, 0x9b, 0x99, 0xa3, 0x93, 0x25, 0x0b, 0x74, 0xf6, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xd5, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xb1, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x2c, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x48, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x7a, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x92, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xcd, 0x38, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x3e, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xac, 0x31, 0x22, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x1f, 0x23, 0x86, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0x1a, 0x08, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x0f, 0x28, 0x68, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x75, 0x3b, 0x33, 0x12, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0x3b, 0x2d, 0x39, 0xa3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xac, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xba, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xe8, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xee, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xe2, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xd2, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0x8b, 0x73, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf9, 0xff, 0xff, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xeb, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xdd, 0xd2, 0xe3, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xe6, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xe8, 0x42, 0x09, 0x03, 0x0c, 0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x72, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10, 0x66, 0xf6, 0xd8, 0xe6, 0x8b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xd0, 0xff, 0xff, 0xff, 0xf6, 0x4e, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0c, 0x0f, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x9b, 0xa0, 0x91, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf9, 0xf9, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf9, 0xf7, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x66, 0x3a, 0x50, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x58, 0x40, 0x4e, 0x3f, 0x2e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x59, 0x00, 0x00, 0x00, 0x24, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xc2, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x05, 0x00, 0x01, 0x00, 0x0c, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x82, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x29, 0x00, 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x52, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x68, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x95, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x68, 0xff, 0xff, 0xff, 0xff, 0x6a, 0x25, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x16, 0x39, 0xeb, 0xff, 0x63, 0x17, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x1e, 0x1e, 0x1f, 0x1c, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x1a, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0xb8, 0xff, 0xe7, 0xe2, 0xe4, 0xe7, 0xff, 0xf7, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x0c, 0x0c, 0x0b, 0x10, 0x18, 0x12, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + +}; + +const lv_img_dsc_t img_benchmark_cogwheel_rgb565a8 = { + .header.cf = LV_IMG_CF_RGB565A8, + .header.always_zero = 0, + .header.reserved = 0, + .header.w = 100, + .header.h = 100, + .data_size = 30000, + .data = img_benchmark_cogwheel_rgb565a8_map, +}; diff --git a/demos/benchmark/lv_demo_benchmark.c b/demos/benchmark/lv_demo_benchmark.c index a277ec4ee..44f3e8fef 100644 --- a/demos/benchmark/lv_demo_benchmark.c +++ b/demos/benchmark/lv_demo_benchmark.c @@ -42,6 +42,11 @@ #define LINE_POINT_DIFF_MAX LV_MAX(LV_HOR_RES / (LINE_POINT_NUM + 2), LINE_POINT_DIFF_MIN * 2) #define ARC_WIDTH_THIN LV_MAX(LV_DPI_DEF / 50, 2) #define ARC_WIDTH_THICK LV_MAX(LV_DPI_DEF / 10, 5) + +#ifndef dimof + #define dimof(__array) (sizeof(__array) / sizeof(__array[0])) +#endif + /********************** * TYPEDEFS **********************/ @@ -56,7 +61,7 @@ typedef struct { uint32_t fps_normal; uint32_t fps_opa; uint8_t weight; -}scene_dsc_t; +} scene_dsc_t; /********************** * STATIC PROTOTYPES @@ -64,8 +69,16 @@ typedef struct { static lv_style_t style_common; static bool opa_mode = true; - -LV_IMG_DECLARE(img_benchmark_cogwheel_argb); +static bool run_max_speed = false; +static finished_cb_t * benchmark_finished_cb = NULL; +static uint32_t disp_ori_timer_period; +static uint32_t anim_ori_timer_period; + +#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16 + LV_IMG_DECLARE(img_benchmark_cogwheel_rgb565a8); +#else + LV_IMG_DECLARE(img_benchmark_cogwheel_argb); +#endif LV_IMG_DECLARE(img_benchmark_cogwheel_rgb); LV_IMG_DECLARE(img_benchmark_cogwheel_chroma_keyed); LV_IMG_DECLARE(img_benchmark_cogwheel_indexed16); @@ -85,6 +98,7 @@ static void arc_create(lv_style_t * style); static void fall_anim(lv_obj_t * obj); static void rnd_reset(void); static int32_t rnd_next(int32_t min, int32_t max); +static void report_cb(lv_timer_t * timer); static void rectangle_cb(void) { @@ -248,8 +262,12 @@ static void img_argb_cb(void) { lv_style_reset(&style_common); lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER); - img_create(&style_common, &img_benchmark_cogwheel_argb, false, false, false); +#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16 + img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, false, false); +#else + img_create(&style_common, &img_benchmark_cogwheel_argb, false, false, false); +#endif } static void img_ckey_cb(void) @@ -290,7 +308,11 @@ static void img_argb_recolor_cb(void) lv_style_reset(&style_common); lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER); lv_style_set_img_recolor_opa(&style_common, LV_OPA_50); +#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16 + img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, false, false); +#else img_create(&style_common, &img_benchmark_cogwheel_argb, false, false, false); +#endif } static void img_ckey_recolor_cb(void) @@ -328,14 +350,22 @@ static void img_argb_rot_cb(void) { lv_style_reset(&style_common); lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER); +#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16 + img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, true, false, false); +#else img_create(&style_common, &img_benchmark_cogwheel_argb, true, false, false); +#endif } static void img_argb_rot_aa_cb(void) { lv_style_reset(&style_common); lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER); +#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16 + img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, true, false, true); +#else img_create(&style_common, &img_benchmark_cogwheel_argb, true, false, true); +#endif } static void img_rgb_zoom_cb(void) @@ -359,7 +389,11 @@ static void img_argb_zoom_cb(void) { lv_style_reset(&style_common); lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER); +#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16 + img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, true, false); +#else img_create(&style_common, &img_benchmark_cogwheel_argb, false, true, false); +#endif } @@ -367,7 +401,11 @@ static void img_argb_zoom_aa_cb(void) { lv_style_reset(&style_common); lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER); +#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16 + img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, true, true); +#else img_create(&style_common, &img_benchmark_cogwheel_argb, false, true, true); +#endif } static void txt_small_cb(void) @@ -491,8 +529,11 @@ static void sub_img_cb(void) lv_style_reset(&style_common); lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER); lv_style_set_blend_mode(&style_common, LV_BLEND_MODE_SUBTRACTIVE); +#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16 + img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, false, false); +#else img_create(&style_common, &img_benchmark_cogwheel_argb, false, false, false); - +#endif } static void sub_line_cb(void) { @@ -527,66 +568,67 @@ static void sub_text_cb(void) /********************** * STATIC VARIABLES **********************/ + static scene_dsc_t scenes[] = { - {.name = "Rectangle", .weight = 30, .create_cb = rectangle_cb}, - {.name = "Rectangle rounded", .weight = 20, .create_cb = rectangle_rounded_cb}, - {.name = "Circle", .weight = 10, .create_cb = rectangle_circle_cb}, - {.name = "Border", .weight = 20, .create_cb = border_cb}, - {.name = "Border rounded", .weight = 30, .create_cb = border_rounded_cb}, - {.name = "Circle border", .weight = 10, .create_cb = border_circle_cb}, - {.name = "Border top", .weight = 3, .create_cb = border_top_cb}, - {.name = "Border left", .weight = 3, .create_cb = border_left_cb}, - {.name = "Border top + left", .weight = 3, .create_cb = border_top_left_cb}, - {.name = "Border left + right", .weight = 3, .create_cb = border_left_right_cb}, - {.name = "Border top + bottom", .weight = 3, .create_cb = border_top_bottom_cb}, - - {.name = "Shadow small", .weight = 3, .create_cb = shadow_small_cb}, - {.name = "Shadow small offset", .weight = 5, .create_cb = shadow_small_ofs_cb}, - {.name = "Shadow large", .weight = 5, .create_cb = shadow_large_cb}, - {.name = "Shadow large offset", .weight = 3, .create_cb = shadow_large_ofs_cb}, - - {.name = "Image RGB", .weight = 20, .create_cb = img_rgb_cb}, - {.name = "Image ARGB", .weight = 20, .create_cb = img_argb_cb}, - {.name = "Image chorma keyed", .weight = 5, .create_cb = img_ckey_cb}, - {.name = "Image indexed", .weight = 5, .create_cb = img_index_cb}, - {.name = "Image alpha only", .weight = 5, .create_cb = img_alpha_cb}, - - {.name = "Image RGB recolor", .weight = 5, .create_cb = img_rgb_recolor_cb}, - {.name = "Image ARGB recolor", .weight = 20, .create_cb = img_argb_recolor_cb}, - {.name = "Image chorma keyed recolor", .weight = 3, .create_cb = img_ckey_recolor_cb}, - {.name = "Image indexed recolor", .weight = 3, .create_cb = img_index_recolor_cb}, - - {.name = "Image RGB rotate", .weight = 3, .create_cb = img_rgb_rot_cb}, - {.name = "Image RGB rotate anti aliased", .weight = 3, .create_cb = img_rgb_rot_aa_cb}, - {.name = "Image ARGB rotate", .weight = 5, .create_cb = img_argb_rot_cb}, - {.name = "Image ARGB rotate anti aliased", .weight = 5, .create_cb = img_argb_rot_aa_cb}, - {.name = "Image RGB zoom", .weight = 3, .create_cb = img_rgb_zoom_cb}, - {.name = "Image RGB zoom anti aliased", .weight = 3, .create_cb = img_rgb_zoom_aa_cb}, - {.name = "Image ARGB zoom", .weight = 5, .create_cb = img_argb_zoom_cb}, - {.name = "Image ARGB zoom anti aliased", .weight = 5, .create_cb = img_argb_zoom_aa_cb}, - - {.name = "Text small", .weight = 20, .create_cb = txt_small_cb}, - {.name = "Text medium", .weight = 30, .create_cb = txt_medium_cb}, - {.name = "Text large", .weight = 20, .create_cb = txt_large_cb}, - - {.name = "Text small compressed", .weight = 3, .create_cb = txt_small_compr_cb}, - {.name = "Text medium compressed", .weight = 5, .create_cb = txt_medium_compr_cb}, - {.name = "Text large compressed", .weight = 10, .create_cb = txt_large_compr_cb}, - - {.name = "Line", .weight = 10, .create_cb = line_cb}, - - {.name = "Arc think", .weight = 10, .create_cb = arc_think_cb}, - {.name = "Arc thick", .weight = 10, .create_cb = arc_thick_cb}, - - {.name = "Substr. rectangle", .weight = 10, .create_cb = sub_rectangle_cb}, - {.name = "Substr. border", .weight = 10, .create_cb = sub_border_cb}, - {.name = "Substr. shadow", .weight = 10, .create_cb = sub_shadow_cb}, - {.name = "Substr. image", .weight = 10, .create_cb = sub_img_cb}, - {.name = "Substr. line", .weight = 10, .create_cb = sub_line_cb}, - {.name = "Substr. arc", .weight = 10, .create_cb = sub_arc_cb}, - {.name = "Substr. text", .weight = 10, .create_cb = sub_text_cb}, - - {.name = "", .create_cb = NULL} + {.name = "Rectangle", .weight = 30, .create_cb = rectangle_cb}, + {.name = "Rectangle rounded", .weight = 20, .create_cb = rectangle_rounded_cb}, + {.name = "Circle", .weight = 10, .create_cb = rectangle_circle_cb}, + {.name = "Border", .weight = 20, .create_cb = border_cb}, + {.name = "Border rounded", .weight = 30, .create_cb = border_rounded_cb}, + {.name = "Circle border", .weight = 10, .create_cb = border_circle_cb}, + {.name = "Border top", .weight = 3, .create_cb = border_top_cb}, + {.name = "Border left", .weight = 3, .create_cb = border_left_cb}, + {.name = "Border top + left", .weight = 3, .create_cb = border_top_left_cb}, + {.name = "Border left + right", .weight = 3, .create_cb = border_left_right_cb}, + {.name = "Border top + bottom", .weight = 3, .create_cb = border_top_bottom_cb}, + + {.name = "Shadow small", .weight = 3, .create_cb = shadow_small_cb}, + {.name = "Shadow small offset", .weight = 5, .create_cb = shadow_small_ofs_cb}, + {.name = "Shadow large", .weight = 5, .create_cb = shadow_large_cb}, + {.name = "Shadow large offset", .weight = 3, .create_cb = shadow_large_ofs_cb}, + + {.name = "Image RGB", .weight = 20, .create_cb = img_rgb_cb}, + {.name = "Image ARGB", .weight = 20, .create_cb = img_argb_cb}, + {.name = "Image chorma keyed", .weight = 5, .create_cb = img_ckey_cb}, + {.name = "Image indexed", .weight = 5, .create_cb = img_index_cb}, + {.name = "Image alpha only", .weight = 5, .create_cb = img_alpha_cb}, + + {.name = "Image RGB recolor", .weight = 5, .create_cb = img_rgb_recolor_cb}, + {.name = "Image ARGB recolor", .weight = 20, .create_cb = img_argb_recolor_cb}, + {.name = "Image chorma keyed recolor", .weight = 3, .create_cb = img_ckey_recolor_cb}, + {.name = "Image indexed recolor", .weight = 3, .create_cb = img_index_recolor_cb}, + + {.name = "Image RGB rotate", .weight = 3, .create_cb = img_rgb_rot_cb}, + {.name = "Image RGB rotate anti aliased", .weight = 3, .create_cb = img_rgb_rot_aa_cb}, + {.name = "Image ARGB rotate", .weight = 5, .create_cb = img_argb_rot_cb}, + {.name = "Image ARGB rotate anti aliased", .weight = 5, .create_cb = img_argb_rot_aa_cb}, + {.name = "Image RGB zoom", .weight = 3, .create_cb = img_rgb_zoom_cb}, + {.name = "Image RGB zoom anti aliased", .weight = 3, .create_cb = img_rgb_zoom_aa_cb}, + {.name = "Image ARGB zoom", .weight = 5, .create_cb = img_argb_zoom_cb}, + {.name = "Image ARGB zoom anti aliased", .weight = 5, .create_cb = img_argb_zoom_aa_cb}, + + {.name = "Text small", .weight = 20, .create_cb = txt_small_cb}, + {.name = "Text medium", .weight = 30, .create_cb = txt_medium_cb}, + {.name = "Text large", .weight = 20, .create_cb = txt_large_cb}, + + {.name = "Text small compressed", .weight = 3, .create_cb = txt_small_compr_cb}, + {.name = "Text medium compressed", .weight = 5, .create_cb = txt_medium_compr_cb}, + {.name = "Text large compressed", .weight = 10, .create_cb = txt_large_compr_cb}, + + {.name = "Line", .weight = 10, .create_cb = line_cb}, + + {.name = "Arc think", .weight = 10, .create_cb = arc_think_cb}, + {.name = "Arc thick", .weight = 10, .create_cb = arc_thick_cb}, + + {.name = "Substr. rectangle", .weight = 10, .create_cb = sub_rectangle_cb}, + {.name = "Substr. border", .weight = 10, .create_cb = sub_border_cb}, + {.name = "Substr. shadow", .weight = 10, .create_cb = sub_shadow_cb}, + {.name = "Substr. image", .weight = 10, .create_cb = sub_img_cb}, + {.name = "Substr. line", .weight = 10, .create_cb = sub_line_cb}, + {.name = "Substr. arc", .weight = 10, .create_cb = sub_arc_cb}, + {.name = "Substr. text", .weight = 10, .create_cb = sub_text_cb}, + + {.name = "", .create_cb = NULL} }; static int32_t scene_act = -1; @@ -596,23 +638,23 @@ static lv_obj_t * subtitle; static uint32_t rnd_act; -static uint32_t rnd_map[] = { - 0xbd13204f, 0x67d8167f, 0x20211c99, 0xb0a7cc05, - 0x06d5c703, 0xeafb01a7, 0xd0473b5c, 0xc999aaa2, - 0x86f9d5d9, 0x294bdb29, 0x12a3c207, 0x78914d14, - 0x10a30006, 0x6134c7db, 0x194443af, 0x142d1099, - 0x376292d5, 0x20f433c5, 0x074d2a59, 0x4e74c293, - 0x072a0810, 0xdd0f136d, 0x5cca6dbc, 0x623bfdd8, - 0xb645eb2f, 0xbe50894a, 0xc9b56717, 0xe0f912c8, - 0x4f6b5e24, 0xfe44b128, 0xe12d57a8, 0x9b15c9cc, - 0xab2ae1d3, 0xb4dc5074, 0x67d457c8, 0x8e46b00c, - 0xa29a1871, 0xcee40332, 0x80f93aa1, 0x85286096, - 0x09bd6b49, 0x95072088, 0x2093924b, 0x6a27328f, - 0xa796079b, 0xc3b488bc, 0xe29bcce0, 0x07048a4c, - 0x7d81bd99, 0x27aacb30, 0x44fc7a0e, 0xa2382241, - 0x8357a17d, 0x97e9c9cc, 0xad10ff52, 0x9923fc5c, - 0x8f2c840a, 0x20356ba2, 0x7997a677, 0x9a7f1800, - 0x35c7562b, 0xd901fe51, 0x8f4e053d, 0xa5b94923, +static const uint32_t rnd_map[] = { + 0xbd13204f, 0x67d8167f, 0x20211c99, 0xb0a7cc05, + 0x06d5c703, 0xeafb01a7, 0xd0473b5c, 0xc999aaa2, + 0x86f9d5d9, 0x294bdb29, 0x12a3c207, 0x78914d14, + 0x10a30006, 0x6134c7db, 0x194443af, 0x142d1099, + 0x376292d5, 0x20f433c5, 0x074d2a59, 0x4e74c293, + 0x072a0810, 0xdd0f136d, 0x5cca6dbc, 0x623bfdd8, + 0xb645eb2f, 0xbe50894a, 0xc9b56717, 0xe0f912c8, + 0x4f6b5e24, 0xfe44b128, 0xe12d57a8, 0x9b15c9cc, + 0xab2ae1d3, 0xb4dc5074, 0x67d457c8, 0x8e46b00c, + 0xa29a1871, 0xcee40332, 0x80f93aa1, 0x85286096, + 0x09bd6b49, 0x95072088, 0x2093924b, 0x6a27328f, + 0xa796079b, 0xc3b488bc, 0xe29bcce0, 0x07048a4c, + 0x7d81bd99, 0x27aacb30, 0x44fc7a0e, 0xa2382241, + 0x8357a17d, 0x97e9c9cc, 0xad10ff52, 0x9923fc5c, + 0x8f2c840a, 0x20356ba2, 0x7997a677, 0x9a7f1800, + 0x35c7562b, 0xd901fe51, 0x8f4e053d, 0xa5b94923, }; /********************** @@ -623,11 +665,23 @@ static uint32_t rnd_map[] = { * GLOBAL FUNCTIONS **********************/ -void lv_demo_benchmark(void) +static void benchmark_init(void) { - lv_disp_t * disp = lv_disp_get_next(NULL); + lv_disp_t * disp = lv_disp_get_default(); disp->driver->monitor_cb = monitor_cb; + /*Force to run at maximum frame rate*/ + if(run_max_speed) { + if(disp->refr_timer) { + disp_ori_timer_period = disp->refr_timer->period; + lv_timer_set_period(disp->refr_timer, 1); + } + + lv_timer_t * anim_timer = lv_anim_get_timer(); + anim_ori_timer_period = anim_timer->period; + lv_timer_set_period(anim_timer, 1); + } + lv_obj_t * scr = lv_scr_act(); lv_obj_remove_style_all(scr); lv_obj_set_style_bg_opa(scr, LV_OPA_COVER, 0); @@ -646,11 +700,54 @@ void lv_demo_benchmark(void) lv_style_init(&style_common); lv_obj_update_layout(scr); +} + + +void lv_demo_benchmark(void) +{ + benchmark_init(); /*Manually start scenes*/ scene_next_task_cb(NULL); } + +void lv_demo_benchmark_run_scene(int_fast16_t scene_no) +{ + benchmark_init(); + + if(((scene_no >> 1) >= dimof(scenes))) { + /* invalid scene number */ + return ; + } + + opa_mode = scene_no & 0x01; + scene_act = scene_no >> 1; + + if(scenes[scene_act].create_cb) { + lv_label_set_text_fmt(title, "%"LV_PRId32"/%d: %s%s", scene_act * 2 + (opa_mode ? 1 : 0), (int)(dimof(scenes) * 2) - 2, + scenes[scene_act].name, opa_mode ? " + opa" : ""); + lv_label_set_text(subtitle, ""); + + rnd_reset(); + scenes[scene_act].create_cb(); + + lv_timer_t * t = lv_timer_create(report_cb, SCENE_TIME, NULL); + lv_timer_set_repeat_count(t, 1); + } +} + + +void lv_demo_benchmark_set_finished_cb(finished_cb_t * finished_cb) +{ + benchmark_finished_cb = finished_cb; +} + +void lv_demo_benchmark_set_max_speed(bool en) +{ + run_max_speed = en; +} + /********************** * STATIC FUNCTIONS **********************/ @@ -662,204 +759,280 @@ static void monitor_cb(lv_disp_drv_t * drv, uint32_t time, uint32_t px) if(opa_mode) { scenes[scene_act].refr_cnt_opa ++; scenes[scene_act].time_sum_opa += time; - } else { + } + else { scenes[scene_act].refr_cnt_normal ++; scenes[scene_act].time_sum_normal += time; } -// lv_obj_invalidate(lv_scr_act()); + // lv_obj_invalidate(lv_scr_act()); } -static void scene_next_task_cb(lv_timer_t * timer) +static void generate_report(void) { - LV_UNUSED(timer); - lv_obj_clean(scene_bg); + uint32_t weight_sum = 0; + uint32_t weight_normal_sum = 0; + uint32_t weight_opa_sum = 0; + uint32_t fps_sum = 0; + uint32_t fps_normal_sum = 0; + uint32_t fps_opa_sum = 0; + uint32_t i; + for(i = 0; scenes[i].create_cb; i++) { + fps_normal_sum += scenes[i].fps_normal * scenes[i].weight; + weight_normal_sum += scenes[i].weight; - if(opa_mode) { - if(scene_act >= 0) { - if(scenes[scene_act].time_sum_opa == 0) scenes[scene_act].time_sum_opa = 1; - scenes[scene_act].fps_opa = (1000 * scenes[scene_act].refr_cnt_opa) / scenes[scene_act].time_sum_opa; - if(scenes[scene_act].create_cb) scene_act++; /*If still there are scenes go to the next*/ - } else { - scene_act ++; - } - opa_mode = false; - } else { - if(scenes[scene_act].time_sum_normal == 0) scenes[scene_act].time_sum_normal = 1; - scenes[scene_act].fps_normal = (1000 * scenes[scene_act].refr_cnt_normal) / scenes[scene_act].time_sum_normal; - opa_mode = true; + uint32_t w = LV_MAX(scenes[i].weight / 2, 1); + fps_opa_sum += scenes[i].fps_opa * w; + weight_opa_sum += w; } - if(scenes[scene_act].create_cb) { - lv_label_set_text_fmt(title, "%"LV_PRId32"/%d: %s%s", scene_act * 2 + (opa_mode ? 1 : 0), (sizeof(scenes) / sizeof(scene_dsc_t) * 2) - 2, scenes[scene_act].name, opa_mode ? " + opa" : ""); - if(opa_mode) { - lv_label_set_text_fmt(subtitle, "Result of \"%s\": %"LV_PRId32" FPS", scenes[scene_act].name, scenes[scene_act].fps_normal); - } else { - if(scene_act > 0) { - lv_label_set_text_fmt(subtitle, "Result of \"%s + opa\": %"LV_PRId32" FPS", scenes[scene_act - 1].name, scenes[scene_act - 1].fps_opa); - } else { - lv_label_set_text(subtitle, ""); - } - } - rnd_reset(); - scenes[scene_act].create_cb(); - lv_timer_t * t = lv_timer_create(scene_next_task_cb, SCENE_TIME, NULL); - lv_timer_set_repeat_count(t, 1); + fps_sum = fps_normal_sum + fps_opa_sum; + weight_sum = weight_normal_sum + weight_opa_sum; + + uint32_t fps_weighted = fps_sum / weight_sum; + uint32_t fps_normal_unweighted = fps_normal_sum / weight_normal_sum; + uint32_t fps_opa_unweighted = fps_opa_sum / weight_opa_sum; + uint32_t opa_speed_pct = (fps_opa_unweighted * 100) / fps_normal_unweighted; + + if(NULL != benchmark_finished_cb) { + (*benchmark_finished_cb)(); } - /*Ready*/ - else { - uint32_t weight_sum = 0; - uint32_t weight_normal_sum = 0; - uint32_t weight_opa_sum = 0; - uint32_t fps_sum = 0; - uint32_t fps_normal_sum = 0; - uint32_t fps_opa_sum = 0; - uint32_t i; - for(i = 0; scenes[i].create_cb; i++) { - fps_normal_sum += scenes[i].fps_normal * scenes[i].weight; - weight_normal_sum += scenes[i].weight; - - uint32_t w = LV_MAX(scenes[i].weight / 2, 1); - fps_opa_sum += scenes[i].fps_opa * w; - weight_opa_sum += w; - } + + lv_obj_clean(lv_scr_act()); + scene_bg = NULL; - fps_sum = fps_normal_sum + fps_opa_sum; - weight_sum = weight_normal_sum + weight_opa_sum; + lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN); - uint32_t fps_weighted = fps_sum / weight_sum; - uint32_t fps_normal_unweighted = fps_normal_sum / weight_normal_sum; - uint32_t fps_opa_unweighted = fps_opa_sum / weight_opa_sum; + title = lv_label_create(lv_scr_act()); + lv_label_set_text_fmt(title, "Weighted FPS: %"LV_PRIu32, fps_weighted); - uint32_t opa_speed_pct = (fps_opa_unweighted * 100) / fps_normal_unweighted; + subtitle = lv_label_create(lv_scr_act()); + lv_label_set_text_fmt(subtitle, "Opa. speed: %"LV_PRIu32"%%", opa_speed_pct); - lv_obj_clean(lv_scr_act()); - scene_bg = NULL; + lv_coord_t w = lv_obj_get_content_width(lv_scr_act()); + lv_obj_t * table = lv_table_create(lv_scr_act()); + // lv_obj_clean_style_list(table, LV_PART_MAIN); + lv_table_set_col_cnt(table, 2); + lv_table_set_col_width(table, 0, (w * 3) / 4 - 3); + lv_table_set_col_width(table, 1, w / 4 - 3); + lv_obj_set_width(table, lv_pct(100)); - lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN); + // static lv_style_t style_cell_slow; + // static lv_style_t style_cell_very_slow; + // static lv_style_t style_cell_title; + // + // lv_style_init(&style_cell_title); + // lv_style_set_bg_color(&style_cell_title, LV_STATE_DEFAULT, lv_palette_main(LV_PALETTE_GREY)); + // lv_style_set_bg_opa(&style_cell_title, LV_STATE_DEFAULT, LV_OPA_50); + // + // lv_style_init(&style_cell_slow); + // lv_style_set_text_color(&style_cell_slow, LV_STATE_DEFAULT, LV_COLOR_ORANGE); + // + // lv_style_init(&style_cell_very_slow); + // lv_style_set_text_color(&style_cell_very_slow, LV_STATE_DEFAULT, lv_palette_main(LV_PALETTE_RED)); - title = lv_label_create(lv_scr_act()); - lv_label_set_text_fmt(title, "Weighted FPS: %"LV_PRIu32, fps_weighted); + // lv_obj_add_style(table, LV_TABLE_PART_CELL2, &style_cell_slow); + // lv_obj_add_style(table, LV_TABLE_PART_CELL3, &style_cell_very_slow); + // lv_obj_add_style(table, LV_TABLE_PART_CELL4, &style_cell_title); - subtitle = lv_label_create(lv_scr_act()); - lv_label_set_text_fmt(subtitle, "Opa. speed: %"LV_PRIu32"%%", opa_speed_pct); - lv_coord_t w = lv_obj_get_content_width(lv_scr_act()); - lv_obj_t * table = lv_table_create(lv_scr_act()); -// lv_obj_clean_style_list(table, LV_PART_MAIN); - lv_table_set_col_cnt(table, 2); + uint16_t row = 0; + lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); + lv_table_set_cell_value(table, row, 0, "Slow but common cases"); + // lv_table_set_cell_type(table, row, 0, 4); - lv_table_set_col_width(table, 0, (w * 3) / 4 - 3); - lv_table_set_col_width(table, 1, w / 4 - 3); - lv_obj_set_width(table, lv_pct(100)); + LV_LOG("\r\n" + "LVGL v%d.%d.%d " LVGL_VERSION_INFO + " Benchmark (in csv format)\r\n", + LVGL_VERSION_MAJOR, LVGL_VERSION_MINOR, LVGL_VERSION_PATCH); + LV_LOG("Weighted FPS: %"LV_PRIu32"\r\n", fps_weighted); + LV_LOG("Opa. speed: %"LV_PRIu32"%%\r\n", opa_speed_pct); -// static lv_style_t style_cell_slow; -// static lv_style_t style_cell_very_slow; -// static lv_style_t style_cell_title; -// -// lv_style_init(&style_cell_title); -// lv_style_set_bg_color(&style_cell_title, LV_STATE_DEFAULT, lv_palette_main(LV_PALETTE_GREY)); -// lv_style_set_bg_opa(&style_cell_title, LV_STATE_DEFAULT, LV_OPA_50); -// -// lv_style_init(&style_cell_slow); -// lv_style_set_text_color(&style_cell_slow, LV_STATE_DEFAULT, LV_COLOR_ORANGE); -// -// lv_style_init(&style_cell_very_slow); -// lv_style_set_text_color(&style_cell_very_slow, LV_STATE_DEFAULT, lv_palette_main(LV_PALETTE_RED)); + row++; + char buf[256]; + for(i = 0; scenes[i].create_cb; i++) { -// lv_obj_add_style(table, LV_TABLE_PART_CELL2, &style_cell_slow); -// lv_obj_add_style(table, LV_TABLE_PART_CELL3, &style_cell_very_slow); -// lv_obj_add_style(table, LV_TABLE_PART_CELL4, &style_cell_title); + if(scenes[i].fps_normal < 20 && scenes[i].weight >= 10) { + lv_table_set_cell_value(table, row, 0, scenes[i].name); + + lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_normal); + lv_table_set_cell_value(table, row, 1, buf); + + // lv_table_set_cell_type(table, row, 0, 2); + // lv_table_set_cell_type(table, row, 1, 2); + + //LV_LOG("%s,%s\r\n", scenes[i].name, buf); + row++; + } + + if(scenes[i].fps_opa < 20 && LV_MAX(scenes[i].weight / 2, 1) >= 10) { + lv_snprintf(buf, sizeof(buf), "%s + opa", scenes[i].name); + lv_table_set_cell_value(table, row, 0, buf); - uint16_t row = 0; + //LV_LOG("%s,", buf); + + lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_opa); + lv_table_set_cell_value(table, row, 1, buf); + + // lv_table_set_cell_type(table, row, 0, 2); + // lv_table_set_cell_type(table, row, 1, 2); + //LV_LOG("%s\r\n", buf); + + row++; + } + } + + /*No 'slow but common cases'*/ + if(row == 1) { lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); - lv_table_set_cell_value(table, row, 0, "Slow but common cases"); -// lv_table_set_cell_type(table, row, 0, 4); + lv_table_set_cell_value(table, row, 0, "All good"); row++; - char buf[256]; - for(i = 0; i < sizeof(scenes) / sizeof(scene_dsc_t) - 1; i++) { + } - if(scenes[i].fps_normal < 20 && scenes[i].weight >= 10) { - lv_table_set_cell_value(table, row, 0, scenes[i].name); + lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); + lv_table_set_cell_value(table, row, 0, "All cases"); + // lv_table_set_cell_type(table, row, 0, 4); + row++; - lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_normal); - lv_table_set_cell_value(table, row, 1, buf); + for(i = 0; scenes[i].create_cb; i++) { + lv_table_set_cell_value(table, row, 0, scenes[i].name); -// lv_table_set_cell_type(table, row, 0, 2); -// lv_table_set_cell_type(table, row, 1, 2); + lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_normal); + lv_table_set_cell_value(table, row, 1, buf); - row++; - } + if(scenes[i].fps_normal < 10) { + // lv_table_set_cell_type(table, row, 0, 3); + // lv_table_set_cell_type(table, row, 1, 3); + } + else if(scenes[i].fps_normal < 20) { + // lv_table_set_cell_type(table, row, 0, 2); + // lv_table_set_cell_type(table, row, 1, 2); + } - if(scenes[i].fps_opa < 20 && LV_MAX(scenes[i].weight / 2, 1) >= 10) { - lv_snprintf(buf, sizeof(buf), "%s + opa", scenes[i].name); - lv_table_set_cell_value(table, row, 0, buf); + LV_LOG("%s,%s\r\n", scenes[i].name, buf); - lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_opa); - lv_table_set_cell_value(table, row, 1, buf); + row++; -// lv_table_set_cell_type(table, row, 0, 2); -// lv_table_set_cell_type(table, row, 1, 2); + lv_snprintf(buf, sizeof(buf), "%s + opa", scenes[i].name); + lv_table_set_cell_value(table, row, 0, buf); - row++; - } - } + LV_LOG("%s,", buf); - /*No 'slow but common cases'*/ - if(row == 1) { - lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); - lv_table_set_cell_value(table, row, 0, "All good"); - row++; + lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_opa); + lv_table_set_cell_value(table, row, 1, buf); + + + if(scenes[i].fps_opa < 10) { + // lv_table_set_cell_type(table, row, 0, 3); + // lv_table_set_cell_type(table, row, 1, 3); + } + else if(scenes[i].fps_opa < 20) { + // lv_table_set_cell_type(table, row, 0, 2); + // lv_table_set_cell_type(table, row, 1, 2); } - lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT); - lv_table_set_cell_value(table, row, 0, "All cases"); -// lv_table_set_cell_type(table, row, 0, 4); + LV_LOG("%s\r\n", buf); + row++; + } - for(i = 0; i < sizeof(scenes) / sizeof(scene_dsc_t) - 1; i++) { - lv_table_set_cell_value(table, row, 0, scenes[i].name); + // lv_page_set_scrl_layout(page, LV_LAYOUT_COLUMN_LEFT); +} - lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_normal); - lv_table_set_cell_value(table, row, 1, buf); +static void report_cb(lv_timer_t * timer) +{ + if(NULL != benchmark_finished_cb) { + (*benchmark_finished_cb)(); + } - if(scenes[i].fps_normal < 10) { -// lv_table_set_cell_type(table, row, 0, 3); -// lv_table_set_cell_type(table, row, 1, 3); - } - else if(scenes[i].fps_normal < 20) { -// lv_table_set_cell_type(table, row, 0, 2); -// lv_table_set_cell_type(table, row, 1, 2); - } + if(opa_mode) { + if(scene_act >= 0) { + if(scenes[scene_act].time_sum_opa == 0) scenes[scene_act].time_sum_opa = 1; + scenes[scene_act].fps_opa = (1000 * scenes[scene_act].refr_cnt_opa) / scenes[scene_act].time_sum_opa; + } - row++; + lv_label_set_text_fmt(subtitle, "Result : %"LV_PRId32" FPS", + scenes[scene_act].fps_opa); + LV_LOG("Result of \"%s + opa\": %"LV_PRId32" FPS", scenes[scene_act].name, + scenes[scene_act].fps_opa); + } + else { + if(scenes[scene_act].time_sum_normal == 0) scenes[scene_act].time_sum_normal = 1; + scenes[scene_act].fps_normal = (1000 * scenes[scene_act].refr_cnt_normal) / scenes[scene_act].time_sum_normal; - lv_snprintf(buf, sizeof(buf), "%s + opa", scenes[i].name); - lv_table_set_cell_value(table, row, 0, buf); + lv_label_set_text_fmt(subtitle, "Result : %"LV_PRId32" FPS", + scenes[scene_act].fps_normal); + LV_LOG("Result of \"%s\": %"LV_PRId32" FPS", scenes[scene_act].name, + scenes[scene_act].fps_normal); + } +} - lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_opa); - lv_table_set_cell_value(table, row, 1, buf); +static void scene_next_task_cb(lv_timer_t * timer) +{ + LV_UNUSED(timer); + lv_obj_clean(scene_bg); + if(opa_mode) { + if(scene_act >= 0) { + if(scenes[scene_act].time_sum_opa == 0) scenes[scene_act].time_sum_opa = 1; + scenes[scene_act].fps_opa = (1000 * scenes[scene_act].refr_cnt_opa) / scenes[scene_act].time_sum_opa; + if(scenes[scene_act].create_cb) scene_act++; /*If still there are scenes go to the next*/ + } + else { + scene_act++; + } + opa_mode = false; + } + else { + if(scenes[scene_act].time_sum_normal == 0) scenes[scene_act].time_sum_normal = 1; + scenes[scene_act].fps_normal = (1000 * scenes[scene_act].refr_cnt_normal) / scenes[scene_act].time_sum_normal; + opa_mode = true; + } - if(scenes[i].fps_opa < 10) { -// lv_table_set_cell_type(table, row, 0, 3); -// lv_table_set_cell_type(table, row, 1, 3); + if(scenes[scene_act].create_cb) { + lv_label_set_text_fmt(title, "%"LV_PRId32"/%d: %s%s", scene_act * 2 + (opa_mode ? 1 : 0), + (int)(dimof(scenes) * 2) - 2, scenes[scene_act].name, opa_mode ? " + opa" : ""); + if(opa_mode) { + lv_label_set_text_fmt(subtitle, "Result of \"%s\": %"LV_PRId32" FPS", scenes[scene_act].name, + scenes[scene_act].fps_normal); + } + else { + if(scene_act > 0) { + lv_label_set_text_fmt(subtitle, "Result of \"%s + opa\": %"LV_PRId32" FPS", scenes[scene_act - 1].name, + scenes[scene_act - 1].fps_opa); } - else if(scenes[i].fps_opa < 20) { -// lv_table_set_cell_type(table, row, 0, 2); -// lv_table_set_cell_type(table, row, 1, 2); + else { + lv_label_set_text(subtitle, ""); } - - row++; } -// lv_page_set_scrl_layout(page, LV_LAYOUT_COLUMN_LEFT); + rnd_reset(); + scenes[scene_act].create_cb(); + lv_timer_t * t = lv_timer_create(scene_next_task_cb, SCENE_TIME, NULL); + lv_timer_set_repeat_count(t, 1); + + } + /*Ready*/ + else { + + /*Restore original frame rate*/ + if(run_max_speed) { + lv_timer_t * anim_timer = lv_anim_get_timer(); + lv_timer_set_period(anim_timer, anim_ori_timer_period); + + lv_disp_t * disp = lv_disp_get_default(); + lv_timer_t * refr_timer = _lv_disp_get_refr_timer(disp); + if(refr_timer) { + lv_timer_set_period(refr_timer, disp_ori_timer_period); + } + } + generate_report(); /* generate report */ } } @@ -928,7 +1101,7 @@ static void line_create(lv_style_t * style) uint32_t j; for(j = 1; j < LINE_POINT_NUM; j++) { points[i][j].x = points[i][j - 1].x + rnd_next(LINE_POINT_DIFF_MIN, LINE_POINT_DIFF_MAX); - points[i][j].y = rnd_next(LINE_POINT_DIFF_MIN, LINE_POINT_DIFF_MAX) ; + points[i][j].y = rnd_next(LINE_POINT_DIFF_MIN, LINE_POINT_DIFF_MAX); } @@ -945,6 +1118,11 @@ static void line_create(lv_style_t * style) } +static void arc_anim_end_angle_cb(void * var, int32_t v) +{ + lv_arc_set_end_angle(var, v); +} + static void arc_create(lv_style_t * style) { uint32_t i; @@ -962,7 +1140,7 @@ static void arc_create(lv_style_t * style) lv_anim_t a; lv_anim_init(&a); lv_anim_set_var(&a, obj); - lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t) lv_arc_set_end_angle); + lv_anim_set_exec_cb(&a, arc_anim_end_angle_cb); lv_anim_set_values(&a, 0, 359); lv_anim_set_time(&a, t); lv_anim_set_playback_time(&a, t); @@ -974,6 +1152,11 @@ static void arc_create(lv_style_t * style) } +static void fall_anim_y_cb(void * var, int32_t v) +{ + lv_obj_set_y(var, v); +} + static void fall_anim(lv_obj_t * obj) { lv_obj_set_x(obj, rnd_next(0, lv_obj_get_width(scene_bg) - lv_obj_get_width(obj))); @@ -983,7 +1166,7 @@ static void fall_anim(lv_obj_t * obj) lv_anim_t a; lv_anim_init(&a); lv_anim_set_var(&a, obj); - lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t) lv_obj_set_y); + lv_anim_set_exec_cb(&a, fall_anim_y_cb); lv_anim_set_values(&a, 0, lv_obj_get_height(scene_bg) - lv_obj_get_height(obj)); lv_anim_set_time(&a, t); lv_anim_set_playback_time(&a, t); diff --git a/demos/benchmark/lv_demo_benchmark.h b/demos/benchmark/lv_demo_benchmark.h index ec0aecd26..6a0a4f649 100644 --- a/demos/benchmark/lv_demo_benchmark.h +++ b/demos/benchmark/lv_demo_benchmark.h @@ -22,12 +22,24 @@ extern "C" { /********************** * TYPEDEFS **********************/ +typedef void finished_cb_t(void); + /********************** * GLOBAL PROTOTYPES **********************/ void lv_demo_benchmark(void); +void lv_demo_benchmark_run_scene(int_fast16_t scene_no); + +void lv_demo_benchmark_set_finished_cb(finished_cb_t * finished_cb); + +/** + * Make the benchmark work at the highest frame rate + * @param en true: highest frame rate; false: default frame rate + */ +void lv_demo_benchmark_set_max_speed(bool en); + /********************** * MACROS **********************/ diff --git a/demos/keypad_encoder/README.md b/demos/keypad_encoder/README.md index 3d4ce482c..9fa792a77 100644 --- a/demos/keypad_encoder/README.md +++ b/demos/keypad_encoder/README.md @@ -2,9 +2,9 @@ ## Overview -LVGL allows you to control the widgets with keypad and/or encoder without touchpad. -This demo shows how to handle buttons, drop-down lists, rollers, sliders, switches and text inputs without touchpad. -Learn more about the touchpad-less usage of LVGL [here](https://docs.lvgl.io/master/porting/indev.html#keypad-or-keyboard). +LVGL allows you to control the widgets with keypad and/or encoder without touchpad. +This demo shows how to handle buttons, drop-down lists, rollers, sliders, switches and text inputs without touchpad. +Learn more about the touchpad-less usage of LVGL [here](https://docs.lvgl.io/master/overview/indev.html#keypad-and-encoder). ![Keypad and encoder navigation in LVGL embedded GUI library](screenshot1.gif) diff --git a/demos/keypad_encoder/lv_demo_keypad_encoder.c b/demos/keypad_encoder/lv_demo_keypad_encoder.c index 9a1bbcd71..fdb9b94f8 100644 --- a/demos/keypad_encoder/lv_demo_keypad_encoder.c +++ b/demos/keypad_encoder/lv_demo_keypad_encoder.c @@ -31,7 +31,7 @@ static void ta_event_cb(lv_event_t * e); /********************** * STATIC VARIABLES **********************/ -static lv_group_t* g; +static lv_group_t * g; static lv_obj_t * tv; static lv_obj_t * t1; static lv_obj_t * t2; @@ -49,18 +49,18 @@ void lv_demo_keypad_encoder(void) g = lv_group_create(); lv_group_set_default(g); - lv_indev_t* cur_drv = NULL; - for (;;) { + lv_indev_t * cur_drv = NULL; + for(;;) { cur_drv = lv_indev_get_next(cur_drv); - if (!cur_drv) { + if(!cur_drv) { break; } - if (cur_drv->driver->type == LV_INDEV_TYPE_KEYPAD) { + if(cur_drv->driver->type == LV_INDEV_TYPE_KEYPAD) { lv_indev_set_group(cur_drv, g); } - if (cur_drv->driver->type == LV_INDEV_TYPE_ENCODER) { + if(cur_drv->driver->type == LV_INDEV_TYPE_ENCODER) { lv_indev_set_group(cur_drv, g); } } @@ -152,7 +152,7 @@ static void text_input_create(lv_obj_t * parent) lv_textarea_set_one_line(ta2, true); lv_textarea_set_placeholder_text(ta2, "Type something"); - lv_obj_t *kb = lv_keyboard_create(lv_scr_act()); + lv_obj_t * kb = lv_keyboard_create(lv_scr_act()); lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN); lv_obj_add_event_cb(ta1, ta_event_cb, LV_EVENT_ALL, kb); @@ -166,9 +166,6 @@ static void msgbox_create(void) lv_obj_add_event_cb(mbox, msgbox_event_cb, LV_EVENT_ALL, NULL); lv_group_focus_obj(lv_msgbox_get_btns(mbox)); lv_obj_add_state(lv_msgbox_get_btns(mbox), LV_STATE_FOCUS_KEY); -#if LV_EX_MOUSEWHEEL - lv_group_set_editing(g, true); -#endif lv_group_focus_freeze(g, true); lv_obj_align(mbox, LV_ALIGN_CENTER, 0, 0); diff --git a/demos/lv_demos.h b/demos/lv_demos.h index 10aa7c6f5..46053e18b 100644 --- a/demos/lv_demos.h +++ b/demos/lv_demos.h @@ -16,23 +16,23 @@ extern "C" { #include "../lvgl.h" #if LV_USE_DEMO_WIDGETS - #include "widgets/lv_demo_widgets.h" +#include "widgets/lv_demo_widgets.h" #endif #if LV_USE_DEMO_BENCHMARK - #include "benchmark/lv_demo_benchmark.h" +#include "benchmark/lv_demo_benchmark.h" #endif #if LV_USE_DEMO_STRESS - #include "stress/lv_demo_stress.h" +#include "stress/lv_demo_stress.h" #endif #if LV_USE_DEMO_KEYPAD_AND_ENCODER - #include "keypad_encoder/lv_demo_keypad_encoder.h" +#include "keypad_encoder/lv_demo_keypad_encoder.h" #endif #if LV_USE_DEMO_MUSIC - #include "music/lv_demo_music.h" +#include "music/lv_demo_music.h" #endif /********************* diff --git a/demos/music/README.md b/demos/music/README.md index b9f8b2703..90e9fd292 100644 --- a/demos/music/README.md +++ b/demos/music/README.md @@ -1,10 +1,10 @@ # Music player demo ## Overview -The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL. It works the best with display with 480x272 or 272x480 resolution. +The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL. It works the best with display with 480x272 or 272x480 resolution. -![Music player demo with LVGL embedded GUI library](https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_music/screenshot1.gif?raw=true) +![Music player demo with LVGL embedded GUI library](screenshot1.gif) ## Run the demo - In `lv_conf.h` or equivalent places set `LV_USE_DEMO_MUSIC 1` @@ -15,7 +15,7 @@ The music player demo shows what kind of modern, smartphone-like user interfaces - `assets/spectrum.py` creates an array of spectrum values from a music. 4 band are created with 33 samples/sec: bass, bass-mid, mid, mid-treble. - The spectrum meter UI does the followings: - Zoom the album cover proportionality to the current bass value - - Display the 4 bands on the left side of a circle by default at 0°, 45°, 90°, 135° + - Display the 4 bands on the left side of a circle by default at 0°, 45°, 90°, 135° - Add extra bars next to the "main bars" with a cosine shape. Add more bars for the lower bands. - If there is a large enough bass, add a random offset to the position of the bars. E.g. start from 63° instead of 0°. (bars greater than 180° start again from 0°) - If there is no bass, add 1 to the offset of the bars (it creates a "walking" effect) diff --git a/demos/music/assets/spectrum.py b/demos/music/assets/spectrum.py index e6e75f199..aca370264 100755 --- a/demos/music/assets/spectrum.py +++ b/demos/music/assets/spectrum.py @@ -18,7 +18,7 @@ fout.write("const uint16_t spectrum[][4] = {\n") for t in range(0,len(S[0]-1)): fout.write("{ ") - f_prev = 0 + f_prev = 0 for f in [8, 45, 300, 600]: v = 0 for i in range(f_prev, f): v += S[i][t] diff --git a/demos/music/lv_demo_music.c b/demos/music/lv_demo_music.c index 2bba09d49..cb72ed162 100644 --- a/demos/music/lv_demo_music.c +++ b/demos/music/lv_demo_music.c @@ -25,7 +25,7 @@ * STATIC PROTOTYPES **********************/ #if LV_DEMO_MUSIC_AUTO_PLAY -static void auto_step_cb(lv_timer_t * timer); + static void auto_step_cb(lv_timer_t * timer); #endif /********************** @@ -87,20 +87,20 @@ static const char * genre_list[] = { }; static const uint32_t time_list[] = { - 1*60 + 14, - 2*60 + 26, - 1*60 + 54, - 2*60 + 24, - 2*60 + 37, - 3*60 + 33, - 1*60 + 56, - 3*60 + 31, - 2*60 + 20, - 2*60 + 19, - 2*60 + 20, - 2*60 + 19, - 2*60 + 20, - 2*60 + 19, + 1 * 60 + 14, + 2 * 60 + 26, + 1 * 60 + 54, + 2 * 60 + 24, + 2 * 60 + 37, + 3 * 60 + 33, + 1 * 60 + 56, + 3 * 60 + 31, + 2 * 60 + 20, + 2 * 60 + 19, + 2 * 60 + 20, + 2 * 60 + 19, + 2 * 60 + 20, + 2 * 60 + 19, }; /********************** @@ -166,84 +166,84 @@ static void auto_step_cb(lv_timer_t * t) #endif switch(state) { - case 5: - _lv_demo_music_album_next(true); - break; - - case 6: - _lv_demo_music_album_next(true); - break; - case 7: - _lv_demo_music_album_next(true); - break; - case 8: - _lv_demo_music_play(0); - break; + case 5: + _lv_demo_music_album_next(true); + break; + + case 6: + _lv_demo_music_album_next(true); + break; + case 7: + _lv_demo_music_album_next(true); + break; + case 8: + _lv_demo_music_play(0); + break; #if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND - case 11: - lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON); - break; - case 13: - lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON); - break; + case 11: + lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON); + break; + case 13: + lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON); + break; #else - case 12: - lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON); - break; + case 12: + lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON); + break; #endif - case 15: - lv_obj_scroll_by(list, 0, -300, LV_ANIM_ON); - break; - case 16: - lv_obj_scroll_by(list, 0, 300, LV_ANIM_ON); - break; - case 18: - _lv_demo_music_play(1); - break; - case 19: - lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON); - break; + case 15: + lv_obj_scroll_by(list, 0, -300, LV_ANIM_ON); + break; + case 16: + lv_obj_scroll_by(list, 0, 300, LV_ANIM_ON); + break; + case 18: + _lv_demo_music_play(1); + break; + case 19: + lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON); + break; #if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND - case 20: - lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON); - break; + case 20: + lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON); + break; #endif - case 30: - _lv_demo_music_play(2); - break; - case 40: { - lv_obj_t * bg = lv_layer_top(); - lv_obj_set_style_bg_color(bg, lv_color_hex(0x6f8af6), 0); - lv_obj_set_style_text_color(bg, lv_color_white(), 0); - lv_obj_set_style_bg_opa(bg, LV_OPA_COVER, 0); - lv_obj_fade_in(bg, 400, 0); - lv_obj_t * dsc = lv_label_create(bg); - lv_obj_set_style_text_font(dsc, font_small, 0); - lv_label_set_text(dsc, "The average FPS is"); - lv_obj_align(dsc, LV_ALIGN_TOP_MID, 0, 90); - - lv_obj_t * num = lv_label_create(bg); - lv_obj_set_style_text_font(num, font_large, 0); + case 30: + _lv_demo_music_play(2); + break; + case 40: { + lv_obj_t * bg = lv_layer_top(); + lv_obj_set_style_bg_color(bg, lv_color_hex(0x6f8af6), 0); + lv_obj_set_style_text_color(bg, lv_color_white(), 0); + lv_obj_set_style_bg_opa(bg, LV_OPA_COVER, 0); + lv_obj_fade_in(bg, 400, 0); + lv_obj_t * dsc = lv_label_create(bg); + lv_obj_set_style_text_font(dsc, font_small, 0); + lv_label_set_text(dsc, "The average FPS is"); + lv_obj_align(dsc, LV_ALIGN_TOP_MID, 0, 90); + + lv_obj_t * num = lv_label_create(bg); + lv_obj_set_style_text_font(num, font_large, 0); #if LV_USE_PERF_MONITOR - lv_label_set_text_fmt(num, "%d", lv_refr_get_fps_avg()); + lv_label_set_text_fmt(num, "%d", lv_refr_get_fps_avg()); #endif - lv_obj_align(num, LV_ALIGN_TOP_MID, 0, 120); + lv_obj_align(num, LV_ALIGN_TOP_MID, 0, 120); - lv_obj_t * attr = lv_label_create(bg); - lv_obj_set_style_text_align(attr, LV_TEXT_ALIGN_CENTER, 0); - lv_obj_set_style_text_font(attr, font_small, 0); + lv_obj_t * attr = lv_label_create(bg); + lv_obj_set_style_text_align(attr, LV_TEXT_ALIGN_CENTER, 0); + lv_obj_set_style_text_font(attr, font_small, 0); #if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND - lv_label_set_text(attr, "Copyright 2020 LVGL Kft.\nwww.lvgl.io | lvgl@lvgl.io"); + lv_label_set_text(attr, "Copyright 2020 LVGL Kft.\nwww.lvgl.io | lvgl@lvgl.io"); #else - lv_label_set_text(attr, "Copyright 2020 LVGL Kft. | www.lvgl.io | lvgl@lvgl.io"); + lv_label_set_text(attr, "Copyright 2020 LVGL Kft. | www.lvgl.io | lvgl@lvgl.io"); #endif - lv_obj_align(attr, LV_ALIGN_BOTTOM_MID, 0, -10); - break; - } - case 41: - lv_scr_load(lv_obj_create(NULL)); - _lv_demo_music_pause(); - break; + lv_obj_align(attr, LV_ALIGN_BOTTOM_MID, 0, -10); + break; + } + case 41: + lv_scr_load(lv_obj_create(NULL)); + _lv_demo_music_pause(); + break; } state++; } diff --git a/demos/music/lv_demo_music_list.c b/demos/music/lv_demo_music_list.c index e9e769195..88e79ecab 100644 --- a/demos/music/lv_demo_music_list.c +++ b/demos/music/lv_demo_music_list.c @@ -102,7 +102,7 @@ lv_obj_t * _lv_demo_music_list_create(lv_obj_t * parent) lv_style_init(&style_artist); lv_style_set_text_font(&style_artist, font_small); - lv_style_set_text_color(&style_artist,lv_color_hex(0xb1b0be)); + lv_style_set_text_color(&style_artist, lv_color_hex(0xb1b0be)); lv_style_init(&style_time); lv_style_set_text_font(&style_time, font_medium); diff --git a/demos/music/lv_demo_music_main.c b/demos/music/lv_demo_music_main.c index 286788659..f7bc4b8fe 100644 --- a/demos/music/lv_demo_music_main.c +++ b/demos/music/lv_demo_music_main.c @@ -23,11 +23,11 @@ #define BAR_COLOR2 lv_color_hex(0x6f8af6) #define BAR_COLOR3 lv_color_hex(0xffffff) #if LV_DEMO_MUSIC_LARGE -# define BAR_COLOR1_STOP 160 -# define BAR_COLOR2_STOP 200 + #define BAR_COLOR1_STOP 160 + #define BAR_COLOR2_STOP 200 #else -# define BAR_COLOR1_STOP 80 -# define BAR_COLOR2_STOP 100 + #define BAR_COLOR1_STOP 80 + #define BAR_COLOR2_STOP 100 #endif #define BAR_COLOR3_STOP (2 * LV_HOR_RES / 3) #define BAR_CNT 20 @@ -62,6 +62,7 @@ static void timer_cb(lv_timer_t * t); static void track_load(uint32_t id); static void stop_start_anim(lv_timer_t * t); static void spectrum_end_cb(lv_anim_t * a); +static void album_fade_anim_cb(void * var, int32_t v); static int32_t get_cos(int32_t deg, int32_t a); static int32_t get_sin(int32_t deg, int32_t a); @@ -82,7 +83,7 @@ static uint32_t bar_ofs = 0; static uint32_t spectrum_lane_ofs_start = 0; static uint32_t bar_rot = 0; static uint32_t time_act; -static lv_timer_t * sec_counter_timer; +static lv_timer_t * sec_counter_timer; static const lv_font_t * font_small; static const lv_font_t * font_large; static uint32_t track_id; @@ -106,16 +107,18 @@ static const uint16_t rnd_array[30] = {994, 285, 553, 11, 792, 707, 966, 641, 85 * Callback adapter function to convert parameter types to avoid compile-time * warning. */ -static void _img_set_zoom_anim_cb(void * obj, int32_t zoom) { - lv_img_set_zoom((lv_obj_t*)obj, (uint16_t)zoom); +static void _img_set_zoom_anim_cb(void * obj, int32_t zoom) +{ + lv_img_set_zoom((lv_obj_t *)obj, (uint16_t)zoom); } /* * Callback adapter function to convert parameter types to avoid compile-time * warning. */ -static void _obj_set_x_anim_cb(void * obj, int32_t x) { - lv_obj_set_x((lv_obj_t*)obj, (lv_coord_t)x); +static void _obj_set_x_anim_cb(void * obj, int32_t x) +{ + lv_obj_set_x((lv_obj_t *)obj, (lv_coord_t)x); } lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent) @@ -145,16 +148,17 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent) #if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND static const lv_coord_t grid_cols[] = {LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid_rows[] = {LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/ - 0, /*Spectrum obj, set later*/ - LV_GRID_CONTENT, /*Title box*/ - LV_GRID_FR(3), /*Spacer*/ - LV_GRID_CONTENT, /*Icon box*/ - LV_GRID_FR(3), /*Spacer*/ - LV_GRID_CONTENT, /*Control box*/ - LV_GRID_FR(3), /*Spacer*/ - LV_GRID_CONTENT, /*Handle box*/ - LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/ - LV_GRID_TEMPLATE_LAST}; + 0, /*Spectrum obj, set later*/ + LV_GRID_CONTENT, /*Title box*/ + LV_GRID_FR(3), /*Spacer*/ + LV_GRID_CONTENT, /*Icon box*/ + LV_GRID_FR(3), /*Spacer*/ + LV_GRID_CONTENT, /*Control box*/ + LV_GRID_FR(3), /*Spacer*/ + LV_GRID_CONTENT, /*Handle box*/ + LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/ + LV_GRID_TEMPLATE_LAST + }; grid_rows[1] = LV_VER_RES; @@ -184,7 +188,8 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent) LV_GRID_CONTENT, /*Handle box*/ LV_GRID_FR(1), /*Spacer*/ LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/ - LV_GRID_TEMPLATE_LAST}; + LV_GRID_TEMPLATE_LAST + }; lv_obj_set_grid_dsc_array(cont, grid_cols, grid_rows); lv_obj_set_style_grid_row_align(cont, LV_GRID_ALIGN_SPACE_BETWEEN, 0); @@ -207,7 +212,8 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent) LV_GRID_CONTENT, /*Handle box*/ LV_GRID_FR(1), /*Spacer*/ LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/ - LV_GRID_TEMPLATE_LAST}; + LV_GRID_TEMPLATE_LAST + }; lv_obj_set_grid_dsc_array(cont, grid_cols, grid_rows); lv_obj_set_style_grid_row_align(cont, LV_GRID_ALIGN_SPACE_BETWEEN, 0); @@ -292,17 +298,20 @@ void _lv_demo_music_album_next(bool next) if(next) { id++; if(id >= ACTIVE_TRACK_CNT) id = 0; - } else { + } + else { if(id == 0) { id = ACTIVE_TRACK_CNT - 1; - } else { + } + else { id--; } } if(playing) { _lv_demo_music_play(id); - } else { + } + else { track_load(id); } } @@ -381,21 +390,21 @@ static lv_obj_t * create_cont(lv_obj_t * parent) lv_obj_t * placeholder1 = lv_obj_create(main_cont); lv_obj_remove_style_all(placeholder1); lv_obj_clear_flag(placeholder1, LV_OBJ_FLAG_CLICKABLE); -// lv_obj_set_style_bg_color(placeholder1, lv_color_hex(0xff0000), 0); -// lv_obj_set_style_bg_opa(placeholder1, LV_OPA_50, 0); + // lv_obj_set_style_bg_color(placeholder1, lv_color_hex(0xff0000), 0); + // lv_obj_set_style_bg_opa(placeholder1, LV_OPA_50, 0); lv_obj_t * placeholder2 = lv_obj_create(main_cont); lv_obj_remove_style_all(placeholder2); lv_obj_clear_flag(placeholder2, LV_OBJ_FLAG_CLICKABLE); -// lv_obj_set_style_bg_color(placeholder2, lv_color_hex(0x00ff00), 0); -// lv_obj_set_style_bg_opa(placeholder2, LV_OPA_50, 0); + // lv_obj_set_style_bg_color(placeholder2, lv_color_hex(0x00ff00), 0); + // lv_obj_set_style_bg_opa(placeholder2, LV_OPA_50, 0); #if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND lv_obj_t * placeholder3 = lv_obj_create(main_cont); lv_obj_remove_style_all(placeholder3); lv_obj_clear_flag(placeholder3, LV_OBJ_FLAG_CLICKABLE); -// lv_obj_set_style_bg_color(placeholder3, lv_color_hex(0x0000ff), 0); -// lv_obj_set_style_bg_opa(placeholder3, LV_OPA_20, 0); + // lv_obj_set_style_bg_color(placeholder3, lv_color_hex(0x0000ff), 0); + // lv_obj_set_style_bg_opa(placeholder3, LV_OPA_20, 0); lv_obj_set_size(placeholder1, lv_pct(100), LV_VER_RES); lv_obj_set_y(placeholder1, 0); @@ -423,13 +432,13 @@ static void create_wave_images(lv_obj_t * parent) LV_IMG_DECLARE(img_lv_demo_music_wave_top); LV_IMG_DECLARE(img_lv_demo_music_wave_bottom); lv_obj_t * wave_top = lv_img_create(parent); - lv_img_set_src(wave_top,&img_lv_demo_music_wave_top); + lv_img_set_src(wave_top, &img_lv_demo_music_wave_top); lv_obj_set_width(wave_top, LV_HOR_RES); lv_obj_align(wave_top, LV_ALIGN_TOP_MID, 0, 0); lv_obj_add_flag(wave_top, LV_OBJ_FLAG_IGNORE_LAYOUT); lv_obj_t * wave_bottom = lv_img_create(parent); - lv_img_set_src(wave_bottom,&img_lv_demo_music_wave_bottom); + lv_img_set_src(wave_bottom, &img_lv_demo_music_wave_bottom); lv_obj_set_width(wave_bottom, LV_HOR_RES); lv_obj_align(wave_bottom, LV_ALIGN_BOTTOM_MID, 0, 0); lv_obj_add_flag(wave_bottom, LV_OBJ_FLAG_IGNORE_LAYOUT); @@ -538,7 +547,7 @@ static lv_obj_t * create_ctrl_box(lv_obj_t * parent) #else lv_obj_set_style_pad_bottom(cont, 8, 0); #endif - static const lv_coord_t grid_col[] = {LV_GRID_FR(2), LV_GRID_FR(3),LV_GRID_FR(5), LV_GRID_FR(5), LV_GRID_FR(5), LV_GRID_FR(3), LV_GRID_FR(2), LV_GRID_TEMPLATE_LAST}; + static const lv_coord_t grid_col[] = {LV_GRID_FR(2), LV_GRID_FR(3), LV_GRID_FR(5), LV_GRID_FR(5), LV_GRID_FR(5), LV_GRID_FR(3), LV_GRID_FR(2), LV_GRID_TEMPLATE_LAST}; static const lv_coord_t grid_row[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; lv_obj_set_grid_dsc_array(cont, grid_col, grid_row); @@ -659,9 +668,14 @@ static void track_load(uint32_t id) lv_label_set_text(artist_label, _lv_demo_music_get_artist(track_id)); lv_label_set_text(genre_label, _lv_demo_music_get_genre(track_id)); - lv_obj_fade_out(album_img_obj, 500, 0); - lv_anim_t a; + lv_anim_init(&a); + lv_anim_set_var(&a, album_img_obj); + lv_anim_set_values(&a, lv_obj_get_style_img_opa(album_img_obj, 0), LV_OPA_TRANSP); + lv_anim_set_exec_cb(&a, album_fade_anim_cb); + lv_anim_set_time(&a, 500); + lv_anim_start(&a); + lv_anim_init(&a); lv_anim_set_var(&a, album_img_obj); lv_anim_set_time(&a, 500); @@ -669,13 +683,15 @@ static void track_load(uint32_t id) #if LV_DEMO_MUSIC_LANDSCAPE if(next) { lv_anim_set_values(&a, 0, - LV_HOR_RES / 7); - } else { + } + else { lv_anim_set_values(&a, 0, LV_HOR_RES / 7); } #else if(next) { lv_anim_set_values(&a, 0, - LV_HOR_RES / 2); - } else { + } + else { lv_anim_set_values(&a, 0, LV_HOR_RES / 2); } #endif @@ -692,7 +708,6 @@ static void track_load(uint32_t id) lv_anim_start(&a); album_img_obj = album_img_create(spectrum_obj); - lv_obj_fade_in(album_img_obj, 500, 100); lv_anim_set_path_cb(&a, lv_anim_path_overshoot); lv_anim_set_var(&a, album_img_obj); @@ -702,6 +717,14 @@ static void track_load(uint32_t id) lv_anim_set_exec_cb(&a, _img_set_zoom_anim_cb); lv_anim_set_ready_cb(&a, NULL); lv_anim_start(&a); + + lv_anim_init(&a); + lv_anim_set_var(&a, album_img_obj); + lv_anim_set_values(&a, 0, LV_OPA_COVER); + lv_anim_set_exec_cb(&a, album_fade_anim_cb); + lv_anim_set_time(&a, 500); + lv_anim_set_delay(&a, 100); + lv_anim_start(&a); } int32_t get_cos(int32_t deg, int32_t a) @@ -768,18 +791,18 @@ static void spectrum_draw_event_cb(lv_event_t * e) uint32_t f; uint32_t band_w = 0; /*Real number of bars in this band.*/ switch(s) { - case 0: - band_w = 20; - break; - case 1: - band_w = 8; - break; - case 2: - band_w = 4; - break; - case 3: - band_w = 2; - break; + case 0: + band_w = 20; + break; + case 1: + band_w = 8; + break; + case 2: + band_w = 4; + break; + case 3: + band_w = 2; + break; } /* Add "side bars" with cosine characteristic.*/ @@ -799,7 +822,7 @@ static void spectrum_draw_event_cb(lv_event_t * e) for(i = 0; i < BAR_CNT; i++) { uint32_t deg_space = 1; uint32_t deg = i * DEG_STEP + 90; - uint32_t j = (i + bar_rot + rnd_array[bar_ofs %10]) % BAR_CNT; + uint32_t j = (i + bar_rot + rnd_array[bar_ofs % 10]) % BAR_CNT; uint32_t k = (i + bar_rot + rnd_array[(bar_ofs + 1) % 10]) % BAR_CNT; uint32_t v = (r[k] * animv + r[j] * (amax - animv)) / amax; @@ -811,8 +834,10 @@ static void spectrum_draw_event_cb(lv_event_t * e) if(v < BAR_COLOR1_STOP) draw_dsc.bg_color = BAR_COLOR1; else if(v > BAR_COLOR3_STOP) draw_dsc.bg_color = BAR_COLOR3; - else if(v > BAR_COLOR2_STOP) draw_dsc.bg_color = lv_color_mix(BAR_COLOR3, BAR_COLOR2, ((v - BAR_COLOR2_STOP) * 255) / (BAR_COLOR3_STOP-BAR_COLOR2_STOP)); - else draw_dsc.bg_color = lv_color_mix(BAR_COLOR2, BAR_COLOR1, ((v - BAR_COLOR1_STOP) * 255) / (BAR_COLOR2_STOP - BAR_COLOR1_STOP)); + else if(v > BAR_COLOR2_STOP) draw_dsc.bg_color = lv_color_mix(BAR_COLOR3, BAR_COLOR2, + ((v - BAR_COLOR2_STOP) * 255) / (BAR_COLOR3_STOP - BAR_COLOR2_STOP)); + else draw_dsc.bg_color = lv_color_mix(BAR_COLOR2, BAR_COLOR1, + ((v - BAR_COLOR1_STOP) * 255) / (BAR_COLOR2_STOP - BAR_COLOR1_STOP)); uint32_t di = deg + deg_space; @@ -859,7 +884,7 @@ static void spectrum_anim_cb(void * a, int32_t v) static int32_t last_bass = -1000; static int32_t dir = 1; if(spectrum[spectrum_i][0] > 12) { - if(spectrum_i-last_bass > 5) { + if(spectrum_i - last_bass > 5) { bass_cnt++; last_bass = spectrum_i; if(bass_cnt >= 2) { @@ -869,7 +894,7 @@ static void spectrum_anim_cb(void * a, int32_t v) } } } - if(spectrum[spectrum_i][0] < 4) bar_rot+= dir; + if(spectrum[spectrum_i][0] < 4) bar_rot += dir; lv_img_set_zoom(album_img_obj, LV_IMG_ZOOM_NONE + spectrum[spectrum_i][0]); } @@ -891,21 +916,21 @@ static lv_obj_t * album_img_create(lv_obj_t * parent) img = lv_img_create(parent); switch(track_id) { - case 2: - lv_img_set_src(img, &img_lv_demo_music_cover_3); - spectrum = spectrum_3; - spectrum_len = sizeof(spectrum_3) / sizeof(spectrum_3[0]); - break; - case 1: - lv_img_set_src(img, &img_lv_demo_music_cover_2); - spectrum = spectrum_2; - spectrum_len = sizeof(spectrum_2) / sizeof(spectrum_2[0]); - break; - case 0: - lv_img_set_src(img, &img_lv_demo_music_cover_1); - spectrum = spectrum_1; - spectrum_len = sizeof(spectrum_1) / sizeof(spectrum_1[0]); - break; + case 2: + lv_img_set_src(img, &img_lv_demo_music_cover_3); + spectrum = spectrum_3; + spectrum_len = sizeof(spectrum_3) / sizeof(spectrum_3[0]); + break; + case 1: + lv_img_set_src(img, &img_lv_demo_music_cover_2); + spectrum = spectrum_2; + spectrum_len = sizeof(spectrum_2) / sizeof(spectrum_2[0]); + break; + case 0: + lv_img_set_src(img, &img_lv_demo_music_cover_1); + spectrum = spectrum_1; + spectrum_len = sizeof(spectrum_1) / sizeof(spectrum_1[0]); + break; } lv_img_set_antialias(img, false); lv_obj_align(img, LV_ALIGN_CENTER, 0, 0); @@ -929,7 +954,8 @@ static void play_event_click_cb(lv_event_t * e) lv_obj_t * obj = lv_event_get_target(e); if(lv_obj_has_state(obj, LV_STATE_CHECKED)) { _lv_demo_music_resume(); - } else { + } + else { _lv_demo_music_pause(); } } @@ -970,5 +996,10 @@ static void stop_start_anim(lv_timer_t * t) start_anim = false; lv_obj_refresh_ext_draw_size(spectrum_obj); } + +static void album_fade_anim_cb(void * var, int32_t v) +{ + lv_obj_set_style_img_opa(var, v, 0); +} #endif /*LV_USE_DEMO_MUSIC*/ diff --git a/demos/stress/README.md b/demos/stress/README.md index 321d14a38..df6ad1027 100644 --- a/demos/stress/README.md +++ b/demos/stress/README.md @@ -2,10 +2,10 @@ ## Overview -A stress test for LVGL. -It contains a lot of object creation, deletion, animations, styles usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks. +A stress test for LVGL. +It contains a lot of object creation, deletion, animations, styles usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks. -![Printer demo with LVGL embedded GUI library](https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_stress/screenshot1.gif?raw=true) +![Stress demo with LVGL embedded GUI library](screenshot1.gif) ## Run the demo - In `lv_conf.h` or equivalent places set `LV_USE_DEMO_STRESS 1` diff --git a/demos/stress/assets/lv_font_montserrat_12_compr_az.c b/demos/stress/assets/lv_font_montserrat_12_compr_az.c deleted file mode 100644 index 0225db0ac..000000000 --- a/demos/stress/assets/lv_font_montserrat_12_compr_az.c +++ /dev/null @@ -1,318 +0,0 @@ -#include "../../../lvgl.h" - -#if LV_USE_DEMO_STRESS - -/******************************************************************************* - * Size: 12 px - * Bpp: 4 - * Opts: - ******************************************************************************/ - -#ifndef LV_FONT_MONTSERRAT_12_COMPR_AZ -#define LV_FONT_MONTSERRAT_12_COMPR_AZ 1 -#endif - -#if LV_FONT_MONTSERRAT_12_COMPR_AZ - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { - /* U+20 " " */ - - /* U+61 "a" */ - 0x8, 0xdf, 0xc3, 0x0, 0x14, 0xea, 0xf0, 0x2, - 0x90, 0xa0, 0x84, 0x23, 0x7b, 0xc0, 0xd1, 0xb3, - 0xb8, 0x1, 0x84, 0x1c, 0x0, 0x8f, 0xdb, 0xe0, - 0x0, - - /* U+62 "b" */ - 0xe4, 0x0, 0xff, 0xe4, 0x1e, 0x7e, 0x20, 0x2, - 0x27, 0x52, 0xc8, 0x25, 0x4a, 0x12, 0x80, 0x80, - 0x23, 0x20, 0x20, 0x8, 0xc8, 0x25, 0x4a, 0x12, - 0x82, 0x63, 0x52, 0xc8, - - /* U+63 "c" */ - 0x2, 0xbf, 0xe8, 0x0, 0x78, 0xed, 0x21, 0xa8, - 0x51, 0x26, 0x19, 0x30, 0x7, 0x13, 0x0, 0x72, - 0x85, 0x12, 0x69, 0x87, 0x8e, 0xd2, 0x98, - - /* U+64 "d" */ - 0x0, 0xe1, 0xf1, 0x0, 0xff, 0xe2, 0x95, 0xfe, - 0xb8, 0x5, 0x85, 0xbd, 0x60, 0x5, 0x39, 0x23, - 0x90, 0x1, 0x30, 0x4, 0xa0, 0x2, 0x60, 0x8, - 0x80, 0xa, 0x72, 0x25, 0xc0, 0x16, 0x17, 0x65, - 0x80, 0x0, - - /* U+65 "e" */ - 0x2, 0xbf, 0xd5, 0x0, 0x61, 0xf4, 0xda, 0x29, - 0x40, 0xa4, 0x79, 0x1f, 0x75, 0xe, 0x44, 0xee, - 0xd8, 0xa7, 0x24, 0x74, 0x41, 0x85, 0xba, 0x32, - - /* U+66 "f" */ - 0x1, 0xcf, 0x60, 0x86, 0xe7, 0x2, 0xc1, 0x16, - 0xa4, 0xf9, 0xea, 0x4f, 0x98, 0x7, 0xff, 0x34, - - /* U+67 "g" */ - 0x2, 0xbf, 0xe6, 0xe2, 0xc, 0x1d, 0xd5, 0x8, - 0x29, 0xd1, 0x1f, 0x0, 0x9, 0x80, 0x22, 0x0, - 0x13, 0x0, 0x44, 0x0, 0x53, 0xa2, 0x3f, 0x0, - 0xb0, 0x77, 0x50, 0x1, 0x15, 0xff, 0x38, 0x10, - 0x63, 0x11, 0xca, 0x80, 0x2a, 0xf7, 0x43, 0x60, - - /* U+68 "h" */ - 0xe4, 0x0, 0xff, 0xe4, 0x1e, 0xfe, 0x10, 0x2, - 0x65, 0xad, 0xc0, 0x8, 0x42, 0x83, 0x0, 0x10, - 0x0, 0x80, 0x40, 0x3c, 0x60, 0x1f, 0xfc, 0x20, - - /* U+69 "i" */ - 0xd, 0x40, 0x56, 0x8, 0x20, 0xe4, 0x0, 0xff, - 0xe3, 0x0, - - /* U+6A "j" */ - 0x0, 0xb5, 0x40, 0x2a, 0x70, 0x9, 0xc8, 0x2, - 0xd4, 0x0, 0xff, 0xec, 0x11, 0x4c, 0x1f, 0xae, - 0x40, - - /* U+6B "k" */ - 0xe4, 0x0, 0xff, 0xe5, 0xdd, 0x0, 0x6b, 0xa, - 0x0, 0xad, 0xec, 0x2, 0xa4, 0x10, 0xc, 0x5c, - 0x12, 0x1, 0x40, 0xfb, 0x20, 0x6, 0x29, 0xa1, - - /* U+6C "l" */ - 0xe4, 0x0, 0xff, 0xe3, 0x0, - - /* U+6D "m" */ - 0xe7, 0xdf, 0xb2, 0x9e, 0xe4, 0x0, 0x2b, 0xb5, - 0xf4, 0xb3, 0x59, 0x42, 0xcc, 0xa0, 0x28, 0x8d, - 0xf0, 0x8, 0x0, 0xe0, 0x20, 0x1, 0x30, 0xf, - 0xfe, 0xa8, - - /* U+6E "n" */ - 0xe6, 0xdf, 0xc2, 0x0, 0x44, 0xf3, 0x70, 0x2, - 0x10, 0x6c, 0xc0, 0x4, 0x0, 0x10, 0x10, 0xf, - 0x18, 0x7, 0xff, 0x8, - - /* U+6F "o" */ - 0x2, 0xbf, 0xe8, 0x0, 0xb0, 0x77, 0x4d, 0x0, - 0xa7, 0x44, 0x74, 0xe0, 0x4c, 0x1, 0x28, 0x9, - 0x30, 0x4, 0xa0, 0x2a, 0x14, 0x47, 0x4e, 0x0, - 0xf1, 0xdd, 0x34, 0x0, - - /* U+70 "p" */ - 0xe7, 0xdf, 0xc4, 0x0, 0x44, 0xf5, 0x59, 0x4, - 0xa0, 0xb2, 0xd0, 0x10, 0x4, 0x44, 0x3, 0x0, - 0x8c, 0x82, 0x14, 0xa1, 0x28, 0x26, 0x5a, 0x96, - 0x40, 0x59, 0xf8, 0x80, 0x1f, 0xfc, 0x30, - - /* U+71 "q" */ - 0x2, 0xbf, 0xd5, 0xf1, 0xc, 0x1d, 0xeb, 0x0, - 0x29, 0xd1, 0x1d, 0x0, 0x9, 0x80, 0x25, 0x0, - 0x13, 0x0, 0x4a, 0x0, 0x53, 0xa2, 0x3a, 0x0, - 0xb0, 0x77, 0xac, 0x2, 0x2b, 0xfd, 0x40, 0xf, - 0xfe, 0x30, - - /* U+72 "r" */ - 0xe6, 0xd8, 0x8, 0xb9, 0x9, 0x61, 0x3, 0x0, - 0xff, 0xe1, 0x0, - - /* U+73 "s" */ - 0x9, 0xef, 0xc2, 0x64, 0xcd, 0xa3, 0x10, 0x1, - 0x30, 0xba, 0x6f, 0x48, 0x84, 0xfe, 0x2c, 0x2b, - 0x10, 0x38, 0x8a, 0xb7, 0x6, 0x0, - - /* U+74 "t" */ - 0x5, 0x30, 0xb, 0x94, 0x1, 0xa9, 0x3e, 0x7a, - 0x93, 0xe6, 0x1, 0xff, 0xc4, 0x1c, 0x11, 0x4, - 0x3f, 0x38, - - /* U+75 "u" */ - 0xf3, 0x0, 0x17, 0x80, 0x7f, 0xf2, 0x85, 0xc0, - 0xc, 0x0, 0x4f, 0x22, 0x40, 0x2, 0xc3, 0x72, - 0x80, 0x0, - - /* U+76 "v" */ - 0xd, 0x50, 0xa, 0x60, 0x2e, 0x40, 0x26, 0xa0, - 0x73, 0x20, 0x64, 0x20, 0x15, 0xa0, 0xae, 0x0, - 0xa5, 0x8c, 0x94, 0x2, 0x33, 0x73, 0x0, 0x75, - 0x95, 0x0, 0x0, - - /* U+77 "w" */ - 0xc5, 0x0, 0x1f, 0x88, 0x1, 0xe2, 0xbc, 0x1, - 0x40, 0xe0, 0xa, 0xb7, 0x50, 0x3, 0xc6, 0x81, - 0x1, 0x8a, 0x2a, 0x13, 0xa8, 0xd2, 0x80, 0x37, - 0xf6, 0x81, 0x1d, 0x6c, 0x0, 0xea, 0xee, 0xe, - 0x80, 0x30, 0x0, 0xa2, 0x88, 0x20, 0x28, 0x0, - - /* U+78 "x" */ - 0x5d, 0x0, 0x27, 0xa, 0xbc, 0x8d, 0x50, 0x42, - 0xdf, 0x1d, 0x0, 0x2, 0xc5, 0x0, 0x11, 0x32, - 0x58, 0x5, 0xd3, 0x6e, 0xc0, 0xe0, 0xe1, 0xd2, - 0x40, - - /* U+79 "y" */ - 0xd, 0x50, 0xa, 0x60, 0x2b, 0x80, 0x27, 0xa0, - 0x64, 0x20, 0x52, 0x20, 0xa, 0xa8, 0x3a, 0x40, - 0x2e, 0xa1, 0x55, 0x0, 0x48, 0x74, 0xe0, 0x1c, - 0xc9, 0x40, 0x1d, 0xa4, 0x60, 0x12, 0x94, 0xd8, - 0x4, 0x33, 0xaa, 0xc0, 0x10, - - /* U+7A "z" */ - 0x7f, 0xfd, 0x6f, 0xfe, 0xd0, 0x80, 0xb, 0xa0, - 0xc0, 0x12, 0xee, 0x0, 0x23, 0xd0, 0x0, 0x6a, - 0xc4, 0x1, 0x23, 0x5f, 0xed -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 52, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 0, .adv_w = 115, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 25, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 53, .adv_w = 110, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 76, .adv_w = 131, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 110, .adv_w = 118, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 134, .adv_w = 68, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 150, .adv_w = 132, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 190, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 214, .adv_w = 54, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 224, .adv_w = 55, .box_w = 5, .box_h = 13, .ofs_x = -2, .ofs_y = -3}, - {.bitmap_index = 241, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 265, .adv_w = 54, .box_w = 2, .box_h = 10, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 270, .adv_w = 203, .box_w = 11, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 296, .adv_w = 131, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 316, .adv_w = 122, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 344, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 375, .adv_w = 131, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 409, .adv_w = 79, .box_w = 4, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 420, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 442, .adv_w = 79, .box_w = 5, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 460, .adv_w = 130, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 478, .adv_w = 107, .box_w = 8, .box_h = 7, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 505, .adv_w = 173, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 545, .adv_w = 106, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 570, .adv_w = 107, .box_w = 8, .box_h = 10, .ofs_x = -1, .ofs_y = -3}, - {.bitmap_index = 607, .adv_w = 100, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 32, .range_length = 1, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 97, .range_length = 26, .glyph_id_start = 2, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - -/*----------------- - * KERNING - *----------------*/ - - -/*Map glyph_ids to kern left classes*/ -static const uint8_t kern_left_class_mapping[] = -{ - 0, 0, 1, 2, 3, 4, 5, 6, - 0, 1, 0, 0, 7, 4, 1, 1, - 2, 2, 8, 9, 10, 11, 0, 12, - 12, 13, 12, 14 -}; - -/*Map glyph_ids to kern right classes*/ -static const uint8_t kern_right_class_mapping[] = -{ - 0, 0, 1, 2, 3, 3, 3, 0, - 3, 2, 4, 5, 2, 2, 4, 4, - 3, 4, 3, 4, 6, 7, 8, 9, - 9, 10, 9, 11 -}; - -/*Kern values between classes*/ -static const int8_t kern_class_values[] = -{ - 0, 0, 1, 0, 0, 0, 0, 0, - -2, 0, 0, -1, 0, 0, 0, 0, - 0, 0, 0, -3, -3, -2, 0, -1, - -2, 0, 0, 0, 1, 0, -1, -3, - -1, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, -3, 0, 0, 0, - 0, 0, 0, 0, -2, -3, -1, -2, - 0, -2, 15, 8, 0, 0, 0, 2, - 0, 0, -2, 0, -4, -1, 0, -3, - 0, -2, -5, -4, -2, 0, 0, 0, - 0, 10, 0, 0, 0, 0, 0, 0, - -2, -1, -2, -1, 0, -1, 3, 0, - 3, -1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -2, -2, 0, 0, 0, - -3, 0, 0, 0, -2, 0, -2, 0, - 0, -3, 0, -3, 0, -3, -1, 3, - 0, -2, -6, -2, -2, 0, -3, 0, - 1, -2, 0, -2, -6, 0, -2, 0, - 0, -2, 0, 0, 0, 0, 0, -2, - -2, 0 -}; - - -/*Collect the kern class' data in one place*/ -static const lv_font_fmt_txt_kern_classes_t kern_classes = -{ - .class_pair_values = kern_class_values, - .left_class_mapping = kern_left_class_mapping, - .right_class_mapping = kern_right_class_mapping, - .left_class_cnt = 14, - .right_class_cnt = 11, -}; - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_dsc_t font_dsc = { - .glyph_bitmap = gylph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = &kern_classes, - .kern_scale = 16, - .cmap_num = 2, - .bpp = 4, - .kern_classes = 1, - .bitmap_format = 1 -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -lv_font_t lv_font_montserrat_12_compr_az = { - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 13, /*The maximum line height required by the font*/ - .base_line = 3, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - -#endif /*#if LV_FONT_MONTSERRAT_12_COMPR_AZ*/ - -#endif diff --git a/demos/stress/assets/lv_font_montserrat_16_compr_az.c b/demos/stress/assets/lv_font_montserrat_16_compr_az.c deleted file mode 100644 index 1d42c207c..000000000 --- a/demos/stress/assets/lv_font_montserrat_16_compr_az.c +++ /dev/null @@ -1,357 +0,0 @@ -#include "../../../lvgl.h" - -#if LV_USE_DEMO_STRESS - -/******************************************************************************* - * Size: 16 px - * Bpp: 4 - * Opts: - ******************************************************************************/ - -#ifndef LV_FONT_MONTSERRAT_16_COMPR_AZ -#define LV_FONT_MONTSERRAT_16_COMPR_AZ 1 -#endif - -#if LV_FONT_MONTSERRAT_16_COMPR_AZ - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { - /* U+20 " " */ - - /* U+61 "a" */ - 0x1, 0x9e, 0xfd, 0x80, 0xb, 0x5d, 0xa1, 0xdd, - 0x20, 0xe, 0xe4, 0x3d, 0x2b, 0x0, 0x8, 0x3, - 0x60, 0x10, 0x15, 0xf7, 0xfa, 0x40, 0x2c, 0x7a, - 0xdd, 0x40, 0x0, 0x86, 0x50, 0x88, 0x1, 0x10, - 0xca, 0x13, 0xc0, 0x5, 0x8f, 0x7b, 0x92, 0x0, - - /* U+62 "b" */ - 0x8f, 0x0, 0xff, 0xe9, 0x15, 0xff, 0x59, 0x80, - 0x6c, 0x78, 0x65, 0xc3, 0x0, 0x93, 0x1e, 0x3c, - 0x7c, 0x2, 0x80, 0x8, 0x64, 0xc4, 0x0, 0x40, - 0x18, 0x80, 0x80, 0x4, 0x1, 0x88, 0x8, 0x1, - 0x0, 0x10, 0xc9, 0x8, 0x1, 0x31, 0xe3, 0xc7, - 0x80, 0x3, 0x8f, 0xc, 0xb8, 0x60, - - /* U+63 "c" */ - 0x0, 0x1d, 0x77, 0xe2, 0x0, 0x13, 0x1d, 0xa0, - 0x2d, 0x2, 0x4b, 0x61, 0xf2, 0x14, 0xca, 0xc0, - 0x33, 0x8b, 0x82, 0x80, 0x79, 0xc1, 0x40, 0x3c, - 0x65, 0x60, 0x19, 0x84, 0x24, 0xb5, 0xdd, 0x92, - 0xa0, 0x98, 0xf3, 0x1, 0x68, - - /* U+64 "d" */ - 0x0, 0xf8, 0x7d, 0xc0, 0x3f, 0xf9, 0x47, 0x7f, - 0xea, 0x20, 0x9, 0x31, 0x9e, 0x1b, 0x40, 0x2a, - 0x2d, 0x87, 0xc5, 0x0, 0x18, 0xd8, 0x6, 0x80, - 0x3, 0x82, 0x80, 0x62, 0x0, 0x38, 0x30, 0x6, - 0x20, 0x1, 0x8c, 0x80, 0x69, 0x0, 0xa8, 0xf1, - 0x96, 0xd0, 0x2, 0x4c, 0x79, 0xa0, 0xc0, 0x0, - - /* U+65 "e" */ - 0x0, 0x1d, 0xff, 0x51, 0x0, 0x49, 0x8f, 0x32, - 0x4c, 0x20, 0x5, 0x1e, 0x33, 0xf8, 0x40, 0x18, - 0xc8, 0x4, 0x32, 0xa0, 0xe1, 0x5f, 0xfa, 0x0, - 0x5c, 0x23, 0x77, 0xc2, 0x63, 0x64, 0x58, 0x8, - 0x1, 0x47, 0xb0, 0xf5, 0xaa, 0x0, 0x4c, 0x76, - 0x87, 0x95, 0x0, - - /* U+66 "f" */ - 0x0, 0x2e, 0xfe, 0x0, 0xa, 0x9a, 0xac, 0x0, - 0xc1, 0xa, 0xe1, 0x96, 0x19, 0xf4, 0x10, 0xe1, - 0x15, 0x20, 0x9a, 0x8, 0xa6, 0x1, 0xff, 0xdf, - - /* U+67 "g" */ - 0x0, 0x1d, 0xff, 0xac, 0xba, 0x41, 0x31, 0x5e, - 0x1f, 0x44, 0x1, 0x45, 0xf0, 0xf8, 0xa0, 0x3, - 0x1b, 0x10, 0xa, 0xc0, 0xe, 0x4, 0x1, 0x84, - 0x0, 0xe0, 0x40, 0x18, 0x40, 0x6, 0x36, 0x1, - 0xa0, 0x2, 0xa2, 0xd8, 0x7c, 0x60, 0x10, 0x4c, - 0x67, 0x87, 0xc0, 0xf0, 0x1, 0xdf, 0xfa, 0xd8, - 0xc, 0x27, 0xa5, 0xdd, 0x54, 0x44, 0x4, 0x4a, - 0xc4, 0x1d, 0xd6, 0x0, - - /* U+68 "h" */ - 0x8f, 0x0, 0xff, 0xe7, 0x95, 0xff, 0x50, 0x80, - 0x5a, 0xe, 0xe5, 0xc0, 0x9, 0xee, 0x26, 0x44, - 0x80, 0x9, 0x0, 0x9c, 0xc, 0x0, 0x20, 0x10, - 0x87, 0x80, 0x7f, 0xf6, 0x0, - - /* U+69 "i" */ - 0x9e, 0x13, 0x13, 0xaf, 0x28, 0xf0, 0xf, 0xfe, - 0x68, - - /* U+6A "j" */ - 0x0, 0x9f, 0x88, 0x2, 0xe1, 0x10, 0x5, 0x3e, - 0x60, 0x13, 0xf8, 0x80, 0x7f, 0xf9, 0xfc, 0x4, - 0x50, 0xcc, 0x30, 0x26, 0x92, 0xe0, - - /* U+6B "k" */ - 0x8f, 0x0, 0xff, 0xe9, 0xe, 0xe8, 0x40, 0x30, - 0xe1, 0xf8, 0x80, 0x43, 0x87, 0x84, 0x1, 0x16, - 0x16, 0x90, 0x6, 0xc2, 0x4, 0x0, 0xf6, 0xa4, - 0x18, 0x6, 0xc2, 0xa1, 0xd1, 0x0, 0x88, 0x7, - 0x46, 0x80, 0x3c, 0x70, 0x8e, - - /* U+6C "l" */ - 0x8f, 0x0, 0xff, 0xe5, 0x0, - - /* U+6D "m" */ - 0x8e, 0x3c, 0xfe, 0x91, 0x3b, 0xfe, 0xa2, 0x0, - 0xe, 0x2c, 0xbb, 0x6e, 0x3c, 0xb2, 0xf8, 0x5, - 0x12, 0xd2, 0xc6, 0x6c, 0x68, 0xa2, 0x50, 0x3, - 0x0, 0x58, 0x14, 0x1, 0x20, 0x10, 0x0, 0x40, - 0x21, 0x2, 0x0, 0x84, 0x3c, 0x3, 0xff, 0xe0, - - /* U+6E "n" */ - 0x8e, 0x3b, 0xfe, 0xa1, 0x0, 0xe, 0xc, 0xb2, - 0xe0, 0x4, 0xf4, 0xd1, 0x24, 0x80, 0x9, 0x0, - 0x9c, 0xc, 0x0, 0x20, 0x10, 0x87, 0x80, 0x7f, - 0xf6, 0x0, - - /* U+6F "o" */ - 0x0, 0x1d, 0xf7, 0xe2, 0x0, 0x49, 0x8c, 0xc8, - 0xb, 0x60, 0x5, 0x16, 0xc3, 0xe2, 0x48, 0x98, - 0xd8, 0x6, 0x80, 0x47, 0x5, 0x0, 0xc4, 0x4, - 0xe0, 0xa0, 0x18, 0x80, 0x8c, 0x6c, 0x3, 0x40, - 0x20, 0x51, 0x6b, 0xbb, 0x12, 0x44, 0x13, 0x1a, - 0x60, 0x2d, 0x80, - - /* U+70 "p" */ - 0x8e, 0x3b, 0xfe, 0xb3, 0x0, 0x87, 0x2, 0xa5, - 0xb0, 0xc0, 0x26, 0xb5, 0x7d, 0x2f, 0x0, 0xa0, - 0x3, 0x51, 0x88, 0x0, 0x40, 0x31, 0x1, 0x0, - 0x8, 0x3, 0x10, 0x10, 0x2, 0x0, 0x21, 0x92, - 0x10, 0x2, 0x63, 0xc7, 0x8f, 0x0, 0x58, 0xf0, - 0xcb, 0x86, 0x1, 0x15, 0xff, 0x59, 0x80, 0x7f, - 0xf2, 0x80, - - /* U+71 "q" */ - 0x0, 0x1d, 0xff, 0xa8, 0xbd, 0xc1, 0x31, 0x9e, - 0x1f, 0x0, 0x2a, 0x2d, 0x87, 0xd5, 0x0, 0x18, - 0xd8, 0x6, 0x80, 0x3, 0x82, 0x80, 0x62, 0x0, - 0x38, 0x28, 0x6, 0x20, 0x1, 0x8d, 0x80, 0x68, - 0x0, 0xa8, 0xb5, 0xdd, 0x8a, 0x1, 0x26, 0x34, - 0x41, 0xb4, 0x3, 0x1d, 0xff, 0xa8, 0x80, 0x3f, - 0xf9, 0x40, - - /* U+72 "r" */ - 0x8e, 0x2b, 0xf0, 0x0, 0xe3, 0x30, 0x2, 0x4d, - 0x90, 0xa, 0x0, 0x38, 0x80, 0x3f, 0xf9, 0xe0, - - /* U+73 "s" */ - 0x2, 0xae, 0xfd, 0x91, 0x16, 0x3c, 0xc9, 0x10, - 0x2a, 0x3c, 0xed, 0x3a, 0xc, 0x10, 0x82, 0x1, - 0x14, 0xad, 0xf6, 0xb0, 0x1, 0xbb, 0x94, 0xd2, - 0xa0, 0x20, 0x2b, 0x60, 0x4b, 0xd4, 0xed, 0x60, - 0x88, 0x67, 0x88, 0x3d, 0x98, - - /* U+74 "t" */ - 0x5, 0xf3, 0x0, 0xff, 0x65, 0x6, 0x7d, 0x4, - 0x38, 0x45, 0x48, 0x26, 0x82, 0x29, 0x80, 0x7f, - 0xf2, 0xc4, 0x1c, 0x3, 0x28, 0x43, 0x40, 0x0, - 0x68, 0x65, 0x4, - - /* U+75 "u" */ - 0xae, 0x0, 0xc5, 0xea, 0x1, 0xff, 0xd8, 0x31, - 0x0, 0xcc, 0x0, 0xf0, 0x30, 0xb, 0x80, 0xe, - 0x3a, 0xed, 0x6a, 0x0, 0x1c, 0x59, 0x90, 0x60, - 0x0, - - /* U+76 "v" */ - 0xd, 0xc0, 0xe, 0xcb, 0xb, 0x32, 0x0, 0x88, - 0xf8, 0x18, 0x2c, 0x2, 0xb1, 0x50, 0x3, 0x38, - 0x4, 0xcc, 0x0, 0xac, 0x58, 0x18, 0x24, 0x2, - 0x23, 0xa0, 0xa4, 0x10, 0xd, 0x26, 0xc7, 0xe0, - 0x1c, 0xa3, 0x24, 0x80, 0x1e, 0x60, 0xa0, 0x8, - - /* U+77 "w" */ - 0xbb, 0x0, 0x69, 0xf1, 0x0, 0x93, 0xc7, 0x50, - 0x40, 0x27, 0x7, 0x0, 0xb4, 0xc5, 0x81, 0xc0, - 0xa, 0x27, 0xa0, 0x13, 0x50, 0x1, 0x68, 0x1, - 0xe9, 0x28, 0x20, 0xa0, 0xe0, 0xf, 0x31, 0x5, - 0xe5, 0x6, 0xf, 0x41, 0x0, 0x28, 0x33, 0x1, - 0x41, 0xac, 0x17, 0x80, 0x32, 0xde, 0xa8, 0x3, - 0x4e, 0x1, 0x40, 0x37, 0x1a, 0x70, 0x1, 0x5, - 0xd4, 0x3, 0x90, 0x44, 0x80, 0x13, 0x7, 0x0, - 0x40, - - /* U+78 "x" */ - 0x4f, 0x70, 0xa, 0x7c, 0x91, 0xe0, 0xc1, 0x5a, - 0x88, 0x20, 0xf8, 0xad, 0x94, 0x2, 0xe2, 0xd3, - 0x90, 0xc, 0x4a, 0x16, 0x1, 0xc8, 0xa5, 0x2, - 0x1, 0xd, 0x26, 0x9e, 0x80, 0x54, 0x14, 0x1c, - 0x70, 0xc, 0x94, 0x20, 0x70, 0xe8, - - /* U+79 "y" */ - 0xd, 0xc0, 0xe, 0xcb, 0xb, 0x33, 0x0, 0x44, - 0x7e, 0xc, 0x32, 0x1, 0x59, 0x20, 0x1, 0x94, - 0x40, 0x5a, 0x80, 0x29, 0x6, 0x6, 0x6, 0x0, - 0x85, 0x64, 0x29, 0x84, 0x3, 0x48, 0xc9, 0x58, - 0x7, 0x19, 0x99, 0x8, 0x3, 0xd4, 0x1e, 0x1, - 0xf6, 0x12, 0x0, 0x43, 0x8f, 0x2b, 0x0, 0x1c, - 0xd2, 0xf0, 0xa0, 0x18, - - /* U+7A "z" */ - 0x4f, 0xff, 0x4a, 0xd5, 0x64, 0xd, 0x15, 0x58, - 0x51, 0xd0, 0x2, 0x1a, 0x38, 0x0, 0xd4, 0x1a, - 0x1, 0xa1, 0x28, 0x40, 0x24, 0x78, 0x40, 0x8, - 0x68, 0x49, 0x56, 0x34, 0x11, 0x55, 0x6f -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 69, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 0, .adv_w = 153, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 40, .adv_w = 175, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 86, .adv_w = 146, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 123, .adv_w = 175, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 171, .adv_w = 157, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 214, .adv_w = 90, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 238, .adv_w = 177, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 298, .adv_w = 174, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 327, .adv_w = 71, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 336, .adv_w = 73, .box_w = 6, .box_h = 15, .ofs_x = -2, .ofs_y = -3}, - {.bitmap_index = 358, .adv_w = 158, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 395, .adv_w = 71, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 400, .adv_w = 271, .box_w = 15, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 440, .adv_w = 174, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 466, .adv_w = 163, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 509, .adv_w = 175, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, - {.bitmap_index = 559, .adv_w = 175, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, - {.bitmap_index = 609, .adv_w = 105, .box_w = 6, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 625, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 662, .adv_w = 106, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 689, .adv_w = 173, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 714, .adv_w = 143, .box_w = 10, .box_h = 9, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 754, .adv_w = 230, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 819, .adv_w = 141, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 857, .adv_w = 143, .box_w = 10, .box_h = 12, .ofs_x = -1, .ofs_y = -3}, - {.bitmap_index = 909, .adv_w = 133, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 32, .range_length = 1, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 97, .range_length = 26, .glyph_id_start = 2, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - -/*----------------- - * KERNING - *----------------*/ - - -/*Map glyph_ids to kern left classes*/ -static const uint8_t kern_left_class_mapping[] = -{ - 0, 0, 1, 2, 3, 4, 5, 6, - 0, 1, 0, 0, 7, 4, 1, 1, - 2, 2, 8, 9, 10, 11, 0, 12, - 12, 13, 12, 14 -}; - -/*Map glyph_ids to kern right classes*/ -static const uint8_t kern_right_class_mapping[] = -{ - 0, 0, 1, 2, 3, 3, 3, 0, - 3, 2, 4, 5, 2, 2, 4, 4, - 3, 4, 3, 4, 6, 7, 8, 9, - 9, 10, 9, 11 -}; - -/*Kern values between classes*/ -static const int8_t kern_class_values[] = -{ - 0, 0, 1, 0, 0, 0, 0, 0, - -3, 0, 0, -1, 0, 0, 0, 0, - 0, 0, 0, -4, -5, -2, 0, -2, - -2, 0, 0, 0, 2, 0, -2, -4, - -2, 0, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, -4, 0, 0, 0, - 0, 0, 0, 0, -3, -4, -1, -3, - 0, -2, 20, 11, 0, 0, 0, 3, - 0, 0, -3, 0, -6, -2, 0, -4, - 0, -3, -7, -5, -3, 0, 0, 0, - 0, 13, 0, 0, 0, 0, 0, 0, - -2, -2, -3, -2, 0, -1, 4, 0, - 4, -2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -3, -3, 0, 0, 0, - -5, 0, 0, 0, -3, 0, -3, 0, - 0, -4, 0, -4, 0, -4, -2, 4, - 0, -2, -8, -3, -3, 0, -5, 0, - 2, -3, 0, -3, -8, 0, -3, 0, - 0, -2, 0, 0, 0, 1, 0, -3, - -3, 0 -}; - - -/*Collect the kern class' data in one place*/ -static const lv_font_fmt_txt_kern_classes_t kern_classes = -{ - .class_pair_values = kern_class_values, - .left_class_mapping = kern_left_class_mapping, - .right_class_mapping = kern_right_class_mapping, - .left_class_cnt = 14, - .right_class_cnt = 11, -}; - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_dsc_t font_dsc = { - .glyph_bitmap = gylph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = &kern_classes, - .kern_scale = 16, - .cmap_num = 2, - .bpp = 4, - .kern_classes = 1, - .bitmap_format = 1 -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -lv_font_t lv_font_montserrat_16_compr_az = { - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 15, /*The maximum line height required by the font*/ - .base_line = 3, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - -#endif /*#if LV_FONT_MONTSERRAT_16_COMPR_AZ*/ - -#endif - diff --git a/demos/stress/assets/lv_font_montserrat_28_compr_az.c b/demos/stress/assets/lv_font_montserrat_28_compr_az.c deleted file mode 100644 index 9e3384194..000000000 --- a/demos/stress/assets/lv_font_montserrat_28_compr_az.c +++ /dev/null @@ -1,507 +0,0 @@ -#include "../../../lvgl.h" - -#if LV_USE_DEMO_STRESS - -/******************************************************************************* - * Size: 28 px - * Bpp: 4 - * Opts: - ******************************************************************************/ - -#ifndef LV_FONT_MONTSERRAT_28_COMPR_AZ -#define LV_FONT_MONTSERRAT_28_COMPR_AZ 1 -#endif - -#if LV_FONT_MONTSERRAT_28_COMPR_AZ - -/*----------------- - * BITMAPS - *----------------*/ - -/*Store the image of the glyphs*/ -static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = { - /* U+20 " " */ - - /* U+61 "a" */ - 0x0, 0xb, 0xdf, 0x7f, 0xb6, 0x90, 0x3, 0x47, - 0x42, 0x8, 0x0, 0x96, 0xe4, 0x2, 0x50, 0x15, - 0x9a, 0x95, 0x0, 0x33, 0x0, 0x1d, 0x1d, 0x4c, - 0xad, 0x5a, 0x0, 0x80, 0x1, 0xb8, 0x7, 0x89, - 0xc0, 0x48, 0x3, 0xfd, 0xc0, 0x6, 0x0, 0x14, - 0x67, 0x73, 0xfe, 0x90, 0xc, 0xda, 0xe6, 0x22, - 0x0, 0xf0, 0x94, 0x80, 0xd7, 0x7f, 0xe9, 0x0, - 0x94, 0x1, 0x4a, 0x20, 0x1f, 0xb8, 0x0, 0xa0, - 0x1e, 0xe0, 0xb, 0x80, 0x8, 0x1, 0xc4, 0xe0, - 0x12, 0x80, 0x2d, 0x40, 0x2, 0xd8, 0x1, 0x8a, - 0x80, 0x6b, 0xfd, 0xd2, 0x2c, 0x1, 0x97, 0x58, - 0x40, 0x4, 0xdb, 0x40, 0x10, - - /* U+62 "b" */ - 0x7f, 0xf1, 0x80, 0x7f, 0xff, 0xc0, 0x3f, 0xf9, - 0x4b, 0x7d, 0xfb, 0x6a, 0x1, 0xf3, 0x65, 0x20, - 0x81, 0x25, 0x69, 0x0, 0x75, 0x98, 0x2c, 0x4b, - 0x88, 0x16, 0x90, 0x6, 0x12, 0xda, 0x76, 0x8e, - 0x60, 0x7, 0x80, 0x77, 0x90, 0x7, 0x4a, 0x81, - 0x28, 0x4, 0xc4, 0x1, 0xf4, 0x0, 0x3c, 0x2, - 0xc0, 0xf, 0xc4, 0x20, 0xc0, 0x13, 0x0, 0x7f, - 0x18, 0x10, 0x4, 0xc0, 0x1f, 0xc6, 0x4, 0x1, - 0x60, 0x7, 0xe3, 0x10, 0x60, 0x9, 0x88, 0x3, - 0xe8, 0x0, 0x78, 0x6, 0xf2, 0x0, 0xe9, 0x40, - 0x25, 0x0, 0x88, 0x9b, 0x4e, 0xd1, 0xcc, 0x0, - 0xf0, 0xd, 0xc6, 0xb, 0x12, 0xe2, 0x5, 0xa4, - 0x1, 0x87, 0x29, 0x4, 0x5, 0x2b, 0x48, 0x0, - - /* U+63 "c" */ - 0x0, 0xc7, 0x3b, 0xfe, 0xd9, 0x30, 0xe, 0x1b, - 0xc6, 0x20, 0x1, 0x36, 0x48, 0x4, 0x38, 0x80, - 0x2d, 0x32, 0x60, 0x3, 0x40, 0x2, 0x88, 0x17, - 0xa5, 0x99, 0x3c, 0x60, 0x11, 0xa0, 0x1d, 0x0, - 0x70, 0xee, 0xa0, 0x2c, 0x1, 0x0, 0x1f, 0x9, - 0x0, 0xc, 0x0, 0x80, 0x1f, 0xf3, 0x80, 0x80, - 0x7f, 0xf0, 0x1c, 0x4, 0x3, 0xff, 0x80, 0x60, - 0x4, 0x0, 0xff, 0xa8, 0x1, 0x0, 0x1f, 0x9, - 0x0, 0x9, 0x0, 0xe8, 0x3, 0x87, 0x75, 0x0, - 0xa, 0x20, 0x5e, 0x96, 0x64, 0xf1, 0x80, 0x61, - 0xc4, 0x1, 0x69, 0x93, 0x0, 0x1e, 0x0, 0x21, - 0xbc, 0x62, 0x0, 0x13, 0x64, 0x0, 0x0, - - /* U+64 "d" */ - 0x0, 0xff, 0xe0, 0x17, 0xfa, 0x0, 0x3f, 0xff, - 0xe0, 0x1f, 0xcb, 0x5b, 0xfd, 0x8c, 0x1, 0xf1, - 0x65, 0x29, 0x0, 0x9c, 0xeb, 0x0, 0x61, 0xc3, - 0x1, 0x69, 0x92, 0x81, 0x50, 0x6, 0xd1, 0x5, - 0xe9, 0x66, 0x57, 0x18, 0x80, 0x46, 0x60, 0x3a, - 0x0, 0xe1, 0xd1, 0x0, 0xa8, 0x1, 0x0, 0x1f, - 0xb, 0x0, 0x44, 0x0, 0x40, 0xf, 0xd6, 0x1, - 0x38, 0x8, 0x7, 0xf0, 0x80, 0x4e, 0x2, 0x1, - 0xfc, 0x20, 0x11, 0x0, 0xc, 0x3, 0xf2, 0x0, - 0x54, 0x0, 0x80, 0xf, 0xd4, 0x1, 0x19, 0x81, - 0x20, 0x3, 0xd6, 0x40, 0x1b, 0x44, 0x1f, 0x18, - 0xd1, 0xf9, 0x4, 0x3, 0xe, 0x18, 0x1c, 0xe5, - 0xc0, 0x8b, 0x40, 0x38, 0xb2, 0x90, 0x80, 0x4e, - 0x38, 0xc0, 0x20, - - /* U+65 "e" */ - 0x0, 0xc9, 0x7b, 0xfd, 0x8c, 0x20, 0x1c, 0x39, - 0x68, 0x40, 0x27, 0x3e, 0x80, 0x10, 0xf9, 0x82, - 0x4d, 0xd3, 0x0, 0xda, 0x0, 0x28, 0x42, 0xec, - 0xc8, 0xb3, 0xa4, 0x14, 0x26, 0x81, 0x28, 0x1, - 0xc5, 0xe0, 0x2f, 0x40, 0x6, 0x0, 0xf8, 0x90, - 0x34, 0x80, 0x1f, 0xff, 0xc8, 0xc, 0xe0, 0x1f, - 0xfc, 0x13, 0x70, 0x7, 0xff, 0xfd, 0xc6, 0x0, - 0x40, 0xf, 0xfa, 0xc0, 0x10, 0x1, 0xf8, 0x40, - 0x6, 0x80, 0x76, 0x20, 0x1c, 0xbe, 0x60, 0xa, - 0x20, 0x4e, 0x96, 0x64, 0x65, 0xf, 0x80, 0x7, - 0x10, 0x0, 0xd3, 0x27, 0x30, 0x2e, 0x0, 0x86, - 0xf1, 0x88, 0x40, 0x56, 0xb4, 0x80, - - /* U+66 "f" */ - 0x0, 0xc3, 0x1b, 0xfd, 0x68, 0x1, 0xe, 0x39, - 0x0, 0xa6, 0x80, 0x50, 0x40, 0xb7, 0x66, 0xa0, - 0x9, 0xc0, 0xa9, 0x11, 0x26, 0x1, 0x8, 0x20, - 0x7, 0xc2, 0x1, 0xfa, 0x7f, 0x80, 0xd, 0xff, - 0x70, 0x7, 0xff, 0x2, 0xf2, 0xc0, 0x9, 0x99, - 0x68, 0x11, 0xa8, 0x0, 0x4c, 0xf0, 0x7, 0xff, - 0xfc, 0x3, 0xff, 0xc6, - - /* U+67 "g" */ - 0x0, 0xcb, 0x7b, 0xfd, 0x8e, 0x21, 0x9f, 0x80, - 0x3, 0xda, 0x42, 0x1, 0x38, 0xf4, 0x0, 0xc7, - 0x84, 0x4, 0xf3, 0x27, 0x11, 0x59, 0x0, 0x5c, - 0x0, 0x7d, 0x86, 0x64, 0x73, 0x80, 0x80, 0x14, - 0x81, 0xa0, 0x3, 0xd0, 0xc0, 0x17, 0x80, 0x2c, - 0x3, 0xf5, 0x80, 0x4c, 0x2, 0x40, 0x1f, 0x88, - 0x40, 0x30, 0x80, 0x7f, 0x84, 0x0, 0xc0, 0x2, - 0x0, 0xfc, 0x40, 0x17, 0x80, 0x20, 0x3, 0xf4, - 0x0, 0x4a, 0x40, 0xb2, 0x1, 0xe9, 0x50, 0xd, - 0xe0, 0x6, 0xe9, 0x66, 0x4f, 0x30, 0x7, 0x16, - 0x10, 0xb, 0x4c, 0x98, 0x45, 0x60, 0x7, 0x0, - 0x1e, 0xd2, 0x10, 0x9, 0xc7, 0xa0, 0x0, 0x40, - 0x32, 0xde, 0xff, 0x63, 0x89, 0x0, 0xc, 0x3, - 0xff, 0x81, 0x40, 0xc, 0x3, 0xe6, 0x0, 0xf9, - 0x5c, 0x5, 0x43, 0xc6, 0x7a, 0x9d, 0x99, 0x19, - 0x40, 0xb, 0x0, 0x71, 0x80, 0xac, 0x4c, 0x9c, - 0xc0, 0x12, 0xa0, 0x2, 0xcc, 0x3a, 0x8, 0x0, - 0x52, 0x39, 0x80, 0x0, - - /* U+68 "h" */ - 0x7f, 0xf1, 0x80, 0x7f, 0xff, 0xc0, 0x3f, 0xf8, - 0x8d, 0x7d, 0xfd, 0x6a, 0x1, 0xe6, 0xd9, 0x41, - 0x1, 0x4a, 0xb0, 0xe, 0xa2, 0x16, 0x88, 0x28, - 0x1, 0x24, 0x3, 0x93, 0xa5, 0xdd, 0x58, 0x0, - 0x62, 0x0, 0x86, 0xc0, 0x38, 0xe0, 0x0, 0x80, - 0x14, 0x80, 0x7c, 0x80, 0xe, 0x0, 0x8c, 0x3, - 0xe2, 0x0, 0x8, 0x4, 0xe0, 0x1f, 0xe3, 0x0, - 0xff, 0xff, 0x80, 0x7f, 0xf4, 0x80, - - /* U+69 "i" */ - 0x5e, 0xd3, 0x81, 0x29, 0x60, 0x6, 0xdc, 0xd3, - 0x83, 0x28, 0x7, 0x3f, 0xf8, 0xc0, 0x3f, 0xfd, - 0x80, - - /* U+6A "j" */ - 0x0, 0xe3, 0xee, 0x20, 0x7, 0x40, 0x8a, 0x0, - 0x38, 0x80, 0xa, 0x1, 0xd3, 0x38, 0x3, 0xcc, - 0xc0, 0xf, 0xfe, 0x1a, 0xff, 0x98, 0x3, 0xff, - 0xfe, 0x1, 0xff, 0xef, 0x30, 0xe, 0xc0, 0x3, - 0x5, 0xb2, 0xc3, 0x0, 0x9a, 0xa4, 0xd3, 0x80, - 0x28, 0x1d, 0x48, 0x5, 0x31, 0x0, - - /* U+6B "k" */ - 0x7f, 0xf1, 0x80, 0x7f, 0xff, 0xc0, 0x3f, 0xf9, - 0xe9, 0xfe, 0xe2, 0x0, 0xff, 0x2d, 0x80, 0xe1, - 0x0, 0x7f, 0x35, 0x0, 0xe1, 0x0, 0x7f, 0x3c, - 0x80, 0xe1, 0x0, 0x7f, 0x44, 0x0, 0x70, 0x80, - 0x3f, 0xa5, 0xc0, 0x70, 0x80, 0x3f, 0x3d, 0x30, - 0x1, 0xc8, 0x3, 0xfa, 0x94, 0x2, 0x65, 0x0, - 0xfe, 0x10, 0x3a, 0x0, 0x51, 0x0, 0x7f, 0x26, - 0x2b, 0x80, 0x3c, 0x3, 0xf2, 0xd8, 0x2, 0x10, - 0xa, 0x80, 0x3e, 0x90, 0xd, 0x64, 0xa, 0xe0, - 0x1f, 0xfc, 0xf, 0x0, 0x42, 0x0, 0x7f, 0xc5, - 0x40, 0xa, 0x10, 0xf, 0xf9, 0x5c, 0x7, 0x40, - - /* U+6C "l" */ - 0x7f, 0xf1, 0x80, 0x7f, 0xff, 0xc0, 0x38, - - /* U+6D "m" */ - 0x7f, 0xf1, 0xc, 0x67, 0x7e, 0xc9, 0x80, 0x45, - 0x1b, 0xfe, 0xd9, 0x20, 0xf, 0x3f, 0xb9, 0x88, - 0x13, 0x63, 0x83, 0xeb, 0x90, 0x0, 0x9b, 0x58, - 0x3, 0xa8, 0x4e, 0x6e, 0x94, 0x1, 0x15, 0x0, - 0x73, 0x74, 0xa0, 0x9, 0x30, 0xe, 0x7c, 0x64, - 0x5a, 0x90, 0x2, 0x83, 0xe3, 0x22, 0xd4, 0x0, - 0x20, 0x3, 0x14, 0x0, 0x73, 0x10, 0x0, 0xe0, - 0x3, 0x9c, 0x81, 0x0, 0x35, 0x0, 0x7c, 0x80, - 0xb, 0x0, 0xf9, 0x0, 0x2, 0x1, 0x18, 0x7, - 0xdc, 0x0, 0x30, 0xf, 0x84, 0x0, 0x60, 0x13, - 0x80, 0x7f, 0x9c, 0x3, 0xfc, 0x20, 0x1f, 0xff, - 0xf0, 0xf, 0xff, 0xf8, 0x7, 0xff, 0x50, - - /* U+6E "n" */ - 0x7f, 0xf1, 0x3, 0xe7, 0x7f, 0x5a, 0x80, 0x79, - 0xfa, 0xc, 0x40, 0x52, 0xac, 0x3, 0xa8, 0x4a, - 0x2a, 0x8e, 0x20, 0x92, 0x1, 0xcd, 0xae, 0xaa, - 0x8c, 0x10, 0x62, 0x0, 0x8a, 0x40, 0x38, 0xa4, - 0x0, 0x80, 0x15, 0x0, 0x7c, 0xa0, 0xe, 0x0, - 0x8c, 0x3, 0xe3, 0x0, 0x8, 0x4, 0xe0, 0x1f, - 0xe3, 0x0, 0xff, 0xff, 0x80, 0x7f, 0xf4, 0x80, - - /* U+6F "o" */ - 0x0, 0xc9, 0x5b, 0xfd, 0xb0, 0x40, 0x1e, 0x1b, - 0xb2, 0x90, 0x9, 0x3e, 0xc0, 0x6, 0x1f, 0x40, - 0x16, 0x99, 0x28, 0x1, 0xec, 0x2, 0xa1, 0x5, - 0xe9, 0x66, 0x57, 0x18, 0x23, 0x81, 0xa0, 0x1d, - 0x0, 0x70, 0xe8, 0x84, 0x85, 0x80, 0x20, 0x3, - 0xe1, 0x90, 0x15, 0x30, 0x2, 0x0, 0x7e, 0x40, - 0x1, 0x38, 0x8, 0x7, 0xf0, 0x80, 0x39, 0xc0, - 0x40, 0x3f, 0x84, 0x1, 0xc6, 0x0, 0x40, 0xf, - 0xd6, 0x0, 0x2b, 0x0, 0x40, 0x7, 0xc2, 0xc0, - 0x2a, 0x68, 0x7, 0x40, 0x1c, 0x3a, 0x21, 0x20, - 0xa, 0x20, 0x5e, 0x96, 0x65, 0x71, 0x82, 0x38, - 0x0, 0x71, 0x0, 0x5a, 0x64, 0xa0, 0x7, 0xb0, - 0xc, 0x37, 0x65, 0x20, 0x12, 0x6d, 0x80, 0x8, - - /* U+70 "p" */ - 0x7f, 0xf1, 0x3, 0x5f, 0x7e, 0xda, 0x80, 0x7c, - 0xdb, 0x28, 0x20, 0x49, 0x5a, 0x40, 0x1d, 0x44, - 0x2f, 0x76, 0x93, 0x2, 0xd2, 0x0, 0xc2, 0x7f, - 0x8, 0x86, 0xc8, 0x0, 0x78, 0x6, 0x1d, 0x10, - 0xe, 0x76, 0x2, 0x50, 0x9, 0x84, 0x3, 0xeb, - 0x0, 0x78, 0x5, 0x80, 0x1f, 0x88, 0x41, 0x80, - 0x27, 0x0, 0xfe, 0x30, 0x20, 0x9, 0x80, 0x3f, - 0x8c, 0x8, 0x2, 0xc0, 0xf, 0xc6, 0x20, 0xc0, - 0x13, 0x10, 0x7, 0xd0, 0x0, 0xf0, 0xd, 0xe4, - 0x1, 0xd2, 0x80, 0x4a, 0x1, 0x9, 0x6d, 0x3b, - 0x47, 0x30, 0x3, 0xc0, 0x35, 0x18, 0x2c, 0x4b, - 0x88, 0x16, 0x90, 0x6, 0x7c, 0xa4, 0x10, 0x14, - 0xad, 0x20, 0xf, 0x96, 0xfb, 0xfa, 0xd4, 0x3, - 0xff, 0xf0, - - /* U+71 "q" */ - 0x0, 0xcb, 0x5b, 0xfd, 0x8c, 0x0, 0xff, 0x40, - 0x0, 0xb2, 0x94, 0x80, 0x4e, 0x74, 0x80, 0x30, - 0xe1, 0x80, 0xb4, 0xc9, 0x40, 0xb0, 0x3, 0x68, - 0x82, 0xf4, 0xb3, 0x2b, 0x4c, 0x40, 0x23, 0x30, - 0x1d, 0x0, 0x71, 0x68, 0x80, 0x54, 0x0, 0x80, - 0xf, 0x86, 0x40, 0x22, 0x0, 0x20, 0x7, 0xe4, - 0x0, 0x9c, 0x4, 0x3, 0xf8, 0x40, 0x27, 0x1, - 0x0, 0xfe, 0x10, 0x8, 0x80, 0x8, 0x1, 0xfa, - 0xc0, 0x2a, 0x0, 0x40, 0x7, 0xc2, 0xc0, 0x11, - 0x98, 0xe, 0x80, 0x38, 0x74, 0x40, 0x36, 0x88, - 0x2f, 0x4b, 0x32, 0xb8, 0xc4, 0x3, 0xe, 0x18, - 0xb, 0x4c, 0x94, 0xf, 0x40, 0x38, 0xb2, 0x90, - 0x80, 0x4e, 0x70, 0x40, 0x3e, 0x5b, 0xdf, 0xec, - 0x60, 0xf, 0xff, 0xc8, - - /* U+72 "r" */ - 0x7f, 0xf1, 0x3, 0x67, 0x40, 0x4, 0x3b, 0x26, - 0x20, 0x1b, 0x88, 0xd, 0xb4, 0x2, 0x22, 0x6e, - 0x4a, 0x80, 0x6c, 0x20, 0xf, 0x38, 0x80, 0x7d, - 0xa0, 0x1f, 0x98, 0x3, 0xff, 0xf0, - - /* U+73 "s" */ - 0x0, 0x8a, 0x77, 0xfd, 0xd9, 0x6, 0x1, 0xa3, - 0x58, 0x80, 0x2, 0x6f, 0x90, 0x0, 0x57, 0x1, - 0x79, 0xa9, 0x61, 0xa, 0x0, 0x70, 0x3, 0x21, - 0x95, 0xa7, 0xb0, 0x80, 0xc, 0x4, 0x40, 0xf, - 0x18, 0x4, 0xc0, 0x4e, 0x1, 0xfe, 0x80, 0x4, - 0x75, 0xc2, 0x88, 0x7, 0x1d, 0x90, 0xa, 0x3d, - 0x76, 0xa8, 0x6, 0x4d, 0xc9, 0x63, 0x0, 0x15, - 0x38, 0x7, 0x1b, 0x4e, 0x7d, 0x8, 0x40, 0x7, - 0xf9, 0x58, 0x0, 0x40, 0xae, 0x1, 0xf1, 0x80, - 0xc, 0x2e, 0x3e, 0x9d, 0x54, 0xf8, 0x80, 0x82, - 0x22, 0x0, 0x2c, 0x55, 0x20, 0xc0, 0xe8, 0x7, - 0x30, 0xe6, 0x20, 0x2, 0x5a, 0xc1, 0x0, - - /* U+74 "t" */ - 0x0, 0xa2, 0xa, 0x1, 0xf0, 0xbb, 0xbc, 0x3, - 0xff, 0x9f, 0x3f, 0xc0, 0x5, 0xff, 0xb8, 0x3, - 0xff, 0x81, 0x79, 0x60, 0x4, 0xcc, 0xb4, 0x8, - 0xd4, 0x0, 0x26, 0x78, 0x3, 0xff, 0xf2, 0x20, - 0x1f, 0xfc, 0x14, 0x0, 0xfc, 0xa0, 0x36, 0xaa, - 0xa4, 0x0, 0xa0, 0x41, 0x2a, 0x8b, 0xe0, 0x11, - 0x7b, 0x8, 0xa, 0xc0, - - /* U+75 "u" */ - 0x9f, 0xf0, 0x80, 0x7c, 0xbf, 0xe6, 0x0, 0xff, - 0xff, 0x80, 0x7f, 0xf8, 0x44, 0x0, 0x40, 0x1f, - 0x68, 0x5, 0xa0, 0x4, 0x0, 0xf9, 0x80, 0x24, - 0x0, 0x49, 0x0, 0x75, 0x8, 0x4, 0x2e, 0x3, - 0x90, 0x88, 0x6d, 0x50, 0xe, 0x85, 0x1, 0x7b, - 0xb4, 0x90, 0xd0, 0x7, 0x55, 0xa8, 0x80, 0x9c, - 0x73, 0x80, 0x40, - - /* U+76 "v" */ - 0xd, 0xfe, 0x0, 0xfe, 0x2f, 0xf3, 0x85, 0x80, - 0xb0, 0x7, 0xeb, 0x0, 0x30, 0x30, 0x85, 0x0, - 0x7c, 0x2c, 0xc, 0x20, 0x6, 0x3, 0x30, 0x7, - 0x98, 0x1, 0x60, 0x15, 0x0, 0x24, 0x3, 0xd2, - 0x8, 0x40, 0x11, 0x28, 0x28, 0x80, 0x65, 0x10, - 0xf0, 0xe, 0x90, 0x4, 0x80, 0x69, 0x2, 0x40, - 0xe, 0x32, 0x6, 0x0, 0x8c, 0xc1, 0x60, 0x1f, - 0x58, 0xa, 0x80, 0x24, 0x0, 0xc0, 0x1f, 0x30, - 0x84, 0x80, 0xa8, 0x30, 0x7, 0xf3, 0x1, 0x99, - 0x80, 0x16, 0x1, 0xfd, 0x20, 0x9, 0x90, 0x21, - 0x0, 0x7f, 0xa, 0x82, 0x88, 0x78, 0x7, 0xfd, - 0x20, 0x11, 0x20, 0x7, 0xfc, 0x66, 0x0, 0x58, - 0x7, 0x80, - - /* U+77 "w" */ - 0xaf, 0xe0, 0xf, 0xd5, 0xfc, 0x1, 0xfa, 0x7f, - 0x78, 0x5, 0x0, 0x3c, 0x2a, 0x2, 0xa0, 0x1f, - 0x38, 0x52, 0x8, 0x68, 0x7, 0x9c, 0x2, 0xe0, - 0xf, 0x28, 0x83, 0x3, 0x3, 0x0, 0x7a, 0x80, - 0x24, 0x10, 0xe, 0xe0, 0x41, 0xa, 0x0, 0x28, - 0x6, 0x23, 0xa, 0x0, 0x38, 0x6, 0x14, 0xe, - 0x0, 0x11, 0x87, 0x0, 0x6a, 0x2, 0x54, 0xa, - 0x0, 0xce, 0x2, 0xa0, 0x15, 0x82, 0x8, 0x4, - 0xc1, 0x41, 0xc0, 0x64, 0x1, 0x50, 0x38, 0x6, - 0x60, 0x3, 0x80, 0x10, 0x41, 0x81, 0x44, 0x28, - 0x0, 0x46, 0x14, 0x1, 0x85, 0x2, 0x80, 0x1c, - 0x8, 0x20, 0x7, 0x6, 0x0, 0x50, 0x11, 0x80, - 0x77, 0x1, 0x90, 0xa8, 0x70, 0x5, 0x40, 0x28, - 0xc, 0x14, 0x1, 0xe5, 0x10, 0xa7, 0x0, 0x28, - 0x4, 0x66, 0xd, 0x41, 0x6, 0x0, 0xf9, 0xc1, - 0x68, 0x18, 0x3, 0xa8, 0x1b, 0x81, 0x4, 0x3, - 0xea, 0x2, 0x30, 0xa0, 0xe, 0x70, 0x2, 0x86, - 0x80, 0x7e, 0x32, 0x0, 0x11, 0x80, 0x70, 0xa8, - 0x4, 0xc0, 0x1f, 0xd4, 0x0, 0xa0, 0xf, 0xb8, - 0x0, 0xa0, 0x1c, - - /* U+78 "x" */ - 0x1e, 0xfe, 0x10, 0xf, 0x4f, 0xf9, 0x40, 0x74, - 0x7, 0x40, 0x39, 0x58, 0x19, 0x40, 0x7, 0x20, - 0x70, 0x1, 0x15, 0x81, 0xc8, 0x6, 0x65, 0x7, - 0x50, 0x7, 0x8, 0x70, 0x7, 0xa8, 0x82, 0xca, - 0x4c, 0x28, 0x80, 0x3e, 0xf0, 0x1c, 0x60, 0x75, - 0x0, 0xfc, 0x52, 0x2, 0x7, 0x0, 0x1f, 0xe6, - 0x10, 0x4, 0x80, 0x7f, 0xd4, 0x20, 0xb, 0x20, - 0xf, 0xe6, 0x50, 0x50, 0x1e, 0x0, 0xfc, 0x72, - 0x7, 0x54, 0x3, 0x90, 0xf, 0xf, 0x0, 0xe8, - 0x2b, 0x3, 0x28, 0x7, 0x51, 0x5, 0x8, 0x2, - 0x48, 0x28, 0x80, 0x27, 0x40, 0x74, 0x0, 0xde, - 0x0, 0xf0, 0x1, 0xc0, 0x1c, 0x0, 0x71, 0x50, - 0x15, 0x0, - - /* U+79 "y" */ - 0xd, 0xfe, 0x0, 0xfe, 0x2f, 0xf3, 0x85, 0x80, - 0xb0, 0x7, 0xeb, 0x0, 0x38, 0x30, 0x85, 0x80, - 0x7c, 0x2c, 0xe, 0x1, 0x48, 0x12, 0x80, 0x7a, - 0x40, 0x12, 0x1, 0x30, 0x2, 0x40, 0x3c, 0xc0, - 0xa2, 0x1, 0xb, 0x1, 0x98, 0x3, 0x30, 0x84, - 0x80, 0x75, 0x80, 0x24, 0x3, 0x58, 0x19, 0x80, - 0x38, 0x94, 0x14, 0x40, 0x8, 0x41, 0x0, 0x1f, - 0x48, 0x2, 0x40, 0x1e, 0x4, 0x80, 0x1f, 0x19, - 0x81, 0xc0, 0x90, 0x2c, 0x3, 0xfa, 0x0, 0xf, - 0x60, 0x2c, 0x1, 0xfc, 0x84, 0x12, 0xc1, 0x20, - 0x1f, 0xf5, 0x80, 0x80, 0x18, 0x3, 0xfe, 0x61, - 0x0, 0x30, 0x80, 0x7f, 0xf0, 0x1c, 0x1, 0x60, - 0x1f, 0xfc, 0x1, 0x60, 0x42, 0x0, 0xf8, 0x40, - 0x34, 0x0, 0x20, 0x3, 0xf7, 0xdb, 0x2d, 0x30, - 0x29, 0x80, 0x7c, 0xc2, 0x93, 0x4a, 0x5, 0x60, - 0x1f, 0x9a, 0x4c, 0x0, 0x51, 0xa2, 0x1, 0xf8, - - /* U+7A "z" */ - 0xbf, 0xff, 0xf9, 0x40, 0x3f, 0xf8, 0x3, 0x39, - 0x9f, 0x38, 0x1, 0x10, 0x46, 0x7e, 0x17, 0x2, - 0xa0, 0xf, 0x87, 0xc0, 0x1c, 0x20, 0x1f, 0x51, - 0x5, 0x18, 0x7, 0xd0, 0x80, 0xea, 0x1, 0xf2, - 0x38, 0x24, 0x0, 0x7c, 0x56, 0x3, 0x40, 0x1f, - 0xbc, 0x1, 0xa2, 0x1, 0xf5, 0x10, 0x49, 0x80, - 0x7c, 0xea, 0xc, 0xc0, 0xf, 0x92, 0x0, 0x68, - 0xcf, 0xe1, 0x90, 0x0, 0xe6, 0x7e, 0x93, 0x0, - 0xff, 0xe0, 0x0 -}; - - -/*--------------------- - * GLYPH DESCRIPTION - *--------------------*/ - -static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { - {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, - {.bitmap_index = 0, .adv_w = 121, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 0, .adv_w = 268, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 93, .adv_w = 306, .box_w = 16, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 197, .adv_w = 256, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 292, .adv_w = 306, .box_w = 16, .box_h = 21, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 399, .adv_w = 274, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 493, .adv_w = 158, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 545, .adv_w = 309, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 685, .adv_w = 305, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 747, .adv_w = 125, .box_w = 4, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 764, .adv_w = 127, .box_w = 9, .box_h = 26, .ofs_x = -3, .ofs_y = -5}, - {.bitmap_index = 810, .adv_w = 276, .box_w = 16, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 898, .adv_w = 125, .box_w = 4, .box_h = 21, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 905, .adv_w = 474, .box_w = 26, .box_h = 15, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1000, .adv_w = 305, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1056, .adv_w = 284, .box_w = 16, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, - {.bitmap_index = 1160, .adv_w = 306, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = -5}, - {.bitmap_index = 1266, .adv_w = 306, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = -5}, - {.bitmap_index = 1374, .adv_w = 184, .box_w = 9, .box_h = 15, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1404, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1499, .adv_w = 185, .box_w = 11, .box_h = 19, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1551, .adv_w = 303, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0}, - {.bitmap_index = 1602, .adv_w = 250, .box_w = 17, .box_h = 15, .ofs_x = -1, .ofs_y = 0}, - {.bitmap_index = 1700, .adv_w = 403, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1855, .adv_w = 247, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = 0}, - {.bitmap_index = 1953, .adv_w = 250, .box_w = 17, .box_h = 20, .ofs_x = -1, .ofs_y = -5}, - {.bitmap_index = 2081, .adv_w = 233, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0} -}; - -/*--------------------- - * CHARACTER MAPPING - *--------------------*/ - - - -/*Collect the unicode lists and glyph_id offsets*/ -static const lv_font_fmt_txt_cmap_t cmaps[] = -{ - { - .range_start = 32, .range_length = 1, .glyph_id_start = 1, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - }, - { - .range_start = 97, .range_length = 26, .glyph_id_start = 2, - .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY - } -}; - -/*----------------- - * KERNING - *----------------*/ - - -/*Map glyph_ids to kern left classes*/ -static const uint8_t kern_left_class_mapping[] = -{ - 0, 0, 1, 2, 3, 4, 5, 6, - 0, 1, 0, 0, 7, 4, 1, 1, - 2, 2, 8, 9, 10, 11, 0, 12, - 12, 13, 12, 14 -}; - -/*Map glyph_ids to kern right classes*/ -static const uint8_t kern_right_class_mapping[] = -{ - 0, 0, 1, 2, 3, 3, 3, 0, - 3, 2, 4, 5, 2, 2, 4, 4, - 3, 4, 3, 4, 6, 7, 8, 9, - 9, 10, 9, 11 -}; - -/*Kern values between classes*/ -static const int8_t kern_class_values[] = -{ - 0, 0, 1, 0, 0, 0, 0, 0, - -4, 0, 0, -2, 0, 0, 0, 0, - 0, 0, 0, -7, -8, -4, 0, -3, - -4, 0, 0, 0, 3, 0, -3, -8, - -3, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, -7, 0, 0, 0, - 0, 0, 0, 0, -4, -7, -2, -4, - 0, -4, 36, 19, 0, 0, 0, 4, - 0, 0, -4, 0, -10, -3, 0, -8, - 0, -4, -13, -9, -5, 0, 0, 0, - 0, 22, 0, 0, 0, 0, 0, 0, - -4, -3, -5, -3, 0, -1, 7, 0, - 7, -3, 0, 0, 0, 0, 0, 0, - 0, 0, 0, -4, -4, 0, 0, 0, - -8, 0, 0, 0, -6, 0, -4, 0, - 0, -8, 0, -7, 0, -7, -3, 7, - 0, -4, -13, -4, -4, 0, -8, 0, - 3, -4, 0, -4, -13, 0, -4, 0, - 0, -4, 0, 0, 0, 1, 0, -4, - -4, 0 -}; - - -/*Collect the kern class' data in one place*/ -static const lv_font_fmt_txt_kern_classes_t kern_classes = -{ - .class_pair_values = kern_class_values, - .left_class_mapping = kern_left_class_mapping, - .right_class_mapping = kern_right_class_mapping, - .left_class_cnt = 14, - .right_class_cnt = 11, -}; - -/*-------------------- - * ALL CUSTOM DATA - *--------------------*/ - -/*Store all the custom data of the font*/ -static lv_font_fmt_txt_dsc_t font_dsc = { - .glyph_bitmap = gylph_bitmap, - .glyph_dsc = glyph_dsc, - .cmaps = cmaps, - .kern_dsc = &kern_classes, - .kern_scale = 16, - .cmap_num = 2, - .bpp = 4, - .kern_classes = 1, - .bitmap_format = 1 -}; - - -/*----------------- - * PUBLIC FONT - *----------------*/ - -/*Initialize a public general font descriptor*/ -lv_font_t lv_font_montserrat_28_compr_az = { - .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ - .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ - .line_height = 26, /*The maximum line height required by the font*/ - .base_line = 5, /*Baseline measured from the bottom of the line*/ -#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) - .subpx = LV_FONT_SUBPX_NONE, -#endif - .dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ -}; - -#endif /*#if LV_FONT_MONTSERRAT_28_COMPR_AZ*/ - -#endif - diff --git a/demos/stress/lv_demo_stress.c b/demos/stress/lv_demo_stress.c index feebfbc76..b24744307 100644 --- a/demos/stress/lv_demo_stress.c +++ b/demos/stress/lv_demo_stress.c @@ -44,6 +44,7 @@ static uint32_t mem_free_start = 0; void lv_demo_stress(void) { + LV_LOG_USER("Starting stress test. (< 100 bytes permanent memory leak is normal due to fragmentation)"); lv_timer_create(obj_test_task_cb, LV_DEMO_STRESS_TIME_STEP, NULL); } @@ -59,28 +60,27 @@ static void obj_test_task_cb(lv_timer_t * tmr) lv_anim_t a; lv_obj_t * obj; -// printf("step start: %d\n", state); + // printf("step start: %d\n", state); switch(state) { - case -1: - { - lv_res_t res = lv_mem_test(); - if(res != LV_RES_OK) { - LV_LOG_ERROR("Memory integrity error"); - } + case -1: { + lv_res_t res = lv_mem_test(); + if(res != LV_RES_OK) { + LV_LOG_ERROR("Memory integrity error"); + } - lv_mem_monitor_t mon; - lv_mem_monitor(&mon); + lv_mem_monitor_t mon; + lv_mem_monitor(&mon); - if(mem_free_start == 0) mem_free_start = mon.free_size; + if(mem_free_start == 0) mem_free_start = mon.free_size; - LV_LOG_USER("mem leak since start: %d, frag: %3d %%", mem_free_start - mon.free_size, mon.frag_pct); - } + LV_LOG_USER("mem leak since start: %d, frag: %3d %%", mem_free_start - mon.free_size, mon.frag_pct); + } break; case 0: /* Holder for all object types */ main_page = lv_obj_create(lv_scr_act()); - lv_obj_set_size(main_page, LV_HOR_RES / 2 , LV_VER_RES); + lv_obj_set_size(main_page, LV_HOR_RES / 2, LV_VER_RES); lv_obj_set_flex_flow(main_page, LV_FLEX_FLOW_COLUMN); @@ -90,25 +90,24 @@ static void obj_test_task_cb(lv_timer_t * tmr) lv_label_set_text(obj, "Multi line\n"LV_SYMBOL_OK LV_SYMBOL_CLOSE LV_SYMBOL_WIFI); break; - case 1: - { - obj = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, 50); - lv_obj_set_size(obj, LV_HOR_RES / 2, LV_VER_RES / 2); - lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, 0, 0); - lv_obj_t * t = lv_tabview_add_tab(obj, "First"); - - t = lv_tabview_add_tab(obj, "Second"); - lv_obj_t * c = lv_colorwheel_create(t, true); - lv_obj_set_size(c, 150, 150); - // c = lv_led_create(t, NULL); - // lv_obj_set_pos(c, 160, 20); - t = lv_tabview_add_tab(obj, LV_SYMBOL_EDIT " Edit"); - t = lv_tabview_add_tab(obj, LV_SYMBOL_CLOSE); - - lv_tabview_set_act(obj, 1, LV_ANIM_ON); - auto_del(obj, LV_DEMO_STRESS_TIME_STEP * 5 + 30); - } - break; + case 1: { + obj = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, 50); + lv_obj_set_size(obj, LV_HOR_RES / 2, LV_VER_RES / 2); + lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, 0, 0); + lv_obj_t * t = lv_tabview_add_tab(obj, "First"); + + t = lv_tabview_add_tab(obj, "Second"); + lv_obj_t * c = lv_colorwheel_create(t, true); + lv_obj_set_size(c, 150, 150); + // c = lv_led_create(t, NULL); + // lv_obj_set_pos(c, 160, 20); + t = lv_tabview_add_tab(obj, LV_SYMBOL_EDIT " Edit"); + t = lv_tabview_add_tab(obj, LV_SYMBOL_CLOSE); + + lv_tabview_set_act(obj, 1, LV_ANIM_ON); + auto_del(obj, LV_DEMO_STRESS_TIME_STEP * 5 + 30); + } + break; case 2: obj = lv_btn_create(main_page); @@ -147,12 +146,12 @@ static void obj_test_task_cb(lv_timer_t * tmr) lv_obj_set_style_bg_img_src(obj, LV_SYMBOL_DUMMY"Text from\nstyle", 0); lv_obj_del_async(obj); /*Delete on next call of `lv_task_handler` (so not now)*/ -// obj = lv_btn_create(main_page); -// lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT); -// lv_obj_set_style_bg_img_src(obj, LV_SYMBOL_LEFT); -// lv_obj_set_style_bg_img_opa(obj, LV_OPA_50); -// lv_obj_set_style_bg_img_tiled(obj, true); -// lv_obj_scroll_to_view(obj, LV_ANIM_ON); + // obj = lv_btn_create(main_page); + // lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT); + // lv_obj_set_style_bg_img_src(obj, LV_SYMBOL_LEFT); + // lv_obj_set_style_bg_img_opa(obj, LV_OPA_50); + // lv_obj_set_style_bg_img_tiled(obj, true); + // lv_obj_scroll_to_view(obj, LV_ANIM_ON); break; case 5: @@ -183,19 +182,19 @@ static void obj_test_task_cb(lv_timer_t * tmr) break; case 8: - obj = lv_win_create(lv_scr_act(), 50); - lv_obj_set_size(obj, LV_HOR_RES / 2, LV_VER_RES / 2); - lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, 0, 0); - lv_win_add_title(obj, "Window title"); - lv_win_add_btn(obj, LV_SYMBOL_CLOSE, 40); - lv_win_add_btn(obj, LV_SYMBOL_DOWN, 40); - auto_del(obj, LV_DEMO_STRESS_TIME_STEP * 3 + 5); - - obj = lv_calendar_create(lv_win_get_content(obj)); - break; + obj = lv_win_create(lv_scr_act(), 50); + lv_obj_set_size(obj, LV_HOR_RES / 2, LV_VER_RES / 2); + lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, 0, 0); + lv_win_add_title(obj, "Window title"); + lv_win_add_btn(obj, LV_SYMBOL_CLOSE, 40); + lv_win_add_btn(obj, LV_SYMBOL_DOWN, 40); + auto_del(obj, LV_DEMO_STRESS_TIME_STEP * 3 + 5); + + obj = lv_calendar_create(lv_win_get_content(obj)); + break; case 9: lv_textarea_set_text(ta, "A very very long text which will should make the text area scrollable" - "Here area some dummy sentences to be sure the text area will be really scrollable."); + "Here area some dummy sentences to be sure the text area will be really scrollable."); break; case 10: obj = lv_keyboard_create(lv_scr_act()); @@ -257,27 +256,26 @@ static void obj_test_task_cb(lv_timer_t * tmr) lv_textarea_set_one_line(ta, false); break; - case 16: - { - lv_obj_t * tv = lv_tileview_create(lv_scr_act()); - lv_obj_set_size(tv, 200, 200); - auto_del(tv, LV_DEMO_STRESS_TIME_STEP * 4 + 5); + case 16: { + lv_obj_t * tv = lv_tileview_create(lv_scr_act()); + lv_obj_set_size(tv, 200, 200); + auto_del(tv, LV_DEMO_STRESS_TIME_STEP * 4 + 5); - obj = lv_tileview_add_tile(tv, 0, 0, LV_DIR_ALL); - obj = lv_label_create(obj); - lv_label_set_text(obj, "Tile: 0;0"); + obj = lv_tileview_add_tile(tv, 0, 0, LV_DIR_ALL); + obj = lv_label_create(obj); + lv_label_set_text(obj, "Tile: 0;0"); - obj = lv_tileview_add_tile(tv, 0, 1, LV_DIR_ALL); - obj = lv_label_create(obj); - lv_label_set_text(obj, "Tile: 0;1"); + obj = lv_tileview_add_tile(tv, 0, 1, LV_DIR_ALL); + obj = lv_label_create(obj); + lv_label_set_text(obj, "Tile: 0;1"); - obj = lv_tileview_add_tile(tv, 1, 1, LV_DIR_ALL); - obj = lv_label_create(obj); - lv_label_set_text(obj, "Tile: 1;1"); + obj = lv_tileview_add_tile(tv, 1, 1, LV_DIR_ALL); + obj = lv_label_create(obj); + lv_label_set_text(obj, "Tile: 1;1"); - lv_obj_set_tile_id(tv, 1, 1, LV_ANIM_ON); - } - break; + lv_obj_set_tile_id(tv, 1, 1, LV_ANIM_ON); + } + break; case 18: obj = lv_list_create(main_page); @@ -423,8 +421,8 @@ static void obj_test_task_cb(lv_timer_t * tmr) break; } -// printf("step end: %d\n", state); - state ++; + // printf("step end: %d\n", state); + state++; } static void auto_del(lv_obj_t * obj, uint32_t delay) diff --git a/demos/widgets/lv_demo_widgets.c b/demos/widgets/lv_demo_widgets.c index 0606adc04..839b999c0 100644 --- a/demos/widgets/lv_demo_widgets.c +++ b/demos/widgets/lv_demo_widgets.c @@ -11,7 +11,7 @@ #if LV_USE_DEMO_WIDGETS #if LV_MEM_CUSTOM == 0 && LV_MEM_SIZE < (38ul * 1024ul) - #error Insufficient memory for lv_demo_widgets. Please set LV_MEM_SIZE to at least 38KB (38ul * 1024ul). 48KB is recommended. + #error Insufficient memory for lv_demo_widgets. Please set LV_MEM_SIZE to at least 38KB (38ul * 1024ul). 48KB is recommended. #endif /********************* @@ -25,7 +25,7 @@ typedef enum { DISP_SMALL, DISP_MEDIUM, DISP_LARGE, -}disp_size_t; +} disp_size_t; /********************** * STATIC PROTOTYPES @@ -35,8 +35,10 @@ static void analytics_create(lv_obj_t * parent); static void shop_create(lv_obj_t * parent); static void color_changer_create(lv_obj_t * parent); -static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const char * text1, const char * text2, const char * text3); -static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_src, const char * name, const char * category, const char * price); +static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const char * text1, const char * text2, + const char * text3); +static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_src, const char * name, const char * category, + const char * price); static void color_changer_event_cb(lv_event_t * e); static void color_event_cb(lv_event_t * e); @@ -114,7 +116,8 @@ void lv_demo_widgets(void) #else LV_LOG_WARN("LV_FONT_MONTSERRAT_16 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif - } else if(disp_size == DISP_MEDIUM) { + } + else if(disp_size == DISP_MEDIUM) { tab_h = 45; #if LV_FONT_MONTSERRAT_20 font_large = &lv_font_montserrat_20; @@ -126,22 +129,24 @@ void lv_demo_widgets(void) #else LV_LOG_WARN("LV_FONT_MONTSERRAT_14 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif - } else { /* disp_size == DISP_SMALL */ + } + else { /* disp_size == DISP_SMALL */ tab_h = 45; #if LV_FONT_MONTSERRAT_18 font_large = &lv_font_montserrat_18; #else - LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); + LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif #if LV_FONT_MONTSERRAT_12 font_normal = &lv_font_montserrat_12; #else - LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); + LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead."); #endif } #if LV_USE_THEME_DEFAULT - lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK, font_normal); + lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK, + font_normal); #endif lv_style_init(&style_text_muted); @@ -210,7 +215,7 @@ static void profile_create(lv_obj_t * parent) lv_obj_t * dsc = lv_label_create(panel1); lv_obj_add_style(dsc, &style_text_muted, 0); - lv_label_set_text(dsc, "This is a short description of me. Take a look at my profile!" ); + lv_label_set_text(dsc, "This is a short description of me. Take a look at my profile!"); lv_label_set_long_mode(dsc, LV_LABEL_LONG_WRAP); lv_obj_t * email_icn = lv_label_create(panel1); @@ -325,14 +330,14 @@ static void profile_create(lv_obj_t * parent) static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid_2_row_dsc[] = { - LV_GRID_CONTENT, /*Title*/ - 5, /*Separator*/ - LV_GRID_CONTENT, /*Box title*/ - 30, /*Boxes*/ - 5, /*Separator*/ - LV_GRID_CONTENT, /*Box title*/ - 30, /*Boxes*/ - LV_GRID_TEMPLATE_LAST + LV_GRID_CONTENT, /*Title*/ + 5, /*Separator*/ + LV_GRID_CONTENT, /*Box title*/ + 30, /*Boxes*/ + 5, /*Separator*/ + LV_GRID_CONTENT, /*Box title*/ + 30, /*Boxes*/ + LV_GRID_TEMPLATE_LAST }; @@ -382,27 +387,28 @@ static void profile_create(lv_obj_t * parent) /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = {LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid_1_row_dsc[] = { - LV_GRID_CONTENT, /*Name*/ - LV_GRID_CONTENT, /*Description*/ - LV_GRID_CONTENT, /*Email*/ - -20, - LV_GRID_CONTENT, /*Phone*/ - LV_GRID_CONTENT, /*Buttons*/ - LV_GRID_TEMPLATE_LAST}; + LV_GRID_CONTENT, /*Name*/ + LV_GRID_CONTENT, /*Description*/ + LV_GRID_CONTENT, /*Email*/ + -20, + LV_GRID_CONTENT, /*Phone*/ + LV_GRID_CONTENT, /*Buttons*/ + LV_GRID_TEMPLATE_LAST + }; static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid_2_row_dsc[] = { - LV_GRID_CONTENT, /*Title*/ - 5, /*Separator*/ - LV_GRID_CONTENT, /*Box title*/ - 40, /*Box*/ - LV_GRID_CONTENT, /*Box title*/ - 40, /*Box*/ - LV_GRID_CONTENT, /*Box title*/ - 40, /*Box*/ - LV_GRID_CONTENT, /*Box title*/ - 40, /*Box*/ - LV_GRID_TEMPLATE_LAST + LV_GRID_CONTENT, /*Title*/ + 5, /*Separator*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_TEMPLATE_LAST }; @@ -454,29 +460,30 @@ static void profile_create(lv_obj_t * parent) /*Create the top panel*/ static lv_coord_t grid_1_col_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid_1_row_dsc[] = {LV_GRID_CONTENT, /*Avatar*/ - LV_GRID_CONTENT, /*Name*/ - LV_GRID_CONTENT, /*Description*/ - LV_GRID_CONTENT, /*Email*/ - LV_GRID_CONTENT, /*Phone number*/ - LV_GRID_CONTENT, /*Button1*/ - LV_GRID_CONTENT, /*Button2*/ - LV_GRID_TEMPLATE_LAST}; + LV_GRID_CONTENT, /*Name*/ + LV_GRID_CONTENT, /*Description*/ + LV_GRID_CONTENT, /*Email*/ + LV_GRID_CONTENT, /*Phone number*/ + LV_GRID_CONTENT, /*Button1*/ + LV_GRID_CONTENT, /*Button2*/ + LV_GRID_TEMPLATE_LAST + }; lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc); static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid_2_row_dsc[] = { - LV_GRID_CONTENT, /*Title*/ - 5, /*Separator*/ - LV_GRID_CONTENT, /*Box title*/ - 40, /*Box*/ - LV_GRID_CONTENT, /*Box title*/ - 40, /*Box*/ - LV_GRID_CONTENT, /*Box title*/ - 40, /*Box*/ - LV_GRID_CONTENT, /*Box title*/ - 40, LV_GRID_TEMPLATE_LAST /*Box*/ + LV_GRID_CONTENT, /*Title*/ + 5, /*Separator*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, /*Box*/ + LV_GRID_CONTENT, /*Box title*/ + 40, LV_GRID_TEMPLATE_LAST /*Box*/ }; lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc); @@ -638,7 +645,7 @@ static void analytics_create(lv_obj_t * parent) lv_chart_set_next_value(chart2, ser3, lv_rand(10, 80)); lv_meter_scale_t * scale; - lv_meter_indicator_t *indic; + lv_meter_indicator_t * indic; meter1 = create_meter_box(parent, "Monthly Target", "Revenue: 63%", "Sales: 44%", "Costs: 58%"); lv_obj_add_flag(lv_obj_get_parent(meter1), LV_OBJ_FLAG_FLEX_IN_NEW_TRACK); scale = lv_meter_add_scale(meter1); @@ -715,7 +722,8 @@ static void analytics_create(lv_obj_t * parent) lv_meter_set_indicator_start_value(meter3, indic, 0); lv_meter_set_indicator_end_value(meter3, indic, 20); - indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_RED, 3), lv_palette_darken(LV_PALETTE_RED, 3), true, 0); + indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_RED, 3), lv_palette_darken(LV_PALETTE_RED, + 3), true, 0); lv_meter_set_indicator_start_value(meter3, indic, 0); lv_meter_set_indicator_end_value(meter3, indic, 20); @@ -723,7 +731,8 @@ static void analytics_create(lv_obj_t * parent) lv_meter_set_indicator_start_value(meter3, indic, 20); lv_meter_set_indicator_end_value(meter3, indic, 40); - indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_BLUE, 3), lv_palette_darken(LV_PALETTE_BLUE, 3), true, 0); + indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_BLUE, 3), + lv_palette_darken(LV_PALETTE_BLUE, 3), true, 0); lv_meter_set_indicator_start_value(meter3, indic, 20); lv_meter_set_indicator_end_value(meter3, indic, 40); @@ -731,7 +740,8 @@ static void analytics_create(lv_obj_t * parent) lv_meter_set_indicator_start_value(meter3, indic, 40); lv_meter_set_indicator_end_value(meter3, indic, 60); - indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_GREEN, 3), lv_palette_darken(LV_PALETTE_GREEN, 3), true, 0); + indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_GREEN, 3), + lv_palette_darken(LV_PALETTE_GREEN, 3), true, 0); lv_meter_set_indicator_start_value(meter3, indic, 40); lv_meter_set_indicator_end_value(meter3, indic, 60); @@ -758,7 +768,8 @@ static void analytics_create(lv_obj_t * parent) lv_obj_set_size(meter1, 200, 200); lv_obj_set_size(meter2, 200, 200); lv_obj_set_size(meter3, 200, 200); - } else { + } + else { lv_coord_t meter_w = lv_obj_get_width(meter1); lv_obj_set_height(meter1, meter_w); lv_obj_set_height(meter2, meter_w); @@ -836,13 +847,14 @@ void shop_create(lv_obj_t * parent) lv_obj_set_grid_cell(amount, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 3, 1); lv_obj_set_grid_cell(hint, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 4, 1); lv_obj_set_grid_cell(chart3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 0, 5); - } else if(disp_size == DISP_MEDIUM) { + } + else if(disp_size == DISP_MEDIUM) { static lv_coord_t grid1_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid1_row_dsc[] = { - LV_GRID_CONTENT, /*Title + Date*/ - LV_GRID_CONTENT, /*Amount + Hint*/ - 200, /*Chart*/ - LV_GRID_TEMPLATE_LAST + LV_GRID_CONTENT, /*Title + Date*/ + LV_GRID_CONTENT, /*Amount + Hint*/ + 200, /*Chart*/ + LV_GRID_TEMPLATE_LAST }; lv_obj_update_layout(panel1); @@ -855,15 +867,16 @@ void shop_create(lv_obj_t * parent) lv_obj_set_grid_cell(amount, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_CENTER, 1, 1); lv_obj_set_grid_cell(hint, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_CENTER, 1, 1); lv_obj_set_grid_cell(chart3, LV_GRID_ALIGN_END, 0, 2, LV_GRID_ALIGN_STRETCH, 2, 1); - } else if(disp_size == DISP_SMALL) { + } + else if(disp_size == DISP_SMALL) { static lv_coord_t grid1_col_dsc[] = {LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid1_row_dsc[] = { - LV_GRID_CONTENT, /*Title*/ - LV_GRID_CONTENT, /*Date*/ - LV_GRID_CONTENT, /*Amount*/ - LV_GRID_CONTENT, /*Hint*/ - LV_GRID_CONTENT, /*Chart*/ - LV_GRID_TEMPLATE_LAST + LV_GRID_CONTENT, /*Title*/ + LV_GRID_CONTENT, /*Date*/ + LV_GRID_CONTENT, /*Amount*/ + LV_GRID_CONTENT, /*Hint*/ + LV_GRID_CONTENT, /*Chart*/ + LV_GRID_TEMPLATE_LAST }; lv_obj_set_width(chart3, LV_PCT(95)); @@ -883,7 +896,8 @@ void shop_create(lv_obj_t * parent) if(disp_size == DISP_SMALL) { lv_obj_add_flag(list, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK); lv_obj_set_height(list, LV_PCT(100)); - } else { + } + else { lv_obj_set_height(list, LV_PCT(100)); lv_obj_set_style_max_height(list, 300, 0); } @@ -907,7 +921,8 @@ void shop_create(lv_obj_t * parent) if(disp_size == DISP_SMALL) { lv_obj_add_flag(notifications, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK); lv_obj_set_height(notifications, LV_PCT(100)); - } else { + } + else { lv_obj_set_height(notifications, LV_PCT(100)); lv_obj_set_style_max_height(notifications, 300, 0); } @@ -947,8 +962,9 @@ void shop_create(lv_obj_t * parent) static void color_changer_create(lv_obj_t * parent) { static lv_palette_t palette[] = { - LV_PALETTE_BLUE, LV_PALETTE_GREEN, LV_PALETTE_BLUE_GREY, LV_PALETTE_ORANGE, - LV_PALETTE_RED, LV_PALETTE_PURPLE, LV_PALETTE_TEAL, _LV_PALETTE_LAST }; + LV_PALETTE_BLUE, LV_PALETTE_GREEN, LV_PALETTE_BLUE_GREY, LV_PALETTE_ORANGE, + LV_PALETTE_RED, LV_PALETTE_PURPLE, LV_PALETTE_TEAL, _LV_PALETTE_LAST + }; lv_obj_t * color_cont = lv_obj_create(parent); lv_obj_remove_style_all(color_cont); @@ -987,12 +1003,13 @@ static void color_changer_create(lv_obj_t * parent) lv_obj_set_style_bg_img_src(btn, LV_SYMBOL_TINT, 0); if(disp_size == DISP_SMALL) { - lv_obj_set_size(btn, LV_DPX(42), LV_DPX(42)); - lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15)); - } else { - lv_obj_set_size(btn, LV_DPX(50), LV_DPX(50)); - lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15)); - } + lv_obj_set_size(btn, LV_DPX(42), LV_DPX(42)); + lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15)); + } + else { + lv_obj_set_size(btn, LV_DPX(50), LV_DPX(50)); + lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15)); + } } static void color_changer_anim_cb(void * var, int32_t v) @@ -1005,7 +1022,8 @@ static void color_changer_anim_cb(void * var, int32_t v) w = lv_map(v, 0, 256, LV_DPX(52), max_w); lv_obj_set_width(obj, w); lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10)); - } else { + } + else { w = lv_map(v, 0, 256, LV_DPX(60), max_w); lv_obj_set_width(obj, w); lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10)); @@ -1020,7 +1038,7 @@ static void color_changer_anim_cb(void * var, int32_t v) } -static void color_changer_event_cb(lv_event_t *e) +static void color_changer_event_cb(lv_event_t * e) { if(lv_event_get_code(e) == LV_EVENT_CLICKED) { lv_obj_t * color_cont = lv_event_get_user_data(e); @@ -1032,7 +1050,8 @@ static void color_changer_event_cb(lv_event_t *e) lv_anim_set_values(&a, 0, 256); lv_anim_set_time(&a, 200); lv_anim_start(&a); - } else { + } + else { lv_anim_t a; lv_anim_init(&a); lv_anim_set_var(&a, color_cont); @@ -1064,9 +1083,10 @@ static void color_event_cb(lv_event_t * e) lv_palette_t * palette_primary = lv_event_get_user_data(e); lv_palette_t palette_secondary = (*palette_primary) + 3; /*Use another palette as secondary*/ if(palette_secondary >= _LV_PALETTE_LAST) palette_secondary = 0; - - lv_theme_default_init(NULL, lv_palette_main(*palette_primary), lv_palette_main(palette_secondary), LV_THEME_DEFAULT_DARK, font_normal); - +#if LV_USE_THEME_DEFAULT + lv_theme_default_init(NULL, lv_palette_main(*palette_primary), lv_palette_main(palette_secondary), + LV_THEME_DEFAULT_DARK, font_normal); +#endif lv_color_t color = lv_palette_main(*palette_primary); lv_style_set_text_color(&style_icon, color); lv_chart_set_series_color(chart1, ser1, color); @@ -1074,7 +1094,8 @@ static void color_event_cb(lv_event_t * e) } } -static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const char * text1, const char * text2, const char * text3) +static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const char * text1, const char * text2, + const char * text3) { lv_obj_t * cont = lv_obj_create(parent); lv_obj_set_height(cont, LV_SIZE_CONTENT); @@ -1114,7 +1135,7 @@ static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const lv_label_set_text(label3, text3); if(disp_size == DISP_MEDIUM) { - static lv_coord_t grid_col_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_CONTENT,LV_GRID_FR(8), LV_GRID_TEMPLATE_LAST}; + static lv_coord_t grid_col_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_CONTENT, LV_GRID_FR(8), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; lv_obj_set_grid_dsc_array(cont, grid_col_dsc, grid_row_dsc); @@ -1146,7 +1167,8 @@ static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const } -static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_src, const char * name, const char * category, const char * price) +static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_src, const char * name, const char * category, + const char * price) { static lv_coord_t grid_col_dsc[] = {LV_GRID_CONTENT, 5, LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; static lv_coord_t grid_row_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; @@ -1257,9 +1279,10 @@ static void slider_event_cb(lv_event_t * e) lv_obj_t * obj = lv_event_get_target(e); if(code == LV_EVENT_REFR_EXT_DRAW_SIZE) { - lv_coord_t *s = lv_event_get_param(e); + lv_coord_t * s = lv_event_get_param(e); *s = LV_MAX(*s, 60); - } else if(code == LV_EVENT_DRAW_PART_END) { + } + else if(code == LV_EVENT_DRAW_PART_END) { lv_obj_draw_part_dsc_t * dsc = lv_event_get_param(e); if(dsc->part == LV_PART_KNOB && lv_obj_has_state(obj, LV_STATE_PRESSED)) { char buf[8]; @@ -1310,7 +1333,8 @@ static void chart_event_cb(lv_event_t * e) if(lv_chart_get_type(obj) == LV_CHART_TYPE_BAR) { const char * month[] = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"}; lv_snprintf(dsc->text, dsc->text_length, "%s", month[dsc->value]); - } else { + } + else { const char * month[] = {"Jan", "Febr", "March", "Apr", "May", "Jun", "July", "Aug", "Sept", "Oct", "Nov", "Dec"}; lv_snprintf(dsc->text, dsc->text_length, "%s", month[dsc->value]); } @@ -1322,13 +1346,15 @@ static void chart_event_cb(lv_event_t * e) /*Add a line mask that keeps the area below the line*/ if(dsc->p1 && dsc->p2) { lv_draw_mask_line_param_t line_mask_param; - lv_draw_mask_line_points_init(&line_mask_param, dsc->p1->x, dsc->p1->y, dsc->p2->x, dsc->p2->y, LV_DRAW_MASK_LINE_SIDE_BOTTOM); + lv_draw_mask_line_points_init(&line_mask_param, dsc->p1->x, dsc->p1->y, dsc->p2->x, dsc->p2->y, + LV_DRAW_MASK_LINE_SIDE_BOTTOM); int16_t line_mask_id = lv_draw_mask_add(&line_mask_param, NULL); /*Add a fade effect: transparent bottom covering top*/ lv_coord_t h = lv_obj_get_height(obj); lv_draw_mask_fade_param_t fade_mask_param; - lv_draw_mask_fade_init(&fade_mask_param, &obj->coords, LV_OPA_COVER, obj->coords.y1 + h / 8, LV_OPA_TRANSP, obj->coords.y2); + lv_draw_mask_fade_init(&fade_mask_param, &obj->coords, LV_OPA_COVER, obj->coords.y1 + h / 8, LV_OPA_TRANSP, + obj->coords.y2); int16_t fade_mask_id = lv_draw_mask_add(&fade_mask_param, NULL); /*Draw a rectangle that will be affected by the mask*/ @@ -1361,7 +1387,8 @@ static void chart_event_cb(lv_event_t * e) if(lv_chart_get_type(obj) == LV_CHART_TYPE_LINE) { dsc->rect_dsc->outline_color = lv_color_white(); dsc->rect_dsc->outline_width = 2; - } else { + } + else { dsc->rect_dsc->shadow_color = ser->color; dsc->rect_dsc->shadow_width = 15; dsc->rect_dsc->shadow_spread = 0; @@ -1380,11 +1407,13 @@ static void chart_event_cb(lv_event_t * e) if(ser == lv_chart_get_series_next(obj, NULL)) { txt_area.x1 = dsc->draw_area->x1 + lv_area_get_width(dsc->draw_area) / 2; txt_area.x2 = txt_area.x1 + text_size.x; - } else { + } + else { txt_area.x2 = dsc->draw_area->x1 + lv_area_get_width(dsc->draw_area) / 2; txt_area.x1 = txt_area.x2 - text_size.x; } - } else { + } + else { txt_area.x1 = dsc->draw_area->x1 + lv_area_get_width(dsc->draw_area) / 2 - text_size.x / 2; txt_area.x2 = txt_area.x1 + text_size.x; txt_area.y2 = dsc->draw_area->y1 - LV_DPX(15); @@ -1408,7 +1437,8 @@ static void chart_event_cb(lv_event_t * e) label_dsc.color = lv_color_white(); label_dsc.font = font_normal; lv_draw_label(dsc->draw_ctx, &label_dsc, &txt_area, buf, NULL); - } else { + } + else { dsc->rect_dsc->outline_width = 0; dsc->rect_dsc->shadow_width = 0; } @@ -1455,15 +1485,15 @@ static void shop_chart_event_cb(lv_event_t * e) lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a); a.y1 = a.y2 - 4; /*-4 to overlap the radius*/ - a.y2 = a.y1 + (clothes[dsc->id] * h) / 100; + a.y2 = a.y1 + (clothes[dsc->id] * h) / 100; draw_rect_dsc.bg_color = lv_palette_main(LV_PALETTE_BLUE); draw_rect_dsc.radius = 0; - lv_draw_rect( dsc->draw_ctx, &draw_rect_dsc, &a); + lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a); a.y1 = a.y2; a.y2 = a.y1 + (services[dsc->id] * h) / 100; draw_rect_dsc.bg_color = lv_palette_main(LV_PALETTE_GREEN); - lv_draw_rect( dsc->draw_ctx, &draw_rect_dsc, &a); + lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a); } } } @@ -1509,7 +1539,8 @@ static void meter2_timer_cb(lv_timer_t * timer) if(down1) { session_desktop -= 137; if(session_desktop < 1400) down1 = false; - } else { + } + else { session_desktop += 116; if(session_desktop > 4500) down1 = true; } @@ -1517,7 +1548,8 @@ static void meter2_timer_cb(lv_timer_t * timer) if(down2) { session_tablet -= 3; if(session_tablet < 1400) down2 = false; - } else { + } + else { session_tablet += 9; if(session_tablet > 4500) down2 = true; } @@ -1525,7 +1557,8 @@ static void meter2_timer_cb(lv_timer_t * timer) if(down3) { session_mobile -= 57; if(session_mobile < 1400) down3 = false; - } else { + } + else { session_mobile += 76; if(session_mobile > 4500) down3 = true; } diff --git a/demos/widgets/lv_demo_widgets.py b/demos/widgets/lv_demo_widgets.py index 149c78080..ed2e05904 100755 --- a/demos/widgets/lv_demo_widgets.py +++ b/demos/widgets/lv_demo_widgets.py @@ -17,7 +17,7 @@ LV_ANIM_REPEAT_INFINITE = -1 # Register SDL display driver. - + disp_buf1 = lv.disp_buf_t() buf1_1 = bytes(480 * 10) disp_buf1.init(buf1_1, None, len(buf1_1)//4) @@ -32,7 +32,7 @@ # Register SDL mouse driver indev_drv = lv.indev_drv_t() -indev_drv.init() +indev_drv.init() indev_drv.type = lv.INDEV_TYPE.POINTER indev_drv.read_cb = SDL.mouse_read indev_drv.register() @@ -55,7 +55,7 @@ def LV_DPX(n): return tmp else: return 1 - + def color_chg_event_cb(sw, e): if e == lv.EVENT.VALUE_CHANGED: flag = lv.THEME_MATERIAL_FLAG.LIGHT @@ -63,7 +63,7 @@ def color_chg_event_cb(sw, e): flag=lv.THEME_MATERIAL_FLAG.DARK theme = lv.theme_material_init(LV_THEME_DEFAULT_COLOR_PRIMARY,LV_THEME_DEFAULT_COLOR_SECONDARY,flag, lv.theme_get_font_small(), lv.theme_get_font_normal(), lv.theme_get_font_subtitle(), - lv.theme_get_font_title()) + lv.theme_get_font_title()) def slider_event_cb(slider, e): if e == lv.EVENT.VALUE_CHANGED: if slider.get_type() == lv.slider.TYPE.NORMAL: @@ -75,19 +75,19 @@ def slider_event_cb(slider, e): slider_string = str(slider_left) + '-' + str(slider_right) # print("slider left value: %d, slider right value: %d"%(slider_left,slider_right)) slider.set_style_local_value_str(lv.slider.PART.INDIC, lv.STATE.DEFAULT, slider_string) - + def linemeter_anim(a,lmeter, value): lmeter.set_value(value) label = lmeter.get_child(None) label.set_text(str(value)) label.align(lmeter, lv.ALIGN.CENTER, 0, 0) - + def gauge_anim(a,gauge,val): gauge.set_value(0,val) label=gauge.get_child(None) label.set_text(str(val)) label.align(gauge, lv.ALIGN.CENTER, 0, 0) - + def bar_anim(task,bar): val = bar.get_value() # print("bar value: ",val) @@ -95,11 +95,11 @@ def bar_anim(task,bar): val += 1 if val > max_value: val=0 - bar.set_value(val,lv.ANIM.OFF) + bar.set_value(val,lv.ANIM.OFF) cpy_string = "Copying %d/%d"% (val, max_value) # print(cpy_string) bar.set_style_local_value_str(lv.bar.PART.BG, lv.STATE.DEFAULT, cpy_string) - + def arc_phase1_ready_cb(a,arc): a_arc=lv.anim_t() a_arc.init() @@ -117,19 +117,19 @@ def arc_phase2_ready_cb(a,arc): a_arc.set_values(0, 360) a_arc.set_ready_cb(lambda a: arc_phase1_ready_cb(a,arc)) lv.anim_t.start(a_arc) - + def anim_phase1(a,arc,val): arc.set_end_angle(val) label = arc.get_child(None) label.set_text(str(val)) label.align(arc, lv.ALIGN.CENTER, 0, 0) - + def anim_phase2(a,arc,val): arc.set_end_angle(val) label = arc.get_child(None) label.set_text(str(val)) label.align(arc, lv.ALIGN.CENTER, 0, 0) - + def controls_create(parent): lv.page.set_scrl_layout(lv.page.__cast__(parent), lv.LAYOUT.PRETTY_TOP) if LV_DEMO_WIDGETS_SLIDESHOW == 0: @@ -139,15 +139,15 @@ def controls_create(parent): btnm = lv.btnmatrix.__cast__(m.get_btnmatrix()) # print("type(btnm): ",type(btnm)) btnm.set_btn_ctrl(1, lv.btnmatrix.CTRL.CHECK_STATE) - + h = lv.cont(parent, None) h.set_layout(lv.LAYOUT.PRETTY_MID) h.add_style(lv.cont.PART.MAIN, style_box) h.set_drag_parent(True) - + h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Basics") - - disp_size = display.get_size_category() + + disp_size = display.get_size_category() if disp_size <= lv.DISP_SIZE.SMALL: grid_w= lv.page.get_width_grid(lv.page.__cast__(parent),1,1) # print("grid_w: ",grid_w) @@ -157,23 +157,23 @@ def controls_create(parent): h.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT) h.set_width(grid_w) - btn = lv.btn(h,None) + btn = lv.btn(h,None) btn.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT) if disp_size <= lv.DISP_SIZE.SMALL: button_width=h.get_width_grid(1,1) else: button_width=h.get_width_grid(2,1) # print("button_width: %d"%button_width) - + btn.set_width(button_width) label = lv.label(btn, None) label.set_text("Button") - + btn = lv.btn(h, btn) btn.toggle() label = lv.label(btn, None) label.set_text("Button") - + lv.switch(h, None) lv.checkbox(h, None) @@ -184,7 +184,7 @@ def controls_create(parent): slider.set_value(40, lv.ANIM.OFF) slider.set_event_cb(slider_event_cb) slider.set_width_margin(fit_w); - + # Use the knobs style value the display the current value in focused state slider.set_style_local_margin_top(lv.slider.PART.BG, lv.STATE.DEFAULT, LV_DPX(25)) slider.set_style_local_value_font(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.theme_get_font_small()) @@ -194,7 +194,7 @@ def controls_create(parent): slider.set_style_local_transition_time(lv.slider.PART.KNOB, lv.STATE.DEFAULT, 300) slider.set_style_local_transition_prop_5(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.STYLE.VALUE_OFS_Y) slider.set_style_local_transition_prop_6(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.STYLE.VALUE_OPA) - + slider = lv.slider(h, None) slider.set_type(lv.slider.TYPE.RANGE) slider.set_value(70, lv.ANIM.OFF) @@ -206,11 +206,11 @@ def controls_create(parent): lv.event_send(slider,lv.EVENT.VALUE_CHANGED, None) # To refresh the text if slider.get_width() > fit_w: slider.set_width(fit_w) - + h = lv.cont(parent, h) h.set_fit(lv.FIT.NONE) h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Text input") - + ta = lv.textarea(h, None) lv.cont.set_fit2(h,lv.FIT.PARENT, lv.FIT.NONE) ta.set_text("") @@ -258,7 +258,7 @@ def visuals_create(parent): chart.set_div_line_count(3, 0) chart.set_point_count(8) chart.set_type(lv.chart.TYPE.LINE) - + if disp_size > lv.DISP_SIZE.SMALL: chart.set_style_local_pad_left(lv.chart.PART.BG, lv.STATE.DEFAULT, 4 * (LV_DPI // 10)) chart.set_style_local_pad_bottom(lv.chart.PART.BG, lv.STATE.DEFAULT, 3 * (LV_DPI // 10)) @@ -268,7 +268,7 @@ def visuals_create(parent): chart.set_x_tick_length(0, 0) chart.set_y_tick_texts("600\n500\n400\n300\n200", 0, lv.chart.AXIS.DRAW_LAST_TICK) chart.set_x_tick_texts("Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug", 0, lv.chart.AXIS.DRAW_LAST_TICK) - + s1 = chart.add_series(LV_THEME_DEFAULT_COLOR_PRIMARY) s2 = chart.add_series(LV_THEME_DEFAULT_COLOR_SECONDARY) @@ -282,7 +282,7 @@ def visuals_create(parent): chart.set_next(s1, 60) chart.set_next(s1, 10) chart.set_next(s1, 90) - + chart.set_next(s2, 32) chart.set_next(s2, 66) chart.set_next(s2, 5) @@ -333,7 +333,7 @@ def visuals_create(parent): grid_w_meter = lv.page.get_width_grid(page, 2, 1) else: grid_w_meter = lv.page.get_width_grid(page, 3, 1) - + meter_h = lv.page.get_height_fit(page) if grid_w_meter < meter_h: meter_size = grid_w_meter @@ -359,7 +359,7 @@ def visuals_create(parent): a_lm.set_playback_time(1000) a_lm.set_repeat_count(LV_ANIM_REPEAT_INFINITE) lv.anim_t.start(a_lm) - + gauge = lv.gauge(parent, None) gauge.set_drag_parent(True) gauge.set_size(meter_size, meter_size) @@ -378,7 +378,7 @@ def visuals_create(parent): a_ga.set_repeat_count(LV_ANIM_REPEAT_INFINITE) a_ga.set_custom_exec_cb(lambda a, val: gauge_anim(a,gauge,val)) lv.anim_t.start(a_ga) - + arc = lv.arc(parent,None) arc.set_drag_parent(True) arc.set_bg_angles(0, 360) @@ -412,7 +412,7 @@ def visuals_create(parent): bar_h.set_width(lv.page.get_width_grid(page, 2, 1)) else: bar_h.set_width(lv.page.get_width_grid(parent, 3, 2)) - + bar = lv.bar(bar_h,None) bar.set_width(lv.cont.get_width_fit(bar_h)) bar.set_style_local_value_font(lv.bar.PART.BG, lv.STATE.DEFAULT, lv.theme_get_font_small()) @@ -421,7 +421,7 @@ def visuals_create(parent): bar.set_style_local_margin_bottom(lv.bar.PART.BG, lv.STATE.DEFAULT, LV_DPI // 7) bar.align(None, lv.ALIGN.CENTER, 0, 0) bar.set_value(30,lv.ANIM.OFF) - + led_h = lv.cont(parent, None) led_h.set_layout(lv.LAYOUT.PRETTY_MID) if disp_size <= lv.DISP_SIZE.SMALL: @@ -459,9 +459,9 @@ def visuals_create(parent): def selectors_create(parent): page = lv.page.__cast__(parent) lv.page.set_scrl_layout(page, lv.LAYOUT.PRETTY_MID) - + grid_h = page.get_height_grid(1, 1) - + if disp_size <= lv.DISP_SIZE.SMALL: grid_w = page.get_width_grid(1, 1) else: @@ -497,7 +497,7 @@ def selectors_create(parent): h.set_style_local_pad_top(lv.cont.PART_MAIN, LV_STATE_DEFAULT, 0); h.set_size(min(grid_h, grid_w), min(grid_h, grid_w)) h.set_layout(lv.LAYOUT.PRETTY_TOP) - + roller = lv.roller(h, None) roller.add_style(lv.cont.PART.MAIN, style_box) roller.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Roller") @@ -508,8 +508,8 @@ def selectors_create(parent): roller.set_width(lv.cont.get_width_grid(h, 1 , 1)) else: roller.set_width(lv.cont.get_width_grid(h, 2 , 1)) - - + + dd = lv.dropdown(h, None) dd.add_style(lv.cont.PART.MAIN, style_box) dd.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Dropdown") @@ -517,20 +517,20 @@ def selectors_create(parent): dd.set_width(lv.cont.get_width_grid(h, 1 , 1)) else: dd.set_width(lv.cont.get_width_grid(h, 2 , 1)) - + dd.set_options("Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf\nHotel\nIndia\nJuliette\nKilo\nLima\nMike\nNovember\n" "Oscar\nPapa\nQuebec\nRomeo\nSierra\nTango\nUniform\nVictor\nWhiskey\nXray\nYankee\nZulu") - + list = lv.list(parent, None) list.set_scroll_propagation(True) list.set_size(grid_w, grid_h) - + txts = [lv.SYMBOL.SAVE, "Save", lv.SYMBOL.CUT, "Cut", lv.SYMBOL.COPY, "Copy", lv.SYMBOL.OK, "This is a quite long text to scroll on the list", lv.SYMBOL.EDIT, "Edit", lv.SYMBOL.WIFI, "Wifi", lv.SYMBOL.BLUETOOTH, "Bluetooth", lv.SYMBOL.GPS, "GPS", lv.SYMBOL.USB, "USB", lv.SYMBOL.SD_CARD, "SD card", lv.SYMBOL.CLOSE, "Close"] - - + + for i in range(0,len(txts)//2,2): btn = list.add_btn(txts[i], txts[i + 1]); lv.btn.set_checkable(lv.btn.__cast__(btn),True) @@ -538,9 +538,9 @@ def selectors_create(parent): # Make a button disabled if i == 4: btn.set_state(lv.btn.STATE.DISABLED) - + cal.set_highlighted_dates(hl, 2) - + tv = lv.tabview(lv.scr_act(), None) display = scr.get_disp() disp_size = display.get_size_category() @@ -549,7 +549,7 @@ def selectors_create(parent): sw = lv.switch(lv.scr_act(), None) if lv.theme_get_flags() & lv.THEME_MATERIAL_FLAG.DARK: sw.on(LV_ANIM_OFF) -sw.set_event_cb(color_chg_event_cb) +sw.set_event_cb(color_chg_event_cb) sw.set_pos(LV_DPX(10), LV_DPX(10)) sw.set_style_local_value_str(lv.switch.PART.BG, lv.STATE.DEFAULT, "Dark") sw.set_style_local_value_align(lv.switch.PART.BG, lv.STATE.DEFAULT, lv.ALIGN.OUT_RIGHT_MID) @@ -567,6 +567,6 @@ def selectors_create(parent): style_box.set_margin_top(lv.STATE.DEFAULT, LV_DPX(30)) controls_create(t1) -visuals_create(t2) +visuals_create(t2) selectors_create(t3) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index c65d07dd9..d32fecb28 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,18 +1,369 @@ # Changelog +## [v8.3.3](https://github.com/lvgl/lvgl/compare/v8.3.2...v8.3.3) 06 October 2022 + +v8.3.3 is the same as v8.3.2. It was released only because the version number was set incorrectly in lvgl.h. + +## [v8.3.2](https://github.com/lvgl/lvgl/compare/v8.3.1...v8.3.2) 27 September 2022 + +### Fixes + +- fix(fragment): fixed child fragment event dispatch [`3683`](https://github.com/lvgl/lvgl/pull/3683) +- fix(sdl): clear streaming/target texture with FillRect [`3682`](https://github.com/lvgl/lvgl/pull/3682) +- fix(sdl): transformation with alpha (#3576) [`3678`](https://github.com/lvgl/lvgl/pull/3678) +- fix(draw_sw): fix image cache to access the freed stack space [`3584`](https://github.com/lvgl/lvgl/pull/3584) +- fix(style): use compile time prop_cnt for const styles [`3609`](https://github.com/lvgl/lvgl/pull/3609) +- fix(demo): can not found lvgl.h file [`3477`](https://github.com/lvgl/lvgl/pull/3477) +- fix(ci) checkout lv_micropython release/v8 branch [`3524`](https://github.com/lvgl/lvgl/pull/3524) +- fix(canvas): fix clipéping on transformation [`b884aba`](https://github.com/lvgl/lvgl/commit/b884abae26f3824b27783a85d18ed51e550347c1) +- fix(draw): allow drawing outline with LV_DRAW_COMPLEX == 0 too [`ece3495`](https://github.com/lvgl/lvgl/commit/ece34950040e218fc73605a4e88f1060c2a274f8) +- fix(colorwheel): fix updating color when using lv_colorwheel_set_hsv [`d59bba1`](https://github.com/lvgl/lvgl/commit/d59bba12db115afb4b6aa53eed2625221dfff2fd) +- fix(slider): find the nearest value on click instead of floor [`dfd14fa`](https://github.com/lvgl/lvgl/commit/dfd14fa778aef25d0db61748a58aa9989ce5e2c8) +- fix(draw): fix border drawing with thick borders [`d5b2a9b`](https://github.com/lvgl/lvgl/commit/d5b2a9b2562cbfa327bf0ec03c11d28576037a14) +- fix(refr): fix true double double buffering logic with transparent screens [`8b605cc`](https://github.com/lvgl/lvgl/commit/8b605cc48224d0497cdd936fa77229e0c3d606d2) +- fix(group): be sure obj is removed from its current group in lv_group_add_obj [`5156ee0`](https://github.com/lvgl/lvgl/commit/5156ee058d5de674a00ffd84d15d460de7f0e53b) +- fix(style): add missing invalidation in lv_obj_remove_local_style_prop [`a0515ba`](https://github.com/lvgl/lvgl/commit/a0515ba30dd74b8b22a6709d334eb03782ee1a4d) + +### Docs + +- docs(draw) remove reference to old lv_fs_add_drv function [`3564`](https://github.com/lvgl/lvgl/pull/3564) +- docs(disp): LV_COLOR_SCREEN_TRANSP remove dependency on LV_COLOR_DEPTH_32 as transparency is supported across all color depths [`3556`](https://github.com/lvgl/lvgl/pull/3556) + +### CI and tests + +- ci: protect test.c with #if LV_BUILD_TEST [`be485d7`](https://github.com/lvgl/lvgl/commit/be485d7605136d2a5d6a633c7cb5b7c525cae7ee) + +### Others + +- chore(rt-thread) backport fixes from v9 [`3604`](https://github.com/lvgl/lvgl/pull/3604) + +- chore: fix warnings [`7640950`](https://github.com/lvgl/lvgl/commit/76409502163ffe67cfbab9c7f24f2226cc8a5941) +- remove accidentally added code [`5022476`](https://github.com/lvgl/lvgl/commit/5022476edc8676f2a6ef7b919d3578159edeef7c) + + +## [v8.3.1](https://github.com/lvgl/lvgl/compare/v8.3.0...v8.3.1) 25 July 2022 + +### Fixes + +- fix(led): add bg_color draw descriptors back to led draw event to support LV_DRAW_COMPLEX 0 [`3515`](https://github.com/lvgl/lvgl/pull/3515) +- fix(slider): fix knob drawing in symmetrical mode [`2967172`](https://github.com/lvgl/lvgl/commit/2967172bee806e77da6ee2307c79e867af3f76bc) +- fix(refr): fix lv_refr_get_top_obj [`9750c97`](https://github.com/lvgl/lvgl/commit/9750c97aff4dc3de80559b150852b829f006d6bf) +- fix(arc): fix arc knob invalidation in SYMMETRICAL mode [`a283273`](https://github.com/lvgl/lvgl/commit/a283273bd27599dae6b044a941b6591ad45e059b) + +### Examples + +- example(freetype): Update the Micropython example to use the Lato font [`71913d3`](https://github.com/lvgl/lvgl/commit/71913d300dde25d1b87d1b44fa1fa47854defd59) +- example(freetype): replace the arial font with lato to avoid licensing issues [`8544cc3`](https://github.com/lvgl/lvgl/commit/8544cc38062d9c817013bbe6aedbb47112e580ad) + +### Docs + +- docs(readme): fix LVGL version typo (8.3.0) [`3462`](https://github.com/lvgl/lvgl/pull/3462) +- docs(tasmota): support LVGL 8.3.0 (#3511) [`62662f6`](https://github.com/lvgl/lvgl/commit/62662f68e9cf90adcb96d42030eca5fa135b96a5) + + + +## [v8.3.0](https://github.com/lvgl/lvgl/compare/v8.2.0...v8.3.0) 6 July 2022 + + +### Overview + +- **Layers** Support transforming (zoom and rotate) any widgets and their children drawn by LVGL. To do this LVGL renders the transformed widgets into a layer and draws that layer as an image applying all the transformations. Layers are also used when `opa` (not `bg_opa`, `border_opa`, etc) and `blend_mode` are set. This way nested objects are blended as one layer to avoid color bleeding. See more [here](https://docs.lvgl.io/master/overview/style.html#opacity-blend-modes-and-transformations). +- **inherit and initial style properties** Besides setting "normal values" for style properties now you can set them to `inherit` (inherit the parent's value) and `initial` (set the system default). See more [here](https://docs.lvgl.io/master/overview/style.html#forced-value-inheritance-default-value) +- **NXP-PXP and VGLITE GPU support** The support for NXP GPUs are added again +- **Color font support** You can use emojis and images in texts with this great new features. See more [here](https://docs.lvgl.io/master/others/imgfont.html). +- **ARM2D GPU support** Get support for ARM's own GPU. +- **PubSub messaging** A publisher-subscriber based messaging system is added to make communication between components easier. See more [here](https://docs.lvgl.io/master/others/msg.html). +- **Pinyin IME** Add support for Pinyin IME Chinese input. See more [here](https://docs.lvgl.io/master/others/ime_pinyin.html). +- **render_start_cb** A new callback is added to `lv_disp_drv_t` to indicate when the rendering starts. It's useful to make synchronization, e.g. wait for a TE signal. + + +### New Features + +- feat(ime_pinyin): add API to support 9-key input mode [`3447`](https://github.com/lvgl/lvgl/pull/3447) +- feat(font): add font placeholder drawing configuration [`3446`](https://github.com/lvgl/lvgl/pull/3446) +- feat(fsdrv): add posix lseek() error checking [`3444`](https://github.com/lvgl/lvgl/pull/3444) +- feat(misc): add asynchronous call function cancellation function [`3439`](https://github.com/lvgl/lvgl/pull/3439) +- feat(ime_pinyin): add API to use Pinyin IME(Chinese input) [`3408`](https://github.com/lvgl/lvgl/pull/3408) +- feat(style) add 'inherit' and 'initial' CSS properties [`3390`](https://github.com/lvgl/lvgl/pull/3390) +- feat(porting): add flushing control to the template [`3384`](https://github.com/lvgl/lvgl/pull/3384) +- feat(anim): add deleted callback (#3279) [`3295`](https://github.com/lvgl/lvgl/pull/3295) +- feat(cmsis-pack): monthly update for May [`3394`](https://github.com/lvgl/lvgl/pull/3394) +- feat(textarea): make it possible to customize the bullet character [`3388`](https://github.com/lvgl/lvgl/pull/3388) +- feat(disp): add a temporary invalidation disable interface [`3378`](https://github.com/lvgl/lvgl/pull/3378) +- feat(group): add edge callbacks when trying to move focus past beginning or end [`3374`](https://github.com/lvgl/lvgl/pull/3374) +- feat(benchmark): make lvgl render at the highest frame rate [`3352`](https://github.com/lvgl/lvgl/pull/3352) +- feat(rt-thread): allow users to control refresh period in the lvgl thread [`3375`](https://github.com/lvgl/lvgl/pull/3375) +- feat(cmsis-pack): Monthly update for May (alpha) [`3359`](https://github.com/lvgl/lvgl/pull/3359) +- feat(demos): add a callback for benchmark [`3353`](https://github.com/lvgl/lvgl/pull/3353) +- feat(gpu): Update lv_gpu_arm2d with new features [`3340`](https://github.com/lvgl/lvgl/pull/3340) +- feat(draw): improve acceleration for LV_IMG_CF_ALPHA_8BIT [`3337`](https://github.com/lvgl/lvgl/pull/3337) +- feat(anim): add the function of getting global animation refresher timer [`3331`](https://github.com/lvgl/lvgl/pull/3331) +- feat(demo): add Weighted FPS and Opa speed log output [`3326`](https://github.com/lvgl/lvgl/pull/3326) +- feat(gpu): Update gpu arm 2d [`3320`](https://github.com/lvgl/lvgl/pull/3320) +- feat(cmsis-pack): Monthly update for April [`3300`](https://github.com/lvgl/lvgl/pull/3300) +- feat(fsdrv) fix issues for win32 backends [`3284`](https://github.com/lvgl/lvgl/pull/3284) +- feat(cmake-build): Option to allow building shared libraries. [`3278`](https://github.com/lvgl/lvgl/pull/3278) +- feat(hal): add render_start_cb to disp_drv [`3274`](https://github.com/lvgl/lvgl/pull/3274) +- feat(cmsis-pack): monthly update for April (v1.0.3-alpha) [`3271`](https://github.com/lvgl/lvgl/pull/3271) +- feat(benchmark): add trace output for running a specific scenario [`3245`](https://github.com/lvgl/lvgl/pull/3245) +- feat(env_support): cmsis pack monthly update [`3209`](https://github.com/lvgl/lvgl/pull/3209) +- feat(tabview): support vertical scrolling [`3184`](https://github.com/lvgl/lvgl/pull/3184) +- feat(span): add an interface for setting the number of lines [`3200`](https://github.com/lvgl/lvgl/pull/3200) +- feat(indev): add possibility to enable/disable all input devices at once [`3179`](https://github.com/lvgl/lvgl/pull/3179) +- feat(font): add imgfont - can be used to add emojis to label/span [`3160`](https://github.com/lvgl/lvgl/pull/3160) +- feat(gpu): add gpu arm2d [`3162`](https://github.com/lvgl/lvgl/pull/3162) +- feat(dma2d): add lv_draw_stm32_dma2d_buffer_copy function [`3147`](https://github.com/lvgl/lvgl/pull/3147) +- feat(disp): add screen out animations [`3081`](https://github.com/lvgl/lvgl/pull/3081) +- feat(menu): make menu widget more compatible with encoder [`3061`](https://github.com/lvgl/lvgl/pull/3061) +- feat(label): added animation style property to apply it to circular scrolling animation of label widget [`3128`](https://github.com/lvgl/lvgl/pull/3128) +- feat(script): add pre-commit configuration for code formatting [`3092`](https://github.com/lvgl/lvgl/pull/3092) +- feat(refr): prevents dirty areas from being modified during rendering [`3107`](https://github.com/lvgl/lvgl/pull/3107) +- feat(log): improve lv_log and add log the result from lv_demo_benchmark [`3084`](https://github.com/lvgl/lvgl/pull/3084) +- feat(fragment): add fragment manager (a UI Controller concept) [`2940`](https://github.com/lvgl/lvgl/pull/2940) +- feat(porting): add a macro lv_run_timer_handler_in_period to simplify porting [`3063`](https://github.com/lvgl/lvgl/pull/3063) +- feat(gpu): reattach nxp pxp vglite accelerators(#3322) [`029eef7`](https://github.com/lvgl/lvgl/commit/029eef79c4cf6fef4ad46f7e335011ba4172381b) +- feat(draw): support transforming widgets and improfe sw transform [`318146a`](https://github.com/lvgl/lvgl/commit/318146a2c25362eabf258470be263a4cfeaefe87) +- feat(msg): add publisher-subscriber messaging [`79a29d7`](https://github.com/lvgl/lvgl/commit/79a29d749d3e261ebadbe31fccbff896f63b4d93) +- feat(benchmark): add an API to run specific scene (#3089) [`305ad00`](https://github.com/lvgl/lvgl/commit/305ad00893c0d18d9a65e28ee03d65f76f8abb0a) +- feat(gpu): add SWM341 gpu support (synwit) [`07b7eea`](https://github.com/lvgl/lvgl/commit/07b7eea56c048a0654c254cadebee8caf5f7933b) +- feat(arc): add lv_arc_align_obj_to_angle and lv_arc_rotate_obj_to_angle [`a76bb70`](https://github.com/lvgl/lvgl/commit/a76bb70a79dfa5b841328f07ede0907c700a039a) +- feat(draw): add draw_ctx->buffer_copy [`d034511`](https://github.com/lvgl/lvgl/commit/d034511bba3a27aa1a29d2e1b612b1adeb4e2ae1) +- feat(dropdown): add lv_dropdown_get_option_index [`9997fb0`](https://github.com/lvgl/lvgl/commit/9997fb00aa60b4478c76fa8387a74ca5b3c595b2) +- feat(tabview) add API to rename tab. [`2c9695a`](https://github.com/lvgl/lvgl/commit/2c9695afb4ed6597ae54806c5eb2a287925343f8) +- feat(indev): send LV_EVENT_PRESS_LOST on release with wait_until_release [`cc18518`](https://github.com/lvgl/lvgl/commit/cc18518e96df63c2a02ee9d423cb7bc23382e5a7) +- feat(style) add 'inherit' and 'initial' CSS properties (#3390) [`9a48de0`](https://github.com/lvgl/lvgl/commit/9a48de0f8b19ec02a44aaf6b330066eed7d0a105) +- feat(draw): improve acceleration for LV_IMG_CF_ALPHA_8BIT (#3337) [`8d3c41d`](https://github.com/lvgl/lvgl/commit/8d3c41d5170dad0455fea3d95b2765db70d3c7c2) +- feat(label): added animation style property to apply it to circular scrolling animation of label widget (#3128) [`340d45c`](https://github.com/lvgl/lvgl/commit/340d45cfa91b7108d43af906fc51b1c431877827) +- feat(gridnav): add lv_gridnav_set_focused [`b6d2daa`](https://github.com/lvgl/lvgl/commit/b6d2daa4935128ca8193863d4deaf58fa40b3154) + +### Performance + +- perf(draw): speed up non normal blend modes [`5a06fce`](https://github.com/lvgl/lvgl/commit/5a06fce472c103b4204002a7932dd6c6d05eb13c) +- perf(draw): minor optimiziation in point transformation [`c6c2864`](https://github.com/lvgl/lvgl/commit/c6c286404898bf559eca6eb5bb007251790c572c) +- perf(layer): cache the layer_type [`ac2e2f1`](https://github.com/lvgl/lvgl/commit/ac2e2f132e264d5f0f0313f4e6adbcf56d937a14) + +### Fixes + +- fix(draw): conflict with external ALIGN define [`3336`](https://github.com/lvgl/lvgl/pull/3336) +- fix(arc): fix bug with LV_ARC_MODE_REVERSE (#3417) [`3418`](https://github.com/lvgl/lvgl/pull/3418) +- fix(fragment): memory leak of fragments #3438 [`3442`](https://github.com/lvgl/lvgl/pull/3442) +- fix(draw): solve memory leaking issue [`3437`](https://github.com/lvgl/lvgl/pull/3437) +- fix(gridnav) correct logic in find_last_focusable [`3423`](https://github.com/lvgl/lvgl/pull/3423) +- fix(examples) correct comment in slider example [`3419`](https://github.com/lvgl/lvgl/pull/3419) +- fix(sdl): add transformation support for the SDL backend [`3403`](https://github.com/lvgl/lvgl/pull/3403) +- fix(bmp): fix with LV_COLOR_16_SWAP [`3412`](https://github.com/lvgl/lvgl/pull/3412) +- fix(sdl): fix LRU, reported in #3402 [`3404`](https://github.com/lvgl/lvgl/pull/3404) +- fix(draw) avoid use-after-free when drawing arcs [`3399`](https://github.com/lvgl/lvgl/pull/3399) +- fix(subpx): fix subpixel rendering font is not displaying bug [`3387`](https://github.com/lvgl/lvgl/pull/3387) +- fix(style): reset style lookup table after gc sweep/lv_deinit [`3385`](https://github.com/lvgl/lvgl/pull/3385) +- fix(benchmark): fix the issue that wrong scene number is used [`3372`](https://github.com/lvgl/lvgl/pull/3372) +- fix(draw): fix colour supports for indexed and alpha-only [`3371`](https://github.com/lvgl/lvgl/pull/3371) +- fix(mem): fix TLSF returning the wrong pointer when the requested size is too large [`3325`](https://github.com/lvgl/lvgl/pull/3325) +- fix(demo): fix warning. [`3344`](https://github.com/lvgl/lvgl/pull/3344) +- fix(config): add LV_GPU_SDL_LRU_SIZE [`3348`](https://github.com/lvgl/lvgl/pull/3348) +- feat(draw): improve acceleration for LV_IMG_CF_ALPHA_8BIT [`3337`](https://github.com/lvgl/lvgl/pull/3337) +- fix(txt): fix returned value of lv_txt_iso8859_1_next(..., NULL) [`3338`](https://github.com/lvgl/lvgl/pull/3338) +- fix(benchmark): remove redundant string for the small screens [`3335`](https://github.com/lvgl/lvgl/pull/3335) +- fix(chart): fix accessing uninitialized point_area [`3327`](https://github.com/lvgl/lvgl/pull/3327) +- fix(config): add LV_LAYER_SIMPLE_BUF_SIZE to Kconfig [`3312`](https://github.com/lvgl/lvgl/pull/3312) +- fix(config): Keep the sequence of widget in order [`3314`](https://github.com/lvgl/lvgl/pull/3314) +- fix(config): fix typo in LV_USE_PERF_MONITOR and LV_USE_MEM_MONITOR [`3313`](https://github.com/lvgl/lvgl/pull/3313) +- fix(refr): initializing row_cnt is to silence the warning [`3309`](https://github.com/lvgl/lvgl/pull/3309) +- fix(meter): fix typo [`3308`](https://github.com/lvgl/lvgl/pull/3308) +- fix(draw): update Makefiles [`3303`](https://github.com/lvgl/lvgl/pull/3303) +- fix(lodepng): fix NULL pointer access [`3307`](https://github.com/lvgl/lvgl/pull/3307) +- fix(Kconfig): change the type of LV_FS_STDIO_LETTER from string to int [`3282`](https://github.com/lvgl/lvgl/pull/3282) +- fix(demo): fix Wformat warning [`3290`](https://github.com/lvgl/lvgl/pull/3290) +- fix(snapshot): add missing ASSERT checks [`3292`](https://github.com/lvgl/lvgl/pull/3292) +- fix(Kconfig): Add LV_USE_GRIDNAV and LV_USE_FRAGMENT to Kconfig [`3270`](https://github.com/lvgl/lvgl/pull/3270) +- fix(msgbox): do not execute init obj when obj == NULL [`3264`](https://github.com/lvgl/lvgl/pull/3264) +- fix(menu): use LV_ASSERT_MALLOC check for new_node [`3263`](https://github.com/lvgl/lvgl/pull/3263) +- fix(canvas):image cache may expire after set canvas's buff [`3267`](https://github.com/lvgl/lvgl/pull/3267) +- fix(obj_style): prevent access to class null pointer [`3252`](https://github.com/lvgl/lvgl/pull/3252) +- fix(png): fix possible memory leak when decoding fails [`3249`](https://github.com/lvgl/lvgl/pull/3249) +- fix(libs): fix possible buffer underflow caused by extension matching [`3250`](https://github.com/lvgl/lvgl/pull/3250) +- fix(fs): track multiple directory handles with win32 backends [`3243`](https://github.com/lvgl/lvgl/pull/3243) +- fix(png): use LV_IMG_CF_TRUE_COLOR_ALPHA instead of LV_IMG_CF_RAW_ALPHA [`3212`](https://github.com/lvgl/lvgl/pull/3212) +- fix(Keil-AC5): slience warnings in Keil-AC5 [`3221`](https://github.com/lvgl/lvgl/pull/3221) +- fix(meter): fix infinite loop caused by loop variable type mismatch [`3232`](https://github.com/lvgl/lvgl/pull/3232) +- fix(chart): remove invalid decision branches [`3231`](https://github.com/lvgl/lvgl/pull/3231) +- fix(gradient): assert before dividing by 0 [`3228`](https://github.com/lvgl/lvgl/pull/3228) +- fix(calendar): fix infinite loop caused by loop variable type mismatch [`3230`](https://github.com/lvgl/lvgl/pull/3230) +- fix(flex): assert before dividing by 0 [`3237`](https://github.com/lvgl/lvgl/pull/3237) +- fix(hal): fix LV_ASSERT_MALLOC wrong placement [`3236`](https://github.com/lvgl/lvgl/pull/3236) +- fix(disp): fix missing null pointer judgment [`3238`](https://github.com/lvgl/lvgl/pull/3238) +- fix(obj_class): fix possible memory leak when the default disp is NULL [`3235`](https://github.com/lvgl/lvgl/pull/3235) +- fix(draw_sw_letter): fix incorrect use of sizeof for a pointer [`3234`](https://github.com/lvgl/lvgl/pull/3234) +- fix(indev): fix null pointer access caused by typo [`3229`](https://github.com/lvgl/lvgl/pull/3229) +- fix(event): remove invalid decision branches [`3233`](https://github.com/lvgl/lvgl/pull/3233) +- fix(draw_mask): remove invalid decision branches [`3225`](https://github.com/lvgl/lvgl/pull/3225) +- fix(spinbox): remove invalid judgment [`3227`](https://github.com/lvgl/lvgl/pull/3227) +- fix(gradient): remove invalid decision branches [`3226`](https://github.com/lvgl/lvgl/pull/3226) +- fix(txt): return 0 if letter_uni is out of range [`3224`](https://github.com/lvgl/lvgl/pull/3224) +- fix(calendar): fix possible array access out of bounds [`3223`](https://github.com/lvgl/lvgl/pull/3223) +- fix(style): remove useless null pointer judgment [`3222`](https://github.com/lvgl/lvgl/pull/3222) +- fix(obj): scrolling exception when use lv_obj_set_parent() [`3210`](https://github.com/lvgl/lvgl/pull/3210) +- fix(libs): fix memcmp memory access overflow [`3205`](https://github.com/lvgl/lvgl/pull/3205) +- fix(png): fix possible file leaks [`3204`](https://github.com/lvgl/lvgl/pull/3204) +- fix(docs): rename task-handler.md to timer-handler.md [`3203`](https://github.com/lvgl/lvgl/pull/3203) +- fix(lru): Fix use of undefined variables [`3181`](https://github.com/lvgl/lvgl/pull/3181) +- fix(rt-thread): Sconscript use LOCAL_CFLAGS to replace LOCAL_CCFLAGS [`3196`](https://github.com/lvgl/lvgl/pull/3196) +- fix(make) make files under draw/gpu [`3202`](https://github.com/lvgl/lvgl/pull/3202) +- fix(docs-CN):fix broken links to docs in dir get-started [`3195`](https://github.com/lvgl/lvgl/pull/3195) +- fix broken links to docs in dir get-started [`3190`](https://github.com/lvgl/lvgl/pull/3190) +- fix(indev): fix warning about formatting uint32_t with %d [`3193`](https://github.com/lvgl/lvgl/pull/3193) +- fix(Kconfig): move LV_USE_IMGFONT to others menu [`3176`](https://github.com/lvgl/lvgl/pull/3176) +- fix(draw): src_buf_tmp will be NULL when LV_DRAW_COMPLEX is '0' [`3163`](https://github.com/lvgl/lvgl/pull/3163) +- fix(span): align the baselines [`3164`](https://github.com/lvgl/lvgl/pull/3164) +- fix(menu): fix crash on delete [`3154`](https://github.com/lvgl/lvgl/pull/3154) +- fix(Kconfig): add missing LV_USE_THEME_MONO [`3146`](https://github.com/lvgl/lvgl/pull/3146) +- fix(demo/stress): remove the unused assets [`3139`](https://github.com/lvgl/lvgl/pull/3139) +- fix(jpg): swap high and low bytes when macro LV_COLOR_16_SWAP is 1 [`3138`](https://github.com/lvgl/lvgl/pull/3138) +- fix(script): in lv_conf_internal fix some widget dependencies when using Kconfig [`3119`](https://github.com/lvgl/lvgl/pull/3119) +- fix(demo): minor fix for benchmark [`3114`](https://github.com/lvgl/lvgl/pull/3114) +- fix(misc): in lv_map() handle if maximum value less than minimum value [`3113`](https://github.com/lvgl/lvgl/pull/3113) +- fix(extra): adjust image decoder initialization order [`3085`](https://github.com/lvgl/lvgl/pull/3085) +- fix(chart): optimize chart invalidation [`3028`](https://github.com/lvgl/lvgl/pull/3028) +- fix(refr): fix performance monitor NULL pointer access [`3105`](https://github.com/lvgl/lvgl/pull/3105) +- fix(misc): Remove duplicate declaration of _lv_log_add. [`3103`](https://github.com/lvgl/lvgl/pull/3103) +- fix(gridnav): get key code from the actual event [`3101`](https://github.com/lvgl/lvgl/pull/3101) +- fix(draw_rect): delete __STDC_VERSION__ to ensure C++ compatibility [`3099`](https://github.com/lvgl/lvgl/pull/3099) +- fix(font):draw placeholder if get_glyph_dsc() returns false [`3000`](https://github.com/lvgl/lvgl/pull/3000) +- fix(conf): work around GCC bug [`3082`](https://github.com/lvgl/lvgl/pull/3082) +- fix(fsdrv): replacing sprintf with lv_snprintf for safety [`3079`](https://github.com/lvgl/lvgl/pull/3079) +- fix(cmsis-pack): add PIDX for cmsis-pack [`3064`](https://github.com/lvgl/lvgl/pull/3064) +- feat(gpu): add SWM341 gpu support (synwit) [`07b7eea`](https://github.com/lvgl/lvgl/commit/07b7eea56c048a0654c254cadebee8caf5f7933b) +- fix(fs): fix cached read and add unit test for lv_fs [`98660a8`](https://github.com/lvgl/lvgl/commit/98660a861d874d29e8356452baff21788b6a9ef1) +- fix(table): invalidate only the changed cell [`306fa19`](https://github.com/lvgl/lvgl/commit/306fa1968238fe33dd95e2865e147bceb4706ad5) +- fix(draw): handle non BLEND_MODE_NORMAL for ARGB drawing [`9ac8ce6`](https://github.com/lvgl/lvgl/commit/9ac8ce69f67234563d4254e29e1903a638bb8f4e) +- fix(draw): revert handling of style_opa on not MAIN parts [`51a7a61`](https://github.com/lvgl/lvgl/commit/51a7a61df365685a7cd04b0512ba3844dcfa7209) +- fix(draw): clip the bg img to the rectangle's area in lv_draw_sw_rect [`77d726e`](https://github.com/lvgl/lvgl/commit/77d726efb2467ff86691dee487f97aac79ea45c2) +- fix(obj): fix LV_OBJ_FLAG_OVERFLOW_VISIBLE [`c742f2c`](https://github.com/lvgl/lvgl/commit/c742f2c8888ad0102cebe91b4069b376068baa81) +- fix(scroll): do not fire scroll begin/end event on every scroll step [`25ce6e3`](https://github.com/lvgl/lvgl/commit/25ce6e3ae9e144e2df5dad34475dda3542015f6a) +- fix(indev): do not send keys to objects in disabled state [`b0a46c4`](https://github.com/lvgl/lvgl/commit/b0a46c4837c922cb1303ef768da3209e7efa45ae) +- fix(disp): make lv_scr_load work better with lv_scr_load_anim and auto_del = true [`52287fd`](https://github.com/lvgl/lvgl/commit/52287fd64ad59c35794d1f4486b777f4eb686abc) +- fix(draw): create intermediate layer for blend modes too [`8b15007`](https://github.com/lvgl/lvgl/commit/8b150075681455c6424ddd536e991307ac828eb4) +- fix(group): in lv_group_remove() fix if the object to focus is deleted [`72cb683`](https://github.com/lvgl/lvgl/commit/72cb683c799f65cd4fbae22dafc3a35c123bb66b) +- fix(draw): be sure angle values are in the correct range [`e624b90`](https://github.com/lvgl/lvgl/commit/e624b90db3515816eee8f6ce72677350487f3a02) +- fix(scroll): send LV_EVENT_SCROLL_BEGIN/END with no animation too [`777fe1e`](https://github.com/lvgl/lvgl/commit/777fe1ea706f38b82ab8ee180548ecb85334a469) +- fix(arc): fix arc image drawing issue [`7153e3f`](https://github.com/lvgl/lvgl/commit/7153e3f8b7b660474b8907954c80e21eb2f0bd21) +- fix(refr): fix memory write out of bounds issue [`13c99fc`](https://github.com/lvgl/lvgl/commit/13c99fc4b66d3e8d0ffcd6fda21d3b5a40b0771c) +- fix(gif): fix rare issue when drawing the gif's background [`b1e2c06`](https://github.com/lvgl/lvgl/commit/b1e2c0665829aa489f444169ce80fcd7cdf487bb) +- fix(chart): fix misaligned horizontal tick lines on bar charts [`4572a0c`](https://github.com/lvgl/lvgl/commit/4572a0c6c92b126e229ce9aada551d71b4f4296b) +- fix(font): use 0 width for non printable characters [`7cf5709`](https://github.com/lvgl/lvgl/commit/7cf5709b0669ab64e437a796c50f6bdb97b9d0d5) +- revert(group): 72cb683c799f65cd4fbae22dafc3a35c123bb66b [`b7b22c1`](https://github.com/lvgl/lvgl/commit/b7b22c190c6d9e11a841289708f55be0be86830f) +- fix(keyboard): don't show popovers on map change [`ac202e7`](https://github.com/lvgl/lvgl/commit/ac202e7b96510b9b12beb8a1eee3dfd65bc56a3d) +- fix(refr): consider masks with LV_OBJ_FLAG_OVERFLOW_VISIBLE [`a7f9dfa`](https://github.com/lvgl/lvgl/commit/a7f9dfa8c3e4fd56cc2db5c3f3926b9391d3661f) +- fix(draw): fix the calculation of the transformed coordinates [`76de7c6`](https://github.com/lvgl/lvgl/commit/76de7c6b7bce6da62f5e961ee477bfa324675683) +- fix(style): fix heap use after free with transition styles [`d9ae58b`](https://github.com/lvgl/lvgl/commit/d9ae58b6977ccfda90e02fa6f5b852d398f8600a) +- fix(tabview, tileview): fix scrolling [`22854ff`](https://github.com/lvgl/lvgl/commit/22854ff3fba236f50893221805c9cc4d378baaca) +- fix(draw): fix disp_bg_img drawing [`dea75d9`](https://github.com/lvgl/lvgl/commit/dea75d9b4a90601bf81bf69d533c4f13e62aa88c) +- fix(textarea): fix max length handling [`127d8e8`](https://github.com/lvgl/lvgl/commit/127d8e82e344cd8762672e787b1ee06390050b65) +- fix(btnmatrix): fix extra draw size calculation to not clip shadow [`7ada130`](https://github.com/lvgl/lvgl/commit/7ada1301c2ee113a5184618538b979f6d9912239) +- fix(indev): scroll_ throw_vect cannot converge to 0 when vect is negative [`e5c11f1`](https://github.com/lvgl/lvgl/commit/e5c11f1f68275d294d5b8892366aa424a5a14bca) +- fix(theme): make the basic theme even more simpler [`62d6f3c`](https://github.com/lvgl/lvgl/commit/62d6f3c533ca6d13fce3056074c1e44ffea355b1) +- fix(color): color mix rounding error [`523062b`](https://github.com/lvgl/lvgl/commit/523062b9ee8a106ad4b3b7bd0ee7baca743f2e5f) +- fix(style): _lv_style_prop_lookup_flags tell all flags for LV_STYLE_PROP_ANY [`e53f602`](https://github.com/lvgl/lvgl/commit/e53f60259c01ab1243b0cf56eb228b7f5eedc203) +- fix(list): use for icon [`b171f7d`](https://github.com/lvgl/lvgl/commit/b171f7dde2a895142385ea1275f3f51255cb2811) +- fix(layout): fix the handling of FLOATING children [`48728a7`](https://github.com/lvgl/lvgl/commit/48728a7839d6859d7d6fc4f86f5fbcbcd9939348) +- fix(style): make color filter inherited [`5546b9d`](https://github.com/lvgl/lvgl/commit/5546b9d740de8d774071328251413ec29c12d288) +- fix(spinbox): set its default width in its class [`3d92972`](https://github.com/lvgl/lvgl/commit/3d9297269598ca40e2f8dd2d8f31150d41e94cb8) +- fix: fix warning [`6c00552`](https://github.com/lvgl/lvgl/commit/6c005526295aeb277edad42b3a05b0c7e6d72eaf) +- fix(draw): fix transformations on subdivided areas [`cbff8e8`](https://github.com/lvgl/lvgl/commit/cbff8e83e50fecc2b4b43d661deb91d8d81d6696) +- fix(slider): fix left knob in ranged mode [`17f5e0a`](https://github.com/lvgl/lvgl/commit/17f5e0accb15871040a6225a9c0471ceadd6dc16) +- fix(Kconfig): allow unchecking LV_CONF_SKIP [`f3a07a3`](https://github.com/lvgl/lvgl/commit/f3a07a3e8a21f3f9f2c48a2803b8bd991968cb05) +- fix(style): fix using width for both width and height in radius transition [`6acbdaa`](https://github.com/lvgl/lvgl/commit/6acbdaa53d941b891db377e65111bd999f04631d) +- fix(dropdown): fix scrolling when options are CENTER aligned [`e651383`](https://github.com/lvgl/lvgl/commit/e651383688dd29ab2e990cd997118435832d959c) +- fix(grid): fix dead branch [`46bf27d`](https://github.com/lvgl/lvgl/commit/46bf27d50bb668bdd1f84489cb70986ee0ef9fab) +- fix(hal): disable driver->screen_transp by default regardless to LV_COLOR_SCREEN_TRANSP [`ff7204e`](https://github.com/lvgl/lvgl/commit/ff7204ecadd10132b436b11c8948b9a882b58798) +- fix(theme): fix mono theme init [`5ec6694`](https://github.com/lvgl/lvgl/commit/5ec6694f7874f3c99a764e7ee2d45a933865c91c) +- fix(bmp) fix typo in BPP condition [`cbc38af`](https://github.com/lvgl/lvgl/commit/cbc38afb3a0d3ca02159ab89242749809e64df0c) +- fix(theme): in the basic theme show the textarea cursor only in focuses state [`bb03fb1`](https://github.com/lvgl/lvgl/commit/bb03fb197c7083680fd7dc730794a52561cabfd4) +- fix(draw): fix img recolor [`23eecce`](https://github.com/lvgl/lvgl/commit/23eecce008dacd8e5f5d56d017e4e5705f0c31e6) +- fix(theme) add disabled style to textarea in the default theme [`00f6759`](https://github.com/lvgl/lvgl/commit/00f67597d3c87ff811e5e682c10ef20227218651) +- fix(meter): improve the precision of tick line drawing [`0255c6d`](https://github.com/lvgl/lvgl/commit/0255c6dd39640d7ec639cbd339a0fbdcdfb2bb82) +- fix(gpu): fix warning with NXP GPU [`6be43b8`](https://github.com/lvgl/lvgl/commit/6be43b83b3dc9340263552167dbbb07c1069bdb0) +- fix(color): compensate rounding error during blending [`42d9c07`](https://github.com/lvgl/lvgl/commit/42d9c07eeb0abfdbf8746da3569a5f8bc156ae71) +- fix(examples) use type-safe function for retrieving event param [`71d535d`](https://github.com/lvgl/lvgl/commit/71d535defd730fc20ed8d57faa2550781be4f3d7) +- fix(draw) ensure variable is initialized to avoid warning [`276f28a`](https://github.com/lvgl/lvgl/commit/276f28a8a2f4ac2f6268a4363879faa6296e14ad) +- feat(draw): improve acceleration for LV_IMG_CF_ALPHA_8BIT (#3337) [`8d3c41d`](https://github.com/lvgl/lvgl/commit/8d3c41d5170dad0455fea3d95b2765db70d3c7c2) +- fix(spinbox): rename lv_spinbox_set_pos to lv_spinbox_set_cursor_pos [`a99eb6b`](https://github.com/lvgl/lvgl/commit/a99eb6bb6ae12f3fcb86f5268a0c000fb165e159) +- fix(layout): use uint16_t LV_LAYOUT_FLEX/GRID [`c596a36`](https://github.com/lvgl/lvgl/commit/c596a36d9ecf92ae5ce1ecc812210bf3a7df4999) +- fix(event) avoid using a boolean as a pointer [`06fff4b`](https://github.com/lvgl/lvgl/commit/06fff4b9bac35d63564de87fa63f7bedd8a0f9f2) +- fix(theme): properly disable transitions if LV_THEME_DEFAULT_TRANSITION_TIME==0 [`242112b`](https://github.com/lvgl/lvgl/commit/242112b2df8b6cc12aa9920cc3b2fdc9a11d807f) +- fix(scroll): fix scroll to view to the left [`7c74f65`](https://github.com/lvgl/lvgl/commit/7c74f6556abbc299a79b1490c06151a43c902f61) +- fix(fs): mark the read cache as invalid by default [`54f9987`](https://github.com/lvgl/lvgl/commit/54f99870b3cac619fb7057618637d7ee19d58bb3) +- fix(menu): fix crash on delete (#3154) [`a6c4c13`](https://github.com/lvgl/lvgl/commit/a6c4c134902f9a4c156672a70108e809b58fa18c) +- fix(roller): fix unexpected jump in infinite mode [`18f2d78`](https://github.com/lvgl/lvgl/commit/18f2d78728c758179e4ef01ebc632da4e1263be7) +- fix(conf): work around GCC bug (#3082) [`c6b34bc`](https://github.com/lvgl/lvgl/commit/c6b34bc85bb6f5e57e1c87857e03d1a0bd225e4c) + +### Examples +- example(ime_pinyin): improved lv_example_ime_pinyin_1 [`3428`](https://github.com/lvgl/lvgl/pull/3428) +- example(imgfont): fix lvgl.h include path [`3405`](https://github.com/lvgl/lvgl/pull/3405) +- example(btnmatrix): update lv_example_btnmatrix_2 to expicitly check which part is drawn [`6b2eac1`](https://github.com/lvgl/lvgl/commit/6b2eac1dd70df62916b46cee8d4b981ff088b1a7) +- example(slider): make lv_example_slider_3 work with dark theme too [`4a766c5`](https://github.com/lvgl/lvgl/commit/4a766c516db7c2572a075ec5ffe748d30af8c7b9) +- example(span): avoid ambiguous meaing [`7bb09e3`](https://github.com/lvgl/lvgl/commit/7bb09e358026aff3d55d881237624baac77db890) +- demo(benchmark): add LV_DEMO_BENCHMARK_RGB565A8 option [`afaa8c9`](https://github.com/lvgl/lvgl/commit/afaa8c93006a88db9f115b2b318eef790928d2a6) + +### Docs + +- docs(indev): add comment in input device part [`3422`](https://github.com/lvgl/lvgl/pull/3422) +- docs(slider) mention that VALUE_CHANGED is not sent on release [`3397`](https://github.com/lvgl/lvgl/pull/3397) +- docs(readme): add version portuguese brazilian [`3349`](https://github.com/lvgl/lvgl/pull/3349) +- docs(pc-simulator): add MDK with FastModel [`3318`](https://github.com/lvgl/lvgl/pull/3318) +- docs(intro): update for v8.2.0 [`3316`](https://github.com/lvgl/lvgl/pull/3316) +- docs(readme) update link to the PlatformIO Registry [`3296`](https://github.com/lvgl/lvgl/pull/3296) +- docs(gesture): fix typo lv_indev_act() -> lv_indev_get_act() [`3291`](https://github.com/lvgl/lvgl/pull/3291) +- docs(scroll) add information about scroll coordinates [`3088`](https://github.com/lvgl/lvgl/pull/3088) +- docs(msgbox) fix typo [`3095`](https://github.com/lvgl/lvgl/pull/3095) +- docs(scroll): use LV_DIR_VER instead of LV_DIR_TOP [`3066`](https://github.com/lvgl/lvgl/pull/3066) +- docs: rearrange the get-started section [`8a81532`](https://github.com/lvgl/lvgl/commit/8a8153219163b689e8f96d6a97c1f128eefd7ce2) +- docs: add section for renderers and gpus [`378aaa6`](https://github.com/lvgl/lvgl/commit/378aaa637bdcaef8f06667ab9d56c914e0a61beb) +- docs collapse APIs by default [`ebd20af`](https://github.com/lvgl/lvgl/commit/ebd20af6e9cbd68230f49b6c85d940569a7db81c) +- docs(images): fix notes about breaking change inf v8.2 [`9a1e385`](https://github.com/lvgl/lvgl/commit/9a1e385b2b3498ed70704bf0ed33e4bd263747d8) +- docs(sim): add link to qt-creator [`88bbef1`](https://github.com/lvgl/lvgl/commit/88bbef14bf69725a1ab62bffa6ab79355ea31c2d) +- docs(chart): describe how to set the space between columns [`746917d`](https://github.com/lvgl/lvgl/commit/746917dcca74c53f6b2dc3849c9d588a0bf91b60) +- docs(README): fix broken link [`c2c44c6`](https://github.com/lvgl/lvgl/commit/c2c44c68ee69cdee16fce7833cbf6d6dc0d551ab) +- docs(examples) avoid redirects when loading examples [`d367bb7`](https://github.com/lvgl/lvgl/commit/d367bb7cf17dc34863f4439bba9b66a820088951) +- docs(gesture): describe how prevent sending events after a gesture [`65db5c9`](https://github.com/lvgl/lvgl/commit/65db5c99e05f86d2ec69ebae9f1fc50fe30a3145) +- docs(get-started): add quick-overview to the index [`91ebf81`](https://github.com/lvgl/lvgl/commit/91ebf810aacfe972f0ae140a1a61031eea9cda0c) +- docs(others): add imgfont to the index [`656a0e5`](https://github.com/lvgl/lvgl/commit/656a0e5167dca8c6c29497130e374080397fa45f) + +### CI and tests + +- ci(slider): add unit test [`3198`](https://github.com/lvgl/lvgl/pull/3198) +- test(line): add unit tests for line widget [`3104`](https://github.com/lvgl/lvgl/pull/3104) +- test(table): replicate issue when reducing table cells [`3121`](https://github.com/lvgl/lvgl/pull/3121) +- test(textarea): add unit test [`3074`](https://github.com/lvgl/lvgl/pull/3074) +- test(table): add unit tests [`3040`](https://github.com/lvgl/lvgl/pull/3040) +- ci(docs) replace use of sed with proper configuration variables [`1816fa5`](https://github.com/lvgl/lvgl/commit/1816fa576cc40ef1795e95ed127d93df5390b0cf) +- ci add Makefile test [`ea79cee`](https://github.com/lvgl/lvgl/commit/ea79cee01a6bec9b3ce5b6c232dd7ca0d020d5c9) +- test(mem) add test for #3324 [`9700664`](https://github.com/lvgl/lvgl/commit/97006647d8ed3af65fd2113ddf01c7882a4dba19) +- test(img): fix image error diff handler [`48d87e1`](https://github.com/lvgl/lvgl/commit/48d87e1ed2d362e9c3bd84eb60c311ad6519ae85) +- ci update docs builder to work with Python 3.10 [`a3d66c9`](https://github.com/lvgl/lvgl/commit/a3d66c9b67d226f8ab4555616ecf2ea62e307962) +- ci make sure LVGL assertions cause tests to fail [`b83c5aa`](https://github.com/lvgl/lvgl/commit/b83c5aa9bc4a278a6758f76e77ac9c403e483948) +- ci remove formatting comment [`d345f76`](https://github.com/lvgl/lvgl/commit/d345f76d02a23d94550b1b60be90585f6f5276b7) +- ci don't run workflows twice on PRs [`fcc1152`](https://github.com/lvgl/lvgl/commit/fcc1152f9c14494f128f26a6b47b00864a70c741) +- ci bump test timeout to 30 seconds [skip ci] [`85e3e23`](https://github.com/lvgl/lvgl/commit/85e3e2387845bd29c9f85b406623e41d36b66808) +- ci limit tests to 15 seconds [`003f18f`](https://github.com/lvgl/lvgl/commit/003f18f86c5c728920575cf1d34dd0f811607a51) +- ci(makefile) fix typo in GitHub action [`a101e70`](https://github.com/lvgl/lvgl/commit/a101e70ebd4120549236abd637049678dd6800e7) +- ci(switch): fix mem leak test [`8481e3a`](https://github.com/lvgl/lvgl/commit/8481e3a33bc3313b679babac31e6193ec4319bcd) +- ci(stale) bump action version [`5977eef`](https://github.com/lvgl/lvgl/commit/5977eeff3c559c0473d5abd8a99687eeb4659c61) +- ci use GCC problem matcher on ARM tests as well [`9fcefe5`](https://github.com/lvgl/lvgl/commit/9fcefe5a49a024054a3cee08d273b8fe5cf8840e) + ## [v8.2.0](https://github.com/littlevgl/lvgl/compare/v8.1.0...v8.2.0) 31 January 2022 ### Overview -Among many fixes and minor updates these are the most important features in v8.2.0: -- Abstract render layer to make it easier to attack external draw engines +Among many fixes and minor updates these are the most important features in v8.2.0: +- Abstract render layer to make it easier to attach external draw engines - Add `LV_FLAD_OVERFLOW_VISIBLE`. If enabled the children of an object won't be clipped to the boundary of the object - Add ffmpeg decoder support to play videos and open a wide variety of image formats -- Add font fallback support +- Add font fallback support - Add gradient dithering support -- Add "monkey test" +- Add "monkey test" - Add cmsis-pack support - Add Grid navigation (`lv_gridnav`) @@ -23,6 +374,7 @@ The GPU support for NXP microcontrollers is still not updated to the new draw ar - :warning: feat(fs): add caching option for lv_fs-read [`2979`](https://github.com/littlevgl/lvgl/pull/2979) - :warning: feat(span): lv_spangroup_get_expand_width() adds a parameter [`2968`](https://github.com/littlevgl/lvgl/pull/2968) - :warning: arch(draw): allow replacing the draw engine [`db53ea9`](https://github.com/littlevgl/lvgl/commit/db53ea925c9502b20f38db0fc30c4ef599bdfc33) +- :warning: indexed images are not chroma keyed. Use the alpha chaneel instead. ### Architectural @@ -63,7 +415,7 @@ The GPU support for NXP microcontrollers is still not updated to the new draw ar - feat(scrollbar): add more control over scrollbar paddings [`4197b2f`](https://github.com/littlevgl/lvgl/commit/4197b2fd6ebec4b4dcfeeb2c41b724e09b77d1d0) - feat(dropdown): keep the list on open/close for simpler styling [`9d3134b`](https://github.com/littlevgl/lvgl/commit/9d3134b66e40882c232afa79498c41294603f437) - feat(qrcode) use destructor instead of lv_qrcode_delete() [`318edd8`](https://github.com/littlevgl/lvgl/commit/318edd8a3f61a65be3ed15a97c0870de0ad4125a) -- feat(disp) allow decouplig the disp_refr timer [`85cc84a`](https://github.com/littlevgl/lvgl/commit/85cc84ad947786bb3d4857290503047946a55c43) +- feat(disp) allow decoupling the disp_refr timer [`85cc84a`](https://github.com/littlevgl/lvgl/commit/85cc84ad947786bb3d4857290503047946a55c43) - feat(obj): add lv_obj_get_event_user_data() [`53ececc`](https://github.com/littlevgl/lvgl/commit/53ececc5ec6f62ee4ab47ea66a847679e3836f52) - feat(obj) add LV_OBJ_FLAG_SCROLL_WITH_ARROW [`70327bd`](https://github.com/littlevgl/lvgl/commit/70327bdb2d758336340c5a3b378ab876bfee2d53) - feat(slider): consider ext_click_area on the knob with LV_OBJ_FLAG_ADV_HITTEST [`9d3fb41`](https://github.com/littlevgl/lvgl/commit/9d3fb418969c13b93f01a6b0342a1cd8d02e9b6c) @@ -107,7 +459,7 @@ The GPU support for NXP microcontrollers is still not updated to the new draw ar - fix(indev) add braces to avoid compiler warning [`2947`](https://github.com/littlevgl/lvgl/pull/2947) - fix: fix parameter order in function prototypes [`2929`](https://github.com/littlevgl/lvgl/pull/2929) - fix(style):add const qualifier for lv_style_get_prop() [`2933`](https://github.com/littlevgl/lvgl/pull/2933) -- fix(dropdown): in lv_dropdpwn_get_selected_str handle if there are no options [`2925`](https://github.com/littlevgl/lvgl/pull/2925) +- fix(dropdown): in lv_dropdown_get_selected_str handle if there are no options [`2925`](https://github.com/littlevgl/lvgl/pull/2925) - fix: lv_deinit/lv_init crash or hang [`2910`](https://github.com/littlevgl/lvgl/pull/2910) - fix(rt-thread): improve the structure [`2912`](https://github.com/littlevgl/lvgl/pull/2912) - fix: removed string format warnings for int32_t and uint32_t [`2924`](https://github.com/littlevgl/lvgl/pull/2924) @@ -168,7 +520,7 @@ The GPU support for NXP microcontrollers is still not updated to the new draw ar - fix(label): dot not add dots if the label height > 1 font line height [`4d61f38`](https://github.com/littlevgl/lvgl/commit/4d61f3802013b31b0af5f08f66bb86f5179db141) - fix(event): crash if an object was deleted in an event [`9810920`](https://github.com/littlevgl/lvgl/commit/9810920fc5d34a984bddf6e41156e87e509cfd27) - fix(build) fix sdl build with make [`43729d1`](https://github.com/littlevgl/lvgl/commit/43729d1502dad0ca797b4b6fb8c69a48c81a2af7) -- fix(config): fix anonymus choice [`71c739c`](https://github.com/littlevgl/lvgl/commit/71c739cc2dbcebf16e8adc805dda182011e725da) +- fix(config): fix anonymous choice [`71c739c`](https://github.com/littlevgl/lvgl/commit/71c739cc2dbcebf16e8adc805dda182011e725da) - chore(docs): fix lv_list_add_text [`a5fbf22`](https://github.com/littlevgl/lvgl/commit/a5fbf22d415a52cb2641c6dfda6937a10e4952cc) - fix(png) check png magic number to be sure it's a png image [`1092550`](https://github.com/littlevgl/lvgl/commit/1092550775c464f9ae8c406786fe02115776d5c6) - fix(btnmatrix): fix crash if an empty btnmatrix is pressed [`2392f58`](https://github.com/littlevgl/lvgl/commit/2392f585bb9317153f6fb648d2a660cbdc3e276f) @@ -203,7 +555,7 @@ The GPU support for NXP microcontrollers is still not updated to the new draw ar - docs: spelling fixes [`2828`](https://github.com/littlevgl/lvgl/pull/2828) - docs(style) minor style fix [`2818`](https://github.com/littlevgl/lvgl/pull/2818) - docs(porting/display) fix formatting [`2812`](https://github.com/littlevgl/lvgl/pull/2812) -- docs(roadmap) udpate [`084439e`](https://github.com/littlevgl/lvgl/commit/084439e9476339ff571820e38bb677157edef135) +- docs(roadmap) update [`084439e`](https://github.com/littlevgl/lvgl/commit/084439e9476339ff571820e38bb677157edef135) - docs(widgets) fix edit links [`7ed1a56`](https://github.com/littlevgl/lvgl/commit/7ed1a5625a5139ede832c0058b2bc6309b395321) - docs(contributing) update commit message format [`1cd851f`](https://github.com/littlevgl/lvgl/commit/1cd851f8c09e813d75feaf9bf312f887f5ba76f0) - docs(porting): add more details about adding lvgl to your project [`6ce7348`](https://github.com/littlevgl/lvgl/commit/6ce73486d319bfdb1c379d090036a7eeaabf5b43) @@ -274,12 +626,12 @@ The GPU support for NXP microcontrollers is still not updated to the new draw ar ## [v8.1.0](https://github.com/lvgl/lvgl/compare/v8.0.2...v8.1.0) 10 November 2021 ### Overview -v8.1 is minor release so besides many fixes it contains a lot of new features too. +v8.1 is a minor release, so besides many fixes it contains a lot of new features too. Some of the most important features are - Built in support for SDL based GPU drawing - Much faster circle drawing in the software renderer -- Several [3rd party libraries](https://docs.lvgl.io/master/libs/index.html) are merged directly into LVGL. +- Several [3rd party libraries](https://docs.lvgl.io/master/libs/index.html) are merged directly into LVGL. - Add LVGL as an [RT-Thread](https://packages.rt-thread.org/en/detail.html?package=LVGL) and [ESP32](https://components.espressif.com/component/lvgl/lvgl) component ### Breaking Changes @@ -327,7 +679,7 @@ Some of the most important features are - feat(spinbox ) add function to set cursor to specific position [`2314`](https://github.com/lvgl/lvgl/pull/2314) - feat(timer) check if lv_tick_inc is called [`aa6641a`](https://github.com/lvgl/lvgl/commit/aa6641a6f1c1311ce7e0f94783ee7f582452a88f) -- feat(event, widgets) improve the paramter of LV_EVENT_DRAW_PART_BEGIN/END [`88c4859`](https://github.com/lvgl/lvgl/commit/88c485949fca2686357a7dee88d5730678ba9bc7) +- feat(event, widgets) improve the parameter of LV_EVENT_DRAW_PART_BEGIN/END [`88c4859`](https://github.com/lvgl/lvgl/commit/88c485949fca2686357a7dee88d5730678ba9bc7) - feat(docs) improvements to examples [`4b8c73a`](https://github.com/lvgl/lvgl/commit/4b8c73a5770657ab55bbe825f7887e28c55a8a4a) - feat(obj) send LV_EVENT_DRAW_PART_BEGIN/END for MAIN and SCROLLBAR parts [`b203167`](https://github.com/lvgl/lvgl/commit/b203167c7583905e2cb4006e57a16432841a2353) - feat(led) send LV_EVENT_DRAW_PART_BEGIN/END [`fcd4aa3`](https://github.com/lvgl/lvgl/commit/fcd4aa3924469c2a92ab6a04b7bc6de6304cc54a) @@ -336,7 +688,7 @@ Some of the most important features are - feat(conf) add better check for Kconfig default [`f8fe536`](https://github.com/lvgl/lvgl/commit/f8fe5366bb051cd5090e4a06658eb0d32decc0b3) - feat(draw) add LV_BLEND_MODE_MULTIPLY [`cc78ef4`](https://github.com/lvgl/lvgl/commit/cc78ef450649a10f260649dc3ba19ac8a6b88e86) - feat(test) add assert for screenshot compare [`2f7a005`](https://github.com/lvgl/lvgl/commit/2f7a005bd31c10d0a048f55641e4af11bcb5bbfa) -- feat(event) pass the scroll aniamtion to LV_EVENT_SCROLL_BEGIN [`ca54ecf`](https://github.com/lvgl/lvgl/commit/ca54ecfe0eac880203d23b2d2244b9b63b9f7b77) +- feat(event) pass the scroll animation to LV_EVENT_SCROLL_BEGIN [`ca54ecf`](https://github.com/lvgl/lvgl/commit/ca54ecfe0eac880203d23b2d2244b9b63b9f7b77) - feat(obj) place the scrollbar to the left with RTL base dir. [`906448e`](https://github.com/lvgl/lvgl/commit/906448ef6321f160859f21c5937180bb89d8ef1e) - feat(log) allow overwriting LV_LOG_... macros [`17b8a76`](https://github.com/lvgl/lvgl/commit/17b8a76c4a887c9cf464484406a6631ea0194ad5) - feat(arc) add support to LV_OBJ_FLAG_ADV_HITTEST [`dfa4f5c`](https://github.com/lvgl/lvgl/commit/dfa4f5cff561a60b4ffcec17e025f1e056854fff) @@ -477,7 +829,7 @@ Some of the most important features are - fix(pxp): update RTOS macro for SDK 2.10 [`00c3eb1`](https://github.com/lvgl/lvgl/commit/00c3eb197cb85e480809d97eb722589d75d81d94) - fix(textarea) style update in oneline mode + improve sroll to cursor [`60d9a5e`](https://github.com/lvgl/lvgl/commit/60d9a5e493bf17ee9887ba44890d00905bc55970) - feat(led) send LV_EVENT_DRAW_PART_BEGIN/END [`fcd4aa3`](https://github.com/lvgl/lvgl/commit/fcd4aa3924469c2a92ab6a04b7bc6de6304cc54a) -- fix warnigs introduced by 3fb8baf5 [`e302403`](https://github.com/lvgl/lvgl/commit/e3024032dc5de2ece4fa17059ebad4189a5fa670) +- fix warnings introduced by 3fb8baf5 [`e302403`](https://github.com/lvgl/lvgl/commit/e3024032dc5de2ece4fa17059ebad4189a5fa670) - fix(roller) fix partial redraw of the selected area [`6bc40f8`](https://github.com/lvgl/lvgl/commit/6bc40f8c4417a94ab26b25220324e471e03ce443) - fix(flex) fix layout update and invalidation issues [`5bd82b0`](https://github.com/lvgl/lvgl/commit/5bd82b038b841c0f7c93bbdacdbd61d6b9585846) - fix(indev) focus on objects on release instead of press [`76a8293`](https://github.com/lvgl/lvgl/commit/76a8293375b705a5e02e4f9c8f8a42d99db762e2) @@ -498,19 +850,19 @@ Some of the most important features are - fix(README) improve grammar [`de81889`](https://github.com/lvgl/lvgl/commit/de81889cbdc889360e8bc00684f9ca77ff97d89f) - fix(printf) skip defining attribute if pycparser is used [`ee9bbea`](https://github.com/lvgl/lvgl/commit/ee9bbea29c807707353e8b9ec09048990de18e4e) - fix(README) spelling correction [`41869f2`](https://github.com/lvgl/lvgl/commit/41869f238e773e599959c9ef2fee0b7206712ee2) -- fix(color) overflow with 16 bit color depth [`fe6d8d7`](https://github.com/lvgl/lvgl/commit/fe6d8d7636ae283afda68e85b2d1f143d8d05462) +- fix(color) overflow with 16-bit color depth [`fe6d8d7`](https://github.com/lvgl/lvgl/commit/fe6d8d7636ae283afda68e85b2d1f143d8d05462) - fix(docs) consider an example to be visible over a wider area [`145a0fa`](https://github.com/lvgl/lvgl/commit/145a0fad0857dad7f2066e7d22436827e0d3fd7d) - fix(codecov) disable uploading coverage for pull requests [`27d88de`](https://github.com/lvgl/lvgl/commit/27d88de899e91cd5bb9fc69fe9d71cb180cfb44b) - fix(arc) disable LV_OBJ_FLAG_SCROLL_CHAIN by default [`f172eb3`](https://github.com/lvgl/lvgl/commit/f172eb3fd78481d6076ead395abfd765646ad21e) -- fix(template) updpate lv_objx_template to v8 [`38bb8af`](https://github.com/lvgl/lvgl/commit/38bb8afc16720e8d8fe6e72be6fae4f9da593bbc) +- fix(template) update lv_objx_template to v8 [`38bb8af`](https://github.com/lvgl/lvgl/commit/38bb8afc16720e8d8fe6e72be6fae4f9da593bbc) - fix(align) avoid circular references with LV_SIZE_CONTENT [`038b781`](https://github.com/lvgl/lvgl/commit/038b78122e72db67cec886d09eb2d21aaa019df7) -- fix(draw) with additive blending with 32 bit color depth [`786db2a`](https://github.com/lvgl/lvgl/commit/786db2afe6458e24681b8a40fa798429956d3420) +- fix(draw) with additive blending with 32-bit color depth [`786db2a`](https://github.com/lvgl/lvgl/commit/786db2afe6458e24681b8a40fa798429956d3420) - fix(arc) fix arc invalidation again [`5ced080`](https://github.com/lvgl/lvgl/commit/5ced08001c384bf7c840750c0e254b5f0115a070) - fix(align) fix lv_obj_align_to [`93b38e9`](https://github.com/lvgl/lvgl/commit/93b38e92be9ed3ae050a1ee6e5b680ab43fd4850) - fix(scroll) keep the scroll position on object deleted [`52edbb4`](https://github.com/lvgl/lvgl/commit/52edbb46b0741d2761a11ef1b3d516ec96a7c8b3) - fix(dropdown) handle LV_KEY_ENTER [`8a50edd`](https://github.com/lvgl/lvgl/commit/8a50edd0689c7133ca18fd476596ddc4088f86a9) - fix various minor warnings [`924bc75`](https://github.com/lvgl/lvgl/commit/924bc754adcbabaf3518bac6067e7ea37f2f0f04) -- fix(textarea) various cursor darwing fixes [`273a0eb`](https://github.com/lvgl/lvgl/commit/273a0eb32f04e81f326288a71682bea1c812c76a) +- fix(textarea) various cursor drawing fixes [`273a0eb`](https://github.com/lvgl/lvgl/commit/273a0eb32f04e81f326288a71682bea1c812c76a) - fix(label) consider base dir lv_label_get_letter_pos in special cases [`6df5122`](https://github.com/lvgl/lvgl/commit/6df51225c261b252f0935804b0357d6e585da53d) - fix(imgbtn) add lv_imgbtn_set_state [`26e15fa`](https://github.com/lvgl/lvgl/commit/26e15fa577f97d510b218fb95fc9a4bd440b00bc) - fix(printf) add (int) casts to log messages to avoid warnings on %d [`d9d3f27`](https://github.com/lvgl/lvgl/commit/d9d3f271267e760c8459b65c392914143a58b89c) @@ -518,9 +870,9 @@ Some of the most important features are - fix(test) silence make [`37fd9d8`](https://github.com/lvgl/lvgl/commit/37fd9d8a24c276079ed26b5d6704bcefc9f8dc70) - fix(calendar) update the MP example [`0bab4a7`](https://github.com/lvgl/lvgl/commit/0bab4a72cf769872a9adfd5bfa1c4536e6f909a8) - fix(scroll) fix scroll_area_into_view with objects larger than the parent [`5240fdd`](https://github.com/lvgl/lvgl/commit/5240fdda5ccc33d166f8201818868add5d1d6d0d) -- fix(msgbox) handle NULL btn map paramter [`769c4a3`](https://github.com/lvgl/lvgl/commit/769c4a30cf962be1f74e0b1cd7ebaefbd6ba8a8b) +- fix(msgbox) handle NULL btn map parameter [`769c4a3`](https://github.com/lvgl/lvgl/commit/769c4a30cf962be1f74e0b1cd7ebaefbd6ba8a8b) - fix (scroll) do not send unnecessary scroll end events [`3ce5226`](https://github.com/lvgl/lvgl/commit/3ce5226c9d9db279904c4f076ae77e6e03572e4c) -- fix(obj_pos) consider all alignements in contnt size calculation but only if x and y = 0 [`5b27ebb`](https://github.com/lvgl/lvgl/commit/5b27ebb4097166f8c4a50ee5d39249939bf79814) +- fix(obj_pos) consider all alignments in content size calculation but only if x and y = 0 [`5b27ebb`](https://github.com/lvgl/lvgl/commit/5b27ebb4097166f8c4a50ee5d39249939bf79814) - fix(img decoder) add error handling if the dsc->data = NULL [`d0c1c67`](https://github.com/lvgl/lvgl/commit/d0c1c673a8ec17b842ebf97d5f21938ec8901346) - fix(txt): skip basic arabic vowel characters when processing conjunction [`5b54800`](https://github.com/lvgl/lvgl/commit/5b548006eda0695cabf2ee237a7faee8c69e4659) - fix(typo) rename LV_OBJ_FLAG_SNAPABLE to LV_OBJ_FLAG_SNAPPABLE [`e697807`](https://github.com/lvgl/lvgl/commit/e697807cf5c01be2531fc52df78ecad75ce39a7a) @@ -551,7 +903,7 @@ Some of the most important features are - fix(dropdown) add missing invalidations [`33b5d4a`](https://github.com/lvgl/lvgl/commit/33b5d4a4fe6f28962ee7988f74d5ae842dc49b04) - fix(dropdown) adjust the handling of keys sent to the dropdown [`e41c507`](https://github.com/lvgl/lvgl/commit/e41c50780495c7d6ac6a2b0edf12fc98c9d85a6b) - fix(disp) be sure the pending scr load animation is finished in lv_scr_load_anim [`eb6ae52`](https://github.com/lvgl/lvgl/commit/eb6ae526432453e4b9dbc7a760cd65d164050548) -- fix(color) fox color premult precision with 16 bit color depth [`f334226`](https://github.com/lvgl/lvgl/commit/f3342269f272c474265700527f52d3ba92111531) +- fix(color) fox color premult precision with 16-bit color depth [`f334226`](https://github.com/lvgl/lvgl/commit/f3342269f272c474265700527f52d3ba92111531) - fix(obj_pos) save x,y even if the object is on a layout [`a9b660c`](https://github.com/lvgl/lvgl/commit/a9b660c278658224f05fbe43d0199c48711db9fd) - fix(scrollbar) hide the scrollbar if the scrollable flag is removed [`d9c6ad0`](https://github.com/lvgl/lvgl/commit/d9c6ad0425e761d605124e4555adc72854fec4a6) - fix(dropdown) fix list position with RTL base direction [`79edb37`](https://github.com/lvgl/lvgl/commit/79edb37b0ab5015111bade6074fda81ae101b91b) @@ -574,7 +926,7 @@ Some of the most important features are - fix(group) allow refocusing objects [`1520208`](https://github.com/lvgl/lvgl/commit/1520208b14c38713719f507273024624a0f54f1a) - fix(tabview) fix with left and right tabs [`17c5744`](https://github.com/lvgl/lvgl/commit/17c57449eeae8a693ad5601cf4169cf44d57d5c9) - fix(msgbox) create modals on top layer instead of act screen [`5cf6303`](https://github.com/lvgl/lvgl/commit/5cf6303e741ec22e2e87f69af4109855eb637e63) -- fix(theme) show disabled state on buttons of btnmatrix, msgbox and kayboard [`0be582b`](https://github.com/lvgl/lvgl/commit/0be582b391e60774d6158411b835b679b010a99b) +- fix(theme) show disabled state on buttons of btnmatrix, msgbox and keyboard [`0be582b`](https://github.com/lvgl/lvgl/commit/0be582b391e60774d6158411b835b679b010a99b) - fix(label) update lv_label_get_letter_pos to work with LV_BASE_DIR_AUTO too [`580e05a`](https://github.com/lvgl/lvgl/commit/580e05a0e1531d86d5229ade4ced2c336fbce634) - fix(label) fix in lv_label_get_letter_pos with when pos==line_start [`58f3f56`](https://github.com/lvgl/lvgl/commit/58f3f5625c2b29278c3e122d8eeba4d9bc597db9) - fix(gif) replace printf statement with LVGL logging [`56f62b8`](https://github.com/lvgl/lvgl/commit/56f62b8d7356017319d21d44a8f450705ec6486b) @@ -592,7 +944,7 @@ Some of the most important features are - fix(docs) use let instead of const for variable which gets changed [`3cf5751`](https://github.com/lvgl/lvgl/commit/3cf5751461d6a85974da4e5c66593736ae140a1a) - fix(theme) fix the switch style in the default theme [`0c0dc8e`](https://github.com/lvgl/lvgl/commit/0c0dc8ea30289254732cbba7ada7fd4f092caf22) - fix(tlsf) undef printf before define-ing it [`cc935b8`](https://github.com/lvgl/lvgl/commit/cc935b87f69e6107d12d9ba4a2c83103f7dd4356) -- fix(msgbox) prevent the buttons being wider than the msbgox [`73e036b`](https://github.com/lvgl/lvgl/commit/73e036bba748e8677f219f573cba5f82c4158a17) +- fix(msgbox) prevent the buttons being wider than the msgbox [`73e036b`](https://github.com/lvgl/lvgl/commit/73e036bba748e8677f219f573cba5f82c4158a17) - fix(chart) don't draw series lines with < 1 points [`655f42b`](https://github.com/lvgl/lvgl/commit/655f42b852669f27ab8bfde84bf70cf0b7ea027d) - fix(tests) remove src/test_runners when cleaning [`6726b0f`](https://github.com/lvgl/lvgl/commit/6726b0f5df3f4689368782b601bb01f76498123b) - fix(label) remove duplicated lv_obj_refresh_self_size [`a070ecf`](https://github.com/lvgl/lvgl/commit/a070ecfe8c1cf7c07c035ba6c35c3ffaef56d6e1) @@ -730,7 +1082,7 @@ Some of the most important features are - docs update changelog [`c386110`](https://github.com/lvgl/lvgl/commit/c386110e2390399ab97936622e59c510ba414e19) - docs(extra) add extra/README.md [`8cd504d`](https://github.com/lvgl/lvgl/commit/8cd504d58bb679fe1f260e3eee59fcb0b85cb589) - docs add lazy load to the iframes of the examples [`c49e830`](https://github.com/lvgl/lvgl/commit/c49e830aad2c847611f3398767e85c193909559a) -- docs(os) add example and clarify some poinits [`d996453`](https://github.com/lvgl/lvgl/commit/d996453207caa50a90a66d05565431fa288be96b) +- docs(os) add example and clarify some points [`d996453`](https://github.com/lvgl/lvgl/commit/d996453207caa50a90a66d05565431fa288be96b) - docs(rlottie) fix build error [`ce0b564`](https://github.com/lvgl/lvgl/commit/ce0b56458846daa65288f901e9b8ef1083eab468) - docs include paths in libs [`f5f9562`](https://github.com/lvgl/lvgl/commit/f5f956233657f95b45a45d872e5d6e68c05eecd4) - docs libs fixes [`8e7bba6`](https://github.com/lvgl/lvgl/commit/8e7bba6acec66a4f6b80496de9fd21a8e3c4c6ee) @@ -775,7 +1127,7 @@ Some of the most important features are - test convert Makefile to CMake [`2495`](https://github.com/lvgl/lvgl/pull/2495) - test Refactor unit test scripts. [`2473`](https://github.com/lvgl/lvgl/pull/2473) -- test(font_loader) migrate the exisiting font loader test [`bc5b3be`](https://github.com/lvgl/lvgl/commit/bc5b3be61f7751852dc99509a6ab83faaf6d1235) +- test(font_loader) migrate the existing font loader test [`bc5b3be`](https://github.com/lvgl/lvgl/commit/bc5b3be61f7751852dc99509a6ab83faaf6d1235) - test add build test again, add dropdown test, integrate gcov and gvocr [`e35b1d0`](https://github.com/lvgl/lvgl/commit/e35b1d04bdc7d531d72ebce7d1f031be2631e776) - test(dropdown) add tess for keypad and encoder [`4143b80`](https://github.com/lvgl/lvgl/commit/4143b804c8f4b4324141ad0f529bac4e9acf1442) - test add keypad and encoder emulators [`e536bb6`](https://github.com/lvgl/lvgl/commit/e536bb6325728db21ef5c729a99f2161a8125625) @@ -786,7 +1138,7 @@ Some of the most important features are - ci add config for 8bpp [`3eacc59`](https://github.com/lvgl/lvgl/commit/3eacc5923c0a554e7ff4489776a8982dfc142115) - test move more source files to src folder [`3672f87`](https://github.com/lvgl/lvgl/commit/3672f873328b4471ac9d5d23696f7bc99a87bc43) - test update CI for the new tests [`a3898b9`](https://github.com/lvgl/lvgl/commit/a3898b931e81860acf197bc88fd3dd6f8885eb2c) -- test cleant up report folder [`b9b4ba5`](https://github.com/lvgl/lvgl/commit/b9b4ba5b2608f5709678463f62b3d3f937780235) +- test cleaned up report folder [`b9b4ba5`](https://github.com/lvgl/lvgl/commit/b9b4ba5b2608f5709678463f62b3d3f937780235) - test fix build error [`61cda59`](https://github.com/lvgl/lvgl/commit/61cda59cbe8569326ef9d366c520b89be292f5ea) - test(font_loader) migrate the existing font loader test [`d6dbbaa`](https://github.com/lvgl/lvgl/commit/d6dbbaaa34304b4c889415439ab562056e0840a5) - test add move tests to test_cases and test_runners directories [`d2e735e`](https://github.com/lvgl/lvgl/commit/d2e735ef36bd99c16ccaa281dcaa5f418e2dec98) @@ -843,7 +1195,7 @@ Some of the most important features are - Update ROADMAP.md [`2b1ae3c`](https://github.com/lvgl/lvgl/commit/2b1ae3c107539dec130b988cddca5ddb2b5af652) - Create .codecov.yml [`e53aa82`](https://github.com/lvgl/lvgl/commit/e53aa82658a1d7324f328c986cb5b7b669803ba2) - refactor(examples) drop JS-specific code from header.py [`ef41450`](https://github.com/lvgl/lvgl/commit/ef41450ed87f4f4dd936b63349b5a0c9ce880618) -- make test run on mseter and release/v8.* [`227402a`](https://github.com/lvgl/lvgl/commit/227402a81a1cdd34cd57ec04682166d3961c4481) +- make test run on master and release/v8.* [`227402a`](https://github.com/lvgl/lvgl/commit/227402a81a1cdd34cd57ec04682166d3961c4481) - Update release.yml [`0838f12`](https://github.com/lvgl/lvgl/commit/0838f1296b2c55c0b265650ee4310a79730536dd) - refactor(examples) drop usys import from header.py [`ad1f91a`](https://github.com/lvgl/lvgl/commit/ad1f91ab32c38cab7f0d1448ce3c4e67b47f4526) - Update ROADMAP.md [`a38fcf2`](https://github.com/lvgl/lvgl/commit/a38fcf2c7aa5fd156d3f2b6965ec4f81d7ff5503) @@ -884,104 +1236,104 @@ Some of the most important features are - fix(imgbtn) use the correct src in LV_EVENT_GET_SELF_SIZE - fix(color) remove extraneous cast for 8-bit color - fix(obj style) fix children reposition if the parent's padding changes. -- fix(color) remove extraneous _LV_COLOR_MAKE_TYPE_HELPER (#2372) -- fix(spinner) should not be clickable (#2373) -- fix(obj) improve how the focusing indev is determined -- fix(template) update indev template for v8 -- fix(printf) skip defining attribute if pycparser is used -- refactor(printf) add printf-like function attribute to _lv_txt_set_text_vfmt and lv_label_set_text_fmt (#2332) -- fix(template) include lvgl.h in lv_port_*_template.c files -- fix(obj) detecting which indev sent LV_EVENT_FOCUS -- fix (span) fill LV_EVENT_GET_SELF_SIZE (#2360) -- fix(arc) disable LV_OBJ_FLAG_SCROLL_CHAIN by default -- fix (draw) fix arc bg image drawing with full arcs -- fix(disp) fix memory leak in lv_disp_remove (#2355) -- fix warnings introduced by 3fb8baf5 -- fix(widgets) use lv_obj_class for all the widgets +- fix(color) remove extraneous _LV_COLOR_MAKE_TYPE_HELPER (#2372) +- fix(spinner) should not be clickable (#2373) +- fix(obj) improve how the focusing indev is determined +- fix(template) update indev template for v8 +- fix(printf) skip defining attribute if pycparser is used +- refactor(printf) add printf-like function attribute to _lv_txt_set_text_vfmt and lv_label_set_text_fmt (#2332) +- fix(template) include lvgl.h in lv_port_*_template.c files +- fix(obj) detecting which indev sent LV_EVENT_FOCUS +- fix (span) fill LV_EVENT_GET_SELF_SIZE (#2360) +- fix(arc) disable LV_OBJ_FLAG_SCROLL_CHAIN by default +- fix (draw) fix arc bg image drawing with full arcs +- fix(disp) fix memory leak in lv_disp_remove (#2355) +- fix warnings introduced by 3fb8baf5 +- fix(widgets) use lv_obj_class for all the widgets - fix(obj) move clean ups from lv_obj_del to lv_obj_destructor -- fix(roller) fix partial redraw of the selected area -- fix(roller) adjust the size of the selected area correctly -- fix(obj) delete useless type conversion (#2343) +- fix(roller) fix partial redraw of the selected area +- fix(roller) adjust the size of the selected area correctly +- fix(obj) delete useless type conversion (#2343) - fix(lv_obj_scroll.h) typos (#2345) - fix(scroll) fire LV_EVENT_SCROLL_BEGIN in the same spot for both axes -- fix(btnmatrix) fix button invalidation on focus change -- fix(textarea) style update in oneline mode + improve scroll to cursor -- fix(tlsf) do not use -- fix(imgbtn) consider width==LV_SIZE_CONTENT if only mid. img is set -- fix(refr) reduce the nesting level in lv_refr_area -- fix(txt) enhance the function of break_chars (#2327) -- fix(pxp): update RTOS macro for SDK 2.10 -- fix(vglite): update for v8 -- fix(pxp): update for v8 -- fix(flex) fix layout update and invalidation issues -- fix(flex) fix NULL pointer dereference -- fix(obj, switch) do not send LV_EVENT_VALUE_CHANGED twice -- fix(color) overflow with 16-bit color depth -- fix(coords) fix using large coordinates -- fix(chart) fix crash if no series are added -- fix(chart) invalidation with LV_CHART_UPDATE_MODE_SHIFT +- fix(btnmatrix) fix button invalidation on focus change +- fix(textarea) style update in oneline mode + improve scroll to cursor +- fix(tlsf) do not use +- fix(imgbtn) consider width==LV_SIZE_CONTENT if only mid. img is set +- fix(refr) reduce the nesting level in lv_refr_area +- fix(txt) enhance the function of break_chars (#2327) +- fix(pxp): update RTOS macro for SDK 2.10 +- fix(vglite): update for v8 +- fix(pxp): update for v8 +- fix(flex) fix layout update and invalidation issues +- fix(flex) fix NULL pointer dereference +- fix(obj, switch) do not send LV_EVENT_VALUE_CHANGED twice +- fix(color) overflow with 16-bit color depth +- fix(coords) fix using large coordinates +- fix(chart) fix crash if no series are added +- fix(chart) invalidation with LV_CHART_UPDATE_MODE_SHIFT - fix(align) fix lv_obj_align_to G -- fix(table) invalidate the table on cell value change -- fix(label) remove duplicated lv_obj_refresh_self_size -- fix(draw) underflow in subpixel font drawing -- fix (scroll) do not send unnecessary scroll end events +- fix(table) invalidate the table on cell value change +- fix(label) remove duplicated lv_obj_refresh_self_size +- fix(draw) underflow in subpixel font drawing +- fix (scroll) do not send unnecessary scroll end events ## v8.0.1 (14.06.2021) -- docs(filesystem) update to v8 7971ade4 -- fix(msgbox) create modals on top layer instead of act screen 5cf6303e -- fix(colorwheel) disable LV_OBJ_FLAG_SCROLL_CHAIN by default 48d1c292 -- docs(grid) typo fix (#2310) 69d109d2 -- fix(arduino) fix the prototype of my_touchpad_read in the LVGL_Arduino.ino 1a62f7a6 -- fix(meter) fix needle image invalidation 54d8e817 -- fix(mem) add lv_ prefix to tlsf functions and types 0d52b59c -- fix(calendar) fix the position calculation today ad05e196 -- fix(typo) rename LV_OBJ_FLAG_SNAPABLE to LV_OBJ_FLAG_SNAPPABLE e697807c -- docs(color) language fixes (#2302) 07ecc9f1 -- fix(tick) minor optimization on lv_tick_inc call test b4305df5 -- Spelling and other language fixes to documentation (#2293) d0aaacaf -- fix(theme) show disabled state on buttons of btnmatrix, msgbox and keyboard 0be582b3 -- fix(scroll) keep the scroll position on object deleted 52edbb46 -- fix(msgbox) handle NULL btn map parameter 769c4a30 -- fix(group) allow refocusing objects 1520208b -- docs(overview) spelling fixes d2efb8c6 -- Merge branch 'master' of https://github.com/lvgl/lvgl 45960838 -- feat(timer) check if lv_tick_inc is called aa6641a6 -- feat(docs) add view on GitHub link a716ac6e -- fix(theme) fix the switch style in the default theme 0c0dc8ea -- docs fix typo 8ab80645 -- Merge branch 'master' of https://github.com/lvgl/lvgl e796448f -- feat(event) pass the scroll animation to LV_EVENT_SCROLL_BEGIN ca54ecfe -- fix(tabview) fix with left and right tabs 17c57449 -- chore(docs) force docs rebuild 4a0f4139 -- chore(docs) always deploy master to docs/master as well 6d05692d -- fix(template) update lv_objx_template to v8 38bb8afc -- docs(extra) add extra/README.md 8cd504d5 -- Update CHANGELOG.md 48fd73d2 -- Update quick-overview.md (#2295) 5616471c -- fix(pxp) change LV_COLOR_TRANSP to LV_COLOR_CHROMA_KEY to v8 compatibility 81f3068d -- adding micropython examples (#2286) c60ed68e -- docs(color) minor fix ac8f4534 -- fix(example) revert test code 77e2c1ff -- fix(draw) with additive blending with 32-bit color depth 786db2af -- docs(color) update colors' docs 9056b5ee -- Merge branch 'master' of https://github.com/lvgl/lvgl a711a1dd -- perf(refresh) optimize where to wait for lv_disp_flush_ready with 2 buffers d0172f14 -- docs(lv_obj_style) update add_style and remove_style function headers (#2287) 60f7bcbf -- fix memory leak of spangroup (#2285) 33e0926a -- fix make lv_img_cache.h public because cache invalidation is public 38ebcd81 -- Merge branch 'master' of https://github.com/lvgl/lvgl 2b292495 -- fix(btnmatrix) fix focus event handling 3b58ef14 -- Merge pull request #2280 from lvgl/dependabot/pip/docs/urllib3-1.26.5 a2f45b26 -- fix(label) calculating the clip area 57e211cc -- chore(deps): bump urllib3 from 1.26.4 to 1.26.5 in /docs b2f77dfc -- fix(docs) add docs about the default group 29bfe604 +- docs(filesystem) update to v8 7971ade4 +- fix(msgbox) create modals on top layer instead of act screen 5cf6303e +- fix(colorwheel) disable LV_OBJ_FLAG_SCROLL_CHAIN by default 48d1c292 +- docs(grid) typo fix (#2310) 69d109d2 +- fix(arduino) fix the prototype of my_touchpad_read in the LVGL_Arduino.ino 1a62f7a6 +- fix(meter) fix needle image invalidation 54d8e817 +- fix(mem) add lv_ prefix to tlsf functions and types 0d52b59c +- fix(calendar) fix the position calculation today ad05e196 +- fix(typo) rename LV_OBJ_FLAG_SNAPABLE to LV_OBJ_FLAG_SNAPPABLE e697807c +- docs(color) language fixes (#2302) 07ecc9f1 +- fix(tick) minor optimization on lv_tick_inc call test b4305df5 +- Spelling and other language fixes to documentation (#2293) d0aaacaf +- fix(theme) show disabled state on buttons of btnmatrix, msgbox and keyboard 0be582b3 +- fix(scroll) keep the scroll position on object deleted 52edbb46 +- fix(msgbox) handle NULL btn map parameter 769c4a30 +- fix(group) allow refocusing objects 1520208b +- docs(overview) spelling fixes d2efb8c6 +- Merge branch 'master' of https://github.com/lvgl/lvgl 45960838 +- feat(timer) check if lv_tick_inc is called aa6641a6 +- feat(docs) add view on GitHub link a716ac6e +- fix(theme) fix the switch style in the default theme 0c0dc8ea +- docs fix typo 8ab80645 +- Merge branch 'master' of https://github.com/lvgl/lvgl e796448f +- feat(event) pass the scroll animation to LV_EVENT_SCROLL_BEGIN ca54ecfe +- fix(tabview) fix with left and right tabs 17c57449 +- chore(docs) force docs rebuild 4a0f4139 +- chore(docs) always deploy master to docs/master as well 6d05692d +- fix(template) update lv_objx_template to v8 38bb8afc +- docs(extra) add extra/README.md 8cd504d5 +- Update CHANGELOG.md 48fd73d2 +- Update quick-overview.md (#2295) 5616471c +- fix(pxp) change LV_COLOR_TRANSP to LV_COLOR_CHROMA_KEY to v8 compatibility 81f3068d +- adding micropython examples (#2286) c60ed68e +- docs(color) minor fix ac8f4534 +- fix(example) revert test code 77e2c1ff +- fix(draw) with additive blending with 32-bit color depth 786db2af +- docs(color) update colors' docs 9056b5ee +- Merge branch 'master' of https://github.com/lvgl/lvgl a711a1dd +- perf(refresh) optimize where to wait for lv_disp_flush_ready with 2 buffers d0172f14 +- docs(lv_obj_style) update add_style and remove_style function headers (#2287) 60f7bcbf +- fix memory leak of spangroup (#2285) 33e0926a +- fix make lv_img_cache.h public because cache invalidation is public 38ebcd81 +- Merge branch 'master' of https://github.com/lvgl/lvgl 2b292495 +- fix(btnmatrix) fix focus event handling 3b58ef14 +- Merge pull request #2280 from lvgl/dependabot/pip/docs/urllib3-1.26.5 a2f45b26 +- fix(label) calculating the clip area 57e211cc +- chore(deps): bump urllib3 from 1.26.4 to 1.26.5 in /docs b2f77dfc +- fix(docs) add docs about the default group 29bfe604 ## v8.0.0 (01.06.2021) v8.0 brings many new features like simplified and more powerful scrolling, new layouts inspired by CSS Flexbox and Grid, simplified and improved widgets, more powerful events, hookable drawing, and more. -v8 is a major change and therefore it's not backward compatible with v7. +v8 is a major change and therefore it's not backward compatible with v7. ### Directory structure - The `lv_` prefix is removed from the folder names @@ -1025,7 +1377,7 @@ v8 is a major change and therefore it's not backward compatible with v7. - `lv_disp_drv_t`, `lv_indev_drv_t`, `lv_fs_drv_t` needs to be `static` - `...disp_buf...` is renamed to `draw_buf`. See an initialization example [here](https://github.com/lvgl/lv_sim_eclipse_sdl/blob/release/v8.0/main.c#L128-L141). - No partial update if two screen sized buffers are set -- `disp_drv->full_refresh = 1` makes always the whole display redraw. +- `disp_drv->full_refresh = 1` makes always the whole display redraw. - `hor_res` and `ver_res` need to be set in `disp_drv` - `indev_read_cb` returns `void`. To indicate that there is more that to read set `data->continue_reading = 1` in the `read_cb` @@ -1054,7 +1406,7 @@ v8 is a major change and therefore it's not backward compatible with v7. - Use the new layouts instead of `lv_cont` features - Use `lv_obj` instead of `lv_page` - See the changes in [Colors](https://docs.lvgl.io/8.0/overview/color.html) - - The other parts are mainly minor renames and refactoring. See the functions' documentation for descriptions. + - The other parts are mainly minor renames and refactoring. See the functions' documentation for descriptions. ## v7.11.0 (16.03.2021) @@ -1068,7 +1420,7 @@ v8 is a major change and therefore it's not backward compatible with v7. ## v7.10.1 (16.02.2021) -### Bugfixes +### Bugfixes - fix(draw) overlap outline with background to prevent aliasing artifacts - fix(indev) clear the indev's `act_obj` in `lv_indev_reset` - fix(text) fix out of bounds read in `_lv_txt_get_width` @@ -1126,7 +1478,7 @@ v8 is a major change and therefore it's not backward compatible with v7. ## v7.8.0 (01.12.2020) ### New features -- make DMA2D non blocking +- make DMA2D non blocking - add unscii-16 built-in font - add KConfig - add lv_refr_get_fps_avg() @@ -1143,7 +1495,7 @@ v8 is a major change and therefore it's not backward compatible with v7. - fix(slider) adjusting the left knob too with encoder - fix reference to LV_DRAW_BUF_MAX_NUM in lv_mem.c - fix(polygon draw) join adjacent points if they are on the same coordinate -- fix(linemeter) fix invalidation when setting new value +- fix(linemeter) fix invalidation when setting new value - fix(table) add missing invalidation when changing cell type - refactor(roller) rename LV_ROLLER_MODE_INIFINITE -> LV_ROLLER_MODE_INFINITE @@ -1155,7 +1507,7 @@ v8 is a major change and therefore it's not backward compatible with v7. - label: Repair calculate back `dot` character logical error which cause infinite loop. - fix(theme_material): remove the bottom border from tabview header - fix(imgbtn) guess the closest available state with valid src -- fix(spinbox) update cursor position in lv_spinbox_set_step +- fix(spinbox) update cursor position in lv_spinbox_set_step ## v7.7.1 (03.11.2020) ### Bugfixes @@ -1200,7 +1552,7 @@ v8 is a major change and therefore it's not backward compatible with v7. - Check whether any style property has changed on a state change to decide if any redraw is required ### Bugfixes -- Fix selection of options with non-ASCII letters in dropdown list +- Fix selection of options with non-ASCII letters in dropdown list - Fix font loader to support LV_FONT_FMT_TXT_LARGE ## v7.5.0 (15.09.2020) @@ -1247,7 +1599,7 @@ The main new features of v7.4 are run-time font loading, style caching and arc k - Rename `lv_chart_clear_serie` to `lv_chart_clear_series` and `lv_obj_align_origo` to `lv_obj_align_mid` - Add linemeter's mirror feature again - Fix text decor (underline strikethrough) with older versions of font converter -- Fix setting local style property multiple times +- Fix setting local style property multiple times - Add missing background drawing and radius handling to image button - Allow adding extra label to list buttons - Fix crash if `lv_table_set_col_cnt` is called before `lv_table_set_row_cnt` for the first time @@ -1299,7 +1651,7 @@ The main new features of v7.4 are run-time font loading, style caching and arc k ### Bugfixes - `tileview` fix navigation when not screen sized -- Use 14px font by default to for better compatibility with smaller displays +- Use 14px font by default to for better compatibility with smaller displays - `linemeter` fix conversation of current value to "level" - Fix drawing on right border - Set the cursor image non-clickable by default @@ -1356,7 +1708,7 @@ The main new features of v7.4 are run-time font loading, style caching and arc k ### Bugfixes - Make Micropython working by adding the required variables as GC_ROOT -- Prefix some internal API functions with `_` to reduce the API of LVGL +- Prefix some internal API functions with `_` to reduce the API of LVGL - Fix built-in SimSun CJK font - Fix UTF-8 encoding when `LV_USE_ARABIC_PERSIAN_CHARS` is enabled - Fix DMA2D usage when 32 bit images directly blended @@ -1381,12 +1733,12 @@ The name of the project is changed to LVGL and the new website is on https://lvg LVGL remains free under the same conditions (MIT license) and a company is created to manage LVGL and offer services. ### New drawing system -Complete rework of LVGL's draw engine to use "masks" for more advanced and higher quality graphical effects. +Complete rework of LVGL's draw engine to use "masks" for more advanced and higher quality graphical effects. A possible use-case of this system is to remove the overflowing content from the rounded edges. It also allows drawing perfectly anti-aliased circles, lines, and arcs. -Internally, the drawings happen by defining masks (such as rounded rectangle, line, angle). -When something is drawn the currently active masks can make some pixels transparent. -For example, rectangle borders are drawn by using 2 rectangle masks: one mask removes the inner part and another the outer part. +Internally, the drawings happen by defining masks (such as rounded rectangle, line, angle). +When something is drawn the currently active masks can make some pixels transparent. +For example, rectangle borders are drawn by using 2 rectangle masks: one mask removes the inner part and another the outer part. The API in this regard remained the same but some new functions were added: - `lv_img_set_zoom`: set image object's zoom factor @@ -1396,12 +1748,12 @@ The API in this regard remained the same but some new functions were added: The new drawing engine brought new drawing features too. They are highlighted in the "style" section. ### New style system -The old style system is replaced with a new more flexible and lightweighted one. -It uses an approach similar to CSS: support cascading styles, inheriting properties and local style properties per object. -As part of these updates, a lot of objects were reworked and the APIs have been changed. +The old style system is replaced with a new more flexible and lightweighted one. +It uses an approach similar to CSS: support cascading styles, inheriting properties and local style properties per object. +As part of these updates, a lot of objects were reworked and the APIs have been changed. - more shadows options: *offset* and *spread* -- gradient stop position to shift the gradient area and horizontal gradient +- gradient stop position to shift the gradient area and horizontal gradient - `LV_BLEND_MODE_NORMAL/ADDITIVE/SUBTRACTIVE` blending modes - *clip corner*: crop the content on the rounded corners - *text underline* and *strikethrough* @@ -1445,16 +1797,16 @@ The following object types are renamed: - `linemeter`, `gauge`: can have background if the related style properties are set. Padding makes the scale/lines smaller. scale_border_width and scale_end_border_width allow to draw an arc on the outer part of the scale lines. - `gauge`: `lv_gauge_set_needle_img` allows use image as needle - `canvas`: allow drawing to true color alpha and alpha only canvas, add `lv_canvas_blur_hor/ver` and rename `lv_canvas_rotate` to `lv_canvas_transform` -- `textarea`: If available in the font use bullet (`U+2022`) character in text area password +- `textarea`: If available in the font use bullet (`U+2022`) character in text area password ### New object types -- `lv_objmask`: masks can be added to it. The children will be masked accordingly. +- `lv_objmask`: masks can be added to it. The children will be masked accordingly. ### Others - Change the built-in fonts to [Montserrat](https://fonts.google.com/specimen/Montserrat) and add built-in fonts from 12 px to 48 px for every 2nd size. - Add example CJK and Arabic/Persian/Hebrew built-in font - Add ° and "bullet" to the built-in fonts -- Add Arabic/Persian script support: change the character according to its position in the text. +- Add Arabic/Persian script support: change the character according to its position in the text. - Add `playback_time` to animations. - Add `repeat_count` to animations instead of the current "repeat forever". - Replace `LV_LAYOUT_PRETTY` with `LV_LAYOUT_PRETTY_TOP/MID/BOTTOM` @@ -1471,4 +1823,4 @@ The following object types are renamed: - First and foremost, create a new `lv_conf.h` based on `lv_conf_template.h`. - To try the new version it suggested using a simulator project and see the examples. - If you have a running project, the most difficult part of the migration is updating to the new style system. Unfortunately, there is no better way than manually updating to the new format. -- The other parts are mainly minor renames and refactoring as described above. +- The other parts are mainly minor renames and refactoring as described above. diff --git a/docs/CODING_STYLE.md b/docs/CODING_STYLE.md index f1a6c8b5f..d45f0fc4c 100644 --- a/docs/CODING_STYLE.md +++ b/docs/CODING_STYLE.md @@ -87,3 +87,38 @@ void lv_label_set_text(lv_obj_t * label, const char * text) Use 4 spaces indentation instead of tab. You can use **astyle** to format the code. Run `code-formatter.sh` from the `scrips` folder. + +#### pre-commit + +[pre-commit](https://pre-commit.com/) is a multi-language package manager for pre-commit hooks. +See the [instalation guide](https://pre-commit.com/#installation) to get pre-commit python package +installed into your development machine. + +Once you have `pre-commit` installed you will need to [set up the git hook scripts](https://pre-commit.com/#3-install-the-git-hook-scripts) with: +```console +pre-commit install +``` + +now `pre-commit` will run automatically on `git commit`! + +##### Hooks + +The `format-source` local hook (see `.pre-commit-config.yaml`) runs **astyle** on all the staged source and header +files (that are not excluded, see `exclude` key of the hook configuration) before entering the commit message, +if any file gets formatted by **astyle** you will need to add the change to the staging area and run `git commit` again. + +The `trailing-whitespace` hook fixes trailing whitespaces on all of the files. + +##### Skipping hooks + +If you want to skip any particular hook you can do so with: +```console +SKIP=name-of-the-hook git commit +``` + +##### Testing hooks + +It's no necessary to do a commit to test the hooks, you can test hooks by adding the files into the staging area and run: +```console +pre-commit run name-of-the-hook +``` \ No newline at end of file diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 0d577894a..67590e158 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -1,7 +1,3 @@ -```eval_rst -.. include:: /header.rst -:github_url: |github_link_base|/CONTRIBUTING.md -``` # Contributing @@ -9,22 +5,22 @@ Join LVGL's community and leave your footprint in the library! -There are a lot of ways to contribute to LVGL even if you are new to the library or even new to programming. +There are a lot of ways to contribute to LVGL even if you are new to the library or even new to programming. -It might be scary to make the first step but you have nothing to be afraid of. +It might be scary to make the first step but you have nothing to be afraid of. A friendly and helpful community is waiting for you. Get to know like-minded people and make something great together. So let's find which contribution option fits you the best and help you join the development of LVGL! Before getting started here are some guidelines to make contribution smoother: -- Be kind and friendly. +- Be kind and friendly. - Be sure to read the relevant part of the documentation before posting a question. - Ask questions in the [Forum](https://forum.lvgl.io/) and use [GitHub](https://github.com/lvgl/) for development-related discussions. - Always fill out the post or issue templates in the Forum or GitHub (or at least provide equivalent information). It makes understanding your contribution or issue easier and you will get a useful response faster. - If possible send an absolute minimal but buildable code example in order to reproduce the issue. Be sure it contains all the required variable declarations, constants, and assets (images, fonts). - Use [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format your posts. You can learn it in 10 minutes. - Speak about one thing in one issue or topic. It makes your post easier to find later for someone with the same question. -- Give feedback and close the issue or mark the topic as solved if your question is answered. +- Give feedback and close the issue or mark the topic as solved if your question is answered. - For non-trivial fixes and features, it's better to open an issue first to discuss the details instead of sending a pull request directly. - Please read and follow the Coding style guide. @@ -32,7 +28,7 @@ Before getting started here are some guidelines to make contribution smoother: Merging new code into the lvgl, documentation, blog, examples, and other repositories happen via *Pull requests* (PR for short). A PR is a notification like "Hey, I made some updates to your project. Here are the changes, you can add them if you want." -To do this you need a copy (called fork) of the original project under your account, make some changes there, and notify the original repository about your updates. +To do this you need a copy (called fork) of the original project under your account, make some changes there, and notify the original repository about your updates. You can see what it looks like on GitHub for LVGL here: [https://github.com/lvgl/lvgl/pulls](https://github.com/lvgl/lvgl/pulls). To add your changes you can edit files online on GitHub and send a new Pull request from there (recommended for small changes) or @@ -48,13 +44,13 @@ To add your changes you can edit files online on GitHub and send a new Pull requ ### From command line The instructions describe the main `lvgl` repository but it works the same way for the other repositories. -1. Fork the [lvgl repository](https://github.com/lvgl/lvgl). To do this click the "Fork" button in the top right corner. +1. Fork the [lvgl repository](https://github.com/lvgl/lvgl). To do this click the "Fork" button in the top right corner. It will "copy" the `lvgl` repository to your GitHub account (`https://github.com/?tab=repositories`) 2. Clone your forked repository. -3. Add your changes. You can create a *feature branch* from *master* for the updates: `git checkout -b the-new-feature` +3. Add your changes. You can create a *feature branch* from *master* for the updates: `git checkout -b the-new-feature` 4. Commit and push your changes to the forked `lvgl` repository. 5. Create a PR on GitHub from the page of your `lvgl` repository (`https://github.com//lvgl`) by clicking the *"New pull request"* button. Don't forget to select the branch where you added your changes. -7. Set the base branch. It means where you want to merge your update. In the `lvgl` repo both the fixes and new features go to `master` branch. +7. Set the base branch. It means where you want to merge your update. In the `lvgl` repo both the fixes and new features go to `master` branch. 8. Describe what is in the update. An example code is welcome if applicable. 9. If you need to make more changes, just update your forked `lvgl` repo with new commits. They will automatically appear in the PR. @@ -72,7 +68,7 @@ The following structure should be used: Possible ``s: - `fix` bugfix in the source code. -- `feat` new feature +- `feat` new feature - `arch` architectural changes - `perf` changes that affect the performance - `example` anything related to examples (even fixes and new examples) @@ -91,8 +87,8 @@ For example `img`, `layout`, `txt`, `anim`. The scope can be omitted. `` optional and can be used to describe the details of this change. -`