Full Code of 100askTeam/xiaozhi-linux for AI

master 9eff7f419122 cached
1763 files
57.5 MB
15.2M tokens
10306 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (60,695K chars total). Download the full file to get everything.
Repository: 100askTeam/xiaozhi-linux
Branch: master
Commit: 9eff7f419122
Files: 1763
Total size: 57.5 MB

Directory structure:
gitextract_ysn28l70/

├── CNAME
├── README.md
├── control_center/
│   ├── Makefile
│   ├── cfg.h
│   ├── control_center.cpp
│   ├── http.cpp
│   ├── http.h
│   ├── ipc_udp.cpp
│   ├── ipc_udp.h
│   ├── json.hpp
│   ├── uuid.cpp
│   ├── uuid.h
│   ├── websocket_client.cpp
│   └── websocket_client.h
├── gui/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── Makefile
│   ├── README.md
│   ├── bin/
│   │   ├── lvgl_xiaozhi
│   │   └── main
│   ├── build.sh
│   ├── lv_100ask_xz_ai/
│   │   ├── CMakeLists.txt
│   │   ├── library.properties
│   │   ├── lv_100ask_xz_ai.h
│   │   ├── lv_100ask_xz_ai.mk
│   │   └── src/
│   │       ├── cJSON.c
│   │       ├── cJSON.h
│   │       ├── cfg.h
│   │       ├── ipc_udp.c
│   │       ├── ipc_udp.h
│   │       ├── lang_config.h
│   │       ├── lv_100ask_xz_ai_main.c
│   │       ├── lv_100ask_xz_ai_main.h
│   │       ├── ui_system.c
│   │       └── ui_system.h
│   ├── lv_100ask_xz_ai_conf.h
│   ├── lv_conf.defaults
│   ├── lv_conf.h
│   ├── lvgl/
│   │   ├── .devcontainer/
│   │   │   ├── __CMakeLists.txt__
│   │   │   ├── __build_all.sh__
│   │   │   ├── __c_cpp_properties.json__
│   │   │   ├── __lv_conf.h__
│   │   │   ├── __main.c__
│   │   │   ├── __settings.json__
│   │   │   ├── devcontainer.json
│   │   │   ├── lvgl_shell.html
│   │   │   └── setup.sh
│   │   ├── .gitignore
│   │   ├── .pre-commit-config.yaml
│   │   ├── .typos.toml
│   │   ├── CMakeLists.txt
│   │   ├── CMakePresets.json
│   │   ├── Kconfig
│   │   ├── LICENCE.txt
│   │   ├── README.md
│   │   ├── SConscript
│   │   ├── component.mk
│   │   ├── demos/
│   │   │   ├── README.md
│   │   │   ├── benchmark/
│   │   │   │   ├── assets/
│   │   │   │   │   ├── img_benchmark_avatar.c
│   │   │   │   │   ├── img_benchmark_cogwheel_alpha256.c
│   │   │   │   │   ├── img_benchmark_cogwheel_argb.c
│   │   │   │   │   ├── img_benchmark_cogwheel_indexed16.c
│   │   │   │   │   ├── img_benchmark_cogwheel_rgb.c
│   │   │   │   │   ├── lv_font_benchmark_montserrat_12_compr_az.c.c
│   │   │   │   │   ├── lv_font_benchmark_montserrat_16_compr_az.c.c
│   │   │   │   │   └── lv_font_benchmark_montserrat_28_compr_az.c.c
│   │   │   │   ├── lv_demo_benchmark.c
│   │   │   │   └── lv_demo_benchmark.h
│   │   │   ├── flex_layout/
│   │   │   │   ├── lv_demo_flex_layout.h
│   │   │   │   ├── lv_demo_flex_layout_ctrl_pad.c
│   │   │   │   ├── lv_demo_flex_layout_flex_loader.c
│   │   │   │   ├── lv_demo_flex_layout_main.c
│   │   │   │   ├── lv_demo_flex_layout_main.h
│   │   │   │   ├── lv_demo_flex_layout_view.c
│   │   │   │   ├── lv_demo_flex_layout_view_child_node.c
│   │   │   │   └── lv_demo_flex_layout_view_ctrl_pad.c
│   │   │   ├── keypad_encoder/
│   │   │   │   ├── README.md
│   │   │   │   ├── lv_demo_keypad_encoder.c
│   │   │   │   └── lv_demo_keypad_encoder.h
│   │   │   ├── lv_demos.c
│   │   │   ├── lv_demos.h
│   │   │   ├── multilang/
│   │   │   │   ├── assets/
│   │   │   │   │   ├── avatars/
│   │   │   │   │   │   ├── img_multilang_avatar_1.c
│   │   │   │   │   │   ├── img_multilang_avatar_10.c
│   │   │   │   │   │   ├── img_multilang_avatar_11.c
│   │   │   │   │   │   ├── img_multilang_avatar_12.c
│   │   │   │   │   │   ├── img_multilang_avatar_13.c
│   │   │   │   │   │   ├── img_multilang_avatar_14.c
│   │   │   │   │   │   ├── img_multilang_avatar_15.c
│   │   │   │   │   │   ├── img_multilang_avatar_16.c
│   │   │   │   │   │   ├── img_multilang_avatar_17.c
│   │   │   │   │   │   ├── img_multilang_avatar_18.c
│   │   │   │   │   │   ├── img_multilang_avatar_19.c
│   │   │   │   │   │   ├── img_multilang_avatar_2.c
│   │   │   │   │   │   ├── img_multilang_avatar_22.c
│   │   │   │   │   │   ├── img_multilang_avatar_25.c
│   │   │   │   │   │   ├── img_multilang_avatar_3.c
│   │   │   │   │   │   ├── img_multilang_avatar_4.c
│   │   │   │   │   │   ├── img_multilang_avatar_5.c
│   │   │   │   │   │   ├── img_multilang_avatar_6.c
│   │   │   │   │   │   ├── img_multilang_avatar_7.c
│   │   │   │   │   │   ├── img_multilang_avatar_8.c
│   │   │   │   │   │   └── img_multilang_avatar_9.c
│   │   │   │   │   ├── emojis/
│   │   │   │   │   │   ├── img_emoji_artist_palette.c
│   │   │   │   │   │   ├── img_emoji_books.c
│   │   │   │   │   │   ├── img_emoji_camera_with_flash.c
│   │   │   │   │   │   ├── img_emoji_cat_face.c
│   │   │   │   │   │   ├── img_emoji_deciduous_tree.c
│   │   │   │   │   │   ├── img_emoji_dog_face.c
│   │   │   │   │   │   ├── img_emoji_earth_globe_europe_africa.c
│   │   │   │   │   │   ├── img_emoji_flexed_biceps.c
│   │   │   │   │   │   ├── img_emoji_movie_camera.c
│   │   │   │   │   │   ├── img_emoji_red_heart.c
│   │   │   │   │   │   ├── img_emoji_rocket.c
│   │   │   │   │   │   └── img_emoji_soccer_ball.c
│   │   │   │   │   ├── fonts/
│   │   │   │   │   │   ├── NotoSansSC-Medium.otf
│   │   │   │   │   │   ├── font2c.py
│   │   │   │   │   │   ├── font_multilang_large.c
│   │   │   │   │   │   └── font_multilang_small.c
│   │   │   │   │   ├── img2c.py
│   │   │   │   │   └── img_multilang_like.c
│   │   │   │   ├── img2c.py
│   │   │   │   ├── lv_demo_multilang.c
│   │   │   │   └── lv_demo_multilang.h
│   │   │   ├── music/
│   │   │   │   ├── README.md
│   │   │   │   ├── assets/
│   │   │   │   │   ├── img_lv_demo_music_btn_corner_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_list_pause.c
│   │   │   │   │   ├── img_lv_demo_music_btn_list_pause_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_list_play.c
│   │   │   │   │   ├── img_lv_demo_music_btn_list_play_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_loop.c
│   │   │   │   │   ├── img_lv_demo_music_btn_loop_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_next.c
│   │   │   │   │   ├── img_lv_demo_music_btn_next_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_pause.c
│   │   │   │   │   ├── img_lv_demo_music_btn_pause_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_play.c
│   │   │   │   │   ├── img_lv_demo_music_btn_play_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_prev.c
│   │   │   │   │   ├── img_lv_demo_music_btn_prev_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_rnd.c
│   │   │   │   │   ├── img_lv_demo_music_btn_rnd_large.c
│   │   │   │   │   ├── img_lv_demo_music_corner_left.c
│   │   │   │   │   ├── img_lv_demo_music_corner_left_large.c
│   │   │   │   │   ├── img_lv_demo_music_corner_right.c
│   │   │   │   │   ├── img_lv_demo_music_corner_right_large.c
│   │   │   │   │   ├── img_lv_demo_music_cover_1.c
│   │   │   │   │   ├── img_lv_demo_music_cover_1_large.c
│   │   │   │   │   ├── img_lv_demo_music_cover_2.c
│   │   │   │   │   ├── img_lv_demo_music_cover_2_large.c
│   │   │   │   │   ├── img_lv_demo_music_cover_3.c
│   │   │   │   │   ├── img_lv_demo_music_cover_3_large.c
│   │   │   │   │   ├── img_lv_demo_music_icon_1.c
│   │   │   │   │   ├── img_lv_demo_music_icon_1_large.c
│   │   │   │   │   ├── img_lv_demo_music_icon_2.c
│   │   │   │   │   ├── img_lv_demo_music_icon_2_large.c
│   │   │   │   │   ├── img_lv_demo_music_icon_3.c
│   │   │   │   │   ├── img_lv_demo_music_icon_3_large.c
│   │   │   │   │   ├── img_lv_demo_music_icon_4.c
│   │   │   │   │   ├── img_lv_demo_music_icon_4_large.c
│   │   │   │   │   ├── img_lv_demo_music_list_border.c
│   │   │   │   │   ├── img_lv_demo_music_list_border_large.c
│   │   │   │   │   ├── img_lv_demo_music_logo.c
│   │   │   │   │   ├── img_lv_demo_music_slider_knob.c
│   │   │   │   │   ├── img_lv_demo_music_slider_knob_large.c
│   │   │   │   │   ├── img_lv_demo_music_wave_bottom.c
│   │   │   │   │   ├── img_lv_demo_music_wave_bottom_large.c
│   │   │   │   │   ├── img_lv_demo_music_wave_top.c
│   │   │   │   │   ├── img_lv_demo_music_wave_top_large.c
│   │   │   │   │   ├── spectrum.py
│   │   │   │   │   ├── spectrum_1.h
│   │   │   │   │   ├── spectrum_2.h
│   │   │   │   │   └── spectrum_3.h
│   │   │   │   ├── lv_demo_music.c
│   │   │   │   ├── lv_demo_music.h
│   │   │   │   ├── lv_demo_music_list.c
│   │   │   │   ├── lv_demo_music_list.h
│   │   │   │   ├── lv_demo_music_main.c
│   │   │   │   └── lv_demo_music_main.h
│   │   │   ├── render/
│   │   │   │   ├── assets/
│   │   │   │   │   ├── img_render_arc_bg.c
│   │   │   │   │   ├── img_render_lvgl_logo_argb8888.c
│   │   │   │   │   ├── img_render_lvgl_logo_i1.c
│   │   │   │   │   ├── img_render_lvgl_logo_l8.c
│   │   │   │   │   ├── img_render_lvgl_logo_rgb565.c
│   │   │   │   │   ├── img_render_lvgl_logo_rgb888.c
│   │   │   │   │   └── img_render_lvgl_logo_xrgb8888.c
│   │   │   │   ├── lv_demo_render.c
│   │   │   │   └── lv_demo_render.h
│   │   │   ├── scroll/
│   │   │   │   ├── lv_demo_scroll.c
│   │   │   │   └── lv_demo_scroll.h
│   │   │   ├── stress/
│   │   │   │   ├── README.md
│   │   │   │   ├── lv_demo_stress.c
│   │   │   │   └── lv_demo_stress.h
│   │   │   ├── transform/
│   │   │   │   ├── assets/
│   │   │   │   │   └── img_transform_avatar_15.c
│   │   │   │   ├── img2c.py
│   │   │   │   ├── lv_demo_transform.c
│   │   │   │   └── lv_demo_transform.h
│   │   │   ├── vector_graphic/
│   │   │   │   ├── assets/
│   │   │   │   │   └── img_demo_vector_avatar.c
│   │   │   │   ├── lv_demo_vector_graphic.c
│   │   │   │   └── lv_demo_vector_graphic.h
│   │   │   └── widgets/
│   │   │       ├── assets/
│   │   │       │   ├── font/
│   │   │       │   │   ├── montserrat-12.fnt
│   │   │       │   │   ├── montserrat-14.fnt
│   │   │       │   │   ├── montserrat-16.fnt
│   │   │       │   │   ├── montserrat-18.fnt
│   │   │       │   │   ├── montserrat-20.fnt
│   │   │       │   │   └── montserrat-24.fnt
│   │   │       │   ├── img_clothes.c
│   │   │       │   ├── img_demo_widgets_avatar.c
│   │   │       │   ├── img_demo_widgets_needle.c
│   │   │       │   └── img_lvgl_logo.c
│   │   │       ├── lv_demo_widgets.c
│   │   │       ├── lv_demo_widgets.h
│   │   │       └── lv_demo_widgets.py
│   │   ├── docs/
│   │   │   ├── CHANGELOG.rst
│   │   │   ├── CODE_OF_CONDUCT.rst.back
│   │   │   ├── CODING_STYLE.rst
│   │   │   ├── CONTRIBUTING.rst
│   │   │   ├── Doxyfile
│   │   │   ├── README_jp.rst
│   │   │   ├── README_pt_BR.rst
│   │   │   ├── README_zh.rst
│   │   │   ├── ROADMAP.rst
│   │   │   ├── _ext/
│   │   │   │   ├── link_roles.py
│   │   │   │   └── lv_example.py
│   │   │   ├── _static/
│   │   │   │   ├── css/
│   │   │   │   │   └── custom.css
│   │   │   │   └── js/
│   │   │   │       ├── custom.js
│   │   │   │       └── include_html.js
│   │   │   ├── _templates/
│   │   │   │   ├── layout.html
│   │   │   │   └── page.html
│   │   │   ├── add_translation.py
│   │   │   ├── build.py
│   │   │   ├── conf.py
│   │   │   ├── config_builder.py
│   │   │   ├── doc_builder.py
│   │   │   ├── example_list.py
│   │   │   ├── get-started/
│   │   │   │   ├── index.rst
│   │   │   │   └── quick-overview.rst
│   │   │   ├── index.rst
│   │   │   ├── integration/
│   │   │   │   ├── bindings/
│   │   │   │   │   ├── api_json.rst
│   │   │   │   │   ├── cpp.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── javascript.rst
│   │   │   │   │   ├── micropython.rst
│   │   │   │   │   └── pikascript.rst
│   │   │   │   ├── building/
│   │   │   │   │   ├── cmake.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   └── make.rst
│   │   │   │   ├── chip/
│   │   │   │   │   ├── arm.rst
│   │   │   │   │   ├── espressif.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── nxp.rst
│   │   │   │   │   ├── renesas.rst
│   │   │   │   │   └── stm32.rst
│   │   │   │   ├── driver/
│   │   │   │   │   ├── X11.rst
│   │   │   │   │   ├── display/
│   │   │   │   │   │   ├── fbdev.rst
│   │   │   │   │   │   ├── gen_mipi.rst
│   │   │   │   │   │   ├── ili9341.rst
│   │   │   │   │   │   ├── index.rst
│   │   │   │   │   │   ├── lcd_stm32_guide.rst
│   │   │   │   │   │   ├── renesas_glcdc.rst
│   │   │   │   │   │   ├── st7735.rst
│   │   │   │   │   │   ├── st7789.rst
│   │   │   │   │   │   └── st7796.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── libinput.rst
│   │   │   │   │   ├── opengles.rst
│   │   │   │   │   ├── touchpad/
│   │   │   │   │   │   ├── evdev.rst
│   │   │   │   │   │   ├── ft6x36.rst
│   │   │   │   │   │   └── index.rst
│   │   │   │   │   ├── wayland.rst
│   │   │   │   │   └── windows.rst
│   │   │   │   ├── framework/
│   │   │   │   │   ├── arduino.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── platformio.rst
│   │   │   │   │   └── tasmota-berry.rst
│   │   │   │   ├── ide/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── mdk.rst
│   │   │   │   │   └── pc-simulator.rst
│   │   │   │   ├── index.rst
│   │   │   │   └── os/
│   │   │   │       ├── freertos.rst
│   │   │   │       ├── index.rst
│   │   │   │       ├── mqx.rst
│   │   │   │       ├── nuttx.rst
│   │   │   │       ├── px5.rst
│   │   │   │       ├── qnx.rst
│   │   │   │       ├── rt-thread.rst
│   │   │   │       └── zephyr.rst
│   │   │   ├── intro/
│   │   │   │   └── index.rst
│   │   │   ├── layouts/
│   │   │   │   ├── flex.rst
│   │   │   │   ├── grid.rst
│   │   │   │   └── index.rst
│   │   │   ├── libs/
│   │   │   │   ├── arduino_esp_littlefs.rst
│   │   │   │   ├── arduino_sd.rst
│   │   │   │   ├── barcode.rst
│   │   │   │   ├── bmp.rst
│   │   │   │   ├── ffmpeg.rst
│   │   │   │   ├── freetype.rst
│   │   │   │   ├── fs.rst
│   │   │   │   ├── gif.rst
│   │   │   │   ├── index.rst
│   │   │   │   ├── lfs.rst
│   │   │   │   ├── libjpeg_turbo.rst
│   │   │   │   ├── libpng.rst
│   │   │   │   ├── lodepng.rst
│   │   │   │   ├── qrcode.rst
│   │   │   │   ├── rle.rst
│   │   │   │   ├── rlottie.rst
│   │   │   │   ├── tiny_ttf.rst
│   │   │   │   └── tjpgd.rst
│   │   │   ├── others/
│   │   │   │   ├── file_explorer.rst
│   │   │   │   ├── fragment.rst
│   │   │   │   ├── gridnav.rst
│   │   │   │   ├── ime_pinyin.rst
│   │   │   │   ├── imgfont.rst
│   │   │   │   ├── index.rst
│   │   │   │   ├── monkey.rst
│   │   │   │   ├── obj_id.rst
│   │   │   │   ├── obj_property.rst
│   │   │   │   ├── observer.rst
│   │   │   │   └── snapshot.rst
│   │   │   ├── overview/
│   │   │   │   ├── animations.rst
│   │   │   │   ├── color.rst
│   │   │   │   ├── coord.rst
│   │   │   │   ├── display.rst
│   │   │   │   ├── event.rst
│   │   │   │   ├── font.rst
│   │   │   │   ├── fs.rst
│   │   │   │   ├── image.rst
│   │   │   │   ├── indev.rst
│   │   │   │   ├── index.rst
│   │   │   │   ├── layer.rst
│   │   │   │   ├── new_widget.rst
│   │   │   │   ├── obj.rst
│   │   │   │   ├── profiler.rst
│   │   │   │   ├── renderers/
│   │   │   │   │   ├── arm2d.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── pxp.rst
│   │   │   │   │   ├── sdl.rst
│   │   │   │   │   ├── stm32_dma2d.rst
│   │   │   │   │   ├── sw.rst
│   │   │   │   │   ├── vg_lite.rst
│   │   │   │   │   └── vglite.rst
│   │   │   │   ├── scroll.rst
│   │   │   │   ├── style-props.md
│   │   │   │   ├── style-props.rst
│   │   │   │   ├── style.rst
│   │   │   │   ├── timer.rst
│   │   │   │   └── vg_lite_tvg.rst
│   │   │   ├── porting/
│   │   │   │   ├── display.rst
│   │   │   │   ├── draw.rst
│   │   │   │   ├── indev.rst
│   │   │   │   ├── index.rst
│   │   │   │   ├── log.rst
│   │   │   │   ├── os.rst
│   │   │   │   ├── project.rst
│   │   │   │   ├── sleep.rst
│   │   │   │   ├── tick.rst
│   │   │   │   └── timer_handler.rst
│   │   │   ├── requirements.txt
│   │   │   └── widgets/
│   │   │       ├── animimg.rst
│   │   │       ├── arc.rst
│   │   │       ├── bar.rst
│   │   │       ├── button.rst
│   │   │       ├── buttonmatrix.rst
│   │   │       ├── calendar.rst
│   │   │       ├── canvas.rst
│   │   │       ├── chart.rst
│   │   │       ├── checkbox.rst
│   │   │       ├── dropdown.rst
│   │   │       ├── image.rst
│   │   │       ├── imagebutton.rst
│   │   │       ├── index.rst
│   │   │       ├── keyboard.rst
│   │   │       ├── label.rst
│   │   │       ├── led.rst
│   │   │       ├── line.rst
│   │   │       ├── list.rst
│   │   │       ├── lottie.rst
│   │   │       ├── menu.rst
│   │   │       ├── msgbox.rst
│   │   │       ├── obj.rst
│   │   │       ├── roller.rst
│   │   │       ├── scale.rst
│   │   │       ├── slider.rst
│   │   │       ├── span.rst
│   │   │       ├── spinbox.rst
│   │   │       ├── spinner.rst
│   │   │       ├── switch.rst
│   │   │       ├── table.rst
│   │   │       ├── tabview.rst
│   │   │       ├── textarea.rst
│   │   │       ├── tileview.rst
│   │   │       └── win.rst
│   │   ├── env_support/
│   │   │   ├── cmake/
│   │   │   │   ├── custom.cmake
│   │   │   │   ├── esp.cmake
│   │   │   │   ├── micropython.cmake
│   │   │   │   ├── version.cmake
│   │   │   │   └── zephyr.cmake
│   │   │   ├── cmsis-pack/
│   │   │   │   ├── LVGL.lvgl.9.2.2.pack
│   │   │   │   ├── LVGL.lvgl.pdsc
│   │   │   │   ├── LVGL.pidx
│   │   │   │   ├── README.md
│   │   │   │   ├── gen_pack.sh
│   │   │   │   ├── lv_cmsis_pack.txt
│   │   │   │   ├── lv_conf_cmsis.h
│   │   │   │   ├── lv_os_custom_c.txt
│   │   │   │   └── lv_os_custom_h.txt
│   │   │   ├── esp/
│   │   │   │   └── rlottie/
│   │   │   │       ├── 0001-changes-to-compile-with-esp-idf.patch
│   │   │   │       └── CMakeLists.txt
│   │   │   ├── pikascript/
│   │   │   │   ├── README.md
│   │   │   │   ├── pika_lv_point_t.c
│   │   │   │   ├── pika_lv_timer_t.c
│   │   │   │   ├── pika_lv_wegit.c
│   │   │   │   ├── pika_lvgl.c
│   │   │   │   ├── pika_lvgl.pyi
│   │   │   │   ├── pika_lvgl_indev_t.c
│   │   │   │   ├── pika_lvgl_lv_event.c
│   │   │   │   ├── pika_lvgl_lv_obj.c
│   │   │   │   └── pika_lvgl_lv_style_t.c
│   │   │   ├── qnx/
│   │   │   │   ├── Makefile
│   │   │   │   ├── aarch64/
│   │   │   │   │   ├── Makefile
│   │   │   │   │   ├── a.le/
│   │   │   │   │   │   └── Makefile
│   │   │   │   │   └── so.le/
│   │   │   │   │       └── Makefile
│   │   │   │   ├── common.mk
│   │   │   │   └── x86_64/
│   │   │   │       ├── Makefile
│   │   │   │       ├── a/
│   │   │   │       │   └── Makefile
│   │   │   │       └── so/
│   │   │   │           └── Makefile
│   │   │   └── rt-thread/
│   │   │       ├── SConscript
│   │   │       ├── lv_rt_thread_conf.h
│   │   │       ├── lv_rt_thread_port.c
│   │   │       └── squareline/
│   │   │           ├── README.md
│   │   │           ├── SConscript
│   │   │           ├── lv_ui_entry.c
│   │   │           └── ui/
│   │   │               └── lvgl/
│   │   │                   └── lvgl.h
│   │   ├── examples/
│   │   │   ├── anim/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_anim.h
│   │   │   │   ├── lv_example_anim_1.c
│   │   │   │   ├── lv_example_anim_2.c
│   │   │   │   ├── lv_example_anim_3.c
│   │   │   │   └── lv_example_anim_timeline_1.c
│   │   │   ├── arduino/
│   │   │   │   └── LVGL_Arduino/
│   │   │   │       └── LVGL_Arduino.ino
│   │   │   ├── assets/
│   │   │   │   ├── animimg001.c
│   │   │   │   ├── animimg002.c
│   │   │   │   ├── animimg003.c
│   │   │   │   ├── emoji/
│   │   │   │   │   └── img_emoji_F617.c
│   │   │   │   ├── font/
│   │   │   │   │   ├── lv_font_simsun_16_cjk.fnt
│   │   │   │   │   ├── montserrat-16.fnt
│   │   │   │   │   ├── montserrat-18.fnt
│   │   │   │   │   └── montserrat-22.fnt
│   │   │   │   ├── img_caret_down.c
│   │   │   │   ├── img_cogwheel_argb.c
│   │   │   │   ├── img_cogwheel_indexed16.c
│   │   │   │   ├── img_cogwheel_rgb.c
│   │   │   │   ├── img_hand.c
│   │   │   │   ├── img_skew_strip.c
│   │   │   │   ├── img_skew_strip_80x20_argb8888.fnt
│   │   │   │   ├── img_star.c
│   │   │   │   ├── imgbtn_left.c
│   │   │   │   ├── imgbtn_mid.c
│   │   │   │   └── imgbtn_right.c
│   │   │   ├── event/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_event.h
│   │   │   │   ├── lv_example_event_1.c
│   │   │   │   ├── lv_example_event_2.c
│   │   │   │   ├── lv_example_event_3.c
│   │   │   │   └── lv_example_event_4.c
│   │   │   ├── get_started/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_get_started.h
│   │   │   │   ├── lv_example_get_started_1.c
│   │   │   │   ├── lv_example_get_started_2.c
│   │   │   │   ├── lv_example_get_started_3.c
│   │   │   │   └── lv_example_get_started_4.c
│   │   │   ├── header.py
│   │   │   ├── layouts/
│   │   │   │   ├── flex/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_flex.h
│   │   │   │   │   ├── lv_example_flex_1.c
│   │   │   │   │   ├── lv_example_flex_2.c
│   │   │   │   │   ├── lv_example_flex_3.c
│   │   │   │   │   ├── lv_example_flex_4.c
│   │   │   │   │   ├── lv_example_flex_5.c
│   │   │   │   │   └── lv_example_flex_6.c
│   │   │   │   ├── grid/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_grid.h
│   │   │   │   │   ├── lv_example_grid_1.c
│   │   │   │   │   ├── lv_example_grid_2.c
│   │   │   │   │   ├── lv_example_grid_3.c
│   │   │   │   │   ├── lv_example_grid_4.c
│   │   │   │   │   ├── lv_example_grid_5.c
│   │   │   │   │   └── lv_example_grid_6.c
│   │   │   │   └── lv_example_layout.h
│   │   │   ├── libs/
│   │   │   │   ├── barcode/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_barcode.h
│   │   │   │   │   └── lv_example_barcode_1.c
│   │   │   │   ├── bmp/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_bmp.h
│   │   │   │   │   └── lv_example_bmp_1.c
│   │   │   │   ├── ffmpeg/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_ffmpeg.h
│   │   │   │   │   ├── lv_example_ffmpeg_1.c
│   │   │   │   │   └── lv_example_ffmpeg_2.c
│   │   │   │   ├── freetype/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_freetype.h
│   │   │   │   │   └── lv_example_freetype_1.c
│   │   │   │   ├── gif/
│   │   │   │   │   ├── img_bulb_gif.c
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_gif.h
│   │   │   │   │   └── lv_example_gif_1.c
│   │   │   │   ├── libjpeg_turbo/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_libjpeg_turbo.h
│   │   │   │   │   └── lv_example_libjpeg_turbo_1.c
│   │   │   │   ├── libpng/
│   │   │   │   │   ├── img_png_demo.c
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_libpng.h
│   │   │   │   │   └── lv_example_libpng_1.c
│   │   │   │   ├── lodepng/
│   │   │   │   │   ├── img_wink_png.c
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_lodepng.h
│   │   │   │   │   └── lv_example_lodepng_1.c
│   │   │   │   ├── lv_example_libs.h
│   │   │   │   ├── qrcode/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_qrcode.h
│   │   │   │   │   └── lv_example_qrcode_1.c
│   │   │   │   ├── rlottie/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_rlottie.h
│   │   │   │   │   ├── lv_example_rlottie_1.c
│   │   │   │   │   ├── lv_example_rlottie_2.c
│   │   │   │   │   ├── lv_example_rlottie_approve.c
│   │   │   │   │   └── lv_example_rlottie_approve.json
│   │   │   │   ├── tiny_ttf/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_tiny_ttf.h
│   │   │   │   │   ├── lv_example_tiny_ttf_1.c
│   │   │   │   │   ├── lv_example_tiny_ttf_2.c
│   │   │   │   │   ├── lv_example_tiny_ttf_3.c
│   │   │   │   │   └── ubuntu_font.c
│   │   │   │   └── tjpgd/
│   │   │   │       ├── index.rst
│   │   │   │       ├── lv_example_tjpgd.h
│   │   │   │       └── lv_example_tjpgd_1.c
│   │   │   ├── lv_examples.h
│   │   │   ├── others/
│   │   │   │   ├── file_explorer/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_file_explorer.h
│   │   │   │   │   ├── lv_example_file_explorer_1.c
│   │   │   │   │   ├── lv_example_file_explorer_2.c
│   │   │   │   │   └── lv_example_file_explorer_3.c
│   │   │   │   ├── fragment/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_fragment.h
│   │   │   │   │   ├── lv_example_fragment_1.c
│   │   │   │   │   └── lv_example_fragment_2.c
│   │   │   │   ├── gridnav/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_gridnav.h
│   │   │   │   │   ├── lv_example_gridnav_1.c
│   │   │   │   │   ├── lv_example_gridnav_2.c
│   │   │   │   │   ├── lv_example_gridnav_3.c
│   │   │   │   │   ├── lv_example_gridnav_4.c
│   │   │   │   │   └── lv_example_gridnav_5.c
│   │   │   │   ├── ime/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_ime_pinyin.h
│   │   │   │   │   ├── lv_example_ime_pinyin_1.c
│   │   │   │   │   └── lv_example_ime_pinyin_2.c
│   │   │   │   ├── imgfont/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_imgfont.h
│   │   │   │   │   └── lv_example_imgfont_1.c
│   │   │   │   ├── lv_example_others.h
│   │   │   │   ├── monkey/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_monkey.h
│   │   │   │   │   ├── lv_example_monkey_1.c
│   │   │   │   │   ├── lv_example_monkey_2.c
│   │   │   │   │   └── lv_example_monkey_3.c
│   │   │   │   ├── observer/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_observer.h
│   │   │   │   │   ├── lv_example_observer_1.c
│   │   │   │   │   ├── lv_example_observer_2.c
│   │   │   │   │   ├── lv_example_observer_3.c
│   │   │   │   │   ├── lv_example_observer_4.c
│   │   │   │   │   ├── lv_example_observer_5.c
│   │   │   │   │   └── lv_example_observer_6.c
│   │   │   │   └── snapshot/
│   │   │   │       ├── index.rst
│   │   │   │       ├── lv_example_snapshot.h
│   │   │   │       └── lv_example_snapshot_1.c
│   │   │   ├── porting/
│   │   │   │   ├── lv_port_disp_template.c
│   │   │   │   ├── lv_port_disp_template.h
│   │   │   │   ├── lv_port_fs_template.c
│   │   │   │   ├── lv_port_fs_template.h
│   │   │   │   ├── lv_port_indev_template.c
│   │   │   │   ├── lv_port_indev_template.h
│   │   │   │   ├── lv_port_lcd_stm32_template.c
│   │   │   │   ├── lv_port_lcd_stm32_template.h
│   │   │   │   └── osal/
│   │   │   │       ├── lv_example_osal.c
│   │   │   │       └── lv_example_osal.h
│   │   │   ├── scroll/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_scroll.h
│   │   │   │   ├── lv_example_scroll_1.c
│   │   │   │   ├── lv_example_scroll_2.c
│   │   │   │   ├── lv_example_scroll_3.c
│   │   │   │   ├── lv_example_scroll_4.c
│   │   │   │   ├── lv_example_scroll_5.c
│   │   │   │   └── lv_example_scroll_6.c
│   │   │   ├── styles/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_style.h
│   │   │   │   ├── lv_example_style_1.c
│   │   │   │   ├── lv_example_style_10.c
│   │   │   │   ├── lv_example_style_11.c
│   │   │   │   ├── lv_example_style_12.c
│   │   │   │   ├── lv_example_style_13.c
│   │   │   │   ├── lv_example_style_14.c
│   │   │   │   ├── lv_example_style_15.c
│   │   │   │   ├── lv_example_style_16.c
│   │   │   │   ├── lv_example_style_17.c
│   │   │   │   ├── lv_example_style_18.c
│   │   │   │   ├── lv_example_style_2.c
│   │   │   │   ├── lv_example_style_3.c
│   │   │   │   ├── lv_example_style_4.c
│   │   │   │   ├── lv_example_style_5.c
│   │   │   │   ├── lv_example_style_6.c
│   │   │   │   ├── lv_example_style_7.c
│   │   │   │   ├── lv_example_style_8.c
│   │   │   │   └── lv_example_style_9.c
│   │   │   ├── test_ex.sh
│   │   │   └── widgets/
│   │   │       ├── animimg/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_animimg_1.c
│   │   │       ├── arc/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_arc_1.c
│   │   │       │   └── lv_example_arc_2.c
│   │   │       ├── bar/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_bar_1.c
│   │   │       │   ├── lv_example_bar_2.c
│   │   │       │   ├── lv_example_bar_3.c
│   │   │       │   ├── lv_example_bar_4.c
│   │   │       │   ├── lv_example_bar_5.c
│   │   │       │   ├── lv_example_bar_6.c
│   │   │       │   └── lv_example_bar_7.c
│   │   │       ├── button/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_button_1.c
│   │   │       │   ├── lv_example_button_2.c
│   │   │       │   └── lv_example_button_3.c
│   │   │       ├── buttonmatrix/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_buttonmatrix_1.c
│   │   │       │   ├── lv_example_buttonmatrix_2.c
│   │   │       │   └── lv_example_buttonmatrix_3.c
│   │   │       ├── calendar/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_calendar_1.c
│   │   │       │   └── lv_example_calendar_2.c
│   │   │       ├── canvas/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_canvas_1.c
│   │   │       │   ├── lv_example_canvas_2.c
│   │   │       │   ├── lv_example_canvas_3.c
│   │   │       │   ├── lv_example_canvas_4.c
│   │   │       │   ├── lv_example_canvas_5.c
│   │   │       │   ├── lv_example_canvas_6.c
│   │   │       │   ├── lv_example_canvas_7.c
│   │   │       │   └── lv_example_canvas_8.c
│   │   │       ├── chart/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_chart_1.c
│   │   │       │   ├── lv_example_chart_2.c
│   │   │       │   ├── lv_example_chart_3.c
│   │   │       │   ├── lv_example_chart_4.c
│   │   │       │   ├── lv_example_chart_5.c
│   │   │       │   ├── lv_example_chart_6.c
│   │   │       │   ├── lv_example_chart_7.c
│   │   │       │   └── lv_example_chart_8.c
│   │   │       ├── checkbox/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_checkbox_1.c
│   │   │       │   └── lv_example_checkbox_2.c
│   │   │       ├── dropdown/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_dropdown_1.c
│   │   │       │   ├── lv_example_dropdown_2.c
│   │   │       │   └── lv_example_dropdown_3.c
│   │   │       ├── image/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_image_1.c
│   │   │       │   ├── lv_example_image_2.c
│   │   │       │   ├── lv_example_image_3.c
│   │   │       │   └── lv_example_image_4.c
│   │   │       ├── imagebutton/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_imagebutton_1.c
│   │   │       ├── keyboard/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_keyboard_1.c
│   │   │       │   └── lv_example_keyboard_2.c
│   │   │       ├── label/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_label_1.c
│   │   │       │   ├── lv_example_label_2.c
│   │   │       │   ├── lv_example_label_3.c
│   │   │       │   ├── lv_example_label_4.c
│   │   │       │   └── lv_example_label_5.c
│   │   │       ├── led/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_led_1.c
│   │   │       ├── line/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_line_1.c
│   │   │       ├── list/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_list_1.c
│   │   │       │   └── lv_example_list_2.c
│   │   │       ├── lottie/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_lottie_1.c
│   │   │       │   ├── lv_example_lottie_2.c
│   │   │       │   ├── lv_example_lottie_approve.c
│   │   │       │   └── lv_example_lottie_approve.json
│   │   │       ├── lv_example_widgets.h
│   │   │       ├── menu/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_menu_1.c
│   │   │       │   ├── lv_example_menu_2.c
│   │   │       │   ├── lv_example_menu_3.c
│   │   │       │   ├── lv_example_menu_4.c
│   │   │       │   └── lv_example_menu_5.c
│   │   │       ├── msgbox/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_msgbox_1.c
│   │   │       │   └── lv_example_msgbox_2.c
│   │   │       ├── obj/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_obj_1.c
│   │   │       │   └── lv_example_obj_2.c
│   │   │       ├── roller/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_roller_1.c
│   │   │       │   ├── lv_example_roller_2.c
│   │   │       │   └── lv_example_roller_3.c
│   │   │       ├── scale/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_scale_1.c
│   │   │       │   ├── lv_example_scale_2.c
│   │   │       │   ├── lv_example_scale_3.c
│   │   │       │   ├── lv_example_scale_4.c
│   │   │       │   ├── lv_example_scale_5.c
│   │   │       │   ├── lv_example_scale_6.c
│   │   │       │   └── lv_example_scale_7.c
│   │   │       ├── slider/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_slider_1.c
│   │   │       │   ├── lv_example_slider_2.c
│   │   │       │   ├── lv_example_slider_3.c
│   │   │       │   └── lv_example_slider_4.c
│   │   │       ├── span/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_span_1.c
│   │   │       ├── spinbox/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_spinbox_1.c
│   │   │       ├── spinner/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_spinner_1.c
│   │   │       ├── switch/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_switch_1.c
│   │   │       ├── table/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_table_1.c
│   │   │       │   └── lv_example_table_2.c
│   │   │       ├── tabview/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_tabview_1.c
│   │   │       │   └── lv_example_tabview_2.c
│   │   │       ├── textarea/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_textarea_1.c
│   │   │       │   ├── lv_example_textarea_2.c
│   │   │       │   └── lv_example_textarea_3.c
│   │   │       ├── tileview/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_tileview_1.c
│   │   │       └── win/
│   │   │           ├── index.rst
│   │   │           └── lv_example_win_1.c
│   │   ├── idf_component.yml
│   │   ├── library.json
│   │   ├── library.properties
│   │   ├── lv_conf_template.h
│   │   ├── lv_version.h
│   │   ├── lv_version.h.in
│   │   ├── lvgl.h
│   │   ├── lvgl.mk
│   │   ├── lvgl.pc.in
│   │   ├── scripts/
│   │   │   ├── .gitignore
│   │   │   ├── LVGLImage.py
│   │   │   ├── build_html_examples.sh
│   │   │   ├── built_in_font/
│   │   │   │   ├── built_in_font_gen.py
│   │   │   │   └── generate_all.py
│   │   │   ├── changelog-template.hbs
│   │   │   ├── changelog_gen.sh
│   │   │   ├── code-format.cfg
│   │   │   ├── code-format.py
│   │   │   ├── cppcheck_run.sh
│   │   │   ├── filetohex.py
│   │   │   ├── find_version.sh
│   │   │   ├── gen_json/
│   │   │   │   ├── create_fake_lib_c.py
│   │   │   │   ├── gen_json.py
│   │   │   │   ├── get_sdl2.py
│   │   │   │   ├── pycparser_monkeypatch.py
│   │   │   │   └── requirements.txt
│   │   │   ├── generate_lv_conf.py
│   │   │   ├── genexamplelist.sh
│   │   │   ├── image_viewer.py
│   │   │   ├── infer_run.sh
│   │   │   ├── install-prerequisites.bat
│   │   │   ├── install-prerequisites.sh
│   │   │   ├── install_astyle.sh
│   │   │   ├── jpg_to_sjpg.py
│   │   │   ├── kconfig_verify.py
│   │   │   ├── lv_conf_internal_gen.py
│   │   │   ├── properties.py
│   │   │   ├── style_api_gen.py
│   │   │   ├── trace_filter.py
│   │   │   └── update_version.py
│   │   ├── src/
│   │   │   ├── core/
│   │   │   │   ├── lv_global.h
│   │   │   │   ├── lv_group.c
│   │   │   │   ├── lv_group.h
│   │   │   │   ├── lv_group_private.h
│   │   │   │   ├── lv_obj.c
│   │   │   │   ├── lv_obj.h
│   │   │   │   ├── lv_obj_class.c
│   │   │   │   ├── lv_obj_class.h
│   │   │   │   ├── lv_obj_class_private.h
│   │   │   │   ├── lv_obj_draw.c
│   │   │   │   ├── lv_obj_draw.h
│   │   │   │   ├── lv_obj_draw_private.h
│   │   │   │   ├── lv_obj_event.c
│   │   │   │   ├── lv_obj_event.h
│   │   │   │   ├── lv_obj_event_private.h
│   │   │   │   ├── lv_obj_id_builtin.c
│   │   │   │   ├── lv_obj_pos.c
│   │   │   │   ├── lv_obj_pos.h
│   │   │   │   ├── lv_obj_private.h
│   │   │   │   ├── lv_obj_property.c
│   │   │   │   ├── lv_obj_property.h
│   │   │   │   ├── lv_obj_scroll.c
│   │   │   │   ├── lv_obj_scroll.h
│   │   │   │   ├── lv_obj_scroll_private.h
│   │   │   │   ├── lv_obj_style.c
│   │   │   │   ├── lv_obj_style.h
│   │   │   │   ├── lv_obj_style_gen.c
│   │   │   │   ├── lv_obj_style_gen.h
│   │   │   │   ├── lv_obj_style_private.h
│   │   │   │   ├── lv_obj_tree.c
│   │   │   │   ├── lv_obj_tree.h
│   │   │   │   ├── lv_refr.c
│   │   │   │   ├── lv_refr.h
│   │   │   │   └── lv_refr_private.h
│   │   │   ├── display/
│   │   │   │   ├── lv_display.c
│   │   │   │   ├── lv_display.h
│   │   │   │   └── lv_display_private.h
│   │   │   ├── draw/
│   │   │   │   ├── lv_draw.c
│   │   │   │   ├── lv_draw.h
│   │   │   │   ├── lv_draw_arc.c
│   │   │   │   ├── lv_draw_arc.h
│   │   │   │   ├── lv_draw_buf.c
│   │   │   │   ├── lv_draw_buf.h
│   │   │   │   ├── lv_draw_buf_private.h
│   │   │   │   ├── lv_draw_image.c
│   │   │   │   ├── lv_draw_image.h
│   │   │   │   ├── lv_draw_image_private.h
│   │   │   │   ├── lv_draw_label.c
│   │   │   │   ├── lv_draw_label.h
│   │   │   │   ├── lv_draw_label_private.h
│   │   │   │   ├── lv_draw_line.c
│   │   │   │   ├── lv_draw_line.h
│   │   │   │   ├── lv_draw_mask.c
│   │   │   │   ├── lv_draw_mask.h
│   │   │   │   ├── lv_draw_mask_private.h
│   │   │   │   ├── lv_draw_private.h
│   │   │   │   ├── lv_draw_rect.c
│   │   │   │   ├── lv_draw_rect.h
│   │   │   │   ├── lv_draw_rect_private.h
│   │   │   │   ├── lv_draw_triangle.c
│   │   │   │   ├── lv_draw_triangle.h
│   │   │   │   ├── lv_draw_triangle_private.h
│   │   │   │   ├── lv_draw_vector.c
│   │   │   │   ├── lv_draw_vector.h
│   │   │   │   ├── lv_draw_vector_private.h
│   │   │   │   ├── lv_image_decoder.c
│   │   │   │   ├── lv_image_decoder.h
│   │   │   │   ├── lv_image_decoder_private.h
│   │   │   │   ├── lv_image_dsc.h
│   │   │   │   ├── nxp/
│   │   │   │   │   ├── pxp/
│   │   │   │   │   │   ├── lv_draw_buf_pxp.c
│   │   │   │   │   │   ├── lv_draw_pxp.c
│   │   │   │   │   │   ├── lv_draw_pxp.h
│   │   │   │   │   │   ├── lv_draw_pxp_fill.c
│   │   │   │   │   │   ├── lv_draw_pxp_img.c
│   │   │   │   │   │   ├── lv_draw_pxp_layer.c
│   │   │   │   │   │   ├── lv_pxp_cfg.c
│   │   │   │   │   │   ├── lv_pxp_cfg.h
│   │   │   │   │   │   ├── lv_pxp_osa.c
│   │   │   │   │   │   ├── lv_pxp_osa.h
│   │   │   │   │   │   ├── lv_pxp_utils.c
│   │   │   │   │   │   └── lv_pxp_utils.h
│   │   │   │   │   └── vglite/
│   │   │   │   │       ├── lv_draw_buf_vglite.c
│   │   │   │   │       ├── lv_draw_vglite.c
│   │   │   │   │       ├── lv_draw_vglite.h
│   │   │   │   │       ├── lv_draw_vglite_arc.c
│   │   │   │   │       ├── lv_draw_vglite_border.c
│   │   │   │   │       ├── lv_draw_vglite_fill.c
│   │   │   │   │       ├── lv_draw_vglite_img.c
│   │   │   │   │       ├── lv_draw_vglite_label.c
│   │   │   │   │       ├── lv_draw_vglite_layer.c
│   │   │   │   │       ├── lv_draw_vglite_line.c
│   │   │   │   │       ├── lv_draw_vglite_triangle.c
│   │   │   │   │       ├── lv_vglite_buf.c
│   │   │   │   │       ├── lv_vglite_buf.h
│   │   │   │   │       ├── lv_vglite_matrix.c
│   │   │   │   │       ├── lv_vglite_matrix.h
│   │   │   │   │       ├── lv_vglite_path.c
│   │   │   │   │       ├── lv_vglite_path.h
│   │   │   │   │       ├── lv_vglite_utils.c
│   │   │   │   │       └── lv_vglite_utils.h
│   │   │   │   ├── renesas/
│   │   │   │   │   └── dave2d/
│   │   │   │   │       ├── lv_draw_dave2d.c
│   │   │   │   │       ├── lv_draw_dave2d.h
│   │   │   │   │       ├── lv_draw_dave2d_arc.c
│   │   │   │   │       ├── lv_draw_dave2d_border.c
│   │   │   │   │       ├── lv_draw_dave2d_fill.c
│   │   │   │   │       ├── lv_draw_dave2d_image.c
│   │   │   │   │       ├── lv_draw_dave2d_label.c
│   │   │   │   │       ├── lv_draw_dave2d_line.c
│   │   │   │   │       ├── lv_draw_dave2d_mask_rectangle.c
│   │   │   │   │       ├── lv_draw_dave2d_triangle.c
│   │   │   │   │       ├── lv_draw_dave2d_utils.c
│   │   │   │   │       └── lv_draw_dave2d_utils.h
│   │   │   │   ├── sdl/
│   │   │   │   │   ├── lv_draw_sdl.c
│   │   │   │   │   └── lv_draw_sdl.h
│   │   │   │   ├── sw/
│   │   │   │   │   ├── arm2d/
│   │   │   │   │   │   ├── lv_draw_sw_arm2d.h
│   │   │   │   │   │   └── lv_draw_sw_helium.h
│   │   │   │   │   ├── blend/
│   │   │   │   │   │   ├── arm2d/
│   │   │   │   │   │   │   └── lv_blend_arm2d.h
│   │   │   │   │   │   ├── helium/
│   │   │   │   │   │   │   ├── lv_blend_helium.S
│   │   │   │   │   │   │   └── lv_blend_helium.h
│   │   │   │   │   │   ├── lv_draw_sw_blend.c
│   │   │   │   │   │   ├── lv_draw_sw_blend.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_private.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_al88.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_al88.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_argb8888.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_argb8888.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_i1.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_i1.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_l8.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_l8.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_rgb565.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_rgb565.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_rgb888.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_rgb888.h
│   │   │   │   │   │   └── neon/
│   │   │   │   │   │       ├── lv_blend_neon.S
│   │   │   │   │   │       └── lv_blend_neon.h
│   │   │   │   │   ├── lv_draw_sw.c
│   │   │   │   │   ├── lv_draw_sw.h
│   │   │   │   │   ├── lv_draw_sw_arc.c
│   │   │   │   │   ├── lv_draw_sw_border.c
│   │   │   │   │   ├── lv_draw_sw_box_shadow.c
│   │   │   │   │   ├── lv_draw_sw_fill.c
│   │   │   │   │   ├── lv_draw_sw_gradient.c
│   │   │   │   │   ├── lv_draw_sw_gradient.h
│   │   │   │   │   ├── lv_draw_sw_gradient_private.h
│   │   │   │   │   ├── lv_draw_sw_img.c
│   │   │   │   │   ├── lv_draw_sw_letter.c
│   │   │   │   │   ├── lv_draw_sw_line.c
│   │   │   │   │   ├── lv_draw_sw_mask.c
│   │   │   │   │   ├── lv_draw_sw_mask.h
│   │   │   │   │   ├── lv_draw_sw_mask_private.h
│   │   │   │   │   ├── lv_draw_sw_mask_rect.c
│   │   │   │   │   ├── lv_draw_sw_private.h
│   │   │   │   │   ├── lv_draw_sw_transform.c
│   │   │   │   │   ├── lv_draw_sw_triangle.c
│   │   │   │   │   └── lv_draw_sw_vector.c
│   │   │   │   └── vg_lite/
│   │   │   │       ├── lv_draw_buf_vg_lite.c
│   │   │   │       ├── lv_draw_vg_lite.c
│   │   │   │       ├── lv_draw_vg_lite.h
│   │   │   │       ├── lv_draw_vg_lite_arc.c
│   │   │   │       ├── lv_draw_vg_lite_border.c
│   │   │   │       ├── lv_draw_vg_lite_box_shadow.c
│   │   │   │       ├── lv_draw_vg_lite_fill.c
│   │   │   │       ├── lv_draw_vg_lite_img.c
│   │   │   │       ├── lv_draw_vg_lite_label.c
│   │   │   │       ├── lv_draw_vg_lite_layer.c
│   │   │   │       ├── lv_draw_vg_lite_line.c
│   │   │   │       ├── lv_draw_vg_lite_mask_rect.c
│   │   │   │       ├── lv_draw_vg_lite_triangle.c
│   │   │   │       ├── lv_draw_vg_lite_type.h
│   │   │   │       ├── lv_draw_vg_lite_vector.c
│   │   │   │       ├── lv_vg_lite_decoder.c
│   │   │   │       ├── lv_vg_lite_decoder.h
│   │   │   │       ├── lv_vg_lite_grad.c
│   │   │   │       ├── lv_vg_lite_grad.h
│   │   │   │       ├── lv_vg_lite_math.c
│   │   │   │       ├── lv_vg_lite_math.h
│   │   │   │       ├── lv_vg_lite_path.c
│   │   │   │       ├── lv_vg_lite_path.h
│   │   │   │       ├── lv_vg_lite_pending.c
│   │   │   │       ├── lv_vg_lite_pending.h
│   │   │   │       ├── lv_vg_lite_stroke.c
│   │   │   │       ├── lv_vg_lite_stroke.h
│   │   │   │       ├── lv_vg_lite_utils.c
│   │   │   │       └── lv_vg_lite_utils.h
│   │   │   ├── drivers/
│   │   │   │   ├── README.md
│   │   │   │   ├── display/
│   │   │   │   │   ├── drm/
│   │   │   │   │   │   ├── lv_linux_drm.c
│   │   │   │   │   │   └── lv_linux_drm.h
│   │   │   │   │   ├── fb/
│   │   │   │   │   │   ├── lv_linux_fbdev.c
│   │   │   │   │   │   └── lv_linux_fbdev.h
│   │   │   │   │   ├── ili9341/
│   │   │   │   │   │   ├── lv_ili9341.c
│   │   │   │   │   │   └── lv_ili9341.h
│   │   │   │   │   ├── lcd/
│   │   │   │   │   │   ├── lv_lcd_generic_mipi.c
│   │   │   │   │   │   └── lv_lcd_generic_mipi.h
│   │   │   │   │   ├── renesas_glcdc/
│   │   │   │   │   │   ├── lv_renesas_glcdc.c
│   │   │   │   │   │   └── lv_renesas_glcdc.h
│   │   │   │   │   ├── st7735/
│   │   │   │   │   │   ├── lv_st7735.c
│   │   │   │   │   │   └── lv_st7735.h
│   │   │   │   │   ├── st7789/
│   │   │   │   │   │   ├── lv_st7789.c
│   │   │   │   │   │   └── lv_st7789.h
│   │   │   │   │   ├── st7796/
│   │   │   │   │   │   ├── lv_st7796.c
│   │   │   │   │   │   └── lv_st7796.h
│   │   │   │   │   └── tft_espi/
│   │   │   │   │       ├── lv_tft_espi.cpp
│   │   │   │   │       └── lv_tft_espi.h
│   │   │   │   ├── evdev/
│   │   │   │   │   ├── lv_evdev.c
│   │   │   │   │   └── lv_evdev.h
│   │   │   │   ├── glfw/
│   │   │   │   │   ├── lv_glfw_window.c
│   │   │   │   │   ├── lv_glfw_window.h
│   │   │   │   │   ├── lv_glfw_window_private.h
│   │   │   │   │   ├── lv_opengles_debug.c
│   │   │   │   │   ├── lv_opengles_debug.h
│   │   │   │   │   ├── lv_opengles_driver.c
│   │   │   │   │   ├── lv_opengles_driver.h
│   │   │   │   │   ├── lv_opengles_texture.c
│   │   │   │   │   └── lv_opengles_texture.h
│   │   │   │   ├── libinput/
│   │   │   │   │   ├── lv_libinput.c
│   │   │   │   │   ├── lv_libinput.h
│   │   │   │   │   ├── lv_libinput_private.h
│   │   │   │   │   ├── lv_xkb.c
│   │   │   │   │   ├── lv_xkb.h
│   │   │   │   │   └── lv_xkb_private.h
│   │   │   │   ├── lv_drivers.h
│   │   │   │   ├── nuttx/
│   │   │   │   │   ├── lv_nuttx_cache.c
│   │   │   │   │   ├── lv_nuttx_cache.h
│   │   │   │   │   ├── lv_nuttx_entry.c
│   │   │   │   │   ├── lv_nuttx_entry.h
│   │   │   │   │   ├── lv_nuttx_fbdev.c
│   │   │   │   │   ├── lv_nuttx_fbdev.h
│   │   │   │   │   ├── lv_nuttx_image_cache.c
│   │   │   │   │   ├── lv_nuttx_image_cache.h
│   │   │   │   │   ├── lv_nuttx_lcd.c
│   │   │   │   │   ├── lv_nuttx_lcd.h
│   │   │   │   │   ├── lv_nuttx_libuv.c
│   │   │   │   │   ├── lv_nuttx_libuv.h
│   │   │   │   │   ├── lv_nuttx_profiler.c
│   │   │   │   │   ├── lv_nuttx_profiler.h
│   │   │   │   │   ├── lv_nuttx_touchscreen.c
│   │   │   │   │   └── lv_nuttx_touchscreen.h
│   │   │   │   ├── qnx/
│   │   │   │   │   ├── lv_qnx.c
│   │   │   │   │   └── lv_qnx.h
│   │   │   │   ├── sdl/
│   │   │   │   │   ├── lv_sdl_keyboard.c
│   │   │   │   │   ├── lv_sdl_keyboard.h
│   │   │   │   │   ├── lv_sdl_mouse.c
│   │   │   │   │   ├── lv_sdl_mouse.h
│   │   │   │   │   ├── lv_sdl_mousewheel.c
│   │   │   │   │   ├── lv_sdl_mousewheel.h
│   │   │   │   │   ├── lv_sdl_private.h
│   │   │   │   │   ├── lv_sdl_window.c
│   │   │   │   │   └── lv_sdl_window.h
│   │   │   │   ├── wayland/
│   │   │   │   │   ├── lv_wayland.c
│   │   │   │   │   ├── lv_wayland.h
│   │   │   │   │   ├── lv_wayland_smm.c
│   │   │   │   │   └── lv_wayland_smm.h
│   │   │   │   ├── windows/
│   │   │   │   │   ├── lv_windows_context.c
│   │   │   │   │   ├── lv_windows_context.h
│   │   │   │   │   ├── lv_windows_display.c
│   │   │   │   │   ├── lv_windows_display.h
│   │   │   │   │   ├── lv_windows_input.c
│   │   │   │   │   ├── lv_windows_input.h
│   │   │   │   │   └── lv_windows_input_private.h
│   │   │   │   └── x11/
│   │   │   │       ├── lv_x11.h
│   │   │   │       ├── lv_x11_display.c
│   │   │   │       └── lv_x11_input.c
│   │   │   ├── font/
│   │   │   │   ├── lv_binfont_loader.c
│   │   │   │   ├── lv_binfont_loader.h
│   │   │   │   ├── lv_font.c
│   │   │   │   ├── lv_font.h
│   │   │   │   ├── lv_font_dejavu_16_persian_hebrew.c
│   │   │   │   ├── lv_font_fmt_txt.c
│   │   │   │   ├── lv_font_fmt_txt.h
│   │   │   │   ├── lv_font_fmt_txt_private.h
│   │   │   │   ├── lv_font_montserrat_10.c
│   │   │   │   ├── lv_font_montserrat_12.c
│   │   │   │   ├── lv_font_montserrat_14.c
│   │   │   │   ├── lv_font_montserrat_16.c
│   │   │   │   ├── lv_font_montserrat_18.c
│   │   │   │   ├── lv_font_montserrat_20.c
│   │   │   │   ├── lv_font_montserrat_22.c
│   │   │   │   ├── lv_font_montserrat_24.c
│   │   │   │   ├── lv_font_montserrat_26.c
│   │   │   │   ├── lv_font_montserrat_28.c
│   │   │   │   ├── lv_font_montserrat_28_compressed.c
│   │   │   │   ├── lv_font_montserrat_30.c
│   │   │   │   ├── lv_font_montserrat_32.c
│   │   │   │   ├── lv_font_montserrat_34.c
│   │   │   │   ├── lv_font_montserrat_36.c
│   │   │   │   ├── lv_font_montserrat_38.c
│   │   │   │   ├── lv_font_montserrat_40.c
│   │   │   │   ├── lv_font_montserrat_42.c
│   │   │   │   ├── lv_font_montserrat_44.c
│   │   │   │   ├── lv_font_montserrat_46.c
│   │   │   │   ├── lv_font_montserrat_48.c
│   │   │   │   ├── lv_font_montserrat_8.c
│   │   │   │   ├── lv_font_simsun_14_cjk.c
│   │   │   │   ├── lv_font_simsun_16_cjk.c
│   │   │   │   ├── lv_font_unscii_16.c
│   │   │   │   ├── lv_font_unscii_8.c
│   │   │   │   └── lv_symbol_def.h
│   │   │   ├── indev/
│   │   │   │   ├── lv_indev.c
│   │   │   │   ├── lv_indev.h
│   │   │   │   ├── lv_indev_private.h
│   │   │   │   ├── lv_indev_scroll.c
│   │   │   │   └── lv_indev_scroll.h
│   │   │   ├── layouts/
│   │   │   │   ├── flex/
│   │   │   │   │   ├── lv_flex.c
│   │   │   │   │   └── lv_flex.h
│   │   │   │   ├── grid/
│   │   │   │   │   ├── lv_grid.c
│   │   │   │   │   └── lv_grid.h
│   │   │   │   ├── lv_layout.c
│   │   │   │   ├── lv_layout.h
│   │   │   │   └── lv_layout_private.h
│   │   │   ├── libs/
│   │   │   │   ├── barcode/
│   │   │   │   │   ├── code128.c
│   │   │   │   │   ├── code128.h
│   │   │   │   │   ├── lv_barcode.c
│   │   │   │   │   ├── lv_barcode.h
│   │   │   │   │   └── lv_barcode_private.h
│   │   │   │   ├── bin_decoder/
│   │   │   │   │   ├── lv_bin_decoder.c
│   │   │   │   │   └── lv_bin_decoder.h
│   │   │   │   ├── bmp/
│   │   │   │   │   ├── lv_bmp.c
│   │   │   │   │   └── lv_bmp.h
│   │   │   │   ├── ffmpeg/
│   │   │   │   │   ├── lv_ffmpeg.c
│   │   │   │   │   ├── lv_ffmpeg.h
│   │   │   │   │   └── lv_ffmpeg_private.h
│   │   │   │   ├── freetype/
│   │   │   │   │   ├── ftmodule.h
│   │   │   │   │   ├── ftoption.h
│   │   │   │   │   ├── lv_freetype.c
│   │   │   │   │   ├── lv_freetype.h
│   │   │   │   │   ├── lv_freetype_glyph.c
│   │   │   │   │   ├── lv_freetype_image.c
│   │   │   │   │   ├── lv_freetype_outline.c
│   │   │   │   │   ├── lv_freetype_private.h
│   │   │   │   │   └── lv_ftsystem.c
│   │   │   │   ├── fsdrv/
│   │   │   │   │   ├── lv_fs_arduino_esp_littlefs.cpp
│   │   │   │   │   ├── lv_fs_arduino_sd.cpp
│   │   │   │   │   ├── lv_fs_cbfs.c
│   │   │   │   │   ├── lv_fs_fatfs.c
│   │   │   │   │   ├── lv_fs_littlefs.c
│   │   │   │   │   ├── lv_fs_memfs.c
│   │   │   │   │   ├── lv_fs_posix.c
│   │   │   │   │   ├── lv_fs_stdio.c
│   │   │   │   │   ├── lv_fs_win32.c
│   │   │   │   │   └── lv_fsdrv.h
│   │   │   │   ├── gif/
│   │   │   │   │   ├── gifdec.c
│   │   │   │   │   ├── gifdec.h
│   │   │   │   │   ├── gifdec_mve.h
│   │   │   │   │   ├── lv_gif.c
│   │   │   │   │   ├── lv_gif.h
│   │   │   │   │   └── lv_gif_private.h
│   │   │   │   ├── libjpeg_turbo/
│   │   │   │   │   ├── lv_libjpeg_turbo.c
│   │   │   │   │   └── lv_libjpeg_turbo.h
│   │   │   │   ├── libpng/
│   │   │   │   │   ├── lv_libpng.c
│   │   │   │   │   └── lv_libpng.h
│   │   │   │   ├── lodepng/
│   │   │   │   │   ├── lodepng.c
│   │   │   │   │   ├── lodepng.h
│   │   │   │   │   ├── lv_lodepng.c
│   │   │   │   │   └── lv_lodepng.h
│   │   │   │   ├── lz4/
│   │   │   │   │   ├── LICENSE
│   │   │   │   │   ├── lz4.c
│   │   │   │   │   └── lz4.h
│   │   │   │   ├── qrcode/
│   │   │   │   │   ├── lv_qrcode.c
│   │   │   │   │   ├── lv_qrcode.h
│   │   │   │   │   ├── lv_qrcode_private.h
│   │   │   │   │   ├── qrcodegen.c
│   │   │   │   │   └── qrcodegen.h
│   │   │   │   ├── rle/
│   │   │   │   │   ├── lv_rle.c
│   │   │   │   │   └── lv_rle.h
│   │   │   │   ├── rlottie/
│   │   │   │   │   ├── lv_rlottie.c
│   │   │   │   │   ├── lv_rlottie.h
│   │   │   │   │   └── lv_rlottie_private.h
│   │   │   │   ├── thorvg/
│   │   │   │   │   ├── add_lvgl_if.sh
│   │   │   │   │   ├── config.h
│   │   │   │   │   ├── rapidjson/
│   │   │   │   │   │   ├── allocators.h
│   │   │   │   │   │   ├── cursorstreamwrapper.h
│   │   │   │   │   │   ├── document.h
│   │   │   │   │   │   ├── encodedstream.h
│   │   │   │   │   │   ├── encodings.h
│   │   │   │   │   │   ├── error/
│   │   │   │   │   │   │   ├── en.h
│   │   │   │   │   │   │   └── error.h
│   │   │   │   │   │   ├── filereadstream.h
│   │   │   │   │   │   ├── filewritestream.h
│   │   │   │   │   │   ├── fwd.h
│   │   │   │   │   │   ├── internal/
│   │   │   │   │   │   │   ├── biginteger.h
│   │   │   │   │   │   │   ├── clzll.h
│   │   │   │   │   │   │   ├── diyfp.h
│   │   │   │   │   │   │   ├── dtoa.h
│   │   │   │   │   │   │   ├── ieee754.h
│   │   │   │   │   │   │   ├── itoa.h
│   │   │   │   │   │   │   ├── meta.h
│   │   │   │   │   │   │   ├── pow10.h
│   │   │   │   │   │   │   ├── regex.h
│   │   │   │   │   │   │   ├── stack.h
│   │   │   │   │   │   │   ├── strfunc.h
│   │   │   │   │   │   │   ├── strtod.h
│   │   │   │   │   │   │   └── swap.h
│   │   │   │   │   │   ├── istreamwrapper.h
│   │   │   │   │   │   ├── memorybuffer.h
│   │   │   │   │   │   ├── memorystream.h
│   │   │   │   │   │   ├── msinttypes/
│   │   │   │   │   │   │   ├── inttypes.h
│   │   │   │   │   │   │   └── stdint.h
│   │   │   │   │   │   ├── ostreamwrapper.h
│   │   │   │   │   │   ├── pointer.h
│   │   │   │   │   │   ├── prettywriter.h
│   │   │   │   │   │   ├── rapidjson.h
│   │   │   │   │   │   ├── reader.h
│   │   │   │   │   │   ├── schema.h
│   │   │   │   │   │   ├── stream.h
│   │   │   │   │   │   ├── stringbuffer.h
│   │   │   │   │   │   ├── uri.h
│   │   │   │   │   │   └── writer.h
│   │   │   │   │   ├── thorvg.h
│   │   │   │   │   ├── thorvg_capi.h
│   │   │   │   │   ├── thorvg_lottie.h
│   │   │   │   │   ├── tvgAccessor.cpp
│   │   │   │   │   ├── tvgAnimation.cpp
│   │   │   │   │   ├── tvgAnimation.h
│   │   │   │   │   ├── tvgArray.h
│   │   │   │   │   ├── tvgBinaryDesc.h
│   │   │   │   │   ├── tvgCanvas.cpp
│   │   │   │   │   ├── tvgCanvas.h
│   │   │   │   │   ├── tvgCapi.cpp
│   │   │   │   │   ├── tvgCommon.h
│   │   │   │   │   ├── tvgCompressor.cpp
│   │   │   │   │   ├── tvgCompressor.h
│   │   │   │   │   ├── tvgFill.cpp
│   │   │   │   │   ├── tvgFill.h
│   │   │   │   │   ├── tvgFrameModule.h
│   │   │   │   │   ├── tvgGlCanvas.cpp
│   │   │   │   │   ├── tvgInitializer.cpp
│   │   │   │   │   ├── tvgInlist.h
│   │   │   │   │   ├── tvgIteratorAccessor.h
│   │   │   │   │   ├── tvgLines.cpp
│   │   │   │   │   ├── tvgLines.h
│   │   │   │   │   ├── tvgLoadModule.h
│   │   │   │   │   ├── tvgLoader.cpp
│   │   │   │   │   ├── tvgLoader.h
│   │   │   │   │   ├── tvgLock.h
│   │   │   │   │   ├── tvgLottieAnimation.cpp
│   │   │   │   │   ├── tvgLottieBuilder.cpp
│   │   │   │   │   ├── tvgLottieBuilder.h
│   │   │   │   │   ├── tvgLottieExpressions.cpp
│   │   │   │   │   ├── tvgLottieExpressions.h
│   │   │   │   │   ├── tvgLottieInterpolator.cpp
│   │   │   │   │   ├── tvgLottieInterpolator.h
│   │   │   │   │   ├── tvgLottieLoader.cpp
│   │   │   │   │   ├── tvgLottieLoader.h
│   │   │   │   │   ├── tvgLottieModel.cpp
│   │   │   │   │   ├── tvgLottieModel.h
│   │   │   │   │   ├── tvgLottieParser.cpp
│   │   │   │   │   ├── tvgLottieParser.h
│   │   │   │   │   ├── tvgLottieParserHandler.cpp
│   │   │   │   │   ├── tvgLottieParserHandler.h
│   │   │   │   │   ├── tvgLottieProperty.h
│   │   │   │   │   ├── tvgMath.cpp
│   │   │   │   │   ├── tvgMath.h
│   │   │   │   │   ├── tvgPaint.cpp
│   │   │   │   │   ├── tvgPaint.h
│   │   │   │   │   ├── tvgPicture.cpp
│   │   │   │   │   ├── tvgPicture.h
│   │   │   │   │   ├── tvgRawLoader.cpp
│   │   │   │   │   ├── tvgRawLoader.h
│   │   │   │   │   ├── tvgRender.cpp
│   │   │   │   │   ├── tvgRender.h
│   │   │   │   │   ├── tvgSaveModule.h
│   │   │   │   │   ├── tvgSaver.cpp
│   │   │   │   │   ├── tvgScene.cpp
│   │   │   │   │   ├── tvgScene.h
│   │   │   │   │   ├── tvgShape.cpp
│   │   │   │   │   ├── tvgShape.h
│   │   │   │   │   ├── tvgStr.cpp
│   │   │   │   │   ├── tvgStr.h
│   │   │   │   │   ├── tvgSvgCssStyle.cpp
│   │   │   │   │   ├── tvgSvgCssStyle.h
│   │   │   │   │   ├── tvgSvgLoader.cpp
│   │   │   │   │   ├── tvgSvgLoader.h
│   │   │   │   │   ├── tvgSvgLoaderCommon.h
│   │   │   │   │   ├── tvgSvgPath.cpp
│   │   │   │   │   ├── tvgSvgPath.h
│   │   │   │   │   ├── tvgSvgSceneBuilder.cpp
│   │   │   │   │   ├── tvgSvgSceneBuilder.h
│   │   │   │   │   ├── tvgSvgUtil.cpp
│   │   │   │   │   ├── tvgSvgUtil.h
│   │   │   │   │   ├── tvgSwCanvas.cpp
│   │   │   │   │   ├── tvgSwCommon.h
│   │   │   │   │   ├── tvgSwFill.cpp
│   │   │   │   │   ├── tvgSwImage.cpp
│   │   │   │   │   ├── tvgSwMath.cpp
│   │   │   │   │   ├── tvgSwMemPool.cpp
│   │   │   │   │   ├── tvgSwRaster.cpp
│   │   │   │   │   ├── tvgSwRasterAvx.h
│   │   │   │   │   ├── tvgSwRasterC.h
│   │   │   │   │   ├── tvgSwRasterNeon.h
│   │   │   │   │   ├── tvgSwRasterTexmap.h
│   │   │   │   │   ├── tvgSwRenderer.cpp
│   │   │   │   │   ├── tvgSwRenderer.h
│   │   │   │   │   ├── tvgSwRle.cpp
│   │   │   │   │   ├── tvgSwShape.cpp
│   │   │   │   │   ├── tvgSwStroke.cpp
│   │   │   │   │   ├── tvgTaskScheduler.cpp
│   │   │   │   │   ├── tvgTaskScheduler.h
│   │   │   │   │   ├── tvgText.cpp
│   │   │   │   │   ├── tvgText.h
│   │   │   │   │   ├── tvgWgCanvas.cpp
│   │   │   │   │   ├── tvgXmlParser.cpp
│   │   │   │   │   └── tvgXmlParser.h
│   │   │   │   ├── tiny_ttf/
│   │   │   │   │   ├── lv_tiny_ttf.c
│   │   │   │   │   ├── lv_tiny_ttf.h
│   │   │   │   │   ├── stb_rect_pack.h
│   │   │   │   │   └── stb_truetype_htcw.h
│   │   │   │   └── tjpgd/
│   │   │   │       ├── lv_tjpgd.c
│   │   │   │       ├── lv_tjpgd.h
│   │   │   │       ├── tjpgd.c
│   │   │   │       ├── tjpgd.h
│   │   │   │       └── tjpgdcnf.h
│   │   │   ├── lv_api_map_v8.h
│   │   │   ├── lv_api_map_v9_0.h
│   │   │   ├── lv_api_map_v9_1.h
│   │   │   ├── lv_conf_internal.h
│   │   │   ├── lv_conf_kconfig.h
│   │   │   ├── lv_init.c
│   │   │   ├── lv_init.h
│   │   │   ├── lvgl.h
│   │   │   ├── lvgl_private.h
│   │   │   ├── misc/
│   │   │   │   ├── cache/
│   │   │   │   │   ├── lv_cache.c
│   │   │   │   │   ├── lv_cache.h
│   │   │   │   │   ├── lv_cache_entry.c
│   │   │   │   │   ├── lv_cache_entry.h
│   │   │   │   │   ├── lv_cache_entry_private.h
│   │   │   │   │   ├── lv_cache_lru_rb.c
│   │   │   │   │   ├── lv_cache_lru_rb.h
│   │   │   │   │   ├── lv_cache_private.h
│   │   │   │   │   ├── lv_image_cache.c
│   │   │   │   │   ├── lv_image_cache.h
│   │   │   │   │   ├── lv_image_header_cache.c
│   │   │   │   │   └── lv_image_header_cache.h
│   │   │   │   ├── lv_anim.c
│   │   │   │   ├── lv_anim.h
│   │   │   │   ├── lv_anim_private.h
│   │   │   │   ├── lv_anim_timeline.c
│   │   │   │   ├── lv_anim_timeline.h
│   │   │   │   ├── lv_area.c
│   │   │   │   ├── lv_area.h
│   │   │   │   ├── lv_area_private.h
│   │   │   │   ├── lv_array.c
│   │   │   │   ├── lv_array.h
│   │   │   │   ├── lv_assert.h
│   │   │   │   ├── lv_async.c
│   │   │   │   ├── lv_async.h
│   │   │   │   ├── lv_bidi.c
│   │   │   │   ├── lv_bidi.h
│   │   │   │   ├── lv_bidi_private.h
│   │   │   │   ├── lv_color.c
│   │   │   │   ├── lv_color.h
│   │   │   │   ├── lv_color_op.c
│   │   │   │   ├── lv_color_op.h
│   │   │   │   ├── lv_color_op_private.h
│   │   │   │   ├── lv_event.c
│   │   │   │   ├── lv_event.h
│   │   │   │   ├── lv_event_private.h
│   │   │   │   ├── lv_fs.c
│   │   │   │   ├── lv_fs.h
│   │   │   │   ├── lv_fs_private.h
│   │   │   │   ├── lv_ll.c
│   │   │   │   ├── lv_ll.h
│   │   │   │   ├── lv_log.c
│   │   │   │   ├── lv_log.h
│   │   │   │   ├── lv_lru.c
│   │   │   │   ├── lv_lru.h
│   │   │   │   ├── lv_math.c
│   │   │   │   ├── lv_math.h
│   │   │   │   ├── lv_matrix.c
│   │   │   │   ├── lv_matrix.h
│   │   │   │   ├── lv_palette.c
│   │   │   │   ├── lv_palette.h
│   │   │   │   ├── lv_profiler.h
│   │   │   │   ├── lv_profiler_builtin.c
│   │   │   │   ├── lv_profiler_builtin.h
│   │   │   │   ├── lv_profiler_builtin_private.h
│   │   │   │   ├── lv_rb.c
│   │   │   │   ├── lv_rb.h
│   │   │   │   ├── lv_rb_private.h
│   │   │   │   ├── lv_style.c
│   │   │   │   ├── lv_style.h
│   │   │   │   ├── lv_style_gen.c
│   │   │   │   ├── lv_style_gen.h
│   │   │   │   ├── lv_style_private.h
│   │   │   │   ├── lv_templ.c
│   │   │   │   ├── lv_templ.h
│   │   │   │   ├── lv_text.c
│   │   │   │   ├── lv_text.h
│   │   │   │   ├── lv_text_ap.c
│   │   │   │   ├── lv_text_ap.h
│   │   │   │   ├── lv_text_private.h
│   │   │   │   ├── lv_timer.c
│   │   │   │   ├── lv_timer.h
│   │   │   │   ├── lv_timer_private.h
│   │   │   │   ├── lv_types.h
│   │   │   │   ├── lv_utils.c
│   │   │   │   └── lv_utils.h
│   │   │   ├── osal/
│   │   │   │   ├── lv_cmsis_rtos2.c
│   │   │   │   ├── lv_cmsis_rtos2.h
│   │   │   │   ├── lv_freertos.c
│   │   │   │   ├── lv_freertos.h
│   │   │   │   ├── lv_mqx.c
│   │   │   │   ├── lv_mqx.h
│   │   │   │   ├── lv_os.c
│   │   │   │   ├── lv_os.h
│   │   │   │   ├── lv_os_none.c
│   │   │   │   ├── lv_os_none.h
│   │   │   │   ├── lv_os_private.h
│   │   │   │   ├── lv_pthread.c
│   │   │   │   ├── lv_pthread.h
│   │   │   │   ├── lv_rtthread.c
│   │   │   │   ├── lv_rtthread.h
│   │   │   │   ├── lv_windows.c
│   │   │   │   └── lv_windows.h
│   │   │   ├── others/
│   │   │   │   ├── file_explorer/
│   │   │   │   │   ├── lv_file_explorer.c
│   │   │   │   │   ├── lv_file_explorer.h
│   │   │   │   │   └── lv_file_explorer_private.h
│   │   │   │   ├── fragment/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── lv_fragment.c
│   │   │   │   │   ├── lv_fragment.h
│   │   │   │   │   ├── lv_fragment_manager.c
│   │   │   │   │   └── lv_fragment_private.h
│   │   │   │   ├── gridnav/
│   │   │   │   │   ├── lv_gridnav.c
│   │   │   │   │   └── lv_gridnav.h
│   │   │   │   ├── ime/
│   │   │   │   │   ├── lv_ime_pinyin.c
│   │   │   │   │   ├── lv_ime_pinyin.h
│   │   │   │   │   └── lv_ime_pinyin_private.h
│   │   │   │   ├── imgfont/
│   │   │   │   │   ├── lv_imgfont.c
│   │   │   │   │   └── lv_imgfont.h
│   │   │   │   ├── monkey/
│   │   │   │   │   ├── lv_monkey.c
│   │   │   │   │   ├── lv_monkey.h
│   │   │   │   │   └── lv_monkey_private.h
│   │   │   │   ├── observer/
│   │   │   │   │   ├── lv_observer.c
│   │   │   │   │   ├── lv_observer.h
│   │   │   │   │   └── lv_observer_private.h
│   │   │   │   ├── snapshot/
│   │   │   │   │   ├── lv_snapshot.c
│   │   │   │   │   └── lv_snapshot.h
│   │   │   │   ├── sysmon/
│   │   │   │   │   ├── lv_sysmon.c
│   │   │   │   │   ├── lv_sysmon.h
│   │   │   │   │   └── lv_sysmon_private.h
│   │   │   │   └── vg_lite_tvg/
│   │   │   │       ├── vg_lite.h
│   │   │   │       ├── vg_lite_matrix.c
│   │   │   │       └── vg_lite_tvg.cpp
│   │   │   ├── stdlib/
│   │   │   │   ├── builtin/
│   │   │   │   │   ├── lv_mem_core_builtin.c
│   │   │   │   │   ├── lv_sprintf_builtin.c
│   │   │   │   │   ├── lv_string_builtin.c
│   │   │   │   │   ├── lv_tlsf.c
│   │   │   │   │   ├── lv_tlsf.h
│   │   │   │   │   └── lv_tlsf_private.h
│   │   │   │   ├── clib/
│   │   │   │   │   ├── lv_mem_core_clib.c
│   │   │   │   │   ├── lv_sprintf_clib.c
│   │   │   │   │   └── lv_string_clib.c
│   │   │   │   ├── lv_mem.c
│   │   │   │   ├── lv_mem.h
│   │   │   │   ├── lv_mem_private.h
│   │   │   │   ├── lv_sprintf.h
│   │   │   │   ├── lv_string.h
│   │   │   │   ├── micropython/
│   │   │   │   │   └── lv_mem_core_micropython.c
│   │   │   │   └── rtthread/
│   │   │   │       ├── lv_mem_core_rtthread.c
│   │   │   │       ├── lv_sprintf_rtthread.c
│   │   │   │       └── lv_string_rtthread.c
│   │   │   ├── themes/
│   │   │   │   ├── default/
│   │   │   │   │   ├── lv_theme_default.c
│   │   │   │   │   └── lv_theme_default.h
│   │   │   │   ├── lv_theme.c
│   │   │   │   ├── lv_theme.h
│   │   │   │   ├── lv_theme_private.h
│   │   │   │   ├── mono/
│   │   │   │   │   ├── lv_theme_mono.c
│   │   │   │   │   └── lv_theme_mono.h
│   │   │   │   └── simple/
│   │   │   │       ├── lv_theme_simple.c
│   │   │   │       └── lv_theme_simple.h
│   │   │   ├── tick/
│   │   │   │   ├── lv_tick.c
│   │   │   │   ├── lv_tick.h
│   │   │   │   └── lv_tick_private.h
│   │   │   └── widgets/
│   │   │       ├── animimage/
│   │   │       │   ├── lv_animimage.c
│   │   │       │   ├── lv_animimage.h
│   │   │       │   └── lv_animimage_private.h
│   │   │       ├── arc/
│   │   │       │   ├── lv_arc.c
│   │   │       │   ├── lv_arc.h
│   │   │       │   └── lv_arc_private.h
│   │   │       ├── bar/
│   │   │       │   ├── lv_bar.c
│   │   │       │   ├── lv_bar.h
│   │   │       │   └── lv_bar_private.h
│   │   │       ├── button/
│   │   │       │   ├── lv_button.c
│   │   │       │   ├── lv_button.h
│   │   │       │   └── lv_button_private.h
│   │   │       ├── buttonmatrix/
│   │   │       │   ├── lv_buttonmatrix.c
│   │   │       │   ├── lv_buttonmatrix.h
│   │   │       │   └── lv_buttonmatrix_private.h
│   │   │       ├── calendar/
│   │   │       │   ├── lv_calendar.c
│   │   │       │   ├── lv_calendar.h
│   │   │       │   ├── lv_calendar_chinese.c
│   │   │       │   ├── lv_calendar_chinese.h
│   │   │       │   ├── lv_calendar_chinese_private.h
│   │   │       │   ├── lv_calendar_header_arrow.c
│   │   │       │   ├── lv_calendar_header_arrow.h
│   │   │       │   ├── lv_calendar_header_dropdown.c
│   │   │       │   ├── lv_calendar_header_dropdown.h
│   │   │       │   └── lv_calendar_private.h
│   │   │       ├── canvas/
│   │   │       │   ├── lv_canvas.c
│   │   │       │   ├── lv_canvas.h
│   │   │       │   └── lv_canvas_private.h
│   │   │       ├── chart/
│   │   │       │   ├── lv_chart.c
│   │   │       │   ├── lv_chart.h
│   │   │       │   └── lv_chart_private.h
│   │   │       ├── checkbox/
│   │   │       │   ├── lv_checkbox.c
│   │   │       │   ├── lv_checkbox.h
│   │   │       │   └── lv_checkbox_private.h
│   │   │       ├── dropdown/
│   │   │       │   ├── lv_dropdown.c
│   │   │       │   ├── lv_dropdown.h
│   │   │       │   └── lv_dropdown_private.h
│   │   │       ├── image/
│   │   │       │   ├── lv_image.c
│   │   │       │   ├── lv_image.h
│   │   │       │   └── lv_image_private.h
│   │   │       ├── imagebutton/
│   │   │       │   ├── lv_imagebutton.c
│   │   │       │   ├── lv_imagebutton.h
│   │   │       │   └── lv_imagebutton_private.h
│   │   │       ├── keyboard/
│   │   │       │   ├── lv_keyboard.c
│   │   │       │   ├── lv_keyboard.h
│   │   │       │   └── lv_keyboard_private.h
│   │   │       ├── label/
│   │   │       │   ├── lv_label.c
│   │   │       │   ├── lv_label.h
│   │   │       │   └── lv_label_private.h
│   │   │       ├── led/
│   │   │       │   ├── lv_led.c
│   │   │       │   ├── lv_led.h
│   │   │       │   └── lv_led_private.h
│   │   │       ├── line/
│   │   │       │   ├── lv_line.c
│   │   │       │   ├── lv_line.h
│   │   │       │   └── lv_line_private.h
│   │   │       ├── list/
│   │   │       │   ├── lv_list.c
│   │   │       │   └── lv_list.h
│   │   │       ├── lottie/
│   │   │       │   ├── lv_lottie.c
│   │   │       │   ├── lv_lottie.h
│   │   │       │   └── lv_lottie_private.h
│   │   │       ├── menu/
│   │   │       │   ├── lv_menu.c
│   │   │       │   ├── lv_menu.h
│   │   │       │   └── lv_menu_private.h
│   │   │       ├── msgbox/
│   │   │       │   ├── lv_msgbox.c
│   │   │       │   ├── lv_msgbox.h
│   │   │       │   └── lv_msgbox_private.h
│   │   │       ├── objx_templ/
│   │   │       │   ├── lv_objx_templ.c
│   │   │       │   └── lv_objx_templ.h
│   │   │       ├── property/
│   │   │       │   ├── lv_dropdown_properties.c
│   │   │       │   ├── lv_image_properties.c
│   │   │       │   ├── lv_keyboard_properties.c
│   │   │       │   ├── lv_label_properties.c
│   │   │       │   ├── lv_obj_properties.c
│   │   │       │   ├── lv_obj_property_names.h
│   │   │       │   ├── lv_roller_properties.c
│   │   │       │   ├── lv_style_properties.c
│   │   │       │   ├── lv_style_properties.h
│   │   │       │   └── lv_textarea_properties.c
│   │   │       ├── roller/
│   │   │       │   ├── lv_roller.c
│   │   │       │   ├── lv_roller.h
│   │   │       │   └── lv_roller_private.h
│   │   │       ├── scale/
│   │   │       │   ├── lv_scale.c
│   │   │       │   ├── lv_scale.h
│   │   │       │   └── lv_scale_private.h
│   │   │       ├── slider/
│   │   │       │   ├── lv_slider.c
│   │   │       │   ├── lv_slider.h
│   │   │       │   └── lv_slider_private.h
│   │   │       ├── span/
│   │   │       │   ├── lv_span.c
│   │   │       │   ├── lv_span.h
│   │   │       │   └── lv_span_private.h
│   │   │       ├── spinbox/
│   │   │       │   ├── lv_spinbox.c
│   │   │       │   ├── lv_spinbox.h
│   │   │       │   └── lv_spinbox_private.h
│   │   │       ├── spinner/
│   │   │       │   ├── lv_spinner.c
│   │   │       │   └── lv_spinner.h
│   │   │       ├── switch/
│   │   │       │   ├── lv_switch.c
│   │   │       │   ├── lv_switch.h
│   │   │       │   └── lv_switch_private.h
│   │   │       ├── table/
│   │   │       │   ├── lv_table.c
│   │   │       │   ├── lv_table.h
│   │   │       │   └── lv_table_private.h
│   │   │       ├── tabview/
│   │   │       │   ├── lv_tabview.c
│   │   │       │   ├── lv_tabview.h
│   │   │       │   └── lv_tabview_private.h
│   │   │       ├── textarea/
│   │   │       │   ├── lv_textarea.c
│   │   │       │   ├── lv_textarea.h
│   │   │       │   └── lv_textarea_private.h
│   │   │       ├── tileview/
│   │   │       │   ├── lv_tileview.c
│   │   │       │   ├── lv_tileview.h
│   │   │       │   └── lv_tileview_private.h
│   │   │       └── win/
│   │   │           ├── lv_win.c
│   │   │           ├── lv_win.h
│   │   │           └── lv_win_private.h
│   │   ├── tests/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── FindLibDRM.cmake
│   │   │   ├── README.md
│   │   │   ├── config.yml
│   │   │   ├── gen_json/
│   │   │   │   └── test_gen_json.py
│   │   │   ├── main.py
│   │   │   ├── makefile/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── Makefile
│   │   │   │   └── test.c
│   │   │   ├── makefile_uefi/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── Makefile
│   │   │   │   ├── efi.h
│   │   │   │   └── test.c
│   │   │   ├── micropy_test/
│   │   │   │   ├── __init__.py
│   │   │   │   └── micropy.py
│   │   │   ├── src/
│   │   │   │   ├── lv_test_conf.h
│   │   │   │   ├── lv_test_conf_full.h
│   │   │   │   ├── lv_test_conf_minimal.h
│   │   │   │   ├── lv_test_conf_vg_lite.h
│   │   │   │   ├── lv_test_helpers.c
│   │   │   │   ├── lv_test_helpers.h
│   │   │   │   ├── lv_test_indev.c
│   │   │   │   ├── lv_test_indev.h
│   │   │   │   ├── lv_test_init.c
│   │   │   │   ├── lv_test_init.h
│   │   │   │   ├── test_assets/
│   │   │   │   │   ├── test_animimg001.c
│   │   │   │   │   ├── test_animimg002.c
│   │   │   │   │   ├── test_animimg003.c
│   │   │   │   │   ├── test_arc_bg.c
│   │   │   │   │   ├── test_font_1.c
│   │   │   │   │   ├── test_font_1.fnt
│   │   │   │   │   ├── test_font_1_bin.c
│   │   │   │   │   ├── test_font_2.c
│   │   │   │   │   ├── test_font_2.fnt
│   │   │   │   │   ├── test_font_2_bin.c
│   │   │   │   │   ├── test_font_3.c
│   │   │   │   │   ├── test_font_3.fnt
│   │   │   │   │   ├── test_font_3_bin.c
│   │   │   │   │   ├── test_font_montserrat_ascii_1bpp.c
│   │   │   │   │   ├── test_font_montserrat_ascii_2bpp.c
│   │   │   │   │   ├── test_font_montserrat_ascii_4bpp.c
│   │   │   │   │   ├── test_font_montserrat_ascii_4bpp_compressed.c
│   │   │   │   │   ├── test_imagebutton_left.c
│   │   │   │   │   ├── test_imagebutton_mid.c
│   │   │   │   │   ├── test_imagebutton_right.c
│   │   │   │   │   ├── test_img_caret_down.c
│   │   │   │   │   ├── test_img_cogwheel_a8.c
│   │   │   │   │   ├── test_img_cogwheel_argb8888.c
│   │   │   │   │   ├── test_img_cogwheel_i4.c
│   │   │   │   │   ├── test_img_cogwheel_rgb565.c
│   │   │   │   │   ├── test_img_cogwheel_rgb565a8.c
│   │   │   │   │   ├── test_img_cogwheel_xrgb8888.c
│   │   │   │   │   ├── test_img_emoji_F617.c
│   │   │   │   │   ├── test_img_lvgl_logo_jpg.c
│   │   │   │   │   ├── test_img_lvgl_logo_png.c
│   │   │   │   │   ├── test_kern_one_otf.c
│   │   │   │   │   ├── test_lottie_approve.c
│   │   │   │   │   ├── test_lottie_approve.json
│   │   │   │   │   ├── test_music_button_play.c
│   │   │   │   │   └── test_ubuntu_font.c
│   │   │   │   ├── test_cases/
│   │   │   │   │   ├── _test_template.c
│   │   │   │   │   ├── cache/
│   │   │   │   │   │   └── test_cache.c
│   │   │   │   │   ├── draw/
│   │   │   │   │   │   ├── test_clip_corner.c
│   │   │   │   │   │   ├── test_draw_blend.c
│   │   │   │   │   │   ├── test_draw_label.c
│   │   │   │   │   │   ├── test_draw_layer.c
│   │   │   │   │   │   ├── test_draw_sw_post_process.c
│   │   │   │   │   │   ├── test_draw_vector.c
│   │   │   │   │   │   ├── test_image_formats.c
│   │   │   │   │   │   ├── test_layer_transform.c
│   │   │   │   │   │   ├── test_render_to_al88.c
│   │   │   │   │   │   ├── test_render_to_argb8888.c
│   │   │   │   │   │   ├── test_render_to_i1.c
│   │   │   │   │   │   ├── test_render_to_l8.c
│   │   │   │   │   │   ├── test_render_to_rgb565.c
│   │   │   │   │   │   ├── test_render_to_rgb888.c
│   │   │   │   │   │   └── test_render_to_xrgb8888.c
│   │   │   │   │   ├── libs/
│   │   │   │   │   │   ├── test_barcode.c
│   │   │   │   │   │   ├── test_bin_decoder.c
│   │   │   │   │   │   ├── test_bmp.c
│   │   │   │   │   │   ├── test_font_stress.c
│   │   │   │   │   │   ├── test_freetype.c
│   │   │   │   │   │   ├── test_libjpeg_turbo.c
│   │   │   │   │   │   ├── test_libpng.c
│   │   │   │   │   │   ├── test_lodepng.c
│   │   │   │   │   │   ├── test_memmove.c
│   │   │   │   │   │   ├── test_qrcode.c
│   │   │   │   │   │   ├── test_tiny_ttf.c
│   │   │   │   │   │   └── test_tjpgd.c
│   │   │   │   │   ├── test_align_flex.c
│   │   │   │   │   ├── test_anim.c
│   │   │   │   │   ├── test_anim_timeline.c
│   │   │   │   │   ├── test_area.c
│   │   │   │   │   ├── test_array.c
│   │   │   │   │   ├── test_bindings.c
│   │   │   │   │   ├── test_config.c
│   │   │   │   │   ├── test_demo_stress.c
│   │   │   │   │   ├── test_demo_widgets.c
│   │   │   │   │   ├── test_draw_buf_stride.c
│   │   │   │   │   ├── test_event.c
│   │   │   │   │   ├── test_font_loader.c
│   │   │   │   │   ├── test_fs.c
│   │   │   │   │   ├── test_grid.c
│   │   │   │   │   ├── test_grid_fr.c
│   │   │   │   │   ├── test_gridnav.c
│   │   │   │   │   ├── test_group.c
│   │   │   │   │   ├── test_hover.c
│   │   │   │   │   ├── test_margin_align.c
│   │   │   │   │   ├── test_margin_flex.c
│   │   │   │   │   ├── test_margin_grid.c
│   │   │   │   │   ├── test_math.c
│   │   │   │   │   ├── test_mem.c
│   │   │   │   │   ├── test_observer.c
│   │   │   │   │   ├── test_profiler.c
│   │   │   │   │   ├── test_screen_load.c
│   │   │   │   │   ├── test_snapshot.c
│   │   │   │   │   ├── test_style.c
│   │   │   │   │   ├── test_txt.c
│   │   │   │   │   └── widgets/
│   │   │   │   │       ├── test_animimg.c
│   │   │   │   │       ├── test_arc.c
│   │   │   │   │       ├── test_bar.c
│   │   │   │   │       ├── test_btn.c
│   │   │   │   │       ├── test_btnmatrix.c
│   │   │   │   │       ├── test_calendar.c
│   │   │   │   │       ├── test_canvas.c
│   │   │   │   │       ├── test_chart.c
│   │   │   │   │       ├── test_checkbox.c
│   │   │   │   │       ├── test_dropdown.c
│   │   │   │   │       ├── test_image.c
│   │   │   │   │       ├── test_imagebutton.c
│   │   │   │   │       ├── test_imgfont.c
│   │   │   │   │       ├── test_keyboard.c
│   │   │   │   │       ├── test_label.c
│   │   │   │   │       ├── test_led.c
│   │   │   │   │       ├── test_line.c
│   │   │   │   │       ├── test_list.c
│   │   │   │   │       ├── test_lottie.c
│   │   │   │   │       ├── test_msgbox.c
│   │   │   │   │       ├── test_obj_flags.c
│   │   │   │   │       ├── test_obj_property.c
│   │   │   │   │       ├── test_obj_tree.c
│   │   │   │   │       ├── test_objid.c
│   │   │   │   │       ├── test_roller.c
│   │   │   │   │       ├── test_scale.c
│   │   │   │   │       ├── test_slider.c
│   │   │   │   │       ├── test_span.c
│   │   │   │   │       ├── test_spinbox.c
│   │   │   │   │       ├── test_spinner.c
│   │   │   │   │       ├── test_switch.c
│   │   │   │   │       ├── test_table.c
│   │   │   │   │       ├── test_tabview.c
│   │   │   │   │       ├── test_textarea.c
│   │   │   │   │       └── test_win.c
│   │   │   │   ├── test_files/
│   │   │   │   │   ├── fonts/
│   │   │   │   │   │   └── noto/
│   │   │   │   │   │       ├── OFL.txt
│   │   │   │   │   │       └── README.txt
│   │   │   │   │   └── readtest.txt
│   │   │   │   └── test_libs/
│   │   │   │       └── rnd_unicodes/
│   │   │   │           ├── lv_rnd_unicodes.c
│   │   │   │           ├── lv_rnd_unicodes.h
│   │   │   │           └── rnd_unicodes/
│   │   │   │               ├── .gitignore
│   │   │   │               ├── CMakeLists.txt
│   │   │   │               ├── LICENSE
│   │   │   │               ├── README.md
│   │   │   │               └── src/
│   │   │   │                   ├── library.c
│   │   │   │                   └── library.h
│   │   │   └── unity/
│   │   │       ├── generate_test_runner.rb
│   │   │       ├── run_test.erb
│   │   │       ├── type_sanitizer.rb
│   │   │       ├── unity.c
│   │   │       ├── unity.h
│   │   │       ├── unity_internals.h
│   │   │       ├── unity_support.c
│   │   │       ├── unity_support.h
│   │   │       └── yaml_helper.rb
│   │   └── zephyr/
│   │       ├── Kconfig
│   │       └── module.yml
│   ├── main.c
│   ├── manifest.json
│   ├── mouse_cursor_icon.c
│   └── toolchain.cmake
└── sound_app/
    ├── Makefile
    ├── aplay.cpp
    ├── aplay.h
    ├── cfg.h
    ├── ipc_udp.cpp
    ├── ipc_udp.h
    ├── opus.cpp
    ├── opus.h
    ├── record.cpp
    ├── record.h
    ├── sound_app.cpp
    └── 说明.md

================================================
FILE CONTENTS
================================================

================================================
FILE: CNAME
================================================
xiaozhi-linux.100ask.net

================================================
FILE: README.md
================================================
# Linux 小智 AI 聊天机器人

项目主要参考虾哥 [ESP32 AI小智](https://github.com/78/xiaozhi-esp32 ) 项目设计,我们在嵌入式 Linux 平台进行完整支持,其中有幸联系到虾哥本人,非常感谢在调试中给予我们建议方向,我们才能以最短的时间支持完成。此仓库主要作为 Linux AI小智 核心代码部分,不含各个单板平台适配相关的硬件 BSP 驱动 以及依赖,如果需要支持某款单板请参考如下支持列表。

目前支持单板平台 NXP IMX6ULL 平台,在支持 全志Tina T113 V85x系列平台 , 嘉楠K230 ,以及RK 系列 STM32MP157 等平台  。 未来计划支持更多平台芯片以及开发板,欢迎感兴趣同学 提交 支持。

已支持硬件列表:
- DshanPIxCanMV K230 Buildroot24系统 : [DshanPI-CanMV](https://github.com/100askTeam/xiaozhi-linux-SupportList/tree/DshanPI-CanMV)
- 100ASK_T113s3-PRO Tina4系统 :  [100ASK_T113s3-Pro_Tina4](https://github.com/100askTeam/xiaozhi-linux-SupportList/tree/100ASK_T113s3-Pro_Tina4)
- 100ASK_T113s3-PRO Tina5系统: [100ASK-T113s3-Pro_Tina5](https://github.com/100askTeam/xiaozhi-linux-SupportList/tree/100ask-T113s3-Pro_Tina5)
- DongshanPI-AICT Tina4系统 : [DongshanPI-AICT](https://github.com/100askTeam/xiaozhi-linux-SupportList/tree/DongshanPI-AICT)
- 100ASK_IMX6ULL-PRO Buildroot20系统 : [100ASK_IMX6ULL-PRO](https://github.com/100askTeam/xiaozhi-linux-SupportList/tree/100ASK_IMX6ULL-PRO)

提交贡献更多单板请参考: https://github.com/100askTeam/xiaozhi-linux-SupportList 内 README 

Linux 小智运行演示视频:https://www.bilibili.com/video/BV17nXNYJE5P/?share_source=copy_web&vd_source=695e352380e69504d9d46eb5e7463838



## 仓库介绍

源码主要结构:

![image-20250327113143486](docs/img/image-20250327113143486.png)



源码架构解析:

- 小智接口流程概述

![01_小智的接口流程概述](docs/img/01_小智的接口流程概述-1.png)

![01_小智的接口流程概述](docs/img/01_小智的接口流程概述-2.png)

![01_小智的接口流程概述](docs/img/01_小智的接口流程概述-3.png)

- sound_app框架分析

![02_sound_app框架分析](docs/img/02_sound_app框架分析-1.png)

![02_sound_app框架分析](docs/img/02_sound_app框架分析-2.png)

- control_center框架分析

![03_control_center框架分析](docs/img/03_control_center框架分析-1.png)

![03_control_center框架分析](docs/img/03_control_center框架分析-2.png)

![03_control_center框架分析](docs/img/03_control_center框架分析-3.png)

## 提交贡献

此仓库目前只是保留 Linux AI小智部分源码,不含平台相关,欢迎大家 提交 issue PR 来帮助改进 Linux小智。



## 交流学习

QQ交流群:564992486 

AIOT边缘AI大模型开发课程:https://item.taobao.com/item.htm?id=901161273967



================================================
FILE: control_center/Makefile
================================================
# sudo apt-get install libopus-dev libavresample-dev libswresample-dev libspeexdsp-dev

objs := control_center.o websocket_client.o ipc_udp.o http.o uuid.o

app = control_center
all: ${app}
${app}: $(objs)
	${CROSS_COMPILE}g++ -o $@ $^ -lboost_system -lssl -lcrypto -lpthread -lcurl


# 需要判断是否存在依赖文件
# .main.o.d .sub.o.d
dep_files := $(foreach f, $(objs), .$(f).d)
dep_files := $(wildcard $(dep_files))

# 把依赖文件包含进来
ifneq ($(dep_files),)
  include $(dep_files)
endif


%.o : %.c
	${CROSS_COMPILE}gcc -g -I ./ -Wp,-MD,.$@.d -g -c -o $@  $<

%.o : %.cpp
	${CROSS_COMPILE}g++ -g -I ./ -Wp,-MD,.$@.d -g -c -o $@  $<

clean:
	rm *.o ${app} -f

distclean:
	rm  $(dep_files) *.o ${app} -f

opus_test: opus.cpp
	g++ -DTEST -I ./ -o $@ $^ -lopus  -lspeexdsp


================================================
FILE: control_center/cfg.h
================================================
#ifndef __CFG_H
#define __CFG_H

#define AUDIO_PORT_UP    5676   /* sound_app向control_center的这个端口上传音频 */
#define AUDIO_PORT_DOWN  5677   /* control_center向sound_app的这个端口下发音频 */
#define UI_PORT_UP    5678      /* GUI向control_center的这个端口上传UI信息 */
#define UI_PORT_DOWN  5679      /* control_center向GUI的这个端口下发UI信息 */


#define CFG_FILE "/etc/xiaozhi.cfg"

#endif

================================================
FILE: control_center/control_center.cpp
================================================
// SPDX-License-Identifier: GPL-3.0-only
/*
 * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.net> 
 * Discourse:  https://forums.100ask.net
 */
 
/*  Copyright (C) 2008-2023 深圳百问网科技有限公司
 *  All rights reserved
 *
 * 免责声明: 百问网编写的文档, 仅供学员学习使用, 可以转发或引用(请保留作者信息),禁止用于商业用途!
 * 免责声明: 百问网编写的程序, 用于商业用途请遵循GPL许可, 百问网不承担任何后果!
 * 
 * 本程序遵循GPL V3协议, 请遵循协议
 * 百问网学习平台   : https://www.100ask.net
 * 百问网交流社区   : https://forums.100ask.net
 * 百问网官方B站    : https://space.bilibili.com/275908810
 * 本程序所用开发板 : Linux开发板
 * 百问网官方淘宝   : https://100ask.taobao.com
 * 联系我们(E-mail) : weidongshan@100ask.net
 *
 *          版权所有,盗版必究。
 *  
 * 修改历史     版本号           作者        修改内容
 *-----------------------------------------------------
 * 2025.03.20      v01         百问科技      创建文件
 *-----------------------------------------------------
 */
#include <websocketpp/config/asio_client.hpp>
#include <websocketpp/client.hpp>

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <dirent.h>
#include <random>
#include <sstream>
#include <iomanip>

// Include nlohmann/json library
#include "json.hpp"
#include "websocket_client.h"
#include "http.h"
#include "ipc_udp.h"
#include "uuid.h"

#include "cfg.h"

using json = nlohmann::json;
static int g_audio_upload_enable = 1;
static std::string g_session_id;

typedef enum ListeningMode {
    kListeningModeAutoStop,
    kListeningModeManualStop,
    kListeningModeAlwaysOn // 需要 AEC 支持
} ListeningMode;

// 定义设备状态枚举类型
typedef enum DeviceState {
    kDeviceStateUnknown,
    kDeviceStateStarting,
    kDeviceStateWifiConfiguring,
    kDeviceStateIdle,
    kDeviceStateConnecting,
    kDeviceStateListening,
    kDeviceStateSpeaking,
    kDeviceStateUpgrading,
    kDeviceStateActivating,
    kDeviceStateFatalError
} DeviceState;

static p_ipc_endpoint_t g_ipc_ep_audio;
static p_ipc_endpoint_t g_ipc_ep_ui;
static DeviceState g_device_state = kDeviceStateUnknown;

static void set_device_state(DeviceState state)
{
    g_device_state = state;
}

static void send_device_state(void)
{
    std::string stateString = "{\"state\":" + std::to_string(g_device_state) + "}";
    g_ipc_ep_ui->send(g_ipc_ep_ui, stateString.data(), stateString.size());
}

static void send_stt(const std::string& text)
{
    if (!g_ipc_ep_ui) {
        std::cerr << "Error: g_ipc_ep_ui is nullptr" << std::endl;
        return;
    }

    try {
        json j;
        j["text"] = text;
        std::string textString = j.dump();
        g_ipc_ep_ui->send(g_ipc_ep_ui, textString.data(), textString.size());
    } catch (const std::exception& e) {
        std::cerr << "Error creating JSON string: " << e.what() << std::endl;
    }
}

static void process_opus_data_downloaded(const char *buffer, size_t size)
{
#if 0    
    std::cout << "Received opus data: " << size << " bytes" << std::endl;
    static int file_number = 1;
    // 构造文件名
    char filename[20];
    snprintf(filename, sizeof(filename), "test%03d.opus", file_number);

    // 打开文件
    FILE *file = fopen(filename, "wb");
    if (file) {
        // 写入Opus数据
        fwrite(buffer, 1, size, file);
        fclose(file);
        file_number++; // 增加文件编号
    } else {
        fprintf(stderr, "Failed to open file %s for writing\n", filename);
    }     
#endif    
    g_ipc_ep_audio->send(g_ipc_ep_audio, buffer, size);
}

static void send_start_listening_req(ListeningMode mode)
{
    std::string startString = "{\"session_id\":\"" + g_session_id + "\"";

    startString += ",\"type\":\"listen\",\"state\":\"start\"";

    if (mode == kListeningModeAutoStop) {
        startString += ",\"mode\":\"auto\"}";
    } else if (mode == kListeningModeManualStop) {
        startString += ",\"mode\":\"manual\"}";
    } else if (mode == kListeningModeAlwaysOn) {
        startString += ",\"mode\":\"realtime\"}";
    }

    try {
        //c->send(hdl, startString, websocketpp::frame::opcode::text);
        websocket_send_text(startString.data(), startString.size());
        std::cout << "Send: " << startString << std::endl;    
    } catch (const websocketpp::lib::error_code& e) {
        std::cout << "Error sending message: " << e << " (" << e.message() << ")" << std::endl;
    }     
}

static void process_hello_json(const char *buffer, size_t size)
{
    json j = json::parse(buffer);
    int sample_rate = j["audio_params"]["sample_rate"];
    int channels = j["audio_params"]["channels"];
    std::cout << "Received valid 'hello' message with sample_rate: " << sample_rate << " and channels: " << channels << std::endl;     

    g_session_id = j["session_id"];

    std::string desc = R"(
    {"session_id":"","type":"iot","update":true,"descriptors":[{"name":"Speaker","description":"扬声器","properties":{"volume":{"description":"当前音量值","type":"number"}},"methods":{"SetVolume":{"description":"设置音量","parameters":{"volume":{"description":"0到100之间的整数","type":"number"}}}}}]}
    )";

    // Send the new message              
    try {
        //c->send(hdl, desc, websocketpp::frame::opcode::text);
        websocket_send_text(desc.data(), desc.size());
        std::cout << "Send: " << desc << std::endl;    
    } catch (const websocketpp::lib::error_code& e) {
        std::cout << "Error sending message: " << e << " (" << e.message() << ")" << std::endl;
    }

    std::string desc2 = R"(
    {"session_id":"","type":"iot","update":true,"descriptors":[{"name":"Backlight","description":"屏幕背光","properties":{"brightness":{"description":"当前亮度百分比","type":"number"}},"methods":{"SetBrightness":{"description":"设置亮度","parameters":{"brightness":{"description":"0到100之间的整数","type":"number"}}}}}]}
)";

    // Send the new message
      
    try {
        //c->send(hdl, desc2, websocketpp::frame::opcode::text);
        websocket_send_text(desc2.data(), desc2.size());
        std::cout << "Send: " << desc2 << std::endl;    
    } catch (const websocketpp::lib::error_code& e) {
        std::cout << "Error sending message: " << e << " (" << e.message() << ")" << std::endl;
    }	

    std::string desc3 = R"(
    {"session_id":"","type":"iot","update":true,"descriptors":[{"name":"Battery","description":"电池管理","properties":{"level":{"description":"当前电量百分比","type":"number"},"charging":{"description":"是否充电中","type":"boolean"}},"methods":{}}]}
)";

    // Send the new message
      
    try {
        //c->send(hdl, desc3, websocketpp::frame::opcode::text);
        websocket_send_text(desc3.data(), desc3.size());
        std::cout << "Send: " << desc3 << std::endl;    
    } catch (const websocketpp::lib::error_code& e) {
        std::cout << "Error sending message: " << e << " (" << e.message() << ")" << std::endl;
    }			

    std::string startString = R"(
        {"session_id":"","type":"listen","state":"start","mode":"auto"}
    )";
    
    try {
        //c->send(hdl, startString, websocketpp::frame::opcode::text);
        websocket_send_text(startString.data(), startString.size());
        std::cout << "Send: " << startString << std::endl;    
    } catch (const websocketpp::lib::error_code& e) {
        std::cout << "Error sending message: " << e << " (" << e.message() << ")" << std::endl;
    }            

    std::string state = R"(
        {"session_id":"","type":"iot","update":true,"states":[{"name":"Speaker","state":{"volume":80}},{"name":"Backlight","state":{"brightness":75}},{"name":"Battery","state":{"level":0,"charging":false}}]}
    )";
    
    g_audio_upload_enable = 1;

    try {
        //c->send(hdl, state, websocketpp::frame::opcode::text);
        websocket_send_text(state.data(), state.size());
        std::cout << "Send: " << state << std::endl;    
    } catch (const websocketpp::lib::error_code& e) {
        std::cout << "Error sending message: " << e << " (" << e.message() << ")" << std::endl;
    }
}

static void process_other_json(const char *buffer, size_t size)
{
    try {
        // Parse JSON data
        json j = json::parse(buffer);
        
        if (!j.contains("type"))
            return;
        
        if (j["type"] == "tts") {
            auto state = j["state"];
            if (state == "start") {
                // 下发语音, 可以关闭录音
                g_audio_upload_enable = 0;
                set_device_state(kDeviceStateListening);
                send_device_state();
            } else if (state == "stop") {
                // 本次交互结束, 可以继续上传声音
                // 等待一会以免她听到自己的话误以为再次对话
                sleep(2);
                send_start_listening_req(kListeningModeAutoStop);
                set_device_state(kDeviceStateListening);
                send_device_state();
                g_audio_upload_enable = 1;
            } else if (state == "sentence_start") {
                // 取出"text", 通知GUI
                // {"type":"tts","state":"sentence_start","text":"1加1等于2啦~","session_id":"eae53ada"}
                auto text = j["text"];
                send_stt(text.get<std::string>());
                send_start_listening_req(kListeningModeAutoStop);
                set_device_state(kDeviceStateSpeaking);
                send_device_state();
            }
        } else if (j["type"] == "stt") {
            // 表示服务器端识别到了用户语音, 取出"text", 通知GUI
            auto text = j["text"];
            send_stt(text.get<std::string>());
        } else if (j["type"] == "llm") {
            // 有"happy"等取值
        /*
            "neutral",
            "happy",
            "laughing",
            "funny",
            "sad",
            "angry",
            "crying",
            "loving",
            "embarrassed",
            "surprised",
            "shocked",
            "thinking",
            "winking",
            "cool",
            "relaxed",
            "delicious",
            "kissy",
            "confident",
            "sleepy",
            "silly",
            "confused"
        */          
            auto emotion = j["emotion"];
        } else if (j["type"] == "iot") {
            
        }
    } catch (json::parse_error& e) {
        std::cout << "Failed to parse JSON message: " << e.what() << std::endl;
    } catch (std::exception& e) {
        std::cout << "Error processing message: " << e.what() << std::endl;
    }
}

static void process_txt_data_downloaded(const char *buffer, size_t size)
{
    try {
        // Parse the JSON message
        json j = json::parse(buffer);

        // Check if the message matches the expected structure
        if (j.contains("type") && j["type"] == "hello") {
            process_hello_json(buffer, size);
        } else {
            process_other_json(buffer, size);
        }
         
    } catch (json::parse_error& e) {
        std::cout << "Failed to parse JSON message: " << e.what() << std::endl;
    } catch (std::exception& e) {
        std::cout << "Error processing message: " << e.what() << std::endl;
    }
}

int process_opus_data_uploaded(char *buffer, size_t size, void *user_data)
{
#if 0    
    static int file_number = 1;
    // 构造文件名
    char filename[20];
    snprintf(filename, sizeof(filename), "test%03d.opus", file_number);

    // 打开文件
    FILE *file = fopen(filename, "wb");
    if (file) {
        // 写入Opus数据
        fwrite(buffer, 1, size, file);
        fclose(file);
        file_number++; // 增加文件编号
    } else {
        fprintf(stderr, "Failed to open file %s for writing\n", filename);
    }   
#endif
    if (g_audio_upload_enable) {
        static int cnt = 0;
        if ((cnt++ % 100) == 0)
            std::cout << "Send opus data to server: " << size <<" count: "<< cnt << std::endl;
        websocket_send_binary(buffer, size);
    }
    return 0;
}

int process_ui_data(char *buffer, size_t size, void *user_data)
{
    return 0;
}

/**
 * 从配置文件中读取 UUID
 *
 * 该函数尝试从 /etc/xiaozhi.cfg 文件中读取 UUID。
 * 如果文件存在且包含有效的 UUID,则返回该 UUID。
 * 否则,返回空字符串。
 *
 * @return 从配置文件中读取的 UUID,如果未找到则返回空字符串
 */
std::string read_uuid_from_config() {
    std::ifstream config_file(CFG_FILE);
    if (!config_file.is_open()) {
        std::cerr << "Failed to open " CFG_FILE " for reading" << std::endl;
        return "";
    }

    try {
        json config_json;
        config_file >> config_json;
        config_file.close();

        if (config_json.contains("uuid")) {
            return config_json["uuid"].get<std::string>();
        }
    } catch (const nlohmann::json::parse_error& e) {
        std::cerr << "Failed to parse " CFG_FILE ": " << e.what() << std::endl;
    }

    return "";
}

/**
 * 将 UUID 写入配置文件
 *
 * 该函数将给定的 UUID 写入 /etc/xiaozhi.cfg 文件。
 * 如果文件不存在,则创建新文件。
 *
 * @param uuid 要写入配置文件的 UUID
 * @return 成功写入文件返回 true,否则返回 false
 */
bool write_uuid_to_config(const std::string& uuid) {
    std::ofstream config_file(CFG_FILE);
    if (!config_file.is_open()) {
        std::cerr << "Failed to open " CFG_FILE " for writing" << std::endl;
        return false;
    }

    try {
        json config_json;
        config_json["uuid"] = uuid;
        config_file << config_json.dump(4); // 使用 4 个空格进行缩进
        config_file.close();
        return true;
    } catch (const nlohmann::json::parse_error& e) {
        std::cerr << "Failed to write to " CFG_FILE ": " << e.what() << std::endl;
    }

    return false;
}

int main(int argc, char **argv)
{
    char active_code[20] = "";

    // 获取无线网卡的 MAC 地址
    std::string mac = get_wireless_mac_address();
    if (mac.empty()) {
        std::cerr << "Failed to get wireless MAC address" << std::endl;
        mac = "00:00:00:00:00:00"; // 默认值,可以根据需要修改
    }

    // 读取配置文件中的 UUID
    std::string uuid = read_uuid_from_config();
    if (uuid.empty()) {
        std::cerr << "UUID not found in " CFG_FILE << std::endl;
        // 生成新的 UUID
        uuid = generate_uuid();
        std::cout << "Generated new UUID: " << uuid << std::endl;

        // 将新的 UUID 写入配置文件
        if (!write_uuid_to_config(uuid)) {
            std::cerr << "Failed to write UUID to " CFG_FILE << std::endl;
        } else {
            std::cout << "UUID written to " CFG_FILE << std::endl;
        }
    } else {
        std::cout << "UUID from " CFG_FILE ": " << uuid << std::endl;
    }    

    g_ipc_ep_audio = ipc_endpoint_create_udp(AUDIO_PORT_UP, AUDIO_PORT_DOWN, process_opus_data_uploaded, NULL);
    g_ipc_ep_ui = ipc_endpoint_create_udp(UI_PORT_UP, UI_PORT_DOWN, process_ui_data, NULL);

    http_data_t http_data;
    http_data.url = "https://api.tenclass.net/xiaozhi/ota/";

    // 替换 http_data.post 中的 uuid
    std::ostringstream post_stream;
    post_stream << R"(
        {
            "uuid":")" << uuid << R"(",
            "application": {
                "name": "xiaozhi_linux_100ask", 
                "version": "1.0.0"
            },
            "ota": {
            },
            "board": {
                "type": "100ask_linux_board", 
                "name": "100ask_imx6ull_board" 
            }
        }
    )";
    http_data.post = post_stream.str();

    // 替换 http_data.headers 中的 Device-Id
    std::ostringstream headers_stream;
    headers_stream << R"(
        {
            "Content-Type": "application/json",
            "Device-Id": ")" << mac << R"(",
            "User-Agent": "weidongshan1",
            "Accept-Language": "zh-CN"
        }
    )";
    http_data.headers = headers_stream.str();

    while (0 != active_device(&http_data, active_code)) {
        if (active_code[0]) {
            std::string auth_code = "Active-Code: " + std::string(active_code);
            set_device_state(kDeviceStateActivating);
            send_device_state();
            send_stt(auth_code);
        }
        sleep(5);
    }

    set_device_state(kDeviceStateIdle);
    send_device_state();
    send_stt("设备已经激活");

    websocket_data_t ws_data;

    // 替换 ws_data.headers 中的 Device-Id 和 Client-Id
    std::ostringstream ws_headers_stream;
    ws_headers_stream << R"(
        {
            "Authorization": "Bearer test-token",
            "Protocol-Version": "1",
            "Device-Id": ")" << mac << R"(",
            "Client-Id": ")" << uuid << R"("
        }
    )";
    ws_data.headers = ws_headers_stream.str();

    ws_data.hello = R"(
        {
            "type": "hello",
            "version": 1,
            "transport": "websocket",
            "audio_params": {
                "format": "opus",
                "sample_rate": 16000,
                "channels": 1,
                "frame_duration": 60
            }
        })";

    ws_data.hostname = "api.tenclass.net";
    ws_data.port = "443";
    ws_data.path = "/xiaozhi/v1/";    

    websocket_set_callbacks(process_opus_data_downloaded, process_txt_data_downloaded, &ws_data);
    websocket_start();

    while (1)
    {
        sleep(1);
    }
}




================================================
FILE: control_center/http.cpp
================================================
// SPDX-License-Identifier: GPL-3.0-only
/*
 * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.net> 
 * Discourse:  https://forums.100ask.net
 */
 
/*  Copyright (C) 2008-2023 深圳百问网科技有限公司
 *  All rights reserved
 *
 * 免责声明: 百问网编写的文档, 仅供学员学习使用, 可以转发或引用(请保留作者信息),禁止用于商业用途!
 * 免责声明: 百问网编写的程序, 用于商业用途请遵循GPL许可, 百问网不承担任何后果!
 * 
 * 本程序遵循GPL V3协议, 请遵循协议
 * 百问网学习平台   : https://www.100ask.net
 * 百问网交流社区   : https://forums.100ask.net
 * 百问网官方B站    : https://space.bilibili.com/275908810
 * 本程序所用开发板 : Linux开发板
 * 百问网官方淘宝   : https://100ask.taobao.com
 * 联系我们(E-mail) : weidongshan@100ask.net
 *
 *          版权所有,盗版必究。
 *  
 * 修改历史     版本号           作者        修改内容
 *-----------------------------------------------------
 * 2025.03.20      v01         百问科技      创建文件
 *-----------------------------------------------------
 */
#include <iostream>
#include <curl/curl.h>
#include <string>
#include <sstream>
#include "json.hpp"

#include "http.h"

// 回调函数,用于处理HTTP响应数据
size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userp) {
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

/**
 * 激活设备
 * 
 * @param pHttpData http连接数据
 * @param code 存储激活码
 * @return 0-已经激活, 1-得到了激活码(等待激活), -1-失败
 */
int active_device(p_http_data_t pHttpData, char *codebuf) {
    int ret = -1;

    CURL* curl;
    CURLcode res;
    std::string readBuffer;

    std::string url = pHttpData->url;
    std::string postFields = pHttpData->post;
    std::string headers = pHttpData->headers;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    if(curl) {
        // 设置URL
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());

        // 设置POST数据
        std::cout << "PostFields: " << postFields << std::endl;
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postFields.c_str());

        // 设置请求头
        struct curl_slist *curlheaders = NULL;
        try {
            std::cout << "headers: " << headers << std::endl;
            nlohmann::json headerJson = nlohmann::json::parse(headers);
            for (const auto& [key, value] : headerJson.items()) {
                std::string headerLine = key + ": " + value.get<std::string>();
                std::cout << "parsed head: "<< headerLine << std::endl;
                curlheaders = curl_slist_append(curlheaders, headerLine.c_str());
            }
        } catch (const nlohmann::json::parse_error& e) {
            std::cerr << "Failed to parse headers JSON: " << e.what() << std::endl;
            curl_easy_cleanup(curl);
            curl_global_cleanup();
            return 1;
        }

        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, curlheaders);

        // 设置回调函数以处理响应数据
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);

        // 执行请求
        res = curl_easy_perform(curl);

        // 检查请求是否成功
        if(res != CURLE_OK) {
            std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
        } else {
            std::cout << "Response: " << readBuffer << std::endl;

            // 解析响应数据
            /* 
             * 响应数据格式如下: 有activation字段表示未激活,否则表示激活了
                {
                    "mqtt": {
                        "endpoint": "post-cn-apg3xckag01.mqtt.aliyuncs.com",
                        "client_id": "GID_test@@@00_0c_29_bd_43_04",
                        "username": "Signature|LTAI5tF8J3CrdWmRiuTjxHbF|post-cn-apg3xckag01",
                        "password": "ObF5W8laHbuh9Qr5Ok07V9LhLLg=",
                        "publish_topic": "device-server",
                        "subscribe_topic": "devices/00_0c_29_bd_43_04"
                    },
                    "server_time": {
                        "timestamp": 1741940708193,
                        "timezone_offset": 480
                    },
                    "firmware": {
                        "url": ""
                    },
                    "activation": {
                        "code": "600206",
                        "message": "xiaozhi.me\n600206"
                    }
                }            
            */
            try {
                nlohmann::json responseJson = nlohmann::json::parse(readBuffer);
                if (responseJson.contains("activation") && responseJson["activation"].contains("code")) {
                    std::string code = responseJson["activation"]["code"];
                    std::cout << "Activation Code: " << code << std::endl;
                    strncpy(codebuf, code.c_str(), code.size() + 1); // 存储激活码到codebuf
                    ret = 1; // 表示未激活
                } else {
                    std::cerr << "Device has been Activated" << std::endl;
                    ret = 0;
                }
            } catch (const nlohmann::json::parse_error& e) {
                std::cerr << "Failed to parse response JSON: " << e.what() << std::endl;
                ret = -1;
            }
        }

        // 清理请求头
        curl_slist_free_all(curlheaders);

        // 清理
        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();

    return ret;
}

================================================
FILE: control_center/http.h
================================================
#ifndef _HTTP_H_
#define _HTTP_H_

#include <string>

typedef struct http_data_t {
    std::string url;
    std::string post;
    std::string headers;
} http_data_t, *p_http_data_t;

/**
 * 激活设备
 * 
 * @param pHttpData http连接数据
 * @param code 存储激活码
 * @return 0-已经激活, 1-得到了激活码(等待激活), -1-失败
 */
int active_device(p_http_data_t pHttpData, char *codebuf);

#endif

================================================
FILE: control_center/ipc_udp.cpp
================================================
// SPDX-License-Identifier: GPL-3.0-only
/*
 * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.net> 
 * Discourse:  https://forums.100ask.net
 */
 
/*  Copyright (C) 2008-2023 深圳百问网科技有限公司
 *  All rights reserved
 *
 * 免责声明: 百问网编写的文档, 仅供学员学习使用, 可以转发或引用(请保留作者信息),禁止用于商业用途!
 * 免责声明: 百问网编写的程序, 用于商业用途请遵循GPL许可, 百问网不承担任何后果!
 * 
 * 本程序遵循GPL V3协议, 请遵循协议
 * 百问网学习平台   : https://www.100ask.net
 * 百问网交流社区   : https://forums.100ask.net
 * 百问网官方B站    : https://space.bilibili.com/275908810
 * 本程序所用开发板 : Linux开发板
 * 百问网官方淘宝   : https://100ask.taobao.com
 * 联系我们(E-mail) : weidongshan@100ask.net
 *
 *          版权所有,盗版必究。
 *  
 * 修改历史     版本号           作者        修改内容
 *-----------------------------------------------------
 * 2025.03.20      v01         百问科技      创建文件
 *-----------------------------------------------------
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>

#include "ipc_udp.h"

// 定义UDP数据结构体
typedef struct upd_data_t {
    int socket_send;       // 发送数据的套接字
    int port_remote;         // 目标端口号
    int socket_recv;       // 接收数据的套接字
    int port_local;          // 源端口号
    struct sockaddr_in remote_addr;  // 目标地址结构体
}upd_data_t, *p_upd_data_t;

// 线程处理函数声明
static void* handle_udp_connection(void* arg);

// 发送数据的函数声明
static int udp_send_data(ipc_endpoint_t *pendpoint, const char *data, int len);

// 接收数据的函数声明
static int udp_recv_data(ipc_endpoint_t *pendpoint, unsigned char *data, int maxlen, int *retlen);

// 创建一个UDP类型的IPC端点
// 参数:
//   port_local: 本地端口号
//   port_remote: 远程端口号
//   cb: 数据传输回调函数
//   user_data: 用户数据,将传递给回调函数
// 返回值:
//   成功: 返回IPC端点指针
//   失败: 返回NULL
p_ipc_endpoint_t ipc_endpoint_create_udp(int port_local, int port_remote, transfer_callback_t cb, void *user_data)
{
    // 分配并清零UDP数据结构体
    p_upd_data_t pudpdata = (p_upd_data_t)calloc(1, sizeof(upd_data_t));
    // 分配并清零IPC端点结构体
    p_ipc_endpoint_t pendpoint = (p_ipc_endpoint_t)calloc(1, sizeof(ipc_endpoint_t));

    int fd_recv;
    struct sockaddr_in local_addr;
    struct sockaddr_in server_addr;

    if (!pudpdata || !pendpoint) {
        if (pendpoint)free(pendpoint);
        if (pudpdata)free(pudpdata);
        return NULL;            

    }

    // 关联UDP数据结构体和IPC端点结构体
    pendpoint->priv = pudpdata;
    pendpoint->cb = cb;
    pendpoint->user_data = user_data;
    pendpoint->send = udp_send_data;
    pendpoint->recv = udp_recv_data;

    // 设置远程和本地端口号
    pudpdata->port_remote = port_remote;
    pudpdata->port_local = port_local;

    // 1. 为了发送数据进行网络初始化
    // 创建UDP套接字
    int fd_send = socket(AF_INET, SOCK_DGRAM, 0);
    if (fd_send < 0) {
        perror("Failed to create UDP socket for audio client");
        if (pendpoint)free(pendpoint);
        if (pudpdata)free(pudpdata);
        return NULL;            
}

    // 初始化服务器地址结构
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(port_remote); // 使用传入的端口号
    if (inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr) <= 0) {
        perror("Invalid address/ Address not supported");
        if (pendpoint)free(pendpoint);
        if (pudpdata)free(pudpdata);
        return NULL;            
}

    // 保存套接字和服务器地址信息到UDP数据结构体
    pudpdata->socket_send = fd_send;
    pudpdata->remote_addr = server_addr;    
    
    // 2. 为了接收数据进行网络初始化
    // 创建UDP套接字
    if ((fd_recv = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
        perror("Failed to create socket");
        if (pendpoint)free(pendpoint);
        if (pudpdata)free(pudpdata);
        return NULL;            
}

    pudpdata->socket_recv = fd_recv;

    memset(&local_addr, 0, sizeof(local_addr));
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(port_local);

    if (inet_pton(AF_INET, "127.0.0.1", &local_addr.sin_addr) <= 0) {
        perror("Invalid address/ Address not supported");
        if (pendpoint)free(pendpoint);
        if (pudpdata)free(pudpdata);
        return NULL;            
}

    // 绑定套接字
    if (bind(fd_recv, (struct sockaddr *)&local_addr, sizeof(local_addr)) < 0) {
        perror("Failed to bind socket");
        close(fd_recv);
        if (pendpoint)free(pendpoint);
        if (pudpdata)free(pudpdata);
        return NULL;            
}

    // 如果有回调函数,创建线程处理UDP连接
    if (cb) {
        pthread_t thread_id;
        if (pthread_create(&thread_id, NULL, handle_udp_connection, pendpoint) != 0) {
            perror("Failed to create thread");

            if (pendpoint)free(pendpoint);
            if (pudpdata)free(pudpdata);
            return NULL;            
        }
    }

    return pendpoint;    
}

// 销毁IPC端点,释放相关资源
void ipc_endpoint_destroy_udp(p_ipc_endpoint_t pendpoint)
{
    free(pendpoint->priv);
    free(pendpoint);
}

/**
 * 处理UDP连接的线程函数
 * 
 * @param arg 指向ipc_endpoint_t结构体的指针
 * @return 线程退出时返回NULL
 */
static void* handle_udp_connection(void* arg)
{
    ipc_endpoint_t *pendpoint = (ipc_endpoint_t*)arg;
    p_upd_data_t pudpdata = (p_upd_data_t)pendpoint->priv;

    int fd_recv = pudpdata->socket_recv;
    char buffer[2048];

    struct sockaddr_in client_addr;
    socklen_t client_len = sizeof(client_addr);
    ssize_t bytes_received;

    printf("Listening on port_local %d\n", pudpdata->port_local);

    while (1) {
        // 接收数据
        bytes_received = recvfrom(fd_recv, buffer, sizeof(buffer), 0, (struct sockaddr *)&client_addr, &client_len);
        if (bytes_received > 0) {
            // 处理接收到的数据
            if (pendpoint->cb) {
                pendpoint->cb(buffer, bytes_received, pendpoint->user_data);
            }
        }
    }

    pthread_exit(NULL);
}

/**
 * 发送数据到指定endpoint的通用函数
 * 
 * @param pendpoint 指向ipc_endpoint_t结构体的指针
 * @param data 指向要发送的数据的指针
 * @param len 要发送的数据的长度
 * @return 成功返回0,失败返回-1
 */
static int udp_send_data(ipc_endpoint_t *pendpoint, const char *data, int len)
{
    p_upd_data_t pudpdata = (p_upd_data_t)pendpoint->priv;

    // 获取套接字文件描述符
    int fd = pudpdata->socket_send;
    // 获取服务器地址的指针
    struct sockaddr_in *p_server_addr = &pudpdata->remote_addr;

    // 检查套接字是否已初始化
    if (fd < 0) {
        fprintf(stderr, "UDP socket for audio server is not initialized\n");
        return -1;
    }

    // 发送数据到客户端
    ssize_t bytes_sent = sendto(fd, data, len, 0, (struct sockaddr *)p_server_addr, sizeof(*p_server_addr));
    // 检查发送的数据量是否与预期相符
    if (bytes_sent != len) {
        perror("Failed to send data to client");
        return -1;
    }

    // 发送成功
    return 0;
}

/**
 * 接收数据函数
 * 
 * 该函数负责从UDP套接字接收数据,并将其写入指定的缓冲区
 * 
 * @param data 接收到的数据将存储在这个缓冲区中
 * @param maxlen 缓冲区的最大长度
 * @param retlen 实际接收的数据长度
 * 
 * @return 返回接收结果的整数表示,具体含义可能包括成功、失败或特定错误代码
 */
static int udp_recv_data(ipc_endpoint_t *pendpoint, unsigned char *data, int maxlen, int *retlen)
{
    p_upd_data_t pudpdata = (p_upd_data_t)pendpoint->priv;

    // 获取套接字文件描述符
    int fd = pudpdata->socket_recv;

    struct sockaddr_in client_addr;
    socklen_t client_len = sizeof(client_addr);
    ssize_t bytes_received;

    if (fd < 0) {
        fprintf(stderr, "UDP socket for audio client is not initialized\n");
        return -1;
    }

    // 接收数据
    bytes_received = recvfrom(fd, data, maxlen, 0, (struct sockaddr *)&client_addr, &client_len);
    if (bytes_received < 0) {
        perror("Failed to receive data from server");
        return -1;
    }

    *retlen = (int)bytes_received;

    return 0;
}



================================================
FILE: control_center/ipc_udp.h
================================================
#ifndef TRANSFER_CENTER_H
#define TRANSFER_CENTER_H

#include <cstddef> // 添加此行以定义 size_t

typedef int (*transfer_callback_t)(char *buffer, size_t size, void *user_data);

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>

/**
 * 传输的各方被称为endpoint
 * 数据结构体,包含套接字、端口、服务器地址和回调函数
 */
typedef struct ipc_endpoint_t {  
    void *priv;
    void *user_data;
    transfer_callback_t cb;  // 接收到远端的客户端发来的信息后使用它来处理
    int (*send)(struct ipc_endpoint_t *self, const char *data, int len); // 发送数据的函数指针
    int (*recv)(struct ipc_endpoint_t *self, unsigned char *data, int maxlen, int *retlen); // 接收数据的函数指针
} ipc_endpoint_t, *p_ipc_endpoint_t;

// 创建一个UDP类型的IPC端点
// 参数:
//   port_local: 本地端口号
//   port_remote: 远程端口号
//   cb: 数据传输回调函数
//   user_data: 用户数据,将传递给回调函数
// 返回值:
//   成功: 返回IPC端点指针
//   失败: 返回NULL
p_ipc_endpoint_t ipc_endpoint_create_udp(int port_local, int port_remote, transfer_callback_t cb, void *user_data);

// 销毁IPC端点,释放相关资源
void ipc_endpoint_destroy_udp(p_ipc_endpoint_t pendpoint);

#endif // TRANSFER_H

================================================
FILE: control_center/json.hpp
================================================
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT

/****************************************************************************\
 * Note on documentation: The source files contain links to the online      *
 * documentation of the public API at https://json.nlohmann.me. This URL    *
 * contains the most recent documentation and should also be applicable to  *
 * previous versions; documentation for deprecated functions is not         *
 * removed, but marked deprecated. See "Generate documentation" section in  *
 * file docs/README.md.                                                     *
\****************************************************************************/

#ifndef INCLUDE_NLOHMANN_JSON_HPP_
#define INCLUDE_NLOHMANN_JSON_HPP_

#include <algorithm> // all_of, find, for_each
#include <cstddef> // nullptr_t, ptrdiff_t, size_t
#include <functional> // hash, less
#include <initializer_list> // initializer_list
#ifndef JSON_NO_IO
    #include <iosfwd> // istream, ostream
#endif  // JSON_NO_IO
#include <iterator> // random_access_iterator_tag
#include <memory> // unique_ptr
#include <string> // string, stoi, to_string
#include <utility> // declval, forward, move, pair, swap
#include <vector> // vector

// #include <nlohmann/adl_serializer.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <utility>

// #include <nlohmann/detail/abi_macros.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



// This file contains all macro definitions affecting or depending on the ABI

#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
    #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
        #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 3
            #warning "Already included a different version of the library!"
        #endif
    #endif
#endif

#define NLOHMANN_JSON_VERSION_MAJOR 3   // NOLINT(modernize-macro-to-enum)
#define NLOHMANN_JSON_VERSION_MINOR 11  // NOLINT(modernize-macro-to-enum)
#define NLOHMANN_JSON_VERSION_PATCH 3   // NOLINT(modernize-macro-to-enum)

#ifndef JSON_DIAGNOSTICS
    #define JSON_DIAGNOSTICS 0
#endif

#ifndef JSON_DIAGNOSTIC_POSITIONS
    #define JSON_DIAGNOSTIC_POSITIONS 0
#endif

#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
    #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
#endif

#if JSON_DIAGNOSTICS
    #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag
#else
    #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS
#endif

#if JSON_DIAGNOSTIC_POSITIONS
    #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp
#else
    #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS
#endif

#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
    #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp
#else
    #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON
#endif

#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION
    #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
#endif

// Construct the namespace ABI tags component
#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c
#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \
    NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c)

#define NLOHMANN_JSON_ABI_TAGS                                       \
    NLOHMANN_JSON_ABI_TAGS_CONCAT(                                   \
            NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS,                       \
            NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \
            NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS)

// Construct the namespace version component
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
    _v ## major ## _ ## minor ## _ ## patch
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
    NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)

#if NLOHMANN_JSON_NAMESPACE_NO_VERSION
#define NLOHMANN_JSON_NAMESPACE_VERSION
#else
#define NLOHMANN_JSON_NAMESPACE_VERSION                                 \
    NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
                                           NLOHMANN_JSON_VERSION_MINOR, \
                                           NLOHMANN_JSON_VERSION_PATCH)
#endif

// Combine namespace components
#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b
#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
    NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)

#ifndef NLOHMANN_JSON_NAMESPACE
#define NLOHMANN_JSON_NAMESPACE               \
    nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
            NLOHMANN_JSON_ABI_TAGS,           \
            NLOHMANN_JSON_NAMESPACE_VERSION)
#endif

#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
#define NLOHMANN_JSON_NAMESPACE_BEGIN                \
    namespace nlohmann                               \
    {                                                \
    inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
                NLOHMANN_JSON_ABI_TAGS,              \
                NLOHMANN_JSON_NAMESPACE_VERSION)     \
    {
#endif

#ifndef NLOHMANN_JSON_NAMESPACE_END
#define NLOHMANN_JSON_NAMESPACE_END                                     \
    }  /* namespace (inline namespace) NOLINT(readability/namespace) */ \
    }  // namespace nlohmann
#endif

// #include <nlohmann/detail/conversions/from_json.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <algorithm> // transform
#include <array> // array
#include <forward_list> // forward_list
#include <iterator> // inserter, front_inserter, end
#include <map> // map
#ifdef JSON_HAS_CPP_17
    #include <optional> // optional
#endif
#include <string> // string
#include <tuple> // tuple, make_tuple
#include <type_traits> // is_arithmetic, is_same, is_enum, underlying_type, is_convertible
#include <unordered_map> // unordered_map
#include <utility> // pair, declval
#include <valarray> // valarray

// #include <nlohmann/detail/exceptions.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <cstddef> // nullptr_t
#include <exception> // exception
#if JSON_DIAGNOSTICS
    #include <numeric> // accumulate
#endif
#include <stdexcept> // runtime_error
#include <string> // to_string
#include <vector> // vector

// #include <nlohmann/detail/value_t.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <array> // array
#include <cstddef> // size_t
#include <cstdint> // uint8_t
#include <string> // string

// #include <nlohmann/detail/macro_scope.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <utility> // declval, pair
// #include <nlohmann/detail/meta/detected.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <type_traits>

// #include <nlohmann/detail/meta/void_t.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



// #include <nlohmann/detail/abi_macros.hpp>


NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{

template<typename ...Ts> struct make_void
{
    using type = void;
};
template<typename ...Ts> using void_t = typename make_void<Ts...>::type;

}  // namespace detail
NLOHMANN_JSON_NAMESPACE_END


NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{

// https://en.cppreference.com/w/cpp/experimental/is_detected
struct nonesuch
{
    nonesuch() = delete;
    ~nonesuch() = delete;
    nonesuch(nonesuch const&) = delete;
    nonesuch(nonesuch const&&) = delete;
    void operator=(nonesuch const&) = delete;
    void operator=(nonesuch&&) = delete;
};

template<class Default,
         class AlwaysVoid,
         template<class...> class Op,
         class... Args>
struct detector
{
    using value_t = std::false_type;
    using type = Default;
};

template<class Default, template<class...> class Op, class... Args>
struct detector<Default, void_t<Op<Args...>>, Op, Args...>
{
    using value_t = std::true_type;
    using type = Op<Args...>;
};

template<template<class...> class Op, class... Args>
using is_detected = typename detector<nonesuch, void, Op, Args...>::value_t;

template<template<class...> class Op, class... Args>
struct is_detected_lazy : is_detected<Op, Args...> { };

template<template<class...> class Op, class... Args>
using detected_t = typename detector<nonesuch, void, Op, Args...>::type;

template<class Default, template<class...> class Op, class... Args>
using detected_or = detector<Default, void, Op, Args...>;

template<class Default, template<class...> class Op, class... Args>
using detected_or_t = typename detected_or<Default, Op, Args...>::type;

template<class Expected, template<class...> class Op, class... Args>
using is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>;

template<class To, template<class...> class Op, class... Args>
using is_detected_convertible =
    std::is_convertible<detected_t<Op, Args...>, To>;

}  // namespace detail
NLOHMANN_JSON_NAMESPACE_END

// #include <nlohmann/thirdparty/hedley/hedley.hpp>


//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-FileCopyrightText: 2016 - 2021 Evan Nemerson <evan@nemerson.com>
// SPDX-License-Identifier: MIT

/* Hedley - https://nemequ.github.io/hedley
 * Created by Evan Nemerson <evan@nemerson.com>
 */

#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15)
#if defined(JSON_HEDLEY_VERSION)
    #undef JSON_HEDLEY_VERSION
#endif
#define JSON_HEDLEY_VERSION 15

#if defined(JSON_HEDLEY_STRINGIFY_EX)
    #undef JSON_HEDLEY_STRINGIFY_EX
#endif
#define JSON_HEDLEY_STRINGIFY_EX(x) #x

#if defined(JSON_HEDLEY_STRINGIFY)
    #undef JSON_HEDLEY_STRINGIFY
#endif
#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x)

#if defined(JSON_HEDLEY_CONCAT_EX)
    #undef JSON_HEDLEY_CONCAT_EX
#endif
#define JSON_HEDLEY_CONCAT_EX(a,b) a##b

#if defined(JSON_HEDLEY_CONCAT)
    #undef JSON_HEDLEY_CONCAT
#endif
#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b)

#if defined(JSON_HEDLEY_CONCAT3_EX)
    #undef JSON_HEDLEY_CONCAT3_EX
#endif
#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c

#if defined(JSON_HEDLEY_CONCAT3)
    #undef JSON_HEDLEY_CONCAT3
#endif
#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c)

#if defined(JSON_HEDLEY_VERSION_ENCODE)
    #undef JSON_HEDLEY_VERSION_ENCODE
#endif
#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision))

#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR)
    #undef JSON_HEDLEY_VERSION_DECODE_MAJOR
#endif
#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000)

#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR)
    #undef JSON_HEDLEY_VERSION_DECODE_MINOR
#endif
#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000)

#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION)
    #undef JSON_HEDLEY_VERSION_DECODE_REVISION
#endif
#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000)

#if defined(JSON_HEDLEY_GNUC_VERSION)
    #undef JSON_HEDLEY_GNUC_VERSION
#endif
#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
    #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
#elif defined(__GNUC__)
    #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0)
#endif

#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK)
    #undef JSON_HEDLEY_GNUC_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_GNUC_VERSION)
    #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_MSVC_VERSION)
    #undef JSON_HEDLEY_MSVC_VERSION
#endif
#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL)
    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
#elif defined(_MSC_FULL_VER) && !defined(__ICL)
    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10)
#elif defined(_MSC_VER) && !defined(__ICL)
    #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0)
#endif

#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK)
    #undef JSON_HEDLEY_MSVC_VERSION_CHECK
#endif
#if !defined(JSON_HEDLEY_MSVC_VERSION)
    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0)
#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
#else
    #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor)))
#endif

#if defined(JSON_HEDLEY_INTEL_VERSION)
    #undef JSON_HEDLEY_INTEL_VERSION
#endif
#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL)
    #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE)
#elif defined(__INTEL_COMPILER) && !defined(__ICL)
    #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
#endif

#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK)
    #undef JSON_HEDLEY_INTEL_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_INTEL_VERSION)
    #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_INTEL_CL_VERSION)
    #undef JSON_HEDLEY_INTEL_CL_VERSION
#endif
#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL)
    #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0)
#endif

#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK)
    #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_INTEL_CL_VERSION)
    #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_PGI_VERSION)
    #undef JSON_HEDLEY_PGI_VERSION
#endif
#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
    #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
#endif

#if defined(JSON_HEDLEY_PGI_VERSION_CHECK)
    #undef JSON_HEDLEY_PGI_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_PGI_VERSION)
    #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_SUNPRO_VERSION)
    #undef JSON_HEDLEY_SUNPRO_VERSION
#endif
#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10)
#elif defined(__SUNPRO_C)
    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf)
#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10)
#elif defined(__SUNPRO_CC)
    #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf)
#endif

#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK)
    #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_SUNPRO_VERSION)
    #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
    #undef JSON_HEDLEY_EMSCRIPTEN_VERSION
#endif
#if defined(__EMSCRIPTEN__)
    #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__)
#endif

#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK)
    #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION)
    #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_ARM_VERSION)
    #undef JSON_HEDLEY_ARM_VERSION
#endif
#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
    #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
    #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
#endif

#if defined(JSON_HEDLEY_ARM_VERSION_CHECK)
    #undef JSON_HEDLEY_ARM_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_ARM_VERSION)
    #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_IBM_VERSION)
    #undef JSON_HEDLEY_IBM_VERSION
#endif
#if defined(__ibmxl__)
    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__)
#elif defined(__xlC__) && defined(__xlC_ver__)
    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
#elif defined(__xlC__)
    #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0)
#endif

#if defined(JSON_HEDLEY_IBM_VERSION_CHECK)
    #undef JSON_HEDLEY_IBM_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_IBM_VERSION)
    #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_TI_VERSION)
    #undef JSON_HEDLEY_TI_VERSION
#endif
#if \
    defined(__TI_COMPILER_VERSION__) && \
    ( \
      defined(__TMS470__) || defined(__TI_ARM__) || \
      defined(__MSP430__) || \
      defined(__TMS320C2000__) \
    )
#if (__TI_COMPILER_VERSION__ >= 16000000)
    #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#endif

#if defined(JSON_HEDLEY_TI_VERSION_CHECK)
    #undef JSON_HEDLEY_TI_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_TI_VERSION)
    #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_TI_CL2000_VERSION)
    #undef JSON_HEDLEY_TI_CL2000_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__)
    #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif

#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK)
    #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_TI_CL2000_VERSION)
    #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_TI_CL430_VERSION)
    #undef JSON_HEDLEY_TI_CL430_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__)
    #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif

#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK)
    #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_TI_CL430_VERSION)
    #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
    #undef JSON_HEDLEY_TI_ARMCL_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__))
    #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif

#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK)
    #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_TI_ARMCL_VERSION)
    #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_TI_CL6X_VERSION)
    #undef JSON_HEDLEY_TI_CL6X_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__)
    #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif

#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK)
    #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_TI_CL6X_VERSION)
    #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_TI_CL7X_VERSION)
    #undef JSON_HEDLEY_TI_CL7X_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__)
    #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif

#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK)
    #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_TI_CL7X_VERSION)
    #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
    #undef JSON_HEDLEY_TI_CLPRU_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__)
    #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif

#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK)
    #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_TI_CLPRU_VERSION)
    #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_CRAY_VERSION)
    #undef JSON_HEDLEY_CRAY_VERSION
#endif
#if defined(_CRAYC)
    #if defined(_RELEASE_PATCHLEVEL)
        #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL)
    #else
        #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0)
    #endif
#endif

#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK)
    #undef JSON_HEDLEY_CRAY_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_CRAY_VERSION)
    #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_IAR_VERSION)
    #undef JSON_HEDLEY_IAR_VERSION
#endif
#if defined(__IAR_SYSTEMS_ICC__)
    #if __VER__ > 1000
        #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000))
    #else
        #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0)
    #endif
#endif

#if defined(JSON_HEDLEY_IAR_VERSION_CHECK)
    #undef JSON_HEDLEY_IAR_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_IAR_VERSION)
    #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_TINYC_VERSION)
    #undef JSON_HEDLEY_TINYC_VERSION
#endif
#if defined(__TINYC__)
    #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
#endif

#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK)
    #undef JSON_HEDLEY_TINYC_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_TINYC_VERSION)
    #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_DMC_VERSION)
    #undef JSON_HEDLEY_DMC_VERSION
#endif
#if defined(__DMC__)
    #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf)
#endif

#if defined(JSON_HEDLEY_DMC_VERSION_CHECK)
    #undef JSON_HEDLEY_DMC_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_DMC_VERSION)
    #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_COMPCERT_VERSION)
    #undef JSON_HEDLEY_COMPCERT_VERSION
#endif
#if defined(__COMPCERT_VERSION__)
    #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
#endif

#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK)
    #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_COMPCERT_VERSION)
    #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_PELLES_VERSION)
    #undef JSON_HEDLEY_PELLES_VERSION
#endif
#if defined(__POCC__)
    #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0)
#endif

#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK)
    #undef JSON_HEDLEY_PELLES_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_PELLES_VERSION)
    #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_MCST_LCC_VERSION)
    #undef JSON_HEDLEY_MCST_LCC_VERSION
#endif
#if defined(__LCC__) && defined(__LCC_MINOR__)
    #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__)
#endif

#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK)
    #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_MCST_LCC_VERSION)
    #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_GCC_VERSION)
    #undef JSON_HEDLEY_GCC_VERSION
#endif
#if \
    defined(JSON_HEDLEY_GNUC_VERSION) && \
    !defined(__clang__) && \
    !defined(JSON_HEDLEY_INTEL_VERSION) && \
    !defined(JSON_HEDLEY_PGI_VERSION) && \
    !defined(JSON_HEDLEY_ARM_VERSION) && \
    !defined(JSON_HEDLEY_CRAY_VERSION) && \
    !defined(JSON_HEDLEY_TI_VERSION) && \
    !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \
    !defined(JSON_HEDLEY_TI_CL430_VERSION) && \
    !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
    !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \
    !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \
    !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \
    !defined(__COMPCERT__) && \
    !defined(JSON_HEDLEY_MCST_LCC_VERSION)
    #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION
#endif

#if defined(JSON_HEDLEY_GCC_VERSION_CHECK)
    #undef JSON_HEDLEY_GCC_VERSION_CHECK
#endif
#if defined(JSON_HEDLEY_GCC_VERSION)
    #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch))
#else
    #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0)
#endif

#if defined(JSON_HEDLEY_HAS_ATTRIBUTE)
    #undef JSON_HEDLEY_HAS_ATTRIBUTE
#endif
#if \
  defined(__has_attribute) && \
  ( \
    (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \
  )
#  define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)
#else
#  define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0)
#endif

#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE)
    #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE
#endif
#if defined(__has_attribute)
    #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
#else
    #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE)
    #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE
#endif
#if defined(__has_attribute)
    #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)
#else
    #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE)
    #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
#endif
#if \
    defined(__has_cpp_attribute) && \
    defined(__cplusplus) && \
    (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0))
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)
#else
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)
#endif

#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS)
    #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS
#endif
#if !defined(__cplusplus) || !defined(__has_cpp_attribute)
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
#elif \
    !defined(JSON_HEDLEY_PGI_VERSION) && \
    !defined(JSON_HEDLEY_IAR_VERSION) && \
    (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \
    (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0))
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute)
#else
    #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0)
#endif

#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE)
    #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE
#endif
#if defined(__has_cpp_attribute) && defined(__cplusplus)
    #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
#else
    #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE)
    #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE
#endif
#if defined(__has_cpp_attribute) && defined(__cplusplus)
    #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute)
#else
    #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_HAS_BUILTIN)
    #undef JSON_HEDLEY_HAS_BUILTIN
#endif
#if defined(__has_builtin)
    #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin)
#else
    #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0)
#endif

#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN)
    #undef JSON_HEDLEY_GNUC_HAS_BUILTIN
#endif
#if defined(__has_builtin)
    #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
#else
    #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN)
    #undef JSON_HEDLEY_GCC_HAS_BUILTIN
#endif
#if defined(__has_builtin)
    #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin)
#else
    #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_HAS_FEATURE)
    #undef JSON_HEDLEY_HAS_FEATURE
#endif
#if defined(__has_feature)
    #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature)
#else
    #define JSON_HEDLEY_HAS_FEATURE(feature) (0)
#endif

#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE)
    #undef JSON_HEDLEY_GNUC_HAS_FEATURE
#endif
#if defined(__has_feature)
    #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
#else
    #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_GCC_HAS_FEATURE)
    #undef JSON_HEDLEY_GCC_HAS_FEATURE
#endif
#if defined(__has_feature)
    #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature)
#else
    #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_HAS_EXTENSION)
    #undef JSON_HEDLEY_HAS_EXTENSION
#endif
#if defined(__has_extension)
    #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension)
#else
    #define JSON_HEDLEY_HAS_EXTENSION(extension) (0)
#endif

#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION)
    #undef JSON_HEDLEY_GNUC_HAS_EXTENSION
#endif
#if defined(__has_extension)
    #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
#else
    #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION)
    #undef JSON_HEDLEY_GCC_HAS_EXTENSION
#endif
#if defined(__has_extension)
    #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension)
#else
    #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE)
    #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE
#endif
#if defined(__has_declspec_attribute)
    #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute)
#else
    #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0)
#endif

#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE)
    #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE
#endif
#if defined(__has_declspec_attribute)
    #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
#else
    #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE)
    #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE
#endif
#if defined(__has_declspec_attribute)
    #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute)
#else
    #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_HAS_WARNING)
    #undef JSON_HEDLEY_HAS_WARNING
#endif
#if defined(__has_warning)
    #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning)
#else
    #define JSON_HEDLEY_HAS_WARNING(warning) (0)
#endif

#if defined(JSON_HEDLEY_GNUC_HAS_WARNING)
    #undef JSON_HEDLEY_GNUC_HAS_WARNING
#endif
#if defined(__has_warning)
    #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
#else
    #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_GCC_HAS_WARNING)
    #undef JSON_HEDLEY_GCC_HAS_WARNING
#endif
#if defined(__has_warning)
    #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning)
#else
    #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
#endif

#if \
    (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
    defined(__clang__) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
    JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \
    JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \
    (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR))
    #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value)
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
    #define JSON_HEDLEY_PRAGMA(value) __pragma(value)
#else
    #define JSON_HEDLEY_PRAGMA(value)
#endif

#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH)
    #undef JSON_HEDLEY_DIAGNOSTIC_PUSH
#endif
#if defined(JSON_HEDLEY_DIAGNOSTIC_POP)
    #undef JSON_HEDLEY_DIAGNOSTIC_POP
#endif
#if defined(__clang__)
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push")
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop")
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
#elif \
    JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))
    #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))
#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0)
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push")
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop")
#elif \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push")
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop")
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)")
    #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)")
#else
    #define JSON_HEDLEY_DIAGNOSTIC_PUSH
    #define JSON_HEDLEY_DIAGNOSTIC_POP
#endif

/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for
   HEDLEY INTERNAL USE ONLY.  API subject to change without notice. */
#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_
#endif
#if defined(__cplusplus)
#  if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat")
#    if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions")
#      if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions")
#        define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
    _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
    _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \
    xpr \
    JSON_HEDLEY_DIAGNOSTIC_POP
#      else
#        define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
    _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
    xpr \
    JSON_HEDLEY_DIAGNOSTIC_POP
#      endif
#    else
#      define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
    xpr \
    JSON_HEDLEY_DIAGNOSTIC_POP
#    endif
#  endif
#endif
#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x
#endif

#if defined(JSON_HEDLEY_CONST_CAST)
    #undef JSON_HEDLEY_CONST_CAST
#endif
#if defined(__cplusplus)
#  define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))
#elif \
  JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \
  JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
#  define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \
        JSON_HEDLEY_DIAGNOSTIC_PUSH \
        JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \
        ((T) (expr)); \
        JSON_HEDLEY_DIAGNOSTIC_POP \
    }))
#else
#  define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr))
#endif

#if defined(JSON_HEDLEY_REINTERPRET_CAST)
    #undef JSON_HEDLEY_REINTERPRET_CAST
#endif
#if defined(__cplusplus)
    #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast<T>(expr))
#else
    #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr))
#endif

#if defined(JSON_HEDLEY_STATIC_CAST)
    #undef JSON_HEDLEY_STATIC_CAST
#endif
#if defined(__cplusplus)
    #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast<T>(expr))
#else
    #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr))
#endif

#if defined(JSON_HEDLEY_CPP_CAST)
    #undef JSON_HEDLEY_CPP_CAST
#endif
#if defined(__cplusplus)
#  if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast")
#    define JSON_HEDLEY_CPP_CAST(T, expr) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \
    ((T) (expr)) \
    JSON_HEDLEY_DIAGNOSTIC_POP
#  elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0)
#    define JSON_HEDLEY_CPP_CAST(T, expr) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    _Pragma("diag_suppress=Pe137") \
    JSON_HEDLEY_DIAGNOSTIC_POP
#  else
#    define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr))
#  endif
#else
#  define JSON_HEDLEY_CPP_CAST(T, expr) (expr)
#endif

#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED)
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations")
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"")
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)")
#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786))
#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445")
#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996))
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
#elif \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718")
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)")
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215")
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)")
#else
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED
#endif

#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS)
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161))
#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif \
    JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161")
#else
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif

#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES)
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes")
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"")
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"")
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)")
#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292))
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030))
#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098")
#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)")
#elif \
    JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097")
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
#else
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES
#endif

#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL)
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual")
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"")
#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)")
#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"")
#else
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL
#endif

#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION)
    #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunused-function")
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"")
#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"")
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505))
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142")
#else
    #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION
#endif

#if defined(JSON_HEDLEY_DEPRECATED)
    #undef JSON_HEDLEY_DEPRECATED
#endif
#if defined(JSON_HEDLEY_DEPRECATED_FOR)
    #undef JSON_HEDLEY_DEPRECATED_FOR
#endif
#if \
    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since))
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement))
#elif \
    (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \
    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since)))
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement)))
#elif defined(__cplusplus) && (__cplusplus >= 201402L)
    #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]])
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
#elif \
    JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
    #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))
#elif \
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
    JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated)
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
    #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated")
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated")
#else
    #define JSON_HEDLEY_DEPRECATED(since)
    #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement)
#endif

#if defined(JSON_HEDLEY_UNAVAILABLE)
    #undef JSON_HEDLEY_UNAVAILABLE
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since)))
#else
    #define JSON_HEDLEY_UNAVAILABLE(available_since)
#endif

#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT)
    #undef JSON_HEDLEY_WARN_UNUSED_RESULT
#endif
#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG)
    #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__))
#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L)
    #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]])
#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard)
    #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]])
#elif defined(_Check_return_) /* SAL */
    #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_
#else
    #define JSON_HEDLEY_WARN_UNUSED_RESULT
    #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg)
#endif

#if defined(JSON_HEDLEY_SENTINEL)
    #undef JSON_HEDLEY_SENTINEL
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))
#else
    #define JSON_HEDLEY_SENTINEL(position)
#endif

#if defined(JSON_HEDLEY_NO_RETURN)
    #undef JSON_HEDLEY_NO_RETURN
#endif
#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
    #define JSON_HEDLEY_NO_RETURN __noreturn
#elif \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
    #define JSON_HEDLEY_NO_RETURN _Noreturn
#elif defined(__cplusplus) && (__cplusplus >= 201103L)
    #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]])
#elif \
    JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
    #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
    #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return")
#elif \
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
    #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;")
#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
    #define JSON_HEDLEY_NO_RETURN __attribute((noreturn))
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
    #define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
#else
    #define JSON_HEDLEY_NO_RETURN
#endif

#if defined(JSON_HEDLEY_NO_ESCAPE)
    #undef JSON_HEDLEY_NO_ESCAPE
#endif
#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape)
    #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__))
#else
    #define JSON_HEDLEY_NO_ESCAPE
#endif

#if defined(JSON_HEDLEY_UNREACHABLE)
    #undef JSON_HEDLEY_UNREACHABLE
#endif
#if defined(JSON_HEDLEY_UNREACHABLE_RETURN)
    #undef JSON_HEDLEY_UNREACHABLE_RETURN
#endif
#if defined(JSON_HEDLEY_ASSUME)
    #undef JSON_HEDLEY_ASSUME
#endif
#if \
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_ASSUME(expr) __assume(expr)
#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume)
    #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr)
#elif \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
    #if defined(__cplusplus)
        #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr)
    #else
        #define JSON_HEDLEY_ASSUME(expr) _nassert(expr)
    #endif
#endif
#if \
    (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \
    JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \
    JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable()
#elif defined(JSON_HEDLEY_ASSUME)
    #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
#endif
#if !defined(JSON_HEDLEY_ASSUME)
    #if defined(JSON_HEDLEY_UNREACHABLE)
        #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1)))
    #else
        #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr)
    #endif
#endif
#if defined(JSON_HEDLEY_UNREACHABLE)
    #if  \
        JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
        JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0)
        #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value))
    #else
        #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE()
    #endif
#else
    #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value)
#endif
#if !defined(JSON_HEDLEY_UNREACHABLE)
    #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
#endif

JSON_HEDLEY_DIAGNOSTIC_PUSH
#if JSON_HEDLEY_HAS_WARNING("-Wpedantic")
    #pragma clang diagnostic ignored "-Wpedantic"
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus)
    #pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
#endif
#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0)
    #if defined(__clang__)
        #pragma clang diagnostic ignored "-Wvariadic-macros"
    #elif defined(JSON_HEDLEY_GCC_VERSION)
        #pragma GCC diagnostic ignored "-Wvariadic-macros"
    #endif
#endif
#if defined(JSON_HEDLEY_NON_NULL)
    #undef JSON_HEDLEY_NON_NULL
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
    #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
#else
    #define JSON_HEDLEY_NON_NULL(...)
#endif
JSON_HEDLEY_DIAGNOSTIC_POP

#if defined(JSON_HEDLEY_PRINTF_FORMAT)
    #undef JSON_HEDLEY_PRINTF_FORMAT
#endif
#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO)
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check)))
#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO)
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check)))
#elif \
    JSON_HEDLEY_HAS_ATTRIBUTE(format) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check)))
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0)
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check))
#else
    #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check)
#endif

#if defined(JSON_HEDLEY_CONSTEXPR)
    #undef JSON_HEDLEY_CONSTEXPR
#endif
#if defined(__cplusplus)
    #if __cplusplus >= 201103L
        #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr)
    #endif
#endif
#if !defined(JSON_HEDLEY_CONSTEXPR)
    #define JSON_HEDLEY_CONSTEXPR
#endif

#if defined(JSON_HEDLEY_PREDICT)
    #undef JSON_HEDLEY_PREDICT
#endif
#if defined(JSON_HEDLEY_LIKELY)
    #undef JSON_HEDLEY_LIKELY
#endif
#if defined(JSON_HEDLEY_UNLIKELY)
    #undef JSON_HEDLEY_UNLIKELY
#endif
#if defined(JSON_HEDLEY_UNPREDICTABLE)
    #undef JSON_HEDLEY_UNPREDICTABLE
#endif
#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable)
    #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr))
#endif
#if \
  (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \
  JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \
  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
#  define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability(  (expr), (value), (probability))
#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability)   __builtin_expect_with_probability(!!(expr),    1   , (probability))
#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability)  __builtin_expect_with_probability(!!(expr),    0   , (probability))
#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
#elif \
  (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
  JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
  (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \
  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \
  JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \
  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
  JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \
  JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
#  define JSON_HEDLEY_PREDICT(expr, expected, probability) \
    (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)))
#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
    (__extension__ ({ \
        double hedley_probability_ = (probability); \
        ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
    }))
#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
    (__extension__ ({ \
        double hedley_probability_ = (probability); \
        ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
    }))
#  define JSON_HEDLEY_LIKELY(expr)   __builtin_expect(!!(expr), 1)
#  define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
#else
#  define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))
#  define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr))
#  define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr))
#  define JSON_HEDLEY_LIKELY(expr) (!!(expr))
#  define JSON_HEDLEY_UNLIKELY(expr) (!!(expr))
#endif
#if !defined(JSON_HEDLEY_UNPREDICTABLE)
    #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5)
#endif

#if defined(JSON_HEDLEY_MALLOC)
    #undef JSON_HEDLEY_MALLOC
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_MALLOC __attribute__((__malloc__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
    #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory")
#elif \
    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_MALLOC __declspec(restrict)
#else
    #define JSON_HEDLEY_MALLOC
#endif

#if defined(JSON_HEDLEY_PURE)
    #undef JSON_HEDLEY_PURE
#endif
#if \
  JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \
  JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
  JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
  (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
  (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
  (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
  (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
  JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
#  define JSON_HEDLEY_PURE __attribute__((__pure__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
#  define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data")
#elif defined(__cplusplus) && \
    ( \
      JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \
      JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \
      JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \
    )
#  define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;")
#else
#  define JSON_HEDLEY_PURE
#endif

#if defined(JSON_HEDLEY_CONST)
    #undef JSON_HEDLEY_CONST
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(const) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_CONST __attribute__((__const__))
#elif \
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0)
    #define JSON_HEDLEY_CONST _Pragma("no_side_effect")
#else
    #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE
#endif

#if defined(JSON_HEDLEY_RESTRICT)
    #undef JSON_HEDLEY_RESTRICT
#endif
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)
    #define JSON_HEDLEY_RESTRICT restrict
#elif \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \
    JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
    JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \
    JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \
    defined(__clang__) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_RESTRICT __restrict
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus)
    #define JSON_HEDLEY_RESTRICT _Restrict
#else
    #define JSON_HEDLEY_RESTRICT
#endif

#if defined(JSON_HEDLEY_INLINE)
    #undef JSON_HEDLEY_INLINE
#endif
#if \
    (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
    (defined(__cplusplus) && (__cplusplus >= 199711L))
    #define JSON_HEDLEY_INLINE inline
#elif \
    defined(JSON_HEDLEY_GCC_VERSION) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0)
    #define JSON_HEDLEY_INLINE __inline__
#elif \
    JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_INLINE __inline
#else
    #define JSON_HEDLEY_INLINE
#endif

#if defined(JSON_HEDLEY_ALWAYS_INLINE)
    #undef JSON_HEDLEY_ALWAYS_INLINE
#endif
#if \
  JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \
  JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
  JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
  JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
  JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
  JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
  (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
  (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
  (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
  (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
  JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
  JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
  JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
  JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
  JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
#  define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE
#elif \
  JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \
  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
#  define JSON_HEDLEY_ALWAYS_INLINE __forceinline
#elif defined(__cplusplus) && \
    ( \
      JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
      JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
      JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
      JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
      JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
      JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \
    )
#  define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
#  define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced")
#else
#  define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE
#endif

#if defined(JSON_HEDLEY_NEVER_INLINE)
    #undef JSON_HEDLEY_NEVER_INLINE
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \
    JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \
    (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \
    (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \
    (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \
    (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \
    JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \
    JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \
    JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0)
    #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__))
#elif \
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0)
    #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline")
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus)
    #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
    #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never")
#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0)
    #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline))
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0)
    #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
#else
    #define JSON_HEDLEY_NEVER_INLINE
#endif

#if defined(JSON_HEDLEY_PRIVATE)
    #undef JSON_HEDLEY_PRIVATE
#endif
#if defined(JSON_HEDLEY_PUBLIC)
    #undef JSON_HEDLEY_PUBLIC
#endif
#if defined(JSON_HEDLEY_IMPORT)
    #undef JSON_HEDLEY_IMPORT
#endif
#if defined(_WIN32) || defined(__CYGWIN__)
#  define JSON_HEDLEY_PRIVATE
#  define JSON_HEDLEY_PUBLIC   __declspec(dllexport)
#  define JSON_HEDLEY_IMPORT   __declspec(dllimport)
#else
#  if \
    JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
    JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
    ( \
      defined(__TI_EABI__) && \
      ( \
        (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
        JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \
      ) \
    ) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
#    define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden")))
#    define JSON_HEDLEY_PUBLIC  __attribute__((__visibility__("default")))
#  else
#    define JSON_HEDLEY_PRIVATE
#    define JSON_HEDLEY_PUBLIC
#  endif
#  define JSON_HEDLEY_IMPORT    extern
#endif

#if defined(JSON_HEDLEY_NO_THROW)
    #undef JSON_HEDLEY_NO_THROW
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__))
#elif \
    JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0)
    #define JSON_HEDLEY_NO_THROW __declspec(nothrow)
#else
    #define JSON_HEDLEY_NO_THROW
#endif

#if defined(JSON_HEDLEY_FALL_THROUGH)
    #undef JSON_HEDLEY_FALL_THROUGH
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))
#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough)
    #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]])
#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough)
    #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]])
#elif defined(__fallthrough) /* SAL */
    #define JSON_HEDLEY_FALL_THROUGH __fallthrough
#else
    #define JSON_HEDLEY_FALL_THROUGH
#endif

#if defined(JSON_HEDLEY_RETURNS_NON_NULL)
    #undef JSON_HEDLEY_RETURNS_NON_NULL
#endif
#if \
    JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))
#elif defined(_Ret_notnull_) /* SAL */
    #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_
#else
    #define JSON_HEDLEY_RETURNS_NON_NULL
#endif

#if defined(JSON_HEDLEY_ARRAY_PARAM)
    #undef JSON_HEDLEY_ARRAY_PARAM
#endif
#if \
    defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
    !defined(__STDC_NO_VLA__) && \
    !defined(__cplusplus) && \
    !defined(JSON_HEDLEY_PGI_VERSION) && \
    !defined(JSON_HEDLEY_TINYC_VERSION)
    #define JSON_HEDLEY_ARRAY_PARAM(name) (name)
#else
    #define JSON_HEDLEY_ARRAY_PARAM(name)
#endif

#if defined(JSON_HEDLEY_IS_CONSTANT)
    #undef JSON_HEDLEY_IS_CONSTANT
#endif
#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR)
    #undef JSON_HEDLEY_REQUIRE_CONSTEXPR
#endif
/* JSON_HEDLEY_IS_CONSTEXPR_ is for
   HEDLEY INTERNAL USE ONLY.  API subject to change without notice. */
#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
    #undef JSON_HEDLEY_IS_CONSTEXPR_
#endif
#if \
    JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \
    JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
    JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
    JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \
    JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \
    JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
    JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \
    (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \
    JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
    JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10)
    #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)
#endif
#if !defined(__cplusplus)
#  if \
       JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \
       JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \
       JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
       JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \
       JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \
       JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \
       JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24)
#if defined(__INTPTR_TYPE__)
    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*)
#else
    #include <stdint.h>
    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*)
#endif
#  elif \
       ( \
          defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \
          !defined(JSON_HEDLEY_SUNPRO_VERSION) && \
          !defined(JSON_HEDLEY_PGI_VERSION) && \
          !defined(JSON_HEDLEY_IAR_VERSION)) || \
       (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
       JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \
       JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \
       JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \
       JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0)
#if defined(__INTPTR_TYPE__)
    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0)
#else
    #include <stdint.h>
    #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0)
#endif
#  elif \
       defined(JSON_HEDLEY_GCC_VERSION) || \
       defined(JSON_HEDLEY_INTEL_VERSION) || \
       defined(JSON_HEDLEY_TINYC_VERSION) || \
       defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \
       JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \
       defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
       defined(JSON_HEDLEY_TI_CL6X_VERSION) || \
       defined(JSON_HEDLEY_TI_CL7X_VERSION) || \
       defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \
       defined(__clang__)
#    define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \
        sizeof(void) != \
        sizeof(*( \
                  1 ? \
                  ((void*) ((expr) * 0L) ) : \
((struct { char v[sizeof(void) * 2]; } *) 1) \
                ) \
              ) \
                                            )
#  endif
#endif
#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
    #if !defined(JSON_HEDLEY_IS_CONSTANT)
        #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr)
    #endif
    #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1))
#else
    #if !defined(JSON_HEDLEY_IS_CONSTANT)
        #define JSON_HEDLEY_IS_CONSTANT(expr) (0)
    #endif
    #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr)
#endif

#if defined(JSON_HEDLEY_BEGIN_C_DECLS)
    #undef JSON_HEDLEY_BEGIN_C_DECLS
#endif
#if defined(JSON_HEDLEY_END_C_DECLS)
    #undef JSON_HEDLEY_END_C_DECLS
#endif
#if defined(JSON_HEDLEY_C_DECL)
    #undef JSON_HEDLEY_C_DECL
#endif
#if defined(__cplusplus)
    #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" {
    #define JSON_HEDLEY_END_C_DECLS }
    #define JSON_HEDLEY_C_DECL extern "C"
#else
    #define JSON_HEDLEY_BEGIN_C_DECLS
    #define JSON_HEDLEY_END_C_DECLS
    #define JSON_HEDLEY_C_DECL
#endif

#if defined(JSON_HEDLEY_STATIC_ASSERT)
    #undef JSON_HEDLEY_STATIC_ASSERT
#endif
#if \
  !defined(__cplusplus) && ( \
      (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
      (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
      JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \
      JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \
      defined(_Static_assert) \
    )
#  define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)
#elif \
  (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
  JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \
  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
#  define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message))
#else
#  define JSON_HEDLEY_STATIC_ASSERT(expr, message)
#endif

#if defined(JSON_HEDLEY_NULL)
    #undef JSON_HEDLEY_NULL
#endif
#if defined(__cplusplus)
    #if __cplusplus >= 201103L
        #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr)
    #elif defined(NULL)
        #define JSON_HEDLEY_NULL NULL
    #else
        #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0)
    #endif
#elif defined(NULL)
    #define JSON_HEDLEY_NULL NULL
#else
    #define JSON_HEDLEY_NULL ((void*) 0)
#endif

#if defined(JSON_HEDLEY_MESSAGE)
    #undef JSON_HEDLEY_MESSAGE
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
#  define JSON_HEDLEY_MESSAGE(msg) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
    JSON_HEDLEY_PRAGMA(message msg) \
    JSON_HEDLEY_DIAGNOSTIC_POP
#elif \
  JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg)
#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0)
#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg)
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0)
#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0)
#  define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg))
#else
#  define JSON_HEDLEY_MESSAGE(msg)
#endif

#if defined(JSON_HEDLEY_WARNING)
    #undef JSON_HEDLEY_WARNING
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
#  define JSON_HEDLEY_WARNING(msg) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
    JSON_HEDLEY_PRAGMA(clang warning msg) \
    JSON_HEDLEY_DIAGNOSTIC_POP
#elif \
  JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \
  JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \
  JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0)
#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg)
#elif \
  JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \
  JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg))
#else
#  define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg)
#endif

#if defined(JSON_HEDLEY_REQUIRE)
    #undef JSON_HEDLEY_REQUIRE
#endif
#if defined(JSON_HEDLEY_REQUIRE_MSG)
    #undef JSON_HEDLEY_REQUIRE_MSG
#endif
#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if)
#  if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat")
#    define JSON_HEDLEY_REQUIRE(expr) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
    __attribute__((diagnose_if(!(expr), #expr, "error"))) \
    JSON_HEDLEY_DIAGNOSTIC_POP
#    define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \
    JSON_HEDLEY_DIAGNOSTIC_PUSH \
    _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
    __attribute__((diagnose_if(!(expr), msg, "error"))) \
    JSON_HEDLEY_DIAGNOSTIC_POP
#  else
#    define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error")))
#    define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error")))
#  endif
#else
#  define JSON_HEDLEY_REQUIRE(expr)
#  define JSON_HEDLEY_REQUIRE_MSG(expr,msg)
#endif

#if defined(JSON_HEDLEY_FLAGS)
    #undef JSON_HEDLEY_FLAGS
#endif
#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion"))
    #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__))
#else
    #define JSON_HEDLEY_FLAGS
#endif

#if defined(JSON_HEDLEY_FLAGS_CAST)
    #undef JSON_HEDLEY_FLAGS_CAST
#endif
#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0)
#  define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \
        JSON_HEDLEY_DIAGNOSTIC_PUSH \
        _Pragma("warning(disable:188)") \
        ((T) (expr)); \
        JSON_HEDLEY_DIAGNOSTIC_POP \
    }))
#else
#  define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr)
#endif

#if defined(JSON_HEDLEY_EMPTY_BASES)
    #undef JSON_HEDLEY_EMPTY_BASES
#endif
#if \
    (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \
    JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0)
    #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases)
#else
    #define JSON_HEDLEY_EMPTY_BASES
#endif

/* Remaining macros are deprecated. */

#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK)
    #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK
#endif
#if defined(__clang__)
    #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0)
#else
    #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch)
#endif

#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE)
    #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE
#endif
#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute)

#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE)
    #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE
#endif
#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute)

#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN)
    #undef JSON_HEDLEY_CLANG_HAS_BUILTIN
#endif
#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin)

#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE)
    #undef JSON_HEDLEY_CLANG_HAS_FEATURE
#endif
#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature)

#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION)
    #undef JSON_HEDLEY_CLANG_HAS_EXTENSION
#endif
#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension)

#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE)
    #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE
#endif
#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute)

#if defined(JSON_HEDLEY_CLANG_HAS_WARNING)
    #undef JSON_HEDLEY_CLANG_HAS_WARNING
#endif
#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning)

#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */


// This file contains all internal macro definitions (except those affecting ABI)
// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them

// #include <nlohmann/detail/abi_macros.hpp>


// exclude unsupported compilers
#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK)
    #if defined(__clang__)
        #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400
            #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers"
        #endif
    #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER))
        #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800
            #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers"
        #endif
    #endif
#endif

// C++ language standard detection
// if the user manually specified the used c++ version this is skipped
#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11)
    #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L)
        #define JSON_HAS_CPP_20
        #define JSON_HAS_CPP_17
        #define JSON_HAS_CPP_14
    #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464
        #define JSON_HAS_CPP_17
        #define JSON_HAS_CPP_14
    #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1)
        #define JSON_HAS_CPP_14
    #endif
    // the cpp 11 flag is always specified because it is the minimal required version
    #define JSON_HAS_CPP_11
#endif

#ifdef __has_include
    #if __has_include(<version>)
        #include <version>
    #endif
#endif

#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM)
    #ifdef JSON_HAS_CPP_17
        #if defined(__cpp_lib_filesystem)
            #define JSON_HAS_FILESYSTEM 1
        #elif defined(__cpp_lib_experimental_filesystem)
            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
        #elif !defined(__has_include)
            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
        #elif __has_include(<filesystem>)
            #define JSON_HAS_FILESYSTEM 1
        #elif __has_include(<experimental/filesystem>)
            #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1
        #endif

        // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/
        #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8
            #undef JSON_HAS_FILESYSTEM
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
        #endif

        // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support
        #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8
            #undef JSON_HAS_FILESYSTEM
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
        #endif

        // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support
        #if defined(__clang_major__) && __clang_major__ < 7
            #undef JSON_HAS_FILESYSTEM
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
        #endif

        // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support
        #if defined(_MSC_VER) && _MSC_VER < 1914
            #undef JSON_HAS_FILESYSTEM
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
        #endif

        // no filesystem support before iOS 13
        #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
            #undef JSON_HAS_FILESYSTEM
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
        #endif

        // no filesystem support before macOS Catalina
        #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500
            #undef JSON_HAS_FILESYSTEM
            #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM
        #endif
    #endif
#endif

#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM
    #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0
#endif

#ifndef JSON_HAS_FILESYSTEM
    #define JSON_HAS_FILESYSTEM 0
#endif

#ifndef JSON_HAS_THREE_WAY_COMPARISON
    #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \
        && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L
        #define JSON_HAS_THREE_WAY_COMPARISON 1
    #else
        #define JSON_HAS_THREE_WAY_COMPARISON 0
    #endif
#endif

#ifndef JSON_HAS_RANGES
    // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error
    #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427
        #define JSON_HAS_RANGES 0
    #elif defined(__cpp_lib_ranges)
        #define JSON_HAS_RANGES 1
    #else
        #define JSON_HAS_RANGES 0
    #endif
#endif

#ifndef JSON_HAS_STATIC_RTTI
    #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0
        #define JSON_HAS_STATIC_RTTI 1
    #else
        #define JSON_HAS_STATIC_RTTI 0
    #endif
#endif

#ifdef JSON_HAS_CPP_17
    #define JSON_INLINE_VARIABLE inline
#else
    #define JSON_INLINE_VARIABLE
#endif

#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address)
    #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]]
#else
    #define JSON_NO_UNIQUE_ADDRESS
#endif

// disable documentation warnings on clang
#if defined(__clang__)
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdocumentation"
    #pragma clang diagnostic ignored "-Wdocumentation-unknown-command"
#endif

// allow disabling exceptions
#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION)
    #define JSON_THROW(exception) throw exception
    #define JSON_TRY try
    #define JSON_CATCH(exception) catch(exception)
    #define JSON_INTERNAL_CATCH(exception) catch(exception)
#else
    #include <cstdlib>
    #define JSON_THROW(exception) std::abort()
    #define JSON_TRY if(true)
    #define JSON_CATCH(exception) if(false)
    #define JSON_INTERNAL_CATCH(exception) if(false)
#endif

// override exception macros
#if defined(JSON_THROW_USER)
    #undef JSON_THROW
    #define JSON_THROW JSON_THROW_USER
#endif
#if defined(JSON_TRY_USER)
    #undef JSON_TRY
    #define JSON_TRY JSON_TRY_USER
#endif
#if defined(JSON_CATCH_USER)
    #undef JSON_CATCH
    #define JSON_CATCH JSON_CATCH_USER
    #undef JSON_INTERNAL_CATCH
    #define JSON_INTERNAL_CATCH JSON_CATCH_USER
#endif
#if defined(JSON_INTERNAL_CATCH_USER)
    #undef JSON_INTERNAL_CATCH
    #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER
#endif

// allow overriding assert
#if !defined(JSON_ASSERT)
    #include <cassert> // assert
    #define JSON_ASSERT(x) assert(x)
#endif

// allow to access some private functions (needed by the test suite)
#if defined(JSON_TESTS_PRIVATE)
    #define JSON_PRIVATE_UNLESS_TESTED public
#else
    #define JSON_PRIVATE_UNLESS_TESTED private
#endif

/*!
@brief macro to briefly define a mapping between an enum and JSON
@def NLOHMANN_JSON_SERIALIZE_ENUM
@since version 3.4.0
*/
#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...)                                            \
    template<typename BasicJsonType>                                                            \
    inline void to_json(BasicJsonType& j, const ENUM_TYPE& e)                                   \
    {                                                                                           \
        /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */                                \
        static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");          \
        /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on <array> */       \
        static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                     \
        auto it = std::find_if(std::begin(m), std::end(m),                                      \
                               [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool  \
        {                                                                                       \
            return ej_pair.first == e;                                                          \
        });                                                                                     \
        j = ((it != std::end(m)) ? it : std::begin(m))->second;                                 \
    }                                                                                           \
    template<typename BasicJsonType>                                                            \
    inline void from_json(const BasicJsonType& j, ENUM_TYPE& e)                                 \
    {                                                                                           \
        /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */                                \
        static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!");          \
        /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on <array> */       \
        static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__;                     \
        auto it = std::find_if(std::begin(m), std::end(m),                                      \
                               [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool \
        {                                                                                       \
            return ej_pair.second == j;                                                         \
        });                                                                                     \
        e = ((it != std::end(m)) ? it : std::begin(m))->first;                                  \
    }

// Ugly macros to avoid uglier copy-paste when specializing basic_json. They
// may be removed in the future once the class is split.

#define NLOHMANN_BASIC_JSON_TPL_DECLARATION                                \
    template<template<typename, typename, typename...> class ObjectType,   \
             template<typename, typename...> class ArrayType,              \
             class StringType, class BooleanType, class NumberIntegerType, \
             class NumberUnsignedType, class NumberFloatType,              \
             template<typename> class AllocatorType,                       \
             template<typename, typename = void> class JSONSerializer,     \
             class BinaryType,                                             \
             class CustomBaseClass>

#define NLOHMANN_BASIC_JSON_TPL                                            \
    basic_json<ObjectType, ArrayType, StringType, BooleanType,             \
    NumberIntegerType, NumberUnsignedType, NumberFloatType,                \
    AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>

// Macros to simplify conversion from/to types

#define NLOHMANN_JSON_EXPAND( x ) x
#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME
#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \
        NLOHMANN_JSON_PASTE64, \
        NLOHMANN_JSON_PASTE63, \
        NLOHMANN_JSON_PASTE62, \
        NLOHMANN_JSON_PASTE61, \
        NLOHMANN_JSON_PASTE60, \
        NLOHMANN_JSON_PASTE59, \
        NLOHMANN_JSON_PASTE58, \
        NLOHMANN_JSON_PASTE57, \
        NLOHMANN_JSON_PASTE56, \
        NLOHMANN_JSON_PASTE55, \
        NLOHMANN_JSON_PASTE54, \
        NLOHMANN_JSON_PASTE53, \
        NLOHMANN_JSON_PASTE52, \
        NLOHMANN_JSON_PASTE51, \
        NLOHMANN_JSON_PASTE50, \
        NLOHMANN_JSON_PASTE49, \
        NLOHMANN_JSON_PASTE48, \
        NLOHMANN_JSON_PASTE47, \
        NLOHMANN_JSON_PASTE46, \
        NLOHMANN_JSON_PASTE45, \
        NLOHMANN_JSON_PASTE44, \
        NLOHMANN_JSON_PASTE43, \
        NLOHMANN_JSON_PASTE42, \
        NLOHMANN_JSON_PASTE41, \
        NLOHMANN_JSON_PASTE40, \
        NLOHMANN_JSON_PASTE39, \
        NLOHMANN_JSON_PASTE38, \
        NLOHMANN_JSON_PASTE37, \
        NLOHMANN_JSON_PASTE36, \
        NLOHMANN_JSON_PASTE35, \
        NLOHMANN_JSON_PASTE34, \
        NLOHMANN_JSON_PASTE33, \
        NLOHMANN_JSON_PASTE32, \
        NLOHMANN_JSON_PASTE31, \
        NLOHMANN_JSON_PASTE30, \
        NLOHMANN_JSON_PASTE29, \
        NLOHMANN_JSON_PASTE28, \
        NLOHMANN_JSON_PASTE27, \
        NLOHMANN_JSON_PASTE26, \
        NLOHMANN_JSON_PASTE25, \
        NLOHMANN_JSON_PASTE24, \
        NLOHMANN_JSON_PASTE23, \
        NLOHMANN_JSON_PASTE22, \
        NLOHMANN_JSON_PASTE21, \
        NLOHMANN_JSON_PASTE20, \
        NLOHMANN_JSON_PASTE19, \
        NLOHMANN_JSON_PASTE18, \
        NLOHMANN_JSON_PASTE17, \
        NLOHMANN_JSON_PASTE16, \
        NLOHMANN_JSON_PASTE15, \
        NLOHMANN_JSON_PASTE14, \
        NLOHMANN_JSON_PASTE13, \
        NLOHMANN_JSON_PASTE12, \
        NLOHMANN_JSON_PASTE11, \
        NLOHMANN_JSON_PASTE10, \
        NLOHMANN_JSON_PASTE9, \
        NLOHMANN_JSON_PASTE8, \
        NLOHMANN_JSON_PASTE7, \
        NLOHMANN_JSON_PASTE6, \
        NLOHMANN_JSON_PASTE5, \
        NLOHMANN_JSON_PASTE4, \
        NLOHMANN_JSON_PASTE3, \
        NLOHMANN_JSON_PASTE2, \
        NLOHMANN_JSON_PASTE1)(__VA_ARGS__))
#define NLOHMANN_JSON_PASTE2(func, v1) func(v1)
#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2)
#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3)
#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4)
#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5)
#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6)
#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7)
#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8)
#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)
#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)
#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23)
#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24)
#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25)
#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26)
#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27)
#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)
#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29)
#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30)
#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31)
#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32)
#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33)
#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34)
#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35)
#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36)
#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37)
#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38)
#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39)
#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40)
#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41)
#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42)
#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43)
#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44)
#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45)
#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46)
#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47)
#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48)
#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49)
#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50)
#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51)
#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52)
#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53)
#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54)
#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55)
#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56)
#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57)
#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58)
#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59)
#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60)
#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61)
#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62)
#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63)

#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1;
#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1);
#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1;

/*!
@brief macro
@def NLOHMANN_DEFINE_TYPE_INTRUSIVE
@since version 3.9.0
@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/
*/
#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT
@since version 3.11.0
@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/
*/
#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE
@since version 3.11.3
@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/
*/
#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
@since version 3.9.0
@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/
*/
#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT
@since version 3.11.0
@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/
*/
#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
@since version 3.11.3
@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/
*/
#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE
@since version 3.11.x
@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/
*/
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<BaseType&>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT
@since version 3.11.x
@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/
*/
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType&>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<BaseType&>(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE
@since version 3.11.x
@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/
*/
#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE
@since version 3.11.x
@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/
*/
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<BaseType&>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT
@since version 3.11.x
@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/
*/
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast<BaseType&>(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) }

/*!
@brief macro
@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE
@since version 3.11.x
@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/
*/
#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...)  \
    template<typename BasicJsonType, nlohmann::detail::enable_if_t<nlohmann::detail::is_basic_json<BasicJsonType>::value, int> = 0> \
    void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast<const BaseType &>(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) }

// inspired from https://stackoverflow.com/a/26745591
// allows to call any std function as if (e.g. with begin):
// using std::begin; begin(x);
//
// it allows using the detected idiom to retrieve the return type
// of such an expression
#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name)                                 \
    namespace detail {                                                            \
    using std::std_name;                                                          \
    \
    template<typename... T>                                                       \
    using result_of_##std_name = decltype(std_name(std::declval<T>()...));        \
    }                                                                             \
    \
    namespace detail2 {                                                           \
    struct std_name##_tag                                                         \
    {                                                                             \
    };                                                                            \
    \
    template<typename... T>                                                       \
    std_name##_tag std_name(T&&...);                                              \
    \
    template<typename... T>                                                       \
    using result_of_##std_name = decltype(std_name(std::declval<T>()...));        \
    \
    template<typename... T>                                                       \
    struct would_call_std_##std_name                                              \
    {                                                                             \
        static constexpr auto const value = ::nlohmann::detail::                  \
                                            is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
    };                                                                            \
    } /* namespace detail2 */ \
    \
    template<typename... T>                                                       \
    struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...>   \
    {                                                                             \
    }

#ifndef JSON_USE_IMPLICIT_CONVERSIONS
    #define JSON_USE_IMPLICIT_CONVERSIONS 1
#endif

#if JSON_USE_IMPLICIT_CONVERSIONS
    #define JSON_EXPLICIT
#else
    #define JSON_EXPLICIT explicit
#endif

#ifndef JSON_DISABLE_ENUM_SERIALIZATION
    #define JSON_DISABLE_ENUM_SERIALIZATION 0
#endif

#ifndef JSON_USE_GLOBAL_UDLS
    #define JSON_USE_GLOBAL_UDLS 1
#endif

#if JSON_HAS_THREE_WAY_COMPARISON
    #include <compare> // partial_ordering
#endif

NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{

///////////////////////////
// JSON type enumeration //
///////////////////////////

/*!
@brief the JSON type enumeration

This enumeration collects the different JSON types. It is internally used to
distinguish the stored values, and the functions @ref basic_json::is_null(),
@ref basic_json::is_object(), @ref basic_json::is_array(),
@ref basic_json::is_string(), @ref basic_json::is_boolean(),
@ref basic_json::is_number() (with @ref basic_json::is_number_integer(),
@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()),
@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and
@ref basic_json::is_structured() rely on it.

@note There are three enumeration entries (number_integer, number_unsigned, and
number_float), because the library distinguishes these three types for numbers:
@ref basic_json::number_unsigned_t is used for unsigned integers,
@ref basic_json::number_integer_t is used for signed integers, and
@ref basic_json::number_float_t is used for floating-point numbers or to
approximate integers which do not fit in the limits of their respective type.

@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON
value with the default value for a given type

@since version 1.0.0
*/
enum class value_t : std::uint8_t
{
    null,             ///< null value
    object,           ///< object (unordered set of name/value pairs)
    array,            ///< array (ordered collection of values)
    string,           ///< string value
    boolean,          ///< boolean value
    number_integer,   ///< number value (signed integer)
    number_unsigned,  ///< number value (unsigned integer)
    number_float,     ///< number value (floating-point)
    binary,           ///< binary array (ordered collection of bytes)
    discarded         ///< discarded by the parser callback function
};

/*!
@brief comparison operator for JSON types

Returns an ordering that is similar to Python:
- order: null < boolean < number < object < array < string < binary
- furthermore, each type is not smaller than itself
- discarded values are not comparable
- binary is represented as a b"" string in python and directly comparable to a
  string; however, making a binary array directly comparable with a string would
  be surprising behavior in a JSON file.

@since version 1.0.0
*/
#if JSON_HAS_THREE_WAY_COMPARISON
    inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD*
#else
    inline bool operator<(const value_t lhs, const value_t rhs) noexcept
#endif
{
    static constexpr std::array<std::uint8_t, 9> order = {{
            0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */,
            1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */,
            6 /* binary */
        }
    };

    const auto l_index = static_cast<std::size_t>(lhs);
    const auto r_index = static_cast<std::size_t>(rhs);
#if JSON_HAS_THREE_WAY_COMPARISON
    if (l_index < order.size() && r_index < order.size())
    {
        return order[l_index] <=> order[r_index]; // *NOPAD*
    }
    return std::partial_ordering::unordered;
#else
    return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index];
#endif
}

// GCC selects the built-in operator< over an operator rewritten from
// a user-defined spaceship operator
// Clang, MSVC, and ICC select the rewritten candidate
// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200)
#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__)
inline bool operator<(const value_t lhs, const value_t rhs) noexcept
{
    return std::is_lt(lhs <=> rhs); // *NOPAD*
}
#endif

}  // namespace detail
NLOHMANN_JSON_NAMESPACE_END

// #include <nlohmann/detail/string_escape.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



// #include <nlohmann/detail/abi_macros.hpp>


NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{

/*!
@brief replace all occurrences of a substring by another string

@param[in,out] s  the string to manipulate; changed so that all
               occurrences of @a f are replaced with @a t
@param[in]     f  the substring to replace with @a t
@param[in]     t  the string to replace @a f

@pre The search string @a f must not be empty. **This precondition is
enforced with an assertion.**

@since version 2.0.0
*/
template<typename StringType>
inline void replace_substring(StringType& s, const StringType& f,
                              const StringType& t)
{
    JSON_ASSERT(!f.empty());
    for (auto pos = s.find(f);                // find first occurrence of f
            pos != StringType::npos;          // make sure f was found
            s.replace(pos, f.size(), t),      // replace with t, and
            pos = s.find(f, pos + t.size()))  // find next occurrence of f
    {}
}

/*!
 * @brief string escaping as described in RFC 6901 (Sect. 4)
 * @param[in] s string to escape
 * @return    escaped string
 *
 * Note the order of escaping "~" to "~0" and "/" to "~1" is important.
 */
template<typename StringType>
inline StringType escape(StringType s)
{
    replace_substring(s, StringType{"~"}, StringType{"~0"});
    replace_substring(s, StringType{"/"}, StringType{"~1"});
    return s;
}

/*!
 * @brief string unescaping as described in RFC 6901 (Sect. 4)
 * @param[in] s string to unescape
 * @return    unescaped string
 *
 * Note the order of escaping "~1" to "/" and "~0" to "~" is important.
 */
template<typename StringType>
static void unescape(StringType& s)
{
    replace_substring(s, StringType{"~1"}, StringType{"/"});
    replace_substring(s, StringType{"~0"}, StringType{"~"});
}

}  // namespace detail
NLOHMANN_JSON_NAMESPACE_END

// #include <nlohmann/detail/input/position_t.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <cstddef> // size_t

// #include <nlohmann/detail/abi_macros.hpp>


NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{

/// struct to capture the start position of the current token
struct position_t
{
    /// the total number of characters read
    std::size_t chars_read_total = 0;
    /// the number of characters read in the current line
    std::size_t chars_read_current_line = 0;
    /// the number of lines read
    std::size_t lines_read = 0;

    /// conversion to size_t to preserve SAX interface
    constexpr operator size_t() const
    {
        return chars_read_total;
    }
};

}  // namespace detail
NLOHMANN_JSON_NAMESPACE_END

// #include <nlohmann/detail/macro_scope.hpp>

// #include <nlohmann/detail/meta/cpp_future.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-FileCopyrightText: 2018 The Abseil Authors
// SPDX-License-Identifier: MIT



#include <array> // array
#include <cstddef> // size_t
#include <type_traits> // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type
#include <utility> // index_sequence, make_index_sequence, index_sequence_for

// #include <nlohmann/detail/macro_scope.hpp>


NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{

template<typename T>
using uncvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;

#ifdef JSON_HAS_CPP_14

// the following utilities are natively available in C++14
using std::enable_if_t;
using std::index_sequence;
using std::make_index_sequence;
using std::index_sequence_for;

#else

// alias templates to reduce boilerplate
template<bool B, typename T = void>
using enable_if_t = typename std::enable_if<B, T>::type;

// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h
// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0.

//// START OF CODE FROM GOOGLE ABSEIL

// integer_sequence
//
// Class template representing a compile-time integer sequence. An instantiation
// of `integer_sequence<T, Ints...>` has a sequence of integers encoded in its
// type through its template arguments (which is a common need when
// working with C++11 variadic templates). `absl::integer_sequence` is designed
// to be a drop-in replacement for C++14's `std::integer_sequence`.
//
// Example:
//
//   template< class T, T... Ints >
//   void user_function(integer_sequence<T, Ints...>);
//
//   int main()
//   {
//     // user_function's `T` will be deduced to `int` and `Ints...`
//     // will be deduced to `0, 1, 2, 3, 4`.
//     user_function(make_integer_sequence<int, 5>());
//   }
template <typename T, T... Ints>
struct integer_sequence
{
    using value_type = T;
    static constexpr std::size_t size() noexcept
    {
        return sizeof...(Ints);
    }
};

// index_sequence
//
// A helper template for an `integer_sequence` of `size_t`,
// `absl::index_sequence` is designed to be a drop-in replacement for C++14's
// `std::index_sequence`.
template <size_t... Ints>
using index_sequence = integer_sequence<size_t, Ints...>;

namespace utility_internal
{

template <typename Seq, size_t SeqSize, size_t Rem>
struct Extend;

// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency.
template <typename T, T... Ints, size_t SeqSize>
struct Extend<integer_sequence<T, Ints...>, SeqSize, 0>
{
    using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >;
};

template <typename T, T... Ints, size_t SeqSize>
struct Extend<integer_sequence<T, Ints...>, SeqSize, 1>
{
    using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >;
};

// Recursion helper for 'make_integer_sequence<T, N>'.
// 'Gen<T, N>::type' is an alias for 'integer_sequence<T, 0, 1, ... N-1>'.
template <typename T, size_t N>
struct Gen
{
    using type =
        typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type;
};

template <typename T>
struct Gen<T, 0>
{
    using type = integer_sequence<T>;
};

}  // namespace utility_internal

// Compile-time sequences of integers

// make_integer_sequence
//
// This template alias is equivalent to
// `integer_sequence<int, 0, 1, ..., N-1>`, and is designed to be a drop-in
// replacement for C++14's `std::make_integer_sequence`.
template <typename T, T N>
using make_integer_sequence = typename utility_internal::Gen<T, N>::type;

// make_index_sequence
//
// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`,
// and is designed to be a drop-in replacement for C++14's
// `std::make_index_sequence`.
template <size_t N>
using make_index_sequence = make_integer_sequence<size_t, N>;

// index_sequence_for
//
// Converts a typename pack into an index sequence of the same length, and
// is designed to be a drop-in replacement for C++14's
// `std::index_sequence_for()`
template <typename... Ts>
using index_sequence_for = make_index_sequence<sizeof...(Ts)>;

//// END OF CODE FROM GOOGLE ABSEIL

#endif

// dispatch utility (taken from ranges-v3)
template<unsigned N> struct priority_tag : priority_tag < N - 1 > {};
template<> struct priority_tag<0> {};

// taken from ranges-v3
template<typename T>
struct static_const
{
    static JSON_INLINE_VARIABLE constexpr T value{};
};

#ifndef JSON_HAS_CPP_17
    template<typename T>
    constexpr T static_const<T>::value;
#endif

template<typename T, typename... Args>
constexpr std::array<T, sizeof...(Args)> make_array(Args&& ... args)
{
    return std::array<T, sizeof...(Args)> {{static_cast<T>(std::forward<Args>(args))...}};
}

}  // namespace detail
NLOHMANN_JSON_NAMESPACE_END

// #include <nlohmann/detail/meta/type_traits.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <limits> // numeric_limits
#include <string> // char_traits
#include <tuple> // tuple
#include <type_traits> // false_type, is_constructible, is_integral, is_same, true_type
#include <utility> // declval

// #include <nlohmann/detail/iterators/iterator_traits.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



#include <iterator> // random_access_iterator_tag

// #include <nlohmann/detail/abi_macros.hpp>

// #include <nlohmann/detail/meta/void_t.hpp>

// #include <nlohmann/detail/meta/cpp_future.hpp>


NLOHMANN_JSON_NAMESPACE_BEGIN
namespace detail
{

template<typename It, typename = void>
struct iterator_types {};

template<typename It>
struct iterator_types <
    It,
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
    typename It::reference, typename It::iterator_category >>
{
    using difference_type = typename It::difference_type;
    using value_type = typename It::value_type;
    using pointer = typename It::pointer;
    using reference = typename It::reference;
    using iterator_category = typename It::iterator_category;
};

// This is required as some compilers implement std::iterator_traits in a way that
// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341.
template<typename T, typename = void>
struct iterator_traits
{
};

template<typename T>
struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
    : iterator_types<T>
{
};

template<typename T>
struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
{
    using iterator_category = std::random_access_iterator_tag;
    using value_type = T;
    using difference_type = ptrdiff_t;
    using pointer = T*;
    using reference = T&;
};

}  // namespace detail
NLOHMANN_JSON_NAMESPACE_END

// #include <nlohmann/detail/macro_scope.hpp>

// #include <nlohmann/detail/meta/call_std/begin.hpp>
//     __ _____ _____ _____
//  __|  |   __|     |   | |  JSON for Modern C++
// |  |  |__   |  |  | | | |  version 3.11.3
// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT



// #include <nlohmann/detail/macro_scope.hpp>


NLOHMANN_JSON_NAMESPACE_BEGIN

NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin);

NLOHMANN_JSON_NAMESPACE_END

// #include <nlohmann/detail/meta/call_std/end.hpp>
//     __ _____ _____ _____
// 
Download .txt
gitextract_ysn28l70/

├── CNAME
├── README.md
├── control_center/
│   ├── Makefile
│   ├── cfg.h
│   ├── control_center.cpp
│   ├── http.cpp
│   ├── http.h
│   ├── ipc_udp.cpp
│   ├── ipc_udp.h
│   ├── json.hpp
│   ├── uuid.cpp
│   ├── uuid.h
│   ├── websocket_client.cpp
│   └── websocket_client.h
├── gui/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── Makefile
│   ├── README.md
│   ├── bin/
│   │   ├── lvgl_xiaozhi
│   │   └── main
│   ├── build.sh
│   ├── lv_100ask_xz_ai/
│   │   ├── CMakeLists.txt
│   │   ├── library.properties
│   │   ├── lv_100ask_xz_ai.h
│   │   ├── lv_100ask_xz_ai.mk
│   │   └── src/
│   │       ├── cJSON.c
│   │       ├── cJSON.h
│   │       ├── cfg.h
│   │       ├── ipc_udp.c
│   │       ├── ipc_udp.h
│   │       ├── lang_config.h
│   │       ├── lv_100ask_xz_ai_main.c
│   │       ├── lv_100ask_xz_ai_main.h
│   │       ├── ui_system.c
│   │       └── ui_system.h
│   ├── lv_100ask_xz_ai_conf.h
│   ├── lv_conf.defaults
│   ├── lv_conf.h
│   ├── lvgl/
│   │   ├── .devcontainer/
│   │   │   ├── __CMakeLists.txt__
│   │   │   ├── __build_all.sh__
│   │   │   ├── __c_cpp_properties.json__
│   │   │   ├── __lv_conf.h__
│   │   │   ├── __main.c__
│   │   │   ├── __settings.json__
│   │   │   ├── devcontainer.json
│   │   │   ├── lvgl_shell.html
│   │   │   └── setup.sh
│   │   ├── .gitignore
│   │   ├── .pre-commit-config.yaml
│   │   ├── .typos.toml
│   │   ├── CMakeLists.txt
│   │   ├── CMakePresets.json
│   │   ├── Kconfig
│   │   ├── LICENCE.txt
│   │   ├── README.md
│   │   ├── SConscript
│   │   ├── component.mk
│   │   ├── demos/
│   │   │   ├── README.md
│   │   │   ├── benchmark/
│   │   │   │   ├── assets/
│   │   │   │   │   ├── img_benchmark_avatar.c
│   │   │   │   │   ├── img_benchmark_cogwheel_alpha256.c
│   │   │   │   │   ├── img_benchmark_cogwheel_argb.c
│   │   │   │   │   ├── img_benchmark_cogwheel_indexed16.c
│   │   │   │   │   ├── img_benchmark_cogwheel_rgb.c
│   │   │   │   │   ├── lv_font_benchmark_montserrat_12_compr_az.c.c
│   │   │   │   │   ├── lv_font_benchmark_montserrat_16_compr_az.c.c
│   │   │   │   │   └── lv_font_benchmark_montserrat_28_compr_az.c.c
│   │   │   │   ├── lv_demo_benchmark.c
│   │   │   │   └── lv_demo_benchmark.h
│   │   │   ├── flex_layout/
│   │   │   │   ├── lv_demo_flex_layout.h
│   │   │   │   ├── lv_demo_flex_layout_ctrl_pad.c
│   │   │   │   ├── lv_demo_flex_layout_flex_loader.c
│   │   │   │   ├── lv_demo_flex_layout_main.c
│   │   │   │   ├── lv_demo_flex_layout_main.h
│   │   │   │   ├── lv_demo_flex_layout_view.c
│   │   │   │   ├── lv_demo_flex_layout_view_child_node.c
│   │   │   │   └── lv_demo_flex_layout_view_ctrl_pad.c
│   │   │   ├── keypad_encoder/
│   │   │   │   ├── README.md
│   │   │   │   ├── lv_demo_keypad_encoder.c
│   │   │   │   └── lv_demo_keypad_encoder.h
│   │   │   ├── lv_demos.c
│   │   │   ├── lv_demos.h
│   │   │   ├── multilang/
│   │   │   │   ├── assets/
│   │   │   │   │   ├── avatars/
│   │   │   │   │   │   ├── img_multilang_avatar_1.c
│   │   │   │   │   │   ├── img_multilang_avatar_10.c
│   │   │   │   │   │   ├── img_multilang_avatar_11.c
│   │   │   │   │   │   ├── img_multilang_avatar_12.c
│   │   │   │   │   │   ├── img_multilang_avatar_13.c
│   │   │   │   │   │   ├── img_multilang_avatar_14.c
│   │   │   │   │   │   ├── img_multilang_avatar_15.c
│   │   │   │   │   │   ├── img_multilang_avatar_16.c
│   │   │   │   │   │   ├── img_multilang_avatar_17.c
│   │   │   │   │   │   ├── img_multilang_avatar_18.c
│   │   │   │   │   │   ├── img_multilang_avatar_19.c
│   │   │   │   │   │   ├── img_multilang_avatar_2.c
│   │   │   │   │   │   ├── img_multilang_avatar_22.c
│   │   │   │   │   │   ├── img_multilang_avatar_25.c
│   │   │   │   │   │   ├── img_multilang_avatar_3.c
│   │   │   │   │   │   ├── img_multilang_avatar_4.c
│   │   │   │   │   │   ├── img_multilang_avatar_5.c
│   │   │   │   │   │   ├── img_multilang_avatar_6.c
│   │   │   │   │   │   ├── img_multilang_avatar_7.c
│   │   │   │   │   │   ├── img_multilang_avatar_8.c
│   │   │   │   │   │   └── img_multilang_avatar_9.c
│   │   │   │   │   ├── emojis/
│   │   │   │   │   │   ├── img_emoji_artist_palette.c
│   │   │   │   │   │   ├── img_emoji_books.c
│   │   │   │   │   │   ├── img_emoji_camera_with_flash.c
│   │   │   │   │   │   ├── img_emoji_cat_face.c
│   │   │   │   │   │   ├── img_emoji_deciduous_tree.c
│   │   │   │   │   │   ├── img_emoji_dog_face.c
│   │   │   │   │   │   ├── img_emoji_earth_globe_europe_africa.c
│   │   │   │   │   │   ├── img_emoji_flexed_biceps.c
│   │   │   │   │   │   ├── img_emoji_movie_camera.c
│   │   │   │   │   │   ├── img_emoji_red_heart.c
│   │   │   │   │   │   ├── img_emoji_rocket.c
│   │   │   │   │   │   └── img_emoji_soccer_ball.c
│   │   │   │   │   ├── fonts/
│   │   │   │   │   │   ├── NotoSansSC-Medium.otf
│   │   │   │   │   │   ├── font2c.py
│   │   │   │   │   │   ├── font_multilang_large.c
│   │   │   │   │   │   └── font_multilang_small.c
│   │   │   │   │   ├── img2c.py
│   │   │   │   │   └── img_multilang_like.c
│   │   │   │   ├── img2c.py
│   │   │   │   ├── lv_demo_multilang.c
│   │   │   │   └── lv_demo_multilang.h
│   │   │   ├── music/
│   │   │   │   ├── README.md
│   │   │   │   ├── assets/
│   │   │   │   │   ├── img_lv_demo_music_btn_corner_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_list_pause.c
│   │   │   │   │   ├── img_lv_demo_music_btn_list_pause_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_list_play.c
│   │   │   │   │   ├── img_lv_demo_music_btn_list_play_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_loop.c
│   │   │   │   │   ├── img_lv_demo_music_btn_loop_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_next.c
│   │   │   │   │   ├── img_lv_demo_music_btn_next_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_pause.c
│   │   │   │   │   ├── img_lv_demo_music_btn_pause_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_play.c
│   │   │   │   │   ├── img_lv_demo_music_btn_play_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_prev.c
│   │   │   │   │   ├── img_lv_demo_music_btn_prev_large.c
│   │   │   │   │   ├── img_lv_demo_music_btn_rnd.c
│   │   │   │   │   ├── img_lv_demo_music_btn_rnd_large.c
│   │   │   │   │   ├── img_lv_demo_music_corner_left.c
│   │   │   │   │   ├── img_lv_demo_music_corner_left_large.c
│   │   │   │   │   ├── img_lv_demo_music_corner_right.c
│   │   │   │   │   ├── img_lv_demo_music_corner_right_large.c
│   │   │   │   │   ├── img_lv_demo_music_cover_1.c
│   │   │   │   │   ├── img_lv_demo_music_cover_1_large.c
│   │   │   │   │   ├── img_lv_demo_music_cover_2.c
│   │   │   │   │   ├── img_lv_demo_music_cover_2_large.c
│   │   │   │   │   ├── img_lv_demo_music_cover_3.c
│   │   │   │   │   ├── img_lv_demo_music_cover_3_large.c
│   │   │   │   │   ├── img_lv_demo_music_icon_1.c
│   │   │   │   │   ├── img_lv_demo_music_icon_1_large.c
│   │   │   │   │   ├── img_lv_demo_music_icon_2.c
│   │   │   │   │   ├── img_lv_demo_music_icon_2_large.c
│   │   │   │   │   ├── img_lv_demo_music_icon_3.c
│   │   │   │   │   ├── img_lv_demo_music_icon_3_large.c
│   │   │   │   │   ├── img_lv_demo_music_icon_4.c
│   │   │   │   │   ├── img_lv_demo_music_icon_4_large.c
│   │   │   │   │   ├── img_lv_demo_music_list_border.c
│   │   │   │   │   ├── img_lv_demo_music_list_border_large.c
│   │   │   │   │   ├── img_lv_demo_music_logo.c
│   │   │   │   │   ├── img_lv_demo_music_slider_knob.c
│   │   │   │   │   ├── img_lv_demo_music_slider_knob_large.c
│   │   │   │   │   ├── img_lv_demo_music_wave_bottom.c
│   │   │   │   │   ├── img_lv_demo_music_wave_bottom_large.c
│   │   │   │   │   ├── img_lv_demo_music_wave_top.c
│   │   │   │   │   ├── img_lv_demo_music_wave_top_large.c
│   │   │   │   │   ├── spectrum.py
│   │   │   │   │   ├── spectrum_1.h
│   │   │   │   │   ├── spectrum_2.h
│   │   │   │   │   └── spectrum_3.h
│   │   │   │   ├── lv_demo_music.c
│   │   │   │   ├── lv_demo_music.h
│   │   │   │   ├── lv_demo_music_list.c
│   │   │   │   ├── lv_demo_music_list.h
│   │   │   │   ├── lv_demo_music_main.c
│   │   │   │   └── lv_demo_music_main.h
│   │   │   ├── render/
│   │   │   │   ├── assets/
│   │   │   │   │   ├── img_render_arc_bg.c
│   │   │   │   │   ├── img_render_lvgl_logo_argb8888.c
│   │   │   │   │   ├── img_render_lvgl_logo_i1.c
│   │   │   │   │   ├── img_render_lvgl_logo_l8.c
│   │   │   │   │   ├── img_render_lvgl_logo_rgb565.c
│   │   │   │   │   ├── img_render_lvgl_logo_rgb888.c
│   │   │   │   │   └── img_render_lvgl_logo_xrgb8888.c
│   │   │   │   ├── lv_demo_render.c
│   │   │   │   └── lv_demo_render.h
│   │   │   ├── scroll/
│   │   │   │   ├── lv_demo_scroll.c
│   │   │   │   └── lv_demo_scroll.h
│   │   │   ├── stress/
│   │   │   │   ├── README.md
│   │   │   │   ├── lv_demo_stress.c
│   │   │   │   └── lv_demo_stress.h
│   │   │   ├── transform/
│   │   │   │   ├── assets/
│   │   │   │   │   └── img_transform_avatar_15.c
│   │   │   │   ├── img2c.py
│   │   │   │   ├── lv_demo_transform.c
│   │   │   │   └── lv_demo_transform.h
│   │   │   ├── vector_graphic/
│   │   │   │   ├── assets/
│   │   │   │   │   └── img_demo_vector_avatar.c
│   │   │   │   ├── lv_demo_vector_graphic.c
│   │   │   │   └── lv_demo_vector_graphic.h
│   │   │   └── widgets/
│   │   │       ├── assets/
│   │   │       │   ├── font/
│   │   │       │   │   ├── montserrat-12.fnt
│   │   │       │   │   ├── montserrat-14.fnt
│   │   │       │   │   ├── montserrat-16.fnt
│   │   │       │   │   ├── montserrat-18.fnt
│   │   │       │   │   ├── montserrat-20.fnt
│   │   │       │   │   └── montserrat-24.fnt
│   │   │       │   ├── img_clothes.c
│   │   │       │   ├── img_demo_widgets_avatar.c
│   │   │       │   ├── img_demo_widgets_needle.c
│   │   │       │   └── img_lvgl_logo.c
│   │   │       ├── lv_demo_widgets.c
│   │   │       ├── lv_demo_widgets.h
│   │   │       └── lv_demo_widgets.py
│   │   ├── docs/
│   │   │   ├── CHANGELOG.rst
│   │   │   ├── CODE_OF_CONDUCT.rst.back
│   │   │   ├── CODING_STYLE.rst
│   │   │   ├── CONTRIBUTING.rst
│   │   │   ├── Doxyfile
│   │   │   ├── README_jp.rst
│   │   │   ├── README_pt_BR.rst
│   │   │   ├── README_zh.rst
│   │   │   ├── ROADMAP.rst
│   │   │   ├── _ext/
│   │   │   │   ├── link_roles.py
│   │   │   │   └── lv_example.py
│   │   │   ├── _static/
│   │   │   │   ├── css/
│   │   │   │   │   └── custom.css
│   │   │   │   └── js/
│   │   │   │       ├── custom.js
│   │   │   │       └── include_html.js
│   │   │   ├── _templates/
│   │   │   │   ├── layout.html
│   │   │   │   └── page.html
│   │   │   ├── add_translation.py
│   │   │   ├── build.py
│   │   │   ├── conf.py
│   │   │   ├── config_builder.py
│   │   │   ├── doc_builder.py
│   │   │   ├── example_list.py
│   │   │   ├── get-started/
│   │   │   │   ├── index.rst
│   │   │   │   └── quick-overview.rst
│   │   │   ├── index.rst
│   │   │   ├── integration/
│   │   │   │   ├── bindings/
│   │   │   │   │   ├── api_json.rst
│   │   │   │   │   ├── cpp.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── javascript.rst
│   │   │   │   │   ├── micropython.rst
│   │   │   │   │   └── pikascript.rst
│   │   │   │   ├── building/
│   │   │   │   │   ├── cmake.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   └── make.rst
│   │   │   │   ├── chip/
│   │   │   │   │   ├── arm.rst
│   │   │   │   │   ├── espressif.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── nxp.rst
│   │   │   │   │   ├── renesas.rst
│   │   │   │   │   └── stm32.rst
│   │   │   │   ├── driver/
│   │   │   │   │   ├── X11.rst
│   │   │   │   │   ├── display/
│   │   │   │   │   │   ├── fbdev.rst
│   │   │   │   │   │   ├── gen_mipi.rst
│   │   │   │   │   │   ├── ili9341.rst
│   │   │   │   │   │   ├── index.rst
│   │   │   │   │   │   ├── lcd_stm32_guide.rst
│   │   │   │   │   │   ├── renesas_glcdc.rst
│   │   │   │   │   │   ├── st7735.rst
│   │   │   │   │   │   ├── st7789.rst
│   │   │   │   │   │   └── st7796.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── libinput.rst
│   │   │   │   │   ├── opengles.rst
│   │   │   │   │   ├── touchpad/
│   │   │   │   │   │   ├── evdev.rst
│   │   │   │   │   │   ├── ft6x36.rst
│   │   │   │   │   │   └── index.rst
│   │   │   │   │   ├── wayland.rst
│   │   │   │   │   └── windows.rst
│   │   │   │   ├── framework/
│   │   │   │   │   ├── arduino.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── platformio.rst
│   │   │   │   │   └── tasmota-berry.rst
│   │   │   │   ├── ide/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── mdk.rst
│   │   │   │   │   └── pc-simulator.rst
│   │   │   │   ├── index.rst
│   │   │   │   └── os/
│   │   │   │       ├── freertos.rst
│   │   │   │       ├── index.rst
│   │   │   │       ├── mqx.rst
│   │   │   │       ├── nuttx.rst
│   │   │   │       ├── px5.rst
│   │   │   │       ├── qnx.rst
│   │   │   │       ├── rt-thread.rst
│   │   │   │       └── zephyr.rst
│   │   │   ├── intro/
│   │   │   │   └── index.rst
│   │   │   ├── layouts/
│   │   │   │   ├── flex.rst
│   │   │   │   ├── grid.rst
│   │   │   │   └── index.rst
│   │   │   ├── libs/
│   │   │   │   ├── arduino_esp_littlefs.rst
│   │   │   │   ├── arduino_sd.rst
│   │   │   │   ├── barcode.rst
│   │   │   │   ├── bmp.rst
│   │   │   │   ├── ffmpeg.rst
│   │   │   │   ├── freetype.rst
│   │   │   │   ├── fs.rst
│   │   │   │   ├── gif.rst
│   │   │   │   ├── index.rst
│   │   │   │   ├── lfs.rst
│   │   │   │   ├── libjpeg_turbo.rst
│   │   │   │   ├── libpng.rst
│   │   │   │   ├── lodepng.rst
│   │   │   │   ├── qrcode.rst
│   │   │   │   ├── rle.rst
│   │   │   │   ├── rlottie.rst
│   │   │   │   ├── tiny_ttf.rst
│   │   │   │   └── tjpgd.rst
│   │   │   ├── others/
│   │   │   │   ├── file_explorer.rst
│   │   │   │   ├── fragment.rst
│   │   │   │   ├── gridnav.rst
│   │   │   │   ├── ime_pinyin.rst
│   │   │   │   ├── imgfont.rst
│   │   │   │   ├── index.rst
│   │   │   │   ├── monkey.rst
│   │   │   │   ├── obj_id.rst
│   │   │   │   ├── obj_property.rst
│   │   │   │   ├── observer.rst
│   │   │   │   └── snapshot.rst
│   │   │   ├── overview/
│   │   │   │   ├── animations.rst
│   │   │   │   ├── color.rst
│   │   │   │   ├── coord.rst
│   │   │   │   ├── display.rst
│   │   │   │   ├── event.rst
│   │   │   │   ├── font.rst
│   │   │   │   ├── fs.rst
│   │   │   │   ├── image.rst
│   │   │   │   ├── indev.rst
│   │   │   │   ├── index.rst
│   │   │   │   ├── layer.rst
│   │   │   │   ├── new_widget.rst
│   │   │   │   ├── obj.rst
│   │   │   │   ├── profiler.rst
│   │   │   │   ├── renderers/
│   │   │   │   │   ├── arm2d.rst
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── pxp.rst
│   │   │   │   │   ├── sdl.rst
│   │   │   │   │   ├── stm32_dma2d.rst
│   │   │   │   │   ├── sw.rst
│   │   │   │   │   ├── vg_lite.rst
│   │   │   │   │   └── vglite.rst
│   │   │   │   ├── scroll.rst
│   │   │   │   ├── style-props.md
│   │   │   │   ├── style-props.rst
│   │   │   │   ├── style.rst
│   │   │   │   ├── timer.rst
│   │   │   │   └── vg_lite_tvg.rst
│   │   │   ├── porting/
│   │   │   │   ├── display.rst
│   │   │   │   ├── draw.rst
│   │   │   │   ├── indev.rst
│   │   │   │   ├── index.rst
│   │   │   │   ├── log.rst
│   │   │   │   ├── os.rst
│   │   │   │   ├── project.rst
│   │   │   │   ├── sleep.rst
│   │   │   │   ├── tick.rst
│   │   │   │   └── timer_handler.rst
│   │   │   ├── requirements.txt
│   │   │   └── widgets/
│   │   │       ├── animimg.rst
│   │   │       ├── arc.rst
│   │   │       ├── bar.rst
│   │   │       ├── button.rst
│   │   │       ├── buttonmatrix.rst
│   │   │       ├── calendar.rst
│   │   │       ├── canvas.rst
│   │   │       ├── chart.rst
│   │   │       ├── checkbox.rst
│   │   │       ├── dropdown.rst
│   │   │       ├── image.rst
│   │   │       ├── imagebutton.rst
│   │   │       ├── index.rst
│   │   │       ├── keyboard.rst
│   │   │       ├── label.rst
│   │   │       ├── led.rst
│   │   │       ├── line.rst
│   │   │       ├── list.rst
│   │   │       ├── lottie.rst
│   │   │       ├── menu.rst
│   │   │       ├── msgbox.rst
│   │   │       ├── obj.rst
│   │   │       ├── roller.rst
│   │   │       ├── scale.rst
│   │   │       ├── slider.rst
│   │   │       ├── span.rst
│   │   │       ├── spinbox.rst
│   │   │       ├── spinner.rst
│   │   │       ├── switch.rst
│   │   │       ├── table.rst
│   │   │       ├── tabview.rst
│   │   │       ├── textarea.rst
│   │   │       ├── tileview.rst
│   │   │       └── win.rst
│   │   ├── env_support/
│   │   │   ├── cmake/
│   │   │   │   ├── custom.cmake
│   │   │   │   ├── esp.cmake
│   │   │   │   ├── micropython.cmake
│   │   │   │   ├── version.cmake
│   │   │   │   └── zephyr.cmake
│   │   │   ├── cmsis-pack/
│   │   │   │   ├── LVGL.lvgl.9.2.2.pack
│   │   │   │   ├── LVGL.lvgl.pdsc
│   │   │   │   ├── LVGL.pidx
│   │   │   │   ├── README.md
│   │   │   │   ├── gen_pack.sh
│   │   │   │   ├── lv_cmsis_pack.txt
│   │   │   │   ├── lv_conf_cmsis.h
│   │   │   │   ├── lv_os_custom_c.txt
│   │   │   │   └── lv_os_custom_h.txt
│   │   │   ├── esp/
│   │   │   │   └── rlottie/
│   │   │   │       ├── 0001-changes-to-compile-with-esp-idf.patch
│   │   │   │       └── CMakeLists.txt
│   │   │   ├── pikascript/
│   │   │   │   ├── README.md
│   │   │   │   ├── pika_lv_point_t.c
│   │   │   │   ├── pika_lv_timer_t.c
│   │   │   │   ├── pika_lv_wegit.c
│   │   │   │   ├── pika_lvgl.c
│   │   │   │   ├── pika_lvgl.pyi
│   │   │   │   ├── pika_lvgl_indev_t.c
│   │   │   │   ├── pika_lvgl_lv_event.c
│   │   │   │   ├── pika_lvgl_lv_obj.c
│   │   │   │   └── pika_lvgl_lv_style_t.c
│   │   │   ├── qnx/
│   │   │   │   ├── Makefile
│   │   │   │   ├── aarch64/
│   │   │   │   │   ├── Makefile
│   │   │   │   │   ├── a.le/
│   │   │   │   │   │   └── Makefile
│   │   │   │   │   └── so.le/
│   │   │   │   │       └── Makefile
│   │   │   │   ├── common.mk
│   │   │   │   └── x86_64/
│   │   │   │       ├── Makefile
│   │   │   │       ├── a/
│   │   │   │       │   └── Makefile
│   │   │   │       └── so/
│   │   │   │           └── Makefile
│   │   │   └── rt-thread/
│   │   │       ├── SConscript
│   │   │       ├── lv_rt_thread_conf.h
│   │   │       ├── lv_rt_thread_port.c
│   │   │       └── squareline/
│   │   │           ├── README.md
│   │   │           ├── SConscript
│   │   │           ├── lv_ui_entry.c
│   │   │           └── ui/
│   │   │               └── lvgl/
│   │   │                   └── lvgl.h
│   │   ├── examples/
│   │   │   ├── anim/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_anim.h
│   │   │   │   ├── lv_example_anim_1.c
│   │   │   │   ├── lv_example_anim_2.c
│   │   │   │   ├── lv_example_anim_3.c
│   │   │   │   └── lv_example_anim_timeline_1.c
│   │   │   ├── arduino/
│   │   │   │   └── LVGL_Arduino/
│   │   │   │       └── LVGL_Arduino.ino
│   │   │   ├── assets/
│   │   │   │   ├── animimg001.c
│   │   │   │   ├── animimg002.c
│   │   │   │   ├── animimg003.c
│   │   │   │   ├── emoji/
│   │   │   │   │   └── img_emoji_F617.c
│   │   │   │   ├── font/
│   │   │   │   │   ├── lv_font_simsun_16_cjk.fnt
│   │   │   │   │   ├── montserrat-16.fnt
│   │   │   │   │   ├── montserrat-18.fnt
│   │   │   │   │   └── montserrat-22.fnt
│   │   │   │   ├── img_caret_down.c
│   │   │   │   ├── img_cogwheel_argb.c
│   │   │   │   ├── img_cogwheel_indexed16.c
│   │   │   │   ├── img_cogwheel_rgb.c
│   │   │   │   ├── img_hand.c
│   │   │   │   ├── img_skew_strip.c
│   │   │   │   ├── img_skew_strip_80x20_argb8888.fnt
│   │   │   │   ├── img_star.c
│   │   │   │   ├── imgbtn_left.c
│   │   │   │   ├── imgbtn_mid.c
│   │   │   │   └── imgbtn_right.c
│   │   │   ├── event/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_event.h
│   │   │   │   ├── lv_example_event_1.c
│   │   │   │   ├── lv_example_event_2.c
│   │   │   │   ├── lv_example_event_3.c
│   │   │   │   └── lv_example_event_4.c
│   │   │   ├── get_started/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_get_started.h
│   │   │   │   ├── lv_example_get_started_1.c
│   │   │   │   ├── lv_example_get_started_2.c
│   │   │   │   ├── lv_example_get_started_3.c
│   │   │   │   └── lv_example_get_started_4.c
│   │   │   ├── header.py
│   │   │   ├── layouts/
│   │   │   │   ├── flex/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_flex.h
│   │   │   │   │   ├── lv_example_flex_1.c
│   │   │   │   │   ├── lv_example_flex_2.c
│   │   │   │   │   ├── lv_example_flex_3.c
│   │   │   │   │   ├── lv_example_flex_4.c
│   │   │   │   │   ├── lv_example_flex_5.c
│   │   │   │   │   └── lv_example_flex_6.c
│   │   │   │   ├── grid/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_grid.h
│   │   │   │   │   ├── lv_example_grid_1.c
│   │   │   │   │   ├── lv_example_grid_2.c
│   │   │   │   │   ├── lv_example_grid_3.c
│   │   │   │   │   ├── lv_example_grid_4.c
│   │   │   │   │   ├── lv_example_grid_5.c
│   │   │   │   │   └── lv_example_grid_6.c
│   │   │   │   └── lv_example_layout.h
│   │   │   ├── libs/
│   │   │   │   ├── barcode/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_barcode.h
│   │   │   │   │   └── lv_example_barcode_1.c
│   │   │   │   ├── bmp/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_bmp.h
│   │   │   │   │   └── lv_example_bmp_1.c
│   │   │   │   ├── ffmpeg/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_ffmpeg.h
│   │   │   │   │   ├── lv_example_ffmpeg_1.c
│   │   │   │   │   └── lv_example_ffmpeg_2.c
│   │   │   │   ├── freetype/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_freetype.h
│   │   │   │   │   └── lv_example_freetype_1.c
│   │   │   │   ├── gif/
│   │   │   │   │   ├── img_bulb_gif.c
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_gif.h
│   │   │   │   │   └── lv_example_gif_1.c
│   │   │   │   ├── libjpeg_turbo/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_libjpeg_turbo.h
│   │   │   │   │   └── lv_example_libjpeg_turbo_1.c
│   │   │   │   ├── libpng/
│   │   │   │   │   ├── img_png_demo.c
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_libpng.h
│   │   │   │   │   └── lv_example_libpng_1.c
│   │   │   │   ├── lodepng/
│   │   │   │   │   ├── img_wink_png.c
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_lodepng.h
│   │   │   │   │   └── lv_example_lodepng_1.c
│   │   │   │   ├── lv_example_libs.h
│   │   │   │   ├── qrcode/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_qrcode.h
│   │   │   │   │   └── lv_example_qrcode_1.c
│   │   │   │   ├── rlottie/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_rlottie.h
│   │   │   │   │   ├── lv_example_rlottie_1.c
│   │   │   │   │   ├── lv_example_rlottie_2.c
│   │   │   │   │   ├── lv_example_rlottie_approve.c
│   │   │   │   │   └── lv_example_rlottie_approve.json
│   │   │   │   ├── tiny_ttf/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_tiny_ttf.h
│   │   │   │   │   ├── lv_example_tiny_ttf_1.c
│   │   │   │   │   ├── lv_example_tiny_ttf_2.c
│   │   │   │   │   ├── lv_example_tiny_ttf_3.c
│   │   │   │   │   └── ubuntu_font.c
│   │   │   │   └── tjpgd/
│   │   │   │       ├── index.rst
│   │   │   │       ├── lv_example_tjpgd.h
│   │   │   │       └── lv_example_tjpgd_1.c
│   │   │   ├── lv_examples.h
│   │   │   ├── others/
│   │   │   │   ├── file_explorer/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_file_explorer.h
│   │   │   │   │   ├── lv_example_file_explorer_1.c
│   │   │   │   │   ├── lv_example_file_explorer_2.c
│   │   │   │   │   └── lv_example_file_explorer_3.c
│   │   │   │   ├── fragment/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_fragment.h
│   │   │   │   │   ├── lv_example_fragment_1.c
│   │   │   │   │   └── lv_example_fragment_2.c
│   │   │   │   ├── gridnav/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_gridnav.h
│   │   │   │   │   ├── lv_example_gridnav_1.c
│   │   │   │   │   ├── lv_example_gridnav_2.c
│   │   │   │   │   ├── lv_example_gridnav_3.c
│   │   │   │   │   ├── lv_example_gridnav_4.c
│   │   │   │   │   └── lv_example_gridnav_5.c
│   │   │   │   ├── ime/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_ime_pinyin.h
│   │   │   │   │   ├── lv_example_ime_pinyin_1.c
│   │   │   │   │   └── lv_example_ime_pinyin_2.c
│   │   │   │   ├── imgfont/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_imgfont.h
│   │   │   │   │   └── lv_example_imgfont_1.c
│   │   │   │   ├── lv_example_others.h
│   │   │   │   ├── monkey/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_monkey.h
│   │   │   │   │   ├── lv_example_monkey_1.c
│   │   │   │   │   ├── lv_example_monkey_2.c
│   │   │   │   │   └── lv_example_monkey_3.c
│   │   │   │   ├── observer/
│   │   │   │   │   ├── index.rst
│   │   │   │   │   ├── lv_example_observer.h
│   │   │   │   │   ├── lv_example_observer_1.c
│   │   │   │   │   ├── lv_example_observer_2.c
│   │   │   │   │   ├── lv_example_observer_3.c
│   │   │   │   │   ├── lv_example_observer_4.c
│   │   │   │   │   ├── lv_example_observer_5.c
│   │   │   │   │   └── lv_example_observer_6.c
│   │   │   │   └── snapshot/
│   │   │   │       ├── index.rst
│   │   │   │       ├── lv_example_snapshot.h
│   │   │   │       └── lv_example_snapshot_1.c
│   │   │   ├── porting/
│   │   │   │   ├── lv_port_disp_template.c
│   │   │   │   ├── lv_port_disp_template.h
│   │   │   │   ├── lv_port_fs_template.c
│   │   │   │   ├── lv_port_fs_template.h
│   │   │   │   ├── lv_port_indev_template.c
│   │   │   │   ├── lv_port_indev_template.h
│   │   │   │   ├── lv_port_lcd_stm32_template.c
│   │   │   │   ├── lv_port_lcd_stm32_template.h
│   │   │   │   └── osal/
│   │   │   │       ├── lv_example_osal.c
│   │   │   │       └── lv_example_osal.h
│   │   │   ├── scroll/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_scroll.h
│   │   │   │   ├── lv_example_scroll_1.c
│   │   │   │   ├── lv_example_scroll_2.c
│   │   │   │   ├── lv_example_scroll_3.c
│   │   │   │   ├── lv_example_scroll_4.c
│   │   │   │   ├── lv_example_scroll_5.c
│   │   │   │   └── lv_example_scroll_6.c
│   │   │   ├── styles/
│   │   │   │   ├── index.rst
│   │   │   │   ├── lv_example_style.h
│   │   │   │   ├── lv_example_style_1.c
│   │   │   │   ├── lv_example_style_10.c
│   │   │   │   ├── lv_example_style_11.c
│   │   │   │   ├── lv_example_style_12.c
│   │   │   │   ├── lv_example_style_13.c
│   │   │   │   ├── lv_example_style_14.c
│   │   │   │   ├── lv_example_style_15.c
│   │   │   │   ├── lv_example_style_16.c
│   │   │   │   ├── lv_example_style_17.c
│   │   │   │   ├── lv_example_style_18.c
│   │   │   │   ├── lv_example_style_2.c
│   │   │   │   ├── lv_example_style_3.c
│   │   │   │   ├── lv_example_style_4.c
│   │   │   │   ├── lv_example_style_5.c
│   │   │   │   ├── lv_example_style_6.c
│   │   │   │   ├── lv_example_style_7.c
│   │   │   │   ├── lv_example_style_8.c
│   │   │   │   └── lv_example_style_9.c
│   │   │   ├── test_ex.sh
│   │   │   └── widgets/
│   │   │       ├── animimg/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_animimg_1.c
│   │   │       ├── arc/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_arc_1.c
│   │   │       │   └── lv_example_arc_2.c
│   │   │       ├── bar/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_bar_1.c
│   │   │       │   ├── lv_example_bar_2.c
│   │   │       │   ├── lv_example_bar_3.c
│   │   │       │   ├── lv_example_bar_4.c
│   │   │       │   ├── lv_example_bar_5.c
│   │   │       │   ├── lv_example_bar_6.c
│   │   │       │   └── lv_example_bar_7.c
│   │   │       ├── button/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_button_1.c
│   │   │       │   ├── lv_example_button_2.c
│   │   │       │   └── lv_example_button_3.c
│   │   │       ├── buttonmatrix/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_buttonmatrix_1.c
│   │   │       │   ├── lv_example_buttonmatrix_2.c
│   │   │       │   └── lv_example_buttonmatrix_3.c
│   │   │       ├── calendar/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_calendar_1.c
│   │   │       │   └── lv_example_calendar_2.c
│   │   │       ├── canvas/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_canvas_1.c
│   │   │       │   ├── lv_example_canvas_2.c
│   │   │       │   ├── lv_example_canvas_3.c
│   │   │       │   ├── lv_example_canvas_4.c
│   │   │       │   ├── lv_example_canvas_5.c
│   │   │       │   ├── lv_example_canvas_6.c
│   │   │       │   ├── lv_example_canvas_7.c
│   │   │       │   └── lv_example_canvas_8.c
│   │   │       ├── chart/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_chart_1.c
│   │   │       │   ├── lv_example_chart_2.c
│   │   │       │   ├── lv_example_chart_3.c
│   │   │       │   ├── lv_example_chart_4.c
│   │   │       │   ├── lv_example_chart_5.c
│   │   │       │   ├── lv_example_chart_6.c
│   │   │       │   ├── lv_example_chart_7.c
│   │   │       │   └── lv_example_chart_8.c
│   │   │       ├── checkbox/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_checkbox_1.c
│   │   │       │   └── lv_example_checkbox_2.c
│   │   │       ├── dropdown/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_dropdown_1.c
│   │   │       │   ├── lv_example_dropdown_2.c
│   │   │       │   └── lv_example_dropdown_3.c
│   │   │       ├── image/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_image_1.c
│   │   │       │   ├── lv_example_image_2.c
│   │   │       │   ├── lv_example_image_3.c
│   │   │       │   └── lv_example_image_4.c
│   │   │       ├── imagebutton/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_imagebutton_1.c
│   │   │       ├── keyboard/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_keyboard_1.c
│   │   │       │   └── lv_example_keyboard_2.c
│   │   │       ├── label/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_label_1.c
│   │   │       │   ├── lv_example_label_2.c
│   │   │       │   ├── lv_example_label_3.c
│   │   │       │   ├── lv_example_label_4.c
│   │   │       │   └── lv_example_label_5.c
│   │   │       ├── led/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_led_1.c
│   │   │       ├── line/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_line_1.c
│   │   │       ├── list/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_list_1.c
│   │   │       │   └── lv_example_list_2.c
│   │   │       ├── lottie/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_lottie_1.c
│   │   │       │   ├── lv_example_lottie_2.c
│   │   │       │   ├── lv_example_lottie_approve.c
│   │   │       │   └── lv_example_lottie_approve.json
│   │   │       ├── lv_example_widgets.h
│   │   │       ├── menu/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_menu_1.c
│   │   │       │   ├── lv_example_menu_2.c
│   │   │       │   ├── lv_example_menu_3.c
│   │   │       │   ├── lv_example_menu_4.c
│   │   │       │   └── lv_example_menu_5.c
│   │   │       ├── msgbox/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_msgbox_1.c
│   │   │       │   └── lv_example_msgbox_2.c
│   │   │       ├── obj/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_obj_1.c
│   │   │       │   └── lv_example_obj_2.c
│   │   │       ├── roller/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_roller_1.c
│   │   │       │   ├── lv_example_roller_2.c
│   │   │       │   └── lv_example_roller_3.c
│   │   │       ├── scale/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_scale_1.c
│   │   │       │   ├── lv_example_scale_2.c
│   │   │       │   ├── lv_example_scale_3.c
│   │   │       │   ├── lv_example_scale_4.c
│   │   │       │   ├── lv_example_scale_5.c
│   │   │       │   ├── lv_example_scale_6.c
│   │   │       │   └── lv_example_scale_7.c
│   │   │       ├── slider/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_slider_1.c
│   │   │       │   ├── lv_example_slider_2.c
│   │   │       │   ├── lv_example_slider_3.c
│   │   │       │   └── lv_example_slider_4.c
│   │   │       ├── span/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_span_1.c
│   │   │       ├── spinbox/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_spinbox_1.c
│   │   │       ├── spinner/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_spinner_1.c
│   │   │       ├── switch/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_switch_1.c
│   │   │       ├── table/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_table_1.c
│   │   │       │   └── lv_example_table_2.c
│   │   │       ├── tabview/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_tabview_1.c
│   │   │       │   └── lv_example_tabview_2.c
│   │   │       ├── textarea/
│   │   │       │   ├── index.rst
│   │   │       │   ├── lv_example_textarea_1.c
│   │   │       │   ├── lv_example_textarea_2.c
│   │   │       │   └── lv_example_textarea_3.c
│   │   │       ├── tileview/
│   │   │       │   ├── index.rst
│   │   │       │   └── lv_example_tileview_1.c
│   │   │       └── win/
│   │   │           ├── index.rst
│   │   │           └── lv_example_win_1.c
│   │   ├── idf_component.yml
│   │   ├── library.json
│   │   ├── library.properties
│   │   ├── lv_conf_template.h
│   │   ├── lv_version.h
│   │   ├── lv_version.h.in
│   │   ├── lvgl.h
│   │   ├── lvgl.mk
│   │   ├── lvgl.pc.in
│   │   ├── scripts/
│   │   │   ├── .gitignore
│   │   │   ├── LVGLImage.py
│   │   │   ├── build_html_examples.sh
│   │   │   ├── built_in_font/
│   │   │   │   ├── built_in_font_gen.py
│   │   │   │   └── generate_all.py
│   │   │   ├── changelog-template.hbs
│   │   │   ├── changelog_gen.sh
│   │   │   ├── code-format.cfg
│   │   │   ├── code-format.py
│   │   │   ├── cppcheck_run.sh
│   │   │   ├── filetohex.py
│   │   │   ├── find_version.sh
│   │   │   ├── gen_json/
│   │   │   │   ├── create_fake_lib_c.py
│   │   │   │   ├── gen_json.py
│   │   │   │   ├── get_sdl2.py
│   │   │   │   ├── pycparser_monkeypatch.py
│   │   │   │   └── requirements.txt
│   │   │   ├── generate_lv_conf.py
│   │   │   ├── genexamplelist.sh
│   │   │   ├── image_viewer.py
│   │   │   ├── infer_run.sh
│   │   │   ├── install-prerequisites.bat
│   │   │   ├── install-prerequisites.sh
│   │   │   ├── install_astyle.sh
│   │   │   ├── jpg_to_sjpg.py
│   │   │   ├── kconfig_verify.py
│   │   │   ├── lv_conf_internal_gen.py
│   │   │   ├── properties.py
│   │   │   ├── style_api_gen.py
│   │   │   ├── trace_filter.py
│   │   │   └── update_version.py
│   │   ├── src/
│   │   │   ├── core/
│   │   │   │   ├── lv_global.h
│   │   │   │   ├── lv_group.c
│   │   │   │   ├── lv_group.h
│   │   │   │   ├── lv_group_private.h
│   │   │   │   ├── lv_obj.c
│   │   │   │   ├── lv_obj.h
│   │   │   │   ├── lv_obj_class.c
│   │   │   │   ├── lv_obj_class.h
│   │   │   │   ├── lv_obj_class_private.h
│   │   │   │   ├── lv_obj_draw.c
│   │   │   │   ├── lv_obj_draw.h
│   │   │   │   ├── lv_obj_draw_private.h
│   │   │   │   ├── lv_obj_event.c
│   │   │   │   ├── lv_obj_event.h
│   │   │   │   ├── lv_obj_event_private.h
│   │   │   │   ├── lv_obj_id_builtin.c
│   │   │   │   ├── lv_obj_pos.c
│   │   │   │   ├── lv_obj_pos.h
│   │   │   │   ├── lv_obj_private.h
│   │   │   │   ├── lv_obj_property.c
│   │   │   │   ├── lv_obj_property.h
│   │   │   │   ├── lv_obj_scroll.c
│   │   │   │   ├── lv_obj_scroll.h
│   │   │   │   ├── lv_obj_scroll_private.h
│   │   │   │   ├── lv_obj_style.c
│   │   │   │   ├── lv_obj_style.h
│   │   │   │   ├── lv_obj_style_gen.c
│   │   │   │   ├── lv_obj_style_gen.h
│   │   │   │   ├── lv_obj_style_private.h
│   │   │   │   ├── lv_obj_tree.c
│   │   │   │   ├── lv_obj_tree.h
│   │   │   │   ├── lv_refr.c
│   │   │   │   ├── lv_refr.h
│   │   │   │   └── lv_refr_private.h
│   │   │   ├── display/
│   │   │   │   ├── lv_display.c
│   │   │   │   ├── lv_display.h
│   │   │   │   └── lv_display_private.h
│   │   │   ├── draw/
│   │   │   │   ├── lv_draw.c
│   │   │   │   ├── lv_draw.h
│   │   │   │   ├── lv_draw_arc.c
│   │   │   │   ├── lv_draw_arc.h
│   │   │   │   ├── lv_draw_buf.c
│   │   │   │   ├── lv_draw_buf.h
│   │   │   │   ├── lv_draw_buf_private.h
│   │   │   │   ├── lv_draw_image.c
│   │   │   │   ├── lv_draw_image.h
│   │   │   │   ├── lv_draw_image_private.h
│   │   │   │   ├── lv_draw_label.c
│   │   │   │   ├── lv_draw_label.h
│   │   │   │   ├── lv_draw_label_private.h
│   │   │   │   ├── lv_draw_line.c
│   │   │   │   ├── lv_draw_line.h
│   │   │   │   ├── lv_draw_mask.c
│   │   │   │   ├── lv_draw_mask.h
│   │   │   │   ├── lv_draw_mask_private.h
│   │   │   │   ├── lv_draw_private.h
│   │   │   │   ├── lv_draw_rect.c
│   │   │   │   ├── lv_draw_rect.h
│   │   │   │   ├── lv_draw_rect_private.h
│   │   │   │   ├── lv_draw_triangle.c
│   │   │   │   ├── lv_draw_triangle.h
│   │   │   │   ├── lv_draw_triangle_private.h
│   │   │   │   ├── lv_draw_vector.c
│   │   │   │   ├── lv_draw_vector.h
│   │   │   │   ├── lv_draw_vector_private.h
│   │   │   │   ├── lv_image_decoder.c
│   │   │   │   ├── lv_image_decoder.h
│   │   │   │   ├── lv_image_decoder_private.h
│   │   │   │   ├── lv_image_dsc.h
│   │   │   │   ├── nxp/
│   │   │   │   │   ├── pxp/
│   │   │   │   │   │   ├── lv_draw_buf_pxp.c
│   │   │   │   │   │   ├── lv_draw_pxp.c
│   │   │   │   │   │   ├── lv_draw_pxp.h
│   │   │   │   │   │   ├── lv_draw_pxp_fill.c
│   │   │   │   │   │   ├── lv_draw_pxp_img.c
│   │   │   │   │   │   ├── lv_draw_pxp_layer.c
│   │   │   │   │   │   ├── lv_pxp_cfg.c
│   │   │   │   │   │   ├── lv_pxp_cfg.h
│   │   │   │   │   │   ├── lv_pxp_osa.c
│   │   │   │   │   │   ├── lv_pxp_osa.h
│   │   │   │   │   │   ├── lv_pxp_utils.c
│   │   │   │   │   │   └── lv_pxp_utils.h
│   │   │   │   │   └── vglite/
│   │   │   │   │       ├── lv_draw_buf_vglite.c
│   │   │   │   │       ├── lv_draw_vglite.c
│   │   │   │   │       ├── lv_draw_vglite.h
│   │   │   │   │       ├── lv_draw_vglite_arc.c
│   │   │   │   │       ├── lv_draw_vglite_border.c
│   │   │   │   │       ├── lv_draw_vglite_fill.c
│   │   │   │   │       ├── lv_draw_vglite_img.c
│   │   │   │   │       ├── lv_draw_vglite_label.c
│   │   │   │   │       ├── lv_draw_vglite_layer.c
│   │   │   │   │       ├── lv_draw_vglite_line.c
│   │   │   │   │       ├── lv_draw_vglite_triangle.c
│   │   │   │   │       ├── lv_vglite_buf.c
│   │   │   │   │       ├── lv_vglite_buf.h
│   │   │   │   │       ├── lv_vglite_matrix.c
│   │   │   │   │       ├── lv_vglite_matrix.h
│   │   │   │   │       ├── lv_vglite_path.c
│   │   │   │   │       ├── lv_vglite_path.h
│   │   │   │   │       ├── lv_vglite_utils.c
│   │   │   │   │       └── lv_vglite_utils.h
│   │   │   │   ├── renesas/
│   │   │   │   │   └── dave2d/
│   │   │   │   │       ├── lv_draw_dave2d.c
│   │   │   │   │       ├── lv_draw_dave2d.h
│   │   │   │   │       ├── lv_draw_dave2d_arc.c
│   │   │   │   │       ├── lv_draw_dave2d_border.c
│   │   │   │   │       ├── lv_draw_dave2d_fill.c
│   │   │   │   │       ├── lv_draw_dave2d_image.c
│   │   │   │   │       ├── lv_draw_dave2d_label.c
│   │   │   │   │       ├── lv_draw_dave2d_line.c
│   │   │   │   │       ├── lv_draw_dave2d_mask_rectangle.c
│   │   │   │   │       ├── lv_draw_dave2d_triangle.c
│   │   │   │   │       ├── lv_draw_dave2d_utils.c
│   │   │   │   │       └── lv_draw_dave2d_utils.h
│   │   │   │   ├── sdl/
│   │   │   │   │   ├── lv_draw_sdl.c
│   │   │   │   │   └── lv_draw_sdl.h
│   │   │   │   ├── sw/
│   │   │   │   │   ├── arm2d/
│   │   │   │   │   │   ├── lv_draw_sw_arm2d.h
│   │   │   │   │   │   └── lv_draw_sw_helium.h
│   │   │   │   │   ├── blend/
│   │   │   │   │   │   ├── arm2d/
│   │   │   │   │   │   │   └── lv_blend_arm2d.h
│   │   │   │   │   │   ├── helium/
│   │   │   │   │   │   │   ├── lv_blend_helium.S
│   │   │   │   │   │   │   └── lv_blend_helium.h
│   │   │   │   │   │   ├── lv_draw_sw_blend.c
│   │   │   │   │   │   ├── lv_draw_sw_blend.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_private.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_al88.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_al88.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_argb8888.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_argb8888.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_i1.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_i1.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_l8.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_l8.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_rgb565.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_rgb565.h
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_rgb888.c
│   │   │   │   │   │   ├── lv_draw_sw_blend_to_rgb888.h
│   │   │   │   │   │   └── neon/
│   │   │   │   │   │       ├── lv_blend_neon.S
│   │   │   │   │   │       └── lv_blend_neon.h
│   │   │   │   │   ├── lv_draw_sw.c
│   │   │   │   │   ├── lv_draw_sw.h
│   │   │   │   │   ├── lv_draw_sw_arc.c
│   │   │   │   │   ├── lv_draw_sw_border.c
│   │   │   │   │   ├── lv_draw_sw_box_shadow.c
│   │   │   │   │   ├── lv_draw_sw_fill.c
│   │   │   │   │   ├── lv_draw_sw_gradient.c
│   │   │   │   │   ├── lv_draw_sw_gradient.h
│   │   │   │   │   ├── lv_draw_sw_gradient_private.h
│   │   │   │   │   ├── lv_draw_sw_img.c
│   │   │   │   │   ├── lv_draw_sw_letter.c
│   │   │   │   │   ├── lv_draw_sw_line.c
│   │   │   │   │   ├── lv_draw_sw_mask.c
│   │   │   │   │   ├── lv_draw_sw_mask.h
│   │   │   │   │   ├── lv_draw_sw_mask_private.h
│   │   │   │   │   ├── lv_draw_sw_mask_rect.c
│   │   │   │   │   ├── lv_draw_sw_private.h
│   │   │   │   │   ├── lv_draw_sw_transform.c
│   │   │   │   │   ├── lv_draw_sw_triangle.c
│   │   │   │   │   └── lv_draw_sw_vector.c
│   │   │   │   └── vg_lite/
│   │   │   │       ├── lv_draw_buf_vg_lite.c
│   │   │   │       ├── lv_draw_vg_lite.c
│   │   │   │       ├── lv_draw_vg_lite.h
│   │   │   │       ├── lv_draw_vg_lite_arc.c
│   │   │   │       ├── lv_draw_vg_lite_border.c
│   │   │   │       ├── lv_draw_vg_lite_box_shadow.c
│   │   │   │       ├── lv_draw_vg_lite_fill.c
│   │   │   │       ├── lv_draw_vg_lite_img.c
│   │   │   │       ├── lv_draw_vg_lite_label.c
│   │   │   │       ├── lv_draw_vg_lite_layer.c
│   │   │   │       ├── lv_draw_vg_lite_line.c
│   │   │   │       ├── lv_draw_vg_lite_mask_rect.c
│   │   │   │       ├── lv_draw_vg_lite_triangle.c
│   │   │   │       ├── lv_draw_vg_lite_type.h
│   │   │   │       ├── lv_draw_vg_lite_vector.c
│   │   │   │       ├── lv_vg_lite_decoder.c
│   │   │   │       ├── lv_vg_lite_decoder.h
│   │   │   │       ├── lv_vg_lite_grad.c
│   │   │   │       ├── lv_vg_lite_grad.h
│   │   │   │       ├── lv_vg_lite_math.c
│   │   │   │       ├── lv_vg_lite_math.h
│   │   │   │       ├── lv_vg_lite_path.c
│   │   │   │       ├── lv_vg_lite_path.h
│   │   │   │       ├── lv_vg_lite_pending.c
│   │   │   │       ├── lv_vg_lite_pending.h
│   │   │   │       ├── lv_vg_lite_stroke.c
│   │   │   │       ├── lv_vg_lite_stroke.h
│   │   │   │       ├── lv_vg_lite_utils.c
│   │   │   │       └── lv_vg_lite_utils.h
│   │   │   ├── drivers/
│   │   │   │   ├── README.md
│   │   │   │   ├── display/
│   │   │   │   │   ├── drm/
│   │   │   │   │   │   ├── lv_linux_drm.c
│   │   │   │   │   │   └── lv_linux_drm.h
│   │   │   │   │   ├── fb/
│   │   │   │   │   │   ├── lv_linux_fbdev.c
│   │   │   │   │   │   └── lv_linux_fbdev.h
│   │   │   │   │   ├── ili9341/
│   │   │   │   │   │   ├── lv_ili9341.c
│   │   │   │   │   │   └── lv_ili9341.h
│   │   │   │   │   ├── lcd/
│   │   │   │   │   │   ├── lv_lcd_generic_mipi.c
│   │   │   │   │   │   └── lv_lcd_generic_mipi.h
│   │   │   │   │   ├── renesas_glcdc/
│   │   │   │   │   │   ├── lv_renesas_glcdc.c
│   │   │   │   │   │   └── lv_renesas_glcdc.h
│   │   │   │   │   ├── st7735/
│   │   │   │   │   │   ├── lv_st7735.c
│   │   │   │   │   │   └── lv_st7735.h
│   │   │   │   │   ├── st7789/
│   │   │   │   │   │   ├── lv_st7789.c
│   │   │   │   │   │   └── lv_st7789.h
│   │   │   │   │   ├── st7796/
│   │   │   │   │   │   ├── lv_st7796.c
│   │   │   │   │   │   └── lv_st7796.h
│   │   │   │   │   └── tft_espi/
│   │   │   │   │       ├── lv_tft_espi.cpp
│   │   │   │   │       └── lv_tft_espi.h
│   │   │   │   ├── evdev/
│   │   │   │   │   ├── lv_evdev.c
│   │   │   │   │   └── lv_evdev.h
│   │   │   │   ├── glfw/
│   │   │   │   │   ├── lv_glfw_window.c
│   │   │   │   │   ├── lv_glfw_window.h
│   │   │   │   │   ├── lv_glfw_window_private.h
│   │   │   │   │   ├── lv_opengles_debug.c
│   │   │   │   │   ├── lv_opengles_debug.h
│   │   │   │   │   ├── lv_opengles_driver.c
│   │   │   │   │   ├── lv_opengles_driver.h
│   │   │   │   │   ├── lv_opengles_texture.c
│   │   │   │   │   └── lv_opengles_texture.h
│   │   │   │   ├── libinput/
│   │   │   │   │   ├── lv_libinput.c
│   │   │   │   │   ├── lv_libinput.h
│   │   │   │   │   ├── lv_libinput_private.h
│   │   │   │   │   ├── lv_xkb.c
│   │   │   │   │   ├── lv_xkb.h
│   │   │   │   │   └── lv_xkb_private.h
│   │   │   │   ├── lv_drivers.h
│   │   │   │   ├── nuttx/
│   │   │   │   │   ├── lv_nuttx_cache.c
│   │   │   │   │   ├── lv_nuttx_cache.h
│   │   │   │   │   ├── lv_nuttx_entry.c
│   │   │   │   │   ├── lv_nuttx_entry.h
│   │   │   │   │   ├── lv_nuttx_fbdev.c
│   │   │   │   │   ├── lv_nuttx_fbdev.h
│   │   │   │   │   ├── lv_nuttx_image_cache.c
│   │   │   │   │   ├── lv_nuttx_image_cache.h
│   │   │   │   │   ├── lv_nuttx_lcd.c
│   │   │   │   │   ├── lv_nuttx_lcd.h
│   │   │   │   │   ├── lv_nuttx_libuv.c
│   │   │   │   │   ├── lv_nuttx_libuv.h
│   │   │   │   │   ├── lv_nuttx_profiler.c
│   │   │   │   │   ├── lv_nuttx_profiler.h
│   │   │   │   │   ├── lv_nuttx_touchscreen.c
│   │   │   │   │   └── lv_nuttx_touchscreen.h
│   │   │   │   ├── qnx/
│   │   │   │   │   ├── lv_qnx.c
│   │   │   │   │   └── lv_qnx.h
│   │   │   │   ├── sdl/
│   │   │   │   │   ├── lv_sdl_keyboard.c
│   │   │   │   │   ├── lv_sdl_keyboard.h
│   │   │   │   │   ├── lv_sdl_mouse.c
│   │   │   │   │   ├── lv_sdl_mouse.h
│   │   │   │   │   ├── lv_sdl_mousewheel.c
│   │   │   │   │   ├── lv_sdl_mousewheel.h
│   │   │   │   │   ├── lv_sdl_private.h
│   │   │   │   │   ├── lv_sdl_window.c
│   │   │   │   │   └── lv_sdl_window.h
│   │   │   │   ├── wayland/
│   │   │   │   │   ├── lv_wayland.c
│   │   │   │   │   ├── lv_wayland.h
│   │   │   │   │   ├── lv_wayland_smm.c
│   │   │   │   │   └── lv_wayland_smm.h
│   │   │   │   ├── windows/
│   │   │   │   │   ├── lv_windows_context.c
│   │   │   │   │   ├── lv_windows_context.h
│   │   │   │   │   ├── lv_windows_display.c
│   │   │   │   │   ├── lv_windows_display.h
│   │   │   │   │   ├── lv_windows_input.c
│   │   │   │   │   ├── lv_windows_input.h
│   │   │   │   │   └── lv_windows_input_private.h
│   │   │   │   └── x11/
│   │   │   │       ├── lv_x11.h
│   │   │   │       ├── lv_x11_display.c
│   │   │   │       └── lv_x11_input.c
│   │   │   ├── font/
│   │   │   │   ├── lv_binfont_loader.c
│   │   │   │   ├── lv_binfont_loader.h
│   │   │   │   ├── lv_font.c
│   │   │   │   ├── lv_font.h
│   │   │   │   ├── lv_font_dejavu_16_persian_hebrew.c
│   │   │   │   ├── lv_font_fmt_txt.c
│   │   │   │   ├── lv_font_fmt_txt.h
│   │   │   │   ├── lv_font_fmt_txt_private.h
│   │   │   │   ├── lv_font_montserrat_10.c
│   │   │   │   ├── lv_font_montserrat_12.c
│   │   │   │   ├── lv_font_montserrat_14.c
│   │   │   │   ├── lv_font_montserrat_16.c
│   │   │   │   ├── lv_font_montserrat_18.c
│   │   │   │   ├── lv_font_montserrat_20.c
│   │   │   │   ├── lv_font_montserrat_22.c
│   │   │   │   ├── lv_font_montserrat_24.c
│   │   │   │   ├── lv_font_montserrat_26.c
│   │   │   │   ├── lv_font_montserrat_28.c
│   │   │   │   ├── lv_font_montserrat_28_compressed.c
│   │   │   │   ├── lv_font_montserrat_30.c
│   │   │   │   ├── lv_font_montserrat_32.c
│   │   │   │   ├── lv_font_montserrat_34.c
│   │   │   │   ├── lv_font_montserrat_36.c
│   │   │   │   ├── lv_font_montserrat_38.c
│   │   │   │   ├── lv_font_montserrat_40.c
│   │   │   │   ├── lv_font_montserrat_42.c
│   │   │   │   ├── lv_font_montserrat_44.c
│   │   │   │   ├── lv_font_montserrat_46.c
│   │   │   │   ├── lv_font_montserrat_48.c
│   │   │   │   ├── lv_font_montserrat_8.c
│   │   │   │   ├── lv_font_simsun_14_cjk.c
│   │   │   │   ├── lv_font_simsun_16_cjk.c
│   │   │   │   ├── lv_font_unscii_16.c
│   │   │   │   ├── lv_font_unscii_8.c
│   │   │   │   └── lv_symbol_def.h
│   │   │   ├── indev/
│   │   │   │   ├── lv_indev.c
│   │   │   │   ├── lv_indev.h
│   │   │   │   ├── lv_indev_private.h
│   │   │   │   ├── lv_indev_scroll.c
│   │   │   │   └── lv_indev_scroll.h
│   │   │   ├── layouts/
│   │   │   │   ├── flex/
│   │   │   │   │   ├── lv_flex.c
│   │   │   │   │   └── lv_flex.h
│   │   │   │   ├── grid/
│   │   │   │   │   ├── lv_grid.c
│   │   │   │   │   └── lv_grid.h
│   │   │   │   ├── lv_layout.c
│   │   │   │   ├── lv_layout.h
│   │   │   │   └── lv_layout_private.h
│   │   │   ├── libs/
│   │   │   │   ├── barcode/
│   │   │   │   │   ├── code128.c
│   │   │   │   │   ├── code128.h
│   │   │   │   │   ├── lv_barcode.c
│   │   │   │   │   ├── lv_barcode.h
│   │   │   │   │   └── lv_barcode_private.h
│   │   │   │   ├── bin_decoder/
│   │   │   │   │   ├── lv_bin_decoder.c
│   │   │   │   │   └── lv_bin_decoder.h
│   │   │   │   ├── bmp/
│   │   │   │   │   ├── lv_bmp.c
│   │   │   │   │   └── lv_bmp.h
│   │   │   │   ├── ffmpeg/
│   │   │   │   │   ├── lv_ffmpeg.c
│   │   │   │   │   ├── lv_ffmpeg.h
│   │   │   │   │   └── lv_ffmpeg_private.h
│   │   │   │   ├── freetype/
│   │   │   │   │   ├── ftmodule.h
│   │   │   │   │   ├── ftoption.h
│   │   │   │   │   ├── lv_freetype.c
│   │   │   │   │   ├── lv_freetype.h
│   │   │   │   │   ├── lv_freetype_glyph.c
│   │   │   │   │   ├── lv_freetype_image.c
│   │   │   │   │   ├── lv_freetype_outline.c
│   │   │   │   │   ├── lv_freetype_private.h
│   │   │   │   │   └── lv_ftsystem.c
│   │   │   │   ├── fsdrv/
│   │   │   │   │   ├── lv_fs_arduino_esp_littlefs.cpp
│   │   │   │   │   ├── lv_fs_arduino_sd.cpp
│   │   │   │   │   ├── lv_fs_cbfs.c
│   │   │   │   │   ├── lv_fs_fatfs.c
│   │   │   │   │   ├── lv_fs_littlefs.c
│   │   │   │   │   ├── lv_fs_memfs.c
│   │   │   │   │   ├── lv_fs_posix.c
│   │   │   │   │   ├── lv_fs_stdio.c
│   │   │   │   │   ├── lv_fs_win32.c
│   │   │   │   │   └── lv_fsdrv.h
│   │   │   │   ├── gif/
│   │   │   │   │   ├── gifdec.c
│   │   │   │   │   ├── gifdec.h
│   │   │   │   │   ├── gifdec_mve.h
│   │   │   │   │   ├── lv_gif.c
│   │   │   │   │   ├── lv_gif.h
│   │   │   │   │   └── lv_gif_private.h
│   │   │   │   ├── libjpeg_turbo/
│   │   │   │   │   ├── lv_libjpeg_turbo.c
│   │   │   │   │   └── lv_libjpeg_turbo.h
│   │   │   │   ├── libpng/
│   │   │   │   │   ├── lv_libpng.c
│   │   │   │   │   └── lv_libpng.h
│   │   │   │   ├── lodepng/
│   │   │   │   │   ├── lodepng.c
│   │   │   │   │   ├── lodepng.h
│   │   │   │   │   ├── lv_lodepng.c
│   │   │   │   │   └── lv_lodepng.h
│   │   │   │   ├── lz4/
│   │   │   │   │   ├── LICENSE
│   │   │   │   │   ├── lz4.c
│   │   │   │   │   └── lz4.h
│   │   │   │   ├── qrcode/
│   │   │   │   │   ├── lv_qrcode.c
│   │   │   │   │   ├── lv_qrcode.h
│   │   │   │   │   ├── lv_qrcode_private.h
│   │   │   │   │   ├── qrcodegen.c
│   │   │   │   │   └── qrcodegen.h
│   │   │   │   ├── rle/
│   │   │   │   │   ├── lv_rle.c
│   │   │   │   │   └── lv_rle.h
│   │   │   │   ├── rlottie/
│   │   │   │   │   ├── lv_rlottie.c
│   │   │   │   │   ├── lv_rlottie.h
│   │   │   │   │   └── lv_rlottie_private.h
│   │   │   │   ├── thorvg/
│   │   │   │   │   ├── add_lvgl_if.sh
│   │   │   │   │   ├── config.h
│   │   │   │   │   ├── rapidjson/
│   │   │   │   │   │   ├── allocators.h
│   │   │   │   │   │   ├── cursorstreamwrapper.h
│   │   │   │   │   │   ├── document.h
│   │   │   │   │   │   ├── encodedstream.h
│   │   │   │   │   │   ├── encodings.h
│   │   │   │   │   │   ├── error/
│   │   │   │   │   │   │   ├── en.h
│   │   │   │   │   │   │   └── error.h
│   │   │   │   │   │   ├── filereadstream.h
│   │   │   │   │   │   ├── filewritestream.h
│   │   │   │   │   │   ├── fwd.h
│   │   │   │   │   │   ├── internal/
│   │   │   │   │   │   │   ├── biginteger.h
│   │   │   │   │   │   │   ├── clzll.h
│   │   │   │   │   │   │   ├── diyfp.h
│   │   │   │   │   │   │   ├── dtoa.h
│   │   │   │   │   │   │   ├── ieee754.h
│   │   │   │   │   │   │   ├── itoa.h
│   │   │   │   │   │   │   ├── meta.h
│   │   │   │   │   │   │   ├── pow10.h
│   │   │   │   │   │   │   ├── regex.h
│   │   │   │   │   │   │   ├── stack.h
│   │   │   │   │   │   │   ├── strfunc.h
│   │   │   │   │   │   │   ├── strtod.h
│   │   │   │   │   │   │   └── swap.h
│   │   │   │   │   │   ├── istreamwrapper.h
│   │   │   │   │   │   ├── memorybuffer.h
│   │   │   │   │   │   ├── memorystream.h
│   │   │   │   │   │   ├── msinttypes/
│   │   │   │   │   │   │   ├── inttypes.h
│   │   │   │   │   │   │   └── stdint.h
│   │   │   │   │   │   ├── ostreamwrapper.h
│   │   │   │   │   │   ├── pointer.h
│   │   │   │   │   │   ├── prettywriter.h
│   │   │   │   │   │   ├── rapidjson.h
│   │   │   │   │   │   ├── reader.h
│   │   │   │   │   │   ├── schema.h
│   │   │   │   │   │   ├── stream.h
│   │   │   │   │   │   ├── stringbuffer.h
│   │   │   │   │   │   ├── uri.h
│   │   │   │   │   │   └── writer.h
│   │   │   │   │   ├── thorvg.h
│   │   │   │   │   ├── thorvg_capi.h
│   │   │   │   │   ├── thorvg_lottie.h
│   │   │   │   │   ├── tvgAccessor.cpp
│   │   │   │   │   ├── tvgAnimation.cpp
│   │   │   │   │   ├── tvgAnimation.h
│   │   │   │   │   ├── tvgArray.h
│   │   │   │   │   ├── tvgBinaryDesc.h
│   │   │   │   │   ├── tvgCanvas.cpp
│   │   │   │   │   ├── tvgCanvas.h
│   │   │   │   │   ├── tvgCapi.cpp
│   │   │   │   │   ├── tvgCommon.h
│   │   │   │   │   ├── tvgCompressor.cpp
│   │   │   │   │   ├── tvgCompressor.h
│   │   │   │   │   ├── tvgFill.cpp
│   │   │   │   │   ├── tvgFill.h
│   │   │   │   │   ├── tvgFrameModule.h
│   │   │   │   │   ├── tvgGlCanvas.cpp
│   │   │   │   │   ├── tvgInitializer.cpp
│   │   │   │   │   ├── tvgInlist.h
│   │   │   │   │   ├── tvgIteratorAccessor.h
│   │   │   │   │   ├── tvgLines.cpp
│   │   │   │   │   ├── tvgLines.h
│   │   │   │   │   ├── tvgLoadModule.h
│   │   │   │   │   ├── tvgLoader.cpp
│   │   │   │   │   ├── tvgLoader.h
│   │   │   │   │   ├── tvgLock.h
│   │   │   │   │   ├── tvgLottieAnimation.cpp
│   │   │   │   │   ├── tvgLottieBuilder.cpp
│   │   │   │   │   ├── tvgLottieBuilder.h
│   │   │   │   │   ├── tvgLottieExpressions.cpp
│   │   │   │   │   ├── tvgLottieExpressions.h
│   │   │   │   │   ├── tvgLottieInterpolator.cpp
│   │   │   │   │   ├── tvgLottieInterpolator.h
│   │   │   │   │   ├── tvgLottieLoader.cpp
│   │   │   │   │   ├── tvgLottieLoader.h
│   │   │   │   │   ├── tvgLottieModel.cpp
│   │   │   │   │   ├── tvgLottieModel.h
│   │   │   │   │   ├── tvgLottieParser.cpp
│   │   │   │   │   ├── tvgLottieParser.h
│   │   │   │   │   ├── tvgLottieParserHandler.cpp
│   │   │   │   │   ├── tvgLottieParserHandler.h
│   │   │   │   │   ├── tvgLottieProperty.h
│   │   │   │   │   ├── tvgMath.cpp
│   │   │   │   │   ├── tvgMath.h
│   │   │   │   │   ├── tvgPaint.cpp
│   │   │   │   │   ├── tvgPaint.h
│   │   │   │   │   ├── tvgPicture.cpp
│   │   │   │   │   ├── tvgPicture.h
│   │   │   │   │   ├── tvgRawLoader.cpp
│   │   │   │   │   ├── tvgRawLoader.h
│   │   │   │   │   ├── tvgRender.cpp
│   │   │   │   │   ├── tvgRender.h
│   │   │   │   │   ├── tvgSaveModule.h
│   │   │   │   │   ├── tvgSaver.cpp
│   │   │   │   │   ├── tvgScene.cpp
│   │   │   │   │   ├── tvgScene.h
│   │   │   │   │   ├── tvgShape.cpp
│   │   │   │   │   ├── tvgShape.h
│   │   │   │   │   ├── tvgStr.cpp
│   │   │   │   │   ├── tvgStr.h
│   │   │   │   │   ├── tvgSvgCssStyle.cpp
│   │   │   │   │   ├── tvgSvgCssStyle.h
│   │   │   │   │   ├── tvgSvgLoader.cpp
│   │   │   │   │   ├── tvgSvgLoader.h
│   │   │   │   │   ├── tvgSvgLoaderCommon.h
│   │   │   │   │   ├── tvgSvgPath.cpp
│   │   │   │   │   ├── tvgSvgPath.h
│   │   │   │   │   ├── tvgSvgSceneBuilder.cpp
│   │   │   │   │   ├── tvgSvgSceneBuilder.h
│   │   │   │   │   ├── tvgSvgUtil.cpp
│   │   │   │   │   ├── tvgSvgUtil.h
│   │   │   │   │   ├── tvgSwCanvas.cpp
│   │   │   │   │   ├── tvgSwCommon.h
│   │   │   │   │   ├── tvgSwFill.cpp
│   │   │   │   │   ├── tvgSwImage.cpp
│   │   │   │   │   ├── tvgSwMath.cpp
│   │   │   │   │   ├── tvgSwMemPool.cpp
│   │   │   │   │   ├── tvgSwRaster.cpp
│   │   │   │   │   ├── tvgSwRasterAvx.h
│   │   │   │   │   ├── tvgSwRasterC.h
│   │   │   │   │   ├── tvgSwRasterNeon.h
│   │   │   │   │   ├── tvgSwRasterTexmap.h
│   │   │   │   │   ├── tvgSwRenderer.cpp
│   │   │   │   │   ├── tvgSwRenderer.h
│   │   │   │   │   ├── tvgSwRle.cpp
│   │   │   │   │   ├── tvgSwShape.cpp
│   │   │   │   │   ├── tvgSwStroke.cpp
│   │   │   │   │   ├── tvgTaskScheduler.cpp
│   │   │   │   │   ├── tvgTaskScheduler.h
│   │   │   │   │   ├── tvgText.cpp
│   │   │   │   │   ├── tvgText.h
│   │   │   │   │   ├── tvgWgCanvas.cpp
│   │   │   │   │   ├── tvgXmlParser.cpp
│   │   │   │   │   └── tvgXmlParser.h
│   │   │   │   ├── tiny_ttf/
│   │   │   │   │   ├── lv_tiny_ttf.c
│   │   │   │   │   ├── lv_tiny_ttf.h
│   │   │   │   │   ├── stb_rect_pack.h
│   │   │   │   │   └── stb_truetype_htcw.h
│   │   │   │   └── tjpgd/
│   │   │   │       ├── lv_tjpgd.c
│   │   │   │       ├── lv_tjpgd.h
│   │   │   │       ├── tjpgd.c
│   │   │   │       ├── tjpgd.h
│   │   │   │       └── tjpgdcnf.h
│   │   │   ├── lv_api_map_v8.h
│   │   │   ├── lv_api_map_v9_0.h
│   │   │   ├── lv_api_map_v9_1.h
│   │   │   ├── lv_conf_internal.h
│   │   │   ├── lv_conf_kconfig.h
│   │   │   ├── lv_init.c
│   │   │   ├── lv_init.h
│   │   │   ├── lvgl.h
│   │   │   ├── lvgl_private.h
│   │   │   ├── misc/
│   │   │   │   ├── cache/
│   │   │   │   │   ├── lv_cache.c
│   │   │   │   │   ├── lv_cache.h
│   │   │   │   │   ├── lv_cache_entry.c
│   │   │   │   │   ├── lv_cache_entry.h
│   │   │   │   │   ├── lv_cache_entry_private.h
│   │   │   │   │   ├── lv_cache_lru_rb.c
│   │   │   │   │   ├── lv_cache_lru_rb.h
│   │   │   │   │   ├── lv_cache_private.h
│   │   │   │   │   ├── lv_image_cache.c
│   │   │   │   │   ├── lv_image_cache.h
│   │   │   │   │   ├── lv_image_header_cache.c
│   │   │   │   │   └── lv_image_header_cache.h
│   │   │   │   ├── lv_anim.c
│   │   │   │   ├── lv_anim.h
│   │   │   │   ├── lv_anim_private.h
│   │   │   │   ├── lv_anim_timeline.c
│   │   │   │   ├── lv_anim_timeline.h
│   │   │   │   ├── lv_area.c
│   │   │   │   ├── lv_area.h
│   │   │   │   ├── lv_area_private.h
│   │   │   │   ├── lv_array.c
│   │   │   │   ├── lv_array.h
│   │   │   │   ├── lv_assert.h
│   │   │   │   ├── lv_async.c
│   │   │   │   ├── lv_async.h
│   │   │   │   ├── lv_bidi.c
│   │   │   │   ├── lv_bidi.h
│   │   │   │   ├── lv_bidi_private.h
│   │   │   │   ├── lv_color.c
│   │   │   │   ├── lv_color.h
│   │   │   │   ├── lv_color_op.c
│   │   │   │   ├── lv_color_op.h
│   │   │   │   ├── lv_color_op_private.h
│   │   │   │   ├── lv_event.c
│   │   │   │   ├── lv_event.h
│   │   │   │   ├── lv_event_private.h
│   │   │   │   ├── lv_fs.c
│   │   │   │   ├── lv_fs.h
│   │   │   │   ├── lv_fs_private.h
│   │   │   │   ├── lv_ll.c
│   │   │   │   ├── lv_ll.h
│   │   │   │   ├── lv_log.c
│   │   │   │   ├── lv_log.h
│   │   │   │   ├── lv_lru.c
│   │   │   │   ├── lv_lru.h
│   │   │   │   ├── lv_math.c
│   │   │   │   ├── lv_math.h
│   │   │   │   ├── lv_matrix.c
│   │   │   │   ├── lv_matrix.h
│   │   │   │   ├── lv_palette.c
│   │   │   │   ├── lv_palette.h
│   │   │   │   ├── lv_profiler.h
│   │   │   │   ├── lv_profiler_builtin.c
│   │   │   │   ├── lv_profiler_builtin.h
│   │   │   │   ├── lv_profiler_builtin_private.h
│   │   │   │   ├── lv_rb.c
│   │   │   │   ├── lv_rb.h
│   │   │   │   ├── lv_rb_private.h
│   │   │   │   ├── lv_style.c
│   │   │   │   ├── lv_style.h
│   │   │   │   ├── lv_style_gen.c
│   │   │   │   ├── lv_style_gen.h
│   │   │   │   ├── lv_style_private.h
│   │   │   │   ├── lv_templ.c
│   │   │   │   ├── lv_templ.h
│   │   │   │   ├── lv_text.c
│   │   │   │   ├── lv_text.h
│   │   │   │   ├── lv_text_ap.c
│   │   │   │   ├── lv_text_ap.h
│   │   │   │   ├── lv_text_private.h
│   │   │   │   ├── lv_timer.c
│   │   │   │   ├── lv_timer.h
│   │   │   │   ├── lv_timer_private.h
│   │   │   │   ├── lv_types.h
│   │   │   │   ├── lv_utils.c
│   │   │   │   └── lv_utils.h
│   │   │   ├── osal/
│   │   │   │   ├── lv_cmsis_rtos2.c
│   │   │   │   ├── lv_cmsis_rtos2.h
│   │   │   │   ├── lv_freertos.c
│   │   │   │   ├── lv_freertos.h
│   │   │   │   ├── lv_mqx.c
│   │   │   │   ├── lv_mqx.h
│   │   │   │   ├── lv_os.c
│   │   │   │   ├── lv_os.h
│   │   │   │   ├── lv_os_none.c
│   │   │   │   ├── lv_os_none.h
│   │   │   │   ├── lv_os_private.h
│   │   │   │   ├── lv_pthread.c
│   │   │   │   ├── lv_pthread.h
│   │   │   │   ├── lv_rtthread.c
│   │   │   │   ├── lv_rtthread.h
│   │   │   │   ├── lv_windows.c
│   │   │   │   └── lv_windows.h
│   │   │   ├── others/
│   │   │   │   ├── file_explorer/
│   │   │   │   │   ├── lv_file_explorer.c
│   │   │   │   │   ├── lv_file_explorer.h
│   │   │   │   │   └── lv_file_explorer_private.h
│   │   │   │   ├── fragment/
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── lv_fragment.c
│   │   │   │   │   ├── lv_fragment.h
│   │   │   │   │   ├── lv_fragment_manager.c
│   │   │   │   │   └── lv_fragment_private.h
│   │   │   │   ├── gridnav/
│   │   │   │   │   ├── lv_gridnav.c
│   │   │   │   │   └── lv_gridnav.h
│   │   │   │   ├── ime/
│   │   │   │   │   ├── lv_ime_pinyin.c
│   │   │   │   │   ├── lv_ime_pinyin.h
│   │   │   │   │   └── lv_ime_pinyin_private.h
│   │   │   │   ├── imgfont/
│   │   │   │   │   ├── lv_imgfont.c
│   │   │   │   │   └── lv_imgfont.h
│   │   │   │   ├── monkey/
│   │   │   │   │   ├── lv_monkey.c
│   │   │   │   │   ├── lv_monkey.h
│   │   │   │   │   └── lv_monkey_private.h
│   │   │   │   ├── observer/
│   │   │   │   │   ├── lv_observer.c
│   │   │   │   │   ├── lv_observer.h
│   │   │   │   │   └── lv_observer_private.h
│   │   │   │   ├── snapshot/
│   │   │   │   │   ├── lv_snapshot.c
│   │   │   │   │   └── lv_snapshot.h
│   │   │   │   ├── sysmon/
│   │   │   │   │   ├── lv_sysmon.c
│   │   │   │   │   ├── lv_sysmon.h
│   │   │   │   │   └── lv_sysmon_private.h
│   │   │   │   └── vg_lite_tvg/
│   │   │   │       ├── vg_lite.h
│   │   │   │       ├── vg_lite_matrix.c
│   │   │   │       └── vg_lite_tvg.cpp
│   │   │   ├── stdlib/
│   │   │   │   ├── builtin/
│   │   │   │   │   ├── lv_mem_core_builtin.c
│   │   │   │   │   ├── lv_sprintf_builtin.c
│   │   │   │   │   ├── lv_string_builtin.c
│   │   │   │   │   ├── lv_tlsf.c
│   │   │   │   │   ├── lv_tlsf.h
│   │   │   │   │   └── lv_tlsf_private.h
│   │   │   │   ├── clib/
│   │   │   │   │   ├── lv_mem_core_clib.c
│   │   │   │   │   ├── lv_sprintf_clib.c
│   │   │   │   │   └── lv_string_clib.c
│   │   │   │   ├── lv_mem.c
│   │   │   │   ├── lv_mem.h
│   │   │   │   ├── lv_mem_private.h
│   │   │   │   ├── lv_sprintf.h
│   │   │   │   ├── lv_string.h
│   │   │   │   ├── micropython/
│   │   │   │   │   └── lv_mem_core_micropython.c
│   │   │   │   └── rtthread/
│   │   │   │       ├── lv_mem_core_rtthread.c
│   │   │   │       ├── lv_sprintf_rtthread.c
│   │   │   │       └── lv_string_rtthread.c
│   │   │   ├── themes/
│   │   │   │   ├── default/
│   │   │   │   │   ├── lv_theme_default.c
│   │   │   │   │   └── lv_theme_default.h
│   │   │   │   ├── lv_theme.c
│   │   │   │   ├── lv_theme.h
│   │   │   │   ├── lv_theme_private.h
│   │   │   │   ├── mono/
│   │   │   │   │   ├── lv_theme_mono.c
│   │   │   │   │   └── lv_theme_mono.h
│   │   │   │   └── simple/
│   │   │   │       ├── lv_theme_simple.c
│   │   │   │       └── lv_theme_simple.h
│   │   │   ├── tick/
│   │   │   │   ├── lv_tick.c
│   │   │   │   ├── lv_tick.h
│   │   │   │   └── lv_tick_private.h
│   │   │   └── widgets/
│   │   │       ├── animimage/
│   │   │       │   ├── lv_animimage.c
│   │   │       │   ├── lv_animimage.h
│   │   │       │   └── lv_animimage_private.h
│   │   │       ├── arc/
│   │   │       │   ├── lv_arc.c
│   │   │       │   ├── lv_arc.h
│   │   │       │   └── lv_arc_private.h
│   │   │       ├── bar/
│   │   │       │   ├── lv_bar.c
│   │   │       │   ├── lv_bar.h
│   │   │       │   └── lv_bar_private.h
│   │   │       ├── button/
│   │   │       │   ├── lv_button.c
│   │   │       │   ├── lv_button.h
│   │   │       │   └── lv_button_private.h
│   │   │       ├── buttonmatrix/
│   │   │       │   ├── lv_buttonmatrix.c
│   │   │       │   ├── lv_buttonmatrix.h
│   │   │       │   └── lv_buttonmatrix_private.h
│   │   │       ├── calendar/
│   │   │       │   ├── lv_calendar.c
│   │   │       │   ├── lv_calendar.h
│   │   │       │   ├── lv_calendar_chinese.c
│   │   │       │   ├── lv_calendar_chinese.h
│   │   │       │   ├── lv_calendar_chinese_private.h
│   │   │       │   ├── lv_calendar_header_arrow.c
│   │   │       │   ├── lv_calendar_header_arrow.h
│   │   │       │   ├── lv_calendar_header_dropdown.c
│   │   │       │   ├── lv_calendar_header_dropdown.h
│   │   │       │   └── lv_calendar_private.h
│   │   │       ├── canvas/
│   │   │       │   ├── lv_canvas.c
│   │   │       │   ├── lv_canvas.h
│   │   │       │   └── lv_canvas_private.h
│   │   │       ├── chart/
│   │   │       │   ├── lv_chart.c
│   │   │       │   ├── lv_chart.h
│   │   │       │   └── lv_chart_private.h
│   │   │       ├── checkbox/
│   │   │       │   ├── lv_checkbox.c
│   │   │       │   ├── lv_checkbox.h
│   │   │       │   └── lv_checkbox_private.h
│   │   │       ├── dropdown/
│   │   │       │   ├── lv_dropdown.c
│   │   │       │   ├── lv_dropdown.h
│   │   │       │   └── lv_dropdown_private.h
│   │   │       ├── image/
│   │   │       │   ├── lv_image.c
│   │   │       │   ├── lv_image.h
│   │   │       │   └── lv_image_private.h
│   │   │       ├── imagebutton/
│   │   │       │   ├── lv_imagebutton.c
│   │   │       │   ├── lv_imagebutton.h
│   │   │       │   └── lv_imagebutton_private.h
│   │   │       ├── keyboard/
│   │   │       │   ├── lv_keyboard.c
│   │   │       │   ├── lv_keyboard.h
│   │   │       │   └── lv_keyboard_private.h
│   │   │       ├── label/
│   │   │       │   ├── lv_label.c
│   │   │       │   ├── lv_label.h
│   │   │       │   └── lv_label_private.h
│   │   │       ├── led/
│   │   │       │   ├── lv_led.c
│   │   │       │   ├── lv_led.h
│   │   │       │   └── lv_led_private.h
│   │   │       ├── line/
│   │   │       │   ├── lv_line.c
│   │   │       │   ├── lv_line.h
│   │   │       │   └── lv_line_private.h
│   │   │       ├── list/
│   │   │       │   ├── lv_list.c
│   │   │       │   └── lv_list.h
│   │   │       ├── lottie/
│   │   │       │   ├── lv_lottie.c
│   │   │       │   ├── lv_lottie.h
│   │   │       │   └── lv_lottie_private.h
│   │   │       ├── menu/
│   │   │       │   ├── lv_menu.c
│   │   │       │   ├── lv_menu.h
│   │   │       │   └── lv_menu_private.h
│   │   │       ├── msgbox/
│   │   │       │   ├── lv_msgbox.c
│   │   │       │   ├── lv_msgbox.h
│   │   │       │   └── lv_msgbox_private.h
│   │   │       ├── objx_templ/
│   │   │       │   ├── lv_objx_templ.c
│   │   │       │   └── lv_objx_templ.h
│   │   │       ├── property/
│   │   │       │   ├── lv_dropdown_properties.c
│   │   │       │   ├── lv_image_properties.c
│   │   │       │   ├── lv_keyboard_properties.c
│   │   │       │   ├── lv_label_properties.c
│   │   │       │   ├── lv_obj_properties.c
│   │   │       │   ├── lv_obj_property_names.h
│   │   │       │   ├── lv_roller_properties.c
│   │   │       │   ├── lv_style_properties.c
│   │   │       │   ├── lv_style_properties.h
│   │   │       │   └── lv_textarea_properties.c
│   │   │       ├── roller/
│   │   │       │   ├── lv_roller.c
│   │   │       │   ├── lv_roller.h
│   │   │       │   └── lv_roller_private.h
│   │   │       ├── scale/
│   │   │       │   ├── lv_scale.c
│   │   │       │   ├── lv_scale.h
│   │   │       │   └── lv_scale_private.h
│   │   │       ├── slider/
│   │   │       │   ├── lv_slider.c
│   │   │       │   ├── lv_slider.h
│   │   │       │   └── lv_slider_private.h
│   │   │       ├── span/
│   │   │       │   ├── lv_span.c
│   │   │       │   ├── lv_span.h
│   │   │       │   └── lv_span_private.h
│   │   │       ├── spinbox/
│   │   │       │   ├── lv_spinbox.c
│   │   │       │   ├── lv_spinbox.h
│   │   │       │   └── lv_spinbox_private.h
│   │   │       ├── spinner/
│   │   │       │   ├── lv_spinner.c
│   │   │       │   └── lv_spinner.h
│   │   │       ├── switch/
│   │   │       │   ├── lv_switch.c
│   │   │       │   ├── lv_switch.h
│   │   │       │   └── lv_switch_private.h
│   │   │       ├── table/
│   │   │       │   ├── lv_table.c
│   │   │       │   ├── lv_table.h
│   │   │       │   └── lv_table_private.h
│   │   │       ├── tabview/
│   │   │       │   ├── lv_tabview.c
│   │   │       │   ├── lv_tabview.h
│   │   │       │   └── lv_tabview_private.h
│   │   │       ├── textarea/
│   │   │       │   ├── lv_textarea.c
│   │   │       │   ├── lv_textarea.h
│   │   │       │   └── lv_textarea_private.h
│   │   │       ├── tileview/
│   │   │       │   ├── lv_tileview.c
│   │   │       │   ├── lv_tileview.h
│   │   │       │   └── lv_tileview_private.h
│   │   │       └── win/
│   │   │           ├── lv_win.c
│   │   │           ├── lv_win.h
│   │   │           └── lv_win_private.h
│   │   ├── tests/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── FindLibDRM.cmake
│   │   │   ├── README.md
│   │   │   ├── config.yml
│   │   │   ├── gen_json/
│   │   │   │   └── test_gen_json.py
│   │   │   ├── main.py
│   │   │   ├── makefile/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── Makefile
│   │   │   │   └── test.c
│   │   │   ├── makefile_uefi/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── Makefile
│   │   │   │   ├── efi.h
│   │   │   │   └── test.c
│   │   │   ├── micropy_test/
│   │   │   │   ├── __init__.py
│   │   │   │   └── micropy.py
│   │   │   ├── src/
│   │   │   │   ├── lv_test_conf.h
│   │   │   │   ├── lv_test_conf_full.h
│   │   │   │   ├── lv_test_conf_minimal.h
│   │   │   │   ├── lv_test_conf_vg_lite.h
│   │   │   │   ├── lv_test_helpers.c
│   │   │   │   ├── lv_test_helpers.h
│   │   │   │   ├── lv_test_indev.c
│   │   │   │   ├── lv_test_indev.h
│   │   │   │   ├── lv_test_init.c
│   │   │   │   ├── lv_test_init.h
│   │   │   │   ├── test_assets/
│   │   │   │   │   ├── test_animimg001.c
│   │   │   │   │   ├── test_animimg002.c
│   │   │   │   │   ├── test_animimg003.c
│   │   │   │   │   ├── test_arc_bg.c
│   │   │   │   │   ├── test_font_1.c
│   │   │   │   │   ├── test_font_1.fnt
│   │   │   │   │   ├── test_font_1_bin.c
│   │   │   │   │   ├── test_font_2.c
│   │   │   │   │   ├── test_font_2.fnt
│   │   │   │   │   ├── test_font_2_bin.c
│   │   │   │   │   ├── test_font_3.c
│   │   │   │   │   ├── test_font_3.fnt
│   │   │   │   │   ├── test_font_3_bin.c
│   │   │   │   │   ├── test_font_montserrat_ascii_1bpp.c
│   │   │   │   │   ├── test_font_montserrat_ascii_2bpp.c
│   │   │   │   │   ├── test_font_montserrat_ascii_4bpp.c
│   │   │   │   │   ├── test_font_montserrat_ascii_4bpp_compressed.c
│   │   │   │   │   ├── test_imagebutton_left.c
│   │   │   │   │   ├── test_imagebutton_mid.c
│   │   │   │   │   ├── test_imagebutton_right.c
│   │   │   │   │   ├── test_img_caret_down.c
│   │   │   │   │   ├── test_img_cogwheel_a8.c
│   │   │   │   │   ├── test_img_cogwheel_argb8888.c
│   │   │   │   │   ├── test_img_cogwheel_i4.c
│   │   │   │   │   ├── test_img_cogwheel_rgb565.c
│   │   │   │   │   ├── test_img_cogwheel_rgb565a8.c
│   │   │   │   │   ├── test_img_cogwheel_xrgb8888.c
│   │   │   │   │   ├── test_img_emoji_F617.c
│   │   │   │   │   ├── test_img_lvgl_logo_jpg.c
│   │   │   │   │   ├── test_img_lvgl_logo_png.c
│   │   │   │   │   ├── test_kern_one_otf.c
│   │   │   │   │   ├── test_lottie_approve.c
│   │   │   │   │   ├── test_lottie_approve.json
│   │   │   │   │   ├── test_music_button_play.c
│   │   │   │   │   └── test_ubuntu_font.c
│   │   │   │   ├── test_cases/
│   │   │   │   │   ├── _test_template.c
│   │   │   │   │   ├── cache/
│   │   │   │   │   │   └── test_cache.c
│   │   │   │   │   ├── draw/
│   │   │   │   │   │   ├── test_clip_corner.c
│   │   │   │   │   │   ├── test_draw_blend.c
│   │   │   │   │   │   ├── test_draw_label.c
│   │   │   │   │   │   ├── test_draw_layer.c
│   │   │   │   │   │   ├── test_draw_sw_post_process.c
│   │   │   │   │   │   ├── test_draw_vector.c
│   │   │   │   │   │   ├── test_image_formats.c
│   │   │   │   │   │   ├── test_layer_transform.c
│   │   │   │   │   │   ├── test_render_to_al88.c
│   │   │   │   │   │   ├── test_render_to_argb8888.c
│   │   │   │   │   │   ├── test_render_to_i1.c
│   │   │   │   │   │   ├── test_render_to_l8.c
│   │   │   │   │   │   ├── test_render_to_rgb565.c
│   │   │   │   │   │   ├── test_render_to_rgb888.c
│   │   │   │   │   │   └── test_render_to_xrgb8888.c
│   │   │   │   │   ├── libs/
│   │   │   │   │   │   ├── test_barcode.c
│   │   │   │   │   │   ├── test_bin_decoder.c
│   │   │   │   │   │   ├── test_bmp.c
│   │   │   │   │   │   ├── test_font_stress.c
│   │   │   │   │   │   ├── test_freetype.c
│   │   │   │   │   │   ├── test_libjpeg_turbo.c
│   │   │   │   │   │   ├── test_libpng.c
│   │   │   │   │   │   ├── test_lodepng.c
│   │   │   │   │   │   ├── test_memmove.c
│   │   │   │   │   │   ├── test_qrcode.c
│   │   │   │   │   │   ├── test_tiny_ttf.c
│   │   │   │   │   │   └── test_tjpgd.c
│   │   │   │   │   ├── test_align_flex.c
│   │   │   │   │   ├── test_anim.c
│   │   │   │   │   ├── test_anim_timeline.c
│   │   │   │   │   ├── test_area.c
│   │   │   │   │   ├── test_array.c
│   │   │   │   │   ├── test_bindings.c
│   │   │   │   │   ├── test_config.c
│   │   │   │   │   ├── test_demo_stress.c
│   │   │   │   │   ├── test_demo_widgets.c
│   │   │   │   │   ├── test_draw_buf_stride.c
│   │   │   │   │   ├── test_event.c
│   │   │   │   │   ├── test_font_loader.c
│   │   │   │   │   ├── test_fs.c
│   │   │   │   │   ├── test_grid.c
│   │   │   │   │   ├── test_grid_fr.c
│   │   │   │   │   ├── test_gridnav.c
│   │   │   │   │   ├── test_group.c
│   │   │   │   │   ├── test_hover.c
│   │   │   │   │   ├── test_margin_align.c
│   │   │   │   │   ├── test_margin_flex.c
│   │   │   │   │   ├── test_margin_grid.c
│   │   │   │   │   ├── test_math.c
│   │   │   │   │   ├── test_mem.c
│   │   │   │   │   ├── test_observer.c
│   │   │   │   │   ├── test_profiler.c
│   │   │   │   │   ├── test_screen_load.c
│   │   │   │   │   ├── test_snapshot.c
│   │   │   │   │   ├── test_style.c
│   │   │   │   │   ├── test_txt.c
│   │   │   │   │   └── widgets/
│   │   │   │   │       ├── test_animimg.c
│   │   │   │   │       ├── test_arc.c
│   │   │   │   │       ├── test_bar.c
│   │   │   │   │       ├── test_btn.c
│   │   │   │   │       ├── test_btnmatrix.c
│   │   │   │   │       ├── test_calendar.c
│   │   │   │   │       ├── test_canvas.c
│   │   │   │   │       ├── test_chart.c
│   │   │   │   │       ├── test_checkbox.c
│   │   │   │   │       ├── test_dropdown.c
│   │   │   │   │       ├── test_image.c
│   │   │   │   │       ├── test_imagebutton.c
│   │   │   │   │       ├── test_imgfont.c
│   │   │   │   │       ├── test_keyboard.c
│   │   │   │   │       ├── test_label.c
│   │   │   │   │       ├── test_led.c
│   │   │   │   │       ├── test_line.c
│   │   │   │   │       ├── test_list.c
│   │   │   │   │       ├── test_lottie.c
│   │   │   │   │       ├── test_msgbox.c
│   │   │   │   │       ├── test_obj_flags.c
│   │   │   │   │       ├── test_obj_property.c
│   │   │   │   │       ├── test_obj_tree.c
│   │   │   │   │       ├── test_objid.c
│   │   │   │   │       ├── test_roller.c
│   │   │   │   │       ├── test_scale.c
│   │   │   │   │       ├── test_slider.c
│   │   │   │   │       ├── test_span.c
│   │   │   │   │       ├── test_spinbox.c
│   │   │   │   │       ├── test_spinner.c
│   │   │   │   │       ├── test_switch.c
│   │   │   │   │       ├── test_table.c
│   │   │   │   │       ├── test_tabview.c
│   │   │   │   │       ├── test_textarea.c
│   │   │   │   │       └── test_win.c
│   │   │   │   ├── test_files/
│   │   │   │   │   ├── fonts/
│   │   │   │   │   │   └── noto/
│   │   │   │   │   │       ├── OFL.txt
│   │   │   │   │   │       └── README.txt
│   │   │   │   │   └── readtest.txt
│   │   │   │   └── test_libs/
│   │   │   │       └── rnd_unicodes/
│   │   │   │           ├── lv_rnd_unicodes.c
│   │   │   │           ├── lv_rnd_unicodes.h
│   │   │   │           └── rnd_unicodes/
│   │   │   │               ├── .gitignore
│   │   │   │               ├── CMakeLists.txt
│   │   │   │               ├── LICENSE
│   │   │   │               ├── README.md
│   │   │   │               └── src/
│   │   │   │                   ├── library.c
│   │   │   │                   └── library.h
│   │   │   └── unity/
│   │   │       ├── generate_test_runner.rb
│   │   │       ├── run_test.erb
│   │   │       ├── type_sanitizer.rb
│   │   │       ├── unity.c
│   │   │       ├── unity.h
│   │   │       ├── unity_internals.h
│   │   │       ├── unity_support.c
│   │   │       ├── unity_support.h
│   │   │       └── yaml_helper.rb
│   │   └── zephyr/
│   │       ├── Kconfig
│   │       └── module.yml
│   ├── main.c
│   ├── manifest.json
│   ├── mouse_cursor_icon.c
│   └── toolchain.cmake
└── sound_app/
    ├── Makefile
    ├── aplay.cpp
    ├── aplay.h
    ├── cfg.h
    ├── ipc_udp.cpp
    ├── ipc_udp.h
    ├── opus.cpp
    ├── opus.h
    ├── record.cpp
    ├── record.h
    ├── sound_app.cpp
    └── 说明.md
Download .txt
Showing preview only (1,006K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10306 symbols across 977 files)

FILE: control_center/control_center.cpp
  type ListeningMode (line 53) | enum ListeningMode {
  type DeviceState (line 60) | enum DeviceState {
  function set_device_state (line 77) | static void set_device_state(DeviceState state)
  function send_device_state (line 82) | static void send_device_state(void)
  function send_stt (line 88) | static void send_stt(const std::string& text)
  function process_opus_data_downloaded (line 105) | static void process_opus_data_downloaded(const char *buffer, size_t size)
  function send_start_listening_req (line 128) | static void send_start_listening_req(ListeningMode mode)
  function process_hello_json (line 151) | static void process_hello_json(const char *buffer, size_t size)
  function process_other_json (line 228) | static void process_other_json(const char *buffer, size_t size)
  function process_txt_data_downloaded (line 301) | static void process_txt_data_downloaded(const char *buffer, size_t size)
  function process_opus_data_uploaded (line 321) | int process_opus_data_uploaded(char *buffer, size_t size, void *user_data)
  function process_ui_data (line 349) | int process_ui_data(char *buffer, size_t size, void *user_data)
  function read_uuid_from_config (line 363) | std::string read_uuid_from_config() {
  function write_uuid_to_config (line 394) | bool write_uuid_to_config(const std::string& uuid) {
  function main (line 414) | int main(int argc, char **argv)

FILE: control_center/http.cpp
  function WriteCallback (line 37) | size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* us...
  function active_device (line 49) | int active_device(p_http_data_t pHttpData, char *codebuf) {

FILE: control_center/http.h
  type http_data_t (line 6) | typedef struct http_data_t {

FILE: control_center/ipc_udp.cpp
  type upd_data_t (line 43) | struct upd_data_t {
    type sockaddr_in (line 48) | struct sockaddr_in
  function p_ipc_endpoint_t (line 69) | p_ipc_endpoint_t ipc_endpoint_create_udp(int port_local, int port_remote...
  function ipc_endpoint_destroy_udp (line 170) | void ipc_endpoint_destroy_udp(p_ipc_endpoint_t pendpoint)
  type sockaddr_in (line 190) | struct sockaddr_in
  type sockaddr (line 198) | struct sockaddr
  function udp_send_data (line 218) | static int udp_send_data(ipc_endpoint_t *pendpoint, const char *data, in...
  function udp_recv_data (line 256) | static int udp_recv_data(ipc_endpoint_t *pendpoint, unsigned char *data,...

FILE: control_center/ipc_udp.h
  type ipc_endpoint_t (line 24) | typedef struct ipc_endpoint_t {

FILE: control_center/json.hpp
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 261) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 272) | NLOHMANN_JSON_NAMESPACE_END
  function from_json (line 2597) | inline void from_json(const BasicJsonType& j, ENUM_TYPE& e)             ...
  type would_call_std_ (line 2936) | struct would_call_std_
  type value_t (line 2994) | enum class value_t : std::uint8_t
  function NLOHMANN_JSON_NAMESPACE_END (line 3059) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3152) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3198) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3389) | NLOHMANN_JSON_NAMESPACE_BEGIN
  class json_pointer (line 3538) | class json_pointer
  type ordered_map (line 3549) | struct ordered_map
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 3560) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4352) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4495) | NLOHMANN_JSON_NAMESPACE_BEGIN
  class parse_error (line 4621) | class parse_error : public exception
    method parse_error (line 4634) | static parse_error create(int id_, const position_t& pos, const std::s...
    method parse_error (line 4642) | static parse_error create(int id_, std::size_t byte_, const std::strin...
    method parse_error (line 4662) | parse_error(int id_, std::size_t byte_, const char* what_arg)
    method position_string (line 4665) | static std::string position_string(const position_t& pos)
  class invalid_iterator (line 4674) | class invalid_iterator : public exception
    method invalid_iterator (line 4678) | static invalid_iterator create(int id_, const std::string& what_arg, B...
    method JSON_HEDLEY_NON_NULL (line 4685) | JSON_HEDLEY_NON_NULL(3)
  class type_error (line 4692) | class type_error : public exception
    method type_error (line 4696) | static type_error create(int id_, const std::string& what_arg, BasicJs...
    method JSON_HEDLEY_NON_NULL (line 4703) | JSON_HEDLEY_NON_NULL(3)
  class out_of_range (line 4709) | class out_of_range : public exception
    method out_of_range (line 4713) | static out_of_range create(int id_, const std::string& what_arg, Basic...
    method JSON_HEDLEY_NON_NULL (line 4720) | JSON_HEDLEY_NON_NULL(3)
  class other_error (line 4726) | class other_error : public exception
    method other_error (line 4730) | static other_error create(int id_, const std::string& what_arg, BasicJ...
    method JSON_HEDLEY_NON_NULL (line 4737) | JSON_HEDLEY_NON_NULL(3)
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4766) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4792) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4800) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 4815) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5421) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 5442) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_END (line 5622) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 5668) | NLOHMANN_JSON_NAMESPACE_BEGIN
  type adl_serializer (line 6120) | struct adl_serializer
    method from_json (line 6125) | static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
    method from_json (line 6135) | static auto from_json(BasicJsonType && j) noexcept(
    method to_json (line 6145) | static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
  function set_subtype (line 6226) | void set_subtype(subtype_type subtype_) noexcept
  function subtype_type (line 6234) | constexpr subtype_type subtype() const noexcept
  function has_subtype (line 6241) | constexpr bool has_subtype() const noexcept
  function clear_subtype (line 6248) | void clear_subtype() noexcept
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 6287) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 6464) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 7033) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function reset (line 8330) | void reset() noexcept
  function char_int_type (line 8348) | char_int_type get()
  function unget (line 8385) | void unget()
  function add (line 8412) | void add(char_int_type c)
  function number_unsigned_t (line 8429) | constexpr number_unsigned_t get_number_unsigned() const noexcept
  function number_float_t (line 8435) | constexpr number_float_t get_number_float() const noexcept
  function string_t (line 8441) | string_t& get_string()
  function position_t (line 8456) | constexpr position_t get_position() const noexcept
  function get_token_string (line 8464) | std::string get_token_string() const
  function JSON_HEDLEY_RETURNS_NON_NULL (line 8488) | JSON_HEDLEY_RETURNS_NON_NULL
  function skip_bom (line 8502) | bool skip_bom()
  function skip_whitespace (line 8516) | void skip_whitespace()
  function token_type (line 8525) | token_type scan()
  function NLOHMANN_JSON_NAMESPACE_END (line 8650) | NLOHMANN_JSON_NAMESPACE_END
  type detail (line 8781) | namespace detail
    function unknown_size (line 8783) | constexpr std::size_t unknown_size()
    class json_sax_dom_parser (line 8802) | class json_sax_dom_parser
      method json_sax_dom_parser (line 8817) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exce...
      method json_sax_dom_parser (line 8822) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
      method json_sax_dom_parser (line 8823) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
      method json_sax_dom_parser (line 8824) | json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
      method json_sax_dom_parser (line 8825) | json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default;
      method null (line 8828) | bool null()
      method boolean (line 8834) | bool boolean(bool val)
      method number_integer (line 8840) | bool number_integer(number_integer_t val)
      method number_unsigned (line 8846) | bool number_unsigned(number_unsigned_t val)
      method number_float (line 8852) | bool number_float(number_float_t val, const string_t& /*unused*/)
      method string (line 8858) | bool string(string_t& val)
      method binary (line 8864) | bool binary(binary_t& val)
      method start_object (line 8870) | bool start_object(std::size_t len)
      method key (line 8893) | bool key(string_t& val)
      method end_object (line 8903) | bool end_object()
      method start_array (line 8921) | bool start_array(std::size_t len)
      method end_array (line 8942) | bool end_array()
      method parse_error (line 8961) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
      method is_errored (line 8973) | constexpr bool is_errored() const
      method handle_diagnostic_positions_for_json_value (line 8981) | void handle_diagnostic_positions_for_json_value(BasicJsonType& v)
      method JSON_HEDLEY_RETURNS_NON_NULL (line 9055) | JSON_HEDLEY_RETURNS_NON_NULL
    class json_sax_dom_callback_parser (line 9108) | class json_sax_dom_callback_parser
      method json_sax_dom_callback_parser (line 9120) | json_sax_dom_callback_parser(BasicJsonType& r,
      method json_sax_dom_callback_parser (line 9130) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = ...
      method json_sax_dom_callback_parser (line 9131) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default;
      method json_sax_dom_callback_parser (line 9132) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_...
      method json_sax_dom_callback_parser (line 9133) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser...
      method null (line 9136) | bool null()
      method boolean (line 9142) | bool boolean(bool val)
      method number_integer (line 9148) | bool number_integer(number_integer_t val)
      method number_unsigned (line 9154) | bool number_unsigned(number_unsigned_t val)
      method number_float (line 9160) | bool number_float(number_float_t val, const string_t& /*unused*/)
      method string (line 9166) | bool string(string_t& val)
      method binary (line 9172) | bool binary(binary_t& val)
      method start_object (line 9178) | bool start_object(std::size_t len)
      method key (line 9210) | bool key(string_t& val)
      method end_object (line 9227) | bool end_object()
      method start_array (line 9277) | bool start_array(std::size_t len)
      method end_array (line 9309) | bool end_array()
      method parse_error (line 9356) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/,
      method is_errored (line 9368) | constexpr bool is_errored() const
      method handle_diagnostic_positions_for_json_value (line 9376) | void handle_diagnostic_positions_for_json_value(BasicJsonType& v)
      method handle_value (line 9455) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool s...
    class json_sax_acceptor (line 9545) | class json_sax_acceptor
      method null (line 9554) | bool null()
      method boolean (line 9559) | bool boolean(bool /*unused*/)
      method number_integer (line 9564) | bool number_integer(number_integer_t /*unused*/)
      method number_unsigned (line 9569) | bool number_unsigned(number_unsigned_t /*unused*/)
      method number_float (line 9574) | bool number_float(number_float_t /*unused*/, const string_t& /*unuse...
      method string (line 9579) | bool string(string_t& /*unused*/)
      method binary (line 9584) | bool binary(binary_t& /*unused*/)
      method start_object (line 9589) | bool start_object(std::size_t /*unused*/ = detail::unknown_size())
      method key (line 9594) | bool key(string_t& /*unused*/)
      method end_object (line 9599) | bool end_object()
      method start_array (line 9604) | bool start_array(std::size_t /*unused*/ = detail::unknown_size())
      method end_array (line 9609) | bool end_array()
      method parse_error (line 9614) | bool parse_error(std::size_t /*unused*/, const std::string& /*unused...
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 9649) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 9789) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 12870) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13394) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 13510) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 13565) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function pointer (line 13867) | pointer operator->() const
  function iter_impl (line 13909) | iter_impl operator++(int)& // NOLINT(cert-dcl21-cpp)
  function iter_impl (line 13920) | iter_impl& operator++()
  function iter_impl (line 13960) | iter_impl operator--(int)& // NOLINT(cert-dcl21-cpp)
  function iter_impl (line 13971) | iter_impl& operator--()
  function iter_impl (line 14128) | iter_impl& operator+=(difference_type i)
  function iter_impl (line 14165) | iter_impl& operator-=(difference_type i)
  function iter_impl (line 14174) | iter_impl operator+(difference_type i) const
  function friend (line 14185) | friend iter_impl operator+(difference_type i, const iter_impl& it)
  function iter_impl (line 14196) | iter_impl operator-(difference_type i) const
  function difference_type (line 14207) | difference_type operator-(const iter_impl& other) const
  function reference (line 14236) | reference operator[](difference_type n) const
  function reference (line 14290) | reference value() const
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14325) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14458) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 14519) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_BASIC_JSON_TPL_DECLARATION (line 14539) | NLOHMANN_BASIC_JSON_TPL_DECLARATION
  function json_pointer (line 14551) | explicit json_pointer(const string_t& s = "")
  function string_t (line 14557) | string_t to_string() const
  function friend (line 14578) | friend std::ostream& operator<<(std::ostream& o, const json_pointer& ptr)
  function json_pointer (line 14587) | json_pointer& operator/=(const json_pointer& ptr)
  function json_pointer (line 14597) | json_pointer& operator/=(string_t token)
  function json_pointer (line 14605) | json_pointer& operator/=(std::size_t array_idx)
  function friend (line 14612) | friend json_pointer operator/(const json_pointer& lhs,
  function friend (line 14620) | friend json_pointer operator/(const json_pointer& lhs, string_t token) /...
  function friend (line 14627) | friend json_pointer operator/(const json_pointer& lhs, std::size_t array...
  function json_pointer (line 14634) | json_pointer parent_pointer() const
  function pop_back (line 14648) | void pop_back()
  function string_t (line 14660) | const string_t& back() const
  function push_back (line 14672) | void push_back(const string_t& token)
  function push_back (line 14679) | void push_back(string_t&& token)
  function empty (line 14686) | bool empty() const noexcept
  function BasicJsonType (line 14763) | BasicJsonType& get_and_create(BasicJsonType& j) const
  function BasicJsonType (line 14843) | BasicJsonType& get_unchecked(BasicJsonType* ptr) const
  function BasicJsonType (line 14911) | BasicJsonType& get_checked(BasicJsonType* ptr) const
  function BasicJsonType (line 14969) | const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const
  function BasicJsonType (line 15018) | const BasicJsonType& get_checked(const BasicJsonType* ptr) const
  function contains (line 15067) | bool contains(const BasicJsonType* ptr) const
  function split (line 15155) | static std::vector<string_t> split(const string_t& reference_string)
  function BasicJsonType (line 15295) | static BasicJsonType
  function convert (line 15324) | json_pointer<string_t> convert() const&
  function convert (line 15331) | json_pointer<string_t> convert()&&
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 15498) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 15625) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 15747) | NLOHMANN_JSON_NAMESPACE_END
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 17626) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function NLOHMANN_JSON_NAMESPACE_END (line 18723) | NLOHMANN_JSON_NAMESPACE_END
  function hex_bytes (line 19383) | static std::string hex_bytes(std::uint8_t byte)
  function is_negative_number (line 19394) | bool is_negative_number(NumberType x)
  function is_negative_number (line 19400) | bool is_negative_number(NumberType /*unused*/)
  function dump_integer (line 19420) | void dump_integer(NumberType x)
  function dump_float (line 19505) | void dump_float(number_float_t x)
  function dump_float (line 19526) | void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_dou...
  function dump_float (line 19534) | void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_do...
  function decode (line 19606) | static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, co...
  function number_unsigned_t (line 19646) | number_unsigned_t remove_sign(number_unsigned_t x)
  function number_unsigned_t (line 19661) | number_unsigned_t remove_sign(number_integer_t x) noexcept
  function ordered_map (line 19748) | ordered_map() noexcept(noexcept(Container())) : Container{} {}
  function ordered_map (line 19749) | explicit ordered_map(const Allocator& alloc) noexcept(noexcept(Container...
  function ordered_map (line 19751) | ordered_map(It first, It last, const Allocator& alloc = Allocator())
  function ordered_map (line 19753) | ordered_map(std::initializer_list<value_type> init, const Allocator& all...
  function emplace (line 19756) | std::pair<iterator, bool> emplace(const key_type& key, T&& t)
  function emplace (line 19771) | std::pair<iterator, bool> emplace(KeyType && key, T && t)
  function T (line 19784) | T& operator[](const key_type& key)
  function T (line 19791) | T & operator[](KeyType && key)
  function T (line 19796) | const T& operator[](const key_type& key) const
  function T (line 19803) | const T & operator[](KeyType && key) const
  function T (line 19808) | T& at(const key_type& key)
  function T (line 19823) | T & at(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-forward)
  function T (line 19836) | const T& at(const key_type& key) const
  function T (line 19851) | const T & at(KeyType && key) const // NOLINT(cppcoreguidelines-missing-s...
  function size_type (line 19864) | size_type erase(const key_type& key)
  function size_type (line 19885) | size_type erase(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-...
  function iterator (line 19904) | iterator erase(iterator pos)
  function iterator (line 19909) | iterator erase(iterator first, iterator last)
  function size_type (line 19962) | size_type count(const key_type& key) const
  function size_type (line 19976) | size_type count(KeyType && key) const // NOLINT(cppcoreguidelines-missin...
  function iterator (line 19988) | iterator find(const key_type& key)
  function iterator (line 20002) | iterator find(KeyType && key) // NOLINT(cppcoreguidelines-missing-std-fo...
  function const_iterator (line 20014) | const_iterator find(const key_type& key) const
  function insert (line 20026) | std::pair<iterator, bool> insert( value_type&& value )
  function insert (line 20031) | std::pair<iterator, bool> insert( const value_type& value )
  function insert (line 20049) | void insert(InputIt first, InputIt last)
  function NLOHMANN_JSON_NAMESPACE_BEGIN (line 20076) | NLOHMANN_JSON_NAMESPACE_BEGIN
  function set_parents (line 20705) | void set_parents()
  function iterator (line 20742) | iterator set_parents(iterator it, typename iterator::difference_type cou...
  function reference (line 20755) | reference set_parent(reference j, std::size_t old_capacity = detail::unk...
  function basic_json (line 20817) | basic_json(const value_t v)
  function basic_json (line 20825) | basic_json(std::nullptr_t = nullptr) noexcept // NOLINT(bugprone-excepti...
  function basic_json (line 20837) | basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-...
  function basic_json (line 20909) | basic_json(initializer_list_t init,
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20967) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20978) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 20989) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 21000) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 21011) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 21019) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 21027) | basic_json(size_type cnt, const basic_json& val):
  function basic_json (line 21039) | basic_json(InputIT first, InputIT last) // NOLINT(performance-unnecessar...
  function basic_json (line 21148) | basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {}
  function basic_json (line 21152) | basic_json(const basic_json& other)
  function basic_json (line 21225) | basic_json(basic_json&& other) noexcept
  function basic_json (line 21251) | basic_json& operator=(basic_json other) noexcept (
  function value_t (line 21320) | constexpr value_t type() const noexcept
  function is_primitive (line 21327) | constexpr bool is_primitive() const noexcept
  function is_structured (line 21334) | constexpr bool is_structured() const noexcept
  function is_null (line 21341) | constexpr bool is_null() const noexcept
  function is_boolean (line 21348) | constexpr bool is_boolean() const noexcept
  function is_number (line 21355) | constexpr bool is_number() const noexcept
  function is_number_integer (line 21362) | constexpr bool is_number_integer() const noexcept
  function is_number_unsigned (line 21369) | constexpr bool is_number_unsigned() const noexcept
  function is_number_float (line 21376) | constexpr bool is_number_float() const noexcept
  function is_object (line 21383) | constexpr bool is_object() const noexcept
  function is_array (line 21390) | constexpr bool is_array() const noexcept
  function is_string (line 21397) | constexpr bool is_string() const noexcept
  function is_binary (line 21404) | constexpr bool is_binary() const noexcept
  function is_discarded (line 21411) | constexpr bool is_discarded() const noexcept
  function object_t (line 21442) | object_t* get_impl_ptr(object_t* /*unused*/) noexcept
  function object_t (line 21448) | constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const...
  function array_t (line 21454) | array_t* get_impl_ptr(array_t* /*unused*/) noexcept
  function array_t (line 21460) | constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const n...
  function string_t (line 21466) | string_t* get_impl_ptr(string_t* /*unused*/) noexcept
  function string_t (line 21472) | constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const...
  function boolean_t (line 21478) | boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept
  function boolean_t (line 21484) | constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) con...
  function number_integer_t (line 21490) | number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept
  function number_integer_t (line 21496) | constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /...
  function number_unsigned_t (line 21502) | number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept
  function number_unsigned_t (line 21508) | constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t*...
  function number_float_t (line 21514) | number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept
  function number_float_t (line 21520) | constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unu...
  function binary_t (line 21526) | binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept
  function binary_t (line 21532) | constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const...
  function ReferenceType (line 21549) | static ReferenceType get_ref_impl(ThisType& obj)
  function get_ptr (line 21582) | constexpr auto get_ptr() const noexcept -> decltype(std::declval<const b...
  function ValueType (line 21674) | ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(no...
  function BasicJsonType (line 21699) | BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
  function basic_json (line 21722) | basic_json get_impl(detail::priority_tag<3> /*unused*/) const
  function get_impl (line 21735) | constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept
  function get (line 21811) | auto get() noexcept -> decltype(std::declval<basic_json_t&>().template g...
  function ValueType (line 21824) | ValueType & get_to(ValueType& v) const noexcept(noexcept(
  function ValueType (line 21837) | ValueType & get_to(ValueType& v) const
  function Array (line 21848) | Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays...
  function ReferenceType (line 21860) | ReferenceType get_ref()
  function ReferenceType (line 21871) | ReferenceType get_ref() const
  function binary_t (line 21930) | binary_t& get_binary()
  function binary_t (line 21942) | const binary_t& get_binary() const
  function reference (line 21964) | reference at(size_type idx)
  function const_reference (line 21987) | const_reference at(size_type idx) const
  function reference (line 22010) | reference at(const typename object_t::key_type& key)
  function reference (line 22030) | reference at(KeyType && key)
  function const_reference (line 22048) | const_reference at(const typename object_t::key_type& key) const
  function const_reference (line 22068) | const_reference at(KeyType && key) const
  function reference (line 22086) | reference operator[](size_type idx)
  function const_reference (line 22132) | const_reference operator[](size_type idx) const
  function reference (line 22145) | reference operator[](typename object_t::key_type key) // NOLINT(performa...
  function const_reference (line 22167) | const_reference operator[](const typename object_t::key_type& key) const
  function reference (line 22183) | reference operator[](T* key)
  function const_reference (line 22189) | const_reference operator[](T* key) const
  function reference (line 22198) | reference operator[](KeyType && key)
  function const_reference (line 22222) | const_reference operator[](KeyType && key) const
  class ValueType (line 22248) | class ValueType
  function ReturnType (line 22277) | ReturnType value(const typename object_t::key_type& key, ValueType && de...
  function ValueType (line 22303) | ValueType value(KeyType && key, const ValueType& default_value) const
  function ReturnType (line 22330) | ReturnType value(KeyType && key, ValueType && default_value) const
  function ValueType (line 22353) | ValueType value(const json_pointer& ptr, const ValueType& default_value)...
  function ReturnType (line 22378) | ReturnType value(const json_pointer& ptr, ValueType && default_value) const
  function ValueType (line 22402) | ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, cons...
  function ReturnType (line 22413) | ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, Val...
  function reference (line 22420) | reference front()
  function const_reference (line 22427) | const_reference front() const
  function reference (line 22434) | reference back()
  function const_reference (line 22443) | const_reference back() const
  function IteratorType (line 22455) | IteratorType erase(IteratorType pos) // NOLINT(performance-unnecessary-v...
  function IteratorType (line 22525) | IteratorType erase(IteratorType first, IteratorType last) // NOLINT(perf...
  function erase_internal (line 22593) | private:
  function size_type (line 22609) | size_type erase_internal(KeyType && key)
  function size_type (line 22641) | size_type erase(KeyType && key)
  function erase (line 22648) | void erase(const size_type idx)
  function iterator (line 22677) | iterator find(const typename object_t::key_type& key)
  function const_iterator (line 22691) | const_iterator find(const typename object_t::key_type& key) const
  function iterator (line 22707) | iterator find(KeyType && key)
  function const_iterator (line 22723) | const_iterator find(KeyType && key) const
  function size_type (line 22737) | size_type count(const typename object_t::key_type& key) const
  function size_type (line 22747) | size_type count(KeyType && key) const
  function contains (line 22755) | bool contains(const typename object_t::key_type& key) const
  function contains (line 22764) | bool contains(KeyType && key) const
  function contains (line 22771) | bool contains(const json_pointer& ptr) const
  function contains (line 22778) | bool contains(const typename ::nlohmann::json_pointer<BasicJsonType>& pt...
  function iterator (line 22794) | iterator begin() noexcept
  function const_iterator (line 22803) | const_iterator begin() const noexcept
  function const_iterator (line 22810) | const_iterator cbegin() const noexcept
  function iterator (line 22819) | iterator end() noexcept
  function const_iterator (line 22828) | const_iterator end() const noexcept
  function const_iterator (line 22835) | const_iterator cend() const noexcept
  function reverse_iterator (line 22844) | reverse_iterator rbegin() noexcept
  function const_reverse_iterator (line 22851) | const_reverse_iterator rbegin() const noexcept
  function reverse_iterator (line 22858) | reverse_iterator rend() noexcept
  function const_reverse_iterator (line 22865) | const_reverse_iterator rend() const noexcept
  function const_reverse_iterator (line 22872) | const_reverse_iterator crbegin() const noexcept
  function const_reverse_iterator (line 22879) | const_reverse_iterator crend() const noexcept
  function iterator_wrapper (line 22891) | static iteration_proxy<iterator> iterator_wrapper(reference ref) noexcept
  function iterator_wrapper (line 22902) | static iteration_proxy<const_iterator> iterator_wrapper(const_reference ...
  function items (line 22909) | iteration_proxy<iterator> items() noexcept
  function items (line 22916) | iteration_proxy<const_iterator> items() const noexcept
  function empty (line 22932) | bool empty() const noexcept
  function size_type (line 22971) | size_type size() const noexcept
  function size_type (line 23010) | size_type max_size() const noexcept
  function clear (line 23053) | void clear() noexcept
  function push_back (line 23114) | void push_back(basic_json&& val)
  function reference (line 23139) | reference operator+=(basic_json&& val)
  function push_back (line 23147) | void push_back(const basic_json& val)
  function reference (line 23171) | reference operator+=(const basic_json& val)
  function push_back (line 23179) | void push_back(const typename object_t::value_type& val)
  function reference (line 23202) | reference operator+=(const typename object_t::value_type& val)
  function push_back (line 23210) | void push_back(initializer_list_t init)
  function reference (line 23226) | reference operator+=(initializer_list_t init)
  function reference (line 23235) | reference emplace_back(Args&& ... args)
  function emplace (line 23260) | std::pair<iterator, bool> emplace(Args&& ... args)
  function iterator (line 23292) | iterator insert_iterator(const_iterator pos, Args&& ... args) // NOLINT(...
  function iterator (line 23311) | iterator insert(const_iterator pos, const basic_json& val) // NOLINT(per...
  function iterator (line 23331) | iterator insert(const_iterator pos, basic_json&& val) // NOLINT(performa...
  function iterator (line 23338) | iterator insert(const_iterator pos, size_type cnt, const basic_json& val...
  function iterator (line 23358) | iterator insert(const_iterator pos, const_iterator first, const_iterator...
  function iterator (line 23389) | iterator insert(const_iterator pos, initializer_list_t ilist) // NOLINT(...
  function insert (line 23409) | void insert(const_iterator first, const_iterator last) // NOLINT(perform...
  function update (line 23435) | void update(const_reference j, bool merge_objects = false)
  function update (line 23442) | void update(const_iterator first, const_iterator last, bool merge_object...
  function swap (line 23489) | void swap(reference other) noexcept (
  function friend (line 23506) | friend void swap(reference left, reference right) noexcept (
  function swap (line 23518) | void swap(array_t& other) // NOLINT(bugprone-exception-escape,cppcoregui...
  function swap (line 23534) | void swap(object_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
  function swap (line 23550) | void swap(string_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
  function swap (line 23566) | void swap(binary_t& other) // NOLINT(bugprone-exception-escape,cppcoregu...
  function swap (line 23582) | void swap(typename binary_t::container_type& other) // NOLINT(bugprone-e...
  function else (line 23671) | else if(compares_unordered(lhs, rhs))\
  function compares_unordered (line 23700) | bool compares_unordered(const_reference rhs, bool inverse = false) const...
  function friend (line 23813) | friend bool operator==(const_reference lhs, const_reference rhs) noexcept
  function friend (line 23845) | friend bool operator!=(const_reference lhs, const_reference rhs) noexcept
  function friend (line 23902) | friend bool operator<=(const_reference lhs, const_reference rhs) noexcept
  function friend (line 23931) | friend bool operator>(const_reference lhs, const_reference rhs) noexcept
  function friend (line 23961) | friend bool operator>=(const_reference lhs, const_reference rhs) noexcept
  function friend (line 24002) | friend std::ostream& operator<<(std::ostream& o, const basic_json& j)
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24041) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24055) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 24069) | static basic_json parse(detail::span_input_adapter&& i,
  function accept (line 24082) | static bool accept(InputType&& i,
  function accept (line 24091) | static bool accept(IteratorType first, IteratorType last,
  function accept (line 24099) | static bool accept(detail::span_input_adapter&& i,
  function sax_parse (line 24109) | static bool sax_parse(InputType&& i, SAX* sax,
  function sax_parse (line 24124) | static bool sax_parse(IteratorType first, IteratorType last, SAX* sax,
  function sax_parse (line 24143) | static bool sax_parse(detail::span_input_adapter&& i, SAX* sax,
  function JSON_HEDLEY_RETURNS_NON_NULL (line 24184) | JSON_HEDLEY_RETURNS_NON_NULL
  type data (line 24216) | struct data
    method data (line 24224) | data(const value_t v)
    method data (line 24229) | data(size_type cnt, const basic_json& val)
    method data (line 24235) | data() noexcept = default;
    method data (line 24236) | data(data&&) noexcept = default;
    method data (line 24237) | data(const data&) noexcept = delete;
    method data (line 24238) | data& operator=(data&&) noexcept = delete;
    method data (line 24239) | data& operator=(const data&) noexcept = delete;
  function end_pos (line 24265) | constexpr std::size_t end_pos() const noexcept
  function to_cbor (line 24290) | static void to_cbor(const basic_json& j, detail::output_adapter<std::uin...
  function to_cbor (line 24297) | static void to_cbor(const basic_json& j, detail::output_adapter<char> o)
  function to_msgpack (line 24304) | static std::vector<std::uint8_t> to_msgpack(const basic_json& j)
  function to_msgpack (line 24313) | static void to_msgpack(const basic_json& j, detail::output_adapter<std::...
  function to_msgpack (line 24320) | static void to_msgpack(const basic_json& j, detail::output_adapter<char> o)
  function to_ubjson (line 24327) | static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
  function to_ubjson (line 24338) | static void to_ubjson(const basic_json& j, detail::output_adapter<std::u...
  function to_ubjson (line 24346) | static void to_ubjson(const basic_json& j, detail::output_adapter<char> o,
  function to_bjdata (line 24354) | static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
  function to_bjdata (line 24366) | static void to_bjdata(const basic_json& j, detail::output_adapter<std::u...
  function to_bjdata (line 24375) | static void to_bjdata(const basic_json& j, detail::output_adapter<char> o,
  function to_bson (line 24384) | static std::vector<std::uint8_t> to_bson(const basic_json& j)
  function to_bson (line 24393) | static void to_bson(const basic_json& j, detail::output_adapter<std::uin...
  function to_bson (line 24400) | static void to_bson(const basic_json& j, detail::output_adapter<char> o)
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24408) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24424) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 24440) | static basic_json from_cbor(const T* ptr, std::size_t len,
  function basic_json (line 24450) | static basic_json from_cbor(detail::span_input_adapter&& i,
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24466) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24481) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 24496) | static basic_json from_msgpack(const T* ptr, std::size_t len,
  function basic_json (line 24505) | static basic_json from_msgpack(detail::span_input_adapter&& i,
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24520) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24535) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 24550) | static basic_json from_ubjson(const T* ptr, std::size_t len,
  function basic_json (line 24559) | static basic_json from_ubjson(detail::span_input_adapter&& i,
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24574) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24589) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24604) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 24619) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function basic_json (line 24634) | static basic_json from_bson(const T* ptr, std::size_t len,
  function basic_json (line 24643) | static basic_json from_bson(detail::span_input_adapter&& i,
  function reference (line 24665) | reference operator[](const json_pointer& ptr)
  function reference (line 24672) | reference operator[](const ::nlohmann::json_pointer<BasicJsonType>& ptr)
  function const_reference (line 24679) | const_reference operator[](const json_pointer& ptr) const
  function const_reference (line 24686) | const_reference operator[](const ::nlohmann::json_pointer<BasicJsonType>...
  function reference (line 24693) | reference at(const json_pointer& ptr)
  function reference (line 24700) | reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr)
  function const_reference (line 24707) | const_reference at(const json_pointer& ptr) const
  function const_reference (line 24714) | const_reference at(const ::nlohmann::json_pointer<BasicJsonType>& ptr) c...
  function basic_json (line 24721) | basic_json flatten() const
  function basic_json (line 24730) | basic_json unflatten() const
  function patch_inplace (line 24746) | void patch_inplace(const basic_json& json_patch)
  function basic_json (line 25017) | basic_json patch(const basic_json& json_patch) const
  function JSON_HEDLEY_WARN_UNUSED_RESULT (line 25026) | JSON_HEDLEY_WARN_UNUSED_RESULT
  function merge_patch (line 25169) | void merge_patch(const basic_json& apply_patch)
  function NLOHMANN_BASIC_JSON_TPL_DECLARATION (line 25200) | NLOHMANN_BASIC_JSON_TPL_DECLARATION
  function NLOHMANN_JSON_NAMESPACE_END (line 25237) | NLOHMANN_JSON_NAMESPACE_END

FILE: control_center/uuid.cpp
  function get_wireless_mac_address (line 52) | std::string get_wireless_mac_address() {
  function generate_uuid (line 114) | std::string generate_uuid() {
  function main (line 153) | int main() {

FILE: control_center/websocket_client.cpp
  function on_message (line 67) | static void on_message(client *c, websocketpp::connection_hdl hdl, clien...
  function verify_subject_alternative_name (line 101) | static bool verify_subject_alternative_name(const char * hostname, X509 ...
  function verify_common_name (line 141) | static bool verify_common_name(char const * hostname, X509 * cert) {
  function verify_certificate (line 179) | static bool verify_certificate(const char * hostname, bool preverified, ...
  function context_ptr (line 210) | static context_ptr on_tls_init(const char * hostname, websocketpp::conne...
  function on_open (line 237) | static void on_open(client* c, websocketpp::connection_hdl hdl) {
  function on_close (line 274) | static void on_close(client *c, websocketpp::connection_hdl hdl) {
  function websocket_connect (line 293) | static int websocket_connect(client *c) {
  function websocket_send_binary (line 396) | int websocket_send_binary(const char *data, int size) {
  function websocket_send_text (line 422) | int websocket_send_text(const char *data, int size) {
  function websocket_set_callbacks (line 447) | int websocket_set_callbacks(ws_recv_callback_t bin_cb, ws_recv_callback_...
  function websocket_start (line 459) | int websocket_start() {

FILE: control_center/websocket_client.h
  type websocket_data_t (line 9) | typedef struct websocket_data_t {

FILE: gui/lv_100ask_xz_ai/src/cJSON.c
  type error (line 88) | typedef struct {
  function cJSON_GetErrorPtr (line 94) | CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void)
  function cJSON_GetStringValue (line 99) | CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item)
  function cJSON_GetNumberValue (line 109) | CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item)
  function cJSON_Version (line 124) | CJSON_PUBLIC(const char*) cJSON_Version(void)
  function case_insensitive_strcmp (line 133) | static int case_insensitive_strcmp(const unsigned char *string1, const u...
  type internal_hooks (line 156) | typedef struct internal_hooks
  function internal_free (line 169) | static void CJSON_CDECL internal_free(void *pointer)
  function cJSON_InitHooks (line 209) | CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks)
  function cJSON (line 241) | static cJSON *cJSON_New_Item(const internal_hooks * const hooks)
  function cJSON_Delete (line 253) | CJSON_PUBLIC(void) cJSON_Delete(cJSON *item)
  function get_decimal_point (line 277) | static unsigned char get_decimal_point(void)
  type parse_buffer (line 287) | typedef struct
  function cJSON_bool (line 305) | static cJSON_bool parse_number(cJSON * const item, parse_buffer * const ...
  function cJSON_SetNumberHelper (line 382) | CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number)
  function cJSON_SetValuestring (line 400) | CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valu...
  type printbuffer (line 427) | typedef struct
  function update_offset (line 525) | static void update_offset(printbuffer * const buffer)
  function cJSON_bool (line 538) | static cJSON_bool compare_double(double a, double b)
  function cJSON_bool (line 545) | static cJSON_bool print_number(const cJSON * const item, printbuffer * c...
  function parse_hex4 (line 615) | static unsigned parse_hex4(const unsigned char * const input)
  function utf16_literal_to_utf8 (line 652) | static unsigned char utf16_literal_to_utf8(const unsigned char * const i...
  function cJSON_bool (line 773) | static cJSON_bool parse_string(cJSON * const item, parse_buffer * const ...
  function cJSON_bool (line 902) | static cJSON_bool print_string_ptr(const unsigned char * const input, pr...
  function cJSON_bool (line 1024) | static cJSON_bool print_string(const cJSON * const item, printbuffer * c...
  function parse_buffer (line 1038) | static parse_buffer *buffer_skip_whitespace(parse_buffer * const buffer)
  function parse_buffer (line 1064) | static parse_buffer *skip_utf8_bom(parse_buffer * const buffer)
  function cJSON_ParseWithOpts (line 1079) | CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char ...
  function cJSON_ParseWithLengthOpts (line 1095) | CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_...
  function cJSON_Parse (line 1175) | CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value)
  function cJSON_ParseWithLength (line 1180) | CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t bu...
  function cJSON_Print (line 1252) | CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item)
  function cJSON_PrintUnformatted (line 1257) | CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item)
  function cJSON_PrintBuffered (line 1262) | CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffe...
  function cJSON_PrintPreallocated (line 1292) | CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buff...
  function cJSON_bool (line 1312) | static cJSON_bool parse_value(cJSON * const item, parse_buffer * const i...
  function cJSON_bool (line 1367) | static cJSON_bool print_value(const cJSON * const item, printbuffer * co...
  function cJSON_bool (line 1441) | static cJSON_bool parse_array(cJSON * const item, parse_buffer * const i...
  function cJSON_bool (line 1539) | static cJSON_bool print_array(const cJSON * const item, printbuffer * co...
  function cJSON_bool (line 1601) | static cJSON_bool parse_object(cJSON * const item, parse_buffer * const ...
  function cJSON_bool (line 1714) | static cJSON_bool print_object(const cJSON * const item, printbuffer * c...
  function cJSON_GetArraySize (line 1828) | CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array)
  function cJSON (line 1851) | static cJSON* get_array_item(const cJSON *array, size_t index)
  function cJSON_GetArrayItem (line 1870) | CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index)
  function cJSON (line 1880) | static cJSON *get_object_item(const cJSON * const object, const char * c...
  function cJSON_GetObjectItem (line 1912) | CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, co...
  function cJSON_GetObjectItemCaseSensitive (line 1917) | CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * con...
  function cJSON_HasObjectItem (line 1922) | CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const ...
  function suffix_object (line 1928) | static void suffix_object(cJSON *prev, cJSON *item)
  function cJSON (line 1935) | static cJSON *create_reference(const cJSON *item, const internal_hooks *...
  function cJSON_bool (line 1956) | static cJSON_bool add_item_to_array(cJSON *array, cJSON *item)
  function cJSON_AddItemToArray (line 1990) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item)
  function cJSON_bool (line 2011) | static cJSON_bool add_item_to_object(cJSON * const object, const char * ...
  function cJSON_AddItemToObject (line 2048) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char...
  function cJSON_AddItemToObjectCS (line 2054) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const ch...
  function cJSON_AddItemReferenceToArray (line 2059) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJS...
  function cJSON_AddItemReferenceToObject (line 2069) | CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, c...
  function cJSON_AddNullToObject (line 2079) | CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const c...
  function cJSON_AddTrueToObject (line 2091) | CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const c...
  function cJSON_AddFalseToObject (line 2103) | CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const ...
  function cJSON_AddBoolToObject (line 2115) | CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const c...
  function cJSON_AddNumberToObject (line 2127) | CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const...
  function cJSON_AddStringToObject (line 2139) | CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const...
  function cJSON_AddRawToObject (line 2151) | CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const ch...
  function cJSON_AddObjectToObject (line 2163) | CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const...
  function cJSON_AddArrayToObject (line 2175) | CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const ...
  function cJSON_DetachItemViaPointer (line 2187) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * ...
  function cJSON_DetachItemFromArray (line 2223) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which)
  function cJSON_DeleteItemFromArray (line 2233) | CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which)
  function cJSON_DetachItemFromObject (line 2238) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const ch...
  function cJSON_DetachItemFromObjectCaseSensitive (line 2245) | CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *obj...
  function cJSON_DeleteItemFromObject (line 2252) | CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char ...
  function cJSON_DeleteItemFromObjectCaseSensitive (line 2257) | CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object...
  function cJSON_InsertItemInArray (line 2263) | CJSON_PUBLIC(cJSON_bool) cJSON_InsertItemInArray(cJSON *array, int which...
  function cJSON_ReplaceItemViaPointer (line 2292) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const paren...
  function cJSON_ReplaceItemInArray (line 2341) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInArray(cJSON *array, int whic...
  function cJSON_bool (line 2351) | static cJSON_bool replace_item_in_object(cJSON *object, const char *stri...
  function cJSON_ReplaceItemInObject (line 2374) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObject(cJSON *object, const ...
  function cJSON_ReplaceItemInObjectCaseSensitive (line 2379) | CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *o...
  function cJSON_CreateNull (line 2385) | CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void)
  function cJSON_CreateTrue (line 2396) | CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void)
  function cJSON_CreateFalse (line 2407) | CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void)
  function cJSON_CreateBool (line 2418) | CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean)
  function cJSON_CreateNumber (line 2429) | CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num)
  function cJSON_CreateString (line 2455) | CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string)
  function cJSON_CreateStringReference (line 2472) | CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string)
  function cJSON_CreateObjectReference (line 2484) | CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child)
  function cJSON_CreateArrayReference (line 2495) | CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child) {
  function cJSON_CreateRaw (line 2505) | CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw)
  function cJSON_CreateArray (line 2522) | CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void)
  function cJSON_CreateObject (line 2533) | CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void)
  function cJSON_CreateIntArray (line 2545) | CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
  function cJSON_CreateFloatArray (line 2585) | CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int c...
  function cJSON_CreateDoubleArray (line 2625) | CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int...
  function cJSON_CreateStringArray (line 2665) | CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings...
  function cJSON_Duplicate (line 2706) | CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recu...
  function skip_oneline_comment (line 2789) | static void skip_oneline_comment(char **input)
  function skip_multiline_comment (line 2802) | static void skip_multiline_comment(char **input)
  function minify_string (line 2816) | static void minify_string(char **input, char **output) {
  function cJSON_Minify (line 2838) | CJSON_PUBLIC(void) cJSON_Minify(char *json)
  function cJSON_IsInvalid (line 2886) | CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item)
  function cJSON_IsFalse (line 2896) | CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item)
  function cJSON_IsTrue (line 2906) | CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item)
  function cJSON_IsBool (line 2917) | CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item)
  function cJSON_IsNull (line 2926) | CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item)
  function cJSON_IsNumber (line 2936) | CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item)
  function cJSON_IsString (line 2946) | CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item)
  function cJSON_IsArray (line 2956) | CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item)
  function cJSON_IsObject (line 2966) | CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item)
  function cJSON_IsRaw (line 2976) | CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item)
  function cJSON_Compare (line 2986) | CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSO...
  function cJSON_malloc (line 3111) | CJSON_PUBLIC(void *) cJSON_malloc(size_t size)
  function cJSON_free (line 3116) | CJSON_PUBLIC(void) cJSON_free(void *object)

FILE: gui/lv_100ask_xz_ai/src/cJSON.h
  type cJSON (line 103) | typedef struct cJSON
  type cJSON_Hooks (line 125) | typedef struct cJSON_Hooks
  type cJSON_bool (line 132) | typedef int cJSON_bool;

FILE: gui/lv_100ask_xz_ai/src/ipc_udp.c
  type upd_data_t (line 43) | typedef struct upd_data_t {
  function p_ipc_endpoint_t (line 69) | p_ipc_endpoint_t ipc_endpoint_create_udp(int port_local, int port_remote...
  function ipc_endpoint_destroy_udp (line 170) | void ipc_endpoint_destroy_udp(p_ipc_endpoint_t pendpoint)
  type sockaddr_in (line 190) | struct sockaddr_in
  type sockaddr (line 198) | struct sockaddr
  function udp_send_data (line 218) | static int udp_send_data(ipc_endpoint_t *pendpoint, const char *data, in...
  function udp_recv_data (line 256) | static int udp_recv_data(ipc_endpoint_t *pendpoint, unsigned char *data,...

FILE: gui/lv_100ask_xz_ai/src/ipc_udp.h
  type ipc_endpoint_t (line 23) | typedef struct ipc_endpoint_t {

FILE: gui/lv_100ask_xz_ai/src/lv_100ask_xz_ai_main.c
  type T_lv_100ask_xz_ai (line 57) | typedef struct _lv_100ask_xz_ai {
  function lv_100ask_xz_ai_main (line 99) | void lv_100ask_xz_ai_main(void)
  function SetStateString (line 157) | void SetStateString(const char *str)
  function SetText (line 164) | void SetText(const char *str)
  function SetEmotion (line 171) | void SetEmotion(const char *jpgFile)
  function OnClicked (line 179) | void OnClicked(void)
  function lv_100ask_xz_ai_main_deinit (line 205) | static void lv_100ask_xz_ai_main_deinit(void)
  function init_freetype (line 215) | static void init_freetype(void)
  function deinit_freetype (line 234) | static void deinit_freetype(void)
  function init_style (line 241) | static void init_style(void)
  function screen_onclicked_event_cb (line 254) | static void screen_onclicked_event_cb(lv_event_t * e)

FILE: gui/lv_100ask_xz_ai/src/ui_system.c
  type DeviceState (line 35) | typedef enum DeviceState {
  function process_ui_data (line 97) | static int process_ui_data(char *buffer, size_t size, void *user_data)
  function ui_system_init (line 150) | int ui_system_init(void)

FILE: gui/lvgl/demos/benchmark/lv_demo_benchmark.c
  type scene_dsc_t (line 39) | typedef struct {
  function empty_screen_cb (line 75) | static void empty_screen_cb(void)
  function moving_wallpaper_cb (line 80) | static void moving_wallpaper_cb(void)
  function single_rectangle_cb (line 92) | static void single_rectangle_cb(void)
  function multiple_rectangles_cb (line 104) | static void multiple_rectangles_cb(void)
  function multiple_rgb_images_cb (line 120) | static void multiple_rgb_images_cb(void)
  function multiple_argb_images_cb (line 146) | static void multiple_argb_images_cb(void)
  function rotated_argb_image_cb (line 172) | static void rotated_argb_image_cb(void)
  function multiple_labels_cb (line 199) | static void multiple_labels_cb(void)
  function screen_sized_text_cb (line 222) | static void screen_sized_text_cb(void)
  function multiple_arcs_cb (line 242) | static void multiple_arcs_cb(void)
  function containers_cb (line 277) | static void containers_cb(void)
  function containers_with_overlay_cb (line 300) | static void containers_with_overlay_cb(void)
  function containers_with_opa_cb (line 325) | static void containers_with_opa_cb(void)
  function containers_with_opa_layer_cb (line 348) | static void containers_with_opa_layer_cb(void)
  function containers_with_scrolling_cb (line 371) | static void containers_with_scrolling_cb(void)
  function widgets_demo_cb (line 387) | static void widgets_demo_cb(void)
  function lv_demo_benchmark (line 435) | void lv_demo_benchmark(void)
  function load_scene (line 473) | static void load_scene(uint32_t scene)
  function next_scene_timer_cb (line 496) | static void next_scene_timer_cb(lv_timer_t * timer)
  function sysmon_perf_observer_cb (line 513) | static void sysmon_perf_observer_cb(lv_observer_t * observer, lv_subject...
  function table_draw_task_event_cb (line 551) | static void table_draw_task_event_cb(lv_event_t * e)
  function summary_create (line 583) | static void summary_create(void)
  function color_anim_cb (line 687) | static void color_anim_cb(void * var, int32_t v)
  function color_anim (line 694) | static void color_anim(lv_obj_t * obj)
  function arc_anim_cb (line 706) | static void arc_anim_cb(void * var, int32_t v)
  function arc_anim (line 711) | static void arc_anim(lv_obj_t * obj)
  function scroll_anim_y_cb (line 726) | static void scroll_anim_y_cb(void * var, int32_t v)
  function scroll_anim (line 731) | static void scroll_anim(lv_obj_t * obj, int32_t y_max)
  function shake_anim_y_cb (line 746) | static void shake_anim_y_cb(void * var, int32_t v)
  function shake_anim (line 751) | static void shake_anim(lv_obj_t * obj, int32_t y_max)
  function lv_obj_t (line 767) | static lv_obj_t * card_create(void)
  function rnd_reset (line 797) | static void rnd_reset(void)
  function rnd_next (line 802) | static int32_t rnd_next(int32_t min, int32_t max)

FILE: gui/lvgl/demos/flex_layout/lv_demo_flex_layout_ctrl_pad.c
  function ctrl_pad_attach (line 52) | void ctrl_pad_attach(view_t * ui)
  function ctrl_pad_btn_remove_event_handler (line 79) | static void ctrl_pad_btn_remove_event_handler(lv_event_t * e)
  function ctrl_pad_obj_update (line 93) | void ctrl_pad_obj_update(lv_obj_t * obj, view_t * ui)
  function ctrl_pad_spinbox_event_handler (line 120) | static void ctrl_pad_spinbox_event_handler(lv_event_t * e)
  function ctrl_pad_btn_add_event_handler (line 135) | static void ctrl_pad_btn_add_event_handler(lv_event_t * e)
  function ctrl_pad_checkbox_event_handler (line 141) | static void ctrl_pad_checkbox_event_handler(lv_event_t * e)
  function ctrl_pad_btn_event_attach (line 151) | static void ctrl_pad_btn_event_attach(view_t * ui)

FILE: gui/lvgl/demos/flex_layout/lv_demo_flex_layout_flex_loader.c
  function FLEX_ALIGN_EVENT_DEF (line 89) | FLEX_ALIGN_EVENT_DEF(main)
  function flex_loader_obj_update (line 111) | void flex_loader_obj_update(lv_obj_t * obj, view_t * ui)
  function flex_flow_event_handler (line 131) | static void flex_flow_event_handler(lv_event_t * e)

FILE: gui/lvgl/demos/flex_layout/lv_demo_flex_layout_main.c
  function lv_demo_flex_layout (line 41) | void lv_demo_flex_layout(void)

FILE: gui/lvgl/demos/flex_layout/lv_demo_flex_layout_main.h
  type view_t (line 30) | typedef struct {

FILE: gui/lvgl/demos/flex_layout/lv_demo_flex_layout_view.c
  function view_create (line 42) | void view_create(lv_obj_t * par, view_t * ui)
  function lv_obj_t (line 115) | static lv_obj_t * btn_create(lv_obj_t * par, const char * str, lv_color_...
  function obj_child_node_def_style_init (line 131) | static void obj_child_node_def_style_init(lv_style_t * style)
  function obj_child_node_checked_style_init (line 140) | static void obj_child_node_checked_style_init(lv_style_t * style)

FILE: gui/lvgl/demos/flex_layout/lv_demo_flex_layout_view_child_node.c
  function lv_obj_t (line 40) | lv_obj_t * obj_child_node_create(lv_obj_t * par, view_t * ui)
  function obj_child_node_event_handler (line 66) | static void obj_child_node_event_handler(lv_event_t * e)

FILE: gui/lvgl/demos/flex_layout/lv_demo_flex_layout_view_ctrl_pad.c
  function view_ctrl_pad_create (line 55) | void view_ctrl_pad_create(lv_obj_t * par, view_t * ui)
  function lv_obj_t (line 85) | static lv_obj_t * ddlist_create(lv_obj_t * par, const char * name, const...
  function tab_flex_create (line 101) | static void tab_flex_create(lv_obj_t * tab, view_t * ui)
  function tab_align_create (line 129) | static void tab_align_create(lv_obj_t * tab, view_t * ui)
  function btn_inc_event_handler (line 144) | static void btn_inc_event_handler(lv_event_t * e)
  function btn_dec_event_handler (line 153) | static void btn_dec_event_handler(lv_event_t * e)
  function lv_obj_t (line 162) | static lv_obj_t * spinbox_ctrl_create(lv_obj_t * par, lv_style_prop_t pr...
  function tab_layout_create (line 225) | static void tab_layout_create(lv_obj_t * tab, view_t * ui)

FILE: gui/lvgl/demos/keypad_encoder/lv_demo_keypad_encoder.c
  function lv_demo_keypad_encoder (line 47) | void lv_demo_keypad_encoder(void)
  function selectors_create (line 84) | static void selectors_create(lv_obj_t * parent)
  function text_input_create (line 142) | static void text_input_create(lv_obj_t * parent)
  function msgbox_create (line 163) | static void msgbox_create(void)
  function msgbox_event_cb (line 182) | static void msgbox_event_cb(lv_event_t * e)
  function ta_event_cb (line 192) | static void ta_event_cb(lv_event_t * e)

FILE: gui/lvgl/demos/lv_demos.c
  type demo_entry_info_t (line 22) | typedef struct  {
  function lv_demos_create (line 89) | bool lv_demos_create(char * info[], int size)
  function lv_demos_show_help (line 124) | void lv_demos_show_help(void)

FILE: gui/lvgl/demos/multilang/lv_demo_multilang.c
  type card_info_t (line 23) | typedef struct {
  function lv_demo_multilang (line 156) | void lv_demo_multilang(void)
  function inactive_timer_cb (line 237) | static void inactive_timer_cb(lv_timer_t * t)
  function shrink_anim_cb (line 260) | static void shrink_anim_cb(void * var, int32_t v)
  function scroll_event_cb (line 267) | static void scroll_event_cb(lv_event_t * e)
  function card_create (line 293) | static void card_create(lv_obj_t * parent, card_info_t * info)

FILE: gui/lvgl/demos/music/lv_demo_music.c
  function lv_demo_music (line 117) | void lv_demo_music(void)
  function lv_demo_music_get_track_length (line 147) | uint32_t lv_demo_music_get_track_length(uint32_t track_id)
  function auto_step_cb (line 158) | static void auto_step_cb(lv_timer_t * t)

FILE: gui/lvgl/demos/music/lv_demo_music_list.c
  function lv_obj_t (line 54) | lv_obj_t * lv_demo_music_list_create(lv_obj_t * parent)
  function lv_demo_music_list_button_check (line 154) | void lv_demo_music_list_button_check(uint32_t track_id, bool state)
  function lv_obj_t (line 174) | static lv_obj_t * add_list_button(lv_obj_t * parent, uint32_t track_id)
  function btn_click_event_cb (line 230) | static void btn_click_event_cb(lv_event_t * e)
  function list_delete_event_cb (line 239) | static void list_delete_event_cb(lv_event_t * e)

FILE: gui/lvgl/demos/music/lv_demo_music_main.c
  function _image_set_scale_anim_cb (line 113) | static void _image_set_scale_anim_cb(void * obj, int32_t scale)
  function _obj_set_x_anim_cb (line 122) | static void _obj_set_x_anim_cb(void * obj, int32_t x)
  function lv_obj_t (line 127) | lv_obj_t * lv_demo_music_main_create(lv_obj_t * parent)
  function lv_demo_music_album_next (line 321) | void lv_demo_music_album_next(bool next)
  function lv_demo_music_play (line 345) | void lv_demo_music_play(uint32_t id)
  function lv_demo_music_resume (line 352) | void lv_demo_music_resume(void)
  function lv_demo_music_pause (line 373) | void lv_demo_music_pause(void)
  function lv_obj_t (line 389) | static lv_obj_t * create_cont(lv_obj_t * parent)
  function create_wave_images (line 450) | static void create_wave_images(lv_obj_t * parent)
  function lv_obj_t (line 489) | static lv_obj_t * create_title_box(lv_obj_t * parent)
  function lv_obj_t (line 518) | static lv_obj_t * create_icon_box(lv_obj_t * parent)
  function lv_obj_t (line 544) | static lv_obj_t * create_spectrum_obj(lv_obj_t * parent)
  function lv_obj_t (line 561) | static lv_obj_t * create_ctrl_box(lv_obj_t * parent)
  function lv_obj_t (line 647) | static lv_obj_t * create_handle(lv_obj_t * parent)
  function track_load (line 676) | static void track_load(uint32_t id)
  function get_cos (line 757) | int32_t get_cos(int32_t deg, int32_t a)
  function get_sin (line 765) | int32_t get_sin(int32_t deg, int32_t a)
  function del_counter_timer_cb (line 773) | static void del_counter_timer_cb(lv_event_t * e)
  function spectrum_draw_event_cb (line 782) | static void spectrum_draw_event_cb(lv_event_t * e)
  function spectrum_anim_cb (line 904) | static void spectrum_anim_cb(void * a, int32_t v)
  function start_anim_cb (line 933) | static void start_anim_cb(void * var, int32_t v)
  function lv_obj_t (line 940) | static lv_obj_t * album_image_create(lv_obj_t * parent)
  function album_gesture_event_cb (line 976) | static void album_gesture_event_cb(lv_event_t * e)
  function play_event_click_cb (line 984) | static void play_event_click_cb(lv_event_t * e)
  function prev_click_event_cb (line 995) | static void prev_click_event_cb(lv_event_t * e)
  function next_click_event_cb (line 1001) | static void next_click_event_cb(lv_event_t * e)
  function timer_cb (line 1009) | static void timer_cb(lv_timer_t * t)
  function spectrum_end_cb (line 1017) | static void spectrum_end_cb(lv_anim_t * a)
  function stop_start_anim (line 1023) | static void stop_start_anim(lv_timer_t * t)
  function album_fade_anim_cb (line 1030) | static void album_fade_anim_cb(void * var, int32_t v)

FILE: gui/lvgl/demos/render/lv_demo_render.c
  type scene_dsc_t (line 27) | typedef struct {
  function lv_obj_t (line 38) | static lv_obj_t * fill_obj_create(lv_obj_t * parent, int32_t col, int32_...
  function fill_cb (line 62) | static void fill_cb(lv_obj_t * parent)
  function lv_obj_t (line 116) | static lv_obj_t * border_obj_create(lv_obj_t * parent, int32_t col, int3...
  function border_cb (line 130) | static void border_cb(lv_obj_t * parent)
  function lv_obj_t (line 211) | static lv_obj_t * box_shadow_obj_create(lv_obj_t * parent, int32_t col, ...
  function box_shadow_cb (line 225) | static void box_shadow_cb(lv_obj_t * parent)
  function lv_obj_t (line 277) | static lv_obj_t * text_obj_create(lv_obj_t * parent, int32_t col, int32_...
  function text_cb (line 290) | static void text_cb(lv_obj_t * parent)
  function lv_obj_t (line 315) | static lv_obj_t * image_obj_create(lv_obj_t * parent, int32_t col, int32...
  function image_core_cb (line 331) | static void image_core_cb(lv_obj_t * parent, bool recolor, uint32_t star...
  function image_normal_1_cb (line 405) | static void image_normal_1_cb(lv_obj_t * parent)
  function image_recolored_1_cb (line 410) | static void image_recolored_1_cb(lv_obj_t * parent)
  function image_normal_2_cb (line 415) | static void image_normal_2_cb(lv_obj_t * parent)
  function image_recolored_2_cb (line 420) | static void image_recolored_2_cb(lv_obj_t * parent)
  function lv_obj_t (line 425) | static lv_obj_t * line_obj_create(lv_obj_t * parent, int32_t col, int32_...
  function line_cb (line 438) | static void line_cb(lv_obj_t * parent)
  function lv_obj_t (line 468) | static lv_obj_t * arc_obj_create(lv_obj_t * parent, int32_t col, int32_t...
  function arc_core_cb (line 484) | static void arc_core_cb(lv_obj_t * parent, const void * img_src)
  function arc_normal_cb (line 513) | static void arc_normal_cb(lv_obj_t * parent)
  function arc_image_cb (line 518) | static void arc_image_cb(lv_obj_t * parent)
  function triangle_draw_event_cb (line 524) | static void triangle_draw_event_cb(lv_event_t * e)
  function lv_obj_t (line 558) | static lv_obj_t * triangle_obj_create(lv_obj_t * parent, int32_t col, in...
  function triangle_cb (line 571) | static void triangle_cb(lv_obj_t * parent)
  function lv_obj_t (line 632) | static lv_obj_t * layer_obj_create(lv_obj_t * parent, int32_t col, int32...
  function layer_core_cb (line 656) | static void layer_core_cb(lv_obj_t * parent, lv_blend_mode_t blend_mode)
  function layer_normal_cb (line 713) | static void layer_normal_cb(lv_obj_t * parent)
  function create_blend_mode_image_buffer (line 718) | static void create_blend_mode_image_buffer(lv_obj_t * canvas)
  function lv_obj_t (line 757) | static lv_obj_t * create_blend_mode_obj(lv_obj_t * parent, int32_t col, ...
  function blend_mode_cb (line 771) | static void blend_mode_cb(lv_obj_t * parent)
  function lv_obj_t (line 843) | static lv_obj_t * create_linear_gradient_obj(lv_obj_t * parent, int32_t ...
  function linear_gradient_cb (line 882) | static void linear_gradient_cb(lv_obj_t * parent)
  function lv_obj_t (line 919) | static lv_obj_t * create_radial_gradient_obj(lv_obj_t * parent, int32_t ...
  function radial_gradient_cb (line 962) | static void radial_gradient_cb(lv_obj_t * parent)
  function lv_obj_t (line 997) | static lv_obj_t * create_conical_gradient_obj(lv_obj_t * parent, int32_t...
  function conical_gradient_cb (line 1036) | static void conical_gradient_cb(lv_obj_t * parent)
  function lv_demo_render (line 1110) | void lv_demo_render(lv_demo_render_scene_t id, lv_opa_t opa)
  function add_to_cell (line 1144) | static void add_to_cell(lv_obj_t * obj, int32_t col, int32_t row)

FILE: gui/lvgl/demos/render/lv_demo_render.h
  type lv_demo_render_scene_t (line 31) | typedef enum {

FILE: gui/lvgl/demos/scroll/lv_demo_scroll.c
  function lv_demo_scroll (line 38) | void lv_demo_scroll(void)
  function lv_obj_t (line 77) | static lv_obj_t * switch_create(lv_obj_t * parent, const char * title, l...
  function generic_switch_event_cb (line 103) | static void generic_switch_event_cb(lv_event_t * e)

FILE: gui/lvgl/demos/stress/lv_demo_stress.c
  function lv_demo_stress (line 46) | void lv_demo_stress(void)
  function lv_demo_stress_finished (line 53) | bool lv_demo_stress_finished(void)
  function obj_test_task_cb (line 62) | static void obj_test_task_cb(lv_timer_t * tmr)
  function auto_delete (line 428) | static void auto_delete(lv_obj_t * obj, uint32_t delay)
  function msgbox_delete (line 439) | static void msgbox_delete(lv_timer_t * tmr)
  function set_y_anim (line 444) | static void set_y_anim(void * obj, int32_t v)
  function set_width_anim (line 449) | static void set_width_anim(void * obj, int32_t v)
  function arc_set_end_angle_anim (line 454) | static void arc_set_end_angle_anim(void * obj, int32_t v)

FILE: gui/lvgl/demos/transform/lv_demo_transform.c
  type card_info_t (line 20) | typedef struct {
  function lv_demo_transform (line 49) | void lv_demo_transform(void)
  function lv_obj_t (line 111) | static lv_obj_t * card_create(void)
  function arc_event_cb (line 146) | static void arc_event_cb(lv_event_t * e)
  function slider_event_cb (line 154) | static void slider_event_cb(lv_event_t * e)

FILE: gui/lvgl/demos/vector_graphic/lv_demo_vector_graphic.c
  function draw_pattern (line 26) | static void draw_pattern(lv_vector_dsc_t * ctx, lv_vector_path_t * path)
  function draw_gradient (line 51) | static void draw_gradient(lv_vector_dsc_t * ctx, lv_vector_path_t * path)
  function draw_radial_gradient (line 81) | static void draw_radial_gradient(lv_vector_dsc_t * ctx, lv_vector_path_t...
  function draw_shapes (line 108) | static void draw_shapes(lv_vector_dsc_t * ctx, lv_vector_path_t * path)
  function draw_lines (line 148) | static void draw_lines(lv_vector_dsc_t * ctx, lv_vector_path_t * path)
  function draw_blend (line 172) | static void draw_blend(lv_vector_dsc_t * ctx, lv_vector_path_t * path)
  function draw_arc (line 188) | static void draw_arc(lv_vector_dsc_t * ctx, lv_vector_path_t * path)
  function draw_vector (line 219) | static void draw_vector(lv_layer_t * layer)
  function delete_event_cb (line 241) | static void delete_event_cb(lv_event_t * e)
  function event_cb (line 248) | static void event_cb(lv_event_t * e)
  function lv_demo_vector_graphic_not_buffered (line 267) | void lv_demo_vector_graphic_not_buffered(void)
  function lv_demo_vector_graphic_buffered (line 272) | void lv_demo_vector_graphic_buffered(void)
  function lv_demo_vector_graphic_not_buffered (line 293) | void lv_demo_vector_graphic_not_buffered(void)
  function lv_demo_vector_graphic_buffered (line 301) | void lv_demo_vector_graphic_buffered(void)

FILE: gui/lvgl/demos/widgets/lv_demo_widgets.c
  type disp_size_t (line 24) | typedef enum {
  function lv_demo_widgets (line 115) | void lv_demo_widgets(void)
  function lv_demo_widgets_start_slideshow (line 223) | void lv_demo_widgets_start_slideshow(void)
  function profile_create (line 248) | static void profile_create(lv_obj_t * parent)
  function lv_obj_t (line 569) | static lv_obj_t * create_chart_with_scales(lv_obj_t * parent, const char...
  function analytics_create (line 620) | static void analytics_create(lv_obj_t * parent)
  function shop_create (line 875) | void shop_create(lv_obj_t * parent)
  function color_changer_create (line 1047) | static void color_changer_create(lv_obj_t * parent)
  function color_changer_anim_cb (line 1100) | static void color_changer_anim_cb(void * var, int32_t v)
  function color_changer_event_cb (line 1126) | static void color_changer_event_cb(lv_event_t * e)
  function color_event_cb (line 1150) | static void color_event_cb(lv_event_t * e)
  function lv_obj_t (line 1182) | static lv_obj_t * create_scale_box(lv_obj_t * parent, const char * title...
  function lv_obj_t (line 1252) | static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_s...
  function ta_event_cb (line 1284) | static void ta_event_cb(lv_event_t * e)
  function birthday_event_cb (line 1314) | static void birthday_event_cb(lv_event_t * e)
  function calendar_event_cb (line 1339) | static void calendar_event_cb(lv_event_t * e)
  function slider_event_cb (line 1358) | static void slider_event_cb(lv_event_t * e)
  function chart_event_cb (line 1410) | static void chart_event_cb(lv_event_t * e)
  function shop_chart_event_cb (line 1547) | static void shop_chart_event_cb(lv_event_t * e)
  function scale1_indic1_anim_cb (line 1552) | static void scale1_indic1_anim_cb(void * var, int32_t v)
  function scale2_timer_cb (line 1561) | static void scale2_timer_cb(lv_timer_t * timer)
  function scale3_anim_cb (line 1617) | static void scale3_anim_cb(void * var, int32_t v)
  function scale3_size_changed_event_cb (line 1626) | static void scale3_size_changed_event_cb(lv_event_t * e)
  function scroll_anim_y_cb (line 1643) | static void scroll_anim_y_cb(void * var, int32_t v)
  function delete_timer_event_cb (line 1648) | static void delete_timer_event_cb(lv_event_t * e)
  function slideshow_anim_completed_cb (line 1657) | static void slideshow_anim_completed_cb(lv_anim_t * a_old)
  function scale3_delete_event_cb (line 1685) | static void scale3_delete_event_cb(lv_event_t * e)
  function tabview_delete_event_cb (line 1702) | static void tabview_delete_event_cb(lv_event_t * e)

FILE: gui/lvgl/docs/_ext/link_roles.py
  class translation_link (line 17) | class translation_link(nodes.Element):
  function link_to_translation (line 22) | def link_to_translation(name, rawtext, text, lineno, inliner, options={}...
  class TranslationLinkNodeTransform (line 28) | class TranslationLinkNodeTransform(SphinxPostTransform):
    method run (line 32) | def run(self, **kwargs):
  function setup (line 51) | def setup(app):

FILE: gui/lvgl/docs/_ext/lv_example.py
  function excluded_list (line 9) | def excluded_list(argument):
  class LvExample (line 13) | class LvExample(Directive):
    method get_example_code_path (line 21) | def get_example_code_path(self, example_path, language):
    method human_language_name (line 27) | def human_language_name(self, language):
    method github_path (line 35) | def github_path(self, example_path, language):
    method embed_code (line 39) | def embed_code(self, example_file, example_path, language, buttons={}):
    method run (line 60) | def run(self):
  function setup (line 107) | def setup(app):

FILE: gui/lvgl/docs/_static/js/include_html.js
  function includeHTML (line 3) | function includeHTML() {

FILE: gui/lvgl/docs/add_translation.py
  function find_files (line 24) | def find_files(dir_path, suffix):
  function exec (line 35) | def exec(temp_directory):

FILE: gui/lvgl/docs/build.py
  function cmd (line 69) | def cmd(s):
  function get_version (line 210) | def get_version():
  function iter_temp (line 224) | def iter_temp(p):

FILE: gui/lvgl/docs/conf.py
  function setup (line 270) | def setup(app):

FILE: gui/lvgl/docs/config_builder.py
  function run (line 13) | def run(c_path=None):
  function cleanup (line 47) | def cleanup():

FILE: gui/lvgl/docs/doc_builder.py
  function warn (line 26) | def warn(warning_type, *args):
  function build_docstring (line 39) | def build_docstring(element):
  function read_as_xml (line 71) | def read_as_xml(d):
  function load_xml (line 78) | def load_xml(fle):
  class STRUCT_FIELD (line 116) | class STRUCT_FIELD(object):
    method __init__ (line 118) | def __init__(self, name, type, description, file_name, line_no):
  class STRUCT (line 126) | class STRUCT(object):
    method __init__ (line 139) | def __init__(self, parent, refid, name, **_):
    method get_field (line 215) | def get_field(self, name):
    method deps (line 221) | def deps(self):
    method __str__ (line 249) | def __str__(self):
  class UNION (line 253) | class UNION(STRUCT):
  function get_type (line 263) | def get_type(node):
  class VARIABLE (line 279) | class VARIABLE(object):
    method __init__ (line 285) | def __init__(self, parent, refid, name, **_):
    method __str__ (line 331) | def __str__(self):
  class NAMESPACE (line 335) | class NAMESPACE(object):
    method __init__ (line 345) | def __init__(self, parent, refid, name, **_):
    method __str__ (line 398) | def __str__(self):
  class FUNC_ARG (line 402) | class FUNC_ARG(object):
    method __init__ (line 404) | def __init__(self, name, type):
  class GROUP (line 413) | class GROUP(object):
    method __init__ (line 419) | def __init__(self, parent, refid, name, **_):
    method __str__ (line 429) | def __str__(self):
  class FUNCTION (line 434) | class FUNCTION(object):
    method __init__ (line 440) | def __init__(self, parent, refid, name, **_):
    method deps (line 578) | def deps(self):
    method __str__ (line 609) | def __str__(self):
  class FILE (line 613) | class FILE(object):
    method __init__ (line 615) | def __init__(self, _, refid, name, node, **__):
  class ENUM (line 650) | class ENUM(object):
    method __init__ (line 656) | def __init__(self, parent, refid, name, **_):
    method is_member (line 756) | def is_member(self, member):
    method add_member (line 762) | def add_member(self, member):
    method __str__ (line 776) | def __str__(self):
  function build_define (line 786) | def build_define(element):
  class DEFINE (line 809) | class DEFINE(object):
    method __init__ (line 815) | def __init__(self, parent, refid, name, **_):
    method __str__ (line 888) | def __str__(self):
  class ENUMVALUE (line 892) | class ENUMVALUE(object):
    method __init__ (line 898) | def __init__(self, parent, refid, name, **_):
    method __str__ (line 906) | def __str__(self):
  class TYPEDEF (line 910) | class TYPEDEF(object):
    method __init__ (line 916) | def __init__(self, parent, refid, name, **_):
    method deps (line 978) | def deps(self):
    method __str__ (line 1009) | def __str__(self):
  class CLASS (line 1016) | class CLASS(object):
    method __init__ (line 1018) | def __init__(self, _, refid, name, node, **__):
  function iter_src (line 1052) | def iter_src(n, p):
  function clean_name (line 1136) | def clean_name(nme):
  function is_name_match (line 1148) | def is_name_match(item_name, obj_name):
  function get_includes (line 1159) | def get_includes(name1, name2, obj, includes):
  class XMLSearch (line 1181) | class XMLSearch(object):
    method __init__ (line 1183) | def __init__(self, temp_directory):
    method get_macros (line 1250) | def get_macros(self):
    method get_enum_item (line 1253) | def get_enum_item(self, e_name):
    method get_enum (line 1259) | def get_enum(self, e_name):
    method get_function (line 1262) | def get_function(self, f_name):
    method get_variable (line 1265) | def get_variable(self, v_name):
    method get_union (line 1268) | def get_union(self, u_name):
    method get_structure (line 1271) | def get_structure(self, s_name):
    method get_typedef (line 1274) | def get_typedef(self, t_name):
    method get_macro (line 1277) | def get_macro(self, m_name):
  function run (line 1281) | def run(project_path, temp_directory, *doc_paths):

FILE: gui/lvgl/docs/example_list.py
  function process_index_rst (line 5) | def process_index_rst(path):
  function write_header (line 84) | def write_header(h_num, text, f):
  function print_item (line 112) | def print_item(path, lvl, d, fout):
  function exec (line 121) | def exec(temp_directory):

FILE: gui/lvgl/env_support/pikascript/pika_lv_point_t.c
  function pika_lvgl_point_t___init__ (line 11) | void pika_lvgl_point_t___init__(PikaObj* self) {

FILE: gui/lvgl/env_support/pikascript/pika_lv_timer_t.c
  function __pika_timer_cb (line 13) | void __pika_timer_cb(lv_timer_t* timer) {
  function pika_lvgl_lv_timer_t_set_period (line 21) | void pika_lvgl_lv_timer_t_set_period(PikaObj* self, int period) {
  function pika_lvgl_lv_timer_t_set_cb (line 26) | void pika_lvgl_lv_timer_t_set_cb(PikaObj* self, Arg* cb) {
  function pika_lvgl_lv_timer_t__delete (line 40) | void pika_lvgl_lv_timer_t__delete(PikaObj* self) {

FILE: gui/lvgl/env_support/pikascript/pika_lv_wegit.c
  function pika_lvgl_arc___init__ (line 23) | void pika_lvgl_arc___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_arc_set_end_angle (line 32) | void pika_lvgl_arc_set_end_angle(PikaObj* self, int angle) {
  function pika_lvgl_arc_set_bg_angles (line 37) | void pika_lvgl_arc_set_bg_angles(PikaObj* self, int start, int end) {
  function pika_lvgl_arc_set_angles (line 42) | void pika_lvgl_arc_set_angles(PikaObj* self, int start, int end) {
  function pika_lvgl_arc_get_angle_end (line 47) | int pika_lvgl_arc_get_angle_end(PikaObj *self){
  function pika_lvgl_arc_get_angle_start (line 51) | int pika_lvgl_arc_get_angle_start(PikaObj *self){
  function pika_lvgl_arc_get_bg_angle_end (line 55) | int pika_lvgl_arc_get_bg_angle_end(PikaObj *self){
  function pika_lvgl_arc_get_bg_angle_start (line 59) | int pika_lvgl_arc_get_bg_angle_start(PikaObj *self){
  function pika_lvgl_arc_get_max_value (line 63) | int pika_lvgl_arc_get_max_value(PikaObj *self){
  function pika_lvgl_arc_get_min_value (line 67) | int pika_lvgl_arc_get_min_value(PikaObj *self){
  function pika_lvgl_arc_get_mode (line 71) | int pika_lvgl_arc_get_mode(PikaObj *self){
  function pika_lvgl_arc_get_value (line 79) | int pika_lvgl_arc_get_value(PikaObj *self){
  function pika_lvgl_arc_set_mode (line 83) | void pika_lvgl_arc_set_mode(PikaObj *self, int mode){
  function pika_lvgl_arc_set_range (line 87) | void pika_lvgl_arc_set_range(PikaObj *self, int min, int max){
  function pika_lvgl_arc_set_rotation (line 91) | void pika_lvgl_arc_set_rotation(PikaObj *self, int rotation){
  function pika_lvgl_arc_set_start_angle (line 95) | void pika_lvgl_arc_set_start_angle(PikaObj *self, int start){
  function pika_lvgl_arc_set_value (line 99) | void pika_lvgl_arc_set_value(PikaObj *self, int value){
  function pika_lvgl_arc_set_bg_end_angle (line 103) | void pika_lvgl_arc_set_bg_end_angle(PikaObj *self, int angle){
  function pika_lvgl_arc_set_bg_start_angle (line 107) | void pika_lvgl_arc_set_bg_start_angle(PikaObj *self, int start){
  function pika_lvgl_arc_set_change_rate (line 112) | void pika_lvgl_arc_set_change_rate(PikaObj *self, int rate){
  function pika_lvgl_bar___init__ (line 117) | void pika_lvgl_bar___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_bar_set_value (line 123) | void pika_lvgl_bar_set_value(PikaObj* self, int value, int anim) {
  function pika_lvgl_bar_get_max_value (line 128) | int pika_lvgl_bar_get_max_value(PikaObj *self){
  function pika_lvgl_bar_get_min_value (line 132) | int pika_lvgl_bar_get_min_value(PikaObj *self){
  function pika_lvgl_bar_get_mode (line 136) | int pika_lvgl_bar_get_mode(PikaObj *self){
  function pika_lvgl_bar_get_start_value (line 140) | int pika_lvgl_bar_get_start_value(PikaObj *self){
  function pika_lvgl_bar_get_value (line 144) | int pika_lvgl_bar_get_value(PikaObj *self){
  function pika_lvgl_bar_set_mode (line 148) | void pika_lvgl_bar_set_mode(PikaObj *self, int mode){
  function pika_lvgl_bar_set_range (line 152) | void pika_lvgl_bar_set_range(PikaObj *self, int min, int max){
  function pika_lvgl_bar_set_start_value (line 156) | void pika_lvgl_bar_set_start_value(PikaObj *self, int start_value, int a...
  function pika_lvgl_btn___init__ (line 161) | void pika_lvgl_btn___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_checkbox___init__ (line 167) | void pika_lvgl_checkbox___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_checkbox_set_text (line 173) | void pika_lvgl_checkbox_set_text(PikaObj* self, char* txt) {
  function pika_lvgl_checkbox_set_text_static (line 178) | void pika_lvgl_checkbox_set_text_static(PikaObj *self, char* txt){
  function pika_lvgl_dropdown___init__ (line 188) | void pika_lvgl_dropdown___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_dropdown_set_options (line 194) | void pika_lvgl_dropdown_set_options(PikaObj* self, char* options) {
  function pika_lvgl_dropdown_add_option (line 199) | void pika_lvgl_dropdown_add_option(PikaObj *self, char* options, int pos){
  function pika_lvgl_dropdown_clear_options (line 203) | void pika_lvgl_dropdown_clear_options(PikaObj *self){
  function pika_lvgl_dropdown_close (line 207) | void pika_lvgl_dropdown_close(PikaObj *self){
  function pika_lvgl_dropdown_get_dir (line 211) | int pika_lvgl_dropdown_get_dir(PikaObj *self){
  function pika_lvgl_dropdown_get_option_count (line 219) | int pika_lvgl_dropdown_get_option_count(PikaObj *self){
  function pika_lvgl_dropdown_get_option_index (line 223) | int pika_lvgl_dropdown_get_option_index(PikaObj *self, char* txt){
  function pika_lvgl_dropdown_get_selected (line 231) | int pika_lvgl_dropdown_get_selected(PikaObj *self){
  function pika_lvgl_dropdown_get_selected_highlight (line 235) | int pika_lvgl_dropdown_get_selected_highlight(PikaObj *self){
  function pika_lvgl_dropdown_is_open (line 255) | int pika_lvgl_dropdown_is_open(PikaObj *self){
  function pika_lvgl_dropdown_open (line 259) | void pika_lvgl_dropdown_open(PikaObj *self){
  function pika_lvgl_dropdown_set_dir (line 263) | void pika_lvgl_dropdown_set_dir(PikaObj *self, int dir){
  function pika_lvgl_dropdown_set_selected (line 267) | void pika_lvgl_dropdown_set_selected(PikaObj *self, int sel_opt){
  function pika_lvgl_dropdown_set_selected_highlight (line 271) | void pika_lvgl_dropdown_set_selected_highlight(PikaObj *self, int en){
  function pika_lvgl_dropdown_set_symbol (line 275) | void pika_lvgl_dropdown_set_symbol(PikaObj *self, char* symbol){
  function pika_lvgl_dropdown_set_text (line 279) | void pika_lvgl_dropdown_set_text(PikaObj *self, char* txt){
  function pika_lvgl_label___init__ (line 284) | void pika_lvgl_label___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_label_set_long_mode (line 290) | void pika_lvgl_label_set_long_mode(PikaObj* self, int mode) {
  function pika_lvgl_label_set_recolor (line 295) | void pika_lvgl_label_set_recolor(PikaObj* self, int en) {
  function pika_lvgl_label_set_text (line 300) | void pika_lvgl_label_set_text(PikaObj* self, char* txt) {
  function pika_lvgl_label_set_style_text_align (line 305) | void pika_lvgl_label_set_style_text_align(PikaObj* self,
  function pika_lvgl_roller___init__ (line 312) | void pika_lvgl_roller___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_roller_set_options (line 318) | void pika_lvgl_roller_set_options(PikaObj* self, char* options, int mode) {
  function pika_lvgl_roller_set_visible_row_count (line 323) | void pika_lvgl_roller_set_visible_row_count(PikaObj* self, int row_cnt) {
  function pika_lvgl_slider___init__ (line 328) | void pika_lvgl_slider___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_switch___init__ (line 334) | void pika_lvgl_switch___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_table___init__ (line 340) | void pika_lvgl_table___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_table_set_cell_value (line 346) | void pika_lvgl_table_set_cell_value(PikaObj* self,
  function pika_lvgl_textarea___init__ (line 354) | void pika_lvgl_textarea___init__(PikaObj* self, PikaObj* parent) {
  function pika_lvgl_textarea_set_one_line (line 360) | void pika_lvgl_textarea_set_one_line(PikaObj* self, int en) {

FILE: gui/lvgl/env_support/pikascript/pika_lvgl.c
  function pika_lvgl_STATE___init__ (line 24) | void pika_lvgl_STATE___init__(PikaObj* self) {
  function pika_lvgl_ANIM___init__ (line 41) | void pika_lvgl_ANIM___init__(PikaObj* self) {
  function pika_lvgl_ALIGN___init__ (line 46) | void pika_lvgl_ALIGN___init__(PikaObj* self) {
  function pika_lvgl_EVENT___init__ (line 71) | void pika_lvgl_EVENT___init__(PikaObj* self) {
  function pika_lvgl_OPA___init__ (line 120) | void pika_lvgl_OPA___init__(PikaObj* self) {
  function pika_lvgl_PALETTE___init__ (line 125) | void pika_lvgl_PALETTE___init__(PikaObj* self) {
  function PikaObj (line 148) | PikaObj* pika_lvgl_screen_active(PikaObj* self) {
  function pika_lvgl___init__ (line 155) | void pika_lvgl___init__(PikaObj* self) {
  function PikaObj (line 160) | PikaObj* pika_lvgl_obj(PikaObj* self, PikaObj* parent) {
  function PikaObj (line 168) | PikaObj* pika_lvgl_palette_lighten(PikaObj *self, int p, int lvl){
  function PikaObj (line 177) | PikaObj* pika_lvgl_palette_main(PikaObj* self, int p) {
  function PikaObj (line 186) | PikaObj* pika_lvgl_indev_get_active(PikaObj *self){
  function PikaObj (line 193) | PikaObj* pika_lvgl_timer_create_basic(PikaObj *self){

FILE: gui/lvgl/env_support/pikascript/pika_lvgl.pyi
  function __init__ (line 3) | def __init__(): ...
  class EVENT (line 5) | class EVENT:
    method __init__ (line 52) | def __init__(self): ...
  class ALIGN (line 54) | class ALIGN:
    method __init__ (line 77) | def __init__(self): ...
  class PALETTE (line 79) | class PALETTE:
    method __init__ (line 100) | def __init__(self): ...
  class OPA (line 102) | class OPA:
    method __init__ (line 105) | def __init__(self): ...
  class ANIM (line 107) | class ANIM:
    method __init__ (line 110) | def __init__(self): ...
  class STATE (line 112) | class STATE:
    method __init__ (line 113) | def __init__(self): ...
  class lv_event (line 115) | class lv_event:
    method get_code (line 116) | def get_code(self) -> int: ...
    method get_target (line 117) | def get_target(self) -> lv_obj: ...
  class lv_color_t (line 119) | class lv_color_t: ...
  class lv_timer_t (line 121) | class lv_timer_t:
    method set_period (line 122) | def set_period(period: int): ...
    method set_cb (line 123) | def set_cb(cb: any): ...
    method _del (line 124) | def _del(self): ...
  function palette_lighten (line 126) | def palette_lighten(p: int, lvl: int) -> lv_color_t: ...
  function palette_main (line 127) | def palette_main(p: int) -> lv_color_t: ...
  class style_t (line 129) | class style_t:
    method __init__ (line 130) | def __init__(self): ...
    method init (line 131) | def init(self): ...
    method set_radius (line 132) | def set_radius(self, radius: int): ...
    method set_bg_opa (line 133) | def set_bg_opa(self, opa: int): ...
    method set_bg_color (line 134) | def set_bg_color(self, color: lv_color_t): ...
    method set_outline_width (line 135) | def set_outline_width(self, w: int): ...
    method set_outline_color (line 136) | def set_outline_color(self, color: lv_color_t): ...
    method set_outline_pad (line 137) | def set_outline_pad(self, pad: int): ...
    method set_shadow_width (line 138) | def set_shadow_width(self, w: int): ...
    method set_shadow_spread (line 139) | def set_shadow_spread(self, s: int): ...
    method set_shadow_color (line 140) | def set_shadow_color(self, color: lv_color_t): ...
  class lv_obj (line 142) | class lv_obj:
    method center (line 143) | def center(self): ...
    method set_size (line 144) | def set_size(self, size_x: int, size_y: int): ...
    method align (line 145) | def align(self, align: int, x_ofs: int, y_ofs: int): ...
    method set_height (line 146) | def set_height(self, h: int): ...
    method update_layout (line 147) | def update_layout(self): ...
    method set_width (line 148) | def set_width(self, w: int): ...
    method add_state (line 149) | def add_state(self, state: int): ...
    method add_event (line 150) | def add_event(self, event_cb: any, filter: int, user_data: pointer): ...
    method add_style (line 151) | def add_style(self, style: style_t, selector: int): ...
    method get_x (line 152) | def get_x(self) -> int: ...
    method get_y (line 153) | def get_y(self) -> int: ...
    method set_pos (line 154) | def set_pos(self, x: int, y: int): ...
  class indev_t (line 156) | class indev_t:
    method get_vect (line 157) | def get_vect(self, point: point_t): ...
  function obj (line 159) | def obj(parent: lv_obj) -> lv_obj: ...
  function indev_get_act (line 160) | def indev_get_act() -> indev_t: ...
  class point_t (line 162) | class point_t:
    method __init__ (line 163) | def __init__(self): ...
  class arc (line 165) | class arc(lv_obj):
    method __init__ (line 169) | def __init__(self, parent: lv_obj): ...
    method set_start_angle (line 170) | def set_start_angle(self, start: int): ...
    method set_end_angle (line 171) | def set_end_angle(self, angle: int): ...
    method set_angles (line 172) | def set_angles(self, start: int, end: int): ...
    method set_bg_start_angle (line 173) | def set_bg_start_angle(self, start: int): ...
    method set_bg_end_angle (line 174) | def set_bg_end_angle(self, angle: int): ...
    method set_bg_angles (line 175) | def set_bg_angles(self, start: int, end: int): ...
    method set_rotation (line 176) | def set_rotation(self, rotation: int): ...
    method set_mode (line 177) | def set_mode(self, mode: int): ...
    method set_value (line 178) | def set_value(self, value: int): ...
    method set_range (line 179) | def set_range(self, min: int, max: int): ...
    method set_change_rate (line 180) | def set_change_rate(self, rate: int): ...
    method get_angle_start (line 181) | def get_angle_start(self) -> int: ...
    method get_angle_end (line 182) | def get_angle_end(self) -> int: ...
    method get_bg_angle_start (line 183) | def get_bg_angle_start(self) -> int: ...
    method get_bg_angle_end (line 184) | def get_bg_angle_end(self) -> int: ...
    method get_value (line 185) | def get_value(self) -> int: ...
    method get_min_value (line 186) | def get_min_value(self) -> int: ...
    method get_max_value (line 187) | def get_max_value(self) -> int: ...
    method get_mode (line 188) | def get_mode(self) -> int: ...
  class bar (line 191) | class bar(lv_obj):
    method __init__ (line 192) | def __init__(self, parent: lv_obj): ...
    method set_value (line 193) | def set_value(self, value: int, anim: int): ...
    method set_start_value (line 194) | def set_start_value(self, start_value: int, anim: int): ...
    method set_range (line 195) | def set_range(self, min: int, max: int): ...
    method set_mode (line 196) | def set_mode(self, mode: int): ...
    method get_value (line 197) | def get_value(self) -> int: ...
    method get_start_value (line 198) | def get_start_value(self) -> int: ...
    method get_min_value (line 199) | def get_min_value(self) -> int: ...
    method get_max_value (line 200) | def get_max_value(self) -> int: ...
    method get_mode (line 201) | def get_mode(self) -> int: ...
  class btn (line 203) | class btn(lv_obj):
    method __init__ (line 204) | def __init__(self, parent: lv_obj): ...
  class checkbox (line 206) | class checkbox(lv_obj):
    method __init__ (line 207) | def __init__(self, parent: lv_obj): ...
    method set_text (line 208) | def set_text(self, txt: str): ...
    method set_text_static (line 209) | def set_text_static(self, txt: str): ...
    method get_text (line 210) | def get_text(self) -> str: ...
  class dropdown (line 212) | class dropdown(lv_obj):
    method __init__ (line 213) | def __init__(self, parent: lv_obj): ...
    method set_text (line 214) | def set_text(self, txt: str): ...
    method set_options (line 215) | def set_options(self, options: str): ...
    method add_option (line 216) | def add_option(self, option: str, pos:int): ...
    method clear_options (line 217) | def clear_options(self): ...
    method set_selected (line 218) | def set_selected(self, sel_opt: int): ...
    method set_dir (line 219) | def set_dir(self, dir: int): ...
    method set_symbol (line 220) | def set_symbol(self, symbol: str): ...
    method set_selected_highlight (line 221) | def set_selected_highlight(self, en: int): ...
    method get_text (line 223) | def get_text(self) -> str: ...
    method get_options (line 224) | def get_options(self) -> str: ...
    method get_selected (line 225) | def get_selected(self) -> int: ...
    method get_option_cnt (line 226) | def get_option_cnt(self) -> int: ...
    method get_selected_str (line 227) | def get_selected_str(self) -> str: ...
    method get_option_index (line 228) | def get_option_index(self, option: str) -> int: ...
    method get_symbol (line 229) | def get_symbol(self) -> str: ...
    method get_selected_highlight (line 230) | def get_selected_highlight(self) -> int: ...
    method get_dir (line 231) | def get_dir(self) -> int: ...
    method open (line 232) | def open(self): ...
    method close (line 233) | def close(self): ...
    method is_open (line 234) | def is_open(self) -> int: ...
  class label (line 236) | class label(lv_obj):
    method __init__ (line 237) | def __init__(self, parent: lv_obj): ...
    method set_text (line 238) | def set_text(self, txt: str): ...
    method set_long_mode (line 239) | def set_long_mode(self, mode: int): ...
    method set_recolor (line 240) | def set_recolor(self, en: int): ...
    method set_style_text_align (line 241) | def set_style_text_align(self, value: int, selector: int): ...
  class roller (line 243) | class roller(lv_obj):
    method __init__ (line 244) | def __init__(self, parent: lv_obj): ...
    method set_options (line 245) | def set_options(self, options: str, mode: int): ...
    method set_visible_row_count (line 246) | def set_visible_row_count(self, row_cnt: int): ...
  class slider (line 248) | class slider(lv_obj):
    method __init__ (line 249) | def __init__(self, parent: lv_obj): ...
  class switch (line 251) | class switch(lv_obj):
    method __init__ (line 252) | def __init__(self, parent: lv_obj): ...
  class table (line 254) | class table(lv_obj):
    method __init__ (line 255) | def __init__(self, parent: lv_obj): ...
    method set_cell_value (line 256) | def set_cell_value(self, row: int, col: int, txt: str): ...
  class textarea (line 258) | class textarea(lv_obj):
    method __init__ (line 259) | def __init__(self, parent: lv_obj): ...
    method set_one_line (line 260) | def set_one_line(en: int): ...
  function scr_act (line 262) | def scr_act() -> lv_obj: ...
  function timer_create_basic (line 263) | def timer_create_basic() -> lv_timer_t: ...

FILE: gui/lvgl/env_support/pikascript/pika_lvgl_indev_t.c
  function pika_lvgl_indev_t_get_vect (line 11) | void pika_lvgl_indev_t_get_vect(PikaObj* self, PikaObj* point) {

FILE: gui/lvgl/env_support/pikascript/pika_lvgl_lv_event.c
  function pika_lvgl_lv_event_get_code (line 11) | int pika_lvgl_lv_event_get_code(PikaObj *self){
  function PikaObj (line 17) | PikaObj* pika_lvgl_lv_event_get_target(PikaObj *self){

FILE: gui/lvgl/env_support/pikascript/pika_lvgl_lv_obj.c
  function pika_lvgl_lv_obj_center (line 18) | void pika_lvgl_lv_obj_center(PikaObj* self) {
  function pika_lvgl_lv_obj_set_size (line 23) | void pika_lvgl_lv_obj_set_size(PikaObj* self, int size_x, int size_y) {
  function pika_lvgl_lv_obj_align (line 28) | void pika_lvgl_lv_obj_align(PikaObj* self, int align, int x_ofs, int y_o...
  function pika_lvgl_lv_obj_set_height (line 33) | void pika_lvgl_lv_obj_set_height(PikaObj* self, int h) {
  function pika_lvgl_lv_obj_update_layout (line 38) | void pika_lvgl_lv_obj_update_layout(PikaObj* self) {
  function pika_lvgl_lv_obj_set_width (line 43) | void pika_lvgl_lv_obj_set_width(PikaObj* self, int w) {
  function pika_lvgl_lv_obj_add_state (line 48) | void pika_lvgl_lv_obj_add_state(PikaObj* self, int state) {
  function PikaObj (line 53) | PikaObj* eventListener_getHandler(PikaObj* self, uintptr_t event_id) {
  function __pika_event_cb (line 63) | static void __pika_event_cb(lv_event_t* e) {
  function eventListener_registerEvent (line 72) | void eventListener_registerEvent(PikaObj* self,
  function pika_lvgl_lv_obj_add_event_cb (line 84) | void pika_lvgl_lv_obj_add_event_cb(PikaObj* self,
  function pika_lvgl_lv_obj_add_style (line 96) | void pika_lvgl_lv_obj_add_style(PikaObj *self, PikaObj* style, int selec...
  function pika_lvgl_lv_obj_get_x (line 102) | int pika_lvgl_lv_obj_get_x(PikaObj *self){
  function pika_lvgl_lv_obj_get_y (line 107) | int pika_lvgl_lv_obj_get_y(PikaObj *self){
  function pika_lvgl_lv_obj_set_pos (line 112) | void pika_lvgl_lv_obj_set_pos(PikaObj *self, int x, int y){

FILE: gui/lvgl/env_support/pikascript/pika_lvgl_lv_style_t.c
  function pika_lvgl_style_t_init (line 11) | void pika_lvgl_style_t_init(PikaObj* self) {
  function pika_lvgl_style_t_set_bg_color (line 16) | void pika_lvgl_style_t_set_bg_color(PikaObj* self, PikaObj* color) {
  function pika_lvgl_style_t_set_bg_opa (line 22) | void pika_lvgl_style_t_set_bg_opa(PikaObj* self, int opa) {
  function pika_lvgl_style_t_set_outline_color (line 27) | void pika_lvgl_style_t_set_outline_color(PikaObj* self, PikaObj* color) {
  function pika_lvgl_style_t_set_outline_pad (line 33) | void pika_lvgl_style_t_set_outline_pad(PikaObj* self, int pad) {
  function pika_lvgl_style_t_set_outline_width (line 38) | void pika_lvgl_style_t_set_outline_width(PikaObj* self, int w) {
  function pika_lvgl_style_t_set_radius (line 43) | void pika_lvgl_style_t_set_radius(PikaObj* self, int radius) {
  function pika_lvgl_style_t___init__ (line 48) | void pika_lvgl_style_t___init__(PikaObj* self) {
  function pika_lvgl_style_t_set_shadow_color (line 55) | void pika_lvgl_style_t_set_shadow_color(PikaObj *self, PikaObj* color){
  function pika_lvgl_style_t_set_shadow_spread (line 61) | void pika_lvgl_style_t_set_shadow_spread(PikaObj *self, int s){
  function pika_lvgl_style_t_set_shadow_width (line 66) | void pika_lvgl_style_t_set_shadow_width(PikaObj *self, int w){

FILE: gui/lvgl/env_support/rt-thread/lv_rt_thread_port.c
  type rt_thread (line 40) | struct rt_thread
  function lv_rt_log (line 50) | static void lv_rt_log(lv_log_level_t level, const char * buf)
  function lv_timer_os_get_idle (line 58) | uint32_t lv_timer_os_get_idle(void)
  function lvgl_thread_entry (line 64) | static void lvgl_thread_entry(void *parameter)
  function lvgl_thread_init (line 88) | static int lvgl_thread_init(void)

FILE: gui/lvgl/env_support/rt-thread/squareline/lv_ui_entry.c
  function lv_user_gui_init (line 13) | void lv_user_gui_init(void)

FILE: gui/lvgl/examples/anim/lv_example_anim_1.c
  function anim_x_cb (line 4) | static void anim_x_cb(void * var, int32_t v)
  function sw_event_cb (line 9) | static void sw_event_cb(lv_event_t * e)
  function lv_example_anim_1 (line 40) | void lv_example_anim_1(void)

FILE: gui/lvgl/examples/anim/lv_example_anim_2.c
  function anim_x_cb (line 4) | static void anim_x_cb(void * var, int32_t v)
  function anim_size_cb (line 9) | static void anim_size_cb(void * var, int32_t v)
  function lv_example_anim_2 (line 17) | void lv_example_anim_2(void)

FILE: gui/lvgl/examples/anim/lv_example_anim_3.c
  function lv_example_anim_3 (line 37) | void lv_example_anim_3(void)
  function anim_path_bezier3_cb (line 65) | static int32_t anim_path_bezier3_cb(const lv_anim_t * a)
  function refer_chart_cubic_bezier (line 76) | static void refer_chart_cubic_bezier(void)
  function anim_x_cb (line 86) | static void anim_x_cb(void * var, int32_t v)
  function run_button_event_handler (line 91) | static void run_button_event_handler(lv_event_t * e)
  function slider_event_cb (line 99) | static void slider_event_cb(lv_event_t * e)
  function page_obj_init (line 120) | static void page_obj_init(lv_obj_t * par)

FILE: gui/lvgl/examples/anim/lv_example_anim_timeline_1.c
  function set_width (line 7) | static void set_width(lv_anim_t * var, int32_t v)
  function set_height (line 12) | static void set_height(lv_anim_t * var, int32_t v)
  function set_slider_value (line 17) | static void set_slider_value(lv_anim_t * var, int32_t v)
  function btn_start_event_handler (line 22) | static void btn_start_event_handler(lv_event_t * e)
  function btn_pause_event_handler (line 32) | static void btn_pause_event_handler(lv_event_t * e)
  function slider_prg_event_handler (line 38) | static void slider_prg_event_handler(lv_event_t * e)
  function lv_example_anim_timeline_1 (line 49) | void lv_example_anim_timeline_1(void)

FILE: gui/lvgl/examples/event/lv_example_event_1.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_event_1 (line 18) | void lv_example_event_1(void)

FILE: gui/lvgl/examples/event/lv_example_event_2.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_event_2 (line 30) | void lv_example_event_2(void)

FILE: gui/lvgl/examples/event/lv_example_event_3.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_event_3 (line 22) | void lv_example_event_3(void)

FILE: gui/lvgl/examples/event/lv_example_event_4.c
  function timer_cb (line 8) | static void timer_cb(lv_timer_t * timer)
  function event_cb (line 18) | static void event_cb(lv_event_t * e)
  function lv_example_event_4 (line 50) | void lv_example_event_4(void)

FILE: gui/lvgl/examples/get_started/lv_example_get_started_1.c
  function lv_example_get_started_1 (line 7) | void lv_example_get_started_1(void)

FILE: gui/lvgl/examples/get_started/lv_example_get_started_2.c
  function btn_event_cb (line 4) | static void btn_event_cb(lv_event_t * e)
  function lv_example_get_started_2 (line 21) | void lv_example_get_started_2(void)

FILE: gui/lvgl/examples/get_started/lv_example_get_started_3.c
  function lv_color_t (line 8) | static lv_color_t darken(const lv_color_filter_dsc_t * dsc, lv_color_t c...
  function style_init (line 14) | static void style_init(void)
  function lv_example_get_started_3 (line 47) | void lv_example_get_started_3(void)

FILE: gui/lvgl/examples/get_started/lv_example_get_started_4.c
  function slider_event_cb (line 6) | static void slider_event_cb(lv_event_t * e)
  function lv_example_get_started_4 (line 18) | void lv_example_get_started_4(void)

FILE: gui/lvgl/examples/layouts/flex/lv_example_flex_1.c
  function lv_example_flex_1 (line 7) | void lv_example_flex_1(void)

FILE: gui/lvgl/examples/layouts/flex/lv_example_flex_2.c
  function lv_example_flex_2 (line 7) | void lv_example_flex_2(void)

FILE: gui/lvgl/examples/layouts/flex/lv_example_flex_3.c
  function lv_example_flex_3 (line 7) | void lv_example_flex_3(void)

FILE: gui/lvgl/examples/layouts/flex/lv_example_flex_4.c
  function lv_example_flex_4 (line 7) | void lv_example_flex_4(void)

FILE: gui/lvgl/examples/layouts/flex/lv_example_flex_5.c
  function row_gap_anim (line 4) | static void row_gap_anim(void * obj, int32_t v)
  function column_gap_anim (line 9) | static void column_gap_anim(void * obj, int32_t v)
  function lv_example_flex_5 (line 17) | void lv_example_flex_5(void)

FILE: gui/lvgl/examples/layouts/flex/lv_example_flex_6.c
  function lv_example_flex_6 (line 8) | void lv_example_flex_6(void)

FILE: gui/lvgl/examples/layouts/grid/lv_example_grid_1.c
  function lv_example_grid_1 (line 7) | void lv_example_grid_1(void)

FILE: gui/lvgl/examples/layouts/grid/lv_example_grid_2.c
  function lv_example_grid_2 (line 7) | void lv_example_grid_2(void)

FILE: gui/lvgl/examples/layouts/grid/lv_example_grid_3.c
  function lv_example_grid_3 (line 7) | void lv_example_grid_3(void)

FILE: gui/lvgl/examples/layouts/grid/lv_example_grid_4.c
  function lv_example_grid_4 (line 7) | void lv_example_grid_4(void)

FILE: gui/lvgl/examples/layouts/grid/lv_example_grid_5.c
  function row_gap_anim (line 4) | static void row_gap_anim(void * obj, int32_t v)
  function column_gap_anim (line 9) | static void column_gap_anim(void * obj, int32_t v)
  function lv_example_grid_5 (line 17) | void lv_example_grid_5(void)

FILE: gui/lvgl/examples/layouts/grid/lv_example_grid_6.c
  function lv_example_grid_6 (line 7) | void lv_example_grid_6(void)

FILE: gui/lvgl/examples/libs/barcode/lv_example_barcode_1.c
  function lv_example_barcode_1 (line 7) | void lv_example_barcode_1(void)

FILE: gui/lvgl/examples/libs/bmp/lv_example_bmp_1.c
  function lv_example_bmp_1 (line 7) | void lv_example_bmp_1(void)

FILE: gui/lvgl/examples/libs/ffmpeg/lv_example_ffmpeg_1.c
  function lv_example_ffmpeg_1 (line 8) | void lv_example_ffmpeg_1(void)
  function lv_example_ffmpeg_1 (line 17) | void lv_example_ffmpeg_1(void)

FILE: gui/lvgl/examples/libs/ffmpeg/lv_example_ffmpeg_2.c
  function lv_example_ffmpeg_2 (line 8) | void lv_example_ffmpeg_2(void)
  function lv_example_ffmpeg_2 (line 21) | void lv_example_ffmpeg_2(void)

FILE: gui/lvgl/examples/libs/freetype/lv_example_freetype_1.c
  function lv_example_freetype_1 (line 14) | void lv_example_freetype_1(void)
  function lv_example_freetype_1 (line 41) | void lv_example_freetype_1(void)

FILE: gui/lvgl/examples/libs/gif/lv_example_gif_1.c
  function lv_example_gif_1 (line 7) | void lv_example_gif_1(void)

FILE: gui/lvgl/examples/libs/libjpeg_turbo/lv_example_libjpeg_turbo_1.c
  function lv_example_libjpeg_turbo_1 (line 9) | void lv_example_libjpeg_turbo_1(void)
  function lv_example_libjpeg_turbo_1 (line 22) | void lv_example_libjpeg_turbo_1(void)

FILE: gui/lvgl/examples/libs/libpng/lv_example_libpng_1.c
  function lv_example_libpng_1 (line 9) | void lv_example_libpng_1(void)
  function lv_example_libpng_1 (line 27) | void lv_example_libpng_1(void)

FILE: gui/lvgl/examples/libs/lodepng/lv_example_lodepng_1.c
  function lv_example_lodepng_1 (line 7) | void lv_example_lodepng_1(void)

FILE: gui/lvgl/examples/libs/qrcode/lv_example_qrcode_1.c
  function lv_example_qrcode_1 (line 8) | void lv_example_qrcode_1(void)

FILE: gui/lvgl/examples/libs/rlottie/lv_example_rlottie_1.c
  function lv_example_rlottie_1 (line 8) | void lv_example_rlottie_1(void)
  function lv_example_rlottie_1 (line 16) | void lv_example_rlottie_1(void)

FILE: gui/lvgl/examples/libs/rlottie/lv_example_rlottie_2.c
  function lv_example_rlottie_2 (line 8) | void lv_example_rlottie_2(void)
  function lv_example_rlottie_2 (line 17) | void lv_example_rlottie_2(void)

FILE: gui/lvgl/examples/libs/tiny_ttf/lv_example_tiny_ttf_1.c
  function lv_example_tiny_ttf_1 (line 7) | void lv_example_tiny_ttf_1(void)

FILE: gui/lvgl/examples/libs/tiny_ttf/lv_example_tiny_ttf_2.c
  function lv_example_tiny_ttf_2 (line 7) | void lv_example_tiny_ttf_2(void)

FILE: gui/lvgl/examples/libs/tiny_ttf/lv_example_tiny_ttf_3.c
  function lv_example_tiny_ttf_3 (line 11) | void lv_example_tiny_ttf_3(void)
  function font_size_observer_cb (line 45) | static void font_size_observer_cb(lv_observer_t * observer, lv_subject_t...

FILE: gui/lvgl/examples/libs/tjpgd/lv_example_tjpgd_1.c
  function lv_example_tjpgd_1 (line 7) | void lv_example_tjpgd_1(void)

FILE: gui/lvgl/examples/others/file_explorer/lv_example_file_explorer_1.c
  function file_explorer_event_handler (line 9) | static void file_explorer_event_handler(lv_event_t * e)
  function lv_example_file_explorer_1 (line 21) | void lv_example_file_explorer_1(void)

FILE: gui/lvgl/examples/others/file_explorer/lv_example_file_explorer_2.c
  function file_explorer_event_handler (line 9) | static void file_explorer_event_handler(lv_event_t * e)
  function btn_event_handler (line 22) | static void btn_event_handler(lv_event_t * e)
  function dd_event_handler (line 36) | static void dd_event_handler(lv_event_t * e)
  function lv_example_file_explorer_2 (line 54) | void lv_example_file_explorer_2(void)

FILE: gui/lvgl/examples/others/file_explorer/lv_example_file_explorer_3.c
  function exch_table_item (line 9) | static void exch_table_item(lv_obj_t * tb, int16_t i, int16_t j)
  function sort_by_file_kind (line 24) | static void sort_by_file_kind(lv_obj_t * tb, int16_t lo, int16_t hi)
  function file_explorer_event_handler (line 45) | static void file_explorer_event_handler(lv_event_t * e)
  function lv_example_file_explorer_3 (line 64) | void lv_example_file_explorer_3(void)

FILE: gui/lvgl/examples/others/fragment/lv_example_fragment_1.c
  type sample_fragment_t (line 17) | struct sample_fragment_t {
  type sample_fragment_t (line 25) | struct sample_fragment_t
  function lv_example_fragment_1 (line 28) | void lv_example_fragment_1(void)
  function sample_fragment_ctor (line 40) | static void sample_fragment_ctor(lv_fragment_t * self, void * args)
  function lv_obj_t (line 45) | static lv_obj_t * sample_fragment_create_obj(lv_fragment_t * self, lv_ob...
  function sample_container_delete (line 53) | static void sample_container_delete(lv_event_t * e)

FILE: gui/lvgl/examples/others/fragment/lv_example_fragment_2.c
  type sample_fragment_t (line 21) | typedef struct sample_fragment_t {
  function lv_example_fragment_2 (line 36) | void lv_example_fragment_2(void)
  function sample_fragment_ctor (line 69) | static void sample_fragment_ctor(lv_fragment_t * self, void * args)
  function lv_obj_t (line 76) | static lv_obj_t * sample_fragment_create_obj(lv_fragment_t * self, lv_ob...
  function sample_push_click (line 99) | static void sample_push_click(lv_event_t * e)
  function sample_pop_click (line 107) | static void sample_pop_click(lv_event_t * e)
  function sample_container_delete (line 113) | static void sample_container_delete(lv_event_t * e)
  function sample_fragment_inc_click (line 119) | static void sample_fragment_inc_click(lv_event_t * e)

FILE: gui/lvgl/examples/others/gridnav/lv_example_gridnav_1.c
  function lv_example_gridnav_1 (line 7) | void lv_example_gridnav_1(void)

FILE: gui/lvgl/examples/others/gridnav/lv_example_gridnav_2.c
  function lv_example_gridnav_2 (line 7) | void lv_example_gridnav_2(void)

FILE: gui/lvgl/examples/others/gridnav/lv_example_gridnav_3.c
  function cont_sub_event_cb (line 4) | static void cont_sub_event_cb(lv_event_t * e)
  function lv_example_gridnav_3 (line 20) | void lv_example_gridnav_3(void)

FILE: gui/lvgl/examples/others/gridnav/lv_example_gridnav_4.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_gridnav_4 (line 15) | void lv_example_gridnav_4(void)

FILE: gui/lvgl/examples/others/gridnav/lv_example_gridnav_5.c
  function slider_key_cb (line 10) | static void slider_key_cb(lv_event_t * e)
  function roller_key_cb (line 15) | static void roller_key_cb(lv_event_t * e)
  function lv_example_gridnav_5 (line 24) | void lv_example_gridnav_5(void)

FILE: gui/lvgl/examples/others/ime/lv_example_ime_pinyin_1.c
  function ta_event_cb (line 4) | static void ta_event_cb(lv_event_t * e)
  function lv_example_ime_pinyin_1 (line 23) | void lv_example_ime_pinyin_1(void)

FILE: gui/lvgl/examples/others/ime/lv_example_ime_pinyin_2.c
  function ta_event_cb (line 4) | static void ta_event_cb(lv_event_t * e)
  function lv_example_ime_pinyin_2 (line 23) | void lv_example_ime_pinyin_2(void)

FILE: gui/lvgl/examples/others/imgfont/lv_example_imgfont_1.c
  function lv_example_imgfont_1 (line 35) | void lv_example_imgfont_1(void)
  function lv_example_imgfont_1 (line 52) | void lv_example_imgfont_1(void)

FILE: gui/lvgl/examples/others/monkey/lv_example_monkey_1.c
  function lv_example_monkey_1 (line 4) | void lv_example_monkey_1(void)

FILE: gui/lvgl/examples/others/monkey/lv_example_monkey_2.c
  function lv_example_monkey_2 (line 4) | void lv_example_monkey_2(void)

FILE: gui/lvgl/examples/others/monkey/lv_example_monkey_3.c
  function lv_example_monkey_3 (line 4) | void lv_example_monkey_3(void)

FILE: gui/lvgl/examples/others/observer/lv_example_observer_1.c
  function lv_example_observer_1 (line 9) | void lv_example_observer_1(void)

FILE: gui/lvgl/examples/others/observer/lv_example_observer_2.c
  function lv_example_observer_2 (line 14) | void lv_example_observer_2(void)
  function engine_state_observer_cb (line 28) | static void engine_state_observer_cb(lv_observer_t * observer, lv_subjec...
  function app_init (line 38) | static void app_init(void)
  type auth_state_t (line 51) | typedef enum {
  function textarea_event_cb (line 59) | static void textarea_event_cb(lv_event_t * e)
  function info_label_observer_cb (line 70) | static void info_label_observer_cb(lv_observer_t * observer, lv_subject_...
  function log_out_click_event_cb (line 86) | static void log_out_click_event_cb(lv_event_t * e)
  function ui_init (line 92) | static void ui_init(void)

FILE: gui/lvgl/examples/others/observer/lv_example_observer_3.c
  type time_format_t (line 21) | typedef enum {
  type time_am_pm_t (line 26) | typedef enum {
  function lv_example_observer_3 (line 38) | void lv_example_observer_3(void)
  function set_btn_clicked_event_cb (line 69) | static void set_btn_clicked_event_cb(lv_event_t * e)
  function close_clicked_event_cb (line 111) | static void close_clicked_event_cb(lv_event_t * e)
  function time_observer_cb (line 121) | static void time_observer_cb(lv_observer_t * observer, lv_subject_t * su...
  function hour_roller_options_update (line 139) | static void hour_roller_options_update(lv_observer_t * observer, lv_subj...

FILE: gui/lvgl/examples/others/observer/lv_example_observer_4.c
  function lv_example_observer_4 (line 15) | void lv_example_observer_4(void)
  function anim_get_x_cb (line 67) | static int32_t anim_get_x_cb(lv_anim_t * a)
  function anim_set_x_cb (line 72) | static void anim_set_x_cb(void * obj, int32_t v)
  function cont_observer_cb (line 77) | static void cont_observer_cb(lv_observer_t * observer, lv_subject_t * su...
  function btn_create (line 152) | static void btn_create(lv_obj_t * parent, const char * text)
  function btn_click_event_cb (line 166) | static void btn_click_event_cb(lv_event_t * e)
  function btn_observer_cb (line 173) | static void btn_observer_cb(lv_observer_t * observer, lv_subject_t * sub...
  function indicator_observer_cb (line 185) | static void indicator_observer_cb(lv_observer_t * observer, lv_subject_t...

FILE: gui/lvgl/examples/others/observer/lv_example_observer_5.c
  type fw_update_state_t (line 4) | typedef enum {
  function lv_example_observer_5 (line 28) | void lv_example_observer_5(void)
  function fw_update_btn_clicked_event_cb (line 43) | static void fw_update_btn_clicked_event_cb(lv_event_t * e)
  function fw_update_close_event_cb (line 63) | static void fw_update_close_event_cb(lv_event_t * e)
  function restart_btn_click_event_cb (line 69) | static void restart_btn_click_event_cb(lv_event_t * e)
  function fw_update_win_observer_cb (line 76) | static void fw_update_win_observer_cb(lv_observer_t * observer, lv_subje...
  function connect_timer_cb (line 123) | static void connect_timer_cb(lv_timer_t * t)
  function download_timer_cb (line 131) | static void download_timer_cb(lv_timer_t * t)
  function fw_upload_manager_observer_cb (line 151) | static void fw_upload_manager_observer_cb(lv_observer_t * observer, lv_s...

FILE: gui/lvgl/examples/others/observer/lv_example_observer_6.c
  type theme_mode_t (line 4) | typedef enum {
  function lv_example_observer_6 (line 18) | void lv_example_observer_6(void)
  function switch_theme_event_cb (line 40) | static void switch_theme_event_cb(lv_event_t * e)
  type my_panel_styles_t (line 54) | typedef struct {
  function my_panel_style_observer_cb (line 59) | static void my_panel_style_observer_cb(lv_observer_t * observer, lv_subj...
  function lv_obj_t (line 83) | static lv_obj_t * my_panel_create(lv_obj_t * parent)
  type my_button_styles_t (line 124) | typedef struct {
  function my_button_style_observer_cb (line 129) | static void my_button_style_observer_cb(lv_observer_t * observer, lv_sub...
  function lv_obj_t (line 157) | static lv_obj_t * my_button_create(lv_obj_t * parent, const char * text,...

FILE: gui/lvgl/examples/others/snapshot/lv_example_snapshot_1.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_snapshot_1 (line 23) | void lv_example_snapshot_1(void)

FILE: gui/lvgl/examples/porting/lv_port_disp_template.c
  function lv_port_disp_init (line 53) | void lv_port_disp_init(void)
  function disp_init (line 99) | static void disp_init(void)
  function disp_enable_update (line 108) | void disp_enable_update(void)
  function disp_disable_update (line 115) | void disp_disable_update(void)
  function disp_flush (line 124) | static void disp_flush(lv_display_t * disp_drv, const lv_area_t * area, ...
  type keep_pedantic_happy (line 148) | typedef int keep_pedantic_happy;

FILE: gui/lvgl/examples/porting/lv_port_fs_template.c
  function lv_port_fs_init (line 56) | void lv_port_fs_init(void)
  function fs_init (line 91) | static void fs_init(void)
  function lv_fs_res_t (line 133) | static lv_fs_res_t fs_close(lv_fs_drv_t * drv, void * file_p)
  function lv_fs_res_t (line 151) | static lv_fs_res_t fs_read(lv_fs_drv_t * drv, void * file_p, void * buf,...
  function lv_fs_res_t (line 169) | static lv_fs_res_t fs_write(lv_fs_drv_t * drv, void * file_p, const void...
  function lv_fs_res_t (line 186) | static lv_fs_res_t fs_seek(lv_fs_drv_t * drv, void * file_p, uint32_t po...
  function lv_fs_res_t (line 201) | static lv_fs_res_t fs_tell(lv_fs_drv_t * drv, void * file_p, uint32_t * ...
  function lv_fs_res_t (line 233) | static lv_fs_res_t fs_dir_read(lv_fs_drv_t * drv, void * rddir_p, char *...
  function lv_fs_res_t (line 248) | static lv_fs_res_t fs_dir_close(lv_fs_drv_t * drv, void * rddir_p)
  type keep_pedantic_happy (line 260) | typedef int keep_pedantic_happy;

FILE: gui/lvgl/examples/porting/lv_port_indev_template.c
  function lv_port_indev_init (line 69) | void lv_port_indev_init(void)
  function touchpad_init (line 175) | static void touchpad_init(void)
  function touchpad_read (line 181) | static void touchpad_read(lv_indev_t * indev_drv, lv_indev_data_t * data)
  function touchpad_is_pressed (line 201) | static bool touchpad_is_pressed(void)
  function touchpad_get_xy (line 209) | static void touchpad_get_xy(int32_t * x, int32_t * y)
  function mouse_init (line 222) | static void mouse_init(void)
  function mouse_read (line 228) | static void mouse_read(lv_indev_t * indev_drv, lv_indev_data_t * data)
  function mouse_is_pressed (line 243) | static bool mouse_is_pressed(void)
  function mouse_get_xy (line 251) | static void mouse_get_xy(int32_t * x, int32_t * y)
  function keypad_init (line 264) | static void keypad_init(void)
  function keypad_read (line 270) | static void keypad_read(lv_indev_t * indev_drv, lv_indev_data_t * data)
  function keypad_get_key (line 311) | static uint32_t keypad_get_key(void)
  function encoder_init (line 323) | static void encoder_init(void)
  function encoder_read (line 329) | static void encoder_read(lv_indev_t * indev_drv, lv_indev_data_t * data)
  function encoder_handler (line 337) | static void encoder_handler(void)
  function button_init (line 350) | static void button_init(void)
  function button_read (line 356) | static void button_read(lv_indev_t * indev_drv, lv_indev_data_t * data)
  function button_get_pressed_id (line 377) | static int8_t button_get_pressed_id(void)
  function button_is_pressed (line 394) | static bool button_is_pressed(uint8_t id)
  type keep_pedantic_happy (line 405) | typedef int keep_pedantic_happy;

FILE: gui/lvgl/examples/porting/lv_port_lcd_stm32_template.c
  function lv_port_display_init (line 63) | void lv_port_display_init(void)
  function lcd_color_transfer_ready_cb (line 100) | static void lcd_color_transfer_ready_cb(SPI_HandleTypeDef * hspi)
  function lcd_io_init (line 109) | static int32_t lcd_io_init(void)
  function lcd_send_cmd (line 127) | static void lcd_send_cmd(lv_display_t * disp, const uint8_t * cmd, size_...
  function lcd_send_color (line 153) | static void lcd_send_color(lv_display_t * disp, const uint8_t * cmd, siz...
  type keep_pedantic_happy (line 182) | typedef int keep_pedantic_happy;

FILE: gui/lvgl/examples/porting/osal/lv_example_osal.c
  function lv_example_osal (line 41) | void lv_example_osal(void)
  function counter_button_event_cb (line 62) | static void counter_button_event_cb(lv_event_t * e)
  function increment_thread_entry (line 70) | static void increment_thread_entry(void * user_data)

FILE: gui/lvgl/examples/scroll/lv_example_scroll_1.c
  function lv_example_scroll_1 (line 7) | void lv_example_scroll_1(void)

FILE: gui/lvgl/examples/scroll/lv_example_scroll_2.c
  function sw_event_cb (line 4) | static void sw_event_cb(lv_event_t * e)
  function lv_example_scroll_2 (line 20) | void lv_example_scroll_2(void)

FILE: gui/lvgl/examples/scroll/lv_example_scroll_3.c
  function float_button_event_cb (line 6) | static void float_button_event_cb(lv_event_t * e)
  function lv_example_scroll_3 (line 27) | void lv_example_scroll_3(void)

FILE: gui/lvgl/examples/scroll/lv_example_scroll_4.c
  function lv_example_scroll_4 (line 7) | void lv_example_scroll_4(void)

FILE: gui/lvgl/examples/scroll/lv_example_scroll_5.c
  function lv_example_scroll_5 (line 7) | void lv_example_scroll_5(void)

FILE: gui/lvgl/examples/scroll/lv_example_scroll_6.c
  function scroll_event_cb (line 4) | static void scroll_event_cb(lv_event_t * e)
  function lv_example_scroll_6 (line 51) | void lv_example_scroll_6(void)

FILE: gui/lvgl/examples/styles/lv_example_style_1.c
  function lv_example_style_1 (line 7) | void lv_example_style_1(void)

FILE: gui/lvgl/examples/styles/lv_example_style_10.c
  function lv_example_style_10 (line 7) | void lv_example_style_10(void)

FILE: gui/lvgl/examples/styles/lv_example_style_11.c
  function lv_example_style_11 (line 7) | void lv_example_style_11(void)

FILE: gui/lvgl/examples/styles/lv_example_style_12.c
  function lv_example_style_12 (line 7) | void lv_example_style_12(void)

FILE: gui/lvgl/examples/styles/lv_example_style_13.c
  function lv_example_style_13 (line 7) | void lv_example_style_13(void)

FILE: gui/lvgl/examples/styles/lv_example_style_14.c
  function new_theme_apply_cb (line 9) | static void new_theme_apply_cb(lv_theme_t * th, lv_obj_t * obj)
  function new_theme_init_and_set (line 18) | static void new_theme_init_and_set(void)
  function lv_example_style_14 (line 42) | void lv_example_style_14(void)

FILE: gui/lvgl/examples/styles/lv_example_style_15.c
  function lv_example_style_15 (line 7) | void lv_example_style_15(void)

FILE: gui/lvgl/examples/styles/lv_example_style_16.c
  function lv_example_style_16 (line 10) | void lv_example_style_16(void)
  function lv_example_style_16 (line 73) | void lv_example_style_16(void)

FILE: gui/lvgl/examples/styles/lv_example_style_17.c
  function lv_example_style_17 (line 9) | void lv_example_style_17(void)
  function lv_example_style_17 (line 42) | void lv_example_style_17(void)

FILE: gui/lvgl/examples/styles/lv_example_style_18.c
  function lv_example_style_18 (line 9) | void lv_example_style_18(void)
  function lv_example_style_18 (line 88) | void lv_example_style_18(void)

FILE: gui/lvgl/examples/styles/lv_example_style_2.c
  function lv_example_style_2 (line 7) | void lv_example_style_2(void)

FILE: gui/lvgl/examples/styles/lv_example_style_3.c
  function lv_example_style_3 (line 7) | void lv_example_style_3(void)

FILE: gui/lvgl/examples/styles/lv_example_style_4.c
  function lv_example_style_4 (line 7) | void lv_example_style_4(void)

FILE: gui/lvgl/examples/styles/lv_example_style_5.c
  function lv_example_style_5 (line 7) | void lv_example_style_5(void)

FILE: gui/lvgl/examples/styles/lv_example_style_6.c
  function lv_example_style_6 (line 7) | void lv_example_style_6(void)

FILE: gui/lvgl/examples/styles/lv_example_style_7.c
  function lv_example_style_7 (line 7) | void lv_example_style_7(void)

FILE: gui/lvgl/examples/styles/lv_example_style_8.c
  function lv_example_style_8 (line 7) | void lv_example_style_8(void)

FILE: gui/lvgl/examples/styles/lv_example_style_9.c
  function lv_example_style_9 (line 7) | void lv_example_style_9(void)

FILE: gui/lvgl/examples/widgets/animimg/lv_example_animimg_1.c
  function lv_example_animimg_1 (line 13) | void lv_example_animimg_1(void)

FILE: gui/lvgl/examples/widgets/arc/lv_example_arc_1.c
  function lv_example_arc_1 (line 7) | void lv_example_arc_1(void)
  function value_changed_event_cb (line 24) | static void value_changed_event_cb(lv_event_t * e)

FILE: gui/lvgl/examples/widgets/arc/lv_example_arc_2.c
  function set_angle (line 5) | static void set_angle(void * obj, int32_t v)
  function lv_example_arc_2 (line 13) | void lv_example_arc_2(void)

FILE: gui/lvgl/examples/widgets/bar/lv_example_bar_1.c
  function lv_example_bar_1 (line 4) | void lv_example_bar_1(void)

FILE: gui/lvgl/examples/widgets/bar/lv_example_bar_2.c
  function lv_example_bar_2 (line 7) | void lv_example_bar_2(void)

FILE: gui/lvgl/examples/widgets/bar/lv_example_bar_3.c
  function set_temp (line 4) | static void set_temp(void * bar, int32_t temp)
  function lv_example_bar_3 (line 12) | void lv_example_bar_3(void)

FILE: gui/lvgl/examples/widgets/bar/lv_example_bar_4.c
  function lv_example_bar_4 (line 7) | void lv_example_bar_4(void)

FILE: gui/lvgl/examples/widgets/bar/lv_example_bar_5.c
  function lv_example_bar_5 (line 7) | void lv_example_bar_5(void)

FILE: gui/lvgl/examples/widgets/bar/lv_example_bar_6.c
  function set_value (line 7) | static void set_value(void * bar, int32_t v)
  function event_cb (line 12) | static void event_cb(lv_event_t * e)
  function lv_example_bar_6 (line 56) | void lv_example_bar_6(void)

FILE: gui/lvgl/examples/widgets/bar/lv_example_bar_7.c
  function lv_example_bar_7 (line 7) | void lv_example_bar_7(void)

FILE: gui/lvgl/examples/widgets/button/lv_example_button_1.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_button_1 (line 16) | void lv_example_button_1(void)

FILE: gui/lvgl/examples/widgets/button/lv_example_button_2.c
  function lv_example_button_2 (line 7) | void lv_example_button_2(void)

FILE: gui/lvgl/examples/widgets/button/lv_example_button_3.c
  function lv_example_button_3 (line 7) | void lv_example_button_3(void)

FILE: gui/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_1.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_buttonmatrix_1 (line 21) | void lv_example_buttonmatrix_1(void)

FILE: gui/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_2.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_buttonmatrix_2 (line 81) | void lv_example_buttonmatrix_2(void)

FILE: gui/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_3.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_buttonmatrix_3 (line 27) | void lv_example_buttonmatrix_3(void)

FILE: gui/lvgl/examples/widgets/calendar/lv_example_calendar_1.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_calendar_1 (line 17) | void lv_example_calendar_1(void)

FILE: gui/lvgl/examples/widgets/calendar/lv_example_calendar_2.c
  function lv_example_calendar_2 (line 4) | void lv_example_calendar_2(void)
  function lv_example_calendar_2 (line 25) | void lv_example_calendar_2(void)

FILE: gui/lvgl/examples/widgets/canvas/lv_example_canvas_1.c
  function lv_example_canvas_1 (line 7) | void lv_example_canvas_1(void)

FILE: gui/lvgl/examples/widgets/canvas/lv_example_canvas_2.c
  function lv_example_canvas_2 (line 10) | void lv_example_canvas_2(void)

FILE: gui/lvgl/examples/widgets/canvas/lv_example_canvas_3.c
  function lv_example_canvas_3 (line 10) | void lv_example_canvas_3(void)

FILE: gui/lvgl/examples/widgets/canvas/lv_example_canvas_4.c
  function lv_example_canvas_4 (line 10) | void lv_example_canvas_4(void)

FILE: gui/lvgl/examples/widgets/canvas/lv_example_canvas_5.c
  function lv_example_canvas_5 (line 10) | void lv_example_canvas_5(void)

FILE: gui/lvgl/examples/widgets/canvas/lv_example_canvas_6.c
  function lv_example_canvas_6 (line 10) | void lv_example_canvas_6(void)

FILE: gui/lvgl/examples/widgets/canvas/lv_example_canvas_7.c
  function lv_example_canvas_7 (line 10) | void lv_example_canvas_7(void)

FILE: gui/lvgl/examples/widgets/canvas/lv_example_canvas_8.c
  function lv_example_canvas_8 (line 12) | void lv_example_canvas_8(void)
  function lv_example_canvas_8 (line 47) | void lv_example_canvas_8(void)

FILE: gui/lvgl/examples/widgets/chart/lv_example_chart_1.c
  function lv_example_chart_1 (line 7) | void lv_example_chart_1(void)

FILE: gui/lvgl/examples/widgets/chart/lv_example_chart_2.c
  function lv_example_chart_2 (line 7) | void lv_example_chart_2(void)

FILE: gui/lvgl/examples/widgets/chart/lv_example_chart_3.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_chart_3 (line 63) | void lv_example_chart_3(void)

FILE: gui/lvgl/examples/widgets/chart/lv_example_chart_4.c
  function draw_event_cb (line 5) | static void draw_event_cb(lv_event_t * e)
  function lv_example_chart_4 (line 28) | void lv_example_chart_4(void)

FILE: gui/lvgl/examples/widgets/chart/lv_example_chart_5.c
  function lv_example_chart_5 (line 12) | void lv_example_chart_5(void)
  function draw_event_cb (line 35) | static void draw_event_cb(lv_event_t * e)
  function add_faded_area (line 50) | static void add_faded_area(lv_event_t * e)
  function hook_division_lines (line 106) | static void hook_division_lines(lv_event_t * e)

FILE: gui/lvgl/examples/widgets/chart/lv_example_chart_6.c
  function value_changed_event_cb (line 8) | static void value_changed_event_cb(lv_event_t * e)
  function lv_example_chart_6 (line 22) | void lv_example_chart_6(void)

FILE: gui/lvgl/examples/widgets/chart/lv_example_chart_7.c
  function draw_event_cb (line 4) | static void draw_event_cb(lv_event_t * e)
  function add_data (line 32) | static void add_data(lv_timer_t * timer)
  function lv_example_chart_7 (line 41) | void lv_example_chart_7(void)

FILE: gui/lvgl/examples/widgets/chart/lv_example_chart_8.c
  function add_data (line 4) | static void add_data(lv_timer_t * t)
  function lv_example_chart_8 (line 25) | void lv_example_chart_8(void)

FILE: gui/lvgl/examples/widgets/checkbox/lv_example_checkbox_1.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_checkbox_1 (line 18) | void lv_example_checkbox_1(void)

FILE: gui/lvgl/examples/widgets/checkbox/lv_example_checkbox_2.c
  function radio_event_handler (line 9) | static void radio_event_handler(lv_event_t * e)
  function radiobutton_create (line 27) | static void radiobutton_create(lv_obj_t * parent, const char * txt)
  function lv_example_checkbox_2 (line 39) | void lv_example_checkbox_2(void)

FILE: gui/lvgl/examples/widgets/dropdown/lv_example_dropdown_1.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_dropdown_1 (line 15) | void lv_example_dropdown_1(void)

FILE: gui/lvgl/examples/widgets/dropdown/lv_example_dropdown_2.c
  function lv_example_dropdown_2 (line 7) | void lv_example_dropdown_2(void)

FILE: gui/lvgl/examples/widgets/dropdown/lv_example_dropdown_3.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_dropdown_3 (line 15) | void lv_example_dropdown_3(void)

FILE: gui/lvgl/examples/widgets/image/lv_example_image_1.c
  function lv_example_image_1 (line 4) | void lv_example_image_1(void)

FILE: gui/lvgl/examples/widgets/image/lv_example_image_2.c
  function lv_example_image_2 (line 13) | void lv_example_image_2(void)
  function slider_event_cb (line 40) | static void slider_event_cb(lv_event_t * e)
  function lv_obj_t (line 52) | static lv_obj_t * create_slider(lv_color_t color)

FILE: gui/lvgl/examples/widgets/image/lv_example_image_3.c
  function set_angle (line 4) | static void set_angle(void * img, int32_t v)
  function set_scale (line 9) | static void set_scale(void * img, int32_t v)
  function lv_example_image_3 (line 17) | void lv_example_image_3(void)

FILE: gui/lvgl/examples/widgets/image/lv_example_image_4.c
  function ofs_y_anim (line 4) | static void ofs_y_anim(void * img, int32_t v)
  function lv_example_image_4 (line 12) | void lv_example_image_4(void)

FILE: gui/lvgl/examples/widgets/imagebutton/lv_example_imagebutton_1.c
  function lv_example_imagebutton_1 (line 4) | void lv_example_imagebutton_1(void)

FILE: gui/lvgl/examples/widgets/keyboard/lv_example_keyboard_1.c
  function ta_event_cb (line 4) | static void ta_event_cb(lv_event_t * e)
  function lv_example_keyboard_1 (line 20) | void lv_example_keyboard_1(void)

FILE: gui/lvgl/examples/widgets/keyboard/lv_example_keyboard_2.c
  function lv_example_keyboard_2 (line 4) | void lv_example_keyboard_2(void)

FILE: gui/lvgl/examples/widgets/label/lv_example_label_1.c
  function lv_example_label_1 (line 7) | void lv_example_label_1(void)

FILE: gui/lvgl/examples/widgets/label/lv_example_label_2.c
  function lv_example_label_2 (line 7) | void lv_example_label_2(void)

FILE: gui/lvgl/examples/widgets/label/lv_example_label_3.c
  function lv_example_label_3 (line 7) | void lv_example_label_3(void)

FILE: gui/lvgl/examples/widgets/label/lv_example_label_4.c
  function generate_mask (line 8) | static void generate_mask(lv_draw_buf_t * mask, int32_t w, int32_t h, co...
  function lv_example_label_4 (line 36) | void lv_example_label_4(void)

FILE: gui/lvgl/examples/widgets/label/lv_example_label_5.c
  function lv_example_label_5 (line 8) | void lv_example_label_5(void)

FILE: gui/lvgl/examples/widgets/led/lv_example_led_1.c
  function lv_example_led_1 (line 7) | void lv_example_led_1(void)

FILE: gui/lvgl/examples/widgets/line/lv_example_line_1.c
  function lv_example_line_1 (line 4) | void lv_example_line_1(void)

FILE: gui/lvgl/examples/widgets/list/lv_example_list_1.c
  function event_handler (line 5) | static void event_handler(lv_event_t * e)
  function lv_example_list_1 (line 14) | void lv_example_list_1(void)

FILE: gui/lvgl/examples/widgets/list/lv_example_list_2.c
  function event_handler (line 9) | static void event_handler(lv_event_t * e)
  function event_handler_top (line 36) | static void event_handler_top(lv_event_t * e)
  function event_handler_up (line 46) | static void event_handler_up(lv_event_t * e)
  function event_handler_center (line 58) | static void event_handler_center(lv_event_t * e)
  function event_handler_dn (line 73) | static void event_handler_dn(lv_event_t * e)
  function event_handler_bottom (line 85) | static void event_handler_bottom(lv_event_t * e)
  function event_handler_swap (line 95) | static void event_handler_swap(lv_event_t * e)
  function lv_example_list_2 (line 112) | void lv_example_list_2(void)

FILE: gui/lvgl/examples/widgets/lottie/lv_example_lottie_1.c
  function lv_example_lottie_1 (line 8) | void lv_example_lottie_1(void)
  function lv_example_lottie_1 (line 32) | void lv_example_lottie_1(void)

FILE: gui/lvgl/examples/widgets/lottie/lv_example_lottie_2.c
  function lv_example_lottie_2 (line 8) | void lv_example_lottie_2(void)
  function lv_example_lottie_2 (line 30) | void lv_example_lottie_2(void)

FILE: gui/lvgl/examples/widgets/menu/lv_example_menu_1.c
  function lv_example_menu_1 (line 4) | void lv_example_menu_1(void)

FILE: gui/lvgl/examples/widgets/menu/lv_example_menu_2.c
  function back_event_handler (line 4) | static void back_event_handler(lv_event_t * e)
  function lv_example_menu_2 (line 17) | void lv_example_menu_2(void)

FILE: gui/lvgl/examples/widgets/menu/lv_example_menu_3.c
  function lv_example_menu_3 (line 4) | void lv_example_menu_3(void)

FILE: gui/lvgl/examples/widgets/menu/lv_example_menu_4.c
  function float_button_event_cb (line 8) | static void float_button_event_cb(lv_event_t * e)
  function lv_example_menu_4 (line 31) | void lv_example_menu_4(void)

FILE: gui/lvgl/examples/widgets/menu/lv_example_menu_5.c
  type lv_menu_builder_variant_t (line 4) | typedef enum {
  function lv_example_menu_5 (line 19) | void lv_example_menu_5(void)
  function back_event_handler (line 113) | static void back_event_handler(lv_event_t * e)
  function switch_handler (line 126) | static void switch_handler(lv_event_t * e)
  function lv_obj_t (line 146) | static lv_obj_t * create_text(lv_obj_t * parent, const char * icon, cons...
  function lv_obj_t (line 174) | static lv_obj_t * create_slider(lv_obj_t * parent, const char * icon, co...
  function lv_obj_t (line 191) | static lv_obj_t * create_switch(lv_obj_t * parent, const char * icon, co...

FILE: gui/lvgl/examples/widgets/msgbox/lv_example_msgbox_1.c
  function event_cb (line 4) | static void event_cb(lv_event_t * e)
  function lv_example_msgbox_1 (line 12) | void lv_example_msgbox_1(void)

FILE: gui/lvgl/examples/widgets/msgbox/lv_example_msgbox_2.c
  function minimize_button_event_cb (line 4) | static void minimize_button_event_cb(lv_event_t * e)
  function lv_example_msgbox_2 (line 10) | void lv_example_msgbox_2(void)

FILE: gui/lvgl/examples/widgets/obj/lv_example_obj_1.c
  function lv_example_obj_1 (line 4) | void lv_example_obj_1(void)

FILE: gui/lvgl/examples/widgets/obj/lv_example_obj_2.c
  function drag_event_handler (line 4) | static void drag_event_handler(lv_event_t * e)
  function lv_example_obj_2 (line 22) | void lv_example_obj_2(void)

FILE: gui/lvgl/examples/widgets/roller/lv_example_roller_1.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_roller_1 (line 18) | void lv_example_roller_1(void)

FILE: gui/lvgl/examples/widgets/roller/lv_example_roller_2.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_roller_2 (line 18) | void lv_example_roller_2(void)

FILE: gui/lvgl/examples/widgets/roller/lv_example_roller_3.c
  function generate_mask (line 5) | static void generate_mask(lv_draw_buf_t * mask)
  function lv_example_roller_3 (line 41) | void lv_example_roller_3(void)

FILE: gui/lvgl/examples/widgets/scale/lv_example_scale_1.c
  function lv_example_scale_1 (line 7) | void lv_example_scale_1(void)

FILE: gui/lvgl/examples/widgets/scale/lv_example_scale_2.c
  function lv_example_scale_2 (line 7) | void lv_example_scale_2(void)

FILE: gui/lvgl/examples/widgets/scale/lv_example_scale_3.c
  function set_needle_line_value (line 9) | static void set_needle_line_value(void * obj, int32_t v)
  function set_needle_img_value (line 14) | static void set_needle_img_value(void * obj, int32_t v)
  function lv_example_scale_3 (line 22) | void lv_example_scale_3(void)

FILE: gui/lvgl/examples/widgets/scale/lv_example_scale_4.c
  function lv_example_scale_4 (line 7) | void lv_example_scale_4(void)

FILE: gui/lvgl/examples/widgets/scale/lv_example_scale_5.c
  function lv_example_scale_5 (line 7) | void lv_example_scale_5(void)

FILE: gui/lvgl/examples/widgets/scale/lv_example_scale_6.c
  function timer_cb (line 17) | static void timer_cb(lv_timer_t * timer)
  function lv_example_scale_6 (line 54) | void lv_example_scale_6(void)

FILE: gui/lvgl/examples/widgets/scale/lv_example_scale_7.c
  function draw_event_cb (line 6) | static void draw_event_cb(lv_event_t * e)
  function lv_example_scale_7 (line 52) | void lv_example_scale_7(void)

FILE: gui/lvgl/examples/widgets/slider/lv_example_slider_1.c
  function lv_example_slider_1 (line 10) | void lv_example_slider_1(void)
  function slider_event_cb (line 25) | static void slider_event_cb(lv_event_t * e)

FILE: gui/lvgl/examples/widgets/slider/lv_example_slider_2.c
  function lv_example_slider_2 (line 7) | void lv_example_slider_2(void)

FILE: gui/lvgl/examples/widgets/slider/lv_example_slider_3.c
  function lv_example_slider_3 (line 13) | void lv_example_slider_3(void)
  function slider_event_cb (line 29) | static void slider_event_cb(lv_event_t * e)

FILE: gui/lvgl/examples/widgets/slider/lv_example_slider_4.c
  function lv_example_slider_4 (line 10) | void lv_example_slider_4(void)
  function slider_event_cb (line 25) | static void slider_event_cb(lv_event_t * e)

FILE: gui/lvgl/examples/widgets/span/lv_example_span_1.c
  function lv_example_span_1 (line 7) | void lv_example_span_1(void)

FILE: gui/lvgl/examples/widgets/spinbox/lv_example_spinbox_1.c
  function lv_spinbox_increment_event_cb (line 6) | static void lv_spinbox_increment_event_cb(lv_event_t * e)
  function lv_spinbox_decrement_event_cb (line 14) | static void lv_spinbox_decrement_event_cb(lv_event_t * e)
  function lv_example_spinbox_1 (line 22) | void lv_example_spinbox_1(void)

FILE: gui/lvgl/examples/widgets/spinner/lv_example_spinner_1.c
  function lv_example_spinner_1 (line 4) | void lv_example_spinner_1(void)

FILE: gui/lvgl/examples/widgets/switch/lv_example_switch_1.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_switch_1 (line 14) | void lv_example_switch_1(void)

FILE: gui/lvgl/examples/widgets/table/lv_example_table_1.c
  function draw_event_cb (line 4) | static void draw_event_cb(lv_event_t * e)
  function lv_example_table_1 (line 44) | void lv_example_table_1(void)

FILE: gui/lvgl/examples/widgets/table/lv_example_table_2.c
  function draw_event_cb (line 6) | static void draw_event_cb(lv_event_t * e)
  function change_event_cb (line 48) | static void change_event_cb(lv_event_t * e)
  function lv_example_table_2 (line 62) | void lv_example_table_2(void)

FILE: gui/lvgl/examples/widgets/tabview/lv_example_tabview_1.c
  function lv_example_tabview_1 (line 4) | void lv_example_tabview_1(void)

FILE: gui/lvgl/examples/widgets/tabview/lv_example_tabview_2.c
  function lv_example_tabview_2 (line 5) | void lv_example_tabview_2(void)

FILE: gui/lvgl/examples/widgets/textarea/lv_example_textarea_1.c
  function textarea_event_handler (line 4) | static void textarea_event_handler(lv_event_t * e)
  function btnm_event_handler (line 11) | static void btnm_event_handler(lv_event_t * e)
  function lv_example_textarea_1 (line 23) | void lv_example_textarea_1(void)

FILE: gui/lvgl/examples/widgets/textarea/lv_example_textarea_2.c
  function lv_example_textarea_2 (line 8) | void lv_example_textarea_2(void)
  function ta_event_cb (line 52) | static void ta_event_cb(lv_event_t * e)

FILE: gui/lvgl/examples/widgets/textarea/lv_example_textarea_3.c
  function lv_example_textarea_3 (line 12) | void lv_example_textarea_3(void)
  function ta_event_cb (line 29) | static void ta_event_cb(lv_event_t * e)

FILE: gui/lvgl/examples/widgets/tileview/lv_example_tileview_1.c
  function lv_example_tileview_1 (line 9) | void lv_example_tileview_1(void)

FILE: gui/lvgl/examples/widgets/win/lv_example_win_1.c
  function event_handler (line 4) | static void event_handler(lv_event_t * e)
  function lv_example_win_1 (line 11) | void lv_example_win_1(void)

FILE: gui/lvgl/lvgl.h
  function lv_version_major (line 170) | static inline int lv_version_major(void)
  function lv_version_minor (line 175) | static inline int lv_version_minor(void)
  function lv_version_patch (line 180) | static inline int lv_version_patch(void)

FILE: gui/lvgl/scripts/LVGLImage.py
  function uint8_t (line 22) | def uint8_t(val) -> bytes:
  function uint16_t (line 26) | def uint16_t(val) -> bytes:
  function uint24_t (line 30) | def uint24_t(val) -> bytes:
  function uint32_t (line 34) | def uint32_t(val) -> bytes:
  function color_pre_multiply (line 41) | def color_pre_multiply(r, g, b, a, background):
  class Error (line 50) | class Error(Exception):
    method __str__ (line 52) | def __str__(self):
  class FormatError (line 56) | class FormatError(Error):
  class ParameterError (line 63) | class ParameterError(Error):
  class PngQuant (line 69) | class PngQuant:
    method __init__ (line 74) | def __init__(self, ncolors=256, dither=True, exec_path="") -> None:
    method convert (line 79) | def convert(self, filename) -> bytes:
  class CompressMethod (line 99) | class CompressMethod(Enum):
  class ColorFormat (line 105) | class ColorFormat(Enum):
    method bpp (line 126) | def bpp(self) -> int:
    method ncolors (line 151) | def ncolors(self) -> int:
    method is_indexed (line 166) | def is_indexed(self) -> bool:
    method is_alpha_only (line 173) | def is_alpha_only(self) -> bool:
    method has_alpha (line 177) | def has_alpha(self) -> bool:
    method is_colormap (line 185) | def is_colormap(self) -> bool:
    method is_luma_only (line 191) | def is_luma_only(self) -> bool:
  function bit_extend (line 195) | def bit_extend(value, bpp):
  function unpack_colors (line 212) | def unpack_colors(data: bytes, cf: ColorFormat, w) -> List:
  function write_c_array_file (line 306) | def write_c_array_file(
  class LVGLImageHeader (line 388) | class LVGLImageHeader:
    method __init__ (line 390) | def __init__(self,
    method stride_align (line 409) | def stride_align(self, align: int) -> int:
    method stride_default (line 423) | def stride_default(self) -> int:
    method binary (line 427) | def binary(self) -> bytearray:
    method from_binary (line 440) | def from_binary(self, data: bytes):
  class LVGLCompressData (line 454) | class LVGLCompressData:
    method __init__ (line 456) | def __init__(self,
    method _compress (line 466) | def _compress(self, raw_data: bytes) -> bytearray:
  class LVGLImage (line 489) | class LVGLImage:
    method __init__ (line 491) | def __init__(self,
    method __repr__ (line 500) | def __repr__(self) -> str:
    method adjust_stride (line 506) | def adjust_stride(self, stride: int = 0, align: int = 1):
    method premultiply (line 573) | def premultiply(self):
    method data_len (line 665) | def data_len(self) -> int:
    method header (line 679) | def header(self) -> bytearray:
    method is_indexed (line 683) | def is_indexed(self):
    method set_data (line 686) | def set_data(self,
    method from_data (line 715) | def from_data(self, data: bytes):
    method from_bin (line 720) | def from_bin(self, filename: str):
    method _check_ext (line 732) | def _check_ext(self, filename: str, ext):
    method _check_dir (line 736) | def _check_dir(self, filename: str):
    method to_bin (line 742) | def to_bin(self,
    method to_c_array (line 770) | def to_c_array(self,
    method to_png (line 784) | def to_png(self, filename: str):
    method from_png (line 836) | def from_png(self,
    method _png_to_indexed (line 870) | def _png_to_indexed(self, cf: ColorFormat, filename: str):
    method _png_to_alpha_only (line 913) | def _png_to_alpha_only(self, cf: ColorFormat, filename: str):
    method sRGB_to_linear (line 934) | def sRGB_to_linear(self, x):
    method linear_to_sRGB (line 939) | def linear_to_sRGB(self, y):
    method _png_to_luma_only (line 944) | def _png_to_luma_only(self, cf: ColorFormat, filename: str):
    method _png_to_colormap (line 963) | def _png_to_colormap(self, cf, filename: str):
  class RLEHeader (line 1024) | class RLEHeader:
    method __init__ (line 1026) | def __init__(self, blksize: int, len: int):
    method binary (line 1031) | def binary(self):
  class RLEImage (line 1043) | class RLEImage(LVGLImage):
    method __init__ (line 1045) | def __init__(self,
    method to_rle (line 1052) | def to_rle(self, filename: str):
    method rle_compress (line 1068) | def rle_compress(self, data: bytearray, blksize: int, threshold=16):
    method get_repeat_count (line 1094) | def get_repeat_count(self, data: bytearray, blksize: int):
    method get_nonrepeat_count (line 1116) | def get_nonrepeat_count(self, data: bytearray, blksize: int, threshold):
  class RAWImage (line 1149) | class RAWImage():
    class NotSupported (line 1158) | class NotSupported(NotImplementedError):
    method __init__ (line 1161) | def __init__(self,
    method to_c_array (line 1167) | def to_c_array(self,
    method from_file (line 1174) | def from_file(self,
  class OutputFormat (line 1186) | class OutputFormat(Enum):
  class PNGConverter (line 1192) | class PNGConverter:
    method __init__ (line 1194) | def __init__(self,
    method _replace_ext (line 1215) | def _replace_ext(self, input, ext):
    method convert (line 1224) | def convert(self):
  function main (line 1249) | def main():
  function test (line 1333) | def test():
  function test_raw (line 1346) | def test_raw():

FILE: gui/lvgl/scripts/gen_json/create_fake_lib_c.py
  function run (line 152) | def run(temp_dir):

FILE: gui/lvgl/scripts/gen_json/gen_json.py
  class STDOut (line 24) | class STDOut:
    method __init__ (line 25) | def __init__(self):
    method write (line 30) | def write(self, data):
    method __getattr__ (line 33) | def __getattr__(self, item):
    method reset (line 39) | def reset(self):
  function run (line 46) | def run(output_path, lvgl_config_path, output_to_stdout, target_header, ...

FILE: gui/lvgl/scripts/gen_json/get_sdl2.py
  function get_path (line 11) | def get_path(name: str, p: str) -> str:
  function get_sdl2 (line 23) | def get_sdl2(path, url=SDL2_URL):

FILE: gui/lvgl/scripts/gen_json/pycparser_monkeypatch.py
  function filter_node (line 83) | def filter_node(n):
  class ArrayDecl (line 93) | class ArrayDecl(c_ast.ArrayDecl):
    method process (line 95) | def process(self):
    method __init__ (line 98) | def __init__(self, *args, **kwargs):
    method name (line 103) | def name(self):
    method parent (line 107) | def parent(self):
    method parent (line 111) | def parent(self, value):
    method to_dict (line 115) | def to_dict(self):
  class Constant (line 141) | class Constant(c_ast.Constant):
    method process (line 143) | def process(self):
    method __init__ (line 146) | def __init__(self, *args, **kwargs):
    method parent (line 151) | def parent(self):
    method parent (line 155) | def parent(self, value):
    method to_dict (line 159) | def to_dict(self):
  class Decl (line 171) | class Decl(c_ast.Decl):
    method process (line 173) | def process(self):
    method __init__ (line 176) | def __init__(self, *args, **kwargs):
    method parent (line 181) | def parent(self):
    method parent (line 185) | def parent(self, value):
    method to_dict (line 189) | def to_dict(self):
  class EllipsisParam (line 292) | class EllipsisParam(c_ast.EllipsisParam):
    method process (line 294) | def process(self):
    method __init__ (line 297) | def __init__(self, *args, **kwargs):
    method parent (line 302) | def parent(self):
    method parent (line 306) | def parent(self, value):
    method to_dict (line 309) | def to_dict(self):
    method name (line 326) | def name(self):
  class Enum (line 333) | class Enum(c_ast.Enum):
    method process (line 335) | def process(self):
    method __init__ (line 353) | def __init__(self, *args, **kwargs):
    method parent (line 358) | def parent(self):
    method parent (line 362) | def parent(self, value):
    method to_dict (line 367) | def to_dict(self):
  class Enumerator (line 438) | class Enumerator(c_ast.Enumerator):
    method process (line 440) | def process(self):
    method __init__ (line 443) | def __init__(self, *args, **kwargs):
    method parent (line 448) | def parent(self):
    method parent (line 452) | def parent(self, value):
    method to_dict (line 455) | def to_dict(self):
  class EnumeratorList (line 515) | class EnumeratorList(c_ast.EnumeratorList):
    method process (line 517) | def process(self, indent):
    method __init__ (line 520) | def __init__(self, *args, **kwargs):
    method parent (line 525) | def parent(self):
    method parent (line 529) | def parent(self, value):
    method to_dict (line 535) | def to_dict(self):
  function is_type (line 542) | def is_type(obj, type_):
  class FileAST (line 572) | class FileAST(c_ast.FileAST):
    method __init__ (line 574) | def __init__(self, *args, **kwargs):
    method setup_docs (line 578) | def setup_docs(self, temp_directory):  # NOQA
    method name (line 602) | def name(self):
    method parent (line 606) | def parent(self):
    method parent (line 610) | def parent(self, value):
    method to_dict (line 613) | def to_dict(self):
  class FuncDecl (line 815) | class FuncDecl(c_ast.FuncDecl):
    method name (line 818) | def name(self):
    method process (line 838) | def process(self):
    method __init__ (line 848) | def __init__(self, *args, **kwargs):
    method parent (line 853) | def parent(self):
    method parent (line 857) | def parent(self, value):
    method to_dict (line 865) | def to_dict(self):
  class FuncDef (line 924) | class FuncDef(c_ast.FuncDef):
    method name (line 927) | def name(self):
    method process (line 930) | def process(self):
    method __init__ (line 933) | def __init__(self, *args, **kwargs):
    method parent (line 938) | def parent(self):
    method parent (line 942) | def parent(self, value):
    method to_dict (line 946) | def to_dict(self):
  class IdentifierType (line 953) | class IdentifierType(c_ast.IdentifierType):
    method process (line 955) | def process(self):
    method __init__ (line 958) | def __init__(self, *args, **kwargs):
    method name (line 963) | def name(self):
    method parent (line 967) | def parent(self):
    method parent (line 971) | def parent(self, value):
    method to_dict (line 974) | def to_dict(self):
  class ParamList (line 1002) | class ParamList(c_ast.ParamList):
    method process (line 1004) | def process(self):
    method __init__ (line 1007) | def __init__(self, *args, **kwargs):
    method parent (line 1012) | def parent(self):
    method parent (line 1016) | def parent(self, value):
    method to_dict (line 1021) | def to_dict(self):
  class PtrDecl (line 1028) | class PtrDecl(c_ast.PtrDecl):
    method name (line 1031) | def name(self):
    method process (line 1034) | def process(self):
    method __init__ (line 1037) | def __init__(self, *args, **kwargs):
    method parent (line 1042) | def parent(self):
    method parent (line 1046) | def parent(self, value):
    method to_dict (line 1050) | def to_dict(self):
  class Struct (line 1072) | class Struct(c_ast.Struct):
    method process (line 1074) | def process(self):
    method __init__ (line 1087) | def __init__(self, *args, **kwargs):
    method parent (line 1092) | def parent(self):
    method parent (line 1096) | def parent(self, value):
    method to_dict (line 1102) | def to_dict(self):
  class TypeDecl (line 1176) | class TypeDecl(c_ast.TypeDecl):
    method name (line 1179) | def name(self):
    method process (line 1182) | def process(self):
    method __init__ (line 1185) | def __init__(self, *args, **kwargs):
    method parent (line 1190) | def parent(self):
    method parent (line 1194) | def parent(self, value):
    method to_dict (line 1219) | def to_dict(self):
  class Typedef (line 1245) | class Typedef(c_ast.Typedef):
    method process (line 1247) | def process(self):
    method __init__ (line 1256) | def __init__(self, *args, **kwargs):
    method parent (line 1261) | def parent(self):
    method parent (line 1268) | def parent(self, value):
    method is_struct (line 1274) | def is_struct(self):
    method is_union (line 1281) | def is_union(self):
    method get_struct_union (line 1287) | def get_struct_union(self):
    method to_dict (line 1296) | def to_dict(self):
  class Typename (line 1504) | class Typename(c_ast.Typename):
    method process (line 1506) | def process(self):
    method __init__ (line 1509) | def __init__(self, *args, **kwargs):
    method parent (line 1514) | def parent(self):
    method parent (line 1518) | def parent(self, value):
    method to_dict (line 1523) | def to_dict(self):
  class Union (line 1565) | class Union(c_ast.Union):
    method process (line 1567) | def process(self):
    method __init__ (line 1584) | def __init__(self, *args, **kwargs):
    method parent (line 1589) | def parent(self):
    method parent (line 1593) | def parent(self, value):
    method to_dict (line 1599) | def to_dict(self):

FILE: gui/lvgl/scripts/generate_lv_conf.py
  function fatal (line 12) | def fatal(msg):
  function get_args (line 18) | def get_args():
  function parse_defaults (line 58) | def parse_defaults(path: str):
  function generate_config (line 71) | def generate_config(path_destination: str, path_source: str, defaults: d...

FILE: gui/lvgl/scripts/kconfig_verify.py
  function verify_kconfig (line 12) | def verify_kconfig(kconfig_file):

FILE: gui/lvgl/scripts/properties.py
  class Property (line 25) | class Property:
    method __init__ (line 26) | def __init__(self, widget, name, type, index, id):
  function find_headers (line 34) | def find_headers(directory):
  function read_widget_properties (line 45) | def read_widget_properties(directory):
  function write_widget_properties (line 87) | def write_widget_properties(output, properties_by_widget):
  function write_style_header (line 157) | def write_style_header(output, properties_by_widget):
  function main (line 192) | def main(directory, output):

FILE: gui/lvgl/scripts/style_api_gen.py
  function style_get_cast (line 474) | def style_get_cast(style_type, var_type):
  function obj_style_get (line 481) | def obj_style_get(p):
  function style_set_cast (line 502) | def style_set_cast(style_type):
  function style_set_c (line 509) | def style_set_c(p):
  function style_set_h (line 523) | def style_set_h(p):
  function local_style_set_c (line 529) | def local_style_set_c(p):
  function local_style_set_h (line 543) | def local_style_set_h(p):
  function style_const_set (line 548) | def style_const_set(p):
  function docs (line 559) | def docs(p):
  function guard_proc (line 602) | def guard_proc(p):
  function guard_close (line 611) | def guard_close():

FILE: gui/lvgl/scripts/trace_filter.py
  function get_arg (line 10) | def get_arg():

FILE: gui/lvgl/scripts/update_version.py
  function get_arg (line 8) | def get_arg():
  class Version (line 20) | class Version:
    method __init__ (line 23) | def __init__(self, user_input: str):
    method __str__ (line 38) | def __str__(self):
  class RepoFileVersionReplacer (line 42) | class RepoFileVersionReplacer:
    method __init__ (line 46) | def __init__(self, relative_path_segments: list[str], expected_occurre...
    method applyVersionToLine (line 51) | def applyVersionToLine(self, line: str, version: Version) -> str | None:
    method applyVersion (line 54) | def applyVersion(self, version: Version):
  class PrefixReplacer (line 73) | class PrefixReplacer(RepoFileVersionReplacer):
    method __init__ (line 75) | def __init__(self, relative_path_segments: list[str], prefix: str, exp...
    method applyVersionToLine (line 79) | def applyVersionToLine(self, line: str, version: Version):
  class MacroReplacer (line 86) | class MacroReplacer(RepoFileVersionReplacer):
    method __init__ (line 87) | def __init__(self, relative_path_segments: list[str]):
    method applyVersionToLine (line 90) | def applyVersionToLine(self, line: str, version: Version):
    method getPattern (line 107) | def getPattern(self, key: str):
    method getReplacement (line 110) | def getReplacement(self, val: str):
  class CmakeReplacer (line 117) | class CmakeReplacer(MacroReplacer):
    method getPattern (line 118) | def getPattern(self, key: str):
    method getReplacement (line 121) | def getReplacement(self, val: str):
  class KconfigReplacer (line 124) | class KconfigReplacer(RepoFileVersionReplacer):
    method __init__ (line 127) | def __init__(self, relative_path_segments: list[str]):
    method applyVersionToLine (line 130) | def applyVersionToLine(self, line: str, version: Version):
    method getPattern (line 145) | def getPattern(self, key: str):
    method getReplacement (line 149) | def getReplacement(self, val: str):

FILE: gui/lvgl/src/core/lv_global.h
  type _snippet_stack (line 64) | struct _snippet_stack
  type lv_freetype_context_t (line 68) | struct lv_freetype_context_t
  type lv_profiler_builtin_ctx_t (line 72) | struct lv_profiler_builtin_ctx_t
  type lv_nuttx_ctx_t (line 76) | struct lv_nuttx_ctx_t
  type lv_global_t (line 79) | typedef struct lv_global_t {

FILE: gui/lvgl/src/core/lv_group.c
  function lv_group_init (line 45) | void lv_group_init(void)
  function lv_group_deinit (line 50) | void lv_group_deinit(void)
  function lv_group_t (line 55) | lv_group_t * lv_group_create(void)
  function lv_group_delete (line 74) | void lv_group_delete(lv_group_t * group)
  function lv_group_set_default (line 106) | void lv_group_set_default(lv_group_t * group)
  function lv_group_t (line 111) | lv_group_t * lv_group_get_default(void)
  function lv_group_add_obj (line 116) | void lv_group_add_obj(lv_group_t * group, lv_obj_t * obj)
  function lv_group_swap_obj (line 142) | void lv_group_swap_obj(lv_obj_t * obj1, lv_obj_t * obj2)
  function lv_group_remove_obj (line 162) | void lv_group_remove_obj(lv_obj_t * obj)
  function lv_group_remove_all_objs (line 203) | void lv_group_remove_all_objs(lv_group_t * group)
  function lv_group_focus_obj (line 223) | void lv_group_focus_obj(lv_obj_t * obj)
  function lv_group_focus_next (line 256) | void lv_group_focus_next(lv_group_t * group)
  function lv_group_focus_prev (line 267) | void lv_group_focus_prev(lv_group_t * group)
  function lv_group_focus_freeze (line 278) | void lv_group_focus_freeze(lv_group_t * group, bool en)
  function lv_result_t (line 286) | lv_result_t lv_group_send_data(lv_group_t * group, uint32_t c)
  function lv_group_set_focus_cb (line 298) | void lv_group_set_focus_cb(lv_group_t * group, lv_group_focus_cb_t focus...
  function lv_group_set_edge_cb (line 305) | void lv_group_set_edge_cb(lv_group_t * group, lv_group_edge_cb_t edge_cb)
  function lv_group_set_editing (line 312) | void lv_group_set_editing(lv_group_t * group, bool edit)
  function lv_group_set_refocus_policy (line 330) | void lv_group_set_refocus_policy(lv_group_t * group, lv_group_refocus_po...
  function lv_group_set_wrap (line 336) | void lv_group_set_wrap(lv_group_t * group, bool en)
  function lv_obj_t (line 342) | lv_obj_t * lv_group_get_focused(const lv_group_t * group)
  function lv_group_focus_cb_t (line 350) | lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t * group)
  function lv_group_edge_cb_t (line 356) | lv_group_edge_cb_t lv_group_get_edge_cb(const lv_group_t * group)
  function lv_group_get_editing (line 362) | bool lv_group_get_editing(const lv_group_t * group)
  function lv_group_get_wrap (line 368) | bool lv_group_get_wrap(lv_group_t * group)
  function lv_group_get_obj_count (line 374) | uint32_t lv_group_get_obj_count(lv_group_t * group)
  function lv_obj_t (line 380) | lv_obj_t * lv_group_get_obj_by_index(lv_group_t * group, uint32_t index)
  function lv_group_get_count (line 394) | uint32_t lv_group_get_count(void)
  function lv_group_t (line 399) | lv_group_t  * lv_group_by_index(uint32_t index)
  function lv_group_refocus (line 417) | static void lv_group_refocus(lv_group_t * g)
  function focus_next_core (line 431) | static bool focus_next_core(lv_group_t * group, void * (*begin)(const lv...
  function lv_indev_t (line 514) | static lv_indev_t * get_indev(const lv_group_t * g)

FILE: gui/lvgl/src/core/lv_group.h
  type lv_key_t (line 25) | typedef enum {
  type lv_group_refocus_policy_t (line 47) | typedef enum {

FILE: gui/lvgl/src/core/lv_group_private.h
  type lv_group_t (line 31) | struct lv_group_t {

FILE: gui/lvgl/src/core/lv_obj.c
  function lv_obj_t (line 213) | lv_obj_t * lv_obj_create(lv_obj_t * parent)
  function lv_obj_add_flag (line 231) | void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t f)
  function lv_obj_remove_flag (line 268) | void lv_obj_remove_flag(lv_obj_t * obj, lv_obj_flag_t f)
  function lv_obj_update_flag (line 296) | void lv_obj_update_flag(lv_obj_t * obj, lv_obj_flag_t f, bool v)
  function lv_obj_add_state (line 302) | void lv_obj_add_state(lv_obj_t * obj, lv_state_t state)
  function lv_obj_remove_state (line 317) | void lv_obj_remove_state(lv_obj_t * obj, lv_state_t state)
  function lv_obj_set_state (line 327) | void lv_obj_set_state(lv_obj_t * obj, lv_state_t state, bool v)
  function lv_obj_has_flag (line 337) | bool lv_obj_has_flag(const lv_obj_t * obj, lv_obj_flag_t f)
  function lv_obj_has_flag_any (line 344) | bool lv_obj_has_flag_any(const lv_obj_t * obj, lv_obj_flag_t f)
  function lv_state_t (line 351) | lv_state_t lv_obj_get_state(const lv_obj_t * obj)
  function lv_obj_has_state (line 358) | bool lv_obj_has_state(const lv_obj_t * obj, lv_state_t state)
  function lv_group_t (line 365) | lv_group_t * lv_obj_get_group(const lv_obj_t * obj)
  function lv_obj_allocate_spec_attr (line 377) | void lv_obj_allocate_spec_attr(lv_obj_t * obj)
  function lv_obj_check_type (line 391) | bool lv_obj_check_type(const lv_obj_t * obj, const lv_obj_class_t * clas...
  function lv_obj_has_class (line 397) | bool lv_obj_has_class(const lv_obj_t * obj, const lv_obj_class_t * class_p)
  function lv_obj_class_t (line 408) | const lv_obj_class_t * lv_obj_get_class(const lv_obj_t * obj)
  function lv_obj_is_valid (line 413) | bool lv_obj_is_valid(const lv_obj_t * obj)
  function lv_obj_null_on_delete (line 430) | void lv_obj_null_on_delete(lv_obj_t ** obj_ptr)
  function lv_obj_t (line 442) | lv_obj_t * lv_obj_get_child_by_id(const lv_obj_t * obj, const void * id)
  function lv_obj_set_user_data (line 465) | void lv_obj_set_user_data(lv_obj_t * obj, void * user_data)
  function lv_obj_constructor (line 479) | static void lv_obj_constructor(const lv_obj_class_t * class_p, lv_obj_t ...
  function lv_obj_destructor (line 514) | static void lv_obj_destructor(const lv_obj_class_t * class_p, lv_obj_t *...
  function lv_obj_draw (line 549) | static void lv_obj_draw(lv_event_t * e)
  function draw_scrollbar (line 646) | static void draw_scrollbar(lv_obj_t * obj, lv_layer_t * layer)
  function lv_result_t (line 675) | static lv_result_t scrollbar_init_draw_dsc(lv_obj_t * obj, lv_draw_rect_...
  function lv_obj_event (line 723) | static void lv_obj_event(const lv_obj_class_t * class_p, lv_event_t * e)
  function update_obj_state (line 892) | static void update_obj_state(lv_obj_t * obj, lv_state_t new_state)
  function obj_valid_child (line 970) | static bool obj_valid_child(const lv_obj_t * parent, const lv_obj_t * ob...
  function null_on_delete_cb (line 991) | static void null_on_delete_cb(lv_event_t * e)
  function lv_result_t (line 998) | static lv_result_t lv_obj_set_any(lv_obj_t * obj, lv_prop_id_t id, const...
  function lv_result_t (line 1023) | static lv_result_t lv_obj_get_any(const lv_obj_t * obj, lv_prop_id_t id,...

FILE: gui/lvgl/src/core/lv_obj.h
  type lv_obj_flag_t (line 92) | typedef enum {

FILE: gui/lvgl/src/core/lv_obj_class.c
  function lv_obj_t (line 47) | lv_obj_t * lv_obj_class_create_obj(const lv_obj_class_t * class_p, lv_ob...
  function lv_obj_class_init_obj (line 104) | void lv_obj_class_init_obj(lv_obj_t * obj)
  function lv_obj_destruct (line 136) | void lv_obj_destruct(lv_obj_t * obj)
  function lv_obj_is_editable (line 149) | bool lv_obj_is_editable(lv_obj_t * obj)
  function lv_obj_is_group_def (line 161) | bool lv_obj_is_group_def(lv_obj_t * obj)
  function lv_obj_construct (line 177) | static void lv_obj_construct(const lv_obj_class_t * class_p, lv_obj_t * ...
  function get_instance_size (line 195) | static uint32_t get_instance_size(const lv_obj_class_t * class_p)

FILE: gui/lvgl/src/core/lv_obj_class.h
  type lv_obj_class_editable_t (line 28) | typedef enum {
  type lv_obj_class_group_def_t (line 34) | typedef enum {
  type lv_obj_class_theme_inheritable_t (line 40) | typedef enum {

FILE: gui/lvgl/src/core/lv_obj_class_private.h
  type lv_obj_class_t (line 31) | struct lv_obj_class_t {

FILE: gui/lvgl/src/core/lv_obj_draw.c
  function lv_obj_init_draw_rect_dsc (line 42) | void lv_obj_init_draw_rect_dsc(lv_obj_t * obj, lv_part_t part, lv_draw_r...
  function lv_obj_init_draw_label_dsc (line 147) | void lv_obj_init_draw_label_dsc(lv_obj_t * obj, lv_part_t part, lv_draw_...
  function lv_obj_init_draw_image_dsc (line 176) | void lv_obj_init_draw_image_dsc(lv_obj_t * obj, lv_part_t part, lv_draw_...
  function lv_obj_init_draw_line_dsc (line 202) | void lv_obj_init_draw_line_dsc(lv_obj_t * obj, lv_part_t part, lv_draw_l...
  function lv_obj_init_draw_arc_dsc (line 232) | void lv_obj_init_draw_arc_dsc(lv_obj_t * obj, lv_part_t part, lv_draw_ar...
  function lv_obj_calculate_ext_draw_size (line 255) | int32_t lv_obj_calculate_ext_draw_size(lv_obj_t * obj, lv_part_t part)
  function lv_obj_refresh_ext_draw_size (line 289) | void lv_obj_refresh_ext_draw_size(lv_obj_t * obj)
  function lv_obj_get_ext_draw_size (line 311) | int32_t lv_obj_get_ext_draw_size(const lv_obj_t * obj)
  function lv_layer_type_t (line 317) | lv_layer_type_t lv_obj_get_layer_type(const lv_obj_t * obj)

FILE: gui/lvgl/src/core/lv_obj_draw.h
  type lv_layer_type_t (line 31) | typedef enum {

FILE: gui/lvgl/src/core/lv_obj_event.c
  function lv_result_t (line 48) | lv_result_t lv_obj_send_event(lv_obj_t * obj, lv_event_code_t event_code...
  function lv_result_t (line 75) | lv_result_t lv_obj_event_base(const lv_obj_class_t * class_p, lv_event_t...
  function lv_event_dsc_t (line 98) | lv_event_dsc_t * lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event...
  function lv_obj_get_event_count (line 106) | uint32_t lv_obj_get_event_count(lv_obj_t * obj)
  function lv_event_dsc_t (line 113) | lv_event_dsc_t * lv_obj_get_event_dsc(lv_obj_t * obj, uint32_t index)
  function lv_obj_remove_event (line 120) | bool lv_obj_remove_event(lv_obj_t * obj, uint32_t index)
  function lv_obj_remove_event_cb (line 127) | bool lv_obj_remove_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb)
  function lv_obj_remove_event_dsc (line 144) | bool lv_obj_remove_event_dsc(lv_obj_t * obj, lv_event_dsc_t * dsc)
  function lv_obj_remove_event_cb_with_user_data (line 152) | uint32_t lv_obj_remove_event_cb_with_user_data(lv_obj_t * obj, lv_event_...
  function lv_obj_t (line 171) | lv_obj_t * lv_event_get_current_target_obj(lv_event_t * e)
  function lv_obj_t (line 176) | lv_obj_t * lv_event_get_target_obj(lv_event_t * e)
  function lv_indev_t (line 181) | lv_indev_t * lv_event_get_indev(lv_event_t * e)
  function lv_layer_t (line 210) | lv_layer_t * lv_event_get_layer(lv_event_t * e)
  function lv_area_t (line 226) | const lv_area_t * lv_event_get_old_size(lv_event_t * e)
  function lv_event_get_key (line 237) | uint32_t lv_event_get_key(lv_event_t * e)
  function lv_event_get_rotary_diff (line 250) | int32_t lv_event_get_rotary_diff(lv_event_t * e)
  function lv_anim_t (line 263) | lv_anim_t * lv_event_get_scroll_anim(lv_event_t * e)
  function lv_event_set_ext_draw_size (line 274) | void lv_event_set_ext_draw_size(lv_event_t * e, int32_t size)
  function lv_point_t (line 285) | lv_point_t * lv_event_get_self_size_info(lv_event_t * e)
  function lv_hit_test_info_t (line 296) | lv_hit_test_info_t * lv_event_get_hit_test_info(lv_event_t * e)
  function lv_area_t (line 307) | const lv_area_t * lv_event_get_cover_area(lv_event_t * e)
  function lv_event_set_cover_res (line 319) | void lv_event_set_cover_res(lv_event_t * e, lv_cover_res_t res)
  function lv_draw_task_t (line 330) | lv_draw_task_t * lv_event_get_draw_task(lv_event_t * e)
  function lv_result_t (line 346) | static lv_result_t event_send_core(lv_event_t * e)
  function event_is_bubbled (line 380) | static bool event_is_bubbled(lv_event_t * e)

FILE: gui/lvgl/src/core/lv_obj_event.h
  type lv_cover_res_t (line 29) | typedef enum {

FILE: gui/lvgl/src/core/lv_obj_event_private.h
  type lv_hit_test_info_t (line 34) | struct lv_hit_test_info_t {
  type lv_cover_check_info_t (line 44) | struct lv_cover_check_info_t {

FILE: gui/lvgl/src/core/lv_obj_id_builtin.c
  type class_info_t (line 27) | typedef struct _class_info_t {
  function lv_obj_assign_id (line 46) | void lv_obj_assign_id(const lv_obj_class_t * class_p, lv_obj_t * obj)
  function lv_obj_set_id (line 82) | void lv_obj_set_id(lv_obj_t * obj, void * id)
  function lv_obj_free_id (line 89) | void lv_obj_free_id(lv_obj_t * obj)
  function lv_objid_builtin_destroy (line 108) | void lv_objid_builtin_destroy(void)
  function lv_obj_id_compare (line 117) | int lv_obj_id_compare(const void * id1, const void * id2)

FILE: gui/lvgl/src/core/lv_obj_pos.c
  function lv_obj_set_pos (line 49) | void lv_obj_set_pos(lv_obj_t * obj, int32_t x, int32_t y)
  function lv_obj_set_x (line 57) | void lv_obj_set_x(lv_obj_t * obj, int32_t x)
  function lv_obj_set_y (line 71) | void lv_obj_set_y(lv_obj_t * obj, int32_t y)
  function lv_obj_refr_size (line 85) | bool lv_obj_refr_size(lv_obj_t * obj)
  function lv_obj_set_size (line 211) | void lv_obj_set_size(lv_obj_t * obj, int32_t w, int32_t h)
  function lv_obj_set_width (line 219) | void lv_obj_set_width(lv_obj_t * obj, int32_t w)
  function lv_obj_set_height (line 232) | void lv_obj_set_height(lv_obj_t * obj, int32_t h)
  function lv_obj_set_content_width (line 245) | void lv_obj_set_content_width(lv_obj_t * obj, int32_t w)
  function lv_obj_set_content_height (line 252) | void lv_obj_set_content_height(lv_obj_t * obj, int32_t h)
  function lv_obj_set_layout (line 259) | void lv_obj_set_layout(lv_obj_t * obj, uint32_t layout)
  function lv_obj_is_layout_positioned (line 268) | bool lv_obj_is_layout_positioned(const lv_obj_t * obj)
  function lv_obj_mark_layout_as_dirty (line 280) | void lv_obj_mark_layout_as_dirty(lv_obj_t * obj)
  function lv_obj_update_layout (line 293) | void lv_obj_update_layout(const lv_obj_t * obj)
  function lv_obj_set_align (line 315) | void lv_obj_set_align(lv_obj_t * obj, lv_align_t align)
  function lv_obj_align (line 320) | void lv_obj_align(lv_obj_t * obj, lv_align_t align, int32_t x_ofs, int32...
  function lv_obj_align_to (line 326) | void lv_obj_align_to(lv_obj_t * obj, const lv_obj_t * base, lv_align_t a...
  function lv_obj_get_coords (line 476) | void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * coords)
  function lv_obj_get_x (line 483) | int32_t lv_obj_get_x(const lv_obj_t * obj)
  function lv_obj_get_x2 (line 500) | int32_t lv_obj_get_x2(const lv_obj_t * obj)
  function lv_obj_get_y (line 507) | int32_t lv_obj_get_y(const lv_obj_t * obj)
  function lv_obj_get_y2 (line 524) | int32_t lv_obj_get_y2(const lv_obj_t * obj)
  function lv_obj_get_x_aligned (line 531) | int32_t lv_obj_get_x_aligned(const lv_obj_t * obj)
  function lv_obj_get_y_aligned (line 536) | int32_t lv_obj_get_y_aligned(const lv_obj_t * obj)
  function lv_obj_get_width (line 541) | int32_t lv_obj_get_width(const lv_obj_t * obj)
  function lv_obj_get_height (line 548) | int32_t lv_obj_get_height(const lv_obj_t * obj)
  function lv_obj_get_content_width (line 555) | int32_t lv_obj_get_content_width(const lv_obj_t * obj)
  function lv_obj_get_content_height (line 565) | int32_t lv_obj_get_content_height(const lv_obj_t * obj)
  function lv_obj_get_content_coords (line 575) | void lv_obj_get_content_coords(const lv_obj_t * obj, lv_area_t * area)
  function lv_obj_get_self_width (line 587) | int32_t lv_obj_get_self_width(const lv_obj_t * obj)
  function lv_obj_get_self_height (line 594) | int32_t lv_obj_get_self_height(const lv_obj_t * obj)
  function lv_obj_refresh_self_size (line 601) | bool lv_obj_refresh_self_size(lv_obj_t * obj)
  function lv_obj_refr_pos (line 611) | void lv_obj_refr_pos(lv_obj_t * obj)
  function lv_obj_move_to (line 687) | void lv_obj_move_to(lv_obj_t * obj, int32_t x, int32_t y)
  function lv_obj_move_children_by (line 756) | void lv_obj_move_children_by(lv_obj_t * obj, int32_t x_diff, int32_t y_d...
  function lv_obj_transform_point (line 772) | void lv_obj_transform_point(const lv_obj_t * obj, lv_point_t * p, lv_obj...
  function lv_obj_transform_point_array (line 777) | void lv_obj_transform_point_array(const lv_obj_t * obj, lv_point_t point...
  function lv_obj_get_transformed_area (line 796) | void lv_obj_get_transformed_area(const lv_obj_t * obj, lv_area_t * area,...
  function lv_obj_invalidate_area (line 813) | void lv_obj_invalidate_area(const lv_obj_t * obj, const lv_area_t * area)
  function lv_obj_invalidate (line 841) | void lv_obj_invalidate(const lv_obj_t * obj)
  function lv_obj_area_is_visible (line 857) | bool lv_obj_area_is_visible(const lv_obj_t * obj, lv_area_t * area)
  function lv_obj_is_visible (line 905) | bool lv_obj_is_visible(const lv_obj_t * obj)
  function lv_obj_set_ext_click_area (line 920) | void lv_obj_set_ext_click_area(lv_obj_t * obj, int32_t size)
  function lv_obj_get_click_area (line 928) | void lv_obj_get_click_area(const lv_obj_t * obj, lv_area_t * area)
  function lv_obj_hit_test (line 936) | bool lv_obj_hit_test(lv_obj_t * obj, const lv_point_t * point)
  function lv_clamp_width (line 956) | int32_t lv_clamp_width(int32_t width, int32_t min_width, int32_t max_wid...
  function lv_clamp_height (line 963) | int32_t lv_clamp_height(int32_t height, int32_t min_height, int32_t max_...
  function lv_obj_center (line 970) | void lv_obj_center(lv_obj_t * obj)
  function calc_content_width (line 979) | static int32_t calc_content_width(lv_obj_t * obj)
  function calc_content_height (line 1074) | static int32_t calc_content_height(lv_obj_t * obj)
  function layout_update_core (line 1126) | static void layout_update_core(lv_obj_t * obj)
  function transform_point_array (line 1151) | static void transform_point_array(const lv_obj_t * obj, lv_point_t * p, ...

FILE: gui/lvgl/src/core/lv_obj_pos.h
  type lv_obj_point_transform_flag_t (line 26) | typedef enum {

FILE: gui/lvgl/src/core/lv_obj_private.h
  type lv_obj_spec_attr_t (line 31) | struct lv_obj_spec_attr_t {
  type lv_obj_t (line 49) | struct lv_obj_t {

FILE: gui/lvgl/src/core/lv_obj_property.c
  type lv_result_t (line 32) | typedef lv_result_t (*lv_property_setter_t)(lv_obj_t *, lv_prop_id_t, co...
  type lv_value_precise_t (line 36) | typedef lv_value_precise_t (*lv_property_get_precise_t)(const lv_obj_t *);
  type lv_color_t (line 37) | typedef lv_color_t (*lv_property_get_color_t)(const lv_obj_t *);
  type lv_point_t (line 38) | typedef lv_point_t (*lv_property_get_point_t)(lv_obj_t *);
  type lv_result_t (line 40) | typedef lv_result_t (*lv_property_getter_t)(const lv_obj_t *, lv_prop_id...
  function lv_result_t (line 61) | lv_result_t lv_obj_set_property(lv_obj_t * obj, const lv_property_t * va...
  function lv_result_t (line 79) | lv_result_t lv_obj_set_properties(lv_obj_t * obj, const lv_property_t * ...
  function lv_property_t (line 91) | lv_property_t lv_obj_get_property(lv_obj_t * obj, lv_prop_id_t id)
  function lv_property_t (line 118) | lv_property_t lv_obj_get_style_property(lv_obj_t * obj, lv_prop_id_t id,...
  function lv_prop_id_t (line 136) | lv_prop_id_t lv_style_property_get_id(const char * name)
  function lv_prop_id_t (line 150) | lv_prop_id_t lv_obj_class_property_get_id(const lv_obj_class_t * clz, co...
  function lv_prop_id_t (line 172) | lv_prop_id_t lv_obj_property_get_id(const lv_obj_t * obj, const char * n...
  function lv_result_t (line 198) | static lv_result_t obj_property(lv_obj_t * obj, lv_prop_id_t id, lv_prop...
  function property_name_compare (line 296) | static int property_name_compare(const void * ref, const void * element)

FILE: gui/lvgl/src/core/lv_obj_property.h
  type lv_property_name_t (line 78) | struct lv_property_name_t {
  type lv_property_t (line 83) | typedef struct {
  type lv_property_ops_t (line 119) | typedef struct {

FILE: gui/lvgl/src/core/lv_obj_scroll.c
  function lv_obj_set_scrollbar_mode (line 58) | void lv_obj_set_scrollbar_mode(lv_obj_t * obj, lv_scrollbar_mode_t mode)
  function lv_obj_set_scroll_dir (line 69) | void lv_obj_set_scroll_dir(lv_obj_t * obj, lv_dir_t dir)
  function lv_obj_set_scroll_snap_x (line 78) | void lv_obj_set_scroll_snap_x(lv_obj_t * obj, lv_scroll_snap_t align)
  function lv_obj_set_scroll_snap_y (line 84) | void lv_obj_set_scroll_snap_y(lv_obj_t * obj, lv_scroll_snap_t align)
  function lv_scrollbar_mode_t (line 94) | lv_scrollbar_mode_t lv_obj_get_scrollbar_mode(const lv_obj_t * obj)
  function lv_dir_t (line 100) | lv_dir_t lv_obj_get_scroll_dir(const lv_obj_t * obj)
  function lv_scroll_snap_t (line 106) | lv_scroll_snap_t lv_obj_get_scroll_snap_x(const lv_obj_t * obj)
  function lv_scroll_snap_t (line 112) | lv_scroll_snap_t lv_obj_get_scroll_snap_y(const lv_obj_t * obj)
  function lv_obj_get_scroll_x (line 118) | int32_t lv_obj_get_scroll_x(const lv_obj_t * obj)
  function lv_obj_get_scroll_y (line 124) | int32_t lv_obj_get_scroll_y(const lv_obj_t * obj)
  function lv_obj_get_scroll_top (line 130) | int32_t lv_obj_get_scroll_top(lv_obj_t * obj)
  function lv_obj_get_scroll_bottom (line 136) | int32_t lv_obj_get_scroll_bottom(lv_obj_t * obj)
  function lv_obj_get_scroll_left (line 164) | int32_t lv_obj_get_scroll_left(lv_obj_t * obj)
  function lv_obj_get_scroll_right (line 207) | int32_t lv_obj_get_scroll_right(lv_obj_t * obj)
  function lv_obj_get_scroll_end (line 244) | void lv_obj_get_scroll_end(lv_obj_t * obj, lv_point_t * end)
  function lv_obj_scroll_by_bounded (line 258) | void lv_obj_scroll_by_bounded(lv_obj_t * obj, int32_t dx, int32_t dy, lv...
  function lv_obj_scroll_by (line 306) | void lv_obj_scroll_by(lv_obj_t * obj, int32_t dx, int32_t dy, lv_anim_en...
  function lv_obj_scroll_to (line 363) | void lv_obj_scroll_to(lv_obj_t * obj, int32_t x, int32_t y, lv_anim_enab...
  function lv_obj_scroll_to_x (line 369) | void lv_obj_scroll_to_x(lv_obj_t * obj, int32_t x, lv_anim_enable_t anim...
  function lv_obj_scroll_to_y (line 379) | void lv_obj_scroll_to_y(lv_obj_t * obj, int32_t y, lv_anim_enable_t anim...
  function lv_obj_scroll_to_view (line 389) | void lv_obj_scroll_to_view(lv_obj_t * obj, lv_anim_enable_t anim_en)
  function lv_obj_scroll_to_view_recursive (line 398) | void lv_obj_scroll_to_view_recursive(lv_obj_t * obj, lv_anim_enable_t an...
  function lv_result_t (line 413) | lv_result_t lv_obj_scroll_by_raw(lv_obj_t * obj, int32_t x, int32_t y)
  function lv_obj_is_scrolling (line 429) | bool lv_obj_is_scrolling(const lv_obj_t * obj)
  function lv_obj_update_snap (line 440) | void lv_obj_update_snap(lv_obj_t * obj, lv_anim_enable_t anim_en)
  function lv_obj_get_scrollbar_area (line 450) | void lv_obj_get_scrollbar_area(lv_obj_t * obj, lv_area_t * hor_area, lv_...
  function lv_obj_scrollbar_invalidate (line 623) | void lv_obj_scrollbar_invalidate(lv_obj_t * obj)
  function lv_obj_readjust_scroll (line 635) | void lv_obj_readjust_scroll(lv_obj_t * obj, lv_anim_enable_t anim_en)
  function scroll_x_anim (line 672) | static void scroll_x_anim(void * obj, int32_t v)
  function scroll_y_anim (line 677) | static void scroll_y_anim(void * obj, int32_t v)
  function scroll_end_cb (line 682) | static void scroll_end_cb(lv_anim_t * a)
  function scroll_area_into_view (line 688) | static void scroll_area_into_view(const lv_area_t * area, lv_obj_t * chi...

FILE: gui/lvgl/src/core/lv_obj_scroll.h
  type lv_scrollbar_mode_t (line 31) | typedef enum {
  type lv_scroll_snap_t (line 39) | typedef enum {

FILE: gui/lvgl/src/core/lv_obj_style.c
  type trans_t (line 31) | typedef struct {
  type cache_t (line 39) | typedef enum {
  function lv_obj_style_init (line 84) | void lv_obj_style_init(void)
  function lv_obj_style_deinit (line 89) | void lv_obj_style_deinit(void)
  function lv_obj_add_style (line 98) | void lv_obj_add_style(lv_obj_t * obj, const lv_style_t * style, lv_style...
  function lv_obj_replace_style (line 157) | bool lv_obj_replace_style(lv_obj_t * obj, const lv_style_t * old_style, ...
  function lv_obj_remove_style (line 203) | void lv_obj_remove_style(lv_obj_t * obj, const lv_style_t * style, lv_st...
  function lv_obj_remove_style_all (line 256) | void lv_obj_remove_style_all(lv_obj_t * obj)
  function lv_obj_report_style_change (line 261) | void lv_obj_report_style_change(lv_style_t * style)
  function lv_obj_refresh_style (line 275) | void lv_obj_refresh_style(lv_obj_t * obj, lv_style_selector_t selector, ...
  function lv_obj_enable_style_refresh (line 321) | void lv_obj_enable_style_refresh(bool en)
  function lv_style_value_t (line 326) | lv_style_value_t lv_obj_get_style_prop(const lv_obj_t * obj, lv_part_t p...
  function lv_obj_has_style_prop (line 340) | bool lv_obj_has_style_prop(const lv_obj_t * obj, lv_style_selector_t sel...
  function lv_obj_set_local_style_prop (line 353) | void lv_obj_set_local_style_prop(lv_obj_t * obj, lv_style_prop_t prop, l...
  function lv_style_res_t (line 379) | lv_style_res_t lv_obj_get_local_style_prop(lv_obj_t * obj, lv_style_prop...
  function lv_obj_remove_local_style_prop (line 393) | bool lv_obj_remove_local_style_prop(lv_obj_t * obj, lv_style_prop_t prop...
  function lv_obj_style_create_transition (line 418) | void lv_obj_style_create_transition(lv_obj_t * obj, lv_part_t part, lv_s...
  function lv_style_value_t (line 473) | lv_style_value_t lv_obj_style_apply_color_filter(const lv_obj_t * obj, l...
  function lv_style_state_cmp_t (line 484) | lv_style_state_cmp_t lv_obj_style_state_compare(lv_obj_t * obj, lv_state...
  function lv_obj_fade_in (line 545) | void lv_obj_fade_in(lv_obj_t * obj, uint32_t time, uint32_t delay)
  function lv_obj_fade_out (line 558) | void lv_obj_fade_out(lv_obj_t * obj, uint32_t time, uint32_t delay)
  function lv_text_align_t (line 570) | lv_text_align_t lv_obj_calculate_style_text_align(const lv_obj_t * obj, ...
  function lv_opa_t (line 578) | lv_opa_t lv_obj_get_style_opa_recursive(const lv_obj_t * obj, lv_part_t ...
  function lv_obj_update_layer_type (line 611) | void lv_obj_update_layer_type(lv_obj_t * obj)
  function lv_style_t (line 632) | static lv_style_t * get_local_style(lv_obj_t * obj, lv_style_selector_t ...
  function lv_obj_style_t (line 670) | static lv_obj_style_t * get_trans_style(lv_obj_t * obj,  lv_style_select...
  function lv_style_res_t (line 697) | static lv_style_res_t get_prop_core(const lv_obj_t * obj, lv_style_selec...
  function report_style_change_core (line 756) | static void report_style_change_core(void * style, lv_obj_t * obj)
  function refresh_children_style (line 778) | static void refresh_children_style(lv_obj_t * obj)
  function trans_delete (line 801) | static bool trans_delete(lv_obj_t * obj, lv_part_t part, lv_style_prop_t...
  function trans_anim_cb (line 835) | static void trans_anim_cb(void * _tr, int32_t v)
  function trans_anim_start_cb (line 899) | static void trans_anim_start_cb(lv_anim_t * a)
  function trans_anim_completed_cb (line 922) | static void trans_anim_completed_cb(lv_anim_t * a)
  function lv_layer_type_t (line 960) | static lv_layer_type_t calculate_layer_type(lv_obj_t * obj)
  function full_cache_refresh (line 973) | static void full_cache_refresh(lv_obj_t * obj, lv_part_t part)
  function fade_anim_cb (line 1023) | static void fade_anim_cb(void * obj, int32_t v)
  function fade_in_anim_completed (line 1028) | static void fade_in_anim_completed(lv_anim_t * a)
  function style_has_flag (line 1033) | static bool style_has_flag(const lv_style_t * style, uint32_t flag)
  function lv_style_res_t (line 1056) | static lv_style_res_t get_selector_style_prop(const lv_obj_t * obj, lv_s...

FILE: gui/lvgl/src/core/lv_obj_style.h
  type lv_style_state_cmp_t (line 28) | typedef enum {
  type lv_style_selector_t (line 35) | typedef uint32_t lv_style_selector_t;
  function lv_state_t (line 184) | static inline lv_state_t lv_obj_style_get_selector_state(lv_style_select...
  function lv_part_t (line 189) | static inline lv_part_t lv_obj_style_get_selector_part(lv_style_selector...
  function lv_obj_set_style_pad_all (line 196) | static inline void lv_obj_set_style_pad_all(lv_obj_t * obj, int32_t valu...
  function lv_obj_set_style_pad_hor (line 204) | static inline void lv_obj_set_style_pad_hor(lv_obj_t * obj, int32_t valu...
  function lv_obj_set_style_pad_ver (line 210) | static inline void lv_obj_set_style_pad_ver(lv_obj_t * obj, int32_t valu...
  function lv_obj_set_style_margin_all (line 216) | static inline void lv_obj_set_style_margin_all(lv_obj_t * obj, int32_t v...
  function lv_obj_set_style_margin_hor (line 224) | static inline void lv_obj_set_style_margin_hor(lv_obj_t * obj, int32_t v...
  function lv_obj_set_style_margin_ver (line 230) | static inline void lv_obj_set_style_margin_ver(lv_obj_t * obj, int32_t v...
  function lv_obj_set_style_pad_gap (line 236) | static inline void lv_obj_set_style_pad_gap(lv_obj_t * obj, int32_t valu...
  function lv_obj_set_style_size (line 242) | static inline void lv_obj_set_style_size(lv_obj_t * obj, int32_t width, ...
  function lv_obj_set_style_transform_scale (line 249) | static inline void lv_obj_set_style_transform_scale(lv_obj_t * obj, int3...
  function lv_obj_get_style_space_left (line 256) | static inline int32_t lv_obj_get_style_space_left(const lv_obj_t * obj, ...
  function lv_obj_get_style_space_right (line 264) | static inline int32_t lv_obj_get_style_space_right(const lv_obj_t * obj,...
  function lv_obj_get_style_space_top (line 272) | static inline int32_t lv_obj_get_style_space_top(const lv_obj_t * obj, l...
  function lv_obj_get_style_space_bottom (line 280) | static inline int32_t lv_obj_get_style_space_bottom(const lv_obj_t * obj...
  function lv_obj_get_style_transform_scale_x_safe (line 290) | static inline int32_t lv_obj_get_style_transform_scale_x_safe(const lv_o...
  function lv_obj_get_style_transform_scale_y_safe (line 296) | static inline int32_t lv_obj_get_style_transform_scale_y_safe(const lv_o...

FILE: gui/lvgl/src/core/lv_obj_style_gen.c
  function lv_obj_set_style_width (line 13) | void lv_obj_set_style_width(lv_obj_t * obj, int32_t value, lv_style_sele...
  function lv_obj_set_style_min_width (line 21) | void lv_obj_set_style_min_width(lv_obj_t * obj, int32_t value, lv_style_...
  function lv_obj_set_style_max_width (line 29) | void lv_obj_set_style_max_width(lv_obj_t * obj, int32_t value, lv_style_...
  function lv_obj_set_style_height (line 37) | void lv_obj_set_style_height(lv_obj_t * obj, int32_t value, lv_style_sel...
  function lv_obj_set_style_min_height (line 45) | void lv_obj_set_style_min_height(lv_obj_t * obj, int32_t value, lv_style...
  function lv_obj_set_style_max_height (line 53) | void lv_obj_set_style_max_height(lv_obj_t * obj, int32_t value, lv_style...
  function lv_obj_set_style_length (line 61) | void lv_obj_set_style_length(lv_obj_t * obj, int32_t value, lv_style_sel...
  function lv_obj_set_style_x (line 69) | void lv_obj_set_style_x(lv_obj_t * obj, int32_t value, lv_style_selector...
  function lv_obj_set_style_y (line 77) | void lv_obj_set_style_y(lv_obj_t * obj, int32_t value, lv_style_selector...
  function lv_obj_set_style_align (line 85) | void lv_obj_set_style_align(lv_obj_t * obj, lv_align_t value, lv_style_s...
  function lv_obj_set_style_transform_width (line 93) | void lv_obj_set_style_transform_width(lv_obj_t * obj, int32_t value, lv_...
  function lv_obj_set_style_transform_height (line 101) | void lv_obj_set_style_transform_height(lv_obj_t * obj, int32_t value, lv...
  function lv_obj_set_style_translate_x (line 109) | void lv_obj_set_style_translate_x(lv_obj_t * obj, int32_t value, lv_styl...
  function lv_obj_set_style_translate_y (line 117) | void lv_obj_set_style_translate_y(lv_obj_t * obj, int32_t value, lv_styl...
  function lv_obj_set_style_transform_scale_x (line 125) | void lv_obj_set_style_transform_scale_x(lv_obj_t * obj, int32_t value, l...
  function lv_obj_set_style_transform_scale_y (line 133) | void lv_obj_set_style_transform_scale_y(lv_obj_t * obj, int32_t value, l...
  function lv_obj_set_style_transform_rotation (line 141) | void lv_obj_set_style_transform_rotation(lv_obj_t * obj, int32_t value, ...
  function lv_obj_set_style_transform_pivot_x (line 149) | void lv_obj_set_style_transform_pivot_x(lv_obj_t * obj, int32_t value, l...
  function lv_obj_set_style_transform_pivot_y (line 157) | void lv_obj_set_style_transform_pivot_y(lv_obj_t * obj, int32_t value, l...
  function lv_obj_set_style_transform_skew_x (line 165) | void lv_obj_set_style_transform_skew_x(lv_obj_t * obj, int32_t value, lv...
  function lv_obj_set_style_transform_skew_y (line 173) | void lv_obj_set_style_transform_skew_y(lv_obj_t * obj, int32_t value, lv...
  function lv_obj_set_style_pad_top (line 181) | void lv_obj_set_style_pad_top(lv_obj_t * obj, int32_t value, lv_style_se...
  function lv_obj_set_style_pad_bottom (line 189) | void lv_obj_set_style_pad_bottom(lv_obj_t * obj, int32_t value, lv_style...
  function lv_obj_set_style_pad_left (line 197) | void lv_obj_set_style_pad_left(lv_obj_t * obj, int32_t value, lv_style_s...
  function lv_obj_set_style_pad_right (line 205) | void lv_obj_set_style_pad_right(lv_obj_t * obj, int32_t value, lv_style_...
  function lv_obj_set_style_pad_row (line 213) | void lv_obj_set_style_pad_row(lv_obj_t * obj, int32_t value, lv_style_se...
  function lv_obj_set_style_pad_column (line 221) | void lv_obj_set_style_pad_column(lv_obj_t * obj, int32_t value, lv_style...
  function lv_obj_set_style_margin_top (line 229) | void lv_obj_set_style_margin_top(lv_obj_t * obj, int32_t value, lv
Copy disabled (too large) Download .json
Condensed preview — 1763 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (61,161K chars).
[
  {
    "path": "CNAME",
    "chars": 24,
    "preview": "xiaozhi-linux.100ask.net"
  },
  {
    "path": "README.md",
    "chars": 2057,
    "preview": "# Linux 小智 AI 聊天机器人\r\n\r\n项目主要参考虾哥 [ESP32 AI小智](https://github.com/78/xiaozhi-esp32 ) 项目设计,我们在嵌入式 Linux 平台进行完整支持,其中有幸联系到虾哥本"
  },
  {
    "path": "control_center/Makefile",
    "chars": 749,
    "preview": "# sudo apt-get install libopus-dev libavresample-dev libswresample-dev libspeexdsp-dev\n\nobjs := control_center.o websock"
  },
  {
    "path": "control_center/cfg.h",
    "chars": 369,
    "preview": "#ifndef __CFG_H\r\n#define __CFG_H\r\n\r\n#define AUDIO_PORT_UP    5676   /* sound_app向control_center的这个端口上传音频 */\r\n#define AUD"
  },
  {
    "path": "control_center/control_center.cpp",
    "chars": 17140,
    "preview": "// SPDX-License-Identifier: GPL-3.0-only\r\n/*\r\n * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.n"
  },
  {
    "path": "control_center/http.cpp",
    "chars": 5328,
    "preview": "// SPDX-License-Identifier: GPL-3.0-only\r\n/*\r\n * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.n"
  },
  {
    "path": "control_center/http.h",
    "chars": 380,
    "preview": "#ifndef _HTTP_H_\r\n#define _HTTP_H_\r\n\r\n#include <string>\r\n\r\ntypedef struct http_data_t {\r\n    std::string url;\r\n    std::"
  },
  {
    "path": "control_center/ipc_udp.cpp",
    "chars": 7820,
    "preview": "// SPDX-License-Identifier: GPL-3.0-only\r\n/*\r\n * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.n"
  },
  {
    "path": "control_center/ipc_udp.h",
    "chars": 1243,
    "preview": "#ifndef TRANSFER_CENTER_H\r\n#define TRANSFER_CENTER_H\r\n\r\n#include <cstddef> // 添加此行以定义 size_t\r\n\r\ntypedef int (*transfer_c"
  },
  {
    "path": "control_center/json.hpp",
    "chars": 952699,
    "preview": "//     __ _____ _____ _____\n//  __|  |   __|     |   | |  JSON for Modern C++\n// |  |  |__   |  |  | | | |  version 3.11"
  },
  {
    "path": "control_center/uuid.cpp",
    "chars": 4487,
    "preview": "// SPDX-License-Identifier: GPL-3.0-only\r\n/*\r\n * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.n"
  },
  {
    "path": "control_center/uuid.h",
    "chars": 483,
    "preview": "#ifndef __UUID_H__\r\n#define __UUID_H__\r\n\r\n#include <iostream>\r\n\r\n/**\r\n * 获取无线网卡的 MAC 地址\r\n *\r\n * 该函数遍历 /sys/class/net/ 目录"
  },
  {
    "path": "control_center/websocket_client.cpp",
    "chars": 13645,
    "preview": "// SPDX-License-Identifier: GPL-3.0-only\r\n/*\r\n * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.n"
  },
  {
    "path": "control_center/websocket_client.h",
    "chars": 988,
    "preview": "#ifndef __WEBSOCKET_CLIENT_H__\r\n#define __WEBSOCKET_CLIENT_H__\r\n\r\n #include <string>\r\n\r\n// Define the callback function "
  },
  {
    "path": "gui/CMakeLists.txt",
    "chars": 967,
    "preview": "cmake_minimum_required(VERSION 3.10)\nproject(lvgl)\n\nset(CMAKE_C_STANDARD 99)#C99 # lvgl officially support C99 and above"
  },
  {
    "path": "gui/LICENSE",
    "chars": 1081,
    "preview": "MIT License\n\nCopyright (c) 2019 Littlev Graphics Library\n\nPermission is hereby granted, free of charge, to any person ob"
  },
  {
    "path": "gui/Makefile",
    "chars": 2009,
    "preview": "#\n# Makefile\n#\nCC = /home/ubuntu/100ask_imx6ull-sdk/Buildroot_2020.02.x/output/host/bin/arm-buildroot-linux-gnueabihf-gc"
  },
  {
    "path": "gui/README.md",
    "chars": 2201,
    "preview": "# LVGL on top of Linux graphics stack\n\nExample project to use LVGL on top of Linux graphics stack.\nCurrently supported b"
  },
  {
    "path": "gui/build.sh",
    "chars": 176,
    "preview": "#rm -rf build\nmkdir -p build\ncd build/\ncmake -DCMAKE_TOOLCHAIN_FILE=\"../toolchain.cmake\" ..\nmake -j32\nwait\ncd ../ \ncp bi"
  },
  {
    "path": "gui/lv_100ask_xz_ai/CMakeLists.txt",
    "chars": 173,
    "preview": "file(GLOB_RECURSE SOURCES src/*.c)\r\nadd_library(lv_100ask_xz_ai STATIC ${SOURCES})\r\n\r\ntarget_include_directories(lv_100a"
  },
  {
    "path": "gui/lv_100ask_xz_ai/library.properties",
    "chars": 320,
    "preview": "name=lv_100ask_xz_ai\r\nversion=9.1.0\r\nauthor=100ask\r\nmaintainer=100ask,zhouyuebiao\r\nsentence=Examples for LVGL grapics li"
  },
  {
    "path": "gui/lv_100ask_xz_ai/lv_100ask_xz_ai.h",
    "chars": 1207,
    "preview": "/**\r\n * @file lv_100ask_xz_ai.h\r\n *\r\n */\r\n\r\n#ifndef LV_100ASK_XZ_AI_H\r\n#define LV_100ASK_XZ_AI_H\r\n\r\n#ifdef __cplusplus\r\n"
  },
  {
    "path": "gui/lv_100ask_xz_ai/lv_100ask_xz_ai.mk",
    "chars": 67,
    "preview": "CSRCS += $(shell find -L $(LVGL_DIR)/lv_100ask_xz_ai -name \"*.c\")\r\n"
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/cJSON.c",
    "chars": 77932,
    "preview": "/*\n  Copyright (c) 2009-2017 Dave Gamble and cJSON contributors\n\n  Permission is hereby granted, free of charge, to any "
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/cJSON.h",
    "chars": 16193,
    "preview": "/*\n  Copyright (c) 2009-2017 Dave Gamble and cJSON contributors\n\n  Permission is hereby granted, free of charge, to any "
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/cfg.h",
    "chars": 328,
    "preview": "#ifndef __CFG_H\r\n#define __CFG_H\r\n\r\n#define AUDIO_PORT_UP    5676   /* sound_app向control_center的这个端口上传音频 */\r\n#define AUD"
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/ipc_udp.c",
    "chars": 7819,
    "preview": "// SPDX-License-Identifier: GPL-3.0-only\r\n/*\r\n * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.n"
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/ipc_udp.h",
    "chars": 1242,
    "preview": "#ifndef TRANSFER_CENTER_H\r\n#define TRANSFER_CENTER_H\r\n\r\n#include <stddef.h> // 添加此行以定义 size_t\r\n#include <stdio.h>\r\n#incl"
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/lang_config.h",
    "chars": 1543,
    "preview": "const char* CODE = \"zh-CN\";\r\nconst char* UNKNOWN_STATUS = \"未知状态\";\r\nconst char* ACCESS_VIA_BROWSER = \",浏览器访问 \";\r\nconst ch"
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/lv_100ask_xz_ai_main.c",
    "chars": 8281,
    "preview": "/**\r\n ******************************************************************************\r\n * @file    lv_100ask_xz_ai_main.c"
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/lv_100ask_xz_ai_main.h",
    "chars": 1403,
    "preview": "/**\r\n * @file lv_modbus_tool.h\r\n * This file exists only to be compatible with Arduino's library structure\r\n */\r\n\r\n#ifnd"
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/ui_system.c",
    "chars": 4411,
    "preview": "// SPDX-License-Identifier: GPL-3.0-only\r\n/*\r\n * Copyright (c) 2008-2023 100askTeam : Dongshan WEI <weidongshan@100ask.n"
  },
  {
    "path": "gui/lv_100ask_xz_ai/src/ui_system.h",
    "chars": 173,
    "preview": "#ifndef __UI_SYSTEM_H__\r\n#define __UI_SYSTEM_H__ \r\n\r\n/*\r\n * 初始化UI系统。\r\n * 创建IPC端点,用于接收和处理UI数据。\r\n *\r\n * @return 0 表示成功,-1 "
  },
  {
    "path": "gui/lv_100ask_xz_ai_conf.h",
    "chars": 488,
    "preview": "/**\r\n * @file lv_100ask_xz_ai_conf.h\r\n * Configuration file for v9.1.0\r\n *\r\n */\r\n/*\r\n * COPY THIS FILE AS lv_100ask_xz_a"
  },
  {
    "path": "gui/lv_conf.defaults",
    "chars": 1575,
    "preview": "LV_COLOR_DEPTH\t    32\nLV_MEM_SIZE\t        (1024 * 1024)\nLV_USE_MATRIX       1\nLV_USE_FLOAT        1\nLV_USE_LOTTIE       "
  },
  {
    "path": "gui/lv_conf.h",
    "chars": 35976,
    "preview": "/**\n * @file lv_conf.h\n * Configuration file for v9.2.2\n */\n\n/*\n * Copy this file as `lv_conf.h`\n * 1. simply next to t"
  },
  {
    "path": "gui/lvgl/.devcontainer/__CMakeLists.txt__",
    "chars": 708,
    "preview": "cmake_minimum_required(VERSION 3.12)\nproject (lv_emscripten)\n\nset(CMAKE_C_FLAGS \"${CMAKE_C_FLAGS} -O2 -s USE_SDL=2\")\n\nin"
  },
  {
    "path": "gui/lvgl/.devcontainer/__build_all.sh__",
    "chars": 64,
    "preview": "cd build\nemcmake cmake ..\nemmake make -j$(nproc)\ncode index.html"
  },
  {
    "path": "gui/lvgl/.devcontainer/__c_cpp_properties.json__",
    "chars": 454,
    "preview": "{\n    \"configurations\": [\n        {\n            \"name\": \"Linux\",\n            \"includePath\": [\n                \"${workspa"
  },
  {
    "path": "gui/lvgl/.devcontainer/__lv_conf.h__",
    "chars": 30374,
    "preview": "/**\n * @file lv_conf.h\n * Configuration file for v9.0.0-dev\n */\n\n/*\n * Copy this file as `lv_conf.h`\n * 1. simply next t"
  },
  {
    "path": "gui/lvgl/.devcontainer/__main.c__",
    "chars": 2348,
    "preview": "\n/**\n * @file main\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include <stdlib.h>\n#include "
  },
  {
    "path": "gui/lvgl/.devcontainer/__settings.json__",
    "chars": 58,
    "preview": "{\n    \"files.associations\": {\n        \"sdl.h\": \"c\"\n    }\n}"
  },
  {
    "path": "gui/lvgl/.devcontainer/devcontainer.json",
    "chars": 860,
    "preview": "{\n  \"image\": \"mcr.microsoft.com/devcontainers/universal:2\",\n  \"features\": {\n    \"ghcr.io/ebaskoro/devcontainer-features/"
  },
  {
    "path": "gui/lvgl/.devcontainer/lvgl_shell.html",
    "chars": 2616,
    "preview": "<html>\n\t<head>\n\t\t<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable="
  },
  {
    "path": "gui/lvgl/.devcontainer/setup.sh",
    "chars": 457,
    "preview": "#!/bin/sh\n\necho \". /usr/local/emsdk/emsdk_env.sh\" >> /home/codespace/.bashrc\n\ncd /workspace/lvgl_app\nsudo chmod 777 .\nmk"
  },
  {
    "path": "gui/lvgl/.gitignore",
    "chars": 451,
    "preview": "**/*.o\n**/*bin\n**/*.swp\n**/*.swo\n**/*.gcda\n**/*.gcno\ntags\ndocs/api_doc\nscripts/cppcheck_res.txt\nscripts/built_in_font/lv"
  },
  {
    "path": "gui/lvgl/.pre-commit-config.yaml",
    "chars": 1161,
    "preview": "# See https://pre-commit.com for more information\n# See https://pre-commit.com/hooks.html for more hooks\nrepos:\n-   repo"
  },
  {
    "path": "gui/lvgl/.typos.toml",
    "chars": 659,
    "preview": "[files]\nextend-exclude = [\n    \".git/\",\n    \"docs/_static/css/fontawesome.min.css\",\n    \"docs/README_*\",\n    \"src/libs/\""
  },
  {
    "path": "gui/lvgl/CMakeLists.txt",
    "chars": 1550,
    "preview": "cmake_minimum_required(VERSION 3.12.4)\n\nset(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)\n\nif(NOT ESP_PLATFORM)\n  if(NOT (CMAKE_C"
  },
  {
    "path": "gui/lvgl/CMakePresets.json",
    "chars": 2818,
    "preview": "{\n  \"version\": 3,\n  \"configurePresets\": [\n    {\n      \"name\": \"_base\",\n      \"hidden\": true,\n      \"cacheVariables\": {\n "
  },
  {
    "path": "gui/lvgl/Kconfig",
    "chars": 53457,
    "preview": "# Kconfig file for LVGL v9.2.2\n\nmenu \"LVGL configuration\"\n\n\t# Define CONFIG_LV_CONF_SKIP so we can use LVGL\n\t# without l"
  },
  {
    "path": "gui/lvgl/LICENCE.txt",
    "chars": 1064,
    "preview": "MIT licence\nCopyright (c) 2021 LVGL Kft\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of"
  },
  {
    "path": "gui/lvgl/README.md",
    "chars": 22680,
    "preview": "\n<a href=\"https://github.com/sponsors/lvgl\" target=\"_blank\"><img align=\"left\" src=\"https://lvgl.io/github-assets/sponsor"
  },
  {
    "path": "gui/lvgl/SConscript",
    "chars": 192,
    "preview": "# RT-Thread building script for bridge\n\nimport os\nfrom building import *\n\nobjs = []\ncwd  = GetCurrentDir()\n\nobjs = objs "
  },
  {
    "path": "gui/lvgl/component.mk",
    "chars": 2508,
    "preview": "# ESP-IDF component file for make based commands\n\nCOMPONENT_SRCDIRS := . \\\n                  src \\\n                  src"
  },
  {
    "path": "gui/lvgl/demos/README.md",
    "chars": 4549,
    "preview": "# Demos for LVGL\n\n## Add the examples to your projects\n1. demos can be found in the 'demos' folder once you clone the lv"
  },
  {
    "path": "gui/lvgl/demos/benchmark/assets/img_benchmark_avatar.c",
    "chars": 154867,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/benchmark/assets/img_benchmark_cogwheel_alpha256.c",
    "chars": 65459,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/benchmark/assets/img_benchmark_cogwheel_argb.c",
    "chars": 225440,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/benchmark/assets/img_benchmark_cogwheel_indexed16.c",
    "chars": 33804,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/benchmark/assets/img_benchmark_cogwheel_rgb.c",
    "chars": 129432,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/benchmark/assets/lv_font_benchmark_montserrat_12_compr_az.c.c",
    "chars": 10913,
    "preview": "#include \"../../../lvgl.h\"\n\n#if LV_USE_DEMO_BENCHMARK\n\n/****************************************************************"
  },
  {
    "path": "gui/lvgl/demos/benchmark/assets/lv_font_benchmark_montserrat_16_compr_az.c.c",
    "chars": 12870,
    "preview": "#include \"../../../lvgl.h\"\n\n#if LV_USE_DEMO_BENCHMARK\n\n/****************************************************************"
  },
  {
    "path": "gui/lvgl/demos/benchmark/assets/lv_font_benchmark_montserrat_28_compr_az.c.c",
    "chars": 20403,
    "preview": "#include \"../../../lvgl.h\"\n\n#if LV_USE_DEMO_BENCHMARK\n\n\n/***************************************************************"
  },
  {
    "path": "gui/lvgl/demos/benchmark/lv_demo_benchmark.c",
    "chars": 31936,
    "preview": "/**\n * @file lv_demo_benchmark.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \"lv_de"
  },
  {
    "path": "gui/lvgl/demos/benchmark/lv_demo_benchmark.h",
    "chars": 1507,
    "preview": "/**\n * @file lv_demo_benchmark.h\n *\n */\n\n#ifndef LV_DEMO_BENCHMARK_H\n#define LV_DEMO_BENCHMARK_H\n\n#ifdef __cplusplus\next"
  },
  {
    "path": "gui/lvgl/demos/flex_layout/lv_demo_flex_layout.h",
    "chars": 585,
    "preview": "/**\n * @file lv_demo_flex_layout.h\n *\n */\n\n#ifndef LV_DEMO_FLEX_LAYOUT_H\n#define LV_DEMO_FLEX_LAYOUT_H\n\n#ifdef __cpluspl"
  },
  {
    "path": "gui/lvgl/demos/flex_layout/lv_demo_flex_layout_ctrl_pad.c",
    "chars": 4573,
    "preview": "/**\n * @file lv_demo_flex_layout_ctrl_pad.h\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n\n#in"
  },
  {
    "path": "gui/lvgl/demos/flex_layout/lv_demo_flex_layout_flex_loader.c",
    "chars": 4812,
    "preview": "/**\n * @file lv_demo_flex_layout_flex_loader.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n\n"
  },
  {
    "path": "gui/lvgl/demos/flex_layout/lv_demo_flex_layout_main.c",
    "chars": 833,
    "preview": "/**\n * @file lv_demo_flex_layout_main.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n\n#includ"
  },
  {
    "path": "gui/lvgl/demos/flex_layout/lv_demo_flex_layout_main.h",
    "chars": 2607,
    "preview": "/**\n * @file lv_demo_flex_layout_main.h\n *\n */\n\n#ifndef LV_DEMO_FLEX_LAYOUT_MAIN_H\n#define LV_DEMO_FLEX_LAYOUT_MAIN_H\n\n#"
  },
  {
    "path": "gui/lvgl/demos/flex_layout/lv_demo_flex_layout_view.c",
    "chars": 4587,
    "preview": "/**\n * @file lv_demo_flex_layout_view.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n\n#includ"
  },
  {
    "path": "gui/lvgl/demos/flex_layout/lv_demo_flex_layout_view_child_node.c",
    "chars": 1763,
    "preview": "/**\n * @file lv_demo_flex_layout_view_child_node.c\n *\n */\n\n/*********************\n *      INCLUDES\n ********************"
  },
  {
    "path": "gui/lvgl/demos/flex_layout/lv_demo_flex_layout_view_ctrl_pad.c",
    "chars": 12709,
    "preview": "/**\n * @file lv_demo_flex_layout_view_ctrl_pad.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/"
  },
  {
    "path": "gui/lvgl/demos/keypad_encoder/README.md",
    "chars": 621,
    "preview": "# Keypad and Encoder demo\n\n## Overview\n\nLVGL allows you to control the widgets with keypad and/or encoder without touchp"
  },
  {
    "path": "gui/lvgl/demos/keypad_encoder/lv_demo_keypad_encoder.c",
    "chars": 6309,
    "preview": "/**\n * @file lv_demo_keypad_encoder.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \""
  },
  {
    "path": "gui/lvgl/demos/keypad_encoder/lv_demo_keypad_encoder.h",
    "chars": 627,
    "preview": "/**\n * @file lv_demo_keypad_encoder.h\n *\n */\n\n#ifndef LV_DEMO_KEYPAD_ENCODER_H\n#define LV_DEMO_KEYPAD_ENCODER_H\n\n#ifdef "
  },
  {
    "path": "gui/lvgl/demos/lv_demos.c",
    "chars": 3138,
    "preview": "/**\n * @file lv_demos.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \"lv_demos.h\"\n\n/"
  },
  {
    "path": "gui/lvgl/demos/lv_demos.h",
    "chars": 1665,
    "preview": "/**\n * @file lv_demos.h\n *\n */\n\n#ifndef LV_DEMOS_H\n#define LV_DEMOS_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/********"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_1.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_10.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_11.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_12.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_13.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_14.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_15.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_16.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_17.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_18.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_19.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_2.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_22.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_25.c",
    "chars": 394626,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_3.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_4.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_5.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_6.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_7.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_8.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/avatars/img_multilang_avatar_9.c",
    "chars": 394619,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_artist_palette.c",
    "chars": 9186,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_books.c",
    "chars": 9123,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_camera_with_flash.c",
    "chars": 9207,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_cat_face.c",
    "chars": 9144,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_deciduous_tree.c",
    "chars": 8274,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_dog_face.c",
    "chars": 9144,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_earth_globe_europe_africa.c",
    "chars": 9719,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_flexed_biceps.c",
    "chars": 9179,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_movie_camera.c",
    "chars": 9172,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_red_heart.c",
    "chars": 9151,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_rocket.c",
    "chars": 8218,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/emojis/img_emoji_soccer_ball.c",
    "chars": 9165,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/fonts/font2c.py",
    "chars": 1763,
    "preview": "#!/usr/bin/python3\n\nimport os, sys\n\n\nhebrew_syms = \"קורא נלהב שצובר אוסף עצום של ספרים יקרים\"\ndevanagari_syms = \"हरित का"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/fonts/font_multilang_large.c",
    "chars": 79689,
    "preview": "/*******************************************************************************\n * Size: 22 px\n * Bpp: 4\n * Opts: --no-"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/fonts/font_multilang_small.c",
    "chars": 262227,
    "preview": "/*******************************************************************************\n * Size: 15 px\n * Bpp: 4\n * Opts: --no-"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/img2c.py",
    "chars": 171,
    "preview": "#!/usr/bin/python3\n\nimport os, sys\n\nfiles = \"\"\n\nfor i in sys.argv[1:]:\n    files += i + \" \"\n\nc = f\"lv_img_conv.js {files"
  },
  {
    "path": "gui/lvgl/demos/multilang/assets/img_multilang_like.c",
    "chars": 9131,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/multilang/img2c.py",
    "chars": 171,
    "preview": "#!/usr/bin/python3\n\nimport os, sys\n\nfiles = \"\"\n\nfor i in sys.argv[1:]:\n    files += i + \" \"\n\nc = f\"lv_img_conv.js {files"
  },
  {
    "path": "gui/lvgl/demos/multilang/lv_demo_multilang.c",
    "chars": 14021,
    "preview": "/**\n * @file lv_demo_multilang.c\n * Recommended resolution 470x640\n */\n\n/*********************\n *      INCLUDES\n *******"
  },
  {
    "path": "gui/lvgl/demos/multilang/lv_demo_multilang.h",
    "chars": 803,
    "preview": "/**\n * @file lv_demo_multilang.h\n *\n */\n\n#ifndef LV_DEMO_MULTILANG_H\n#define LV_DEMO_MULTILANG_H\n\n#ifdef __cplusplus\next"
  },
  {
    "path": "gui/lvgl/demos/music/README.md",
    "chars": 1425,
    "preview": "# Music player demo\n\n## Overview\nThe music player demo shows what kind of modern, smartphone-like user interfaces can be"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_corner_large.c",
    "chars": 25484,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define L"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_list_pause.c",
    "chars": 84311,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_list_pause_large.c",
    "chars": 268351,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define L"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_list_play.c",
    "chars": 84307,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_list_play_large.c",
    "chars": 268344,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define L"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_loop.c",
    "chars": 14446,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_loop_large.c",
    "chars": 32879,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define L"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_next.c",
    "chars": 93031,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_next_large.c",
    "chars": 291609,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define L"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_pause.c",
    "chars": 146831,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_pause_large.c",
    "chars": 481873,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_play.c",
    "chars": 146827,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_play_large.c",
    "chars": 481867,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_prev.c",
    "chars": 93031,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_prev_large.c",
    "chars": 291610,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_rnd.c",
    "chars": 14442,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_btn_rnd_large.c",
    "chars": 32873,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define L"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_corner_left.c",
    "chars": 8386,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_corner_left_large.c",
    "chars": 25486,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_corner_right.c",
    "chars": 8390,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_corner_right_large.c",
    "chars": 25490,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_cover_1.c",
    "chars": 617473,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_cover_1_large.c",
    "chars": 3666589,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_cover_2.c",
    "chars": 617474,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_cover_2_large.c",
    "chars": 3666589,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_cover_3.c",
    "chars": 617474,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_cover_3_large.c",
    "chars": 3666510,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_icon_1.c",
    "chars": 14515,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_icon_1_large.c",
    "chars": 22485,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_icon_2.c",
    "chars": 14515,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_icon_2_large.c",
    "chars": 23949,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_icon_3.c",
    "chars": 14515,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_icon_3_large.c",
    "chars": 27013,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_icon_4.c",
    "chars": 14515,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_icon_4_large.c",
    "chars": 23924,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_list_border.c",
    "chars": 26668,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_list_border_large.c",
    "chars": 81291,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_logo.c",
    "chars": 189278,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define LV_ATTRIBUTE_MEM_ALIGN\n#"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_slider_knob.c",
    "chars": 33523,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_slider_knob_large.c",
    "chars": 105594,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_wave_bottom.c",
    "chars": 274962,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_wave_bottom_large.c",
    "chars": 851795,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_wave_top.c",
    "chars": 274950,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC  && !LV_DEMO_MUSIC_LARGE\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define"
  },
  {
    "path": "gui/lvgl/demos/music/assets/img_lv_demo_music_wave_top_large.c",
    "chars": 851774,
    "preview": "#include \"../lv_demo_music.h\"\n#if LV_USE_DEMO_MUSIC && LV_DEMO_MUSIC_LARGE\n\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define "
  },
  {
    "path": "gui/lvgl/demos/music/assets/spectrum.py",
    "chars": 715,
    "preview": "#!/usr/bin/env python3\n\nimport numpy as np\nimport librosa\nimport math\nimport sys\n\nprint(\"Loading file\")\naudio, sample_ra"
  },
  {
    "path": "gui/lvgl/demos/music/assets/spectrum_1.h",
    "chars": 8880,
    "preview": "const uint16_t spectrum_1[][4] = {\n{ 0, 0, 0, 0, },\n{ 0, 9, 7, 8, },\n{ 5, 39, 24, 29, },\n{ 14, 44, 34, 45, },\n{ 16, 25, "
  },
  {
    "path": "gui/lvgl/demos/music/assets/spectrum_2.h",
    "chars": 15775,
    "preview": "const uint16_t spectrum_2[][4] = {\n{ 0, 0, 0, 0, },\n{ 0, 8, 28, 14, },\n{ 1, 35, 63, 31, },\n{ 5, 62, 56, 35, },\n{ 13, 49,"
  },
  {
    "path": "gui/lvgl/demos/music/assets/spectrum_3.h",
    "chars": 19152,
    "preview": "const uint16_t spectrum_3[][4] = {\n{ 0, 0, 0, 0, },\n{ 0, 0, 0, 0, },\n{ 0, 0, 0, 0, },\n{ 0, 1, 1, 0, },\n{ 0, 1, 1, 0, },\n"
  },
  {
    "path": "gui/lvgl/demos/music/lv_demo_music.c",
    "chars": 6685,
    "preview": "/**\n * @file lv_demo_music.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \"lv_demo_m"
  },
  {
    "path": "gui/lvgl/demos/music/lv_demo_music.h",
    "chars": 986,
    "preview": "/**\n * @file lv_demo_music.h\n *\n */\n\n#ifndef LV_DEMO_MUSIC_H\n#define LV_DEMO_MUSIC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#e"
  },
  {
    "path": "gui/lvgl/demos/music/lv_demo_music_list.c",
    "chars": 8410,
    "preview": "/**\n * @file lv_demo_music_list.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \"lv_d"
  },
  {
    "path": "gui/lvgl/demos/music/lv_demo_music_list.h",
    "chars": 756,
    "preview": "/**\n * @file lv_demo_music_list.h\n *\n */\n\n#ifndef LV_DEMO_MUSIC_LIST_H\n#define LV_DEMO_MUSIC_LIST_H\n\n#ifdef __cplusplus\n"
  },
  {
    "path": "gui/lvgl/demos/music/lv_demo_music_main.c",
    "chars": 37387,
    "preview": "/**\n * @file lv_demo_music_main.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \"lv_d"
  },
  {
    "path": "gui/lvgl/demos/music/lv_demo_music_main.h",
    "chars": 902,
    "preview": "/**\n * @file lv_demo_music_main.h\n *\n */\n\n#ifndef LV_DEMO_MUSIC_MAIN_H\n#define LV_DEMO_MUSIC_MAIN_H\n\n#ifdef __cplusplus\n"
  },
  {
    "path": "gui/lvgl/demos/render/assets/img_render_arc_bg.c",
    "chars": 240975,
    "preview": "#include \"../../../lvgl.h\"\n\n#ifndef LV_ATTRIBUTE_MEM_ALIGN\n    #define LV_ATTRIBUTE_MEM_ALIGN\n#endif\n\n#ifndef LV_ATTRIBU"
  },
  {
    "path": "gui/lvgl/demos/render/assets/img_render_lvgl_logo_argb8888.c",
    "chars": 19098,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/render/assets/img_render_lvgl_logo_i1.c",
    "chars": 1684,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/render/assets/img_render_lvgl_logo_l8.c",
    "chars": 5539,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/render/assets/img_render_lvgl_logo_rgb565.c",
    "chars": 10141,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/render/assets/img_render_lvgl_logo_rgb888.c",
    "chars": 14582,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/render/assets/img_render_lvgl_logo_xrgb8888.c",
    "chars": 19098,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/render/lv_demo_render.c",
    "chars": 41311,
    "preview": "/**\n * @file lv_demo_render.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \"lv_demo"
  },
  {
    "path": "gui/lvgl/demos/render/lv_demo_render.h",
    "chars": 1756,
    "preview": "/**\n * @file lv_demo_render.h\n *\n */\n\n#ifndef LV_DEMO_RENDER_H\n#define LV_DEMO_RENDER_H\n\n#ifdef __cplusplus\nextern \"C\" "
  },
  {
    "path": "gui/lvgl/demos/scroll/lv_demo_scroll.c",
    "chars": 3561,
    "preview": "/**\n * @file lv_demo_scroll.c\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \"lv_demo_scr"
  },
  {
    "path": "gui/lvgl/demos/scroll/lv_demo_scroll.h",
    "chars": 587,
    "preview": "/**\n * @file lv_demo_scroll.h\n *\n */\n\n#ifndef LV_DEMO_SCROLL_H\n#define LV_DEMO_SCROLL_H\n\n#ifdef __cplusplus\nextern \"C\" {"
  },
  {
    "path": "gui/lvgl/demos/stress/README.md",
    "chars": 544,
    "preview": "# Stress demo\n\n## Overview\n\nA stress test for LVGL.\nIt contains a lot of object creation, deletion, animations, styles u"
  },
  {
    "path": "gui/lvgl/demos/stress/lv_demo_stress.c",
    "chars": 16329,
    "preview": "/**\n * @file lv_demo_stress.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \"lv_demo_"
  },
  {
    "path": "gui/lvgl/demos/stress/lv_demo_stress.h",
    "chars": 720,
    "preview": "/**\n * @file lv_demo_stress.h\n *\n */\n\n#ifndef LV_DEMO_STRESS_H\n#define LV_DEMO_STRESS_H\n\n#ifdef __cplusplus\nextern \"C\" {"
  },
  {
    "path": "gui/lvgl/demos/transform/assets/img_transform_avatar_15.c",
    "chars": 129280,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/transform/img2c.py",
    "chars": 171,
    "preview": "#!/usr/bin/python3\n\nimport os, sys\n\nfiles = \"\"\n\nfor i in sys.argv[1:]:\n    files += i + \" \"\n\nc = f\"lv_img_conv.js {files"
  },
  {
    "path": "gui/lvgl/demos/transform/lv_demo_transform.c",
    "chars": 5401,
    "preview": "/**\n * @file lv_demo_transform.c\n * Recommended resolution 400x400\n */\n\n/*********************\n *      INCLUDES\n *******"
  },
  {
    "path": "gui/lvgl/demos/transform/lv_demo_transform.h",
    "chars": 862,
    "preview": "/**\n * @file lv_demo_transform.h\n *\n */\n\n#ifndef LV_DEMO_TRANSFORM_H\n#define LV_DEMO_TRANSFORM_H\n\n#ifdef __cplusplus\next"
  },
  {
    "path": "gui/lvgl/demos/vector_graphic/assets/img_demo_vector_avatar.c",
    "chars": 592833,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/vector_graphic/lv_demo_vector_graphic.c",
    "chars": 9494,
    "preview": "/**\n * @file lv_demo_vector_graphic.c\n *\n */\n\n/*********************\n *      INCLUDES\n *********************/\n#include \""
  },
  {
    "path": "gui/lvgl/demos/vector_graphic/lv_demo_vector_graphic.h",
    "chars": 974,
    "preview": "\n/**\n * @file lv_demo_vector_graphic.h\n *\n */\n\n#ifndef LV_DEMO_VECTOR_GRAPHIC_H\n#define LV_DEMO_VECTOR_GRAPHIC_H\n\n#ifdef"
  },
  {
    "path": "gui/lvgl/demos/widgets/assets/img_clothes.c",
    "chars": 72801,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/widgets/assets/img_demo_widgets_avatar.c",
    "chars": 494485,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/widgets/assets/img_demo_widgets_needle.c",
    "chars": 22473,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  },
  {
    "path": "gui/lvgl/demos/widgets/assets/img_lvgl_logo.c",
    "chars": 41402,
    "preview": "#ifdef __has_include\n    #if __has_include(\"lvgl.h\")\n        #ifndef LV_LVGL_H_INCLUDE_SIMPLE\n            #define LV_LVG"
  }
]

// ... and 1563 more files (download for full content)

About this extraction

This page contains the full source code of the 100askTeam/xiaozhi-linux GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1763 files (57.5 MB), approximately 15.2M tokens, and a symbol index with 10306 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!