14 Commits

76 changed files with 4025 additions and 494 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ TouchGFX/build
/TouchGFX/*_backup.touchgfx /TouchGFX/*_backup.touchgfx
/steering-wheel.ioc_bkp /steering-wheel.ioc_bkp
/STM32Make.make /STM32Make.make
/.stm32env

5
.gitmodules vendored
View File

@ -1,3 +1,8 @@
[submodule "Core/Lib/FT_CAN_AL"] [submodule "Core/Lib/FT_CAN_AL"]
path = Core/Lib/can-halal path = Core/Lib/can-halal
url = ssh://git@git.fasttube.de:313/FaSTTUBe/FT_CAN_AL.git url = ssh://git@git.fasttube.de:313/FaSTTUBe/FT_CAN_AL.git
[submodule "Core/Lib/can-halal/"]
url = ssh://git@git.fasttube.de:313/FaSTTUBe/can-halal.git
[submodule "Core/Lib/can-halal"]
path = Core/Lib/can-halal
url = ssh://git@git.fasttube.de:313/FaSTTUBe/can-halal.git

View File

@ -10,20 +10,39 @@ extern "C" {
#include "util.h" #include "util.h"
CountedEnum(ParamType, size_t, PF_BBAL, PF_SLIPREF, PF_MUMAX, PF_ASRP, PF_ASRON, CountedEnum(ParamType, size_t, PF_BBAL, PF_PLIM, PF_TORQUE, PF_SLIM,
PF_ASRI, PF_PLIM); PF_APPS0_MIN, PF_APPS0_MAX, PF_APPS1_MIN, PF_APPS1_MAX, PF_TV,
PF_TC, PF_TC_SLIPREF, PF_TC_MUMAX, PF_TC_P, PF_TC_I, PF_DRS_CLOSED,
PF_DRS_OPEN, PF_MAP);
typedef struct { typedef union {
float bbal; struct {
float slipref; float bbal;
float mumax; float plim;
unsigned asrp; float torque;
unsigned asri; float slim;
unsigned asron; float apps0_min;
unsigned plim; float apps0_max;
float apps1_min;
float apps1_max;
int tv;
int tc;
float tc_slipref;
float tc_mumax;
float tc_p;
float tc_i;
float drs_closed;
float drs_open;
int map;
};
// TODO: Use ParamType_COUNT somehow?
float valuesFloat[17];
int valuesInt[17];
} Params; } Params;
extern Params params; extern Params params;
// TODO: Use ParamType_COUNT somehow?
extern float param_steps[17];
void params_init(); void params_init();
void params_inc(ParamType param); void params_inc(ParamType param);

View File

@ -21,6 +21,8 @@ void vehicle_thread_entry(ULONG hfdcan_addr);
void vehicle_broadcast_buttons(GPIO_PinState *button_states); void vehicle_broadcast_buttons(GPIO_PinState *button_states);
void vehicle_broadcast_wishlist();
#endif // SIMULATOR #endif // SIMULATOR
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -7,6 +7,7 @@ extern "C" {
#include "params.h" #include "params.h"
#include "stw_defines.h" #include "stw_defines.h"
#include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#define NUM_CONES 12 #define NUM_CONES 12
@ -112,6 +113,7 @@ typedef struct {
int sdc_closed; int sdc_closed;
int pdu_sdc_active; int pdu_sdc_active;
int imd_ok; int imd_ok;
bool drs_active;
int sdcl_state[3]; int sdcl_state[3];
R2DProgress r2d_progress; R2DProgress r2d_progress;
@ -148,6 +150,7 @@ typedef struct {
IniChkState ini_chk_state; IniChkState ini_chk_state;
unsigned lap_count; unsigned lap_count;
unsigned lap_count_endu;
float lap_last; float lap_last;
float lap_best; float lap_best;
@ -160,6 +163,12 @@ typedef struct {
float lv_bat_voltage; float lv_bat_voltage;
int soc_lv; int soc_lv;
float bat_delta_last;
float bat_delta_overall;
uint8_t power_limit;
uint8_t speed_limit;
float ts_current; float ts_current;
float ts_voltage_bat; float ts_voltage_bat;
float ts_voltage_veh; float ts_voltage_veh;
@ -180,12 +189,29 @@ typedef struct {
float measured_angle; float measured_angle;
float desired_speed; float desired_speed;
float apps0_min;
float apps0_max;
float apps0_volt;
float apps0_out;
float apps1_min;
float apps1_max;
float apps1_volt;
float apps1_out;
ConePosition cone_pos[NUM_CONES]; ConePosition cone_pos[NUM_CONES];
ParamType last_param_confirmed; ParamType last_param_confirmed;
} VehicleState; } VehicleState;
typedef struct {
bool initialized;
uint8_t power_limit;
uint8_t speed_limit;
} DriverWishlist;
extern VehicleState vehicle_state; extern VehicleState vehicle_state;
extern DriverWishlist wishlist;
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"

View File

@ -80,31 +80,17 @@ void led_thread_entry(ULONG child_thread_stack_addr) {
continue; continue;
} }
float speed = for (int i = 0; i <= 3; i++) {
(vehicle_state.speed - LED_SPEED_MIN) / (LED_SPEED_MAX - LED_SPEED_MIN); int led_limit = (4 - i) * 3; // 3% per LED
float num_leds_exact = speed * N_LEDS; int red = (vehicle_state.bat_delta_last >= led_limit) ? 0xFF : 0;
num_leds_exact = fmin(N_LEDS, fmax(0, num_leds_exact)); led_set(i, red, 0, 0);
int num_leds = num_leds_exact;
float num_leds_frac = num_leds_exact - num_leds;
float hue =
LED_SPEED_HUE_MIN - speed * (LED_SPEED_HUE_MIN - LED_SPEED_HUE_MAX);
hue = fmin(LED_SPEED_HUE_MIN, fmax(LED_SPEED_HUE_MAX, hue));
uint8_t r, g, b;
led_hsv_to_rgb(hue, 1.0f, 1.0f, &r, &g, &b);
// Fully illuminate first n LEDs
for (int i = 0; i < num_leds; i++) {
led_set(i, r, g, b);
} }
// Partially illuminate n+1th LED int blue = (vehicle_state.drs_active) ? 0xFF : 0;
if (num_leds < N_LEDS) { led_set(4, 0, 0, blue);
led_hsv_to_rgb(hue, 1.0f, num_leds_frac, &r, &g, &b); for (int i = 5; i <= 9; i++) {
led_set(num_leds, r, g, b); int led_limit = -((i - 4) * 3); // 3% per LED
} int green = (vehicle_state.bat_delta_last <= led_limit) ? 0xFF : 0;
// Turn off all other LEDs led_set(i, 0, green, 0);
for (int i = num_leds + 1; i < N_LEDS; i++) {
led_set(i, 0, 0, 0);
} }
} }
} }

View File

@ -329,7 +329,7 @@ static void MX_FDCAN1_Init(void) {
hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8; hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_8;
hfdcan1.Init.TxEventsNbr = 0; hfdcan1.Init.TxEventsNbr = 0;
hfdcan1.Init.TxBuffersNbr = 0; hfdcan1.Init.TxBuffersNbr = 0;
hfdcan1.Init.TxFifoQueueElmtsNbr = 1; hfdcan1.Init.TxFifoQueueElmtsNbr = 32;
hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION; hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;
hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8; hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_8;
if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK) { if (HAL_FDCAN_Init(&hfdcan1) != HAL_OK) {

View File

@ -3,6 +3,75 @@
#include "vehicle.h" #include "vehicle.h"
Params params = {0}; Params params = {0};
static const float param_limits[] = {
[PF_BBAL] = 100.0f,
[PF_PLIM] = 120.0f,
[PF_TORQUE] = 1500.0f,
[PF_SLIM] = 150.0f,
[PF_APPS0_MIN] = 5.0f,
[PF_APPS0_MAX] = 5.0f,
[PF_APPS1_MIN] = 5.0f,
[PF_APPS1_MAX] = 5.0f,
[PF_TV] = 1,
[PF_TC] = 1,
[PF_TC_SLIPREF] = 1.0f,
[PF_TC_MUMAX] = 5.0f,
[PF_TC_P] = 20.0f,
[PF_TC_I] = 20.0f,
[PF_DRS_CLOSED] = 1.0f,
[PF_DRS_OPEN] = 1.0f,
// TODO: counted enum for map?
[PF_MAP] = 7,
};
float param_steps[] = {
[PF_BBAL] = 1,
[PF_PLIM] = 1,
[PF_TORQUE] = 10,
[PF_SLIM] = 1,
[PF_APPS0_MIN] = 0.001f,
[PF_APPS0_MAX] = 0.001f,
[PF_APPS1_MIN] = 0.001f,
[PF_APPS1_MAX] = 0.001f,
[PF_TV] = 1,
[PF_TC] = 1,
[PF_TC_SLIPREF] = 0.01f,
[PF_TC_MUMAX] = 0.1f,
[PF_TC_P] = 0.1f,
[PF_TC_I] = 0.1f,
[PF_DRS_CLOSED] = 0.001f,
[PF_DRS_OPEN] = 0.001f,
[PF_MAP] = 1,
};
static const float param_broadcast_factors[] = {
[PF_BBAL] = 1,
[PF_PLIM] = 1,
[PF_TORQUE] = 1,
[PF_SLIM] = 1,
[PF_APPS0_MIN] = 0.001f,
[PF_APPS0_MAX] = 0.001f,
[PF_APPS1_MIN] = 0.001f,
[PF_APPS1_MAX] = 0.001f,
[PF_TV] = 1,
[PF_TC] = 1,
[PF_TC_SLIPREF] = 0.001f,
[PF_TC_MUMAX] = 0.001f,
[PF_TC_P] = 0.001f,
[PF_TC_I] = 0.001f,
[PF_DRS_CLOSED] = 0.001f,
[PF_DRS_OPEN] = 0.001f,
[PF_MAP] = 1,
};
#ifdef __cplusplus
_Static_assert(sizeof(param_limits) / sizeof(param_limits[0]) ==
ParamType_COUNT,
"Incorrect number of param limits");
_Static_assert(sizeof(param_steps) / sizeof(param_steps[0]) == ParamType_COUNT,
"Incorrect number of param steps");
_Static_assert(sizeof(param_broadcast_factors) /
sizeof(param_broadcast_factors[0]) ==
ParamType_COUNT,
"Incorrect number of param broadcast factors");
#endif
void params_init() { void params_init() {
params.bbal = 50; params.bbal = 50;
@ -11,96 +80,50 @@ void params_init() {
void params_inc(ParamType param) { void params_inc(ParamType param) {
switch (param) { switch (param) {
case PF_BBAL: case PF_TV:
params.bbal += 0.5f; case PF_TC:
if (params.bbal > 100.0f) { case PF_MAP:
params.bbal = 100.0f; params.valuesInt[param] += param_steps[param];
if (params.valuesInt[param] > param_limits[param]) {
params.valuesInt[param] = param_limits[param];
} }
break; break;
case PF_SLIPREF: default:
params.slipref += 0.01f; params.valuesFloat[param] += param_steps[param];
break; if (params.valuesFloat[param] > param_limits[param]) {
case PF_MUMAX: params.valuesFloat[param] = param_limits[param];
params.mumax += 0.1f; }
break;
case PF_ASRP:
params.asrp++;
break;
case PF_ASRI:
params.asri++;
break;
case PF_ASRON:
params.asron = 1;
break;
case PF_PLIM:
params.plim = (params.plim < 80) ? params.plim + 1 : 80;
break;
} }
} }
void params_dec(ParamType param) { void params_dec(ParamType param) {
switch (param) { switch (param) {
case PF_BBAL: case PF_TV:
params.bbal -= 0.5f; case PF_TC:
if (params.bbal < 0.0f) { case PF_MAP:
params.bbal = 0.0f; params.valuesInt[param] -= param_steps[param];
if (params.valuesInt[param] < 0) {
params.valuesInt[param] = 0;
} }
break; break;
case PF_SLIPREF: default:
if (params.slipref > 0) { params.valuesFloat[param] -= param_steps[param];
params.slipref -= 0.01f; if (params.valuesFloat[param] < 0) {
params.valuesFloat[param] = 0;
} }
break;
case PF_MUMAX:
if (params.mumax > 0) {
params.mumax -= 0.1f;
}
break;
case PF_ASRP:
if (params.asrp > 0) {
params.asrp--;
}
break;
case PF_ASRI:
if (params.asri > 0) {
params.asri--;
}
break;
case PF_ASRON:
params.asron = 0;
break;
case PF_PLIM:
params.plim = (params.plim > 2) ? params.plim - 1 : 2;
break;
} }
} }
void params_broadcast(ParamType param) { void params_broadcast(ParamType param) {
int32_t value; int32_t value;
switch (param) { switch (param) {
case PF_BBAL: case PF_TV:
value = params.bbal * 10; case PF_TC:
break; case PF_MAP:
case PF_SLIPREF: value = params.valuesInt[param] / param_broadcast_factors[param];
value = params.slipref * 100;
break;
case PF_MUMAX:
value = params.mumax * 10;
break;
case PF_ASRP:
value = params.asrp;
break;
case PF_ASRI:
value = params.asri;
break;
case PF_ASRON:
value = params.asron;
break;
case PF_PLIM:
value = params.plim;
break; break;
default: default:
return; value = params.valuesFloat[param] / param_broadcast_factors[param];
} }
vehicle_broadcast_param(param, value); vehicle_broadcast_param(param, value);
} }

View File

@ -24,10 +24,14 @@
#define CAN_ID_CS_INTERNAL 0x108 #define CAN_ID_CS_INTERNAL 0x108
#define CAN_ID_ABX_MISC 0x109 #define CAN_ID_ABX_MISC 0x109
#define CAN_ID_ABX_HYDRAULICS 0x110 #define CAN_ID_ABX_HYDRAULICS 0x110
#define CAN_ID_ABX_ENDURANCE 0x113
#define CAN_ID_ABX_APPS 0x114
#define CAN_ID_ABX_APPS_LIMITS 0x115
#define CAN_ID_EPSC_OUT 0x321 #define CAN_ID_EPSC_OUT 0x321
#define CAN_ID_MISSION_SELECTED 0x400 #define CAN_ID_MISSION_SELECTED 0x400
#define CAN_ID_STW_BUTTONS 0x401 #define CAN_ID_STW_BUTTONS 0x401
#define CAN_ID_STW_PARAM_SET 0x402 #define CAN_ID_STW_PARAM_SET 0x402
#define CAN_ID_STW_DRIVERWISHLIST 0x403
#define CAN_ID_AS_MISSION_FB 0x410 #define CAN_ID_AS_MISSION_FB 0x410
#define CAN_ID_STW_STATUS 0x412 #define CAN_ID_STW_STATUS 0x412
#define CAN_ID_ABX_PARAM_CONFIRMED 0x413 #define CAN_ID_ABX_PARAM_CONFIRMED 0x413
@ -55,6 +59,7 @@
void vehicle_thread_entry(ULONG hfdcan_addr) { void vehicle_thread_entry(ULONG hfdcan_addr) {
memset(&vehicle_state, 0, sizeof(vehicle_state)); memset(&vehicle_state, 0, sizeof(vehicle_state));
memset(&vehicle_state.cone_pos, 0xFF, sizeof(vehicle_state.cone_pos)); memset(&vehicle_state.cone_pos, 0xFF, sizeof(vehicle_state.cone_pos));
memset(&wishlist, 0, sizeof(wishlist));
ftcan_init((void *)hfdcan_addr); ftcan_init((void *)hfdcan_addr);
ftcan_add_filter(CAN_ID_AMS_SLAVE_PANIC, 0x7FF); ftcan_add_filter(CAN_ID_AMS_SLAVE_PANIC, 0x7FF);
@ -68,7 +73,10 @@ void vehicle_thread_entry(ULONG hfdcan_addr) {
ftcan_add_filter(CAN_ID_ABX_BRAKE_T, 0x7FF); ftcan_add_filter(CAN_ID_ABX_BRAKE_T, 0x7FF);
ftcan_add_filter(CAN_ID_CS_INTERNAL, 0x7FF); ftcan_add_filter(CAN_ID_CS_INTERNAL, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_MISC, 0x7FF); ftcan_add_filter(CAN_ID_ABX_MISC, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_ENDURANCE, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_HYDRAULICS, 0x7FF); ftcan_add_filter(CAN_ID_ABX_HYDRAULICS, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_APPS, 0x7FF);
ftcan_add_filter(CAN_ID_ABX_APPS_LIMITS, 0x7FF);
ftcan_add_filter(CAN_ID_EPSC_OUT, 0x7FF); ftcan_add_filter(CAN_ID_EPSC_OUT, 0x7FF);
ftcan_add_filter(CAN_ID_AS_MISSION_FB, 0x7FF); ftcan_add_filter(CAN_ID_AS_MISSION_FB, 0x7FF);
ftcan_add_filter(CAN_ID_STW_STATUS, 0x7FF); ftcan_add_filter(CAN_ID_STW_STATUS, 0x7FF);
@ -80,6 +88,7 @@ void vehicle_thread_entry(ULONG hfdcan_addr) {
while (1) { while (1) {
tx_thread_sleep(10); tx_thread_sleep(10);
vehicle_broadcast_wishlist();
} }
} }
@ -102,6 +111,17 @@ void vehicle_broadcast_buttons(GPIO_PinState *button_states) {
ftcan_transmit(CAN_ID_STW_BUTTONS, &data, 1); ftcan_transmit(CAN_ID_STW_BUTTONS, &data, 1);
} }
void vehicle_broadcast_wishlist() {
if (!wishlist.initialized) {
return;
}
uint8_t data[2];
data[0] = wishlist.power_limit;
data[1] = wishlist.speed_limit;
ftcan_transmit(CAN_ID_STW_DRIVERWISHLIST, data, 2);
}
void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) { void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
const uint8_t *ptr; const uint8_t *ptr;
if ((id & CAN_ID_STW_CONES_MASK) == CAN_ID_STW_CONES_BASE) { if ((id & CAN_ID_STW_CONES_MASK) == CAN_ID_STW_CONES_BASE) {
@ -166,6 +186,18 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
vehicle_state.hyd_press_b = vehicle_state.hyd_press_b =
((data[1] >> 4) | (data[2] << 4)) * CAN_ABX_DRIVER_PRESS_FACTOR; ((data[1] >> 4) | (data[2] << 4)) * CAN_ABX_DRIVER_PRESS_FACTOR;
break; break;
case CAN_ID_ABX_ENDURANCE:
vehicle_state.power_limit = data[0];
vehicle_state.speed_limit = data[1];
if (!wishlist.initialized) {
wishlist.initialized = true;
wishlist.power_limit = vehicle_state.power_limit;
wishlist.speed_limit = vehicle_state.speed_limit;
}
vehicle_state.lap_count_endu = data[2];
vehicle_state.bat_delta_overall = ((int8_t)data[3]) * 1.0f;
vehicle_state.bat_delta_last = ((int8_t)data[4]) * 1.0f;
break;
case CAN_ID_ABX_TIMINGS: case CAN_ID_ABX_TIMINGS:
vehicle_state.lap_best = (data[0] | (data[1] << 8)) * 0.01f; vehicle_state.lap_best = (data[0] | (data[1] << 8)) * 0.01f;
vehicle_state.lap_last = (data[2] | (data[3] << 8)) * 0.01f; vehicle_state.lap_last = (data[2] | (data[3] << 8)) * 0.01f;
@ -176,6 +208,18 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
vehicle_state.temps.brake_rl = (data[4] | (data[5] << 8)) * 0.01f; vehicle_state.temps.brake_rl = (data[4] | (data[5] << 8)) * 0.01f;
vehicle_state.temps.brake_rr = (data[6] | (data[7] << 8)) * 0.01f; vehicle_state.temps.brake_rr = (data[6] | (data[7] << 8)) * 0.01f;
break; break;
case CAN_ID_ABX_APPS:
vehicle_state.apps0_volt = (data[0] | (data[1] << 8)) * 0.001f;
vehicle_state.apps1_volt = (data[2] | (data[3] << 8)) * 0.001f;
vehicle_state.apps0_out = (int16_t)((data[4] | (data[5] << 8))) * 0.001f;
vehicle_state.apps1_out = (int16_t)((data[6] | (data[7] << 8))) * 0.001f;
break;
case CAN_ID_ABX_APPS_LIMITS:
vehicle_state.apps0_min = (data[0] | (data[1] << 8)) * 0.001f;
vehicle_state.apps0_max = (data[2] | (data[3] << 8)) * 0.001f;
vehicle_state.apps1_min = (data[4] | (data[5] << 8)) * 0.001f;
vehicle_state.apps1_max = (data[6] | (data[7] << 8)) * 0.001f;
break;
case CAN_ID_CS_INTERNAL: case CAN_ID_CS_INTERNAL:
vehicle_state.temps.inv_l = vehicle_state.temps.inv_l =
(data[0] | (data[1] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR; (data[0] | (data[1] << 8)) * CAN_CS_INTERNAL_TEMP_FACTOR;
@ -225,6 +269,7 @@ void ftcan_msg_received_cb(uint16_t id, size_t datalen, const uint8_t *data) {
vehicle_state.errors.err_res = (data[5] >> 2) & 1; vehicle_state.errors.err_res = (data[5] >> 2) & 1;
vehicle_state.errors.err_invl = (data[5] >> 3) & 1; vehicle_state.errors.err_invl = (data[5] >> 3) & 1;
vehicle_state.errors.err_invr = (data[5] >> 4) & 1; vehicle_state.errors.err_invr = (data[5] >> 4) & 1;
vehicle_state.drs_active = (data[5] >> 5) & 1;
break; break;
case CAN_ID_ABX_PARAM_CONFIRMED: case CAN_ID_ABX_PARAM_CONFIRMED:
vehicle_state.last_param_confirmed = data[0]; vehicle_state.last_param_confirmed = data[0];

View File

@ -1,6 +1,7 @@
#include "vehicle_state.h" #include "vehicle_state.h"
VehicleState vehicle_state; VehicleState vehicle_state;
DriverWishlist wishlist;
const char *inichkstate_str(IniChkState state) { const char *inichkstate_str(IniChkState state) {
switch (vehicle_state.ini_chk_state) { switch (vehicle_state.ini_chk_state) {

View File

@ -1,5 +1,5 @@
########################################################################################################################## ##########################################################################################################################
# File automatically-generated by tool: [projectgenerator] version: [4.1.0] date: [Mon Jul 24 18:47:29 CEST 2023] # File automatically-generated by tool: [projectgenerator] version: [4.3.0-B58] date: [Wed Jun 12 17:44:56 CEST 2024]
########################################################################################################################## ##########################################################################################################################
# ------------------------------------------------ # ------------------------------------------------
@ -228,7 +228,16 @@ Middlewares/ST/threadx/common/src/txe_timer_delete.c \
Middlewares/ST/threadx/common/src/txe_timer_info_get.c \ Middlewares/ST/threadx/common/src/txe_timer_info_get.c \
TouchGFX/App/app_touchgfx.c \ TouchGFX/App/app_touchgfx.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c \ Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc.c \
Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c Drivers/STM32H7xx_HAL_Driver/Src/stm32h7xx_hal_crc_ex.c \
TouchGFX/target/TouchGFXHAL.cpp \
TouchGFX/target/STM32TouchController.cpp \
TouchGFX/target/TouchGFXGPIO.cpp \
TouchGFX/target/generated/TouchGFXConfiguration.cpp \
TouchGFX/target/generated/TouchGFXGeneratedHAL.cpp \
TouchGFX/target/generated/STM32DMA.cpp \
TouchGFX/target/generated/OSWrappers.cpp \
Core/Src/sysmem.c \
Core/Src/syscalls.c
# ASM sources # ASM sources
ASM_SOURCES = \ ASM_SOURCES = \

View File

@ -83,6 +83,7 @@ excludes:
- "TouchGFX/Middlewares/ST/touchgfx/{lib,os}/**" - "TouchGFX/Middlewares/ST/touchgfx/{lib,os}/**"
- "Middlewares/ST/touchgfx/framework/source/platform" - "Middlewares/ST/touchgfx/framework/source/platform"
- "**/simulator/**" - "**/simulator/**"
- TouchGFX/vehicle_state.c
# Include directories (directories containing .h or .hpp files) # Include directories (directories containing .h or .hpp files)
# If a CubeMX makefile is present it will automatically include the include directories from that makefile. # If a CubeMX makefile is present it will automatically include the include directories from that makefile.

View File

@ -8,7 +8,7 @@
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2024 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file

View File

@ -8,7 +8,7 @@
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2024 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file

View File

@ -171,6 +171,84 @@
</Text> </Text>
</TextGroup> </TextGroup>
<TextGroup Id="Unsorted"> <TextGroup Id="Unsorted">
<Text Id="__SingleUse_W4YT" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">APPS1</Translation>
</Text>
<Text Id="__SingleUse_SM6H" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_8KB4" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_P4TL" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_CBZ9" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">CUR</Translation>
</Text>
<Text Id="__SingleUse_WQXQ" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">MAX</Translation>
</Text>
<Text Id="__SingleUse_QXG5" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">MIN</Translation>
</Text>
<Text Id="__SingleUse_MBQT" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_978V" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_H8OI" Alignment="Left" TypographyId="Numbers_Smaller">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_6EKV" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">APPS0</Translation>
</Text>
<Text Id="__SingleUse_RK9Z" Alignment="Right" TypographyId="Numbers_Small">
<Translation Language="GB">&lt;&gt;</Translation>
</Text>
<Text Id="__SingleUse_UBFH" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">APPS CALIBRATION</Translation>
</Text>
<Text Id="__SingleUse_6EXA" Alignment="Right" TypographyId="Chinat_Large">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_570K" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">R2D</Translation>
</Text>
<Text Id="__SingleUse_G2S2" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">PRECHARGE</Translation>
</Text>
<Text Id="__SingleUse_B2Q6" Alignment="Right" TypographyId="Numbers">
<Translation Language="GB">&lt;value&gt;°</Translation>
</Text>
<Text Id="__SingleUse_OP6C" Alignment="Right" TypographyId="Numbers">
<Translation Language="GB">&lt;value&gt;%</Translation>
</Text>
<Text Id="__SingleUse_1F9T" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">SPEED</Translation>
</Text>
<Text Id="__SingleUse_QAZ3" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">POWER</Translation>
</Text>
<Text Id="__SingleUse_DONW" Alignment="Center" TypographyId="Numbers_Huge">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_4X8X" Alignment="Center" TypographyId="Numbers_Huge">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_FPXE" Alignment="Right" TypographyId="Numbers_Huge">
<Translation Language="GB">&lt;value&gt;%</Translation>
</Text>
<Text Id="__SingleUse_51AZ" Alignment="Right" TypographyId="Numbers_Huge">
<Translation Language="GB">&lt;value&gt;%</Translation>
</Text>
<Text Id="__SingleUse_DJ62" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">OVERALL BAT</Translation>
</Text>
<Text Id="__SingleUse_5W6Y" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">LAST LAP BAT</Translation>
</Text>
<Text Id="__SingleUse_C17G" Alignment="Left" TypographyId="Chinat_Small"> <Text Id="__SingleUse_C17G" Alignment="Left" TypographyId="Chinat_Small">
<Translation Language="GB">AS &lt;value&gt;</Translation> <Translation Language="GB">AS &lt;value&gt;</Translation>
</Text> </Text>
@ -261,12 +339,6 @@
<Text Id="__SingleUse_1NKF" Alignment="Center" TypographyId="Chinat_Huge"> <Text Id="__SingleUse_1NKF" Alignment="Center" TypographyId="Chinat_Huge">
<Translation Language="GB"></Translation> <Translation Language="GB"></Translation>
</Text> </Text>
<Text Id="__SingleUse_J5UH" Alignment="Right" TypographyId="Chinat_Large">
<Translation Language="GB">&lt;value&gt;</Translation>
</Text>
<Text Id="__SingleUse_NGUK" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">R2D</Translation>
</Text>
<Text Id="__SingleUse_4E84" Alignment="Right" TypographyId="Numbers"> <Text Id="__SingleUse_4E84" Alignment="Right" TypographyId="Numbers">
<Translation Language="GB">&lt;value&gt;</Translation> <Translation Language="GB">&lt;value&gt;</Translation>
</Text> </Text>
@ -276,9 +348,6 @@
<Text Id="__SingleUse_RWCE" Alignment="Center" TypographyId="Chinat_Large"> <Text Id="__SingleUse_RWCE" Alignment="Center" TypographyId="Chinat_Large">
<Translation Language="GB">PARAMETERS</Translation> <Translation Language="GB">PARAMETERS</Translation>
</Text> </Text>
<Text Id="__SingleUse_HMH2" Alignment="Left" TypographyId="Chinat_Large">
<Translation Language="GB">PRECHARGE</Translation>
</Text>
<Text Id="__SingleUse_PHFD" Alignment="Center" TypographyId="Chinat_Small"> <Text Id="__SingleUse_PHFD" Alignment="Center" TypographyId="Chinat_Small">
<Translation Language="GB">&lt;value&gt;%</Translation> <Translation Language="GB">&lt;value&gt;%</Translation>
</Text> </Text>
@ -304,6 +373,7 @@
<Typography Id="Numbers" Font="lucon.TTF" Size="50" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=". ,-" WildcardCharacterRanges="0-9" /> <Typography Id="Numbers" Font="lucon.TTF" Size="50" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=". ,-" WildcardCharacterRanges="0-9" />
<Typography Id="Default_Bold" Font="verdanab.ttf" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters="! &quot;" WildcardCharacterRanges="#-~" /> <Typography Id="Default_Bold" Font="verdanab.ttf" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters="! &quot;" WildcardCharacterRanges="#-~" />
<Typography Id="Numbers_Smaller" Font="lucon.TTF" Size="33" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WildcardCharacterRanges="0-9" /> <Typography Id="Numbers_Smaller" Font="lucon.TTF" Size="33" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WildcardCharacterRanges="0-9" />
<Typography Id="Numbers_Small" Font="lucon.TTF" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WildcardCharacterRanges="0-9" /> <Typography Id="Numbers_Small" Font="lucon.TTF" Size="20" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-" WidgetWildcardCharacters="-., 0123456789" WildcardCharacterRanges="0-9" />
<Typography Id="Numbers_Huge" Font="lucon.TTF" Size="80" Bpp="4" Direction="LTR" FallbackCharacter="?" WildcardCharacters=" .,-+" WildcardCharacterRanges="0-9" />
</Typographies> </Typographies>
</TextDatabase> </TextDatabase>

View File

@ -6,3 +6,14 @@ touchgfx_path := ../Middlewares/ST/touchgfx
touchgfx_env := C:/TouchGFX/4.22.0/env touchgfx_env := C:/TouchGFX/4.22.0/env
# Optional additional compiler flags # Optional additional compiler flags
user_cflags := -DUSE_BPP=16 -std=gnu++1z -Wno-cast-qual -Wno-missing-declarations -Wno-format-truncation -Wno-unused-variable user_cflags := -DUSE_BPP=16 -std=gnu++1z -Wno-cast-qual -Wno-missing-declarations -Wno-format-truncation -Wno-unused-variable
# MINGW is annoying and for some reason replaces /z/path with z:/path in
# ADDITIONAL_SOURCES. Since TouchGFXDesigner completely overwrites the generated
# Makefile, we can't fix it there -- but the generated makefile includes this
# file, so we can fix it here.
subst_drivename = $(shell echo $(1) | sed -e 's!^\([a-zA-Z]\):/!/\1/!')
ADDITIONAL_SOURCES := $(foreach src,$(ADDITIONAL_SOURCES),$(call subst_drivename,$(src)))
ifeq ($(UNAME), Linux)
linker_options += -no-pie
endif

View File

@ -1,4 +1,5 @@
32 32
37
44 44
45 45
46 46
@ -12,4 +13,5 @@
55 55
56 56
57 57
63 63
176

View File

@ -0,0 +1,17 @@
32
37
43
44
45
46
48
49
50
51
52
53
54
55
56
57
63

View File

@ -1 +1 @@
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4]],"generate_font_format":"0"} {"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4],["Numbers_Huge","lucon.TTF",80,4]],"generate_font_format":"0"}

View File

@ -1 +1 @@
{"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4]],"generate_font_format":"0"} {"typographies":[["Default","verdana.ttf",20,4],["Chinat_Large","CHINN___.ttf",30,4],["Chinat_Small","CHINN___.ttf",20,4],["Chinat_Huge","CHINN___.ttf",40,4],["Numbers","lucon.TTF",50,4],["Default_Bold","verdanab.ttf",20,4],["Numbers_Smaller","lucon.TTF",33,4],["Numbers_Small","lucon.TTF",20,4],["Numbers_Huge","lucon.TTF",80,4]],"generate_font_format":"0"}

View File

@ -1,5 +1,6 @@
AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0 AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0
32 32
37
44 44
45 45
46 46
@ -14,3 +15,4 @@ AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0
56 56
57 57
63 63
176

View File

@ -0,0 +1,18 @@
AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0
32
37
43
44
45
46
48
49
50
51
52
53
54
55
56
57
63

View File

@ -21,6 +21,7 @@ struct Typography
static const touchgfx::FontId DEFAULT_BOLD = 5; static const touchgfx::FontId DEFAULT_BOLD = 5;
static const touchgfx::FontId NUMBERS_SMALLER = 6; static const touchgfx::FontId NUMBERS_SMALLER = 6;
static const touchgfx::FontId NUMBERS_SMALL = 7; static const touchgfx::FontId NUMBERS_SMALL = 7;
static const touchgfx::FontId NUMBERS_HUGE = 8;
}; };
struct TypographyFontIndex struct TypographyFontIndex
@ -33,7 +34,8 @@ struct TypographyFontIndex
static const touchgfx::FontId DEFAULT_BOLD = 5; // verdanab_20_4bpp static const touchgfx::FontId DEFAULT_BOLD = 5; // verdanab_20_4bpp
static const touchgfx::FontId NUMBERS_SMALLER = 6; // lucon_TTF_33_4bpp static const touchgfx::FontId NUMBERS_SMALLER = 6; // lucon_TTF_33_4bpp
static const touchgfx::FontId NUMBERS_SMALL = 7; // lucon_TTF_20_4bpp static const touchgfx::FontId NUMBERS_SMALL = 7; // lucon_TTF_20_4bpp
static const uint16_t NUMBER_OF_FONTS = 8; static const touchgfx::FontId NUMBERS_HUGE = 8; // lucon_TTF_80_4bpp
static const uint16_t NUMBER_OF_FONTS = 9;
}; };
class ApplicationFontProvider : public touchgfx::FontProvider class ApplicationFontProvider : public touchgfx::FontProvider

View File

@ -33,6 +33,9 @@ touchgfx::Font* ApplicationFontProvider::getFont(touchgfx::FontId typography)
case Typography::NUMBERS_SMALL: case Typography::NUMBERS_SMALL:
// lucon_TTF_20_4bpp // lucon_TTF_20_4bpp
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[7]); return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[7]);
case Typography::NUMBERS_HUGE:
// lucon_TTF_80_4bpp
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[8]);
default: default:
return 0; return 0;
} }

View File

@ -4,6 +4,45 @@ FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_lucon_TTF_50_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = { KEEP extern const uint8_t unicodes_lucon_TTF_50_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
// Unicode: [0x0020] // Unicode: [0x0020]
// (Has no glyph data) // (Has no glyph data)
// Unicode: [0x0025]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xBF, 0x00,
0x00, 0x00, 0xB6, 0xFE, 0xAD, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x2E, 0x00,
0x00, 0xD2, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0x06, 0x00,
0x20, 0xFE, 0xEF, 0x68, 0xF9, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xAF, 0x00, 0x00,
0xB0, 0xFF, 0x2E, 0x00, 0x50, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0x1E, 0x00, 0x00,
0xF4, 0xFF, 0x06, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x04, 0x00, 0x00,
0xF9, 0xFF, 0x01, 0x00, 0x00, 0xF3, 0xFF, 0x06, 0x00, 0x00, 0x20, 0xFE, 0x9F, 0x00, 0x00, 0x00,
0xFC, 0xCF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0A, 0x00, 0x00, 0xC0, 0xFF, 0x1D, 0x00, 0x00, 0x00,
0xFE, 0xAF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x0B, 0x00, 0x00, 0xF7, 0xFF, 0x03, 0x00, 0x00, 0x00,
0xFE, 0xAF, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x0C, 0x00, 0x30, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00,
0xFD, 0xBF, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0A, 0x00, 0xD0, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xEF, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x08, 0x00, 0xF9, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00,
0xF6, 0xFF, 0x03, 0x00, 0x00, 0xF6, 0xFF, 0x04, 0x40, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE1, 0xFF, 0x0B, 0x00, 0x10, 0xFD, 0xCF, 0x00, 0xD1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xAF, 0x02, 0xC3, 0xFF, 0x3F, 0x00, 0xFA, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x50, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0xFC, 0xFF, 0xFF, 0x3B, 0x00, 0xE2, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x20, 0x65, 0x15, 0x00, 0x00, 0xFB, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xCF, 0x00, 0x00, 0x41, 0x56, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x3F, 0x00, 0xA2, 0xFF, 0xFF, 0xDF, 0x05, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0x07, 0x30, 0xFE, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xBF, 0x00, 0xE1, 0xFF, 0x4D, 0x21, 0xF9, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x2E, 0x00, 0xFA, 0xEF, 0x02, 0x00, 0xA0, 0xFF, 0x2F, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0x05, 0x20, 0xFF, 0x8F, 0x00, 0x00, 0x20, 0xFF, 0x9F, 0x00,
0x00, 0x00, 0x00, 0x10, 0xFE, 0xAF, 0x00, 0x60, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFB, 0xDF, 0x00,
0x00, 0x00, 0x00, 0xA0, 0xFF, 0x1D, 0x00, 0x80, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x00,
0x00, 0x00, 0x00, 0xF6, 0xFF, 0x04, 0x00, 0x90, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01,
0x00, 0x00, 0x20, 0xFE, 0x9F, 0x00, 0x00, 0x90, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x01,
0x00, 0x00, 0xC0, 0xFF, 0x1D, 0x00, 0x00, 0x70, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0x00,
0x00, 0x00, 0xF7, 0xFF, 0x03, 0x00, 0x00, 0x40, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0xFD, 0xBF, 0x00,
0x00, 0x30, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xBF, 0x00, 0x00, 0x40, 0xFF, 0x6F, 0x00,
0x00, 0xD0, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x06, 0x00, 0xD1, 0xFF, 0x0D, 0x00,
0x00, 0xF9, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xAF, 0x87, 0xFE, 0xEF, 0x03, 0x00,
0x40, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00,
0xD1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xDA, 0xEF, 0x7C, 0x01, 0x00, 0x00,
0xFA, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x002C] // Unicode: [0x002C]
0x32, 0x33, 0x33, 0x23, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF, 0x32, 0x33, 0x33, 0x23, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF,
0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0x9F, 0xF8, 0xFF, 0xFF, 0x8F, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0xAF, 0xF8, 0xFF, 0xFF, 0x9F, 0xF8, 0xFF, 0xFF, 0x8F,
@ -339,5 +378,11 @@ KEEP extern const uint8_t unicodes_lucon_TTF_50_4bpp_0[] FONT_GLYPH_LOCATION_FLA
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x00B0]
0x00, 0x60, 0xEC, 0xCE, 0x05, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xAF, 0x00, 0x80, 0xFF, 0x7D, 0xD7,
0xFF, 0x08, 0xF1, 0xBF, 0x01, 0x10, 0xFC, 0x1F, 0xF5, 0x3F, 0x00, 0x00, 0xF3, 0x4F, 0xF6, 0x0F,
0x00, 0x00, 0xF1, 0x6F, 0xF5, 0x3F, 0x00, 0x00, 0xF3, 0x4F, 0xF1, 0xCF, 0x01, 0x10, 0xFC, 0x1E,
0x80, 0xFF, 0x8D, 0xD8, 0xFF, 0x08, 0x00, 0xFA, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x60, 0xEC, 0xCE,
0x06, 0x00
}; };

View File

@ -0,0 +1,959 @@
#include <touchgfx/hal/Types.hpp>
FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_lucon_TTF_80_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
// Unicode: [0x0020]
// (Has no glyph data)
// Unicode: [0x0025]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB8, 0xED, 0xDE, 0x6B, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x30, 0xFB, 0xFF,
0xFF, 0xFF, 0xFF, 0x8F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF,
0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x70, 0xFF,
0xFF, 0xFF, 0xDF, 0xFD, 0xFF, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x6E, 0x01, 0x20, 0xF9, 0xFF, 0xFF,
0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x10,
0xFE, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xD1, 0xFF, 0xFF, 0x1D, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x04, 0x00, 0x00,
0x00, 0xE1, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x07, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0x0C, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0x4F, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF,
0x8F, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF,
0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFD, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0xF4,
0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00,
0x00, 0x50, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x4F, 0x00, 0x00,
0x90, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0x08, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0A,
0x00, 0x10, 0xFE, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF,
0x7F, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x03, 0x00, 0xB0, 0xFF, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x80, 0xFF, 0xFF,
0xAF, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF4, 0xFF, 0xFF, 0x7F, 0x01, 0x20, 0xFA, 0xFF, 0xFF, 0x1D, 0x00, 0x20, 0xFE, 0xFF, 0xBF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xDF, 0xFE, 0xFF,
0xFF, 0xEF, 0x03, 0x00, 0xC0, 0xFF, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0x00, 0xF8, 0xFF, 0xFF,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFB, 0xFF, 0xFF,
0xFF, 0xFF, 0x8F, 0x01, 0x00, 0x30, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xC8, 0xFD, 0xDE, 0x6B, 0x02, 0x00, 0x00, 0xD1, 0xFF,
0xFF, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFB, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE2, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x10, 0xA5, 0xEC, 0xDF, 0x9C, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xEF, 0x02, 0x00,
0x00, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0xB1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0A,
0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xEF, 0xFD, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xDF, 0x01, 0x00, 0xB0, 0xFF, 0xFF, 0xCF, 0x03, 0x00,
0xE5, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0x4F, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x20, 0xFD, 0xFF, 0xFF, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x08, 0x00, 0x10, 0xFE, 0xFF, 0xEF, 0x01,
0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE,
0xFF, 0xCF, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0x3F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xC0, 0xFF, 0xFF,
0x1F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF6, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE,
0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xF3,
0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0xFF, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFA, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x05, 0x00, 0x00,
0x00, 0xF6, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x02, 0x00, 0x00,
0x00, 0x00, 0x30, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0x06, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0x1D, 0x00,
0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x8F,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF,
0xCF, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF,
0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xA0,
0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFE, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xE2,
0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0x0A, 0x00, 0x00,
0x10, 0xFD, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xCF, 0x03, 0x00, 0xE5, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00,
0x80, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF,
0xEF, 0xED, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00,
0x00, 0x10, 0xFD, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x04, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0x4F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xA5, 0xEC, 0xEF, 0x9C, 0x04, 0x00,
0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x88, 0x78, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x002B]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC,
0xCC, 0xCC, 0xCC, 0xFE, 0xFF, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x9C, 0xFA,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xFA, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xCF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
// Unicode: [0x002C]
0x75, 0x77, 0x77, 0x77, 0x77, 0x67, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF,
0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xCF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x8F, 0x00, 0x00,
0xF0, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x0E,
0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x0A, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0x04, 0x00, 0x80, 0xFF, 0xFF,
0xCF, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0x4F, 0x00, 0xC6, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0xFA, 0xFF,
0xFF, 0x8F, 0x00, 0x00, 0xFA, 0xFF, 0xDF, 0x05, 0x00, 0x00, 0xEA, 0x9C, 0x05, 0x00, 0x00, 0x00,
// Unicode: [0x002D]
0xB9, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
// Unicode: [0x002E]
0x75, 0x77, 0x77, 0x77, 0x77, 0x67, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF,
0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF,
// Unicode: [0x0030]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xC9, 0xEE, 0xEF, 0xAC, 0x27, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCD, 0xDB, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0xEF,
0x27, 0x00, 0x00, 0x61, 0xFD, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
0xFF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00,
0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF,
0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF,
0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x05, 0x00,
0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF,
0xFF, 0xFF, 0x0C, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0xFB, 0xFF, 0xFF,
0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0xFE, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA,
0xFF, 0xFF, 0xFF, 0x03, 0x40, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x07, 0x70, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x0B, 0xB0, 0xFF, 0xFF, 0xFF,
0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0x0E,
0xE0, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
0xFF, 0xFF, 0xFF, 0x2F, 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x4F, 0xF3, 0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x6F, 0xF5, 0xFF, 0xFF, 0xFF,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x8F,
0xF6, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0xFF, 0x9F, 0xF7, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xBF, 0xF8, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xCF, 0xF9, 0xFF, 0xFF, 0xFF,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xCF,
0xF9, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xDF, 0xFA, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xDF, 0xF9, 0xFF, 0xFF, 0xFF,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xDF,
0xF9, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
0xFF, 0xFF, 0xFF, 0xCF, 0xF8, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xCF, 0xF7, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xAF, 0xF6, 0xFF, 0xFF, 0xFF,
0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x9F,
0xF5, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90,
0xFF, 0xFF, 0xFF, 0x8F, 0xF3, 0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x6F, 0xF1, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x4F, 0xD0, 0xFF, 0xFF, 0xFF,
0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x2F,
0xA0, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1,
0xFF, 0xFF, 0xFF, 0x0E, 0x70, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x0A, 0x40, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0xFF,
0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD,
0xFF, 0xFF, 0xEF, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
0x00, 0x20, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF,
0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFD, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF,
0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0xEF, 0x27, 0x00, 0x00, 0x61,
0xFD, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xCD, 0xDB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x61, 0xC9, 0xFE, 0xEF, 0xAD, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0031]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x47, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xFD, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51,
0xEA, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xB6, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x72, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xD8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x94, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0x26, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xEF, 0x8B, 0x14, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDB, 0x69, 0x03, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xB8, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xCB, 0xFF, 0xFF, 0xFF, 0xCF,
0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x09, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xFC, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C,
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0C, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C,
// Unicode: [0x0032]
0x00, 0x00, 0x00, 0x00, 0x10, 0x53, 0x98, 0xBA, 0xAB, 0x89, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x84, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8D, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0xEA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x02,
0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xEF, 0x7B, 0x24, 0x01, 0x31, 0xB7,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xFF, 0xFF, 0xAE, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0xFF, 0x6D, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xEF, 0x01, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x9F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF,
0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF,
0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF4, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFB, 0xFF, 0xFF, 0xFF, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x6F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x06,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x6F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF,
0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF,
0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF,
0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4,
0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x90, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xEF, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
0xBB, 0xBB, 0xBB, 0xBB, 0x4B, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F,
// Unicode: [0x0033]
0x00, 0x00, 0x10, 0x74, 0xB9, 0xDD, 0xFE, 0xEE, 0xCD, 0x69, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x84, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x27, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF,
0x02, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x3E, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xCD, 0xED, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x8C, 0x25, 0x00, 0x00, 0x00, 0x73, 0xFE,
0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xF0, 0xCF, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x91, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xA0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xDF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0x9F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF,
0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF,
0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF,
0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5,
0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92,
0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x53, 0xB7,
0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x5D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0x88, 0x88, 0xA9, 0xEB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x52, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF, 0xFF, 0x4F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFF, 0xFF, 0xFF,
0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF,
0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA,
0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF2, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0xFF, 0xFF,
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xFF,
0xFF, 0x05, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF,
0xFF, 0xCF, 0x00, 0x00, 0xFD, 0x6A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE5, 0xFF, 0xFF,
0xFF, 0xFF, 0x3F, 0x00, 0x00, 0xFD, 0xFF, 0xCF, 0x58, 0x02, 0x00, 0x00, 0x20, 0xC6, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xEF, 0xCD, 0xDB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x6B, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x74, 0xB9, 0xEC,
0xFE, 0xEF, 0xCE, 0x8A, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0034]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x55, 0x55, 0x35,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xEF, 0xFA, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x6F, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0B,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1,
0xFF, 0xFF, 0xEF, 0x02, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x5F, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xEF, 0x01, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF,
0xFF, 0x5F, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF,
0x09, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE1, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xDF, 0x01,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB,
0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF,
0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE2, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xCF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0xF9, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xFA, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x5F, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0xB7, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
0xBB, 0xBB, 0xBB, 0xBB, 0xFD, 0xFF, 0xFF, 0xEF, 0xBB, 0xBB, 0xBB, 0x4B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xAF,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0035]
0x40, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0x07, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xEF, 0xCE, 0x9B, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x04, 0x00, 0x00, 0x00, 0x00,
0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00,
0x40, 0xBB, 0xAA, 0xBA, 0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xB7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0xEF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x0D, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x4F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x8F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xCF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x02,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xAF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x6F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00,
0xE7, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0x00,
0xF7, 0xFF, 0xAE, 0x36, 0x00, 0x00, 0x10, 0xA5, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xDF, 0xCC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0x00, 0x00, 0x00,
0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00,
0x72, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x63, 0xB9, 0xED, 0xFF, 0xDE, 0x9C, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0036]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xB8, 0xED, 0xFF, 0xDE, 0x9B, 0x36, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xBE, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB3, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xBC, 0xDC, 0xFF, 0xFF, 0xFF, 0xFF,
0x0B, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0x5A, 0x01, 0x00, 0x00, 0x41,
0xC7, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0x2B, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x72, 0xFC, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x06, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF,
0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xC0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF,
0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0,
0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x72, 0xDA, 0xFE, 0xDE, 0x8B, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0xB4, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xDF, 0x06, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0xA1, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x03, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x08,
0x30, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0xFF, 0xFF, 0x07, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x37, 0xFE, 0xFF, 0xFF, 0xBF, 0x89, 0xA9, 0xFD, 0xFF, 0xFF, 0xFF,
0xFF, 0x6F, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xD8, 0xFF, 0xFF, 0x6E, 0x01, 0x00, 0x00, 0x40,
0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xAF, 0x01, 0x00,
0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0xFA, 0xFF, 0xFF,
0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xEF, 0x01,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF,
0xFF, 0xFF, 0x07, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x0D, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x3F, 0xF8, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x6F, 0xF7, 0xFF, 0xFF, 0xFF,
0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x9F, 0xF6,
0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xBF, 0xF4, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xFF, 0xFF, 0xCF, 0xF2, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xDF, 0xF0, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xDF, 0xC0, 0xFF, 0xFF, 0xFF, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xCF, 0x90, 0xFF,
0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF,
0xBF, 0x60, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFB, 0xFF, 0xFF, 0x9F, 0x20, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0x7F, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xF3, 0xFF,
0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0x0B,
0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF,
0xFF, 0xFF, 0x05, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF9, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x8F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0xB0, 0xFF,
0xFF, 0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00,
0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0xEF, 0x38, 0x00, 0x00, 0x40, 0xFA, 0xFF, 0xFF, 0xFF, 0x6F,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xCB, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x30, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x95, 0xDB, 0xFE, 0xEF, 0xAC, 0x26, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0037]
0x20, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xF2, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF,
0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE1, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xFF, 0x0C, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF,
0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA,
0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x4F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF,
0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF6, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFE, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0x1E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF,
0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1,
0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF,
0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFA, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0038]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x96, 0xDC, 0xFE, 0xDE, 0xBD, 0x58, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFA, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x02, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xCC, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C,
0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0x4A, 0x01, 0x00, 0x10, 0xA4, 0xFF, 0xFF,
0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00, 0x00, 0x00,
0x00, 0xD4, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xEF, 0x02, 0x00,
0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0xFF,
0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x50,
0xFF, 0xFF, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x08,
0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF,
0xFF, 0xFF, 0x09, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x07,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0xB0, 0xFF,
0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0x05, 0x00,
0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF,
0xFF, 0x01, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE1, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x3E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF,
0xFF, 0xFF, 0xEF, 0x04, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00,
0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x10, 0xFB, 0xFF, 0xFF, 0x5F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x2B, 0x00, 0x00, 0xC2, 0xFF, 0xFF,
0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x06, 0x40,
0xFE, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xCF, 0xF9, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5E, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3, 0xFF, 0xFF,
0xFF, 0xAE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
0xFE, 0xFF, 0xFF, 0xDF, 0x02, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE3, 0xFF, 0xFF, 0xFF, 0x1C, 0x00, 0x00, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF,
0x03, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x10, 0xF8, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0x00, 0x00,
0x30, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x10, 0xFD, 0xFF, 0xFF,
0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x00, 0x60,
0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0xFF,
0xCF, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6,
0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xF2, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0xF5, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x0B, 0xF8, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0xFF, 0xFF, 0x0E, 0xFA, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0xFF, 0xFF,
0x0F, 0xFB, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0,
0xFF, 0xFF, 0xFF, 0x0F, 0xFB, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x0F, 0xFA, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x0E, 0xF9, 0xFF, 0xFF, 0xFF, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x0C, 0xF7, 0xFF, 0xFF,
0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0x09,
0xF3, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF,
0xFF, 0xFF, 0x04, 0xD0, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFD, 0xFF, 0xFF, 0xEF, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0x5E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0xF7, 0xFF, 0xFF,
0xFF, 0xFF, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00,
0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x38, 0x00, 0x00, 0x10, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F,
0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xCC, 0xFD, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFC,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x50, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x28, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x85, 0xDB, 0xFE, 0xEF, 0xCD, 0x7A, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
// Unicode: [0x0039]
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xA7, 0xEC, 0xFF, 0xDE, 0x7A, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x71, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xEF, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1D,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0xDC, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xEF, 0x28,
0x00, 0x00, 0x51, 0xFA, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
0xFF, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFD, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00,
0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF,
0xEF, 0x01, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFD, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF,
0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x8F, 0x00, 0x00,
0x10, 0xFE, 0xFF, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0xB0, 0xFF, 0xFF, 0xFF,
0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x0C, 0x00,
0xE0, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF,
0xFF, 0xFF, 0x1F, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xF2, 0xFF, 0xFF, 0xFF,
0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xAF, 0x00,
0xF2, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF,
0xFF, 0xFF, 0xCF, 0x00, 0xF2, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xE0, 0xFF, 0xFF, 0xFF,
0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0x02,
0xB0, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF,
0xFF, 0xFF, 0xFF, 0x03, 0x70, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x30, 0xFF, 0xFF, 0xFF, 0xDF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0xFC, 0xFF, 0xFF,
0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04,
0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x05, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xDF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0x3D, 0x00,
0x00, 0x00, 0x00, 0x00, 0xD3, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0xF8, 0xFF,
0xFF, 0xFF, 0xFF, 0x28, 0x00, 0x00, 0x00, 0x82, 0xFF, 0xFF, 0x9F, 0xFB, 0xFF, 0xFF, 0xFF, 0x04,
0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAC, 0x88, 0xCA, 0xFF, 0xFF, 0xFF, 0x1C, 0xFB,
0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x10, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xCF, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1B, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00,
0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xEF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xE8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x02, 0x00, 0x10, 0xFF,
0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x95, 0xEC, 0xFF, 0xCE, 0x59, 0x01,
0x00, 0x00, 0x30, 0xFF, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x4F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF,
0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0xFF,
0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xB0, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA1, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0xEF, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFD, 0xFF, 0xFF, 0xFF, 0x6F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xAE, 0x36, 0x00, 0x00, 0x00, 0x62, 0xFC, 0xFF,
0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xBC,
0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x9F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0xD9, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x8E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x41, 0x97, 0xDB, 0xFE, 0xEF, 0xAD, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
// Unicode: [0x003F]
0x00, 0x00, 0x00, 0x00, 0x42, 0x75, 0x98, 0xA9, 0xAA, 0x9A, 0x68, 0x25, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x97, 0xEC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBE,
0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB5, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x6C, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4D, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0x00, 0xF9,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F,
0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xDF, 0x7A, 0x35, 0x12, 0x00, 0x11, 0x52, 0xA7, 0xFE, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xF9, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x40, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0xF9, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x50, 0xFE, 0xFF, 0xFF, 0xFF, 0x9F, 0x00, 0xF9, 0xFF, 0xFF, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0xF9, 0xFF,
0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0x03, 0xF9, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF,
0xFF, 0xFF, 0xFF, 0x05, 0xF9, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x06, 0xB7, 0xBB, 0xBB, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF,
0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x2E,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0xFB, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xD2, 0xFF, 0xFF, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0xFF, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xAF, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF,
0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF,
0xFF, 0xFF, 0xDF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xE2, 0xFF, 0xFF, 0xFF, 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0xFF, 0x09, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0xFF, 0xFF,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB,
0xFF, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0xFF, 0xFF, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF, 0xFF, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xFF,
0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xA0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xCC, 0xCC, 0xCC, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x96, 0x99, 0x99, 0x99, 0x99,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00
};

View File

@ -0,0 +1,6 @@
#include <touchgfx/Font.hpp>
FONT_KERNING_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::KerningNode kerning_lucon_TTF_80_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = {
{ 0, 0 }
};

View File

@ -5,20 +5,22 @@
FONT_TABLE_LOCATION_FLASH_PRAGMA FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_50_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = { KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_50_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
{ 0, 0x0020, 0, 0, 0, 0, 30, 0, 0, 0x00 }, { 0, 0x0020, 0, 0, 0, 0, 30, 0, 0, 0x00 },
{ 0, 0x002C, 8, 16, 8, 11, 30, 0, 0, 0x00 }, { 0, 0x0025, 31, 38, 37, 0, 30, 0, 0, 0x00 },
{ 64, 0x002D, 20, 4, 17, 5, 30, 0, 0, 0x00 }, { 608, 0x002C, 8, 16, 8, 11, 30, 0, 0, 0x00 },
{ 104, 0x002E, 8, 8, 8, 11, 30, 0, 0, 0x00 }, { 672, 0x002D, 20, 4, 17, 5, 30, 0, 0, 0x00 },
{ 136, 0x0030, 26, 38, 37, 2, 30, 0, 0, 0x00 }, { 712, 0x002E, 8, 8, 8, 11, 30, 0, 0, 0x00 },
{ 630, 0x0031, 25, 37, 37, 4, 30, 0, 0, 0x00 }, { 744, 0x0030, 26, 38, 37, 2, 30, 0, 0, 0x00 },
{ 1111, 0x0032, 21, 37, 37, 4, 30, 0, 0, 0x00 }, { 1238, 0x0031, 25, 37, 37, 4, 30, 0, 0, 0x00 },
{ 1518, 0x0033, 21, 38, 37, 5, 30, 0, 0, 0x00 }, { 1719, 0x0032, 21, 37, 37, 4, 30, 0, 0, 0x00 },
{ 1936, 0x0034, 26, 36, 36, 2, 30, 0, 0, 0x00 }, { 2126, 0x0033, 21, 38, 37, 5, 30, 0, 0, 0x00 },
{ 2404, 0x0035, 20, 37, 36, 6, 30, 0, 0, 0x00 }, { 2544, 0x0034, 26, 36, 36, 2, 30, 0, 0, 0x00 },
{ 2774, 0x0036, 24, 38, 37, 4, 30, 0, 0, 0x00 }, { 3012, 0x0035, 20, 37, 36, 6, 30, 0, 0, 0x00 },
{ 3230, 0x0037, 23, 36, 36, 4, 30, 0, 0, 0x00 }, { 3382, 0x0036, 24, 38, 37, 4, 30, 0, 0, 0x00 },
{ 3662, 0x0038, 24, 38, 37, 3, 30, 0, 0, 0x00 }, { 3838, 0x0037, 23, 36, 36, 4, 30, 0, 0, 0x00 },
{ 4118, 0x0039, 25, 38, 37, 3, 30, 0, 0, 0x00 }, { 4270, 0x0038, 24, 38, 37, 3, 30, 0, 0, 0x00 },
{ 4612, 0x003F, 23, 37, 37, 4, 30, 0, 0, 0x00 } { 4726, 0x0039, 25, 38, 37, 3, 30, 0, 0, 0x00 },
{ 5220, 0x003F, 23, 37, 37, 4, 30, 0, 0, 0x00 },
{ 5664, 0x00B0, 12, 11, 37, 9, 30, 0, 0, 0x00 }
}; };
// lucon_TTF_50_4bpp // lucon_TTF_50_4bpp
@ -36,6 +38,6 @@ touchgfx::GeneratedFont& getFont_lucon_TTF_50_4bpp();
touchgfx::GeneratedFont& getFont_lucon_TTF_50_4bpp() touchgfx::GeneratedFont& getFont_lucon_TTF_50_4bpp()
{ {
static touchgfx::GeneratedFont lucon_TTF_50_4bpp(glyphs_lucon_TTF_50_4bpp, 15, 58, 50, 0, 0, 4, 1, 0, 0, unicodes_lucon_TTF_50_4bpp, kerning_lucon_TTF_50_4bpp, 63, 0, 0, 0); static touchgfx::GeneratedFont lucon_TTF_50_4bpp(glyphs_lucon_TTF_50_4bpp, 17, 58, 50, 0, 0, 4, 1, 0, 1, unicodes_lucon_TTF_50_4bpp, kerning_lucon_TTF_50_4bpp, 63, 0, 0, 0);
return lucon_TTF_50_4bpp; return lucon_TTF_50_4bpp;
} }

View File

@ -0,0 +1,43 @@
// Autogenerated, do not edit
#include <fonts/GeneratedFont.hpp>
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_80_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
{ 0, 0x0020, 0, 0, 0, 0, 48, 0, 0, 0x00 },
{ 0, 0x0025, 49, 61, 59, 0, 48, 0, 0, 0x00 },
{ 1525, 0x002B, 42, 42, 42, 3, 48, 0, 0, 0x00 },
{ 2407, 0x002C, 12, 24, 12, 18, 48, 0, 0, 0x00 },
{ 2551, 0x002D, 32, 6, 27, 8, 48, 0, 0, 0x00 },
{ 2647, 0x002E, 12, 12, 12, 18, 48, 0, 0, 0x00 },
{ 2719, 0x0030, 40, 60, 59, 4, 48, 0, 0, 0x00 },
{ 3919, 0x0031, 39, 59, 59, 7, 48, 0, 0, 0x00 },
{ 5099, 0x0032, 34, 59, 59, 6, 48, 0, 0, 0x00 },
{ 6102, 0x0033, 33, 60, 59, 9, 48, 0, 0, 0x00 },
{ 7122, 0x0034, 40, 58, 58, 4, 48, 0, 0, 0x00 },
{ 8282, 0x0035, 31, 59, 58, 10, 48, 0, 0, 0x00 },
{ 9226, 0x0036, 38, 60, 59, 6, 48, 0, 0, 0x00 },
{ 10366, 0x0037, 36, 58, 58, 7, 48, 0, 0, 0x00 },
{ 11410, 0x0038, 37, 60, 59, 6, 48, 0, 0, 0x00 },
{ 12550, 0x0039, 39, 60, 59, 5, 48, 0, 0, 0x00 },
{ 13750, 0x003F, 37, 59, 59, 6, 48, 0, 0, 0x00 }
};
// lucon_TTF_80_4bpp
FONT_TABLE_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::GlyphNode glyphs_lucon_TTF_80_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE;
FONT_GLYPH_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t unicodes_lucon_TTF_80_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE;
FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA
KEEP extern const uint8_t* const unicodes_lucon_TTF_80_4bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = {
unicodes_lucon_TTF_80_4bpp_0
};
FONT_KERNING_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::KerningNode kerning_lucon_TTF_80_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE;
touchgfx::GeneratedFont& getFont_lucon_TTF_80_4bpp();
touchgfx::GeneratedFont& getFont_lucon_TTF_80_4bpp()
{
static touchgfx::GeneratedFont lucon_TTF_80_4bpp(glyphs_lucon_TTF_80_4bpp, 17, 92, 80, 0, 0, 4, 1, 0, 1, unicodes_lucon_TTF_80_4bpp, kerning_lucon_TTF_80_4bpp, 63, 0, 0, 0);
return lucon_TTF_80_4bpp;
}

View File

@ -0,0 +1,99 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef APPSVIEWBASE_HPP
#define APPSVIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/apps_screen/APPSPresenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/graph/GraphWrapAndOverwrite.hpp>
#include <touchgfx/widgets/graph/GraphElements.hpp>
#include <touchgfx/widgets/graph/GraphLabels.hpp>
#include <touchgfx/widgets/canvas/PainterRGB565.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
class APPSViewBase : public touchgfx::View<APPSPresenter>
{
public:
APPSViewBase();
virtual ~APPSViewBase();
virtual void setupScreen();
virtual void handleKeyEvent(uint8_t key);
/*
* Virtual Action Handlers
*/
virtual void selectPrevField()
{
// Override and implement this function in APPS
}
virtual void selectNextField()
{
// Override and implement this function in APPS
}
virtual void decField()
{
// Override and implement this function in APPS
}
virtual void incField()
{
// Override and implement this function in APPS
}
virtual void confirmField()
{
// Override and implement this function in APPS
}
virtual void switchPrecision()
{
// Override and implement this function in APPS
}
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::GraphWrapAndOverwrite<50> apps0Graph;
touchgfx::GraphElementGridY apps0GraphMajorYAxisGrid;
touchgfx::GraphLabelsY apps0GraphMajorYAxisLabel;
touchgfx::GraphElementLine apps0GraphLine1;
touchgfx::PainterRGB565 apps0GraphLine1Painter;
touchgfx::GraphElementVerticalGapLine apps0GraphVerticalFrontline;
touchgfx::GraphWrapAndOverwrite<50> apps1Graph;
touchgfx::GraphElementLine apps1GraphLine1;
touchgfx::PainterRGB565 apps1GraphLine1Painter;
touchgfx::TextArea title;
touchgfx::TextArea apps0;
touchgfx::TextArea apps1;
touchgfx::TextArea min;
touchgfx::TextArea max;
touchgfx::TextArea cur;
touchgfx::Box apps1max_bg;
touchgfx::Box apps0max_bg;
touchgfx::Box apps1min_bg;
touchgfx::Box apps0min_bg;
touchgfx::TextAreaWithOneWildcard apps1cur;
touchgfx::TextAreaWithOneWildcard apps0cur;
touchgfx::TextAreaWithOneWildcard apps1max;
touchgfx::TextAreaWithOneWildcard apps0max;
touchgfx::TextAreaWithOneWildcard apps1min;
touchgfx::TextAreaWithOneWildcard apps0min;
private:
/*
* Canvas Buffer Size
*/
static const uint32_t CANVAS_BUFFER_SIZE = 7200;
uint8_t canvasBuffer[CANVAS_BUFFER_SIZE];
};
#endif // APPSVIEWBASE_HPP

