Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • add_menu_vibration
  • blinkisync-as-preload
  • ch3/api-speed-eval2
  • ch3/dual-core
  • ch3/genapi-refactor
  • ch3/leds-api
  • ch3/splashscreen
  • ctx
  • dualcore
  • dx/flatten-config-module
  • dx/meh-bdf-to-stm
  • freertos-btle
  • genofire/ble-follow-py
  • koalo/bhi160-works-but-dirty
  • koalo/factory-reset
  • koalo/wip/i2c-for-python
  • master
  • msgctl/faultscreen
  • msgctl/textbuffer_api
  • plaetzchen/ios-workaround
  • rahix/bhi
  • rahix/bhi160-cleanup
  • rahix/bma
  • renze/hatchery_apps
  • renze/safe_mode
  • schleicher-test
  • schneider/212-reset-hardware-when-entering-repl
  • schneider/ble-buffers
  • schneider/ble-critical-section
  • schneider/ble-fixes-2020-3
  • schneider/ble-hid
  • schneider/ble-stability
  • schneider/ble-stability-new-phy
  • schneider/ble-time
  • schneider/bonding
  • schneider/bonding-fail-if-full
  • schneider/bonding-naming
  • schneider/bootloader-update-9a0d158
  • schneider/bsec
  • schneider/covid-tracing
  • schneider/default-main
  • schneider/exnostat-remove-gapple
  • schneider/fat-locking
  • schneider/fix-ble-mac-write
  • schneider/fundamental-test
  • schneider/g-watch
  • schneider/max30001
  • schneider/max30001-epicaridum
  • schneider/max30001-pycardium
  • schneider/maxim-sdk-update
  • schneider/mp-for-old-bl
  • schneider/mpy-portstate
  • schneider/rng-btle
  • schneider/schleicher-test
  • schneider/sdk-0.2.1-11
  • schneider/sdk-0.2.1-12
  • schneider/sdk-0.2.1-7
  • schneider/spo2-playground
  • schneider/stream-locks
  • schneider/trng-enable-fix
  • bootloader-v1
  • release-1
  • v0.0
  • v1.0
  • v1.1
  • v1.10
  • v1.11
  • v1.12
  • v1.13
  • v1.14
  • v1.15
  • v1.2
  • v1.3
  • v1.4
  • v1.5
  • v1.6
  • v1.7
  • v1.8
  • v1.9
79 results

Target

Select target project
  • card10/firmware
  • annejan/firmware
  • astro/firmware
  • fpletz/firmware
  • gerd/firmware
  • fleur/firmware
  • swym/firmware
  • l/firmware
  • uberardy/firmware
  • wink/firmware
  • madonius/firmware
  • mot/firmware
  • filid/firmware
  • q3k/firmware
  • hauke/firmware
  • Woazboat/firmware
  • pink/firmware
  • mossmann/firmware
  • omniskop/firmware
  • zenox/firmware
  • trilader/firmware
  • Danukeru/firmware
  • shoragan/firmware
  • zlatko/firmware
  • sistason/firmware
  • datenwolf/firmware
  • bene/firmware
  • amedee/firmware
  • martinling/firmware
  • griffon/firmware
  • chris007/firmware
  • adisbladis/firmware
  • dbrgn/firmware
  • jelly/firmware
  • rnestler/firmware
  • mh/firmware
  • ln/firmware
  • penguineer/firmware
  • monkeydom/firmware
  • jens/firmware
  • jnaulty/firmware
  • jeffmakes/firmware
  • marekventur/firmware
  • pete/firmware
  • h2obrain/firmware
  • DooMMasteR/firmware
  • jackie/firmware
  • prof_r/firmware
  • Draradech/firmware
  • Kartoffel/firmware
  • hinerk/firmware
  • abbradar/firmware
  • JustTB/firmware
  • LuKaRo/firmware
  • iggy/firmware
  • ente/firmware
  • flgr/firmware
  • Lorphos/firmware
  • matejo/firmware
  • ceddral7/firmware
  • danb/firmware
  • joshi/firmware
  • melle/firmware
  • fitch/firmware
  • deurknop/firmware
  • sargon/firmware
  • markus/firmware
  • kloenk/firmware
  • lucaswerkmeister/firmware
  • derf/firmware
  • meh/firmware
  • dx/card10-firmware
  • torben/firmware
  • yuvadm/firmware
  • AndyBS/firmware
  • klausdieter1/firmware
  • katzenparadoxon/firmware
  • xiretza/firmware
  • ole/firmware
  • techy/firmware
  • thor77/firmware
  • TilCreator/firmware
  • fuchsi/firmware
  • dos/firmware
  • yrlf/firmware
  • PetePriority/firmware
  • SuperVirus/firmware
  • sur5r/firmware
  • tazz/firmware
  • Alienmaster/firmware
  • flo_h/firmware
  • baldo/firmware
  • mmu_man/firmware
  • Foaly/firmware
  • sodoku/firmware
  • Guinness/firmware
  • ssp/firmware
  • led02/firmware
  • Stormwind/firmware
  • arist/firmware
  • coon/firmware
  • mdik/firmware
  • pippin/firmware
  • royrobotiks/firmware
  • zigot83/firmware
  • mo_k/firmware
106 results
Select Git revision
  • add_menu_vibration
  • blinkisync-as-preload
  • ch3/api-speed-eval2
  • ch3/dual-core
  • ch3/genapi-refactor
  • ch3/leds-api
  • ch3/splashscreen
  • dualcore
  • dx/flatten-config-module
  • dx/meh-bdf-to-stm
  • freertos-btle
  • genofire/ble-follow-py
  • koalo/bhi160-works-but-dirty
  • koalo/factory-reset
  • koalo/wip/i2c-for-python
  • master
  • msgctl/faultscreen
  • msgctl/textbuffer_api
  • plaetzchen/ios-workaround
  • rahix/bhi
  • rahix/bluetooth-app-favorite
  • rahix/bma
  • rahix/user-space-ctx
  • renze/hatchery_apps
  • renze/safe_mode
  • schleicher-test
  • schneider/212-reset-hardware-when-entering-repl
  • schneider/ancs
  • schneider/ble-buffers
  • schneider/ble-central
  • schneider/ble-ecg-stream-visu
  • schneider/ble-fixes-2020-3
  • schneider/ble-mini-demo
  • schneider/ble-stability
  • schneider/ble-stability-new-phy
  • schneider/bonding
  • schneider/bonding-fail-if-full
  • schneider/bootloader-update-9a0d158
  • schneider/deepsleep
  • schneider/deepsleep2
  • schneider/deepsleep4
  • schneider/default-main
  • schneider/freertos-list-debug
  • schneider/fundamental-test
  • schneider/iaq-python
  • schneider/ir
  • schneider/max30001
  • schneider/max30001-epicaridum
  • schneider/max30001-pycardium
  • schneider/maxim-sdk-update
  • schneider/mp-exception-print
  • schneider/mp-for-old-bl
  • schneider/png
  • schneider/schleicher-test
  • schneider/sdk-0.2.1-11
  • schneider/sdk-0.2.1-7
  • schneider/sleep-display
  • schneider/spo2-playground
  • schneider/stream-locks
  • schneider/v1.17-changelog
  • bootloader-v1
  • release-1
  • v0.0
  • v1.0
  • v1.1
  • v1.10
  • v1.11
  • v1.12
  • v1.13
  • v1.14
  • v1.15
  • v1.16
  • v1.17
  • v1.18
  • v1.2
  • v1.3
  • v1.4
  • v1.5
  • v1.6
  • v1.7
  • v1.8
  • v1.9
