// Auto generated code by esphome
// ========== AUTO GENERATED INCLUDE BLOCK BEGIN ===========
#include "esphome.h"
using namespace esphome;
using std::isnan;
using std::min;
using std::max;
using namespace sensor;
using namespace display;
logger::Logger *logger_logger_id;
wifi::WiFiComponent *wifi_wificomponent_id;
mdns::MDNSComponent *mdns_mdnscomponent_id;
esphome::ESPHomeOTAComponent *esphome_esphomeotacomponent_id;
safe_mode::SafeModeComponent *safe_mode_safemodecomponent_id;
api::APIServer *api_apiserver_id;
using namespace api;
using namespace i2c;
i2c::ArduinoI2CBus *i2c_arduinoi2cbus_id;
ads1115::ADS1115Component *ads1015_hub;
ads1115::ADS1115Sensor *sensor_voltage;
sensor::SlidingWindowMovingAverageFilter *sensor_slidingwindowmovingaveragefilter_id;
template_::TemplateSensor *pressure_sensor;
font::Font *roboto_font;
font::Font *roboto_font_large;
ssd1306_i2c::I2CSSD1306 *oled_display;
preferences::IntervalSyncer *preferences_intervalsyncer_id;
#define yield() esphome::yield()
#define millis() esphome::millis()
#define micros() esphome::micros()
#define delay(x) esphome::delay(x)
#define delayMicroseconds(x) esphome::delayMicroseconds(x)
// ========== AUTO GENERATED INCLUDE BLOCK END ==========="