View File

@ -38,6 +38,12 @@ public:
// SDC // SDC
void gotoSDCScreenNoTransition(); void gotoSDCScreenNoTransition();
// Endurance
void gotoEnduranceScreenNoTransition();
// APPS
void gotoAPPSScreenNoTransition();
protected: protected:
touchgfx::Callback<FrontendApplicationBase> transitionCallback; touchgfx::Callback<FrontendApplicationBase> transitionCallback;
FrontendHeap& frontendHeap; FrontendHeap& frontendHeap;
@ -60,6 +66,12 @@ protected:
// SDC // SDC
void gotoSDCScreenNoTransitionImpl(); void gotoSDCScreenNoTransitionImpl();
// Endurance
void gotoEnduranceScreenNoTransitionImpl();
// APPS
void gotoAPPSScreenNoTransitionImpl();
}; };
#endif // FRONTENDAPPLICATIONBASE_HPP #endif // FRONTENDAPPLICATIONBASE_HPP

View File

@ -24,6 +24,10 @@
#include <gui/vehicleconfig_screen/VehicleConfigPresenter.hpp> #include <gui/vehicleconfig_screen/VehicleConfigPresenter.hpp>
#include <gui/sdc_screen/SDCView.hpp> #include <gui/sdc_screen/SDCView.hpp>
#include <gui/sdc_screen/SDCPresenter.hpp> #include <gui/sdc_screen/SDCPresenter.hpp>
#include <gui/endurance_screen/EnduranceView.hpp>
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <gui/apps_screen/APPSView.hpp>
#include <gui/apps_screen/APPSPresenter.hpp>
/** /**
@ -52,7 +56,9 @@ public:
touchgfx::meta::TypeList< DebugViewView, touchgfx::meta::TypeList< DebugViewView,
touchgfx::meta::TypeList< VehicleConfigView, touchgfx::meta::TypeList< VehicleConfigView,
touchgfx::meta::TypeList< SDCView, touchgfx::meta::TypeList< SDCView,
touchgfx::meta::Nil > > > > > touchgfx::meta::TypeList< EnduranceView,
touchgfx::meta::TypeList< APPSView,
touchgfx::meta::Nil > > > > > > >
> GeneratedViewTypes; > GeneratedViewTypes;
/** /**
@ -70,7 +76,9 @@ public:
touchgfx::meta::TypeList< DebugViewPresenter, touchgfx::meta::TypeList< DebugViewPresenter,
touchgfx::meta::TypeList< VehicleConfigPresenter, touchgfx::meta::TypeList< VehicleConfigPresenter,
touchgfx::meta::TypeList< SDCPresenter, touchgfx::meta::TypeList< SDCPresenter,
touchgfx::meta::Nil > > > > > touchgfx::meta::TypeList< EndurancePresenter,
touchgfx::meta::TypeList< APPSPresenter,
touchgfx::meta::Nil > > > > > > >
> GeneratedPresenterTypes; > GeneratedPresenterTypes;
/** /**

View File

@ -0,0 +1,37 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef PROGRESSBARBASE_HPP
#define PROGRESSBARBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/containers/progress_indicators/BoxProgress.hpp>
class ProgressBarBase : public touchgfx::Container
{
public:
ProgressBarBase();
virtual ~ProgressBarBase();
virtual void initialize();
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::TextAreaWithOneWildcard r2dProgressLabel;
touchgfx::TextArea r2dLabel;
touchgfx::TextArea prechargeLabel;
touchgfx::BoxProgress progressBar;
private:
};
#endif // PROGRESSBARBASE_HPP

View File

@ -20,7 +20,7 @@
#include <gui/containers/DriverViewField.hpp> #include <gui/containers/DriverViewField.hpp>
#include <touchgfx/containers/ListLayout.hpp> #include <touchgfx/containers/ListLayout.hpp>
#include <gui/containers/DriverViewStatusItem.hpp> #include <gui/containers/DriverViewStatusItem.hpp>
#include <touchgfx/containers/progress_indicators/BoxProgress.hpp> #include <gui/containers/ProgressBar.hpp>
#include <gui/containers/ErrorPopup.hpp> #include <gui/containers/ErrorPopup.hpp>
class DriverViewViewBase : public touchgfx::View<DriverViewPresenter> class DriverViewViewBase : public touchgfx::View<DriverViewPresenter>
@ -98,10 +98,7 @@ protected:
DriverViewStatusItem statusPDU; DriverViewStatusItem statusPDU;
DriverViewStatusItem statusINV; DriverViewStatusItem statusINV;
DriverViewStatusItem statusLV; DriverViewStatusItem statusLV;
touchgfx::BoxProgress progressBar; ProgressBar progressBar;
touchgfx::TextArea prechargeLabel;
touchgfx::TextArea r2dLabel;
touchgfx::TextAreaWithOneWildcard r2dProgressLabel;
ErrorPopup errorPopup; ErrorPopup errorPopup;
private: private:

View File

@ -0,0 +1,79 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#ifndef ENDURANCEVIEWBASE_HPP
#define ENDURANCEVIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/containers/Container.hpp>
#include <touchgfx/widgets/BoxWithBorder.hpp>
#include <touchgfx/widgets/TextArea.hpp>
#include <touchgfx/widgets/TextAreaWithWildcard.hpp>
#include <gui/containers/ProgressBar.hpp>
class EnduranceViewBase : public touchgfx::View<EndurancePresenter>
{
public:
EnduranceViewBase();
virtual ~EnduranceViewBase();
virtual void setupScreen();
virtual void handleKeyEvent(uint8_t key);
/*
* Virtual Action Handlers
*/
virtual void decreasePowerLimit()
{
// Override and implement this function in Endurance
}
virtual void increasePowerLimit()
{
// Override and implement this function in Endurance
}
virtual void decreaseSpeedLimit()
{
// Override and implement this function in Endurance
}
virtual void increaseSpeedLimit()
{
// Override and implement this function in Endurance
}
protected:
FrontendApplication& application() {
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
}
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::Container detailContainer;
touchgfx::BoxWithBorder boxWithBorder2;
touchgfx::BoxWithBorder boxWithBorder2_1;
touchgfx::BoxWithBorder boxWithBorder3;
touchgfx::BoxWithBorder boxWithBorder3_1;
touchgfx::TextArea textArea3;
touchgfx::TextArea textArea3_1;
touchgfx::TextAreaWithOneWildcard powerLimit;
touchgfx::TextAreaWithOneWildcard speedLimit;
touchgfx::TextAreaWithOneWildcard soc;
touchgfx::TextAreaWithOneWildcard batTemp;
touchgfx::Container overallContainer;
touchgfx::BoxWithBorder overallBox;
touchgfx::TextArea textArea1_1;
touchgfx::TextAreaWithOneWildcard overallBat;
touchgfx::Container lastLapContainer;
touchgfx::BoxWithBorder lastLapBox;
touchgfx::TextArea textArea1;
touchgfx::TextAreaWithOneWildcard lastLapBat;
ProgressBar progressBar;
private:
};
#endif // ENDURANCEVIEWBASE_HPP