82 results
Show changes
Commits on Source (9)
Showing
with 31733 additions and 19 deletions
......@@ -5,21 +5,39 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [Unreleased]
### Added
- `leds.flash_rocket()` API for making rockets flash asynchronously.
- Basic API for the MAX86150 pulse-oximeter.
#### For Users
- A feature to allow setting the main app on-device.
- Added compatibility to BLE 5.0 capable phones (including iPhones).
- Added pairing dialog in BLE app. Device is only visible when BLE app is
- Added a pairing dialog in the BLE app. card10 is only visible when BLE app is
active.
- G-Watch watch face.
- App for COVID-19 exposure notification statistics.
- Experimental app using the MAX86150 pulse-oximeter.
#### For Developers
- `leds.flash_rocket()` API for making rockets flash asynchronously.
- Basic API for the MAX86150 pulse-oximeter.
- CSPRNG as a replacement for the hardware TRNG which does not seem to produce
good entropy the way we are using it right now.
- Option to write HCI layer log files for debugging.
- Feature in `simple_menu` which detects long button presses.
- _Stub_ `ubluetooth` module. Not yet functional!
### Changed
- Internal changes to the way interrupts are triggered.
- Updated to a newer version of MicryPython (v1.12).
#### For Users
- The default watch face is now G-Watch.
- Improved BLE security by only allowing man-in-the-middle protected
pairings and specifying minimum key lengths.
- Read time/date automatically from iOS devices.
#### For Developers
- Updated to a newer version of MicroPython (v1.12).
- All `u{module}` MicroPython modules are now also available as `{module}` which
brings card10 more in line with upstream.
- Updated to SDK version 0.2.1-12
- The BLE pairing database was completely overhauled.
- Use the CSPRNG for all MicroPython randomness.
- Internal changes to the way interrupts are triggered.
### Fixed
- Made the `vibra` vibration motor API more stable.
......@@ -27,6 +45,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Fixed bug which made the USB serial connection unresponsive.
- Fixed bug which wrote the pairings file more periodically.
- Fixed invalid filesystem locking in BLE startup.
- Only print a single warning when a sensor stream overflows instead of spamming
the console with errors.
- Fixed issues from reloading the configuration file.
- Fixed `pycard10.py` not properly resetting the device before loading a script.
- Allow to reopen BHI160 sensor from python.
- Fixed pycardium not exiting when triggering certain failure conditions.
- Made the config parser more robust.
## [v1.15] - 2020-02-02 - [Okra]
......
......@@ -48,4 +48,6 @@ Option name Type Description
``ble_mac`` Boolean MAC address used for BLE. Format: ``ca:4d:10:xx:xx:xx``.
------------------ ---------- -----------
``ble_log_enable`` Boolean Activate HCI level logging of BLE data. Creates a new btsnoop compatible log file named ``ble.log`` in the ``logs`` folder after each boot if BLE is activated. Keeps the last 10 files.
------------------ ---------- -----------
``right_scroll`` Boolean Use both right buttons to scroll up and down. Lower left button is SELECT.
================== ========== ===========
......@@ -56,6 +56,7 @@ typedef _Bool bool;
#define API_DISP_FRAMEBUFFER 0x29
#define API_DISP_BACKLIGHT 0x2a
#define API_DISP_PRINT_ADV 0x2b
#define API_DISP_CTX 0x2c
/* API_BATTERY_VOLTAGE 0x30 */
#define API_BATTERY_CURRENT 0x31
......@@ -1612,6 +1613,17 @@ API(API_DISP_FRAMEBUFFER, int epic_disp_framebuffer(
union disp_framebuffer *fb
));
/**
* Render a ctx drawlist. The drawlist is expected to consist of complete
* commands, i.e. not only a multiple of 9 bytes, but to not chop of CTX_CONT
* entries. The function is blocking and reads data from core1s memory
* space.
*
* :data: pointer to journal data
* :length: length of journal data, in bytes.
* :return: ``0`` on success or negative value in case of an error:
*/
API(API_DISP_CTX, int epic_disp_ctx(void *data, size_t length));
/**
* Set the backlight brightness.
......
......@@ -4,6 +4,7 @@
#include "LCD_Driver.h"
#include "epicardium.h"
#include "gfx.h"
#include "ctx.h"
#include "gpio.h"
#include "task.h"
#include "tmr.h"
......@@ -183,11 +184,11 @@ int epic_disp_update()
if (cl < 0) {
return cl;
}
gfx_update(&display_screen);
return 0;
}
int epic_disp_framebuffer(union disp_framebuffer *fb)
{
int cl = check_lock();
......@@ -199,6 +200,39 @@ int epic_disp_framebuffer(union disp_framebuffer *fb)
return 0;
}
static Ctx *ctx = NULL;
int epic_disp_ctx (void *data, size_t length)
{
if (!data || (length % 9 != 0))
return -EINVAL;
if (!ctx)
{
ctx = ctx_new_for_framebuffer (
display_screen.fb->data,
DISP_WIDTH, DISP_HEIGHT,
DISP_WIDTH * 2, CTX_FORMAT_RGB565_BYTESWAPPED);
#if 1 // rotate framebuffer
//ctx_identity (ctx);
ctx_translate (ctx, DISP_WIDTH, DISP_HEIGHT);
ctx_scale (ctx, -1.0, -1.0);
#endif
}
Ctx *sctx = ctx_new_for_renderstream (data, length);
//ctx_save (ctx);
ctx_render_ctx (sctx, ctx);
//ctx_restore (ctx);
ctx_free (sctx);
#if 0 // in-lieu of better way of ensuring clean slate
ctx_free (ctx);
ctx = NULL;
#endif
return 0;
}
int epic_disp_backlight(uint16_t brightness)
{
/* TODO: lock? */
......
......@@ -119,8 +119,12 @@ void epic_uart_write_str(const char *str, size_t length)
SERIAL_WRITE_NOTIFY,
eSetBits
);
if (bytes_sent == 0) {
vTaskDelay(1);
} else {
portYIELD();
}
}
} while (index < length);
}
}
......
CFLAGS+=-DCTX_SIMULATOR -DCARD10_CTX_STATIC -lm -Wall -I../../lib/ctx
LD_FLAGS+=-lm
ctx-demo: ctx-demo.o ui.o Makefile ../../lib/ctx/ctx.h
$(CC) -s -Os -o $@ ctx-demo.o ui.o $(LD_FLAGS)
ctx-demo.o: ctx-demo.c ui.h Makefile
$(CC) -c -Os -o $@ $< $(CFLAGS)
ui.o: ui.c ui.h Makefile
$(CC) -c -Os -o $@ $< $(CFLAGS)
test: ctx-demo
./ctx-demo
clean:
rm -f ctx-demo *.o
/*
* Copyright 2019-2020 Øyvind Kolås <pippin@gimp.org>
*/
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <unistd.h>
#include <math.h>
#include "ctx.h"
#include "ui.h"
extern UiItem ctx_demo[];
#if CARD10_CTX_STATIC
#ifndef CTX_SIMULATOR
static uint16_t pixels[DISP_WIDTH * DISP_HEIGHT];
#endif
#endif
int main(int argc, char *argv[])
{
int quit = 0;
#if CARD10_CTX_STATIC
#if CTX_SIMULATOR
Ctx *ctx = ctx_new_ui (DISP_WIDTH, DISP_HEIGHT);
#else
Ctx *ctx = ctx_new_for_framebuffer (pixels, DISP_WIDTH, DISP_HEIGHT,
DISP_WIDTH * 2,
CTX_FORMAT_RGB565_BYTESWAPPED);
ctx_translate (ctx, DISP_WIDTH, DISP_HEIGHT);
ctx_scale (ctx, -1.0f, -1.0f);
#endif
#else
Ctx *ctx = ctx_new ();
ctx_set_size (ctx, DISP_WIDTH, DISP_HEIGHT); // for parser ui_items
#endif
ui_set_items (ctx_demo);
while (!quit)
{
#if CARD10_CTX_STATIC
// why can't we take a ctx_reset here? (it causes mostly blank render,
// not only transform going to identity XXX XXX
#ifdef CTX_SIMULATOR
ctx_reset (ctx);
#endif
#else
ctx_reset (ctx);
#endif
ctx_rectangle (ctx, 0, 0, DISP_WIDTH, DISP_HEIGHT);
ctx_rgba8 (ctx, 0,0,0,255);
ctx_fill (ctx);
ctx_save (ctx);
ui_item_draw_fullscreen (ctx, ui_current_scene());
ctx_restore (ctx);
#ifdef CTX_SIMULATOR
ctx_flush (ctx);
usleep (20 * 1000);
#else
epic_disp_open ();
#if CARD10_CTX_STATIC
epic_disp_framebuffer ((void*)pixels);
#else
epic_disp_ctx ((void*)ctx_get_renderstream (ctx),
ctx_get_renderstream_count (ctx) * 9);
epic_disp_update ();
#endif
epic_disp_close ();
#endif
ui_event_update (ctx);
frame_no ++;
if (ui_event_match (BUTTON_LEFT_TOP, UI_PRESS))
quit = 1;
}
return 0;
}
static void scope (Ctx *ctx, int frame_no)
{
ctx_rgba8 (ctx, 255,0,0,255);
ctx_line_width (ctx, -1);
for (int i = 0; i < 180; i++)
{
float x = i;
float y = DISP_HEIGHT*0.5f*sinf ((x+frame_no) / 10.0)+DISP_HEIGHT/2;
if (i == 0)
ctx_move_to (ctx, x, y);
else
ctx_line_to (ctx, x, y);
}
ctx_stroke (ctx);
}
static void scope2 (Ctx *ctx, int frame_no)
{
ctx_rgba8 (ctx, 255,0,0,255);
ctx_line_width (ctx, -1);
for (int i = 0; i < 180; i++)
{
float x = i;
float y = DISP_HEIGHT / 2 *
sinf ((x+frame_no)/7.0f) * cosf((x+frame_no)/3.0f) + DISP_HEIGHT/2;
if (i == 0)
ctx_move_to (ctx, x, y);
else
ctx_line_to (ctx, x, y);
}
ctx_stroke (ctx);
}
static void _analog_clock (Ctx *ctx, int frame_no, int smoothstep)
{
uint64_t ms64 = ui_ticks;
uint32_t ms = ms64;
uint32_t s = ms / 1000;
uint32_t m = s / 60;
uint32_t h = m / 60;
ms = ((uint32_t)(ms))%1000;
s %= 60;
m %= 60;
h %= 12;
float r = frame_no * 0.008;
ctx_save (ctx);
ctx_rgba8 (ctx, 127,127,127,255);
ctx_move_to (ctx, DISP_WIDTH/2 + DISP_HEIGHT * 0.45, DISP_HEIGHT/2);
ctx_arc (ctx, DISP_WIDTH/2, DISP_HEIGHT/2, DISP_HEIGHT * 0.45, 0.0, CTX_PI * 2, 0);
ctx_line_width (ctx, 8);
ctx_line_cap (ctx, CTX_CAP_NONE);
ctx_stroke (ctx);
ctx_line_width (ctx, 7);
ctx_line_cap (ctx, CTX_CAP_ROUND);
ctx_rgba8 (ctx, 188,188,188,255);
r = m * CTX_PI * 2/ 60;
ctx_move_to (ctx, DISP_WIDTH/2, DISP_HEIGHT/2);
ctx_line_to (ctx, DISP_WIDTH/2 + cosf(r) * DISP_HEIGHT * 0.32f, DISP_HEIGHT/2 + sinf (r) * DISP_HEIGHT * 0.32f);
ctx_line_to (ctx, DISP_WIDTH/2 + cosf(r) * DISP_HEIGHT * 0.33f, DISP_HEIGHT/2 + sinf (r) * DISP_HEIGHT * 0.33f);
ctx_stroke (ctx);
r = (h + m/60.0f) * CTX_PI * 2/ 12;
ctx_move_to (ctx, DISP_WIDTH/2, DISP_HEIGHT/2);
ctx_line_to (ctx, DISP_WIDTH/2 + cosf(r) * DISP_HEIGHT * 0.25f, DISP_HEIGHT/2 + sinf (r) * DISP_HEIGHT * 0.25f);
ctx_line_to (ctx, DISP_WIDTH/2 + cosf(r) * DISP_HEIGHT * 0.26f, DISP_HEIGHT/2 + sinf (r) * DISP_HEIGHT * 0.26f);
ctx_stroke (ctx);
ctx_line_width (ctx, 4);
ctx_line_cap (ctx, CTX_CAP_NONE);
ctx_rgba8 (ctx, 255,0,0,127);
if (smoothstep)
r = (s + ms/1000.0f) * CTX_PI * 2/ 60;
else
r = (s ) * CTX_PI * 2/ 60;
ctx_move_to (ctx, DISP_WIDTH/2, DISP_HEIGHT/2);
ctx_line_to (ctx, DISP_WIDTH/2 + cosf(r) * DISP_HEIGHT * 0.45f, DISP_HEIGHT/2 + sinf (r) * DISP_HEIGHT * 0.45f);
ctx_line_to (ctx, DISP_WIDTH/2 + cosf(r) * DISP_HEIGHT * 0.46f, DISP_HEIGHT/2 + sinf (r) * DISP_HEIGHT * 0.46f);
ctx_stroke (ctx);
ctx_restore (ctx);
}
static void analog_clock (Ctx *ctx, int frame_no)
{
_analog_clock (ctx, frame_no, 1);
}
static void gradient_text (Ctx *ctx, int frame_no)
{
frame_no = frame_no % 400;
float r = frame_no * 0.01;
ctx_save (ctx);
//ctx_rgba8 (ctx, 255,255,255,255);
ctx_linear_gradient (ctx, 12, 12, 200, 200);
ctx_translate (ctx, DISP_WIDTH/2, DISP_HEIGHT/2);
ctx_rotate (ctx, r * 1.66);
ctx_translate (ctx, -DISP_WIDTH/2, -DISP_HEIGHT/2);
ctx_move_to (ctx, 0, 40);
ctx_font_size (ctx, 24);
ctx_text (ctx, "card10+ctx");
ctx_restore (ctx);
}
static void spin_text (Ctx *ctx, int frame_no)
{
UiItem *item = ui_current_scene ();
const char *string = "card10+ctx";
if (item->data) string = item->data;
frame_no = frame_no % 400;
float r = frame_no * 0.01;
ctx_save (ctx);
ctx_rgba8 (ctx, 255,255,255,255);
ctx_translate (ctx, DISP_WIDTH/2, DISP_HEIGHT/2);
ctx_rotate (ctx, r * 1.66);
ctx_translate (ctx, -DISP_WIDTH/2, -DISP_HEIGHT/2);
ctx_move_to (ctx, 0, 40);
ctx_font_size (ctx, 24);
ctx_text (ctx, string);
ctx_restore (ctx);
}
static void counter (Ctx *ctx, int frame_no)
{
UiItem *item = ui_current_scene ();
int timeout = item->arg1 * 1000;
//float r = (ui_ticks-ui_scene_timer)*1.0f/timeout;
float t = (ui_ticks-ui_scene_timer)/1000.0;
char buf[64];
ctx_rgba8 (ctx, 255,255,255,255);
ctx_move_to (ctx, 5, 30);
ctx_font_size (ctx, 14.0);
sprintf (buf, "%i%% %i/%i %i", (ui_ticks-ui_scene_timer)*100/timeout,
ui_ticks-ui_scene_timer, timeout, (int)(t*10));
ctx_text (ctx, buf);
}
static void font_scaling (Ctx *ctx, int frame_no)
{
char buf[64];
ctx_rgba8 (ctx, 255,255,255,255);
ctx_move_to (ctx, 5, 40 - (frame_no % 50));
ctx_font_size (ctx, ui_font_size);
ctx_text (ctx, "Press top right to change\nfont size, press lower right\nto advance to next test.\nThis text is moving\none pixel per frame.");
ctx_move_to (ctx, 0, 15);
ctx_font_size (ctx, 12.0);
sprintf (buf, "size: %i", (int)ui_font_size);
ctx_text (ctx, buf);
if (ui_event_match (BUTTON_RIGHT_TOP, UI_PRESS_REPEAT))
{
ui_font_size += 1;
if (ui_font_size > 40.0f) ui_font_size = 4.0f;
}
}
static void circle_spiral (Ctx *ctx, int frame_no)
{
UiItem *item = ui_current_scene ();
int timeout = item->arg1 * 1000;
float r = (ui_ticks-ui_scene_timer)*1.0f/timeout;
//float t = (ui_ticks-ui_scene_timer)/1000.0;
static int dot_count = 2;
static float twist = 2.9645;
static float dot_scale = 52.0;
if (frame_no == 0)
{
dot_count = 2;
twist = 2.9645;
dot_scale = 52.0;
}
twist = 2.9645 * (1.0 -r) + r * 3.0;
dot_count = 2.0 * (1.0 - r) + r * 256;
ctx_rgba(ctx, 1, 1, 1, 0.5);
for (int i = 0; i < dot_count; i ++)
{
float x = DISP_WIDTH / 2;
float y = DISP_HEIGHT / 2;
float radius = DISP_HEIGHT / dot_scale;
float dist = i * (DISP_HEIGHT/ 2) / (dot_count * 1.0f);
float twisted = (i * twist);
float cos_twisted = cosf (twisted);
float sin_twisted = sinf (twisted);
x += cos_twisted * dist;
y += sin_twisted * dist;
ctx_arc (ctx, x, y, radius, 0, CTX_PI * 2.1, 0);
ctx_fill (ctx);
}
#if 0
itk_panel_start (itk, "spiraling dots", ctx_width(ctx)*3/4,0,ctx_width(ctx)/4, ctx_height(ctx)/3);
itk_slider_int (itk, "count", &dot_count, 1, 4000, 10);
itk_slider_float (itk, "radius", &dot_scale, 2.0, 200.0, 4.5);
itk_slider_float (itk, "twist amount", &twist, -3.14152, 3.14152, 0.0005);
#endif
}
static void parser (Ctx *ctx, int frame_no)
{
UiItem *item = ui_current_scene ();
if (item->data)
{
ctx_parse (ctx, item->data);
}
else
{
}
}
static void launch (Ctx *ctx, void *user_data)
{
ui_autoplay = 1;
ui_ui_autoplay_timeout = 4000;
ui_title_timeout = 2000;
//ui_font_size = 19;
ui_no = 7;
}
extern int ui_long_press_delay;
extern int ui_press_repeat_delay;
UiItem ctx_demo[]={
//{"counter", ui_scene, counter, "ctx", 2.0},
//{"counter", ui_scene, counter, "ctx", 4.0},
{"spin text", ui_scene, spin_text, "ctx", 1.0},
//{"counter", ui_scene, counter, "ctx", 1.0},
// {"spin text", ui_scene, spin_text, "foo", 1.0},
// {"spin text", ui_scene, spin_text, "bar", 2.0},
{"ctx demo", ui_menu},
{"launch", ui_button, launch, NULL},
{"setup", ui_sub_menu},
{"", ui_separator},
{"analog clock", ui_scene, analog_clock},
{"circle spiral", ui_scene, circle_spiral, NULL, 10.0},
{"sine", ui_scene, scope},
{"gradient text", ui_scene, gradient_text},
{"complex signal", ui_scene, scope2},
{"parser", ui_scene, parser, "rgb 0 0 1 rectangle 4 4 4 4 fill "},
{"parser", ui_scene, parser,
"rgb 1 0 0 rectangle 10, 10, 40, 40 fill "
"rgb 1 1 0 ui_font_size 20 m 15 30x 'hello' "},
{"long string", ui_scene, font_scaling},
{"spin text", ui_scene, spin_text},
{"setup", ui_menu},
{"autoplay", ui_boolean_toggle, &ui_autoplay},
{"autoplay timeout", ui_int_slider, &ui_ui_autoplay_timeout, NULL, 1, 20000, 500},
{"title timeout ms", ui_int_slider, &ui_title_timeout, NULL, 1, 20000, 500},
{"", ui_separator},
{"font size", ui_float_slider, &ui_font_size, NULL, 4.0, 50.0, 1},
{"line height", ui_float_slider, &ui_line_height, NULL, 0.5, 2.0, 0.05},
{"scroll jump", ui_float_slider, &ui_scroll_jump, NULL, 0.0, 1.0, 0.05},
{"long press ms", ui_int_slider, &ui_long_press_delay, NULL, 10, 1000, 10},
{"press repeat ms", ui_int_slider, &ui_press_repeat_delay, NULL, 10, 1000, 10},
{NULL, NULL},
};
name = 'ctx-demo'
elf = executable(
name + '.elf',
['ctx-demo.c',
'ui.c',
'ui.h'
],
build_by_default: true,
dependencies: [l0dable_startup, api_caller],
link_whole: [l0dable_startup_lib],
link_args: [
'-s', '-Wl,-Map=' + meson.current_build_dir() + '/' + name + '.map'
],
pie: true,
c_args: [ '-Wno-unused-function',
'-Wno-missing-field-initializers',
'-I../lib/ctx',
'-Os',
'-s', '-fomit-frame-pointer' ]
)
elf = executable(
name + '-static.elf',
['ctx-demo.c',
'ui.c',
'ui.h'
],
build_by_default: true,
dependencies: [l0dable_startup, api_caller],
link_whole: [l0dable_startup_lib],
link_args: [
'-s', '-Wl,-Map=' + meson.current_build_dir() + '/' + name + '.map'
],
pie: true,
c_args: [ '-Wno-unused-function',
'-Wno-missing-field-initializers',
'-I../lib/ctx',
'-O3',
'-DCARD10_CTX_STATIC=1', '-s', '-fomit-frame-pointer' ]
)
/*
* Copyright 2019-2020 Øyvind Kolås <pippin@gimp.org>
*/
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#if CARD10_CTX_STATIC /* stand-alone, we've got more headroom than
the core0 firmware and will include a larger
font*/
#ifndef CTX_SIMULATOR
#define CTX_MIN_JOURNAL_SIZE 32 // we do not need a journal,
#define CTX_MAX_JOURNAL_SIZE 32 // we render direct
#define CTX_EVENTS 0
#endif
#define CTX_DITHER 1
#define CTX_RENDERSTREAM_STATIC 0
#define CTX_RASTERIZER_AA 3
#define CTX_RASTERIZER_FORCE_AA 1
#define CTX_BITPACK_PACKER 0
#define CTX_GRADIENT_CACHE 1
#define CTX_1BIT_CLIP 1
#define CTX_RASTERIZER_MAX_CIRCLE_SEGMENTS 36
#define CTX_LIMIT_FORMATS 1
#define CTX_ENABLE_GRAY1 1
#define CTX_ENABLE_GRAY1 1
#define CTX_ENABLE_GRAY8 1
#define CTX_ENABLE_RGB565 1
#define CTX_ENABLE_RGB565_BYTESWAPPED 1
#define CTX_RASTERIZER 1
#define CTX_COMPOSITE 1
#define CTX_FONTS_FROM_FILE 0
#define CTX_IMPLEMENTATION
#define _CTX_INTERNAL_FONT_ // dropping internal and using:
#include "ctx-font-regular.h"
#include "ctx.h"
#else
#define CTX_RASTERIZER 0
#define CTX_COMPOSITE 0
#define CTX_BITPACK_PACKER 0
#define CTX_SHAPE_CACHE 0
#define CTX_GRADIENT_CACHE 0
#define CTX_MIN_JOURNAL_SIZE 2048
#define CTX_MAX_JOURNAL_SIZE 2048
#define CTX_RENDERSTREAM_STATIC 0
#define CTX_EVENTS 0
#define CTX_FORMATTER 0
#define CTX_PARSER 1
#define CTX_FONTS_FROM_FILE 0
#define CTX_IMPLEMENTATION 1
#define _CTX_INTERNAL_FONT_ // dropping internal and using:
//#include "ctx-font-ascii-spacing.h"
#include "ctx-font-regular-spacing.h"
#include "ctx.h"
#endif
#include "ui.h"
/* XXX globals */
int frame_no = 0;
#if CTX_SIMULATOR
int ui_long_press_delay = 140;
#else
int ui_long_press_delay = 300;
#endif
int ui_press_repeat_delay = 400;
unsigned int ui_scene_timer = 0;
int ui_no = 0; /* the item in the UI to run fullscreen,
if it is a menu, that menu is rendered -
but this can also be used for other
UI control, where the menus are only
one of the states
*/
float ui_font_size = 18.0f;
float ui_line_height = 1.2f;
int ui_selected_no = 0; /* the item with focus */
int ui_item_active = 0; /* slider being edited */
float ui_scroll_jump = 0.66;
float ui_y = 0.0;
float ui_x = 0.0;
int ui_start_menu = 0;
#define MAX_MENU_DEPTH 8
int ui_menu_stack_start[MAX_MENU_DEPTH];
int ui_menu_stack_selected[MAX_MENU_DEPTH];
int ui_menu_depth = 0;
static UiItem *ui_items = NULL;
void ui_set_items (UiItem *items)
{
ui_items = items;
}
float ui_item_draw_fullscreen (Ctx *ctx, UiItem *item)
{
return item->handler(ctx, item, ITEM_DRAW_FULLSCREEN);
}
float ui_item_height (Ctx *ctx, UiItem *item)
{
return item->handler(ctx, item, ITEM_HEIGHT);
}
static float ui_item_draw (Ctx *ctx, UiItem *item)
{
return item->handler(ctx, item, ITEM_DRAW);
}
static float ui_item_activate (Ctx *ctx, UiItem *item)
{
return item->handler(ctx, item, ITEM_ACTIVATE);
}
static float ui_item_active_events (Ctx *ctx, UiItem *item)
{
return item->handler(ctx, item, ITEM_ACTIVE_EVENTS);
}
static float ui_item_draw_background (Ctx *ctx, UiItem *item)
{
return item->handler(ctx, item, ITEM_DRAW_BACKGROUND);
}
float ui_label (Ctx *ctx, UiItem *item, UiItemAction action)
{
int selected = (item == &ui_items[ui_selected_no])?1:0;
switch (action)
{
case ITEM_DRAW_FULLSCREEN:
break;
case ITEM_DRAW_BACKGROUND:
if (selected)
{
ctx_begin_path (ctx);
ctx_round_rectangle (ctx, 0, ui_y - ui_font_size,
DISP_WIDTH, ui_item_height (ctx, item), ui_font_size*0.25);
ctx_gray (ctx, 1.0f);
ctx_fill (ctx);
ctx_rgba8 (ctx, 0,0,0,255);
}
else
{
ctx_rgba8 (ctx, 255,255,255,255);
}
ctx_move_to (ctx, ui_x, ui_y);
break;
case ITEM_DRAW:
ctx_text (ctx, item->title);
break;
case ITEM_HEIGHT:
return ui_font_size * ui_line_height;
case ITEM_ACTIVATE:
break;
case ITEM_ACTIVE_EVENTS:
break;
}
return 0.0f;
}
float ui_separator (Ctx *ctx, UiItem *item, UiItemAction action) {
switch (action)
{
case ITEM_DRAW:
ctx_gray (ctx, 0.5);
ctx_line_width (ctx, -1.0);
ctx_move_to (ctx, 0.0, ui_y - ui_font_size * 0.7);
ctx_rel_line_to (ctx, DISP_WIDTH, 0.0);
ctx_stroke (ctx);
return 0.0f;
case ITEM_HEIGHT:
return ui_font_size * 0.3;
default:
return ui_label (ctx, item, action);
}
}
float ui_button (Ctx *ctx, UiItem *item, UiItemAction action) {
switch (action)
{
case ITEM_ACTIVATE:
{
void (*cb)(Ctx *ctx, void *data) = item->value;
cb (ctx, item->data);
return 0.0;
}
default:
return ui_label (ctx, item, action);
}
}
float ui_boolean_toggle (Ctx *ctx, UiItem *item, UiItemAction action) {
switch (action)
{
case ITEM_DRAW:
ctx_text (ctx, item->title);
ctx_text (ctx, ((int*)(item->value))[0]?" on":" off");
return 0.0f;
case ITEM_ACTIVATE:
{
int *val = (int*)item->value;
*val = !(*val);
return 0.0f;
}
default:
return ui_label (ctx, item, action);
}
}
float ui_float_slider (Ctx *ctx, UiItem *item, UiItemAction action)
{
int selected = (item == &ui_items[ui_selected_no])?1:0;
float handle_width = ui_font_size/2;
float min = item->arg1;
float max = item->arg2;
float step = item->arg3;
switch (action)
{
case ITEM_DRAW:
{
char buf[64];
float val = ((float*)(item->value))[0];
float rel_val = (val - min) / (max - min);
ctx_round_rectangle (ctx, rel_val * (DISP_WIDTH - handle_width),
ui_y - ui_font_size,
handle_width, ui_font_size * ui_line_height, ui_font_size*0.25);
if (ui_item_active && selected)
ctx_rgb (ctx, 1.0, 0.4, 0.2f);
else
ctx_rgb (ctx, 0.3, 0.4, 1.0f);
ctx_fill (ctx);
if (selected)
ctx_rgba8 (ctx, 0,0,0,255);
else
ctx_rgba8 (ctx, 255,255,255,255);
ctx_move_to (ctx, ui_x, ui_y);
ctx_text (ctx, item->title);
ctx_text (ctx, " ");
if (val < 0)
{
ctx_text (ctx, "-");
val = -val;
}
int integer = val;
float decimals = (val - integer) * 100;
sprintf (buf, "%i.", integer);
ctx_text (ctx, buf);
if (decimals < 10) ctx_text (ctx, "0");
sprintf (buf, "%i", (int)(decimals));
ctx_text (ctx, buf);
}
return 0.0f;
case ITEM_ACTIVATE:
ui_item_active = 1;
return 0.0f;
case ITEM_ACTIVE_EVENTS:
if (ui_event_match (BUTTON_RIGHT_TOP, UI_PRESS))
{
ui_item_active = 0;
}
if (ui_event_match (BUTTON_RIGHT_BOTTOM, UI_PRESS_REPEAT))
{
float val = ((float*)item->value)[0];
val += step;
if (val > max)
val = max;
((float*)item->value)[0] = val;
}
if (ui_event_match (BUTTON_LEFT_BOTTOM, UI_PRESS_REPEAT) && frame_no > 2)
{
float val = ((float*)item->value)[0];
val -= step;
if (val < min)
val = min;
((float*)item->value)[0] = val;
}
return 0.0f;
default:
return ui_label (ctx, item, action);
}
}
float ui_int_slider (Ctx *ctx, UiItem *item, UiItemAction action)
{
int selected = (item == &ui_items[ui_selected_no])?1:0;
float handle_width = ui_font_size/2;
float min = item->arg1;
float max = item->arg2;
float step = item->arg3;
switch (action)
{
case ITEM_DRAW:
{
float val = ((int*)(item->value))[0];
float rel_val = (val - min) / (max - min);
ctx_round_rectangle (ctx, rel_val * (DISP_WIDTH - handle_width),
ui_y - ui_font_size,
handle_width, ui_font_size * ui_line_height, ui_font_size*0.25);
if (ui_item_active && selected)
ctx_rgb (ctx, 8.0, 0.6, 0.2f);
else
ctx_rgb (ctx, 0.3, 0.4, 1.0f);
ctx_fill (ctx);
if (selected)
ctx_rgba8 (ctx, 0,0,0,255);
else
ctx_rgba8 (ctx, 255,255,255,255);
ctx_move_to (ctx, ui_x, ui_y);
char buf[64];
ctx_text (ctx, item->title);
sprintf (buf, " %i", ((int*)(item->value))[0]);
ctx_text (ctx, buf);
}
return 0.0f;
case ITEM_ACTIVATE:
ui_item_active = 1;
return 0.0f;
case ITEM_ACTIVE_EVENTS:
if (ui_event_match (BUTTON_RIGHT_TOP, UI_PRESS)){
ui_item_active = 0;
}
if (ui_event_match (BUTTON_RIGHT_BOTTOM, UI_PRESS_REPEAT)){
float val = ((int*)item->value)[0];
val += step;
if (val > max)
val = max;
((int*)item->value)[0] = val;
}
if (ui_event_match (BUTTON_LEFT_BOTTOM, UI_PRESS_REPEAT) && frame_no > 2)
{
float val = ((int*)item->value)[0];
val -= step;
if (val < min)
val = min;
((int*)item->value)[0] = val;
}
return 0.0f;
default:
return ui_label (ctx, item, action);
}
}
int ui_find_menu (const char *name);
static void ui_menu_pos_push (void);
static void ui_menu_pos_pop (void);
static void ui_menu_pos_push (void)
{
if (ui_menu_depth >= MAX_MENU_DEPTH) return;
ui_menu_stack_start[ui_menu_depth]=ui_start_menu;
ui_menu_stack_selected[ui_menu_depth]=ui_selected_no;
if (ui_menu_depth+1 < MAX_MENU_DEPTH)
ui_menu_depth++;
}
float ui_sub_menu (Ctx *ctx, UiItem *item, UiItemAction action)
{
switch (action)
{
case ITEM_DRAW:
ctx_text (ctx, item->title);
ctx_text (ctx, "/");
return 0.0f;
case ITEM_ACTIVATE:
ui_menu_pos_push ();
ui_start_menu = ui_find_menu (item->title);
ui_selected_no = ui_start_menu + 1;
return 0.0f;
default:
return ui_label (ctx, item, action);
}
}
int ui_autoplay = 0;
int ui_ui_autoplay_timeout = 1000 * 1;
int ui_title_timeout = 1000 * 2;
unsigned int ui_ticks = 0;
static void draw_title (Ctx *ctx)
{
if ((int)(ui_ticks - ui_scene_timer) > ui_title_timeout) return;
ctx_rgba (ctx, 0.0f, 0.0f, 0.0f, 0.5f);
ctx_move_to (ctx, -1, 80-4.0+1);
ctx_font_size (ctx, ui_font_size);
ctx_text (ctx, ui_items[ui_no].title);
ctx_rgb (ctx, 1.0f, 1.0f, 0.0f);
ctx_move_to (ctx, 0, 80-4.0);
ctx_text (ctx, ui_items[ui_no].title);
}
UiItem *ui_current_scene (void)
{
return &ui_items[ui_no];
}
static void ui_menu_pos_pop (void)
{
if (ui_menu_depth > 0)
{
ui_start_menu = ui_menu_stack_start[ui_menu_depth-1];
ui_selected_no = ui_menu_stack_selected[ui_menu_depth-1];
ui_menu_depth--;
ui_reset_timer ();
ui_no = ui_start_menu;
}
}
float ui_menu (Ctx *ctx, UiItem *item, UiItemAction action)
{
if (action == ITEM_DRAW_FULLSCREEN)
{
static float scroll = 0.0;
ui_x = 4.0;
ui_y = ui_font_size;
ctx_save (ctx);
ctx_translate (ctx, 0.0, -scroll);
ctx_font_size (ctx, ui_font_size);
/* estimates */
float desired_bottom_scroll = (ui_selected_no-ui_start_menu+2) * ui_font_size * ui_line_height - 80;
float desired_top_scroll = (ui_selected_no-ui_start_menu - 1) * ui_font_size * ui_line_height;
for (int i = ui_start_menu; ui_items[i].handler && (i == ui_start_menu || ui_items[i].handler!=ui_menu); i++)
{
float height = ui_item_height (ctx, &ui_items[i]);
if (i == ui_selected_no)
{
desired_top_scroll = ui_y - ui_font_size * ui_line_height * 1.5;
//desired_bottom_scroll = ui_y - 80.0 + ui_font_size * ui_line_height;
desired_bottom_scroll = ui_y - ui_font_size * ui_line_height + height - 80.0 + ui_font_size * ui_line_height;
}
if (ui_y - scroll - ui_font_size > DISP_HEIGHT ||
ui_y + height - scroll < 0)
{
/* out of view */
}
else
{
ui_item_draw_background (ctx, &ui_items[i]);
ui_item_draw (ctx, &ui_items[i]);
}
ui_y += ui_item_height (ctx, &ui_items[i]);
}
ctx_restore (ctx);
if (desired_bottom_scroll > scroll)
{
scroll = desired_bottom_scroll * ui_scroll_jump + (1.0-ui_scroll_jump) * scroll;
}
if (desired_top_scroll < scroll)
{
scroll = desired_top_scroll * ui_scroll_jump + (1.0-ui_scroll_jump) * scroll;
}
if (ui_item_active)
{
ui_item_active_events (ctx, &ui_items[ui_selected_no]);
}
else
{
if (ui_event_match (BUTTON_RIGHT_TOP, UI_PRESS))
{
ui_reset_timer ();
ui_item_activate (ctx, &ui_items[ui_selected_no]);
}
if (ui_event_match (BUTTON_RIGHT_BOTTOM, UI_PRESS_REPEAT))
{
if (ui_items[ui_selected_no+1].title != NULL &&
ui_items[ui_selected_no+1].handler != ui_menu)
ui_selected_no ++;
if (ui_items[ui_selected_no].handler == ui_separator)
ui_selected_no ++;
}
if (ui_event_match (BUTTON_LEFT_BOTTOM, UI_PRESS_REPEAT) && frame_no > 2)
{
if (ui_items[ui_selected_no].handler == ui_menu)
{
ui_menu_pos_pop ();
return 0.0f;
}
ui_selected_no--;
if (ui_selected_no < 0) ui_selected_no = 0;
if (ui_items[ui_selected_no].handler == ui_separator)
ui_selected_no --;
if (ui_selected_no < 0) ui_selected_no = 0;
if (ui_selected_no < ui_start_menu)
{
ui_selected_no = ui_start_menu;
}
}
}
return 0.0f;
}
return ui_label (ctx, item, action);
}
int ui_find_menu (const char *name)
{
for (int i = 0; ui_items[i].title; i++)
{
if (ui_items[i].handler == ui_menu && !strcmp (ui_items[i].title, name))
return i;
}
return 0;
}
extern UiItem ctx_demo[];
float ui_scene (Ctx *ctx, UiItem *item, UiItemAction action);
void ui_advance (void)
{
static int first_menu = 1;
ui_reset_timer ();
ui_no++;
if (ui_items[ui_no].handler == ui_menu)
{
if (first_menu)
{
first_menu = 0;
ui_start_menu = ui_no;
ui_selected_no = ui_no + 1;
}
else
{
while (ui_items[ui_no-1].handler == ui_scene)
ui_no --;
}
}
}
void ui_reverse (void)
{
ui_reset_timer ();
if (ui_no>0)
{
if (ui_items[ui_no-1].handler == ui_scene)
ui_no--;
}
}
float ui_scene (Ctx *ctx, UiItem *item, UiItemAction action)
{
int timeout = item->arg1 * 1000;
switch (action)
{
case ITEM_DRAW_FULLSCREEN:
{
float (*fun)(Ctx *ctx, int frame_no) = item->value;
if (fun)
fun (ctx, frame_no);
draw_title (ctx);
if ((frame_no > 3 && ui_event_match (BUTTON_RIGHT_BOTTOM, UI_PRESS)) ||
(ui_autoplay && (int)(ui_ticks - ui_scene_timer) > ui_ui_autoplay_timeout) ||
(timeout && (int)(ui_ticks - ui_scene_timer) > timeout)
)
{
ui_advance ();
}
if (ui_event_match (BUTTON_LEFT_BOTTOM, UI_LONG_PRESS))
{
int old_ui_no = ui_no;
ui_menu_pos_pop ();
ui_selected_no = old_ui_no;
}
else if (ui_event_match (BUTTON_LEFT_BOTTOM, UI_PRESS))
{
ui_reverse ();
}
return 0.0f;
}
case ITEM_ACTIVATE:
ui_menu_pos_push ();
ui_no = ui_selected_no;
ui_reset_timer ();
return 0.0f;
default:
return ui_label (ctx, item, action);
}
}
unsigned int ui_ticks_live (void)
{
static uint64_t ui_time_start;
static uint64_t ui_time_now = 0;
if (ui_time_start == 0)
{
#if CTX_SIMULATOR
ui_time_start = ctx_ticks ()/1000;
#else
ui_time_start = epic_rtc_get_milliseconds ();
#endif
}
#if CTX_SIMULATOR
ui_time_now = ctx_ticks ()/1000;
#else
ui_time_now = epic_rtc_get_milliseconds ();
#endif
ui_ticks = (ui_time_now - ui_time_start);
return ui_ticks;
}
void ui_reset_timer (void)
{
frame_no = 0;
ui_scene_timer = ui_ticks;
}
/* event handling code, that gathers events and abstracts
* them to long and short presses as well as pressed/not
*/
static int32_t state = 0;
static int32_t prev_state = 0;
static int long_press_mask = 0;
static int prev_long_press_mask = 0;
#if CTX_SIMULATOR
static int32_t sim_state = 0;
static int release_button (Ctx *ctx, void *data1)
{
int button = (size_t)(data1);
if (sim_state & button)
sim_state = sim_state - button;
return 0;
}
static void button_sim (CtxEvent *event, void *data1, void *data2)
{
int button = (size_t)(data1);
sim_state |= button;
ctx_add_timeout (event->ctx, 20, release_button, data1);
}
#endif
int ui_event_update (Ctx *ctx)
{
#if CTX_SIMULATOR
static int inited = 0;
if (!inited)
{
inited = 1;
}
ctx_add_key_binding (ctx, "q", NULL, "", button_sim, (void*)BUTTON_LEFT_TOP);
ctx_add_key_binding (ctx, "esc", NULL, "", button_sim, (void*)BUTTON_LEFT_TOP);
ctx_add_key_binding (ctx, "left", NULL, "", button_sim, (void*)BUTTON_LEFT_BOTTOM);
ctx_add_key_binding (ctx, "right", NULL, "", button_sim, (void*)BUTTON_RIGHT_BOTTOM);
ctx_add_key_binding (ctx, "up", NULL, "", button_sim, (void*)BUTTON_RIGHT_TOP);
CtxEvent *event;
usleep (500);
while ((event = ctx_get_event (ctx)));
#endif
int ret = 0;
prev_state = state;
prev_long_press_mask = long_press_mask;
long_press_mask = 0;
ui_ticks_live (); // updates the variable used directly in rest of code
#if CTX_SIMULATOR
state = sim_state;
#else
int32_t new_state = epic_buttons_read
(BUTTON_LEFT_BOTTOM|BUTTON_RIGHT_BOTTOM|BUTTON_RIGHT_TOP|BUTTON_LEFT_TOP);
state = new_state;
#endif
return ret;
}
static inline int leftmost_bit_set (int number)
{
int rshifts = 0;
while (number != 0)
{
rshifts ++;
number >>= 1;
}
return rshifts - 1;
}
static int press_time[4] = {0,};
int ui_event_match (int button, UiEventType event_type)
{
int ret = 0;
int button_no = leftmost_bit_set (button);
switch (event_type)
{
case UI_PRESSED:
ret = ((state & button) != 0);
break;
case UI_PRESS_REPEAT:
{
int is_pressed = (state & button) != 0;
int got_pressed = is_pressed && ((prev_state & button) == 0);
if (got_pressed ||
(is_pressed &&
(ui_ticks > (unsigned)press_time[button_no] + ui_press_repeat_delay)))
{
press_time[button_no] = ui_ticks;
ret = 1;
}
}
break;
case UI_PRESS:
{
int got_pressed = ((state & button) != 0) &&
((prev_state & button) == 0);
int got_released = ((state & button) == 0) &&
((prev_state & button) != 0);
if (prev_long_press_mask & button)
{
if (got_pressed)
{
press_time[button_no] = ui_ticks;
ret = 0;
}
else
{
if (got_released)
{
if (ui_ticks < (unsigned)press_time[button_no] + ui_long_press_delay)
{
press_time[button_no] = 0;
ret = 1;
}
}
}
} else
{
ret = got_pressed;
}
}
break;
case UI_RELEASE:
ret = ((state & button) == 0) &&
((prev_state & button) != 0);
if (ret)
{
press_time[button_no] = 0;
}
break;
case UI_LONG_PRESS:
long_press_mask |= button;
if (((state & button) != 0) &&
ui_ticks > (unsigned)press_time[button_no] + ui_long_press_delay &&
press_time[button_no]
)
{
ret = 1;
press_time[button_no] = 0;
}
break;
}
return ret;
}
#ifndef __UI_H_
#define __UI_H_
/*
* Copyright 2019-2020 Øyvind Kolås <pippin@gimp.org>
*/
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#if CTX_SIMULATOR
#define DISP_WIDTH 160
#define DISP_HEIGHT 80
enum epic_button {
/** ``1``, Bottom left button (bit 0). */
BUTTON_LEFT_BOTTOM = 1,
/** ``2``, Bottom right button (bit 1). */
BUTTON_RIGHT_BOTTOM = 2,
/** ``4``, Top right button (bit 2). */
BUTTON_RIGHT_TOP = 4,
/** ``8``, Top left (power) button (bit 3). */
BUTTON_LEFT_TOP = 8,
/** ``8``, Top left (power) button (bit 3). */
BUTTON_RESET = 8,
};
#else
#include "epicardium.h"
#endif
typedef enum {
ITEM_DRAW_BACKGROUND, /* draws the round rectangle highlighting selected item,
*/
ITEM_DRAW,
ITEM_HEIGHT, /* returns vertical space occupied by item */
ITEM_ACTIVATE, /* upper right from menu, can for a toggle button
or button activating trigger event
*/
ITEM_ACTIVE_EVENTS, /* handle events for when this item is selected and
activated */
ITEM_DRAW_FULLSCREEN /* draw this item full screen, makes most sense
for menu and other custom top-level handlers
*/
} UiItemAction;
enum _UiEventType
{
UI_PRESSED,
UI_PRESS,
UI_PRESS_REPEAT,
UI_LONG_PRESS,
UI_RELEASE,
};
typedef enum _UiEventType UiEventType;
int ui_event_update (Ctx *ctx);
int ui_event_match (int button, UiEventType type);
/* XXX globals */
extern int frame_no;
extern unsigned int ui_scene_timer;
extern int ui_no; /* the item in the UI to run fullscreen,
if it is a menu, that menu is rendered -
but this can also be used for other
UI control, where the menus are only
one of the states
*/
extern float ui_font_size;
extern float ui_line_height;
extern float ui_y;
extern float ui_x;
//extern int ui_start_menu;
typedef struct _UiItem UiItem;
struct _UiItem{
const char *title;
float (*handler)(Ctx *ctx, UiItem *item, UiItemAction action);
void *value; /* */
void *data;
float arg1;
float arg2;
float arg3;
};
void ui_set_items (UiItem *items);
float ui_item_draw_fullscreen (Ctx *ctx, UiItem *item);
float ui_item_height (Ctx *ctx, UiItem *item);
float ui_menu (Ctx *ctx, UiItem *item, UiItemAction action);
float ui_label (Ctx *ctx, UiItem *item, UiItemAction action);
float ui_separator (Ctx *ctx, UiItem *item, UiItemAction action);
float ui_button (Ctx *ctx, UiItem *item, UiItemAction action);
float ui_boolean_toggle (Ctx *ctx, UiItem *item, UiItemAction action);
float ui_float_slider (Ctx *ctx, UiItem *item, UiItemAction action);
float ui_int_slider (Ctx *ctx, UiItem *item, UiItemAction action);
float ui_sub_menu (Ctx *ctx, UiItem *item, UiItemAction action);
float ui_scene (Ctx *ctx, UiItem *item, UiItemAction action);
//unsigned int ui_ticks_live (void);
extern unsigned int ui_ticks;
extern int ui_autoplay;
extern int ui_ui_autoplay_timeout;
extern int ui_title_timeout;
extern float ui_scroll_jump;
UiItem *ui_current_scene (void);
void ui_reset_timer (void);
//int ui_find_menu (const char *name);
void ui_advance (void);
void ui_reverse (void);
int ui_event_update ();
int ui_event_match (int button, UiEventType event_type);
#endif
subdir('lib/')
subdir('blinky/')
subdir('ctx-demo/')
......@@ -18,6 +18,7 @@ deps = [
bme680,
board_card10,
libgfx,
libctx,
max77650,
max86150,
periphdriver,
......
#ifndef CTX_FONT_ascii
/* this is a ctx encoded font based on DejaVuSans.ttf */
/* CTX_SUBDIV:4 CTX_BAKE_FONT_SIZE:160 */
/* glyphs covered:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
jklmnopqrstuvwxyz{|}~ */
static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
ctx_font_ascii[]={
{'@', 0x00000020, 0x00002bb0},/* x-advance: 43.687500 */
{'@', 0x00000021, 0x00003719},/* ! x-advance: 55.097656 */
{'@', 0x00000022, 0x00003f38},/* " x-advance: 63.218750 */
{'@', 0x00000023, 0x0000732a},/* # x-advance: 115.164062 */
{'@', 0x00000024, 0x00005773},/* $ x-advance: 87.449219 */
{'@', 0x00000025, 0x0000829a},/* % x-advance: 130.601562 */
{'@', 0x00000026, 0x00006b2e},/* & x-advance: 107.179688 */
{'@', 0x00000027, 0x000025c9},/* ' x-advance: 37.785156 */
{'@', 0x00000028, 0x0000359f},/* ( x-advance: 53.621094 */
{'@', 0x00000029, 0x0000359f},/* ) x-advance: 53.621094 */
{'@', 0x0000002a, 0x000044b9},/* * x-advance: 68.722656 */
{'@', 0x0000002b, 0x0000732a},/* + x-advance: 115.164062 */
{'@', 0x0000002c, 0x00002bb0},/* , x-advance: 43.687500 */
{'@', 0x0000002d, 0x00003198},/* - x-advance: 49.593750 */
{'@', 0x0000002e, 0x00002bb0},/* . x-advance: 43.687500 */
{'@', 0x0000002f, 0x00002e4f},/* / x-advance: 46.308594 */
{'@', 0x00000030, 0x00005773},/* 0 x-advance: 87.449219 */
{'@', 0x00000031, 0x00005773},/* 1 x-advance: 87.449219 */
{'@', 0x00000032, 0x00005773},/* 2 x-advance: 87.449219 */
{'@', 0x00000033, 0x00005773},/* 3 x-advance: 87.449219 */
{'@', 0x00000034, 0x00005773},/* 4 x-advance: 87.449219 */
{'@', 0x00000035, 0x00005773},/* 5 x-advance: 87.449219 */
{'@', 0x00000036, 0x00005773},/* 6 x-advance: 87.449219 */
{'@', 0x00000037, 0x00005773},/* 7 x-advance: 87.449219 */
{'@', 0x00000038, 0x00005773},/* 8 x-advance: 87.449219 */
{'@', 0x00000039, 0x00005773},/* 9 x-advance: 87.449219 */
{'@', 0x0000003a, 0x00002e4f},/* : x-advance: 46.308594 */
{'@', 0x0000003b, 0x00002e4f},/* ; x-advance: 46.308594 */
{'@', 0x0000003c, 0x0000732a},/* < x-advance: 115.164062 */
{'@', 0x0000003d, 0x0000732a},/* = x-advance: 115.164062 */
{'@', 0x0000003e, 0x0000732a},/* > x-advance: 115.164062 */
{'@', 0x0000003f, 0x000048f3},/* ? x-advance: 72.949219 */
{'@', 0x00000040, 0x00008973},/* @ x-advance: 137.449219 */
{'@', 0x00000041, 0x00005e06},/* A x-advance: 94.023438 */
{'@', 0x00000042, 0x00005e4b},/* B x-advance: 94.292969 */
{'@', 0x00000043, 0x00005ff9},/* C x-advance: 95.972656 */
{'@', 0x00000044, 0x000069d6},/* D x-advance: 105.835938 */
{'@', 0x00000045, 0x000056d8},/* E x-advance: 86.843750 */
{'@', 0x00000046, 0x00004f0f},/* F x-advance: 79.058594 */
{'@', 0x00000047, 0x00006a82},/* G x-advance: 106.507812 */
{'@', 0x00000048, 0x0000675b},/* H x-advance: 103.355469 */
{'@', 0x00000049, 0x00002889},/* I x-advance: 40.535156 */
{'@', 0x0000004a, 0x00002889},/* J x-advance: 40.535156 */
{'@', 0x0000004b, 0x00005a22},/* K x-advance: 90.132812 */
{'@', 0x0000004c, 0x00004c93},/* L x-advance: 76.574219 */
{'@', 0x0000004d, 0x00007697},/* M x-advance: 118.589844 */
{'@', 0x0000004e, 0x000066d1},/* N x-advance: 102.816406 */
{'@', 0x0000004f, 0x00006c30},/* O x-advance: 108.187500 */
{'@', 0x00000050, 0x000052e2},/* P x-advance: 82.882812 */
{'@', 0x00000051, 0x00006c30},/* Q x-advance: 108.187500 */
{'@', 0x00000052, 0x00005f80},/* R x-advance: 95.500000 */
{'@', 0x00000053, 0x0000573f},/* S x-advance: 87.246094 */
{'@', 0x00000054, 0x000053f5},/* T x-advance: 83.957031 */
{'@', 0x00000055, 0x0000649a},/* U x-advance: 100.601562 */
{'@', 0x00000056, 0x00005e06},/* V x-advance: 94.023438 */
{'@', 0x00000057, 0x000087e7},/* W x-advance: 135.902344 */
{'@', 0x00000058, 0x00005e29},/* X x-advance: 94.160156 */
{'@', 0x00000059, 0x000053f5},/* Y x-advance: 83.957031 */
{'@', 0x0000005a, 0x00005e29},/* Z x-advance: 94.160156 */
{'@', 0x0000005b, 0x0000359f},/* [ x-advance: 53.621094 */
{'@', 0x0000005c, 0x00002e4f},/* \ x-advance: 46.308594 */
{'@', 0x0000005d, 0x0000359f},/* ] x-advance: 53.621094 */
{'@', 0x0000005e, 0x0000732a},/* ^ x-advance: 115.164062 */
{'@', 0x0000005f, 0x000044b9},/* _ x-advance: 68.722656 */
{'@', 0x00000060, 0x000044b9},/* ` x-advance: 68.722656 */
{'@', 0x00000061, 0x0000543a},/* a x-advance: 84.226562 */
{'@', 0x00000062, 0x0000573f},/* b x-advance: 87.246094 */
{'@', 0x00000063, 0x00004b92},/* c x-advance: 75.570312 */
{'@', 0x00000064, 0x0000573f},/* d x-advance: 87.246094 */
{'@', 0x00000065, 0x00005490},/* e x-advance: 84.562500 */
{'@', 0x00000066, 0x00003063},/* f x-advance: 48.386719 */
{'@', 0x00000067, 0x0000573f},/* g x-advance: 87.246094 */
{'@', 0x00000068, 0x0000571d},/* h x-advance: 87.113281 */
{'@', 0x00000069, 0x00002630},/* i x-advance: 38.187500 */
{'@', 0x0000006a, 0x00002630},/* j x-advance: 38.187500 */
{'@', 0x0000006b, 0x00004f98},/* k x-advance: 79.593750 */
{'@', 0x0000006c, 0x00002630},/* l x-advance: 38.187500 */
{'@', 0x0000006d, 0x000085e4},/* m x-advance: 133.890625 */
{'@', 0x0000006e, 0x0000571d},/* n x-advance: 87.113281 */
{'@', 0x0000006f, 0x00005418},/* o x-advance: 84.093750 */
{'@', 0x00000070, 0x0000573f},/* p x-advance: 87.246094 */
{'@', 0x00000071, 0x0000573f},/* q x-advance: 87.246094 */
{'@', 0x00000072, 0x00003882},/* r x-advance: 56.507812 */
{'@', 0x00000073, 0x0000479c},/* s x-advance: 71.609375 */
{'@', 0x00000074, 0x000035e4},/* t x-advance: 53.890625 */
{'@', 0x00000075, 0x0000571d},/* u x-advance: 87.113281 */
{'@', 0x00000076, 0x00005157},/* v x-advance: 81.339844 */
{'@', 0x00000077, 0x0000706a},/* w x-advance: 112.414062 */
{'@', 0x00000078, 0x00005157},/* x x-advance: 81.339844 */
{'@', 0x00000079, 0x00005157},/* y x-advance: 81.339844 */
{'@', 0x0000007a, 0x00004825},/* z x-advance: 72.144531 */
{'@', 0x0000007b, 0x00005773},/* { x-advance: 87.449219 */
{'@', 0x0000007c, 0x00002e4f},/* | x-advance: 46.308594 */
{'@', 0x0000007d, 0x00005773},/* } x-advance: 87.449219 */
{'@', 0x0000007e, 0x0000732a},/* ~ x-advance: 115.164062 */
};
#define CTX_FONT_ascii 1
#endif
#ifndef CTX_FONT_regular
/* this is a ctx encoded font based on DejaVuSans.ttf */
/* CTX_SUBDIV:4 CTX_BAKE_FONT_SIZE:160 */
/* glyphs covered:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
jklmnopqrstuvwxyz{|}~éñÑßæøåö£ÆÖØÅ€§π°üÜ…”“«»©®™⏎⌫⌨·←↑↓→☣☀☁☂☢☭☮☯☽✉⚙⚠␣²◆♥♦♣
♠▲▼÷≈±≥≤½¼╴−╶╵╷┛┓┣╋┳┻┫┗┏┃━⎢⎥ */
static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
ctx_font_regular[]={
{'@', 0x00000020, 0x00002bb0},/* x-advance: 43.687500 */
{'@', 0x00000021, 0x00003719},/* ! x-advance: 55.097656 */
{'@', 0x00000022, 0x00003f38},/* " x-advance: 63.218750 */
{'@', 0x00000023, 0x0000732a},/* # x-advance: 115.164062 */
{'@', 0x00000024, 0x00005773},/* $ x-advance: 87.449219 */
{'@', 0x00000025, 0x0000829a},/* % x-advance: 130.601562 */
{'@', 0x00000026, 0x00006b2e},/* & x-advance: 107.179688 */
{'@', 0x00000027, 0x000025c9},/* ' x-advance: 37.785156 */
{'@', 0x00000028, 0x0000359f},/* ( x-advance: 53.621094 */
{'@', 0x00000029, 0x0000359f},/* ) x-advance: 53.621094 */
{'@', 0x0000002a, 0x000044b9},/* * x-advance: 68.722656 */
{'@', 0x0000002b, 0x0000732a},/* + x-advance: 115.164062 */
{'@', 0x0000002c, 0x00002bb0},/* , x-advance: 43.687500 */
{'@', 0x0000002d, 0x00003198},/* - x-advance: 49.593750 */
{'@', 0x0000002e, 0x00002bb0},/* . x-advance: 43.687500 */
{'@', 0x0000002f, 0x00002e4f},/* / x-advance: 46.308594 */
{'@', 0x00000030, 0x00005773},/* 0 x-advance: 87.449219 */
{'@', 0x00000031, 0x00005773},/* 1 x-advance: 87.449219 */
{'@', 0x00000032, 0x00005773},/* 2 x-advance: 87.449219 */
{'@', 0x00000033, 0x00005773},/* 3 x-advance: 87.449219 */
{'@', 0x00000034, 0x00005773},/* 4 x-advance: 87.449219 */
{'@', 0x00000035, 0x00005773},/* 5 x-advance: 87.449219 */
{'@', 0x00000036, 0x00005773},/* 6 x-advance: 87.449219 */
{'@', 0x00000037, 0x00005773},/* 7 x-advance: 87.449219 */
{'@', 0x00000038, 0x00005773},/* 8 x-advance: 87.449219 */
{'@', 0x00000039, 0x00005773},/* 9 x-advance: 87.449219 */
{'@', 0x0000003a, 0x00002e4f},/* : x-advance: 46.308594 */
{'@', 0x0000003b, 0x00002e4f},/* ; x-advance: 46.308594 */
{'@', 0x0000003c, 0x0000732a},/* < x-advance: 115.164062 */
{'@', 0x0000003d, 0x0000732a},/* = x-advance: 115.164062 */
{'@', 0x0000003e, 0x0000732a},/* > x-advance: 115.164062 */
{'@', 0x0000003f, 0x000048f3},/* ? x-advance: 72.949219 */
{'@', 0x00000040, 0x00008973},/* @ x-advance: 137.449219 */
{'@', 0x00000041, 0x00005e06},/* A x-advance: 94.023438 */
{'@', 0x00000042, 0x00005e4b},/* B x-advance: 94.292969 */
{'@', 0x00000043, 0x00005ff9},/* C x-advance: 95.972656 */
{'@', 0x00000044, 0x000069d6},/* D x-advance: 105.835938 */
{'@', 0x00000045, 0x000056d8},/* E x-advance: 86.843750 */
{'@', 0x00000046, 0x00004f0f},/* F x-advance: 79.058594 */
{'@', 0x00000047, 0x00006a82},/* G x-advance: 106.507812 */
{'@', 0x00000048, 0x0000675b},/* H x-advance: 103.355469 */
{'@', 0x00000049, 0x00002889},/* I x-advance: 40.535156 */
{'@', 0x0000004a, 0x00002889},/* J x-advance: 40.535156 */
{'@', 0x0000004b, 0x00005a22},/* K x-advance: 90.132812 */
{'@', 0x0000004c, 0x00004c93},/* L x-advance: 76.574219 */
{'@', 0x0000004d, 0x00007697},/* M x-advance: 118.589844 */
{'@', 0x0000004e, 0x000066d1},/* N x-advance: 102.816406 */
{'@', 0x0000004f, 0x00006c30},/* O x-advance: 108.187500 */
{'@', 0x00000050, 0x000052e2},/* P x-advance: 82.882812 */
{'@', 0x00000051, 0x00006c30},/* Q x-advance: 108.187500 */
{'@', 0x00000052, 0x00005f80},/* R x-advance: 95.500000 */
{'@', 0x00000053, 0x0000573f},/* S x-advance: 87.246094 */
{'@', 0x00000054, 0x000053f5},/* T x-advance: 83.957031 */
{'@', 0x00000055, 0x0000649a},/* U x-advance: 100.601562 */
{'@', 0x00000056, 0x00005e06},/* V x-advance: 94.023438 */
{'@', 0x00000057, 0x000087e7},/* W x-advance: 135.902344 */
{'@', 0x00000058, 0x00005e29},/* X x-advance: 94.160156 */
{'@', 0x00000059, 0x000053f5},/* Y x-advance: 83.957031 */
{'@', 0x0000005a, 0x00005e29},/* Z x-advance: 94.160156 */
{'@', 0x0000005b, 0x0000359f},/* [ x-advance: 53.621094 */
{'@', 0x0000005c, 0x00002e4f},/* \ x-advance: 46.308594 */
{'@', 0x0000005d, 0x0000359f},/* ] x-advance: 53.621094 */
{'@', 0x0000005e, 0x0000732a},/* ^ x-advance: 115.164062 */
{'@', 0x0000005f, 0x000044b9},/* _ x-advance: 68.722656 */
{'@', 0x00000060, 0x000044b9},/* ` x-advance: 68.722656 */
{'@', 0x00000061, 0x0000543a},/* a x-advance: 84.226562 */
{'@', 0x00000062, 0x0000573f},/* b x-advance: 87.246094 */
{'@', 0x00000063, 0x00004b92},/* c x-advance: 75.570312 */
{'@', 0x00000064, 0x0000573f},/* d x-advance: 87.246094 */
{'@', 0x00000065, 0x00005490},/* e x-advance: 84.562500 */
{'@', 0x00000066, 0x00003063},/* f x-advance: 48.386719 */
{'@', 0x00000067, 0x0000573f},/* g x-advance: 87.246094 */
{'@', 0x00000068, 0x0000571d},/* h x-advance: 87.113281 */
{'@', 0x00000069, 0x00002630},/* i x-advance: 38.187500 */
{'@', 0x0000006a, 0x00002630},/* j x-advance: 38.187500 */
{'@', 0x0000006b, 0x00004f98},/* k x-advance: 79.593750 */
{'@', 0x0000006c, 0x00002630},/* l x-advance: 38.187500 */
{'@', 0x0000006d, 0x000085e4},/* m x-advance: 133.890625 */
{'@', 0x0000006e, 0x0000571d},/* n x-advance: 87.113281 */
{'@', 0x0000006f, 0x00005418},/* o x-advance: 84.093750 */
{'@', 0x00000070, 0x0000573f},/* p x-advance: 87.246094 */
{'@', 0x00000071, 0x0000573f},/* q x-advance: 87.246094 */
{'@', 0x00000072, 0x00003882},/* r x-advance: 56.507812 */
{'@', 0x00000073, 0x0000479c},/* s x-advance: 71.609375 */
{'@', 0x00000074, 0x000035e4},/* t x-advance: 53.890625 */
{'@', 0x00000075, 0x0000571d},/* u x-advance: 87.113281 */
{'@', 0x00000076, 0x00005157},/* v x-advance: 81.339844 */
{'@', 0x00000077, 0x0000706a},/* w x-advance: 112.414062 */
{'@', 0x00000078, 0x00005157},/* x x-advance: 81.339844 */
{'@', 0x00000079, 0x00005157},/* y x-advance: 81.339844 */
{'@', 0x0000007a, 0x00004825},/* z x-advance: 72.144531 */
{'@', 0x0000007b, 0x00005773},/* { x-advance: 87.449219 */
{'@', 0x0000007c, 0x00002e4f},/* | x-advance: 46.308594 */
{'@', 0x0000007d, 0x00005773},/* } x-advance: 87.449219 */
{'@', 0x0000007e, 0x0000732a},/* ~ x-advance: 115.164062 */
{'@', 0x000000e9, 0x00005490},/* é x-advance: 84.562500 */
{'@', 0x000000f1, 0x0000571d},/* ñ x-advance: 87.113281 */
{'@', 0x000000d1, 0x000066d1},/* Ñ x-advance: 102.816406 */
{'@', 0x000000df, 0x00005693},/* ß x-advance: 86.574219 */
{'@', 0x000000e6, 0x000086f7},/* æ x-advance: 134.964844 */
{'@', 0x000000f8, 0x00005418},/* ø x-advance: 84.093750 */
{'@', 0x000000e5, 0x0000543a},/* å x-advance: 84.226562 */
{'@', 0x000000f6, 0x00005418},/* ö x-advance: 84.093750 */
{'@', 0x000000a3, 0x00005773},/* £ x-advance: 87.449219 */
{'@', 0x000000c6, 0x000085e4},/* Æ x-advance: 133.890625 */
{'@', 0x000000d6, 0x00006c30},/* Ö x-advance: 108.187500 */
{'@', 0x000000d8, 0x00006c30},/* Ø x-advance: 108.187500 */
{'@', 0x000000c5, 0x00005e06},/* Å x-advance: 94.023438 */
{'@', 0x000020ac, 0x00005773},/* € x-advance: 87.449219 */
{'@', 0x000000a7, 0x000044b9},/* § x-advance: 68.722656 */
{'@', 0x000003c0, 0x000052c0},/* π x-advance: 82.750000 */
{'@', 0x000000b0, 0x000044b9},/* ° x-advance: 68.722656 */
{'@', 0x000000fc, 0x0000571d},/* ü x-advance: 87.113281 */
{'@', 0x000000dc, 0x0000649a},/* Ü x-advance: 100.601562 */
{'@', 0x00002026, 0x00008973},/* … x-advance: 137.449219 */
{'@', 0x0000201d, 0x00004735},/* ” x-advance: 71.207031 */
{'@', 0x0000201c, 0x00004735},/* “ x-advance: 71.207031 */
{'@', 0x000000ab, 0x00005418},/* « x-advance: 84.093750 */
{'@', 0x000000bb, 0x00005418},/* » x-advance: 84.093750 */
{'@', 0x000000a9, 0x00008973},/* © x-advance: 137.449219 */
{'@', 0x000000ae, 0x00008973},/* ® x-advance: 137.449219 */
{'@', 0x00002122, 0x00008973},/* ™ x-advance: 137.449219 */
{'@', 0x000023ce, 0x0000732a},/* ⏎ x-advance: 115.164062 */
{'@', 0x0000232b, 0x0000c25c},/* ⌫ x-advance: 194.359375 */
{'@', 0x00002328, 0x0000c663},/* ⌨ x-advance: 198.386719 */
{'@', 0x000000b7, 0x00002bb0},/* · x-advance: 43.687500 */
{'@', 0x00002190, 0x0000732a},/* ← x-advance: 115.164062 */
{'@', 0x00002191, 0x0000732a},/* ↑ x-advance: 115.164062 */
{'@', 0x00002193, 0x0000732a},/* ↓ x-advance: 115.164062 */
{'@', 0x00002192, 0x0000732a},/* → x-advance: 115.164062 */
{'@', 0x00002623, 0x00007b38},/* ☣ x-advance: 123.218750 */
{'@', 0x00002600, 0x00007b38},/* ☀ x-advance: 123.218750 */
{'@', 0x00002601, 0x00008973},/* ☁ x-advance: 137.449219 */
{'@', 0x00002602, 0x00007b38},/* ☂ x-advance: 123.218750 */
{'@', 0x00002622, 0x00007b38},/* ☢ x-advance: 123.218750 */
{'@', 0x0000262d, 0x00007b38},/* ☭ x-advance: 123.218750 */
{'@', 0x0000262e, 0x00007b38},/* ☮ x-advance: 123.218750 */
{'@', 0x0000262f, 0x00007b38},/* ☯ x-advance: 123.218750 */
{'@', 0x0000263d, 0x00007b38},/* ☽ x-advance: 123.218750 */
{'@', 0x00002709, 0x0000732a},/* ✉ x-advance: 115.164062 */
{'@', 0x00002699, 0x00007b38},/* ⚙ x-advance: 123.218750 */
{'@', 0x000026a0, 0x00007b38},/* ⚠ x-advance: 123.218750 */
{'@', 0x00002423, 0x0000573f},/* ␣ x-advance: 87.246094 */
{'@', 0x000000b2, 0x00003719},/* ² x-advance: 55.097656 */
{'@', 0x000025c6, 0x000069b4},/* ◆ x-advance: 105.703125 */
{'@', 0x00002665, 0x00007b38},/* ♥ x-advance: 123.218750 */
{'@', 0x00002666, 0x00007b38},/* ♦ x-advance: 123.218750 */
{'@', 0x00002663, 0x00007b38},/* ♣ x-advance: 123.218750 */
{'@', 0x00002660, 0x00007b38},/* ♠ x-advance: 123.218750 */
{'@', 0x000025b2, 0x000069b4},/* ▲ x-advance: 105.703125 */
{'@', 0x000025bc, 0x000069b4},/* ▼ x-advance: 105.703125 */
{'@', 0x000000f7, 0x0000732a},/* ÷ x-advance: 115.164062 */
{'@', 0x00002248, 0x0000732a},/* ≈ x-advance: 115.164062 */
{'@', 0x000000b1, 0x0000732a},/* ± x-advance: 115.164062 */
{'@', 0x00002265, 0x0000732a},/* ≥ x-advance: 115.164062 */
{'@', 0x00002264, 0x0000732a},/* ≤ x-advance: 115.164062 */
{'@', 0x000000bd, 0x00008538},/* ½ x-advance: 133.218750 */
{'@', 0x000000bc, 0x00008538},/* ¼ x-advance: 133.218750 */
{'@', 0x00002574, 0x000052c0},/* ╴ x-advance: 82.750000 */
{'@', 0x00002212, 0x0000732a},/* − x-advance: 115.164062 */
{'@', 0x00002576, 0x000052c0},/* ╶ x-advance: 82.750000 */
{'@', 0x00002575, 0x000052c0},/* ╵ x-advance: 82.750000 */
{'@', 0x00002577, 0x000052c0},/* ╷ x-advance: 82.750000 */
{'@', 0x0000251b, 0x000052c0},/* ┛ x-advance: 82.750000 */
{'@', 0x00002513, 0x000052c0},/* ┓ x-advance: 82.750000 */
{'@', 0x00002523, 0x000052c0},/* ┣ x-advance: 82.750000 */
{'@', 0x0000254b, 0x000052c0},/* ╋ x-advance: 82.750000 */
{'@', 0x00002533, 0x000052c0},/* ┳ x-advance: 82.750000 */
{'@', 0x0000253b, 0x000052c0},/* ┻ x-advance: 82.750000 */
{'@', 0x0000252b, 0x000052c0},/* ┫ x-advance: 82.750000 */
{'@', 0x00002517, 0x000052c0},/* ┗ x-advance: 82.750000 */
{'@', 0x0000250f, 0x000052c0},/* ┏ x-advance: 82.750000 */
{'@', 0x00002503, 0x000052c0},/* ┃ x-advance: 82.750000 */
{'@', 0x00002501, 0x000052c0},/* ━ x-advance: 82.750000 */
{'@', 0x000023a2, 0x000044b9},/* ⎢ x-advance: 68.722656 */
{'@', 0x000023a5, 0x000044b9},/* ⎥ x-advance: 68.722656 */
};
#define CTX_FONT_regular 1
#endif
#ifndef CTX_FONT_regular
/* this is a ctx encoded font based on DejaVuSans.ttf */
/* CTX_SUBDIV:4 CTX_BAKE_FONT_SIZE:160 */
/* glyphs covered:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi
jklmnopqrstuvwxyz{|}~éñÑßæøåö£ÆÖØÅ€§π°üÜ…”“«»©®™⏎⌫·←↑↓→☀☁☂☢☭☮☯☽✉⚙⚠␣²◆♥♦♣♠÷
≈±╴−╶ */
static const struct __attribute__ ((packed)) {uint8_t code; uint32_t a; uint32_t b;}
ctx_font_regular[]={
{'@', 0x00000020, 0x00002bb0},/* x-advance: 43.687500 */
{'@', 0x00000021, 0x00003719},/* ! x-advance: 55.097656 */
{'m', 0x41a5e7f2, 0xc1886037},
{'0', 0x44000036, 0xbc0000ca},
{'m', 0x00000000, 0xc2a64f08},
{'l', 0x4159fc90, 0x00000000},
{'l', 0x00000000, 0x422fd6c4},
{'l', 0xbfabcfe0, 0x41bfad86},
{'l', 0xc12df5b2, 0x00000000},
{'l', 0xbfb46710, 0xc1bfad86},
{'l', 0x00000000, 0xc22fd6c4},
{'@', 0x00000022, 0x00003f38},/* " x-advance: 63.218750 */
{'m', 0x41c50c07, 0xc2c86716},
{'l', 0x00000000, 0x4214fe48},
{'4', 0x0000ffd3, 0xff6c0000},
{'6', 0x0000002d, 0x00000065},
{'l', 0x00000000, 0x4214fe48},
{'l', 0xc1368ce4, 0x00000000},
{'l', 0x00000000, 0xc214fe48},
{'l', 0x41368ce4, 0x00000000},
{'@', 0x00000023, 0x0000732a},/* # x-advance: 115.164062 */
{'m', 0x428c8973, 0xc271e113},
{'0', 0x59ea00b2, 0xa716004e},
{'m', 0xc12112e8, 0xc218c06d},
{'0', 0x004e6fe5, 0x002a911c},
{'0', 0x00536fe5, 0x00a22900},
{'0', 0x005559ea, 0x00a12900},
{'0', 0x00d66fe5, 0x00b2911b},
{'0', 0x00d56fe5, 0x00ac911b},
{'0', 0x005ed700, 0x00aaa716},
{'0', 0x0060d700, 0x002b911b},
{'@', 0x00000024, 0x00005773},/* $ x-advance: 87.449219 */
{'m', 0x4239c595, 0x41a19c59},
{'4', 0x0000ffe6, 0xffb00000},
{'8', 0xfac800e4, 0xeec8fae4},
{'l', 0x00000000, 0xc14149e1},
{'8', 0x1a37111b, 0x0839081c},
{'l', 0x00000000, 0xc1f4d50c},
{'8', 0xe0aaf7c5, 0xc1e6e9e6},
{'8', 0xbc1dd500, 0xe454e71d},
{'4', 0xffc10000, 0x0000001a},
{'l', 0x00000000, 0x417920a8},
{'8', 0x05300118, 0x0b2d0417},
{'l', 0x00000000, 0x413beb60},
{'8', 0xefd3f5ea, 0xf9d0fae9},
{'l', 0x00000000, 0x41e54302},
{'8', 0x2159093c, 0x421c181c},
{'8', 0x47e22d00, 0x1ea91ae2},
{'6', 0x00510000, 0xfee1ffe6},
{'l', 0x00000000, 0xc1dc2258},
{'8', 0x11d103e1, 0x25f00ef0},
{'8', 0x230f1700, 0x12300c0f},
{'m', 0x40d6c3d8, 0x414e2cac},
{'l', 0x00000000, 0x41e87bb4},
{'8', 0xed33fc22, 0xda11f211},
{'8', 0xdbf0e900, 0xecccf3f0},
{'@', 0x00000025, 0x0000829a},/* % x-advance: 130.601562 */
{'m', 0x42c7dda3, 0xc2306037},
{'8', 0x13dc00e9, 0x37f313f3},
{'8', 0x370d2200, 0x1324130d},
{'8', 0xed230016, 0xc90dec0d},
{'8', 0xc9f3dd00, 0xecddecf3},
{'m', 0x00000000, 0xc1086034},
{'8', 0x1d43002a, 0x4f181d18},
{'8', 0x4fe73200, 0x1dbd1de8},
{'8', 0xe3bd00d6, 0xb1e8e3e8},
{'8', 0xb118ce00, 0xe343e319},
{'m', 0xc28a8603, 0xc2237d6c},
{'8', 0x14dc00e9, 0x36f313f3},
{'8', 0x370d2300, 0x1324130d},
{'8', 0xed240017, 0xc90ded0d},
{'8', 0xcaf3de00, 0xecdcecf3},
{'m', 0x42726a86, 0xc1086038},
{'l', 0x412bcfe0, 0x00000000},
{'4', 0x019fff06, 0x0000ffd6},
{'6', 0xfe6100fa, 0x0000ff0e},
{'8', 0x1d43002a, 0x4f191d19},
{'8', 0x50e73200, 0x1dbd1de8},
{'8', 0xe3bd00d6, 0xb0e8e3e8},
{'8', 0xb118cf00, 0xe343e318},
{'@', 0x00000026, 0x00006b2e},/* & x-advance: 107.179688 */
{'m', 0x4205b0f7, 0xc257920a},
{'8', 0x2bdd15e8, 0x2df515f5},
{'8', 0x411c2700, 0x1a471a1c},
{'8', 0xf82f0019, 0xe729f816},
{'6', 0xff6fff72, 0xffe20025},
{'l', 0x42086037, 0x420b98e9},
{'8', 0xcd18e90f, 0xc70ae508},
{'l', 0x4147bb40, 0x00000000},
{'8', 0x46ef23fd, 0x44da22f3},
{'4', 0x004c004a, 0x0000ffbd},
{'l', 0xc1198e98, 0xc11dda33},
{'8', 0x23c617e5, 0x0bbf0be2},
{'8', 0xdc9700c0, 0xa2d7dbd7},
{'8', 0xc011de00, 0xc835e211},
{'8', 0xdfedf0f4, 0xdffaf0fa},
{'8', 0xbb1dd500, 0xe64fe61d},
{'8', 0x042c0016, 0x0e2d0416},
{'l', 0x00000000, 0x41436fb0},
{'8', 0xedd4f4e9, 0xfad9faeb},
{'8', 0x0fd300e4, 0x26ef0eef},
{'8', 0x1b070d00, 0x26200d08},
{'@', 0x00000027, 0x000025c9},/* ' x-advance: 37.785156 */
{'m', 0x41c50c07, 0xc2c86716},
{'l', 0x00000000, 0x4214fe48},
{'l', 0xc1368ce3, 0x00000000},
{'l', 0x00000000, 0xc214fe48},
{'l', 0x41368ce3, 0x00000000},
{'@', 0x00000028, 0x0000359f},/* ( x-advance: 53.621094 */
{'m', 0x422a7844, 0xc2d09732},
{'q', 0xc10fe480, 0x4176fae0},
{0, 0xc155b0f6, 0x41f44b9c},
{'q', 0xc08b98e8, 0x41719c54},
{0, 0xc08b98e8, 0x41f4d50a},
{'q', 0x00000000, 0x41780dbe},
{0, 0x408b98e8, 0x41f5e7f2},
{'9', 0x003c0011, 0x007a0035},
{'l', 0xc12bcfe2, 0x00000000},
{'q', 0xc12112e6, 0xc17c5958},
{0, 0xc1719c5a, 0xc1f80dbf},
{'q', 0xc09eed18, 0xc173c224},
{0, 0xc09eed18, 0xc1f225cc},
{'q', 0x00000000, 0xc16f768c},
{0, 0x409eed18, 0xc1f112e6},
{'q', 0x409eed1c, 0xc172af40},
{0, 0x41719c5a, 0xc1f80dc0},
{'l', 0x412bcfe2, 0x00000000},
{'@', 0x00000029, 0x0000359f},/* ) x-advance: 53.621094 */
{'m', 0x41301b7d, 0xc2d09732},
{'l', 0x412bcfe5, 0x00000000},
{'q', 0x412112e6, 0x417d6c40},
{0, 0x41708972, 0x41f80dc0},
{'q', 0x40a112e8, 0x4172af40},
{0, 0x40a112e8, 0x41f112e6},
{'q', 0x00000000, 0x41708974},
{0, 0xc0a112e8, 0x41f225cc},
{'9', 0x003cffed, 0x007cffc4},
{'l', 0xc12bcfe5, 0x00000000},
{'q', 0x410ed19d, 0xc175e7f3},
{0, 0x41549e11, 0xc1f44b99},
{'q', 0x408dbeb4, 0xc173c226},
{0, 0x408dbeb4, 0xc1f5e7f2},
{'q', 0x00000000, 0xc1780dc0},
{0, 0xc08dbeb4, 0xc1f4d50a},
{'q', 0xc08b98e8, 0xc1719c58},
{0, 0xc1549e11, 0xc1f44b9c},
{'@', 0x0000002a, 0x000044b9},/* * x-advance: 68.722656 */
{'m', 0x42814302, 0xc2a761ef},
{'0', 0x346034a0, 0xcaa61af1},
{'0', 0x00e26500, 0x36a69b00},
{'0', 0xcc60e6f1, 0xe60fcca0},
{'0', 0x9b00365a, 0x6500001e},
{'l', 0x41b46716, 0xc159fc90},
{'l', 0x407920b0, 0x40d49e10},
{'@', 0x0000002b, 0x0000732a},/* + x-advance: 115.164062 */
{'m', 0x427ce2ca, 0xc2ac5957},
{'l', 0x00000000, 0x421587ba},
{'l', 0x421587bc, 0x00000000},
{'l', 0x00000000, 0x41368ce4},
{'l', 0xc21587bc, 0x00000000},
{'l', 0x00000000, 0x421587bb},
{'l', 0xc1346714, 0x00000000},
{'l', 0x00000000, 0xc21587bb},
{'l', 0xc21587bb, 0x00000000},
{'l', 0xb5800000, 0xc1368ce4},
{'l', 0x421587bb, 0x00000000},
{'l', 0x00000000, 0xc21587ba},
{'l', 0x41346714, 0x00000000},
{'@', 0x0000002c, 0x00002bb0},/* , x-advance: 43.687500 */
{'m', 0x4180dbeb, 0xc1886037},
{'0', 0x2e000038, 0x00de55d4},
{'l', 0x40b01b7c, 0xc1abcfe4},
{'l', 0x00000000, 0xc138b2b0},
{'@', 0x0000002d, 0x00003198},/* - x-advance: 49.593750 */
{'m', 0x40d6c3dd, 0xc22c9e11},
{'l', 0x4210b2af, 0x00000000},
{'l', 0x00000000, 0x41301b7c},
{'l', 0xc210b2af, 0x00000000},
{'l', 0xb5c00000, 0xc1301b7c},
{'@', 0x0000002e, 0x00002bb0},/* . x-advance: 43.687500 */
{'m', 0x416b2af4, 0xc1886037},
{'0', 0x44000038, 0xbc0000c8},
{'@', 0x0000002f, 0x00002e4f},/* / x-advance: 46.308594 */
{'m', 0x420b98e9, 0xc2c86716},
{'l', 0x41368ce4, 0x00000000},
{'l', 0xc20b98e9, 0x42e1e7f2},
{'l', 0xc1368ce4, 0xb5800000},
{'l', 0x420b98e9, 0xc2e1e7f2},
{'@', 0x00000030, 0x00005773},/* 0 x-advance: 87.449219 */
{'m', 0x422ec3dd, 0xc2b68ce3},
{'q', 0xc1278448, 0x00000000},
{0, 0xc17c5956, 0x41255e80},
{'q', 0xc0a7844c, 0x41244b98},
{0, 0xc0a7844c, 0x41f7844c},
{'q', 0x00000000, 0x41a4d50c},
{0, 0x40a7844c, 0x41f7844c},
{'8', 0x293f2915, 0xd73f002a},
{'q', 0x40a9aa18, 0xc1255e80},
{0, 0x40a9aa18, 0xc1f7844c},
{'q', 0x00000000, 0xc1a55e80},
{0, 0xc0a9aa18, 0xc1f7844c},
{'9', 0xffd7ffec, 0xffd7ffc1},
{'m', 0x00000000, 0xc12bcfe0},
{'q', 0x4186c3de, 0x00000000},
{0, 0x41cda33a, 0x4155b0f8},
{'q', 0x410ed198, 0x41549e10},
{0, 0x410ed198, 0x421aa180},
{'q', 0x00000000, 0x41ca6a86},
{0, 0xc10ed198, 0x421aa181},
{'8', 0x359a35dd, 0xcb9900bd},
{'q', 0xc10dbeb5, 0xc155b0f8},
{0, 0xc10dbeb5, 0xc21aa181},
{'q', 0x00000000, 0xc1caf3f8},
{0, 0x410dbeb5, 0xc21aa180},
{'q', 0x410ed19c, 0xc155b0f8},
{0, 0x41ce2cab, 0xc155b0f8},
{'@', 0x00000031, 0x00005773},/* 1 x-advance: 87.449219 */
{'m', 0x41886037, 0xc1368ce3},
{'l', 0x41b12e63, 0x00000000},
{'l', 0x00000000, 0xc298e2cb},
{'0', 0xcf0013a0, 0x0036ed5f},
{'l', 0x00000000, 0x42b1957a},
{'l', 0x41b12e64, 0xb6400000},
{'l', 0x00000000, 0x41368ce3},
{'l', 0xc266df5a, 0x00000000},
{'l', 0xb6000000, 0xc1368ce3},
{'@', 0x00000032, 0x00005773},/* 2 x-advance: 87.449219 */
{'m', 0x41d301b8, 0xc1368ce3},
{'l', 0x423d4302, 0x00000000},
{'4', 0x002d0000, 0x0000ff02},
{'l', 0xb6000000, 0xc1368ce3},
{'8', 0xab54e11e, 0xbb43cb35},
{'8', 0xcf24e31a, 0xd90aec0a},
{'8', 0xcceae100, 0xecc6ecea},
{'8', 0x08cb00e7, 0x1ac408e4},
{'l', 0x00000000, 0xc15b0f78},
{'8', 0xed3df320, 0xfa34fa1c},
{'8', 0x1f63003e, 0x53251f25},
{'8', 0x2ef71800, 0x34df16f7},
{'8', 0x2dd607fa, 0x679b25dd},
{'@', 0x00000033, 0x00005773},/* 3 x-advance: 87.449219 */
{'m', 0x425f1656, 0xc2581b7d},
{'8', 0x223c0826, 0x40161a16},
{'q', 0x00000000, 0x416d50c0},
{0, 0xc12338b8, 0x41b79fc8},
{'q', 0xc12338b0, 0x4101eed3},
{0, 0xc1e7f240, 0x4101eed3},
{'8', 0xfccc00e7, 0xf1c9fbe6},
{'l', 0x00000000, 0xc151655e},
{'8', 0x13310d16, 0x0638061a},
{'8', 0xec4d0033, 0xc61aec1a},
{'8', 0xc9e8dd00, 0xecbcece8},
{'4', 0x0000ffd2, 0xffd40000},
{'l', 0x41436fae, 0x00000000},
{'8', 0xf13d0028, 0xd215f015},
{'8', 0xd1eae200, 0xf0c2f0eb},
{'8', 0x04d100ea, 0x0fc804e7},
{'l', 0x00000000, 0xc14149e0},
{'8', 0xf439f81e, 0xfc33fc1b},
{'8', 0x1c61003d, 0x4b231b23},
{'8', 0x38ed2100, 0x1fca16ed},
{'@', 0x00000034, 0x00005773},/* 4 x-advance: 87.449219 */
{'m', 0x424fc905, 0xc2b0c74d},
{'4', 0x00d5ff78, 0x00000088},
{'6', 0xff2b0000, 0xffd1fff2},
{'l', 0x41886038, 0x00000000},
{'l', 0x00000000, 0x42829aa2},
{'0', 0x2d000039, 0x5e0000c7},
{'l', 0xc157d6c4, 0x00000000},
{'l', 0x00000000, 0xc1bcfe48},
{'l', 0xc234f089, 0x00000000},
{'l', 0xb5c00000, 0xc151655c},
{'l', 0x4226b61e, 0xc27df5b1},
{'@', 0x00000035, 0x00005773},/* 5 x-advance: 87.449219 */
{'m', 0x416d50c0, 0xc2c86716},
{'l', 0x4254e2ca, 0x00000000},
{'4', 0x002d0000, 0x0000ff5d},
{'l', 0x00000000, 0x41c48294},
{'8', 0xfb17fc0b, 0xfe17fe0b},
{'8', 0x246a0043, 0x63272427},
{'q', 0x00000000, 0x4181655f},
{0, 0xc12112e8, 0x41c957a0},
{'q', 0xc12112e4, 0x410ed19d},
{0, 0xc1e31d34, 0x410ed19d},
{'8', 0xfccd00e7, 0xf4cbfce6},
{'l', 0x00000000, 0xc159fc90},
{'8', 0x13310d18, 0x06360619},
{'8', 0xe849002e, 0xbe1be81b},
{'8', 0xbee5d700, 0xe8b7e8e5},
{'8', 0x04d500eb, 0x0fd404eb},
{'l', 0x00000000, 0xc249579f},
{'@', 0x00000036, 0x00005773},/* 6 x-advance: 87.449219 */
{'m', 0x423579fc, 0xc25e036f},
{'8', 0x18c700dc, 0x44eb18eb},
{'8', 0x44152b00, 0x18391815},
{'8', 0xe8390024, 0xbc15e715},
{'8', 0xbcebd500, 0xe8c7e8eb},
{'m', 0x41d74d50, 0xc229eed1},
{'l', 0x00000000, 0x41459578},
{'8', 0xf2d7f7ec, 0xfbd7fbec},
{'8', 0x24ae00cb, 0x6de024e4},
{'8', 0xdd27e90f, 0xf434f417},
{'8', 0x245f003c, 0x63232423},
{'8', 0x63dc3d00, 0x259f25dc},
{'q', 0xc18b0f76, 0xb4c00000},
{0, 0xc1d49e10, 0xc1549e11},
{'q', 0xc1131d36, 0xc155b0f8},
{0, 0xc1131d36, 0xc21aa181},
{'q', 0x00000000, 0xc1be112c},
{0, 0x41346716, 0xc21768ce},
{'q', 0x41346718, 0xc16293c0},
{0, 0x41f225cc, 0xc16293c0},
{'8', 0x04290014, 0x0c2b0414},
{'@', 0x00000037, 0x00005773},/* 7 x-advance: 87.449219 */
{'m', 0x41346716, 0xc2c86716},
{'l', 0x4280dbeb, 0x00000000},
{'l', 0x00000000, 0x40b8b2b0},
{'l', 0xc21180dc, 0x42bcdbeb},
{'l', 0xc16293c2, 0x00000000},
{'l', 0x4208e9aa, 0xc2b1957a},
{'l', 0xc2407bb4, 0x00000000},
{'l', 0xb6000000, 0xc1368ce0},
{'@', 0x00000038, 0x00005773},/* 8 x-advance: 87.449219 */
{'m', 0x422ec3dd, 0xc23e55e8},
{'8', 0x14c400da, 0x38ea14ea},
{'8', 0x38162400, 0x143c1416},
{'8', 0xec3c0026, 0xc816ec16},
{'8', 0xc8eadc00, 0xecc4ecea},
{'m', 0xc158e9a8, 0xc0b8b2b0},
{'8', 0xe0caf8de, 0xc6ede9ed},
{'8', 0xb522d000, 0xe55de522},
{'8', 0x1b5d003b, 0x4b221b22},
{'8', 0x3aed2200, 0x20cb17ed},
{'8', 0x233c0927, 0x40161a16},
{'8', 0x59dd3a00, 0x1f9b1fdd},
{'8', 0xe19a00be, 0xa7dde1dd},
{'8', 0xc016da00, 0xdd3de616},
{'m', 0xc09eed1c, 0xc1ab4670},
{'8', 0x30131f00, 0x11361113},
{'8', 0xef360022, 0xd013ef13},
{'8', 0xd0ede100, 0xefcaefed},
{'8', 0x11ca00dd, 0x30ed11ed},
{'@', 0x00000039, 0x00005773},/* 9 x-advance: 87.449219 */
{'m', 0x41719c59, 0xc0052784},
{'l', 0x00000000, 0xc145957a},
{'8', 0x0e290914, 0x05290514},
{'8', 0xdd510035, 0x9320dc1c},
{'8', 0x23d917f1, 0x0ccc0ce9},
{'8', 0xdca100c4, 0x9ddedcde},
{'8', 0x9d24c300, 0xdb61db24},
{'q', 0x418b0f76, 0x00000000},
{0, 0x41d4149c, 0x4155b0f8},
{'q', 0x41131d38, 0x41549e10},
{0, 0x41131d38, 0x421aa180},
{'q', 0x00000000, 0x41bd87bc},
{0, 0xc1346718, 0x421768ce},
{'q', 0xc133542c, 0x416180dd},
{0, 0xc1f19c58, 0x416180dd},
{'8', 0xfcd700ec, 0xf4d5fcec},
{'m', 0x41d7d6c4, 0xc229eed2},
{'8', 0xe8390024, 0xbc15e815},
{'8', 0xbcebd500, 0xe7c7e7eb},
{'8', 0x19c700dc, 0x44eb18eb},
{'8', 0x44152b00, 0x18391815},
{'@', 0x0000003a, 0x00002e4f},/* : x-advance: 46.308594 */
{'m', 0x4180dbeb, 0xc1886037},
{'0', 0x44000038, 0xbc0000c8},
{'m', 0x00000000, 0xc2581b7c},
{'0', 0x44000038, 0xbc0000c8},
{'@', 0x0000003b, 0x00002e4f},/* ; x-advance: 46.308594 */
{'m', 0x4180dbeb, 0xc28e25cc},
{'0', 0x44000038, 0xbc0000c8},
{'m', 0x00000000, 0x42581b7c},
{'0', 0x2e000038, 0x00de55d4},
{'l', 0x40b01b7c, 0xc1abcfe4},
{'l', 0x00000000, 0xc138b2b0},
{'@', 0x0000003c, 0x0000732a},/* < x-advance: 115.164062 */
{'m', 0x42c93543, 0xc2874d51},
{'l', 0xc28a8604, 0x41c50c08},
{'l', 0x428a8604, 0x41c3f921},
{'l', 0x00000000, 0x41436fac},
{'l', 0xc2ac149e, 0xc1f9aa17},
{'l', 0xb5800000, 0xc132414c},
{'l', 0x42ac149e, 0xc1f9aa16},
{'l', 0x00000000, 0x41436fa8},
{'@', 0x0000003d, 0x0000732a},/* = x-advance: 115.164062 */
{'m', 0x41690527, 0xc279aa18},
{'l', 0x42ac149e, 0x00000000},
{'4', 0x002d0000, 0x0000fea8},
{'6', 0xffd30000, 0x006d0000},
{'l', 0x42ac149e, 0x00000000},
{'l', 0x00000000, 0x41368ce4},
{'l', 0xc2ac149e, 0x00000000},
{'l', 0xb5800000, 0xc1368ce4},
{'@', 0x0000003e, 0x0000732a},/* > x-advance: 115.164062 */
{'m', 0x41690527, 0xc2874d51},
{'l', 0x00000000, 0xc1436fa8},
{'l', 0x42ac149e, 0x41f9aa16},
{'l', 0x00000000, 0x4132414c},
{'l', 0xc2ac149e, 0x41f9aa17},
{'l', 0xb5800000, 0xc1436fac},
{'l', 0x428a414a, 0xc1c3f921},
{'l', 0xc28a414a, 0xc1c50c08},
{'@', 0x0000003f, 0x000048f3},/* ? x-advance: 72.949219 */
{'m', 0x41d1eed1, 0xc1886037},
{'0', 0x44000036, 0xbc0000ca},
{'m', 0x41538b2a, 0xc11dda32},
{'4', 0x0000ffcd, 0xffd70000},
{'8', 0xd407e500, 0xd81fef07},
{'l', 0x40c149e0, 0xc0bf2418},
{'8', 0xe616f20f, 0xe706f406},
{'8', 0xdaefe900, 0xf2d2f2ef},
{'8', 0x09d300eb, 0x1bcf09e9},
{'l', 0x00000000, 0xc149e110},
{'8', 0xea33f119, 0xf935f91a},
{'8', 0x1a4f0031, 0x441e1a1e},
{'8', 0x26f71400, 0x29df12f7},
{'l', 0xc0bcfe48, 0x40b8b2b0},
{'8', 0x13ef0cf4, 0x0df906fb},
{'8', 0x0dfe05ff, 0x16000800},
{'l', 0x00000000, 0x410414a0},
{'@', 0x00000040, 0x00008973},/* @ x-advance: 137.449219 */
{'m', 0x424c9052, 0xc210293c},
{'8', 0x3c132600, 0x15341513},
{'8', 0xea330021, 0xc413ea13},
{'8', 0xc5eddb00, 0xeacceaed},
{'8', 0x16cd00e0, 0x3bed16ed},
{'m', 0x42124f08, 0x41a08973},
{'8', 0x1edb14f0, 0x09d009ec},
{'8', 0xdfb500d2, 0xa9e4dfe4},
{'8', 0xa91ccb00, 0xdf4adf1c},
{'8', 0x0a30001b, 0x1e240914},
{'4', 0xffdd0000, 0x00000026},
{'l', 0x00000000, 0x4245957a},
{'8', 0xdd3dfb27, 0xb316e216},
{'8', 0xcbf8e400, 0xd2e7e7f8},
{'8', 0xcbbcdde5, 0xeea9eed8},
{'8', 0x08c100df, 0x19c808e2},
{'8', 0x47be1bd6, 0x60e92ce9},
{'8', 0x4f0f2a00, 0x412c250f},
{'8', 0x2a411b1c, 0x0e4f0e25},
{'8', 0xf5430022, 0xdf3df521},
{'l', 0x40c149e0, 0x40ee63a6},
{'8', 0x28b71adf, 0x0db00dd9},
{'8', 0xefa300cf, 0xcdb2efd4},
{'8', 0xb3ccdfde, 0xa1efd4ef},
{'8', 0xa312d000, 0xb334d412},
{'8', 0xcc50de22, 0xee60ee2d},
{'8', 0x17690038, 0x42511730},
{'8', 0x391e1a14, 0x3f0a1e0a},
{'q', 0x00000000, 0x418d3543},
{0, 0xc12abd00, 0x41ded19d},
{'q', 0xc12abd00, 0x412338b2},
{0, 0xc1ebb468, 0x4129aa17},
{'l', 0x00000000, 0xc1255e7f},
{'@', 0x00000041, 0x00005e06},/* A x-advance: 94.023438 */
{'m', 0x423beb62, 0xc2adb0f7},
{'4', 0x00c7ffb7, 0x00000093},
{'6', 0xff39ffb7, 0xffcbffe2},
{'l', 0x4175e7f4, 0x00000000},
{'l', 0x4218c06d, 0x42c86716},
{'l', 0xc16180d8, 0x00000000},
{'l', 0xc1120a50, 0xc1cda338},
{'l', 0xc234abd0, 0x00000000},
{'l', 0xc1120a4e, 0x41cda338},
{'l', 0xc164b98e, 0x00000000},
{'l', 0x42190527, 0xc2c86716},
{'@', 0x00000042, 0x00005e4b},/* B x-advance: 94.292969 */
{'m', 0x41d86037, 0xc23f68ce},
{'4', 0x00920000, 0x00000056},
{'8', 0xef40002b, 0xc915ee15},
{'8', 0xc9ebdb00, 0xefc0efec},
{'6', 0x0000ffaa, 0xff5c0000},
{'4', 0x00780000, 0x00000050},
{'8', 0xf23b0027, 0xd313f113},
{'8', 0xd3ede200, 0xf1c5f1ed},
{'6', 0x0000ffb0, 0xffd4ffca},
{'l', 0x420a8603, 0x00000000},
{'8', 0x195f003e, 0x49211921},
{'8', 0x3aef2400, 0x1bce15ef},
{'8', 0x233e0827, 0x43161b16},
{'8', 0x52dc3500, 0x1d991ddc},
{'l', 0xc20fe482, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x00000043, 0x00005ff9},/* C x-advance: 95.972656 */
{'m', 0x42b10c07, 0xc2b8f769},
{'l', 0x00000000, 0x4164b990},
{'8', 0xdac6e7e5, 0xf4bff4e2},
{'q', 0xc189731c, 0x00000000},
{0, 0xc1d27843, 0x41289730},
{'q', 0xc1120a50, 0x41278450},
{0, 0xc1120a50, 0x41f2af40},
{'q', 0x00000000, 0x419e63a7},
{0, 0x41120a50, 0x41f2af40},
{'8', 0x29692924, 0xf4410022},
{'9', 0xfff4001f, 0xffda003a},
{'l', 0x00000000, 0x416293c2},
{'8', 0x1cc413e4, 0x09bd09e1},
{'q', 0xc1b60370, 0x34000000},
{0, 0xc20f5b10, 0xc15e4828},
{'q', 0xc151655c, 0xc15f5b10},
{0, 0xc151655c, 0xc21836fb},
{'q', 0x00000000, 0xc1c149e0},
{0, 0x4151655e, 0xc21836fa},
{'q', 0x4151655e, 0xc15f5b10},
{0, 0x420f5b10, 0xc15f5b10},
{'8', 0x09430023, 0x1c3b091f},
{'@', 0x00000044, 0x000069d6},/* D x-advance: 105.835938 */
{'m', 0x41d86037, 0xc2b21eed},
{'4', 0x01370000, 0x00000041},
{'q', 0x41a5e7f2, 0x00000000},
{0, 0x41f2af3e, 0xc11655e8},
{'q', 0x411aa180, 0xc11655e8},
{0, 0x411aa180, 0xc1ed50bf},
{'q', 0x00000000, 0xc1a112e8},
{0, 0xc11aa180, 0xc1ebb468},
{'9', 0xffdbffda, 0xffdbff87},
{'6', 0x0000ffbf, 0xffd4ffca},
{'l', 0x41ded19c, 0x00000000},
{'q', 0x41e90526, 0x00000000},
{0, 0x422b01b7, 0x41425cc8},
{'q', 0x4159fc90, 0x414149e0},
{0, 0x4159fc90, 0x421768ce},
{'q', 0x00000000, 0x41cf3f91},
{0, 0xc15b0f78, 0x421836fa},
{'9', 0x0030ffca, 0x0030ff56},
{'l', 0xc1ded19c, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x00000045, 0x000056d8},/* E x-advance: 86.843750 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x427d6c3d, 0x00000000},
{'l', 0x00000000, 0x41368ce0},
{'l', 0xc24731d2, 0x00000000},
{'l', 0xb6000000, 0x41ed50c2},
{'l', 0x423edf5a, 0x00000000},
{'l', 0x00000000, 0x41368ce0},
{'l', 0xc23edf5a, 0x00000000},
{'l', 0xb6000000, 0x42113c22},
{'l', 0x424c06de, 0x35800000},
{'l', 0x00000000, 0x41368ce3},
{'l', 0xc28120a4, 0x00000000},
{'l', 0xb6800000, 0xc2c86716},
{'@', 0x00000046, 0x00004f0f},/* F x-advance: 79.058594 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x426655e7, 0x00000000},
{'l', 0x00000000, 0x41368ce0},
{'l', 0xc2301b7c, 0x00000000},
{'l', 0xb6000000, 0x41ec3dda},
{'l', 0x421eed18, 0x00000000},
{'l', 0x00000000, 0x41368ce4},
{'l', 0xc21eed18, 0x00000000},
{'l', 0xb6000000, 0x423f68ce},
{'l', 0xc158e9aa, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x00000047, 0x00006a82},/* G x-advance: 106.507812 */
{'m', 0x42a39fc9, 0xc164b98e},
{'l', 0x00000000, 0xc1d74d51},
{'l', 0xc1b12e64, 0x00000000},
{'4', 0xffd40000, 0x0000008e},
{'l', 0x00000000, 0x422c149e},
{'8', 0x21bb16e1, 0x0bb00bdb},
{'q', 0xc1bbeb62, 0x34000000},
{0, 0xc2131d36, 0xc15b0f76},
{'q', 0xc1538b28, 0xc15c225c},
{0, 0xc1538b28, 0xc2190528},
{'q', 0x00000000, 0xc1c48294},
{0, 0x41538b2a, 0xc2190526},
{'q', 0x41549e12, 0xc15c2260},
{0, 0x42131d36, 0xc15c2260},
{'8', 0x094a0027, 0x1c410923},
{'l', 0x00000000, 0x4166df60},
{'8', 0xdac1e7e2, 0xf4b9f4df},
{'q', 0xc1931d34, 0x00000000},
{0, 0xc1dd3542, 0x41244b98},
{'q', 0xc1131d36, 0x41244b98},
{0, 0xc1131d36, 0x41f4d50c},
{'q', 0x00000000, 0x41a225cd},
{0, 0x41131d36, 0x41f44b99},
{'8', 0x296e2925, 0xfc33001c},
{'q', 0x40b46720, 0xbfa338b0},
{0, 0x412225d0, 0xc07920a4},
{'@', 0x00000048, 0x0000675b},/* H x-advance: 103.355469 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x4158e9aa, 0x00000000},
{'l', 0x00000000, 0x42244b99},
{'l', 0x42450c06, 0x00000000},
{'l', 0x00000000, 0xc2244b99},
{'l', 0x4158e9a8, 0x00000000},
{'l', 0x00000000, 0x42c86716},
{'l', 0xc158e9a8, 0x00000000},
{'l', 0x00000000, 0xc23edf5b},
{'l', 0xc2450c06, 0x00000000},
{'l', 0xb6000000, 0x423edf5b},
{'l', 0xc158e9aa, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x00000049, 0x00002889},/* I x-advance: 40.535156 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x4158e9aa, 0x00000000},
{'l', 0x00000000, 0x42c86716},
{'l', 0xc158e9aa, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x0000004a, 0x00002889},/* J x-advance: 40.535156 */
{'m', 0x4157d6c4, 0xc2c86716},
{'4', 0x00000036, 0x01740000},
{'8', 0x69e54800, 0x20a820e5},
{'4', 0x0000ffec, 0xffd30000},
{'l', 0x40874d50, 0x00000000},
{'8', 0xec320023, 0xb80eec0e},
{'l', 0x00000000, 0xc2ba7165},
{'@', 0x0000004b, 0x00005a22},/* K x-advance: 90.132812 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x4158e9aa, 0x00000000},
{'l', 0x00000000, 0x4229655e},
{'l', 0x4233dda2, 0xc229655e},
{'l', 0x418b98ec, 0x00000000},
{'l', 0xc246ed1a, 0x423ad87b},
{'l', 0x42552784, 0x4255f5b1},
{'l', 0xc18ed19c, 0x00000000},
{'l', 0xc2407bb4, 0xc2410527},
{'l', 0xb6000000, 0x42410527},
{'l', 0xc158e9aa, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x0000004c, 0x00004c93},/* L x-advance: 76.574219 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x4158e9aa, 0x00000000},
{'l', 0x00000000, 0x42b1957a},
{'l', 0x42432af4, 0xb6400000},
{'l', 0x00000000, 0x41368ce3},
{'l', 0xc279655f, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x0000004d, 0x00007697},/* M x-advance: 118.589844 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x41a19c58, 0x00000000},
{'l', 0x41cc9054, 0x42886036},
{'l', 0x41cda336, 0xc2886036},
{'l', 0x41a19c5c, 0x00000000},
{'l', 0x00000000, 0x42c86716},
{'l', 0xc1538b30, 0x00000000},
{'l', 0x00000000, 0xc2aff920},
{'l', 0xc1ceb61c, 0x4289731c},
{'l', 0xc159fc94, 0x36800000},
{'l', 0xc1ceb61e, 0xc289731c},
{'l', 0x00000000, 0x42aff920},
{'l', 0xc1527844, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x0000004e, 0x000066d1},/* N x-advance: 102.816406 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x41920a4f, 0x00000000},
{'l', 0x4231b7d6, 0x42a7a6a8},
{'l', 0x00000000, 0xc2a7a6a8},
{'l', 0x41527848, 0x00000000},
{'l', 0x00000000, 0x42c86716},
{'l', 0xc1920a50, 0x00000000},
{'l', 0xc231b7d6, 0xc2a7a6a8},
{'l', 0x00000000, 0x42a7a6a8},
{'l', 0xc1527844, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x0000004f, 0x00006c30},/* O x-advance: 108.187500 */
{'m', 0x4258a4f0, 0xc2b6036f},
{'q', 0xc16c3dd8, 0x00000000},
{0, 0xc1bbeb61, 0x41301b78},
{'q', 0xc10a8604, 0x41301b80},
{0, 0xc10a8604, 0x41f00000},
{'q', 0x00000000, 0x419768cf},
{0, 0x410a8604, 0x41ef768d},
{'8', 0x2c5d2c22, 0xd45d003b},
{'q', 0x410a8600, 0xc1301b7c},
{0, 0x410a8600, 0xc1ef768d},
{'q', 0x00000000, 0xc197f240},
{0, 0xc10a8600, 0xc1f00000},
{'9', 0xffd4ffde, 0xffd4ffa3},
{'m', 0x00000000, 0xc1301b80},
{'q', 0x41a89730, 0x00000000},
{0, 0x4206c3de, 0x416293c0},
{'q', 0x4149e110, 0x416180e0},
{0, 0x4149e110, 0x421768ce},
{'q', 0x00000000, 0x41bd87bc},
{0, 0xc149e110, 0x421768ce},
{'q', 0xc149e118, 0x416180dd},
{0, 0xc206c3de, 0x416180dd},
{'q', 0xc1a920a4, 0xb4c00000},
{0, 0xc2074d50, 0xc16180dc},
{'q', 0xc149e114, 0xc16180db},
{0, 0xc149e114, 0xc21768ce},
{'q', 0x00000000, 0xc1be112c},
{0, 0x4149e112, 0xc21768ce},
{'q', 0x414af3fa, 0xc16293c0},
{0, 0x42074d50, 0xc16293c0},
{'@', 0x00000050, 0x000052e2},/* P x-advance: 82.882812 */
{'m', 0x41d86037, 0xc2b21eed},
{'4', 0x00960000, 0x00000044},
{'8', 0xed3a0025, 0xc914ed14},
{'8', 0xc9ecdd00, 0xedc6edec},
{'6', 0x0000ffbc, 0xffd4ffca},
{'l', 0x41f4d50c, 0x00000000},
{'8', 0x1e650043, 0x59221e22},
{'8', 0x59de3b00, 0x1e9b1ede},
{'l', 0xc1886037, 0x00000000},
{'l', 0x00000000, 0x422112e6},
{'l', 0xc158e9aa, 0x00000000},
{'l', 0x00000000, 0xc2c86716},
{'@', 0x00000051, 0x00006c30},/* Q x-advance: 108.187500 */
{'m', 0x4258a4f0, 0xc2b6036f},
{'q', 0xc16c3dd8, 0x00000000},
{0, 0xc1bbeb61, 0x41301b78},
{'q', 0xc10a8604, 0x41301b80},
{0, 0xc10a8604, 0x41f00000},
{'q', 0x00000000, 0x419768cf},
{0, 0x410a8604, 0x41ef768d},
{'8', 0x2c5d2c22, 0xd45d003b},
{'q', 0x410a8600, 0xc1301b7c},
{0, 0x410a8600, 0xc1ef768d},
{'q', 0x00000000, 0xc197f240},
{0, 0xc10a8600, 0xc1f00000},
{'9', 0xffd4ffde, 0xffd4ffa3},
{'m', 0x4197f240, 0x42b263a6},
{'4', 0x004e0047, 0x0000ffbf},
{'l', 0xc16d50bc, 0xc1805278},
{'8', 0x00f300f8, 0x00f800fc},
{'q', 0xc1a920a4, 0x00000000},
{0, 0xc2074d50, 0xc16180dc},
{'q', 0xc149e114, 0xc16293c1},
{0, 0xc149e114, 0xc21768ce},
{'q', 0x00000000, 0xc1be112c},
{0, 0x4149e112, 0xc21768ce},
{'q', 0x414af3fa, 0xc16293c0},
{0, 0x42074d50, 0xc16293c0},
{'q', 0x41a89730, 0x00000000},
{0, 0x4206c3de, 0x416293c0},
{'q', 0x4149e110, 0x416180e0},
{0, 0x4149e110, 0x421768ce},
{'q', 0x00000000, 0x418b98ea},
{0, 0xc0e180e0, 0x41eeed1a},
{'q', 0xc0df5b10, 0x4146a860},
{0, 0xc1a225cc, 0x419293c2},
{'@', 0x00000052, 0x00005f80},/* R x-advance: 95.500000 */
{'m', 0x427406df, 0xc23beb62},
{'8', 0x19210511, 0x35211310},
{'4', 0x006d0037, 0x0000ffc6},
{'l', 0xc14d19c8, 0xc1cda338},
{'8', 0xcbdad8ed, 0xf3cef3ee},
{'l', 0xc16c3dda, 0x00000000},
{'l', 0x00000000, 0x4229655e},
{'4', 0x0000ffca, 0xfe700000},
{'l', 0x41f4d50c, 0x00000000},
{'8', 0x1c660044, 0x56211c21},
{'8', 0x3eef2500, 0x22cd18ef},
{'m', 0xc207d6c4, 0xc2285278},
{'4', 0x008e0000, 0x00000044},
{'8', 0xef3b0027, 0xcb14ee14},
{'8', 0xccecdd00, 0xefc5efed},
{'l', 0xc1886037, 0x00000000},
{'@', 0x00000053, 0x0000573f},/* S x-advance: 87.246094 */
{'m', 0x42931d35, 0xc2c1d354},
{'l', 0x00000000, 0x41538b28},
{'8', 0xeac6f2e2, 0xf9ccf9e5},
{'8', 0x11bc00d4, 0x30e911e9},
{'8', 0x280f1a00, 0x153c0d10},
{'l', 0x410301b8, 0x3fd6c3e0},
{'8', 0x28590b3c, 0x4d1c1c1c},
{'q', 0x00000000, 0x41690528},
{0, 0xc11cc750, 0x41b0a4f0},
{'q', 0xc11bb464, 0x40f08975},
{0, 0xc1e4b98c, 0x40f08975},
{'8', 0xfac400e4, 0xedbefae1},
{'l', 0x00000000, 0xc15f5b0f},
{'8', 0x1b401221, 0x093e091f},
{'8', 0xee47002e, 0xcc19ee19},
{'8', 0xd2eee300, 0xe8c5f0ef},
{'l', 0xc10414a0, 0xbfce2cc0},
{'8', 0xdba9f4c4, 0xb9e5e7e5},
{'8', 0xad25cb00, 0xe267e225},
{'8', 0x0539001c, 0x0f3b051d},
{'@', 0x00000054, 0x000053f5},/* T x-advance: 83.957031 */
{'m', 0xbece2cac, 0xc2c86716},
{'l', 0x42a987bb, 0x00000000},
{'l', 0x00000000, 0x41368ce0},
{'l', 0xc20e4828, 0x00000000},
{'l', 0x00000000, 0x42b1957a},
{'l', 0xc159fc90, 0x00000000},
{'l', 0x00000000, 0xc2b1957a},
{'l', 0xc20e4829, 0x00000000},
{'l', 0xb5b00000, 0xc1368ce0},
{'@', 0x00000055, 0x0000649a},/* U x-advance: 100.601562 */
{'m', 0x413f2414, 0xc2c86716},
{'4', 0x00000036, 0x00f30000},
{'8', 0x5c174000, 0x1c4b1c17},
{'8', 0xe44b0034, 0xa417e417},
{'4', 0xff0d0000, 0x00000036},
{'l', 0x00000000, 0x427a338b},
{'q', 0x00000000, 0x419cc74d},
{0, 0xc11bb468, 0x41ecc74c},
{'q', 0xc11aa180, 0x41200001},
{0, 0xc1e4b98e, 0x41200001},
{'q', 0xc197f240, 0xb4c00000},
{0, 0xc1e5cc74, 0xc1200000},
{'q', 0xc11aa180, 0xc11fffff},
{0, 0xc11aa180, 0xc1ecc74c},
{'l', 0x00000000, 0xc27a338b},
{'@', 0x00000056, 0x00005e06},/* V x-advance: 94.023438 */
{'m', 0x421d50c0, 0x00000000},
{'l', 0xc2190527, 0xc2c86716},
{'l', 0x416293c1, 0x00000000},
{'l', 0x41fdf5b2, 0x42a8b98e},
{'l', 0x41fe7f24, 0xc2a8b98e},
{'l', 0x416180d8, 0x00000000},
{'l', 0xc218c06d, 0x42c86716},
{'l', 0xc175e7f4, 0x00000000},
{'@', 0x00000057, 0x000087e7},/* W x-advance: 135.902344 */
{'m', 0x40920a4f, 0xc2c86716},
{'l', 0x415b0f76, 0x00000000},
{'l', 0x41a89731, 0x42a9655e},
{'l', 0x41a80dbe, 0xc2a9655e},
{'l', 0x4173c224, 0x00000000},
{'l', 0x41a89734, 0x42a9655e},
{'l', 0x41a80dbc, 0xc2a9655e},
{'l', 0x415c2260, 0x00000000},
{'l', 0xc1c957a0, 0x42c86716},
{'l', 0xc1886038, 0x00000000},
{'l', 0xc1a920a4, 0xc2adf5b1},
{'l', 0xc1aabcfe, 0x42adf5b1},
{'l', 0xc1886036, 0x00000000},
{'l', 0xc1c8ce2c, 0xc2c86716},
{'@', 0x00000058, 0x00005e29},/* X x-advance: 94.160156 */
{'m', 0x410a8603, 0xc2c86716},
{'l', 0x41690527, 0x00000000},
{'l', 0x41c731d3, 0x4214fe48},
{'l', 0x41c844b8, 0xc214fe48},
{'l', 0x41690528, 0x00000000},
{'l', 0xc200dbeb, 0x42407bb4},
{'l', 0x4209731d, 0x42505278},
{'l', 0xc1690528, 0x00000000},
{'l', 0xc1e180da, 0xc22a7844},
{'l', 0xc1e31d35, 0x422a7844},
{'l', 0xc16a180e, 0x00000000},
{'l', 0x420f1656, 0xc255f5b1},
{'l', 0xc1f9aa18, 0xc23ad87b},
{'@', 0x00000059, 0x000053f5},/* Y x-advance: 83.957031 */
{'m', 0xbe89731d, 0xc2c86716},
{'l', 0x41690527, 0x00000000},
{'l', 0x41de4829, 0x4224d50c},
{'l', 0x41dcabd0, 0xc224d50c},
{'l', 0x41690528, 0x00000000},
{'l', 0xc20dbeb6, 0x4251eed1},
{'l', 0x00000000, 0x423edf5b},
{'l', 0xc159fc90, 0x00000000},
{'l', 0x00000000, 0xc23edf5b},
{'l', 0xc20dbeb6, 0xc251eed1},
{'@', 0x0000005a, 0x00005e29},/* Z x-advance: 94.160156 */
{'m', 0x40f6fad8, 0xc2c86716},
{'l', 0x429d731c, 0x00000000},
{'l', 0x00000000, 0x41255e80},
{'l', 0xc27d6c3c, 0x429ce9aa},
{'l', 0x4281cc74, 0xb6400000},
{'l', 0x00000000, 0x41368ce3},
{'l', 0xc2a39fc8, 0x00000000},
{'l', 0xb6400000, 0xc1255e7f},
{'l', 0x427d6c3d, 0xc29ce9aa},
{'l', 0xc2773f91, 0x00000000},
{'l', 0x00000000, 0xc1368ce0},
{'@', 0x0000005b, 0x0000359f},/* [ x-advance: 53.621094 */
{'m', 0x413cfe48, 0xc2d0dbeb},
{'l', 0x41e3a6a8, 0x00000000},
{'l', 0x00000000, 0x41198e98},
{'l', 0xc180dbeb, 0x00000000},
{'l', 0x00000000, 0x42ceb61f},
{'l', 0x4180dbeb, 0xb5800000},
{'l', 0x00000000, 0x41198e9b},
{'l', 0xc1e3a6a8, 0x00000000},
{'l', 0x00000000, 0xc2f519c5},
{'@', 0x0000005c, 0x00002e4f},/* \ x-advance: 46.308594 */
{'m', 0x41368ce3, 0xc2c86716},
{'l', 0x420b98e9, 0x42e1e7f2},
{'l', 0xc1368ce4, 0xb5800000},
{'l', 0xc20b98e9, 0xc2e1e7f2},
{'l', 0x41368ce3, 0x00000000},
{'@', 0x0000005d, 0x0000359f},/* ] x-advance: 53.621094 */
{'m', 0x42273f92, 0xc2d0dbeb},
{'l', 0x00000000, 0x42f519c5},
{'l', 0xc1e3a6a8, 0x36000000},
{'l', 0xb5800000, 0xc1198e9b},
{'l', 0x41805278, 0x00000000},
{'l', 0x00000000, 0xc2ceb61f},
{'l', 0xc1805278, 0x00000000},
{'l', 0xb5800000, 0xc1198e98},
{'l', 0x41e3a6a8, 0x00000000},
{'@', 0x0000005e, 0x0000732a},/* ^ x-advance: 115.164062 */
{'m', 0x42805278, 0xc2c86716},
{'l', 0x4211c596, 0x421587bb},
{'l', 0xc157d6c8, 0x00000000},
{'l', 0xc1ec3dd8, 0xc1d4149e},
{'l', 0xc1ec3ddb, 0x41d4149e},
{'l', 0xc157d6c3, 0x00000000},
{'l', 0x4211c595, 0xc21587bb},
{'l', 0x41527844, 0x00000000},
{'@', 0x0000005f, 0x000044b9},/* _ x-advance: 68.722656 */
{'m', 0x428c225d, 0x41b68ce3},
{'l', 0x00000000, 0x41198e9a},
{'l', 0xc28ed19d, 0x00000000},
{'l', 0x36600000, 0xc1198e9a},
{'l', 0x428ed19d, 0x00000000},
{'@', 0x00000060, 0x000044b9},/* ` x-advance: 68.722656 */
{'m', 0x41c50c07, 0xc2dbdda3},
{'0', 0x00d7644b, 0x00349ca9},
{'@', 0x00000061, 0x0000543a},/* a x-advance: 84.226562 */
{'m', 0x423c74d5, 0xc2172414},
{'8', 0x0dae00c5, 0x2ee90de9},
{'8', 0x29111a00, 0x0f2f0f11},
{'8', 0xe4410029, 0xb318e318},
{'4', 0xfff50000, 0x0000ffcf},
{'m', 0x41c50c06, 0xc0a338b8},
{'4', 0x00ab0000, 0x0000ffcf},
{'l', 0x00000000, 0xc1368ce3},
{'8', 0x28d61bf0, 0x0cc30ce7},
{'8', 0xe7b700d2, 0xbbe5e6e5},
{'8', 0xb421ce00, 0xe765e722},
{'4', 0x00000045, 0xfffc0000},
{'8', 0xcceade00, 0xeec2eeea},
{'8', 0x06ce00e7, 0x12d206e8},
{'l', 0x00000000, 0xc1368ce4},
{'8', 0xf134f61b, 0xfb31fb19},
{'8', 0x21610041, 0x66202120},
{'@', 0x00000062, 0x0000573f},/* b x-advance: 87.246094 */
{'m', 0x4285d354, 0xc216112e},
{'8', 0xabeaca00, 0xe1c3e1ea},
{'8', 0x1fc300d9, 0x55ea1eea},
{'8', 0x55163600, 0x1e3d1e16},
{'8', 0xe23d0027, 0xab16e116},
{'m', 0xc2280dbe, 0xc1d1eed2},
{'8', 0xd927e60f, 0xf338f317},
{'q', 0x415b0f74, 0x00000000},
{0, 0x41b1b7d6, 0x412df5b0},
{'q', 0x41097320, 0x412df5b4},
{0, 0x41097320, 0x41e4b990},
{'q', 0x00000000, 0x418dbeb6},
{0, 0xc1097320, 0x41e4b98e},
{'8', 0x2ba82bde, 0xf4c800df},
{'9', 0xfff3ffe9, 0xffd8ffd9},
{'l', 0x00000000, 0x41346716},
{'l', 0xc146a860, 0x00000000},
{'l', 0x00000000, 0xc2d0dbeb},
{'l', 0x4146a860, 0x00000000},
{'l', 0x00000000, 0x4222af3f},
{'@', 0x00000063, 0x00004b92},/* c x-advance: 75.570312 */
{'m', 0x4286180e, 0xc2909052},
{'l', 0x00000000, 0x4138b2ac},
{'8', 0xefd6f5ec, 0xfbd6fbec},
{'8', 0x1eb600d0, 0x55e61ee6},
{'8', 0x551a3700, 0x1e4a1e1a},
{'8', 0xfb2a0015, 0xef2afb15},
{'l', 0x00000000, 0x41368ce2},
{'8', 0x0ed609ec, 0x04d204ea},
{'q', 0xc187d6c4, 0x00000000},
{0, 0xc1d7d6c4, 0xc12abcfe},
{'q', 0xc1200000, 0xc12abcff},
{0, 0xc1200000, 0xc1e655e8},
{'q', 0xb5000000, 0xc1931d36},
{0, 0x412112e6, 0xc1e768d0},
{'8', 0xd66ed628, 0x042c0016},
{'q', 0x40adf5b0, 0x3f920a80},
{0, 0x41289734, 0x405f5b20},
{'@', 0x00000064, 0x0000573f},/* d x-advance: 87.246094 */
{'m', 0x4279aa18, 0xc27f0897},
{'l', 0x00000000, 0xc222af3f},
{'l', 0x41459578, 0x00000000},
{'4', 0x01a10000, 0x0000ffcf},
{'l', 0x00000000, 0xc1346716},
{'8', 0x28d91af1, 0x0cc80ce9},
{'q', 0xc159fc90, 0x34000000},
{0, 0xc1b1b7d7, 0xc12df5b0},
{'q', 0xc1086036, 0xc12df5b0},
{0, 0xc1086036, 0xc1e4b98e},
{'q', 0xb5000000, 0xc18dbeb6},
{0, 0x41086036, 0xc1e4b990},
{'8', 0xd558d522, 0x0d380021},
{'9', 0x000c0017, 0x00270027},
{'m', 0xc2285278, 0x41d1eed2},
{'8', 0x55163600, 0x1e3d1e16},
{'8', 0xe23d0027, 0xab16e116},
{'8', 0xabeaca00, 0xe1c3e1ea},
{'8', 0x1fc300d9, 0x55ea1eea},
{'@', 0x00000065, 0x00005490},/* e x-advance: 84.562500 */
{'m', 0x429a7f24, 0xc222af3f},
{'4', 0x00180000, 0x0000ff1d},
{'8', 0x4d1e3303, 0x1a4c1a1b},
{'8', 0xfa37001c, 0xec35fa1a},
{'l', 0x00000000, 0x413ad87b},
{'8', 0x11ca0be6, 0x05c805e5},
{'q', 0xc18fe482, 0x00000000},
{0, 0xc1e4301b, 0xc127844c},
{'q', 0xc127844a, 0xc127844b},
{0, 0xc127844a, 0xc1e293c2},
{'q', 0xb5000000, 0xc193a6a8},
{0, 0x411eed1a, 0xc1ea180e},
{'8', 0xd56bd527, 0x275f003c},
{'9', 0x00260023, 0x006a0023},
{'m', 0xc1459578, 0xc067f240},
{'8', 0xc0ead800, 0xe8c6e8ea},
{'8', 0x17be00d7, 0x41e417e8},
{'l', 0x42301b7e, 0xbd897200},
{'@', 0x00000066, 0x00003063},/* f x-advance: 48.386719 */
{'m', 0x424c06df, 0xc2d0dbeb},
{'4', 0x00290000, 0x0000ffd1},
{'8', 0x0adb00e6, 0x26f60af6},
{'0', 0x00511a00, 0x00af2600},
{'l', 0x00000000, 0x42832414},
{'l', 0xc146a85f, 0x00000000},
{'l', 0x00000000, 0xc2832414},
{'0', 0xda0000d1, 0xec00002f},
{'8', 0xb717ce00, 0xe94ae917},
{'l', 0x413ad87c, 0x00000000},
{'@', 0x00000067, 0x0000573f},/* g x-advance: 87.246094 */
{'m', 0x4279aa18, 0xc219d354},
{'8', 0xadeacb00, 0xe3c2e3ea},
{'8', 0x1dc200d9, 0x53ea1dea},
{'8', 0x52163500, 0x1d3e1d16},
{'8', 0xe33e0028, 0xae16e316},
{'m', 0x41459578, 0x41e90528},
{'q', 0x00000000, 0x41998e9a},
{0, 0xc1086038, 0x41e4b98e},
{'8', 0x259825de, 0xfdcf00e6},
{'9', 0xfffcffe9, 0xfff4ffd4},
{'l', 0x00000000, 0xc14036fb},
{'8', 0x112a0b15, 0x052b0515},
{'8', 0xe7480030, 0xb418e718},
{'l', 0x00000000, 0xc0c36fb0},
{'8', 0x27d91af1, 0x0dc70de9},
{'8', 0xd6a700c9, 0x91dfd6df},
{'8', 0x9121bb00, 0xd659d621},
{'8', 0x0d390021, 0x27270d17},
{'l', 0x00000000, 0xc1368ce4},
{'l', 0x41459578, 0x00000000},
{'l', 0x00000000, 0x4283ad88},
{'@', 0x00000068, 0x0000571d},/* h x-advance: 87.113281 */
{'m', 0x4296df5b, 0xc23579fc},
{'4', 0x00b50000, 0x0000ffcf},
{'l', 0x00000000, 0xc233dda3},
{'8', 0xc1f0d600, 0xebcfebf0},
{'8', 0x19c100d8, 0x45e919e9},
{'l', 0x00000000, 0x4229eed1},
{'l', 0xc146a860, 0x00000000},
{'4', 0xfe5f0000, 0x00000031},
{'l', 0x00000000, 0x4223c225},
{'8', 0xd829e511, 0xf337f318},
{'8', 0x204e0033, 0x5e1a1f1a},
{'@', 0x00000069, 0x00002630},/* i x-advance: 38.187500 */
{'m', 0x414f3f92, 0xc29655e8},
{'l', 0x4145957a, 0x00000000},
{'4', 0x012c0000, 0x0000ffcf},
{'6', 0xfed40000, 0xff8b0000},
{'0', 0x3e000031, 0xc20000cf},
{'@', 0x0000006a, 0x00002630},/* j x-advance: 38.187500 */
{'m', 0x414f3f92, 0xc29655e8},
{'4', 0x00000031, 0x01320000},
{'8', 0x53ea3900, 0x19ba19eb},
{'4', 0x0000ffee, 0xffd70000},
{'l', 0x40527845, 0x00000000},
{'8', 0xf426001c, 0xca0af30a},
{'6', 0xfece0000, 0xff8b0000},
{'0', 0x3e000031, 0xc20000cf},
{'@', 0x0000006b, 0x00004f98},/* k x-advance: 79.593750 */
{'m', 0x4147bb46, 0xc2d0dbeb},
{'l', 0x4146a860, 0x00000000},
{'l', 0x00000000, 0x4276b61e},
{'l', 0x421361ee, 0xc201aa18},
{'l', 0x417c5958, 0x00000000},
{'l', 0xc21f768d, 0x420cabd0},
{'l', 0x42262cab, 0x42200000},
{'l', 0xc180dbea, 0x00000000},
{'l', 0xc218c06e, 0xc212d87b},
{'l', 0x36000000, 0x4212d87b},
{'l', 0xc146a860, 0x00000000},
{'l', 0x00000000, 0xc2d0dbeb},
{'@', 0x0000006c, 0x00002630},/* l x-advance: 38.187500 */
{'m', 0x414f3f92, 0xc2d0dbeb},
{'l', 0x4145957a, 0x00000000},
{'l', 0x00000000, 0x42d0dbeb},
{'l', 0xc145957a, 0x00000000},
{'l', 0x00000000, 0xc2d0dbeb},
{'@', 0x0000006d, 0x000085e4},/* m x-advance: 133.890625 */
{'m', 0x428ef3f9, 0xc272f3f9},
{'8', 0xcf2cdf12, 0xf13cf119},
{'8', 0x2148002e, 0x5d192019},
{'4', 0x00b50000, 0x0000ffcf},
{'l', 0x00000000, 0xc233dda3},
{'8', 0xc0f1d500, 0xecd2ecf1},
{'8', 0x19c400da, 0x45ea19ea},
{'4', 0x00a90000, 0x0000ffcf},
{'l', 0x00000000, 0xc233dda3},
{'8', 0xc0f1d500, 0xecd1ecf1},
{'8', 0x19c400db, 0x45ea19ea},
{'l', 0x00000000, 0x4229eed1},
{'l', 0xc146a860, 0x00000000},
{'4', 0xfed40000, 0x00000031},
{'l', 0x00000000, 0x413ad87c},
{'8', 0xd828e510, 0xf338f317},
{'8', 0x10370020, 0x30221017},
{'@', 0x0000006e, 0x0000571d},/* n x-advance: 87.113281 */
{'m', 0x4296df5b, 0xc23579fc},
{'4', 0x00b50000, 0x0000ffcf},
{'l', 0x00000000, 0xc233dda3},
{'8', 0xc1f0d600, 0xebcfebf0},
{'8', 0x19c100d8, 0x45e919e9},
{'l', 0x00000000, 0x4229eed1},
{'l', 0xc146a860, 0x00000000},
{'4', 0xfed40000, 0x00000031},
{'l', 0x00000000, 0x413ad87c},
{'8', 0xd829e511, 0xf337f318},
{'8', 0x204e0033, 0x5e1a1f1a},
{'@', 0x0000006f, 0x00005418},/* o x-advance: 84.093750 */
{'m', 0x42285278, 0xc2850527},
{'8', 0x1fc200d9, 0x54e91ee9},
{'8', 0x55163500, 0x1e3f1e17},
{'8', 0xe13e0027, 0xac17e117},
{'8', 0xace9cb00, 0xe1c2e1e9},
{'m', 0x00000000, 0xc1278450},
{'q', 0x4180dbec, 0x00000000},
{0, 0x41ca6a84, 0x41278450},
{'q', 0x41131d38, 0x41278448},
{0, 0x41131d38, 0x41e7f240},
{'q', 0x00000000, 0x4193a6a8},
{0, 0xc1131d38, 0x41e7f240},
{'8', 0x299b29dc, 0xd79b00c0},
{'q', 0xc1120a4e, 0xc1289731},
{0, 0xc1120a4e, 0xc1e7f240},
{'q', 0xb5000000, 0xc194301c},
{0, 0x41120a4e, 0xc1e7f240},
{'q', 0x41131d36, 0xc1278450},
{0, 0x41caf3f9, 0xc1278450},
{'@', 0x00000070, 0x0000573f},/* p x-advance: 87.246094 */
{'m', 0x41c731d3, 0xc1346716},
{'l', 0x00000000, 0x421f768c},
{'l', 0xc146a860, 0x36000000},
{'4', 0xfe610000, 0x00000031},
{'l', 0x00000000, 0x41368ce4},
{'8', 0xd927e60f, 0xf338f317},
{'q', 0x415b0f74, 0x00000000},
{0, 0x41b1b7d6, 0x412df5b0},
{'q', 0x41097320, 0x412df5b4},
{0, 0x41097320, 0x41e4b990},
{'q', 0x00000000, 0x418dbeb6},
{0, 0xc1097320, 0x41e4b98e},
{'8', 0x2ba82bde, 0xf4c800df},
{'9', 0xfff3ffe9, 0xffd8ffd9},
{'m', 0x42280dbe, 0xc1d1eed1},
{'8', 0xabeaca00, 0xe1c3e1ea},
{'8', 0x1fc300d9, 0x55ea1eea},
{'8', 0x55163600, 0x1e3d1e16},
{'8', 0xe23d0027, 0xab16e116},
{'@', 0x00000071, 0x0000573f},/* q x-advance: 87.246094 */
{'m', 0x41a2af3f, 0xc216112e},
{'8', 0x55163600, 0x1e3d1e16},
{'8', 0xe23d0027, 0xab16e116},
{'8', 0xabeaca00, 0xe1c3e1ea},
{'8', 0x1fc300d9, 0x55ea1eea},
{'m', 0x42285278, 0x41d1eed1},
{'8', 0x28d91af1, 0x0cc80ce9},
{'q', 0xc159fc90, 0x34000000},
{0, 0xc1b1b7d7, 0xc12df5b0},
{'q', 0xc1086036, 0xc12df5b0},
{0, 0xc1086036, 0xc1e4b98e},
{'q', 0xb5000000, 0xc18dbeb6},
{0, 0x41086036, 0xc1e4b990},
{'8', 0xd558d522, 0x0d380021},
{'9', 0x000c0017, 0x00270027},
{'l', 0x00000000, 0xc1368ce4},
{'l', 0x41459578, 0x00000000},
{'l', 0x00000000, 0x42cf844c},
{'l', 0xc1459578, 0xb6800000},
{'l', 0x00000000, 0xc21f768c},
{'@', 0x00000072, 0x00003882},/* r x-advance: 56.507812 */
{'m', 0x42620a4f, 0xc27e7f24},
{'8', 0xfaeefcf8, 0xfeebfef7},
{'8', 0x1bc000d7, 0x4eea1bea},
{'l', 0x00000000, 0x421e63a6},
{'l', 0xc146a860, 0x00000000},
{'4', 0xfed40000, 0x00000031},
{'l', 0x00000000, 0x413ad87c},
{'8', 0xd828e50f, 0xf33cf318},
{'8', 0x000b0005, 0x010d0006},
{'l', 0x3d897400, 0x414af3f8},
{'@', 0x00000073, 0x0000479c},/* s x-advance: 71.609375 */
{'m', 0x42737d6c, 0xc291e7f2},
{'l', 0x00000000, 0x413ad87c},
{'8', 0xf0d5f6ec, 0xfbd2fbea},
{'8', 0x0bc900dc, 0x21ee0bee},
{'8', 0x1b0d1100, 0x1234090d},
{'l', 0x40874d50, 0x3f708980},
{'8', 0x1f4a0b34, 0x39161416},
{'8', 0x42df2900, 0x18a518df},
{'8', 0xfcce00e8, 0xf2c9fce6},
{'l', 0x00000000, 0xc14c06df},
{'8', 0x15350e1b, 0x0634061a},
{'8', 0xf5350022, 0xdf12f412},
{'8', 0xe2f3ec00, 0xecc5f6f3},
{'l', 0xc0897320, 0xbf80dbe0},
{'8', 0xe3bef7d3, 0xc9ececec},
{'8', 0xbf1ed600, 0xe955e91e},
{'8', 0x0433001b, 0x0c2c0418},
{'@', 0x00000074, 0x000035e4},/* t x-advance: 53.890625 */
{'m', 0x41c9579f, 0xc2c10527},
{'0', 0x00655500, 0x009b2600},
{'l', 0x00000000, 0x422338b2},
{'8', 0x2f092400, 0x0a290a0a},
{'4', 0x00000032, 0x00290000},
{'l', 0xc14af3f8, 0x00000000},
{'8', 0xebb200c7, 0xb3ebebeb},
{'l', 0x00000000, 0xc22338b2},
{'0', 0xda0000dc, 0xab000024},
{'l', 0x4146a85f, 0x00000000},
{'@', 0x00000075, 0x0000571d},/* u x-advance: 87.113281 */
{'m', 0x413ad87b, 0xc1ed50c0},
{'4', 0xff4a0000, 0x00000031},
{'l', 0x00000000, 0x4234225d},
{'8', 0x40102a00, 0x15311510},
{'8', 0xe73f0028, 0xbb17e717},
{'l', 0x00000000, 0xc22a7845},
{'l', 0x41459574, 0x00000000},
{'4', 0x012c0000, 0x0000ffcf},
{'l', 0x00000000, 0xc138b2af},
{'8', 0x28d71bef, 0x0dc90de9},
{'8', 0xe0b200cd, 0xa2e6e0e6},
{'m', 0x41f89732, 0xc23d4302},
{'l', 0x00000000, 0x00000000},
{'@', 0x00000076, 0x00005157},/* v x-advance: 81.339844 */
{'m', 0x408301b8, 0xc29655e8},
{'l', 0x4151655e, 0x00000000},
{'l', 0x41bbeb61, 0x427c5958},
{'l', 0x41bbeb62, 0xc27c5958},
{'l', 0x41516560, 0x00000000},
{'l', 0xc1e180dc, 0x429655e8},
{'l', 0xc1863a6a, 0x00000000},
{'l', 0xc1e180dc, 0xc29655e8},
{'@', 0x00000077, 0x0000706a},/* w x-advance: 112.414062 */
{'m', 0x40b8b2af, 0xc29655e8},
{'l', 0x4145957a, 0x00000000},
{'l', 0x4176fad6, 0x426aa181},
{'l', 0x4175e7f4, 0xc26aa181},
{'l', 0x41690528, 0x00000000},
{'l', 0x4176fad4, 0x426aa181},
{'l', 0x4175e7f8, 0xc26aa181},
{'l', 0x41459578, 0x00000000},
{'l', 0xc19d50c0, 0x429655e8},
{'l', 0xc1690528, 0x00000000},
{'l', 0xc1816560, 0xc2767165},
{'l', 0xc181eed0, 0x42767165},
{'l', 0xc1690528, 0x00000000},
{'l', 0xc19d50c0, 0xc29655e8},
{'@', 0x00000078, 0x00005157},/* x x-advance: 81.339844 */
{'m', 0x4296df5b, 0xc29655e8},
{'l', 0xc1d9731e, 0x42124f09},
{'l', 0x41e4b98e, 0x421a5cc7},
{'l', 0xc1690524, 0x00000000},
{'l', 0xc1af0898, 0xc1ec3dda},
{'l', 0xc1af0897, 0x41ec3dda},
{'l', 0xc1690527, 0x00000000},
{'l', 0x41e98e9a, 0xc21d50c0},
{'l', 0xc1d5b0f7, 0xc20f5b10},
{'0', 0x6b4f003a, 0x003a954f},
{'@', 0x00000079, 0x00005157},/* y x-advance: 81.339844 */
{'m', 0x4230e9aa, 0x40df5b0f},
{'8', 0x46d835ec, 0x10cb10ed},
{'4', 0x0000ffd9, 0xffd70000},
{'l', 0x40e7f242, 0x00000000},
{'8', 0xf71f0014, 0xd318f70b},
{'l', 0x400dbeb0, 0xc0b46716},
{'l', 0xc1f338b2, 0xc293eb62},
{'l', 0x4151655e, 0x00000000},
{'l', 0x41bbeb61, 0x426b2af4},
{'l', 0x41bbeb62, 0xc26b2af4},
{'l', 0x41516560, 0x00000000},
{'l', 0xc204149e, 0x42a44b99},
{'@', 0x0000007a, 0x00004825},/* z x-advance: 72.144531 */
{'m', 0x40f2af3f, 0xc29655e8},
{'l', 0x426aa180, 0x00000000},
{'l', 0x00000000, 0x41346718},
{'l', 0xc239c595, 0x42581b7d},
{'l', 0x4239c595, 0x35800000},
{'l', 0x00000000, 0x411dda33},
{'l', 0xc271579f, 0x00000000},
{'l', 0x00000000, 0xc1346716},
{'l', 0x4239c595, 0xc2581b7c},
{'l', 0xc2330f76, 0x00000000},
{'l', 0xb5000000, 0xc11dda38},
{'@', 0x0000007b, 0x00005773},/* { x-advance: 87.449219 */
{'m', 0x428c8973, 0x414c06df},
{'4', 0x00260000, 0x0000fff0},
{'8', 0xeda700be, 0xb1eaedea},
{'l', 0x00000000, 0xc1805278},
{'8', 0xc8f2d800, 0xf1ccf1f2},
{'4', 0x0000fff0, 0xffda0000},
{'l', 0x408301b8, 0x00000000},
{'8', 0xf1340026, 0xc90ef10e},
{'l', 0x00000000, 0xc180dbec},
{'8', 0xb216c500, 0xed59ed16},
{'4', 0x00000010, 0x00260000},
{'l', 0xc0920a50, 0x00000000},
{'8', 0x0bcf00db, 0x31f50bf5},
{'l', 0x00000000, 0x41852786},
{'8', 0x3df42a00, 0x19d713f4},
{'8', 0x1a29071d, 0x3c0c130c},
{'l', 0x00000000, 0x41852785},
{'8', 0x310b2500, 0x0b310b0b},
{'l', 0x40920a50, 0x00000000},
{'@', 0x0000007c, 0x00002e4f},/* | x-advance: 46.308594 */
{'m', 0x41e6df5b, 0xc2d2112e},
{'l', 0x00000000, 0x4309731d},
{'l', 0xc1368ce4, 0x00000000},
{'l', 0x00000000, 0xc309731d},
{'l', 0x41368ce4, 0x00000000},
{'@', 0x0000007d, 0x00005773},/* } x-advance: 87.449219 */
{'m', 0x4189731d, 0x414c06df},
{'l', 0x409655e8, 0x00000000},
{'8', 0xf5300025, 0xcf0bf50b},
{'l', 0x00000000, 0xc1852784},
{'8', 0xc40cd700, 0xe629ed0c},
{'8', 0xe7d7fae3, 0xc3f4edf4},
{'l', 0x00000000, 0xc1852786},
{'8', 0xcff5da00, 0xf5d0f5f5},
{'4', 0x0000ffee, 0xffda0000},
{'l', 0x40874d50, 0x00000000},
{'8', 0x13590042, 0x4e161316},
{'l', 0x00000000, 0x4180dbec},
{'8', 0x370e2800, 0x0f340f0e},
{'4', 0x00000010, 0x00260000},
{'l', 0xc0852780, 0x00000000},
{'8', 0x0fcc00da, 0x38f20ff2},
{'l', 0x00000000, 0x41805278},
{'8', 0x4fea3b00, 0x13a713ea},
{'l', 0xc0874d50, 0x00000000},
{'l', 0x00000000, 0xc11aa181},
{'@', 0x0000007e, 0x0000732a},/* ~ x-advance: 115.164062 */
{'m', 0x42c93543, 0xc25b5430},
{'l', 0x00000000, 0x413f2414},
{'8', 0x1ecc15e4, 0x09cf09e9},
{'8', 0xf1bc00e3, 0xfffcfffe},
{'8', 0xfefb00ff, 0xf0bef0d7},
{'8', 0x0ad200e9, 0x20cf0ae9},
{'l', 0x00000000, 0xc13f2414},
{'8', 0xe234eb1c, 0xf732f718},
{'8', 0x1044001d, 0x01040102},
{'8', 0x02050002, 0x10421029},
{'8', 0xf62d0017, 0xe032f616},
{'@', 0x000000e9, 0x00005490},/* é x-advance: 84.562500 */
{'m', 0x429a7f24, 0xc222af3f},
{'4', 0x00180000, 0x0000ff1d},
{'8', 0x4d1e3303, 0x1a4c1a1b},
{'8', 0xfa37001c, 0xec35fa1a},
{'l', 0x00000000, 0x413ad87b},
{'8', 0x11ca0be6, 0x05c805e5},
{'q', 0xc18fe482, 0x00000000},
{0, 0xc1e4301b, 0xc127844c},
{'q', 0xc127844a, 0xc127844b},
{0, 0xc127844a, 0xc1e293c2},
{'q', 0xb5000000, 0xc193a6a8},
{0, 0x411eed1a, 0xc1ea180e},
{'8', 0xd56bd527, 0x275f003c},
{'9', 0x00260023, 0x006a0023},
{'m', 0xc1459578, 0xc067f240},
{'8', 0xc0ead800, 0xe8c6e8ea},
{'8', 0x17be00d7, 0x41e417e8},
{'6', 0x000000b0, 0xfefaffd1},
{'0', 0x64a90035, 0x9c4b00d7},
{'@', 0x000000f1, 0x0000571d},/* ñ x-advance: 87.113281 */
{'m', 0x4296df5b, 0xc23579fc},
{'4', 0x00b50000, 0x0000ffcf},
{'l', 0x00000000, 0xc233dda3},
{'8', 0xc1f0d600, 0xebcfebf0},
{'8', 0x19c100d8, 0x45e919e9},
{'l', 0x00000000, 0x4229eed1},
{'l', 0xc146a860, 0x00000000},
{'4', 0xfed40000, 0x00000031},
{'l', 0x00000000, 0x413ad87c},
{'8', 0xd829e511, 0xf337f318},
{'8', 0x204e0033, 0x5e1a1f1a},
{'m', 0xc1f920a6, 0xc23a4f08},
{'l', 0xc074d500, 0xc06c3de0},
{'8', 0xf9f6fbfb, 0xfef9fefc},
{'8', 0x09f100f6, 0x1ffb09fc},
{'l', 0xc1063a6a, 0x00000000},
{'8', 0xc90edc00, 0xed26ed0d},
{'8', 0x0312000a, 0x0c120308},
{'l', 0x4074d510, 0x406c3de0},
{'8', 0x080a0505, 0x02080204},
{'8', 0xf70f000a, 0xe105f704},
{'l', 0x41063a6c, 0x00000000},
{'8', 0x38f22400, 0x13da13f3},
{'8', 0xfdee00f6, 0xf4eefdf8},
{'@', 0x000000d1, 0x000066d1},/* Ñ x-advance: 102.816406 */
{'m', 0x4157d6c4, 0xc2c86716},
{'l', 0x41920a4f, 0x00000000},
{'l', 0x4231b7d6, 0x42a7a6a8},
{'l', 0x00000000, 0xc2a7a6a8},
{'l', 0x41527848, 0x00000000},
{'l', 0x00000000, 0x42c86716},
{'l', 0xc1920a50, 0x00000000},
{'l', 0xc231b7d6, 0xc2a7a6a8},
{'4', 0x014f0000, 0x0000ffcc},
{'6', 0xfe700000, 0xffc60096},
{'l', 0xc074d510, 0xc00dbec0},
{'8', 0xfbf5fdfa, 0xfff9fffc},
{'8', 0x06f100f7, 0x12fb06fb},
{'4', 0x00010000, 0x0000ffdf},
{'8', 0xd60de500, 0xf125f10d},
{'8', 0x02110009, 0x09150208},
{'l', 0x4074d500, 0x4000dbe0},
{'8', 0x050a0306, 0x01080104},
{'8', 0xfa0d0008, 0xef05fa05},
{'4', 0xffff0000, 0x00000021},
{'8', 0x2af21a00, 0x0fdc0ff3},
{'8', 0xfeef00f7, 0xf7ebfef9},
{'@', 0x000000df, 0x00005693},/* ß x-advance: 86.574219 */
{'m', 0x4147bb46, 0xc2989e11},
{'8', 0xae1fcb00, 0xe35ae320},
{'8', 0x1f550037, 0x5b1e1f1d},
{'8', 0x11c102d8, 0x29ea0fea},
{'8', 0x17070c00, 0x16190a07},
{'l', 0x4074d510, 0x401eed20},
{'8', 0x2f391c2c, 0x2d0c130c},
{'8', 0x46e22e00, 0x18aa18e2},
{'8', 0xfddd00ef, 0xf7dbfdee},
{'l', 0x00000000, 0xc1301b7d},
{'8', 0x0c280815, 0x03240312},
{'8', 0xf42f001f, 0xdb10f410},
{'8', 0xe4f8f000, 0xe5def5f9},
{'l', 0xc0c59578, 0xc06c3de0},
{'8', 0xdfdbf1e7, 0xd6f5eef5},
{'8', 0xc716de00, 0xe23fe916},
{'8', 0xd6ede5fe, 0xf1d1f1ef},
{'8', 0x12cb00de, 0x35ee12ee},
{'l', 0x00000000, 0x4298149e},
{'l', 0xc148ce2c, 0x00000000},
{'l', 0x00000000, 0xc2989e11},
{'@', 0x000000e6, 0x000086f7},/* æ x-advance: 134.964844 */
{'m', 0x42e69aa1, 0xc2312e63},
{'8', 0xc0ead800, 0xe8c6e8ea},
{'8', 0x17be00d7, 0x41e417e8},
{'6', 0x000000af, 0xffafff3e},
{'8', 0xdc30e813, 0xf43ff41c},
{'8', 0x2760003c, 0x6a232623},
{'4', 0x00180000, 0x0000ff1d},
{'8', 0x4e1e3303, 0x1a4c1a1b},
{'8', 0xfa36001b, 0xeb35f91a},
{'l', 0x00000000, 0x413ad87b},
{'8', 0x11ca0be6, 0x05c805e5},
{'8', 0xf0b200d4, 0xd0cbf0df},
{'8', 0x30d020ed, 0x10bd10e4},
{'8', 0xe8b200ce, 0xbae4e7e4},
{'8', 0xb421ce00, 0xe765e722},
{'4', 0x00000045, 0xfffc0000},
{'8', 0xcceade00, 0xeec2eeea},
{'8', 0x06ce00e7, 0x12d206e8},
{'l', 0x00000000, 0xc1368ce4},
{'8', 0xf134f61b, 0xfb31fb19},
{'8', 0x0c420026, 0x242b0c1c},
{'m', 0xc19d50be, 0x41d6c3e0},
{'8', 0x0dae00c5, 0x2ee90de9},
{'8', 0x29111a00, 0x0f2f0f11},
{'8', 0xe4410029, 0xb318e318},
{'l', 0x00000000, 0xc0301b70},
{'l', 0xc1448294, 0x00000000},
{'@', 0x000000f8, 0x00005418},/* ø x-advance: 84.093750 */
{'m', 0x4272f3f9, 0xc2570897},
{'l', 0xc202bcfe, 0x421eed1a},
{'8', 0x10180b0b, 0x051f050d},
{'8', 0xe13e0027, 0xac17e117},
{'8', 0xdcfeeb00, 0xe4f8f1fe},
{'m', 0xc0987bb8, 0xc0e7f240},
{'8', 0xf0e7f5f5, 0xfbe2fbf3},
{'8', 0x1fc100d8, 0x58ea1fea},
{'8', 0x22021300, 0x1b080e02},
{'6', 0xff620083, 0x00c7ff5c},
{'8', 0xd2ebecf2, 0xc6f9e6f9},
{'q', 0x00000000, 0xc194301c},
{0, 0x41120a4e, 0xc1e7f240},
{'8', 0xd765d724, 0x062e0018},
{'9', 0x00060015, 0x00140027},
{'4', 0xffd30025, 0x00150019},
{'l', 0xc11cc748, 0x414036f8},
{'8', 0x2f15140e, 0x3a071a07},
{'q', 0x00000000, 0x4193a6a8},
{0, 0xc1131d38, 0x41e7f240},
{'8', 0x299b29dc, 0xfad100e7},
{'9', 0xfffaffeb, 0xffecffda},
{'l', 0xc1154302, 0x41346716},
{'l', 0xc0ce2cab, 0xc0a7844b},
{'l', 0x41200000, 0xc1436fae},
{'@', 0x000000e5, 0x0000543a},/* å x-advance: 84.226562 */
{'m', 0x423c74d5, 0xc2172414},
{'8', 0x0dae00c5, 0x2ee90de9},
{'8', 0x29111a00, 0x0f2f0f11},
{'8', 0xe4410029, 0xb318e318},
{'4', 0xfff50000, 0x0000ffcf},
{'m', 0x41c50c06, 0xc0a338b8},
{'4', 0x00ab0000, 0x0000ffcf},
{'l', 0x00000000, 0xc1368ce3},
{'8', 0x28d61bf0, 0x0cc30ce7},
{'8', 0xe7b700d2, 0xbbe5e6e5},
{'8', 0xb421ce00, 0xe765e722},
{'4', 0x00000045, 0xfffc0000},
{'8', 0xcceade00, 0xeec2eeea},
{'8', 0x06ce00e7, 0x12d206e8},
{'l', 0x00000000, 0xc1368ce4},
{'8', 0xf134f61b, 0xfb31fb19},
{'8', 0x21610041, 0x66202120},
{'m', 0xc1ad6c3e, 0xc26d9579},
{'8', 0xe4f5f000, 0xf5e4f5f5},
{'8', 0x0be300ef, 0x1cf50bf5},
{'8', 0x1d0b1100, 0x0b1d0b0b},
{'8', 0xf51c0011, 0xe40bf50b},
{'m', 0x410301b8, 0x00000000},
{'8', 0x34eb1e00, 0x15cc15eb},
{'8', 0xebcc00e2, 0xccebebeb},
{'8', 0xcc15e200, 0xeb34eb15},
{'8', 0x1534001e, 0x34151515},
{'@', 0x000000f6, 0x00005418},/* ö x-advance: 84.093750 */
{'m', 0x42285278, 0xc2850527},
{'8', 0x1fc200d9, 0x54e91ee9},
{'8', 0x55163500, 0x1e3f1e17},
{'8', 0xe13e0027, 0xac17e117},
{'8', 0xace9cb00, 0xe1c2e1e9},
{'m', 0x00000000, 0xc1278450},
{'q', 0x4180dbec, 0x00000000},
{0, 0x41ca6a84, 0x41278450},
{'q', 0x41131d38, 0x41278448},
{0, 0x41131d38, 0x41e7f240},
{'q', 0x00000000, 0x4193a6a8},
{0, 0xc1131d38, 0x41e7f240},
{'8', 0x299b29dc, 0xd79b00c0},
{'q', 0xc1120a4e, 0xc1289731},
{0, 0xc1120a4e, 0xc1e7f240},
{'q', 0xb5000000, 0xc194301c},
{0, 0x41120a4e, 0xc1e7f240},
{'9', 0xffd70024, 0xffd70065},
{'m', 0x40c9e110, 0xc1d9731c},
{'0', 0x36000036, 0xca0000ca},
{'m', 0xc1d1eed1, 0x00000000},
{'0', 0x36000036, 0xca0000ca},
{'@', 0x000000a3, 0x00005773},/* £ x-advance: 87.449219 */
{'m', 0x4293eb62, 0xc2c3f920},
{'l', 0x00000000, 0x41436fa8},
{'8', 0xf0daf5ec, 0xfbdefbee},
{'8', 0x14c900d9, 0x4df114f1},
{'0', 0x00683900, 0x00982600},
{'l', 0x00000000, 0x41f9aa16},
{'l', 0x421587ba, 0x35800000},
{'l', 0x00000000, 0x41368ce3},
{'l', 0xc28549e1, 0x00000000},
{'l', 0x36400000, 0xc1368ce3},
{'l', 0x417d6c3d, 0x00000000},
{'l', 0x00000000, 0xc1f9aa16},
{'0', 0xda0000cb, 0xc1000035},
{'8', 0x9a1cba00, 0xe05be01c},
{'8', 0x04240010, 0x0b290414},
{'@', 0x000000c6, 0x000085e4},/* Æ x-advance: 133.890625 */
{'m', 0x42f7a6a8, 0xc2c86716},
{'l', 0x00000000, 0x41368ce0},
{'l', 0xc246ed1a, 0x00000000},
{'l', 0x00000000, 0x41ed50c2},
{'l', 0x423edf5c, 0x00000000},
{'l', 0x00000000, 0x41368ce0},
{'l', 0xc23edf5c, 0x00000000},
{'l', 0x00000000, 0x42113c22},
{'l', 0x424c06e0, 0x35800000},
{'l', 0x00000000, 0x41368ce3},
{'l', 0xc2814302, 0x00000000},
{'l', 0x36800000, 0xc1cda338},
{'l', 0xc20dbeb6, 0x00000000},
{'l', 0xc12bcfe6, 0x41cda338},
{'4', 0x0000ffc9, 0xfe7000a7},
{'6', 0x00000145, 0x002afee0},
{'l', 0xc1b12e64, 0x42527844},
{'l', 0x41f67166, 0x00000000},
{'l', 0x00000000, 0xc2527844},
{'l', 0xc10a8604, 0x00000000},
{'@', 0x000000d6, 0x00006c30},/* Ö x-advance: 108.187500 */
{'m', 0x4258a4f0, 0xc2b6036f},
{'q', 0xc16c3dd8, 0x00000000},
{0, 0xc1bbeb61, 0x41301b78},
{'q', 0xc10a8604, 0x41301b80},
{0, 0xc10a8604, 0x41f00000},
{'q', 0x00000000, 0x419768cf},
{0, 0x410a8604, 0x41ef768d},
{'8', 0x2c5d2c22, 0xd45d003b},
{'q', 0x410a8600, 0xc1301b7c},
{0, 0x410a8600, 0xc1ef768d},
{'q', 0x00000000, 0xc197f240},
{0, 0xc10a8600, 0xc1f00000},
{'9', 0xffd4ffde, 0xffd4ffa3},
{'m', 0x00000000, 0xc1301b80},
{'q', 0x41a89730, 0x00000000},
{0, 0x4206c3de, 0x416293c0},
{'q', 0x4149e110, 0x416180e0},
{0, 0x4149e110, 0x421768ce},
{'q', 0x00000000, 0x41bd87bc},
{0, 0xc149e110, 0x421768ce},
{'q', 0xc149e118, 0x416180dd},
{0, 0xc206c3de, 0x416180dd},
{'q', 0xc1a920a4, 0xb4c00000},
{0, 0xc2074d50, 0xc16180dc},
{'q', 0xc149e114, 0xc16180db},
{0, 0xc149e114, 0xc21768ce},
{'q', 0x00000000, 0xc1be112c},
{0, 0x4149e112, 0xc21768ce},
{'9', 0xffc80032, 0xffc80087},
{'m', 0x40c9e118, 0xc1bbeb60},
{'0', 0x36000036, 0xca0000ca},
{'m', 0xc1d1eed2, 0x00000000},
{'0', 0x36000036, 0xca0000ca},
{'@', 0x000000d8, 0x00006c30},/* Ø x-advance: 108.187500 */
{'m', 0x42a1e113, 0xc2954301},
{'l', 0xc2407bb5, 0x42631d34},
{'8', 0x1a261110, 0x082f0815},
{'q', 0x416c3dd8, 0x00000000},
{0, 0x41bad87c, 0xc1301b7d},
{'q', 0x410a8600, 0xc1301b7c},
{0, 0x410a8600, 0xc1ef768d},
{'8', 0xcafbe200, 0xd5f1e8fb},
{'m', 0xc0b01b80, 0xc0f2af40},
{'8', 0xe6daeff0, 0xf7d2f7eb},
{'q', 0xc16c3dd8, 0x00000000},
{0, 0xc1bbeb61, 0x41301b78},
{'q', 0xc10a8604, 0x41301b80},
{0, 0xc10a8604, 0x41f00000},
{'8', 0x37051e00, 0x2b0f1905},
{'6', 0xff1d00c0, 0x010eff1c},
{'8', 0xc2e1e5ec, 0xb2f6ddf6},
{'q', 0x00000000, 0xc1be112c},
{0, 0x4149e112, 0xc21768ce},
{'q', 0x414af3fa, 0xc16293c0},
{0, 0x42074d50, 0xc16293c0},
{'8', 0x0a400022, 0x1e350a1d},
{'4', 0xffcd002b, 0x0017001b},
{'l', 0xc1368ce0, 0x41549e10},
{'8', 0x3f1f1b14, 0x4e0a230a},
{'q', 0x00000000, 0x41bd87bc},
{0, 0xc149e110, 0x421768ce},
{'q', 0xc149e118, 0x416180dd},
{0, 0xc206c3de, 0x416180dd},
{'8', 0xf7c000de, 0xe2cbf6e3},
{'l', 0xc12df5b2, 0x414d19c5},
{'l', 0xc0dd3542, 0xc0bcfe48},
{'l', 0x41368ce3, 0xc157d6c4},
{'@', 0x000000c5, 0x00005e06},/* Å x-advance: 94.023438 */
{'m', 0x4264b98e, 0xc2da414a},
{'8', 0xe4f4f000, 0xf4e4f4f5},
{'8', 0x0be400ef, 0x1cf50bf5},
{'8', 0x1c0b1000, 0x0b1c0b0b},
{'8', 0xf51c0010, 0xe40cf50c},
{'m', 0xc12338b0, 0x41b2414c},
{'4', 0x00c7ffb7, 0x00000092},
{'6', 0xff39ffb7, 0xffe5ffd8},
{'8', 0xe6e8f5f0, 0xddf8f1f8},
{'8', 0xcc15e200, 0xeb34eb15},
{'8', 0x1534001e, 0x34151515},
{'8', 0x22f81200, 0x1ae80ff8},
{'l', 0x420ed19c, 0x42bb844b},
{'l', 0xc16180d8, 0x00000000},
{'l', 0xc1120a50, 0xc1cda338},
{'l', 0xc234abd0, 0x00000000},
{'l', 0xc1120a4e, 0x41cda338},
{'l', 0xc164b98e, 0x00000000},
{'l', 0x420f1656, 0xc2bb844b},
{'@', 0x000020ac, 0x00005773},/* € x-advance: 87.449219 */
{'m', 0x429ca4f0, 0xc2b8f769},
{'l', 0x00000000, 0x4164b990},
{'8', 0xd8d1e4e8, 0xf4cff4ea},
{'8', 0x1abb00d6, 0x4ddd1ae5},
{'4', 0x0000009a, 0x0021fff2},
{'l', 0xc2106df6, 0x00000000},
{'8', 0x0c000600, 0x0f000600},
{'8', 0x0e000800, 0x0c000600},
{'4', 0x00000077, 0x0021fff1},
{'l', 0xc1c8ce2d, 0x00000000},
{'8', 0x4d233208, 0x1b451b1b},
{'8', 0xf431001b, 0xd82ff416},
{'l', 0x00000000, 0x416293c2},
{'8', 0x1cd013e9, 0x09ce09e8},
{'8', 0xda9700c1, 0x94ccdad7},
{'4', 0x0000ffc8, 0xffdf000e},
{'l', 0x41154302, 0x00000000},
{'8', 0xf400fa00, 0xf100fa00},
{'8', 0xf100f700, 0xf400fa00},
{'4', 0x0000ffcc, 0xffdf000e},
{'l', 0x4127844c, 0x00000000},
{'8', 0x9534bc0a, 0xda68da29},
{'8', 0x0933001a, 0x1c300918},
{'@', 0x000000a7, 0x000044b9},/* § x-advance: 68.722656 */
{'m', 0x41cb7d6c, 0xc27b4671},
{'8', 0x18e70cf0, 0x18f80cf8},
{'8', 0x26121400, 0x35551112},
{'8', 0xe819f410, 0xe808f408},
{'8', 0xdaedec00, 0xcbabeeed},
{'m', 0x41f19c58, 0xc20d3543},
{'l', 0x00000000, 0x41301b80},
{'8', 0xf1d7f6ea, 0xfbdefbed},
{'8', 0x0ad800e6, 0x1df20af2},
{'8', 0x37371800, 0x060a0406},
{'8', 0x344a1f38, 0x2f111411},
{'8', 0x2af41800, 0x21db12f4},
{'8', 0x1c180d10, 0x1f070e07},
{'8', 0x3ce52600, 0x16b716e5},
{'8', 0xfdd800ed, 0xf5d4fcec},
{'l', 0x00000000, 0xc1301b7d},
{'8', 0x0f2b0a17, 0x05230513},
{'8', 0xf52a001b, 0xe10ff50f},
{'9', 0xffe50000, 0xffc4ffc5},
{'l', 0xbfd6c3e0, 0xbf708960},
{'8', 0xccb6e0c7, 0xd0efecef},
{'8', 0xd50ce800, 0xe025ed0c},
{'8', 0xe6e9f5f1, 0xdff9f1f9},
{'8', 0xc81ade00, 0xeb47eb1a},
{'8', 0x04280013, 0x0b290314},
{'@', 0x000003c0, 0x000052c0},/* π x-advance: 82.750000 */
{'m', 0x409eed1a, 0xc29655e8},
{'l', 0x429006df, 0x00000000},
{'4', 0x00310000, 0x0000ffdb},
{'l', 0x00000000, 0x4238b2af},
{'8', 0x1b061300, 0x08150806},
{'8', 0x00090004, 0xff070005},
{'l', 0x00000000, 0x410ed19c},
{'8', 0x05ed03f7, 0x01ed01f7},
{'8', 0xefd400e0, 0xc0f4eff4},
{'l', 0x00000000, 0xc2335430},
{'l', 0xc1ddbeb5, 0x00000000},
{'l', 0x00000000, 0x427b4671},
{'l', 0xc149e113, 0x00000000},
{'l', 0x00000000, 0xc27b4671},
{'l', 0xc1198e9a, 0x00000000},
{'l', 0x00000000, 0xc145957c},
{'@', 0x000000b0, 0x000044b9},/* ° x-advance: 68.722656 */
{'m', 0x4209731d, 0xc2bab61f},
{'8', 0x0fdc00eb, 0x24f20ef2},
{'8', 0x230e1500, 0x0e240e0e},
{'8', 0xf2240015, 0xdd0ef20e},
{'8', 0xdcf1eb00, 0xf1ddf1f2},
{'m', 0x00000000, 0xc10a8600},
{'8', 0x06210011, 0x121b060f},
{'8', 0x1b120c0c, 0x21060f06},
{'8', 0x3ce82300, 0x18c418e8},
{'8', 0xe8c400dc, 0xc4e8e8e8},
{'8', 0xc418dd00, 0xe83ce818},
{'@', 0x000000fc, 0x0000571d},/* ü x-advance: 87.113281 */
{'m', 0x413ad87b, 0xc1ed50c0},
{'4', 0xff4a0000, 0x00000031},
{'l', 0x00000000, 0x4234225d},
{'8', 0x40102a00, 0x15311510},
{'8', 0xe73f0028, 0xbb17e717},
{'l', 0x00000000, 0xc22a7845},
{'l', 0x41459574, 0x00000000},
{'4', 0x012c0000, 0x0000ffcf},
{'l', 0x00000000, 0xc138b2af},
{'8', 0x28d71bef, 0x0dc90de9},
{'8', 0xe0b200cd, 0xa2e6e0e6},
{'m', 0x41f89732, 0xc23d4302},
{'6', 0x00000000, 0xff940018},
{'0', 0x36000036, 0xca0000ca},
{'m', 0xc1d1eed2, 0x00000000},
{'0', 0x36000036, 0xca0000ca},
{'@', 0x000000dc, 0x0000649a},/* Ü x-advance: 100.601562 */
{'m', 0x413f2414, 0xc2c86716},
{'4', 0x00000036, 0x00f30000},
{'8', 0x5c174000, 0x1c4b1c17},
{'8', 0xe44b0034, 0xa417e417},
{'4', 0xff0d0000, 0x00000036},
{'l', 0x00000000, 0x427a338b},
{'q', 0x00000000, 0x419cc74d},
{0, 0xc11bb468, 0x41ecc74c},
{'q', 0xc11aa180, 0x41200001},
{0, 0xc1e4b98e, 0x41200001},
{'q', 0xc197f240, 0xb4c00000},
{0, 0xc1e5cc74, 0xc1200000},
{'9', 0xffd9ffda, 0xff8affda},
{'6', 0xff060000, 0xff9b00b2},
{'0', 0x36000036, 0xca0000ca},
{'m', 0xc1d1eed2, 0x00000000},
{'0', 0x36000036, 0xca0000ca},
{'@', 0x00002026, 0x00008973},/* … x-advance: 137.449219 */
{'m', 0x42767165, 0xc1886037},
{'0', 0x44000038, 0xbc0000c8},
{'m', 0x4236d19d, 0x00000000},
{'0', 0x44000039, 0xbc0000c7},
{'m', 0xc2b6f3f9, 0x00000000},
{'0', 0x44000039, 0xbc0000c7},
{'@', 0x0000201d, 0x00004735},/* ” x-advance: 71.207031 */
{'m', 0x4189731d, 0xc2c86716},
{'0', 0x2e000038, 0x00de55d4},
{'4', 0xffab0016, 0xffd20000},
{'m', 0x41dc225d, 0x00000000},
{'0', 0x2e000038, 0x00de55d4},
{'l', 0x40b01b80, 0xc1abcfe4},
{'l', 0x00000000, 0xc138b2b0},
{'@', 0x0000201c, 0x00004735},/* “ x-advance: 71.207031 */
{'m', 0x41ceb61f, 0xc2865cc7},
{'0', 0xd20000c8, 0x0022ab2c},
{'4', 0x0055ffea, 0x002e0000},
{'m', 0x41dc225d, 0x00000000},
{'0', 0xd20000c8, 0x0022ab2c},
{'l', 0xc0b01b78, 0x41ab4670},
{'l', 0x00000000, 0x4139c598},
{'@', 0x000000ab, 0x00005418},/* « x-advance: 84.093750 */
{'m', 0x428e6a86, 0xc28e25cc},
{'0', 0x47b03300, 0x33004750},
{'4', 0xff90ff83, 0xffea0000},
{'6', 0xff90007d, 0x0000ff8c},
{'0', 0x47b03300, 0x33004750},
{'l', 0xc1fbcfe4, 0xc1e06df5},
{'l', 0x00000000, 0xc0b01b80},
{'l', 0x41fbcfe4, 0xc1e06df4},
{'@', 0x000000bb, 0x00005418},/* » x-advance: 84.093750 */
{'m', 0x414f3f92, 0xc28e25cc},
{'l', 0x41fbcfe3, 0x41e06df4},
{'l', 0x00000000, 0x40b01b80},
{'l', 0xc1fbcfe3, 0x41e06df5},
{'0', 0xb950cd00, 0xcd00b9b0},
{'m', 0x41e90527, 0x00000000},
{'l', 0x41fbcfe4, 0x41e06df4},
{'l', 0x00000000, 0x40b01b80},
{'l', 0xc1fbcfe4, 0x41e06df5},
{'0', 0xb950cd00, 0xcd00b9b0},
{'@', 0x000000a9, 0x00008973},/* © x-advance: 137.449219 */
{'m', 0x4289731d, 0xc2c75430},
{'8', 0x0e4b0028, 0x2c400e23},
{'8', 0x402b1d1d, 0x4c0e230e},
{'8', 0x4bf22800, 0x40d522f2},
{'8', 0x2cc01de3, 0x0eb50edd},
{'8', 0xf2b400d8, 0xd4c0f2dd},
{'8', 0xc0d5e3e3, 0xb5f2ddf2},
{'8', 0xb40ed700, 0xc02bdd0e},
{'8', 0xd440e31d, 0xf24cf223},
{'m', 0x00000000, 0x40dd3540},
{'8', 0x0cbf00dd, 0x25c90ce2},
{'8', 0x38da19e7, 0x41f41ef4},
{'8', 0x410c2200, 0x37261e0c},
{'8', 0x26371919, 0x0c410c1e},
{'8', 0xf4410023, 0xda37f41e},
{'8', 0xc925e818, 0xbf0ce20c},
{'8', 0xbef4dd00, 0xc9dbe2f4},
{'8', 0xdbc9e7e7, 0xf4bff4e2},
{'m', 0x41a08974, 0x41838b2c},
{'l', 0x00000000, 0x410a8600},
{'8', 0xf3ddf8ef, 0xfcddfcef},
{'8', 0x17c200d8, 0x41ea17ea},
{'8', 0x42162a00, 0x17401717},
{'8', 0xfc210011, 0xf322fc10},
{'l', 0x00000000, 0x41086038},
{'8', 0x0bdc07ef, 0x03db03ee},
{'8', 0xe0a500c7, 0xa8dfe0df},
{'8', 0xa821c800, 0xe05be021},
{'8', 0x03250013, 0x0b230312},
{'@', 0x000000ae, 0x00008973},/* ® x-advance: 137.449219 */
{'m', 0x4289731d, 0xc2b980dc},
{'8', 0x0cbf00dd, 0x25c90ce2},
{'8', 0x38da19e7, 0x41f41ef4},
{'8', 0x410c2200, 0x37261e0c},
{'8', 0x26371919, 0x0c410c1e},
{'8', 0xf4410023, 0xda37f41e},
{'8', 0xc925e818, 0xbf0ce20c},
{'8', 0xbef4dd00, 0xc9dbe2f4},
{'8', 0xdbc9e7e7, 0xf4bff4e2},
{'m', 0x00000000, 0xc0dd3540},
{'8', 0x0e4b0028, 0x2c400e23},
{'8', 0x402b1d1d, 0x4c0e230e},
{'8', 0x4bf22800, 0x40d522f2},
{'8', 0x2cc01de3, 0x0eb50edd},
{'8', 0xf2b400d8, 0xd4c0f2dd},
{'8', 0xc0d5e3e3, 0xb5f2ddf2},
{'8', 0xb40ed700, 0xc02bdd0e},
{'8', 0xd440e31d, 0xf24cf223},
{'m', 0xbfe7f240, 0x41de4828},
{'4', 0x0000ffdf, 0x004a0000},
{'l', 0x4104149c, 0x00000000},
{'8', 0xf829001d, 0xe40bf80b},
{'8', 0xe4f5ec00, 0xf8d7f8f5},
{'m', 0x3ef08900, 0xc0dd3540},
{'8', 0x1046002f, 0x30170f17},
{'8', 0x26f21700, 0x13d90ff3},
{'8', 0x0c0f0206, 0x1d150a09},
{'4', 0x003b0024, 0x0000ffd2},
{'l', 0xc10a8608, 0xc1606df4},
{'8', 0xe0e7e7f1, 0xfae8faf7},
{'l', 0xc08dbeb0, 0x00000000},
{'l', 0x00000000, 0x41bf2414},
{'l', 0xc1267168, 0x00000000},
{'l', 0x00000000, 0xc2606df6},
{'l', 0x41990526, 0x00000000},
{'@', 0x00002122, 0x00008973},/* ™ x-advance: 137.449219 */
{'m', 0x429361ef, 0xc2c86716},
{'l', 0x413ad878, 0x4189731c},
{'l', 0x41301b80, 0xc189731c},
{'l', 0x41368ce0, 0x00000000},
{'l', 0x00000000, 0x421b2af4},
{'l', 0xc0f2af40, 0x00000000},
{'l', 0x00000000, 0xc201eed2},
{'l', 0xc1516560, 0x41a2af40},
{'l', 0xc06c3de0, 0x00000000},
{'l', 0xc159fc90, 0xc1a2af40},
{'l', 0x00000000, 0x4201eed2},
{'4', 0x0000ffe2, 0xff650000},
{'6', 0x0000002e, 0x0000ffb4},
{'l', 0x00000000, 0x40c9e110},
{'l', 0xc159fc90, 0x00000000},
{'l', 0x00000000, 0x4201eed2},
{'l', 0xc0f4d510, 0x00000000},
{'l', 0x00000000, 0xc201eed2},
{'l', 0xc157d6c4, 0x00000000},
{'l', 0x00000000, 0xc0c9e110},
{'l', 0x420b0f77, 0x00000000},
{'@', 0x000023ce, 0x0000732a},/* ⏎ x-advance: 115.164062 */
{'m', 0x42172414, 0xc10fe482},
{'l', 0xc2086036, 0xc2086036},
{'l', 0x42086036, 0xc2086038},
{'l', 0x00000000, 0x419293c2},
{'l', 0x421836fc, 0x00000000},
{'l', 0x00000000, 0xc2255e7f},
{'l', 0x41fc5954, 0x00000000},
{'4', 0x01230000, 0x0000feea},
{'6', 0x00490000, 0xff54ffe6},
{'0', 0x47b9dd00, 0xdd004747},
{'l', 0x428b0f77, 0x00000000},
{'l', 0x3d897000, 0xc26dda33},
{'l', 0xc190f768, 0x00000000},
{'l', 0xbd897000, 0x42255e7e},
{'l', 0xc24da33a, 0x00000000},
{'@', 0x0000232b, 0x0000c25c},/* ⌫ x-advance: 194.359375 */
{'m', 0x4337e482, 0x00000000},
{'l', 0xc3039c59, 0x00000000},
{'l', 0xc250dbea, 0xc250dbeb},
{'4', 0xff3000d0, 0x0000020e},
{'6', 0x01a10000, 0xfe87ffd9},
{'l', 0xc11768d0, 0x00000000},
{'l', 0xc22920a6, 0x422920a5},
{'4', 0x00a900a9, 0x00000025},
{'6', 0xfeae0000, 0x0000fe88},
{'4', 0x008c008c, 0xff74008c},
{'6', 0x0000fee7, 0x01520119},
{'4', 0xff74ff74, 0x008cff74},
{'6', 0x00000119, 0xfeaefeaf},
{'l', 0xc1187bb0, 0x00000000},
{'l', 0xc22920a5, 0x4229aa18},
{'l', 0x422920a5, 0x42289732},
{'l', 0x41187bb0, 0xb6000000},
{'l', 0x422920a6, 0xc22920a4},
{'l', 0xc22920a6, 0xc22920a6},
{'@', 0x000000b7, 0x00002bb0},/* · x-advance: 43.687500 */
{'m', 0x416b2af4, 0xc260f768},
{'0', 0x44000038, 0xbc0000c8},
{'@', 0x00002190, 0x0000732a},/* ← x-advance: 115.164062 */
{'m', 0x40d6c3dd, 0xc22044b9},
{'0', 0x9769e800, 0x3ec22020},
{'l', 0x42a39fc9, 0x00000000},
{'l', 0x00000000, 0x41368ce4},
{'l', 0xc2a39fc9, 0x00000000},
{'l', 0x417a3388, 0x417a338a},
{'l', 0xc100dbec, 0x4100dbec},
{'l', 0xc1d301b7, 0xc1d301b7},
{'@', 0x00002191, 0x0000732a},/* ↑ x-advance: 115.164062 */
{'m', 0x425a414a, 0xc2c9579f},
{'0', 0x69690018, 0xc2c220e0},
{'l', 0x00000000, 0x42a3c226},
{'l', 0xc1368ce4, 0x00000000},
{'l', 0x00000000, 0xc2a3c226},
{'l', 0xc17b4670, 0x417b4678},
{'l', 0xc100dbec, 0xc100dbf0},
{'l', 0x41d38b2c, 0xc1d38b28},
{'@', 0x00002193, 0x0000732a},/* ↓ x-advance: 115.164062 */
{'m', 0x42726a86, 0x3ef08973},
{'0', 0x979700e8, 0x3e3ee020},
{'l', 0x00000000, 0xc2a3c226},
{'l', 0x41368ce4, 0x00000000},
{'l', 0x00000000, 0x42a3c226},
{'l', 0x417920a8, 0xc17b4674},
{'l', 0x4100dbe8, 0x4100dbea},
{'l', 0xc1d27844, 0x41d38b2b},
{'@', 0x00002192, 0x0000732a},/* → x-advance: 115.164062 */
{'m', 0x42d8e9aa, 0xc2386df5},
{'0', 0x69971800, 0xc23ee0e0},
{'l', 0xc2a39fc9, 0x00000000},
{'l', 0x35000000, 0xc1368ce4},
{'l', 0x42a39fc9, 0x00000000},
{'l', 0xc17a3390, 0xc17a3388},
{'l', 0x4100dbf0, 0xc100dbf0},
{'l', 0x41d301b8, 0x41d301ba},
{'@', 0x00002600, 0x00007b38},/* ☀ x-advance: 123.218750 */
{'m', 0x426d0c07, 0xc2c86716},
{'0', 0x01010014, 0x01ff5d00},
{'0', 0xffff00ec, 0xff01a300},
{'m', 0x42169aa1, 0x412ce2c8},
{'0', 0x0000100f, 0xf0f044be},
{'6', 0xffbc0043, 0x0005feee},
{'4', 0x00440043, 0x0011fff0},
{'l', 0xbe4e2c00, 0x00000000},
{'9', 0xffcbffcb, 0xffbcffbf},
{'4', 0xffff0000, 0xfff0000f},
{'m', 0x42070897, 0x41816560},
{'9', 0x00000037, 0x003c004f},
{'l', 0x3f5f5b00, 0x40ce2ca8},
{'8', 0x4dcd3200, 0x06e106ed},
{'8', 0xd4b700d2, 0xd7f7f0f7},
{'8', 0xb431d000, 0xf920f911},
{'m', 0xc248ce2c, 0x4193a6a6},
{'0', 0x0101005b, 0x01ff1500},
{'0', 0xffff00a5, 0xff01eb00},
{'m', 0x42985957, 0x00000000},
{'0', 0x0101005c, 0x01ff1500},
{'0', 0xffff00a4, 0xff01eb00},
{'m', 0xc0a55e80, 0x41998e9c},
{'l', 0x3e4e2e00, 0x00000000},
{'9', 0x00220023, 0x00430042},
{'0', 0x10f00000, 0xff00bdbe},
{'6', 0xfff1000f, 0x0004ff53},
{'0', 0x100f0000, 0x44be0000},
{'4', 0xfff0fff0, 0xffff0000},
{'6', 0xffbd0042, 0x0023004e},
{'0', 0x01010014, 0x01ff5d00},
{'0', 0xffff00ec, 0xff01a300},
{'@', 0x00002601, 0x00008973},/* ☁ x-advance: 137.449219 */
{'m', 0x42aa55e8, 0xc245da33},
{'l', 0x3fbcfe40, 0x00000000},
{'9', 0x0000003a, 0x003e0059},
{'l', 0x3fb46700, 0x40b8b2b0},
{'8', 0xf718f70a, 0x24240724},
{'8', 0x1bf70d00, 0x191b061b},
{'l', 0x00000000, 0x3fdf5b10},
{'9', 0x001bfffc, 0x001bffe6},
{'4', 0x0000fe2d, 0xfffe0000},
{'8', 0xd233000f, 0xf61af60c},
{'4', 0x00000008, 0xfff3fffd},
{'9', 0xffe40000, 0xffd6002a},
{'4', 0xffff000a, 0x0001000b},
{'l', 0xbeabd000, 0xbf4e2ca0},
{'9', 0xffd90000, 0xffc10036},
{'l', 0x408fe488, 0xbf097340},
{'8', 0x0b19000c, 0xe644e620},
{'@', 0x00002602, 0x00007b38},/* ☂ x-advance: 123.218750 */
{'m', 0x42737d6c, 0xc2c86716},
{'0', 0x0101000f, 0x00002100},
{'q', 0x41ec3ddc, 0x00000000},
{0, 0x424149e2, 0x42027844},
{'9', 0x0017000b, 0x001a000b},
{'4', 0x00020000, 0x00000000},
{'8', 0xf0f5fcfb, 0xfae8faf7},
{'l', 0xc03cfe40, 0x00000000},
{'9', 0x0000ffd8, 0x001bffba},
{'l', 0x00000000, 0x405b0f70},
{'9', 0x00040000, 0x0004fffe},
{'l', 0xc00dbec0, 0xc08dbeb8},
{'9', 0xfff0ffd8, 0xfff0ffb3},
{'l', 0x00000000, 0x4237e482},
{'9', 0x001b0000, 0x0021ffe4},
{'l', 0xc000dbe0, 0x3e097300},
{'9', 0x0000ffe8, 0xffe7ffde},
{'0', 0xfa00f900, 0x000bff01},
{'4', 0x00010001, 0x00030000},
{'9', 0x001b0002, 0x001b0013},
{'l', 0x3f2bcfc0, 0x00000000},
{'9', 0x0000000e, 0xfff10014},
{'4', 0xfff50001, 0xff4b0000},
{'8', 0x10b100c8, 0x0ff80ffc},
{'0', 0xfd00ffff, 0x00fff301},
{'9', 0xffefffef, 0xffe8ffba},
{'l', 0xc08fe484, 0x00000000},
{'9', 0x0000ffe6, 0x0010ffdd},
{'4', 0x0004fffb, 0x00000000},
{'l', 0x00000000, 0xbe097400},
{'q', 0x407920a6, 0xc11aa180},
{0, 0x41863a6b, 0xc1c25cc8},
{'9', 0xffc50040, 0xffc50093},
{'l', 0x00000000, 0xc1063a68},
{'l', 0x3ece2c80, 0xbece2d00},
{'@', 0x00002622, 0x00007b38},/* ☢ x-advance: 123.218750 */
{'m', 0x4272f3f9, 0xc2c8ce2c},
{'q', 0x41cda336, 0x00000000},
{0, 0x422db0f7, 0x41c731d0},
{'q', 0x40f4d510, 0x413beb64},
{0, 0x40f4d510, 0x41d0dbec},
{'q', 0x00000000, 0x41b46717},
{0, 0xc1aa338c, 0x421e1eed},
{'9', 0x0027ffcc, 0x0027ff94},
{'l', 0xc0097320, 0x00000000},
{'q', 0xc1cc06de, 0x00000000},
{0, 0xc22c5958, 0xc1cfc905},
{'9', 0xffd2ffe6, 0xffa2ffe6},
{'l', 0x00000000, 0xbff08980},
{'q', 0x00000000, 0xc1b60370},
{0, 0x41b579fc, 0xc22044ba},
{'9', 0xffdd0031, 0xffdd006a},
{'m', 0x41b12e62, 0x4138b2b0},
{'q', 0xc1324148, 0xc0c7bb50},
{0, 0xc1b2cabc, 0xc0c7bb50},
{'q', 0xc1a112e6, 0x00000000},
{0, 0xc20f9fc8, 0x419e63a8},
{'q', 0xc1074d54, 0x413e112c},
{0, 0xc1074d54, 0x41c731d2},
{'q', 0x00000000, 0x41a9aa18},
{0, 0x4195cc74, 0x421180dc},
{'q', 0x413f2418, 0x4114301a},
{0, 0x41d74d52, 0x4114301a},
{'q', 0x41b71654, 0x00000000},
{0, 0x421a5cc6, 0xc1b9c595},
{'9', 0xffd80017, 0xffac0017},
{'l', 0x00000000, 0xbf80dbe0},
{'q', 0xbd897400, 0xc1b93c24},
{0, 0xc1b68ce4, 0xc218c06e},
{'9', 0xffffffff, 0xfffffffe},
{'m', 0xc19e63a6, 0x42a28ce2},
{'l', 0xbff08960, 0x35000000},
{'9', 0x0000ffd3, 0xffe9ffae},
{'l', 0x41606df4, 0xc1c50c07},
{'9', 0x0008000c, 0x0008001b},
{'l', 0x3f097300, 0x00000000},
{'9', 0x0000000d, 0xfff90019},
{'l', 0x4163a6a8, 0x41c48294},
{'9', 0x0017ffdb, 0x0017ffb2},
{'m', 0xc1131d34, 0xc258e9aa},
{'9', 0x0013ffe7, 0x002dffe7},
{'4', 0x00010000, 0x0000ff8e},
{'l', 0x00000000, 0xbf897320},
{'q', 0x00000000, 0xc19aa182},
{0, 0x419a180d, 0xc2081b7d},
{'9', 0xfffd0004, 0xfffa0009},
{'l', 0x416180dc, 0x41c48294},
{'9', 0x0001ffff, 0x0002fffd},
{'m', 0x422f4d50, 0xc11eed18},
{'9', 0x00260019, 0x0056001a},
{'l', 0xc1e4b990, 0x00000000},
{'8', 0xe4f8f100, 0xececf3f7},
{'l', 0x416180e0, 0xc1c36fae},
{'9', 0x00150021, 0x003b003c},
{'m', 0xc2113c22, 0x412ce2cc},
{'8', 0x15250016, 0x16060906},
{'8', 0x21ee1300, 0x08e908f5},
{'l', 0xbef08980, 0x00000000},
{'8', 0xeadc00eb, 0xecfbf7fb},
{'l', 0x00000000, 0xbeabd000},
{'8', 0xde13ed00, 0xf916f90a},
{'@', 0x0000262d, 0x00007b38},/* ☭ x-advance: 123.218750 */
{'m', 0x42863a6a, 0xc2c8abd0},
{'q', 0x417e7f28, 0x00000000},
{0, 0x41ef768c, 0x414af400},
{'8', 0x63282928, 0x5bdf3500},
{'0', 0x23db2734, 0xd3cf0000},
{'8', 0x1d9a1dd4, 0xe9ac00d3},
{'4', 0x00000000, 0x007cffbb},
{'l', 0xbe4e2c80, 0x00000000},
{'q', 0xc15b0f76, 0xc11768ce},
{0, 0xc15f5b0f, 0xc11eed1a},
{'q', 0x3fdf5b10, 0xbfd6c3d8},
{0, 0x41c731d4, 0xc1e87bb3},
{'8', 0xf908f906, 0x1648161e},
{'9', 0x00000033, 0xffe5005b},
{'4', 0xffcbffc6, 0x001effe4},
{'l', 0xbece2c80, 0x00000000},
{'9', 0xffe1ffce, 0xffdeffcc},
{'l', 0x417a338c, 0xc18a8604},
{'9', 0x0003004b, 0x0005004b},
{'l', 0xc1074d58, 0x412abd00},
{'9', 0x002e003d, 0x00320045},
{'l', 0x00000000, 0xbe097300},
{'9', 0xffe80011, 0xffc70011},
{'l', 0x00000000, 0xc01aa180},
{'8', 0xa1bdbc00, 0xeebceedc},
{'l', 0xc01eed20, 0x00000000},
{'8', 0x0ec600e6, 0xda68da2d},
{'@', 0x0000262e, 0x00007b38},/* ☮ x-advance: 123.218750 */
{'m', 0x41368ce3, 0xc24844b9},
{'q', 0x00000000, 0xc1a6fada},
{0, 0x416b2af3, 0xc20e4829},
{'q', 0x416b2af2, 0xc16c3dd8},
{0, 0x420e0370, 0xc16c3dd8},
{'q', 0x41a6fad8, 0x00000000},
{0, 0x420e036e, 0x416c3dd8},
{'q', 0x416b2af8, 0x416b2af0},
{0, 0x416b2af8, 0x420e4829},
{'q', 0x00000000, 0x41a67165},
{0, 0xc16b2af8, 0x420dbeb6},
{'q', 0xc16a1808, 0x416a180c},
{0, 0xc20e036f, 0x416a180c},
{'q', 0xc1a67166, 0x00000000},
{0, 0xc20e0370, 0xc16a180d},
{'9', 0xffc6ffc6, 0xff73ffc6},
{'m', 0x412338b1, 0x00000000},
{'9', 0x003d0000, 0x005d0020},
{'4', 0xff7a0072, 0xff880000},
{'q', 0xc1527844, 0x3e897300},
{0, 0xc1c731d4, 0x414036f8},
{'9', 0x002effd2, 0x0071ffd2},
{'m', 0x4139c598, 0x41e20a4e},
{'9', 0x002f002f, 0x00310062},
{'4', 0xff5b0000, 0x0074ff9d},
{'m', 0x41f9aa16, 0x4146a860},
{'9', 0xfffe0037, 0xffd20064},
{'4', 0xff8bff9c, 0x00a30000},
{'m', 0x41edda34, 0xc185b0f7},
{'q', 0x40f2af40, 0xc0f08974},
{0, 0x40f2af40, 0xc1bfad87},
{'q', 0x00000000, 0xc185b0f6},
{0, 0xc13cfe48, 0xc1e31d36},
{'9', 0xffd2ffd2, 0xffd0ff99},
{'l', 0x00000000, 0x41ef768c},
{'l', 0x41f112e4, 0x4209b7d6},
{'@', 0x0000262f, 0x00007b38},/* ☯ x-advance: 123.218750 */
{'m', 0x42767165, 0xc24c06df},
{'l', 0x00000000, 0x3fdf5b00},
{'8', 0x401c2602, 0x1941191a},
{'8', 0xe5420027, 0xbb1be51b},
{'q', 0x00000000, 0xc1954302},
{0, 0xc15e4828, 0xc201655f},
{'q', 0xc15e4828, 0xc15b0f70},
{0, 0xc203cfe5, 0xc15b0f70},
{'q', 0xc19bb466, 0x00000000},
{0, 0xc202338b, 0x41516558},
{'q', 0xc1505278, 0x41505278},
{0, 0xc165cc74, 0x4207920b},
{'8', 0xba1ed206, 0xe93fe917},
{'8', 0x19400026, 0x401c191a},
{'m', 0x41f19c5a, 0x3f708980},
{'8', 0x12f80b00, 0x07ee07f8},
{'8', 0xf9ed00f5, 0xeef8f9f8},
{'8', 0xed08f500, 0xf813f808},
{'8', 0x0812000a, 0x13080808},
{'m', 0xc23ba6a9, 0x00000000},
{'8', 0xedf8f500, 0xf8eef8f9},
{'8', 0x08ee00f5, 0x13f908f9},
{'8', 0x12070b00, 0x07120707},
{'8', 0xf812000b, 0xee08f808},
{'m', 0x4285d354, 0x00000000},
{'q', 0x37000000, 0x41a67165},
{0, 0xc16b2af0, 0x420dbeb6},
{'q', 0xc16a1808, 0x416a180c},
{0, 0xc20e036f, 0x416a180c},
{'q', 0xc1a67166, 0x00000000},
{0, 0xc20e0370, 0xc16a180d},
{'q', 0xc16b2af1, 0xc16a180d},
{0, 0xc16b2af1, 0xc20dbeb6},
{'q', 0x00000000, 0xc1a6fada},
{0, 0x416b2af3, 0xc20e4829},
{'q', 0x416b2af2, 0xc16c3dd8},
{0, 0x420e0370, 0xc16c3dd8},
{'q', 0x41a6fad8, 0x00000000},
{0, 0x420e036e, 0x416c3dd8},
{'q', 0x416b2af8, 0x416b2af0},
{0, 0x416b2af8, 0x420e4829},
{'@', 0x0000263d, 0x00007b38},/* ☽ x-advance: 123.218750 */
{'m', 0x42700000, 0xc2c8abd0},
{'q', 0x41d4149c, 0x00000000},
{0, 0x42330f76, 0x41ca6a88},
{'q', 0x40e3a6a0, 0x4139c594},
{0, 0x40e3a6a0, 0x41c731d2},
{'q', 0x00000000, 0x41d27845},
{0, 0xc1d49e10, 0x422e3a6a},
{'9', 0x001affd0, 0x001affa1},
{'l', 0xc0527840, 0x00000000},
{'9', 0x0000fff4, 0xfffcffde},
{'l', 0x00000000, 0xbece2cac},
{'q', 0x4194b990, 0xc0a9aa18},
{0, 0x41d7d6c4, 0xc189731d},
{'q', 0x41267168, 0xc158e9ac},
{0, 0x41267168, 0xc1fc5958},
{'q', 0x00000000, 0xc1d6c3de},
{0, 0xc1b35430, 0xc227844b},
{'9', 0xffebffdc, 0xffe7ffc3},
{'l', 0x00000000, 0xbe4e2c00},
{'9', 0xfffe0000, 0xfffa0028},
{'6', 0x00000003, 0x00100007},
{'l', 0x00000000, 0x3e4e2c00},
{'q', 0x41f55e7e, 0x41538b28},
{0, 0x41f55e7e, 0x4238f769},
{'9', 0x006b0000, 0x00aaffa6},
{'4', 0x0006fff5, 0x00010000},
{'l', 0x3ece2c00, 0x00000000},
{'8', 0xea410017, 0x9654d83e},
{'9', 0xffe80007, 0xffcf0007},
{'l', 0x00000000, 0xbf1aa180},
{'q', 0x00000000, 0xc1aa338c},
{0, 0xc1ba4f08, 0xc21b2af4},
{'q', 0xc12f0898, 0xc0db0f70},
{0, 0xc1ac5958, 0xc0db0f70},
{'l', 0xbe4e2d00, 0x00000000},
{'@', 0x00002709, 0x0000732a},/* ✉ x-advance: 115.164062 */
{'m', 0x42881b7d, 0xc26a180d},
{'4', 0xffb00076, 0x0000fec0},
{'l', 0x41ec3dda, 0x41a112e6},
{'8', 0xfc04fe01, 0xf511f907},
{'8', 0xfc14fc09, 0x0414000b},
{'8', 0x0b11050b, 0x04040202},
{'m', 0x402bcfe0, 0x412df5b0},
{'4', 0x004d0073, 0xff510000},
{'l', 0xc1e6df5c, 0x419c3dda},
{'8', 0x09000400, 0x09000500},
{'m', 0xc1bbeb60, 0x40bf2410},
{'4', 0x0050ff8a, 0x00000140},
{'l', 0xc1ed50c0, 0xc1a19c5a},
{'8', 0x04fd02ff, 0x0bef07f9},
{'8', 0x04ec04f7, 0xfcec00f5},
{'8', 0xf5effcf7, 0xfcfdffff},
{'m', 0xc038b2b0, 0xc12df5b0},
{'4', 0xffb3ff8d, 0x00af0000},
{'l', 0x41e655e8, 0xc19b2af4},
{'8', 0xf600fb00, 0xf700fc00},
{'m', 0xc20e0370, 0x42172414},
{'l', 0x36000000, 0xc28d57a0},
{'l', 0x42c2e63a, 0x37000000},
{'l', 0x00000000, 0x428d57a0},
{'l', 0xc2c2e63a, 0xb6000000},
{'@', 0x00002699, 0x00007b38},/* ⚙ x-advance: 123.218750 */
{'m', 0x42767165, 0xc2c7bb46},
{'9', 0x0000000b, 0x00010017},
{'l', 0x3fdf5b00, 0x4148ce28},
{'9', 0x00030011, 0x000b0023},
{'l', 0x41074d50, 0xc10dbeb8},
{'9', 0x000c0014, 0x001d0025},
{'l', 0xc0b46710, 0x41278448},
{'9', 0x000d000c, 0x001d0015},
{'l', 0x41312e68, 0xc0052780},
{'9', 0x00160009, 0x002f000e},
{'l', 0xc11eed18, 0x40943018},
{'8', 0x12010901, 0x12ff0900},
{'l', 0x411eed18, 0x409655e8},
{'9', 0x0018fffc, 0x002efff2},
{'l', 0xc1312e68, 0xc0052780},
{'9', 0x0010fff8, 0x001dffeb},
{'l', 0x40b46710, 0x41267166},
{'9', 0x0011ffef, 0x001dffdb},
{'l', 0xc1074d50, 0xc10dbeb6},
{'9', 0x0007ffef, 0x000bffdd},
{'l', 0xbfdf5b00, 0x4147bb47},
{'8', 0x01e901f5, 0xffe900f5},
{'l', 0xbfdf5b20, 0xc147bb47},
{'9', 0xfffdffef, 0xfff5ffdd},
{'l', 0xc1074d50, 0x410dbeb6},
{'9', 0xfff4ffec, 0xffe3ffdb},
{'l', 0x40b46718, 0xc1267166},
{'9', 0xfff3fff4, 0xffe3ffeb},
{'l', 0xc1312e64, 0x40052780},
{'9', 0xffeafff7, 0xffd2fff2},
{'l', 0x411eed1a, 0xc09655e8},
{'8', 0xeefff7ff, 0xee01f700},
{'l', 0xc11eed1a, 0xc0943018},
{'9', 0xffe80004, 0xffd1000e},
{'l', 0x41312e64, 0x40052780},
{'9', 0xfff00008, 0xffe30015},
{'l', 0xc0b46718, 0xc1267168},
{'9', 0xffef0011, 0xffe30025},
{'l', 0x41074d50, 0x410cabd0},
{'9', 0xfff90011, 0xfff50023},
{'l', 0x3fdf5b20, 0xc148ce28},
{'9', 0xffff000b, 0xffff0017},
{'m', 0x00000000, 0x41ac5958},
{'8', 0x22ad00d0, 0x53de22de},
{'8', 0x53223000, 0x22532222},
{'8', 0xde530030, 0xad22de22},
{'8', 0xadded000, 0xdeaddede},
{'m', 0x41267164, 0x41ec3dd8},
{'8', 0x1df41100, 0x0ce30cf4},
{'8', 0xf4e300ef, 0xe3f4f4f4},
{'8', 0xe30cef00, 0xf41df40c},
{'8', 0x0c1d0011, 0x1d0c0c0c},
{'@', 0x000026a0, 0x00007b38},/* ⚠ x-advance: 123.218750 */
{'m', 0x4278dbeb, 0xc2c844b9},
{'l', 0x3ef08980, 0x00000000},
{'l', 0x42574d50, 0x42c70f76},
{'l', 0x00000000, 0x3f1aa180},
{'4', 0x0000fe4e, 0xfffefffe},
{'l', 0xbf1aa180, 0x00000000},
{'9', 0xfe7b00d5, 0xfe7200de},
{'m', 0xbf1aa180, 0x4149e110},
{'l', 0xc232414a, 0x42a13543},
{'4', 0x00040000, 0x00000166},
{'l', 0x00000000, 0xbf1aa180},
{'9', 0xfec3ff54, 0xfebcff4c},
{'m', 0x3f1aa180, 0x416e63a8},
{'q', 0x40a55e78, 0x00000000},
{0, 0x40a55e78, 0x40920a50},
{'q', 0xc05f5b00, 0x42249052},
{0, 0xc0a55e78, 0x42249052},
{'q', 0xbfc59580, 0x00000000},
{0, 0xc0a55e80, 0xc226fad8},
{'9', 0xfff10006, 0xfff10014},
{'m', 0xbd897400, 0x424aaf3f},
{'8', 0x02090005, 0x07070205},
{'8', 0x0a020402, 0x0afe0500},
{'8', 0x07f904fe, 0x02f602fb},
{'8', 0xfef600fb, 0xf9f9fefc},
{'8', 0xf6fefcfe, 0xf602fb00},
{'8', 0xf907fc02, 0xfe0afe04},
{'@', 0x00002423, 0x0000573f},/* ␣ x-advance: 87.246094 */
{'m', 0x41a89732, 0x419eed1a},
{'l', 0x42346715, 0x00000000},
{'l', 0x00000000, 0xc2074d51},
{'l', 0x41346718, 0x35800000},
{'l', 0x00000000, 0x4234f089},
{'l', 0xc2874d50, 0x36000000},
{'l', 0xb6400000, 0xc234f089},
{'l', 0x41346717, 0xb5800000},
{'l', 0x00000000, 0x42074d51},
{'@', 0x000000b2, 0x00003719},/* ² x-advance: 55.097656 */
{'m', 0x418fe482, 0xc251eed1},
{'l', 0x41e3a6a8, 0x00000000},
{'4', 0x001e0000, 0x0000ff60},
{'l', 0x35c00000, 0xc0ec3dd8},
{'8', 0xe91af809, 0x955caf5c},
{'8', 0xe4f3ef00, 0xf5dcf5f3},
{'8', 0x04e200f3, 0x0ddd04f0},
{'l', 0xb5000000, 0xc1041498},
{'8', 0xf526f914, 0xfd21fd11},
{'8', 0x113e0026, 0x2e171117},
{'q', 0x00000000, 0x41154300},
{0, 0xc1b1b7d7, 0x41e31d34},
{'q', 0xc0708970, 0x404e2cb0},
{0, 0xc0bad87c, 0x40a112e8},
{'@', 0x000025c6, 0x000069b4},/* ◆ x-advance: 105.703125 */
{'m', 0x3ece2cac, 0xc20ed19c},
{'l', 0x4251aa18, 0xc2527844},
{'l', 0x4251eed1, 0x42527844},
{'l', 0xc251eed1, 0x42527844},
{'l', 0xc251aa18, 0xc2527844},
{'@', 0x00002665, 0x00007b38},/* ♥ x-advance: 123.218750 */
{'m', 0x4214301b, 0xc2c844b9},
{'8', 0x3f550036, 0x260b180b},
{'l', 0x3e4e2d00, 0x00000000},
{'8', 0xb822d509, 0xe441e41c},
{'8', 0x3c590038, 0x29081608},
{'9', 0x00430000, 0x0080ffc9},
{'4', 0x00aaff72, 0x0000ffff},
{'l', 0xc216df5b, 0xc238f769},
{'q', 0xc1346717, 0xc15c225c},
{0, 0xc1346717, 0xc1e31d32},
{'8', 0xa735c800, 0xf42df416},
{'@', 0x00002666, 0x00007b38},/* ♦ x-advance: 123.218750 */
{'m', 0x42767165, 0xc2c844b9},
{'l', 0x42070897, 0x422f4d50},
{'9', 0x00160012, 0x001a0012},
{'l', 0xc2198e9b, 0x4246ed19},
{'q', 0xbf4e2cc0, 0xbf09731d},
{0, 0xc21a180e, 0xc246ed19},
{'q', 0x36000000, 0xbf708980},
{0, 0x40ee63ac, 0xc12338b4},
{'l', 0x41f89731, 0xc220ce2c},
{'@', 0x00002663, 0x00007b38},/* ♣ x-advance: 123.218750 */
{'m', 0x4276b61f, 0xc2c844b9},
{'8', 0x3c540039, 0x1c040d03},
{'9', 0x001f0000, 0x004affe0},
{'4', 0x0010fff0, 0x00000000},
{'9', 0xfff90013, 0xfff9002a},
{'l', 0x3fa338c0, 0x00000000},
{'8', 0x3659003f, 0x21061106},
{'8', 0x52c83700, 0x04e303f6},
{'9', 0x0000ffc0, 0xffb7ffa4},
{'4', 0x00000000, 0x00020000},
{'9', 0x005c0000, 0x00790016},
{'4', 0x00010000, 0x0000ffc9},
{'l', 0xbece2d00, 0xbece2cac},
{'9', 0xffde0016, 0xff850016},
{'4', 0x00000000, 0x00000000},
{'8', 0x4aa44ae6, 0xcbb200cd},
{'8', 0xdffaeefa, 0xac42c200},
{'9', 0xfffd0011, 0xfffd001f},
{'l', 0x3f1aa180, 0x00000000},
{'9', 0x00000017, 0x0007002c},
{'4', 0x00000000, 0x00000000},
{'8', 0xdbe2edea, 0xcdf0e3f0},
{'l', 0x00000000, 0xbf708980},
{'8', 0xaf39cb00, 0xfb1dfb13},
{'@', 0x00002660, 0x00007b38},/* ♠ x-advance: 123.218750 */
{'m', 0x4276fad8, 0xc2c844b9},
{'q', 0x40c9e110, 0x41335430},
{0, 0x41a67164, 0x41edda34},
{'8', 0x59414a3f, 0x2c0a160a},
{'l', 0x00000000, 0x402bcff0},
{'8', 0x46d52c00, 0x05e105f2},
{'9', 0x0000ffd7, 0xffc5ffbe},
{'4', 0x0000fff5, 0x00030000},
{'9', 0x004b0000, 0x00740016},
{'4', 0x0000ffc7, 0xffff0000},
{'9', 0xffd80016, 0xff8b0016},
{'4', 0x00000000, 0x0000fff6},
{'l', 0xc049e110, 0x40bcfe48},
{'8', 0x23c823ea, 0xc8ba00ce},
{'4', 0xffedfffe, 0xfff40000},
{'q', 0x00000000, 0xc1448294},
{0, 0x4148ce2c, 0xc1cf3f92},
{'9', 0xff990054, 0xff6d006c},
{'l', 0x3e4e2c00, 0xbe4e2c00},
{'l', 0x3e4e2d00, 0x00000000},
{'@', 0x000000f7, 0x0000732a},/* ÷ x-advance: 115.164062 */
{'m', 0x424550c0, 0xc2985957},
{'0', 0x42000042, 0xbe0000be},
{'m', 0x00000000, 0x4246a85f},
{'0', 0x41000042, 0xbf0000be},
{'m', 0xc20b0f76, 0xc1b2414a},
{'l', 0x42ac149e, 0x00000000},
{'l', 0x00000000, 0x41368ce4},
{'l', 0xc2ac149e, 0x00000000},
{'l', 0xb5800000, 0xc1368ce4},
{'@', 0x00002248, 0x0000732a},/* ≈ x-advance: 115.164062 */
{'m', 0x42c93543, 0xc2273f92},
{'l', 0x00000000, 0x414036fc},
{'8', 0x1ecc14e4, 0x09cf09e9},
{'8', 0xf1bc00e3, 0xfffcfffe},
{'8', 0xfefb00ff, 0xf0bef0d7},
{'8', 0x0ad200e9, 0x20cf0ae9},
{'l', 0x00000000, 0xc14036fa},
{'8', 0xe234ec1c, 0xf732f718},
{'8', 0x0f44001d, 0x01040102},
{'8', 0x02050001, 0x10421029},
{'8', 0xf72d0017, 0xdf32f616},
{'m', 0x00000000, 0xc1d0dbec},
{'l', 0x00000000, 0x413f2418},
{'8', 0x1ecc15e4, 0x09cf09e9},
{'8', 0xf1bc00e3, 0xfffcfffe},
{'8', 0xfefb00ff, 0xf0bef0d7},
{'8', 0x0ad200e9, 0x20cf0ae9},
{'l', 0x00000000, 0xc13f2418},
{'8', 0xe234ec1c, 0xf732f718},
{'8', 0x0f44001d, 0x01040102},
{'8', 0x02050001, 0x10421029},
{'8', 0xf72d0017, 0xdf32f616},
{'@', 0x000000b1, 0x0000732a},/* ± x-advance: 115.164062 */
{'m', 0x427ce2ca, 0xc2ac5957},
{'l', 0x00000000, 0x41cfc904},
{'l', 0x421587bc, 0x00000000},
{'l', 0x00000000, 0x41368ce0},
{'l', 0xc21587bc, 0x00000000},
{'l', 0x00000000, 0x41cfc905},
{'l', 0xc1346714, 0x00000000},
{'l', 0x00000000, 0xc1cfc905},
{'l', 0xc21587bb, 0x00000000},
{'l', 0xb5800000, 0xc1368ce0},
{'4', 0x00000095, 0xff990000},
{'6', 0x0000002d, 0x012bff3e},
{'l', 0x42ac149e, 0xb6400000},
{'l', 0x00000000, 0x41368ce3},
{'l', 0xc2ac149e, 0x00000000},
{'l', 0xb5800000, 0xc1368ce3},
{'@', 0x00002574, 0x000052c0},/* ╴ x-advance: 82.750000 */
{'m', 0xbfabcfe4, 0xc225e7f2},
{'l', 0x00000000, 0xc138b2b0},
{'l', 0x422abcfe, 0x00000000},
{'l', 0x00000000, 0x4138b2b0},
{'l', 0xc22abcfe, 0x00000000},
{'@', 0x00002212, 0x0000732a},/* − x-advance: 115.164062 */
{'m', 0x41690527, 0xc2432af4},
{'l', 0x42ac149e, 0x00000000},
{'l', 0x00000000, 0x41368ce4},
{'l', 0xc2ac149e, 0x00000000},
{'l', 0xb5800000, 0xc1368ce4},
{'@', 0x00002576, 0x000052c0},/* ╶ x-advance: 82.750000 */
{'m', 0x42255e7f, 0xc225e7f2},
{'l', 0x00000000, 0xc138b2b0},
{'l', 0x422b01b7, 0x00000000},
{'l', 0x00000000, 0x4138b2b0},
{'l', 0xc22b01b7, 0x00000000},
{'[', 0x0047002d, 0x00000508},
{'[', 0x004a002d, 0x000007a6},
{'[', 0x004f002d, 0x000003d3},
{'[', 0x0051002d, 0x00000508},
{'[', 0x006f002d, 0x0000028c},
{'[', 0x00f6002d, 0x0000028c},
{'[', 0x00d6002d, 0x000003d3},
{'[', 0x00410041, 0x000003d3},
{'[', 0x201d0043, 0x0000028c},
{'[', 0x0041004c, 0x00000327},
{'[', 0x002d004f, 0x000003d3},
{'[', 0x201d0050, 0x0000028c},
{'[', 0x201c0050, 0x0000028c},
{'[', 0x002d0051, 0x000003d3},
{'[', 0x00410053, 0x0000028c},
{'[', 0x201c0066, 0x0000045c},
{'[', 0x002d006f, 0x0000028c},
{'[', 0x201d0072, 0x000005c5},
{'[', 0x002d00df, 0x0000028c},
{'[', 0x002d00f6, 0x0000028c},
{'[', 0x002d00d6, 0x000003d3},
{'[', 0x00c600ab, 0x00000a22},
};
#define CTX_FONT_regular 1
#endif
#include <math.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdint.h>
#define CTX_MIN_EDGE_LIST_SIZE 256
#define CTX_MAX_EDGE_LIST_SIZE 512
#define CTX_MIN_JOURNAL_SIZE 512
#define CTX_MAX_JOURNAL_SIZE 512 // Doesn't really get used - since
// we at the moment render synchronously
// from the data provided by core1
#define CTX_LIMIT_FORMATS 1
#define CTX_DITHER 1
#define CTX_ENABLE_RGB565_BYTESWAPPED 1
#define CTX_BITPACK_PACKER 0
#define CTX_COMPOSITING_GROUPS 0
#define CTX_RENDERSTREAM_STATIC 0
#define CTX_GRADIENT_CACHE 1
#define CTX_ENABLE_CLIP 1
#define CTX_BLOATY_FAST_PATHS 0
#define CTX_1BIT_CLIP 1
#define CTX_RASTERIZER_AA 3
#define CTX_RASTERIZER_FORCE_AA 1
#define CTX_SHAPE_CACHE 0
#define CTX_SHAPE_CACHE_DIM 16*18
#define CTX_SHAPE_CACHE_ENTRIES 128
#define CTX_RASTERIZER_MAX_CIRCLE_SEGMENTS 36
#define CTX_RASTERIZER 1
#define CTX_EVENTS 0
#define CTX_STRINGPOOL_SIZE 512
#define CTX_ENABLE_SHADOW_BLUR 0
#define CTX_FORMATTER 0
#define CTX_PARSER 0
#define CTX_FONTS_FROM_FILE 0
#define CTX_IMPLEMENTATION
#define _CTX_INTERNAL_FONT_ // defining this causes the internal font to be dropped
#include "ctx-font-regular.h" // font-regular contains the same outlines but more
// glyphs
#include "ctx.h"
Source diff could not be displayed: it is too large. Options to address this: view the blob.
includes = include_directories(
'./',
)
sources = files(
'ctx.c',
'ctx.h'
)
lib = static_library(
'ctx',
sources,
include_directories: includes,
dependencies: periphdriver,
c_args: ['-O3']
)
libctx = declare_dependency(
include_directories: includes,
link_with: lib,
)
......@@ -6,6 +6,7 @@ subdir('./vendor/Bosch/BMA400/')
subdir('./vendor/Maxim/MAX77650/')
subdir('./vendor/Maxim/MAX86150/')
subdir('./vendor/Maxim/rd117_mbed/')
subdir('./ctx/')
subdir('./gfx/')
subdir('./FreeRTOS/')
......
......@@ -189,7 +189,7 @@ class Clock:
def updateClock(self, disp, localtime):
disp.clear(self.background_col)
disp.pixel(self.center[0] + self.offsetx, self.center[1], col=self.center_col)
#disp.pixel(self.center[0] + self.offsetx, self.center[1], col=self.center_col)
hour_coords = self.circlePoint(
math.radians(
(((localtime[3] % 12) / 12.0) if localtime[3] else 0) * 360
......@@ -198,7 +198,7 @@ class Clock:
)
)
minute_coords = self.circlePoint(math.radians(localtime[4] * 6 + 270))
second_coords = self.circlePoint(math.radians(localtime[5] * 6 + 270))
second_coords = self.circlePoint((math.radians(time.time_ms()%60000)/1000.0 * 6 + 270))
for i in range(60):
degree = i * 6 + 90
......@@ -305,14 +305,11 @@ class Clock:
vector = self.normVector(vector)
destination = self.addVector(source, self.multiplyVector(vector, length))
disp.line(
round(source[0]) + self.offsetx,
round(source[1]),
round(destination[0]) + self.offsetx,
round(destination[1]),
col=col,
size=thickness,
)
disp.rgba(col[0]/255.0, col[1]/255.0, col[2]/255.0, 1.0)
disp.move_to(source[0] + self.offsetx, source[1])
disp.line_to(destination[0] + self.offsetx, destination[1])
disp.line_width(thickness)
disp.stroke()
def normVector(self, v):
length = math.sqrt(sum([i ** 2 for i in v]))
......