void setup() {
  // ========== AUTO GENERATED CODE BEGIN ===========
  // network:
  //   enable_ipv6: false
  //   min_ipv6_addr_count: 0
  // esphome:
  //   name: pressure-monitor
  //   min_version: 2025.8.3
  //   build_path: build\pressure-monitor
  //   friendly_name: ''
  //   platformio_options: {}
  //   includes: []
  //   libraries: []
  //   name_add_mac_suffix: false
  //   debug_scheduler: false
  //   areas: []
  //   devices: []
  App.pre_setup("pressure-monitor", "", "", __DATE__ ", " __TIME__, false);
  // sensor:
  // display:
  // logger:
  //   id: logger_logger_id
  //   baud_rate: 115200
  //   tx_buffer_size: 512
  //   deassert_rts_dtr: false
  //   task_log_buffer_size: 768
  //   hardware_uart: UART0
  //   level: DEBUG
  //   logs: {}
  logger_logger_id = new logger::Logger(115200, 512);
  logger_logger_id->create_pthread_key();
  logger_logger_id->init_log_buffer(768);
  logger_logger_id->set_log_level(ESPHOME_LOG_LEVEL_DEBUG);
  logger_logger_id->set_uart_selection(logger::UART_SELECTION_UART0);
  logger_logger_id->pre_setup();
  logger_logger_id->set_component_source("logger");
  App.register_component(logger_logger_id);
  // wifi:
  //   id: wifi_wificomponent_id
  //   domain: .local
  //   reboot_timeout: 15min
  //   power_save_mode: LIGHT
  //   fast_connect: false
  //   passive_scan: false
  //   enable_on_boot: true
  //   networks:
  //     - ssid: hhhhhhhh
  //       password: nihaoahhh
  //       id: wifi_wifiap_id
  //       priority: 0.0
  //   use_address: pressure-monitor.local
  wifi_wificomponent_id = new wifi::WiFiComponent();
  wifi_wificomponent_id->set_use_address("pressure-monitor.local");
  {
  wifi::WiFiAP wifi_wifiap_id = wifi::WiFiAP();
  wifi_wifiap_id.set_ssid("hhhhhhhh");
  wifi_wifiap_id.set_password("nihaoahhh");
  wifi_wifiap_id.set_priority(0.0f);
  wifi_wificomponent_id->add_sta(wifi_wifiap_id);
  }
  wifi_wificomponent_id->set_reboot_timeout(900000);
  wifi_wificomponent_id->set_power_save_mode(wifi::WIFI_POWER_SAVE_LIGHT);
  wifi_wificomponent_id->set_fast_connect(false);
  wifi_wificomponent_id->set_passive_scan(false);
  wifi_wificomponent_id->set_enable_on_boot(true);
  wifi_wificomponent_id->set_component_source("wifi");
  App.register_component(wifi_wificomponent_id);
  // mdns:
  //   id: mdns_mdnscomponent_id
  //   disabled: false
  //   services: []
  mdns_mdnscomponent_id = new mdns::MDNSComponent();
  mdns_mdnscomponent_id->set_component_source("mdns");
  App.register_component(mdns_mdnscomponent_id);
  // ota:
  // ota.esphome:
  //   platform: esphome
  //   id: esphome_esphomeotacomponent_id
  //   version: 2
  //   port: 3232
  esphome_esphomeotacomponent_id = new esphome::ESPHomeOTAComponent();
  esphome_esphomeotacomponent_id->set_port(3232);
  esphome_esphomeotacomponent_id->set_component_source("esphome.ota");
  App.register_component(esphome_esphomeotacomponent_id);
  // safe_mode:
  //   id: safe_mode_safemodecomponent_id
  //   boot_is_good_after: 1min
  //   disabled: false
  //   num_attempts: 10
  //   reboot_timeout: 5min
  safe_mode_safemodecomponent_id = new safe_mode::SafeModeComponent();
  safe_mode_safemodecomponent_id->set_component_source("safe_mode");
  App.register_component(safe_mode_safemodecomponent_id);
  if (safe_mode_safemodecomponent_id->should_enter_safe_mode(10, 300000, 60000)) return;
  // api:
  //   id: api_apiserver_id
  //   port: 6053
  //   password: ''
  //   reboot_timeout: 15min
  //   batch_delay: 100ms
  //   custom_services: false
  //   homeassistant_services: false
  //   homeassistant_states: false
  api_apiserver_id = new api::APIServer();
  api_apiserver_id->set_component_source("api");
  App.register_component(api_apiserver_id);
  api_apiserver_id->set_port(6053);
  api_apiserver_id->set_reboot_timeout(900000);
  api_apiserver_id->set_batch_delay(100);
  // i2c:
  //   sda: 21
  //   scl: 22
  //   scan: true
  //   frequency: 400000.0
  //   id: i2c_arduinoi2cbus_id
  i2c_arduinoi2cbus_id = new i2c::ArduinoI2CBus();
  i2c_arduinoi2cbus_id->set_component_source("i2c");
  App.register_component(i2c_arduinoi2cbus_id);
  i2c_arduinoi2cbus_id->set_sda_pin(21);
  i2c_arduinoi2cbus_id->set_scl_pin(22);
  i2c_arduinoi2cbus_id->set_frequency(400000);
  i2c_arduinoi2cbus_id->set_scan(true);
  // esp32:
  //   board: esp32dev
  //   framework:
  //     version: 3.2.1
  //     advanced:
  //       ignore_efuse_custom_mac: false
  //     source: pioarduino/framework-arduinoespressif32@https:github.com/espressif/arduino-esp32/releases/download/3.2.1/esp32-3.2.1.zip
  //     platform_version: https:github.com/pioarduino/platform-espressif32/releases/download/54.03.21-2/platform-espressif32.zip
  //     type: arduino
  //   flash_size: 4MB
  //   variant: ESP32
  //   cpu_frequency: 160MHZ
  setCpuFrequencyMhz(160);
  // ads1115:
  //   id: ads1015_hub
  //   address: 0x48
  //   continuous_mode: false
  //   i2c_id: i2c_arduinoi2cbus_id
  ads1015_hub = new ads1115::ADS1115Component();
  ads1015_hub->set_component_source("ads1115");
  App.register_component(ads1015_hub);
  ads1015_hub->set_i2c_bus(i2c_arduinoi2cbus_id);
  ads1015_hub->set_i2c_address(0x48);
  ads1015_hub->set_continuous_mode(false);
  // sensor.ads1115:
  //   platform: ads1115
  //   ads1115_id: ads1015_hub
  //   id: sensor_voltage
  //   name: Sensor Voltage
  //   multiplexer: A0_GND
  //   gain: '4.096'
  //   update_interval: 50ms
  //   unit_of_measurement: V
  //   icon: mdi:flash-circle
  //   accuracy_decimals: 3
  //   filters:
  //     - sliding_window_moving_average:
  //         window_size: 16
  //         send_every: 4
  //         send_first_at: 1
  //       type_id: sensor_slidingwindowmovingaveragefilter_id
  //   disabled_by_default: false
  //   force_update: false
  //   device_class: voltage
  //   state_class: measurement
  //   resolution: 16_BITS
  //   sample_rate: '860'
  sensor_voltage = new ads1115::ADS1115Sensor();
  App.register_sensor(sensor_voltage);
  sensor_voltage->set_name("Sensor Voltage");
  sensor_voltage->set_object_id("sensor_voltage");
  sensor_voltage->set_disabled_by_default(false);
  sensor_voltage->set_icon("mdi:flash-circle");
  sensor_voltage->set_device_class("voltage");
  sensor_voltage->set_state_class(sensor::STATE_CLASS_MEASUREMENT);
  sensor_voltage->set_unit_of_measurement("V");
  sensor_voltage->set_accuracy_decimals(3);
  sensor_voltage->set_force_update(false);
  sensor_slidingwindowmovingaveragefilter_id = new sensor::SlidingWindowMovingAverageFilter(16, 4, 1);
  sensor_voltage->set_filters({sensor_slidingwindowmovingaveragefilter_id});
  sensor_voltage->set_update_interval(50);
  sensor_voltage->set_component_source("ads1115.sensor");
  App.register_component(sensor_voltage);
  sensor_voltage->set_parent(ads1015_hub);
  sensor_voltage->set_multiplexer(ads1115::ADS1115_MULTIPLEXER_P0_NG);
  sensor_voltage->set_gain(ads1115::ADS1115_GAIN_4P096);
  sensor_voltage->set_resolution(ads1115::ADS1115_16_BITS);
  sensor_voltage->set_samplerate(ads1115::ADS1115_860SPS);
  // sensor.template:
  //   platform: template
  //   id: pressure_sensor
  //   name: Pressure
  //   unit_of_measurement: MPa
  //   icon: mdi:gauge
  //   accuracy_decimals: 3
  //   lambda: !lambda |-
  //     const float sensor_volts = id(sensor_voltage).state;
  //     if (isnan(sensor_volts)) {
  //       return NAN;
  //     }
  //   
  //     const float SENSOR_MIN_V = 0.5f;
  //     const float SENSOR_MAX_V = 4.5f;
  //     const float PRESSURE_FULL_SCALE_MPA = 0.2f;
  //     const float span_v = SENSOR_MAX_V - SENSOR_MIN_V;
  //   
  //     if (span_v <= 0.0f) {
  //       return 0.0f;
  //     }
  //   
  //     float ratio = (sensor_volts - SENSOR_MIN_V) / span_v;
  //   
  //     if (ratio < 0.0f) ratio = 0.0f;
  //     if (ratio > 1.0f) ratio = 1.0f;
  //   
  //     return ratio * PRESSURE_FULL_SCALE_MPA;
  //   disabled_by_default: false
  //   force_update: false
  //   update_interval: 60s
  pressure_sensor = new template_::TemplateSensor();
  App.register_sensor(pressure_sensor);
  pressure_sensor->set_name("Pressure");
  pressure_sensor->set_object_id("pressure");
  pressure_sensor->set_disabled_by_default(false);
  pressure_sensor->set_icon("mdi:gauge");
  pressure_sensor->set_unit_of_measurement("MPa");
  pressure_sensor->set_accuracy_decimals(3);
  pressure_sensor->set_force_update(false);
  pressure_sensor->set_update_interval(60000);
  pressure_sensor->set_component_source("template.sensor");
  App.register_component(pressure_sensor);
  pressure_sensor->set_template([=]() -> esphome::optional<float> {
      #line 77 "sensor.yaml"
      const float sensor_volts = sensor_voltage->state;
      if (isnan(sensor_volts)) {
        return NAN;
      }
      
      const float SENSOR_MIN_V = 0.5f;
      const float SENSOR_MAX_V = 4.5f;
      const float PRESSURE_FULL_SCALE_MPA = 0.2f;
      const float span_v = SENSOR_MAX_V - SENSOR_MIN_V;
      
      if (span_v <= 0.0f) {
        return 0.0f;
      }
      
      float ratio = (sensor_volts - SENSOR_MIN_V) / span_v;
      
      if (ratio < 0.0f) ratio = 0.0f;
      if (ratio > 1.0f) ratio = 1.0f;
      
      return ratio * PRESSURE_FULL_SCALE_MPA;
  });
  // font:
  //   file:
  //     family: Roboto
  //     weight: 400
  //     italic: false
  //     refresh: 1d
  //     type: gfonts
  //   id: roboto_font
  //   size: 12
  //   glyphs:
  //     - ' '
  //     - '!'
  //     - '"'
  //     - '#'
  //     - $
  //     - '%'
  //     - '&'
  //     - ''''
  //     - (
  //     - )
  //     - '*'
  //     - +
  //     - ','
  //     - '-'
  //     - .
  //     - /
  //     - '0'
  //     - '1'
  //     - '2'
  //     - '3'
  //     - '4'
  //     - '5'
  //     - '6'
  //     - '7'
  //     - '8'
  //     - '9'
  //     - ':'
  //     - ;
  //     - <
  //     - '='
  //     - '>'
  //     - '?'
  //     - '@'
  //     - A
  //     - B
  //     - C
  //     - D
  //     - E
  //     - F
  //     - G
  //     - H
  //     - I
  //     - J
  //     - K
  //     - L
  //     - M
  //     - N
  //     - O
  //     - P
  //     - Q
  //     - R
  //     - S
  //     - T
  //     - U
  //     - V
  //     - W
  //     - X
  //     - Y
  //     - Z
  //     - '['
  //     - 
  //     - ']'
  //     - ^
  //     - _
  //     - '`'
  //     - a
  //     - b
  //     - c
  //     - d
  //     - e
  //     - f
  //     - g
  //     - h
  //     - i
  //     - j
  //     - k
  //     - l
  //     - m
  //     - n
  //     - o
  //     - p
  //     - q
  //     - r
  //     - s
  //     - t
  //     - u
  //     - v
  //     - w
  //     - x
  //     - y
  //     - z
  //     - '{'
  //     - '|'
  //     - '}'
  //     - '~'
  //     -  
  //     - ¢
  //     - £
  //     - ¥
  //     - ©
  //     - ®
  //     - °
  //     - ·
  //     - ×
  //     - ÷
  //     - –
  //     - —
  //     - ‘
  //     - ’
  //     - “
  //     - ”
  //     - •
  //     - …
  //     - €
  //     - ™
  //     - −
  //   glyphsets: []
  //   ignore_missing_glyphs: false
  //   bpp: 1
  //   extras: []
  //   raw_data_id: uint8_t_id
  //   raw_glyph_id: font_glyphdata_id
  static const uint8_t uint8_t_id[] PROGMEM = {0x00, 0xFE, 0x80, 0xFC, 0x24, 0xAF, 0xCA, 0x49, 0x2F, 0xD4, 0x50, 0x23, 0xA3, 0x1C, 0x38, 0x71, 0x8B, 0x88, 0xE1, 0x4A, 0xA7, 0x41, 0x05, 0xCA, 0xA5, 0x0E, 0x72, 0x49, 0x1C, 0x62, 0xD9, 0x62, 0x74, 0xE0, 0x29, 0x49, 0x24, 0x91, 0x22, 0x89, 0x12, 0x49, 0x25, 0x28, 0x25, 0x5C, 0xA5, 0x00, 0x10, 0x4F, 0xC4, 0x10, 0x40, 0x58, 0xE0, 0x80, 0x10, 0x84, 0x42, 0x11, 0x08, 0x44, 0x00, 0x74, 0x63, 0x18, 0xC6, 0x31, 0x70, 0x3C, 0x92, 0x49, 0x20, 0x74, 0x62, 0x11, 0x11, 0x18, 0xF8, 0xF4, 0x42, 0x37, 0x04, 0x31, 0xF0, 0x08, 0x61, 0x8A, 0x49, 0x2F, 0xC2, 0x08, 0x7E, 0x21, 0xE0, 0x84, 0x31, 0x70, 0x32, 0x21, 0xE8, 0xC6, 0x31, 0x70, 0xFC, 0x10, 0x82, 0x08, 0x41, 0x08, 0x20, 0x74, 0x63, 0x17, 0x46, 0x31, 0x70, 0x74, 0xE3, 0x19, 0xB4, 0x22, 0x60, 0x84, 0x40, 0x16, 0x09, 0xB0, 0x60, 0x80, 0xF8, 0x01, 0xF0, 0x83, 0x82, 0xE8, 0x00, 0x72, 0x42, 0x11, 0x18, 0x80, 0x20, 0x3E, 0x20, 0xA0, 0x33, 0x99, 0x4D, 0x26, 0x93, 0x36, 0x80, 0x20, 0x0F, 0x00, 0x18, 0x18, 0x18, 0x24, 0x24, 0x64, 0x7E, 0x42, 0xC2, 0xFA, 0x28, 0xE2, 0xF2, 0x38, 0x63, 0xF8, 0x7B, 0x18, 0x60, 0x82, 0x08, 0x71, 0x78, 0xF2, 0x28, 0x61, 0x86, 0x18, 0x62, 0xF0, 0xFC, 0x21, 0x0F, 0xC2, 0x10, 0xF8, 0xFC, 0x21, 0x0F, 0xC2, 0x10, 0x80, 0x7B, 0x18, 0x60, 0x9E, 0x18, 0x71, 0x78, 0x87, 0x0E, 0x1C, 0x3F, 0xF0, 0xE1, 0xC3, 0x86, 0xFF, 0x80, 0x04, 0x10, 0x41, 0x04, 0x10, 0x72, 0x78, 0x8D, 0x12, 0x45, 0x0E, 0x1A, 0x26, 0x44, 0x84, 0x84, 0x21, 0x08, 0x42, 0x10, 0xF8, 0xC1, 0xC3, 0xC3, 0xA3, 0xA5, 0xB5, 0x95, 0x99, 0x89, 0x87, 0x8F, 0x9D, 0x39, 0x73, 0xE3, 0xC7, 0x86, 0x79, 0x8A, 0x14, 0x38, 0x70, 0xE1, 0x62, 0x78, 0xFA, 0x18, 0x61, 0xFA, 0x08, 0x20, 0x80, 0x79, 0x8A, 0x14, 0x28, 0x70, 0xA1, 0x62, 0x78, 0x08, 0xFA, 0x38, 0x63, 0xFA, 0x68, 0xA2, 0x84, 0x38, 0x89, 0x1B, 0x03, 0x80, 0x90, 0xA3, 0x3C, 0xFE, 0x20, 0x40, 0x81, 0x02, 0x04, 0x08, 0x10, 0x86, 0x18, 0x61, 0x86, 0x18, 0x63, 0x78, 0xC2, 0x85, 0x1B, 0x22, 0x45, 0x8E, 0x0C, 0x18, 0xC4, 0x51, 0x14, 0xA5, 0x29, 0x4A, 0x8C, 0xA3, 0x18, 0xC6, 0x31, 0x00, 0x42, 0xC8, 0xB0, 0xC1, 0x07, 0x0B, 0x32, 0x42, 0xC2, 0x89, 0x91, 0x43, 0x82, 0x04, 0x08, 0x10, 0xFC, 0x21, 0x04, 0x21, 0x04, 0x20, 0xFC, 0xEA, 0xAA, 0xAB, 0x82, 0x10, 0xC2, 0x10, 0x42, 0x10, 0x40, 0xD5, 0x55, 0x57, 0x22, 0x94, 0xA0, 0xF8, 0x48, 0x74, 0xC3, 0xF8, 0xCF, 0xA0, 0x84, 0x3D, 0x18, 0xC6, 0x31, 0xF0, 0x74, 0x61, 0x08, 0x45, 0xC0, 0x08, 0x5F, 0x18, 0xC6, 0x31, 0x78, 0x74, 0xE3, 0xF8, 0x45, 0xC0, 0x36, 0xF4, 0x44, 0x44, 0x40, 0x7C, 0x63, 0x18, 0xC5, 0xF1, 0x70, 0x84, 0x3D, 0x18, 0xC6, 0x31, 0x88, 0xBF, 0x80, 0x45, 0x55, 0x5C, 0x84, 0x25, 0x6E, 0x72, 0x92, 0x98, 0xFF, 0x80, 0xF7, 0x44, 0xE2, 0x31, 0x18, 0x8C, 0x46, 0x22, 0xF4, 0x63, 0x18, 0xC6, 0x20, 0x74, 0x63, 0x18, 0xC5, 0xC0, 0xF4, 0x63, 0x18, 0xC7, 0xD0, 0x80, 0x7C, 0x63, 0x18, 0xC5, 0xE1, 0x08, 0xF2, 0x49, 0x20, 0x74, 0xA0, 0xE1, 0xCF, 0xC0, 0x4E, 0x44, 0x44, 0x43, 0x8C, 0x63, 0x18, 0xCF, 0xA0, 0x89, 0x24, 0x94, 0x30, 0xC2, 0x00, 0x88, 0xA4, 0x95, 0x4A, 0xA5, 0x51, 0x10, 0x88, 0x49, 0x23, 0x0C, 0x31, 0x24, 0x80, 0x89, 0x24, 0x94, 0x30, 0xC2, 0x08, 0xC0, 0xF0, 0x88, 0xC4, 0x43, 0xE0, 0x12, 0x22, 0x2C, 0x62, 0x22, 0x10, 0xFF, 0xE0, 0x84, 0x44, 0x63, 0x64, 0x44, 0x80, 0xE6, 0x70, 0x00, 0x23, 0xA3, 0x08, 0x42, 0x2E, 0x20, 0x79, 0x2C, 0x30, 0xE1, 0x04, 0x30, 0xFC, 0xC5, 0x24, 0x8C, 0x7C, 0x47, 0xC4, 0x10, 0x3C, 0x42, 0xB9, 0xA5, 0xA1, 0xA5, 0xB9, 0x42, 0x3C, 0x3C, 0x42, 0xB9, 0xA5, 0xB9, 0xA5, 0xA5, 0x42, 0x3C, 0xD7, 0x00, 0x80, 0x8E, 0x98, 0xCD, 0x44, 0x10, 0x0F, 0xC0, 0x10, 0xFC, 0xFF, 0xE0, 0x58, 0xB7, 0x80, 0x55, 0xA0, 0xFC, 0xB4, 0x3A, 0x11, 0xE4, 0x79, 0x08, 0x38, 0xED, 0x6F, 0x70, 0xF8};
  static const font::GlyphData font_glyphdata_id[] = {font::GlyphData{
    .a_char = (const uint8_t *)" ",
    .data = uint8_t_id + 0,
    .advance = 3,
    .offset_x = 0,
    .offset_y = 11,
    .width = 1,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"!",
    .data = uint8_t_id + 1,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 3,
    .width = 1,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\042",
    .data = uint8_t_id + 3,
    .advance = 4,
    .offset_x = 1,
    .offset_y = 3,
    .width = 2,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"#",
    .data = uint8_t_id + 4,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"$",
    .data = uint8_t_id + 11,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 2,
    .width = 5,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"%",
    .data = uint8_t_id + 18,
    .advance = 9,
    .offset_x = 1,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"&",
    .data = uint8_t_id + 26,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"'",
    .data = uint8_t_id + 33,
    .advance = 2,
    .offset_x = 1,
    .offset_y = 3,
    .width = 1,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"(",
    .data = uint8_t_id + 34,
    .advance = 4,
    .offset_x = 1,
    .offset_y = 2,
    .width = 3,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)")",
    .data = uint8_t_id + 39,
    .advance = 4,
    .offset_x = 0,
    .offset_y = 2,
    .width = 3,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"*",
    .data = uint8_t_id + 44,
    .advance = 5,
    .offset_x = 0,
    .offset_y = 3,
    .width = 5,
    .height = 5,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"+",
    .data = uint8_t_id + 48,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 5,
    .width = 6,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)",",
    .data = uint8_t_id + 53,
    .advance = 2,
    .offset_x = 0,
    .offset_y = 11,
    .width = 2,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"-",
    .data = uint8_t_id + 54,
    .advance = 3,
    .offset_x = 0,
    .offset_y = 8,
    .width = 3,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)".",
    .data = uint8_t_id + 55,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 11,
    .width = 1,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"/",
    .data = uint8_t_id + 56,
    .advance = 5,
    .offset_x = 0,
    .offset_y = 3,
    .width = 5,
    .height = 10,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"0",
    .data = uint8_t_id + 63,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"1",
    .data = uint8_t_id + 69,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 3,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"2",
    .data = uint8_t_id + 73,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"3",
    .data = uint8_t_id + 79,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"4",
    .data = uint8_t_id + 85,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"5",
    .data = uint8_t_id + 92,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"6",
    .data = uint8_t_id + 98,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"7",
    .data = uint8_t_id + 104,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"8",
    .data = uint8_t_id + 111,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"9",
    .data = uint8_t_id + 117,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)":",
    .data = uint8_t_id + 123,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 6,
    .width = 1,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)";",
    .data = uint8_t_id + 124,
    .advance = 3,
    .offset_x = 0,
    .offset_y = 6,
    .width = 2,
    .height = 8,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"<",
    .data = uint8_t_id + 126,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 6,
    .width = 5,
    .height = 5,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"=",
    .data = uint8_t_id + 130,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 6,
    .width = 5,
    .height = 4,
  }, font::GlyphData{
    .a_char = (const uint8_t *)">",
    .data = uint8_t_id + 133,
    .advance = 6,
    .offset_x = 1,
    .offset_y = 6,
    .width = 5,
    .height = 5,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"?",
    .data = uint8_t_id + 137,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"@",
    .data = uint8_t_id + 143,
    .advance = 11,
    .offset_x = 1,
    .offset_y = 4,
    .width = 9,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"A",
    .data = uint8_t_id + 156,
    .advance = 8,
    .offset_x = 0,
    .offset_y = 3,
    .width = 8,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"B",
    .data = uint8_t_id + 165,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"C",
    .data = uint8_t_id + 172,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"D",
    .data = uint8_t_id + 179,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"E",
    .data = uint8_t_id + 186,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"F",
    .data = uint8_t_id + 192,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"G",
    .data = uint8_t_id + 198,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"H",
    .data = uint8_t_id + 205,
    .advance = 9,
    .offset_x = 1,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"I",
    .data = uint8_t_id + 213,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 3,
    .width = 1,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"J",
    .data = uint8_t_id + 215,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"K",
    .data = uint8_t_id + 222,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"L",
    .data = uint8_t_id + 230,
    .advance = 6,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"M",
    .data = uint8_t_id + 236,
    .advance = 10,
    .offset_x = 1,
    .offset_y = 3,
    .width = 8,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"N",
    .data = uint8_t_id + 245,
    .advance = 9,
    .offset_x = 1,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"O",
    .data = uint8_t_id + 253,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"P",
    .data = uint8_t_id + 261,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"Q",
    .data = uint8_t_id + 268,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 7,
    .height = 10,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"R",
    .data = uint8_t_id + 277,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"S",
    .data = uint8_t_id + 284,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"T",
    .data = uint8_t_id + 292,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"U",
    .data = uint8_t_id + 300,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"V",
    .data = uint8_t_id + 307,
    .advance = 8,
    .offset_x = 0,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"W",
    .data = uint8_t_id + 315,
    .advance = 11,
    .offset_x = 0,
    .offset_y = 3,
    .width = 10,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"X",
    .data = uint8_t_id + 327,
    .advance = 8,
    .offset_x = 0,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"Y",
    .data = uint8_t_id + 335,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 3,
    .width = 7,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"Z",
    .data = uint8_t_id + 343,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"[",
    .data = uint8_t_id + 350,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 2,
    .width = 2,
    .height = 12,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\134",
    .data = uint8_t_id + 353,
    .advance = 5,
    .offset_x = 0,
    .offset_y = 3,
    .width = 5,
    .height = 10,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"]",
    .data = uint8_t_id + 360,
    .advance = 3,
    .offset_x = 0,
    .offset_y = 2,
    .width = 2,
    .height = 12,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"^",
    .data = uint8_t_id + 363,
    .advance = 5,
    .offset_x = 0,
    .offset_y = 3,
    .width = 5,
    .height = 4,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"_",
    .data = uint8_t_id + 366,
    .advance = 5,
    .offset_x = 0,
    .offset_y = 12,
    .width = 5,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"`",
    .data = uint8_t_id + 367,
    .advance = 4,
    .offset_x = 0,
    .offset_y = 3,
    .width = 3,
    .height = 2,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"a",
    .data = uint8_t_id + 368,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"b",
    .data = uint8_t_id + 373,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"c",
    .data = uint8_t_id + 379,
    .advance = 6,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"d",
    .data = uint8_t_id + 384,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"e",
    .data = uint8_t_id + 390,
    .advance = 6,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"f",
    .data = uint8_t_id + 395,
    .advance = 4,
    .offset_x = 0,
    .offset_y = 3,
    .width = 4,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"g",
    .data = uint8_t_id + 400,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"h",
    .data = uint8_t_id + 406,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"i",
    .data = uint8_t_id + 412,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 3,
    .width = 1,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"j",
    .data = uint8_t_id + 414,
    .advance = 3,
    .offset_x = 0,
    .offset_y = 3,
    .width = 2,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"k",
    .data = uint8_t_id + 417,
    .advance = 6,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"l",
    .data = uint8_t_id + 423,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 3,
    .width = 1,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"m",
    .data = uint8_t_id + 425,
    .advance = 11,
    .offset_x = 1,
    .offset_y = 5,
    .width = 9,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"n",
    .data = uint8_t_id + 433,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"o",
    .data = uint8_t_id + 438,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"p",
    .data = uint8_t_id + 443,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"q",
    .data = uint8_t_id + 449,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"r",
    .data = uint8_t_id + 455,
    .advance = 4,
    .offset_x = 1,
    .offset_y = 5,
    .width = 3,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"s",
    .data = uint8_t_id + 458,
    .advance = 6,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"t",
    .data = uint8_t_id + 463,
    .advance = 4,
    .offset_x = 0,
    .offset_y = 4,
    .width = 4,
    .height = 8,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"u",
    .data = uint8_t_id + 467,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"v",
    .data = uint8_t_id + 472,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 5,
    .width = 6,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"w",
    .data = uint8_t_id + 478,
    .advance = 9,
    .offset_x = 0,
    .offset_y = 5,
    .width = 9,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"x",
    .data = uint8_t_id + 486,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 5,
    .width = 6,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"y",
    .data = uint8_t_id + 492,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 5,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"z",
    .data = uint8_t_id + 499,
    .advance = 6,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"{",
    .data = uint8_t_id + 504,
    .advance = 4,
    .offset_x = 0,
    .offset_y = 3,
    .width = 4,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"|",
    .data = uint8_t_id + 510,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 3,
    .width = 1,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"}",
    .data = uint8_t_id + 512,
    .advance = 4,
    .offset_x = 0,
    .offset_y = 3,
    .width = 4,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"~",
    .data = uint8_t_id + 518,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 8,
    .width = 6,
    .height = 2,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\240",
    .data = uint8_t_id + 520,
    .advance = 3,
    .offset_x = 0,
    .offset_y = 11,
    .width = 1,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\242",
    .data = uint8_t_id + 521,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 4,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\243",
    .data = uint8_t_id + 527,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\245",
    .data = uint8_t_id + 534,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 3,
    .width = 6,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\251",
    .data = uint8_t_id + 541,
    .advance = 9,
    .offset_x = 1,
    .offset_y = 3,
    .width = 8,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\256",
    .data = uint8_t_id + 550,
    .advance = 9,
    .offset_x = 1,
    .offset_y = 3,
    .width = 8,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\260",
    .data = uint8_t_id + 559,
    .advance = 4,
    .offset_x = 1,
    .offset_y = 3,
    .width = 3,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\267",
    .data = uint8_t_id + 561,
    .advance = 3,
    .offset_x = 1,
    .offset_y = 7,
    .width = 1,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\303\227",
    .data = uint8_t_id + 562,
    .advance = 6,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\303\267",
    .data = uint8_t_id + 566,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 5,
    .width = 6,
    .height = 5,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\223",
    .data = uint8_t_id + 570,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 7,
    .width = 6,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\224",
    .data = uint8_t_id + 571,
    .advance = 9,
    .offset_x = 1,
    .offset_y = 7,
    .width = 8,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\230",
    .data = uint8_t_id + 572,
    .advance = 2,
    .offset_x = 1,
    .offset_y = 3,
    .width = 1,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\231",
    .data = uint8_t_id + 573,
    .advance = 2,
    .offset_x = 0,
    .offset_y = 3,
    .width = 2,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\234",
    .data = uint8_t_id + 574,
    .advance = 4,
    .offset_x = 1,
    .offset_y = 3,
    .width = 3,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\235",
    .data = uint8_t_id + 576,
    .advance = 4,
    .offset_x = 0,
    .offset_y = 3,
    .width = 4,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\242",
    .data = uint8_t_id + 578,
    .advance = 4,
    .offset_x = 1,
    .offset_y = 6,
    .width = 2,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\246",
    .data = uint8_t_id + 579,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 11,
    .width = 6,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\202\254",
    .data = uint8_t_id + 580,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\204\242",
    .data = uint8_t_id + 586,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 3,
    .width = 5,
    .height = 4,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\210\222",
    .data = uint8_t_id + 589,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 7,
    .width = 5,
    .height = 1,
  }};
  roboto_font = new font::Font(font_glyphdata_id, 116, 12, 14, 3, 7, 9, 1);
  // font:
  //   file:
  //     family: Roboto
  //     weight: 400
  //     italic: false
  //     refresh: 1d
  //     type: gfonts
  //   id: roboto_font_large
  //   size: 24
  //   glyphs:
  //     - ' '
  //     - '!'
  //     - '"'
  //     - '#'
  //     - $
  //     - '%'
  //     - '&'
  //     - ''''
  //     - (
  //     - )
  //     - '*'
  //     - +
  //     - ','
  //     - '-'
  //     - .
  //     - /
  //     - '0'
  //     - '1'
  //     - '2'
  //     - '3'
  //     - '4'
  //     - '5'
  //     - '6'
  //     - '7'
  //     - '8'
  //     - '9'
  //     - ':'
  //     - ;
  //     - <
  //     - '='
  //     - '>'
  //     - '?'
  //     - '@'
  //     - A
  //     - B
  //     - C
  //     - D
  //     - E
  //     - F
  //     - G
  //     - H
  //     - I
  //     - J
  //     - K
  //     - L
  //     - M
  //     - N
  //     - O
  //     - P
  //     - Q
  //     - R
  //     - S
  //     - T
  //     - U
  //     - V
  //     - W
  //     - X
  //     - Y
  //     - Z
  //     - '['
  //     - 
  //     - ']'
  //     - ^
  //     - _
  //     - '`'
  //     - a
  //     - b
  //     - c
  //     - d
  //     - e
  //     - f
  //     - g
  //     - h
  //     - i
  //     - j
  //     - k
  //     - l
  //     - m
  //     - n
  //     - o
  //     - p
  //     - q
  //     - r
  //     - s
  //     - t
  //     - u
  //     - v
  //     - w
  //     - x
  //     - y
  //     - z
  //     - '{'
  //     - '|'
  //     - '}'
  //     - '~'
  //     -  
  //     - ¢
  //     - £
  //     - ¥
  //     - ©
  //     - ®
  //     - °
  //     - ·
  //     - ×
  //     - ÷
  //     - –
  //     - —
  //     - ‘
  //     - ’
  //     - “
  //     - ”
  //     - •
  //     - …
  //     - €
  //     - ™
  //     - −
  //   glyphsets: []
  //   ignore_missing_glyphs: false
  //   bpp: 1
  //   extras: []
  //   raw_data_id: uint8_t_id_2
  //   raw_glyph_id: font_glyphdata_id_2
  static const uint8_t uint8_t_id_2[] PROGMEM = {0x00, 0xFF, 0xFF, 0xFF, 0xC3, 0xC0, 0x99, 0x99, 0x99, 0x06, 0x30, 0x31, 0x81, 0x8C, 0x0C, 0x47, 0xFF, 0xBF, 0xFC, 0x31, 0x81, 0x8C, 0x0C, 0x40, 0x46, 0x02, 0x31, 0xFF, 0xFF, 0xFF, 0x8C, 0x40, 0x42, 0x02, 0x30, 0x31, 0x80, 0x06, 0x00, 0xC0, 0x18, 0x0F, 0x83, 0xFC, 0xE1, 0xD8, 0x1B, 0x03, 0x60, 0x0E, 0x00, 0xF0, 0x0F, 0xC0, 0x3C, 0x01, 0xC0, 0x1E, 0x03, 0xE0, 0x6E, 0x1C, 0xFF, 0x0F, 0xC0, 0x60, 0x0C, 0x00, 0x3C, 0x00, 0x6E, 0x00, 0xC6, 0x10, 0xC2, 0x30, 0xC2, 0x20, 0xC6, 0x60, 0x6E, 0xC0, 0x3C, 0x80, 0x01, 0x80, 0x03, 0x3C, 0x02, 0x7E, 0x06, 0x42, 0x0C, 0x43, 0x0C, 0x43, 0x18, 0x42, 0x00, 0x7E, 0x00, 0x3C, 0x0F, 0x00, 0xFE, 0x03, 0x0C, 0x0C, 0x30, 0x30, 0xC0, 0xC6, 0x03, 0xF0, 0x07, 0x80, 0x1E, 0x01, 0xDC, 0x66, 0x31, 0xB8, 0x6E, 0xC1, 0xF3, 0x83, 0xC6, 0x0F, 0x1F, 0xFE, 0x1F, 0x18, 0xFF, 0xF0, 0x04, 0x71, 0x8C, 0x61, 0x86, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x06, 0x18, 0x60, 0xC1, 0x87, 0x04, 0x40, 0xC0, 0xC1, 0x81, 0x83, 0x03, 0x06, 0x0C, 0x18, 0x38, 0x70, 0xE1, 0xC3, 0x86, 0x0C, 0x18, 0x30, 0xC1, 0x86, 0x0C, 0x30, 0x40, 0x0C, 0x03, 0x00, 0xC1, 0xB3, 0xFF, 0xC3, 0x81, 0xE0, 0xEC, 0x33, 0x08, 0x40, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x06, 0x0F, 0xFF, 0xFF, 0xF0, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x60, 0x77, 0x76, 0x64, 0xFF, 0xF0, 0xBC, 0x01, 0x80, 0xC0, 0xC0, 0x60, 0x20, 0x30, 0x18, 0x18, 0x0C, 0x04, 0x06, 0x03, 0x03, 0x01, 0x80, 0x80, 0xC0, 0x60, 0x60, 0x00, 0x1F, 0x07, 0xF9, 0xC3, 0x30, 0x76, 0x07, 0xC0, 0xF8, 0x1F, 0x03, 0xE0, 0x7C, 0x0F, 0x81, 0xF0, 0x36, 0x06, 0xC1, 0xDC, 0x31, 0xFE, 0x1F, 0x00, 0x06, 0x7F, 0xFE, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1F, 0x07, 0xFC, 0x60, 0xCE, 0x0E, 0xC0, 0x60, 0x06, 0x00, 0xC0, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xE0, 0x1C, 0x03, 0x80, 0x70, 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0x07, 0xF9, 0x83, 0x70, 0x7C, 0x0E, 0x01, 0xC0, 0x30, 0x7C, 0x0F, 0x80, 0x38, 0x03, 0x80, 0x3C, 0x07, 0xC1, 0xD8, 0x33, 0xFE, 0x1F, 0x00, 0x01, 0xC0, 0x3C, 0x03, 0xC0, 0x7C, 0x0D, 0xC0, 0xDC, 0x19, 0xC3, 0x1C, 0x31, 0xC6, 0x1C, 0xE1, 0xCF, 0xFF, 0xFF, 0xF0, 0x1C, 0x01, 0xC0, 0x1C, 0x01, 0xC0, 0x7F, 0xCF, 0xF9, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x1F, 0xC3, 0xFC, 0xE1, 0xC0, 0x18, 0x03, 0x00, 0x7C, 0x0D, 0x81, 0x98, 0x73, 0xFC, 0x1F, 0x00, 0x0F, 0x07, 0xC3, 0x81, 0x80, 0xE0, 0x30, 0x0D, 0xF3, 0xFE, 0xE1, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x36, 0x1D, 0xFE, 0x1E, 0x00, 0xFF, 0xFF, 0xFC, 0x01, 0x80, 0x60, 0x0C, 0x03, 0x80, 0x60, 0x1C, 0x03, 0x00, 0x60, 0x18, 0x03, 0x00, 0xC0, 0x18, 0x07, 0x00, 0xC0, 0x38, 0x00, 0x1F, 0x07, 0xF9, 0xC3, 0x30, 0x76, 0x06, 0xC1, 0xDC, 0x31, 0xFC, 0x3F, 0x8E, 0x19, 0x81, 0xF0, 0x3E, 0x07, 0xC0, 0xD8, 0x39, 0xFE, 0x1F, 0x00, 0x1F, 0x07, 0xF1, 0x87, 0x70, 0x6C, 0x0F, 0x80, 0xF0, 0x1F, 0x07, 0x71, 0xE7, 0xEC, 0x79, 0x80, 0x70, 0x0C, 0x03, 0x80, 0xE0, 0xF8, 0x1C, 0x00, 0x7C, 0x00, 0x07, 0xC0, 0x27, 0x30, 0x00, 0x00, 0x00, 0x33, 0x36, 0x64, 0x00, 0x81, 0xC3, 0xE7, 0xCF, 0x86, 0x03, 0xC0, 0x7C, 0x0F, 0x81, 0xC0, 0x20, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFC, 0x80, 0x38, 0x0F, 0x80, 0xF8, 0x07, 0x80, 0x70, 0x78, 0xF8, 0xF8, 0x38, 0x08, 0x00, 0x3E, 0x3F, 0xF8, 0xF8, 0x30, 0x18, 0x0C, 0x0E, 0x0E, 0x0E, 0x06, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x00, 0x01, 0xFC, 0x00, 0xFF, 0xE0, 0x38, 0x0E, 0x0C, 0x00, 0x63, 0x00, 0x04, 0x60, 0xF0, 0xD8, 0x7F, 0x1B, 0x0C, 0x61, 0x43, 0x0C, 0x38, 0x61, 0x87, 0x08, 0x30, 0xE3, 0x04, 0x1C, 0x60, 0x83, 0x8C, 0x30, 0xD0, 0xC6, 0x13, 0x1F, 0x6E, 0x61, 0xC7, 0x84, 0x00, 0x00, 0xC0, 0x00, 0x0C, 0x00, 0x00, 0xFB, 0xC0, 0x07, 0xF0, 0x00, 0x01, 0x80, 0x07, 0x00, 0x0F, 0x00, 0x3E, 0x00, 0x6E, 0x00, 0xCC, 0x03, 0x98, 0x06, 0x18, 0x0C, 0x30, 0x30, 0x60, 0x60, 0x61, 0xFF, 0xC3, 0xFF, 0xC6, 0x01, 0x9C, 0x03, 0x30, 0x07, 0x60, 0x06, 0xFF, 0x8F, 0xFC, 0xC0, 0xEC, 0x06, 0xC0, 0x6C, 0x06, 0xC0, 0xEF, 0xFC, 0xFF, 0xCC, 0x0E, 0xC0, 0x6C, 0x07, 0xC0, 0x7C, 0x06, 0xC0, 0xEF, 0xFC, 0xFF, 0x80, 0x07, 0xC0, 0x7F, 0xC3, 0x83, 0x1C, 0x06, 0x60, 0x19, 0x80, 0x6E, 0x00, 0x38, 0x00, 0xE0, 0x03, 0x80, 0x0E, 0x00, 0x18, 0x06, 0x60, 0x19, 0xC0, 0xE3, 0x83, 0x07, 0xFC, 0x0F, 0xC0, 0xFF, 0x0F, 0xFC, 0xC0, 0xEC, 0x06, 0xC0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x7C, 0x06, 0xC1, 0xEF, 0xFC, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x07, 0xFE, 0xFF, 0xD8, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x07, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x07, 0xFC, 0xFF, 0x98, 0x03, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x00, 0x0F, 0xC0, 0x7F, 0xC3, 0x83, 0x9C, 0x06, 0x60, 0x19, 0x80, 0x0E, 0x00, 0x38, 0x00, 0xE1, 0xFF, 0x87, 0xF6, 0x01, 0xD8, 0x07, 0x60, 0x1D, 0xC0, 0x73, 0x81, 0xC7, 0xFE, 0x07, 0xE0, 0xC0, 0x1E, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x7F, 0xFF, 0xFF, 0xFE, 0x00, 0xF0, 0x07, 0x80, 0x3C, 0x01, 0xE0, 0x0F, 0x00, 0x78, 0x03, 0xC0, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xC0, 0xF0, 0x3E, 0x1D, 0xFE, 0x3F, 0x00, 0xC0, 0x76, 0x07, 0x30, 0x31, 0x83, 0x0C, 0x38, 0x63, 0x83, 0x38, 0x1B, 0x80, 0xFE, 0x07, 0xB0, 0x39, 0xC1, 0x87, 0x0C, 0x1C, 0x60, 0x63, 0x03, 0x98, 0x0E, 0xC0, 0x38, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x0C, 0x03, 0xFF, 0xFF, 0xC0, 0xE0, 0x03, 0xF0, 0x03, 0xFC, 0x01, 0xFE, 0x00, 0xFD, 0x80, 0xDE, 0xC0, 0x6F, 0x70, 0x77, 0x98, 0x33, 0xCC, 0x19, 0xE3, 0x18, 0xF1, 0x8C, 0x78, 0xEE, 0x3C, 0x36, 0x1E, 0x1B, 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0x80, 0xE0, 0x1F, 0x00, 0xFC, 0x07, 0xF0, 0x3D, 0x81, 0xEE, 0x0F, 0x38, 0x78, 0xC3, 0xC7, 0x1E, 0x18, 0xF0, 0x67, 0x83, 0xBC, 0x0D, 0xE0, 0x3F, 0x01, 0xF8, 0x07, 0xC0, 0x38, 0x07, 0xC0, 0x7F, 0xC3, 0x83, 0x9C, 0x06, 0x60, 0x1D, 0x80, 0x3E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xD8, 0x03, 0x60, 0x1D, 0xC0, 0x63, 0x83, 0x87, 0xFC, 0x07, 0xC0, 0xFF, 0x8F, 0xFE, 0xC0, 0x7C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x07, 0xFF, 0xEF, 0xF8, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x0C, 0x00, 0xC0, 0x00, 0x07, 0xC0, 0x7F, 0x83, 0x87, 0x1C, 0x06, 0x60, 0x19, 0x80, 0x7E, 0x00, 0xF8, 0x03, 0xE0, 0x0F, 0x80, 0x3E, 0x00, 0xD8, 0x07, 0x60, 0x19, 0xC0, 0x63, 0x87, 0x07, 0xFC, 0x0F, 0xF0, 0x00, 0xE0, 0x01, 0xC0, 0x02, 0xFF, 0x8F, 0xFC, 0xC0, 0xEC, 0x06, 0xC0, 0x7C, 0x07, 0xC0, 0x6C, 0x0E, 0xFF, 0xCF, 0xF0, 0xC1, 0x8C, 0x18, 0xC0, 0xCC, 0x0E, 0xC0, 0x6C, 0x07, 0xC0, 0x30, 0x0F, 0x83, 0xFE, 0x70, 0x76, 0x03, 0xE0, 0x36, 0x00, 0x70, 0x03, 0xE0, 0x0F, 0xC0, 0x3E, 0x00, 0x70, 0x03, 0xC0, 0x3E, 0x03, 0x70, 0x73, 0xFE, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xC1, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x06, 0x00, 0x30, 0x01, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x06, 0x00, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x03, 0xC0, 0x3C, 0x07, 0xE0, 0xE7, 0xFC, 0x1F, 0x00, 0x60, 0x0E, 0xC0, 0x19, 0xC0, 0x31, 0x80, 0xE3, 0x01, 0x87, 0x03, 0x06, 0x0E, 0x0C, 0x18, 0x1C, 0x30, 0x18, 0xC0, 0x31, 0x80, 0x37, 0x00, 0x6C, 0x00, 0xD8, 0x00, 0xF0, 0x01, 0xC0, 0x03, 0x80, 0xC0, 0x60, 0x7C, 0x0E, 0x06, 0xE0, 0xE0, 0x66, 0x0F, 0x06, 0x60, 0xF0, 0xE6, 0x1B, 0x0C, 0x61, 0x98, 0xC3, 0x19, 0x8C, 0x33, 0x18, 0xC3, 0x31, 0x98, 0x33, 0x0D, 0x81, 0xB0, 0xD8, 0x1E, 0x0D, 0x81, 0xE0, 0x58, 0x1E, 0x07, 0x01, 0xC0, 0x70, 0x0C, 0x07, 0x00, 0xE0, 0x3B, 0x01, 0x9C, 0x1C, 0x71, 0xC1, 0x8C, 0x0E, 0xE0, 0x3E, 0x00, 0xF0, 0x07, 0x00, 0x3C, 0x03, 0x60, 0x3B, 0x81, 0x8E, 0x1C, 0x31, 0xC1, 0xCC, 0x06, 0xE0, 0x38, 0xE0, 0x1D, 0xC0, 0x63, 0x03, 0x8E, 0x0C, 0x18, 0x70, 0x71, 0x80, 0xCE, 0x03, 0xB0, 0x07, 0xC0, 0x1E, 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x03, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x60, 0x0E, 0x00, 0xC0, 0x18, 0x03, 0x80, 0x70, 0x06, 0x00, 0xE0, 0x1C, 0x01, 0x80, 0x38, 0x07, 0x00, 0x60, 0x0F, 0xFF, 0xFF, 0xF0, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFF, 0x60, 0x18, 0x07, 0x00, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x70, 0x0C, 0x03, 0x00, 0x60, 0x18, 0x07, 0x00, 0xC0, 0x30, 0x06, 0x01, 0x80, 0x60, 0xFF, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9C, 0xE7, 0x39, 0xCE, 0x73, 0x9F, 0xFF, 0x18, 0x18, 0x3C, 0x3C, 0x64, 0x66, 0x66, 0xC3, 0xC3, 0xFF, 0xFF, 0xFC, 0xE3, 0x0C, 0x1F, 0x07, 0xF1, 0x83, 0x30, 0x60, 0x0C, 0x3F, 0x9F, 0xF3, 0x06, 0xE0, 0xDC, 0x19, 0x87, 0x3F, 0xE3, 0xEE, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x37, 0xCF, 0xFB, 0x87, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x87, 0xFF, 0xB7, 0xC0, 0x1F, 0x07, 0xF1, 0xC3, 0x30, 0x7C, 0x07, 0x80, 0x30, 0x06, 0x00, 0xC0, 0x0C, 0x0D, 0xC3, 0x1F, 0xE1, 0xF0, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x06, 0x3C, 0xCF, 0xFB, 0x87, 0x60, 0x7C, 0x0F, 0x01, 0xE0, 0x3C, 0x07, 0xC0, 0xD8, 0x1B, 0x87, 0x3F, 0xE3, 0xCC, 0x1F, 0x07, 0xF1, 0xC3, 0x30, 0x6E, 0x07, 0xFF, 0xFF, 0xFE, 0x00, 0xE0, 0x0C, 0x01, 0xC3, 0x9F, 0xE1, 0xF0, 0x0E, 0x7C, 0xC1, 0x83, 0x1F, 0xFF, 0x98, 0x30, 0x60, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x1E, 0x67, 0xFD, 0xC3, 0xB0, 0x3E, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xE0, 0x6C, 0x0D, 0xC3, 0x9F, 0xF1, 0xE6, 0x00, 0xC0, 0x3B, 0x06, 0x7F, 0x83, 0xE0, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x37, 0xCF, 0xFB, 0x86, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x70, 0xF0, 0xFF, 0xFF, 0xFF, 0xC0, 0x18, 0xC0, 0x01, 0x8C, 0x63, 0x18, 0xC6, 0x31, 0x8C, 0x63, 0x18, 0xC6, 0x7F, 0x78, 0xC0, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0xEC, 0x33, 0x18, 0xCC, 0x36, 0x0F, 0x83, 0xE0, 0xEC, 0x33, 0x8C, 0x73, 0x0C, 0xC1, 0xB0, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xDF, 0x1E, 0x7F, 0xDF, 0xF8, 0x78, 0x78, 0x38, 0x3C, 0x1C, 0x1E, 0x0E, 0x0F, 0x07, 0x07, 0x83, 0x83, 0xC1, 0xC1, 0xE0, 0xE0, 0xF0, 0x70, 0x78, 0x38, 0x3C, 0x1C, 0x18, 0xDF, 0x3F, 0xEE, 0x1B, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xC0, 0x1F, 0x03, 0xFC, 0x70, 0xE6, 0x06, 0xE0, 0x6C, 0x07, 0xC0, 0x7C, 0x07, 0xC0, 0x66, 0x06, 0x70, 0xE3, 0xFC, 0x1F, 0x00, 0xDF, 0x3F, 0xEE, 0x1F, 0x03, 0xC0, 0xF0, 0x3C, 0x0F, 0x03, 0xC0, 0xF0, 0x3E, 0x1F, 0xFE, 0xDF, 0x30, 0x0C, 0x03, 0x00, 0xC0, 0x30, 0x00, 0x1E, 0x67, 0xFD, 0xC3, 0xB0, 0x3E, 0x07, 0x80, 0xF0, 0x1E, 0x03, 0xE0, 0x6C, 0x0D, 0xC3, 0x9F, 0xF1, 0xE6, 0x00, 0xC0, 0x18, 0x03, 0x00, 0x60, 0x0C, 0xDF, 0xFE, 0x30, 0xC3, 0x0C, 0x30, 0xC3, 0x0C, 0x30, 0xC0, 0x1F, 0x1F, 0xE6, 0x1D, 0x83, 0x60, 0x1E, 0x01, 0xF0, 0x0F, 0x00, 0xF0, 0x3E, 0x0D, 0xFE, 0x1F, 0x00, 0x38, 0x70, 0xE7, 0xFF, 0xE7, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x07, 0x87, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x1F, 0x07, 0xC1, 0xF0, 0x7C, 0x3F, 0xFF, 0x3D, 0xC0, 0x60, 0x6C, 0x1D, 0x83, 0x18, 0x63, 0x0C, 0x63, 0x06, 0x60, 0xCC, 0x1B, 0x01, 0xE0, 0x3C, 0x07, 0x00, 0x60, 0x60, 0xC1, 0xB0, 0x60, 0xD8, 0x78, 0x6E, 0x3C, 0x63, 0x1E, 0x31, 0x99, 0x98, 0xCC, 0xCC, 0x36, 0x6C, 0x1A, 0x16, 0x0F, 0x0F, 0x07, 0x87, 0x81, 0x81, 0x80, 0xC0, 0xC0, 0x60, 0xE6, 0x18, 0xE7, 0x0C, 0xC0, 0xF0, 0x1E, 0x01, 0x80, 0x78, 0x1F, 0x03, 0x30, 0xE7, 0x38, 0x66, 0x06, 0xE0, 0x6C, 0x1D, 0x83, 0x18, 0x63, 0x1C, 0x63, 0x06, 0x60, 0xDC, 0x1B, 0x01, 0xE0, 0x38, 0x07, 0x00, 0x60, 0x18, 0x03, 0x00, 0xE0, 0x78, 0x0E, 0x00, 0xFF, 0xFF, 0xF0, 0x18, 0x0C, 0x07, 0x03, 0x80, 0xC0, 0x60, 0x38, 0x1C, 0x06, 0x03, 0xFF, 0xFF, 0xC0, 0x06, 0x18, 0x61, 0xC3, 0x06, 0x0C, 0x18, 0x30, 0x63, 0x87, 0x07, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xC1, 0x81, 0xC1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x40, 0xC0, 0xC1, 0xC1, 0x83, 0x06, 0x0C, 0x18, 0x30, 0x38, 0x71, 0xC3, 0x06, 0x0C, 0x18, 0x30, 0x61, 0xC3, 0x0C, 0x10, 0x00, 0x38, 0x1B, 0xE0, 0xF1, 0xCD, 0x87, 0xE8, 0x1E, 0x00, 0x00, 0x06, 0x00, 0xC0, 0x18, 0x0F, 0x83, 0xFC, 0xE1, 0x98, 0x3F, 0x03, 0xC0, 0x18, 0x03, 0x00, 0x70, 0x06, 0x06, 0xE1, 0x8F, 0xF0, 0xF8, 0x06, 0x00, 0xC0, 0x18, 0x00, 0x07, 0xC1, 0xFE, 0x38, 0x63, 0x07, 0x30, 0x33, 0x00, 0x30, 0x03, 0x00, 0xFF, 0x0F, 0xF0, 0x30, 0x03, 0x00, 0x30, 0x03, 0x00, 0x30, 0x0F, 0xFF, 0xFF, 0xF0, 0xE0, 0x36, 0x07, 0x70, 0x63, 0x0E, 0x38, 0xC1, 0x9C, 0x1D, 0x80, 0xF8, 0x0F, 0x07, 0xFE, 0x06, 0x00, 0x60, 0x7F, 0xE0, 0x60, 0x06, 0x00, 0x60, 0x06, 0x00, 0x03, 0xE0, 0x07, 0x3C, 0x0E, 0x03, 0x04, 0x00, 0xC6, 0x3E, 0x32, 0x31, 0x8B, 0x30, 0xC5, 0x18, 0x03, 0x8C, 0x01, 0xC6, 0x00, 0xF3, 0x0C, 0x48, 0xC6, 0x26, 0x3E, 0x31, 0x00, 0x30, 0xE0, 0x30, 0x1C, 0xF0, 0x03, 0xE0, 0x00, 0x03, 0xE0, 0x07, 0x3C, 0x0E, 0x03, 0x04, 0x00, 0xC6, 0x7E, 0x32, 0x37, 0x8B, 0x18, 0xC5, 0x0C, 0x63, 0x87, 0xE1, 0xC3, 0xF0, 0xF1, 0x8C, 0x48, 0xC6, 0x26, 0x63, 0x31, 0x00, 0x30, 0xE0, 0x30, 0x1C, 0xF0, 0x03, 0xE0, 0x00, 0x77, 0xE3, 0x1F, 0xB8, 0x3C, 0x40, 0x5C, 0x1D, 0xC7, 0x1D, 0xC1, 0xF0, 0x1C, 0x07, 0xC1, 0xDC, 0x71, 0xDC, 0x1D, 0x01, 0x00, 0x04, 0x00, 0xE0, 0x06, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x60, 0x0E, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0x2D, 0xED, 0x80, 0x6D, 0xED, 0x00, 0x26, 0xCD, 0xB6, 0x6C, 0xD9, 0x80, 0x6E, 0xDD, 0xB7, 0x6C, 0xD1, 0x00, 0xFF, 0xFF, 0xF0, 0x80, 0x2C, 0x73, 0xC6, 0x30, 0x03, 0xE1, 0xFC, 0x70, 0x0C, 0x03, 0x80, 0x70, 0x0C, 0x07, 0xFC, 0x30, 0x06, 0x03, 0xFE, 0x1C, 0x03, 0x80, 0x30, 0x07, 0x00, 0x7F, 0x03, 0xE0, 0xFA, 0x32, 0x33, 0x23, 0x52, 0x35, 0x22, 0xD2, 0x29, 0xFF, 0xFF, 0xF0};
  static const font::GlyphData font_glyphdata_id_2[] = {font::GlyphData{
    .a_char = (const uint8_t *)" ",
    .data = uint8_t_id_2 + 0,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 22,
    .width = 1,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"!",
    .data = uint8_t_id_2 + 1,
    .advance = 6,
    .offset_x = 2,
    .offset_y = 6,
    .width = 2,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\042",
    .data = uint8_t_id_2 + 6,
    .advance = 8,
    .offset_x = 2,
    .offset_y = 5,
    .width = 4,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"#",
    .data = uint8_t_id_2 + 9,
    .advance = 15,
    .offset_x = 1,
    .offset_y = 6,
    .width = 13,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"$",
    .data = uint8_t_id_2 + 37,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 3,
    .width = 11,
    .height = 22,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"%",
    .data = uint8_t_id_2 + 68,
    .advance = 18,
    .offset_x = 1,
    .offset_y = 6,
    .width = 16,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"&",
    .data = uint8_t_id_2 + 102,
    .advance = 15,
    .offset_x = 1,
    .offset_y = 6,
    .width = 14,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"'",
    .data = uint8_t_id_2 + 132,
    .advance = 4,
    .offset_x = 1,
    .offset_y = 5,
    .width = 2,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"(",
    .data = uint8_t_id_2 + 134,
    .advance = 8,
    .offset_x = 2,
    .offset_y = 4,
    .width = 6,
    .height = 25,
  }, font::GlyphData{
    .a_char = (const uint8_t *)")",
    .data = uint8_t_id_2 + 153,
    .advance = 8,
    .offset_x = 0,
    .offset_y = 4,
    .width = 7,
    .height = 25,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"*",
    .data = uint8_t_id_2 + 175,
    .advance = 10,
    .offset_x = 0,
    .offset_y = 6,
    .width = 10,
    .height = 10,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"+",
    .data = uint8_t_id_2 + 188,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 9,
    .width = 12,
    .height = 12,
  }, font::GlyphData{
    .a_char = (const uint8_t *)",",
    .data = uint8_t_id_2 + 206,
    .advance = 5,
    .offset_x = 0,
    .offset_y = 20,
    .width = 4,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"-",
    .data = uint8_t_id_2 + 209,
    .advance = 7,
    .offset_x = 0,
    .offset_y = 15,
    .width = 6,
    .height = 2,
  }, font::GlyphData{
    .a_char = (const uint8_t *)".",
    .data = uint8_t_id_2 + 211,
    .advance = 6,
    .offset_x = 2,
    .offset_y = 20,
    .width = 2,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"/",
    .data = uint8_t_id_2 + 212,
    .advance = 10,
    .offset_x = 0,
    .offset_y = 6,
    .width = 9,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"0",
    .data = uint8_t_id_2 + 233,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"1",
    .data = uint8_t_id_2 + 257,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 6,
    .width = 7,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"2",
    .data = uint8_t_id_2 + 272,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"3",
    .data = uint8_t_id_2 + 298,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"4",
    .data = uint8_t_id_2 + 322,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"5",
    .data = uint8_t_id_2 + 348,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"6",
    .data = uint8_t_id_2 + 372,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 6,
    .width = 10,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"7",
    .data = uint8_t_id_2 + 394,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"8",
    .data = uint8_t_id_2 + 418,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"9",
    .data = uint8_t_id_2 + 442,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)":",
    .data = uint8_t_id_2 + 466,
    .advance = 6,
    .offset_x = 2,
    .offset_y = 10,
    .width = 2,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)";",
    .data = uint8_t_id_2 + 470,
    .advance = 5,
    .offset_x = 0,
    .offset_y = 10,
    .width = 4,
    .height = 16,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"<",
    .data = uint8_t_id_2 + 478,
    .advance = 12,
    .offset_x = 1,
    .offset_y = 10,
    .width = 9,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"=",
    .data = uint8_t_id_2 + 491,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 11,
    .width = 10,
    .height = 7,
  }, font::GlyphData{
    .a_char = (const uint8_t *)">",
    .data = uint8_t_id_2 + 500,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 10,
    .width = 10,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"?",
    .data = uint8_t_id_2 + 514,
    .advance = 11,
    .offset_x = 1,
    .offset_y = 6,
    .width = 9,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"@",
    .data = uint8_t_id_2 + 534,
    .advance = 22,
    .offset_x = 1,
    .offset_y = 6,
    .width = 19,
    .height = 22,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"A",
    .data = uint8_t_id_2 + 587,
    .advance = 16,
    .offset_x = 0,
    .offset_y = 6,
    .width = 15,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"B",
    .data = uint8_t_id_2 + 619,
    .advance = 15,
    .offset_x = 2,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"C",
    .data = uint8_t_id_2 + 645,
    .advance = 16,
    .offset_x = 1,
    .offset_y = 6,
    .width = 14,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"D",
    .data = uint8_t_id_2 + 675,
    .advance = 16,
    .offset_x = 2,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"E",
    .data = uint8_t_id_2 + 701,
    .advance = 14,
    .offset_x = 2,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"F",
    .data = uint8_t_id_2 + 725,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"G",
    .data = uint8_t_id_2 + 749,
    .advance = 16,
    .offset_x = 1,
    .offset_y = 6,
    .width = 14,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"H",
    .data = uint8_t_id_2 + 779,
    .advance = 17,
    .offset_x = 2,
    .offset_y = 6,
    .width = 13,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"I",
    .data = uint8_t_id_2 + 807,
    .advance = 7,
    .offset_x = 2,
    .offset_y = 6,
    .width = 2,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"J",
    .data = uint8_t_id_2 + 812,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 10,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"K",
    .data = uint8_t_id_2 + 834,
    .advance = 15,
    .offset_x = 2,
    .offset_y = 6,
    .width = 13,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"L",
    .data = uint8_t_id_2 + 862,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 6,
    .width = 10,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"M",
    .data = uint8_t_id_2 + 884,
    .advance = 21,
    .offset_x = 2,
    .offset_y = 6,
    .width = 17,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"N",
    .data = uint8_t_id_2 + 921,
    .advance = 17,
    .offset_x = 2,
    .offset_y = 6,
    .width = 13,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"O",
    .data = uint8_t_id_2 + 949,
    .advance = 17,
    .offset_x = 1,
    .offset_y = 6,
    .width = 14,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"P",
    .data = uint8_t_id_2 + 979,
    .advance = 15,
    .offset_x = 2,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"Q",
    .data = uint8_t_id_2 + 1005,
    .advance = 17,
    .offset_x = 1,
    .offset_y = 6,
    .width = 14,
    .height = 20,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"R",
    .data = uint8_t_id_2 + 1040,
    .advance = 15,
    .offset_x = 2,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"S",
    .data = uint8_t_id_2 + 1066,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"T",
    .data = uint8_t_id_2 + 1092,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 6,
    .width = 13,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"U",
    .data = uint8_t_id_2 + 1120,
    .advance = 16,
    .offset_x = 2,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"V",
    .data = uint8_t_id_2 + 1146,
    .advance = 15,
    .offset_x = 0,
    .offset_y = 6,
    .width = 15,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"W",
    .data = uint8_t_id_2 + 1178,
    .advance = 21,
    .offset_x = 1,
    .offset_y = 6,
    .width = 20,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"X",
    .data = uint8_t_id_2 + 1221,
    .advance = 15,
    .offset_x = 1,
    .offset_y = 6,
    .width = 13,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"Y",
    .data = uint8_t_id_2 + 1249,
    .advance = 14,
    .offset_x = 0,
    .offset_y = 6,
    .width = 14,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"Z",
    .data = uint8_t_id_2 + 1279,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"[",
    .data = uint8_t_id_2 + 1305,
    .advance = 6,
    .offset_x = 2,
    .offset_y = 3,
    .width = 4,
    .height = 24,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\134",
    .data = uint8_t_id_2 + 1317,
    .advance = 10,
    .offset_x = 0,
    .offset_y = 6,
    .width = 10,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"]",
    .data = uint8_t_id_2 + 1340,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 3,
    .width = 5,
    .height = 24,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"^",
    .data = uint8_t_id_2 + 1355,
    .advance = 10,
    .offset_x = 1,
    .offset_y = 6,
    .width = 8,
    .height = 9,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"_",
    .data = uint8_t_id_2 + 1364,
    .advance = 11,
    .offset_x = 0,
    .offset_y = 23,
    .width = 11,
    .height = 2,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"`",
    .data = uint8_t_id_2 + 1367,
    .advance = 7,
    .offset_x = 1,
    .offset_y = 5,
    .width = 5,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"a",
    .data = uint8_t_id_2 + 1369,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 10,
    .width = 11,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"b",
    .data = uint8_t_id_2 + 1387,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 5,
    .width = 10,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"c",
    .data = uint8_t_id_2 + 1410,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 10,
    .width = 11,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"d",
    .data = uint8_t_id_2 + 1428,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 5,
    .width = 11,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"e",
    .data = uint8_t_id_2 + 1453,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 10,
    .width = 11,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"f",
    .data = uint8_t_id_2 + 1471,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 5,
    .width = 7,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"g",
    .data = uint8_t_id_2 + 1487,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 10,
    .width = 11,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"h",
    .data = uint8_t_id_2 + 1512,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 5,
    .width = 10,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"i",
    .data = uint8_t_id_2 + 1535,
    .advance = 6,
    .offset_x = 2,
    .offset_y = 6,
    .width = 2,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"j",
    .data = uint8_t_id_2 + 1540,
    .advance = 6,
    .offset_x = -1,
    .offset_y = 6,
    .width = 5,
    .height = 22,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"k",
    .data = uint8_t_id_2 + 1554,
    .advance = 12,
    .offset_x = 2,
    .offset_y = 5,
    .width = 10,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"l",
    .data = uint8_t_id_2 + 1577,
    .advance = 6,
    .offset_x = 2,
    .offset_y = 5,
    .width = 2,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"m",
    .data = uint8_t_id_2 + 1582,
    .advance = 21,
    .offset_x = 2,
    .offset_y = 10,
    .width = 17,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"n",
    .data = uint8_t_id_2 + 1610,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 10,
    .width = 10,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"o",
    .data = uint8_t_id_2 + 1627,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 10,
    .width = 12,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"p",
    .data = uint8_t_id_2 + 1647,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 10,
    .width = 10,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"q",
    .data = uint8_t_id_2 + 1670,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 10,
    .width = 11,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"r",
    .data = uint8_t_id_2 + 1695,
    .advance = 8,
    .offset_x = 2,
    .offset_y = 10,
    .width = 6,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"s",
    .data = uint8_t_id_2 + 1705,
    .advance = 12,
    .offset_x = 1,
    .offset_y = 10,
    .width = 10,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"t",
    .data = uint8_t_id_2 + 1722,
    .advance = 8,
    .offset_x = 0,
    .offset_y = 7,
    .width = 7,
    .height = 16,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"u",
    .data = uint8_t_id_2 + 1736,
    .advance = 13,
    .offset_x = 2,
    .offset_y = 10,
    .width = 10,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"v",
    .data = uint8_t_id_2 + 1753,
    .advance = 12,
    .offset_x = 0,
    .offset_y = 10,
    .width = 11,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"w",
    .data = uint8_t_id_2 + 1771,
    .advance = 18,
    .offset_x = 0,
    .offset_y = 10,
    .width = 17,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"x",
    .data = uint8_t_id_2 + 1799,
    .advance = 12,
    .offset_x = 0,
    .offset_y = 10,
    .width = 11,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"y",
    .data = uint8_t_id_2 + 1817,
    .advance = 11,
    .offset_x = 0,
    .offset_y = 10,
    .width = 11,
    .height = 18,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"z",
    .data = uint8_t_id_2 + 1842,
    .advance = 12,
    .offset_x = 1,
    .offset_y = 10,
    .width = 10,
    .height = 13,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"{",
    .data = uint8_t_id_2 + 1859,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 4,
    .width = 7,
    .height = 23,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"|",
    .data = uint8_t_id_2 + 1880,
    .advance = 6,
    .offset_x = 2,
    .offset_y = 6,
    .width = 2,
    .height = 20,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"}",
    .data = uint8_t_id_2 + 1885,
    .advance = 8,
    .offset_x = 0,
    .offset_y = 4,
    .width = 7,
    .height = 23,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"~",
    .data = uint8_t_id_2 + 1906,
    .advance = 16,
    .offset_x = 2,
    .offset_y = 13,
    .width = 13,
    .height = 5,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\240",
    .data = uint8_t_id_2 + 1915,
    .advance = 6,
    .offset_x = 0,
    .offset_y = 22,
    .width = 1,
    .height = 1,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\242",
    .data = uint8_t_id_2 + 1916,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 7,
    .width = 11,
    .height = 19,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\243",
    .data = uint8_t_id_2 + 1943,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\245",
    .data = uint8_t_id_2 + 1969,
    .advance = 13,
    .offset_x = 0,
    .offset_y = 6,
    .width = 12,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\251",
    .data = uint8_t_id_2 + 1995,
    .advance = 19,
    .offset_x = 1,
    .offset_y = 6,
    .width = 17,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\256",
    .data = uint8_t_id_2 + 2032,
    .advance = 19,
    .offset_x = 1,
    .offset_y = 6,
    .width = 17,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\260",
    .data = uint8_t_id_2 + 2069,
    .advance = 9,
    .offset_x = 2,
    .offset_y = 6,
    .width = 5,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\302\267",
    .data = uint8_t_id_2 + 2073,
    .advance = 6,
    .offset_x = 2,
    .offset_y = 13,
    .width = 2,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\303\227",
    .data = uint8_t_id_2 + 2074,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 10,
    .width = 11,
    .height = 11,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\303\267",
    .data = uint8_t_id_2 + 2090,
    .advance = 14,
    .offset_x = 1,
    .offset_y = 9,
    .width = 12,
    .height = 12,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\223",
    .data = uint8_t_id_2 + 2108,
    .advance = 16,
    .offset_x = 2,
    .offset_y = 13,
    .width = 12,
    .height = 2,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\224",
    .data = uint8_t_id_2 + 2111,
    .advance = 19,
    .offset_x = 2,
    .offset_y = 13,
    .width = 15,
    .height = 2,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\230",
    .data = uint8_t_id_2 + 2115,
    .advance = 5,
    .offset_x = 1,
    .offset_y = 4,
    .width = 3,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\231",
    .data = uint8_t_id_2 + 2118,
    .advance = 5,
    .offset_x = 1,
    .offset_y = 5,
    .width = 3,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\234",
    .data = uint8_t_id_2 + 2121,
    .advance = 8,
    .offset_x = 1,
    .offset_y = 4,
    .width = 7,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\235",
    .data = uint8_t_id_2 + 2127,
    .advance = 9,
    .offset_x = 1,
    .offset_y = 5,
    .width = 7,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\242",
    .data = uint8_t_id_2 + 2133,
    .advance = 8,
    .offset_x = 2,
    .offset_y = 12,
    .width = 4,
    .height = 5,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\200\246",
    .data = uint8_t_id_2 + 2136,
    .advance = 16,
    .offset_x = 2,
    .offset_y = 20,
    .width = 12,
    .height = 3,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\202\254",
    .data = uint8_t_id_2 + 2141,
    .advance = 13,
    .offset_x = 1,
    .offset_y = 6,
    .width = 11,
    .height = 17,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\204\242",
    .data = uint8_t_id_2 + 2165,
    .advance = 15,
    .offset_x = 1,
    .offset_y = 6,
    .width = 12,
    .height = 6,
  }, font::GlyphData{
    .a_char = (const uint8_t *)"\342\210\222",
    .data = uint8_t_id_2 + 2174,
    .advance = 14,
    .offset_x = 2,
    .offset_y = 13,
    .width = 10,
    .height = 2,
  }};
  roboto_font_large = new font::Font(font_glyphdata_id_2, 116, 23, 28, 6, 13, 17, 1);
  // display.ssd1306_i2c:
  //   platform: ssd1306_i2c
  //   id: oled_display
  //   model: SSD1306_128X64
  //   address: 0x3C
  //   update_interval: 200ms
  //   lambda: !lambda |-
  //     const float pressure = id(pressure_sensor).state;
  //     const float voltage = id(sensor_voltage).state;
  //     const bool sensor_ok = !isnan(pressure) && !isnan(voltage) && voltage > 0.1;
  //   
  //      绘制标题栏
  //     it.filled_rectangle(0, 0, 128, 16, COLOR_ON);
  //     it.print(4, 4, id(roboto_font), COLOR_OFF, "PRESSURE");
  //   
  //     if (sensor_ok) {
  //       it.print(128 - 22, 4, id(roboto_font), COLOR_OFF, "OK");
  //     } else {
  //       it.print(128 - 26, 4, id(roboto_font), COLOR_OFF, "ERR");
  //     }
  //   
  //     if (!sensor_ok) {
  //       it.printf(it.get_width() / 2, 40, id(roboto_font), TextAlign::CENTER, "SENSOR ERR");
  //       return;
  //     }
  //   
  //      绘制主读数
  //     it.printf(it.get_width() / 2, 34, id(roboto_font_large), TextAlign::CENTER, "%.3f", pressure);
  //     it.print(it.get_width() - 2, 44, id(roboto_font), TextAlign::TOP_RIGHT, "MPa");
  //   
  //      绘制电压
  //     it.printf(4, 52, id(roboto_font), TextAlign::TOP_LEFT, "Vs: %.3f V", voltage);
  //   
  //      绘制进度条
  //     const int bar_x = 4, bar_y = 64 - 8, bar_w = 128 - 8, bar_h = 6;
  //     it.rectangle(bar_x, bar_y, bar_w, bar_h, COLOR_ON);
  //     float ratio = pressure / 0.2f;
  //     if (ratio < 0.0f) ratio = 0.0f;
  //     if (ratio > 1.0f) ratio = 1.0f;
  //     int filled_w = (int)(ratio * (bar_w - 2));
  //     if (filled_w > 0) {
  //       it.filled_rectangle(bar_x + 1, bar_y + 1, filled_w, bar_h - 2, COLOR_ON);
  //     }
  //   auto_clear_enabled: unspecified
  //   brightness: 1.0
  //   contrast: 1.0
  //   flip_x: true
  //   flip_y: true
  //   offset_x: 0
  //   offset_y: 0
  //   invert: false
  //   i2c_id: i2c_arduinoi2cbus_id
  oled_display = new ssd1306_i2c::I2CSSD1306();
  oled_display->set_update_interval(200);
  oled_display->set_component_source("display");
  App.register_component(oled_display);
  oled_display->set_auto_clear(true);
  oled_display->set_model(ssd1306_base::SSD1306_MODEL_128_64);
  oled_display->init_brightness(1.0f);
  oled_display->init_contrast(1.0f);
  oled_display->init_flip_x(true);
  oled_display->init_flip_y(true);
  oled_display->init_offset_x(0);
  oled_display->init_offset_y(0);
  oled_display->init_invert(false);
  oled_display->set_writer([=](display::Display & it) -> void {
      #line 116 "sensor.yaml"
      const float pressure = pressure_sensor->state;
      const float voltage = sensor_voltage->state;
      const bool sensor_ok = !isnan(pressure) && !isnan(voltage) && voltage > 0.1;
      
       
      it.filled_rectangle(0, 0, 128, 16, COLOR_ON);
      it.print(4, 4, roboto_font, COLOR_OFF, "PRESSURE");
      
      if (sensor_ok) {
        it.print(128 - 22, 4, roboto_font, COLOR_OFF, "OK");
      } else {
        it.print(128 - 26, 4, roboto_font, COLOR_OFF, "ERR");
      }
      
      if (!sensor_ok) {
        it.printf(it.get_width() / 2, 40, roboto_font, TextAlign::CENTER, "SENSOR ERR");
        return;
      }
      
       
      it.printf(it.get_width() / 2, 34, roboto_font_large, TextAlign::CENTER, "%.3f", pressure);
      it.print(it.get_width() - 2, 44, roboto_font, TextAlign::TOP_RIGHT, "MPa");
      
       
      it.printf(4, 52, roboto_font, TextAlign::TOP_LEFT, "Vs: %.3f V", voltage);
      
       
      const int bar_x = 4, bar_y = 64 - 8, bar_w = 128 - 8, bar_h = 6;
      it.rectangle(bar_x, bar_y, bar_w, bar_h, COLOR_ON);
      float ratio = pressure / 0.2f;
      if (ratio < 0.0f) ratio = 0.0f;
      if (ratio > 1.0f) ratio = 1.0f;
      int filled_w = (int)(ratio * (bar_w - 2));
      if (filled_w > 0) {
        it.filled_rectangle(bar_x + 1, bar_y + 1, filled_w, bar_h - 2, COLOR_ON);
      }
  });
  oled_display->set_i2c_bus(i2c_arduinoi2cbus_id);
  oled_display->set_i2c_address(0x3C);
  // preferences:
  //   id: preferences_intervalsyncer_id
  //   flash_write_interval: 60s
  preferences_intervalsyncer_id = new preferences::IntervalSyncer();
  preferences_intervalsyncer_id->set_write_interval(60000);
  preferences_intervalsyncer_id->set_component_source("preferences");
  App.register_component(preferences_intervalsyncer_id);
  // socket:
  //   implementation: bsd_sockets
  // md5:
  // =========== AUTO GENERATED CODE END ============
  App.setup();
}

void loop() {
  App.loop();
}
