diff --git a/daemon/claude_usage_daemon.py b/daemon/claude_usage_daemon.py index a20796147..3417f1350 100755 --- a/daemon/claude_usage_daemon.py +++ b/daemon/claude_usage_daemon.py @@ -271,6 +271,56 @@ async def discover_target(skip_addr: str | None = None): return address +CLAUDE_PROJECTS = Path.home() / ".claude" / "projects" + + +def seven_day_usage() -> list: + """Total tokens per local day for the last 7 days, normalized 0-100 + (busiest day = 100). Index 6 = today. Parsed from Claude Code's local + JSONL logs under ~/.claude/projects. Returns [0]*7 on any failure.""" + import datetime + today = datetime.date.today() + idx = {(today - datetime.timedelta(days=6 - i)).isoformat(): i for i in range(7)} + totals = [0] * 7 + cutoff = time.time() - 8 * 86400 + try: + for f in CLAUDE_PROJECTS.rglob("*.jsonl"): + try: + if f.stat().st_mtime < cutoff: + continue + except OSError: + continue + with f.open(errors="ignore") as fh: + for line in fh: + if '"usage"' not in line: + continue + try: + rec = json.loads(line) + except ValueError: + continue + ts = rec.get("timestamp") + usage = (rec.get("message") or {}).get("usage") + if not ts or not usage: + continue + try: + day = datetime.datetime.fromisoformat( + ts.replace("Z", "+00:00")).astimezone().date().isoformat() + except ValueError: + continue + i = idx.get(day) + if i is None: + continue + totals[i] += (usage.get("input_tokens", 0) + + usage.get("output_tokens", 0) + + usage.get("cache_creation_input_tokens", 0) + + usage.get("cache_read_input_tokens", 0)) + except Exception as e: + log(f"7-day scan failed: {e}") + return [0] * 7 + mx = max(totals) or 1 + return [round(t * 100 / mx) for t in totals] + + async def poll_api(token: str) -> dict | None: headers = dict(API_HEADERS_TEMPLATE) headers["Authorization"] = f"Bearer {token}" @@ -311,6 +361,8 @@ def pct(util: str) -> int: "st": hdr("anthropic-ratelimit-unified-5h-status", "unknown"), "ok": True, } + payload["t"] = time.strftime("%H:%M:%S", time.localtime()) # seconds → device anchors minute flip correctly + payload["d7"] = seven_day_usage() return payload diff --git a/firmware/src/boards/waveshare_lcd_183/board.h b/firmware/src/boards/waveshare_lcd_183/board.h index eb93ad153..c04d666df 100644 --- a/firmware/src/boards/waveshare_lcd_183/board.h +++ b/firmware/src/boards/waveshare_lcd_183/board.h @@ -46,5 +46,5 @@ #define BOARD_HAS_SECONDARY_BUTTON 0 #define BOARD_HAS_ROTATION 0 #define BOARD_HAS_IMU 1 -#define BOARD_HAS_BATTERY 1 +#define BOARD_HAS_BATTERY 0 #define BOARD_HAS_IO_EXPANDER 0 diff --git a/firmware/src/boards/waveshare_lcd_183/caps.cpp b/firmware/src/boards/waveshare_lcd_183/caps.cpp index 4cff9b482..1bfaedc00 100644 --- a/firmware/src/boards/waveshare_lcd_183/caps.cpp +++ b/firmware/src/boards/waveshare_lcd_183/caps.cpp @@ -7,7 +7,7 @@ static const BoardCaps caps = { .height = LCD_HEIGHT, .button_count = 1, .has_rotation = false, - .has_battery = true, + .has_battery = false, // "Without BAT" SKU — PMU populated, no cell. Set true if you add one. .has_imu = true, }; diff --git a/firmware/src/data.h b/firmware/src/data.h index f79447721..9db2868ee 100644 --- a/firmware/src/data.h +++ b/firmware/src/data.h @@ -7,6 +7,8 @@ struct UsageData { float weekly_pct; // 7-day window utilization (0-100) int weekly_reset_mins; // minutes until weekly resets char status[16]; // "allowed" or "limited" + char clock[9]; // "HH:MM:SS" host wall-clock (from daemon), or "" if absent + uint8_t day7[7]; // last 7 days usage, 0-100 normalized (index 6 = today) bool ok; // data parse succeeded bool valid; // false until first successful parse }; diff --git a/firmware/src/font_mono_11.c b/firmware/src/font_mono_11.c new file mode 100644 index 000000000..ec1ee8785 --- /dev/null +++ b/firmware/src/font_mono_11.c @@ -0,0 +1,756 @@ +/******************************************************************************* + * Size: 11 px + * Bpp: 4 + * Opts: --font assets/DejaVuSansMono.ttf --size 11 --bpp 4 --no-compress --format lvgl --lv-include lvgl.h -r 0x20-0x7E -r 0xB7 -r 0xDC -r 0xDF -r 0xE4 -r 0xF6 -r 0xFC -r 0x2022 -r 0x2026 -r 0x2722 -r 0x2733 -r 0x2736 -r 0x273B -r 0x273D -o firmware/src/font_mono_11.c + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl.h" +#endif + +#ifndef FONT_MONO_11 +#define FONT_MONO_11 1 +#endif + +#if FONT_MONO_11 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + + /* U+0021 "!" */ + 0x3d, 0x3d, 0x3d, 0x3d, 0x2c, 0x3, 0x14, 0x3d, + + /* U+0022 "\"" */ + 0x3c, 0x2d, 0x3c, 0x2d, 0x2a, 0x1b, + + /* U+0023 "#" */ + 0x0, 0x58, 0x2b, 0x0, 0x9, 0x46, 0x70, 0x4c, + 0xfc, 0xed, 0x70, 0x1c, 0xd, 0x0, 0x4, 0x91, + 0xc0, 0xc, 0xed, 0xde, 0xc0, 0xc, 0x19, 0x40, + 0x0, 0xc0, 0xd0, 0x0, + + /* U+0024 "$" */ + 0x0, 0x80, 0x3, 0xbd, 0xb4, 0xd2, 0x80, 0x1d, + 0x48, 0x0, 0x3b, 0xea, 0x20, 0x8, 0x5d, 0x20, + 0x82, 0xea, 0xce, 0xc4, 0x0, 0x80, 0x0, 0x4, + 0x0, + + /* U+0025 "%" */ + 0x2b, 0xa1, 0x0, 0xb, 0x14, 0x70, 0x0, 0xb1, + 0x48, 0x0, 0x2, 0xaa, 0x16, 0xa1, 0x0, 0x69, + 0x30, 0x4, 0x92, 0x5b, 0xa0, 0x0, 0xc, 0x6, + 0x60, 0x0, 0x7b, 0xb1, + + /* U+0026 "&" */ + 0x3, 0xdd, 0x80, 0x0, 0xa5, 0x0, 0x0, 0x8, + 0x70, 0x0, 0x0, 0x9e, 0x20, 0x0, 0x6a, 0x3d, + 0x6, 0x6a, 0x40, 0x7a, 0x84, 0x79, 0x0, 0xbc, + 0x0, 0x9b, 0xaa, 0xd3, + + /* U+0027 "'" */ + 0x2c, 0x2c, 0x2b, + + /* U+0028 "(" */ + 0x6, 0x70, 0xd0, 0x5a, 0x9, 0x70, 0xb5, 0xa, + 0x60, 0x78, 0x2, 0xd0, 0xa, 0x30, 0x24, + + /* U+0029 ")" */ + 0xc, 0x10, 0x6, 0x80, 0x1, 0xe0, 0x0, 0xd3, + 0x0, 0xb4, 0x0, 0xc4, 0x0, 0xe1, 0x3, 0xc0, + 0x9, 0x40, 0x6, 0x0, + + /* U+002A "*" */ + 0x0, 0xa, 0x0, 0x9, 0x5a, 0x86, 0x0, 0xaf, + 0x40, 0x9, 0x3a, 0x66, 0x0, 0x8, 0x0, + + /* U+002B "+" */ + 0x0, 0x16, 0x0, 0x0, 0x2, 0xc0, 0x0, 0x0, + 0x2c, 0x0, 0x7, 0xee, 0xfe, 0xe2, 0x0, 0x2c, + 0x0, 0x0, 0x2, 0xc0, 0x0, + + /* U+002C "," */ + 0x1, 0x4, 0xf0, 0x6c, 0xb, 0x30, + + /* U+002D "-" */ + 0x1d, 0xd9, + + /* U+002E "." */ + 0x39, 0x6f, + + /* U+002F "/" */ + 0x0, 0x0, 0x78, 0x0, 0x0, 0xe1, 0x0, 0x6, + 0x90, 0x0, 0xd, 0x20, 0x0, 0x5a, 0x0, 0x0, + 0xc3, 0x0, 0x4, 0xb0, 0x0, 0xc, 0x40, 0x0, + 0x3c, 0x0, 0x0, + + /* U+0030 "0" */ + 0x3, 0xde, 0xa0, 0xd, 0x40, 0xa7, 0x2e, 0x0, + 0x5c, 0x3d, 0x4e, 0x3d, 0x3d, 0x2, 0x3d, 0x2f, + 0x0, 0x5c, 0xd, 0x40, 0xb7, 0x3, 0xde, 0xa0, + + /* U+0031 "1" */ + 0x7d, 0xf3, 0x3, 0x2d, 0x30, 0x0, 0xd3, 0x0, + 0xd, 0x30, 0x0, 0xd3, 0x0, 0xd, 0x30, 0x0, + 0xd3, 0x7, 0xef, 0xec, + + /* U+0032 "2" */ + 0x1b, 0xee, 0x90, 0x15, 0x0, 0xb7, 0x0, 0x0, + 0x88, 0x0, 0x0, 0xd3, 0x0, 0xb, 0x70, 0x0, + 0xa8, 0x0, 0x9, 0x90, 0x0, 0x2f, 0xee, 0xe9, + + /* U+0033 "3" */ + 0xc, 0xee, 0xa0, 0x2, 0x0, 0xa7, 0x0, 0x0, + 0xb8, 0x0, 0xbf, 0xb0, 0x0, 0x0, 0xa5, 0x0, + 0x0, 0x5b, 0x12, 0x0, 0xa9, 0x2c, 0xee, 0xa1, + + /* U+0034 "4" */ + 0x0, 0x8, 0xf0, 0x0, 0x3, 0xaf, 0x0, 0x0, + 0xc2, 0xf0, 0x0, 0x86, 0xf, 0x0, 0x2c, 0x0, + 0xf0, 0x6, 0xed, 0xdf, 0xd1, 0x0, 0x0, 0xf0, + 0x0, 0x0, 0xf, 0x0, + + /* U+0035 "5" */ + 0xe, 0xee, 0xe2, 0xe, 0x10, 0x0, 0xe, 0x10, + 0x0, 0xe, 0xdd, 0x80, 0x1, 0x1, 0xc7, 0x0, + 0x0, 0x6a, 0x11, 0x0, 0xb8, 0x2d, 0xee, 0x90, + + /* U+0036 "6" */ + 0x1, 0xbe, 0xe3, 0xb, 0x80, 0x1, 0x1e, 0x0, + 0x0, 0x3c, 0x9d, 0xa1, 0x4f, 0x40, 0x7a, 0x2f, + 0x0, 0x3d, 0xe, 0x30, 0x6b, 0x3, 0xcd, 0xc2, + + /* U+0037 "7" */ + 0x3e, 0xee, 0xfb, 0x0, 0x0, 0xa6, 0x0, 0x1, + 0xe0, 0x0, 0x6, 0xa0, 0x0, 0xd, 0x40, 0x0, + 0x3d, 0x0, 0x0, 0x97, 0x0, 0x0, 0xf1, 0x0, + + /* U+0038 "8" */ + 0x5, 0xdd, 0xc2, 0xf, 0x10, 0x7a, 0xf, 0x20, + 0x88, 0x4, 0xee, 0xc0, 0xc, 0x20, 0x89, 0x3d, + 0x0, 0x3e, 0x2f, 0x20, 0x7b, 0x6, 0xdd, 0xc2, + + /* U+0039 "9" */ + 0x6, 0xdd, 0x90, 0x2e, 0x10, 0x97, 0x4c, 0x0, + 0x5b, 0x1e, 0x10, 0xad, 0x5, 0xcc, 0x7d, 0x0, + 0x0, 0x5b, 0x2, 0x1, 0xd5, 0x9, 0xee, 0x70, + + /* U+003A ":" */ + 0x39, 0x6f, 0x0, 0x0, 0x39, 0x6f, + + /* U+003B ";" */ + 0x6f, 0x3, 0x90, 0x0, 0x0, 0x10, 0x4f, 0x6, + 0xc0, 0xb3, 0x0, + + /* U+003C "<" */ + 0x0, 0x0, 0x5b, 0x20, 0x39, 0xd9, 0x30, 0x7e, + 0x50, 0x0, 0x1, 0x7d, 0xa4, 0x0, 0x0, 0x3, + 0xae, 0x10, 0x0, 0x0, 0x0, + + /* U+003D "=" */ + 0x7e, 0xee, 0xee, 0x20, 0x0, 0x0, 0x0, 0x7e, + 0xee, 0xee, 0x20, + + /* U+003E ">" */ + 0x79, 0x30, 0x0, 0x0, 0x5b, 0xc6, 0x10, 0x0, + 0x1, 0x9f, 0x20, 0x17, 0xcb, 0x50, 0x6d, 0x71, + 0x0, 0x1, 0x0, 0x0, 0x0, + + /* U+003F "?" */ + 0x6d, 0xeb, 0x14, 0x0, 0xa8, 0x0, 0xb, 0x60, + 0x9, 0xa0, 0x3, 0xc0, 0x0, 0x49, 0x0, 0x2, + 0x30, 0x0, 0x6b, 0x0, + + /* U+0040 "@" */ + 0x1, 0x9c, 0xb4, 0x1, 0xc4, 0x0, 0xb1, 0x86, + 0x1a, 0xbb, 0x4c, 0x19, 0x50, 0xb5, 0xd0, 0xb1, + 0x7, 0x5c, 0x18, 0x40, 0xa5, 0x77, 0x19, 0xaa, + 0x40, 0xc6, 0x0, 0x0, 0x0, 0x8c, 0xc5, 0x0, + + /* U+0041 "A" */ + 0x0, 0x8f, 0x10, 0x0, 0xc, 0xc6, 0x0, 0x1, + 0xe4, 0xb0, 0x0, 0x69, 0xf, 0x0, 0xb, 0x50, + 0xb5, 0x0, 0xfd, 0xde, 0xa0, 0x5b, 0x0, 0x2f, + 0xa, 0x70, 0x0, 0xd4, + + /* U+0042 "B" */ + 0x1f, 0xdd, 0xc3, 0x1, 0xf0, 0x6, 0xb0, 0x1f, + 0x0, 0x7b, 0x1, 0xfd, 0xee, 0x20, 0x1f, 0x0, + 0x5c, 0x1, 0xf0, 0x0, 0xf1, 0x1f, 0x0, 0x4e, + 0x1, 0xfe, 0xdc, 0x40, + + /* U+0043 "C" */ + 0x0, 0xae, 0xe8, 0xa, 0x90, 0x3, 0xf, 0x10, + 0x0, 0x3e, 0x0, 0x0, 0x3e, 0x0, 0x0, 0xf, + 0x10, 0x0, 0xa, 0x90, 0x3, 0x1, 0xae, 0xe8, + + /* U+0044 "D" */ + 0x4f, 0xdd, 0x60, 0x4d, 0x1, 0xc6, 0x4d, 0x0, + 0x5c, 0x4d, 0x0, 0x3e, 0x4d, 0x0, 0x3e, 0x4d, + 0x0, 0x5c, 0x4d, 0x1, 0xc6, 0x4f, 0xed, 0x60, + + /* U+0045 "E" */ + 0xfe, 0xee, 0xbf, 0x20, 0x0, 0xf2, 0x0, 0xf, + 0xee, 0xe9, 0xf2, 0x0, 0xf, 0x20, 0x0, 0xf2, + 0x0, 0xf, 0xee, 0xed, + + /* U+0046 "F" */ + 0xce, 0xee, 0xdc, 0x50, 0x0, 0xc5, 0x0, 0xc, + 0xee, 0xe8, 0xc5, 0x0, 0xc, 0x50, 0x0, 0xc5, + 0x0, 0xc, 0x50, 0x0, + + /* U+0047 "G" */ + 0x2, 0xbe, 0xd6, 0xc, 0x60, 0x4, 0x3e, 0x0, + 0x0, 0x6b, 0x0, 0x0, 0x6b, 0x3, 0xee, 0x3d, + 0x0, 0x1f, 0xd, 0x60, 0x2f, 0x2, 0xbe, 0xd7, + + /* U+0048 "H" */ + 0x4d, 0x0, 0x3e, 0x4d, 0x0, 0x3e, 0x4d, 0x0, + 0x3e, 0x4f, 0xee, 0xee, 0x4d, 0x0, 0x3e, 0x4d, + 0x0, 0x3e, 0x4d, 0x0, 0x3e, 0x4d, 0x0, 0x3e, + + /* U+0049 "I" */ + 0xde, 0xfe, 0x70, 0x3d, 0x0, 0x3, 0xd0, 0x0, + 0x3d, 0x0, 0x3, 0xd0, 0x0, 0x3d, 0x0, 0x3, + 0xd0, 0xd, 0xef, 0xe7, + + /* U+004A "J" */ + 0x0, 0xee, 0xf2, 0x0, 0x0, 0xf2, 0x0, 0x0, + 0xf2, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf2, 0x0, + 0x0, 0xf1, 0x32, 0x3, 0xf0, 0x4d, 0xed, 0x50, + + /* U+004B "K" */ + 0x4d, 0x0, 0x4d, 0x14, 0xd0, 0x3d, 0x20, 0x4d, + 0x3d, 0x20, 0x4, 0xee, 0x90, 0x0, 0x4f, 0x4e, + 0x30, 0x4, 0xd0, 0x5d, 0x0, 0x4d, 0x0, 0xb8, + 0x4, 0xd0, 0x1, 0xf3, + + /* U+004C "L" */ + 0xd4, 0x0, 0x0, 0xd4, 0x0, 0x0, 0xd4, 0x0, + 0x0, 0xd4, 0x0, 0x0, 0xd4, 0x0, 0x0, 0xd4, + 0x0, 0x0, 0xd4, 0x0, 0x0, 0xde, 0xee, 0xe1, + + /* U+004D "M" */ + 0x8f, 0x10, 0x7f, 0x28, 0xd6, 0xc, 0xe2, 0x88, + 0xb2, 0x9d, 0x28, 0x7a, 0x94, 0xd2, 0x87, 0x5e, + 0xd, 0x28, 0x70, 0x10, 0xd2, 0x87, 0x0, 0xd, + 0x28, 0x70, 0x0, 0xd2, + + /* U+004E "N" */ + 0x4f, 0x50, 0x2e, 0x4e, 0xb0, 0x2e, 0x4c, 0xc2, + 0x2e, 0x4c, 0x58, 0x2e, 0x4c, 0xd, 0x3e, 0x4c, + 0x8, 0x8e, 0x4c, 0x2, 0xee, 0x4c, 0x0, 0xbe, + + /* U+004F "O" */ + 0x3, 0xdd, 0xa0, 0xe, 0x30, 0x99, 0x3e, 0x0, + 0x4d, 0x5c, 0x0, 0x2f, 0x5c, 0x0, 0x2f, 0x3e, + 0x0, 0x4d, 0xe, 0x40, 0x99, 0x3, 0xdd, 0xa0, + + /* U+0050 "P" */ + 0xfe, 0xdd, 0x40, 0xf2, 0x5, 0xe0, 0xf2, 0x0, + 0xf1, 0xf2, 0x6, 0xe0, 0xfe, 0xec, 0x30, 0xf2, + 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf2, 0x0, 0x0, + + /* U+0051 "Q" */ + 0x3, 0xdd, 0xa0, 0xe, 0x40, 0xa9, 0x3e, 0x0, + 0x4d, 0x5c, 0x0, 0x2f, 0x5c, 0x0, 0x2f, 0x3e, + 0x0, 0x4d, 0xe, 0x30, 0x99, 0x3, 0xde, 0xd1, + 0x0, 0x1, 0xd4, 0x0, 0x0, 0x10, + + /* U+0052 "R" */ + 0x3f, 0xdd, 0xa1, 0x3, 0xd0, 0xb, 0x80, 0x3d, + 0x0, 0x7b, 0x3, 0xd0, 0xb, 0x50, 0x3f, 0xef, + 0x90, 0x3, 0xd0, 0x2e, 0x50, 0x3d, 0x0, 0x5d, + 0x3, 0xd0, 0x0, 0xc5, + + /* U+0053 "S" */ + 0x5, 0xdd, 0xd4, 0x1e, 0x10, 0x12, 0x3e, 0x0, + 0x0, 0xb, 0xd9, 0x40, 0x0, 0x37, 0xd7, 0x0, + 0x0, 0x3d, 0x14, 0x0, 0x6b, 0x1b, 0xed, 0xb2, + + /* U+0054 "T" */ + 0xae, 0xef, 0xee, 0x50, 0x3, 0xd0, 0x0, 0x0, + 0x3d, 0x0, 0x0, 0x3, 0xd0, 0x0, 0x0, 0x3d, + 0x0, 0x0, 0x3, 0xd0, 0x0, 0x0, 0x3d, 0x0, + 0x0, 0x3, 0xd0, 0x0, + + /* U+0055 "U" */ + 0x3e, 0x0, 0x4d, 0x3e, 0x0, 0x4d, 0x3e, 0x0, + 0x4d, 0x3e, 0x0, 0x4d, 0x3e, 0x0, 0x4d, 0x2e, + 0x0, 0x4c, 0xe, 0x20, 0x7a, 0x5, 0xdd, 0xb1, + + /* U+0056 "V" */ + 0x88, 0x0, 0xe, 0x24, 0xd0, 0x3, 0xd0, 0xe, + 0x10, 0x79, 0x0, 0xa6, 0xc, 0x40, 0x5, 0xa0, + 0xf0, 0x0, 0x1e, 0x4b, 0x0, 0x0, 0xcc, 0x60, + 0x0, 0x7, 0xf1, 0x0, + + /* U+0057 "W" */ + 0xe1, 0x0, 0x8, 0x8c, 0x30, 0x0, 0x96, 0xa5, + 0x5f, 0xb, 0x37, 0x79, 0xc2, 0xd1, 0x59, 0xb6, + 0x6e, 0x2, 0xbb, 0x2b, 0xc0, 0xf, 0x80, 0xea, + 0x0, 0xd5, 0xb, 0x70, + + /* U+0058 "X" */ + 0x3d, 0x0, 0x2e, 0x10, 0x98, 0xb, 0x60, 0x1, + 0xe6, 0xc0, 0x0, 0x6, 0xf2, 0x0, 0x0, 0xae, + 0x60, 0x0, 0x5c, 0x1e, 0x10, 0xe, 0x30, 0x79, + 0x9, 0x90, 0x0, 0xe3, + + /* U+0059 "Y" */ + 0x8a, 0x0, 0x1e, 0x20, 0xe3, 0x9, 0x80, 0x5, + 0xb2, 0xe0, 0x0, 0xc, 0xd5, 0x0, 0x0, 0x4e, + 0x0, 0x0, 0x3, 0xd0, 0x0, 0x0, 0x3d, 0x0, + 0x0, 0x3, 0xd0, 0x0, + + /* U+005A "Z" */ + 0xe, 0xee, 0xef, 0x20, 0x0, 0x7, 0xb0, 0x0, + 0x2, 0xe1, 0x0, 0x0, 0xc5, 0x0, 0x0, 0x6b, + 0x0, 0x0, 0x1e, 0x10, 0x0, 0xb, 0x50, 0x0, + 0x2, 0xfe, 0xee, 0xe4, + + /* U+005B "[" */ + 0x8d, 0x98, 0x70, 0x87, 0x8, 0x70, 0x87, 0x8, + 0x70, 0x87, 0x8, 0x70, 0x87, 0x7, 0xc8, + + /* U+005C "\\" */ + 0x3c, 0x0, 0x0, 0xc, 0x40, 0x0, 0x4, 0xb0, + 0x0, 0x0, 0xc3, 0x0, 0x0, 0x5a, 0x0, 0x0, + 0xd, 0x20, 0x0, 0x6, 0x90, 0x0, 0x0, 0xe1, + 0x0, 0x0, 0x78, + + /* U+005D "]" */ + 0x1c, 0xf2, 0x0, 0xd2, 0x0, 0xd2, 0x0, 0xd2, + 0x0, 0xd2, 0x0, 0xd2, 0x0, 0xd2, 0x0, 0xd2, + 0x0, 0xd2, 0x1b, 0xd1, + + /* U+005E "^" */ + 0x0, 0x9f, 0x30, 0x0, 0x6b, 0x3d, 0x10, 0x3b, + 0x0, 0x3b, 0x0, + + /* U+005F "_" */ + 0x66, 0x66, 0x66, 0x40, + + /* U+0060 "`" */ + 0x2c, 0x10, 0x3, 0xa0, + + /* U+0061 "a" */ + 0x9, 0xdc, 0xa1, 0x1, 0x0, 0x78, 0x5, 0xbc, + 0xda, 0x2e, 0x10, 0x5b, 0x3c, 0x0, 0xab, 0x9, + 0xba, 0x9b, + + /* U+0062 "b" */ + 0xf0, 0x0, 0xf, 0x0, 0x0, 0xf9, 0xcc, 0x2f, + 0x60, 0x6a, 0xf1, 0x1, 0xef, 0x10, 0x1e, 0xf6, + 0x6, 0xaf, 0x9d, 0xc2, + + /* U+0063 "c" */ + 0x9, 0xdd, 0x79, 0x90, 0x2, 0xe2, 0x0, 0xe, + 0x20, 0x0, 0x99, 0x0, 0x20, 0x9d, 0xd7, + + /* U+0064 "d" */ + 0x0, 0x0, 0x69, 0x0, 0x0, 0x69, 0x5, 0xdc, + 0xa9, 0x1e, 0x10, 0xc9, 0x4c, 0x0, 0x79, 0x4b, + 0x0, 0x69, 0x1e, 0x0, 0xa9, 0x5, 0xca, 0xb9, + + /* U+0065 "e" */ + 0x3, 0xcc, 0xc2, 0xd, 0x10, 0x3c, 0x4e, 0xcc, + 0xcd, 0x4c, 0x0, 0x0, 0xe, 0x30, 0x3, 0x3, + 0xcd, 0xd7, + + /* U+0066 "f" */ + 0x0, 0xcc, 0x80, 0x4a, 0x0, 0xbd, 0xec, 0x80, + 0x5a, 0x0, 0x5, 0xa0, 0x0, 0x5a, 0x0, 0x5, + 0xa0, 0x0, 0x5a, 0x0, + + /* U+0067 "g" */ + 0x5, 0xdc, 0xa9, 0x1e, 0x10, 0xb9, 0x4c, 0x0, + 0x79, 0x4c, 0x0, 0x79, 0x1e, 0x10, 0xb9, 0x5, + 0xdc, 0xa9, 0x0, 0x0, 0x96, 0x8, 0xcc, 0x90, + + /* U+0068 "h" */ + 0xf0, 0x0, 0xf, 0x0, 0x0, 0xf7, 0xdd, 0x2f, + 0x50, 0x88, 0xf0, 0x5, 0xaf, 0x0, 0x5a, 0xf0, + 0x5, 0xaf, 0x0, 0x5a, + + /* U+0069 "i" */ + 0x0, 0x1e, 0x0, 0x0, 0x3, 0x0, 0x7, 0xce, + 0x0, 0x0, 0x1e, 0x0, 0x0, 0x1e, 0x0, 0x0, + 0x1e, 0x0, 0x0, 0x1e, 0x0, 0xc, 0xcf, 0xca, + + /* U+006A "j" */ + 0x0, 0xc3, 0x0, 0x20, 0x5c, 0xf3, 0x0, 0xc3, + 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc3, 0x0, 0xc3, + 0x0, 0xe2, 0xdd, 0x90, + + /* U+006B "k" */ + 0xb4, 0x0, 0x0, 0xb4, 0x0, 0x0, 0xb4, 0xa, + 0x80, 0xb4, 0xa8, 0x0, 0xbe, 0xe0, 0x0, 0xb7, + 0x89, 0x0, 0xb4, 0xc, 0x50, 0xb4, 0x2, 0xe2, + + /* U+006C "l" */ + 0x1c, 0xe7, 0x0, 0x0, 0x97, 0x0, 0x0, 0x97, + 0x0, 0x0, 0x97, 0x0, 0x0, 0x97, 0x0, 0x0, + 0x87, 0x0, 0x0, 0x78, 0x0, 0x0, 0x1c, 0xd7, + + /* U+006D "m" */ + 0x6c, 0xd9, 0xca, 0x6, 0x93, 0xd0, 0xe0, 0x67, + 0x1c, 0xd, 0x16, 0x71, 0xc0, 0xd1, 0x67, 0x1c, + 0xd, 0x16, 0x71, 0xc0, 0xd1, + + /* U+006E "n" */ + 0xf8, 0xac, 0x2f, 0x40, 0x78, 0xf0, 0x5, 0xaf, + 0x0, 0x5a, 0xf0, 0x5, 0xaf, 0x0, 0x5a, + + /* U+006F "o" */ + 0x4, 0xdd, 0xb1, 0xe, 0x20, 0x89, 0x3d, 0x0, + 0x3d, 0x3d, 0x0, 0x3d, 0xe, 0x20, 0x89, 0x4, + 0xdd, 0xb1, + + /* U+0070 "p" */ + 0xf9, 0xab, 0x1f, 0x40, 0x5a, 0xf0, 0x1, 0xef, + 0x10, 0x2e, 0xf6, 0x7, 0xaf, 0x8d, 0xc2, 0xf0, + 0x0, 0xf, 0x0, 0x0, + + /* U+0071 "q" */ + 0x4, 0xdc, 0xaa, 0xe, 0x20, 0xba, 0x3d, 0x0, + 0x6a, 0x3d, 0x0, 0x6a, 0xe, 0x20, 0xaa, 0x5, + 0xdc, 0xaa, 0x0, 0x0, 0x5a, 0x0, 0x0, 0x5a, + + /* U+0072 "r" */ + 0x1f, 0x7c, 0xd2, 0x1f, 0x60, 0x0, 0x1f, 0x0, + 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, + 0x0, 0x0, + + /* U+0073 "s" */ + 0x4c, 0xcc, 0x2c, 0x40, 0x0, 0x8c, 0x73, 0x0, + 0x26, 0xe5, 0x20, 0x9, 0x7a, 0xdd, 0xb1, + + /* U+0074 "t" */ + 0x0, 0x52, 0x0, 0x0, 0xb4, 0x0, 0x3c, 0xed, + 0xc6, 0x0, 0xb4, 0x0, 0x0, 0xb4, 0x0, 0x0, + 0xb4, 0x0, 0x0, 0xa6, 0x0, 0x0, 0x3d, 0xc6, + + /* U+0075 "u" */ + 0xf0, 0x5, 0xaf, 0x0, 0x5a, 0xf0, 0x5, 0xaf, + 0x0, 0x5a, 0xd2, 0x9, 0xa5, 0xda, 0x9a, + + /* U+0076 "v" */ + 0x4b, 0x0, 0x1e, 0x0, 0xe1, 0x7, 0x80, 0x9, + 0x60, 0xc3, 0x0, 0x3c, 0x2d, 0x0, 0x0, 0xda, + 0x70, 0x0, 0x8, 0xf2, 0x0, + + /* U+0077 "w" */ + 0xe1, 0x0, 0x7, 0x8a, 0x40, 0x30, 0xa4, 0x68, + 0x5e, 0xe, 0x2, 0xb9, 0x85, 0xc0, 0xe, 0xa2, + 0xd9, 0x0, 0xb8, 0xe, 0x50, + + /* U+0078 "x" */ + 0x1d, 0x20, 0x79, 0x0, 0x4c, 0x3d, 0x0, 0x0, + 0x8f, 0x20, 0x0, 0xb, 0xe5, 0x0, 0x7, 0xa1, + 0xd2, 0x3, 0xd0, 0x4, 0xc0, + + /* U+0079 "y" */ + 0x3c, 0x0, 0x1e, 0x0, 0xd3, 0x7, 0x90, 0x6, + 0x90, 0xd2, 0x0, 0xe, 0x4c, 0x0, 0x0, 0x9e, + 0x60, 0x0, 0x3, 0xf0, 0x0, 0x0, 0x79, 0x0, + 0x0, 0xdc, 0x10, 0x0, + + /* U+007A "z" */ + 0x9c, 0xce, 0x90, 0x1, 0xd2, 0x0, 0xc4, 0x0, + 0xa7, 0x0, 0x6b, 0x0, 0xe, 0xdc, 0xc7, + + /* U+007B "{" */ + 0x0, 0xac, 0x50, 0x1e, 0x0, 0x2, 0xd0, 0x0, + 0x4c, 0x0, 0xaf, 0x40, 0x0, 0x5b, 0x0, 0x2, + 0xd0, 0x0, 0x2d, 0x0, 0x1, 0xe0, 0x0, 0x7, + 0xc5, + + /* U+007C "|" */ + 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, 0x2c, + 0x2c, 0x2c, 0x16, + + /* U+007D "}" */ + 0x9d, 0x50, 0x0, 0x4b, 0x0, 0x3, 0xc0, 0x0, + 0x2e, 0x0, 0x0, 0xae, 0x50, 0x1e, 0x0, 0x3, + 0xc0, 0x0, 0x3c, 0x0, 0x5, 0xa0, 0x9, 0xb3, + 0x0, + + /* U+007E "~" */ + 0x2c, 0xd7, 0x26, 0x25, 0x10, 0x8d, 0x80, + + /* U+00B7 "·" */ + 0x39, 0x6f, + + /* U+00DC "Ü" */ + 0x4, 0xb2, 0xd0, 0x0, 0x10, 0x10, 0x3e, 0x0, + 0x4d, 0x3e, 0x0, 0x4d, 0x3e, 0x0, 0x4d, 0x3e, + 0x0, 0x4d, 0x3e, 0x0, 0x4d, 0x2e, 0x0, 0x4c, + 0xe, 0x20, 0x7a, 0x5, 0xdd, 0xb1, + + /* U+00DF "ß" */ + 0x5d, 0xcb, 0x0, 0xe2, 0x9, 0x60, 0xf0, 0x98, + 0x20, 0xf1, 0xe0, 0x0, 0xf0, 0xab, 0x10, 0xf0, + 0x5, 0xd0, 0xf0, 0x0, 0xe1, 0xf7, 0xdd, 0x80, + + /* U+00E4 "ä" */ + 0x4, 0xc3, 0xe0, 0x0, 0x0, 0x0, 0x9, 0xdc, + 0xa1, 0x1, 0x0, 0x78, 0x5, 0xbc, 0xda, 0x2e, + 0x10, 0x5b, 0x3c, 0x0, 0xab, 0x9, 0xba, 0x9b, + + /* U+00F6 "ö" */ + 0x4, 0xc3, 0xe0, 0x0, 0x0, 0x0, 0x4, 0xdd, + 0xb1, 0xe, 0x20, 0x89, 0x3d, 0x0, 0x3d, 0x3d, + 0x0, 0x3d, 0xe, 0x20, 0x89, 0x4, 0xdd, 0xb1, + + /* U+00FC "ü" */ + 0x4c, 0x3e, 0x0, 0x0, 0x0, 0xf0, 0x5, 0xaf, + 0x0, 0x5a, 0xf0, 0x5, 0xaf, 0x0, 0x5a, 0xd2, + 0x9, 0xa5, 0xda, 0x9a, + + /* U+2022 "•" */ + 0x0, 0x0, 0xd, 0xf7, 0x3f, 0xfd, 0xb, 0xf6, + + /* U+2026 "…" */ + 0x57, 0x39, 0x19, 0x19, 0xc6, 0xf2, 0xf3, + + /* U+2722 "✢" */ + 0x0, 0x2, 0x0, 0x0, 0x4, 0xe0, 0x0, 0x0, + 0x1b, 0x0, 0x8, 0xb6, 0xa8, 0xc3, 0x46, 0x18, + 0x37, 0x10, 0x3, 0xd0, 0x0, 0x0, 0x3c, 0x0, + 0x0, + + /* U+2733 "✳" */ + 0x0, 0x0, 0x0, 0x0, 0x11, 0x50, 0x10, 0x7, + 0x25, 0x71, 0x3, 0x3a, 0xd4, 0x30, 0x23, 0xac, + 0x42, 0x0, 0x72, 0x57, 0x10, 0x0, 0x15, 0x0, + 0x0, 0x0, 0x0, 0x0, + + /* U+2736 "✶" */ + 0x0, 0x2, 0x0, 0x0, 0x0, 0x80, 0x0, 0x28, + 0x7c, 0x77, 0x0, 0x1e, 0xfa, 0x0, 0x9, 0xbe, + 0xb5, 0x1, 0x0, 0x90, 0x10, 0x0, 0x4, 0x0, + 0x0, 0x0, 0x0, 0x0, + + /* U+273B "✻" */ + 0x0, 0x29, 0x0, 0x2, 0x25, 0xe0, 0x50, 0xaf, + 0x39, 0x9f, 0x40, 0x3a, 0xf6, 0x20, 0x6d, 0x8a, + 0xbc, 0x26, 0x73, 0xd1, 0xa2, 0x0, 0x4e, 0x0, + 0x0, 0x0, 0x0, 0x0, + + /* U+273D "✽" */ + 0x0, 0x49, 0x0, 0x3, 0x5a, 0xf4, 0x60, 0xbf, + 0x8c, 0xcf, 0x43, 0xab, 0xda, 0x70, 0xaf, 0xab, + 0xff, 0x27, 0xc9, 0xf7, 0xd2, 0x0, 0x8f, 0x10, + 0x0, 0x0, 0x0, 0x0 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 106, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 106, .box_w = 2, .box_h = 8, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 8, .adv_w = 106, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = 5}, + {.bitmap_index = 14, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 42, .adv_w = 106, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 67, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 95, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 123, .adv_w = 106, .box_w = 2, .box_h = 3, .ofs_x = 2, .ofs_y = 5}, + {.bitmap_index = 126, .adv_w = 106, .box_w = 3, .box_h = 10, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 141, .adv_w = 106, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 161, .adv_w = 106, .box_w = 6, .box_h = 5, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 176, .adv_w = 106, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 197, .adv_w = 106, .box_w = 3, .box_h = 4, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 203, .adv_w = 106, .box_w = 4, .box_h = 1, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 205, .adv_w = 106, .box_w = 2, .box_h = 2, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 207, .adv_w = 106, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 234, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 258, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 278, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 302, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 326, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 354, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 378, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 402, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 426, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 450, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 474, .adv_w = 106, .box_w = 2, .box_h = 6, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 480, .adv_w = 106, .box_w = 3, .box_h = 7, .ofs_x = 2, .ofs_y = -1}, + {.bitmap_index = 491, .adv_w = 106, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 512, .adv_w = 106, .box_w = 7, .box_h = 3, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 523, .adv_w = 106, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 544, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 564, .adv_w = 106, .box_w = 7, .box_h = 9, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 596, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 624, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 652, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 676, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 700, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 720, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 740, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 764, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 788, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 808, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 832, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 860, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 884, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 912, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 936, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 960, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 984, .adv_w = 106, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1014, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1042, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1066, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1094, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1118, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1146, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1174, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1202, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1230, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1258, .adv_w = 106, .box_w = 3, .box_h = 10, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 1273, .adv_w = 106, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1300, .adv_w = 106, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1320, .adv_w = 106, .box_w = 7, .box_h = 3, .ofs_x = 0, .ofs_y = 5}, + {.bitmap_index = 1331, .adv_w = 106, .box_w = 7, .box_h = 1, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 1335, .adv_w = 106, .box_w = 4, .box_h = 2, .ofs_x = 1, .ofs_y = 7}, + {.bitmap_index = 1339, .adv_w = 106, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1357, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1377, .adv_w = 106, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1392, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1416, .adv_w = 106, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1434, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1454, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1478, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1498, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1522, .adv_w = 106, .box_w = 4, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1542, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1566, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1590, .adv_w = 106, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1611, .adv_w = 106, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1626, .adv_w = 106, .box_w = 6, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1644, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1664, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1688, .adv_w = 106, .box_w = 6, .box_h = 6, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1706, .adv_w = 106, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1721, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1745, .adv_w = 106, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1760, .adv_w = 106, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1781, .adv_w = 106, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1802, .adv_w = 106, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1823, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1851, .adv_w = 106, .box_w = 5, .box_h = 6, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1866, .adv_w = 106, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1891, .adv_w = 106, .box_w = 2, .box_h = 11, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 1902, .adv_w = 106, .box_w = 5, .box_h = 10, .ofs_x = 1, .ofs_y = -2}, + {.bitmap_index = 1927, .adv_w = 106, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 1934, .adv_w = 106, .box_w = 2, .box_h = 2, .ofs_x = 2, .ofs_y = 3}, + {.bitmap_index = 1936, .adv_w = 106, .box_w = 6, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1966, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1990, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2014, .adv_w = 106, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2038, .adv_w = 106, .box_w = 5, .box_h = 8, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2058, .adv_w = 106, .box_w = 4, .box_h = 4, .ofs_x = 1, .ofs_y = 2}, + {.bitmap_index = 2066, .adv_w = 106, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2073, .adv_w = 106, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2098, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2126, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2154, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2182, .adv_w = 106, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = -1} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_1[] = { + 0x0, 0x25, 0x28, 0x2d, 0x3f, 0x45, 0x1f6b, 0x1f6f, + 0x266b, 0x267c, 0x267f, 0x2684, 0x2686 +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 95, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 183, .range_length = 9863, .glyph_id_start = 96, + .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 13, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 2, + .bpp = 4, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t font_mono_11 = { +#else +lv_font_t font_mono_11 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 13, /*The maximum line height required by the font*/ + .base_line = 3, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -1, + .underline_thickness = 0, +#endif + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if FONT_MONO_11*/ + diff --git a/firmware/src/font_mono_15.c b/firmware/src/font_mono_15.c new file mode 100644 index 000000000..b8f652664 --- /dev/null +++ b/firmware/src/font_mono_15.c @@ -0,0 +1,1026 @@ +/******************************************************************************* + * Size: 15 px + * Bpp: 4 + * Opts: --font assets/DejaVuSansMono.ttf --size 15 --bpp 4 --no-compress --format lvgl --lv-include lvgl.h -r 0x20-0x7E -r 0xB7 -r 0xDC -r 0xDF -r 0xE4 -r 0xF6 -r 0xFC -r 0x2022 -r 0x2026 -r 0x2722 -r 0x2733 -r 0x2736 -r 0x273B -r 0x273D -o firmware/src/font_mono_15.c + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl.h" +#endif + +#ifndef FONT_MONO_15 +#define FONT_MONO_15 1 +#endif + +#if FONT_MONO_15 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + + /* U+0021 "!" */ + 0x3f, 0x43, 0xf4, 0x3f, 0x43, 0xf4, 0x3f, 0x43, + 0xf3, 0x2f, 0x31, 0xf2, 0x0, 0x0, 0x0, 0x3f, + 0x43, 0xf4, + + /* U+0022 "\"" */ + 0x8c, 0xb, 0x98, 0xc0, 0xb9, 0x8c, 0xb, 0x98, + 0xc0, 0xb9, 0x24, 0x3, 0x30, + + /* U+0023 "#" */ + 0x0, 0x4, 0xe0, 0x4e, 0x0, 0x0, 0x7b, 0x7, + 0xb0, 0x0, 0xa, 0x80, 0xa8, 0x0, 0x0, 0xd5, + 0xd, 0x50, 0x2f, 0xff, 0xff, 0xff, 0xf0, 0x36, + 0xe3, 0x7e, 0x33, 0x0, 0x7b, 0x8, 0xa0, 0x0, + 0xb, 0x70, 0xb6, 0x0, 0xff, 0xff, 0xff, 0xff, + 0x22, 0x5f, 0x36, 0xf3, 0x30, 0x7, 0xb0, 0x7b, + 0x0, 0x0, 0xb7, 0xc, 0x60, 0x0, + + /* U+0024 "$" */ + 0x0, 0xa, 0x10, 0x0, 0x0, 0xa, 0x10, 0x0, + 0x5, 0xcf, 0xeb, 0x30, 0x4f, 0x5b, 0x46, 0x50, + 0x8c, 0xa, 0x10, 0x0, 0x7e, 0x1a, 0x10, 0x0, + 0xc, 0xff, 0x83, 0x0, 0x0, 0x3c, 0xcf, 0x70, + 0x0, 0xa, 0x17, 0xf0, 0x0, 0xa, 0x14, 0xf1, + 0x88, 0x4b, 0x4c, 0xc0, 0x3b, 0xef, 0xea, 0x10, + 0x0, 0xa, 0x10, 0x0, 0x0, 0xa, 0x10, 0x0, + 0x0, 0x5, 0x0, 0x0, + + /* U+0025 "%" */ + 0x9, 0xea, 0x10, 0x0, 0x7, 0xb2, 0x9a, 0x0, + 0x0, 0xb4, 0x1, 0xd0, 0x0, 0x9, 0x90, 0x6b, + 0x0, 0x11, 0x1c, 0xfd, 0x24, 0xac, 0x40, 0x2, + 0x7d, 0xa3, 0x0, 0x2a, 0xc6, 0x2a, 0xe9, 0x1, + 0x30, 0xa, 0x92, 0xb8, 0x0, 0x0, 0xd2, 0x4, + 0xb0, 0x0, 0xa, 0x81, 0xa8, 0x0, 0x0, 0x1c, + 0xfa, 0x0, + + /* U+0026 "&" */ + 0x0, 0x4d, 0xfd, 0x40, 0x0, 0x1f, 0x93, 0x64, + 0x0, 0x3, 0xf1, 0x0, 0x0, 0x0, 0x1f, 0x40, + 0x0, 0x0, 0x0, 0xbc, 0x0, 0x0, 0x0, 0x5f, + 0xf7, 0x0, 0x0, 0x1f, 0x56, 0xf2, 0x5, 0xb7, + 0xd0, 0xb, 0xc0, 0x7b, 0x8c, 0x0, 0x1e, 0x89, + 0x86, 0xf1, 0x0, 0x5f, 0xf2, 0xd, 0xb2, 0x5, + 0xfe, 0x0, 0x1a, 0xfe, 0xb5, 0xe9, + + /* U+0027 "'" */ + 0x2f, 0x22, 0xf2, 0x2f, 0x22, 0xf2, 0x5, 0x0, + + /* U+0028 "(" */ + 0x0, 0xe3, 0x7, 0xc0, 0xe, 0x60, 0x4f, 0x10, + 0x8d, 0x0, 0xba, 0x0, 0xd9, 0x0, 0xd9, 0x0, + 0xca, 0x0, 0xac, 0x0, 0x6f, 0x0, 0x1f, 0x30, + 0xb, 0x90, 0x3, 0xf1, 0x0, 0x62, + + /* U+0029 ")" */ + 0x3e, 0x0, 0xc, 0x70, 0x6, 0xe0, 0x1, 0xf4, + 0x0, 0xd8, 0x0, 0xac, 0x0, 0x9d, 0x0, 0x8e, + 0x0, 0x9c, 0x0, 0xba, 0x0, 0xe6, 0x3, 0xf1, + 0x8, 0xb0, 0xf, 0x30, 0x26, 0x0, + + /* U+002A "*" */ + 0x0, 0xd, 0x0, 0x4, 0x20, 0xd0, 0x14, 0x4d, + 0x6d, 0x6d, 0x40, 0x9, 0xfa, 0x0, 0x8, 0xbe, + 0xb9, 0x18, 0x60, 0xd0, 0x68, 0x0, 0xd, 0x0, + 0x0, 0x0, 0x40, 0x0, + + /* U+002B "+" */ + 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x1f, 0x20, + 0x0, 0x0, 0x1, 0xf2, 0x0, 0x0, 0x11, 0x2f, + 0x21, 0x10, 0x5f, 0xff, 0xff, 0xff, 0x61, 0x44, + 0x5f, 0x54, 0x41, 0x0, 0x1, 0xf2, 0x0, 0x0, + 0x0, 0x1f, 0x20, 0x0, 0x0, 0x1, 0xf2, 0x0, + 0x0, + + /* U+002C "," */ + 0x3, 0xa5, 0x5, 0xf8, 0x7, 0xf4, 0xb, 0xc0, + 0xe, 0x50, + + /* U+002D "-" */ + 0x1, 0x11, 0x6, 0xff, 0xf6, 0x13, 0x33, 0x10, + + /* U+002E "." */ + 0x26, 0x26, 0xf6, 0x6f, 0x60, + + /* U+002F "/" */ + 0x0, 0x0, 0x0, 0xba, 0x0, 0x0, 0x2, 0xf3, + 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0, 0x1f, 0x50, + 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0xe7, 0x0, + 0x0, 0x5, 0xf1, 0x0, 0x0, 0xc, 0x90, 0x0, + 0x0, 0x4f, 0x20, 0x0, 0x0, 0xbb, 0x0, 0x0, + 0x2, 0xf3, 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0, + 0x1f, 0x50, 0x0, 0x0, + + /* U+0030 "0" */ + 0x0, 0x4d, 0xfd, 0x40, 0x0, 0x2f, 0xb4, 0xaf, + 0x20, 0x8, 0xe0, 0x0, 0xe9, 0x0, 0xda, 0x0, + 0xa, 0xd0, 0xf, 0x80, 0x0, 0x8f, 0x0, 0xf7, + 0x4f, 0x57, 0xf0, 0xf, 0x74, 0xf4, 0x7f, 0x0, + 0xf8, 0x0, 0x8, 0xf0, 0xd, 0xa0, 0x0, 0xad, + 0x0, 0x8e, 0x0, 0xe, 0x90, 0x2, 0xfb, 0x4a, + 0xf2, 0x0, 0x4, 0xdf, 0xd4, 0x0, + + /* U+0031 "1" */ + 0x19, 0xdf, 0xc0, 0x0, 0x3e, 0xad, 0xc0, 0x0, + 0x0, 0xb, 0xc0, 0x0, 0x0, 0xb, 0xc0, 0x0, + 0x0, 0xb, 0xc0, 0x0, 0x0, 0xb, 0xc0, 0x0, + 0x0, 0xb, 0xc0, 0x0, 0x0, 0xb, 0xc0, 0x0, + 0x0, 0xb, 0xc0, 0x0, 0x0, 0xb, 0xc0, 0x0, + 0x5, 0x5c, 0xd5, 0x50, 0xf, 0xff, 0xff, 0xf0, + + /* U+0032 "2" */ + 0x4b, 0xee, 0xb3, 0xc, 0xb6, 0x6c, 0xf2, 0x20, + 0x0, 0x1f, 0x80, 0x0, 0x0, 0xda, 0x0, 0x0, + 0x1f, 0x70, 0x0, 0x9, 0xe1, 0x0, 0x4, 0xf4, + 0x0, 0x3, 0xf7, 0x0, 0x1, 0xea, 0x0, 0x0, + 0xdb, 0x0, 0x0, 0xbf, 0x65, 0x55, 0x3e, 0xff, + 0xff, 0xfc, + + /* U+0033 "3" */ + 0x6c, 0xef, 0xc3, 0x9, 0x96, 0x6b, 0xf2, 0x0, + 0x0, 0xe, 0x80, 0x0, 0x0, 0xe9, 0x0, 0x1, + 0x8f, 0x30, 0x1f, 0xff, 0x40, 0x0, 0x34, 0xae, + 0x30, 0x0, 0x0, 0xcb, 0x0, 0x0, 0x9, 0xd0, + 0x0, 0x0, 0xdc, 0xe9, 0x66, 0xcf, 0x59, 0xdf, + 0xfc, 0x40, + + /* U+0034 "4" */ + 0x0, 0x0, 0x2f, 0xd0, 0x0, 0x0, 0xb, 0xed, + 0x0, 0x0, 0x4, 0xd9, 0xd0, 0x0, 0x0, 0xd5, + 0x9d, 0x0, 0x0, 0x6c, 0x9, 0xd0, 0x0, 0xe, + 0x30, 0x9d, 0x0, 0x8, 0xb0, 0x9, 0xd0, 0x1, + 0xf3, 0x0, 0xad, 0x0, 0x4f, 0xff, 0xff, 0xff, + 0x50, 0x33, 0x33, 0xbe, 0x31, 0x0, 0x0, 0x9, + 0xd0, 0x0, 0x0, 0x0, 0x9d, 0x0, + + /* U+0035 "5" */ + 0x7f, 0xff, 0xff, 0x7, 0xe5, 0x55, 0x50, 0x7d, + 0x0, 0x0, 0x7, 0xd0, 0x0, 0x0, 0x7f, 0xff, + 0xd4, 0x5, 0x74, 0x6d, 0xf2, 0x0, 0x0, 0x1f, + 0x90, 0x0, 0x0, 0xbc, 0x0, 0x0, 0xb, 0xc0, + 0x0, 0x1, 0xf9, 0xd8, 0x67, 0xef, 0x29, 0xef, + 0xfb, 0x30, + + /* U+0036 "6" */ + 0x0, 0x1a, 0xef, 0xc2, 0x0, 0xd, 0xd6, 0x59, + 0x30, 0x7, 0xf1, 0x0, 0x0, 0x0, 0xc9, 0x0, + 0x0, 0x0, 0xe, 0x7a, 0xfe, 0x80, 0x0, 0xfe, + 0xa4, 0x7f, 0x60, 0xf, 0xd0, 0x0, 0xad, 0x0, + 0xfa, 0x0, 0x7, 0xf0, 0xd, 0xa0, 0x0, 0x7f, + 0x0, 0x9e, 0x0, 0xa, 0xd0, 0x2, 0xfa, 0x48, + 0xf6, 0x0, 0x4, 0xcf, 0xe7, 0x0, + + /* U+0037 "7" */ + 0xff, 0xff, 0xff, 0xe5, 0x55, 0x55, 0xe9, 0x0, + 0x0, 0x2f, 0x40, 0x0, 0x8, 0xe0, 0x0, 0x0, + 0xd9, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x9, 0xe0, + 0x0, 0x0, 0xe8, 0x0, 0x0, 0x4f, 0x30, 0x0, + 0xa, 0xd0, 0x0, 0x0, 0xf8, 0x0, 0x0, 0x5f, + 0x20, 0x0, + + /* U+0038 "8" */ + 0x0, 0x6d, 0xfd, 0x70, 0x0, 0x5f, 0x84, 0x8f, + 0x60, 0xb, 0xc0, 0x0, 0xcb, 0x0, 0xbb, 0x0, + 0xb, 0xb0, 0x5, 0xf5, 0x14, 0xf5, 0x0, 0x6, + 0xff, 0xf6, 0x0, 0x4, 0xf7, 0x47, 0xf5, 0x0, + 0xda, 0x0, 0x9, 0xe0, 0xf, 0x70, 0x0, 0x7f, + 0x0, 0xea, 0x0, 0xa, 0xe0, 0x8, 0xf8, 0x48, + 0xf8, 0x0, 0x7, 0xdf, 0xd7, 0x0, + + /* U+0039 "9" */ + 0x0, 0x7e, 0xfc, 0x40, 0x0, 0x6f, 0x84, 0xbf, + 0x20, 0xd, 0xa0, 0x0, 0xe8, 0x0, 0xf7, 0x0, + 0xa, 0xc0, 0xf, 0x60, 0x0, 0xaf, 0x0, 0xe9, + 0x0, 0xd, 0xf0, 0x8, 0xf4, 0x17, 0xff, 0x0, + 0xb, 0xff, 0xd8, 0xe0, 0x0, 0x1, 0x20, 0x9b, + 0x0, 0x0, 0x0, 0x1f, 0x60, 0x3, 0x86, 0x7d, + 0xd0, 0x0, 0x2c, 0xfe, 0xa1, 0x0, + + /* U+003A ":" */ + 0x26, 0x26, 0xf6, 0x6f, 0x60, 0x0, 0x0, 0x0, + 0x0, 0x26, 0x26, 0xf6, 0x6f, 0x60, + + /* U+003B ";" */ + 0x2, 0x62, 0x6, 0xf6, 0x6, 0xf6, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x3, 0xa5, 0x5, 0xf8, + 0x7, 0xf4, 0xb, 0xc0, 0xe, 0x50, + + /* U+003C "<" */ + 0x0, 0x0, 0x0, 0x29, 0x50, 0x0, 0x5, 0xbf, + 0xd3, 0x1, 0x7e, 0xfa, 0x30, 0x4, 0xfd, 0x61, + 0x0, 0x0, 0x3e, 0xe7, 0x10, 0x0, 0x0, 0x6, + 0xdf, 0xb4, 0x0, 0x0, 0x0, 0x3a, 0xfe, 0x30, + 0x0, 0x0, 0x1, 0x85, + + /* U+003D "=" */ + 0x1, 0x11, 0x11, 0x11, 0x5, 0xff, 0xff, 0xff, + 0xf6, 0x14, 0x44, 0x44, 0x44, 0x10, 0x11, 0x11, + 0x11, 0x10, 0x5f, 0xff, 0xff, 0xff, 0x61, 0x44, + 0x44, 0x44, 0x41, + + /* U+003E ">" */ + 0x59, 0x20, 0x0, 0x0, 0x3, 0xdf, 0xc5, 0x0, + 0x0, 0x0, 0x39, 0xfe, 0x71, 0x0, 0x0, 0x0, + 0x6d, 0xf4, 0x0, 0x0, 0x17, 0xdf, 0x40, 0x4, + 0xaf, 0xd6, 0x0, 0x3e, 0xfa, 0x40, 0x0, 0x4, + 0x81, 0x0, 0x0, 0x0, + + /* U+003F "?" */ + 0x7, 0xdf, 0xd6, 0x3, 0xd7, 0x5a, 0xf4, 0x10, + 0x0, 0xe, 0x90, 0x0, 0x1, 0xf7, 0x0, 0x0, + 0xbe, 0x10, 0x0, 0xae, 0x20, 0x0, 0x2f, 0x40, + 0x0, 0x5, 0xf0, 0x0, 0x0, 0x5d, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x7, + 0xf0, 0x0, + + /* U+0040 "@" */ + 0x0, 0x19, 0xde, 0xb2, 0x0, 0x2e, 0x93, 0x38, + 0xe0, 0xd, 0x70, 0x0, 0xb, 0x64, 0xd0, 0x8, + 0xec, 0x98, 0x98, 0x7, 0xd4, 0x5f, 0xab, 0x50, + 0xd5, 0x0, 0x9a, 0xc4, 0xf, 0x20, 0x6, 0xab, + 0x50, 0xd4, 0x0, 0x8a, 0x98, 0x7, 0xc1, 0x2e, + 0xa5, 0xd0, 0x9, 0xed, 0xa9, 0xd, 0x80, 0x0, + 0x0, 0x0, 0x2e, 0x92, 0x0, 0x10, 0x0, 0x2a, + 0xff, 0xf7, 0x0, 0x0, 0x0, 0x11, 0x0, + + /* U+0041 "A" */ + 0x0, 0x8, 0xf8, 0x0, 0x0, 0x0, 0xcf, 0xd0, + 0x0, 0x0, 0x1f, 0xbf, 0x10, 0x0, 0x5, 0xf3, + 0xf6, 0x0, 0x0, 0xad, 0xd, 0xa0, 0x0, 0xe, + 0x90, 0x9e, 0x0, 0x3, 0xf5, 0x4, 0xf3, 0x0, + 0x7f, 0x10, 0x1f, 0x80, 0xc, 0xff, 0xff, 0xfc, + 0x0, 0xf9, 0x33, 0x39, 0xf1, 0x5f, 0x30, 0x0, + 0x3f, 0x59, 0xe0, 0x0, 0x0, 0xea, + + /* U+0042 "B" */ + 0xcf, 0xff, 0xd7, 0x0, 0xcc, 0x45, 0x7f, 0x80, + 0xcb, 0x0, 0xa, 0xd0, 0xcb, 0x0, 0x9, 0xe0, + 0xcb, 0x1, 0x4f, 0x90, 0xcf, 0xff, 0xfa, 0x0, + 0xcc, 0x34, 0x6e, 0x90, 0xcb, 0x0, 0x5, 0xf2, + 0xcb, 0x0, 0x3, 0xf4, 0xcb, 0x0, 0x5, 0xf3, + 0xcc, 0x45, 0x7e, 0xc0, 0xcf, 0xff, 0xd9, 0x10, + + /* U+0043 "C" */ + 0x0, 0x8e, 0xfd, 0x70, 0xbf, 0x75, 0x8c, 0x5f, + 0x40, 0x0, 0xa, 0xd0, 0x0, 0x0, 0xea, 0x0, + 0x0, 0xf, 0x90, 0x0, 0x0, 0xf9, 0x0, 0x0, + 0xe, 0xa0, 0x0, 0x0, 0xad, 0x0, 0x0, 0x5, + 0xf4, 0x0, 0x0, 0xb, 0xf7, 0x58, 0xc0, 0x8, + 0xef, 0xd7, + + /* U+0044 "D" */ + 0xff, 0xfd, 0x81, 0x0, 0xfa, 0x57, 0xed, 0x0, + 0xf7, 0x0, 0x2f, 0x70, 0xf7, 0x0, 0xb, 0xd0, + 0xf7, 0x0, 0x8, 0xf0, 0xf7, 0x0, 0x7, 0xf1, + 0xf7, 0x0, 0x7, 0xf1, 0xf7, 0x0, 0x8, 0xf0, + 0xf7, 0x0, 0xb, 0xd0, 0xf7, 0x0, 0x2f, 0x70, + 0xfa, 0x57, 0xed, 0x0, 0xff, 0xfd, 0x81, 0x0, + + /* U+0045 "E" */ + 0x9f, 0xff, 0xff, 0xf0, 0x9f, 0x55, 0x55, 0x40, + 0x9e, 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, + 0x9e, 0x11, 0x11, 0x0, 0x9f, 0xff, 0xff, 0xb0, + 0x9f, 0x44, 0x44, 0x20, 0x9e, 0x0, 0x0, 0x0, + 0x9e, 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, + 0x9f, 0x55, 0x55, 0x50, 0x9f, 0xff, 0xff, 0xf1, + + /* U+0046 "F" */ + 0x4f, 0xff, 0xff, 0xf2, 0x4f, 0x75, 0x55, 0x50, + 0x4f, 0x30, 0x0, 0x0, 0x4f, 0x30, 0x0, 0x0, + 0x4f, 0x31, 0x11, 0x0, 0x4f, 0xff, 0xff, 0xb0, + 0x4f, 0x64, 0x44, 0x20, 0x4f, 0x30, 0x0, 0x0, + 0x4f, 0x30, 0x0, 0x0, 0x4f, 0x30, 0x0, 0x0, + 0x4f, 0x30, 0x0, 0x0, 0x4f, 0x30, 0x0, 0x0, + + /* U+0047 "G" */ + 0x0, 0x1a, 0xef, 0xb3, 0x0, 0x1e, 0xd6, 0x59, + 0xb0, 0x9, 0xf1, 0x0, 0x2, 0x0, 0xe9, 0x0, + 0x0, 0x0, 0x2f, 0x60, 0x0, 0x0, 0x3, 0xf5, + 0x0, 0x0, 0x0, 0x3f, 0x50, 0xe, 0xff, 0x12, + 0xf6, 0x0, 0x37, 0xf1, 0xf, 0x90, 0x0, 0x5f, + 0x10, 0x9e, 0x10, 0x5, 0xf1, 0x1, 0xed, 0x65, + 0xbf, 0x10, 0x2, 0xae, 0xfc, 0x40, + + /* U+0048 "H" */ + 0xf7, 0x0, 0x7, 0xf0, 0xf7, 0x0, 0x7, 0xf0, + 0xf7, 0x0, 0x7, 0xf0, 0xf7, 0x0, 0x7, 0xf0, + 0xf8, 0x11, 0x17, 0xf0, 0xff, 0xff, 0xff, 0xf0, + 0xf9, 0x44, 0x49, 0xf0, 0xf7, 0x0, 0x7, 0xf0, + 0xf7, 0x0, 0x7, 0xf0, 0xf7, 0x0, 0x7, 0xf0, + 0xf7, 0x0, 0x7, 0xf0, 0xf7, 0x0, 0x7, 0xf0, + + /* U+0049 "I" */ + 0x8f, 0xff, 0xff, 0x82, 0x57, 0xf7, 0x52, 0x0, + 0x3f, 0x40, 0x0, 0x3, 0xf4, 0x0, 0x0, 0x3f, + 0x40, 0x0, 0x3, 0xf4, 0x0, 0x0, 0x3f, 0x40, + 0x0, 0x3, 0xf4, 0x0, 0x0, 0x3f, 0x40, 0x0, + 0x3, 0xf4, 0x0, 0x25, 0x7f, 0x75, 0x28, 0xff, + 0xff, 0xf8, + + /* U+004A "J" */ + 0x0, 0x4f, 0xff, 0xf0, 0x1, 0x55, 0xaf, 0x0, + 0x0, 0x7, 0xf0, 0x0, 0x0, 0x7f, 0x0, 0x0, + 0x7, 0xf0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x7, + 0xf0, 0x0, 0x0, 0x7f, 0x0, 0x0, 0x8, 0xf1, + 0x10, 0x0, 0xbd, 0x3e, 0x85, 0x8f, 0x81, 0x8d, + 0xfe, 0x90, + + /* U+004B "K" */ + 0xf7, 0x0, 0x5, 0xf6, 0xf7, 0x0, 0x3f, 0x80, + 0xf7, 0x2, 0xea, 0x0, 0xf7, 0x1d, 0xc0, 0x0, + 0xf8, 0xcd, 0x10, 0x0, 0xff, 0xfe, 0x0, 0x0, + 0xff, 0x5f, 0x90, 0x0, 0xf8, 0x7, 0xf3, 0x0, + 0xf7, 0x0, 0xdc, 0x0, 0xf7, 0x0, 0x4f, 0x60, + 0xf7, 0x0, 0xb, 0xf1, 0xf7, 0x0, 0x2, 0xfa, + + /* U+004C "L" */ + 0x6f, 0x10, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, + 0x6f, 0x10, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, + 0x6f, 0x10, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, + 0x6f, 0x10, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, + 0x6f, 0x10, 0x0, 0x0, 0x6f, 0x10, 0x0, 0x0, + 0x6f, 0x55, 0x55, 0x51, 0x6f, 0xff, 0xff, 0xf5, + + /* U+004D "M" */ + 0x6f, 0xc0, 0x0, 0xcf, 0x66, 0xfe, 0x10, 0x1e, + 0xf6, 0x6f, 0xa6, 0x6, 0xaf, 0x66, 0xf5, 0xb0, + 0xb5, 0xf6, 0x6f, 0xf, 0x1f, 0x1f, 0x66, 0xf0, + 0xb9, 0xb0, 0xf6, 0x6f, 0x6, 0xf6, 0xf, 0x66, + 0xf0, 0x1b, 0x10, 0xf6, 0x6f, 0x0, 0x0, 0xf, + 0x66, 0xf0, 0x0, 0x0, 0xf6, 0x6f, 0x0, 0x0, + 0xf, 0x66, 0xf0, 0x0, 0x0, 0xf6, + + /* U+004E "N" */ + 0xff, 0x10, 0x6, 0xf0, 0xff, 0x70, 0x6, 0xf0, + 0xfd, 0xd0, 0x6, 0xf0, 0xf8, 0xf3, 0x6, 0xf0, + 0xf7, 0xa9, 0x6, 0xf0, 0xf7, 0x4e, 0x6, 0xf0, + 0xf7, 0xe, 0x56, 0xf0, 0xf7, 0x8, 0xb6, 0xf0, + 0xf7, 0x2, 0xf8, 0xf0, 0xf7, 0x0, 0xcd, 0xf0, + 0xf7, 0x0, 0x6f, 0xf0, 0xf7, 0x0, 0x1f, 0xf0, + + /* U+004F "O" */ + 0x0, 0x5d, 0xfd, 0x50, 0x0, 0x3f, 0xa5, 0xaf, + 0x30, 0xa, 0xd0, 0x0, 0xdb, 0x0, 0xe9, 0x0, + 0x9, 0xf0, 0x1f, 0x70, 0x0, 0x7f, 0x11, 0xf6, + 0x0, 0x6, 0xf2, 0x2f, 0x60, 0x0, 0x6f, 0x21, + 0xf7, 0x0, 0x7, 0xf1, 0xe, 0x90, 0x0, 0x9f, + 0x0, 0xad, 0x0, 0xd, 0xb0, 0x3, 0xfa, 0x5a, + 0xf3, 0x0, 0x5, 0xdf, 0xd5, 0x0, + + /* U+0050 "P" */ + 0x9f, 0xff, 0xe9, 0x10, 0x9f, 0x44, 0x7f, 0xc0, + 0x9e, 0x0, 0x7, 0xf2, 0x9e, 0x0, 0x3, 0xf5, + 0x9e, 0x0, 0x5, 0xf3, 0x9e, 0x0, 0x3d, 0xe0, + 0x9f, 0xff, 0xfd, 0x30, 0x9f, 0x33, 0x10, 0x0, + 0x9e, 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, + 0x9e, 0x0, 0x0, 0x0, 0x9e, 0x0, 0x0, 0x0, + + /* U+0051 "Q" */ + 0x0, 0x5d, 0xfd, 0x50, 0x0, 0x3f, 0xa5, 0xaf, + 0x30, 0xa, 0xd0, 0x0, 0xdb, 0x0, 0xe9, 0x0, + 0x9, 0xf0, 0x1f, 0x70, 0x0, 0x7f, 0x11, 0xf6, + 0x0, 0x6, 0xf2, 0x2f, 0x60, 0x0, 0x6f, 0x21, + 0xf7, 0x0, 0x7, 0xf1, 0xe, 0x90, 0x0, 0x8f, + 0x0, 0xad, 0x0, 0xd, 0xb0, 0x3, 0xfa, 0x4a, + 0xf3, 0x0, 0x5, 0xdf, 0xf7, 0x0, 0x0, 0x0, + 0xb, 0xe2, 0x0, 0x0, 0x0, 0xa, 0x30, + + /* U+0052 "R" */ + 0xff, 0xff, 0xc4, 0x0, 0xf, 0xa4, 0x5c, 0xf4, + 0x0, 0xf8, 0x0, 0xf, 0xa0, 0xf, 0x80, 0x0, + 0xcc, 0x0, 0xf8, 0x0, 0xe, 0xa0, 0xf, 0x80, + 0x17, 0xe2, 0x0, 0xff, 0xff, 0xe3, 0x0, 0xf, + 0xa3, 0x5e, 0xd0, 0x0, 0xf8, 0x0, 0x3f, 0x60, + 0xf, 0x80, 0x0, 0xbe, 0x0, 0xf8, 0x0, 0x3, + 0xf5, 0xf, 0x80, 0x0, 0xc, 0xc0, + + /* U+0053 "S" */ + 0x5, 0xdf, 0xea, 0x20, 0x6f, 0x85, 0x6b, 0x60, + 0xd9, 0x0, 0x0, 0x0, 0xf7, 0x0, 0x0, 0x0, + 0xce, 0x40, 0x0, 0x0, 0x3e, 0xfe, 0xa3, 0x0, + 0x0, 0x5a, 0xef, 0x50, 0x0, 0x0, 0xc, 0xd0, + 0x0, 0x0, 0x6, 0xf0, 0x20, 0x0, 0x9, 0xe0, + 0xda, 0x65, 0x9f, 0x80, 0x5b, 0xef, 0xd7, 0x0, + + /* U+0054 "T" */ + 0xaf, 0xff, 0xff, 0xff, 0xb3, 0x55, 0x7f, 0x85, + 0x53, 0x0, 0x3, 0xf4, 0x0, 0x0, 0x0, 0x3f, + 0x40, 0x0, 0x0, 0x3, 0xf4, 0x0, 0x0, 0x0, + 0x3f, 0x40, 0x0, 0x0, 0x3, 0xf4, 0x0, 0x0, + 0x0, 0x3f, 0x40, 0x0, 0x0, 0x3, 0xf4, 0x0, + 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0x3, 0xf4, + 0x0, 0x0, 0x0, 0x3f, 0x40, 0x0, + + /* U+0055 "U" */ + 0xe9, 0x0, 0x8, 0xfe, 0x90, 0x0, 0x8f, 0xe9, + 0x0, 0x8, 0xfe, 0x90, 0x0, 0x8f, 0xe9, 0x0, + 0x8, 0xfe, 0x90, 0x0, 0x8f, 0xe9, 0x0, 0x8, + 0xfe, 0x90, 0x0, 0x8f, 0xe9, 0x0, 0x8, 0xec, + 0xb0, 0x0, 0xac, 0x6f, 0x95, 0x9f, 0x60, 0x6d, + 0xfd, 0x60, + + /* U+0056 "V" */ + 0x7f, 0x10, 0x0, 0xf, 0x72, 0xf5, 0x0, 0x4, + 0xf3, 0xe, 0x90, 0x0, 0x8e, 0x0, 0xad, 0x0, + 0xc, 0xa0, 0x6, 0xf1, 0x0, 0xf6, 0x0, 0x1f, + 0x40, 0x4f, 0x20, 0x0, 0xd8, 0x8, 0xd0, 0x0, + 0x9, 0xc0, 0xc9, 0x0, 0x0, 0x5f, 0x1f, 0x50, + 0x0, 0x0, 0xf9, 0xf1, 0x0, 0x0, 0xc, 0xfc, + 0x0, 0x0, 0x0, 0x8f, 0x80, 0x0, + + /* U+0057 "W" */ + 0xe7, 0x0, 0x0, 0x7, 0xf0, 0xc9, 0x0, 0x0, + 0x9, 0xd0, 0xab, 0x0, 0x0, 0xa, 0xa0, 0x8d, + 0x5, 0xf5, 0xc, 0x80, 0x6e, 0x8, 0xf9, 0xe, + 0x60, 0x4f, 0xb, 0xac, 0xf, 0x40, 0x1f, 0x2e, + 0x3f, 0x1f, 0x20, 0xf, 0x5e, 0xe, 0x5f, 0x0, + 0xd, 0xab, 0xb, 0xad, 0x0, 0xb, 0xe8, 0x8, + 0xeb, 0x0, 0x9, 0xf5, 0x4, 0xf9, 0x0, 0x6, + 0xf2, 0x1, 0xf7, 0x0, + + /* U+0058 "X" */ + 0x2f, 0x70, 0x0, 0x3f, 0x50, 0x8f, 0x10, 0xb, + 0xc0, 0x0, 0xe8, 0x4, 0xf3, 0x0, 0x6, 0xf1, + 0xda, 0x0, 0x0, 0xd, 0xdf, 0x10, 0x0, 0x0, + 0x5f, 0x80, 0x0, 0x0, 0xb, 0xfd, 0x0, 0x0, + 0x4, 0xf5, 0xf6, 0x0, 0x0, 0xdb, 0x8, 0xe0, + 0x0, 0x6f, 0x20, 0xe, 0x80, 0x1e, 0x90, 0x0, + 0x7f, 0x19, 0xe1, 0x0, 0x0, 0xe9, + + /* U+0059 "Y" */ + 0x7f, 0x10, 0x0, 0x1f, 0x70, 0xe9, 0x0, 0x9, + 0xe0, 0x6, 0xf2, 0x1, 0xf6, 0x0, 0xd, 0x90, + 0x9e, 0x0, 0x0, 0x5f, 0x3f, 0x50, 0x0, 0x0, + 0xdf, 0xd0, 0x0, 0x0, 0x5, 0xf5, 0x0, 0x0, + 0x0, 0x3f, 0x40, 0x0, 0x0, 0x3, 0xf4, 0x0, + 0x0, 0x0, 0x3f, 0x40, 0x0, 0x0, 0x3, 0xf4, + 0x0, 0x0, 0x0, 0x3f, 0x40, 0x0, + + /* U+005A "Z" */ + 0xbf, 0xff, 0xff, 0xf6, 0x35, 0x55, 0x5a, 0xf3, + 0x0, 0x0, 0x1e, 0x90, 0x0, 0x0, 0x9e, 0x10, + 0x0, 0x2, 0xf6, 0x0, 0x0, 0xb, 0xc0, 0x0, + 0x0, 0x5f, 0x30, 0x0, 0x0, 0xe9, 0x0, 0x0, + 0x8, 0xe1, 0x0, 0x0, 0x2f, 0x60, 0x0, 0x0, + 0xae, 0x55, 0x55, 0x52, 0xdf, 0xff, 0xff, 0xf9, + + /* U+005B "[" */ + 0x9f, 0xf8, 0x9c, 0x21, 0x9b, 0x0, 0x9b, 0x0, + 0x9b, 0x0, 0x9b, 0x0, 0x9b, 0x0, 0x9b, 0x0, + 0x9b, 0x0, 0x9b, 0x0, 0x9b, 0x0, 0x9b, 0x0, + 0x9b, 0x0, 0x9f, 0xf7, 0x12, 0x21, + + /* U+005C "\\" */ + 0x1f, 0x50, 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0, + 0x2, 0xf3, 0x0, 0x0, 0x0, 0xbb, 0x0, 0x0, + 0x0, 0x4f, 0x20, 0x0, 0x0, 0xc, 0x90, 0x0, + 0x0, 0x5, 0xf1, 0x0, 0x0, 0x0, 0xe7, 0x0, + 0x0, 0x0, 0x7e, 0x0, 0x0, 0x0, 0x1f, 0x50, + 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0, 0x2, 0xf3, + 0x0, 0x0, 0x0, 0xba, + + /* U+005D "]" */ + 0x7f, 0xfa, 0x2, 0xba, 0x0, 0xba, 0x0, 0xba, + 0x0, 0xba, 0x0, 0xba, 0x0, 0xba, 0x0, 0xba, + 0x0, 0xba, 0x0, 0xba, 0x0, 0xba, 0x0, 0xba, + 0x0, 0xba, 0x7f, 0xfa, 0x12, 0x21, + + /* U+005E "^" */ + 0x0, 0x2, 0x82, 0x0, 0x0, 0x0, 0xdf, 0xd0, + 0x0, 0x0, 0x9d, 0x2d, 0xa0, 0x0, 0x5e, 0x20, + 0x2e, 0x60, 0x2e, 0x40, 0x0, 0x3e, 0x20, + + /* U+005F "_" */ + 0xaa, 0xaa, 0xaa, 0xaa, 0xa0, + + /* U+0060 "`" */ + 0x8d, 0x0, 0xc, 0x80, 0x1, 0xd3, + + /* U+0061 "a" */ + 0x2, 0xae, 0xfd, 0x60, 0x5, 0x95, 0x47, 0xf4, + 0x0, 0x0, 0x0, 0xaa, 0x0, 0x7d, 0xff, 0xfb, + 0x9, 0xe6, 0x22, 0xac, 0xe, 0x70, 0x0, 0xbc, + 0xf, 0x60, 0x0, 0xfc, 0xb, 0xc1, 0x1a, 0xfc, + 0x1, 0xbf, 0xe8, 0x9c, + + /* U+0062 "b" */ + 0x9c, 0x0, 0x0, 0x0, 0x9c, 0x0, 0x0, 0x0, + 0x9c, 0x0, 0x0, 0x0, 0x9c, 0x7e, 0xe8, 0x0, + 0x9f, 0xc4, 0x7f, 0x60, 0x9f, 0x10, 0x9, 0xd0, + 0x9d, 0x0, 0x5, 0xf0, 0x9c, 0x0, 0x4, 0xf1, + 0x9d, 0x0, 0x5, 0xf0, 0x9f, 0x10, 0x9, 0xd0, + 0x9f, 0xc4, 0x7f, 0x60, 0x9c, 0x7e, 0xe8, 0x0, + + /* U+0063 "c" */ + 0x0, 0x8e, 0xfd, 0x50, 0xbf, 0x74, 0x7a, 0x3f, + 0x50, 0x0, 0x7, 0xf0, 0x0, 0x0, 0x9d, 0x0, + 0x0, 0x7, 0xf0, 0x0, 0x0, 0x3f, 0x50, 0x0, + 0x0, 0xbf, 0x74, 0x6a, 0x0, 0x8e, 0xfd, 0x60, + + /* U+0064 "d" */ + 0x0, 0x0, 0x0, 0xba, 0x0, 0x0, 0x0, 0xba, + 0x0, 0x0, 0x0, 0xba, 0x0, 0x8e, 0xf8, 0xba, + 0x6, 0xf8, 0x4c, 0xfa, 0xc, 0xa0, 0x1, 0xfa, + 0xf, 0x60, 0x0, 0xda, 0x1f, 0x50, 0x0, 0xba, + 0xf, 0x60, 0x0, 0xca, 0xc, 0x90, 0x0, 0xfa, + 0x5, 0xf4, 0x19, 0xfa, 0x0, 0x7e, 0xf9, 0xba, + + /* U+0065 "e" */ + 0x0, 0x4c, 0xfe, 0x70, 0x0, 0x3f, 0xa4, 0x7f, + 0x60, 0xc, 0xc0, 0x0, 0x8d, 0x0, 0xf7, 0x0, + 0x4, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0x20, 0xf7, + 0x22, 0x22, 0x20, 0xc, 0xa0, 0x0, 0x0, 0x0, + 0x3f, 0x94, 0x48, 0xb0, 0x0, 0x4c, 0xff, 0xc6, + 0x0, + + /* U+0066 "f" */ + 0x0, 0x8, 0xef, 0xc0, 0x3, 0xf6, 0x32, 0x0, + 0x5f, 0x0, 0x9, 0xff, 0xff, 0xfc, 0x12, 0x7f, + 0x22, 0x10, 0x6, 0xf0, 0x0, 0x0, 0x6f, 0x0, + 0x0, 0x6, 0xf0, 0x0, 0x0, 0x6f, 0x0, 0x0, + 0x6, 0xf0, 0x0, 0x0, 0x6f, 0x0, 0x0, 0x6, + 0xf0, 0x0, + + /* U+0067 "g" */ + 0x0, 0x7e, 0xf8, 0xba, 0x5, 0xf8, 0x4c, 0xfa, + 0xc, 0xa0, 0x1, 0xfa, 0xf, 0x60, 0x0, 0xca, + 0x1f, 0x50, 0x0, 0xba, 0xf, 0x60, 0x0, 0xca, + 0xc, 0xa0, 0x1, 0xfa, 0x5, 0xf7, 0x4b, 0xfa, + 0x0, 0x7e, 0xf8, 0xb9, 0x0, 0x0, 0x0, 0xd6, + 0x2, 0x83, 0x39, 0xf1, 0x1, 0xbe, 0xfc, 0x30, + + /* U+0068 "h" */ + 0x9c, 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0, 0x9c, + 0x0, 0x0, 0x9, 0xc5, 0xee, 0x90, 0x9e, 0xc5, + 0x8f, 0x59, 0xf1, 0x0, 0xc9, 0x9d, 0x0, 0xa, + 0xa9, 0xc0, 0x0, 0xab, 0x9c, 0x0, 0xa, 0xb9, + 0xc0, 0x0, 0xab, 0x9c, 0x0, 0xa, 0xb9, 0xc0, + 0x0, 0xab, + + /* U+0069 "i" */ + 0x0, 0xf, 0x50, 0x0, 0x0, 0xd4, 0x0, 0x0, + 0x0, 0x0, 0x2, 0xff, 0xf5, 0x0, 0x2, 0x2f, + 0x50, 0x0, 0x0, 0xf5, 0x0, 0x0, 0xf, 0x50, + 0x0, 0x0, 0xf5, 0x0, 0x0, 0xf, 0x50, 0x0, + 0x0, 0xf5, 0x0, 0x12, 0x2f, 0x62, 0x2b, 0xff, + 0xff, 0xff, + + /* U+006A "j" */ + 0x0, 0x9, 0xc0, 0x0, 0x89, 0x0, 0x0, 0x0, + 0xef, 0xfc, 0x1, 0x2a, 0xc0, 0x0, 0x9c, 0x0, + 0x9, 0xc0, 0x0, 0x9c, 0x0, 0x9, 0xc0, 0x0, + 0x9c, 0x0, 0x9, 0xc0, 0x0, 0x9b, 0x0, 0xb, + 0xa2, 0x35, 0xf6, 0xaf, 0xf9, 0x0, + + /* U+006B "k" */ + 0x4f, 0x20, 0x0, 0x0, 0x4f, 0x20, 0x0, 0x0, + 0x4f, 0x20, 0x0, 0x0, 0x4f, 0x20, 0xc, 0xc0, + 0x4f, 0x20, 0xbc, 0x0, 0x4f, 0x2b, 0xd1, 0x0, + 0x4f, 0xbf, 0x40, 0x0, 0x4f, 0xdc, 0xc0, 0x0, + 0x4f, 0x32, 0xf7, 0x0, 0x4f, 0x20, 0x7f, 0x20, + 0x4f, 0x20, 0xc, 0xc0, 0x4f, 0x20, 0x3, 0xf7, + + /* U+006C "l" */ + 0xdf, 0xfb, 0x0, 0x1, 0x2b, 0xb0, 0x0, 0x0, + 0xab, 0x0, 0x0, 0xa, 0xb0, 0x0, 0x0, 0xab, + 0x0, 0x0, 0xa, 0xb0, 0x0, 0x0, 0xab, 0x0, + 0x0, 0xa, 0xb0, 0x0, 0x0, 0xab, 0x0, 0x0, + 0x9, 0xc0, 0x0, 0x0, 0x5f, 0x63, 0x20, 0x0, + 0x9e, 0xf9, + + /* U+006D "m" */ + 0x3f, 0x8f, 0x89, 0xf9, 0x3, 0xf7, 0x8f, 0x96, + 0xf1, 0x3f, 0x11, 0xf3, 0xf, 0x43, 0xf0, 0x1f, + 0x20, 0xe4, 0x3f, 0x1, 0xf2, 0xe, 0x53, 0xf0, + 0x1f, 0x20, 0xe5, 0x3f, 0x1, 0xf2, 0xe, 0x53, + 0xf0, 0x1f, 0x20, 0xe5, 0x3f, 0x1, 0xf2, 0xe, + 0x50, + + /* U+006E "n" */ + 0x9c, 0x7e, 0xe9, 0x9, 0xf9, 0x14, 0xf5, 0x9f, + 0x0, 0xc, 0x99, 0xd0, 0x0, 0xaa, 0x9c, 0x0, + 0xa, 0xb9, 0xc0, 0x0, 0xab, 0x9c, 0x0, 0xa, + 0xb9, 0xc0, 0x0, 0xab, 0x9c, 0x0, 0xa, 0xb0, + + /* U+006F "o" */ + 0x5, 0xdf, 0xd6, 0x0, 0x4f, 0x94, 0x9f, 0x50, + 0xbc, 0x0, 0xc, 0xc0, 0xe8, 0x0, 0x8, 0xf0, + 0xf7, 0x0, 0x6, 0xf0, 0xe8, 0x0, 0x8, 0xf0, + 0xbc, 0x0, 0xc, 0xc0, 0x4f, 0x94, 0x9f, 0x50, + 0x6, 0xdf, 0xd6, 0x0, + + /* U+0070 "p" */ + 0x9c, 0x9f, 0xe8, 0x0, 0x9f, 0x91, 0x4f, 0x60, + 0x9f, 0x0, 0x9, 0xd0, 0x9d, 0x0, 0x6, 0xf0, + 0x9c, 0x0, 0x5, 0xf1, 0x9d, 0x0, 0x6, 0xf0, + 0x9f, 0x10, 0xa, 0xd0, 0x9f, 0xc4, 0x7f, 0x60, + 0x9c, 0x8f, 0xe8, 0x0, 0x9c, 0x0, 0x0, 0x0, + 0x9c, 0x0, 0x0, 0x0, 0x9c, 0x0, 0x0, 0x0, + + /* U+0071 "q" */ + 0x6, 0xef, 0x9a, 0xb4, 0xf9, 0x4b, 0xfb, 0xbc, + 0x0, 0xe, 0xbe, 0x80, 0x0, 0xbb, 0xf7, 0x0, + 0xa, 0xbe, 0x80, 0x0, 0xbb, 0xbc, 0x0, 0xe, + 0xb4, 0xf8, 0x4b, 0xfb, 0x6, 0xef, 0x9a, 0xb0, + 0x0, 0x0, 0xab, 0x0, 0x0, 0xa, 0xb0, 0x0, + 0x0, 0xab, + + /* U+0072 "r" */ + 0x5f, 0x2b, 0xfe, 0x55, 0xfc, 0x62, 0x55, 0x5f, + 0x60, 0x0, 0x5, 0xf1, 0x0, 0x0, 0x5f, 0x0, + 0x0, 0x5, 0xf0, 0x0, 0x0, 0x5f, 0x0, 0x0, + 0x5, 0xf0, 0x0, 0x0, 0x5f, 0x0, 0x0, 0x0, + + /* U+0073 "s" */ + 0x5, 0xdf, 0xea, 0x12, 0xf8, 0x45, 0xa1, 0x5f, + 0x0, 0x0, 0x3, 0xf9, 0x40, 0x0, 0x5, 0xcf, + 0xf9, 0x0, 0x0, 0x6, 0xf6, 0x0, 0x0, 0xd, + 0x76, 0x95, 0x48, 0xf3, 0x3b, 0xef, 0xd5, 0x0, + + /* U+0074 "t" */ + 0x0, 0x6, 0x40, 0x0, 0x0, 0xd, 0x80, 0x0, + 0x0, 0xd, 0x80, 0x0, 0xf, 0xff, 0xff, 0xf9, + 0x2, 0x2d, 0x92, 0x21, 0x0, 0xd, 0x80, 0x0, + 0x0, 0xd, 0x80, 0x0, 0x0, 0xd, 0x80, 0x0, + 0x0, 0xd, 0x80, 0x0, 0x0, 0xc, 0x80, 0x0, + 0x0, 0x9, 0xd4, 0x21, 0x0, 0x2, 0xbf, 0xf9, + + /* U+0075 "u" */ + 0x9c, 0x0, 0xa, 0xb9, 0xc0, 0x0, 0xab, 0x9c, + 0x0, 0xa, 0xb9, 0xc0, 0x0, 0xab, 0x9c, 0x0, + 0xa, 0xb9, 0xc0, 0x0, 0xbb, 0x7e, 0x0, 0xd, + 0xb3, 0xf5, 0x18, 0xfb, 0x8, 0xee, 0x8a, 0xb0, + + /* U+0076 "v" */ + 0x1f, 0x40, 0x0, 0x4f, 0x20, 0xc9, 0x0, 0x9, + 0xc0, 0x7, 0xe0, 0x0, 0xe7, 0x0, 0x2f, 0x30, + 0x3f, 0x20, 0x0, 0xd8, 0x8, 0xd0, 0x0, 0x7, + 0xd0, 0xd8, 0x0, 0x0, 0x2f, 0x5f, 0x30, 0x0, + 0x0, 0xde, 0xd0, 0x0, 0x0, 0x8, 0xf8, 0x0, + 0x0, + + /* U+0077 "w" */ + 0xe6, 0x0, 0x0, 0x6, 0xe0, 0xa9, 0x0, 0x0, + 0x9, 0xb0, 0x7d, 0x0, 0x60, 0xc, 0x70, 0x4f, + 0x4, 0xf4, 0xf, 0x40, 0xf, 0x38, 0xc8, 0x3f, + 0x10, 0xd, 0x6c, 0x3c, 0x6d, 0x0, 0x9, 0xad, + 0xd, 0xaa, 0x0, 0x6, 0xf9, 0x9, 0xf6, 0x0, + 0x2, 0xf5, 0x4, 0xf3, 0x0, + + /* U+0078 "x" */ + 0xc, 0xa0, 0x0, 0xad, 0x0, 0x2f, 0x50, 0x5f, + 0x30, 0x0, 0x7e, 0x2e, 0x70, 0x0, 0x0, 0xcf, + 0xc0, 0x0, 0x0, 0x6, 0xf7, 0x0, 0x0, 0x1, + 0xec, 0xf1, 0x0, 0x0, 0xbc, 0xb, 0xb0, 0x0, + 0x6f, 0x20, 0x2f, 0x70, 0x2f, 0x70, 0x0, 0x6f, + 0x20, + + /* U+0079 "y" */ + 0x1f, 0x50, 0x0, 0x2f, 0x40, 0xab, 0x0, 0x8, + 0xe0, 0x4, 0xf1, 0x0, 0xd8, 0x0, 0xe, 0x70, + 0x3f, 0x20, 0x0, 0x9c, 0x9, 0xc0, 0x0, 0x3, + 0xf2, 0xe6, 0x0, 0x0, 0xd, 0xcf, 0x10, 0x0, + 0x0, 0x7f, 0xb0, 0x0, 0x0, 0x2, 0xf5, 0x0, + 0x0, 0x0, 0x6f, 0x0, 0x0, 0x2, 0x4e, 0x90, + 0x0, 0x0, 0xaf, 0xb0, 0x0, 0x0, + + /* U+007A "z" */ + 0x5f, 0xff, 0xff, 0xa0, 0x22, 0x24, 0xf7, 0x0, + 0x0, 0xcc, 0x0, 0x0, 0x7e, 0x10, 0x0, 0x3f, + 0x50, 0x0, 0x1e, 0x90, 0x0, 0xa, 0xd0, 0x0, + 0x5, 0xf5, 0x22, 0x21, 0x8f, 0xff, 0xff, 0xa0, + + /* U+007B "{" */ + 0x0, 0x5, 0xdf, 0x60, 0x0, 0xfa, 0x20, 0x0, + 0x1f, 0x40, 0x0, 0x2, 0xf4, 0x0, 0x0, 0x2f, + 0x30, 0x0, 0x2, 0xf3, 0x0, 0x0, 0x8f, 0x0, + 0x5, 0xff, 0x50, 0x0, 0x3, 0xbe, 0x0, 0x0, + 0x3, 0xf3, 0x0, 0x0, 0x2f, 0x30, 0x0, 0x2, + 0xf4, 0x0, 0x0, 0x1f, 0x40, 0x0, 0x0, 0xf8, + 0x0, 0x0, 0x7, 0xff, 0x60, 0x0, 0x0, 0x21, + + /* U+007C "|" */ + 0x2f, 0x22, 0xf2, 0x2f, 0x22, 0xf2, 0x2f, 0x22, + 0xf2, 0x2f, 0x22, 0xf2, 0x2f, 0x22, 0xf2, 0x2f, + 0x22, 0xf2, 0x2f, 0x22, 0xf2, 0x2f, 0x22, 0xf2, + + /* U+007D "}" */ + 0x6f, 0xd5, 0x0, 0x0, 0x2a, 0xf0, 0x0, 0x0, + 0x4f, 0x10, 0x0, 0x3, 0xf2, 0x0, 0x0, 0x3f, + 0x20, 0x0, 0x2, 0xf2, 0x0, 0x0, 0xf, 0x80, + 0x0, 0x0, 0x4f, 0xf6, 0x0, 0xe, 0xb3, 0x0, + 0x2, 0xf3, 0x0, 0x0, 0x3f, 0x20, 0x0, 0x3, + 0xf2, 0x0, 0x0, 0x3f, 0x10, 0x0, 0x8, 0xf0, + 0x0, 0x5f, 0xf7, 0x0, 0x0, 0x20, 0x0, 0x0, + + /* U+007E "~" */ + 0x0, 0x0, 0x0, 0x0, 0x1, 0xaf, 0xfa, 0x31, + 0x65, 0x59, 0x45, 0xbf, 0xfd, 0x20, 0x0, 0x0, + 0x12, 0x0, + + /* U+00B7 "·" */ + 0x26, 0x26, 0xf6, 0x6f, 0x60, + + /* U+00DC "Ü" */ + 0xa, 0xd0, 0xcb, 0x0, 0x67, 0x7, 0x60, 0x0, + 0x0, 0x0, 0xe, 0x90, 0x0, 0x8f, 0xe9, 0x0, + 0x8, 0xfe, 0x90, 0x0, 0x8f, 0xe9, 0x0, 0x8, + 0xfe, 0x90, 0x0, 0x8f, 0xe9, 0x0, 0x8, 0xfe, + 0x90, 0x0, 0x8f, 0xe9, 0x0, 0x8, 0xfe, 0x90, + 0x0, 0x8e, 0xcb, 0x0, 0xa, 0xc6, 0xf9, 0x59, + 0xf6, 0x6, 0xdf, 0xd6, 0x0, + + /* U+00DF "ß" */ + 0x6, 0xdf, 0xd4, 0x0, 0x4f, 0x83, 0x8f, 0x20, + 0x8d, 0x0, 0xe, 0x60, 0x9c, 0x4, 0xd9, 0x30, + 0xac, 0xe, 0x50, 0x0, 0xac, 0x1f, 0x40, 0x0, + 0xac, 0xb, 0xe5, 0x0, 0xac, 0x0, 0x8f, 0x80, + 0xac, 0x0, 0x5, 0xf3, 0xac, 0x0, 0x0, 0xf6, + 0xac, 0x55, 0x39, 0xf2, 0xac, 0x7e, 0xfd, 0x50, + + /* U+00E4 "ä" */ + 0x0, 0xad, 0xc, 0xb0, 0x0, 0x67, 0x7, 0x60, + 0x0, 0x0, 0x0, 0x0, 0x2, 0xae, 0xfd, 0x60, + 0x5, 0x95, 0x47, 0xf4, 0x0, 0x0, 0x0, 0xaa, + 0x0, 0x7d, 0xff, 0xfb, 0x9, 0xe6, 0x22, 0xac, + 0xe, 0x70, 0x0, 0xbc, 0xf, 0x60, 0x0, 0xfc, + 0xb, 0xc1, 0x1a, 0xfc, 0x1, 0xbf, 0xe8, 0x9c, + + /* U+00F6 "ö" */ + 0xa, 0xd0, 0xcb, 0x0, 0x6, 0x70, 0x76, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xdf, 0xd6, 0x0, + 0x4f, 0x94, 0x9f, 0x50, 0xbc, 0x0, 0xc, 0xc0, + 0xe8, 0x0, 0x8, 0xf0, 0xf7, 0x0, 0x6, 0xf0, + 0xe8, 0x0, 0x8, 0xf0, 0xbc, 0x0, 0xc, 0xc0, + 0x4f, 0x94, 0x9f, 0x50, 0x6, 0xdf, 0xd6, 0x0, + + /* U+00FC "ü" */ + 0xa, 0xd0, 0xcb, 0x0, 0x67, 0x7, 0x60, 0x0, + 0x0, 0x0, 0x9, 0xc0, 0x0, 0xab, 0x9c, 0x0, + 0xa, 0xb9, 0xc0, 0x0, 0xab, 0x9c, 0x0, 0xa, + 0xb9, 0xc0, 0x0, 0xab, 0x9c, 0x0, 0xb, 0xb7, + 0xe0, 0x0, 0xdb, 0x3f, 0x51, 0x8f, 0xb0, 0x8e, + 0xe8, 0xab, + + /* U+2022 "•" */ + 0x5, 0x95, 0x5, 0xff, 0xf5, 0x9f, 0xff, 0xa7, + 0xff, 0xf7, 0xa, 0xfb, 0x0, + + /* U+2026 "…" */ + 0x26, 0x22, 0x62, 0x26, 0x26, 0xf7, 0x6f, 0x66, + 0xf7, 0x6f, 0x76, 0xf6, 0x6f, 0x70, + + /* U+2722 "✢" */ + 0x0, 0x0, 0x51, 0x0, 0x0, 0x0, 0x2f, 0x90, + 0x0, 0x0, 0x1, 0xf7, 0x0, 0x0, 0x0, 0xb, + 0x10, 0x0, 0x6f, 0xd8, 0xc7, 0xbf, 0xd4, 0xc9, + 0x3a, 0x36, 0xb9, 0x0, 0x0, 0xc3, 0x0, 0x0, + 0x0, 0x2f, 0x80, 0x0, 0x0, 0x2, 0xf8, 0x0, + 0x0, 0x0, 0x1, 0x0, 0x0, + + /* U+2733 "✳" */ + 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x8, 0x0, + 0x10, 0x1, 0xa0, 0x80, 0x57, 0x0, 0x2, 0x99, + 0x57, 0x0, 0x26, 0x68, 0xfc, 0x66, 0x60, 0x22, + 0x7e, 0xb2, 0x22, 0x0, 0x47, 0x82, 0x90, 0x0, + 0x27, 0x8, 0x2, 0x70, 0x0, 0x0, 0x80, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+2736 "✶" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x5, 0x0, + 0x0, 0x0, 0x0, 0xb0, 0x0, 0x1, 0x73, 0xf, + 0x13, 0x71, 0x1, 0xde, 0xfe, 0xd2, 0x0, 0x2, + 0xff, 0xf3, 0x0, 0x3, 0xec, 0xfc, 0xe3, 0x1, + 0x51, 0xf, 0x1, 0x51, 0x0, 0x0, 0xa0, 0x0, + 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + + /* U+273B "✻" */ + 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x2f, 0x90, + 0x0, 0x4, 0x2, 0xf9, 0x4, 0x15, 0xfc, 0xc, + 0x37, 0xf9, 0x1a, 0xdb, 0xc8, 0xeb, 0x30, 0x0, + 0x7f, 0xd0, 0x0, 0x1b, 0xfa, 0xb6, 0xed, 0x45, + 0xfb, 0xc, 0x46, 0xf9, 0x3, 0x2, 0xfa, 0x2, + 0x0, 0x0, 0x2f, 0x90, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, + + /* U+273D "✽" */ + 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x8f, 0x80, + 0x0, 0x6, 0x2c, 0xfc, 0x26, 0x9, 0xff, 0x7f, + 0x7f, 0xf9, 0x7f, 0xfa, 0xca, 0xff, 0x60, 0x57, + 0xaf, 0xa7, 0x50, 0x6f, 0xfa, 0xca, 0xff, 0x69, + 0xff, 0x7f, 0x7f, 0xf9, 0x6, 0x2c, 0xfc, 0x26, + 0x0, 0x0, 0x8f, 0x80, 0x0, 0x0, 0x0, 0x10, + 0x0, 0x0 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 144, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 144, .box_w = 3, .box_h = 12, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 18, .adv_w = 144, .box_w = 5, .box_h = 5, .ofs_x = 2, .ofs_y = 7}, + {.bitmap_index = 31, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 85, .adv_w = 144, .box_w = 8, .box_h = 15, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 145, .adv_w = 144, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 195, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 249, .adv_w = 144, .box_w = 3, .box_h = 5, .ofs_x = 3, .ofs_y = 7}, + {.bitmap_index = 257, .adv_w = 144, .box_w = 4, .box_h = 15, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 287, .adv_w = 144, .box_w = 4, .box_h = 15, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 317, .adv_w = 144, .box_w = 7, .box_h = 8, .ofs_x = 1, .ofs_y = 4}, + {.bitmap_index = 345, .adv_w = 144, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 386, .adv_w = 144, .box_w = 4, .box_h = 5, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 396, .adv_w = 144, .box_w = 5, .box_h = 3, .ofs_x = 2, .ofs_y = 3}, + {.bitmap_index = 404, .adv_w = 144, .box_w = 3, .box_h = 3, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 409, .adv_w = 144, .box_w = 8, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 461, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 515, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 563, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 605, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 647, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 701, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 743, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 797, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 839, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 893, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 947, .adv_w = 144, .box_w = 3, .box_h = 9, .ofs_x = 3, .ofs_y = 0}, + {.bitmap_index = 961, .adv_w = 144, .box_w = 4, .box_h = 11, .ofs_x = 2, .ofs_y = -2}, + {.bitmap_index = 983, .adv_w = 144, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 1019, .adv_w = 144, .box_w = 9, .box_h = 6, .ofs_x = 0, .ofs_y = 2}, + {.bitmap_index = 1046, .adv_w = 144, .box_w = 9, .box_h = 8, .ofs_x = 0, .ofs_y = 1}, + {.bitmap_index = 1082, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1124, .adv_w = 144, .box_w = 9, .box_h = 14, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 1187, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1241, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1289, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1331, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1379, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1427, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1475, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1529, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1577, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1619, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1661, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1709, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1757, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1811, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1859, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1913, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1961, .adv_w = 144, .box_w = 9, .box_h = 14, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 2024, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2078, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2126, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2180, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2222, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2276, .adv_w = 144, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2336, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2390, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2444, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2492, .adv_w = 144, .box_w = 4, .box_h = 15, .ofs_x = 3, .ofs_y = -3}, + {.bitmap_index = 2522, .adv_w = 144, .box_w = 8, .box_h = 13, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 2574, .adv_w = 144, .box_w = 4, .box_h = 15, .ofs_x = 2, .ofs_y = -3}, + {.bitmap_index = 2604, .adv_w = 144, .box_w = 9, .box_h = 5, .ofs_x = 0, .ofs_y = 7}, + {.bitmap_index = 2627, .adv_w = 144, .box_w = 10, .box_h = 1, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 2632, .adv_w = 144, .box_w = 4, .box_h = 3, .ofs_x = 2, .ofs_y = 10}, + {.bitmap_index = 2638, .adv_w = 144, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2674, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2722, .adv_w = 144, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2754, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2802, .adv_w = 144, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2843, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2885, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 2933, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 2975, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3017, .adv_w = 144, .box_w = 5, .box_h = 15, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 3055, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3103, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3145, .adv_w = 144, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3186, .adv_w = 144, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3218, .adv_w = 144, .box_w = 8, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3254, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 3302, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 3344, .adv_w = 144, .box_w = 7, .box_h = 9, .ofs_x = 2, .ofs_y = 0}, + {.bitmap_index = 3376, .adv_w = 144, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3408, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3456, .adv_w = 144, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3488, .adv_w = 144, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3529, .adv_w = 144, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3574, .adv_w = 144, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3615, .adv_w = 144, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3669, .adv_w = 144, .box_w = 7, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3701, .adv_w = 144, .box_w = 7, .box_h = 16, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 3757, .adv_w = 144, .box_w = 3, .box_h = 16, .ofs_x = 3, .ofs_y = -4}, + {.bitmap_index = 3781, .adv_w = 144, .box_w = 7, .box_h = 16, .ofs_x = 1, .ofs_y = -4}, + {.bitmap_index = 3837, .adv_w = 144, .box_w = 9, .box_h = 4, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 3855, .adv_w = 144, .box_w = 3, .box_h = 3, .ofs_x = 3, .ofs_y = 4}, + {.bitmap_index = 3860, .adv_w = 144, .box_w = 7, .box_h = 15, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3913, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 3961, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4009, .adv_w = 144, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 4057, .adv_w = 144, .box_w = 7, .box_h = 12, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 4099, .adv_w = 144, .box_w = 5, .box_h = 5, .ofs_x = 2, .ofs_y = 4}, + {.bitmap_index = 4112, .adv_w = 144, .box_w = 9, .box_h = 3, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4126, .adv_w = 144, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4171, .adv_w = 144, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4216, .adv_w = 144, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4266, .adv_w = 144, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 4316, .adv_w = 144, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = -1} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + +static const uint16_t unicode_list_1[] = { + 0x0, 0x25, 0x28, 0x2d, 0x3f, 0x45, 0x1f6b, 0x1f6f, + 0x266b, 0x267c, 0x267f, 0x2684, 0x2686 +}; + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 95, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + }, + { + .range_start = 183, .range_length = 9863, .glyph_id_start = 96, + .unicode_list = unicode_list_1, .glyph_id_ofs_list = NULL, .list_length = 13, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY + } +}; + + + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = NULL, + .kern_scale = 0, + .cmap_num = 2, + .bpp = 4, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t font_mono_15 = { +#else +lv_font_t font_mono_15 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 19, /*The maximum line height required by the font*/ + .base_line = 4, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -1, + .underline_thickness = 1, +#endif + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if FONT_MONO_15*/ + diff --git a/firmware/src/font_tiempos_18.c b/firmware/src/font_tiempos_18.c new file mode 100644 index 000000000..f641185ac --- /dev/null +++ b/firmware/src/font_tiempos_18.c @@ -0,0 +1,2748 @@ +/******************************************************************************* + * Size: 18 px + * Bpp: 4 + * Opts: --font assets/TiemposText-400-Regular.otf --size 18 --bpp 4 --no-compress --format lvgl --lv-include lvgl.h -r 0x20-0x7E -o firmware/src/font_tiempos_18.c + ******************************************************************************/ + +#ifdef LV_LVGL_H_INCLUDE_SIMPLE +#include "lvgl.h" +#else +#include "lvgl.h" +#endif + +#ifndef FONT_TIEMPOS_18 +#define FONT_TIEMPOS_18 1 +#endif + +#if FONT_TIEMPOS_18 + +/*----------------- + * BITMAPS + *----------------*/ + +/*Store the image of the glyphs*/ +static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = { + /* U+0020 " " */ + + /* U+0021 "!" */ + 0x8f, 0xc6, 0xfa, 0x5f, 0x94, 0xf8, 0x2f, 0x61, + 0xf5, 0xf, 0x40, 0xe2, 0xd, 0x10, 0x20, 0x29, + 0x49, 0xfd, 0x4e, 0x70, + + /* U+0022 "\"" */ + 0xb, 0xa0, 0x9b, 0x0, 0xfe, 0xd, 0xf0, 0xc, + 0xb0, 0xac, 0x0, 0x98, 0x7, 0x90, 0x6, 0x50, + 0x46, 0x0, 0x11, 0x1, 0x10, + + /* U+0023 "#" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, + 0x0, 0xa3, 0x0, 0x0, 0x5b, 0x0, 0xe0, 0x0, + 0x0, 0x96, 0x4, 0xb0, 0x0, 0x0, 0xe1, 0x9, + 0x60, 0x2, 0xff, 0xff, 0xff, 0xff, 0x0, 0x9, + 0x60, 0x4b, 0x0, 0x0, 0xe, 0x10, 0x96, 0x0, + 0x0, 0x4c, 0x0, 0xe1, 0x0, 0x7f, 0xff, 0xff, + 0xff, 0xa0, 0x0, 0xe2, 0x9, 0x70, 0x0, 0x3, + 0xd0, 0xe, 0x20, 0x0, 0x8, 0x80, 0x3d, 0x0, + 0x0, 0xb, 0x30, 0x68, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, + + /* U+0024 "$" */ + 0x0, 0x0, 0x1, 0x40, 0x0, 0x0, 0x0, 0x57, + 0x0, 0x0, 0x0, 0x7, 0x50, 0x0, 0x5, 0xcf, + 0xfc, 0x60, 0x7, 0xe3, 0xc, 0xaf, 0x60, 0xf7, + 0x0, 0xc0, 0xb6, 0x1f, 0x90, 0x1b, 0x4, 0x50, + 0xff, 0x54, 0x80, 0x0, 0x6, 0xff, 0xe8, 0x0, + 0x0, 0x2, 0xbf, 0xfe, 0x50, 0x0, 0x0, 0xc7, + 0xff, 0x50, 0x0, 0xc, 0x2, 0xfc, 0x49, 0x2, + 0xa0, 0xa, 0xe3, 0xf1, 0x48, 0x0, 0xcb, 0x2f, + 0xea, 0x51, 0x8f, 0x20, 0x4a, 0xff, 0xd9, 0x20, + 0x0, 0xc, 0x0, 0x0, 0x0, 0x0, 0xc0, 0x0, + 0x0, + + /* U+0025 "%" */ + 0x1, 0xac, 0xc8, 0x0, 0x0, 0x1d, 0x10, 0x0, + 0xd9, 0x0, 0xd8, 0x0, 0xa, 0x60, 0x0, 0x3f, + 0x40, 0x9, 0xe0, 0x4, 0xc0, 0x0, 0x2, 0xf4, + 0x0, 0x9e, 0x0, 0xd3, 0x0, 0x0, 0xc, 0xa0, + 0x1e, 0x70, 0x88, 0x0, 0x0, 0x0, 0x18, 0xcc, + 0x60, 0x2d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0xb, 0x40, 0x9c, 0xb3, 0x0, 0x0, 0x0, 0x5, + 0xb0, 0xc9, 0x3, 0xf3, 0x0, 0x0, 0x1, 0xd1, + 0x3f, 0x30, 0xd, 0xa0, 0x0, 0x0, 0x97, 0x6, + 0xf1, 0x0, 0xac, 0x0, 0x0, 0x3c, 0x0, 0x4f, + 0x30, 0xc, 0xa0, 0x0, 0xd, 0x30, 0x0, 0xd8, + 0x2, 0xf4, 0x0, 0x7, 0x90, 0x0, 0x1, 0xbc, + 0xc5, 0x0, + + /* U+0026 "&" */ + 0x0, 0x7, 0xdd, 0xd6, 0x0, 0x0, 0x0, 0x6e, + 0x10, 0x5f, 0x40, 0x0, 0x0, 0xba, 0x0, 0xf, + 0x70, 0x0, 0x0, 0x9e, 0x0, 0x3f, 0x20, 0x0, + 0x0, 0x3f, 0xa6, 0xc3, 0x0, 0x0, 0x0, 0x2d, + 0xfb, 0x0, 0x8d, 0xdb, 0x5, 0xf5, 0xbf, 0x50, + 0xe, 0x60, 0x1f, 0x90, 0x1d, 0xf2, 0xc, 0x10, + 0x6f, 0x60, 0x3, 0xfd, 0x1c, 0x0, 0x6f, 0x50, + 0x0, 0x6f, 0xc8, 0x0, 0x3f, 0x90, 0x0, 0x9, + 0xf8, 0x0, 0xa, 0xf4, 0x0, 0xa, 0xef, 0x60, + 0x0, 0x6c, 0xca, 0xa3, 0x1c, 0xfc, + + /* U+0027 "'" */ + 0xb, 0xa0, 0xfe, 0xc, 0xb0, 0x98, 0x6, 0x50, + 0x11, + + /* U+0028 "(" */ + 0x0, 0xb, 0x30, 0xa, 0x70, 0x4, 0xd0, 0x0, + 0xc7, 0x0, 0x3f, 0x10, 0x8, 0xe0, 0x0, 0xbb, + 0x0, 0xd, 0xa0, 0x0, 0xe9, 0x0, 0xd, 0xa0, + 0x0, 0xbb, 0x0, 0x8, 0xe0, 0x0, 0x3f, 0x10, + 0x0, 0xd7, 0x0, 0x4, 0xd0, 0x0, 0xa, 0x70, + 0x0, 0xb, 0x30, + + /* U+0029 ")" */ + 0x2c, 0x0, 0x0, 0x6b, 0x0, 0x0, 0xc5, 0x0, + 0x6, 0xd0, 0x0, 0xf, 0x40, 0x0, 0xd9, 0x0, + 0xa, 0xc0, 0x0, 0x9e, 0x0, 0x8, 0xf0, 0x0, + 0x9e, 0x0, 0xa, 0xc0, 0x0, 0xd9, 0x0, 0xf, + 0x40, 0x5, 0xd0, 0x0, 0xc5, 0x0, 0x5b, 0x0, + 0x2c, 0x0, 0x0, + + /* U+002A "*" */ + 0x0, 0x8, 0x60, 0x0, 0x7, 0x7, 0x40, 0x60, + 0x19, 0xc8, 0x7c, 0x80, 0x0, 0x3e, 0xd1, 0x0, + 0x19, 0xc8, 0x7c, 0x80, 0x7, 0x7, 0x40, 0x70, + 0x0, 0x8, 0x60, 0x0, + + /* U+002B "+" */ + 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, 0x79, 0x0, + 0x0, 0x0, 0x7, 0x90, 0x0, 0x0, 0x0, 0x79, + 0x0, 0x0, 0xdf, 0xff, 0xff, 0xff, 0x2, 0x22, + 0x9a, 0x22, 0x20, 0x0, 0x7, 0x90, 0x0, 0x0, + 0x0, 0x79, 0x0, 0x0, 0x0, 0x7, 0x90, 0x0, + 0x0, + + /* U+002C "," */ + 0x0, 0x20, 0x8, 0xf7, 0x7, 0xfc, 0x0, 0x6a, + 0x6, 0xd3, 0x6, 0x10, + + /* U+002D "-" */ + 0x1, 0x11, 0x11, 0x1f, 0xff, 0xf9, 0x4, 0x44, + 0x42, + + /* U+002E "." */ + 0x29, 0x3a, 0xfc, 0x5e, 0x60, + + /* U+002F "/" */ + 0x0, 0x0, 0xc, 0x50, 0x0, 0x1, 0xf0, 0x0, + 0x0, 0x6b, 0x0, 0x0, 0xa, 0x60, 0x0, 0x0, + 0xf2, 0x0, 0x0, 0x4d, 0x0, 0x0, 0x9, 0x80, + 0x0, 0x0, 0xd4, 0x0, 0x0, 0x2f, 0x0, 0x0, + 0x7, 0xa0, 0x0, 0x0, 0xb6, 0x0, 0x0, 0xf, + 0x10, 0x0, 0x5, 0xc0, 0x0, 0x0, 0x97, 0x0, + 0x0, 0xe, 0x30, 0x0, 0x3, 0xe0, 0x0, 0x0, + 0x79, 0x0, 0x0, 0x0, + + /* U+0030 "0" */ + 0x0, 0x5, 0xcf, 0xe9, 0x10, 0x0, 0x7, 0xf6, + 0x2, 0xcd, 0x10, 0x3, 0xf8, 0x0, 0x2, 0xfa, + 0x0, 0xaf, 0x30, 0x0, 0xc, 0xf1, 0xf, 0xf0, + 0x0, 0x0, 0x8f, 0x51, 0xfe, 0x0, 0x0, 0x7, + 0xf7, 0x2f, 0xd0, 0x0, 0x0, 0x6f, 0x91, 0xfe, + 0x0, 0x0, 0x7, 0xf7, 0xf, 0xf0, 0x0, 0x0, + 0x8f, 0x50, 0xaf, 0x30, 0x0, 0xc, 0xf1, 0x3, + 0xf8, 0x0, 0x2, 0xfa, 0x0, 0x8, 0xf5, 0x2, + 0xcd, 0x10, 0x0, 0x5, 0xdf, 0xe9, 0x10, 0x0, + + /* U+0031 "1" */ + 0x0, 0x1, 0xb0, 0x0, 0x3, 0x7e, 0xe0, 0x0, + 0x27, 0x7e, 0xe0, 0x0, 0x0, 0xd, 0xe0, 0x0, + 0x0, 0xd, 0xe0, 0x0, 0x0, 0xd, 0xe0, 0x0, + 0x0, 0xd, 0xe0, 0x0, 0x0, 0xd, 0xe0, 0x0, + 0x0, 0xd, 0xe0, 0x0, 0x0, 0xd, 0xe0, 0x0, + 0x0, 0xd, 0xe0, 0x0, 0x0, 0xf, 0xf0, 0x0, + 0x4d, 0xff, 0xfe, 0xd2, + + /* U+0032 "2" */ + 0x0, 0x6d, 0xfd, 0x70, 0x0, 0x7d, 0x99, 0xef, + 0x80, 0x4a, 0x0, 0x2, 0xff, 0x0, 0x0, 0x0, + 0xb, 0xf2, 0x0, 0x0, 0x0, 0xbf, 0x0, 0x0, + 0x0, 0xe, 0xa0, 0x0, 0x0, 0x7, 0xe1, 0x0, + 0x0, 0x2, 0xf4, 0x0, 0x0, 0x1, 0xe5, 0x0, + 0x0, 0x1, 0xc5, 0x0, 0x4, 0x0, 0xc5, 0x0, + 0x5, 0x90, 0xbd, 0x99, 0x9b, 0xf6, 0xaf, 0xff, + 0xff, 0xff, 0x20, + + /* U+0033 "3" */ + 0x0, 0x2a, 0xee, 0xa1, 0x0, 0xd, 0xa8, 0xdf, + 0xb0, 0x8, 0x30, 0x0, 0xdf, 0x0, 0x0, 0x0, + 0xc, 0xe0, 0x0, 0x0, 0x3, 0xe4, 0x0, 0x0, + 0x17, 0xa1, 0x0, 0x0, 0x3d, 0xff, 0xf6, 0x0, + 0x0, 0x0, 0x4e, 0xf5, 0x0, 0x0, 0x0, 0x4f, + 0xb2, 0xc2, 0x0, 0x0, 0xfb, 0x8f, 0x40, 0x0, + 0x2f, 0x83, 0xfc, 0x10, 0xb, 0xd0, 0x3, 0xbd, + 0xdc, 0x80, 0x0, + + /* U+0034 "4" */ + 0x0, 0x0, 0x0, 0x1e, 0x30, 0x0, 0x0, 0x0, + 0xc, 0xf3, 0x0, 0x0, 0x0, 0x8, 0xff, 0x30, + 0x0, 0x0, 0x4, 0xd8, 0xf3, 0x0, 0x0, 0x1, + 0xe2, 0x7f, 0x30, 0x0, 0x0, 0xc5, 0x7, 0xf3, + 0x0, 0x0, 0x99, 0x0, 0x7f, 0x30, 0x0, 0x5c, + 0x0, 0x7, 0xf3, 0x0, 0x2d, 0x10, 0x0, 0x7f, + 0x30, 0xa, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x0, + 0x0, 0x0, 0x7f, 0x30, 0x0, 0x0, 0x0, 0x9, + 0xf5, 0x0, 0x0, 0x0, 0x4d, 0xff, 0xfd, 0x10, + + /* U+0035 "5" */ + 0x0, 0xcf, 0xff, 0xfe, 0x0, 0xe, 0xcc, 0xcc, + 0xb0, 0x1, 0xd0, 0x0, 0x0, 0x0, 0x3a, 0x0, + 0x0, 0x0, 0x6, 0xc6, 0x40, 0x0, 0x0, 0x8f, + 0xff, 0xf9, 0x0, 0x0, 0x13, 0x8e, 0xfb, 0x0, + 0x0, 0x0, 0x1d, 0xf3, 0x0, 0x0, 0x0, 0x4f, + 0x72, 0xe4, 0x0, 0x1, 0xf6, 0x7f, 0x60, 0x0, + 0x3f, 0x32, 0xfd, 0x10, 0x1c, 0x90, 0x2, 0xad, + 0xdc, 0x60, 0x0, + + /* U+0036 "6" */ + 0x0, 0x0, 0x2, 0x7b, 0x30, 0x0, 0x0, 0x9f, + 0x71, 0x0, 0x0, 0x2d, 0xd2, 0x0, 0x0, 0x0, + 0xcf, 0x20, 0x0, 0x0, 0x6, 0xf6, 0x0, 0x0, + 0x0, 0xc, 0xf3, 0xae, 0xeb, 0x20, 0xf, 0xe8, + 0x44, 0x9f, 0xe1, 0x1f, 0xa0, 0x0, 0x9, 0xf6, + 0x1f, 0xb0, 0x0, 0x4, 0xf9, 0xf, 0xd0, 0x0, + 0x3, 0xf7, 0x8, 0xf3, 0x0, 0x6, 0xf3, 0x1, + 0xdd, 0x20, 0x2d, 0x90, 0x0, 0x9, 0xde, 0xc6, + 0x0, + + /* U+0037 "7" */ + 0x1f, 0xff, 0xff, 0xff, 0xa5, 0xfd, 0xcc, 0xcc, + 0xe4, 0x94, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x0, + 0x8, 0x70, 0x0, 0x0, 0x1, 0xe1, 0x0, 0x0, + 0x0, 0x8a, 0x0, 0x0, 0x0, 0x1f, 0x30, 0x0, + 0x0, 0x9, 0xd0, 0x0, 0x0, 0x1, 0xf6, 0x0, + 0x0, 0x0, 0x9f, 0x0, 0x0, 0x0, 0x2f, 0x90, + 0x0, 0x0, 0x9, 0xf2, 0x0, 0x0, 0x2, 0xfc, + 0x0, 0x0, 0x0, + + /* U+0038 "8" */ + 0x0, 0x3b, 0xde, 0xb4, 0x0, 0x3, 0xf6, 0x0, + 0x7f, 0x30, 0xa, 0xd0, 0x0, 0xd, 0x90, 0xc, + 0xf0, 0x0, 0xd, 0xa0, 0x8, 0xfa, 0x10, 0x2f, + 0x30, 0x1, 0xbf, 0xe8, 0xa2, 0x0, 0x0, 0x1c, + 0xef, 0xe4, 0x0, 0x4, 0xd3, 0x6, 0xef, 0x70, + 0xf, 0x90, 0x0, 0x1d, 0xf0, 0x3f, 0x60, 0x0, + 0x6, 0xf2, 0x1f, 0x80, 0x0, 0x7, 0xf0, 0x9, + 0xf4, 0x0, 0x4f, 0x80, 0x0, 0x6c, 0xed, 0xc5, + 0x0, + + /* U+0039 "9" */ + 0x0, 0x2b, 0xde, 0xb3, 0x0, 0x3, 0xf6, 0x0, + 0x9f, 0x40, 0xd, 0xc0, 0x0, 0xd, 0xe0, 0x1f, + 0x90, 0x0, 0x8, 0xf4, 0x3f, 0x90, 0x0, 0x5, + 0xf7, 0x1f, 0xd0, 0x0, 0x4, 0xf8, 0xb, 0xfa, + 0x20, 0x3b, 0xf7, 0x1, 0xaf, 0xff, 0x8a, 0xf3, + 0x0, 0x0, 0x20, 0xe, 0xd0, 0x0, 0x0, 0x0, + 0x9f, 0x30, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, + 0x2, 0xae, 0x40, 0x0, 0x0, 0xac, 0x71, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + + /* U+003A ":" */ + 0x29, 0x3a, 0xfc, 0x5e, 0x60, 0x0, 0x0, 0x0, + 0x0, 0x29, 0x3a, 0xfc, 0x5e, 0x60, + + /* U+003B ";" */ + 0x5, 0xe6, 0xa, 0xfc, 0x2, 0x93, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x20, 0x8, 0xf7, 0x7, 0xfc, + 0x0, 0x6a, 0x6, 0xd3, 0x6, 0x10, + + /* U+003C "<" */ + 0x0, 0x0, 0x0, 0x10, 0x0, 0x4, 0xe4, 0x0, + 0x1a, 0xf7, 0x0, 0x6f, 0xa1, 0x0, 0x1c, 0xf6, + 0x0, 0x0, 0x6, 0xec, 0x20, 0x0, 0x1, 0xaf, + 0x30, 0x0, 0x0, 0x43, + + /* U+003D "=" */ + 0xcf, 0xff, 0xff, 0xff, 0x11, 0x22, 0x22, 0x22, + 0x20, 0x0, 0x0, 0x0, 0x0, 0xc, 0xff, 0xff, + 0xff, 0xf1, 0x12, 0x22, 0x22, 0x22, 0x0, + + /* U+003E ">" */ + 0x20, 0x0, 0x0, 0xd9, 0x0, 0x0, 0x3c, 0xe4, + 0x0, 0x0, 0x6e, 0xa1, 0x0, 0x2b, 0xe5, 0x7, + 0xfa, 0x10, 0xcd, 0x40, 0x0, 0x60, 0x0, 0x0, + + /* U+003F "?" */ + 0x4, 0xce, 0xeb, 0x20, 0x3f, 0xa0, 0x1b, 0xe1, + 0x6f, 0x50, 0x6, 0xf4, 0x3, 0x0, 0x8, 0xf4, + 0x0, 0x0, 0x3f, 0xe0, 0x0, 0x3, 0xfe, 0x30, + 0x0, 0xe, 0xe3, 0x0, 0x0, 0x2f, 0x30, 0x0, + 0x0, 0xd, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, + 0x0, 0x29, 0x30, 0x0, 0x0, 0xaf, 0xc0, 0x0, + 0x0, 0x5e, 0x60, 0x0, + + /* U+0040 "@" */ + 0x0, 0x0, 0x4, 0xac, 0xbb, 0xb7, 0x0, 0x0, + 0x0, 0x0, 0x9b, 0x20, 0x0, 0x7, 0xc3, 0x0, + 0x0, 0x1d, 0x70, 0x0, 0x0, 0x0, 0x3e, 0x10, + 0x0, 0x99, 0x0, 0x19, 0xdc, 0x8b, 0x8, 0xa0, + 0x4, 0xe1, 0x1, 0xd8, 0x2, 0xf7, 0x3, 0xe0, + 0xa, 0x90, 0xa, 0xc0, 0x5, 0xf3, 0x0, 0xf1, + 0xf, 0x60, 0x2f, 0x50, 0xb, 0xf0, 0x1, 0xf0, + 0xf, 0x30, 0x6f, 0x10, 0x2e, 0xb0, 0x3, 0xd0, + 0xf, 0x30, 0x8f, 0x0, 0x8c, 0x80, 0xa, 0x70, + 0xe, 0x60, 0x7f, 0x6a, 0x2b, 0x80, 0x7b, 0x0, + 0xa, 0xa0, 0xa, 0xb3, 0x3, 0xba, 0x60, 0x0, + 0x2, 0xf4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x6e, 0x30, 0x0, 0x0, 0x0, 0x11, 0x0, + 0x0, 0x5, 0xe9, 0x41, 0x1, 0x39, 0xc2, 0x0, + 0x0, 0x0, 0x7, 0xac, 0xdb, 0x94, 0x0, 0x0, + + /* U+0041 "A" */ + 0x0, 0x0, 0xd, 0xf1, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xbf, 0x80, 0x0, 0x0, 0x0, 0x0, 0x1e, + 0xee, 0x0, 0x0, 0x0, 0x0, 0x7, 0x87, 0xf6, + 0x0, 0x0, 0x0, 0x0, 0xe2, 0x1f, 0xc0, 0x0, + 0x0, 0x0, 0x4c, 0x0, 0xaf, 0x30, 0x0, 0x0, + 0xb, 0x50, 0x3, 0xfa, 0x0, 0x0, 0x2, 0xe0, + 0x0, 0xd, 0xf1, 0x0, 0x0, 0x8e, 0xcc, 0xcc, + 0xef, 0x80, 0x0, 0xe, 0x20, 0x0, 0x0, 0xfe, + 0x0, 0x5, 0xc0, 0x0, 0x0, 0x9, 0xf5, 0x0, + 0xc8, 0x0, 0x0, 0x0, 0x5f, 0xc0, 0xcf, 0xfc, + 0x10, 0x0, 0xae, 0xff, 0xc0, + + /* U+0042 "B" */ + 0x4e, 0xff, 0xcb, 0xdd, 0x81, 0x0, 0x0, 0xbf, + 0x20, 0x4, 0xfd, 0x0, 0x0, 0x8f, 0x20, 0x0, + 0x9f, 0x40, 0x0, 0x8f, 0x20, 0x0, 0x7f, 0x60, + 0x0, 0x8f, 0x20, 0x0, 0xaf, 0x20, 0x0, 0x8f, + 0x20, 0x6, 0xf6, 0x0, 0x0, 0x8f, 0xdd, 0xfe, + 0x60, 0x0, 0x0, 0x8f, 0x20, 0x3, 0xce, 0x30, + 0x0, 0x8f, 0x20, 0x0, 0x1f, 0xd0, 0x0, 0x8f, + 0x20, 0x0, 0xd, 0xf1, 0x0, 0x8f, 0x20, 0x0, + 0xe, 0xe0, 0x0, 0xbf, 0x60, 0x0, 0x8f, 0x60, + 0x4e, 0xff, 0xfc, 0xcc, 0xb4, 0x0, + + /* U+0043 "C" */ + 0x0, 0x0, 0x7b, 0xee, 0xc8, 0x10, 0x0, 0x2c, + 0xc3, 0x0, 0x5f, 0xd0, 0x0, 0xdc, 0x0, 0x0, + 0x5, 0xd0, 0x7, 0xf4, 0x0, 0x0, 0x0, 0xb0, + 0xd, 0xe0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x2f, 0xb0, 0x0, 0x0, + 0x0, 0x0, 0x1f, 0xd0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xa, 0xf6, + 0x0, 0x0, 0x0, 0x93, 0x1, 0xfe, 0x10, 0x0, + 0x2, 0xf1, 0x0, 0x4e, 0xe5, 0x10, 0x4e, 0xf0, + 0x0, 0x1, 0x9c, 0xfe, 0xc8, 0x20, + + /* U+0044 "D" */ + 0x5f, 0xff, 0xdd, 0xfe, 0xa4, 0x0, 0x0, 0xb, + 0xf2, 0x0, 0x39, 0xf9, 0x0, 0x0, 0x8f, 0x20, + 0x0, 0x7, 0xf9, 0x0, 0x8, 0xf2, 0x0, 0x0, + 0xd, 0xf3, 0x0, 0x8f, 0x20, 0x0, 0x0, 0x6f, + 0x80, 0x8, 0xf2, 0x0, 0x0, 0x3, 0xfb, 0x0, + 0x8f, 0x20, 0x0, 0x0, 0x2f, 0xc0, 0x8, 0xf2, + 0x0, 0x0, 0x3, 0xfb, 0x0, 0x8f, 0x20, 0x0, + 0x0, 0x5f, 0x70, 0x8, 0xf2, 0x0, 0x0, 0xb, + 0xf1, 0x0, 0x8f, 0x20, 0x0, 0x3, 0xf6, 0x0, + 0xb, 0xf6, 0x0, 0x16, 0xf8, 0x0, 0x5f, 0xff, + 0xff, 0xdc, 0x92, 0x0, 0x0, + + /* U+0045 "E" */ + 0x5f, 0xff, 0xdd, 0xdd, 0xff, 0xb0, 0x0, 0xbf, + 0x20, 0x0, 0xa, 0xb0, 0x0, 0x8f, 0x20, 0x0, + 0x0, 0x90, 0x0, 0x8f, 0x20, 0x0, 0x0, 0x0, + 0x0, 0x8f, 0x20, 0x0, 0x82, 0x0, 0x0, 0x8f, + 0x20, 0x0, 0xd2, 0x0, 0x0, 0x8f, 0xdd, 0xdf, + 0xf2, 0x0, 0x0, 0x8f, 0x20, 0x0, 0xc2, 0x0, + 0x0, 0x8f, 0x20, 0x0, 0x10, 0x0, 0x0, 0x8f, + 0x20, 0x0, 0x0, 0x22, 0x0, 0x8f, 0x20, 0x0, + 0x0, 0xb2, 0x0, 0xbf, 0x60, 0x0, 0x6, 0xf0, + 0x4e, 0xff, 0xfc, 0xbb, 0xdf, 0xd0, + + /* U+0046 "F" */ + 0x5f, 0xff, 0xdd, 0xde, 0xff, 0x60, 0xb, 0xf2, + 0x0, 0x3, 0xf6, 0x0, 0x8f, 0x20, 0x0, 0x7, + 0x60, 0x8, 0xf2, 0x0, 0x0, 0x12, 0x0, 0x8f, + 0x20, 0x0, 0x10, 0x0, 0x8, 0xf2, 0x0, 0x2c, + 0x0, 0x0, 0x8f, 0xdd, 0xdf, 0xc0, 0x0, 0x8, + 0xf2, 0x0, 0x3c, 0x0, 0x0, 0x8f, 0x20, 0x0, + 0xb0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x0, + 0x8f, 0x20, 0x0, 0x0, 0x0, 0xb, 0xf5, 0x0, + 0x0, 0x0, 0x4e, 0xff, 0xfe, 0x60, 0x0, 0x0, + + /* U+0047 "G" */ + 0x0, 0x0, 0x6b, 0xee, 0xc9, 0x20, 0x0, 0x2, + 0xcc, 0x40, 0x4, 0xdf, 0x0, 0x0, 0xcc, 0x0, + 0x0, 0x2, 0xf0, 0x0, 0x7f, 0x40, 0x0, 0x0, + 0x6, 0x0, 0xd, 0xe0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2f, + 0xb0, 0x0, 0x2, 0xdd, 0xdd, 0xb1, 0xfd, 0x0, + 0x0, 0x0, 0xaf, 0x70, 0xe, 0xf0, 0x0, 0x0, + 0x6, 0xf4, 0x0, 0xaf, 0x60, 0x0, 0x0, 0x6f, + 0x30, 0x1, 0xfe, 0x10, 0x0, 0x6, 0xf3, 0x0, + 0x4, 0xee, 0x51, 0x3, 0xcf, 0x20, 0x0, 0x1, + 0x8b, 0xee, 0xc8, 0x10, 0x0, + + /* U+0048 "H" */ + 0x4e, 0xff, 0xfd, 0x0, 0xc, 0xff, 0xfe, 0x50, + 0xb, 0xf5, 0x0, 0x0, 0x4, 0xfb, 0x0, 0x0, + 0x8f, 0x20, 0x0, 0x0, 0x2f, 0x90, 0x0, 0x8, + 0xf2, 0x0, 0x0, 0x2, 0xf9, 0x0, 0x0, 0x8f, + 0x20, 0x0, 0x0, 0x2f, 0x90, 0x0, 0x8, 0xf2, + 0x0, 0x0, 0x2, 0xf9, 0x0, 0x0, 0x8f, 0xdd, + 0xdd, 0xdd, 0xdf, 0x90, 0x0, 0x8, 0xf2, 0x0, + 0x0, 0x2, 0xf9, 0x0, 0x0, 0x8f, 0x20, 0x0, + 0x0, 0x2f, 0x90, 0x0, 0x8, 0xf2, 0x0, 0x0, + 0x2, 0xf9, 0x0, 0x0, 0x8f, 0x20, 0x0, 0x0, + 0x2f, 0x90, 0x0, 0xb, 0xf4, 0x0, 0x0, 0x4, + 0xfb, 0x0, 0x4e, 0xff, 0xfd, 0x0, 0xc, 0xff, + 0xfe, 0x50, + + /* U+0049 "I" */ + 0x4e, 0xff, 0xfd, 0x0, 0xb, 0xf5, 0x0, 0x0, + 0x8f, 0x20, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x8f, + 0x20, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x8f, 0x20, + 0x0, 0x8, 0xf2, 0x0, 0x0, 0x8f, 0x20, 0x0, + 0x8, 0xf2, 0x0, 0x0, 0x8f, 0x20, 0x0, 0xb, + 0xf4, 0x0, 0x4e, 0xff, 0xfd, 0x0, + + /* U+004A "J" */ + 0x0, 0x3, 0xdf, 0xff, 0xd1, 0x0, 0x0, 0x9, + 0xf6, 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0, 0x0, + 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, 0x7, 0xf4, + 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0, 0x0, 0x0, + 0x7, 0xf4, 0x0, 0x0, 0x0, 0x7, 0xf4, 0x0, + 0x0, 0x0, 0x7, 0xf4, 0x0, 0x26, 0x0, 0x7, + 0xf3, 0x0, 0xbf, 0x0, 0x9, 0xf1, 0x0, 0x9f, + 0x60, 0x1e, 0xa0, 0x0, 0x8, 0xdd, 0xd8, 0x0, + 0x0, + + /* U+004B "K" */ + 0x4e, 0xff, 0xfd, 0x1, 0xcf, 0xfe, 0x50, 0xb, + 0xf5, 0x0, 0x0, 0xea, 0x0, 0x0, 0x8f, 0x30, + 0x0, 0xa9, 0x0, 0x0, 0x8, 0xf2, 0x0, 0xa9, + 0x0, 0x0, 0x0, 0x8f, 0x20, 0xb9, 0x0, 0x0, + 0x0, 0x8, 0xf3, 0xb9, 0x0, 0x0, 0x0, 0x0, + 0x8f, 0x9f, 0xb0, 0x0, 0x0, 0x0, 0x8, 0xf3, + 0xbf, 0x90, 0x0, 0x0, 0x0, 0x8f, 0x20, 0xdf, + 0x70, 0x0, 0x0, 0x8, 0xf2, 0x1, 0xef, 0x50, + 0x0, 0x0, 0x8f, 0x30, 0x3, 0xff, 0x30, 0x0, + 0xb, 0xf5, 0x0, 0x5, 0xfe, 0x30, 0x4e, 0xff, + 0xfd, 0x0, 0x5, 0xff, 0xa0, + + /* U+004C "L" */ + 0x4e, 0xff, 0xfd, 0x0, 0x0, 0x0, 0xb, 0xf5, + 0x0, 0x0, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x0, + 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x0, 0x8f, + 0x20, 0x0, 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, + 0x0, 0x0, 0x8f, 0x20, 0x0, 0x0, 0x0, 0x8, + 0xf2, 0x0, 0x0, 0x0, 0x0, 0x8f, 0x20, 0x0, + 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x15, 0x0, + 0x8f, 0x20, 0x0, 0x8, 0x70, 0xb, 0xf5, 0x0, + 0x4, 0xf4, 0x4e, 0xff, 0xfc, 0xbc, 0xff, 0x20, + + /* U+004D "M" */ + 0x7, 0xef, 0xc0, 0x0, 0x0, 0x0, 0xff, 0xe4, + 0x0, 0x4, 0xff, 0x20, 0x0, 0x0, 0x4f, 0xf0, + 0x0, 0x0, 0x2f, 0xf8, 0x0, 0x0, 0xa, 0xfe, + 0x0, 0x0, 0x4, 0xbe, 0xe0, 0x0, 0x0, 0xeb, + 0xf0, 0x0, 0x0, 0x69, 0x8f, 0x40, 0x0, 0x59, + 0x8f, 0x20, 0x0, 0x8, 0x71, 0xfa, 0x0, 0xb, + 0x36, 0xf4, 0x0, 0x0, 0xa5, 0xb, 0xf1, 0x1, + 0xd0, 0x4f, 0x60, 0x0, 0xc, 0x30, 0x5f, 0x60, + 0x77, 0x2, 0xf8, 0x0, 0x0, 0xe1, 0x0, 0xec, + 0xc, 0x10, 0xf, 0xa0, 0x0, 0xf, 0x0, 0x8, + 0xf5, 0xb0, 0x0, 0xec, 0x0, 0x2, 0xd0, 0x0, + 0x2f, 0xf5, 0x0, 0xc, 0xe0, 0x0, 0x5e, 0x0, + 0x0, 0xcf, 0x0, 0x0, 0xef, 0x20, 0x9f, 0xfd, + 0x60, 0x5, 0x90, 0x5, 0xdf, 0xfe, 0x60, + + /* U+004E "N" */ + 0x4f, 0xfe, 0x20, 0x0, 0x8, 0xff, 0xfd, 0x0, + 0x1d, 0xfc, 0x0, 0x0, 0x0, 0xe5, 0x0, 0x0, + 0x8f, 0xf9, 0x0, 0x0, 0xd, 0x30, 0x0, 0x8, + 0x8d, 0xf5, 0x0, 0x0, 0xd3, 0x0, 0x0, 0x87, + 0x2f, 0xf2, 0x0, 0xd, 0x30, 0x0, 0x8, 0x70, + 0x5f, 0xd0, 0x0, 0xd3, 0x0, 0x0, 0x87, 0x0, + 0x9f, 0xa0, 0xd, 0x30, 0x0, 0x8, 0x70, 0x0, + 0xcf, 0x60, 0xd3, 0x0, 0x0, 0x87, 0x0, 0x1, + 0xef, 0x3d, 0x30, 0x0, 0x8, 0x70, 0x0, 0x4, + 0xfe, 0xe3, 0x0, 0x0, 0x87, 0x0, 0x0, 0x7, + 0xff, 0x30, 0x0, 0xb, 0x90, 0x0, 0x0, 0xa, + 0xf3, 0x0, 0x4e, 0xff, 0xd3, 0x0, 0x0, 0xd, + 0x30, 0x0, + + /* U+004F "O" */ + 0x0, 0x0, 0x7b, 0xee, 0xb5, 0x0, 0x0, 0x2, + 0xcc, 0x41, 0x49, 0xf9, 0x0, 0x0, 0xdc, 0x0, + 0x0, 0x8, 0xf7, 0x0, 0x7f, 0x40, 0x0, 0x0, + 0xe, 0xf1, 0xd, 0xe0, 0x0, 0x0, 0x0, 0x8f, + 0x60, 0xfc, 0x0, 0x0, 0x0, 0x5, 0xf8, 0x2f, + 0xb0, 0x0, 0x0, 0x0, 0x4f, 0xa1, 0xfd, 0x0, + 0x0, 0x0, 0x5, 0xf7, 0xe, 0xf0, 0x0, 0x0, + 0x0, 0x7f, 0x40, 0x9f, 0x60, 0x0, 0x0, 0xc, + 0xe0, 0x1, 0xfd, 0x10, 0x0, 0x5, 0xf5, 0x0, + 0x4, 0xed, 0x51, 0x27, 0xf7, 0x0, 0x0, 0x1, + 0x9d, 0xfd, 0xa3, 0x0, 0x0, + + /* U+0050 "P" */ + 0x4e, 0xff, 0xcb, 0xcc, 0x70, 0x0, 0xb, 0xf2, + 0x0, 0x4f, 0xc0, 0x0, 0x8f, 0x20, 0x0, 0x8f, + 0x60, 0x8, 0xf2, 0x0, 0x4, 0xf9, 0x0, 0x8f, + 0x20, 0x0, 0x4f, 0x90, 0x8, 0xf2, 0x0, 0x8, + 0xf5, 0x0, 0x8f, 0x20, 0x6, 0xfc, 0x0, 0x8, + 0xfd, 0xde, 0xb7, 0x0, 0x0, 0x8f, 0x20, 0x0, + 0x0, 0x0, 0x8, 0xf2, 0x0, 0x0, 0x0, 0x0, + 0x8f, 0x20, 0x0, 0x0, 0x0, 0xb, 0xf5, 0x0, + 0x0, 0x0, 0x4e, 0xff, 0xfd, 0x60, 0x0, 0x0, + + /* U+0051 "Q" */ + 0x0, 0x0, 0x7b, 0xee, 0xb4, 0x0, 0x0, 0x2, + 0xcc, 0x41, 0x49, 0xf9, 0x0, 0x0, 0xdc, 0x0, + 0x0, 0x8, 0xf7, 0x0, 0x6f, 0x40, 0x0, 0x0, + 0xe, 0xf1, 0xd, 0xe0, 0x0, 0x0, 0x0, 0x8f, + 0x60, 0xfc, 0x0, 0x0, 0x0, 0x5, 0xf8, 0x2f, + 0xb0, 0x0, 0x0, 0x0, 0x4f, 0xa1, 0xfd, 0x0, + 0x0, 0x0, 0x5, 0xf8, 0xf, 0xf0, 0x0, 0x0, + 0x0, 0x7f, 0x50, 0xaf, 0x50, 0x0, 0x0, 0xc, + 0xe0, 0x2, 0xfd, 0x10, 0x0, 0x4, 0xf6, 0x0, + 0x5, 0xfd, 0x40, 0x15, 0xf8, 0x0, 0x0, 0x2, + 0x9d, 0xff, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x6, + 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0xf5, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf4, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x4b, 0xe6, 0x0, + + /* U+0052 "R" */ + 0x5f, 0xff, 0xdd, 0xec, 0x70, 0x0, 0x0, 0xb, + 0xf2, 0x0, 0x6f, 0xc0, 0x0, 0x0, 0x8f, 0x20, + 0x0, 0x9f, 0x50, 0x0, 0x8, 0xf2, 0x0, 0x6, + 0xf7, 0x0, 0x0, 0x8f, 0x20, 0x0, 0x9f, 0x30, + 0x0, 0x8, 0xf2, 0x0, 0x6f, 0x90, 0x0, 0x0, + 0x8f, 0xde, 0xf9, 0x30, 0x0, 0x0, 0x8, 0xf2, + 0x7f, 0x90, 0x0, 0x0, 0x0, 0x8f, 0x20, 0xcf, + 0x50, 0x0, 0x0, 0x8, 0xf2, 0x1, 0xfe, 0x10, + 0x0, 0x0, 0x8f, 0x20, 0x5, 0xfc, 0x0, 0x0, + 0xb, 0xf5, 0x0, 0xa, 0xfa, 0x0, 0x4e, 0xff, + 0xfd, 0x0, 0xb, 0xff, 0x40, + + /* U+0053 "S" */ + 0x0, 0x6c, 0xee, 0xb5, 0x0, 0x7, 0xe3, 0x1, + 0x8f, 0x80, 0xf, 0x80, 0x0, 0xa, 0x80, 0x1f, + 0x80, 0x0, 0x3, 0x70, 0xe, 0xf4, 0x0, 0x0, + 0x0, 0x5, 0xff, 0xc5, 0x0, 0x0, 0x0, 0x3b, + 0xff, 0xe6, 0x0, 0x0, 0x0, 0x28, 0xff, 0x70, + 0x1, 0x0, 0x0, 0x2e, 0xf0, 0x49, 0x0, 0x0, + 0x8, 0xf2, 0x3f, 0x20, 0x0, 0x9, 0xe0, 0x2f, + 0xe4, 0x0, 0x5f, 0x50, 0x1, 0x9c, 0xee, 0xb4, + 0x0, + + /* U+0054 "T" */ + 0x7f, 0xfd, 0xdf, 0xfd, 0xdf, 0xf6, 0x9e, 0x20, + 0xe, 0xd0, 0x3, 0xf7, 0xa7, 0x0, 0xe, 0xd0, + 0x0, 0x88, 0x90, 0x0, 0xe, 0xd0, 0x0, 0x18, + 0x0, 0x0, 0xe, 0xd0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xd0, + 0x0, 0x0, 0x0, 0x0, 0xe, 0xd0, 0x0, 0x0, + 0x0, 0x0, 0xe, 0xd0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xd0, 0x0, 0x0, 0x0, 0x0, 0xe, 0xd0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0xa, 0xff, 0xfe, 0x90, 0x0, + + /* U+0055 "U" */ + 0xbf, 0xff, 0xe6, 0x0, 0xd, 0xff, 0xe8, 0x2, + 0xfd, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0, 0xfb, + 0x0, 0x0, 0x0, 0x3d, 0x0, 0x0, 0xfb, 0x0, + 0x0, 0x0, 0x3d, 0x0, 0x0, 0xfb, 0x0, 0x0, + 0x0, 0x3d, 0x0, 0x0, 0xfb, 0x0, 0x0, 0x0, + 0x3d, 0x0, 0x0, 0xfb, 0x0, 0x0, 0x0, 0x3d, + 0x0, 0x0, 0xfb, 0x0, 0x0, 0x0, 0x3d, 0x0, + 0x0, 0xfc, 0x0, 0x0, 0x0, 0x4c, 0x0, 0x0, + 0xde, 0x0, 0x0, 0x0, 0x6a, 0x0, 0x0, 0x9f, + 0x50, 0x0, 0x0, 0xd5, 0x0, 0x0, 0x1e, 0xf8, + 0x33, 0x5d, 0xa0, 0x0, 0x0, 0x0, 0x8c, 0xfe, + 0xc5, 0x0, 0x0, + + /* U+0056 "V" */ + 0xcf, 0xfe, 0xa0, 0x0, 0x3c, 0xff, 0xa0, 0xcf, + 0x50, 0x0, 0x0, 0xb, 0xa0, 0x5, 0xf8, 0x0, + 0x0, 0x0, 0xe3, 0x0, 0xd, 0xe0, 0x0, 0x0, + 0x4c, 0x0, 0x0, 0x6f, 0x60, 0x0, 0xb, 0x60, + 0x0, 0x0, 0xed, 0x0, 0x1, 0xe0, 0x0, 0x0, + 0x8, 0xf4, 0x0, 0x78, 0x0, 0x0, 0x0, 0x1f, + 0xa0, 0xd, 0x20, 0x0, 0x0, 0x0, 0xaf, 0x23, + 0xb0, 0x0, 0x0, 0x0, 0x3, 0xf8, 0xa5, 0x0, + 0x0, 0x0, 0x0, 0xc, 0xed, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x4f, 0x80, 0x0, 0x0, 0x0, 0x0, + 0x0, 0xd1, 0x0, 0x0, 0x0, + + /* U+0057 "W" */ + 0xcf, 0xfe, 0xa0, 0x8f, 0xff, 0xb0, 0x8, 0xef, + 0xe2, 0xc, 0xf4, 0x0, 0x8, 0xf5, 0x0, 0x0, + 0x2f, 0x20, 0x6, 0xf7, 0x0, 0x2, 0xf8, 0x0, + 0x0, 0x4b, 0x0, 0x1, 0xfd, 0x0, 0x0, 0xdd, + 0x0, 0x0, 0xa5, 0x0, 0x0, 0xaf, 0x20, 0x0, + 0xff, 0x20, 0x0, 0xe0, 0x0, 0x0, 0x4f, 0x80, + 0x4, 0xbf, 0x80, 0x5, 0xa0, 0x0, 0x0, 0xe, + 0xd0, 0xa, 0x3c, 0xd0, 0xa, 0x40, 0x0, 0x0, + 0x9, 0xf3, 0xd, 0x7, 0xf2, 0xe, 0x0, 0x0, + 0x0, 0x3, 0xf9, 0x58, 0x1, 0xf7, 0x59, 0x0, + 0x0, 0x0, 0x0, 0xde, 0xa3, 0x0, 0xcc, 0xb3, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0xd0, 0x0, 0x6f, + 0xd0, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x70, 0x0, + 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0, 0xb, 0x20, + 0x0, 0xb, 0x20, 0x0, 0x0, + + /* U+0058 "X" */ + 0x7f, 0xff, 0xd8, 0x0, 0xbf, 0xfe, 0x50, 0x2e, + 0xf4, 0x0, 0x0, 0x9d, 0x10, 0x0, 0x4f, 0xc0, + 0x0, 0x2e, 0x20, 0x0, 0x0, 0x9f, 0x70, 0xc, + 0x50, 0x0, 0x0, 0x0, 0xdf, 0x29, 0x90, 0x0, + 0x0, 0x0, 0x2, 0xfe, 0xc0, 0x0, 0x0, 0x0, + 0x0, 0xa, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x4, + 0xdb, 0xf4, 0x0, 0x0, 0x0, 0x1, 0xe2, 0x1e, + 0xe1, 0x0, 0x0, 0x0, 0xc5, 0x0, 0x5f, 0xb0, + 0x0, 0x0, 0x99, 0x0, 0x0, 0xaf, 0x60, 0x0, + 0x6f, 0x10, 0x0, 0x1, 0xff, 0x30, 0xbf, 0xfd, + 0x60, 0x6, 0xdf, 0xff, 0x80, + + /* U+0059 "Y" */ + 0xcf, 0xfe, 0xa0, 0x2, 0xcf, 0xfb, 0xc, 0xf5, + 0x0, 0x0, 0xa, 0xb0, 0x2, 0xfb, 0x0, 0x0, + 0x1e, 0x10, 0x0, 0x8f, 0x40, 0x0, 0xa6, 0x0, + 0x0, 0xe, 0xd0, 0x4, 0xc0, 0x0, 0x0, 0x5, + 0xf8, 0xd, 0x30, 0x0, 0x0, 0x0, 0xbf, 0xa8, + 0x0, 0x0, 0x0, 0x0, 0x2f, 0xe0, 0x0, 0x0, + 0x0, 0x0, 0xe, 0xc0, 0x0, 0x0, 0x0, 0x0, + 0xe, 0xc0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xc0, + 0x0, 0x0, 0x0, 0x0, 0x1f, 0xe0, 0x0, 0x0, + 0x0, 0x9, 0xff, 0xfe, 0x70, 0x0, + + /* U+005A "Z" */ + 0xf, 0xff, 0xee, 0xee, 0xff, 0x50, 0xf9, 0x0, + 0x0, 0x4f, 0xb0, 0xe, 0x0, 0x0, 0xd, 0xf2, + 0x0, 0x40, 0x0, 0x9, 0xf7, 0x0, 0x0, 0x0, + 0x3, 0xfc, 0x0, 0x0, 0x0, 0x0, 0xdf, 0x20, + 0x0, 0x0, 0x0, 0x9f, 0x70, 0x0, 0x0, 0x0, + 0x3f, 0xc0, 0x0, 0x0, 0x0, 0xd, 0xf3, 0x0, + 0x0, 0x0, 0x8, 0xf8, 0x0, 0x0, 0x7, 0x3, + 0xfd, 0x0, 0x0, 0x7, 0x80, 0xdf, 0x30, 0x0, + 0x4, 0xf6, 0x7f, 0xfd, 0xdd, 0xde, 0xff, 0x30, + + /* U+005B "[" */ + 0x7f, 0xc8, 0x7d, 0x0, 0x7c, 0x0, 0x7c, 0x0, + 0x7c, 0x0, 0x7c, 0x0, 0x7c, 0x0, 0x7c, 0x0, + 0x7c, 0x0, 0x7c, 0x0, 0x7c, 0x0, 0x7c, 0x0, + 0x7c, 0x0, 0x7c, 0x0, 0x7c, 0x0, 0x7d, 0x0, + 0x6c, 0xb8, + + /* U+005C "\\" */ + 0x2e, 0x0, 0x0, 0x0, 0xd3, 0x0, 0x0, 0x9, + 0x80, 0x0, 0x0, 0x4d, 0x0, 0x0, 0x0, 0xf1, + 0x0, 0x0, 0xb, 0x60, 0x0, 0x0, 0x6b, 0x0, + 0x0, 0x1, 0xf0, 0x0, 0x0, 0xd, 0x40, 0x0, + 0x0, 0x89, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, + 0xe, 0x20, 0x0, 0x0, 0xa7, 0x0, 0x0, 0x5, + 0xc0, 0x0, 0x0, 0x1f, 0x10, 0x0, 0x0, 0xc5, + 0x0, 0x0, 0x7, 0xa0, + + /* U+005D "]" */ + 0x1a, 0xef, 0x10, 0x3, 0xf1, 0x0, 0x2f, 0x10, + 0x2, 0xf1, 0x0, 0x2f, 0x10, 0x2, 0xf1, 0x0, + 0x2f, 0x10, 0x2, 0xf1, 0x0, 0x2f, 0x10, 0x2, + 0xf1, 0x0, 0x2f, 0x10, 0x2, 0xf1, 0x0, 0x2f, + 0x10, 0x2, 0xf1, 0x0, 0x2f, 0x10, 0x4, 0xf1, + 0x1a, 0xcc, 0x10, + + /* U+005E "^" */ + 0x0, 0x4, 0x70, 0x0, 0x0, 0xe, 0xe5, 0x0, + 0x0, 0x8a, 0x5d, 0x0, 0x1, 0xe2, 0xd, 0x50, + 0x8, 0xa0, 0x5, 0xd0, 0x1f, 0x20, 0x0, 0xd5, + + /* U+005F "_" */ + 0xaf, 0xff, 0xff, 0xf8, + + /* U+0060 "`" */ + 0xb, 0xf1, 0x0, 0xc, 0x80, 0x0, 0x1c, 0x0, + + /* U+0061 "a" */ + 0x0, 0x7d, 0xee, 0x80, 0x0, 0x6, 0xf3, 0x5, + 0xf7, 0x0, 0x9, 0xf0, 0x0, 0xfb, 0x0, 0x2, + 0x30, 0x0, 0xdd, 0x0, 0x0, 0x3, 0x9d, 0xfc, + 0x0, 0x2, 0xbb, 0x40, 0xdc, 0x0, 0xe, 0xb0, + 0x0, 0xdc, 0x0, 0x2f, 0xa0, 0x0, 0xdd, 0x0, + 0xf, 0xf7, 0x69, 0xcf, 0x62, 0x5, 0xdf, 0xa1, + 0x3d, 0xc2, + + /* U+0062 "b" */ + 0x39, 0xe2, 0x0, 0x0, 0x0, 0x6e, 0xf2, 0x0, + 0x0, 0x0, 0x7, 0xf2, 0x0, 0x0, 0x0, 0x7, + 0xf2, 0x0, 0x0, 0x0, 0x7, 0xf2, 0x8d, 0xeb, + 0x20, 0x7, 0xfa, 0x64, 0x8f, 0xe1, 0x7, 0xf2, + 0x0, 0x6, 0xf8, 0x7, 0xf2, 0x0, 0x0, 0xfc, + 0x7, 0xf2, 0x0, 0x0, 0xce, 0x7, 0xf2, 0x0, + 0x0, 0xbc, 0x7, 0xf2, 0x0, 0x0, 0xda, 0x7, + 0xf4, 0x0, 0x3, 0xf3, 0x7, 0xfc, 0x10, 0x2d, + 0x80, 0x0, 0x5b, 0xdd, 0xc5, 0x0, + + /* U+0063 "c" */ + 0x0, 0x8, 0xce, 0xd5, 0x0, 0xc, 0x91, 0xb, + 0xf2, 0x8, 0xc0, 0x0, 0x5f, 0x40, 0xf6, 0x0, + 0x1, 0x40, 0x2f, 0x40, 0x0, 0x0, 0x3, 0xf5, + 0x0, 0x0, 0x0, 0x1f, 0x90, 0x0, 0x0, 0x0, + 0xcf, 0x30, 0x0, 0x54, 0x3, 0xff, 0x97, 0xac, + 0x0, 0x3, 0xbe, 0xea, 0x10, + + /* U+0064 "d" */ + 0x0, 0x0, 0x0, 0x28, 0xe2, 0x0, 0x0, 0x0, + 0x6, 0xef, 0x20, 0x0, 0x0, 0x0, 0x7, 0xf2, + 0x0, 0x0, 0x0, 0x0, 0x7f, 0x20, 0x0, 0x9, + 0xdd, 0xb9, 0xf2, 0x0, 0x1d, 0xa0, 0x3, 0xff, + 0x20, 0x8, 0xe0, 0x0, 0x9, 0xf2, 0x0, 0xf8, + 0x0, 0x0, 0x7f, 0x20, 0x2f, 0x60, 0x0, 0x7, + 0xf2, 0x3, 0xf7, 0x0, 0x0, 0x7f, 0x20, 0x2f, + 0xa0, 0x0, 0x7, 0xf2, 0x0, 0xdf, 0x20, 0x0, + 0x8f, 0x30, 0x5, 0xfe, 0x75, 0x9c, 0xfa, 0x30, + 0x4, 0xcf, 0xb4, 0x7d, 0x94, + + /* U+0065 "e" */ + 0x0, 0x1a, 0xde, 0xa1, 0x0, 0x1e, 0x70, 0x1c, + 0xd0, 0x9, 0xb0, 0x0, 0x4f, 0x50, 0xf6, 0x0, + 0x0, 0xf8, 0x2f, 0xed, 0xdd, 0xee, 0x93, 0xf4, + 0x0, 0x0, 0x0, 0x1f, 0x80, 0x0, 0x0, 0x0, + 0xcf, 0x20, 0x0, 0x25, 0x3, 0xff, 0x97, 0xad, + 0x20, 0x3, 0xbe, 0xea, 0x20, + + /* U+0066 "f" */ + 0x0, 0x5, 0xbd, 0xc3, 0x0, 0x4f, 0x10, 0xf7, + 0x0, 0xbd, 0x0, 0x30, 0x0, 0xdc, 0x0, 0x0, + 0x2d, 0xff, 0xff, 0x20, 0x0, 0xec, 0x0, 0x0, + 0x0, 0xec, 0x0, 0x0, 0x0, 0xec, 0x0, 0x0, + 0x0, 0xec, 0x0, 0x0, 0x0, 0xec, 0x0, 0x0, + 0x0, 0xec, 0x0, 0x0, 0x0, 0xec, 0x0, 0x0, + 0x1, 0xfd, 0x0, 0x0, 0x3d, 0xff, 0xd5, 0x0, + + /* U+0067 "g" */ + 0x0, 0x5c, 0xcc, 0xbc, 0xd6, 0x5, 0xf3, 0x2, + 0xf7, 0x43, 0xd, 0xd0, 0x0, 0x9f, 0x0, 0xf, + 0xa0, 0x0, 0x6f, 0x20, 0xc, 0xd0, 0x0, 0x9f, + 0x0, 0x5, 0xf7, 0x1, 0xe7, 0x0, 0x0, 0x9a, + 0xbb, 0x50, 0x0, 0x9, 0x50, 0x0, 0x0, 0x0, + 0xf, 0xc9, 0x99, 0x98, 0x30, 0x8, 0xff, 0xff, + 0xff, 0xf3, 0x3c, 0x0, 0x0, 0x3, 0xf7, 0xad, + 0x0, 0x0, 0x0, 0xf4, 0x7f, 0x70, 0x0, 0x2b, + 0x90, 0x7, 0xde, 0xed, 0xa4, 0x0, + + /* U+0068 "h" */ + 0x6, 0xba, 0x0, 0x0, 0x0, 0x1, 0xbf, 0xa0, + 0x0, 0x0, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xfa, + 0x9, 0xee, 0x90, 0x0, 0xf, 0xcb, 0x87, 0xdf, + 0x50, 0x0, 0xfb, 0x0, 0x2, 0xf8, 0x0, 0xf, + 0xa0, 0x0, 0x1f, 0x90, 0x0, 0xfa, 0x0, 0x0, + 0xf9, 0x0, 0xf, 0xa0, 0x0, 0xf, 0x90, 0x0, + 0xfa, 0x0, 0x0, 0xf9, 0x0, 0xf, 0xa0, 0x0, + 0xf, 0x90, 0x2, 0xfc, 0x0, 0x2, 0xfb, 0x4, + 0xef, 0xfc, 0x5, 0xef, 0xfc, + + /* U+0069 "i" */ + 0x0, 0xd9, 0x0, 0x3, 0xfe, 0x0, 0x0, 0x53, + 0x0, 0x0, 0x0, 0x0, 0x5, 0xbb, 0x0, 0x1a, + 0xfc, 0x0, 0x0, 0xec, 0x0, 0x0, 0xec, 0x0, + 0x0, 0xec, 0x0, 0x0, 0xec, 0x0, 0x0, 0xec, + 0x0, 0x0, 0xec, 0x0, 0x0, 0xfd, 0x0, 0x3d, + 0xff, 0xd1, + + /* U+006A "j" */ + 0x4, 0xe5, 0x8, 0xf9, 0x0, 0x51, 0x0, 0x0, + 0x17, 0xd6, 0x3d, 0xf6, 0x3, 0xf6, 0x3, 0xf6, + 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, 0x3, 0xf6, + 0x3, 0xf6, 0x3, 0xf6, 0x5, 0xf3, 0x9, 0xd0, + 0x3e, 0x20, 0x72, 0x0, + + /* U+006B "k" */ + 0x16, 0xca, 0x0, 0x0, 0x0, 0x1, 0x9f, 0xa0, + 0x0, 0x0, 0x0, 0x0, 0xfa, 0x0, 0x0, 0x0, + 0x0, 0xf, 0xa0, 0x0, 0x0, 0x0, 0x0, 0xfa, + 0x3, 0xcf, 0xfa, 0x0, 0xf, 0xa0, 0x2, 0xf4, + 0x0, 0x0, 0xfa, 0x2, 0xd4, 0x0, 0x0, 0xf, + 0xa2, 0xd3, 0x0, 0x0, 0x0, 0xfa, 0xec, 0x0, + 0x0, 0x0, 0xf, 0xa7, 0xfa, 0x0, 0x0, 0x0, + 0xfa, 0xa, 0xf8, 0x0, 0x0, 0xf, 0xa0, 0xc, + 0xf6, 0x0, 0x2, 0xfc, 0x0, 0x1d, 0xf4, 0x4, + 0xef, 0xfc, 0x0, 0x2e, 0xf1, + + /* U+006C "l" */ + 0x6, 0xba, 0x0, 0x2b, 0xfa, 0x0, 0x0, 0xfa, + 0x0, 0x0, 0xfa, 0x0, 0x0, 0xfa, 0x0, 0x0, + 0xfa, 0x0, 0x0, 0xfa, 0x0, 0x0, 0xfa, 0x0, + 0x0, 0xfa, 0x0, 0x0, 0xfa, 0x0, 0x0, 0xfa, + 0x0, 0x0, 0xfa, 0x0, 0x2, 0xfc, 0x0, 0x4e, + 0xff, 0xc0, + + /* U+006D "m" */ + 0x5, 0xbb, 0x8, 0xee, 0x80, 0x2a, 0xfe, 0x50, + 0x1, 0xaf, 0xda, 0x87, 0xdf, 0x7b, 0x78, 0xee, + 0x0, 0x0, 0xed, 0x0, 0x3, 0xf9, 0x0, 0x8, + 0xf2, 0x0, 0xe, 0xc0, 0x0, 0x2f, 0x70, 0x0, + 0x6f, 0x30, 0x0, 0xec, 0x0, 0x2, 0xf7, 0x0, + 0x6, 0xf3, 0x0, 0xe, 0xc0, 0x0, 0x2f, 0x70, + 0x0, 0x6f, 0x30, 0x0, 0xec, 0x0, 0x2, 0xf7, + 0x0, 0x6, 0xf3, 0x0, 0xe, 0xc0, 0x0, 0x2f, + 0x70, 0x0, 0x6f, 0x30, 0x0, 0xfd, 0x0, 0x4, + 0xf9, 0x0, 0x8, 0xf5, 0x3, 0xdf, 0xfd, 0x16, + 0xef, 0xfa, 0x9, 0xff, 0xf7, + + /* U+006E "n" */ + 0x5, 0xbb, 0x8, 0xef, 0xa0, 0x0, 0x1a, 0xfd, + 0xa8, 0x7c, 0xf7, 0x0, 0x0, 0xed, 0x0, 0x0, + 0xfa, 0x0, 0x0, 0xec, 0x0, 0x0, 0xeb, 0x0, + 0x0, 0xec, 0x0, 0x0, 0xeb, 0x0, 0x0, 0xec, + 0x0, 0x0, 0xeb, 0x0, 0x0, 0xec, 0x0, 0x0, + 0xeb, 0x0, 0x0, 0xec, 0x0, 0x0, 0xeb, 0x0, + 0x0, 0xfd, 0x0, 0x1, 0xfd, 0x0, 0x3d, 0xff, + 0xd1, 0x3d, 0xff, 0xd1, + + /* U+006F "o" */ + 0x0, 0x9, 0xde, 0xb4, 0x0, 0x1, 0xd9, 0x11, + 0x9f, 0x60, 0x9, 0xe0, 0x0, 0xc, 0xf1, 0xf, + 0x90, 0x0, 0x6, 0xf5, 0x2f, 0x70, 0x0, 0x3, + 0xf8, 0x3f, 0x80, 0x0, 0x3, 0xf7, 0x1f, 0xb0, + 0x0, 0x4, 0xf4, 0xb, 0xf1, 0x0, 0x9, 0xd0, + 0x2, 0xfd, 0x30, 0x6f, 0x40, 0x0, 0x2a, 0xee, + 0xb2, 0x0, + + /* U+0070 "p" */ + 0x16, 0xc7, 0x4b, 0xfc, 0x50, 0x3, 0xcf, 0xc8, + 0x46, 0xdf, 0x60, 0x2, 0xf7, 0x0, 0x2, 0xfe, + 0x0, 0x2f, 0x70, 0x0, 0xa, 0xf2, 0x2, 0xf7, + 0x0, 0x0, 0x7f, 0x40, 0x2f, 0x70, 0x0, 0x6, + 0xf2, 0x2, 0xf7, 0x0, 0x0, 0x8f, 0x0, 0x2f, + 0xa0, 0x0, 0xd, 0x80, 0x2, 0xff, 0x40, 0x9, + 0xd1, 0x0, 0x2f, 0x9b, 0xdd, 0x90, 0x0, 0x2, + 0xf7, 0x0, 0x0, 0x0, 0x0, 0x2f, 0x70, 0x0, + 0x0, 0x0, 0x5, 0xf9, 0x0, 0x0, 0x0, 0x7, + 0xff, 0xfc, 0x0, 0x0, 0x0, + + /* U+0071 "q" */ + 0x0, 0x8, 0xcd, 0xc4, 0x94, 0x0, 0xd, 0xa0, + 0x3, 0xff, 0x30, 0x8, 0xe0, 0x0, 0x9, 0xf2, + 0x0, 0xf8, 0x0, 0x0, 0x7f, 0x20, 0x2f, 0x60, + 0x0, 0x7, 0xf2, 0x3, 0xf7, 0x0, 0x0, 0x7f, + 0x20, 0x2f, 0xa0, 0x0, 0x7, 0xf2, 0x0, 0xdf, + 0x20, 0x0, 0x8f, 0x20, 0x5, 0xfe, 0x75, 0x9c, + 0xf2, 0x0, 0x4, 0xcf, 0xb4, 0x7f, 0x20, 0x0, + 0x0, 0x0, 0x7, 0xf2, 0x0, 0x0, 0x0, 0x0, + 0x7f, 0x20, 0x0, 0x0, 0x0, 0x9, 0xf5, 0x0, + 0x0, 0x0, 0xb, 0xff, 0xf7, + + /* U+0072 "r" */ + 0x5, 0xbb, 0x9, 0xe1, 0x1a, 0xfc, 0x6f, 0xf2, + 0x0, 0xed, 0xa2, 0x0, 0x0, 0xed, 0x0, 0x0, + 0x0, 0xec, 0x0, 0x0, 0x0, 0xec, 0x0, 0x0, + 0x0, 0xec, 0x0, 0x0, 0x0, 0xec, 0x0, 0x0, + 0x0, 0xfd, 0x0, 0x0, 0x3d, 0xff, 0xd5, 0x0, + + /* U+0073 "s" */ + 0x2, 0xae, 0xdc, 0x50, 0xd, 0xa0, 0x9, 0xe0, + 0x1f, 0x50, 0x0, 0xd0, 0xf, 0xd3, 0x0, 0x0, + 0x7, 0xff, 0xb5, 0x0, 0x0, 0x39, 0xef, 0xc0, + 0x12, 0x0, 0x9, 0xf4, 0x3b, 0x0, 0x2, 0xf5, + 0x3f, 0x60, 0x7, 0xe1, 0x6, 0xcd, 0xdb, 0x30, + + /* U+0074 "t" */ + 0x0, 0xa3, 0x0, 0x0, 0x8f, 0x30, 0x0, 0x9f, + 0xff, 0xff, 0x0, 0x6f, 0x30, 0x0, 0x6, 0xf3, + 0x0, 0x0, 0x6f, 0x30, 0x0, 0x6, 0xf3, 0x0, + 0x0, 0x6f, 0x30, 0x0, 0x6, 0xf3, 0x0, 0x0, + 0x6f, 0x40, 0x0, 0x4, 0xfb, 0x36, 0x30, 0xa, + 0xfd, 0x80, + + /* U+0075 "u" */ + 0x6b, 0xe6, 0x0, 0x7c, 0xe4, 0x0, 0x8f, 0x60, + 0x1, 0x9f, 0x40, 0x3, 0xf6, 0x0, 0x5, 0xf4, + 0x0, 0x3f, 0x60, 0x0, 0x5f, 0x40, 0x3, 0xf6, + 0x0, 0x5, 0xf4, 0x0, 0x3f, 0x60, 0x0, 0x5f, + 0x40, 0x3, 0xf6, 0x0, 0x5, 0xf4, 0x0, 0x2f, + 0x80, 0x0, 0x6f, 0x50, 0x0, 0xef, 0x97, 0xaa, + 0xfb, 0x40, 0x4, 0xdf, 0xb3, 0x5d, 0xa5, + + /* U+0076 "v" */ + 0xcf, 0xfd, 0x30, 0x6e, 0xfb, 0xc, 0xf1, 0x0, + 0x6, 0xc0, 0x5, 0xf6, 0x0, 0xb, 0x50, 0x0, + 0xec, 0x0, 0x1e, 0x0, 0x0, 0x8f, 0x20, 0x78, + 0x0, 0x0, 0x1f, 0x80, 0xd1, 0x0, 0x0, 0xa, + 0xe5, 0xa0, 0x0, 0x0, 0x3, 0xfe, 0x40, 0x0, + 0x0, 0x0, 0xcd, 0x0, 0x0, 0x0, 0x0, 0x57, + 0x0, 0x0, + + /* U+0077 "w" */ + 0xcf, 0xfc, 0x18, 0xff, 0xd3, 0x2d, 0xfe, 0x20, + 0xdf, 0x0, 0x9, 0xf2, 0x0, 0xf, 0x20, 0x7, + 0xf4, 0x0, 0x6f, 0x60, 0x4, 0xb0, 0x0, 0x1f, + 0x90, 0xb, 0xec, 0x0, 0xa5, 0x0, 0x0, 0xbe, + 0x1, 0xc7, 0xf1, 0xe, 0x0, 0x0, 0x5, 0xf5, + 0x76, 0x1f, 0x75, 0xa0, 0x0, 0x0, 0xf, 0xac, + 0x10, 0xbc, 0xa4, 0x0, 0x0, 0x0, 0x9f, 0xb0, + 0x5, 0xfe, 0x0, 0x0, 0x0, 0x3, 0xf5, 0x0, + 0xf, 0x80, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, + 0x93, 0x0, 0x0, + + /* U+0078 "x" */ + 0x8f, 0xfe, 0x50, 0xcf, 0xf4, 0x6, 0xf9, 0x0, + 0x2e, 0x20, 0x0, 0xbf, 0x30, 0xb4, 0x0, 0x0, + 0x1e, 0xd7, 0x90, 0x0, 0x0, 0x4, 0xfe, 0x0, + 0x0, 0x0, 0x5, 0xef, 0x40, 0x0, 0x0, 0x2d, + 0x1d, 0xe1, 0x0, 0x0, 0xc3, 0x3, 0xfb, 0x0, + 0xa, 0xa0, 0x0, 0x9f, 0x60, 0xcf, 0xf6, 0x5, + 0xef, 0xf8, + + /* U+0079 "y" */ + 0xcf, 0xfd, 0x30, 0x5e, 0xfe, 0x0, 0xdf, 0x10, + 0x0, 0x3e, 0x0, 0x6, 0xf5, 0x0, 0x8, 0x80, + 0x0, 0xf, 0xb0, 0x0, 0xd2, 0x0, 0x0, 0x9f, + 0x20, 0x3c, 0x0, 0x0, 0x3, 0xf8, 0x9, 0x60, + 0x0, 0x0, 0xc, 0xe0, 0xe1, 0x0, 0x0, 0x0, + 0x5f, 0x9a, 0x0, 0x0, 0x0, 0x0, 0xef, 0x40, + 0x0, 0x0, 0x0, 0x8, 0xe0, 0x0, 0x0, 0x0, + 0x0, 0x68, 0x0, 0x0, 0x0, 0x0, 0xc, 0x20, + 0x0, 0x0, 0x4, 0x8c, 0xb0, 0x0, 0x0, 0x0, + 0x4e, 0xd2, 0x0, 0x0, 0x0, + + /* U+007A "z" */ + 0xf, 0xfd, 0xdd, 0xff, 0x20, 0xf4, 0x0, 0x3f, + 0x90, 0xd, 0x0, 0xc, 0xe1, 0x0, 0x0, 0x7, + 0xf5, 0x0, 0x0, 0x2, 0xfb, 0x0, 0x0, 0x0, + 0xbf, 0x10, 0x0, 0x0, 0x5f, 0x70, 0x1, 0x10, + 0x1e, 0xc0, 0x0, 0x95, 0xa, 0xf3, 0x0, 0x2f, + 0x43, 0xff, 0xdd, 0xdf, 0xf2, + + /* U+007B "{" */ + 0x0, 0x7, 0xb2, 0x0, 0x5e, 0x0, 0x0, 0x9b, + 0x0, 0x0, 0x9a, 0x0, 0x0, 0x9a, 0x0, 0x0, + 0x9a, 0x0, 0x0, 0xaa, 0x0, 0x0, 0xe7, 0x0, + 0xd, 0xa0, 0x0, 0x0, 0xe7, 0x0, 0x0, 0xaa, + 0x0, 0x0, 0x9a, 0x0, 0x0, 0x9a, 0x0, 0x0, + 0x9a, 0x0, 0x0, 0x9b, 0x0, 0x0, 0x5d, 0x0, + 0x0, 0x7, 0xb2, + + /* U+007C "|" */ + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, 0x3d, + 0x3d, + + /* U+007D "}" */ + 0x1b, 0x90, 0x0, 0x0, 0xc8, 0x0, 0x0, 0x8b, + 0x0, 0x0, 0x8b, 0x0, 0x0, 0x8b, 0x0, 0x0, + 0x8b, 0x0, 0x0, 0x8c, 0x0, 0x0, 0x4f, 0x10, + 0x0, 0x7, 0xe1, 0x0, 0x4f, 0x10, 0x0, 0x8c, + 0x0, 0x0, 0x8b, 0x0, 0x0, 0x8b, 0x0, 0x0, + 0x8b, 0x0, 0x0, 0x8b, 0x0, 0x0, 0xc8, 0x0, + 0x1b, 0x90, 0x0, + + /* U+007E "~" */ + 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e, 0xfb, 0x62, + 0xc1, 0xc, 0x68, 0xdf, 0xf8, 0x0, 0x10, 0x0, + 0x22, 0x0 +}; + + +/*--------------------- + * GLYPH DESCRIPTION + *--------------------*/ + +static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = { + {.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */, + {.bitmap_index = 0, .adv_w = 65, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 0, .adv_w = 84, .box_w = 3, .box_h = 13, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 20, .adv_w = 112, .box_w = 7, .box_h = 6, .ofs_x = 0, .ofs_y = 8}, + {.bitmap_index = 41, .adv_w = 168, .box_w = 10, .box_h = 15, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 116, .adv_w = 155, .box_w = 9, .box_h = 18, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 197, .adv_w = 249, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 295, .adv_w = 199, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 373, .adv_w = 63, .box_w = 3, .box_h = 6, .ofs_x = 0, .ofs_y = 8}, + {.bitmap_index = 382, .adv_w = 97, .box_w = 5, .box_h = 17, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 425, .adv_w = 97, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 468, .adv_w = 126, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 7}, + {.bitmap_index = 496, .adv_w = 162, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 3}, + {.bitmap_index = 537, .adv_w = 82, .box_w = 4, .box_h = 6, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 549, .adv_w = 104, .box_w = 6, .box_h = 3, .ofs_x = 0, .ofs_y = 4}, + {.bitmap_index = 558, .adv_w = 82, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 563, .adv_w = 114, .box_w = 7, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 623, .adv_w = 183, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 695, .adv_w = 121, .box_w = 8, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 747, .adv_w = 149, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 806, .adv_w = 152, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 865, .adv_w = 174, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 937, .adv_w = 148, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 996, .adv_w = 166, .box_w = 10, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1061, .adv_w = 143, .box_w = 9, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1120, .adv_w = 159, .box_w = 10, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1185, .adv_w = 166, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -1}, + {.bitmap_index = 1255, .adv_w = 82, .box_w = 3, .box_h = 9, .ofs_x = 1, .ofs_y = 0}, + {.bitmap_index = 1269, .adv_w = 82, .box_w = 4, .box_h = 11, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 1291, .adv_w = 119, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 3}, + {.bitmap_index = 1319, .adv_w = 165, .box_w = 9, .box_h = 5, .ofs_x = 1, .ofs_y = 4}, + {.bitmap_index = 1342, .adv_w = 119, .box_w = 6, .box_h = 8, .ofs_x = 1, .ofs_y = 3}, + {.bitmap_index = 1366, .adv_w = 126, .box_w = 8, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1418, .adv_w = 257, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 1538, .adv_w = 208, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1623, .adv_w = 191, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1701, .adv_w = 194, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1779, .adv_w = 217, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1864, .adv_w = 193, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 1942, .adv_w = 175, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2014, .adv_w = 212, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2099, .adv_w = 240, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2197, .adv_w = 106, .box_w = 7, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2243, .adv_w = 150, .box_w = 10, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2308, .adv_w = 206, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2393, .adv_w = 177, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2465, .adv_w = 268, .box_w = 17, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2576, .adv_w = 232, .box_w = 15, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2674, .adv_w = 215, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2759, .adv_w = 177, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 2831, .adv_w = 215, .box_w = 13, .box_h = 17, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 2942, .adv_w = 203, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3027, .adv_w = 160, .box_w = 10, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3092, .adv_w = 191, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3170, .adv_w = 221, .box_w = 14, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3261, .adv_w = 206, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3346, .adv_w = 277, .box_w = 18, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3463, .adv_w = 205, .box_w = 13, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3548, .adv_w = 191, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3626, .adv_w = 179, .box_w = 11, .box_h = 13, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3698, .adv_w = 90, .box_w = 4, .box_h = 17, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 3732, .adv_w = 114, .box_w = 7, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3792, .adv_w = 90, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 3835, .adv_w = 133, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 9}, + {.bitmap_index = 3859, .adv_w = 127, .box_w = 8, .box_h = 1, .ofs_x = 0, .ofs_y = -2}, + {.bitmap_index = 3863, .adv_w = 144, .box_w = 5, .box_h = 3, .ofs_x = 2, .ofs_y = 11}, + {.bitmap_index = 3871, .adv_w = 154, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3921, .adv_w = 171, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 3991, .adv_w = 146, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4036, .adv_w = 178, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4113, .adv_w = 150, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4158, .adv_w = 104, .box_w = 8, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4214, .adv_w = 157, .box_w = 10, .box_h = 14, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4284, .adv_w = 183, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4361, .adv_w = 92, .box_w = 6, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4403, .adv_w = 78, .box_w = 4, .box_h = 18, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4439, .adv_w = 164, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4516, .adv_w = 90, .box_w = 6, .box_h = 14, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4558, .adv_w = 273, .box_w = 17, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4643, .adv_w = 185, .box_w = 12, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4703, .adv_w = 165, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4753, .adv_w = 176, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4830, .adv_w = 170, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 4907, .adv_w = 119, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4947, .adv_w = 130, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 4987, .adv_w = 107, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 5029, .adv_w = 181, .box_w = 11, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 5084, .adv_w = 159, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 5134, .adv_w = 228, .box_w = 15, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 5209, .adv_w = 156, .box_w = 10, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 5259, .adv_w = 162, .box_w = 11, .box_h = 14, .ofs_x = 0, .ofs_y = -4}, + {.bitmap_index = 5336, .adv_w = 144, .box_w = 9, .box_h = 10, .ofs_x = 0, .ofs_y = 0}, + {.bitmap_index = 5381, .adv_w = 98, .box_w = 6, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 5432, .adv_w = 74, .box_w = 2, .box_h = 17, .ofs_x = 1, .ofs_y = -3}, + {.bitmap_index = 5449, .adv_w = 98, .box_w = 6, .box_h = 17, .ofs_x = 0, .ofs_y = -3}, + {.bitmap_index = 5500, .adv_w = 147, .box_w = 9, .box_h = 4, .ofs_x = 0, .ofs_y = 4} +}; + +/*--------------------- + * CHARACTER MAPPING + *--------------------*/ + + + +/*Collect the unicode lists and glyph_id offsets*/ +static const lv_font_fmt_txt_cmap_t cmaps[] = +{ + { + .range_start = 32, .range_length = 95, .glyph_id_start = 1, + .unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY + } +}; + +/*----------------- + * KERNING + *----------------*/ + + +/*Pair left and right glyphs for kerning*/ +static const uint8_t kern_pair_glyph_ids[] = +{ + 3, 20, + 3, 21, + 3, 22, + 3, 23, + 3, 24, + 3, 25, + 4, 20, + 4, 21, + 4, 22, + 5, 20, + 5, 22, + 5, 26, + 7, 24, + 7, 36, + 7, 40, + 7, 48, + 7, 50, + 7, 52, + 7, 53, + 7, 54, + 7, 55, + 7, 56, + 7, 58, + 7, 84, + 7, 87, + 7, 88, + 7, 90, + 8, 20, + 8, 21, + 8, 22, + 8, 23, + 8, 24, + 8, 25, + 9, 21, + 9, 23, + 9, 24, + 9, 26, + 9, 53, + 9, 54, + 9, 55, + 9, 56, + 9, 58, + 9, 67, + 9, 72, + 9, 75, + 9, 87, + 9, 88, + 11, 20, + 11, 21, + 11, 23, + 11, 24, + 11, 25, + 11, 26, + 11, 34, + 11, 43, + 11, 46, + 11, 52, + 11, 53, + 11, 54, + 11, 55, + 11, 56, + 11, 57, + 11, 58, + 11, 59, + 11, 66, + 11, 67, + 11, 68, + 11, 69, + 11, 70, + 11, 71, + 11, 72, + 11, 75, + 11, 80, + 11, 81, + 11, 82, + 11, 85, + 11, 86, + 11, 87, + 11, 88, + 11, 89, + 11, 90, + 12, 17, + 12, 18, + 12, 19, + 12, 20, + 12, 21, + 12, 23, + 12, 24, + 13, 17, + 13, 18, + 13, 19, + 13, 21, + 13, 23, + 13, 24, + 13, 25, + 13, 26, + 13, 34, + 13, 36, + 13, 40, + 13, 43, + 13, 48, + 13, 50, + 13, 53, + 13, 54, + 13, 55, + 13, 56, + 13, 57, + 13, 58, + 13, 59, + 13, 66, + 13, 67, + 13, 68, + 13, 69, + 13, 70, + 13, 71, + 13, 75, + 13, 80, + 13, 81, + 13, 82, + 13, 84, + 13, 85, + 13, 86, + 13, 87, + 13, 88, + 13, 89, + 13, 90, + 14, 17, + 14, 18, + 14, 19, + 14, 21, + 14, 23, + 14, 24, + 14, 25, + 14, 34, + 14, 36, + 14, 40, + 14, 48, + 14, 50, + 14, 52, + 14, 53, + 14, 55, + 14, 56, + 14, 57, + 14, 58, + 14, 68, + 14, 69, + 14, 70, + 14, 75, + 14, 80, + 14, 82, + 14, 84, + 14, 89, + 15, 17, + 15, 18, + 15, 19, + 15, 21, + 15, 23, + 15, 24, + 15, 25, + 15, 26, + 15, 34, + 15, 36, + 15, 40, + 15, 43, + 15, 48, + 15, 50, + 15, 53, + 15, 54, + 15, 55, + 15, 56, + 15, 57, + 15, 58, + 15, 59, + 15, 66, + 15, 67, + 15, 68, + 15, 69, + 15, 70, + 15, 71, + 15, 75, + 15, 80, + 15, 81, + 15, 82, + 15, 84, + 15, 85, + 15, 86, + 15, 87, + 15, 88, + 15, 89, + 15, 90, + 16, 16, + 16, 17, + 16, 18, + 16, 19, + 16, 20, + 16, 21, + 16, 22, + 16, 23, + 16, 25, + 16, 26, + 16, 34, + 16, 36, + 16, 40, + 16, 43, + 16, 48, + 16, 50, + 16, 66, + 16, 67, + 16, 68, + 16, 69, + 16, 70, + 16, 71, + 16, 72, + 16, 74, + 16, 78, + 16, 79, + 16, 80, + 16, 82, + 16, 83, + 16, 84, + 16, 89, + 16, 91, + 17, 12, + 17, 13, + 17, 14, + 17, 15, + 17, 16, + 17, 19, + 17, 24, + 17, 27, + 17, 28, + 17, 33, + 18, 3, + 18, 6, + 18, 8, + 18, 11, + 18, 12, + 18, 13, + 18, 14, + 18, 15, + 18, 18, + 18, 19, + 18, 21, + 18, 23, + 18, 26, + 18, 29, + 18, 30, + 18, 32, + 19, 4, + 19, 7, + 19, 12, + 19, 20, + 19, 22, + 19, 23, + 19, 25, + 19, 31, + 20, 4, + 20, 7, + 20, 13, + 20, 14, + 20, 15, + 20, 16, + 20, 32, + 20, 33, + 21, 3, + 21, 4, + 21, 6, + 21, 7, + 21, 8, + 21, 11, + 21, 12, + 21, 14, + 21, 19, + 21, 20, + 21, 22, + 21, 25, + 21, 26, + 21, 27, + 21, 28, + 21, 29, + 21, 32, + 21, 33, + 22, 4, + 22, 6, + 22, 7, + 22, 13, + 22, 14, + 22, 15, + 22, 16, + 22, 32, + 22, 33, + 23, 3, + 23, 4, + 23, 6, + 23, 7, + 23, 8, + 23, 11, + 23, 13, + 23, 14, + 23, 15, + 23, 16, + 23, 26, + 23, 27, + 23, 28, + 23, 32, + 23, 33, + 24, 3, + 24, 4, + 24, 6, + 24, 7, + 24, 8, + 24, 10, + 24, 11, + 24, 12, + 24, 13, + 24, 14, + 24, 15, + 24, 16, + 24, 17, + 24, 18, + 24, 20, + 24, 21, + 24, 22, + 24, 23, + 24, 24, + 24, 27, + 24, 28, + 24, 29, + 24, 30, + 24, 31, + 24, 32, + 24, 33, + 24, 62, + 24, 94, + 25, 3, + 25, 4, + 25, 6, + 25, 7, + 25, 8, + 25, 11, + 25, 13, + 25, 14, + 25, 15, + 25, 16, + 25, 20, + 25, 22, + 25, 33, + 26, 3, + 26, 4, + 26, 8, + 26, 10, + 26, 12, + 26, 13, + 26, 14, + 26, 15, + 26, 16, + 26, 19, + 26, 20, + 26, 21, + 26, 22, + 26, 24, + 26, 27, + 26, 28, + 26, 62, + 26, 94, + 27, 16, + 27, 17, + 27, 21, + 27, 23, + 27, 24, + 27, 26, + 27, 34, + 27, 43, + 27, 53, + 27, 54, + 27, 55, + 27, 56, + 27, 58, + 27, 87, + 27, 88, + 27, 90, + 28, 16, + 28, 17, + 28, 21, + 28, 23, + 28, 24, + 28, 26, + 28, 34, + 28, 43, + 28, 53, + 28, 54, + 28, 55, + 28, 56, + 28, 58, + 28, 87, + 28, 88, + 28, 90, + 29, 24, + 30, 24, + 31, 18, + 31, 19, + 31, 20, + 31, 21, + 31, 24, + 33, 17, + 33, 18, + 33, 19, + 33, 20, + 33, 22, + 33, 23, + 33, 24, + 33, 26, + 33, 34, + 33, 36, + 33, 40, + 33, 43, + 33, 46, + 33, 48, + 33, 50, + 33, 52, + 33, 53, + 33, 54, + 33, 55, + 33, 56, + 33, 57, + 33, 58, + 33, 68, + 33, 69, + 33, 70, + 33, 80, + 33, 82, + 33, 89, + 33, 91, + 34, 2, + 34, 11, + 34, 13, + 34, 14, + 34, 15, + 34, 27, + 34, 28, + 34, 32, + 34, 36, + 34, 40, + 34, 43, + 34, 48, + 34, 50, + 34, 52, + 34, 53, + 34, 54, + 34, 55, + 34, 56, + 34, 58, + 34, 59, + 34, 84, + 34, 85, + 34, 86, + 34, 87, + 34, 88, + 34, 90, + 35, 7, + 35, 14, + 35, 33, + 35, 36, + 35, 40, + 35, 43, + 35, 48, + 35, 50, + 35, 52, + 35, 55, + 35, 56, + 35, 58, + 35, 66, + 35, 68, + 35, 69, + 35, 70, + 35, 80, + 35, 82, + 35, 84, + 35, 85, + 36, 7, + 36, 11, + 36, 32, + 36, 33, + 36, 43, + 36, 52, + 36, 66, + 36, 68, + 36, 69, + 36, 70, + 36, 72, + 36, 80, + 36, 82, + 36, 84, + 37, 7, + 37, 13, + 37, 14, + 37, 15, + 37, 16, + 37, 33, + 37, 34, + 37, 36, + 37, 40, + 37, 48, + 37, 50, + 37, 52, + 37, 53, + 37, 55, + 37, 56, + 37, 57, + 37, 58, + 37, 59, + 37, 62, + 37, 68, + 37, 69, + 37, 70, + 37, 72, + 37, 75, + 37, 80, + 37, 82, + 37, 84, + 37, 85, + 37, 86, + 37, 87, + 37, 88, + 37, 89, + 37, 90, + 37, 94, + 38, 7, + 38, 13, + 38, 15, + 38, 33, + 38, 43, + 38, 52, + 38, 55, + 38, 56, + 38, 58, + 38, 59, + 38, 68, + 38, 69, + 38, 70, + 38, 80, + 38, 82, + 38, 84, + 38, 89, + 39, 2, + 39, 7, + 39, 10, + 39, 11, + 39, 13, + 39, 15, + 39, 16, + 39, 27, + 39, 28, + 39, 32, + 39, 34, + 39, 43, + 39, 46, + 39, 52, + 39, 53, + 39, 54, + 39, 55, + 39, 56, + 39, 58, + 39, 59, + 39, 62, + 39, 66, + 39, 67, + 39, 68, + 39, 69, + 39, 70, + 39, 71, + 39, 72, + 39, 78, + 39, 79, + 39, 80, + 39, 81, + 39, 82, + 39, 83, + 39, 87, + 39, 88, + 39, 89, + 39, 90, + 39, 91, + 39, 94, + 40, 7, + 40, 10, + 40, 11, + 40, 13, + 40, 14, + 40, 15, + 40, 32, + 40, 33, + 40, 34, + 40, 36, + 40, 40, + 40, 48, + 40, 50, + 40, 52, + 40, 53, + 40, 55, + 40, 56, + 40, 57, + 40, 58, + 40, 62, + 40, 68, + 40, 69, + 40, 70, + 40, 80, + 40, 82, + 40, 84, + 40, 85, + 40, 94, + 43, 7, + 43, 10, + 43, 11, + 43, 13, + 43, 15, + 43, 16, + 43, 27, + 43, 28, + 43, 33, + 43, 34, + 43, 43, + 43, 53, + 43, 62, + 43, 66, + 43, 67, + 43, 68, + 43, 69, + 43, 70, + 43, 78, + 43, 79, + 43, 80, + 43, 81, + 43, 82, + 43, 83, + 43, 86, + 43, 94, + 44, 14, + 44, 33, + 44, 36, + 44, 40, + 44, 43, + 44, 48, + 44, 50, + 44, 68, + 44, 69, + 44, 70, + 44, 80, + 44, 82, + 44, 86, + 44, 87, + 44, 88, + 44, 90, + 45, 7, + 45, 11, + 45, 13, + 45, 15, + 45, 32, + 45, 34, + 45, 43, + 45, 53, + 45, 54, + 45, 55, + 45, 56, + 45, 58, + 45, 66, + 45, 68, + 45, 69, + 45, 70, + 45, 72, + 45, 80, + 45, 82, + 45, 84, + 45, 87, + 45, 88, + 45, 90, + 46, 11, + 46, 52, + 46, 58, + 46, 66, + 46, 68, + 46, 69, + 46, 70, + 46, 75, + 46, 80, + 46, 82, + 46, 84, + 46, 87, + 46, 88, + 46, 90, + 47, 7, + 47, 11, + 47, 13, + 47, 15, + 47, 16, + 47, 27, + 47, 28, + 47, 33, + 47, 34, + 47, 43, + 47, 66, + 47, 68, + 47, 69, + 47, 70, + 47, 71, + 47, 72, + 47, 78, + 47, 79, + 47, 80, + 47, 81, + 47, 82, + 47, 83, + 47, 84, + 47, 86, + 47, 87, + 47, 88, + 47, 89, + 47, 90, + 47, 91, + 48, 7, + 48, 13, + 48, 14, + 48, 15, + 48, 16, + 48, 33, + 48, 34, + 48, 36, + 48, 40, + 48, 48, + 48, 50, + 48, 52, + 48, 53, + 48, 55, + 48, 56, + 48, 57, + 48, 58, + 48, 59, + 48, 62, + 48, 68, + 48, 69, + 48, 70, + 48, 72, + 48, 75, + 48, 80, + 48, 82, + 48, 84, + 48, 85, + 48, 86, + 48, 87, + 48, 88, + 48, 89, + 48, 90, + 48, 94, + 49, 2, + 49, 11, + 49, 13, + 49, 14, + 49, 15, + 49, 16, + 49, 32, + 49, 34, + 49, 36, + 49, 40, + 49, 43, + 49, 48, + 49, 50, + 49, 52, + 49, 53, + 49, 54, + 49, 57, + 49, 67, + 49, 75, + 49, 84, + 49, 85, + 49, 86, + 49, 87, + 49, 88, + 49, 89, + 49, 90, + 49, 91, + 50, 7, + 50, 13, + 50, 14, + 50, 15, + 50, 16, + 50, 33, + 50, 34, + 50, 36, + 50, 40, + 50, 48, + 50, 50, + 50, 52, + 50, 53, + 50, 55, + 50, 56, + 50, 57, + 50, 58, + 50, 59, + 50, 62, + 50, 68, + 50, 69, + 50, 70, + 50, 72, + 50, 75, + 50, 80, + 50, 82, + 50, 84, + 50, 85, + 50, 86, + 50, 87, + 50, 88, + 50, 89, + 50, 90, + 50, 94, + 51, 7, + 51, 11, + 51, 14, + 51, 32, + 51, 33, + 51, 36, + 51, 40, + 51, 48, + 51, 50, + 51, 53, + 51, 54, + 51, 55, + 51, 56, + 51, 58, + 51, 62, + 51, 66, + 51, 67, + 51, 68, + 51, 69, + 51, 70, + 51, 80, + 51, 81, + 51, 82, + 51, 84, + 51, 85, + 51, 86, + 51, 87, + 51, 88, + 51, 90, + 51, 94, + 52, 7, + 52, 11, + 52, 14, + 52, 33, + 52, 34, + 52, 36, + 52, 40, + 52, 43, + 52, 48, + 52, 50, + 52, 52, + 52, 55, + 52, 56, + 52, 58, + 52, 68, + 52, 69, + 52, 70, + 52, 80, + 52, 82, + 52, 84, + 53, 2, + 53, 7, + 53, 10, + 53, 11, + 53, 13, + 53, 14, + 53, 15, + 53, 16, + 53, 27, + 53, 28, + 53, 32, + 53, 33, + 53, 34, + 53, 36, + 53, 40, + 53, 43, + 53, 48, + 53, 50, + 53, 52, + 53, 53, + 53, 54, + 53, 55, + 53, 56, + 53, 57, + 53, 58, + 53, 59, + 53, 66, + 53, 67, + 53, 68, + 53, 69, + 53, 70, + 53, 72, + 53, 75, + 53, 80, + 53, 82, + 53, 84, + 53, 85, + 53, 86, + 53, 87, + 53, 88, + 53, 89, + 53, 90, + 54, 2, + 54, 7, + 54, 10, + 54, 11, + 54, 13, + 54, 15, + 54, 16, + 54, 27, + 54, 28, + 54, 32, + 54, 33, + 54, 34, + 54, 43, + 54, 52, + 54, 53, + 54, 54, + 54, 66, + 54, 67, + 54, 68, + 54, 69, + 54, 70, + 54, 72, + 54, 75, + 54, 78, + 54, 79, + 54, 80, + 54, 81, + 54, 82, + 54, 83, + 54, 89, + 54, 91, + 55, 2, + 55, 7, + 55, 10, + 55, 11, + 55, 13, + 55, 14, + 55, 15, + 55, 16, + 55, 27, + 55, 28, + 55, 32, + 55, 33, + 55, 34, + 55, 36, + 55, 40, + 55, 43, + 55, 48, + 55, 50, + 55, 52, + 55, 53, + 55, 62, + 55, 66, + 55, 67, + 55, 68, + 55, 69, + 55, 70, + 55, 71, + 55, 72, + 55, 75, + 55, 78, + 55, 79, + 55, 80, + 55, 81, + 55, 82, + 55, 83, + 55, 84, + 55, 86, + 55, 89, + 55, 91, + 55, 94, + 56, 2, + 56, 7, + 56, 10, + 56, 11, + 56, 13, + 56, 14, + 56, 15, + 56, 16, + 56, 27, + 56, 28, + 56, 32, + 56, 33, + 56, 34, + 56, 36, + 56, 40, + 56, 43, + 56, 48, + 56, 50, + 56, 52, + 56, 53, + 56, 62, + 56, 66, + 56, 67, + 56, 68, + 56, 69, + 56, 70, + 56, 71, + 56, 72, + 56, 75, + 56, 78, + 56, 79, + 56, 80, + 56, 81, + 56, 82, + 56, 83, + 56, 84, + 56, 86, + 56, 89, + 56, 91, + 56, 94, + 57, 11, + 57, 13, + 57, 14, + 57, 15, + 57, 16, + 57, 36, + 57, 40, + 57, 43, + 57, 48, + 57, 50, + 57, 53, + 57, 68, + 57, 69, + 57, 70, + 57, 75, + 57, 80, + 57, 81, + 57, 82, + 57, 86, + 57, 87, + 57, 88, + 57, 90, + 57, 91, + 58, 7, + 58, 10, + 58, 11, + 58, 13, + 58, 14, + 58, 15, + 58, 16, + 58, 27, + 58, 28, + 58, 32, + 58, 33, + 58, 34, + 58, 36, + 58, 40, + 58, 43, + 58, 46, + 58, 48, + 58, 50, + 58, 52, + 58, 53, + 58, 62, + 58, 66, + 58, 67, + 58, 68, + 58, 69, + 58, 70, + 58, 71, + 58, 72, + 58, 75, + 58, 78, + 58, 79, + 58, 80, + 58, 81, + 58, 82, + 58, 83, + 58, 84, + 58, 86, + 58, 87, + 58, 88, + 58, 89, + 58, 90, + 58, 91, + 58, 94, + 59, 7, + 59, 13, + 59, 15, + 59, 33, + 59, 43, + 59, 52, + 59, 66, + 59, 67, + 59, 68, + 59, 69, + 59, 70, + 59, 72, + 59, 75, + 59, 80, + 59, 82, + 59, 84, + 59, 85, + 60, 21, + 60, 23, + 60, 24, + 60, 36, + 60, 40, + 60, 48, + 60, 50, + 60, 55, + 60, 56, + 60, 58, + 60, 67, + 60, 72, + 60, 75, + 60, 87, + 60, 88, + 60, 90, + 64, 72, + 64, 75, + 64, 81, + 66, 11, + 66, 87, + 66, 88, + 66, 90, + 67, 7, + 67, 11, + 67, 13, + 67, 14, + 67, 15, + 67, 16, + 67, 32, + 67, 33, + 67, 68, + 67, 69, + 67, 70, + 67, 72, + 67, 80, + 67, 82, + 67, 84, + 67, 85, + 67, 87, + 67, 88, + 67, 90, + 68, 11, + 68, 13, + 68, 15, + 68, 75, + 68, 84, + 68, 85, + 68, 87, + 68, 88, + 68, 89, + 68, 90, + 69, 11, + 69, 87, + 69, 88, + 69, 90, + 70, 13, + 70, 14, + 70, 15, + 70, 16, + 70, 33, + 70, 66, + 70, 68, + 70, 69, + 70, 70, + 70, 72, + 70, 80, + 70, 82, + 70, 84, + 71, 2, + 71, 10, + 71, 11, + 71, 13, + 71, 14, + 71, 15, + 71, 32, + 71, 62, + 71, 93, + 71, 94, + 72, 10, + 72, 11, + 72, 13, + 72, 16, + 72, 28, + 72, 32, + 72, 62, + 72, 64, + 72, 68, + 72, 69, + 72, 70, + 72, 72, + 72, 75, + 72, 80, + 72, 82, + 72, 84, + 72, 89, + 72, 91, + 72, 94, + 73, 11, + 73, 32, + 73, 87, + 73, 88, + 73, 90, + 74, 87, + 74, 88, + 74, 90, + 75, 13, + 75, 14, + 75, 15, + 75, 68, + 75, 69, + 75, 70, + 75, 75, + 75, 80, + 75, 82, + 75, 84, + 76, 11, + 76, 13, + 76, 14, + 76, 15, + 77, 11, + 77, 87, + 77, 88, + 77, 90, + 78, 11, + 78, 32, + 78, 87, + 78, 88, + 78, 90, + 79, 11, + 79, 32, + 79, 87, + 79, 88, + 79, 90, + 80, 7, + 80, 11, + 80, 13, + 80, 14, + 80, 15, + 80, 16, + 80, 32, + 80, 33, + 80, 68, + 80, 69, + 80, 70, + 80, 72, + 80, 80, + 80, 82, + 80, 84, + 80, 85, + 80, 87, + 80, 88, + 80, 90, + 81, 7, + 81, 11, + 81, 13, + 81, 14, + 81, 15, + 81, 16, + 81, 32, + 81, 33, + 81, 68, + 81, 69, + 81, 70, + 81, 72, + 81, 80, + 81, 82, + 81, 84, + 81, 85, + 81, 87, + 81, 88, + 81, 90, + 82, 10, + 82, 11, + 82, 13, + 82, 16, + 82, 28, + 82, 62, + 82, 64, + 82, 72, + 82, 75, + 82, 81, + 82, 84, + 82, 94, + 83, 2, + 83, 11, + 83, 13, + 83, 15, + 83, 16, + 83, 32, + 83, 68, + 83, 69, + 83, 70, + 83, 75, + 83, 80, + 83, 82, + 83, 84, + 83, 85, + 83, 87, + 83, 88, + 83, 90, + 83, 91, + 84, 7, + 84, 14, + 84, 32, + 84, 66, + 84, 68, + 84, 69, + 84, 70, + 84, 72, + 84, 80, + 84, 82, + 84, 84, + 84, 85, + 85, 14, + 85, 32, + 85, 68, + 85, 69, + 85, 70, + 85, 80, + 85, 82, + 85, 84, + 86, 11, + 86, 32, + 86, 87, + 86, 88, + 86, 90, + 87, 7, + 87, 10, + 87, 11, + 87, 13, + 87, 15, + 87, 16, + 87, 27, + 87, 28, + 87, 32, + 87, 33, + 87, 62, + 87, 66, + 87, 68, + 87, 69, + 87, 70, + 87, 80, + 87, 82, + 87, 94, + 88, 7, + 88, 10, + 88, 11, + 88, 13, + 88, 15, + 88, 16, + 88, 27, + 88, 28, + 88, 32, + 88, 33, + 88, 62, + 88, 66, + 88, 68, + 88, 69, + 88, 70, + 88, 72, + 88, 80, + 88, 82, + 88, 94, + 89, 11, + 89, 13, + 89, 14, + 89, 15, + 89, 68, + 89, 69, + 89, 70, + 89, 72, + 89, 80, + 89, 82, + 90, 7, + 90, 10, + 90, 11, + 90, 13, + 90, 15, + 90, 16, + 90, 27, + 90, 28, + 90, 32, + 90, 33, + 90, 62, + 90, 66, + 90, 68, + 90, 69, + 90, 70, + 90, 72, + 90, 80, + 90, 82, + 90, 94, + 91, 68, + 91, 69, + 91, 70, + 91, 72, + 91, 80, + 91, 82, + 91, 84, + 91, 85, + 92, 21, + 92, 23, + 92, 24, + 92, 36, + 92, 40, + 92, 48, + 92, 50, + 92, 55, + 92, 56, + 92, 58, + 92, 67, + 92, 72, + 92, 75, + 92, 87, + 92, 88, + 92, 90 +}; + +/* Kerning between the respective left and right glyphs + * 4.4 format which needs to scaled with `kern_scale`*/ +static const int8_t kern_pair_values[] = +{ + -3, -29, -6, -13, 7, -3, -6, -12, + -3, 3, 1, -1, -10, 1, 1, 1, + 1, 1, -13, -4, -20, -13, -17, 3, + -3, -3, -3, -3, -29, -6, -13, 7, + -3, -12, -3, 4, -3, 3, 3, 3, + 3, 3, 4, 3, 7, -3, -3, -3, + -32, -7, 9, -3, 1, -35, -26, -3, + 1, 9, 6, 9, 9, 6, 9, 3, + -9, 9, -10, -10, -10, 1, -7, 6, + -10, 4, -10, 7, 4, 12, 12, 9, + 12, 3, -12, -12, -10, -3, 7, -12, + -13, -3, 3, -17, -12, -12, -3, -19, + 9, -12, -12, 7, -12, -12, -17, -20, + -32, -26, 3, -26, 4, -3, -10, -7, + -7, -7, -1, -4, -7, -4, -7, 3, + -7, -13, -20, -17, 3, -20, 9, -7, + -10, 6, 7, -10, 1, -6, 16, 16, + 16, 16, 3, -6, -12, -9, -12, -12, + 7, 7, 7, 3, 7, 7, 4, -3, + -13, -3, 3, -17, -12, -12, -3, -19, + 9, -12, -12, 7, -12, -12, -17, -20, + -32, -26, 3, -26, 4, -3, -10, -7, + -7, -7, -1, -4, -7, -4, -7, 3, + -7, -13, -20, -17, 3, -20, -40, -10, + -10, -7, -12, -32, -7, -17, -9, -7, + -19, -9, -9, -17, -9, -9, -20, 3, + -20, -20, -20, -10, -22, -3, -16, -16, + -20, -20, -16, -16, -10, -16, 3, -13, + 9, -13, -9, -1, -1, -3, -3, 7, + -12, -14, -12, -14, -10, 3, -4, 3, + 4, 6, -7, -1, -3, -12, -12, -10, + 6, 4, -3, 4, 3, 1, 1, 6, + 4, 4, -7, 4, -7, -6, -4, 4, + -13, 3, -12, 7, -13, -14, -6, 3, + 3, 6, 4, 4, -4, 3, 3, -6, + -9, 6, 4, -1, 4, -6, 4, -6, + -4, -1, 4, -6, 7, -6, 1, -6, + -9, -7, 6, -7, -3, -3, -1, -1, + -6, 4, 7, -14, 4, -7, 7, 6, + 9, -10, -30, -12, -30, -23, -1, 3, + -6, -19, -3, -9, 4, -17, -17, -12, + -10, -3, 4, -12, 7, 7, -3, 3, + -1, 6, -3, -3, -3, 1, -3, -3, + 3, 3, 7, -4, -3, -4, -4, 4, + -19, 6, -19, -16, -3, -3, -3, -1, + -1, -4, -4, -1, -1, -7, -3, -9, + -1, -9, -6, 6, 7, -6, -3, -14, + -10, -14, -3, -3, -3, -7, -3, -9, + -1, -9, -6, 6, 7, -6, -3, -14, + -10, -14, -3, -3, -3, 6, -9, -13, + -14, -12, -6, -14, 3, -4, -6, -3, + -1, 3, -10, -1, -9, 9, 9, -3, + -4, 9, 9, 1, -3, -1, -12, -7, + -7, -9, 4, 4, 4, 4, 4, -1, + -3, 3, -35, 9, -6, 9, 6, 6, + -14, -3, -3, 6, -3, -3, 3, -10, + -6, -22, -17, -12, 6, 3, -3, -4, + -13, -10, -12, 6, 7, 4, 4, 4, + 3, 4, 4, 6, -3, -3, -3, 4, + 4, 4, 4, 4, 4, 3, 3, 1, + 1, 3, 1, 1, 3, 1, 3, 3, + 3, 3, 3, 3, 1, 4, -13, 14, + -13, -3, 9, -4, 6, 6, 6, 6, + 4, 1, -3, -1, -4, -4, -1, -3, + 3, 3, 3, 1, 1, 3, 3, 3, + 3, 3, 3, 3, 3, 3, -3, 3, + 4, 4, 6, 3, 3, -3, -3, -3, + 1, 1, 1, 1, 1, 1, 3, 3, + 9, -6, 6, 12, -14, -14, -13, -6, + -6, 9, -9, -12, -1, 3, 10, 6, + 3, 3, 3, 1, 6, -6, 3, -4, + -4, -4, -3, -6, -3, -3, -4, -1, + -4, -3, 3, 3, 3, 3, -3, 6, + 4, -3, -7, -6, 17, -6, -3, 6, + -1, 4, 4, 4, 4, 4, -6, -7, + -6, -3, -6, -4, 6, 6, 6, 6, + 6, 6, 4, -4, -4, 3, 6, -14, + -14, -10, -6, -6, -1, -6, -10, 3, + 3, -4, 3, -1, -1, -1, -3, -3, + -1, -3, -1, -3, -1, 3, -17, -3, + -7, -7, 4, -7, -7, -3, -3, -3, + -3, -3, -4, -9, -7, -7, 9, -32, + 7, 7, -7, 4, 6, -19, -6, -22, + -17, -14, 3, 4, 4, 4, 3, 4, + 4, 6, -13, -12, -7, -3, 3, -1, + 1, 3, 3, 3, 3, 3, 3, 3, + -3, -3, -3, -3, 3, -10, -10, -6, + -4, -4, -1, -1, -4, -4, -4, -4, + -4, -3, -4, -1, -1, -4, -3, -4, + -1, -1, -3, -3, -3, -3, -3, -3, + 4, -13, 14, -13, -3, 9, -4, 6, + 6, 6, 6, 4, 1, -3, -1, -4, + -4, -1, -3, 3, 3, 3, 1, 1, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, -3, 3, 9, -17, 4, -17, -10, + 9, -9, 7, 7, -14, 7, 7, 9, + 10, 3, -3, 3, 4, 3, 7, 4, + 7, 7, 6, 7, 3, 4, -13, 14, + -13, -3, 9, -4, 6, 6, 6, 6, + 4, 1, -3, -1, -4, -4, -1, -3, + 3, 3, 3, 1, 1, 3, 3, 3, + 3, 3, 3, 3, 3, 3, -3, -3, + -14, -12, -9, -4, -4, -4, -4, -4, + -7, -6, -12, -10, -9, -4, -1, -4, + -3, -3, -3, -3, -6, -3, 1, -1, + -3, -7, -7, -7, -4, 3, -3, 4, + 3, -1, 4, 4, 3, 4, 4, 4, + -3, -1, -3, 4, 4, 4, 4, 4, + 4, 6, -3, 3, 9, -17, -6, -17, + -14, -6, -6, 6, -4, -10, 1, 1, + -16, 1, 1, 4, 12, 6, 7, 7, + 3, 7, 3, -6, 7, -9, -9, -9, + -7, 4, -9, -9, -3, 6, 4, 6, + 6, 3, 6, 3, -1, 3, 6, -17, + -17, -6, -3, -3, 6, -3, -6, -6, + 1, 6, 6, -3, 6, -3, -3, -3, + -3, 3, -3, -3, -3, -3, -3, -3, + -3, -1, 3, -10, 3, 9, -29, -12, + -29, -19, -14, -14, 3, -17, -22, -4, + -4, -17, -4, -4, -1, 7, 3, -14, + 6, -14, -14, -14, -4, -13, 1, -9, + -9, -14, -7, -14, -9, -10, -6, -3, + -6, 3, 3, -7, 3, 9, -26, -9, + -26, -16, -10, -10, 3, -14, -17, -3, + -3, -14, -3, -3, -1, 7, 3, -14, + 4, -14, -14, -14, -6, -14, 3, -9, + -9, -14, -9, -14, -9, -9, -3, -3, + -7, 3, 6, 3, -12, 3, 6, -4, + -4, 6, -4, -4, 3, -3, -3, -3, + 1, -3, -3, -3, -1, -7, -7, -7, + 3, -13, 3, 9, -26, -12, -26, -14, + -14, -14, 3, -14, -12, -7, -7, -16, + -1, -7, -7, -1, 7, 3, -14, 6, + -17, -17, -17, -6, -14, 3, -10, -10, + -17, -9, -17, -10, -12, -7, -6, -6, + -9, -6, -10, 3, 3, 7, 7, 6, + 7, 4, 4, 3, 4, 4, 4, 4, + 3, 4, 4, 6, 1, -10, -3, 4, + -3, -3, -3, -3, 3, 3, 3, 3, + 6, 6, -6, -6, -3, 17, 12, 12, + -12, -7, -7, -7, 3, -10, -9, 7, + -9, -1, -3, 6, 3, 3, 3, 1, + 3, 3, 3, 1, -1, -1, -1, 3, + -4, -4, 1, 3, 3, 3, 1, 1, + 1, -4, -1, -1, -1, -3, 6, -3, + -1, 6, 1, 1, 1, 1, 1, 1, + 1, 3, 19, 26, 23, -7, -4, -7, + 23, 20, 10, 20, 3, 4, 7, 12, + 4, 4, 6, 14, 1, 1, 1, 3, + 3, 1, 1, 1, 4, 1, 6, -13, + -6, -4, -3, -4, -3, -1, -1, -4, + 3, -4, 1, 1, 1, 1, 1, 1, + 1, 1, 4, -9, 4, -4, -1, -1, + -1, -13, -6, -4, -3, -4, -13, -6, + -4, -3, -4, 3, -10, -9, 7, -9, + -1, -3, 6, 3, 3, 3, 1, 3, + 3, 3, 1, -1, -1, -1, 3, -10, + -9, 7, -9, -1, -3, 6, 3, 3, + 3, 1, 3, 3, 3, 1, -1, -1, + -1, 6, -3, 6, 9, 3, 3, 17, + 4, 7, 7, 1, 3, 4, 7, -12, + -12, -4, 9, -1, -1, -1, 3, -1, + -1, 1, 3, 4, 4, 4, 1, 3, + 1, -6, 1, 3, 3, 3, 1, 3, + 3, 1, 1, -6, 1, -1, -1, -1, + -1, -1, 1, -14, -7, -1, -1, -1, + -3, -3, 12, -20, -20, -12, -3, -3, + 9, -4, -9, -6, -3, -3, -3, -3, + -3, -9, -3, -3, 12, -20, -20, -13, + -3, -3, 6, -4, -6, -3, -3, -3, + -3, -3, -3, -3, -6, 9, 3, -3, + 3, -1, -1, -1, 4, -1, -1, -4, + -3, 12, -20, -20, -12, -3, -3, 3, + -7, -6, -6, -4, -4, -4, -3, -4, + -4, -6, 3, 3, 3, 1, 3, 3, + 3, 3, -10, -3, 4, -3, -3, -3, + -3, 3, 3, 3, 3, 6, 6, -6, + -6, -3 +}; + +/*Collect the kern pair's data in one place*/ +static const lv_font_fmt_txt_kern_pair_t kern_pairs = +{ + .glyph_ids = kern_pair_glyph_ids, + .values = kern_pair_values, + .pair_cnt = 1418, + .glyph_ids_size = 0 +}; + +/*-------------------- + * ALL CUSTOM DATA + *--------------------*/ + +#if LVGL_VERSION_MAJOR == 8 +/*Store all the custom data of the font*/ +static lv_font_fmt_txt_glyph_cache_t cache; +#endif + +#if LVGL_VERSION_MAJOR >= 8 +static const lv_font_fmt_txt_dsc_t font_dsc = { +#else +static lv_font_fmt_txt_dsc_t font_dsc = { +#endif + .glyph_bitmap = glyph_bitmap, + .glyph_dsc = glyph_dsc, + .cmaps = cmaps, + .kern_dsc = &kern_pairs, + .kern_scale = 16, + .cmap_num = 1, + .bpp = 4, + .kern_classes = 0, + .bitmap_format = 0, +#if LVGL_VERSION_MAJOR == 8 + .cache = &cache +#endif +}; + + + +/*----------------- + * PUBLIC FONT + *----------------*/ + +/*Initialize a public general font descriptor*/ +#if LVGL_VERSION_MAJOR >= 8 +const lv_font_t font_tiempos_18 = { +#else +lv_font_t font_tiempos_18 = { +#endif + .get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/ + .get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/ + .line_height = 20, /*The maximum line height required by the font*/ + .base_line = 4, /*Baseline measured from the bottom of the line*/ +#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0) + .subpx = LV_FONT_SUBPX_NONE, +#endif +#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8 + .underline_position = -2, + .underline_thickness = 1, +#endif + .dsc = &font_dsc, /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */ +#if LV_VERSION_CHECK(8, 2, 0) || LVGL_VERSION_MAJOR >= 9 + .fallback = NULL, +#endif + .user_data = NULL, +}; + + + +#endif /*#if FONT_TIEMPOS_18*/ + diff --git a/firmware/src/main.cpp b/firmware/src/main.cpp index 1207553b5..606046394 100644 --- a/firmware/src/main.cpp +++ b/firmware/src/main.cpp @@ -110,6 +110,8 @@ static bool parse_json(const char* json, UsageData* out) { out->weekly_pct = doc["w"] | 0.0f; out->weekly_reset_mins = doc["wr"] | -1; strlcpy(out->status, doc["st"] | "unknown", sizeof(out->status)); + strlcpy(out->clock, doc["t"] | "", sizeof(out->clock)); + for (int i = 0; i < 7; i++) out->day7[i] = (uint8_t)(doc["d7"][i] | 0); out->ok = doc["ok"] | false; out->valid = true; return true; diff --git a/firmware/src/theme.h b/firmware/src/theme.h index aa684649f..4f175ed15 100644 --- a/firmware/src/theme.h +++ b/firmware/src/theme.h @@ -12,3 +12,5 @@ #define THEME_AMBER lv_color_hex(0xd97757) #define THEME_RED lv_color_hex(0xc0392b) #define THEME_BAR_BG lv_color_hex(0x2a2a28) // unfilled bar track +#define THEME_FAINT lv_color_hex(0x6b6660) // faint captions (section labels, clock) +#define THEME_TRACK7 lv_color_hex(0x3a3a36) // 7-day sparkline empty bars diff --git a/firmware/src/ui.cpp b/firmware/src/ui.cpp index 3bdeab2ff..5041bbff7 100644 --- a/firmware/src/ui.cpp +++ b/firmware/src/ui.cpp @@ -17,6 +17,9 @@ LV_FONT_DECLARE(font_styrene_14); LV_FONT_DECLARE(font_styrene_12); LV_FONT_DECLARE(font_mono_32); LV_FONT_DECLARE(font_mono_18); +LV_FONT_DECLARE(font_mono_15); +LV_FONT_DECLARE(font_mono_11); +LV_FONT_DECLARE(font_tiempos_18); // Layout values computed from the active board's geometry. Populated once // in ui_init() and treated as const for the rest of the program. Adding a @@ -148,24 +151,33 @@ static void compute_layout(const BoardCaps& c) { #define COL_AMBER THEME_AMBER #define COL_RED THEME_RED #define COL_BAR_BG THEME_BAR_BG +#define COL_FAINT THEME_FAINT +#define COL_TRACK7 THEME_TRACK7 // ---- Usage screen widgets (single non-splash view) ---- +// Redesigned "Empfehlung" layout: header (logo + wordmark + clock), SESSION +// hero (big %, bar with pace marker, pace verdict), 7-day sparkline, WEEKLY +// secondary, animated status line. Built inline in init_usage_screen(). static lv_obj_t* usage_container; -static lv_obj_t* lbl_title; -static lv_obj_t* usage_group; // the two usage panels — shown when connected -static lv_obj_t* pair_group; // pairing hint — shown when disconnected +static lv_obj_t* usage_group; // live usage content — toggled vs pair/idle overlays +static lv_obj_t* pair_group; // pairing hint — shown when disconnected +static lv_obj_t* lbl_wordmark; // "Usage" +static lv_obj_t* lbl_clock; // top-right HH:MM (placeholder until daemon sends time) +static lv_obj_t* lbl_session_pct; // big session number (no % sign) +static lv_obj_t* lbl_pct_sign; // "%" — repositioned right after the number +static lv_obj_t* lbl_session_reset; // "2h 47m left" static lv_obj_t* bar_session; -static lv_obj_t* lbl_session_pct; -static lv_obj_t* lbl_session_label; -static lv_obj_t* lbl_session_reset; +static lv_obj_t* pace_marker; // white tick on the session bar = expected pace +static lv_obj_t* pace_dot; // colored dot in the pace verdict row +static lv_obj_t* lbl_pace; // "Ueber/Unter Tempo - ..." +static lv_obj_t* bar_day[7]; // 7-day sparkline (today = rightmost) static lv_obj_t* bar_weekly; static lv_obj_t* lbl_weekly_pct; -static lv_obj_t* lbl_weekly_label; -static lv_obj_t* lbl_weekly_reset; -static lv_obj_t* lbl_anim; // status line: connection state + whimsical idle +static lv_obj_t* lbl_anim; // status line: connection state + whimsical idle // ---- Battery indicator (shared, on top) ---- static lv_obj_t* battery_img; +static bool battery_present = false; // set from ui_update_battery; hides icon when no cell static lv_obj_t* logo_img; static lv_image_dsc_t battery_dscs[5]; // empty, low, medium, full, charging @@ -191,6 +203,12 @@ static uint8_t anim_spinner_idx = 0; static uint8_t anim_phase = 0; static uint8_t anim_msg_idx = 0; static uint32_t anim_msg_start = 0; + +// Clock: the daemon sends a snapshot once per poll (~60s). We take it as a base +// and advance locally via lv_tick so the displayed time stays minute-accurate +// between updates instead of lagging up to a poll interval behind. +static int clock_base_sec = -1; // seconds-of-day at last sync, or -1 +static uint32_t clock_base_ms = 0; // lv_tick when that sync arrived #define ANIM_MSG_MS 4000 static const char* const spinner_frames[] = { @@ -301,21 +319,25 @@ static void init_icon_dsc_rgb565a8(lv_image_dsc_t* dsc, int w, int h, const uint dsc->data_size = w * h * 3; } -static lv_obj_t* make_pill(lv_obj_t* parent, const char* text) { +// Small upper-case section caption (SESSION / LETZTE 7 TAGE / WEEKLY). +static lv_obj_t* make_caption(lv_obj_t* parent, const char* text, + const lv_font_t* font, lv_color_t color) { lv_obj_t* lbl = lv_label_create(parent); lv_label_set_text(lbl, text); - lv_obj_set_style_text_font(lbl, L.usage_pill_font, 0); - lv_obj_set_style_text_color(lbl, COL_TEXT, 0); - lv_obj_set_style_bg_color(lbl, COL_BAR_BG, 0); - lv_obj_set_style_bg_opa(lbl, LV_OPA_COVER, 0); - lv_obj_set_style_radius(lbl, LV_RADIUS_CIRCLE, 0); - lv_obj_set_style_pad_left(lbl, 18, 0); - lv_obj_set_style_pad_right(lbl, 18, 0); - lv_obj_set_style_pad_top(lbl, 6, 0); - lv_obj_set_style_pad_bottom(lbl, 6, 0); + lv_obj_set_style_text_font(lbl, font, 0); + lv_obj_set_style_text_color(lbl, color, 0); + lv_obj_set_style_text_letter_space(lbl, 1, 0); return lbl; } +// Compact reset time without the "Resets in " prefix: "47m" / "2h 47m" / "4d 3h". +static void format_reset_short(int mins, char* buf, size_t len) { + if (mins < 0) snprintf(buf, len, "--"); + else if (mins < 60) snprintf(buf, len, "%dm", mins); + else if (mins < 1440) snprintf(buf, len, "%dh %dm", mins / 60, mins % 60); + else snprintf(buf, len, "%dd %dh", mins / 1440, (mins % 1440) / 60); +} + static void init_battery_icons(void) { init_icon_dsc_rgb565a8(&battery_dscs[0], ICON_BATTERY_W, ICON_BATTERY_H, icon_battery_data); init_icon_dsc_rgb565a8(&battery_dscs[1], ICON_BATTERY_LOW_W, ICON_BATTERY_LOW_H, icon_battery_low_data); @@ -326,28 +348,7 @@ static void init_battery_icons(void) { // ======== Usage Screen ======== -static void make_usage_panel(lv_obj_t* parent, int y, const char* pill_text, - lv_obj_t** out_pct, lv_obj_t** out_pill, - lv_obj_t** out_bar, lv_obj_t** out_reset) { - lv_obj_t* panel = make_panel(parent, L.margin, y, L.content_w, L.usage_panel_h); - - *out_pct = lv_label_create(panel); - lv_label_set_text(*out_pct, "---%"); - lv_obj_set_style_text_font(*out_pct, L.usage_pct_font, 0); - lv_obj_set_style_text_color(*out_pct, COL_TEXT, 0); - lv_obj_set_pos(*out_pct, 0, 0); - - *out_pill = make_pill(panel, pill_text); - lv_obj_align(*out_pill, LV_ALIGN_TOP_RIGHT, 0, 1); - - *out_bar = make_bar(panel, 0, L.usage_bar_y, L.content_w - 32, L.usage_bar_h); - - *out_reset = lv_label_create(panel); - lv_label_set_text(*out_reset, "---"); - lv_obj_set_style_text_font(*out_reset, L.usage_reset_font, 0); - lv_obj_set_style_text_color(*out_reset, COL_DIM, 0); - lv_obj_set_pos(*out_reset, 0, L.usage_reset_y); -} +// (The usage view is built inline in init_usage_screen() below.) // Pairing hint — shown when disconnected so the screen isn't empty and the // user knows how to (re)pair. Wording matches the 3-second release gesture. @@ -404,7 +405,24 @@ static void build_idle_group(lv_obj_t* parent) { lv_obj_add_flag(idle_group, LV_OBJ_FLAG_HIDDEN); // update_view_state decides } +// A borderless, transparent-or-filled child object with no padding/scroll — +// used for the pace marker, pace dot and sparkline bars. +static lv_obj_t* make_block(lv_obj_t* parent, int w, int h, lv_color_t color) { + lv_obj_t* o = lv_obj_create(parent); + lv_obj_set_size(o, w, h); + lv_obj_set_style_bg_color(o, color, 0); + lv_obj_set_style_bg_opa(o, LV_OPA_COVER, 0); + lv_obj_set_style_border_width(o, 0, 0); + lv_obj_set_style_radius(o, 0, 0); + lv_obj_set_style_pad_all(o, 0, 0); + lv_obj_clear_flag(o, LV_OBJ_FLAG_SCROLLABLE); + return o; +} + static void init_usage_screen(lv_obj_t* scr) { + const int PADX = 16; + const int CW = L.scr_w - 2 * PADX; // content width (208 on 240px panel) + usage_container = lv_obj_create(scr); lv_obj_set_size(usage_container, L.scr_w, L.scr_h); lv_obj_set_pos(usage_container, 0, 0); @@ -414,14 +432,7 @@ static void init_usage_screen(lv_obj_t* scr) { lv_obj_clear_flag(usage_container, LV_OBJ_FLAG_SCROLLABLE); lv_obj_add_event_cb(usage_container, global_click_cb, LV_EVENT_CLICKED, NULL); - lbl_title = lv_label_create(usage_container); - lv_label_set_text(lbl_title, "Usage"); - lv_obj_set_style_text_font(lbl_title, L.usage_title_font, 0); - lv_obj_set_style_text_color(lbl_title, COL_TEXT, 0); - lv_obj_align(lbl_title, LV_ALIGN_TOP_MID, L.title_x_off, L.title_y); - - // Usage panels (shown when connected) live in a transparent full-size group - // so they can be toggled against the pairing hint as one unit. + // Live usage content — toggled against the pair/idle overlays as one unit. usage_group = lv_obj_create(usage_container); lv_obj_set_size(usage_group, L.scr_w, L.scr_h); lv_obj_set_pos(usage_group, 0, 0); @@ -431,13 +442,117 @@ static void init_usage_screen(lv_obj_t* scr) { lv_obj_clear_flag(usage_group, LV_OBJ_FLAG_SCROLLABLE); lv_obj_add_flag(usage_group, LV_OBJ_FLAG_EVENT_BUBBLE); - make_usage_panel(usage_group, L.content_y, "Current", - &lbl_session_pct, &lbl_session_label, - &bar_session, &lbl_session_reset); - make_usage_panel(usage_group, - L.content_y + L.usage_panel_h + L.usage_panel_gap, "Weekly", - &lbl_weekly_pct, &lbl_weekly_label, - &bar_weekly, &lbl_weekly_reset); + // --- Header: logo + wordmark · clock --- + logo_img = lv_image_create(usage_group); + lv_image_set_src(logo_img, &logo_dsc); + lv_image_set_pivot(logo_img, 0, 0); + lv_image_set_scale(logo_img, 64); // 80px art -> ~20px + lv_obj_set_pos(logo_img, PADX, 13); + + lbl_wordmark = lv_label_create(usage_group); + lv_label_set_text(lbl_wordmark, "Usage"); + lv_obj_set_style_text_font(lbl_wordmark, &font_tiempos_18, 0); + lv_obj_set_style_text_color(lbl_wordmark, COL_TEXT, 0); + lv_obj_set_pos(lbl_wordmark, PADX + 26, 15); + + lbl_clock = lv_label_create(usage_group); + lv_label_set_text(lbl_clock, "--:--"); + lv_obj_set_style_text_font(lbl_clock, &font_mono_11, 0); + lv_obj_set_style_text_color(lbl_clock, COL_FAINT, 0); + lv_obj_set_style_text_letter_space(lbl_clock, 1, 0); + lv_obj_align(lbl_clock, LV_ALIGN_TOP_RIGHT, -PADX, 18); + + // --- SESSION caption + reset --- + lv_obj_t* s_cap = make_caption(usage_group, "SESSION", &font_styrene_12, COL_DIM); + lv_obj_set_pos(s_cap, PADX, 44); + + lbl_session_reset = lv_label_create(usage_group); + lv_label_set_text(lbl_session_reset, "--"); + lv_obj_set_style_text_font(lbl_session_reset, &font_mono_11, 0); + lv_obj_set_style_text_color(lbl_session_reset, COL_DIM, 0); + lv_obj_align(lbl_session_reset, LV_ALIGN_TOP_RIGHT, -PADX, 44); + + // --- Big session % --- + lbl_session_pct = lv_label_create(usage_group); + lv_label_set_text(lbl_session_pct, "--"); + lv_obj_set_style_text_font(lbl_session_pct, &font_styrene_48, 0); + lv_obj_set_style_text_color(lbl_session_pct, COL_TEXT, 0); + lv_obj_set_pos(lbl_session_pct, PADX, 60); + + lbl_pct_sign = lv_label_create(usage_group); + lv_label_set_text(lbl_pct_sign, "%"); + lv_obj_set_style_text_font(lbl_pct_sign, &font_styrene_24, 0); + lv_obj_set_style_text_color(lbl_pct_sign, COL_DIM, 0); + lv_obj_set_pos(lbl_pct_sign, PADX + 56, 86); // repositioned in ui_update + + // --- Session bar + pace marker --- + bar_session = make_bar(usage_group, PADX, 124, CW, 14); + lv_obj_set_style_radius(bar_session, 7, LV_PART_MAIN); + lv_obj_set_style_radius(bar_session, 7, LV_PART_INDICATOR); + + pace_marker = make_block(usage_group, 2, 18, COL_TEXT); + lv_obj_set_pos(pace_marker, PADX, 122); // x set in ui_update + + // --- Pace verdict: dot + text --- + pace_dot = make_block(usage_group, 7, 7, COL_GREEN); + lv_obj_set_style_radius(pace_dot, LV_RADIUS_CIRCLE, 0); + lv_obj_set_pos(pace_dot, PADX, 150); + + lbl_pace = lv_label_create(usage_group); + lv_label_set_text(lbl_pace, ""); + lv_obj_set_style_text_font(lbl_pace, &font_mono_11, 0); + lv_obj_set_style_text_color(lbl_pace, COL_DIM, 0); + lv_obj_set_pos(lbl_pace, PADX + 13, 147); + + // --- LETZTE 7 TAGE sparkline --- + lv_obj_t* d_cap = make_caption(usage_group, "LETZTE 7 TAGE", &font_styrene_12, COL_FAINT); + lv_obj_set_pos(d_cap, PADX, 172); + + lv_obj_t* days = lv_obj_create(usage_group); + lv_obj_set_pos(days, PADX, 189); + lv_obj_set_size(days, CW, 30); + lv_obj_set_style_bg_opa(days, LV_OPA_TRANSP, 0); + lv_obj_set_style_border_width(days, 0, 0); + lv_obj_set_style_pad_all(days, 0, 0); + lv_obj_clear_flag(days, LV_OBJ_FLAG_SCROLLABLE); + lv_obj_set_flex_flow(days, LV_FLEX_FLOW_ROW); + lv_obj_set_flex_align(days, LV_FLEX_ALIGN_SPACE_BETWEEN, LV_FLEX_ALIGN_END, LV_FLEX_ALIGN_END); + static const int dh[7] = {18, 12, 23, 30, 16, 21, 13}; // placeholder heights + for (int i = 0; i < 7; i++) { + bar_day[i] = make_block(days, 25, dh[i], COL_TRACK7); + lv_obj_set_style_radius(bar_day[i], 2, 0); + } + + // --- WEEKLY secondary: flex row [label · bar · %], equal gaps via pad_column --- + lv_obj_t* wk = lv_obj_create(usage_group); + lv_obj_set_pos(wk, PADX, 227); + lv_obj_set_size(wk, CW, 16); + lv_obj_set_style_bg_opa(wk, LV_OPA_TRANSP, 0); + lv_obj_set_style_border_width(wk, 0, 0); + lv_obj_set_style_pad_all(wk, 0, 0); + lv_obj_set_style_pad_column(wk, 10, 0); // same gap left & right of the bar + lv_obj_clear_flag(wk, LV_OBJ_FLAG_SCROLLABLE); + lv_obj_set_flex_flow(wk, LV_FLEX_FLOW_ROW); + lv_obj_set_flex_align(wk, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + + make_caption(wk, "WEEKLY", &font_styrene_12, COL_DIM); + + bar_weekly = lv_bar_create(wk); + lv_obj_set_height(bar_weekly, 6); + lv_obj_set_flex_grow(bar_weekly, 1); // fills the middle; gaps stay equal + lv_bar_set_range(bar_weekly, 0, 100); + lv_bar_set_value(bar_weekly, 0, LV_ANIM_OFF); + lv_obj_set_style_bg_color(bar_weekly, COL_BAR_BG, LV_PART_MAIN); + lv_obj_set_style_bg_opa(bar_weekly, LV_OPA_COVER, LV_PART_MAIN); + lv_obj_set_style_radius(bar_weekly, 3, LV_PART_MAIN); + lv_obj_set_style_bg_color(bar_weekly, COL_GREEN, LV_PART_INDICATOR); + lv_obj_set_style_bg_opa(bar_weekly, LV_OPA_COVER, LV_PART_INDICATOR); + lv_obj_set_style_radius(bar_weekly, 3, LV_PART_INDICATOR); + + lbl_weekly_pct = lv_label_create(wk); + lv_label_set_text(lbl_weekly_pct, "--%"); + lv_obj_set_style_text_font(lbl_weekly_pct, &font_mono_11, 0); + lv_obj_set_style_text_color(lbl_weekly_pct, COL_DIM, 0); build_pair_group(usage_container); build_idle_group(usage_container); @@ -445,9 +560,9 @@ static void init_usage_screen(lv_obj_t* scr) { // Status line — always visible on the usage view. Driven by ui_tick_anim(). lbl_anim = lv_label_create(usage_container); lv_label_set_text(lbl_anim, ""); - lv_obj_set_style_text_font(lbl_anim, L.usage_status_font, 0); + lv_obj_set_style_text_font(lbl_anim, &font_mono_15, 0); lv_obj_set_style_text_color(lbl_anim, COL_ACCENT, 0); - lv_obj_align(lbl_anim, LV_ALIGN_BOTTOM_MID, 0, -15); + lv_obj_align(lbl_anim, LV_ALIGN_BOTTOM_MID, 0, -12); } // ======== Public API ======== @@ -469,16 +584,7 @@ void ui_init(void) { lv_obj_add_event_cb(splash_get_root(), global_click_cb, LV_EVENT_CLICKED, NULL); } - logo_img = lv_image_create(scr); - lv_image_set_src(logo_img, &logo_dsc); - lv_image_set_pivot(logo_img, 0, 0); - lv_image_set_scale(logo_img, L.logo_scale); - lv_obj_set_pos(logo_img, L.margin, L.title_y - 10); - - battery_img = lv_image_create(scr); - lv_image_set_src(battery_img, &battery_dscs[0]); - lv_obj_set_pos(battery_img, L.scr_w - 48 - L.margin, L.title_y); - + // Logo lives in the usage-screen header now; no battery icon on this layout. } void ui_update(const UsageData* data) { @@ -486,23 +592,63 @@ void ui_update(const UsageData* data) { last_data_ms = lv_tick_get(); // a valid usage update just landed → dot goes green data_received = true; + const int PADX = 16; int s_pct = (int)(data->session_pct + 0.5f); + int w_pct = (int)(data->weekly_pct + 0.5f); + lv_color_t s_col = pct_color(data->session_pct); + + // Big session number; the "%" sign trails it at the same baseline. + lv_label_set_text_fmt(lbl_session_pct, "%d", s_pct); + lv_obj_update_layout(lbl_session_pct); + lv_obj_set_pos(lbl_pct_sign, PADX + lv_obj_get_width(lbl_session_pct) + 3, 86); - lv_label_set_text_fmt(lbl_session_pct, "%d%%", s_pct); lv_bar_set_value(bar_session, s_pct, LV_ANIM_ON); - lv_obj_set_style_bg_color(bar_session, pct_color(data->session_pct), LV_PART_INDICATOR); + lv_obj_set_style_bg_color(bar_session, s_col, LV_PART_INDICATOR); + + char buf[32]; + format_reset_short(data->session_reset_mins, buf, sizeof(buf)); + lv_label_set_text_fmt(lbl_session_reset, "%s left", buf); + + // Pace marker = elapsed share of the 5h (300 min) session window. The fill + // left of the marker is your buffer; past it means you're burning ahead. + int reset = data->session_reset_mins; + int elapsed = 300 - (reset < 0 ? 300 : reset); + if (elapsed < 0) elapsed = 0; + if (elapsed > 300) elapsed = 300; + int pace = elapsed * 100 / 300; + int track_w = lv_obj_get_width(bar_session); + if (track_w <= 0) track_w = L.scr_w - 2 * PADX; + lv_obj_set_pos(pace_marker, PADX + pace * track_w / 100, 122); + + bool ahead = s_pct > pace; + lv_obj_set_style_bg_color(pace_dot, + ahead ? (s_pct >= 80 ? COL_RED : COL_AMBER) : COL_GREEN, 0); + // Mono font carries the umlaut + middot glyphs. Split the \xC3\x9C (Ü) + // escape from "ber" — a \x escape greedily eats following hex digits (b,e). + lv_label_set_text(lbl_pace, ahead ? "\xC3\x9C" "ber Tempo \xC2\xB7 Cap droht" + : "Unter Tempo \xC2\xB7 Reset vor Limit"); + + // Clock: capture host time (HH:MM:SS) to the second; ui_tick_anim advances + // it locally so the minute flips at the real boundary, not the poll instant. + if (data->clock[0] >= '0' && data->clock[0] <= '2' && data->clock[2] == ':') { + int hh = (data->clock[0] - '0') * 10 + (data->clock[1] - '0'); + int mm = (data->clock[3] - '0') * 10 + (data->clock[4] - '0'); + int ss = (data->clock[5] == ':') ? (data->clock[6] - '0') * 10 + (data->clock[7] - '0') : 0; + clock_base_sec = hh * 3600 + mm * 60 + ss; + clock_base_ms = lv_tick_get(); + } - char buf[48]; - format_reset_time(data->session_reset_mins, buf, sizeof(buf)); - lv_label_set_text(lbl_session_reset, buf); + // 7-day sparkline: heights from the daemon (0-100 → 2..30px), today coloured. + for (int i = 0; i < 7; i++) { + if (!bar_day[i]) continue; + int hpx = 2 + (int)data->day7[i] * 28 / 100; + lv_obj_set_height(bar_day[i], hpx); + lv_obj_set_style_bg_color(bar_day[i], i == 6 ? s_col : COL_TRACK7, 0); + } - int w_pct = (int)(data->weekly_pct + 0.5f); lv_label_set_text_fmt(lbl_weekly_pct, "%d%%", w_pct); lv_bar_set_value(bar_weekly, w_pct, LV_ANIM_ON); lv_obj_set_style_bg_color(bar_weekly, pct_color(data->weekly_pct), LV_PART_INDICATOR); - - format_reset_time(data->weekly_reset_mins, buf, sizeof(buf)); - lv_label_set_text(lbl_weekly_reset, buf); } // Pick the usage-view sub-screen: pairing hint (BLE down), the idle "Zzz" screen @@ -528,9 +674,18 @@ static void update_view_state(void) { LV_OBJ_FLAG_HIDDEN); } +// Advance the clock locally from the last host sync so it doesn't lag the poll. +static void update_clock(void) { + if (clock_base_sec < 0 || !lbl_clock) return; + uint32_t elapsed = (lv_tick_get() - clock_base_ms) / 1000; + int cur = (clock_base_sec + (int)elapsed) % 86400; + lv_label_set_text_fmt(lbl_clock, "%02d:%02d", cur / 3600, (cur % 3600) / 60); +} + void ui_tick_anim(void) { if (current_screen != SCREEN_USAGE) return; update_view_state(); + update_clock(); if (view_state == 1) splash_mini_tick(); // animate the sleeping creature on the idle screen uint32_t now = lv_tick_get(); @@ -568,8 +723,11 @@ void ui_tick_anim(void) { static screen_t prev_non_splash_screen = SCREEN_USAGE; static void apply_battery_visibility(void) { if (!battery_img) return; - if (current_screen == SCREEN_SPLASH) lv_obj_add_flag(battery_img, LV_OBJ_FLAG_HIDDEN); - else lv_obj_clear_flag(battery_img, LV_OBJ_FLAG_HIDDEN); + // Hidden on the splash screen, and whenever no battery is present — some + // boards ship without a cell (PMU populated, no battery). + bool show = battery_present && current_screen != SCREEN_SPLASH; + if (show) lv_obj_clear_flag(battery_img, LV_OBJ_FLAG_HIDDEN); + else lv_obj_add_flag(battery_img, LV_OBJ_FLAG_HIDDEN); } static void global_click_cb(lv_event_t* e) { @@ -618,20 +776,19 @@ void ui_update_ble_status(ble_state_t state, const char* name, const char* mac) } void ui_update_battery(int percent, bool charging) { - int idx; - if (charging) { - idx = 4; - } else if (percent < 0) { - idx = 0; - } else if (percent <= 10) { - idx = 0; - } else if (percent <= 35) { - idx = 1; - } else if (percent <= 75) { - idx = 2; - } else { - idx = 3; + // Hide the icon unless the board actually has a battery AND a cell is + // detected. Boards without a battery (has_battery=false) never show it; + // battery-optional boards hide it when power_hal reports percent < 0. + (void)charging; + battery_present = board_caps().has_battery && (percent >= 0); + if (battery_present) { + int idx; + if (charging) idx = 4; + else if (percent <= 10) idx = 0; + else if (percent <= 35) idx = 1; + else if (percent <= 75) idx = 2; + else idx = 3; + lv_image_set_src(battery_img, &battery_dscs[idx]); } - lv_image_set_src(battery_img, &battery_dscs[idx]); apply_battery_visibility(); }