View File

@ -0,0 +1,216 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/apps_screen/APPSViewBase.hpp>
#include <touchgfx/canvas_widget_renderer/CanvasWidgetRenderer.hpp>
#include <touchgfx/Color.hpp>
#include <texts/TextKeysAndLanguages.hpp>
APPSViewBase::APPSViewBase()
{
touchgfx::CanvasWidgetRenderer::setupBuffer(canvasBuffer, CANVAS_BUFFER_SIZE);
__background.setPosition(0, 0, 480, 320);
__background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
add(__background);
apps0Graph.setPosition(11, 36, 458, 180);
apps0Graph.setScale(10);
apps0Graph.setGraphAreaMargin(0, 40, 0, 0);
apps0Graph.setGraphAreaPadding(0, 0, 0, 0);
apps0Graph.setGraphRangeY(-10, 110);
apps0GraphMajorYAxisGrid.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0GraphMajorYAxisGrid.setInterval(20);
apps0GraphMajorYAxisGrid.setLineWidth(1);
apps0GraphMajorYAxisGrid.setScale(10);
apps0Graph.addGraphElement(apps0GraphMajorYAxisGrid);
apps0GraphMajorYAxisLabel.setInterval(20);
apps0GraphMajorYAxisLabel.setLabelTypedText(touchgfx::TypedText(T___SINGLEUSE_RK9Z));
apps0GraphMajorYAxisLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0GraphMajorYAxisLabel.setScale(10);
apps0Graph.addLeftElement(apps0GraphMajorYAxisLabel);
apps0GraphLine1Painter.setColor(touchgfx::Color::getColorFromRGB(20, 151, 197));
apps0GraphLine1.setPainter(apps0GraphLine1Painter);
apps0GraphLine1.setLineWidth(2);
apps0Graph.addGraphElement(apps0GraphLine1);
apps0GraphVerticalFrontline.setColor(touchgfx::Color::getColorFromRGB(137, 224, 13));
apps0GraphVerticalFrontline.setGapLineWidth(1);
apps0Graph.addGraphElement(apps0GraphVerticalFrontline);
add(apps0Graph);
apps1Graph.setPosition(11, 36, 458, 180);
apps1Graph.setScale(10);
apps1Graph.setGraphAreaMargin(0, 0, 0, 0);
apps1Graph.setGraphAreaPadding(0, 40, 0, 0);
apps1Graph.setGraphRangeY(-10, 110);
apps1GraphLine1Painter.setColor(touchgfx::Color::getColorFromRGB(196, 109, 22));
apps1GraphLine1.setPainter(apps1GraphLine1Painter);
apps1GraphLine1.setLineWidth(2);
apps1Graph.addGraphElement(apps1GraphLine1);
add(apps1Graph);
title.setXY(38, 0);
title.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
title.setLinespacing(0);
title.setTypedText(touchgfx::TypedText(T___SINGLEUSE_UBFH));
add(title);
apps0.setXY(11, 247);
apps0.setColor(touchgfx::Color::getColorFromRGB(20, 151, 197));
apps0.setLinespacing(0);
apps0.setTypedText(touchgfx::TypedText(T___SINGLEUSE_6EKV));
add(apps0);
apps1.setXY(11, 285);
apps1.setColor(touchgfx::Color::getColorFromRGB(196, 109, 22));
apps1.setLinespacing(0);
apps1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_W4YT));
add(apps1);
min.setPosition(127, 216, 100, 24);
min.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
min.setLinespacing(0);
min.setTypedText(touchgfx::TypedText(T___SINGLEUSE_QXG5));
add(min);
max.setPosition(250, 216, 100, 24);
max.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
max.setLinespacing(0);
max.setTypedText(touchgfx::TypedText(T___SINGLEUSE_WQXQ));
add(max);
cur.setPosition(369, 216, 100, 24);
cur.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
cur.setLinespacing(0);
cur.setTypedText(touchgfx::TypedText(T___SINGLEUSE_CBZ9));
add(cur);
apps1max_bg.setPosition(250, 278, 100, 38);
apps1max_bg.setColor(touchgfx::Color::getColorFromRGB(68, 68, 68));
apps1max_bg.setVisible(false);
add(apps1max_bg);
apps0max_bg.setPosition(250, 240, 100, 38);
apps0max_bg.setColor(touchgfx::Color::getColorFromRGB(68, 68, 68));
apps0max_bg.setVisible(false);
add(apps0max_bg);
apps1min_bg.setPosition(127, 278, 100, 38);
apps1min_bg.setColor(touchgfx::Color::getColorFromRGB(68, 68, 68));
apps1min_bg.setVisible(false);
add(apps1min_bg);
apps0min_bg.setPosition(127, 240, 100, 38);
apps0min_bg.setColor(touchgfx::Color::getColorFromRGB(68, 68, 68));
apps0min_bg.setVisible(false);
add(apps0min_bg);
apps1cur.setPosition(369, 278, 100, 38);
apps1cur.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps1cur.setLinespacing(0);
apps1cur.setTypedText(touchgfx::TypedText(T___SINGLEUSE_SM6H));
add(apps1cur);
apps0cur.setPosition(369, 240, 100, 38);
apps0cur.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0cur.setLinespacing(0);
apps0cur.setTypedText(touchgfx::TypedText(T___SINGLEUSE_8KB4));
add(apps0cur);
apps1max.setPosition(250, 278, 100, 38);
apps1max.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps1max.setLinespacing(0);
apps1max.setTypedText(touchgfx::TypedText(T___SINGLEUSE_H8OI));
add(apps1max);
apps0max.setPosition(250, 240, 100, 38);
apps0max.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0max.setLinespacing(0);
apps0max.setTypedText(touchgfx::TypedText(T___SINGLEUSE_978V));
add(apps0max);
apps1min.setPosition(127, 278, 100, 38);
apps1min.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps1min.setLinespacing(0);
apps1min.setTypedText(touchgfx::TypedText(T___SINGLEUSE_P4TL));
add(apps1min);
apps0min.setPosition(127, 240, 100, 38);
apps0min.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
apps0min.setLinespacing(0);
apps0min.setTypedText(touchgfx::TypedText(T___SINGLEUSE_MBQT));
add(apps0min);
}
APPSViewBase::~APPSViewBase()
{
touchgfx::CanvasWidgetRenderer::resetBuffer();
}
void APPSViewBase::setupScreen()
{
}
void APPSViewBase::handleKeyEvent(uint8_t key)
{
if(104 == key)
{
//SelectPrevField
//When hardware button 104 clicked call virtual function
//Call selectPrevField
selectPrevField();
}
if(108 == key)
{
//SelectNextField
//When hardware button 108 clicked call virtual function
//Call selectNextField
selectNextField();
}
if(107 == key)
{
//DecField
//When hardware button 107 clicked call virtual function
//Call decField
decField();
}
if(106 == key)
{
//IncField
//When hardware button 106 clicked call virtual function
//Call incField
incField();
}
if(54 == key)
{
//ConfirmField
//When hardware button 54 clicked call virtual function
//Call confirmField
confirmField();
}
if(53 == key)
{
//SwitchPrecision
//When hardware button 53 clicked call virtual function
//Call switchPrecision
switchPrecision();
}
}

View File

@ -21,6 +21,10 @@
#include <gui/vehicleconfig_screen/VehicleConfigPresenter.hpp> #include <gui/vehicleconfig_screen/VehicleConfigPresenter.hpp>
#include <gui/sdc_screen/SDCView.hpp> #include <gui/sdc_screen/SDCView.hpp>
#include <gui/sdc_screen/SDCPresenter.hpp> #include <gui/sdc_screen/SDCPresenter.hpp>
#include <gui/endurance_screen/EnduranceView.hpp>
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <gui/apps_screen/APPSView.hpp>
#include <gui/apps_screen/APPSPresenter.hpp>
using namespace touchgfx; using namespace touchgfx;
@ -117,3 +121,29 @@ void FrontendApplicationBase::gotoSDCScreenNoTransitionImpl()
{ {
touchgfx::makeTransition<SDCView, SDCPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model); touchgfx::makeTransition<SDCView, SDCPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
} }
// Endurance
void FrontendApplicationBase::gotoEnduranceScreenNoTransition()
{
transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplicationBase::gotoEnduranceScreenNoTransitionImpl);
pendingScreenTransitionCallback = &transitionCallback;
}
void FrontendApplicationBase::gotoEnduranceScreenNoTransitionImpl()
{
touchgfx::makeTransition<EnduranceView, EndurancePresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}
// APPS
void FrontendApplicationBase::gotoAPPSScreenNoTransition()
{
transitionCallback = touchgfx::Callback<FrontendApplicationBase>(this, &FrontendApplicationBase::gotoAPPSScreenNoTransitionImpl);
pendingScreenTransitionCallback = &transitionCallback;
}
void FrontendApplicationBase::gotoAPPSScreenNoTransitionImpl()
{
touchgfx::makeTransition<APPSView, APPSPresenter, touchgfx::NoTransition, Model >(&currentScreen, &currentPresenter, frontendHeap, &currentTransition, &model);
}

View File

@ -0,0 +1,53 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/containers/ProgressBarBase.hpp>
#include <texts/TextKeysAndLanguages.hpp>
#include <touchgfx/Color.hpp>
#include <images/BitmapDatabase.hpp>
ProgressBarBase::ProgressBarBase()
{
setWidth(456);
setHeight(33);
r2dProgressLabel.setPosition(168, -2, 219, 37);
r2dProgressLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
r2dProgressLabel.setLinespacing(0);
r2dProgressLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_6EXA));
r2dProgressLabel.setVisible(false);
add(r2dProgressLabel);
r2dLabel.setPosition(70, -2, 317, 37);
r2dLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
r2dLabel.setLinespacing(0);
r2dLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_570K));
r2dLabel.setVisible(false);
add(r2dLabel);
prechargeLabel.setXY(95, -2);
prechargeLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
prechargeLabel.setLinespacing(0);
prechargeLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_G2S2));
prechargeLabel.setVisible(false);
add(prechargeLabel);
progressBar.setXY(0, 0);
progressBar.setProgressIndicatorPosition(0, 0, 480, 55);
progressBar.setRange(0, 100);
progressBar.setDirection(touchgfx::AbstractDirectionProgress::RIGHT);
progressBar.setBackground(touchgfx::Bitmap(BITMAP_PROG_HORIZ_BG_ID));
progressBar.setColor(touchgfx::Color::getColorFromRGB(99, 186, 0));
progressBar.setValue(0);
progressBar.setVisible(false);
add(progressBar);
}
ProgressBarBase::~ProgressBarBase()
{
}
void ProgressBarBase::initialize()
{
}

View File

@ -124,36 +124,8 @@ DriverViewViewBase::DriverViewViewBase() :
statusBar.add(statusItems); statusBar.add(statusItems);
progressBar.setXY(0, 0); progressBar.setXY(0, 0);
progressBar.setProgressIndicatorPosition(0, 0, 480, 55);
progressBar.setRange(0, 100);
progressBar.setDirection(touchgfx::AbstractDirectionProgress::RIGHT);
progressBar.setBackground(touchgfx::Bitmap(BITMAP_PROG_HORIZ_BG_ID));
progressBar.setColor(touchgfx::Color::getColorFromRGB(99, 186, 0));
progressBar.setValue(0);
progressBar.setVisible(false);
statusBar.add(progressBar); statusBar.add(progressBar);
prechargeLabel.setXY(95, -2);
prechargeLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
prechargeLabel.setLinespacing(0);
prechargeLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_HMH2));
prechargeLabel.setVisible(false);
statusBar.add(prechargeLabel);
r2dLabel.setPosition(70, -2, 317, 37);
r2dLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
r2dLabel.setLinespacing(0);
r2dLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_NGUK));
r2dLabel.setVisible(false);
statusBar.add(r2dLabel);
r2dProgressLabel.setPosition(168, -2, 219, 37);
r2dProgressLabel.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
r2dProgressLabel.setLinespacing(0);
r2dProgressLabel.setTypedText(touchgfx::TypedText(T___SINGLEUSE_J5UH));
r2dProgressLabel.setVisible(false);
statusBar.add(r2dProgressLabel);
add(statusBar); add(statusBar);
errorPopup.setXY(12, 125); errorPopup.setXY(12, 125);
@ -187,6 +159,7 @@ void DriverViewViewBase::setupScreen()
statusPDU.initialize(); statusPDU.initialize();
statusINV.initialize(); statusINV.initialize();
statusLV.initialize(); statusLV.initialize();
progressBar.initialize();
errorPopup.initialize(); errorPopup.initialize();
} }

View File

@ -0,0 +1,170 @@
/*********************************************************************************/
/********** THIS FILE IS GENERATED BY TOUCHGFX DESIGNER, DO NOT MODIFY ***********/
/*********************************************************************************/
#include <gui_generated/endurance_screen/EnduranceViewBase.hpp>
#include <touchgfx/Color.hpp>
#include <texts/TextKeysAndLanguages.hpp>
EnduranceViewBase::EnduranceViewBase()
{
__background.setPosition(0, 0, 480, 320);
__background.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
add(__background);
detailContainer.setPosition(12, 187, 456, 118);
boxWithBorder2.setPosition(0, 0, 152, 118);
boxWithBorder2.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
boxWithBorder2.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
boxWithBorder2.setBorderSize(3);
detailContainer.add(boxWithBorder2);
boxWithBorder2_1.setPosition(304, 0, 152, 118);
boxWithBorder2_1.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
boxWithBorder2_1.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
boxWithBorder2_1.setBorderSize(3);
detailContainer.add(boxWithBorder2_1);
boxWithBorder3.setPosition(152, 0, 152, 59);
boxWithBorder3.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
boxWithBorder3.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
boxWithBorder3.setBorderSize(3);
detailContainer.add(boxWithBorder3);
boxWithBorder3_1.setPosition(152, 59, 152, 59);
boxWithBorder3_1.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
boxWithBorder3_1.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
boxWithBorder3_1.setBorderSize(3);
detailContainer.add(boxWithBorder3_1);
textArea3.setXY(27, 2);
textArea3.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea3.setLinespacing(0);
textArea3.setTypedText(touchgfx::TypedText(T___SINGLEUSE_QAZ3));
detailContainer.add(textArea3);
textArea3_1.setXY(329, 2);
textArea3_1.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea3_1.setLinespacing(0);
textArea3_1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_1F9T));
detailContainer.add(textArea3_1);
powerLimit.setPosition(28, 20, 96, 92);
powerLimit.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
powerLimit.setLinespacing(0);
powerLimit.setTypedText(touchgfx::TypedText(T___SINGLEUSE_4X8X));
detailContainer.add(powerLimit);
speedLimit.setPosition(308, 20, 144, 92);
speedLimit.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
speedLimit.setLinespacing(0);
speedLimit.setTypedText(touchgfx::TypedText(T___SINGLEUSE_DONW));
detailContainer.add(speedLimit);
soc.setPosition(168, -2, 120, 58);
soc.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
soc.setLinespacing(0);
soc.setTypedText(touchgfx::TypedText(T___SINGLEUSE_OP6C));
detailContainer.add(soc);
batTemp.setPosition(157, 57, 150, 58);
batTemp.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
batTemp.setLinespacing(0);
batTemp.setTypedText(touchgfx::TypedText(T___SINGLEUSE_B2Q6));
detailContainer.add(batTemp);
add(detailContainer);
overallContainer.setPosition(248, 15, 220, 160);
overallBox.setPosition(0, 0, 220, 160);
overallBox.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
overallBox.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
overallBox.setBorderSize(3);
overallContainer.add(overallBox);
textArea1_1.setPosition(9, 7, 203, 24);
textArea1_1.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea1_1.setLinespacing(0);
textArea1_1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_DJ62));
overallContainer.add(textArea1_1);
overallBat.setPosition(14, 40, 192, 92);
overallBat.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
overallBat.setLinespacing(0);
overallBat.setTypedText(touchgfx::TypedText(T___SINGLEUSE_FPXE));
overallContainer.add(overallBat);
add(overallContainer);
lastLapContainer.setPosition(12, 15, 220, 160);
lastLapBox.setPosition(0, 0, 220, 160);
lastLapBox.setColor(touchgfx::Color::getColorFromRGB(0, 0, 0));
lastLapBox.setBorderColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
lastLapBox.setBorderSize(3);
lastLapContainer.add(lastLapBox);
textArea1.setXY(8, 7);
textArea1.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
textArea1.setLinespacing(0);
textArea1.setTypedText(touchgfx::TypedText(T___SINGLEUSE_5W6Y));
lastLapContainer.add(textArea1);
lastLapBat.setPosition(14, 40, 192, 92);
lastLapBat.setColor(touchgfx::Color::getColorFromRGB(255, 255, 255));
lastLapBat.setLinespacing(0);
lastLapBat.setTypedText(touchgfx::TypedText(T___SINGLEUSE_51AZ));
lastLapContainer.add(lastLapBat);
add(lastLapContainer);
progressBar.setXY(12, 15);
add(progressBar);
}
EnduranceViewBase::~EnduranceViewBase()
{
}
void EnduranceViewBase::setupScreen()
{
progressBar.initialize();
}
void EnduranceViewBase::handleKeyEvent(uint8_t key)
{
if(104 == key)
{
//DecreasePLim
//When hardware button 104 clicked call virtual function
//Call decreasePowerLimit
decreasePowerLimit();
}
if(108 == key)
{
//IncreasePLim
//When hardware button 108 clicked call virtual function
//Call increasePowerLimit
increasePowerLimit();
}
if(107 == key)
{
//DecreaseSLim
//When hardware button 107 clicked call virtual function
//Call decreaseSpeedLimit
decreaseSpeedLimit();
}
if(106 == key)
{
//IncreaseSLim
//When hardware button 106 clicked call virtual function
//Call increaseSpeedLimit
increaseSpeedLimit();
}
}

View File

@ -144,4 +144,22 @@ void MissionSelectViewBase::handleKeyEvent(uint8_t key)
application().gotoSDCScreenNoTransition(); application().gotoSDCScreenNoTransition();
} }
if(249 == key)
{
//DummyChangeEnduranceView
//When hardware button 249 clicked change screen to Endurance
//Go to Endurance with no screen transition
application().gotoEnduranceScreenNoTransition();
}
if(248 == key)
{
//DummyChangeAPPSView
//When hardware button 248 clicked change screen to APPS
//Go to APPS with no screen transition
application().gotoAPPSScreenNoTransition();
}
} }

View File

@ -1 +1 @@
{"remap":"yes","language":"GB","language_index":0,"indices":[["490","T_LV"],["376","T_PDU"],["482","T_SCS"],["486","T_SDC"],["478","T_R2D"],["475","T_TS"],["470","T_INV"],["364","T_AMS"],["210","T_ERROR_AMS"],["175","T_DEBUGVIEWFIELD_TITLE"],["175","T_DRIVERVIEWFIELD_TITLE"],["175","T_NUMBERSMALLWILDCARD"],["416","T_FIELD_BBAL"],["355","T_FIELD_TSVOLTVEH"],["348","T_FIELD_TSVOLTBAT"],["392","T_FIELD_LVSOC"],["410","T_FIELD_TSSOC"],["431","T_FIELD_MAXCELLTEMP"],["441","T_FIELD_TIREFL"],["446","T_FIELD_TIREFR"],["451","T_FIELD_TIRERL"],["456","T_FIELD_TIRERR"],["426","T_FIELD_LAPCOUNT"],["277","T_FIELD_INICHKSTATE"],["386","T_FIELD_ERR"],["486","T_FIELD_SDC"],["293","T_FIELD_INVRREADY"],["285","T_FIELD_INVLREADY"],["317","T_FIELD_R2DPROGRESS"],["301","T_FIELD_ACTIVEMISSION"],["261","T_FIELD_ASSTATE"],["333","T_FIELD_TSSTATE"],["175","T_NUMBERWILDCARD"],["175","T_DEFAULTWILDCARD_CENTERED"],["175","T_DEFAULTWILDCARD_RIGHTALIGNED"],["474","T_FIELD_TSCURRENT"],["461","T_FIELD_MINCELLVOLT"],["404","T_FIELD_SPEED"],["177","T_INSPECTION_HUGE"],["252","T_EBS_HUGE"],["199","T_TRACKDRIVE_HUGE"],["220","T_AUTOX_HUGE"],["325","T_SKIDPAD_HUGE"],["146","T_ACCEL_HUGE"],["35","T_INVALID_HUGE"],["116","T_MANUAL"],["177","T_INSPECTION"],["252","T_EBS"],["199","T_TRACKDRIVE"],["220","T_AUTOX"],["325","T_SKIDPAD"],["146","T_ACCEL"],["172","T___SINGLEUSE_C17G"],["362","T___SINGLEUSE_XFW7"],["368","T___SINGLEUSE_N50J"],["466","T___SINGLEUSE_V38H"],["436","T___SINGLEUSE_XC1X"],["243","T___SINGLEUSE_KI1B"],["159","T___SINGLEUSE_QNHI"],["0","T___SINGLEUSE_43KA"],["374","T___SINGLEUSE_YRU7"],["421","T___SINGLEUSE_E6D7"],["175","T___SINGLEUSE_ZEKA"],["131","T___SINGLEUSE_0L75"],["100","T___SINGLEUSE_GA13"],["175","T___SINGLEUSE_THUG"],["175","T___SINGLEUSE_CO7A"],["175","T___SINGLEUSE_A0LF"],["175","T___SINGLEUSE_166C"],["84","T___SINGLEUSE_OOU3"],["68","T___SINGLEUSE_2FPP"],["175","T___SINGLEUSE_2S21"],["175","T___SINGLEUSE_OQ6P"],["309","T___SINGLEUSE_590R"],["269","T___SINGLEUSE_Z78U"],["175","T___SINGLEUSE_LLOZ"],["175","T___SINGLEUSE_232C"],["398","T___SINGLEUSE_JFR7"],["380","T___SINGLEUSE_3MDX"],["17","T___SINGLEUSE_F9I5"],["175","T___SINGLEUSE_9L8R"],["17","T___SINGLEUSE_1NKF"],["175","T___SINGLEUSE_J5UH"],["478","T___SINGLEUSE_NGUK"],["175","T___SINGLEUSE_4E84"],["175","T___SINGLEUSE_YTAB"],["188","T___SINGLEUSE_RWCE"],["230","T___SINGLEUSE_HMH2"],["240","T___SINGLEUSE_PHFD"],["341","T___SINGLEUSE_H6UX"],["175","T___SINGLEUSE_20H3"],["52","T___SINGLEUSE_M5X7"],["18","T___SINGLEUSE_6GPV"]]} {"remap":"yes","language":"GB","language_index":0,"indices":[["557","T_LV"],["421","T_PDU"],["549","T_SCS"],["553","T_SDC"],["545","T_R2D"],["542","T_TS"],["537","T_INV"],["409","T_AMS"],["252","T_ERROR_AMS"],["217","T_DEBUGVIEWFIELD_TITLE"],["217","T_DRIVERVIEWFIELD_TITLE"],["217","T_NUMBERSMALLWILDCARD"],["479","T_FIELD_BBAL"],["400","T_FIELD_TSVOLTVEH"],["393","T_FIELD_TSVOLTBAT"],["449","T_FIELD_LVSOC"],["473","T_FIELD_TSSOC"],["494","T_FIELD_MAXCELLTEMP"],["504","T_FIELD_TIREFL"],["509","T_FIELD_TIREFR"],["514","T_FIELD_TIRERL"],["519","T_FIELD_TIRERR"],["489","T_FIELD_LAPCOUNT"],["322","T_FIELD_INICHKSTATE"],["443","T_FIELD_ERR"],["553","T_FIELD_SDC"],["338","T_FIELD_INVRREADY"],["330","T_FIELD_INVLREADY"],["362","T_FIELD_R2DPROGRESS"],["346","T_FIELD_ACTIVEMISSION"],["306","T_FIELD_ASSTATE"],["378","T_FIELD_TSSTATE"],["217","T_NUMBERWILDCARD"],["217","T_DEFAULTWILDCARD_CENTERED"],["217","T_DEFAULTWILDCARD_RIGHTALIGNED"],["541","T_FIELD_TSCURRENT"],["524","T_FIELD_MINCELLVOLT"],["467","T_FIELD_SPEED"],["219","T_INSPECTION_HUGE"],["297","T_EBS_HUGE"],["241","T_TRACKDRIVE_HUGE"],["262","T_AUTOX_HUGE"],["370","T_SKIDPAD_HUGE"],["163","T_ACCEL_HUGE"],["52","T_INVALID_HUGE"],["133","T_MANUAL"],["219","T_INSPECTION"],["297","T_EBS"],["241","T_TRACKDRIVE"],["262","T_AUTOX"],["370","T_SKIDPAD"],["163","T_ACCEL"],["431","T___SINGLEUSE_W4YT"],["217","T___SINGLEUSE_SM6H"],["217","T___SINGLEUSE_8KB4"],["217","T___SINGLEUSE_P4TL"],["533","T___SINGLEUSE_CBZ9"],["495","T___SINGLEUSE_WQXQ"],["525","T___SINGLEUSE_QXG5"],["217","T___SINGLEUSE_MBQT"],["217","T___SINGLEUSE_978V"],["217","T___SINGLEUSE_H8OI"],["425","T___SINGLEUSE_6EKV"],["217","T___SINGLEUSE_RK9Z"],["18","T___SINGLEUSE_UBFH"],["217","T___SINGLEUSE_6EXA"],["545","T___SINGLEUSE_570K"],["272","T___SINGLEUSE_G2S2"],["285","T___SINGLEUSE_B2Q6"],["282","T___SINGLEUSE_OP6C"],["467","T___SINGLEUSE_1F9T"],["461","T___SINGLEUSE_QAZ3"],["217","T___SINGLEUSE_DONW"],["217","T___SINGLEUSE_4X8X"],["282","T___SINGLEUSE_FPXE"],["282","T___SINGLEUSE_51AZ"],["202","T___SINGLEUSE_DJ62"],["176","T___SINGLEUSE_5W6Y"],["214","T___SINGLEUSE_C17G"],["407","T___SINGLEUSE_XFW7"],["413","T___SINGLEUSE_N50J"],["529","T___SINGLEUSE_V38H"],["499","T___SINGLEUSE_XC1X"],["288","T___SINGLEUSE_KI1B"],["189","T___SINGLEUSE_QNHI"],["0","T___SINGLEUSE_43KA"],["419","T___SINGLEUSE_YRU7"],["484","T___SINGLEUSE_E6D7"],["217","T___SINGLEUSE_ZEKA"],["148","T___SINGLEUSE_0L75"],["117","T___SINGLEUSE_GA13"],["217","T___SINGLEUSE_THUG"],["217","T___SINGLEUSE_CO7A"],["217","T___SINGLEUSE_A0LF"],["217","T___SINGLEUSE_166C"],["101","T___SINGLEUSE_OOU3"],["85","T___SINGLEUSE_2FPP"],["217","T___SINGLEUSE_2S21"],["217","T___SINGLEUSE_OQ6P"],["354","T___SINGLEUSE_590R"],["314","T___SINGLEUSE_Z78U"],["217","T___SINGLEUSE_LLOZ"],["217","T___SINGLEUSE_232C"],["455","T___SINGLEUSE_JFR7"],["437","T___SINGLEUSE_3MDX"],["17","T___SINGLEUSE_F9I5"],["217","T___SINGLEUSE_9L8R"],["17","T___SINGLEUSE_1NKF"],["217","T___SINGLEUSE_4E84"],["217","T___SINGLEUSE_YTAB"],["230","T___SINGLEUSE_RWCE"],["282","T___SINGLEUSE_PHFD"],["386","T___SINGLEUSE_H6UX"],["217","T___SINGLEUSE_20H3"],["69","T___SINGLEUSE_M5X7"],["35","T___SINGLEUSE_6GPV"]]}

View File

@ -1 +1 @@
{"languages":["GB"],"textids":["T_LV","T_PDU","T_SCS","T_SDC","T_R2D","T_TS","T_INV","T_AMS","T_ERROR_AMS","T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_NUMBERSMALLWILDCARD","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_C17G","T___SINGLEUSE_XFW7","T___SINGLEUSE_N50J","T___SINGLEUSE_V38H","T___SINGLEUSE_XC1X","T___SINGLEUSE_KI1B","T___SINGLEUSE_QNHI","T___SINGLEUSE_43KA","T___SINGLEUSE_YRU7","T___SINGLEUSE_E6D7","T___SINGLEUSE_ZEKA","T___SINGLEUSE_0L75","T___SINGLEUSE_GA13","T___SINGLEUSE_THUG","T___SINGLEUSE_CO7A","T___SINGLEUSE_A0LF","T___SINGLEUSE_166C","T___SINGLEUSE_OOU3","T___SINGLEUSE_2FPP","T___SINGLEUSE_2S21","T___SINGLEUSE_OQ6P","T___SINGLEUSE_590R","T___SINGLEUSE_Z78U","T___SINGLEUSE_LLOZ","T___SINGLEUSE_232C","T___SINGLEUSE_JFR7","T___SINGLEUSE_3MDX","T___SINGLEUSE_F9I5","T___SINGLEUSE_9L8R","T___SINGLEUSE_1NKF","T___SINGLEUSE_J5UH","T___SINGLEUSE_NGUK","T___SINGLEUSE_4E84","T___SINGLEUSE_YTAB","T___SINGLEUSE_RWCE","T___SINGLEUSE_HMH2","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]} {"languages":["GB"],"textids":["T_LV","T_PDU","T_SCS","T_SDC","T_R2D","T_TS","T_INV","T_AMS","T_ERROR_AMS","T_DEBUGVIEWFIELD_TITLE","T_DRIVERVIEWFIELD_TITLE","T_NUMBERSMALLWILDCARD","T_FIELD_BBAL","T_FIELD_TSVOLTVEH","T_FIELD_TSVOLTBAT","T_FIELD_LVSOC","T_FIELD_TSSOC","T_FIELD_MAXCELLTEMP","T_FIELD_TIREFL","T_FIELD_TIREFR","T_FIELD_TIRERL","T_FIELD_TIRERR","T_FIELD_LAPCOUNT","T_FIELD_INICHKSTATE","T_FIELD_ERR","T_FIELD_SDC","T_FIELD_INVRREADY","T_FIELD_INVLREADY","T_FIELD_R2DPROGRESS","T_FIELD_ACTIVEMISSION","T_FIELD_ASSTATE","T_FIELD_TSSTATE","T_NUMBERWILDCARD","T_DEFAULTWILDCARD_CENTERED","T_DEFAULTWILDCARD_RIGHTALIGNED","T_FIELD_TSCURRENT","T_FIELD_MINCELLVOLT","T_FIELD_SPEED","T_INSPECTION_HUGE","T_EBS_HUGE","T_TRACKDRIVE_HUGE","T_AUTOX_HUGE","T_SKIDPAD_HUGE","T_ACCEL_HUGE","T_INVALID_HUGE","T_MANUAL","T_INSPECTION","T_EBS","T_TRACKDRIVE","T_AUTOX","T_SKIDPAD","T_ACCEL","T___SINGLEUSE_W4YT","T___SINGLEUSE_SM6H","T___SINGLEUSE_8KB4","T___SINGLEUSE_P4TL","T___SINGLEUSE_CBZ9","T___SINGLEUSE_WQXQ","T___SINGLEUSE_QXG5","T___SINGLEUSE_MBQT","T___SINGLEUSE_978V","T___SINGLEUSE_H8OI","T___SINGLEUSE_6EKV","T___SINGLEUSE_RK9Z","T___SINGLEUSE_UBFH","T___SINGLEUSE_6EXA","T___SINGLEUSE_570K","T___SINGLEUSE_G2S2","T___SINGLEUSE_B2Q6","T___SINGLEUSE_OP6C","T___SINGLEUSE_1F9T","T___SINGLEUSE_QAZ3","T___SINGLEUSE_DONW","T___SINGLEUSE_4X8X","T___SINGLEUSE_FPXE","T___SINGLEUSE_51AZ","T___SINGLEUSE_DJ62","T___SINGLEUSE_5W6Y","T___SINGLEUSE_C17G","T___SINGLEUSE_XFW7","T___SINGLEUSE_N50J","T___SINGLEUSE_V38H","T___SINGLEUSE_XC1X","T___SINGLEUSE_KI1B","T___SINGLEUSE_QNHI","T___SINGLEUSE_43KA","T___SINGLEUSE_YRU7","T___SINGLEUSE_E6D7","T___SINGLEUSE_ZEKA","T___SINGLEUSE_0L75","T___SINGLEUSE_GA13","T___SINGLEUSE_THUG","T___SINGLEUSE_CO7A","T___SINGLEUSE_A0LF","T___SINGLEUSE_166C","T___SINGLEUSE_OOU3","T___SINGLEUSE_2FPP","T___SINGLEUSE_2S21","T___SINGLEUSE_OQ6P","T___SINGLEUSE_590R","T___SINGLEUSE_Z78U","T___SINGLEUSE_LLOZ","T___SINGLEUSE_232C","T___SINGLEUSE_JFR7","T___SINGLEUSE_3MDX","T___SINGLEUSE_F9I5","T___SINGLEUSE_9L8R","T___SINGLEUSE_1NKF","T___SINGLEUSE_4E84","T___SINGLEUSE_YTAB","T___SINGLEUSE_RWCE","T___SINGLEUSE_PHFD","T___SINGLEUSE_H6UX","T___SINGLEUSE_20H3","T___SINGLEUSE_M5X7","T___SINGLEUSE_6GPV"]}

View File

@ -1 +1 @@
{"remap":"yes","languages":["Gb"],"characters":[68,65,83,72,10,66,79,84,83,10,73,78,69,82,84,73,65,0,67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,80,114,101,115,115,117,114,101,32,65,99,99,32,65,58,0,80,114,101,115,115,117,114,101,32,65,99,99,32,66,58,0,80,114,101,115,115,117,114,101,32,70,114,111,110,116,58,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,80,114,101,115,115,117,114,101,32,82,101,97,114,58,0,65,99,99,101,108,101,114,97,116,105,111,110,0,83,68,66,10,82,69,83,10,83,68,67,76,0,65,83,32,2,0,73,110,115,112,101,99,116,105,111,110,0,80,65,82,65,77,69,84,69,82,83,0,84,114,97,99,107,100,114,105,118,101,0,65,77,83,32,69,114,114,79,114,0,65,117,116,111,99,114,111,115,115,0,80,82,69,67,72,65,82,71,69,0,2,37,0,66,83,80,68,10,72,86,68,0,69,66,83,32,84,101,115,116,0,65,83,83,84,65,84,69,0,68,83,80,69,69,68,58,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,77,83,80,69,69,68,58,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,66,82,65,75,69,83,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,10,10,65,77,83,0,10,10,73,77,68,0,10,10,80,68,85,0,68,65,78,71,58,0,69,82,82,79,82,0,76,86,83,79,67,0,77,65,78,71,58,0,83,80,69,69,68,0,84,83,83,79,67,0,66,66,65,76,0,73,78,73,84,0,76,65,80,83,0,84,77,65,88,0,84,83,77,83,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,65,67,67,0,73,78,86,0,73,84,83,0,82,50,68,0,83,67,83,0,83,68,67,0,76,86,0]} {"remap":"yes","languages":["Gb"],"characters":[68,65,83,72,10,66,79,84,83,10,73,78,69,82,84,73,65,0,65,80,80,83,32,67,65,76,73,66,82,65,84,73,79,78,0,67,104,111,111,115,101,32,97,32,109,105,115,115,105,111,110,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,33,0,73,110,118,97,108,105,100,32,77,105,115,115,105,111,110,0,80,114,101,115,115,117,114,101,32,65,99,99,32,65,58,0,80,114,101,115,115,117,114,101,32,65,99,99,32,66,58,0,80,114,101,115,115,117,114,101,32,70,114,111,110,116,58,0,77,97,110,117,97,108,32,68,114,105,118,105,110,103,0,80,114,101,115,115,117,114,101,32,82,101,97,114,58,0,65,99,99,101,108,101,114,97,116,105,111,110,0,76,65,83,84,32,76,65,80,32,66,65,84,0,83,68,66,10,82,69,83,10,83,68,67,76,0,79,86,69,82,65,76,76,32,66,65,84,0,65,83,32,2,0,73,110,115,112,101,99,116,105,111,110,0,80,65,82,65,77,69,84,69,82,83,0,84,114,97,99,107,100,114,105,118,101,0,65,77,83,32,69,114,114,79,114,0,65,117,116,111,99,114,111,115,115,0,80,82,69,67,72,65,82,71,69,0,2,37,0,2,176,0,66,83,80,68,10,72,86,68,0,69,66,83,32,84,101,115,116,0,65,83,83,84,65,84,69,0,68,83,80,69,69,68,58,0,73,67,83,84,65,84,69,0,73,78,86,76,82,68,89,0,73,78,86,82,82,68,89,0,77,73,83,83,73,79,78,0,77,83,80,69,69,68,58,0,82,50,68,80,82,79,71,0,83,107,105,100,112,97,100,0,84,83,83,84,65,84,69,0,66,82,65,75,69,83,0,84,83,86,66,65,84,0,84,83,86,86,69,72,0,10,10,65,77,83,0,10,10,73,77,68,0,10,10,80,68,85,0,65,80,80,83,48,0,65,80,80,83,49,0,68,65,78,71,58,0,69,82,82,79,82,0,76,86,83,79,67,0,77,65,78,71,58,0,80,79,87,69,82,0,83,80,69,69,68,0,84,83,83,79,67,0,66,66,65,76,0,73,78,73,84,0,76,65,80,83,0,84,77,65,88,0,84,83,77,83,0,84,84,70,76,0,84,84,70,82,0,84,84,82,76,0,84,84,82,82,0,86,77,73,78,0,65,67,67,0,67,85,82,0,73,78,86,0,73,84,83,0,82,50,68,0,83,67,83,0,83,68,67,0,76,86,0]}

View File

@ -1 +1 @@
{"databases":{"GB":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]],"DEFAULT":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[1,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["GB"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4,"getFont_verdanab_20_4bpp":5,"getFont_lucon_TTF_33_4bpp":6,"getFont_lucon_TTF_20_4bpp":7},"generate_font_format":"0"} {"databases":{"GB":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[4,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[8,"CENTER","LTR"],[8,"CENTER","LTR"],[8,"RIGHT","LTR"],[8,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]],"DEFAULT":[[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[5,"LEFT","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[0,"CENTER","LTR"],[0,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[3,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[6,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"LEFT","LTR"],[4,"RIGHT","LTR"],[4,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[8,"CENTER","LTR"],[8,"CENTER","LTR"],[8,"RIGHT","LTR"],[8,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[2,"RIGHT","LTR"],[2,"CENTER","LTR"],[2,"LEFT","LTR"],[1,"LEFT","LTR"],[1,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[7,"RIGHT","LTR"],[7,"RIGHT","LTR"],[2,"LEFT","LTR"],[2,"LEFT","LTR"],[2,"CENTER","LTR"],[0,"LEFT","LTR"],[3,"CENTER","LTR"],[4,"RIGHT","LTR"],[1,"LEFT","LTR"],[1,"CENTER","LTR"],[2,"CENTER","LTR"],[2,"CENTER","LTR"],[4,"CENTER","LTR"],[2,"CENTER","LTR"],[1,"LEFT","LTR"]]},"database_list":["GB"],"fonts":{"getFont_verdana_20_4bpp":0,"getFont_CHINN____30_4bpp":1,"getFont_CHINN____20_4bpp":2,"getFont_CHINN____40_4bpp":3,"getFont_lucon_TTF_50_4bpp":4,"getFont_verdanab_20_4bpp":5,"getFont_lucon_TTF_33_4bpp":6,"getFont_lucon_TTF_20_4bpp":7,"getFont_lucon_TTF_80_4bpp":8},"generate_font_format":"0"}

View File

@ -64,6 +64,32 @@ enum TEXTS
T_AUTOX, T_AUTOX,
T_SKIDPAD, T_SKIDPAD,
T_ACCEL, T_ACCEL,
T___SINGLEUSE_W4YT,
T___SINGLEUSE_SM6H,
T___SINGLEUSE_8KB4,
T___SINGLEUSE_P4TL,
T___SINGLEUSE_CBZ9,
T___SINGLEUSE_WQXQ,
T___SINGLEUSE_QXG5,
T___SINGLEUSE_MBQT,
T___SINGLEUSE_978V,
T___SINGLEUSE_H8OI,
T___SINGLEUSE_6EKV,
T___SINGLEUSE_RK9Z,
T___SINGLEUSE_UBFH,
T___SINGLEUSE_6EXA,
T___SINGLEUSE_570K,
T___SINGLEUSE_G2S2,
T___SINGLEUSE_B2Q6,
T___SINGLEUSE_OP6C,
T___SINGLEUSE_1F9T,
T___SINGLEUSE_QAZ3,
T___SINGLEUSE_DONW,
T___SINGLEUSE_4X8X,
T___SINGLEUSE_FPXE,
T___SINGLEUSE_51AZ,
T___SINGLEUSE_DJ62,
T___SINGLEUSE_5W6Y,
T___SINGLEUSE_C17G, T___SINGLEUSE_C17G,
T___SINGLEUSE_XFW7, T___SINGLEUSE_XFW7,
T___SINGLEUSE_N50J, T___SINGLEUSE_N50J,
@ -94,12 +120,9 @@ enum TEXTS
T___SINGLEUSE_F9I5, T___SINGLEUSE_F9I5,
T___SINGLEUSE_9L8R, T___SINGLEUSE_9L8R,
T___SINGLEUSE_1NKF, T___SINGLEUSE_1NKF,
T___SINGLEUSE_J5UH,
T___SINGLEUSE_NGUK,
T___SINGLEUSE_4E84, T___SINGLEUSE_4E84,
T___SINGLEUSE_YTAB, T___SINGLEUSE_YTAB,
T___SINGLEUSE_RWCE, T___SINGLEUSE_RWCE,
T___SINGLEUSE_HMH2,
T___SINGLEUSE_PHFD, T___SINGLEUSE_PHFD,
T___SINGLEUSE_H6UX, T___SINGLEUSE_H6UX,
T___SINGLEUSE_20H3, T___SINGLEUSE_20H3,

View File

@ -10,97 +10,120 @@ KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE;
// Remap all strings // Remap all strings
TEXT_LOCATION_FLASH_PRAGMA TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = { KEEP extern const uint32_t indicesGb[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
490, // T_LV: "LV" 557, // T_LV: "LV"
376, // T_PDU: "PDU" 421, // T_PDU: "PDU"
482, // T_SCS: "SCS" 549, // T_SCS: "SCS"
486, // T_SDC: "SDC" 553, // T_SDC: "SDC"
478, // T_R2D: "R2D" 545, // T_R2D: "R2D"
475, // T_TS: "TS" 542, // T_TS: "TS"
470, // T_INV: "INV" 537, // T_INV: "INV"
364, // T_AMS: "AMS" 409, // T_AMS: "AMS"
210, // T_ERROR_AMS: "AMS ErrOr" 252, // T_ERROR_AMS: "AMS ErrOr"
175, // T_DEBUGVIEWFIELD_TITLE: "<>" 217, // T_DEBUGVIEWFIELD_TITLE: "<>"
175, // T_DRIVERVIEWFIELD_TITLE: "<>" 217, // T_DRIVERVIEWFIELD_TITLE: "<>"
175, // T_NUMBERSMALLWILDCARD: "<>" 217, // T_NUMBERSMALLWILDCARD: "<>"
416, // T_FIELD_BBAL: "BBAL" 479, // T_FIELD_BBAL: "BBAL"
355, // T_FIELD_TSVOLTVEH: "TSVVEH" 400, // T_FIELD_TSVOLTVEH: "TSVVEH"
348, // T_FIELD_TSVOLTBAT: "TSVBAT" 393, // T_FIELD_TSVOLTBAT: "TSVBAT"
392, // T_FIELD_LVSOC: "LVSOC" 449, // T_FIELD_LVSOC: "LVSOC"
410, // T_FIELD_TSSOC: "TSSOC" 473, // T_FIELD_TSSOC: "TSSOC"
431, // T_FIELD_MAXCELLTEMP: "TMAX" 494, // T_FIELD_MAXCELLTEMP: "TMAX"
441, // T_FIELD_TIREFL: "TTFL" 504, // T_FIELD_TIREFL: "TTFL"
446, // T_FIELD_TIREFR: "TTFR" 509, // T_FIELD_TIREFR: "TTFR"
451, // T_FIELD_TIRERL: "TTRL" 514, // T_FIELD_TIRERL: "TTRL"
456, // T_FIELD_TIRERR: "TTRR" 519, // T_FIELD_TIRERR: "TTRR"
426, // T_FIELD_LAPCOUNT: "LAPS" 489, // T_FIELD_LAPCOUNT: "LAPS"
277, // T_FIELD_INICHKSTATE: "ICSTATE" 322, // T_FIELD_INICHKSTATE: "ICSTATE"
386, // T_FIELD_ERR: "ERROR" 443, // T_FIELD_ERR: "ERROR"
486, // T_FIELD_SDC: "SDC" 553, // T_FIELD_SDC: "SDC"
293, // T_FIELD_INVRREADY: "INVRRDY" 338, // T_FIELD_INVRREADY: "INVRRDY"
285, // T_FIELD_INVLREADY: "INVLRDY" 330, // T_FIELD_INVLREADY: "INVLRDY"
317, // T_FIELD_R2DPROGRESS: "R2DPROG" 362, // T_FIELD_R2DPROGRESS: "R2DPROG"
301, // T_FIELD_ACTIVEMISSION: "MISSION" 346, // T_FIELD_ACTIVEMISSION: "MISSION"
261, // T_FIELD_ASSTATE: "ASSTATE" 306, // T_FIELD_ASSTATE: "ASSTATE"
333, // T_FIELD_TSSTATE: "TSSTATE" 378, // T_FIELD_TSSTATE: "TSSTATE"
175, // T_NUMBERWILDCARD: "<>" 217, // T_NUMBERWILDCARD: "<>"
175, // T_DEFAULTWILDCARD_CENTERED: "<>" 217, // T_DEFAULTWILDCARD_CENTERED: "<>"
175, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>" 217, // T_DEFAULTWILDCARD_RIGHTALIGNED: "<>"
474, // T_FIELD_TSCURRENT: "ITS" 541, // T_FIELD_TSCURRENT: "ITS"
461, // T_FIELD_MINCELLVOLT: "VMIN" 524, // T_FIELD_MINCELLVOLT: "VMIN"
404, // T_FIELD_SPEED: "SPEED" 467, // T_FIELD_SPEED: "SPEED"
177, // T_INSPECTION_HUGE: "Inspection" 219, // T_INSPECTION_HUGE: "Inspection"
252, // T_EBS_HUGE: "EBS Test" 297, // T_EBS_HUGE: "EBS Test"
199, // T_TRACKDRIVE_HUGE: "Trackdrive" 241, // T_TRACKDRIVE_HUGE: "Trackdrive"
220, // T_AUTOX_HUGE: "Autocross" 262, // T_AUTOX_HUGE: "Autocross"
325, // T_SKIDPAD_HUGE: "Skidpad" 370, // T_SKIDPAD_HUGE: "Skidpad"
146, // T_ACCEL_HUGE: "Acceleration" 163, // T_ACCEL_HUGE: "Acceleration"
35, // T_INVALID_HUGE: "Invalid Mission!" 52, // T_INVALID_HUGE: "Invalid Mission!"
116, // T_MANUAL: "Manual Driving" 133, // T_MANUAL: "Manual Driving"
177, // T_INSPECTION: "Inspection" 219, // T_INSPECTION: "Inspection"
252, // T_EBS: "EBS Test" 297, // T_EBS: "EBS Test"
199, // T_TRACKDRIVE: "Trackdrive" 241, // T_TRACKDRIVE: "Trackdrive"
220, // T_AUTOX: "Autocross" 262, // T_AUTOX: "Autocross"
325, // T_SKIDPAD: "Skidpad" 370, // T_SKIDPAD: "Skidpad"
146, // T_ACCEL: "Acceleration" 163, // T_ACCEL: "Acceleration"
172, // T___SINGLEUSE_C17G: "AS <>" 431, // T___SINGLEUSE_W4YT: "APPS1"
362, // T___SINGLEUSE_XFW7: "\n\nAMS" 217, // T___SINGLEUSE_SM6H: "<>"
368, // T___SINGLEUSE_N50J: "\n\nIMD" 217, // T___SINGLEUSE_8KB4: "<>"
466, // T___SINGLEUSE_V38H: "ACC" 217, // T___SINGLEUSE_P4TL: "<>"
436, // T___SINGLEUSE_XC1X: "TSMS" 533, // T___SINGLEUSE_CBZ9: "CUR"
243, // T___SINGLEUSE_KI1B: "BSPD\nHVD" 495, // T___SINGLEUSE_WQXQ: "MAX"
159, // T___SINGLEUSE_QNHI: "SDB\nRES\nSDCL" 525, // T___SINGLEUSE_QXG5: "MIN"
217, // T___SINGLEUSE_MBQT: "<>"
217, // T___SINGLEUSE_978V: "<>"
217, // T___SINGLEUSE_H8OI: "<>"
425, // T___SINGLEUSE_6EKV: "APPS0"
217, // T___SINGLEUSE_RK9Z: "<>"
18, // T___SINGLEUSE_UBFH: "APPS CALIBRATION"
217, // T___SINGLEUSE_6EXA: "<>"
545, // T___SINGLEUSE_570K: "R2D"
272, // T___SINGLEUSE_G2S2: "PRECHARGE"
285, // T___SINGLEUSE_B2Q6: "<>?"
282, // T___SINGLEUSE_OP6C: "<>%"
467, // T___SINGLEUSE_1F9T: "SPEED"
461, // T___SINGLEUSE_QAZ3: "POWER"
217, // T___SINGLEUSE_DONW: "<>"
217, // T___SINGLEUSE_4X8X: "<>"
282, // T___SINGLEUSE_FPXE: "<>%"
282, // T___SINGLEUSE_51AZ: "<>%"
202, // T___SINGLEUSE_DJ62: "OVERALL BAT"
176, // T___SINGLEUSE_5W6Y: "LAST LAP BAT"
214, // T___SINGLEUSE_C17G: "AS <>"
407, // T___SINGLEUSE_XFW7: "\n\nAMS"
413, // T___SINGLEUSE_N50J: "\n\nIMD"
529, // T___SINGLEUSE_V38H: "ACC"
499, // T___SINGLEUSE_XC1X: "TSMS"
288, // T___SINGLEUSE_KI1B: "BSPD\nHVD"
189, // T___SINGLEUSE_QNHI: "SDB\nRES\nSDCL"
0, // T___SINGLEUSE_43KA: "DASH\nBOTS\nINERTIA" 0, // T___SINGLEUSE_43KA: "DASH\nBOTS\nINERTIA"
374, // T___SINGLEUSE_YRU7: "\n\nPDU" 419, // T___SINGLEUSE_YRU7: "\n\nPDU"
421, // T___SINGLEUSE_E6D7: "INIT" 484, // T___SINGLEUSE_E6D7: "INIT"
175, // T___SINGLEUSE_ZEKA: "<>" 217, // T___SINGLEUSE_ZEKA: "<>"
131, // T___SINGLEUSE_0L75: "Pressure Rear:" 148, // T___SINGLEUSE_0L75: "Pressure Rear:"
100, // T___SINGLEUSE_GA13: "Pressure Front:" 117, // T___SINGLEUSE_GA13: "Pressure Front:"
175, // T___SINGLEUSE_THUG: "<>" 217, // T___SINGLEUSE_THUG: "<>"
175, // T___SINGLEUSE_CO7A: "<>" 217, // T___SINGLEUSE_CO7A: "<>"
175, // T___SINGLEUSE_A0LF: "<>" 217, // T___SINGLEUSE_A0LF: "<>"
175, // T___SINGLEUSE_166C: "<>" 217, // T___SINGLEUSE_166C: "<>"
84, // T___SINGLEUSE_OOU3: "Pressure Acc B:" 101, // T___SINGLEUSE_OOU3: "Pressure Acc B:"
68, // T___SINGLEUSE_2FPP: "Pressure Acc A:" 85, // T___SINGLEUSE_2FPP: "Pressure Acc A:"
175, // T___SINGLEUSE_2S21: "<>" 217, // T___SINGLEUSE_2S21: "<>"
175, // T___SINGLEUSE_OQ6P: "<>" 217, // T___SINGLEUSE_OQ6P: "<>"
309, // T___SINGLEUSE_590R: "MSPEED:" 354, // T___SINGLEUSE_590R: "MSPEED:"
269, // T___SINGLEUSE_Z78U: "DSPEED:" 314, // T___SINGLEUSE_Z78U: "DSPEED:"
175, // T___SINGLEUSE_LLOZ: "<>" 217, // T___SINGLEUSE_LLOZ: "<>"
175, // T___SINGLEUSE_232C: "<>" 217, // T___SINGLEUSE_232C: "<>"
398, // T___SINGLEUSE_JFR7: "MANG:" 455, // T___SINGLEUSE_JFR7: "MANG:"
380, // T___SINGLEUSE_3MDX: "DANG:" 437, // T___SINGLEUSE_3MDX: "DANG:"
17, // T___SINGLEUSE_F9I5: "" 17, // T___SINGLEUSE_F9I5: ""
175, // T___SINGLEUSE_9L8R: "<>" 217, // T___SINGLEUSE_9L8R: "<>"
17, // T___SINGLEUSE_1NKF: "" 17, // T___SINGLEUSE_1NKF: ""
175, // T___SINGLEUSE_J5UH: "<>" 217, // T___SINGLEUSE_4E84: "<>"
478, // T___SINGLEUSE_NGUK: "R2D" 217, // T___SINGLEUSE_YTAB: "<>"
175, // T___SINGLEUSE_4E84: "<>" 230, // T___SINGLEUSE_RWCE: "PARAMETERS"
175, // T___SINGLEUSE_YTAB: "<>" 282, // T___SINGLEUSE_PHFD: "<>%"
188, // T___SINGLEUSE_RWCE: "PARAMETERS" 386, // T___SINGLEUSE_H6UX: "BRAKES"
230, // T___SINGLEUSE_HMH2: "PRECHARGE" 217, // T___SINGLEUSE_20H3: "<>"
240, // T___SINGLEUSE_PHFD: "<>%" 69, // T___SINGLEUSE_M5X7: "Invalid Mission"
341, // T___SINGLEUSE_H6UX: "BRAKES" 35 // T___SINGLEUSE_6GPV: "Choose a mission"
175, // T___SINGLEUSE_20H3: "<>"
52, // T___SINGLEUSE_M5X7: "Invalid Mission"
18 // T___SINGLEUSE_6GPV: "Choose a mission"
}; };

View File

@ -61,65 +61,73 @@ extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[];
TEXT_LOCATION_FLASH_PRAGMA TEXT_LOCATION_FLASH_PRAGMA
KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE = { KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE = {
0x44, 0x41, 0x53, 0x48, 0xa, 0x42, 0x4f, 0x54, 0x53, 0xa, 0x49, 0x4e, 0x45, 0x52, 0x54, 0x49, 0x41, 0x0, // @0 "DASH\nBOTS\nINERTIA" 0x44, 0x41, 0x53, 0x48, 0xa, 0x42, 0x4f, 0x54, 0x53, 0xa, 0x49, 0x4e, 0x45, 0x52, 0x54, 0x49, 0x41, 0x0, // @0 "DASH\nBOTS\nINERTIA"
0x43, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @18 "Choose a mission" 0x41, 0x50, 0x50, 0x53, 0x20, 0x43, 0x41, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x0, // @18 "APPS CALIBRATION"
0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x21, 0x0, // @35 "Invalid Mission!" 0x43, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x20, 0x61, 0x20, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @35 "Choose a mission"
0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @52 "Invalid Mission" 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x21, 0x0, // @52 "Invalid Mission!"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x41, 0x63, 0x63, 0x20, 0x41, 0x3a, 0x0, // @68 "Pressure Acc A:" 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x4d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x0, // @69 "Invalid Mission"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x41, 0x63, 0x63, 0x20, 0x42, 0x3a, 0x0, // @84 "Pressure Acc B:" 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x41, 0x63, 0x63, 0x20, 0x41, 0x3a, 0x0, // @85 "Pressure Acc A:"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x3a, 0x0, // @100 "Pressure Front:" 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x41, 0x63, 0x63, 0x20, 0x42, 0x3a, 0x0, // @101 "Pressure Acc B:"
0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x44, 0x72, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x0, // @116 "Manual Driving" 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x46, 0x72, 0x6f, 0x6e, 0x74, 0x3a, 0x0, // @117 "Pressure Front:"
0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x52, 0x65, 0x61, 0x72, 0x3a, 0x0, // @131 "Pressure Rear:" 0x4d, 0x61, 0x6e, 0x75, 0x61, 0x6c, 0x20, 0x44, 0x72, 0x69, 0x76, 0x69, 0x6e, 0x67, 0x0, // @133 "Manual Driving"
0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @146 "Acceleration" 0x50, 0x72, 0x65, 0x73, 0x73, 0x75, 0x72, 0x65, 0x20, 0x52, 0x65, 0x61, 0x72, 0x3a, 0x0, // @148 "Pressure Rear:"
0x53, 0x44, 0x42, 0xa, 0x52, 0x45, 0x53, 0xa, 0x53, 0x44, 0x43, 0x4c, 0x0, // @159 "SDB\nRES\nSDCL" 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @163 "Acceleration"
0x41, 0x53, 0x20, 0x2, 0x0, // @172 "AS <>" 0x4c, 0x41, 0x53, 0x54, 0x20, 0x4c, 0x41, 0x50, 0x20, 0x42, 0x41, 0x54, 0x0, // @176 "LAST LAP BAT"
0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @177 "Inspection" 0x53, 0x44, 0x42, 0xa, 0x52, 0x45, 0x53, 0xa, 0x53, 0x44, 0x43, 0x4c, 0x0, // @189 "SDB\nRES\nSDCL"
0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x0, // @188 "PARAMETERS" 0x4f, 0x56, 0x45, 0x52, 0x41, 0x4c, 0x4c, 0x20, 0x42, 0x41, 0x54, 0x0, // @202 "OVERALL BAT"
0x54, 0x72, 0x61, 0x63, 0x6b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x0, // @199 "Trackdrive" 0x41, 0x53, 0x20, 0x2, 0x0, // @214 "AS <>"
0x41, 0x4d, 0x53, 0x20, 0x45, 0x72, 0x72, 0x4f, 0x72, 0x0, // @210 "AMS ErrOr" 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x0, // @219 "Inspection"
0x41, 0x75, 0x74, 0x6f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x0, // @220 "Autocross" 0x50, 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x53, 0x0, // @230 "PARAMETERS"
0x50, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x0, // @230 "PRECHARGE" 0x54, 0x72, 0x61, 0x63, 0x6b, 0x64, 0x72, 0x69, 0x76, 0x65, 0x0, // @241 "Trackdrive"
0x2, 0x25, 0x0, // @240 "<>%" 0x41, 0x4d, 0x53, 0x20, 0x45, 0x72, 0x72, 0x4f, 0x72, 0x0, // @252 "AMS ErrOr"
0x42, 0x53, 0x50, 0x44, 0xa, 0x48, 0x56, 0x44, 0x0, // @243 "BSPD\nHVD" 0x41, 0x75, 0x74, 0x6f, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x0, // @262 "Autocross"
0x45, 0x42, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x0, // @252 "EBS Test" 0x50, 0x52, 0x45, 0x43, 0x48, 0x41, 0x52, 0x47, 0x45, 0x0, // @272 "PRECHARGE"
0x41, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @261 "ASSTATE" 0x2, 0x25, 0x0, // @282 "<>%"
0x44, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @269 "DSPEED:" 0x2, 0xb0, 0x0, // @285 "<>?"
0x49, 0x43, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @277 "ICSTATE" 0x42, 0x53, 0x50, 0x44, 0xa, 0x48, 0x56, 0x44, 0x0, // @288 "BSPD\nHVD"
0x49, 0x4e, 0x56, 0x4c, 0x52, 0x44, 0x59, 0x0, // @285 "INVLRDY" 0x45, 0x42, 0x53, 0x20, 0x54, 0x65, 0x73, 0x74, 0x0, // @297 "EBS Test"
0x49, 0x4e, 0x56, 0x52, 0x52, 0x44, 0x59, 0x0, // @293 "INVRRDY" 0x41, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @306 "ASSTATE"
0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x0, // @301 "MISSION" 0x44, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @314 "DSPEED:"
0x4d, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @309 "MSPEED:" 0x49, 0x43, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @322 "ICSTATE"
0x52, 0x32, 0x44, 0x50, 0x52, 0x4f, 0x47, 0x0, // @317 "R2DPROG" 0x49, 0x4e, 0x56, 0x4c, 0x52, 0x44, 0x59, 0x0, // @330 "INVLRDY"
0x53, 0x6b, 0x69, 0x64, 0x70, 0x61, 0x64, 0x0, // @325 "Skidpad" 0x49, 0x4e, 0x56, 0x52, 0x52, 0x44, 0x59, 0x0, // @338 "INVRRDY"
0x54, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @333 "TSSTATE" 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x0, // @346 "MISSION"
0x42, 0x52, 0x41, 0x4b, 0x45, 0x53, 0x0, // @341 "BRAKES" 0x4d, 0x53, 0x50, 0x45, 0x45, 0x44, 0x3a, 0x0, // @354 "MSPEED:"
0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @348 "TSVBAT" 0x52, 0x32, 0x44, 0x50, 0x52, 0x4f, 0x47, 0x0, // @362 "R2DPROG"
0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @355 "TSVVEH" 0x53, 0x6b, 0x69, 0x64, 0x70, 0x61, 0x64, 0x0, // @370 "Skidpad"
0xa, 0xa, 0x41, 0x4d, 0x53, 0x0, // @362 "\n\nAMS" 0x54, 0x53, 0x53, 0x54, 0x41, 0x54, 0x45, 0x0, // @378 "TSSTATE"
0xa, 0xa, 0x49, 0x4d, 0x44, 0x0, // @368 "\n\nIMD" 0x42, 0x52, 0x41, 0x4b, 0x45, 0x53, 0x0, // @386 "BRAKES"
0xa, 0xa, 0x50, 0x44, 0x55, 0x0, // @374 "\n\nPDU" 0x54, 0x53, 0x56, 0x42, 0x41, 0x54, 0x0, // @393 "TSVBAT"
0x44, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @380 "DANG:" 0x54, 0x53, 0x56, 0x56, 0x45, 0x48, 0x0, // @400 "TSVVEH"
0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @386 "ERROR" 0xa, 0xa, 0x41, 0x4d, 0x53, 0x0, // @407 "\n\nAMS"
0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @392 "LVSOC" 0xa, 0xa, 0x49, 0x4d, 0x44, 0x0, // @413 "\n\nIMD"
0x4d, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @398 "MANG:" 0xa, 0xa, 0x50, 0x44, 0x55, 0x0, // @419 "\n\nPDU"
0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @404 "SPEED" 0x41, 0x50, 0x50, 0x53, 0x30, 0x0, // @425 "APPS0"
0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @410 "TSSOC" 0x41, 0x50, 0x50, 0x53, 0x31, 0x0, // @431 "APPS1"
0x42, 0x42, 0x41, 0x4c, 0x0, // @416 "BBAL" 0x44, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @437 "DANG:"
0x49, 0x4e, 0x49, 0x54, 0x0, // @421 "INIT" 0x45, 0x52, 0x52, 0x4f, 0x52, 0x0, // @443 "ERROR"
0x4c, 0x41, 0x50, 0x53, 0x0, // @426 "LAPS" 0x4c, 0x56, 0x53, 0x4f, 0x43, 0x0, // @449 "LVSOC"
0x54, 0x4d, 0x41, 0x58, 0x0, // @431 "TMAX" 0x4d, 0x41, 0x4e, 0x47, 0x3a, 0x0, // @455 "MANG:"
0x54, 0x53, 0x4d, 0x53, 0x0, // @436 "TSMS" 0x50, 0x4f, 0x57, 0x45, 0x52, 0x0, // @461 "POWER"
0x54, 0x54, 0x46, 0x4c, 0x0, // @441 "TTFL" 0x53, 0x50, 0x45, 0x45, 0x44, 0x0, // @467 "SPEED"
0x54, 0x54, 0x46, 0x52, 0x0, // @446 "TTFR" 0x54, 0x53, 0x53, 0x4f, 0x43, 0x0, // @473 "TSSOC"
0x54, 0x54, 0x52, 0x4c, 0x0, // @451 "TTRL" 0x42, 0x42, 0x41, 0x4c, 0x0, // @479 "BBAL"
0x54, 0x54, 0x52, 0x52, 0x0, // @456 "TTRR" 0x49, 0x4e, 0x49, 0x54, 0x0, // @484 "INIT"
0x56, 0x4d, 0x49, 0x4e, 0x0, // @461 "VMIN" 0x4c, 0x41, 0x50, 0x53, 0x0, // @489 "LAPS"
0x41, 0x43, 0x43, 0x0, // @466 "ACC" 0x54, 0x4d, 0x41, 0x58, 0x0, // @494 "TMAX"
0x49, 0x4e, 0x56, 0x0, // @470 "INV" 0x54, 0x53, 0x4d, 0x53, 0x0, // @499 "TSMS"
0x49, 0x54, 0x53, 0x0, // @474 "ITS" 0x54, 0x54, 0x46, 0x4c, 0x0, // @504 "TTFL"
0x52, 0x32, 0x44, 0x0, // @478 "R2D" 0x54, 0x54, 0x46, 0x52, 0x0, // @509 "TTFR"
0x53, 0x43, 0x53, 0x0, // @482 "SCS" 0x54, 0x54, 0x52, 0x4c, 0x0, // @514 "TTRL"
0x53, 0x44, 0x43, 0x0, // @486 "SDC" 0x54, 0x54, 0x52, 0x52, 0x0, // @519 "TTRR"
0x4c, 0x56, 0x0 // @490 "LV" 0x56, 0x4d, 0x49, 0x4e, 0x0, // @524 "VMIN"
0x41, 0x43, 0x43, 0x0, // @529 "ACC"
0x43, 0x55, 0x52, 0x0, // @533 "CUR"
0x49, 0x4e, 0x56, 0x0, // @537 "INV"
0x49, 0x54, 0x53, 0x0, // @541 "ITS"
0x52, 0x32, 0x44, 0x0, // @545 "R2D"
0x53, 0x43, 0x53, 0x0, // @549 "SCS"
0x53, 0x44, 0x43, 0x0, // @553 "SDC"
0x4c, 0x56, 0x0 // @557 "LV"
}; };
TEXT_LOCATION_FLASH_PRAGMA TEXT_LOCATION_FLASH_PRAGMA

View File

@ -13,6 +13,7 @@ extern touchgfx::GeneratedFont& getFont_lucon_TTF_50_4bpp();
extern touchgfx::GeneratedFont& getFont_verdanab_20_4bpp(); extern touchgfx::GeneratedFont& getFont_verdanab_20_4bpp();
extern touchgfx::GeneratedFont& getFont_lucon_TTF_33_4bpp(); extern touchgfx::GeneratedFont& getFont_lucon_TTF_33_4bpp();
extern touchgfx::GeneratedFont& getFont_lucon_TTF_20_4bpp(); extern touchgfx::GeneratedFont& getFont_lucon_TTF_20_4bpp();
extern touchgfx::GeneratedFont& getFont_lucon_TTF_80_4bpp();
const touchgfx::Font* touchgfx_fonts[] = { const touchgfx::Font* touchgfx_fonts[] = {
&(getFont_verdana_20_4bpp()), &(getFont_verdana_20_4bpp()),
@ -22,7 +23,8 @@ const touchgfx::Font* touchgfx_fonts[] = {
&(getFont_lucon_TTF_50_4bpp()), &(getFont_lucon_TTF_50_4bpp()),
&(getFont_verdanab_20_4bpp()), &(getFont_verdanab_20_4bpp()),
&(getFont_lucon_TTF_33_4bpp()), &(getFont_lucon_TTF_33_4bpp()),
&(getFont_lucon_TTF_20_4bpp()) &(getFont_lucon_TTF_20_4bpp()),
&(getFont_lucon_TTF_80_4bpp())
}; };
extern const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[]; extern const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[];
@ -83,6 +85,32 @@ const touchgfx::TypedText::TypedTextData typedText_database_GB[] TEXT_LOCATION_F
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
@ -112,12 +140,9 @@ const touchgfx::TypedText::TypedTextData typedText_database_GB[] TEXT_LOCATION_F
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, { 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 1, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
@ -179,6 +204,32 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 6, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 7, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 8, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
@ -208,12 +259,9 @@ const touchgfx::TypedText::TypedTextData typedText_database_DEFAULT[] TEXT_LOCAT
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 0, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 3, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR }, { 4, touchgfx::RIGHT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR }, { 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 1, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 1, touchgfx::LEFT, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 2, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
{ 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR }, { 4, touchgfx::CENTER, touchgfx::TEXT_DIRECTION_LTR },
@ -278,6 +326,9 @@ void resetFont(touchgfx::FontId fontId)
case 7: case 7:
touchgfx_fonts[7] = &(getFont_lucon_TTF_20_4bpp()); touchgfx_fonts[7] = &(getFont_lucon_TTF_20_4bpp());
break; break;
case 8:
touchgfx_fonts[8] = &(getFont_lucon_TTF_80_4bpp());
break;
} }
} }
} // namespace TypedTextDatabase } // namespace TypedTextDatabase

View File

@ -0,0 +1,40 @@
#ifndef APPSPRESENTER_HPP
#define APPSPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class APPSView;
class APPSPresenter : public touchgfx::Presenter, public ModelListener {
public:
APPSPresenter(APPSView &v);
/**
* The activate function is called automatically when this screen is "switched
* in" (ie. made active). Initialization logic can be placed here.
*/
virtual void activate() override;
/**
* The deactivate function is called automatically when this screen is
* "switched out" (ie. made inactive). Teardown functionality can be placed
* here.
*/
virtual void deactivate() override;
virtual ~APPSPresenter() {}
void nextScreen() override;
void vehicleStateUpdated() override;
void paramConfirmed() override;
private:
APPSPresenter();
APPSView &view;
};
#endif // APPSPRESENTER_HPP

View File

@ -0,0 +1,45 @@
#ifndef APPSVIEW_HPP
#define APPSVIEW_HPP
#include "params.h"
#include <gui/apps_screen/APPSPresenter.hpp>
#include <gui_generated/apps_screen/APPSViewBase.hpp>
class APPSView : public APPSViewBase {
public:
static constexpr int FIELD_COUNT = 4;
APPSView();
virtual ~APPSView() {}
virtual void setupScreen();
virtual void tearDownScreen();
void selectPrevField() override;
void selectNextField() override;
void decField() override;
void incField() override;
void confirmField() override;
void switchPrecision() override;
void abxParamConfirmed(ParamType param);
void updateFieldValues();
void addGraphPoints(float apps0, float apps1);
protected:
private:
int selectedField;
float precision = 0.001f;
bool fieldsDirty[FIELD_COUNT] = {false};
ParamType fieldParams[FIELD_COUNT] = {PF_APPS0_MIN, PF_APPS0_MAX,
PF_APPS1_MIN, PF_APPS1_MAX};
touchgfx::TextAreaWithOneWildcard *fieldWidgets[FIELD_COUNT] = {nullptr};
touchgfx::Box *fieldBackgrounds[FIELD_COUNT] = {nullptr};
touchgfx::Unicode::UnicodeChar fieldBuffers[FIELD_COUNT][16];
touchgfx::Unicode::UnicodeChar apps0Buffer[16];
touchgfx::Unicode::UnicodeChar apps1Buffer[16];
};
#endif // APPSVIEW_HPP

View File

@ -0,0 +1,25 @@
#ifndef PROGRESSBAR_HPP
#define PROGRESSBAR_HPP
#include <gui_generated/containers/ProgressBarBase.hpp>
enum class ProgressType { PRECHARGE, R2D };
class ProgressBar : public ProgressBarBase {
public:
ProgressBar();
virtual ~ProgressBar() {}
virtual void initialize();
void update();
protected:
private:
touchgfx::Unicode::UnicodeChar r2dProgBuffer[16];
touchgfx::Unicode::UnicodeChar socBuffer[4];
void setProgress(bool active, ProgressType type, float progress);
};
#endif // PROGRESSBAR_HPP

View File

@ -3,15 +3,11 @@
#include "gui/common/NamedField.hpp" #include "gui/common/NamedField.hpp"
#include "gui/containers/DriverViewFieldSelection.hpp" #include "gui/containers/DriverViewFieldSelection.hpp"
#include "touchgfx/Unicode.hpp"
#include "touchgfx/containers/scrollers/DrawableList.hpp"
#include <gui/driverview_screen/DriverViewPresenter.hpp> #include <gui/driverview_screen/DriverViewPresenter.hpp>
#include <gui_generated/driverview_screen/DriverViewViewBase.hpp> #include <gui_generated/driverview_screen/DriverViewViewBase.hpp>
#include "vehicle_state.h" #include "vehicle_state.h"
enum class DriverViewProgressType { PRECHARGE, R2D };
class DriverViewView : public DriverViewViewBase { class DriverViewView : public DriverViewViewBase {
public: public:
DriverViewView(); DriverViewView();
@ -28,7 +24,7 @@ public:
void setTemps(const Temperatures &temps); void setTemps(const Temperatures &temps);
void setTSSoC(uint8_t soc); void setTSSoC(uint8_t soc);
void setProgress(bool active, DriverViewProgressType type, float progress); void updateProgress();
void showAMSError(); void showAMSError();
void clearErrorPopup(); void clearErrorPopup();
@ -53,7 +49,6 @@ private:
size_t selectedFieldIndex; size_t selectedFieldIndex;
DataFieldType fieldTypes[NUM_FIELDS]; DataFieldType fieldTypes[NUM_FIELDS];
touchgfx::Unicode::UnicodeChar r2dProgBuffer[16];
touchgfx::Unicode::UnicodeChar socBuffer[4]; touchgfx::Unicode::UnicodeChar socBuffer[4];
}; };

View File

@ -0,0 +1,39 @@
#ifndef ENDURANCEPRESENTER_HPP
#define ENDURANCEPRESENTER_HPP
#include <gui/model/ModelListener.hpp>
#include <mvp/Presenter.hpp>
using namespace touchgfx;
class EnduranceView;
class EndurancePresenter : public touchgfx::Presenter, public ModelListener {
public:
EndurancePresenter(EnduranceView &v);
/**
* The activate function is called automatically when this screen is "switched
* in" (ie. made active). Initialization logic can be placed here.
*/
virtual void activate() override;
/**
* The deactivate function is called automatically when this screen is
* "switched out" (ie. made inactive). Teardown functionality can be placed
* here.
*/
virtual void deactivate() override;
virtual ~EndurancePresenter() {}
void vehicleStateUpdated() override;
void nextScreen() override;
private:
EndurancePresenter();
EnduranceView &view;
};
#endif // ENDURANCEPRESENTER_HPP

View File

@ -0,0 +1,79 @@
#ifndef ENDURANCEVIEW_HPP
#define ENDURANCEVIEW_HPP
#include "touchgfx/Unicode.hpp"
#include "touchgfx/widgets/BoxWithBorder.hpp"
#include "touchgfx/widgets/TextAreaWithWildcard.hpp"
#include <cstddef>
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <gui_generated/endurance_screen/EnduranceViewBase.hpp>
class BatDelta {
public:
BatDelta(touchgfx::BoxWithBorder &box,
touchgfx::TextAreaWithOneWildcard &field);
void setBox(touchgfx::BoxWithBorder &box);
void setField(touchgfx::TextAreaWithOneWildcard &field);
void setDelta(float delta);
protected:
touchgfx::BoxWithBorder &box;
touchgfx::TextAreaWithOneWildcard &field;
touchgfx::Unicode::UnicodeChar buffer[16];
int value;
};
class ValueBuffer {
public:
ValueBuffer(touchgfx::TextAreaWithOneWildcard &field, size_t intDigits,
size_t decimalDigits);
void setField(touchgfx::TextAreaWithOneWildcard &field);
void setIntValue(int value);
void setFloatValue(float value);
protected:
touchgfx::TextAreaWithOneWildcard &field;
touchgfx::Unicode::UnicodeChar buffer[16];
size_t intDigits;
size_t decimalDigits;
union {
int i;
float f;
} value;
};
class EnduranceView : public EnduranceViewBase {
public:
EnduranceView();
virtual ~EnduranceView() {}
virtual void setupScreen() override;
virtual void tearDownScreen() override;
void updateBatDelta();
void updateDetails();
void updateProgress();
void decreasePowerLimit() override;
void increasePowerLimit() override;
void decreaseSpeedLimit() override;
void increaseSpeedLimit() override;
protected:
BatDelta lastLapDelta;
BatDelta overallDelta;
ValueBuffer plimBuffer;
ValueBuffer slimBuffer;
ValueBuffer socBuffer;
ValueBuffer tbatBuffer;
bool limitsChangable();
};
#endif // ENDURANCEVIEW_HPP

View File

@ -0,0 +1,28 @@
#include "stm32h7xx_hal.h"
#include <gui/apps_screen/APPSPresenter.hpp>
#include <gui/apps_screen/APPSView.hpp>
APPSPresenter::APPSPresenter(APPSView &v) : view(v) {}
void APPSPresenter::activate() {}
void APPSPresenter::deactivate() {}
void APPSPresenter::nextScreen() {
static_cast<FrontendApplication *>(Application::getInstance())
->gotoSDCScreenNoTransition();
}
void APPSPresenter::vehicleStateUpdated() {
static uint32_t last_graph_update = 0;
view.updateFieldValues();
if (HAL_GetTick() - last_graph_update > 100) {
view.addGraphPoints(vehicle_state.apps0_out, vehicle_state.apps1_out);
last_graph_update = HAL_GetTick();
}
}
void APPSPresenter::paramConfirmed() {
view.abxParamConfirmed(vehicle_state.last_param_confirmed);
}

View File

@ -0,0 +1,137 @@
#include "params.h"
#include "touchgfx/Color.hpp"
#include "vehicle_state.h"
#include <gui/apps_screen/APPSView.hpp>
APPSView::APPSView() : selectedField{-1} {
for (size_t i = 0; i < FIELD_COUNT; i++) {
fieldsDirty[i] = false;
}
fieldWidgets[0] = &apps0min;
fieldWidgets[1] = &apps0max;
fieldWidgets[2] = &apps1min;
fieldWidgets[3] = &apps1max;
fieldBackgrounds[0] = &apps0min_bg;
fieldBackgrounds[1] = &apps0max_bg;
fieldBackgrounds[2] = &apps1min_bg;
fieldBackgrounds[3] = &apps1max_bg;
params.apps0_min = vehicle_state.apps0_min;
params.apps0_max = vehicle_state.apps0_max;
params.apps1_min = vehicle_state.apps1_min;
params.apps1_max = vehicle_state.apps1_max;
}
void APPSView::setupScreen() { APPSViewBase::setupScreen(); }
void APPSView::tearDownScreen() { APPSViewBase::tearDownScreen(); }
void APPSView::selectPrevField() {
if (selectedField != -1) {
fieldBackgrounds[selectedField]->setVisible(false);
fieldBackgrounds[selectedField]->invalidate();
}
if (selectedField == -1) {
selectedField = FIELD_COUNT - 1;
} else {
selectedField = (selectedField - 1) % FIELD_COUNT;
}
fieldBackgrounds[selectedField]->setVisible(true);
fieldBackgrounds[selectedField]->invalidate();
}
void APPSView::selectNextField() {
if (selectedField != -1) {
fieldBackgrounds[selectedField]->setVisible(false);
fieldBackgrounds[selectedField]->invalidate();
}
selectedField = (selectedField + 1) % FIELD_COUNT;
fieldBackgrounds[selectedField]->setVisible(true);
fieldBackgrounds[selectedField]->invalidate();
}
void APPSView::decField() {
if (selectedField == -1) {
return;
}
fieldsDirty[selectedField] = true;
params_dec(fieldParams[selectedField]);
}
void APPSView::incField() {
if (selectedField == -1) {
return;
}
fieldsDirty[selectedField] = true;
params_inc(fieldParams[selectedField]);
}
void APPSView::confirmField() {
if (selectedField == -1) {
return;
}
params_broadcast(fieldParams[selectedField]);
}
void APPSView::switchPrecision() {
if (precision == 0.001f) {
precision = 0.01f;
} else {
precision = 0.001f;
}
for (ParamType &param : fieldParams) {
param_steps[param] = precision;
}
}
void APPSView::abxParamConfirmed(ParamType param) {
for (size_t i = 0; i < FIELD_COUNT; i++) {
if (fieldParams[i] == param) {
fieldsDirty[i] = false;
}
}
}
void APPSView::updateFieldValues() {
float values[FIELD_COUNT];
values[0] = vehicle_state.apps0_min;
values[1] = vehicle_state.apps0_max;
values[2] = vehicle_state.apps1_min;
values[3] = vehicle_state.apps1_max;
for (size_t i = 0; i < FIELD_COUNT; i++) {
auto &buf = fieldBuffers[i];
if (fieldsDirty[i]) {
values[i] = params.valuesFloat[fieldParams[i]];
fieldWidgets[i]->setColor(
touchgfx::Color::getColorFromRGB(0xff, 0x00, 0x00));
} else {
fieldWidgets[i]->setColor(
touchgfx::Color::getColorFromRGB(0xff, 0xff, 0xff));
}
touchgfx::Unicode::snprintfFloat(buf, sizeof(buf) / sizeof(*buf), "%5.3f",
values[i]);
fieldWidgets[i]->setWildcard(buf);
fieldWidgets[i]->invalidate();
}
touchgfx::Unicode::snprintfFloat(apps0Buffer,
sizeof(apps0Buffer) / sizeof(*apps0Buffer),
"%5.3f", vehicle_state.apps0_volt);
apps0cur.setWildcard(apps0Buffer);
apps0cur.invalidate();
touchgfx::Unicode::snprintfFloat(apps1Buffer,
sizeof(apps1Buffer) / sizeof(*apps1Buffer),
"%5.3f", vehicle_state.apps1_volt);
apps1cur.setWildcard(apps1Buffer);
apps1cur.invalidate();
}
void APPSView::addGraphPoints(float apps0, float apps1) {
apps0Graph.addDataPoint(apps0 * 100);
apps1Graph.addDataPoint(apps1 * 100);
apps0Graph.invalidate();
apps1Graph.invalidate();
}

View File

@ -275,13 +275,30 @@ static_assert(sizeof(dataFieldDescs) / sizeof(dataFieldDescs[0]) ==
NamedFieldDescription paramFieldDescs[] = { NamedFieldDescription paramFieldDescs[] = {
[PF_BBAL] = {NamedFieldKind::Float, "BBAL", 2, 1, PARAM_FIELD(bbal)}, [PF_BBAL] = {NamedFieldKind::Float, "BBAL", 2, 1, PARAM_FIELD(bbal)},
[PF_SLIPREF] = {NamedFieldKind::Float, "SLIPREF", 2, 2,
PARAM_FIELD(slipref)},
[PF_MUMAX] = {NamedFieldKind::Float, "MUMAX", 2, 1, PARAM_FIELD(mumax)},
[PF_ASRP] = {NamedFieldKind::Int, "ASR-P", 2, 0, PARAM_FIELD(asrp)},
[PF_ASRON] = {NamedFieldKind::Int, "ASR-ON", 2, 0, PARAM_FIELD(asron)},
[PF_ASRI] = {NamedFieldKind::Int, "ASR-I", 2, 0, PARAM_FIELD(asri)},
[PF_PLIM] = {NamedFieldKind::Int, "PLIM", 2, 0, PARAM_FIELD(plim)}, [PF_PLIM] = {NamedFieldKind::Int, "PLIM", 2, 0, PARAM_FIELD(plim)},
[PF_TORQUE] = {NamedFieldKind::Float, "TSCALE", 3, 1, PARAM_FIELD(torque)},
[PF_SLIM] = {NamedFieldKind::Int, "SLIM", 2, 0, PARAM_FIELD(slim)},
[PF_APPS0_MIN] = {NamedFieldKind::Float, "APPS0MIN", 3, 1,
PARAM_FIELD(apps0_min)},
[PF_APPS0_MAX] = {NamedFieldKind::Float, "APPS0MAX", 3, 1,
PARAM_FIELD(apps0_max)},
[PF_APPS1_MIN] = {NamedFieldKind::Float, "APPS1MIN", 3, 1,
PARAM_FIELD(apps1_min)},
[PF_APPS1_MAX] = {NamedFieldKind::Float, "APPS1MAX", 3, 1,
PARAM_FIELD(apps1_max)},
[PF_TV] = {NamedFieldKind::Int, "TV", 3, 0, PARAM_FIELD(tv)},
[PF_TC] = {NamedFieldKind::Int, "TC", 3, 0, PARAM_FIELD(tc)},
[PF_TC_SLIPREF] = {NamedFieldKind::Float, "TCSLIPREF", 3, 1,
PARAM_FIELD(tc_slipref)},
[PF_TC_MUMAX] = {NamedFieldKind::Float, "TCMUMAX", 3, 1,
PARAM_FIELD(tc_mumax)},
[PF_TC_P] = {NamedFieldKind::Float, "TCP", 3, 1, PARAM_FIELD(tc_p)},
[PF_TC_I] = {NamedFieldKind::Float, "TCI", 3, 1, PARAM_FIELD(tc_i)},
[PF_DRS_CLOSED] = {NamedFieldKind::Float, "DRSCLOSED", 3, 1,
PARAM_FIELD(drs_closed)},
[PF_DRS_OPEN] = {NamedFieldKind::Float, "DRSOPEN", 3, 1,
PARAM_FIELD(drs_open)},
[PF_MAP] = {NamedFieldKind::Int, "MAP", 3, 0, PARAM_FIELD(map)},
}; };
static_assert(sizeof(paramFieldDescs) / sizeof(paramFieldDescs[0]) == static_assert(sizeof(paramFieldDescs) / sizeof(paramFieldDescs[0]) ==

View File

@ -0,0 +1,61 @@
#include "gui/common/NamedField.hpp"
#include <gui/containers/ProgressBar.hpp>
ProgressBar::ProgressBar() {}
void ProgressBar::initialize() { ProgressBarBase::initialize(); }
void ProgressBar::update() {
if (vehicle_state.ts_state == TS_PRECHARGE) {
float progress = 0;
if (vehicle_state.ts_voltage_bat != 0) {
progress =
vehicle_state.ts_voltage_veh / vehicle_state.ts_voltage_bat * 100;
}
setProgress(true, ProgressType::PRECHARGE, progress);
} else if (vehicle_state.r2d_progress > R2D_TSACTIVE &&
vehicle_state.r2d_progress < R2D_INIT_SUCCESS) {
setProgress(true, ProgressType::R2D, vehicle_state.r2d_progress);
} else {
setProgress(false, ProgressType::PRECHARGE, 0);
}
}
void ProgressBar::setProgress(bool active, ProgressType type, float progress) {
if (active) {
switch (type) {
case ProgressType::PRECHARGE:
prechargeLabel.setVisible(true);
r2dLabel.setVisible(false);
r2dProgressLabel.setVisible(false);
progressBar.setValue(progress);
break;
case ProgressType::R2D:
const char *progText = static_cast<const char *>(get_r2dprog_text());
touchgfx::Unicode::strncpy(r2dProgBuffer, progText,
sizeof(r2dProgBuffer) /
sizeof(*r2dProgBuffer));
r2dProgressLabel.setWildcard(r2dProgBuffer);
r2dProgressLabel.setVisible(true);
r2dLabel.setVisible(true);
prechargeLabel.setVisible(false);
progress = progress - R2D_TSACTIVE;
progressBar.setValue(progress * 100 / 5);
break;
}
prechargeLabel.invalidate();
r2dProgressLabel.invalidate();
r2dLabel.invalidate();
progressBar.setVisible(true);
progressBar.invalidate();
} else if (progressBar.isVisible()) {
prechargeLabel.setVisible(false);
prechargeLabel.invalidate();
r2dLabel.setVisible(false);
r2dLabel.invalidate();
r2dProgressLabel.setVisible(false);
r2dProgressLabel.invalidate();
progressBar.setVisible(false);
progressBar.invalidate();
}
}

View File

@ -2,6 +2,7 @@
#include <gui/driverview_screen/DriverViewView.hpp> #include <gui/driverview_screen/DriverViewView.hpp>
#include "gui/common/NamedField.hpp" #include "gui/common/NamedField.hpp"
#include "gui/containers/ProgressBar.hpp"
constexpr int32_t SHOW_ERRORS_FOR = 10000; // ms constexpr int32_t SHOW_ERRORS_FOR = 10000; // ms
@ -24,7 +25,7 @@ void DriverViewPresenter::deactivate() {}
void DriverViewPresenter::vehicleStateUpdated() { void DriverViewPresenter::vehicleStateUpdated() {
view.setTemps(vehicle_state.temps); view.setTemps(vehicle_state.temps);
view.setTSSoC(vehicle_state.soc_ts); view.setTSSoC(vehicle_state.soc_ts);
updateProgress(); view.updateProgress();
updateErrorPopup(); updateErrorPopup();
view.updateFieldValues(); view.updateFieldValues();
@ -41,23 +42,6 @@ void DriverViewPresenter::setFieldType(size_t i, DataFieldType type) {
view.setFieldType(i, type); view.setFieldType(i, type);
} }
void DriverViewPresenter::updateProgress() {
if (vehicle_state.ts_state == TS_PRECHARGE) {
float progress = 0;
if (vehicle_state.ts_voltage_bat != 0) {
progress =
vehicle_state.ts_voltage_veh / vehicle_state.ts_voltage_bat * 100;
}
view.setProgress(true, DriverViewProgressType::PRECHARGE, progress);
} else if (vehicle_state.r2d_progress > R2D_TSACTIVE &&
vehicle_state.r2d_progress < R2D_INIT_SUCCESS) {
view.setProgress(true, DriverViewProgressType::R2D,
vehicle_state.r2d_progress);
} else {
view.setProgress(false, DriverViewProgressType::PRECHARGE, 0);
}
}
void DriverViewPresenter::updateErrorPopup() { void DriverViewPresenter::updateErrorPopup() {
static uint32_t last_error = 0; static uint32_t last_error = 0;
if (vehicle_state.ts_state == TS_ERROR) { if (vehicle_state.ts_state == TS_ERROR) {

View File

@ -1,8 +1,8 @@
#include "gui/common/NamedField.hpp" #include "gui/common/NamedField.hpp"
#include "gui/containers/DriverViewField.hpp" #include "gui/containers/DriverViewField.hpp"
#include "gui/containers/DriverViewStatusItem.hpp" #include "gui/containers/DriverViewStatusItem.hpp"
#include "gui/containers/ProgressBar.hpp"
#include "gui/driverview_screen/DriverViewPresenter.hpp" #include "gui/driverview_screen/DriverViewPresenter.hpp"
#include "texts/TextKeysAndLanguages.hpp"
#include "touchgfx/Callback.hpp" #include "touchgfx/Callback.hpp"
#include "touchgfx/Drawable.hpp" #include "touchgfx/Drawable.hpp"
#include "touchgfx/Unicode.hpp" #include "touchgfx/Unicode.hpp"
@ -96,45 +96,7 @@ void DriverViewView::setTSSoC(uint8_t value) {
socLabel.invalidate(); socLabel.invalidate();
} }
void DriverViewView::setProgress(bool active, DriverViewProgressType type, void DriverViewView::updateProgress() { progressBar.update(); }
float progress) {
if (active) {
switch (type) {
case DriverViewProgressType::PRECHARGE:
prechargeLabel.setVisible(true);
r2dLabel.setVisible(false);
r2dProgressLabel.setVisible(false);
progressBar.setValue(progress);
break;
case DriverViewProgressType::R2D:
const char *progText = static_cast<const char *>(get_r2dprog_text());
touchgfx::Unicode::strncpy(r2dProgBuffer, progText,
sizeof(r2dProgBuffer) /
sizeof(*r2dProgBuffer));
r2dProgressLabel.setWildcard(r2dProgBuffer);
r2dProgressLabel.setVisible(true);
r2dLabel.setVisible(true);
prechargeLabel.setVisible(false);
progress = progress - R2D_TSACTIVE;
progressBar.setValue(progress * 100 / 5);
break;
}
prechargeLabel.invalidate();
r2dProgressLabel.invalidate();
r2dLabel.invalidate();
progressBar.setVisible(true);
progressBar.invalidate();
} else if (progressBar.isVisible()) {
prechargeLabel.setVisible(false);
prechargeLabel.invalidate();
r2dLabel.setVisible(false);
r2dLabel.invalidate();
r2dProgressLabel.setVisible(false);
r2dProgressLabel.invalidate();
progressBar.setVisible(false);
progressBar.invalidate();
}
}
void DriverViewView::showAMSError() { void DriverViewView::showAMSError() {
errorPopup.setVisible(true); errorPopup.setVisible(true);

View File

@ -0,0 +1,20 @@
#include "gui/common/FrontendApplication.hpp"
#include "touchgfx/Application.hpp"
#include <gui/endurance_screen/EndurancePresenter.hpp>
#include <gui/endurance_screen/EnduranceView.hpp>
EndurancePresenter::EndurancePresenter(EnduranceView &v) : view(v) {}
void EndurancePresenter::activate() {}
void EndurancePresenter::deactivate() {}
void EndurancePresenter::vehicleStateUpdated() {
view.updateBatDelta();
view.updateDetails();
}
void EndurancePresenter::nextScreen() {
static_cast<FrontendApplication *>(Application::getInstance())
->gotoDriverViewScreenNoTransition();
}

View File

@ -0,0 +1,174 @@
#include "main.h"
#include "touchgfx/Color.hpp"
#include "touchgfx/Unicode.hpp"
#include "vehicle_state.h"
#include <climits>
#include <cmath>
#include <gui/endurance_screen/EnduranceView.hpp>
#ifndef SIMULATOR
#include "stm32h7xx_hal_gpio.h"
#endif
EnduranceView::EnduranceView()
: lastLapDelta(lastLapBox, lastLapBat),
overallDelta(overallBox, overallBat), plimBuffer(powerLimit, 2, 0),
slimBuffer(speedLimit, 2, 0), socBuffer(soc, 3, 0),
tbatBuffer(batTemp, 2, 1) {}
void EnduranceView::setupScreen() {
EnduranceViewBase::setupScreen();
lastLapDelta.setField(lastLapBat);
lastLapDelta.setBox(lastLapBox);
overallDelta.setField(overallBat);
overallDelta.setBox(overallBox);
plimBuffer.setField(powerLimit);
slimBuffer.setField(speedLimit);
socBuffer.setField(soc);
tbatBuffer.setField(batTemp);
}
void EnduranceView::tearDownScreen() { EnduranceViewBase::tearDownScreen(); }
void EnduranceView::updateBatDelta() {
lastLapDelta.setDelta(vehicle_state.bat_delta_last);
overallDelta.setDelta(vehicle_state.bat_delta_overall);
}
void EnduranceView::updateDetails() {
plimBuffer.setIntValue(vehicle_state.power_limit);
slimBuffer.setIntValue(vehicle_state.speed_limit);
socBuffer.setIntValue(vehicle_state.soc_ts);
tbatBuffer.setFloatValue(vehicle_state.max_cell_temp);
}
void EnduranceView::updateProgress() { progressBar.update(); }
void EnduranceView::decreasePowerLimit() {
if (!limitsChangable()) {
return;
}
if (wishlist.power_limit > 15) {
wishlist.power_limit--;
}
}
void EnduranceView::increasePowerLimit() {
if (!limitsChangable()) {
return;
}
if (wishlist.power_limit < 40) {
wishlist.power_limit++;
}
}
void EnduranceView::decreaseSpeedLimit() {
if (!limitsChangable()) {
return;
}
if (wishlist.speed_limit > 40) {
wishlist.speed_limit--;
}
}
void EnduranceView::increaseSpeedLimit() {
if (!limitsChangable()) {
return;
}
if (wishlist.speed_limit < 100) {
wishlist.speed_limit++;
}
}
bool EnduranceView::limitsChangable() {
#ifdef SIMULATOR
return true;
#else
return HAL_GPIO_ReadPin(BTN3_GPIO_Port, BTN3_Pin) == GPIO_PIN_SET;
#endif
}
BatDelta::BatDelta(touchgfx::BoxWithBorder &box,
touchgfx::TextAreaWithOneWildcard &field)
: box(box), field(field), value(INT_MIN) {}
void BatDelta::setField(touchgfx::TextAreaWithOneWildcard &field) {
this->field = field;
}
void BatDelta::setBox(touchgfx::BoxWithBorder &box) { this->box = box; }
void BatDelta::setDelta(float delta) {
int deltaRounded = std::round(delta);
if (deltaRounded == value) {
return;
}
value = deltaRounded;
touchgfx::Unicode::snprintf(buffer, sizeof(buffer) / sizeof(*buffer), "%+3d",
value);
field.setWildcard(buffer);
field.invalidate();
if (value > 10) {
box.setColor(touchgfx::Color::getColorFromRGB(0xa8, 0x08, 0x08));
} else if (value > 5) {
box.setColor(touchgfx::Color::getColorFromRGB(0xc7, 0x71, 0x08));
} else if (value > 0) {
box.setColor(touchgfx::Color::getColorFromRGB(0xdb, 0xb2, 0x0b));
} else if (value > -5) {
box.setColor(touchgfx::Color::getColorFromRGB(0x80, 0xba, 0x14));
} else if (value > -10) {
box.setColor(touchgfx::Color::getColorFromRGB(0x09, 0x96, 0x3b));
} else {
box.setColor(touchgfx::Color::getColorFromRGB(0x05, 0x77, 0xa8));
}
box.invalidate();
}
ValueBuffer::ValueBuffer(touchgfx::TextAreaWithOneWildcard &field,
size_t intDigits, size_t decimalDigits)
: field(field), intDigits(intDigits), decimalDigits(decimalDigits) {
value.f = NAN;
}
void ValueBuffer::setField(touchgfx::TextAreaWithOneWildcard &field) {
this->field = field;
}
void ValueBuffer::setIntValue(int value) {
if (value == this->value.i) {
return;
}
this->value.i = value;
touchgfx::Unicode::snprintf(buffer, sizeof(buffer) / sizeof(*buffer), "%*d",
static_cast<int>(intDigits), value);
field.setWildcard(buffer);
field.invalidate();
}
void ValueBuffer::setFloatValue(float value) {
if (value == this->value.f) {
return;
}
this->value.f = value;
size_t width = intDigits;
if (decimalDigits > 0) {
width += 1 + decimalDigits; // 1 for the decimal point
}
float params[3] = {static_cast<float>(width),
static_cast<float>(decimalDigits), value};
touchgfx::Unicode::snprintfFloats(buffer, sizeof(buffer) / sizeof(*buffer),
"%*.*f", params);
field.setWildcard(buffer);
field.invalidate();
}

View File

@ -27,7 +27,7 @@ void MissionSelectPresenter::vehicleStateUpdated() {
// Do nothing // Do nothing
break; break;
case MISSION_MANUAL: case MISSION_MANUAL:
app->gotoDriverViewScreenNoTransition(); app->gotoEnduranceScreenNoTransition();
break; break;
default: default:
app->gotoAMIScreenNoTransition(); app->gotoAMIScreenNoTransition();
@ -39,7 +39,7 @@ void MissionSelectPresenter::nextScreen() {
static_cast<FrontendApplication *>(FrontendApplication::getInstance()); static_cast<FrontendApplication *>(FrontendApplication::getInstance());
if (app->getBackToMissionSelect()) { if (app->getBackToMissionSelect()) {
if (vehicle_state.active_mission == MISSION_MANUAL) { if (vehicle_state.active_mission == MISSION_MANUAL) {
app->gotoDriverViewScreenNoTransition(); app->gotoEnduranceScreenNoTransition();
} else { } else {
app->gotoAMIScreenNoTransition(); app->gotoAMIScreenNoTransition();
} }

View File

@ -4,7 +4,56 @@
Model::Model() : modelListener(0) {} Model::Model() : modelListener(0) {}
#ifdef SIMULATOR #ifdef SIMULATOR
void Model::tick() { modelListener->vehicleStateUpdated(); } void bounce(float &value, bool &rising, float step, float lower, float upper) {
if (rising) {
value += step;
if (value > upper) {
value = upper;
rising = false;
}
} else {
value -= step;
if (value < lower) {
value = lower;
rising = true;
}
}
}
void Model::tick() {
static float last_lap_delta = 0;
static bool lap_delta_rising = true;
static float overall_delta = 0;
static bool overall_delta_rising = false;
static float power_limit = 20;
static bool power_limit_rising = false;
static float speed_limit = 70;
static bool speed_limit_rising = true;
static float soc = 100;
static bool soc_rising = false;
static float bat_temp = 13;
static bool bat_temp_rising = true;
static int iter = 0;
if (iter++ % 5 != 0) {
return;
}
bounce(last_lap_delta, lap_delta_rising, 0.2, -12, 12);
bounce(overall_delta, overall_delta_rising, 0.1, -12, 12);
bounce(power_limit, power_limit_rising, 0.1, 5, 30);
bounce(speed_limit, speed_limit_rising, 0.2, 50, 100);
bounce(soc, soc_rising, 0.5, 0, 100);
bounce(bat_temp, bat_temp_rising, 0.2, 10, 59);
vehicle_state.bat_delta_last = last_lap_delta;
vehicle_state.bat_delta_overall = overall_delta;
vehicle_state.power_limit = power_limit;
vehicle_state.speed_limit = speed_limit;
vehicle_state.soc_ts = soc;
vehicle_state.max_cell_temp = bat_temp;
vehicle_state.active_mission = MISSION_MANUAL;
modelListener->vehicleStateUpdated();
}
#else #else
#include "main.h" #include "main.h"

View File

@ -11,7 +11,7 @@ void VehicleConfigPresenter::deactivate() {}
void VehicleConfigPresenter::nextScreen() { void VehicleConfigPresenter::nextScreen() {
static_cast<FrontendApplication *>(Application::getInstance()) static_cast<FrontendApplication *>(Application::getInstance())
->gotoSDCScreenNoTransition(); ->gotoAPPSScreenNoTransition();
} }
void VehicleConfigPresenter::paramConfirmed() { void VehicleConfigPresenter::paramConfirmed() {

View File

@ -12,6 +12,11 @@ makefile_path := $(call qs,$(dir $(call sq,$(abspath $(call sq,$(makefile_name))
# Get path where the Application is # Get path where the Application is
application_path := $(call qs,$(abspath $(call sq,$(makefile_path)../..))) application_path := $(call qs,$(abspath $(call sq,$(makefile_path)../..)))
# Under Windows (MINGW32), the path is returned as e.g. z:/path/to/application
# Since the path may show up as a target in the Makefile, we can't have a colon
# in it. So we replace z:/ with /z/ to avoid this.
subst_drivename = $(shell echo $(1) | sed -e 's!^\([a-zA-Z]\):/!/\1/!')
application_path := $(call subst_drivename,$(application_path))
.PHONY: clean assets all .PHONY: clean assets all
@ -20,7 +25,7 @@ all clean assets:
$(error Spaces not allowed in path) $(error Spaces not allowed in path)
else else
ADDITIONAL_SOURCES := $(application_path)/../Core/Src/vehicle_state.c ADDITIONAL_SOURCES := vehicle_state.c
ADDITIONAL_INCLUDE_PATHS := $(application_path)/../Core/Inc ADDITIONAL_INCLUDE_PATHS := $(application_path)/../Core/Inc
ADDITIONAL_LIBRARY_PATHS := ADDITIONAL_LIBRARY_PATHS :=
ADDITIONAL_LIBRARIES := ADDITIONAL_LIBRARIES :=
@ -29,6 +34,7 @@ export ADDITIONAL_SOURCES ADDITIONAL_INCLUDE_PATHS ADDITIONAL_LIBRARY_PATHS ADDI
all: $(filter assets,$(MAKECMDGOALS)) all: $(filter assets,$(MAKECMDGOALS))
all assets: $(filter clean,$(MAKECMDGOALS)) all assets: $(filter clean,$(MAKECMDGOALS))
all clean assets: all clean assets:
@echo ADDITIONAL_SOURCES: $(ADDITIONAL_SOURCES)
@$(MAKE) -r -f generated/simulator/gcc/Makefile -s $(MFLAGS) $@ -C "$(application_path)" @$(MAKE) -r -f generated/simulator/gcc/Makefile -s $(MFLAGS) $@ -C "$(application_path)"
endif endif

View File

@ -204,6 +204,30 @@
"ScreenTransitionType": "ScreenTransitionNone", "ScreenTransitionType": "ScreenTransitionNone",
"ActionComponent": "SDC" "ActionComponent": "SDC"
} }
},
{
"InteractionName": "DummyChangeEnduranceView",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 249
},
"Action": {
"Type": "ActionGotoScreen",
"ScreenTransitionType": "ScreenTransitionNone",
"ActionComponent": "Endurance"
}
},
{
"InteractionName": "DummyChangeAPPSView",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 248
},
"Action": {
"Type": "ActionGotoScreen",
"ScreenTransitionType": "ScreenTransitionNone",
"ActionComponent": "APPS"
}
} }
] ]
}, },
@ -248,7 +272,7 @@
"X": 273, "X": 273,
"Y": 103, "Y": 103,
"Width": 84, "Width": 84,
"Height": 25, "Height": 24,
"TextId": "__SingleUse_3MDX", "TextId": "__SingleUse_3MDX",
"TextRotation": "0", "TextRotation": "0",
"Color": { "Color": {
@ -264,7 +288,7 @@
"X": 273, "X": 273,
"Y": 135, "Y": 135,
"Width": 85, "Width": 85,
"Height": 25, "Height": 24,
"TextId": "__SingleUse_JFR7", "TextId": "__SingleUse_JFR7",
"TextRotation": "0", "TextRotation": "0",
"Color": { "Color": {
@ -344,7 +368,7 @@
"X": 273, "X": 273,
"Y": 198, "Y": 198,
"Width": 129, "Width": 129,
"Height": 25, "Height": 24,
"TextId": "__SingleUse_590R", "TextId": "__SingleUse_590R",
"TextRotation": "0", "TextRotation": "0",
"Color": { "Color": {
@ -360,7 +384,7 @@
"X": 273, "X": 273,
"Y": 166, "Y": 166,
"Width": 128, "Width": 128,
"Height": 25, "Height": 24,
"TextId": "__SingleUse_Z78U", "TextId": "__SingleUse_Z78U",
"TextRotation": "0", "TextRotation": "0",
"Color": { "Color": {
@ -664,7 +688,7 @@
"X": 68, "X": 68,
"Y": 247, "Y": 247,
"Width": 255, "Width": 255,
"Height": 25, "Height": 24,
"TextId": "__SingleUse_0L75", "TextId": "__SingleUse_0L75",
"TextRotation": "0", "TextRotation": "0",
"Color": { "Color": {
@ -680,7 +704,7 @@
"X": 68, "X": 68,
"Y": 215, "Y": 215,
"Width": 273, "Width": 273,
"Height": 25, "Height": 24,
"TextId": "__SingleUse_GA13", "TextId": "__SingleUse_GA13",
"TextRotation": "0", "TextRotation": "0",
"Color": { "Color": {
@ -760,7 +784,7 @@
"X": 68, "X": 68,
"Y": 184, "Y": 184,
"Width": 259, "Width": 259,
"Height": 25, "Height": 24,
"TextId": "__SingleUse_OOU3", "TextId": "__SingleUse_OOU3",
"TextRotation": "0", "TextRotation": "0",
"Color": { "Color": {
@ -776,7 +800,7 @@
"X": 68, "X": 68,
"Y": 152, "Y": 152,
"Width": 256, "Width": 256,
"Height": 25, "Height": 24,
"TextId": "__SingleUse_2FPP", "TextId": "__SingleUse_2FPP",
"TextRotation": "0", "TextRotation": "0",
"Color": { "Color": {
@ -1100,70 +1124,11 @@
] ]
}, },
{ {
"Type": "BoxProgress", "Type": "CustomContainerInstance",
"Name": "progressBar", "Name": "progressBar",
"Width": 456, "Width": 456,
"Height": 33, "Height": 33,
"Visible": false, "CustomContainerDefinitionName": "ProgressBar"
"Color": {
"Red": 99,
"Green": 186
},
"Direction": "Right",
"FileNameBackground": "prog_horiz_bg.png",
"IndicatorPositionWidth": 480,
"IndicatorPositionHeight": 55,
"ProgressRangeMax": 100
},
{
"Type": "TextArea",
"Name": "prechargeLabel",
"X": 95,
"Y": -2,
"Width": 269,
"Height": 37,
"Visible": false,
"TextId": "__SingleUse_HMH2",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"AutoSize": true
},
{
"Type": "TextArea",
"Name": "r2dLabel",
"X": 70,
"Y": -2,
"Width": 317,
"Height": 37,
"Visible": false,
"TextId": "__SingleUse_NGUK",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
}
},
{
"Type": "TextArea",
"Name": "r2dProgressLabel",
"X": 168,
"Y": -2,
"Width": 219,
"Height": 37,
"Visible": false,
"TextId": "__SingleUse_J5UH",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
} }
] ]
}, },
@ -1627,6 +1592,739 @@
} }
], ],
"Interactions": [] "Interactions": []
},
{
"Name": "Endurance",
"Components": [
{
"Type": "Container",
"Name": "detailContainer",
"X": 12,
"Y": 187,
"Width": 456,
"Height": 118,
"Components": [
{
"Type": "BoxWithBorder",
"Name": "boxWithBorder2",
"Width": 152,
"Height": 118,
"BorderColor": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"BorderSize": 3
},
{
"Type": "BoxWithBorder",
"Name": "boxWithBorder2_1",
"X": 304,
"Width": 152,
"Height": 118,
"BorderColor": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"BorderSize": 3
},
{
"Type": "BoxWithBorder",
"Name": "boxWithBorder3",
"X": 152,
"Width": 152,
"Height": 59,
"BorderColor": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"BorderSize": 3
},
{
"Type": "BoxWithBorder",
"Name": "boxWithBorder3_1",
"X": 152,
"Y": 59,
"Width": 152,
"Height": 59,
"BorderColor": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"BorderSize": 3
},
{
"Type": "TextArea",
"Name": "textArea3",
"X": 27,
"Y": 2,
"Width": 99,
"Height": 24,
"TextId": "__SingleUse_QAZ3",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"AutoSize": true
},
{
"Type": "TextArea",
"Name": "textArea3_1",
"X": 329,
"Y": 2,
"Width": 102,
"Height": 24,
"TextId": "__SingleUse_1F9T",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"AutoSize": true
},
{
"Type": "TextArea",
"Name": "powerLimit",
"X": 28,
"Y": 20,
"Width": 96,
"Height": 92,
"TextId": "__SingleUse_4X8X",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "speedLimit",
"X": 308,
"Y": 20,
"Width": 144,
"Height": 92,
"TextId": "__SingleUse_DONW",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "soc",
"X": 168,
"Y": -2,
"Width": 120,
"Height": 58,
"TextId": "__SingleUse_OP6C",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "batTemp",
"X": 157,
"Y": 57,
"Width": 150,
"Height": 58,
"TextId": "__SingleUse_B2Q6",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
}
]
},
{
"Type": "Container",
"Name": "overallContainer",
"X": 248,
"Y": 15,
"Width": 220,
"Height": 160,
"Components": [
{
"Type": "BoxWithBorder",
"Name": "overallBox",
"Width": 220,
"Height": 160,
"BorderColor": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"BorderSize": 3
},
{
"Type": "TextArea",
"Name": "textArea1_1",
"X": 9,
"Y": 7,
"Width": 203,
"Height": 24,
"TextId": "__SingleUse_DJ62",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
}
},
{
"Type": "TextArea",
"Name": "overallBat",
"X": 14,
"Y": 40,
"Width": 192,
"Height": 92,
"TextId": "__SingleUse_FPXE",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
}
]
},
{
"Type": "Container",
"Name": "lastLapContainer",
"X": 12,
"Y": 15,
"Width": 220,
"Height": 160,
"Components": [
{
"Type": "BoxWithBorder",
"Name": "lastLapBox",
"Width": 220,
"Height": 160,
"BorderColor": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"BorderSize": 3
},
{
"Type": "TextArea",
"Name": "textArea1",
"X": 8,
"Y": 7,
"Width": 203,
"Height": 24,
"TextId": "__SingleUse_5W6Y",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"AutoSize": true
},
{
"Type": "TextArea",
"Name": "lastLapBat",
"X": 14,
"Y": 40,
"Width": 192,
"Height": 92,
"TextId": "__SingleUse_51AZ",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
}
]
},
{
"Type": "CustomContainerInstance",
"Name": "progressBar",
"X": 12,
"Y": 15,
"Width": 456,
"Height": 33,
"CustomContainerDefinitionName": "ProgressBar"
}
],
"Interactions": [
{
"InteractionName": "DecreasePLim",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 104
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "decreasePowerLimit"
}
},
{
"InteractionName": "IncreasePLim",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 108
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "increasePowerLimit"
}
},
{
"InteractionName": "DecreaseSLim",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 107
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "decreaseSpeedLimit"
}
},
{
"InteractionName": "IncreaseSLim",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 106
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "increaseSpeedLimit"
}
}
]
},
{
"Name": "APPS",
"CanvasBufferSize": 7200,
"Components": [
{
"Type": "DynamicGraph",
"Name": "apps0Graph",
"X": 11,
"Y": 36,
"Width": 458,
"Height": 180,
"DataSeed": -1468026350,
"NumberOfValues": 50,
"MaxY": 110.0,
"MinY": -10.0,
"Precision": "0.1",
"LastIndex": 49,
"XAxisScale": 1.0,
"LabelSizeLeft": 40,
"GraphType": "GraphWrapOverwrite",
"VerticalFrontline": {
"Type": "GraphVerticalFrontline",
"Color": {
"Red": 137,
"Green": 224,
"Blue": 13
},
"GapLineWidth": 1
},
"GraphDrawers": [
{
"Type": "LineDrawer",
"LineWidth": 2,
"FileNameImage": "",
"Color": {
"Red": 20,
"Green": 151,
"Blue": 197
}
}
],
"YAxisGrid": {
"Type": "GraphGrid",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Interval": 20.0,
"LineWidth": 1
},
"YAxisLabel": {
"Type": "GraphLabel",
"Interval": 20.0,
"DecimalSeparator": "Point",
"TextColor": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"TextId": "__SingleUse_RK9Z",
"TextRotation": "0",
"Position": "Left"
}
},
{
"Type": "DynamicGraph",
"Name": "apps1Graph",
"X": 11,
"Y": 36,
"Width": 458,
"Height": 180,
"DataSeed": 484013386,
"NumberOfValues": 50,
"MaxY": 110.0,
"MinY": -10.0,
"Precision": "0.1",
"LastIndex": 49,
"XAxisScale": 1.0,
"PaddingLeft": 40,
"GraphType": "GraphWrapOverwrite",
"GraphDrawers": [
{
"Type": "LineDrawer",
"LineWidth": 2,
"FileNameImage": "",
"Color": {
"Red": 196,
"Green": 109,
"Blue": 22
}
}
]
},
{
"Type": "TextArea",
"Name": "title",
"X": 38,
"Width": 405,
"Height": 30,
"TextId": "__SingleUse_UBFH",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"AutoSize": true
},
{
"Type": "TextArea",
"Name": "apps0",
"X": 11,
"Y": 247,
"Width": 100,
"Height": 24,
"TextId": "__SingleUse_6EKV",
"TextRotation": "0",
"Color": {
"Red": 20,
"Green": 151,
"Blue": 197
},
"AutoSize": true
},
{
"Type": "TextArea",
"Name": "apps1",
"X": 11,
"Y": 285,
"Width": 100,
"Height": 24,
"TextId": "__SingleUse_W4YT",
"TextRotation": "0",
"Color": {
"Red": 196,
"Green": 109,
"Blue": 22
},
"AutoSize": true
},
{
"Type": "TextArea",
"Name": "min",
"X": 127,
"Y": 216,
"Width": 100,
"Height": 24,
"TextId": "__SingleUse_QXG5",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
}
},
{
"Type": "TextArea",
"Name": "max",
"X": 250,
"Y": 216,
"Width": 100,
"Height": 24,
"TextId": "__SingleUse_WQXQ",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
}
},
{
"Type": "TextArea",
"Name": "cur",
"X": 369,
"Y": 216,
"Width": 100,
"Height": 24,
"TextId": "__SingleUse_CBZ9",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
}
},
{
"Type": "Box",
"Name": "apps1max_bg",
"X": 250,
"Y": 278,
"Width": 100,
"Height": 38,
"Visible": false,
"Color": {
"Red": 68,
"Green": 68,
"Blue": 68
}
},
{
"Type": "Box",
"Name": "apps0max_bg",
"X": 250,
"Y": 240,
"Width": 100,
"Height": 38,
"Visible": false,
"Color": {
"Red": 68,
"Green": 68,
"Blue": 68
}
},
{
"Type": "Box",
"Name": "apps1min_bg",
"X": 127,
"Y": 278,
"Width": 100,
"Height": 38,
"Visible": false,
"Color": {
"Red": 68,
"Green": 68,
"Blue": 68
}
},
{
"Type": "Box",
"Name": "apps0min_bg",
"X": 127,
"Y": 240,
"Width": 100,
"Height": 38,
"Visible": false,
"Color": {
"Red": 68,
"Green": 68,
"Blue": 68
}
},
{
"Type": "TextArea",
"Name": "apps1cur",
"X": 369,
"Y": 278,
"Width": 100,
"Height": 38,
"TextId": "__SingleUse_SM6H",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "apps0cur",
"X": 369,
"Y": 240,
"Width": 100,
"Height": 38,
"TextId": "__SingleUse_8KB4",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "apps1max",
"X": 250,
"Y": 278,
"Width": 100,
"Height": 38,
"TextId": "__SingleUse_H8OI",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "apps0max",
"X": 250,
"Y": 240,
"Width": 100,
"Height": 38,
"TextId": "__SingleUse_978V",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "apps1min",
"X": 127,
"Y": 278,
"Width": 100,
"Height": 38,
"TextId": "__SingleUse_P4TL",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "apps0min",
"X": 127,
"Y": 240,
"Width": 100,
"Height": 38,
"TextId": "__SingleUse_MBQT",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
}
],
"Interactions": [
{
"InteractionName": "SelectPrevField",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 104
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "selectPrevField"
}
},
{
"InteractionName": "SelectNextField",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 108
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "selectNextField"
}
},
{
"InteractionName": "DecField",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 107
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "decField"
}
},
{
"InteractionName": "IncField",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 106
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "incField"
}
},
{
"InteractionName": "ConfirmField",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 54
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "confirmField"
}
},
{
"InteractionName": "SwitchPrecision",
"Trigger": {
"Type": "TriggerPhysicalButtonClicked",
"ButtonKey": 53
},
"Action": {
"Type": "ActionCustom",
"FunctionName": "switchPrecision"
}
}
]
} }
], ],
"CustomContainerDefinitions": [ "CustomContainerDefinitions": [
@ -2107,6 +2805,82 @@
} }
], ],
"Interactions": [] "Interactions": []
},
{
"Name": "ProgressBar",
"X": -80,
"Y": 80,
"Width": 456,
"Height": 33,
"Components": [
{
"Type": "TextArea",
"Name": "r2dProgressLabel",
"X": 168,
"Y": -2,
"Width": 219,
"Height": 37,
"Visible": false,
"TextId": "__SingleUse_6EXA",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"Wildcard1": {}
},
{
"Type": "TextArea",
"Name": "r2dLabel",
"X": 70,
"Y": -2,
"Width": 317,
"Height": 37,
"Visible": false,
"TextId": "__SingleUse_570K",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
}
},
{
"Type": "TextArea",
"Name": "prechargeLabel",
"X": 95,
"Y": -2,
"Width": 269,
"Height": 37,
"Visible": false,
"TextId": "__SingleUse_G2S2",
"TextRotation": "0",
"Color": {
"Red": 255,
"Green": 255,
"Blue": 255
},
"AutoSize": true
},
{
"Type": "BoxProgress",
"Name": "progressBar",
"Width": 456,
"Height": 33,
"Visible": false,
"Color": {
"Red": 99,
"Green": 186
},
"Direction": "Right",
"FileNameBackground": "prog_horiz_bg.png",
"IndicatorPositionWidth": 480,
"IndicatorPositionHeight": 55,
"ProgressRangeMax": 100
}
],
"Interactions": []
} }
], ],
"Name": "SteeringWheel", "Name": "SteeringWheel",
@ -2149,7 +2923,7 @@
"PostGenerateTargetCommand": "touchgfx update_project", "PostGenerateTargetCommand": "touchgfx update_project",
"PostGenerateTargetCommandOverride": "", "PostGenerateTargetCommandOverride": "",
"CompileSimulatorCommand": "make -f simulator/gcc/Makefile -j8", "CompileSimulatorCommand": "make -f simulator/gcc/Makefile -j8",
"CompileSimulatorCommandOverride": "make -f simulator/gcc/Makefile -j2", "CompileSimulatorCommandOverride": "make -f simulator/gcc/Makefile -j12",
"RunSimulatorCommand": "build\\bin\\simulator.exe", "RunSimulatorCommand": "build\\bin\\simulator.exe",
"LandscapeSkinX": 0, "LandscapeSkinX": 0,
"LandscapeSkinY": 0, "LandscapeSkinY": 0,

View File

@ -6,7 +6,7 @@
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2024 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file

View File

@ -7,7 +7,7 @@
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2024 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file

View File

@ -6,7 +6,7 @@
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2024 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file

View File

@ -6,7 +6,7 @@
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2024 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file

View File

@ -6,7 +6,7 @@
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2024 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file

View File

@ -6,7 +6,7 @@
****************************************************************************** ******************************************************************************
* @attention * @attention
* *
* Copyright (c) 2023 STMicroelectronics. * Copyright (c) 2024 STMicroelectronics.
* All rights reserved. * All rights reserved.
* *
* This software is licensed under terms that can be found in the LICENSE file * This software is licensed under terms that can be found in the LICENSE file

1
TouchGFX/vehicle_state.c Symbolic link
View File

@ -0,0 +1 @@
../Core/Src/vehicle_state.c

View File

@ -36,7 +36,7 @@ FDCAN1.NominalTimeSeg1=63
FDCAN1.NominalTimeSeg2=16 FDCAN1.NominalTimeSeg2=16
FDCAN1.RxFifo0ElmtsNbr=16 FDCAN1.RxFifo0ElmtsNbr=16
FDCAN1.StdFiltersNbr=32 FDCAN1.StdFiltersNbr=32
FDCAN1.TxFifoQueueElmtsNbr=1 FDCAN1.TxFifoQueueElmtsNbr=32
File.Version=6 File.Version=6
GPIO.groupedBy=Show All GPIO.groupedBy=Show All
JPEG.IPParameters=JPEG_RGB_FORMAT JPEG.IPParameters=JPEG_RGB_FORMAT
@ -152,8 +152,8 @@ Mcu.Pin7=PF2
Mcu.Pin70=VP_TIM1_VS_ClockSourceINT Mcu.Pin70=VP_TIM1_VS_ClockSourceINT
Mcu.Pin71=VP_TIM2_VS_ClockSourceINT Mcu.Pin71=VP_TIM2_VS_ClockSourceINT
Mcu.Pin72=VP_TIM17_VS_ClockSourceINT Mcu.Pin72=VP_TIM17_VS_ClockSourceINT
Mcu.Pin73=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_RTOSJjThreadX_6.1.12_3.0.0 Mcu.Pin73=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0
Mcu.Pin74=VP_STMicroelectronics.X-CUBE-TOUCHGFX_VS_GraphicsJjApplication_4.22.0 Mcu.Pin74=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_RTOSJjThreadX_6.1.12_3.0.0
Mcu.Pin8=PF3 Mcu.Pin8=PF3
Mcu.Pin9=PF4 Mcu.Pin9=PF4
Mcu.PinsNb=75 Mcu.PinsNb=75
@ -448,7 +448,7 @@ ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath= ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=false ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_FDCAN1_Init-FDCAN1-false-HAL-true,5-MX_LTDC_Init-LTDC-false-HAL-true,6-MX_JPEG_Init-JPEG-false-HAL-true,7-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,8-MX_SPI3_Init-SPI3-false-HAL-true,9-MX_TIM1_Init-TIM1-false-HAL-true,10-MX_TIM2_Init-TIM2-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_CRC_Init-CRC-false-HAL-true,13-MX_TIM17_Init-TIM17-false-HAL-true,14-MX_DMA2D_Init-DMA2D-false-HAL-true,16-MX_TouchGFX_Init-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.2-false-HAL-false,17-MX_TouchGFX_Process-STMicroelectronics.X-CUBE-TOUCHGFX.4.21.2-false-HAL-false,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_FDCAN1_Init-FDCAN1-false-HAL-true,5-MX_LTDC_Init-LTDC-false-HAL-true,6-MX_JPEG_Init-JPEG-false-HAL-true,7-MX_OCTOSPI1_Init-OCTOSPI1-false-HAL-true,8-MX_SPI3_Init-SPI3-false-HAL-true,9-MX_TIM1_Init-TIM1-false-HAL-true,10-MX_TIM2_Init-TIM2-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_CRC_Init-CRC-false-HAL-true,13-MX_TIM17_Init-TIM17-false-HAL-true,14-MX_DMA2D_Init-DMA2D-false-HAL-true,15-MX_TouchGFX_Init-STMicroelectronics.X-CUBE-TOUCHGFX.4.22.0-false-HAL-false,16-MX_TouchGFX_Process-STMicroelectronics.X-CUBE-TOUCHGFX.4.22.0-false-HAL-false,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
RCC.ADCFreq_Value=2000000 RCC.ADCFreq_Value=2000000
RCC.AHB12Freq_Value=160000000 RCC.AHB12Freq_Value=160000000
RCC.AHB4Freq_Value=160000000 RCC.AHB4Freq_Value=160000000