example:ChatGPT_demo using uf2

This commit is contained in:
Ali Hassan Shah
2023-07-13 11:24:05 +08:00
parent 2bce6c5281
commit 0668385b2c
73 changed files with 13113 additions and 1041 deletions
+39 -12
View File
@@ -8,9 +8,9 @@ In this example, we are utilizing the OpenAI API in conjunction with an ESP-Box
git checkout master && git pull && git submodule update --init --recursive
```
* If you encounter any errors during the upgrade process, please make sure to use the ESP-IDF version [master](https://github.com/espressif/esp-idf) at commit ID `df9310ada26123d8d478bcfa203f874d8c21d654`. This specific commit represents a stable state of the ESP-IDF repository and can help ensure a smoother transition or troubleshooting process.
* If you encounter any errors during the upgrade process, please make sure to use the ESP-IDF version [master](https://github.com/espressif/esp-idf) at commit ID `d2471b11e78fb0af612dfa045255ac7fe497bea8`. This specific commit represents a stable state of the ESP-IDF repository and can help ensure a smoother transition or troubleshooting process.
```
git checkout df9310ada26123d8d478bcfa203f874d8c21d654 && git pull && git submodule update --init --recursive
git checkout 67552c31dac8cd94fb0d63192a538f4f984c5b6e && git pull && git submodule update --init --recursive
```
@@ -18,6 +18,8 @@ git checkout df9310ada26123d8d478bcfa203f874d8c21d654 && git pull && git submodu
Due to the lack of native text-to-speech support in the [OpenAI](https://platform.openai.com/docs/api-reference) API, an external API is used to meet this requirement. This example utilizes the text-to-speech functionality offered by [TalkingGenie](https://www.talkinggenie.com/tts). Additional information can be found in this [blog post](https://czyt.tech/post/a-free-tts-api/?from_wecom=1).
## **Reproducing the demo**
There is another project called **factory_nvs** within the **ChatGPT_demo** project. It includes the code to store credentials in the NVS (Non-Volatile Storage) of the ESP-Box. On the other hand, **Chat_GPT Demo**consists of the demo code. Therefore, it is essential to build both projects.
### 1. Clone the Github repository
@@ -26,26 +28,51 @@ git clone https://github.com/espressif/esp-box
```
### 2. Change the working directory to model_deployment
### 2. Change the working directory
```bash
cd examples/chatgpt_demo/factory_nvs
```
### 3. Build the factory_nvs
```bash
idf.py build
```
### 4. Change the working directory
```bash
cd examples/chatgpt_demo/
```
### 3. Set up OpenAI Key, WiFi SSID and Password
```
idf.py menuconfig
```
### 4. Build the project
### 5. Build the chatgpt_demo
```bash
idf.py build flash monitor
idf.py build
```
### 6. Flash on ESP-BOX
```
python -m esptool -p /dev/ttyACM0 --chip esp32s3 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 16MB --flash_freq 80m 0x0 build/bootloader/bootloader.bin 0x8000 build/partition_table/partition-table.bin 0xd000 build/ota_data_initial.bin 0x10000 build/chatgpt_demo.bin 0x900000 build/storage.bin 0xb00000 build/srmodels/srmodels.bin 0x700000 factory_nvs/build/factory_nvs.bin
```
In case found error during the building process [follow the official IDF guide for more details](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html#build-your-first-project).
> **Note :**
> Please note that you require an OpenAI API key to proceed with the demo. To enter the WIFI credentials and OpenAI secret key, access the menuconfig using "idf.py menuconfig"
## Known compilation errors
When encountering compilation errors related to the "espressif__esp-sr" component, a common solution is to remove the ".component_hash" file located at "managed_components/espressif__esp-sr" and proceed with the rebuild. This step helps resolve the issue and allows the compilation process to continue smoothly.
### **Note**:
Please note that,
1. You require an **OpenAI API** key to proceed with the demo.
2. To enter the WIFI credentials and OpenAI secret key.
3. The example does not currently support ESP-BOX Lite.
4. Additionally, as a result of **OpenAI's restrictions**, this particular example cannot be supported within Mainland China.
@@ -1 +0,0 @@
6761973f9f117571afcf1f70db4036a226dddee347c39e66518e4fcb3f521c16
@@ -234,12 +234,12 @@ static esp_err_t aplay_file(audio_instance_t *i, uint8_t *stream, uint32_t strea
memset(&i2s_format, 0, sizeof(i2s_format));
esp_err_t ret = ESP_OK;
audio_player_event_t audio_event = { .type = AUDIO_PLAYER_REQUEST_NONE, .stream = NULL };
audio_player_event_t audio_event = { .type = AUDIO_PLAYER_REQUEST_NONE, .stream = NULL, .stream_len = 0 };
FILE_TYPE file_type = FILE_TYPE_UNKNOWN;
uint8_t *p_stream = stream;
// LOGI_1("start to decode,%p, %p, stream_len:%d", stream, p_stream, stream_len);
LOGI_1("start to decode, %p, %p, stream_len:%"PRIu32, stream, p_stream, stream_len);
LOGI_1("start to decode, %p, %p, stream_len:%" PRIu32 , stream, p_stream, stream_len);
#if defined(CONFIG_AUDIO_PLAYER_ENABLE_MP3)
@@ -359,7 +359,7 @@ static esp_err_t aplay_file(audio_instance_t *i, uint8_t *stream, uint32_t strea
(i2s_format.channels != i->output.fmt.channels) ||
(i2s_format.bits_per_sample != i->output.fmt.bits_per_sample)) {
i2s_format = i->output.fmt;
LOGI_1("format change: sr=%d, bit=%"PRIu32", ch=%"PRIu32,
LOGI_1("format change: sr=%d, bit=%" PRIu32 ", ch=%" PRIu32 ,
i2s_format.sample_rate,
i2s_format.bits_per_sample,
i2s_format.channels);
@@ -482,21 +482,21 @@ esp_err_t audio_player_play(uint8_t *stream, uint32_t file_len)
esp_err_t audio_player_pause(void)
{
LOGI_1("%s", __FUNCTION__);
audio_player_event_t event = { .type = AUDIO_PLAYER_REQUEST_PAUSE, .stream = NULL };
audio_player_event_t event = { .type = AUDIO_PLAYER_REQUEST_PAUSE, .stream = NULL, .stream_len = 0};
return audio_send_event(&instance, event);
}
esp_err_t audio_player_resume(void)
{
LOGI_1("%s", __FUNCTION__);
audio_player_event_t event = { .type = AUDIO_PLAYER_REQUEST_RESUME, .stream = NULL };
audio_player_event_t event = { .type = AUDIO_PLAYER_REQUEST_RESUME, .stream = NULL, .stream_len = 0};
return audio_send_event(&instance, event);
}
esp_err_t audio_player_stop(void)
{
LOGI_1("%s", __FUNCTION__);
audio_player_event_t event = { .type = AUDIO_PLAYER_REQUEST_STOP, .stream = NULL };
audio_player_event_t event = { .type = AUDIO_PLAYER_REQUEST_STOP, .stream = NULL, .stream_len = 0};
return audio_send_event(&instance, event);
}
@@ -507,7 +507,7 @@ esp_err_t audio_player_stop(void)
static esp_err_t _internal_audio_player_shutdown_thread(void)
{
LOGI_1("%s", __FUNCTION__);
audio_player_event_t event = { .type = AUDIO_PLAYER_REQUEST_SHUTDOWN_THREAD, .stream = NULL };
audio_player_event_t event = { .type = AUDIO_PLAYER_REQUEST_SHUTDOWN_THREAD, .stream = NULL, .stream_len = 0 };
return audio_send_event(&instance, event);
}
@@ -1,7 +0,0 @@
# ChangeLog
## v0.0.1 - 2023-6-15
### Enhancements:
* OpenAI ChatGPT and Whisper AI support
@@ -1,5 +0,0 @@
idf_component_register(
SRCS "OpenAI.c"
INCLUDE_DIRS "include"
REQUIRES tcp_transport esp_http_client
)
@@ -1,202 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
@@ -1,398 +0,0 @@
/*
* SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <string.h>
#include "OpenAI.h"
#include "esp_log.h"
#include <json_parser.h>
#include "esp_http_client.h"
#include "esp_crt_bundle.h"
static const char *json_fmt = "{\"model\":\"%s\",\"max_tokens\":%d,\"messages\":[{\"role\":\"user\",\"content\":\"%s\"}]}";
static const char *TAG = "Open AI";
char OPENAI_API_KEY[OPENAI_API_KEY_MAX_LEN];
char message_content[MESSAGE_CONTENT_SIZE] = {0};
char message_content_for_whisper[1024] = {0};
char json_payload[512];
// Forward Declaration will be remove in new version of OpenAI component
typedef struct {
bool need_hint;
region_t current_server;
char ssid[32];
char password[64];
uint8_t ssid_len;
uint8_t password_len;
} sys_param_t;
// Declaration of the weak function will be remove in new version of OpenAI component
sys_param_t* __attribute__((weak)) settings_get_parameter(void) {
static sys_param_t default_parameters = {
.current_server = REGION_Espressif, // Default server
};
return &default_parameters;
}
// Declaration of the weak function will be remove in new version of OpenAI component
esp_err_t __attribute__((weak)) settings_write_parameter_to_nvs(void){
printf("This is the weak function.\n");
return NULL; // Or return a default sys_param_t value
}
/* Function to set the OpenAI API key */
void set_api_key(const char *key)
{
if (key == NULL) {
ESP_LOGE(TAG, "OpenAI API key is NULL");
return;
}
size_t key_length = strlen(key);
if (key_length >= OPENAI_API_KEY_MAX_LEN) {
ESP_LOGE(TAG, "OpenAI API key is too long: %s", key);
return;
}
strncpy(OPENAI_API_KEY, key, OPENAI_API_KEY_MAX_LEN - 1);
OPENAI_API_KEY[OPENAI_API_KEY_MAX_LEN - 1] = '\0';
ESP_LOGI(TAG, "API Key entered");
}
/* Parsing response coming from server */
void parse_response (const char *data, int len)
{
jparse_ctx_t jctx;
int ret = json_parse_start(&jctx, data, len);
if (ret != OS_SUCCESS) {
ESP_LOGE(TAG, "Parser failed");
return;
}
printf("\n");
int num_choices;
/* Parsing OpenAI & Espressif server Chat GPT response */
if (json_obj_get_array(&jctx, "choices", &num_choices) == OS_SUCCESS) {
for (int i = 0; i < num_choices; i++) {
if (json_arr_get_object(&jctx, i) == OS_SUCCESS && json_obj_get_object(&jctx, "message") == OS_SUCCESS &&
json_obj_get_string(&jctx, "content", message_content, sizeof(message_content)) == OS_SUCCESS) {
ESP_LOGI(TAG, "ChatGPT message_content: %s\n", message_content);
}
json_arr_leave_object(&jctx);
}
json_obj_leave_array(&jctx);
}
/* Parsing OpenAI server Whisper AI response */
else if (json_obj_get_string(&jctx, "text", message_content, sizeof(message_content)) == OS_SUCCESS) {
ESP_LOGI(TAG, "Whisper message_content: %s", message_content);
} else if (json_obj_get_object(&jctx, "error") == OS_SUCCESS) {
if (json_obj_get_string(&jctx, "type", message_content, sizeof(message_content)) == OS_SUCCESS) {
ESP_LOGE(TAG, "API returns an error: %s", message_content);
}
}
}
/* Parsing espressif server Whisper AI response */
void parse_espressif_server_whisper_response(const char *data, int len)
{
jparse_ctx_t jctx;
int ret = json_parse_start(&jctx, data, len);
if (ret != OS_SUCCESS) {
ESP_LOGE(TAG, "Parser failed");
return;
}
if (json_obj_get_string(&jctx, "whisper", message_content_for_whisper, sizeof(message_content_for_whisper)) == OS_SUCCESS) {
ESP_LOGI(TAG, "Whisper message_content: %s", message_content_for_whisper);
} else {
ESP_LOGE(TAG, "Error in parse whisper AI response data");
}
}
/* Intermediate function to correctly parse data*/
void parsing_data(const char *data, int len)
{
if (data == NULL) {
ESP_LOGE(TAG, "Response data is NULL");
return;
}
sys_param_t *sys_set = settings_get_parameter();
if (sys_set->current_server == REGION_Espressif) {
ESP_LOGI(TAG, "parsing Espressif server response");
parse_espressif_server_whisper_response(data, len);
}
parse_response(data, len);
}
/* Response handler for HTTPS request */
esp_err_t response_handler(esp_http_client_event_t *evt)
{
static char *data = NULL; // Initialize data to NULL
static int data_len = 0; // Initialize data to NULL
switch (evt->event_id) {
case HTTP_EVENT_ERROR:
ESP_LOGI(TAG, "HTTP_EVENT_ERROR");
break;
case HTTP_EVENT_ON_CONNECTED:
ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");
break;
case HTTP_EVENT_HEADER_SENT:
ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT");
break;
case HTTP_EVENT_ON_HEADER:
if (evt->data_len) {
ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER");
ESP_LOGI(TAG, "%.*s", evt->data_len, (char *)evt->data);
}
break;
case HTTP_EVENT_ON_DATA:
ESP_LOGI(TAG, "HTTP_EVENT_ON_DATA (%d +)%d", data_len, evt->data_len);
ESP_LOGI(TAG, "Raw Response: data length: (%d +)%d: %.*s", data_len, evt->data_len, evt->data_len, (char *)evt->data);
data = heap_caps_realloc(data, data_len + evt->data_len + 1, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
if (data == NULL) {
ESP_LOGE(TAG, "data realloc failed");
free(data);
data = NULL;
break;
}
memcpy(data + data_len, (char *)evt->data, evt->data_len);
data_len += evt->data_len;
data[data_len] = '\0';
break;
case HTTP_EVENT_ON_FINISH:
ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");
if (data != NULL) {
parsing_data(data, strlen(data));
free(data); // Free memory
data = NULL;
data_len = 0;
}
break;
case HTTP_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");
break;
default:
break;
}
return ESP_OK;
}
/* This function creates an HTTP POST request to the OpenAI chatGPT API */
esp_err_t create_chatgpt_request(const char *content)
{
char url[128] = "https://api.openai.com/v1/chat/completions";
char model[16] = "gpt-3.5-turbo";
char headers[512];
snprintf(headers, sizeof(headers), "Bearer %s", OPENAI_API_KEY);
ESP_LOGI(TAG, "Set Header %s", headers);
esp_http_client_config_t config = {
.url = url,
.method = HTTP_METHOD_POST,
.event_handler = response_handler,
.buffer_size = MAX_HTTP_RECV_BUFFER,
.timeout_ms = 30000,
.crt_bundle_attach = esp_crt_bundle_attach,
};
uint32_t starttime = esp_log_timestamp();
ESP_LOGE(TAG, "[Start] create_CHATGPT_request, timestamp:%"PRIu32, starttime);
// Set the headers
esp_http_client_handle_t client = esp_http_client_init(&config);
esp_http_client_set_header(client, "Content-Type", "application/json");
esp_http_client_set_header(client, "Authorization", headers);
snprintf(json_payload, sizeof(json_payload), json_fmt, model, MAX_RESPONSE_TOKEN, content);
ESP_LOGI(TAG, "JSON Payload: %s", json_payload);
esp_http_client_set_post_field(client, json_payload, strlen(json_payload));
// Send the request
esp_err_t err = esp_http_client_perform(client);
if (err != ESP_OK) {
ESP_LOGW(TAG, "HTTP POST request failed: %s\n", esp_err_to_name(err));
}
ESP_LOGE(TAG, "[End] create_CHATGPT_request, + offset: %" PRIu32, esp_log_timestamp() - starttime);
esp_http_client_cleanup(client);
return err;
}
/* This function creates an HTTP POST request to the OpenAI whisper API */
esp_err_t create_whisper_request_from_record(uint8_t *audio, int audio_len)
{
if (audio == NULL) {
// Handle the error condition appropriately
ESP_LOGE(TAG, "Audio data is NULL");
return ESP_ERR_INVALID_ARG; // Or any other error code indicating the issue
}
char url[128]; // declare the variable here
char headers[512];
sys_param_t *sys_set = settings_get_parameter();
if (sys_set->current_server == REGION_Espressif) {
ESP_LOGI(TAG, "Espressif server");
snprintf(url, sizeof(url), "https://flask-production-1b02.up.railway.app/audio");
} else {
snprintf(url, sizeof(url), "https://api.openai.com/v1/audio/transcriptions");
}
snprintf(headers, sizeof(headers), "Bearer %s", OPENAI_API_KEY);
esp_http_client_config_t config = {
.url = url,
.method = HTTP_METHOD_POST,
.event_handler = response_handler,
.buffer_size = MAX_HTTP_RECV_BUFFER,
.timeout_ms = 60000,
.crt_bundle_attach = esp_crt_bundle_attach,
};
uint32_t starttime = esp_log_timestamp();
ESP_LOGE(TAG, "[Start] create_whisper_request, timestamp:%"PRIu32, starttime);
esp_http_client_handle_t client = esp_http_client_init(&config);
// Set the headers
esp_http_client_set_header(client, "Authorization", headers);
// Set the content type and the boundary string
char boundary[] = "boundary1234567890";
char content_type[64];
snprintf(content_type, sizeof(content_type), "multipart/form-data; boundary=%s", boundary);
esp_http_client_set_header(client, "Content-Type", content_type);
char *file_data = NULL;
size_t file_size;
file_data = (char *)audio;
file_size = audio_len;
// Build the multipart/form-data request
char *form_data = (char *)malloc(MAX_HTTP_RECV_BUFFER);
assert(form_data);
ESP_LOGI(TAG, "Size of form_data buffer: %zu bytes", sizeof(*form_data) * MAX_HTTP_RECV_BUFFER);
int form_data_len = 0;
form_data_len += snprintf(form_data + form_data_len, MAX_HTTP_RECV_BUFFER - form_data_len,
"--%s\r\n"
"Content-Disposition: form-data; name=\"file\"; filename=\"%s\"\r\n"
"Content-Type: application/octet-stream\r\n"
"\r\n", boundary, get_file_format(file_type));
ESP_LOGI(TAG, "form_data_len %d", form_data_len);
ESP_LOGI(TAG, "form_data %s\n", form_data);
// Append the audio file contents
memcpy(form_data + form_data_len, file_data, file_size);
form_data_len += file_size;
ESP_LOGI(TAG, "Size of form_data: %zu", form_data_len);
// Append the rest of the form-data
form_data_len += snprintf(form_data + form_data_len, MAX_HTTP_RECV_BUFFER - form_data_len,
"\r\n"
"--%s\r\n"
"Content-Disposition: form-data; name=\"model\"\r\n"
"\r\n"
"whisper-1\r\n"
"--%s--\r\n", boundary, boundary);
ESP_LOGI(TAG, "Size of form_data: %zu", form_data_len);
// Set the headers and post field
esp_http_client_set_post_field(client, form_data, form_data_len);
// Send the request
esp_err_t err = esp_http_client_perform(client);
if (err != ESP_OK) {
ESP_LOGW(TAG, "HTTP POST request failed: %s\n", esp_err_to_name(err));
}
ESP_LOGE(TAG, "[End] create_wisper_request, + offset:%"PRIu32, esp_log_timestamp() - starttime);
esp_http_client_cleanup(client);
free(form_data);
return err;
}
/* This function set the server based on region */
void set_server(const region_t server)
{
sys_param_t *sys_set = settings_get_parameter();
switch (server) {
case REGION_OpenAI:
sys_set->current_server = REGION_OpenAI;
ESP_LOGI(TAG, "Current server: OpenAI");
break;
case REGION_Espressif:
sys_set->current_server = REGION_Espressif;
ESP_LOGI(TAG, "Current server: Espressif");
break;
default:
// Invalid region value
ESP_LOGE(TAG, "Error: Invalid region value %d", sys_set->current_server);
break;
}
settings_write_parameter_to_nvs();
}
/* Set the audio file format to use */
void set_audio_type(const format_t type)
{
file_type = type;
ESP_LOGI(TAG, "Audio file format: %s", get_file_format(file_type));
}
/* Get the message content for the last response from ChatGPT */
char *get_message_content_for_chatgpt(void)
{
return message_content;
}
/* Get the message content for the last response from Whisper AI */
char *get_message_content_for_whisper(void)
{
return message_content_for_whisper;
}
/* Get the audio file_format use */
char *get_file_format(format_t file_type)
{
switch (file_type) {
case FORMAT_M4A:
return "m4a";
case FORMAT_MP3:
return "mp3";
case FORMAT_WEBM:
return "webm";
case FORMAT_MP4:
return "mp4";
case FORMAT_MPGA:
return "mpga";
case FORMAT_WAV:
return "wav";
case FORMAT_MPEG:
return "mpeg";
default:
return "wav";
}
}
@@ -1,9 +0,0 @@
# **OpenAI Component**
The ESP-OpenAI component currently offers support for two primary features: ChatGPT and Whisper AI.
ChatGPT is a powerful conversational AI model that excels in interactive conversations. It generates natural and coherent responses based on the context of the conversation, making it suitable for various applications like chatbots, virtual assistants, and customer support systems.
Whisper AI, developed by OpenAI, is an automatic speech recognition (ASR) system. It converts spoken language into written text and finds applications in transcription services, voice assistants, and audio analysis.
> Note: This is an experimental component, APIs may change in future
@@ -1,7 +0,0 @@
## IDF Component Manager Manifest File
dependencies:
espressif/json_parser: "^1.0.2"
## Required IDF version
idf:
version: ">=5.0.0"
version: "0.0.1"
@@ -1,107 +0,0 @@
/*
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: CC0-1.0
*/
#pragma once
#include <stdint.h>
#include "esp_err.h"
#define OPENAI_API_KEY_MAX_LEN 256
#define MAX_RESPONSE_TOKEN (CONFIG_MAX_TOKEN)
#define MAX_HTTP_RECV_BUFFER (1 * 1024 * 1024 + 1024)
#define MESSAGE_CONTENT_SIZE (CONFIG_MESSAGE_CONTENT_SIZE)
/**
* @brief region of server
*/
typedef enum {
REGION_OpenAI,
REGION_Espressif,
REGION_Max,
} region_t;
/**
* @brief audio file format supported
*/
typedef enum {
FORMAT_M4A,
FORMAT_MP3,
FORMAT_WEBM,
FORMAT_MP4,
FORMAT_MPGA,
FORMAT_WAV,
FORMAT_MPEG,
} format_t;
/**
* @brief The audio file format to use.
*/
extern format_t file_type;
/**
* @brief OpenAI API Authentication key.
*/
extern char OPENAI_API_KEY[OPENAI_API_KEY_MAX_LEN];
/**
* @brief Set the OpenAI API key to use for OpenAI services.
*
* @param key The API key to set. Must be less than OPENAI_API_KEY_MAX_LEN characters long.
*/
void set_api_key(const char *key);
/**
* @brief Set the region to use for AI services.
*
* @param server The server region to set.
*/
void set_server(const region_t server);
/**
* @brief Set the audio file format to use.
*
* @param type The audio file format to set.
*/
void set_audio_type(const format_t type);
/**
* @brief Get the string representation of the audio file format.
*
* @param file_type The audio file format.
* @return The string representation of the audio file format.
*/
char *get_file_format(format_t file_type);
/**
* @brief Get the message content for the last response from ChatGPT.
*
* @return The message content for the last response.
*/
char *get_message_content_for_chatgpt();
/**
* @brief Get the message content for the last response from Whisper AI.
*
* @return The message content for the last response.
*/
char *get_message_content_for_whisper();
/**
* @brief Create a ChatGPT request for the given content.
*
* @param content The content of the request.
* @return ESP_OK on success, or an error code otherwise.
*/
esp_err_t create_chatgpt_request(const char *content);
/**
* @brief Create a Whisper AI request from the recorded audio.
*
* @param audio The recorded audio to use for the request.
* @param audio_len The length of the recorded audio.
* @return ESP_OK on success, or an error code otherwise.
*/
esp_err_t create_whisper_request_from_record(uint8_t *audio, int audio_len);
@@ -0,0 +1,9 @@
# For more information about build system see
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
# The following five lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
add_compile_options(-fdiagnostics-color=always)
project(factory_nvs)
@@ -0,0 +1,18 @@
## TinyUF2 NVS: Adding USB capabilities to ESP-Box
This standalone project provides support for dumping NVS key-value pairs, allowing users to access and modify the NVS data. They can retrieve the NVS data, make necessary changes, and write the updated values back to the NVS using.
## Build
Run `idf.py build` to build and flash the project.
## Flash
Since this project functions as a "factory app" for chatgpt_demo, we exclusively employ the "esptool" to flash the binaries. Checkout the [partition table](../partitions.csv)
```bash
python -m esptool -p /dev/ttyACM0 --chip esp32s3 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size 16MB --flash_freq 80m 0x700000 build/factory_nvs.bin
```
Check the [original implementation of Tinyuf2](https://github.com/espressif/esp-iot-solution/tree/master/components/usb/esp_tinyuf2) for more information. For more details of follow the [chatgpt_demo](../README.md) project.
@@ -0,0 +1,16 @@
set(UI_DIR ./ui)
file(GLOB_RECURSE UI_SRCS ${UI_DIR}/*.c)
set(APP_DIR ./app)
file(GLOB_RECURSE APP_SRCS ${APP_DIR}/*.c)
idf_component_register(
SRCS
"main.c"
${UI_SRCS}
${APP_SRCS}
INCLUDE_DIRS
"."
${UI_DIR}
${APP_DIR}
)
@@ -0,0 +1,19 @@
menu "Example Configuration"
config ESP_WIFI_SSID
string "WiFi SSID"
default "My Network SSID"
help
SSID (network name) for the example to connect to.
config ESP_WIFI_PASSWORD
string "WiFi Password"
default "My Password"
help
WiFi password (WPA or WPA2) for the example to use.
config OPENAI_API_KEY
string "OpenAI Key"
default "sk-xxxxxxxx"
help
OpenAI api key for the example to use.
endmenu
@@ -0,0 +1,19 @@
/* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "esp_system.h"
#include "esp_log.h"
#include "hal/usb_phy_ll.h"
#include "lvgl.h"
static char *TAG = "NVS: ui-events";
void EventBtnSetupClick(lv_event_t * e)
{
ESP_LOGI(TAG, "btn click!");
// Configure USB PHY, Change back to USB-Serial-Jtag
usb_phy_ll_int_jtag_enable(&USB_SERIAL_JTAG);
esp_restart();
}
@@ -0,0 +1,18 @@
## IDF Component Manager Manifest File
dependencies:
espressif/esp_tinyuf2: "^0.1.0"
espressif/esp-box: "~2.2.0"
## Required IDF version
idf:
version: ">=5.0"
# # Put list of dependencies here
# # For components maintained by Espressif:
# component: "~1.0.0"
# # For 3rd party components:
# username/component: ">=1.0.0,<2.0.0"
# username2/component2:
# version: "~1.0.0"
# # For transient dependencies `public` flag can be set.
# # `public` flag doesn't have an effect dependencies of the `main` component.
# # All dependencies of `main` are public by default.
# public: true
@@ -0,0 +1,156 @@
/* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include "esp_log.h"
#include "nvs.h"
#include "nvs_flash.h"
#include "esp_tinyuf2.h"
#include "ui.h"
#include "bsp/esp-bsp.h"
#include "esp_ota_ops.h"
#define NVS_MODIFIED_BIT BIT0
#define SSID_SIZE 32
#define PASSWORD_SIZE 64
#define KEY_SIZE 64
static const char *TAG = "ChatGPT_NVS";
static EventGroupHandle_t s_event_group;
static nvs_handle_t my_handle;
static size_t buf_len_long;
static void uf2_nvs_modified_cb()
{
ESP_LOGI(TAG, "uf2 nvs modified");
xEventGroupSetBits(s_event_group, NVS_MODIFIED_BIT);
}
void app_main(void)
{
const esp_partition_t *update_partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_0, NULL);
ESP_LOGI(TAG, "Switch to partition OTA_0");
esp_ota_set_boot_partition(update_partition);
esp_err_t err = ESP_OK;
const char *uf2_nvs_partition = "nvs";
const char *uf2_nvs_namespace = "configuration";
char ssid[SSID_SIZE] = {0};
char password[PASSWORD_SIZE] = {0};
char key[KEY_SIZE] = {0};
s_event_group = xEventGroupCreate();
// Initialize NVS
err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
err = nvs_flash_init();
}
ESP_ERROR_CHECK(err);
err = nvs_open_from_partition(uf2_nvs_partition, uf2_nvs_namespace, NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
printf("Error (%s) opening NVS handle!\n", esp_err_to_name(err));
} else {
buf_len_long = sizeof(ssid);
err = nvs_get_str(my_handle, "ssid", ssid, &buf_len_long);
if (err != ESP_OK || buf_len_long == 0) {
ESP_ERROR_CHECK(nvs_set_str(my_handle, "ssid", CONFIG_ESP_WIFI_SSID));
ESP_ERROR_CHECK(nvs_commit(my_handle));
ESP_LOGI(TAG, "no ssid, give a init value to nvs");
} else {
ESP_LOGI(TAG, "stored ssid:%s", ssid);
}
buf_len_long = sizeof(password);
err = nvs_get_str(my_handle, "password", password, &buf_len_long);
if (err != ESP_OK || buf_len_long == 0) {
ESP_ERROR_CHECK(nvs_set_str(my_handle, "password", CONFIG_ESP_WIFI_PASSWORD));
ESP_ERROR_CHECK(nvs_commit(my_handle));
ESP_LOGI(TAG, "no password, give a init value to nvs");
} else {
ESP_LOGI(TAG, "stored password:%s", password);
}
buf_len_long = sizeof(key);
err = nvs_get_str(my_handle, "ChatGPT_key", key, &buf_len_long);
if (err != ESP_OK || buf_len_long == 0) {
ESP_ERROR_CHECK(nvs_set_str(my_handle, "ChatGPT_key", CONFIG_OPENAI_API_KEY));
ESP_ERROR_CHECK(nvs_commit(my_handle));
ESP_LOGI(TAG, "no ChatGPT key, give a init value to key");
} else {
ESP_LOGI(TAG, "stored ChatGPT key:%s", key);
}
}
nvs_close(my_handle);
/* install UF2 NVS */
tinyuf2_nvs_config_t nvs_config = DEFAULT_TINYUF2_NVS_CONFIG();
nvs_config.part_name = uf2_nvs_partition;
nvs_config.namespace_name = uf2_nvs_namespace;
nvs_config.modified_cb = uf2_nvs_modified_cb;
ESP_ERROR_CHECK(esp_tinyuf2_install(NULL, &nvs_config));
bsp_i2c_init();
bsp_display_start();
bsp_display_backlight_on();
ui_init();
while (1) {
EventBits_t bits = xEventGroupWaitBits(s_event_group, NVS_MODIFIED_BIT,
pdTRUE, pdFALSE, portMAX_DELAY);
if (bits & NVS_MODIFIED_BIT) {
esp_err_t err = nvs_open_from_partition(uf2_nvs_partition, uf2_nvs_namespace, NVS_READONLY, &my_handle);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to open NVS partition: %s", esp_err_to_name(err));
// Handle the error or take appropriate action
return;
}
size_t buf_len_long = sizeof(ssid);
err = nvs_get_str(my_handle, "ssid", ssid, &buf_len_long);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to read 'ssid' from NVS: %s", esp_err_to_name(err));
nvs_close(my_handle);
return;
}
ESP_LOGD(TAG, "SSID", ssid);
buf_len_long = sizeof(password);
err = nvs_get_str(my_handle, "password", password, &buf_len_long);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to read 'password' from NVS: %s", esp_err_to_name(err));
nvs_close(my_handle);
return;
}
ESP_LOGD(TAG, "Password", password);
buf_len_long = sizeof(key);
err = nvs_get_str(my_handle, "ChatGPT_key", key, &buf_len_long);
if (err != ESP_OK) {
ESP_LOGE(TAG, "Failed to read 'ChatGPT_key' from NVS: %s", esp_err_to_name(err));
nvs_close(my_handle);
return;
}
ESP_LOGD(TAG, "OpenAI Key", key);
nvs_close(my_handle);
}
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
@@ -0,0 +1,866 @@
/*******************************************************************************
* Size: 14 px
* Bpp: 4
* Opts: --bpp 4 --size 14 --font C:\Users\liu\Desktop\Project\squareline\chat_gpt_new_gui\assets\pingfang.otf -o C:\Users\liu\Desktop\Project\squareline\chat_gpt_new_gui\assets\ui_font_PingFangEN14.c --format lvgl -r 0x20-0x7f --no-compress --no-prefilter
******************************************************************************/
#include "../ui.h"
#ifndef UI_FONT_PINGFANGEN14
#define UI_FONT_PINGFANGEN14 1
#endif
#if UI_FONT_PINGFANGEN14
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+0020 " " */
/* U+0021 "!" */
0x4f, 0x4, 0xf0, 0x3e, 0x3, 0xe0, 0x3d, 0x2,
0xd0, 0x2c, 0x1, 0xa0, 0x0, 0x3, 0xa0, 0x5e,
0x0,
/* U+0022 "\"" */
0xd4, 0x4d, 0xd3, 0x4c, 0xc3, 0x3c, 0x82, 0x28,
/* U+0023 "#" */
0x0, 0xd, 0x0, 0xe0, 0x0, 0x2, 0xb0, 0x1c,
0x0, 0x0, 0x4a, 0x3, 0xa0, 0x0, 0xef, 0xfe,
0xff, 0xd0, 0x0, 0x95, 0x8, 0x60, 0x0, 0xb,
0x30, 0xa4, 0x0, 0x0, 0xd1, 0xd, 0x10, 0x0,
0xe, 0x0, 0xe0, 0x0, 0x8e, 0xfe, 0xef, 0xe6,
0x0, 0x4a, 0x4, 0xa0, 0x0, 0x7, 0x70, 0x77,
0x0, 0x0,
/* U+0024 "$" */
0x0, 0x1, 0x40, 0x0, 0x0, 0x2, 0x80, 0x0,
0x1, 0xaf, 0xfc, 0x40, 0xc, 0xa5, 0x97, 0xf1,
0x1f, 0x12, 0x80, 0xb6, 0xf, 0x32, 0x80, 0x0,
0x8, 0xf9, 0x80, 0x0, 0x0, 0x5c, 0xfa, 0x20,
0x0, 0x2, 0x99, 0xf3, 0x27, 0x2, 0x80, 0xa9,
0x1f, 0x12, 0x80, 0x8a, 0xb, 0xb5, 0x95, 0xe5,
0x1, 0xae, 0xfd, 0x60, 0x0, 0x2, 0x80, 0x0,
0x0, 0x1, 0x40, 0x0,
/* U+0025 "%" */
0x2, 0xcd, 0x80, 0x0, 0x2c, 0x0, 0x0, 0xc5,
0xd, 0x30, 0xa, 0x40, 0x0, 0xf, 0x10, 0xa6,
0x2, 0xb0, 0x0, 0x0, 0xf1, 0xa, 0x60, 0xa4,
0x0, 0x0, 0xb, 0x60, 0xe2, 0x2b, 0x0, 0x0,
0x0, 0x1b, 0xc6, 0xa, 0x31, 0xad, 0x70, 0x0,
0x0, 0x2, 0xb0, 0x98, 0xc, 0x40, 0x0, 0x0,
0xa3, 0xd, 0x30, 0x88, 0x0, 0x0, 0x3b, 0x0,
0xd3, 0x8, 0x80, 0x0, 0xb, 0x30, 0xa, 0x70,
0xc5, 0x0, 0x3, 0xb0, 0x0, 0x1c, 0xd9, 0x0,
/* U+0026 "&" */
0x0, 0x5d, 0xfb, 0x10, 0x0, 0x1, 0xf5, 0x1b,
0x90, 0x0, 0x2, 0xf0, 0x7, 0xa0, 0x0, 0x0,
0xc7, 0x2e, 0x40, 0x0, 0x0, 0x2f, 0xe5, 0x1,
0x40, 0x3, 0xeb, 0xe3, 0x5, 0xc0, 0x1e, 0x70,
0x6e, 0x27, 0xa0, 0x4d, 0x0, 0x7, 0xdd, 0x60,
0x4d, 0x0, 0x0, 0xbf, 0x10, 0xe, 0x92, 0x38,
0xfc, 0xb0, 0x2, 0xae, 0xeb, 0x30, 0xd8,
/* U+0027 "'" */
0xd4, 0xd3, 0xc3, 0x82,
/* U+0028 "(" */
0x0, 0x5a, 0x0, 0xd3, 0x4, 0xc0, 0xa, 0x60,
0xe, 0x20, 0x1f, 0x0, 0x2f, 0x0, 0x2f, 0x0,
0x1f, 0x0, 0xe, 0x20, 0xa, 0x60, 0x4, 0xc0,
0x0, 0xd3, 0x0, 0x5a,
/* U+0029 ")" */
0xe, 0x10, 0x8, 0x70, 0x2, 0xe0, 0x0, 0xc5,
0x0, 0x89, 0x0, 0x5b, 0x0, 0x4c, 0x0, 0x4c,
0x0, 0x5b, 0x0, 0x89, 0x0, 0xc5, 0x2, 0xe0,
0x8, 0x70, 0xe, 0x10,
/* U+002A "*" */
0x0, 0xe, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x8b,
0x5d, 0x4b, 0x90, 0x4a, 0xfb, 0x40, 0x0, 0xa9,
0xb0, 0x0, 0x7a, 0x9, 0x80, 0x3, 0x10, 0x4,
0x0,
/* U+002B "+" */
0x0, 0x3, 0xb0, 0x0, 0x0, 0x3, 0xb0, 0x0,
0x0, 0x3, 0xb0, 0x0, 0x0, 0x3, 0xb0, 0x0,
0x4e, 0xee, 0xfe, 0xeb, 0x1, 0x14, 0xb1, 0x11,
0x0, 0x3, 0xb0, 0x0, 0x0, 0x3, 0xb0, 0x0,
/* U+002C "," */
0xa, 0x60, 0xcd, 0x1, 0xb0, 0xb3, 0x0, 0x0,
/* U+002D "-" */
0x4e, 0xee, 0xee, 0xeb, 0x1, 0x11, 0x11, 0x11,
/* U+002E "." */
0x95, 0xc7,
/* U+002F "/" */
0x0, 0x0, 0xb, 0x40, 0x0, 0x1, 0xe0, 0x0,
0x0, 0x69, 0x0, 0x0, 0xc, 0x30, 0x0, 0x1,
0xe0, 0x0, 0x0, 0x78, 0x0, 0x0, 0xd, 0x20,
0x0, 0x2, 0xd0, 0x0, 0x0, 0x87, 0x0, 0x0,
0xe, 0x20, 0x0, 0x3, 0xc0, 0x0, 0x0, 0x96,
0x0, 0x0, 0xe, 0x10, 0x0, 0x4, 0xb0, 0x0,
0x0,
/* U+0030 "0" */
0x0, 0x6d, 0xea, 0x0, 0x5, 0xe4, 0x2a, 0xb0,
0xc, 0x50, 0x0, 0xe3, 0x1f, 0x0, 0x0, 0xa8,
0x3e, 0x0, 0x0, 0x89, 0x4d, 0x0, 0x0, 0x7a,
0x3e, 0x0, 0x0, 0x89, 0x1f, 0x0, 0x0, 0xa8,
0xc, 0x50, 0x0, 0xe3, 0x5, 0xe4, 0x2a, 0xb0,
0x0, 0x6d, 0xea, 0x0,
/* U+0031 "1" */
0x0, 0x5f, 0x11, 0xad, 0xf1, 0x5a, 0x1f, 0x10,
0x0, 0xf1, 0x0, 0xf, 0x10, 0x0, 0xf1, 0x0,
0xf, 0x10, 0x0, 0xf1, 0x0, 0xf, 0x10, 0x0,
0xf1, 0x0, 0xf, 0x10,
/* U+0032 "2" */
0x0, 0x5d, 0xfc, 0x30, 0x5, 0xe4, 0x16, 0xe1,
0xc, 0x60, 0x0, 0xb6, 0xf, 0x20, 0x0, 0xb7,
0x0, 0x0, 0x1, 0xf3, 0x0, 0x0, 0x1c, 0x90,
0x0, 0x3, 0xe9, 0x0, 0x0, 0x5f, 0x60, 0x0,
0x3, 0xf4, 0x0, 0x0, 0xc, 0x91, 0x11, 0x10,
0xf, 0xff, 0xff, 0xf8,
/* U+0033 "3" */
0x0, 0x7d, 0xfc, 0x40, 0x6, 0xd3, 0x16, 0xf1,
0xd, 0x40, 0x0, 0xc6, 0x6, 0x0, 0x0, 0xb5,
0x0, 0x0, 0x6, 0xd1, 0x0, 0x7, 0xff, 0x30,
0x0, 0x0, 0x3, 0xe3, 0x15, 0x0, 0x0, 0x89,
0x1f, 0x10, 0x0, 0x99, 0xa, 0xc2, 0x16, 0xf3,
0x0, 0x9e, 0xfc, 0x40,
/* U+0034 "4" */
0x0, 0x0, 0x1e, 0x70, 0x0, 0x0, 0xb, 0xe7,
0x0, 0x0, 0x7, 0xaa, 0x70, 0x0, 0x3, 0xd0,
0xa7, 0x0, 0x0, 0xd3, 0xa, 0x70, 0x0, 0x97,
0x0, 0xa7, 0x0, 0x5b, 0x0, 0xa, 0x70, 0xa,
0xee, 0xee, 0xff, 0xe1, 0x1, 0x11, 0x1a, 0x81,
0x0, 0x0, 0x0, 0xa7, 0x0, 0x0, 0x0, 0xa,
0x70, 0x0,
/* U+0035 "5" */
0x9, 0xff, 0xff, 0xf4, 0xa, 0x61, 0x11, 0x10,
0xb, 0x40, 0x0, 0x0, 0xd, 0x30, 0x0, 0x0,
0xe, 0x4b, 0xdb, 0x30, 0xf, 0xb4, 0x27, 0xf2,
0x4, 0x0, 0x0, 0xa8, 0x0, 0x0, 0x0, 0x7a,
0x2e, 0x0, 0x0, 0xa8, 0xc, 0xa3, 0x17, 0xe1,
0x1, 0x9e, 0xeb, 0x20,
/* U+0036 "6" */
0x0, 0x4c, 0xfc, 0x30, 0x3, 0xe5, 0x28, 0xe1,
0xa, 0x60, 0x0, 0xc6, 0xf, 0x10, 0x0, 0x0,
0x2e, 0x19, 0xdb, 0x30, 0x4d, 0xa4, 0x27, 0xf2,
0x3f, 0x30, 0x0, 0xa8, 0x1f, 0x0, 0x0, 0x7a,
0xd, 0x30, 0x0, 0xa8, 0x6, 0xd3, 0x16, 0xf1,
0x0, 0x6d, 0xfc, 0x30,
/* U+0037 "7" */
0x8f, 0xff, 0xff, 0xf0, 0x11, 0x11, 0x16, 0xd0,
0x0, 0x0, 0xa, 0x70, 0x0, 0x0, 0x1f, 0x20,
0x0, 0x0, 0x6c, 0x0, 0x0, 0x0, 0xc6, 0x0,
0x0, 0x2, 0xf0, 0x0, 0x0, 0x8, 0xa0, 0x0,
0x0, 0xe, 0x40, 0x0, 0x0, 0x4e, 0x0, 0x0,
0x0, 0xa8, 0x0, 0x0,
/* U+0038 "8" */
0x0, 0x9e, 0xfb, 0x30, 0xa, 0xb2, 0x16, 0xe1,
0xf, 0x10, 0x0, 0xb6, 0xe, 0x20, 0x0, 0xc5,
0x8, 0xa1, 0x5, 0xd1, 0x1, 0xdf, 0xff, 0x30,
0xd, 0x81, 0x4, 0xe4, 0x5d, 0x0, 0x0, 0x6b,
0x5d, 0x0, 0x0, 0x6b, 0x1e, 0x81, 0x4, 0xe5,
0x2, 0xae, 0xfc, 0x60,
/* U+0039 "9" */
0x0, 0x8e, 0xea, 0x0, 0x9, 0xc2, 0x29, 0xc0,
0x1f, 0x10, 0x0, 0xd3, 0x3e, 0x0, 0x0, 0xa8,
0x2f, 0x0, 0x0, 0xc9, 0xc, 0xa0, 0x7, 0xca,
0x1, 0xbf, 0xe7, 0x79, 0x0, 0x0, 0x0, 0xa6,
0xd, 0x30, 0x0, 0xe1, 0xa, 0xc3, 0x2b, 0x90,
0x1, 0xae, 0xe8, 0x0,
/* U+003A ":" */
0xc7, 0x95, 0x0, 0x0, 0x0, 0x95, 0xc7,
/* U+003B ";" */
0xc, 0x70, 0x96, 0x0, 0x0, 0x0, 0x0, 0x0,
0xa6, 0xc, 0xd0, 0x1b, 0xb, 0x30, 0x0,
/* U+003C "<" */
0x0, 0x0, 0x0, 0x26, 0x0, 0x0, 0x2a, 0xe6,
0x0, 0x3b, 0xe7, 0x0, 0x2b, 0xd6, 0x0, 0x0,
0x3e, 0xa2, 0x0, 0x0, 0x0, 0x7e, 0xb3, 0x0,
0x0, 0x0, 0x6d, 0xb3, 0x0, 0x0, 0x0, 0x69,
/* U+003D "=" */
0x4e, 0xee, 0xee, 0xeb, 0x1, 0x11, 0x11, 0x11,
0x0, 0x0, 0x0, 0x0, 0x4e, 0xee, 0xee, 0xeb,
0x1, 0x11, 0x11, 0x11,
/* U+003E ">" */
0x35, 0x0, 0x0, 0x0, 0x2b, 0xd6, 0x0, 0x0,
0x0, 0x3b, 0xe7, 0x0, 0x0, 0x0, 0x2a, 0xe6,
0x0, 0x0, 0x6, 0xe9, 0x0, 0x7, 0xea, 0x30,
0x18, 0xea, 0x20, 0x0, 0x49, 0x20, 0x0, 0x0,
/* U+003F "?" */
0x1, 0xae, 0xe8, 0x0, 0xb9, 0x23, 0xe7, 0x2f,
0x10, 0x7, 0xb2, 0x70, 0x0, 0x7b, 0x0, 0x0,
0x1e, 0x50, 0x0, 0x1d, 0x80, 0x0, 0x9, 0xa0,
0x0, 0x0, 0xd5, 0x0, 0x0, 0x2, 0x0, 0x0,
0x0, 0xa3, 0x0, 0x0, 0xe, 0x50, 0x0,
/* U+0040 "@" */
0x0, 0x4, 0xad, 0xdc, 0x60, 0x0, 0x0, 0x8c,
0x20, 0x1, 0xa9, 0x0, 0x5, 0xb0, 0x2b, 0xd6,
0x7a, 0x40, 0xd, 0x20, 0xe6, 0x1d, 0x72, 0xa0,
0x1d, 0x7, 0xa0, 0xb, 0x30, 0xc0, 0x3b, 0xb,
0x40, 0xd, 0x1, 0xb0, 0x1d, 0xc, 0x20, 0x2c,
0x6, 0x70, 0xe, 0xa, 0x70, 0xba, 0x2c, 0x0,
0x7, 0x91, 0xcc, 0x4b, 0xb3, 0x70, 0x0, 0xb9,
0x10, 0x0, 0x4c, 0x60, 0x0, 0x5, 0xbc, 0xdd,
0x92, 0x0,
/* U+0041 "A" */
0x0, 0x3, 0xf7, 0x0, 0x0, 0x0, 0x9, 0xdc,
0x0, 0x0, 0x0, 0xe, 0x3f, 0x20, 0x0, 0x0,
0x5d, 0xa, 0x80, 0x0, 0x0, 0xa8, 0x5, 0xd0,
0x0, 0x0, 0xf3, 0x0, 0xf3, 0x0, 0x6, 0xd0,
0x0, 0xa9, 0x0, 0xb, 0xfe, 0xee, 0xfe, 0x0,
0x1f, 0x31, 0x11, 0x2e, 0x40, 0x7c, 0x0, 0x0,
0x9, 0xa0, 0xd6, 0x0, 0x0, 0x3, 0xf0,
/* U+0042 "B" */
0xff, 0xff, 0xfd, 0x50, 0xf2, 0x0, 0x16, 0xf2,
0xf2, 0x0, 0x0, 0xb6, 0xf2, 0x0, 0x0, 0xb5,
0xf2, 0x0, 0x4, 0xe1, 0xfe, 0xee, 0xff, 0x50,
0xf3, 0x11, 0x14, 0xd6, 0xf2, 0x0, 0x0, 0x5d,
0xf2, 0x0, 0x0, 0x5d, 0xf2, 0x0, 0x14, 0xd8,
0xff, 0xff, 0xfd, 0x80,
/* U+0043 "C" */
0x0, 0x19, 0xdf, 0xc6, 0x0, 0x2, 0xda, 0x42,
0x5d, 0x90, 0xa, 0x90, 0x0, 0x1, 0xf2, 0x1f,
0x10, 0x0, 0x0, 0x52, 0x4d, 0x0, 0x0, 0x0,
0x0, 0x5c, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x0,
0x0, 0x0, 0x0, 0x2f, 0x10, 0x0, 0x0, 0x86,
0xb, 0x80, 0x0, 0x2, 0xf2, 0x2, 0xe9, 0x32,
0x5d, 0x70, 0x0, 0x1a, 0xdf, 0xc5, 0x0,
/* U+0044 "D" */
0xff, 0xff, 0xd9, 0x10, 0xf, 0x30, 0x13, 0xae,
0x20, 0xf2, 0x0, 0x0, 0x9a, 0xf, 0x20, 0x0,
0x1, 0xf0, 0xf2, 0x0, 0x0, 0xf, 0x2f, 0x20,
0x0, 0x0, 0xd4, 0xf2, 0x0, 0x0, 0xf, 0x2f,
0x20, 0x0, 0x2, 0xf0, 0xf2, 0x0, 0x0, 0xa9,
0xf, 0x30, 0x14, 0xbd, 0x10, 0xff, 0xff, 0xd9,
0x0, 0x0,
/* U+0045 "E" */
0xff, 0xff, 0xff, 0xf1, 0xf3, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0, 0xff, 0xee, 0xee, 0xb0,
0xf4, 0x11, 0x11, 0x10, 0xf2, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0,
0xff, 0xff, 0xff, 0xf5,
/* U+0046 "F" */
0xff, 0xff, 0xff, 0xbf, 0x30, 0x0, 0x0, 0xf2,
0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0,
0x0, 0xf, 0xfe, 0xee, 0xe6, 0xf4, 0x11, 0x11,
0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf,
0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0,
/* U+0047 "G" */
0x0, 0x19, 0xdf, 0xd7, 0x0, 0x1, 0xda, 0x42,
0x5d, 0xb0, 0xa, 0xa0, 0x0, 0x1, 0xe4, 0x1f,
0x10, 0x0, 0x0, 0x43, 0x4d, 0x0, 0x0, 0x0,
0x0, 0x5c, 0x0, 0xa, 0xee, 0xe8, 0x4d, 0x0,
0x1, 0x11, 0xa8, 0x1f, 0x10, 0x0, 0x0, 0x98,
0xa, 0x90, 0x0, 0x0, 0x98, 0x2, 0xda, 0x41,
0x38, 0xf7, 0x0, 0x19, 0xdf, 0xda, 0x40,
/* U+0048 "H" */
0xf2, 0x0, 0x0, 0xf, 0x1f, 0x20, 0x0, 0x0,
0xf1, 0xf2, 0x0, 0x0, 0xf, 0x1f, 0x20, 0x0,
0x0, 0xf1, 0xf2, 0x0, 0x0, 0xf, 0x1f, 0xfe,
0xee, 0xef, 0xf1, 0xf4, 0x11, 0x11, 0x2f, 0x1f,
0x20, 0x0, 0x0, 0xf1, 0xf2, 0x0, 0x0, 0xf,
0x1f, 0x20, 0x0, 0x0, 0xf1, 0xf2, 0x0, 0x0,
0xf, 0x10,
/* U+0049 "I" */
0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
0xe3, 0xe3, 0xe3,
/* U+004A "J" */
0x0, 0x0, 0xe, 0x30, 0x0, 0x0, 0xe3, 0x0,
0x0, 0xe, 0x30, 0x0, 0x0, 0xe3, 0x0, 0x0,
0xe, 0x30, 0x0, 0x0, 0xe3, 0x0, 0x0, 0xe,
0x38, 0x30, 0x0, 0xe3, 0xa7, 0x0, 0x1f, 0x16,
0xe3, 0x2a, 0xc0, 0x8, 0xee, 0xb2, 0x0,
/* U+004B "K" */
0xf2, 0x0, 0x1, 0xd8, 0xf, 0x20, 0x1, 0xd9,
0x0, 0xf2, 0x0, 0xca, 0x0, 0xf, 0x20, 0xba,
0x0, 0x0, 0xf2, 0xac, 0x0, 0x0, 0xf, 0xcc,
0xf3, 0x0, 0x0, 0xfb, 0x8, 0xe1, 0x0, 0xf,
0x20, 0xb, 0xc0, 0x0, 0xf2, 0x0, 0xd, 0x90,
0xf, 0x20, 0x0, 0x2f, 0x60, 0xf2, 0x0, 0x0,
0x4f, 0x40,
/* U+004C "L" */
0xf2, 0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0xf2,
0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0,
0x0, 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0,
0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf,
0x30, 0x0, 0x0, 0xff, 0xff, 0xff, 0xe0,
/* U+004D "M" */
0xfa, 0x0, 0x0, 0x0, 0x4f, 0x5f, 0xf1, 0x0,
0x0, 0xb, 0xf5, 0xfd, 0x60, 0x0, 0x1, 0xfe,
0x5f, 0x7d, 0x0, 0x0, 0x7a, 0xc5, 0xf2, 0xe3,
0x0, 0xd, 0x4c, 0x5f, 0x28, 0x90, 0x4, 0xd0,
0xc5, 0xf2, 0x2f, 0x0, 0xa7, 0xc, 0x5f, 0x20,
0xb6, 0x1f, 0x10, 0xc5, 0xf2, 0x5, 0xc7, 0xa0,
0xc, 0x5f, 0x20, 0xe, 0xe4, 0x0, 0xc5, 0xf2,
0x0, 0x8e, 0x0, 0xc, 0x50,
/* U+004E "N" */
0xf8, 0x0, 0x0, 0x1f, 0xf, 0xf2, 0x0, 0x1,
0xf0, 0xf9, 0xc0, 0x0, 0x1f, 0xf, 0x2d, 0x60,
0x1, 0xf0, 0xf2, 0x3e, 0x10, 0x1f, 0xf, 0x20,
0x9b, 0x1, 0xf0, 0xf2, 0x0, 0xe5, 0x1f, 0xf,
0x20, 0x5, 0xe2, 0xf0, 0xf2, 0x0, 0xb, 0xaf,
0xf, 0x20, 0x0, 0x1f, 0xf0, 0xf2, 0x0, 0x0,
0x7f, 0x0,
/* U+004F "O" */
0x0, 0x19, 0xdf, 0xc7, 0x0, 0x0, 0x2d, 0xa4,
0x25, 0xdb, 0x0, 0xa, 0xa0, 0x0, 0x0, 0xd6,
0x1, 0xf1, 0x0, 0x0, 0x5, 0xd0, 0x4d, 0x0,
0x0, 0x0, 0x2f, 0x5, 0xc0, 0x0, 0x0, 0x0,
0xf1, 0x4d, 0x0, 0x0, 0x0, 0x2f, 0x1, 0xf1,
0x0, 0x0, 0x5, 0xd0, 0xa, 0x90, 0x0, 0x0,
0xd6, 0x0, 0x2e, 0xa4, 0x25, 0xdb, 0x0, 0x0,
0x19, 0xdf, 0xc7, 0x0, 0x0,
/* U+0050 "P" */
0xff, 0xff, 0xfc, 0x40, 0xf3, 0x0, 0x16, 0xf2,
0xf2, 0x0, 0x0, 0xb7, 0xf2, 0x0, 0x0, 0xa7,
0xf2, 0x0, 0x4, 0xf3, 0xff, 0xee, 0xfe, 0x60,
0xf4, 0x11, 0x10, 0x0, 0xf2, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0,
/* U+0051 "Q" */
0x0, 0x19, 0xdf, 0xc7, 0x0, 0x0, 0x2d, 0xa4,
0x25, 0xdb, 0x0, 0xa, 0xa0, 0x0, 0x0, 0xd6,
0x1, 0xf1, 0x0, 0x0, 0x5, 0xd0, 0x4d, 0x0,
0x0, 0x0, 0x2f, 0x5, 0xc0, 0x0, 0x0, 0x0,
0xf1, 0x4d, 0x0, 0x0, 0x30, 0x1f, 0x1, 0xf1,
0x0, 0xe, 0x45, 0xd0, 0xa, 0x90, 0x0, 0x3e,
0xd6, 0x0, 0x2e, 0xa4, 0x24, 0xdf, 0x0, 0x0,
0x19, 0xdf, 0xd7, 0xb8, 0x0, 0x0, 0x0, 0x0,
0x1, 0x90,
/* U+0052 "R" */
0xff, 0xff, 0xfd, 0x50, 0xf, 0x30, 0x1, 0x5f,
0x30, 0xf2, 0x0, 0x0, 0xa7, 0xf, 0x20, 0x0,
0xa, 0x60, 0xf2, 0x0, 0x4, 0xe1, 0xf, 0xfe,
0xef, 0xf3, 0x0, 0xf4, 0x11, 0x39, 0xe0, 0xf,
0x20, 0x0, 0xd, 0x40, 0xf2, 0x0, 0x0, 0xb6,
0xf, 0x20, 0x0, 0x9, 0x90, 0xf2, 0x0, 0x0,
0x5d, 0x0,
/* U+0053 "S" */
0x1, 0x9e, 0xfd, 0x70, 0x0, 0xd9, 0x22, 0x5d,
0x80, 0x3e, 0x0, 0x0, 0x3f, 0x2, 0xf2, 0x0,
0x0, 0x50, 0x8, 0xf9, 0x30, 0x0, 0x0, 0x2,
0x8d, 0xe8, 0x0, 0x0, 0x0, 0x3, 0xbc, 0x5,
0x70, 0x0, 0x0, 0xe4, 0x4e, 0x0, 0x0, 0xd,
0x40, 0xcb, 0x32, 0x5a, 0xd0, 0x1, 0x9d, 0xfe,
0x91, 0x0,
/* U+0054 "T" */
0xcf, 0xff, 0xff, 0xff, 0x60, 0x0, 0x4e, 0x0,
0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x0, 0x3e,
0x0, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x0,
0x3e, 0x0, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x0,
0x0, 0x3e, 0x0, 0x0, 0x0, 0x3, 0xe0, 0x0,
0x0, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x3, 0xe0,
0x0, 0x0,
/* U+0055 "U" */
0xf2, 0x0, 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x2f,
0xf2, 0x0, 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x2f,
0xf2, 0x0, 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x2f,
0xf2, 0x0, 0x0, 0x2f, 0xd3, 0x0, 0x0, 0x4d,
0xb8, 0x0, 0x0, 0x8b, 0x3f, 0x72, 0x27, 0xf3,
0x3, 0xbe, 0xeb, 0x30,
/* U+0056 "V" */
0xc7, 0x0, 0x0, 0x8, 0xb6, 0xd0, 0x0, 0x0,
0xd5, 0x1f, 0x20, 0x0, 0x3f, 0x0, 0xc7, 0x0,
0x8, 0xb0, 0x6, 0xc0, 0x0, 0xd5, 0x0, 0x1f,
0x10, 0x2f, 0x0, 0x0, 0xb6, 0x7, 0xb0, 0x0,
0x6, 0xc0, 0xd5, 0x0, 0x0, 0x1f, 0x3f, 0x0,
0x0, 0x0, 0xbd, 0xa0, 0x0, 0x0, 0x6, 0xf5,
0x0, 0x0,
/* U+0057 "W" */
0xc7, 0x0, 0x3, 0xf4, 0x0, 0x7, 0xd8, 0xb0,
0x0, 0x7f, 0x80, 0x0, 0xb8, 0x4f, 0x0, 0xb,
0xac, 0x0, 0xe, 0x40, 0xf3, 0x0, 0xf2, 0xf0,
0x2, 0xf0, 0xc, 0x60, 0x3d, 0xc, 0x30, 0x6c,
0x0, 0x8a, 0x7, 0x90, 0x87, 0xa, 0x80, 0x3,
0xe0, 0xb5, 0x4, 0xb0, 0xe4, 0x0, 0xf, 0x2f,
0x10, 0x1f, 0x2f, 0x0, 0x0, 0xb9, 0xd0, 0x0,
0xc9, 0xb0, 0x0, 0x7, 0xf9, 0x0, 0x8, 0xf7,
0x0, 0x0, 0x3f, 0x50, 0x0, 0x4f, 0x30, 0x0,
/* U+0058 "X" */
0x5f, 0x10, 0x0, 0x2f, 0x40, 0xbb, 0x0, 0xc,
0x90, 0x1, 0xf5, 0x6, 0xe0, 0x0, 0x6, 0xe2,
0xf4, 0x0, 0x0, 0xc, 0xfa, 0x0, 0x0, 0x0,
0x7f, 0x50, 0x0, 0x0, 0x1e, 0xae, 0x0, 0x0,
0xa, 0xa0, 0xc9, 0x0, 0x5, 0xf1, 0x2, 0xf3,
0x1, 0xe6, 0x0, 0x8, 0xd0, 0x9c, 0x0, 0x0,
0xd, 0x80,
/* U+0059 "Y" */
0xab, 0x0, 0x0, 0x7, 0xd0, 0x1e, 0x50, 0x0,
0x1f, 0x40, 0x6, 0xe0, 0x0, 0xaa, 0x0, 0x0,
0xc8, 0x4, 0xf1, 0x0, 0x0, 0x3f, 0x2d, 0x70,
0x0, 0x0, 0x9, 0xed, 0x0, 0x0, 0x0, 0x0,
0xf4, 0x0, 0x0, 0x0, 0x0, 0xe3, 0x0, 0x0,
0x0, 0x0, 0xe3, 0x0, 0x0, 0x0, 0x0, 0xe3,
0x0, 0x0, 0x0, 0x0, 0xe3, 0x0, 0x0,
/* U+005A "Z" */
0x3f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x1c,
0xb0, 0x0, 0x0, 0x6, 0xe1, 0x0, 0x0, 0x2,
0xf5, 0x0, 0x0, 0x0, 0xc9, 0x0, 0x0, 0x0,
0x8d, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x0,
0xd, 0x80, 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0,
0x4, 0xf3, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff,
0xff, 0x60,
/* U+005B "[" */
0x5e, 0xee, 0x6, 0xb1, 0x10, 0x6a, 0x0, 0x6,
0xa0, 0x0, 0x6a, 0x0, 0x6, 0xa0, 0x0, 0x6a,
0x0, 0x6, 0xa0, 0x0, 0x6a, 0x0, 0x6, 0xa0,
0x0, 0x6a, 0x0, 0x6, 0xa0, 0x0, 0x6a, 0x0,
0x6, 0xff, 0xf0,
/* U+005C "\\" */
0x4b, 0x0, 0x0, 0x0, 0xe1, 0x0, 0x0, 0x9,
0x60, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0xe1,
0x0, 0x0, 0x8, 0x70, 0x0, 0x0, 0x2d, 0x0,
0x0, 0x0, 0xd2, 0x0, 0x0, 0x7, 0x80, 0x0,
0x0, 0x2e, 0x0, 0x0, 0x0, 0xc3, 0x0, 0x0,
0x6, 0x90, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0,
0xb4,
/* U+005D "]" */
0x5e, 0xee, 0x0, 0x11, 0xf0, 0x0, 0xf, 0x0,
0x0, 0xf0, 0x0, 0xf, 0x0, 0x0, 0xf0, 0x0,
0xf, 0x0, 0x0, 0xf0, 0x0, 0xf, 0x0, 0x0,
0xf0, 0x0, 0xf, 0x0, 0x0, 0xf0, 0x0, 0xf,
0x6, 0xff, 0xf0,
/* U+005E "^" */
0x0, 0x2f, 0x60, 0x0, 0x9, 0x8d, 0x0, 0x1,
0xd0, 0xa4, 0x0, 0x77, 0x3, 0xb0, 0xd, 0x10,
0xc, 0x20,
/* U+005F "_" */
0xee, 0xee, 0xee, 0xe1, 0x11, 0x11, 0x11,
/* U+0060 "`" */
0x89, 0x0, 0x95,
/* U+0061 "a" */
0x2, 0xad, 0xea, 0x10, 0xe8, 0x12, 0xba, 0x3,
0x0, 0x3, 0xe0, 0x3b, 0xee, 0xef, 0x1e, 0x60,
0x2, 0xf5, 0xc0, 0x0, 0x6f, 0x4f, 0x30, 0x5c,
0xf0, 0x8e, 0xd9, 0x2f,
/* U+0062 "b" */
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x2b, 0xeb, 0x20,
0x1f, 0xa2, 0x18, 0xe0, 0x1f, 0x30, 0x0, 0xc5,
0x1f, 0x0, 0x0, 0x98, 0x1f, 0x0, 0x0, 0x98,
0x1f, 0x30, 0x0, 0xc6, 0x1f, 0xb2, 0x7, 0xe0,
0x1e, 0x4c, 0xfb, 0x20,
/* U+0063 "c" */
0x0, 0x9e, 0xea, 0x10, 0xb, 0xb1, 0x2a, 0xb0,
0x2f, 0x10, 0x1, 0xb0, 0x5c, 0x0, 0x0, 0x0,
0x5c, 0x0, 0x0, 0x0, 0x2f, 0x0, 0x2, 0xe1,
0xb, 0xa1, 0x2b, 0xa0, 0x0, 0xae, 0xea, 0x10,
/* U+0064 "d" */
0x0, 0x0, 0x0, 0xc5, 0x0, 0x0, 0x0, 0xc5,
0x0, 0x0, 0x0, 0xc5, 0x0, 0xae, 0xc4, 0xc5,
0xb, 0xa1, 0x1a, 0xe5, 0x2f, 0x0, 0x1, 0xf5,
0x5c, 0x0, 0x0, 0xc5, 0x5c, 0x0, 0x0, 0xc5,
0x2f, 0x0, 0x0, 0xf5, 0xb, 0xa1, 0x1a, 0xe5,
0x0, 0xae, 0xd6, 0xb5,
/* U+0065 "e" */
0x1, 0xae, 0xe9, 0x0, 0xc, 0x81, 0x1a, 0xa0,
0x4d, 0x0, 0x0, 0xf1, 0x7f, 0xee, 0xee, 0xf3,
0x7b, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x2, 0xc0,
0xd, 0x91, 0x1c, 0x70, 0x1, 0xae, 0xe8, 0x0,
/* U+0066 "f" */
0x0, 0x7f, 0xf2, 0x0, 0xe4, 0x0, 0x1, 0xf0,
0x0, 0xef, 0xff, 0xf0, 0x1, 0xf0, 0x0, 0x1,
0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0,
0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0,
0x0,
/* U+0067 "g" */
0x0, 0xae, 0xd5, 0xb6, 0xb, 0xb1, 0x1a, 0xe6,
0x2f, 0x10, 0x0, 0xf6, 0x5c, 0x0, 0x0, 0xc6,
0x5c, 0x0, 0x0, 0xc6, 0x2f, 0x0, 0x0, 0xf6,
0xb, 0xa1, 0x1a, 0xe6, 0x0, 0xae, 0xd5, 0xb5,
0x4, 0x0, 0x0, 0xd3, 0xd, 0x80, 0x7, 0xd0,
0x2, 0xbe, 0xeb, 0x20,
/* U+0068 "h" */
0x1f, 0x0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0x1f,
0x0, 0x0, 0x1, 0xf2, 0xcf, 0xb1, 0x1f, 0xa2,
0x2c, 0x91, 0xf3, 0x0, 0x6d, 0x1f, 0x0, 0x3,
0xe1, 0xf0, 0x0, 0x2e, 0x1f, 0x0, 0x2, 0xe1,
0xf0, 0x0, 0x2e, 0x1f, 0x0, 0x2, 0xe0,
/* U+0069 "i" */
0xd, 0x60, 0x94, 0x0, 0x0, 0xc5, 0xc, 0x50,
0xc5, 0xc, 0x50, 0xc5, 0xc, 0x50, 0xc5, 0xc,
0x50,
/* U+006A "j" */
0x0, 0xb9, 0x0, 0x76, 0x0, 0x0, 0x0, 0x97,
0x0, 0x97, 0x0, 0x97, 0x0, 0x97, 0x0, 0x97,
0x0, 0x97, 0x0, 0x97, 0x0, 0x97, 0x0, 0xa7,
0x1, 0xd6, 0x3f, 0xb0,
/* U+006B "k" */
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x1c, 0x90,
0x1f, 0x0, 0xc9, 0x0, 0x1f, 0xc, 0x90, 0x0,
0x1f, 0xcf, 0x20, 0x0, 0x1f, 0xa8, 0xc0, 0x0,
0x1f, 0x0, 0xc9, 0x0, 0x1f, 0x0, 0x2f, 0x40,
0x1f, 0x0, 0x6, 0xe1,
/* U+006C "l" */
0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
0xe3, 0xe3, 0xe3,
/* U+006D "m" */
0x1f, 0x4d, 0xd7, 0xa, 0xec, 0x20, 0x1f, 0xa1,
0x3f, 0xc4, 0x19, 0xc0, 0x1f, 0x30, 0xa, 0xa0,
0x1, 0xf0, 0x1f, 0x0, 0x9, 0x80, 0x0, 0xf1,
0x1f, 0x0, 0x8, 0x80, 0x0, 0xf1, 0x1f, 0x0,
0x8, 0x80, 0x0, 0xf1, 0x1f, 0x0, 0x8, 0x80,
0x0, 0xf1, 0x1f, 0x0, 0x8, 0x80, 0x0, 0xf1,
/* U+006E "n" */
0x1f, 0x3c, 0xfb, 0x11, 0xfb, 0x22, 0xc9, 0x1f,
0x20, 0x4, 0xd1, 0xf0, 0x0, 0x2f, 0x1f, 0x0,
0x2, 0xf1, 0xf0, 0x0, 0x2f, 0x1f, 0x0, 0x2,
0xf1, 0xf0, 0x0, 0x2f,
/* U+006F "o" */
0x0, 0x8e, 0xea, 0x10, 0xa, 0xb2, 0x19, 0xd0,
0x2f, 0x10, 0x0, 0xd5, 0x5c, 0x0, 0x0, 0x98,
0x5c, 0x0, 0x0, 0x98, 0x2f, 0x10, 0x0, 0xd5,
0xa, 0xb2, 0x19, 0xd0, 0x0, 0x8e, 0xea, 0x10,
/* U+0070 "p" */
0x1e, 0x3c, 0xeb, 0x10, 0x1f, 0xb2, 0x18, 0xe0,
0x1f, 0x30, 0x0, 0xc5, 0x1f, 0x0, 0x0, 0x98,
0x1f, 0x0, 0x0, 0x98, 0x1f, 0x30, 0x0, 0xc6,
0x1f, 0xa2, 0x17, 0xe0, 0x1f, 0x2c, 0xfb, 0x20,
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x0,
/* U+0071 "q" */
0x0, 0xae, 0xd5, 0xb5, 0xb, 0xa1, 0x1a, 0xe5,
0x2f, 0x0, 0x1, 0xf5, 0x5c, 0x0, 0x0, 0xc5,
0x5c, 0x0, 0x0, 0xc5, 0x2f, 0x0, 0x1, 0xf5,
0xb, 0xa1, 0x1a, 0xe5, 0x0, 0xae, 0xc4, 0xc5,
0x0, 0x0, 0x0, 0xc5, 0x0, 0x0, 0x0, 0xc5,
0x0, 0x0, 0x0, 0xc5,
/* U+0072 "r" */
0x1f, 0x3c, 0xf0, 0x1f, 0xd5, 0x40, 0x1f, 0x40,
0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f,
0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0,
/* U+0073 "s" */
0x6, 0xdf, 0xd5, 0x3, 0xf4, 0x15, 0xf2, 0x4e,
0x10, 0x4, 0x20, 0x8f, 0xb6, 0x10, 0x0, 0x5,
0xae, 0x24, 0x60, 0x0, 0xa8, 0x3f, 0x40, 0x3e,
0x60, 0x6d, 0xfe, 0x90,
/* U+0074 "t" */
0x0, 0x40, 0x0, 0x4c, 0x0, 0x4, 0xc0, 0xc,
0xff, 0xf9, 0x4, 0xc0, 0x0, 0x4c, 0x0, 0x4,
0xc0, 0x0, 0x4c, 0x0, 0x4, 0xc0, 0x0, 0x3e,
0x0, 0x0, 0xcf, 0x60,
/* U+0075 "u" */
0x1f, 0x0, 0x2, 0xf1, 0xf0, 0x0, 0x2f, 0x1f,
0x0, 0x2, 0xf1, 0xf0, 0x0, 0x2f, 0x1f, 0x0,
0x2, 0xf0, 0xf1, 0x0, 0x7f, 0xd, 0x91, 0x3d,
0xf0, 0x3c, 0xfb, 0x3f,
/* U+0076 "v" */
0xc7, 0x0, 0xb, 0x76, 0xc0, 0x0, 0xf2, 0x1f,
0x10, 0x5d, 0x0, 0xb6, 0xa, 0x70, 0x6, 0xb0,
0xf2, 0x0, 0x1f, 0x6c, 0x0, 0x0, 0xbe, 0x70,
0x0, 0x5, 0xf1, 0x0,
/* U+0077 "w" */
0xc6, 0x0, 0x5e, 0x0, 0xd, 0x57, 0xb0, 0xa,
0xf3, 0x2, 0xf0, 0x2f, 0x0, 0xd8, 0x70, 0x6b,
0x0, 0xd4, 0x2c, 0x3b, 0xb, 0x60, 0x8, 0x86,
0x80, 0xe0, 0xf1, 0x0, 0x3c, 0xa3, 0xa, 0x7c,
0x0, 0x0, 0xee, 0x0, 0x6f, 0x70, 0x0, 0x9,
0xb0, 0x2, 0xf2, 0x0,
/* U+0078 "x" */
0x4e, 0x10, 0xd, 0x60, 0x9, 0xa0, 0x8b, 0x0,
0x0, 0xd8, 0xe1, 0x0, 0x0, 0x4f, 0x60, 0x0,
0x0, 0x8e, 0xa0, 0x0, 0x3, 0xe2, 0xd5, 0x0,
0xd, 0x50, 0x4e, 0x10, 0x9b, 0x0, 0x9, 0xb0,
/* U+0079 "y" */
0xc7, 0x0, 0x8, 0xb6, 0xc0, 0x0, 0xd5, 0xf,
0x20, 0x3f, 0x0, 0xa8, 0x8, 0x90, 0x4, 0xd0,
0xe3, 0x0, 0xe, 0x7e, 0x0, 0x0, 0x8f, 0x80,
0x0, 0x2, 0xf2, 0x0, 0x0, 0x5c, 0x0, 0x0,
0xb, 0x70, 0x0, 0x2, 0xf1, 0x0, 0x0,
/* U+007A "z" */
0x8f, 0xff, 0xff, 0x30, 0x0, 0x9, 0xc0, 0x0,
0x4, 0xe1, 0x0, 0x1, 0xe5, 0x0, 0x0, 0xb9,
0x0, 0x0, 0x7d, 0x0, 0x0, 0x3f, 0x30, 0x0,
0xa, 0xff, 0xff, 0xf7,
/* U+007B "{" */
0x0, 0xbf, 0x50, 0x3d, 0x0, 0x5, 0xa0, 0x0,
0x5a, 0x0, 0x6, 0xa0, 0x0, 0xa7, 0x0, 0xbc,
0x0, 0x2, 0xc5, 0x0, 0x6, 0x90, 0x0, 0x5a,
0x0, 0x5, 0xa0, 0x0, 0x5a, 0x0, 0x2, 0xd0,
0x0, 0xa, 0xf5,
/* U+007C "|" */
0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d,
0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d,
/* U+007D "}" */
0xae, 0x60, 0x0, 0x3e, 0x0, 0x0, 0xf0, 0x0,
0xf, 0x0, 0x0, 0xf0, 0x0, 0xd, 0x40, 0x0,
0x3f, 0x50, 0xb, 0x70, 0x0, 0xf1, 0x0, 0xf,
0x0, 0x0, 0xf0, 0x0, 0xf, 0x0, 0x4, 0xd0,
0xa, 0xe5, 0x0,
/* U+007E "~" */
0x2c, 0xd8, 0x24, 0x55, 0x41, 0x7d, 0xc2,
/* U+007F "" */
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 75, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 75, .box_w = 3, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 17, .adv_w = 96, .box_w = 4, .box_h = 4, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 25, .adv_w = 134, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 75, .adv_w = 134, .box_w = 8, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 135, .adv_w = 217, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 207, .adv_w = 163, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 262, .adv_w = 55, .box_w = 2, .box_h = 4, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 266, .adv_w = 75, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 294, .adv_w = 75, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 322, .adv_w = 113, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 347, .adv_w = 136, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 379, .adv_w = 59, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 387, .adv_w = 136, .box_w = 8, .box_h = 2, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 395, .adv_w = 59, .box_w = 2, .box_h = 2, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 397, .adv_w = 112, .box_w = 7, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 446, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 490, .adv_w = 90, .box_w = 5, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 518, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 562, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 606, .adv_w = 134, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 656, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 700, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 744, .adv_w = 123, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 788, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 832, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 876, .adv_w = 59, .box_w = 2, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 883, .adv_w = 59, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 898, .adv_w = 136, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 930, .adv_w = 136, .box_w = 8, .box_h = 5, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 950, .adv_w = 136, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 982, .adv_w = 120, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1021, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1087, .adv_w = 147, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1142, .adv_w = 152, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1186, .adv_w = 163, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1241, .adv_w = 158, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1291, .adv_w = 143, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1335, .adv_w = 129, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1374, .adv_w = 168, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1429, .adv_w = 161, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1479, .adv_w = 53, .box_w = 2, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1490, .adv_w = 116, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1529, .adv_w = 155, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1579, .adv_w = 132, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1618, .adv_w = 198, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1679, .adv_w = 161, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1729, .adv_w = 172, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1790, .adv_w = 144, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1834, .adv_w = 172, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 1900, .adv_w = 151, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1950, .adv_w = 142, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2000, .adv_w = 139, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2050, .adv_w = 160, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2094, .adv_w = 143, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2144, .adv_w = 208, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2216, .adv_w = 143, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2266, .adv_w = 148, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2321, .adv_w = 140, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2371, .adv_w = 75, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2406, .adv_w = 112, .box_w = 7, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 2455, .adv_w = 75, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2490, .adv_w = 116, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 6},
{.bitmap_index = 2508, .adv_w = 112, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2515, .adv_w = 75, .box_w = 3, .box_h = 2, .ofs_x = 1, .ofs_y = 9},
{.bitmap_index = 2518, .adv_w = 125, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2546, .adv_w = 131, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2590, .adv_w = 123, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2622, .adv_w = 131, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2666, .adv_w = 124, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2698, .adv_w = 84, .box_w = 6, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2731, .adv_w = 132, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2775, .adv_w = 125, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2814, .adv_w = 57, .box_w = 3, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2831, .adv_w = 60, .box_w = 4, .box_h = 14, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 2859, .adv_w = 118, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2903, .adv_w = 53, .box_w = 2, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2914, .adv_w = 192, .box_w = 12, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2962, .adv_w = 125, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2990, .adv_w = 131, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3022, .adv_w = 131, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3066, .adv_w = 131, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3110, .adv_w = 82, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3134, .adv_w = 113, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3162, .adv_w = 80, .box_w = 5, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3190, .adv_w = 125, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3218, .adv_w = 108, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3246, .adv_w = 169, .box_w = 11, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3290, .adv_w = 114, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3322, .adv_w = 111, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3361, .adv_w = 109, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3389, .adv_w = 75, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3424, .adv_w = 44, .box_w = 2, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3439, .adv_w = 75, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3474, .adv_w = 112, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 3481, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 96, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
const lv_font_t ui_font_PingFangEN14 = {
#else
lv_font_t ui_font_PingFangEN14 = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 16, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -2,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if UI_FONT_PINGFANGEN14*/
@@ -0,0 +1,969 @@
/*******************************************************************************
* Size: 16 px
* Bpp: 4
* Opts: --bpp 4 --size 16 --font C:\Users\liu\Desktop\Project\squareline\chat_gpt_new_gui\assets\pingfang.otf -o C:\Users\liu\Desktop\Project\squareline\chat_gpt_new_gui\assets\ui_font_PingFangEN16.c --format lvgl -r 0x20-0x7f --no-compress --no-prefilter
******************************************************************************/
#include "../ui.h"
#ifndef UI_FONT_PINGFANGEN16
#define UI_FONT_PINGFANGEN16 1
#endif
#if UI_FONT_PINGFANGEN16
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+0020 " " */
/* U+0021 "!" */
0x1f, 0x60, 0xf5, 0xf, 0x50, 0xf4, 0xf, 0x40,
0xe4, 0xe, 0x30, 0xd3, 0xb, 0x20, 0x0, 0x1e,
0x61, 0xe6,
/* U+0022 "\"" */
0xb9, 0xc, 0x8a, 0x90, 0xb7, 0xa8, 0xb, 0x79,
0x80, 0xa6, 0x11, 0x2, 0x10,
/* U+0023 "#" */
0x0, 0xa, 0x60, 0x2e, 0x0, 0x0, 0xc, 0x40,
0x4c, 0x0, 0x0, 0xe, 0x20, 0x6a, 0x0, 0xc,
0xef, 0xee, 0xff, 0xe1, 0x1, 0x4d, 0x11, 0xc6,
0x10, 0x0, 0x6a, 0x0, 0xe2, 0x0, 0x0, 0x88,
0x0, 0xf0, 0x0, 0x0, 0xb5, 0x3, 0xd0, 0x0,
0x7e, 0xfe, 0xee, 0xfe, 0x70, 0x1, 0xf2, 0x19,
0x91, 0x0, 0x2, 0xe0, 0xa, 0x60, 0x0, 0x5,
0xc0, 0xd, 0x30, 0x0,
/* U+0024 "$" */
0x0, 0x0, 0x92, 0x0, 0x0, 0x0, 0x9, 0x20,
0x0, 0x0, 0x7d, 0xff, 0xb2, 0x0, 0x8e, 0x7b,
0x6b, 0xe1, 0xe, 0x60, 0x92, 0xe, 0x60, 0xe6,
0x9, 0x20, 0x43, 0xa, 0xe5, 0xa2, 0x0, 0x0,
0x9, 0xff, 0x81, 0x0, 0x0, 0x1, 0xce, 0xf8,
0x0, 0x0, 0x9, 0x25, 0xf7, 0x1d, 0x20, 0x92,
0x9, 0xb0, 0xe7, 0x9, 0x20, 0xaa, 0x7, 0xf7,
0xb6, 0x9f, 0x40, 0x7, 0xdf, 0xfc, 0x50, 0x0,
0x0, 0x92, 0x0, 0x0, 0x0, 0x4, 0x10, 0x0,
/* U+0025 "%" */
0xa, 0xed, 0x30, 0x0, 0xc, 0x30, 0x0, 0x9b,
0x5, 0xe0, 0x0, 0x5a, 0x0, 0x0, 0xd6, 0x0,
0xf3, 0x0, 0xd2, 0x0, 0x0, 0xc6, 0x0, 0xf3,
0x6, 0x90, 0x0, 0x0, 0x8b, 0x6, 0xe0, 0xd,
0x10, 0x0, 0x0, 0x9, 0xec, 0x30, 0x78, 0x7,
0xdc, 0x30, 0x0, 0x0, 0x1, 0xe1, 0x5d, 0x15,
0xe0, 0x0, 0x0, 0x8, 0x70, 0xa8, 0x0, 0xf4,
0x0, 0x0, 0x1d, 0x0, 0xb7, 0x0, 0xd6, 0x0,
0x0, 0xa6, 0x0, 0xa9, 0x0, 0xf4, 0x0, 0x2,
0xd0, 0x0, 0x5d, 0x14, 0xf0, 0x0, 0xb, 0x50,
0x0, 0x8, 0xed, 0x40,
/* U+0026 "&" */
0x0, 0x1a, 0xfe, 0x90, 0x0, 0x0, 0x0, 0xbc,
0x34, 0xe8, 0x0, 0x0, 0x0, 0xe6, 0x0, 0xaa,
0x0, 0x0, 0x0, 0xac, 0x3, 0xf5, 0x0, 0x0,
0x0, 0x1e, 0xce, 0x60, 0x1, 0x0, 0x0, 0x4d,
0xf9, 0x0, 0x2f, 0x10, 0x6, 0xf5, 0x3f, 0x70,
0x5f, 0x0, 0xf, 0x50, 0x3, 0xf6, 0x9c, 0x0,
0x4f, 0x0, 0x0, 0x4f, 0xf6, 0x0, 0x2f, 0x40,
0x0, 0xc, 0xf5, 0x0, 0xb, 0xe7, 0x46, 0xce,
0x9f, 0x20, 0x0, 0x7d, 0xfd, 0x91, 0xa, 0xd1,
/* U+0027 "'" */
0xb9, 0xa9, 0xa8, 0x98, 0x11,
/* U+0028 "(" */
0x0, 0xe, 0x30, 0x6, 0xc0, 0x0, 0xe5, 0x0,
0x5e, 0x0, 0x9, 0xa0, 0x0, 0xd6, 0x0, 0xf,
0x40, 0x0, 0xf3, 0x0, 0xf, 0x30, 0x0, 0xf4,
0x0, 0xd, 0x60, 0x0, 0x9a, 0x0, 0x5, 0xe0,
0x0, 0xe, 0x50, 0x0, 0x6c, 0x0, 0x0, 0xe3,
/* U+0029 ")" */
0xd, 0x40, 0x0, 0x6b, 0x0, 0x0, 0xf3, 0x0,
0x9, 0xa0, 0x0, 0x5e, 0x0, 0x1, 0xf2, 0x0,
0xf, 0x40, 0x0, 0xe5, 0x0, 0xe, 0x50, 0x0,
0xf4, 0x0, 0x1f, 0x20, 0x5, 0xe0, 0x0, 0x9a,
0x0, 0xf, 0x30, 0x6, 0xc0, 0x0, 0xd4, 0x0,
/* U+002A "*" */
0x0, 0x7, 0x90, 0x0, 0x0, 0x7, 0x80, 0x0,
0x48, 0x26, 0x81, 0x86, 0x39, 0xee, 0xee, 0xa4,
0x0, 0x1e, 0xe1, 0x0, 0x0, 0xa8, 0x6c, 0x0,
0x6, 0xd0, 0xb, 0x70, 0x0, 0x20, 0x1, 0x0,
/* U+002B "+" */
0x0, 0x0, 0xb6, 0x0, 0x0, 0x0, 0xb, 0x60,
0x0, 0x0, 0x0, 0xb6, 0x0, 0x0, 0x0, 0xb,
0x60, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xd0, 0x22,
0x2c, 0x72, 0x22, 0x0, 0x0, 0xb6, 0x0, 0x0,
0x0, 0xb, 0x60, 0x0, 0x0, 0x0, 0xb6, 0x0,
0x0,
/* U+002C "," */
0x0, 0xb, 0xd0, 0xaf, 0x40, 0xc2, 0x8a, 0x6,
0x0,
/* U+002D "-" */
0x3f, 0xff, 0xff, 0xff, 0xd0, 0x22, 0x22, 0x22,
0x22,
/* U+002E "." */
0x0, 0xa, 0xd0, 0x9c, 0x0,
/* U+002F "/" */
0x0, 0x0, 0x0, 0x62, 0x0, 0x0, 0x1, 0xf1,
0x0, 0x0, 0x7, 0xa0, 0x0, 0x0, 0xd, 0x40,
0x0, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x99, 0x0,
0x0, 0x0, 0xe3, 0x0, 0x0, 0x4, 0xd0, 0x0,
0x0, 0xa, 0x70, 0x0, 0x0, 0xf, 0x10, 0x0,
0x0, 0x6c, 0x0, 0x0, 0x0, 0xc6, 0x0, 0x0,
0x2, 0xf0, 0x0, 0x0, 0x7, 0xa0, 0x0, 0x0,
0xd, 0x40, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x0,
/* U+0030 "0" */
0x0, 0x2a, 0xed, 0x80, 0x0, 0x1d, 0xb4, 0x6e,
0x90, 0x8, 0xc0, 0x0, 0x3f, 0x20, 0xe6, 0x0,
0x0, 0xc7, 0xf, 0x30, 0x0, 0x9, 0xa2, 0xf2,
0x0, 0x0, 0x8b, 0x2f, 0x20, 0x0, 0x8, 0xb0,
0xf3, 0x0, 0x0, 0x9a, 0xe, 0x60, 0x0, 0xc,
0x70, 0x8c, 0x0, 0x3, 0xf2, 0x1, 0xdb, 0x46,
0xe9, 0x0, 0x2, 0xae, 0xd7, 0x0,
/* U+0031 "1" */
0x0, 0x1c, 0xb0, 0x6e, 0xfb, 0x4e, 0x69, 0xb1,
0x0, 0x9b, 0x0, 0x9, 0xb0, 0x0, 0x9b, 0x0,
0x9, 0xb0, 0x0, 0x9b, 0x0, 0x9, 0xb0, 0x0,
0x9b, 0x0, 0x9, 0xb0, 0x0, 0x9b,
/* U+0032 "2" */
0x0, 0x1a, 0xee, 0xa2, 0x0, 0x1e, 0xa4, 0x4b,
0xe1, 0x9, 0xd0, 0x0, 0xe, 0x60, 0xc8, 0x0,
0x0, 0xc8, 0x4, 0x20, 0x0, 0xf, 0x50, 0x0,
0x0, 0x9, 0xd0, 0x0, 0x0, 0xa, 0xe3, 0x0,
0x0, 0x2d, 0xc1, 0x0, 0x0, 0x4f, 0x90, 0x0,
0x0, 0x2f, 0x70, 0x0, 0x0, 0xb, 0xd3, 0x33,
0x33, 0x20, 0xef, 0xff, 0xff, 0xf9,
/* U+0033 "3" */
0x0, 0x3b, 0xee, 0xb3, 0x0, 0x3f, 0x94, 0x4a,
0xf2, 0xb, 0xa0, 0x0, 0xe, 0x70, 0x63, 0x0,
0x0, 0xc6, 0x0, 0x0, 0x0, 0x6e, 0x10, 0x0,
0xe, 0xfe, 0x20, 0x0, 0x0, 0x13, 0x8d, 0x20,
0x0, 0x0, 0x0, 0xba, 0x1e, 0x30, 0x0, 0x9,
0xb0, 0xd8, 0x0, 0x0, 0xd9, 0x4, 0xf8, 0x34,
0xbe, 0x10, 0x4, 0xcf, 0xea, 0x20,
/* U+0034 "4" */
0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, 0x0, 0x1e,
0xf5, 0x0, 0x0, 0x0, 0xb8, 0xd5, 0x0, 0x0,
0x6, 0xc0, 0xd5, 0x0, 0x0, 0x3e, 0x20, 0xd5,
0x0, 0x0, 0xd5, 0x0, 0xd5, 0x0, 0x9, 0x90,
0x0, 0xd5, 0x0, 0x5d, 0x0, 0x0, 0xd5, 0x0,
0x9f, 0xff, 0xff, 0xff, 0xf3, 0x12, 0x22, 0x22,
0xe7, 0x20, 0x0, 0x0, 0x0, 0xd5, 0x0, 0x0,
0x0, 0x0, 0xd5, 0x0,
/* U+0035 "5" */
0x5, 0xff, 0xff, 0xff, 0x40, 0x7c, 0x33, 0x33,
0x31, 0x8, 0xa0, 0x0, 0x0, 0x0, 0xa8, 0x0,
0x0, 0x0, 0xb, 0x78, 0xde, 0xa2, 0x0, 0xdf,
0x83, 0x4b, 0xe1, 0x7, 0x50, 0x0, 0xd, 0x80,
0x0, 0x0, 0x0, 0x9b, 0x5, 0x0, 0x0, 0x9,
0xb0, 0xf6, 0x0, 0x0, 0xe7, 0x6, 0xf8, 0x45,
0xdd, 0x0, 0x5, 0xcf, 0xd9, 0x0,
/* U+0036 "6" */
0x0, 0x9, 0xee, 0xb3, 0x0, 0xc, 0xb4, 0x5b,
0xe1, 0x6, 0xd0, 0x0, 0xe, 0x70, 0xc6, 0x0,
0x0, 0x0, 0xf, 0x26, 0xce, 0xb2, 0x1, 0xf8,
0xa3, 0x4b, 0xe1, 0x2f, 0xb0, 0x0, 0xd, 0x81,
0xf5, 0x0, 0x0, 0x9b, 0xf, 0x60, 0x0, 0x9,
0xb0, 0x9b, 0x0, 0x0, 0xe7, 0x2, 0xea, 0x44,
0xcd, 0x0, 0x2, 0xae, 0xea, 0x10,
/* U+0037 "7" */
0x7f, 0xff, 0xff, 0xff, 0x1, 0x44, 0x44, 0x49,
0xe0, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x0, 0x0,
0x2f, 0x20, 0x0, 0x0, 0x9, 0xb0, 0x0, 0x0,
0x0, 0xe5, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0,
0x0, 0xc, 0x90, 0x0, 0x0, 0x2, 0xf3, 0x0,
0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0xe, 0x60,
0x0, 0x0, 0x5, 0xf1, 0x0, 0x0,
/* U+0038 "8" */
0x0, 0x5c, 0xfe, 0xa2, 0x0, 0x6f, 0x62, 0x3a,
0xe1, 0xd, 0x70, 0x0, 0xd, 0x60, 0xc6, 0x0,
0x0, 0xc6, 0x6, 0xd3, 0x0, 0x6e, 0x10, 0x8,
0xff, 0xff, 0x30, 0x8, 0xe6, 0x23, 0x9f, 0x32,
0xf3, 0x0, 0x0, 0xab, 0x4f, 0x0, 0x0, 0x6,
0xe2, 0xf3, 0x0, 0x0, 0xab, 0xa, 0xe5, 0x23,
0x9f, 0x40, 0x7, 0xdf, 0xeb, 0x30,
/* U+0039 "9" */
0x0, 0x5c, 0xfd, 0x80, 0x0, 0x6f, 0x73, 0x4c,
0xa0, 0xf, 0x60, 0x0, 0x1e, 0x32, 0xf2, 0x0,
0x0, 0xb8, 0xf, 0x40, 0x0, 0xe, 0xa0, 0xae,
0x40, 0x2a, 0xcc, 0x0, 0x9f, 0xfe, 0x58, 0xb0,
0x0, 0x1, 0x0, 0xa9, 0x7, 0x20, 0x0, 0xe,
0x60, 0xb9, 0x0, 0x6, 0xf0, 0x4, 0xf7, 0x37,
0xf6, 0x0, 0x5, 0xcf, 0xc6, 0x0,
/* U+003A ":" */
0x0, 0xa, 0xd0, 0x9c, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xa, 0xd0, 0x9c, 0x0,
/* U+003B ";" */
0x0, 0xa, 0xd0, 0x9c, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xb, 0xd0, 0xaf, 0x40, 0xc2, 0x8a,
0x6, 0x0,
/* U+003C "<" */
0x0, 0x0, 0x0, 0x1, 0x70, 0x0, 0x0, 0x29,
0xfa, 0x0, 0x2, 0xaf, 0xa2, 0x0, 0x3b, 0xf9,
0x20, 0x0, 0x3f, 0xc1, 0x0, 0x0, 0x0, 0x7e,
0xc5, 0x0, 0x0, 0x0, 0x7, 0xed, 0x60, 0x0,
0x0, 0x0, 0x6d, 0xe6, 0x0, 0x0, 0x0, 0x5,
0xa0,
/* U+003D "=" */
0x3f, 0xff, 0xff, 0xff, 0xd0, 0x22, 0x22, 0x22,
0x22, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
0xff, 0xfd, 0x2, 0x22, 0x22, 0x22, 0x20,
/* U+003E ">" */
0x26, 0x0, 0x0, 0x0, 0x1, 0xde, 0x70, 0x0,
0x0, 0x0, 0x5c, 0xe7, 0x10, 0x0, 0x0, 0x4,
0xbf, 0x81, 0x0, 0x0, 0x0, 0x4e, 0xd0, 0x0,
0x1, 0x7e, 0xc5, 0x0, 0x18, 0xfc, 0x40, 0x1,
0x9f, 0xb3, 0x0, 0x0, 0x3a, 0x20, 0x0, 0x0,
0x0,
/* U+003F "?" */
0x0, 0x7d, 0xfd, 0x50, 0x7, 0xe6, 0x37, 0xf5,
0xf, 0x50, 0x0, 0xaa, 0x1d, 0x10, 0x0, 0x9b,
0x0, 0x0, 0x1, 0xe7, 0x0, 0x0, 0x1c, 0xc0,
0x0, 0x0, 0xcc, 0x0, 0x0, 0x3, 0xf1, 0x0,
0x0, 0x5, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x8, 0xd0, 0x0, 0x0, 0x7, 0xd0, 0x0,
/* U+0040 "@" */
0x0, 0x0, 0x7b, 0xee, 0xc7, 0x0, 0x0, 0x2,
0xd9, 0x30, 0x2, 0x9d, 0x10, 0x0, 0xe5, 0x5,
0xcd, 0x48, 0x6b, 0x0, 0x9a, 0x5, 0xf6, 0x3d,
0xb0, 0xc2, 0xe, 0x30, 0xe5, 0x0, 0xa6, 0x9,
0x51, 0xf0, 0x3e, 0x0, 0xd, 0x20, 0xa3, 0x1f,
0x5, 0xc0, 0x3, 0xe0, 0x1d, 0x0, 0xe2, 0x2f,
0x23, 0xcc, 0x1b, 0x60, 0xa, 0x70, 0x7e, 0xd3,
0xcd, 0x63, 0x50, 0x2e, 0x20, 0x0, 0x0, 0x2,
0xe3, 0x0, 0x5e, 0x72, 0x0, 0x16, 0xd4, 0x0,
0x0, 0x18, 0xce, 0xed, 0x81, 0x0,
/* U+0041 "A" */
0x0, 0x0, 0xaf, 0x30, 0x0, 0x0, 0x0, 0x1f,
0xd9, 0x0, 0x0, 0x0, 0x6, 0xc4, 0xe0, 0x0,
0x0, 0x0, 0xc6, 0xe, 0x50, 0x0, 0x0, 0x2f,
0x0, 0x8b, 0x0, 0x0, 0x8, 0xa0, 0x2, 0xf1,
0x0, 0x0, 0xe3, 0x0, 0xb, 0x70, 0x0, 0x4f,
0xff, 0xff, 0xfd, 0x0, 0xa, 0x92, 0x22, 0x23,
0xf3, 0x1, 0xf3, 0x0, 0x0, 0xb, 0x90, 0x6e,
0x0, 0x0, 0x0, 0x6e, 0xc, 0x90, 0x0, 0x0,
0x1, 0xf5,
/* U+0042 "B" */
0xdf, 0xff, 0xff, 0xc5, 0x0, 0xd8, 0x22, 0x23,
0x8f, 0x40, 0xd7, 0x0, 0x0, 0xb, 0x90, 0xd7,
0x0, 0x0, 0xa, 0x90, 0xd7, 0x0, 0x0, 0x5e,
0x30, 0xdf, 0xff, 0xff, 0xf5, 0x0, 0xd8, 0x22,
0x23, 0x7e, 0x70, 0xd7, 0x0, 0x0, 0x6, 0xf0,
0xd7, 0x0, 0x0, 0x2, 0xf2, 0xd7, 0x0, 0x0,
0x6, 0xf0, 0xd8, 0x22, 0x24, 0x8f, 0x90, 0xdf,
0xff, 0xff, 0xd7, 0x0,
/* U+0043 "C" */
0x0, 0x5, 0xbe, 0xfc, 0x60, 0x0, 0x9, 0xf9,
0x54, 0x8e, 0xa0, 0x5, 0xf3, 0x0, 0x0, 0x2e,
0x60, 0xd8, 0x0, 0x0, 0x0, 0x78, 0x1f, 0x20,
0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0,
0x0, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf2,
0x0, 0x0, 0x0, 0x13, 0xe, 0x70, 0x0, 0x0,
0x8, 0xb0, 0x6e, 0x20, 0x0, 0x3, 0xf5, 0x0,
0xaf, 0x85, 0x48, 0xf9, 0x0, 0x0, 0x6b, 0xee,
0xc5, 0x0,
/* U+0044 "D" */
0xdf, 0xff, 0xfc, 0x91, 0x0, 0xd9, 0x33, 0x46,
0xde, 0x30, 0xd7, 0x0, 0x0, 0xa, 0xc0, 0xd7,
0x0, 0x0, 0x2, 0xf4, 0xd7, 0x0, 0x0, 0x0,
0xd6, 0xd7, 0x0, 0x0, 0x0, 0xb8, 0xd7, 0x0,
0x0, 0x0, 0xb8, 0xd7, 0x0, 0x0, 0x0, 0xd6,
0xd7, 0x0, 0x0, 0x3, 0xf3, 0xd7, 0x0, 0x0,
0xc, 0xb0, 0xd9, 0x33, 0x47, 0xed, 0x20, 0xdf,
0xff, 0xec, 0x80, 0x0,
/* U+0045 "E" */
0xdf, 0xff, 0xff, 0xff, 0x3d, 0x93, 0x33, 0x33,
0x30, 0xd7, 0x0, 0x0, 0x0, 0xd, 0x70, 0x0,
0x0, 0x0, 0xd7, 0x0, 0x0, 0x0, 0xd, 0xff,
0xff, 0xff, 0xd0, 0xd9, 0x22, 0x22, 0x22, 0xd,
0x70, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd, 0x70, 0x0, 0x0, 0x0, 0xd9, 0x33, 0x33,
0x33, 0x1d, 0xff, 0xff, 0xff, 0xf8,
/* U+0046 "F" */
0xdf, 0xff, 0xff, 0xfc, 0xd9, 0x33, 0x33, 0x32,
0xd7, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd7, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xf7,
0xd9, 0x22, 0x22, 0x21, 0xd7, 0x0, 0x0, 0x0,
0xd7, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd7, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
/* U+0047 "G" */
0x0, 0x5, 0xbe, 0xec, 0x60, 0x0, 0x8, 0xf9,
0x54, 0x8f, 0xb0, 0x5, 0xf3, 0x0, 0x0, 0x2f,
0x60, 0xd8, 0x0, 0x0, 0x0, 0x9c, 0x1f, 0x30,
0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0,
0x0, 0x4f, 0x0, 0x0, 0xff, 0xff, 0xe1, 0xf2,
0x0, 0x2, 0x22, 0x7e, 0xe, 0x80, 0x0, 0x0,
0x5, 0xe0, 0x5f, 0x30, 0x0, 0x0, 0x6e, 0x0,
0x9f, 0x95, 0x45, 0x9f, 0xb0, 0x0, 0x4a, 0xdf,
0xda, 0x40,
/* U+0048 "H" */
0xd7, 0x0, 0x0, 0x0, 0xe6, 0xd7, 0x0, 0x0,
0x0, 0xe6, 0xd7, 0x0, 0x0, 0x0, 0xe6, 0xd7,
0x0, 0x0, 0x0, 0xe6, 0xd7, 0x0, 0x0, 0x0,
0xe6, 0xdf, 0xff, 0xff, 0xff, 0xf6, 0xd9, 0x22,
0x22, 0x22, 0xe6, 0xd7, 0x0, 0x0, 0x0, 0xe6,
0xd7, 0x0, 0x0, 0x0, 0xe6, 0xd7, 0x0, 0x0,
0x0, 0xe6, 0xd7, 0x0, 0x0, 0x0, 0xe6, 0xd7,
0x0, 0x0, 0x0, 0xe6,
/* U+0049 "I" */
0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
0xb8, 0xb8, 0xb8, 0xb8,
/* U+004A "J" */
0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2, 0xf2,
0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2, 0xf2,
0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2, 0xf2,
0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2, 0xf2,
0xb9, 0x0, 0x3, 0xf1, 0x9c, 0x0, 0x7, 0xf0,
0x3f, 0x84, 0x6f, 0x90, 0x5, 0xdf, 0xd8, 0x0,
/* U+004B "K" */
0xd7, 0x0, 0x0, 0x1c, 0xc0, 0xd, 0x70, 0x0,
0x1c, 0xc0, 0x0, 0xd7, 0x0, 0xc, 0xc0, 0x0,
0xd, 0x70, 0xc, 0xc0, 0x0, 0x0, 0xd7, 0xc,
0xc0, 0x0, 0x0, 0xd, 0x8c, 0xf7, 0x0, 0x0,
0x0, 0xdf, 0xb6, 0xf5, 0x0, 0x0, 0xd, 0xc0,
0x8, 0xf3, 0x0, 0x0, 0xd7, 0x0, 0xa, 0xe2,
0x0, 0xd, 0x70, 0x0, 0xc, 0xd0, 0x0, 0xd7,
0x0, 0x0, 0x1e, 0xb0, 0xd, 0x70, 0x0, 0x0,
0x3f, 0x90,
/* U+004C "L" */
0xd7, 0x0, 0x0, 0x0, 0xd, 0x70, 0x0, 0x0,
0x0, 0xd7, 0x0, 0x0, 0x0, 0xd, 0x70, 0x0,
0x0, 0x0, 0xd7, 0x0, 0x0, 0x0, 0xd, 0x70,
0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0, 0xd,
0x70, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd, 0x70, 0x0, 0x0, 0x0, 0xd9, 0x33, 0x33,
0x33, 0xd, 0xff, 0xff, 0xff, 0xf0,
/* U+004D "M" */
0xdf, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xdf, 0x60,
0x0, 0x0, 0x4, 0xff, 0xde, 0xd0, 0x0, 0x0,
0xb, 0xef, 0xd8, 0xf3, 0x0, 0x0, 0x2f, 0x8f,
0xd7, 0xaa, 0x0, 0x0, 0x8b, 0x5f, 0xd7, 0x3f,
0x10, 0x0, 0xe5, 0x5f, 0xd7, 0xd, 0x70, 0x5,
0xe0, 0x5f, 0xd7, 0x6, 0xe0, 0xc, 0x80, 0x5f,
0xd7, 0x0, 0xf5, 0x3f, 0x10, 0x5f, 0xd7, 0x0,
0x9b, 0x9a, 0x0, 0x5f, 0xd7, 0x0, 0x2f, 0xf4,
0x0, 0x5f, 0xd7, 0x0, 0xb, 0xd0, 0x0, 0x5f,
/* U+004E "N" */
0xdd, 0x0, 0x0, 0x0, 0xf5, 0xdf, 0x80, 0x0,
0x0, 0xf5, 0xdb, 0xf3, 0x0, 0x0, 0xf5, 0xd7,
0x9d, 0x0, 0x0, 0xf5, 0xd7, 0xe, 0x80, 0x0,
0xf5, 0xd7, 0x4, 0xf2, 0x0, 0xf5, 0xd7, 0x0,
0x9c, 0x0, 0xf5, 0xd7, 0x0, 0xe, 0x70, 0xf5,
0xd7, 0x0, 0x4, 0xf2, 0xf5, 0xd7, 0x0, 0x0,
0xac, 0xf5, 0xd7, 0x0, 0x0, 0x1e, 0xf5, 0xd7,
0x0, 0x0, 0x5, 0xf5,
/* U+004F "O" */
0x0, 0x4, 0xae, 0xeb, 0x70, 0x0, 0x0, 0x8f,
0x95, 0x47, 0xec, 0x10, 0x5, 0xf4, 0x0, 0x0,
0x1d, 0x90, 0xd, 0x90, 0x0, 0x0, 0x4, 0xf2,
0x1f, 0x30, 0x0, 0x0, 0x0, 0xe5, 0x4f, 0x0,
0x0, 0x0, 0x0, 0xc8, 0x4f, 0x0, 0x0, 0x0,
0x0, 0xc8, 0x1f, 0x30, 0x0, 0x0, 0x0, 0xe5,
0xe, 0x80, 0x0, 0x0, 0x4, 0xf2, 0x5, 0xf3,
0x0, 0x0, 0x1d, 0x90, 0x0, 0x9f, 0x95, 0x47,
0xec, 0x10, 0x0, 0x4, 0xbe, 0xeb, 0x70, 0x0,
/* U+0050 "P" */
0xdf, 0xff, 0xfe, 0xb3, 0xd, 0x93, 0x33, 0x4a,
0xf3, 0xd7, 0x0, 0x0, 0xc, 0x9d, 0x70, 0x0,
0x0, 0x9b, 0xd7, 0x0, 0x0, 0xb, 0x9d, 0x70,
0x0, 0x17, 0xf4, 0xdf, 0xff, 0xff, 0xe6, 0xd,
0x92, 0x22, 0x10, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd, 0x70, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0,
0x0, 0xd, 0x70, 0x0, 0x0, 0x0,
/* U+0051 "Q" */
0x0, 0x4, 0xae, 0xeb, 0x70, 0x0, 0x0, 0x8f,
0x95, 0x47, 0xec, 0x10, 0x5, 0xf4, 0x0, 0x0,
0x1d, 0x90, 0xd, 0x90, 0x0, 0x0, 0x4, 0xf2,
0x1f, 0x30, 0x0, 0x0, 0x0, 0xe5, 0x4f, 0x0,
0x0, 0x0, 0x0, 0xc8, 0x4f, 0x0, 0x0, 0x0,
0x0, 0xc8, 0x1f, 0x30, 0x0, 0x29, 0x0, 0xe5,
0xe, 0x80, 0x0, 0xc, 0x94, 0xf2, 0x5, 0xf3,
0x0, 0x1, 0xee, 0x90, 0x0, 0x9f, 0x95, 0x47,
0xef, 0x40, 0x0, 0x4, 0xbe, 0xfc, 0x67, 0xe0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xa2,
/* U+0052 "R" */
0xdf, 0xff, 0xff, 0xc4, 0x0, 0xd9, 0x33, 0x34,
0x9f, 0x30, 0xd7, 0x0, 0x0, 0xc, 0x90, 0xd7,
0x0, 0x0, 0x9, 0xc0, 0xd7, 0x0, 0x0, 0xb,
0xa0, 0xd7, 0x0, 0x1, 0x7f, 0x20, 0xdf, 0xff,
0xff, 0xf3, 0x0, 0xd9, 0x22, 0x34, 0xaf, 0x10,
0xd7, 0x0, 0x0, 0xd, 0x70, 0xd7, 0x0, 0x0,
0xa, 0x90, 0xd7, 0x0, 0x0, 0x8, 0xc0, 0xd7,
0x0, 0x0, 0x4, 0xf2,
/* U+0053 "S" */
0x0, 0x6c, 0xfe, 0xc6, 0x0, 0x9, 0xe7, 0x44,
0x8f, 0x80, 0xf, 0x40, 0x0, 0x6, 0xf0, 0x1f,
0x40, 0x0, 0x0, 0xa2, 0xa, 0xe5, 0x0, 0x0,
0x0, 0x0, 0x7d, 0xfa, 0x50, 0x0, 0x0, 0x0,
0x27, 0xde, 0x50, 0x0, 0x0, 0x0, 0x6, 0xf3,
0x5f, 0x0, 0x0, 0x0, 0xc8, 0x1f, 0x50, 0x0,
0x0, 0xe6, 0x7, 0xf8, 0x44, 0x6d, 0xe1, 0x0,
0x5c, 0xef, 0xd9, 0x10,
/* U+0054 "T" */
0xbf, 0xff, 0xff, 0xff, 0xf9, 0x23, 0x33, 0xca,
0x33, 0x32, 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0,
0x0, 0xb9, 0x0, 0x0, 0x0, 0x0, 0xb9, 0x0,
0x0, 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0, 0x0,
0xb9, 0x0, 0x0, 0x0, 0x0, 0xb9, 0x0, 0x0,
0x0, 0x0, 0xb9, 0x0, 0x0, 0x0, 0x0, 0xb9,
0x0, 0x0, 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0,
0x0, 0xb9, 0x0, 0x0,
/* U+0055 "U" */
0xd7, 0x0, 0x0, 0x0, 0xf4, 0xd7, 0x0, 0x0,
0x0, 0xf4, 0xd7, 0x0, 0x0, 0x0, 0xf4, 0xd7,
0x0, 0x0, 0x0, 0xf4, 0xd7, 0x0, 0x0, 0x0,
0xf4, 0xd7, 0x0, 0x0, 0x0, 0xf4, 0xd7, 0x0,
0x0, 0x0, 0xf4, 0xc8, 0x0, 0x0, 0x1, 0xf3,
0xaa, 0x0, 0x0, 0x3, 0xf1, 0x6f, 0x10, 0x0,
0x9, 0xd0, 0xd, 0xe6, 0x45, 0xaf, 0x40, 0x0,
0x8d, 0xfe, 0xb3, 0x0,
/* U+0056 "V" */
0xba, 0x0, 0x0, 0x0, 0x7e, 0x6, 0xf0, 0x0,
0x0, 0xc, 0x90, 0x1f, 0x50, 0x0, 0x2, 0xf4,
0x0, 0xbb, 0x0, 0x0, 0x7e, 0x0, 0x5, 0xf1,
0x0, 0xd, 0x80, 0x0, 0xf, 0x60, 0x2, 0xf3,
0x0, 0x0, 0xab, 0x0, 0x8d, 0x0, 0x0, 0x4,
0xf1, 0xd, 0x80, 0x0, 0x0, 0xe, 0x62, 0xf2,
0x0, 0x0, 0x0, 0x9c, 0x8c, 0x0, 0x0, 0x0,
0x3, 0xfe, 0x70, 0x0, 0x0, 0x0, 0xd, 0xf1,
0x0, 0x0,
/* U+0057 "W" */
0xca, 0x0, 0x0, 0x6f, 0x40, 0x0, 0xc, 0xa8,
0xe0, 0x0, 0xa, 0xf8, 0x0, 0x0, 0xf6, 0x3f,
0x20, 0x0, 0xeb, 0xc0, 0x0, 0x4f, 0x10, 0xf6,
0x0, 0x2f, 0x3f, 0x10, 0x8, 0xd0, 0xb, 0xa0,
0x6, 0xc0, 0xe4, 0x0, 0xc9, 0x0, 0x6e, 0x0,
0xb8, 0x9, 0x90, 0xf, 0x40, 0x2, 0xf2, 0xf,
0x30, 0x5d, 0x4, 0xf0, 0x0, 0xd, 0x63, 0xf0,
0x1, 0xf1, 0x8b, 0x0, 0x0, 0x9a, 0x7b, 0x0,
0xd, 0x5c, 0x70, 0x0, 0x5, 0xeb, 0x70, 0x0,
0x9a, 0xf3, 0x0, 0x0, 0x1f, 0xf3, 0x0, 0x5,
0xfe, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0, 0x1f,
0xa0, 0x0,
/* U+0058 "X" */
0x4f, 0x50, 0x0, 0x2, 0xf7, 0x0, 0x9e, 0x10,
0x0, 0xcc, 0x0, 0x0, 0xda, 0x0, 0x7f, 0x20,
0x0, 0x4, 0xf5, 0x2f, 0x60, 0x0, 0x0, 0x9,
0xec, 0xb0, 0x0, 0x0, 0x0, 0xe, 0xf1, 0x0,
0x0, 0x0, 0x3, 0xff, 0x50, 0x0, 0x0, 0x0,
0xda, 0x7f, 0x10, 0x0, 0x0, 0x9e, 0x10, 0xcb,
0x0, 0x0, 0x3f, 0x50, 0x2, 0xf6, 0x0, 0xd,
0xb0, 0x0, 0x7, 0xf2, 0x9, 0xe1, 0x0, 0x0,
0xc, 0xc0,
/* U+0059 "Y" */
0x9e, 0x0, 0x0, 0x0, 0x6f, 0x31, 0xe9, 0x0,
0x0, 0x1e, 0x80, 0x5, 0xf3, 0x0, 0xa, 0xd0,
0x0, 0xa, 0xd0, 0x4, 0xf4, 0x0, 0x0, 0x1f,
0x70, 0xda, 0x0, 0x0, 0x0, 0x6f, 0x9e, 0x10,
0x0, 0x0, 0x0, 0xcf, 0x50, 0x0, 0x0, 0x0,
0x5, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x0,
0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0,
0x0, 0x5f, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf0,
0x0, 0x0,
/* U+005A "Z" */
0x1f, 0xff, 0xff, 0xff, 0xf3, 0x3, 0x33, 0x33,
0x3d, 0xe0, 0x0, 0x0, 0x0, 0x7f, 0x30, 0x0,
0x0, 0x3, 0xf7, 0x0, 0x0, 0x0, 0xd, 0xb0,
0x0, 0x0, 0x0, 0xae, 0x10, 0x0, 0x0, 0x6,
0xf4, 0x0, 0x0, 0x0, 0x2f, 0x80, 0x0, 0x0,
0x0, 0xdc, 0x0, 0x0, 0x0, 0x9, 0xe1, 0x0,
0x0, 0x0, 0x5f, 0x83, 0x33, 0x33, 0x31, 0x9f,
0xff, 0xff, 0xff, 0xf9,
/* U+005B "[" */
0x4f, 0xff, 0x94, 0xe2, 0x21, 0x4e, 0x0, 0x4,
0xe0, 0x0, 0x4e, 0x0, 0x4, 0xe0, 0x0, 0x4e,
0x0, 0x4, 0xe0, 0x0, 0x4e, 0x0, 0x4, 0xe0,
0x0, 0x4e, 0x0, 0x4, 0xe0, 0x0, 0x4e, 0x0,
0x4, 0xe0, 0x0, 0x4e, 0x0, 0x4, 0xff, 0xf9,
0x2, 0x22, 0x10,
/* U+005C "\\" */
0x26, 0x0, 0x0, 0x0, 0x1f, 0x10, 0x0, 0x0,
0xa, 0x70, 0x0, 0x0, 0x5, 0xd0, 0x0, 0x0,
0x0, 0xe3, 0x0, 0x0, 0x0, 0x98, 0x0, 0x0,
0x0, 0x3e, 0x0, 0x0, 0x0, 0xd, 0x40, 0x0,
0x0, 0x7, 0xa0, 0x0, 0x0, 0x2, 0xf0, 0x0,
0x0, 0x0, 0xc6, 0x0, 0x0, 0x0, 0x6c, 0x0,
0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0xa, 0x70,
0x0, 0x0, 0x4, 0xd0, 0x0, 0x0, 0x0, 0xe3,
/* U+005D "]" */
0x4f, 0xff, 0x90, 0x22, 0xa9, 0x0, 0x8, 0x90,
0x0, 0x89, 0x0, 0x8, 0x90, 0x0, 0x89, 0x0,
0x8, 0x90, 0x0, 0x89, 0x0, 0x8, 0x90, 0x0,
0x89, 0x0, 0x8, 0x90, 0x0, 0x89, 0x0, 0x8,
0x90, 0x0, 0x89, 0x0, 0x8, 0x94, 0xff, 0xf9,
0x2, 0x22, 0x10,
/* U+005E "^" */
0x0, 0xa, 0xe0, 0x0, 0x0, 0x1f, 0xc6, 0x0,
0x0, 0x89, 0x4d, 0x0, 0x0, 0xe2, 0xd, 0x40,
0x6, 0xb0, 0x6, 0xa0, 0xd, 0x30, 0x0, 0xe1,
/* U+005F "_" */
0xff, 0xff, 0xff, 0xff, 0x22, 0x22, 0x22, 0x22,
/* U+0060 "`" */
0x56, 0x0, 0x1e, 0x30, 0x2, 0xc0,
/* U+0061 "a" */
0x0, 0x9e, 0xfd, 0x70, 0xb, 0xd5, 0x24, 0xd7,
0x4, 0x10, 0x0, 0x6d, 0x0, 0x7c, 0xee, 0xef,
0xb, 0xd4, 0x21, 0x6f, 0x2f, 0x20, 0x0, 0x7f,
0x4f, 0x0, 0x0, 0xdf, 0x1f, 0x92, 0x3c, 0xaf,
0x4, 0xdf, 0xd5, 0x3f,
/* U+0062 "b" */
0xf, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x0, 0x0,
0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x7d,
0xe9, 0x0, 0xf, 0xb9, 0x34, 0xdc, 0x0, 0xfb,
0x0, 0x1, 0xf5, 0xf, 0x50, 0x0, 0xb, 0x90,
0xf3, 0x0, 0x0, 0xaa, 0xf, 0x50, 0x0, 0xb,
0x90, 0xfa, 0x0, 0x1, 0xf5, 0xf, 0xc8, 0x24,
0xcc, 0x0, 0xf3, 0x9e, 0xe9, 0x0,
/* U+0063 "c" */
0x0, 0x5c, 0xfd, 0x80, 0x0, 0x6f, 0x73, 0x6e,
0x90, 0xe, 0x70, 0x0, 0x6f, 0x3, 0xf1, 0x0,
0x0, 0x10, 0x4f, 0x0, 0x0, 0x0, 0x3, 0xf1,
0x0, 0x0, 0x50, 0xe, 0x60, 0x0, 0x4f, 0x0,
0x7f, 0x62, 0x5e, 0x80, 0x0, 0x6c, 0xfd, 0x70,
0x0,
/* U+0064 "d" */
0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x0,
0xe6, 0x0, 0x0, 0x0, 0xe, 0x60, 0x6, 0xce,
0xa1, 0xe6, 0x6, 0xf6, 0x25, 0xbe, 0x60, 0xe6,
0x0, 0x5, 0xf6, 0x3f, 0x10, 0x0, 0xf, 0x64,
0xf0, 0x0, 0x0, 0xe6, 0x3f, 0x10, 0x0, 0xf,
0x60, 0xe6, 0x0, 0x4, 0xf6, 0x6, 0xf6, 0x25,
0xde, 0x60, 0x6, 0xcf, 0xb3, 0xc6,
/* U+0065 "e" */
0x0, 0x6c, 0xfc, 0x50, 0x0, 0x7e, 0x63, 0x6e,
0x50, 0x1f, 0x50, 0x0, 0x6d, 0x5, 0xf0, 0x0,
0x1, 0xf2, 0x7f, 0xee, 0xee, 0xef, 0x45, 0xe1,
0x11, 0x11, 0x10, 0x2f, 0x30, 0x0, 0x4c, 0x0,
0x8e, 0x52, 0x6e, 0x80, 0x0, 0x7d, 0xfd, 0x60,
0x0,
/* U+0066 "f" */
0x0, 0x3d, 0xfe, 0x0, 0xbb, 0x32, 0x0, 0xd7,
0x0, 0xef, 0xff, 0xfc, 0x22, 0xd8, 0x21, 0x0,
0xd6, 0x0, 0x0, 0xd6, 0x0, 0x0, 0xd6, 0x0,
0x0, 0xd6, 0x0, 0x0, 0xd6, 0x0, 0x0, 0xd6,
0x0, 0x0, 0xd6, 0x0,
/* U+0067 "g" */
0x0, 0x5c, 0xeb, 0x2c, 0x70, 0x6f, 0x72, 0x5c,
0xe7, 0xe, 0x70, 0x0, 0x4f, 0x73, 0xf1, 0x0,
0x0, 0xe7, 0x4f, 0x0, 0x0, 0xd, 0x73, 0xf1,
0x0, 0x0, 0xe7, 0xe, 0x60, 0x0, 0x4f, 0x70,
0x6f, 0x63, 0x5c, 0xd7, 0x0, 0x6c, 0xeb, 0x2d,
0x60, 0x42, 0x0, 0x0, 0xf3, 0xa, 0xe4, 0x23,
0xbc, 0x0, 0x8, 0xef, 0xe9, 0x10,
/* U+0068 "h" */
0xf, 0x40, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0,
0xf, 0x40, 0x0, 0x0, 0xf, 0x48, 0xee, 0x80,
0xf, 0xc7, 0x36, 0xf7, 0xf, 0x90, 0x0, 0x9c,
0xf, 0x50, 0x0, 0x6e, 0xf, 0x40, 0x0, 0x5e,
0xf, 0x40, 0x0, 0x5e, 0xf, 0x40, 0x0, 0x5e,
0xf, 0x40, 0x0, 0x5e, 0xf, 0x40, 0x0, 0x5e,
/* U+0069 "i" */
0xab, 0xa, 0xc0, 0x0, 0x9, 0xa0, 0x9a, 0x9,
0xa0, 0x9a, 0x9, 0xa0, 0x9a, 0x9, 0xa0, 0x9a,
0x9, 0xa0,
/* U+006A "j" */
0x0, 0x7d, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x0,
0x6, 0xd0, 0x0, 0x6d, 0x0, 0x6, 0xd0, 0x0,
0x6d, 0x0, 0x6, 0xd0, 0x0, 0x6d, 0x0, 0x6,
0xd0, 0x0, 0x6d, 0x0, 0x6, 0xd0, 0x0, 0x7d,
0x0, 0x3c, 0xb0, 0x3f, 0xd2, 0x0,
/* U+006B "k" */
0xf, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x0, 0x0,
0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x0,
0x2e, 0x90, 0xf, 0x40, 0x2e, 0x90, 0x0, 0xf4,
0x2e, 0x90, 0x0, 0xf, 0x6e, 0xb0, 0x0, 0x0,
0xff, 0xcf, 0x20, 0x0, 0xf, 0x90, 0xbd, 0x0,
0x0, 0xf4, 0x1, 0xe9, 0x0, 0xf, 0x40, 0x4,
0xf5, 0x0, 0xf4, 0x0, 0x8, 0xf2,
/* U+006C "l" */
0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
0xb8, 0xb8, 0xb8, 0xb8,
/* U+006D "m" */
0xf, 0x5a, 0xec, 0x40, 0x9e, 0xd6, 0x0, 0xfe,
0x63, 0x9e, 0xa7, 0x37, 0xf4, 0xf, 0x80, 0x0,
0xeb, 0x0, 0xb, 0x90, 0xf4, 0x0, 0xc, 0x80,
0x0, 0x9a, 0xf, 0x40, 0x0, 0xc7, 0x0, 0x9,
0xa0, 0xf4, 0x0, 0xc, 0x70, 0x0, 0x9a, 0xf,
0x40, 0x0, 0xc7, 0x0, 0x9, 0xa0, 0xf4, 0x0,
0xc, 0x70, 0x0, 0x9a, 0xf, 0x40, 0x0, 0xc7,
0x0, 0x9, 0xa0,
/* U+006E "n" */
0xf, 0x49, 0xee, 0x80, 0xf, 0xd7, 0x36, 0xf7,
0xf, 0x90, 0x0, 0x8c, 0xf, 0x50, 0x0, 0x5e,
0xf, 0x40, 0x0, 0x5f, 0xf, 0x40, 0x0, 0x5f,
0xf, 0x40, 0x0, 0x5f, 0xf, 0x40, 0x0, 0x5f,
0xf, 0x40, 0x0, 0x5f,
/* U+006F "o" */
0x0, 0x4c, 0xfd, 0x80, 0x0, 0x5f, 0x73, 0x5d,
0xb0, 0xe, 0x70, 0x0, 0x2f, 0x42, 0xf1, 0x0,
0x0, 0xb8, 0x4f, 0x0, 0x0, 0xa, 0xa2, 0xf1,
0x0, 0x0, 0xb8, 0xe, 0x70, 0x0, 0x2f, 0x40,
0x5f, 0x72, 0x4d, 0xb0, 0x0, 0x4c, 0xfd, 0x80,
0x0,
/* U+0070 "p" */
0xf, 0x39, 0xee, 0x90, 0x0, 0xfc, 0x93, 0x4d,
0xc0, 0xf, 0xa0, 0x0, 0x1f, 0x50, 0xf5, 0x0,
0x0, 0xb9, 0xf, 0x30, 0x0, 0xa, 0xa0, 0xf5,
0x0, 0x0, 0xb9, 0xf, 0xa0, 0x0, 0x1f, 0x50,
0xfb, 0x82, 0x4c, 0xc0, 0xf, 0x47, 0xde, 0xa0,
0x0, 0xf4, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0,
0x0, 0x0, 0xf4, 0x0, 0x0, 0x0,
/* U+0071 "q" */
0x0, 0x6c, 0xfb, 0x2c, 0x60, 0x6f, 0x62, 0x5d,
0xe6, 0xe, 0x60, 0x0, 0x4f, 0x63, 0xf1, 0x0,
0x0, 0xf6, 0x4f, 0x0, 0x0, 0xe, 0x63, 0xf1,
0x0, 0x0, 0xf6, 0xe, 0x60, 0x0, 0x4f, 0x60,
0x7f, 0x62, 0x5b, 0xe6, 0x0, 0x6d, 0xea, 0x1e,
0x60, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0,
0xe, 0x60, 0x0, 0x0, 0x0, 0xe6,
/* U+0072 "r" */
0xf, 0x4a, 0xfc, 0xf, 0xcc, 0x66, 0xf, 0xc0,
0x0, 0xf, 0x60, 0x0, 0xf, 0x40, 0x0, 0xf,
0x30, 0x0, 0xf, 0x30, 0x0, 0xf, 0x30, 0x0,
0xf, 0x30, 0x0,
/* U+0073 "s" */
0x3, 0xbf, 0xeb, 0x20, 0x1f, 0x93, 0x4b, 0xe0,
0x3f, 0x10, 0x1, 0xa2, 0xc, 0xd7, 0x20, 0x0,
0x0, 0x6b, 0xfd, 0x50, 0x0, 0x0, 0x6, 0xf4,
0x5d, 0x0, 0x0, 0xd8, 0x1e, 0x92, 0x27, 0xf4,
0x3, 0xbe, 0xfd, 0x60,
/* U+0074 "t" */
0x0, 0x82, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xf3,
0x0, 0xbf, 0xff, 0xf3, 0x13, 0xf5, 0x20, 0x0,
0xf3, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xf3, 0x0,
0x0, 0xf3, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xe7,
0x20, 0x0, 0x7f, 0xf0,
/* U+0075 "u" */
0xf, 0x40, 0x0, 0x4f, 0xf, 0x40, 0x0, 0x4f,
0xf, 0x40, 0x0, 0x4f, 0xf, 0x40, 0x0, 0x4f,
0xf, 0x40, 0x0, 0x4f, 0xf, 0x40, 0x0, 0x5f,
0xe, 0x70, 0x0, 0xbf, 0x9, 0xe5, 0x39, 0xdf,
0x0, 0x9e, 0xd8, 0x5f,
/* U+0076 "v" */
0xba, 0x0, 0x0, 0xe7, 0x6f, 0x0, 0x4, 0xf1,
0x1f, 0x40, 0x9, 0xc0, 0xb, 0xa0, 0xe, 0x60,
0x5, 0xe0, 0x3f, 0x10, 0x0, 0xf4, 0x9b, 0x0,
0x0, 0xa9, 0xe5, 0x0, 0x0, 0x5f, 0xf0, 0x0,
0x0, 0xf, 0xa0, 0x0,
/* U+0077 "w" */
0xc9, 0x0, 0xb, 0xc0, 0x0, 0x8d, 0x7e, 0x0,
0xf, 0xf0, 0x0, 0xd8, 0x2f, 0x20, 0x3d, 0xc4,
0x1, 0xf3, 0xd, 0x70, 0x79, 0x78, 0x6, 0xe0,
0x8, 0xb0, 0xb4, 0x3d, 0xa, 0x90, 0x3, 0xf1,
0xf0, 0xf, 0x1e, 0x40, 0x0, 0xe9, 0xc0, 0xb,
0x9f, 0x0, 0x0, 0x9f, 0x70, 0x6, 0xfa, 0x0,
0x0, 0x4f, 0x30, 0x2, 0xf5, 0x0,
/* U+0078 "x" */
0x3f, 0x40, 0x2, 0xf5, 0x0, 0x8e, 0x0, 0xca,
0x0, 0x0, 0xd9, 0x7e, 0x10, 0x0, 0x2, 0xff,
0x40, 0x0, 0x0, 0xd, 0xe1, 0x0, 0x0, 0x8,
0xdc, 0xa0, 0x0, 0x3, 0xf4, 0x2f, 0x50, 0x0,
0xd9, 0x0, 0x7e, 0x10, 0x9e, 0x0, 0x0, 0xcb,
0x0,
/* U+0079 "y" */
0xba, 0x0, 0x0, 0xba, 0x5f, 0x0, 0x1, 0xf4,
0xe, 0x60, 0x7, 0xe0, 0x9, 0xc0, 0xc, 0x80,
0x2, 0xf2, 0x2f, 0x20, 0x0, 0xc8, 0x8c, 0x0,
0x0, 0x6d, 0xd6, 0x0, 0x0, 0xf, 0xf0, 0x0,
0x0, 0xb, 0xa0, 0x0, 0x0, 0x1f, 0x40, 0x0,
0x0, 0x7e, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0,
/* U+007A "z" */
0x6f, 0xff, 0xff, 0xf2, 0x2, 0x22, 0x2d, 0xb0,
0x0, 0x0, 0x8e, 0x10, 0x0, 0x4, 0xf4, 0x0,
0x0, 0x1e, 0x80, 0x0, 0x0, 0xbc, 0x0, 0x0,
0x7, 0xe2, 0x0, 0x0, 0x3f, 0x72, 0x22, 0x20,
0x9f, 0xff, 0xff, 0xf6,
/* U+007B "{" */
0x0, 0x4d, 0xe0, 0xe, 0x72, 0x1, 0xf1, 0x0,
0x2f, 0x0, 0x2, 0xf0, 0x0, 0x2f, 0x0, 0x3,
0xf0, 0x0, 0x8b, 0x0, 0xaf, 0x10, 0x2, 0xab,
0x0, 0x3, 0xf0, 0x0, 0x2f, 0x0, 0x2, 0xf0,
0x0, 0x2f, 0x0, 0x0, 0xf4, 0x0, 0x8, 0xfe,
0x0, 0x0, 0x10,
/* U+007C "|" */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1,
/* U+007D "}" */
0x9e, 0x80, 0x1, 0x4f, 0x40, 0x0, 0xb7, 0x0,
0xb, 0x70, 0x0, 0xb7, 0x0, 0xb, 0x70, 0x0,
0xa8, 0x0, 0x6, 0xc1, 0x0, 0xb, 0xf0, 0x5,
0xd4, 0x0, 0xa8, 0x0, 0xb, 0x70, 0x0, 0xb7,
0x0, 0xb, 0x70, 0x1, 0xe6, 0x9, 0xfc, 0x0,
0x11, 0x0, 0x0,
/* U+007E "~" */
0x1a, 0xea, 0x40, 0x54, 0x57, 0x16, 0xdf, 0xd2,
0x0, 0x0, 0x1, 0x0,
/* U+007F "" */
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 85, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 85, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 18, .adv_w = 109, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 31, .adv_w = 154, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 91, .adv_w = 154, .box_w = 9, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 163, .adv_w = 248, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 247, .adv_w = 186, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 319, .adv_w = 62, .box_w = 2, .box_h = 5, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 324, .adv_w = 85, .box_w = 5, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 364, .adv_w = 85, .box_w = 5, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 404, .adv_w = 130, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 436, .adv_w = 155, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 477, .adv_w = 68, .box_w = 3, .box_h = 6, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 486, .adv_w = 155, .box_w = 9, .box_h = 2, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 495, .adv_w = 68, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 500, .adv_w = 128, .box_w = 8, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 564, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 618, .adv_w = 103, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 648, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 702, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 756, .adv_w = 154, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 816, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 870, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 924, .adv_w = 140, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 978, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1032, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1086, .adv_w = 68, .box_w = 3, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1100, .adv_w = 68, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 1118, .adv_w = 155, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1159, .adv_w = 155, .box_w = 9, .box_h = 5, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 1182, .adv_w = 155, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1223, .adv_w = 137, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1271, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1349, .adv_w = 168, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1415, .adv_w = 173, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1475, .adv_w = 186, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1541, .adv_w = 181, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1601, .adv_w = 163, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1655, .adv_w = 148, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1703, .adv_w = 191, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1769, .adv_w = 184, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1829, .adv_w = 61, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1841, .adv_w = 132, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1889, .adv_w = 177, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1955, .adv_w = 151, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2009, .adv_w = 226, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2081, .adv_w = 184, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2141, .adv_w = 196, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2213, .adv_w = 164, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2267, .adv_w = 196, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 2345, .adv_w = 173, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2405, .adv_w = 162, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2465, .adv_w = 158, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2525, .adv_w = 183, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2585, .adv_w = 164, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2651, .adv_w = 238, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2741, .adv_w = 163, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2807, .adv_w = 169, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2873, .adv_w = 160, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2933, .adv_w = 85, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2976, .adv_w = 128, .box_w = 8, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3040, .adv_w = 85, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3083, .adv_w = 133, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 6},
{.bitmap_index = 3107, .adv_w = 128, .box_w = 8, .box_h = 2, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3115, .adv_w = 85, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = 10},
{.bitmap_index = 3121, .adv_w = 143, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3157, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3211, .adv_w = 140, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3252, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3306, .adv_w = 142, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3347, .adv_w = 95, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3383, .adv_w = 151, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3437, .adv_w = 142, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3485, .adv_w = 66, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 3503, .adv_w = 68, .box_w = 5, .box_h = 15, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 3541, .adv_w = 135, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3595, .adv_w = 60, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 3607, .adv_w = 219, .box_w = 13, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3666, .adv_w = 143, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3702, .adv_w = 150, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3743, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3797, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3851, .adv_w = 93, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3878, .adv_w = 129, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3914, .adv_w = 91, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3950, .adv_w = 143, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3986, .adv_w = 123, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4022, .adv_w = 193, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4076, .adv_w = 130, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4117, .adv_w = 127, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4165, .adv_w = 125, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4201, .adv_w = 85, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4244, .adv_w = 50, .box_w = 2, .box_h = 17, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 4261, .adv_w = 85, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4304, .adv_w = 128, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 4316, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 96, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
const lv_font_t ui_font_PingFangEN16 = {
#else
lv_font_t ui_font_PingFangEN16 = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 18, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -2,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if UI_FONT_PINGFANGEN16*/
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,233 @@
// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.2.3
// LVGL version: 8.3.4
// Project name: box_reset_mode
#include "ui.h"
#include "ui_helpers.h"
///////////////////// VARIABLES ////////////////////
void sleep_body_up_down_Animation( lv_obj_t *TargetObject, int delay);
void listen_eye_blink_Animation( lv_obj_t *TargetObject, int delay);
void listen_eye_screen_move_Animation( lv_obj_t *TargetObject, int delay);
void get_eye_blink_Animation( lv_obj_t *TargetObject, int delay);
lv_obj_t *ui_ScreenSetup;
lv_obj_t *ui_ImageSetupTextBg;
lv_obj_t *ui_PanelSetupSteps;
lv_obj_t *ui_LabelSetupStepContent;
lv_obj_t *ui_LabelSetupStepTile;
void ui_event_ButtonSetup( lv_event_t * e);
lv_obj_t *ui_ButtonSetup;
lv_obj_t *ui_LabelSetupBtn;
lv_obj_t *ui____initial_actions0;
///////////////////// TEST LVGL SETTINGS ////////////////////
#if LV_COLOR_DEPTH != 16
#error "LV_COLOR_DEPTH should be 16bit to match SquareLine Studio's settings"
#endif
#if LV_COLOR_16_SWAP !=1
#error "LV_COLOR_16_SWAP should be 1 to match SquareLine Studio's settings"
#endif
///////////////////// ANIMATIONS ////////////////////
void sleep_body_up_down_Animation( lv_obj_t *TargetObject, int delay)
{
ui_anim_user_data_t *PropertyAnimation_0_user_data = lv_mem_alloc(sizeof(ui_anim_user_data_t));
PropertyAnimation_0_user_data->target = TargetObject;
PropertyAnimation_0_user_data->val = -1;
lv_anim_t PropertyAnimation_0;
lv_anim_init(&PropertyAnimation_0);
lv_anim_set_time(&PropertyAnimation_0, 1000);
lv_anim_set_user_data(&PropertyAnimation_0, PropertyAnimation_0_user_data);
lv_anim_set_custom_exec_cb(&PropertyAnimation_0, _ui_anim_callback_set_y );
lv_anim_set_values(&PropertyAnimation_0, 0, -20 );
lv_anim_set_path_cb( &PropertyAnimation_0, lv_anim_path_linear);
lv_anim_set_delay( &PropertyAnimation_0, delay + 0 );
lv_anim_set_deleted_cb( &PropertyAnimation_0, _ui_anim_callback_free_user_data );
lv_anim_set_playback_time(&PropertyAnimation_0, 1000);
lv_anim_set_playback_delay(&PropertyAnimation_0, 0);
lv_anim_set_repeat_count(&PropertyAnimation_0, LV_ANIM_REPEAT_INFINITE );
lv_anim_set_repeat_delay(&PropertyAnimation_0, 0);
lv_anim_set_early_apply( &PropertyAnimation_0, false );
lv_anim_set_get_value_cb(&PropertyAnimation_0, &_ui_anim_callback_get_y );
lv_anim_start(&PropertyAnimation_0);
}
void listen_eye_blink_Animation( lv_obj_t *TargetObject, int delay)
{
ui_anim_user_data_t *PropertyAnimation_0_user_data = lv_mem_alloc(sizeof(ui_anim_user_data_t));
PropertyAnimation_0_user_data->target = TargetObject;
PropertyAnimation_0_user_data->val = -1;
lv_anim_t PropertyAnimation_0;
lv_anim_init(&PropertyAnimation_0);
lv_anim_set_time(&PropertyAnimation_0, 100);
lv_anim_set_user_data(&PropertyAnimation_0, PropertyAnimation_0_user_data);
lv_anim_set_custom_exec_cb(&PropertyAnimation_0, _ui_anim_callback_set_height );
lv_anim_set_values(&PropertyAnimation_0, 0, -10 );
lv_anim_set_path_cb( &PropertyAnimation_0, lv_anim_path_linear);
lv_anim_set_delay( &PropertyAnimation_0, delay + 1800 );
lv_anim_set_deleted_cb( &PropertyAnimation_0, _ui_anim_callback_free_user_data );
lv_anim_set_playback_time(&PropertyAnimation_0, 100);
lv_anim_set_playback_delay(&PropertyAnimation_0, 0);
lv_anim_set_repeat_count(&PropertyAnimation_0, LV_ANIM_REPEAT_INFINITE );
lv_anim_set_repeat_delay(&PropertyAnimation_0, 2100);
lv_anim_set_early_apply( &PropertyAnimation_0, false );
lv_anim_set_get_value_cb(&PropertyAnimation_0, &_ui_anim_callback_get_height );
lv_anim_start(&PropertyAnimation_0);
}
void listen_eye_screen_move_Animation( lv_obj_t *TargetObject, int delay)
{
ui_anim_user_data_t *PropertyAnimation_0_user_data = lv_mem_alloc(sizeof(ui_anim_user_data_t));
PropertyAnimation_0_user_data->target = TargetObject;
PropertyAnimation_0_user_data->val = -1;
lv_anim_t PropertyAnimation_0;
lv_anim_init(&PropertyAnimation_0);
lv_anim_set_time(&PropertyAnimation_0, 300);
lv_anim_set_user_data(&PropertyAnimation_0, PropertyAnimation_0_user_data);
lv_anim_set_custom_exec_cb(&PropertyAnimation_0, _ui_anim_callback_set_x );
lv_anim_set_values(&PropertyAnimation_0, 0, -20 );
lv_anim_set_path_cb( &PropertyAnimation_0, lv_anim_path_linear);
lv_anim_set_delay( &PropertyAnimation_0, delay + 0 );
lv_anim_set_deleted_cb( &PropertyAnimation_0, _ui_anim_callback_free_user_data );
lv_anim_set_playback_time(&PropertyAnimation_0, 300);
lv_anim_set_playback_delay(&PropertyAnimation_0, 2000);
lv_anim_set_repeat_count(&PropertyAnimation_0, LV_ANIM_REPEAT_INFINITE );
lv_anim_set_repeat_delay(&PropertyAnimation_0, 2000);
lv_anim_set_early_apply( &PropertyAnimation_0, false );
lv_anim_set_get_value_cb(&PropertyAnimation_0, &_ui_anim_callback_get_x );
lv_anim_start(&PropertyAnimation_0);
}
void get_eye_blink_Animation( lv_obj_t *TargetObject, int delay)
{
ui_anim_user_data_t *PropertyAnimation_0_user_data = lv_mem_alloc(sizeof(ui_anim_user_data_t));
PropertyAnimation_0_user_data->target = TargetObject;
PropertyAnimation_0_user_data->val = -1;
lv_anim_t PropertyAnimation_0;
lv_anim_init(&PropertyAnimation_0);
lv_anim_set_time(&PropertyAnimation_0, 100);
lv_anim_set_user_data(&PropertyAnimation_0, PropertyAnimation_0_user_data);
lv_anim_set_custom_exec_cb(&PropertyAnimation_0, _ui_anim_callback_set_height );
lv_anim_set_values(&PropertyAnimation_0, 0, -10 );
lv_anim_set_path_cb( &PropertyAnimation_0, lv_anim_path_linear);
lv_anim_set_delay( &PropertyAnimation_0, delay + 0 );
lv_anim_set_deleted_cb( &PropertyAnimation_0, _ui_anim_callback_free_user_data );
lv_anim_set_playback_time(&PropertyAnimation_0, 100);
lv_anim_set_playback_delay(&PropertyAnimation_0, 0);
lv_anim_set_repeat_count(&PropertyAnimation_0, LV_ANIM_REPEAT_INFINITE );
lv_anim_set_repeat_delay(&PropertyAnimation_0, 1000);
lv_anim_set_early_apply( &PropertyAnimation_0, false );
lv_anim_set_get_value_cb(&PropertyAnimation_0, &_ui_anim_callback_get_height );
lv_anim_start(&PropertyAnimation_0);
}
///////////////////// FUNCTIONS ////////////////////
void ui_event_ButtonSetup( lv_event_t * e) {
lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
if ( event_code == LV_EVENT_CLICKED) {
EventBtnSetupClick( e );
}
}
///////////////////// SCREENS ////////////////////
void ui_ScreenSetup_screen_init(void)
{
ui_ScreenSetup = lv_obj_create(NULL);
lv_obj_clear_flag( ui_ScreenSetup, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
lv_obj_set_style_bg_img_src( ui_ScreenSetup, &ui_img_setup_bg_png, LV_PART_MAIN | LV_STATE_DEFAULT );
ui_ImageSetupTextBg = lv_img_create(ui_ScreenSetup);
lv_img_set_src(ui_ImageSetupTextBg, &ui_img_setup_text_bg_png);
lv_obj_set_width( ui_ImageSetupTextBg, 320);
lv_obj_set_height( ui_ImageSetupTextBg, 240);
lv_obj_set_align( ui_ImageSetupTextBg, LV_ALIGN_CENTER );
lv_obj_add_flag( ui_ImageSetupTextBg, LV_OBJ_FLAG_ADV_HITTEST ); /// Flags
lv_obj_clear_flag( ui_ImageSetupTextBg, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
lv_img_set_zoom(ui_ImageSetupTextBg,560);
ui_PanelSetupSteps = lv_obj_create(ui_ScreenSetup);
lv_obj_set_width( ui_PanelSetupSteps, 320);
lv_obj_set_height( ui_PanelSetupSteps, 240);
lv_obj_set_x( ui_PanelSetupSteps, -1 );
lv_obj_set_y( ui_PanelSetupSteps, -2 );
lv_obj_clear_flag( ui_PanelSetupSteps, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
lv_obj_set_style_radius(ui_PanelSetupSteps, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_PanelSetupSteps, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_bg_opa(ui_PanelSetupSteps, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_border_width(ui_PanelSetupSteps, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(ui_PanelSetupSteps, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(ui_PanelSetupSteps, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(ui_PanelSetupSteps, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(ui_PanelSetupSteps, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_border_width(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
lv_obj_set_style_outline_width(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
lv_obj_set_style_outline_pad(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
lv_obj_set_style_pad_row(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
lv_obj_set_style_pad_column(ui_PanelSetupSteps, 0, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
ui_LabelSetupStepContent = lv_label_create(ui_PanelSetupSteps);
lv_obj_set_width( ui_LabelSetupStepContent, lv_pct(88));
lv_obj_set_height( ui_LabelSetupStepContent, lv_pct(61));
lv_obj_set_x( ui_LabelSetupStepContent, lv_pct(0) );
lv_obj_set_y( ui_LabelSetupStepContent, lv_pct(20) );
lv_obj_set_align( ui_LabelSetupStepContent, LV_ALIGN_TOP_MID );
lv_label_set_text(ui_LabelSetupStepContent,"1. Connect ESP-Box to PC.\n2. Open \"ESP-Box\" folder.\n3. Edit \"init.config\" file with Wi-Fi SSID, password, and OpenAI key.\n4. Save the file.\n5. Restart the device.");
lv_obj_set_style_text_color(ui_LabelSetupStepContent, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_text_opa(ui_LabelSetupStepContent, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_letter_space(ui_LabelSetupStepContent, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_line_space(ui_LabelSetupStepContent, 5, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelSetupStepContent, &ui_font_PingFangEN14, LV_PART_MAIN| LV_STATE_DEFAULT);
ui_LabelSetupStepTile = lv_label_create(ui_PanelSetupSteps);
lv_obj_set_width( ui_LabelSetupStepTile, 230);
lv_obj_set_height( ui_LabelSetupStepTile, LV_SIZE_CONTENT); /// 140
lv_obj_set_x( ui_LabelSetupStepTile, 45 );
lv_obj_set_y( ui_LabelSetupStepTile, 15 );
lv_label_set_text(ui_LabelSetupStepTile,"Steps");
lv_obj_set_style_text_color(ui_LabelSetupStepTile, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_text_opa(ui_LabelSetupStepTile, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_align(ui_LabelSetupStepTile, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelSetupStepTile, &ui_font_PingFangEN20, LV_PART_MAIN| LV_STATE_DEFAULT);
ui_ButtonSetup = lv_btn_create(ui_PanelSetupSteps);
lv_obj_set_width( ui_ButtonSetup, 72);
lv_obj_set_height( ui_ButtonSetup, 24);
lv_obj_set_x( ui_ButtonSetup, 0 );
lv_obj_set_y( ui_ButtonSetup, -20 );
lv_obj_set_align( ui_ButtonSetup, LV_ALIGN_BOTTOM_MID );
lv_obj_add_flag( ui_ButtonSetup, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
lv_obj_clear_flag( ui_ButtonSetup, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
lv_obj_set_style_radius(ui_ButtonSetup, 17, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_ButtonSetup, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_bg_opa(ui_ButtonSetup, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
ui_LabelSetupBtn = lv_label_create(ui_ButtonSetup);
lv_obj_set_width( ui_LabelSetupBtn, LV_SIZE_CONTENT); /// 1
lv_obj_set_height( ui_LabelSetupBtn, LV_SIZE_CONTENT); /// 1
lv_obj_set_align( ui_LabelSetupBtn, LV_ALIGN_CENTER );
lv_label_set_text(ui_LabelSetupBtn,"Restart");
lv_obj_set_style_text_color(ui_LabelSetupBtn, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT );
lv_obj_set_style_text_opa(ui_LabelSetupBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_align(ui_LabelSetupBtn, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelSetupBtn, &ui_font_PingFangEN16, LV_PART_MAIN| LV_STATE_DEFAULT);
lv_obj_add_event_cb(ui_ButtonSetup, ui_event_ButtonSetup, LV_EVENT_ALL, NULL);
}
void ui_init( void )
{
lv_disp_t *dispp = lv_disp_get_default();
lv_theme_t *theme = lv_theme_default_init(dispp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), false, LV_FONT_DEFAULT);
lv_disp_set_theme(dispp, theme);
ui_ScreenSetup_screen_init();
ui____initial_actions0 = lv_obj_create(NULL);
lv_disp_load_scr( ui_ScreenSetup);
}
@@ -0,0 +1,46 @@
// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.2.3
// LVGL version: 8.3.4
// Project name: box_reset_mode
#ifndef _BOX_RESET_MODE_UI_H
#define _BOX_RESET_MODE_UI_H
#ifdef __cplusplus
extern "C" {
#endif
#include "lvgl.h"
#include "ui_events.h"
void sleep_body_up_down_Animation( lv_obj_t *TargetObject, int delay);
void listen_eye_blink_Animation( lv_obj_t *TargetObject, int delay);
void listen_eye_screen_move_Animation( lv_obj_t *TargetObject, int delay);
void get_eye_blink_Animation( lv_obj_t *TargetObject, int delay);
extern lv_obj_t *ui_ScreenSetup;
extern lv_obj_t *ui_ImageSetupTextBg;
extern lv_obj_t *ui_PanelSetupSteps;
extern lv_obj_t *ui_LabelSetupStepContent;
extern lv_obj_t *ui_LabelSetupStepTile;
void ui_event_ButtonSetup( lv_event_t * e);
extern lv_obj_t *ui_ButtonSetup;
extern lv_obj_t *ui_LabelSetupBtn;
extern lv_obj_t *ui____initial_actions0;
LV_IMG_DECLARE( ui_img_setup_bg_png); // assets\setup_bg.png
LV_IMG_DECLARE( ui_img_setup_text_bg_png); // assets\setup_text_bg.png
LV_FONT_DECLARE( ui_font_PingFangEN14);
LV_FONT_DECLARE( ui_font_PingFangEN16);
LV_FONT_DECLARE( ui_font_PingFangEN20);
void ui_init(void);
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif
@@ -0,0 +1,19 @@
// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.2.3
// LVGL version: 8.3.4
// Project name: box_reset_mode
#ifndef _UI_EVENTS_H
#define _UI_EVENTS_H
#ifdef __cplusplus
extern "C" {
#endif
void EventBtnSetupClick(lv_event_t * e);
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif
@@ -0,0 +1,232 @@
// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.2.3
// LVGL version: 8.3.4
// Project name: box_reset_mode
#include "ui_helpers.h"
void _ui_bar_set_property( lv_obj_t *target, int id, int val)
{
if (id == _UI_BAR_PROPERTY_VALUE_WITH_ANIM) lv_bar_set_value(target, val, LV_ANIM_ON);
if (id == _UI_BAR_PROPERTY_VALUE) lv_bar_set_value(target, val, LV_ANIM_OFF);
}
void _ui_basic_set_property( lv_obj_t *target, int id, int val)
{
if (id == _UI_BASIC_PROPERTY_POSITION_X) lv_obj_set_x(target, val);
if (id == _UI_BASIC_PROPERTY_POSITION_Y) lv_obj_set_y(target, val);
if (id == _UI_BASIC_PROPERTY_WIDTH) lv_obj_set_width(target, val);
if (id == _UI_BASIC_PROPERTY_HEIGHT) lv_obj_set_height(target, val);
}
void _ui_dropdown_set_property( lv_obj_t *target, int id, int val)
{
if (id == _UI_DROPDOWN_PROPERTY_SELECTED) lv_dropdown_set_selected(target, val);
}
void _ui_image_set_property( lv_obj_t *target, int id, uint8_t *val)
{
if (id == _UI_IMAGE_PROPERTY_IMAGE) lv_img_set_src(target, val);
}
void _ui_label_set_property( lv_obj_t *target, int id, char *val)
{
if (id == _UI_LABEL_PROPERTY_TEXT) lv_label_set_text(target, val);
}
void _ui_roller_set_property( lv_obj_t *target, int id, int val)
{
if (id == _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM) lv_roller_set_selected(target, val, LV_ANIM_ON);
if (id == _UI_ROLLER_PROPERTY_SELECTED) lv_roller_set_selected(target, val, LV_ANIM_OFF);
}
void _ui_slider_set_property( lv_obj_t *target, int id, int val)
{
if (id == _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM) lv_slider_set_value(target, val, LV_ANIM_ON);
if (id == _UI_SLIDER_PROPERTY_VALUE) lv_slider_set_value(target, val, LV_ANIM_OFF);
}
void _ui_screen_change( lv_obj_t *target, lv_scr_load_anim_t fademode, int spd, int delay)
{
lv_scr_load_anim(target, fademode, spd, delay, false);
}
void _ui_arc_increment( lv_obj_t *target, int val)
{
int old = lv_arc_get_value(target);
lv_arc_set_value(target, old+val);
lv_event_send(target,LV_EVENT_VALUE_CHANGED, 0);
}
void _ui_bar_increment( lv_obj_t *target, int val, int anm)
{
int old = lv_bar_get_value(target);
lv_bar_set_value(target, old+val, anm);
}
void _ui_slider_increment( lv_obj_t *target, int val, int anm)
{
int old = lv_slider_get_value(target);
lv_slider_set_value(target, old+val, anm);
lv_event_send(target,LV_EVENT_VALUE_CHANGED, 0);
}
void _ui_keyboard_set_target( lv_obj_t *keyboard, lv_obj_t *textarea)
{
lv_keyboard_set_textarea(keyboard, textarea);
}
void _ui_flag_modify( lv_obj_t *target, int32_t flag, int value)
{
if (value==_UI_MODIFY_FLAG_TOGGLE)
{
if ( lv_obj_has_flag(target,flag) ) lv_obj_clear_flag(target,flag);
else lv_obj_add_flag(target,flag);
}
else if (value==_UI_MODIFY_FLAG_ADD) lv_obj_add_flag(target,flag);
else lv_obj_clear_flag(target,flag);
}
void _ui_state_modify( lv_obj_t *target, int32_t state, int value)
{
if (value==_UI_MODIFY_STATE_TOGGLE)
{
if ( lv_obj_has_state(target,state) ) lv_obj_clear_state(target,state);
else lv_obj_add_state(target,state);
}
else if (value==_UI_MODIFY_STATE_ADD) lv_obj_add_state(target,state);
else lv_obj_clear_state(target,state);
}
void _ui_opacity_set( lv_obj_t *target, int val)
{
lv_obj_set_style_opa(target, val, 0);
}
void _ui_anim_callback_free_user_data(lv_anim_t *a)
{
lv_mem_free(a->user_data);
a->user_data=NULL;
}
void _ui_anim_callback_set_x(lv_anim_t* a, int32_t v)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
lv_obj_set_x(usr->target, v);
}
void _ui_anim_callback_set_y(lv_anim_t* a, int32_t v)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
lv_obj_set_y(usr->target, v);
}
void _ui_anim_callback_set_width(lv_anim_t* a, int32_t v)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
lv_obj_set_width(usr->target, v);
}
void _ui_anim_callback_set_height(lv_anim_t* a, int32_t v)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
lv_obj_set_height(usr->target, v);
}
void _ui_anim_callback_set_opacity(lv_anim_t* a, int32_t v)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
lv_obj_set_style_opa(usr->target, v, 0);
}
void _ui_anim_callback_set_image_zoom(lv_anim_t* a, int32_t v)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
lv_img_set_zoom(usr->target, v);
}
void _ui_anim_callback_set_image_angle(lv_anim_t* a, int32_t v)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
lv_img_set_angle(usr->target, v);
}
void _ui_anim_callback_set_image_frame(lv_anim_t* a, int32_t v)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
usr->val = v;
if ( v<0 ) v=0;
if ( v>=usr->imgset_size ) v=usr->imgset_size-1;
lv_img_set_src(usr->target, usr->imgset[v]);
}
int32_t _ui_anim_callback_get_x(lv_anim_t* a)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
return lv_obj_get_x_aligned(usr->target);
}
int32_t _ui_anim_callback_get_y(lv_anim_t* a)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
return lv_obj_get_y_aligned(usr->target);
}
int32_t _ui_anim_callback_get_width(lv_anim_t* a)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
return lv_obj_get_width(usr->target);
}
int32_t _ui_anim_callback_get_height(lv_anim_t* a)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
return lv_obj_get_height(usr->target);
}
int32_t _ui_anim_callback_get_opacity(lv_anim_t* a)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
return lv_obj_get_style_opa(usr->target, 0);
}
int32_t _ui_anim_callback_get_image_zoom(lv_anim_t* a)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
return lv_img_get_zoom(usr->target);
}
int32_t _ui_anim_callback_get_image_angle(lv_anim_t* a)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
return lv_img_get_angle(usr->target);
}
int32_t _ui_anim_callback_get_image_frame(lv_anim_t* a)
{
ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
return usr->val;
}
void _ui_arc_set_text_value( lv_obj_t *trg, lv_obj_t *src, char *prefix, char *postfix)
{
char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE];
lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_arc_get_value(src), postfix);
lv_label_set_text(trg, buf);
}
void _ui_slider_set_text_value( lv_obj_t *trg, lv_obj_t *src, char *prefix, char *postfix)
{
char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE];
lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_slider_get_value(src), postfix);
lv_label_set_text(trg, buf);
}
void _ui_checked_set_text_value( lv_obj_t *trg, lv_obj_t *src, char *txt_on, char *txt_off)
{
if (lv_obj_has_state(src,LV_STATE_CHECKED)) lv_label_set_text(trg,txt_on);
else lv_label_set_text(trg,txt_off);
}
@@ -0,0 +1,117 @@
// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.2.3
// LVGL version: 8.3.4
// Project name: box_reset_mode
#ifndef _BOX_RESET_MODE_UI_HELPERS_H
#define _BOX_RESET_MODE_UI_HELPERS_H
#ifdef __cplusplus
extern "C" {
#endif
#include "ui.h"
#define _UI_TEMPORARY_STRING_BUFFER_SIZE 32
#define _UI_BAR_PROPERTY_VALUE 0
#define _UI_BAR_PROPERTY_VALUE_WITH_ANIM 1
void _ui_bar_set_property( lv_obj_t *target, int id, int val);
#define _UI_BASIC_PROPERTY_POSITION_X 0
#define _UI_BASIC_PROPERTY_POSITION_Y 1
#define _UI_BASIC_PROPERTY_WIDTH 2
#define _UI_BASIC_PROPERTY_HEIGHT 3
void _ui_basic_set_property( lv_obj_t *target, int id, int val);
#define _UI_DROPDOWN_PROPERTY_SELECTED 0
void _ui_dropdown_set_property( lv_obj_t *target, int id, int val);
#define _UI_IMAGE_PROPERTY_IMAGE 0
void _ui_image_set_property( lv_obj_t *target, int id, uint8_t *val);
#define _UI_LABEL_PROPERTY_TEXT 0
void _ui_label_set_property( lv_obj_t *target, int id, char *val);
#define _UI_ROLLER_PROPERTY_SELECTED 0
#define _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM 1
void _ui_roller_set_property( lv_obj_t *target, int id, int val);
#define _UI_SLIDER_PROPERTY_VALUE 0
#define _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM 1
void _ui_slider_set_property( lv_obj_t *target, int id, int val);
void _ui_screen_change( lv_obj_t *target, lv_scr_load_anim_t fademode, int spd, int delay);
void _ui_arc_increment( lv_obj_t *target, int val);
void _ui_bar_increment( lv_obj_t *target, int val, int anm);
void _ui_slider_increment( lv_obj_t *target, int val, int anm);
void _ui_keyboard_set_target( lv_obj_t *keyboard, lv_obj_t *textarea);
#define _UI_MODIFY_FLAG_ADD 0
#define _UI_MODIFY_FLAG_REMOVE 1
#define _UI_MODIFY_FLAG_TOGGLE 2
void _ui_flag_modify( lv_obj_t *target, int32_t flag, int value);
#define _UI_MODIFY_STATE_ADD 0
#define _UI_MODIFY_STATE_REMOVE 1
#define _UI_MODIFY_STATE_TOGGLE 2
void _ui_state_modify( lv_obj_t *target, int32_t state, int value);
void _ui_opacity_set( lv_obj_t *target, int val);
/** Describes an animation*/
typedef struct _ui_anim_user_data_t {
lv_obj_t *target;
lv_img_dsc_t **imgset;
int32_t imgset_size;
int32_t val;
} ui_anim_user_data_t;
void _ui_anim_callback_free_user_data(lv_anim_t *a);
void _ui_anim_callback_set_x(lv_anim_t* a, int32_t v);
void _ui_anim_callback_set_y(lv_anim_t* a, int32_t v);
void _ui_anim_callback_set_width(lv_anim_t* a, int32_t v);
void _ui_anim_callback_set_height(lv_anim_t* a, int32_t v);
void _ui_anim_callback_set_opacity(lv_anim_t* a, int32_t v);
void _ui_anim_callback_set_image_zoom(lv_anim_t* a, int32_t v);
void _ui_anim_callback_set_image_angle(lv_anim_t* a, int32_t v);
void _ui_anim_callback_set_image_frame(lv_anim_t* a, int32_t v);
int32_t _ui_anim_callback_get_x(lv_anim_t* a);
int32_t _ui_anim_callback_get_y(lv_anim_t* a);
int32_t _ui_anim_callback_get_width(lv_anim_t* a);
int32_t _ui_anim_callback_get_height(lv_anim_t* a);
int32_t _ui_anim_callback_get_opacity(lv_anim_t* a);
int32_t _ui_anim_callback_get_image_zoom(lv_anim_t* a);
int32_t _ui_anim_callback_get_image_angle(lv_anim_t* a);
int32_t _ui_anim_callback_get_image_frame(lv_anim_t* a);
void _ui_arc_set_text_value( lv_obj_t *trg, lv_obj_t *src, char *prefix, char *postfix);
void _ui_slider_set_text_value( lv_obj_t *trg, lv_obj_t *src, char *prefix, char *postfix);
void _ui_checked_set_text_value( lv_obj_t *trg, lv_obj_t *src, char *txt_on, char *txt_off);
#ifdef __cplusplus
} /*extern "C"*/
#endif
#endif
@@ -0,0 +1,7 @@
# Name, Type, SubType, Offset, Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs, data, nvs, 0x9000, 0x4000,
otadata, data, ota, 0xd000, 0x2000,
phy_init, data, phy, 0xf000, 0x1000,
ota_0, app, ota_0, 0x10000, 6M,
uf2, app, factory, 0x700000, 2M,
1 # Name, Type, SubType, Offset, Size, Flags
2 # Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
3 nvs, data, nvs, 0x9000, 0x4000,
4 otadata, data, ota, 0xd000, 0x2000,
5 phy_init, data, phy, 0xf000, 0x1000,
6 ota_0, app, ota_0, 0x10000, 6M,
7 uf2, app, factory, 0x700000, 2M,
@@ -0,0 +1,33 @@
# This file was generated using idf.py save-defconfig. It can be edited manually.
# Espressif IoT Development Framework (ESP-IDF) Project Minimal Configuration
#
CONFIG_IDF_TARGET="esp32s3"
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_COMPILER_OPTIMIZATION_PERF=y
CONFIG_SPIRAM=y
CONFIG_SPIRAM_MODE_OCT=y
CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=1024
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=8192
CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y
CONFIG_ESP32S3_DATA_CACHE_64KB=y
CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
CONFIG_FREERTOS_HZ=1000
CONFIG_MBEDTLS_DYNAMIC_BUFFER=y
CONFIG_MBEDTLS_DYNAMIC_FREE_CONFIG_DATA=y
CONFIG_LV_COLOR_16_SWAP=y
CONFIG_LV_MEM_CUSTOM=y
CONFIG_LV_MEMCPY_MEMSET_STD=y
CONFIG_LV_FONT_FMT_TXT_LARGE=y
CONFIG_IDF_EXPERIMENTAL_FEATURES=y
CONFIG_SPIRAM_SPEED_80M=y
CONFIG_SPIRAM_SPEED=80
CONFIG_ENABLE_UF2_USB_CONSOLE=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_ESPTOOLPY_FLASHFREQ="80m"
CONFIG_UF2_VOLUME_LABEL="ESP-BOX"
CONFIG_TUSB_MANUFACTURER="Espressif"
CONFIG_TUSB_PRODUCT="ESP32-S3-BOX"
CONFIG_UF2_SERIAL_NUM="12345678"
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,866 @@
/*******************************************************************************
* Size: 14 px
* Bpp: 4
* Opts: --bpp 4 --size 14 --font C:\Users\liu\Desktop\Project\squareline\chat_gpt_new_gui\assets\pingfang.otf -o C:\Users\liu\Desktop\Project\squareline\chat_gpt_new_gui\assets\ui_font_PingFangEN14.c --format lvgl -r 0x20-0x7f --no-compress --no-prefilter
******************************************************************************/
#include "../ui.h"
#ifndef UI_FONT_PINGFANGEN14
#define UI_FONT_PINGFANGEN14 1
#endif
#if UI_FONT_PINGFANGEN14
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+0020 " " */
/* U+0021 "!" */
0x4f, 0x4, 0xf0, 0x3e, 0x3, 0xe0, 0x3d, 0x2,
0xd0, 0x2c, 0x1, 0xa0, 0x0, 0x3, 0xa0, 0x5e,
0x0,
/* U+0022 "\"" */
0xd4, 0x4d, 0xd3, 0x4c, 0xc3, 0x3c, 0x82, 0x28,
/* U+0023 "#" */
0x0, 0xd, 0x0, 0xe0, 0x0, 0x2, 0xb0, 0x1c,
0x0, 0x0, 0x4a, 0x3, 0xa0, 0x0, 0xef, 0xfe,
0xff, 0xd0, 0x0, 0x95, 0x8, 0x60, 0x0, 0xb,
0x30, 0xa4, 0x0, 0x0, 0xd1, 0xd, 0x10, 0x0,
0xe, 0x0, 0xe0, 0x0, 0x8e, 0xfe, 0xef, 0xe6,
0x0, 0x4a, 0x4, 0xa0, 0x0, 0x7, 0x70, 0x77,
0x0, 0x0,
/* U+0024 "$" */
0x0, 0x1, 0x40, 0x0, 0x0, 0x2, 0x80, 0x0,
0x1, 0xaf, 0xfc, 0x40, 0xc, 0xa5, 0x97, 0xf1,
0x1f, 0x12, 0x80, 0xb6, 0xf, 0x32, 0x80, 0x0,
0x8, 0xf9, 0x80, 0x0, 0x0, 0x5c, 0xfa, 0x20,
0x0, 0x2, 0x99, 0xf3, 0x27, 0x2, 0x80, 0xa9,
0x1f, 0x12, 0x80, 0x8a, 0xb, 0xb5, 0x95, 0xe5,
0x1, 0xae, 0xfd, 0x60, 0x0, 0x2, 0x80, 0x0,
0x0, 0x1, 0x40, 0x0,
/* U+0025 "%" */
0x2, 0xcd, 0x80, 0x0, 0x2c, 0x0, 0x0, 0xc5,
0xd, 0x30, 0xa, 0x40, 0x0, 0xf, 0x10, 0xa6,
0x2, 0xb0, 0x0, 0x0, 0xf1, 0xa, 0x60, 0xa4,
0x0, 0x0, 0xb, 0x60, 0xe2, 0x2b, 0x0, 0x0,
0x0, 0x1b, 0xc6, 0xa, 0x31, 0xad, 0x70, 0x0,
0x0, 0x2, 0xb0, 0x98, 0xc, 0x40, 0x0, 0x0,
0xa3, 0xd, 0x30, 0x88, 0x0, 0x0, 0x3b, 0x0,
0xd3, 0x8, 0x80, 0x0, 0xb, 0x30, 0xa, 0x70,
0xc5, 0x0, 0x3, 0xb0, 0x0, 0x1c, 0xd9, 0x0,
/* U+0026 "&" */
0x0, 0x5d, 0xfb, 0x10, 0x0, 0x1, 0xf5, 0x1b,
0x90, 0x0, 0x2, 0xf0, 0x7, 0xa0, 0x0, 0x0,
0xc7, 0x2e, 0x40, 0x0, 0x0, 0x2f, 0xe5, 0x1,
0x40, 0x3, 0xeb, 0xe3, 0x5, 0xc0, 0x1e, 0x70,
0x6e, 0x27, 0xa0, 0x4d, 0x0, 0x7, 0xdd, 0x60,
0x4d, 0x0, 0x0, 0xbf, 0x10, 0xe, 0x92, 0x38,
0xfc, 0xb0, 0x2, 0xae, 0xeb, 0x30, 0xd8,
/* U+0027 "'" */
0xd4, 0xd3, 0xc3, 0x82,
/* U+0028 "(" */
0x0, 0x5a, 0x0, 0xd3, 0x4, 0xc0, 0xa, 0x60,
0xe, 0x20, 0x1f, 0x0, 0x2f, 0x0, 0x2f, 0x0,
0x1f, 0x0, 0xe, 0x20, 0xa, 0x60, 0x4, 0xc0,
0x0, 0xd3, 0x0, 0x5a,
/* U+0029 ")" */
0xe, 0x10, 0x8, 0x70, 0x2, 0xe0, 0x0, 0xc5,
0x0, 0x89, 0x0, 0x5b, 0x0, 0x4c, 0x0, 0x4c,
0x0, 0x5b, 0x0, 0x89, 0x0, 0xc5, 0x2, 0xe0,
0x8, 0x70, 0xe, 0x10,
/* U+002A "*" */
0x0, 0xe, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x8b,
0x5d, 0x4b, 0x90, 0x4a, 0xfb, 0x40, 0x0, 0xa9,
0xb0, 0x0, 0x7a, 0x9, 0x80, 0x3, 0x10, 0x4,
0x0,
/* U+002B "+" */
0x0, 0x3, 0xb0, 0x0, 0x0, 0x3, 0xb0, 0x0,
0x0, 0x3, 0xb0, 0x0, 0x0, 0x3, 0xb0, 0x0,
0x4e, 0xee, 0xfe, 0xeb, 0x1, 0x14, 0xb1, 0x11,
0x0, 0x3, 0xb0, 0x0, 0x0, 0x3, 0xb0, 0x0,
/* U+002C "," */
0xa, 0x60, 0xcd, 0x1, 0xb0, 0xb3, 0x0, 0x0,
/* U+002D "-" */
0x4e, 0xee, 0xee, 0xeb, 0x1, 0x11, 0x11, 0x11,
/* U+002E "." */
0x95, 0xc7,
/* U+002F "/" */
0x0, 0x0, 0xb, 0x40, 0x0, 0x1, 0xe0, 0x0,
0x0, 0x69, 0x0, 0x0, 0xc, 0x30, 0x0, 0x1,
0xe0, 0x0, 0x0, 0x78, 0x0, 0x0, 0xd, 0x20,
0x0, 0x2, 0xd0, 0x0, 0x0, 0x87, 0x0, 0x0,
0xe, 0x20, 0x0, 0x3, 0xc0, 0x0, 0x0, 0x96,
0x0, 0x0, 0xe, 0x10, 0x0, 0x4, 0xb0, 0x0,
0x0,
/* U+0030 "0" */
0x0, 0x6d, 0xea, 0x0, 0x5, 0xe4, 0x2a, 0xb0,
0xc, 0x50, 0x0, 0xe3, 0x1f, 0x0, 0x0, 0xa8,
0x3e, 0x0, 0x0, 0x89, 0x4d, 0x0, 0x0, 0x7a,
0x3e, 0x0, 0x0, 0x89, 0x1f, 0x0, 0x0, 0xa8,
0xc, 0x50, 0x0, 0xe3, 0x5, 0xe4, 0x2a, 0xb0,
0x0, 0x6d, 0xea, 0x0,
/* U+0031 "1" */
0x0, 0x5f, 0x11, 0xad, 0xf1, 0x5a, 0x1f, 0x10,
0x0, 0xf1, 0x0, 0xf, 0x10, 0x0, 0xf1, 0x0,
0xf, 0x10, 0x0, 0xf1, 0x0, 0xf, 0x10, 0x0,
0xf1, 0x0, 0xf, 0x10,
/* U+0032 "2" */
0x0, 0x5d, 0xfc, 0x30, 0x5, 0xe4, 0x16, 0xe1,
0xc, 0x60, 0x0, 0xb6, 0xf, 0x20, 0x0, 0xb7,
0x0, 0x0, 0x1, 0xf3, 0x0, 0x0, 0x1c, 0x90,
0x0, 0x3, 0xe9, 0x0, 0x0, 0x5f, 0x60, 0x0,
0x3, 0xf4, 0x0, 0x0, 0xc, 0x91, 0x11, 0x10,
0xf, 0xff, 0xff, 0xf8,
/* U+0033 "3" */
0x0, 0x7d, 0xfc, 0x40, 0x6, 0xd3, 0x16, 0xf1,
0xd, 0x40, 0x0, 0xc6, 0x6, 0x0, 0x0, 0xb5,
0x0, 0x0, 0x6, 0xd1, 0x0, 0x7, 0xff, 0x30,
0x0, 0x0, 0x3, 0xe3, 0x15, 0x0, 0x0, 0x89,
0x1f, 0x10, 0x0, 0x99, 0xa, 0xc2, 0x16, 0xf3,
0x0, 0x9e, 0xfc, 0x40,
/* U+0034 "4" */
0x0, 0x0, 0x1e, 0x70, 0x0, 0x0, 0xb, 0xe7,
0x0, 0x0, 0x7, 0xaa, 0x70, 0x0, 0x3, 0xd0,
0xa7, 0x0, 0x0, 0xd3, 0xa, 0x70, 0x0, 0x97,
0x0, 0xa7, 0x0, 0x5b, 0x0, 0xa, 0x70, 0xa,
0xee, 0xee, 0xff, 0xe1, 0x1, 0x11, 0x1a, 0x81,
0x0, 0x0, 0x0, 0xa7, 0x0, 0x0, 0x0, 0xa,
0x70, 0x0,
/* U+0035 "5" */
0x9, 0xff, 0xff, 0xf4, 0xa, 0x61, 0x11, 0x10,
0xb, 0x40, 0x0, 0x0, 0xd, 0x30, 0x0, 0x0,
0xe, 0x4b, 0xdb, 0x30, 0xf, 0xb4, 0x27, 0xf2,
0x4, 0x0, 0x0, 0xa8, 0x0, 0x0, 0x0, 0x7a,
0x2e, 0x0, 0x0, 0xa8, 0xc, 0xa3, 0x17, 0xe1,
0x1, 0x9e, 0xeb, 0x20,
/* U+0036 "6" */
0x0, 0x4c, 0xfc, 0x30, 0x3, 0xe5, 0x28, 0xe1,
0xa, 0x60, 0x0, 0xc6, 0xf, 0x10, 0x0, 0x0,
0x2e, 0x19, 0xdb, 0x30, 0x4d, 0xa4, 0x27, 0xf2,
0x3f, 0x30, 0x0, 0xa8, 0x1f, 0x0, 0x0, 0x7a,
0xd, 0x30, 0x0, 0xa8, 0x6, 0xd3, 0x16, 0xf1,
0x0, 0x6d, 0xfc, 0x30,
/* U+0037 "7" */
0x8f, 0xff, 0xff, 0xf0, 0x11, 0x11, 0x16, 0xd0,
0x0, 0x0, 0xa, 0x70, 0x0, 0x0, 0x1f, 0x20,
0x0, 0x0, 0x6c, 0x0, 0x0, 0x0, 0xc6, 0x0,
0x0, 0x2, 0xf0, 0x0, 0x0, 0x8, 0xa0, 0x0,
0x0, 0xe, 0x40, 0x0, 0x0, 0x4e, 0x0, 0x0,
0x0, 0xa8, 0x0, 0x0,
/* U+0038 "8" */
0x0, 0x9e, 0xfb, 0x30, 0xa, 0xb2, 0x16, 0xe1,
0xf, 0x10, 0x0, 0xb6, 0xe, 0x20, 0x0, 0xc5,
0x8, 0xa1, 0x5, 0xd1, 0x1, 0xdf, 0xff, 0x30,
0xd, 0x81, 0x4, 0xe4, 0x5d, 0x0, 0x0, 0x6b,
0x5d, 0x0, 0x0, 0x6b, 0x1e, 0x81, 0x4, 0xe5,
0x2, 0xae, 0xfc, 0x60,
/* U+0039 "9" */
0x0, 0x8e, 0xea, 0x0, 0x9, 0xc2, 0x29, 0xc0,
0x1f, 0x10, 0x0, 0xd3, 0x3e, 0x0, 0x0, 0xa8,
0x2f, 0x0, 0x0, 0xc9, 0xc, 0xa0, 0x7, 0xca,
0x1, 0xbf, 0xe7, 0x79, 0x0, 0x0, 0x0, 0xa6,
0xd, 0x30, 0x0, 0xe1, 0xa, 0xc3, 0x2b, 0x90,
0x1, 0xae, 0xe8, 0x0,
/* U+003A ":" */
0xc7, 0x95, 0x0, 0x0, 0x0, 0x95, 0xc7,
/* U+003B ";" */
0xc, 0x70, 0x96, 0x0, 0x0, 0x0, 0x0, 0x0,
0xa6, 0xc, 0xd0, 0x1b, 0xb, 0x30, 0x0,
/* U+003C "<" */
0x0, 0x0, 0x0, 0x26, 0x0, 0x0, 0x2a, 0xe6,
0x0, 0x3b, 0xe7, 0x0, 0x2b, 0xd6, 0x0, 0x0,
0x3e, 0xa2, 0x0, 0x0, 0x0, 0x7e, 0xb3, 0x0,
0x0, 0x0, 0x6d, 0xb3, 0x0, 0x0, 0x0, 0x69,
/* U+003D "=" */
0x4e, 0xee, 0xee, 0xeb, 0x1, 0x11, 0x11, 0x11,
0x0, 0x0, 0x0, 0x0, 0x4e, 0xee, 0xee, 0xeb,
0x1, 0x11, 0x11, 0x11,
/* U+003E ">" */
0x35, 0x0, 0x0, 0x0, 0x2b, 0xd6, 0x0, 0x0,
0x0, 0x3b, 0xe7, 0x0, 0x0, 0x0, 0x2a, 0xe6,
0x0, 0x0, 0x6, 0xe9, 0x0, 0x7, 0xea, 0x30,
0x18, 0xea, 0x20, 0x0, 0x49, 0x20, 0x0, 0x0,
/* U+003F "?" */
0x1, 0xae, 0xe8, 0x0, 0xb9, 0x23, 0xe7, 0x2f,
0x10, 0x7, 0xb2, 0x70, 0x0, 0x7b, 0x0, 0x0,
0x1e, 0x50, 0x0, 0x1d, 0x80, 0x0, 0x9, 0xa0,
0x0, 0x0, 0xd5, 0x0, 0x0, 0x2, 0x0, 0x0,
0x0, 0xa3, 0x0, 0x0, 0xe, 0x50, 0x0,
/* U+0040 "@" */
0x0, 0x4, 0xad, 0xdc, 0x60, 0x0, 0x0, 0x8c,
0x20, 0x1, 0xa9, 0x0, 0x5, 0xb0, 0x2b, 0xd6,
0x7a, 0x40, 0xd, 0x20, 0xe6, 0x1d, 0x72, 0xa0,
0x1d, 0x7, 0xa0, 0xb, 0x30, 0xc0, 0x3b, 0xb,
0x40, 0xd, 0x1, 0xb0, 0x1d, 0xc, 0x20, 0x2c,
0x6, 0x70, 0xe, 0xa, 0x70, 0xba, 0x2c, 0x0,
0x7, 0x91, 0xcc, 0x4b, 0xb3, 0x70, 0x0, 0xb9,
0x10, 0x0, 0x4c, 0x60, 0x0, 0x5, 0xbc, 0xdd,
0x92, 0x0,
/* U+0041 "A" */
0x0, 0x3, 0xf7, 0x0, 0x0, 0x0, 0x9, 0xdc,
0x0, 0x0, 0x0, 0xe, 0x3f, 0x20, 0x0, 0x0,
0x5d, 0xa, 0x80, 0x0, 0x0, 0xa8, 0x5, 0xd0,
0x0, 0x0, 0xf3, 0x0, 0xf3, 0x0, 0x6, 0xd0,
0x0, 0xa9, 0x0, 0xb, 0xfe, 0xee, 0xfe, 0x0,
0x1f, 0x31, 0x11, 0x2e, 0x40, 0x7c, 0x0, 0x0,
0x9, 0xa0, 0xd6, 0x0, 0x0, 0x3, 0xf0,
/* U+0042 "B" */
0xff, 0xff, 0xfd, 0x50, 0xf2, 0x0, 0x16, 0xf2,
0xf2, 0x0, 0x0, 0xb6, 0xf2, 0x0, 0x0, 0xb5,
0xf2, 0x0, 0x4, 0xe1, 0xfe, 0xee, 0xff, 0x50,
0xf3, 0x11, 0x14, 0xd6, 0xf2, 0x0, 0x0, 0x5d,
0xf2, 0x0, 0x0, 0x5d, 0xf2, 0x0, 0x14, 0xd8,
0xff, 0xff, 0xfd, 0x80,
/* U+0043 "C" */
0x0, 0x19, 0xdf, 0xc6, 0x0, 0x2, 0xda, 0x42,
0x5d, 0x90, 0xa, 0x90, 0x0, 0x1, 0xf2, 0x1f,
0x10, 0x0, 0x0, 0x52, 0x4d, 0x0, 0x0, 0x0,
0x0, 0x5c, 0x0, 0x0, 0x0, 0x0, 0x4d, 0x0,
0x0, 0x0, 0x0, 0x2f, 0x10, 0x0, 0x0, 0x86,
0xb, 0x80, 0x0, 0x2, 0xf2, 0x2, 0xe9, 0x32,
0x5d, 0x70, 0x0, 0x1a, 0xdf, 0xc5, 0x0,
/* U+0044 "D" */
0xff, 0xff, 0xd9, 0x10, 0xf, 0x30, 0x13, 0xae,
0x20, 0xf2, 0x0, 0x0, 0x9a, 0xf, 0x20, 0x0,
0x1, 0xf0, 0xf2, 0x0, 0x0, 0xf, 0x2f, 0x20,
0x0, 0x0, 0xd4, 0xf2, 0x0, 0x0, 0xf, 0x2f,
0x20, 0x0, 0x2, 0xf0, 0xf2, 0x0, 0x0, 0xa9,
0xf, 0x30, 0x14, 0xbd, 0x10, 0xff, 0xff, 0xd9,
0x0, 0x0,
/* U+0045 "E" */
0xff, 0xff, 0xff, 0xf1, 0xf3, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0, 0xff, 0xee, 0xee, 0xb0,
0xf4, 0x11, 0x11, 0x10, 0xf2, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0, 0xf3, 0x0, 0x0, 0x0,
0xff, 0xff, 0xff, 0xf5,
/* U+0046 "F" */
0xff, 0xff, 0xff, 0xbf, 0x30, 0x0, 0x0, 0xf2,
0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0,
0x0, 0xf, 0xfe, 0xee, 0xe6, 0xf4, 0x11, 0x11,
0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf,
0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0,
/* U+0047 "G" */
0x0, 0x19, 0xdf, 0xd7, 0x0, 0x1, 0xda, 0x42,
0x5d, 0xb0, 0xa, 0xa0, 0x0, 0x1, 0xe4, 0x1f,
0x10, 0x0, 0x0, 0x43, 0x4d, 0x0, 0x0, 0x0,
0x0, 0x5c, 0x0, 0xa, 0xee, 0xe8, 0x4d, 0x0,
0x1, 0x11, 0xa8, 0x1f, 0x10, 0x0, 0x0, 0x98,
0xa, 0x90, 0x0, 0x0, 0x98, 0x2, 0xda, 0x41,
0x38, 0xf7, 0x0, 0x19, 0xdf, 0xda, 0x40,
/* U+0048 "H" */
0xf2, 0x0, 0x0, 0xf, 0x1f, 0x20, 0x0, 0x0,
0xf1, 0xf2, 0x0, 0x0, 0xf, 0x1f, 0x20, 0x0,
0x0, 0xf1, 0xf2, 0x0, 0x0, 0xf, 0x1f, 0xfe,
0xee, 0xef, 0xf1, 0xf4, 0x11, 0x11, 0x2f, 0x1f,
0x20, 0x0, 0x0, 0xf1, 0xf2, 0x0, 0x0, 0xf,
0x1f, 0x20, 0x0, 0x0, 0xf1, 0xf2, 0x0, 0x0,
0xf, 0x10,
/* U+0049 "I" */
0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
0xe3, 0xe3, 0xe3,
/* U+004A "J" */
0x0, 0x0, 0xe, 0x30, 0x0, 0x0, 0xe3, 0x0,
0x0, 0xe, 0x30, 0x0, 0x0, 0xe3, 0x0, 0x0,
0xe, 0x30, 0x0, 0x0, 0xe3, 0x0, 0x0, 0xe,
0x38, 0x30, 0x0, 0xe3, 0xa7, 0x0, 0x1f, 0x16,
0xe3, 0x2a, 0xc0, 0x8, 0xee, 0xb2, 0x0,
/* U+004B "K" */
0xf2, 0x0, 0x1, 0xd8, 0xf, 0x20, 0x1, 0xd9,
0x0, 0xf2, 0x0, 0xca, 0x0, 0xf, 0x20, 0xba,
0x0, 0x0, 0xf2, 0xac, 0x0, 0x0, 0xf, 0xcc,
0xf3, 0x0, 0x0, 0xfb, 0x8, 0xe1, 0x0, 0xf,
0x20, 0xb, 0xc0, 0x0, 0xf2, 0x0, 0xd, 0x90,
0xf, 0x20, 0x0, 0x2f, 0x60, 0xf2, 0x0, 0x0,
0x4f, 0x40,
/* U+004C "L" */
0xf2, 0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0xf2,
0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0,
0x0, 0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0,
0xf, 0x20, 0x0, 0x0, 0xf2, 0x0, 0x0, 0xf,
0x30, 0x0, 0x0, 0xff, 0xff, 0xff, 0xe0,
/* U+004D "M" */
0xfa, 0x0, 0x0, 0x0, 0x4f, 0x5f, 0xf1, 0x0,
0x0, 0xb, 0xf5, 0xfd, 0x60, 0x0, 0x1, 0xfe,
0x5f, 0x7d, 0x0, 0x0, 0x7a, 0xc5, 0xf2, 0xe3,
0x0, 0xd, 0x4c, 0x5f, 0x28, 0x90, 0x4, 0xd0,
0xc5, 0xf2, 0x2f, 0x0, 0xa7, 0xc, 0x5f, 0x20,
0xb6, 0x1f, 0x10, 0xc5, 0xf2, 0x5, 0xc7, 0xa0,
0xc, 0x5f, 0x20, 0xe, 0xe4, 0x0, 0xc5, 0xf2,
0x0, 0x8e, 0x0, 0xc, 0x50,
/* U+004E "N" */
0xf8, 0x0, 0x0, 0x1f, 0xf, 0xf2, 0x0, 0x1,
0xf0, 0xf9, 0xc0, 0x0, 0x1f, 0xf, 0x2d, 0x60,
0x1, 0xf0, 0xf2, 0x3e, 0x10, 0x1f, 0xf, 0x20,
0x9b, 0x1, 0xf0, 0xf2, 0x0, 0xe5, 0x1f, 0xf,
0x20, 0x5, 0xe2, 0xf0, 0xf2, 0x0, 0xb, 0xaf,
0xf, 0x20, 0x0, 0x1f, 0xf0, 0xf2, 0x0, 0x0,
0x7f, 0x0,
/* U+004F "O" */
0x0, 0x19, 0xdf, 0xc7, 0x0, 0x0, 0x2d, 0xa4,
0x25, 0xdb, 0x0, 0xa, 0xa0, 0x0, 0x0, 0xd6,
0x1, 0xf1, 0x0, 0x0, 0x5, 0xd0, 0x4d, 0x0,
0x0, 0x0, 0x2f, 0x5, 0xc0, 0x0, 0x0, 0x0,
0xf1, 0x4d, 0x0, 0x0, 0x0, 0x2f, 0x1, 0xf1,
0x0, 0x0, 0x5, 0xd0, 0xa, 0x90, 0x0, 0x0,
0xd6, 0x0, 0x2e, 0xa4, 0x25, 0xdb, 0x0, 0x0,
0x19, 0xdf, 0xc7, 0x0, 0x0,
/* U+0050 "P" */
0xff, 0xff, 0xfc, 0x40, 0xf3, 0x0, 0x16, 0xf2,
0xf2, 0x0, 0x0, 0xb7, 0xf2, 0x0, 0x0, 0xa7,
0xf2, 0x0, 0x4, 0xf3, 0xff, 0xee, 0xfe, 0x60,
0xf4, 0x11, 0x10, 0x0, 0xf2, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0, 0xf2, 0x0, 0x0, 0x0,
0xf2, 0x0, 0x0, 0x0,
/* U+0051 "Q" */
0x0, 0x19, 0xdf, 0xc7, 0x0, 0x0, 0x2d, 0xa4,
0x25, 0xdb, 0x0, 0xa, 0xa0, 0x0, 0x0, 0xd6,
0x1, 0xf1, 0x0, 0x0, 0x5, 0xd0, 0x4d, 0x0,
0x0, 0x0, 0x2f, 0x5, 0xc0, 0x0, 0x0, 0x0,
0xf1, 0x4d, 0x0, 0x0, 0x30, 0x1f, 0x1, 0xf1,
0x0, 0xe, 0x45, 0xd0, 0xa, 0x90, 0x0, 0x3e,
0xd6, 0x0, 0x2e, 0xa4, 0x24, 0xdf, 0x0, 0x0,
0x19, 0xdf, 0xd7, 0xb8, 0x0, 0x0, 0x0, 0x0,
0x1, 0x90,
/* U+0052 "R" */
0xff, 0xff, 0xfd, 0x50, 0xf, 0x30, 0x1, 0x5f,
0x30, 0xf2, 0x0, 0x0, 0xa7, 0xf, 0x20, 0x0,
0xa, 0x60, 0xf2, 0x0, 0x4, 0xe1, 0xf, 0xfe,
0xef, 0xf3, 0x0, 0xf4, 0x11, 0x39, 0xe0, 0xf,
0x20, 0x0, 0xd, 0x40, 0xf2, 0x0, 0x0, 0xb6,
0xf, 0x20, 0x0, 0x9, 0x90, 0xf2, 0x0, 0x0,
0x5d, 0x0,
/* U+0053 "S" */
0x1, 0x9e, 0xfd, 0x70, 0x0, 0xd9, 0x22, 0x5d,
0x80, 0x3e, 0x0, 0x0, 0x3f, 0x2, 0xf2, 0x0,
0x0, 0x50, 0x8, 0xf9, 0x30, 0x0, 0x0, 0x2,
0x8d, 0xe8, 0x0, 0x0, 0x0, 0x3, 0xbc, 0x5,
0x70, 0x0, 0x0, 0xe4, 0x4e, 0x0, 0x0, 0xd,
0x40, 0xcb, 0x32, 0x5a, 0xd0, 0x1, 0x9d, 0xfe,
0x91, 0x0,
/* U+0054 "T" */
0xcf, 0xff, 0xff, 0xff, 0x60, 0x0, 0x4e, 0x0,
0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x0, 0x3e,
0x0, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x0, 0x0,
0x3e, 0x0, 0x0, 0x0, 0x3, 0xe0, 0x0, 0x0,
0x0, 0x3e, 0x0, 0x0, 0x0, 0x3, 0xe0, 0x0,
0x0, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x3, 0xe0,
0x0, 0x0,
/* U+0055 "U" */
0xf2, 0x0, 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x2f,
0xf2, 0x0, 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x2f,
0xf2, 0x0, 0x0, 0x2f, 0xf2, 0x0, 0x0, 0x2f,
0xf2, 0x0, 0x0, 0x2f, 0xd3, 0x0, 0x0, 0x4d,
0xb8, 0x0, 0x0, 0x8b, 0x3f, 0x72, 0x27, 0xf3,
0x3, 0xbe, 0xeb, 0x30,
/* U+0056 "V" */
0xc7, 0x0, 0x0, 0x8, 0xb6, 0xd0, 0x0, 0x0,
0xd5, 0x1f, 0x20, 0x0, 0x3f, 0x0, 0xc7, 0x0,
0x8, 0xb0, 0x6, 0xc0, 0x0, 0xd5, 0x0, 0x1f,
0x10, 0x2f, 0x0, 0x0, 0xb6, 0x7, 0xb0, 0x0,
0x6, 0xc0, 0xd5, 0x0, 0x0, 0x1f, 0x3f, 0x0,
0x0, 0x0, 0xbd, 0xa0, 0x0, 0x0, 0x6, 0xf5,
0x0, 0x0,
/* U+0057 "W" */
0xc7, 0x0, 0x3, 0xf4, 0x0, 0x7, 0xd8, 0xb0,
0x0, 0x7f, 0x80, 0x0, 0xb8, 0x4f, 0x0, 0xb,
0xac, 0x0, 0xe, 0x40, 0xf3, 0x0, 0xf2, 0xf0,
0x2, 0xf0, 0xc, 0x60, 0x3d, 0xc, 0x30, 0x6c,
0x0, 0x8a, 0x7, 0x90, 0x87, 0xa, 0x80, 0x3,
0xe0, 0xb5, 0x4, 0xb0, 0xe4, 0x0, 0xf, 0x2f,
0x10, 0x1f, 0x2f, 0x0, 0x0, 0xb9, 0xd0, 0x0,
0xc9, 0xb0, 0x0, 0x7, 0xf9, 0x0, 0x8, 0xf7,
0x0, 0x0, 0x3f, 0x50, 0x0, 0x4f, 0x30, 0x0,
/* U+0058 "X" */
0x5f, 0x10, 0x0, 0x2f, 0x40, 0xbb, 0x0, 0xc,
0x90, 0x1, 0xf5, 0x6, 0xe0, 0x0, 0x6, 0xe2,
0xf4, 0x0, 0x0, 0xc, 0xfa, 0x0, 0x0, 0x0,
0x7f, 0x50, 0x0, 0x0, 0x1e, 0xae, 0x0, 0x0,
0xa, 0xa0, 0xc9, 0x0, 0x5, 0xf1, 0x2, 0xf3,
0x1, 0xe6, 0x0, 0x8, 0xd0, 0x9c, 0x0, 0x0,
0xd, 0x80,
/* U+0059 "Y" */
0xab, 0x0, 0x0, 0x7, 0xd0, 0x1e, 0x50, 0x0,
0x1f, 0x40, 0x6, 0xe0, 0x0, 0xaa, 0x0, 0x0,
0xc8, 0x4, 0xf1, 0x0, 0x0, 0x3f, 0x2d, 0x70,
0x0, 0x0, 0x9, 0xed, 0x0, 0x0, 0x0, 0x0,
0xf4, 0x0, 0x0, 0x0, 0x0, 0xe3, 0x0, 0x0,
0x0, 0x0, 0xe3, 0x0, 0x0, 0x0, 0x0, 0xe3,
0x0, 0x0, 0x0, 0x0, 0xe3, 0x0, 0x0,
/* U+005A "Z" */
0x3f, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x1c,
0xb0, 0x0, 0x0, 0x6, 0xe1, 0x0, 0x0, 0x2,
0xf5, 0x0, 0x0, 0x0, 0xc9, 0x0, 0x0, 0x0,
0x8d, 0x0, 0x0, 0x0, 0x3f, 0x30, 0x0, 0x0,
0xd, 0x80, 0x0, 0x0, 0x9, 0xc0, 0x0, 0x0,
0x4, 0xf3, 0x0, 0x0, 0x0, 0xaf, 0xff, 0xff,
0xff, 0x60,
/* U+005B "[" */
0x5e, 0xee, 0x6, 0xb1, 0x10, 0x6a, 0x0, 0x6,
0xa0, 0x0, 0x6a, 0x0, 0x6, 0xa0, 0x0, 0x6a,
0x0, 0x6, 0xa0, 0x0, 0x6a, 0x0, 0x6, 0xa0,
0x0, 0x6a, 0x0, 0x6, 0xa0, 0x0, 0x6a, 0x0,
0x6, 0xff, 0xf0,
/* U+005C "\\" */
0x4b, 0x0, 0x0, 0x0, 0xe1, 0x0, 0x0, 0x9,
0x60, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0xe1,
0x0, 0x0, 0x8, 0x70, 0x0, 0x0, 0x2d, 0x0,
0x0, 0x0, 0xd2, 0x0, 0x0, 0x7, 0x80, 0x0,
0x0, 0x2e, 0x0, 0x0, 0x0, 0xc3, 0x0, 0x0,
0x6, 0x90, 0x0, 0x0, 0x1e, 0x0, 0x0, 0x0,
0xb4,
/* U+005D "]" */
0x5e, 0xee, 0x0, 0x11, 0xf0, 0x0, 0xf, 0x0,
0x0, 0xf0, 0x0, 0xf, 0x0, 0x0, 0xf0, 0x0,
0xf, 0x0, 0x0, 0xf0, 0x0, 0xf, 0x0, 0x0,
0xf0, 0x0, 0xf, 0x0, 0x0, 0xf0, 0x0, 0xf,
0x6, 0xff, 0xf0,
/* U+005E "^" */
0x0, 0x2f, 0x60, 0x0, 0x9, 0x8d, 0x0, 0x1,
0xd0, 0xa4, 0x0, 0x77, 0x3, 0xb0, 0xd, 0x10,
0xc, 0x20,
/* U+005F "_" */
0xee, 0xee, 0xee, 0xe1, 0x11, 0x11, 0x11,
/* U+0060 "`" */
0x89, 0x0, 0x95,
/* U+0061 "a" */
0x2, 0xad, 0xea, 0x10, 0xe8, 0x12, 0xba, 0x3,
0x0, 0x3, 0xe0, 0x3b, 0xee, 0xef, 0x1e, 0x60,
0x2, 0xf5, 0xc0, 0x0, 0x6f, 0x4f, 0x30, 0x5c,
0xf0, 0x8e, 0xd9, 0x2f,
/* U+0062 "b" */
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x2b, 0xeb, 0x20,
0x1f, 0xa2, 0x18, 0xe0, 0x1f, 0x30, 0x0, 0xc5,
0x1f, 0x0, 0x0, 0x98, 0x1f, 0x0, 0x0, 0x98,
0x1f, 0x30, 0x0, 0xc6, 0x1f, 0xb2, 0x7, 0xe0,
0x1e, 0x4c, 0xfb, 0x20,
/* U+0063 "c" */
0x0, 0x9e, 0xea, 0x10, 0xb, 0xb1, 0x2a, 0xb0,
0x2f, 0x10, 0x1, 0xb0, 0x5c, 0x0, 0x0, 0x0,
0x5c, 0x0, 0x0, 0x0, 0x2f, 0x0, 0x2, 0xe1,
0xb, 0xa1, 0x2b, 0xa0, 0x0, 0xae, 0xea, 0x10,
/* U+0064 "d" */
0x0, 0x0, 0x0, 0xc5, 0x0, 0x0, 0x0, 0xc5,
0x0, 0x0, 0x0, 0xc5, 0x0, 0xae, 0xc4, 0xc5,
0xb, 0xa1, 0x1a, 0xe5, 0x2f, 0x0, 0x1, 0xf5,
0x5c, 0x0, 0x0, 0xc5, 0x5c, 0x0, 0x0, 0xc5,
0x2f, 0x0, 0x0, 0xf5, 0xb, 0xa1, 0x1a, 0xe5,
0x0, 0xae, 0xd6, 0xb5,
/* U+0065 "e" */
0x1, 0xae, 0xe9, 0x0, 0xc, 0x81, 0x1a, 0xa0,
0x4d, 0x0, 0x0, 0xf1, 0x7f, 0xee, 0xee, 0xf3,
0x7b, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x2, 0xc0,
0xd, 0x91, 0x1c, 0x70, 0x1, 0xae, 0xe8, 0x0,
/* U+0066 "f" */
0x0, 0x7f, 0xf2, 0x0, 0xe4, 0x0, 0x1, 0xf0,
0x0, 0xef, 0xff, 0xf0, 0x1, 0xf0, 0x0, 0x1,
0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0,
0x1, 0xf0, 0x0, 0x1, 0xf0, 0x0, 0x1, 0xf0,
0x0,
/* U+0067 "g" */
0x0, 0xae, 0xd5, 0xb6, 0xb, 0xb1, 0x1a, 0xe6,
0x2f, 0x10, 0x0, 0xf6, 0x5c, 0x0, 0x0, 0xc6,
0x5c, 0x0, 0x0, 0xc6, 0x2f, 0x0, 0x0, 0xf6,
0xb, 0xa1, 0x1a, 0xe6, 0x0, 0xae, 0xd5, 0xb5,
0x4, 0x0, 0x0, 0xd3, 0xd, 0x80, 0x7, 0xd0,
0x2, 0xbe, 0xeb, 0x20,
/* U+0068 "h" */
0x1f, 0x0, 0x0, 0x1, 0xf0, 0x0, 0x0, 0x1f,
0x0, 0x0, 0x1, 0xf2, 0xcf, 0xb1, 0x1f, 0xa2,
0x2c, 0x91, 0xf3, 0x0, 0x6d, 0x1f, 0x0, 0x3,
0xe1, 0xf0, 0x0, 0x2e, 0x1f, 0x0, 0x2, 0xe1,
0xf0, 0x0, 0x2e, 0x1f, 0x0, 0x2, 0xe0,
/* U+0069 "i" */
0xd, 0x60, 0x94, 0x0, 0x0, 0xc5, 0xc, 0x50,
0xc5, 0xc, 0x50, 0xc5, 0xc, 0x50, 0xc5, 0xc,
0x50,
/* U+006A "j" */
0x0, 0xb9, 0x0, 0x76, 0x0, 0x0, 0x0, 0x97,
0x0, 0x97, 0x0, 0x97, 0x0, 0x97, 0x0, 0x97,
0x0, 0x97, 0x0, 0x97, 0x0, 0x97, 0x0, 0xa7,
0x1, 0xd6, 0x3f, 0xb0,
/* U+006B "k" */
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x1c, 0x90,
0x1f, 0x0, 0xc9, 0x0, 0x1f, 0xc, 0x90, 0x0,
0x1f, 0xcf, 0x20, 0x0, 0x1f, 0xa8, 0xc0, 0x0,
0x1f, 0x0, 0xc9, 0x0, 0x1f, 0x0, 0x2f, 0x40,
0x1f, 0x0, 0x6, 0xe1,
/* U+006C "l" */
0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
0xe3, 0xe3, 0xe3,
/* U+006D "m" */
0x1f, 0x4d, 0xd7, 0xa, 0xec, 0x20, 0x1f, 0xa1,
0x3f, 0xc4, 0x19, 0xc0, 0x1f, 0x30, 0xa, 0xa0,
0x1, 0xf0, 0x1f, 0x0, 0x9, 0x80, 0x0, 0xf1,
0x1f, 0x0, 0x8, 0x80, 0x0, 0xf1, 0x1f, 0x0,
0x8, 0x80, 0x0, 0xf1, 0x1f, 0x0, 0x8, 0x80,
0x0, 0xf1, 0x1f, 0x0, 0x8, 0x80, 0x0, 0xf1,
/* U+006E "n" */
0x1f, 0x3c, 0xfb, 0x11, 0xfb, 0x22, 0xc9, 0x1f,
0x20, 0x4, 0xd1, 0xf0, 0x0, 0x2f, 0x1f, 0x0,
0x2, 0xf1, 0xf0, 0x0, 0x2f, 0x1f, 0x0, 0x2,
0xf1, 0xf0, 0x0, 0x2f,
/* U+006F "o" */
0x0, 0x8e, 0xea, 0x10, 0xa, 0xb2, 0x19, 0xd0,
0x2f, 0x10, 0x0, 0xd5, 0x5c, 0x0, 0x0, 0x98,
0x5c, 0x0, 0x0, 0x98, 0x2f, 0x10, 0x0, 0xd5,
0xa, 0xb2, 0x19, 0xd0, 0x0, 0x8e, 0xea, 0x10,
/* U+0070 "p" */
0x1e, 0x3c, 0xeb, 0x10, 0x1f, 0xb2, 0x18, 0xe0,
0x1f, 0x30, 0x0, 0xc5, 0x1f, 0x0, 0x0, 0x98,
0x1f, 0x0, 0x0, 0x98, 0x1f, 0x30, 0x0, 0xc6,
0x1f, 0xa2, 0x17, 0xe0, 0x1f, 0x2c, 0xfb, 0x20,
0x1f, 0x0, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x0,
0x1f, 0x0, 0x0, 0x0,
/* U+0071 "q" */
0x0, 0xae, 0xd5, 0xb5, 0xb, 0xa1, 0x1a, 0xe5,
0x2f, 0x0, 0x1, 0xf5, 0x5c, 0x0, 0x0, 0xc5,
0x5c, 0x0, 0x0, 0xc5, 0x2f, 0x0, 0x1, 0xf5,
0xb, 0xa1, 0x1a, 0xe5, 0x0, 0xae, 0xc4, 0xc5,
0x0, 0x0, 0x0, 0xc5, 0x0, 0x0, 0x0, 0xc5,
0x0, 0x0, 0x0, 0xc5,
/* U+0072 "r" */
0x1f, 0x3c, 0xf0, 0x1f, 0xd5, 0x40, 0x1f, 0x40,
0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f,
0x0, 0x0, 0x1f, 0x0, 0x0, 0x1f, 0x0, 0x0,
/* U+0073 "s" */
0x6, 0xdf, 0xd5, 0x3, 0xf4, 0x15, 0xf2, 0x4e,
0x10, 0x4, 0x20, 0x8f, 0xb6, 0x10, 0x0, 0x5,
0xae, 0x24, 0x60, 0x0, 0xa8, 0x3f, 0x40, 0x3e,
0x60, 0x6d, 0xfe, 0x90,
/* U+0074 "t" */
0x0, 0x40, 0x0, 0x4c, 0x0, 0x4, 0xc0, 0xc,
0xff, 0xf9, 0x4, 0xc0, 0x0, 0x4c, 0x0, 0x4,
0xc0, 0x0, 0x4c, 0x0, 0x4, 0xc0, 0x0, 0x3e,
0x0, 0x0, 0xcf, 0x60,
/* U+0075 "u" */
0x1f, 0x0, 0x2, 0xf1, 0xf0, 0x0, 0x2f, 0x1f,
0x0, 0x2, 0xf1, 0xf0, 0x0, 0x2f, 0x1f, 0x0,
0x2, 0xf0, 0xf1, 0x0, 0x7f, 0xd, 0x91, 0x3d,
0xf0, 0x3c, 0xfb, 0x3f,
/* U+0076 "v" */
0xc7, 0x0, 0xb, 0x76, 0xc0, 0x0, 0xf2, 0x1f,
0x10, 0x5d, 0x0, 0xb6, 0xa, 0x70, 0x6, 0xb0,
0xf2, 0x0, 0x1f, 0x6c, 0x0, 0x0, 0xbe, 0x70,
0x0, 0x5, 0xf1, 0x0,
/* U+0077 "w" */
0xc6, 0x0, 0x5e, 0x0, 0xd, 0x57, 0xb0, 0xa,
0xf3, 0x2, 0xf0, 0x2f, 0x0, 0xd8, 0x70, 0x6b,
0x0, 0xd4, 0x2c, 0x3b, 0xb, 0x60, 0x8, 0x86,
0x80, 0xe0, 0xf1, 0x0, 0x3c, 0xa3, 0xa, 0x7c,
0x0, 0x0, 0xee, 0x0, 0x6f, 0x70, 0x0, 0x9,
0xb0, 0x2, 0xf2, 0x0,
/* U+0078 "x" */
0x4e, 0x10, 0xd, 0x60, 0x9, 0xa0, 0x8b, 0x0,
0x0, 0xd8, 0xe1, 0x0, 0x0, 0x4f, 0x60, 0x0,
0x0, 0x8e, 0xa0, 0x0, 0x3, 0xe2, 0xd5, 0x0,
0xd, 0x50, 0x4e, 0x10, 0x9b, 0x0, 0x9, 0xb0,
/* U+0079 "y" */
0xc7, 0x0, 0x8, 0xb6, 0xc0, 0x0, 0xd5, 0xf,
0x20, 0x3f, 0x0, 0xa8, 0x8, 0x90, 0x4, 0xd0,
0xe3, 0x0, 0xe, 0x7e, 0x0, 0x0, 0x8f, 0x80,
0x0, 0x2, 0xf2, 0x0, 0x0, 0x5c, 0x0, 0x0,
0xb, 0x70, 0x0, 0x2, 0xf1, 0x0, 0x0,
/* U+007A "z" */
0x8f, 0xff, 0xff, 0x30, 0x0, 0x9, 0xc0, 0x0,
0x4, 0xe1, 0x0, 0x1, 0xe5, 0x0, 0x0, 0xb9,
0x0, 0x0, 0x7d, 0x0, 0x0, 0x3f, 0x30, 0x0,
0xa, 0xff, 0xff, 0xf7,
/* U+007B "{" */
0x0, 0xbf, 0x50, 0x3d, 0x0, 0x5, 0xa0, 0x0,
0x5a, 0x0, 0x6, 0xa0, 0x0, 0xa7, 0x0, 0xbc,
0x0, 0x2, 0xc5, 0x0, 0x6, 0x90, 0x0, 0x5a,
0x0, 0x5, 0xa0, 0x0, 0x5a, 0x0, 0x2, 0xd0,
0x0, 0xa, 0xf5,
/* U+007C "|" */
0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d,
0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d,
/* U+007D "}" */
0xae, 0x60, 0x0, 0x3e, 0x0, 0x0, 0xf0, 0x0,
0xf, 0x0, 0x0, 0xf0, 0x0, 0xd, 0x40, 0x0,
0x3f, 0x50, 0xb, 0x70, 0x0, 0xf1, 0x0, 0xf,
0x0, 0x0, 0xf0, 0x0, 0xf, 0x0, 0x4, 0xd0,
0xa, 0xe5, 0x0,
/* U+007E "~" */
0x2c, 0xd8, 0x24, 0x55, 0x41, 0x7d, 0xc2,
/* U+007F "" */
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 75, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 75, .box_w = 3, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 17, .adv_w = 96, .box_w = 4, .box_h = 4, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 25, .adv_w = 134, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 75, .adv_w = 134, .box_w = 8, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 135, .adv_w = 217, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 207, .adv_w = 163, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 262, .adv_w = 55, .box_w = 2, .box_h = 4, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 266, .adv_w = 75, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 294, .adv_w = 75, .box_w = 4, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 322, .adv_w = 113, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 347, .adv_w = 136, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 379, .adv_w = 59, .box_w = 3, .box_h = 5, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 387, .adv_w = 136, .box_w = 8, .box_h = 2, .ofs_x = 0, .ofs_y = 2},
{.bitmap_index = 395, .adv_w = 59, .box_w = 2, .box_h = 2, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 397, .adv_w = 112, .box_w = 7, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 446, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 490, .adv_w = 90, .box_w = 5, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 518, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 562, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 606, .adv_w = 134, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 656, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 700, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 744, .adv_w = 123, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 788, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 832, .adv_w = 134, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 876, .adv_w = 59, .box_w = 2, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 883, .adv_w = 59, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 898, .adv_w = 136, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 930, .adv_w = 136, .box_w = 8, .box_h = 5, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 950, .adv_w = 136, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 982, .adv_w = 120, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1021, .adv_w = 192, .box_w = 12, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1087, .adv_w = 147, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1142, .adv_w = 152, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1186, .adv_w = 163, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1241, .adv_w = 158, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1291, .adv_w = 143, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1335, .adv_w = 129, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1374, .adv_w = 168, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1429, .adv_w = 161, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1479, .adv_w = 53, .box_w = 2, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1490, .adv_w = 116, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1529, .adv_w = 155, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1579, .adv_w = 132, .box_w = 7, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1618, .adv_w = 198, .box_w = 11, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1679, .adv_w = 161, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1729, .adv_w = 172, .box_w = 11, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1790, .adv_w = 144, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1834, .adv_w = 172, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 1900, .adv_w = 151, .box_w = 9, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1950, .adv_w = 142, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2000, .adv_w = 139, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2050, .adv_w = 160, .box_w = 8, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2094, .adv_w = 143, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2144, .adv_w = 208, .box_w = 13, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2216, .adv_w = 143, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2266, .adv_w = 148, .box_w = 10, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2321, .adv_w = 140, .box_w = 9, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2371, .adv_w = 75, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2406, .adv_w = 112, .box_w = 7, .box_h = 14, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 2455, .adv_w = 75, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 2490, .adv_w = 116, .box_w = 7, .box_h = 5, .ofs_x = 0, .ofs_y = 6},
{.bitmap_index = 2508, .adv_w = 112, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2515, .adv_w = 75, .box_w = 3, .box_h = 2, .ofs_x = 1, .ofs_y = 9},
{.bitmap_index = 2518, .adv_w = 125, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2546, .adv_w = 131, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2590, .adv_w = 123, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2622, .adv_w = 131, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2666, .adv_w = 124, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2698, .adv_w = 84, .box_w = 6, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2731, .adv_w = 132, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2775, .adv_w = 125, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2814, .adv_w = 57, .box_w = 3, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2831, .adv_w = 60, .box_w = 4, .box_h = 14, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 2859, .adv_w = 118, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2903, .adv_w = 53, .box_w = 2, .box_h = 11, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2914, .adv_w = 192, .box_w = 12, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2962, .adv_w = 125, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2990, .adv_w = 131, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3022, .adv_w = 131, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3066, .adv_w = 131, .box_w = 8, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3110, .adv_w = 82, .box_w = 6, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3134, .adv_w = 113, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3162, .adv_w = 80, .box_w = 5, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3190, .adv_w = 125, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3218, .adv_w = 108, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3246, .adv_w = 169, .box_w = 11, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3290, .adv_w = 114, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3322, .adv_w = 111, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3361, .adv_w = 109, .box_w = 7, .box_h = 8, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3389, .adv_w = 75, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3424, .adv_w = 44, .box_w = 2, .box_h = 15, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3439, .adv_w = 75, .box_w = 5, .box_h = 14, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3474, .adv_w = 112, .box_w = 7, .box_h = 2, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 3481, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 96, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
const lv_font_t ui_font_PingFangEN14 = {
#else
lv_font_t ui_font_PingFangEN14 = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 16, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -2,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if UI_FONT_PINGFANGEN14*/
@@ -0,0 +1,16 @@
{
"codename": "PingFangEN14",
"ttf_path": "\\assets\\pingfang.otf",
"bin_path": "\\assets\\ui_font_PingFangEN14.bin",
"c_path": "\\assets\\ui_font_PingFangEN14.c",
"cfg_path": "\\assets\\ui_font_PingFangEN14.fcfg",
"size": 14,
"bpp": 4,
"letters": 0,
"ranges": [
"0x20-0x7f"
],
"symbols": "",
"customparams": "--no-compress --no-prefilter",
"uploaded": false
}
@@ -0,0 +1,969 @@
/*******************************************************************************
* Size: 16 px
* Bpp: 4
* Opts: --bpp 4 --size 16 --font C:\Users\liu\Desktop\Project\squareline\chat_gpt_new_gui\assets\pingfang.otf -o C:\Users\liu\Desktop\Project\squareline\chat_gpt_new_gui\assets\ui_font_PingFangEN16.c --format lvgl -r 0x20-0x7f --no-compress --no-prefilter
******************************************************************************/
#include "../ui.h"
#ifndef UI_FONT_PINGFANGEN16
#define UI_FONT_PINGFANGEN16 1
#endif
#if UI_FONT_PINGFANGEN16
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t glyph_bitmap[] = {
/* U+0020 " " */
/* U+0021 "!" */
0x1f, 0x60, 0xf5, 0xf, 0x50, 0xf4, 0xf, 0x40,
0xe4, 0xe, 0x30, 0xd3, 0xb, 0x20, 0x0, 0x1e,
0x61, 0xe6,
/* U+0022 "\"" */
0xb9, 0xc, 0x8a, 0x90, 0xb7, 0xa8, 0xb, 0x79,
0x80, 0xa6, 0x11, 0x2, 0x10,
/* U+0023 "#" */
0x0, 0xa, 0x60, 0x2e, 0x0, 0x0, 0xc, 0x40,
0x4c, 0x0, 0x0, 0xe, 0x20, 0x6a, 0x0, 0xc,
0xef, 0xee, 0xff, 0xe1, 0x1, 0x4d, 0x11, 0xc6,
0x10, 0x0, 0x6a, 0x0, 0xe2, 0x0, 0x0, 0x88,
0x0, 0xf0, 0x0, 0x0, 0xb5, 0x3, 0xd0, 0x0,
0x7e, 0xfe, 0xee, 0xfe, 0x70, 0x1, 0xf2, 0x19,
0x91, 0x0, 0x2, 0xe0, 0xa, 0x60, 0x0, 0x5,
0xc0, 0xd, 0x30, 0x0,
/* U+0024 "$" */
0x0, 0x0, 0x92, 0x0, 0x0, 0x0, 0x9, 0x20,
0x0, 0x0, 0x7d, 0xff, 0xb2, 0x0, 0x8e, 0x7b,
0x6b, 0xe1, 0xe, 0x60, 0x92, 0xe, 0x60, 0xe6,
0x9, 0x20, 0x43, 0xa, 0xe5, 0xa2, 0x0, 0x0,
0x9, 0xff, 0x81, 0x0, 0x0, 0x1, 0xce, 0xf8,
0x0, 0x0, 0x9, 0x25, 0xf7, 0x1d, 0x20, 0x92,
0x9, 0xb0, 0xe7, 0x9, 0x20, 0xaa, 0x7, 0xf7,
0xb6, 0x9f, 0x40, 0x7, 0xdf, 0xfc, 0x50, 0x0,
0x0, 0x92, 0x0, 0x0, 0x0, 0x4, 0x10, 0x0,
/* U+0025 "%" */
0xa, 0xed, 0x30, 0x0, 0xc, 0x30, 0x0, 0x9b,
0x5, 0xe0, 0x0, 0x5a, 0x0, 0x0, 0xd6, 0x0,
0xf3, 0x0, 0xd2, 0x0, 0x0, 0xc6, 0x0, 0xf3,
0x6, 0x90, 0x0, 0x0, 0x8b, 0x6, 0xe0, 0xd,
0x10, 0x0, 0x0, 0x9, 0xec, 0x30, 0x78, 0x7,
0xdc, 0x30, 0x0, 0x0, 0x1, 0xe1, 0x5d, 0x15,
0xe0, 0x0, 0x0, 0x8, 0x70, 0xa8, 0x0, 0xf4,
0x0, 0x0, 0x1d, 0x0, 0xb7, 0x0, 0xd6, 0x0,
0x0, 0xa6, 0x0, 0xa9, 0x0, 0xf4, 0x0, 0x2,
0xd0, 0x0, 0x5d, 0x14, 0xf0, 0x0, 0xb, 0x50,
0x0, 0x8, 0xed, 0x40,
/* U+0026 "&" */
0x0, 0x1a, 0xfe, 0x90, 0x0, 0x0, 0x0, 0xbc,
0x34, 0xe8, 0x0, 0x0, 0x0, 0xe6, 0x0, 0xaa,
0x0, 0x0, 0x0, 0xac, 0x3, 0xf5, 0x0, 0x0,
0x0, 0x1e, 0xce, 0x60, 0x1, 0x0, 0x0, 0x4d,
0xf9, 0x0, 0x2f, 0x10, 0x6, 0xf5, 0x3f, 0x70,
0x5f, 0x0, 0xf, 0x50, 0x3, 0xf6, 0x9c, 0x0,
0x4f, 0x0, 0x0, 0x4f, 0xf6, 0x0, 0x2f, 0x40,
0x0, 0xc, 0xf5, 0x0, 0xb, 0xe7, 0x46, 0xce,
0x9f, 0x20, 0x0, 0x7d, 0xfd, 0x91, 0xa, 0xd1,
/* U+0027 "'" */
0xb9, 0xa9, 0xa8, 0x98, 0x11,
/* U+0028 "(" */
0x0, 0xe, 0x30, 0x6, 0xc0, 0x0, 0xe5, 0x0,
0x5e, 0x0, 0x9, 0xa0, 0x0, 0xd6, 0x0, 0xf,
0x40, 0x0, 0xf3, 0x0, 0xf, 0x30, 0x0, 0xf4,
0x0, 0xd, 0x60, 0x0, 0x9a, 0x0, 0x5, 0xe0,
0x0, 0xe, 0x50, 0x0, 0x6c, 0x0, 0x0, 0xe3,
/* U+0029 ")" */
0xd, 0x40, 0x0, 0x6b, 0x0, 0x0, 0xf3, 0x0,
0x9, 0xa0, 0x0, 0x5e, 0x0, 0x1, 0xf2, 0x0,
0xf, 0x40, 0x0, 0xe5, 0x0, 0xe, 0x50, 0x0,
0xf4, 0x0, 0x1f, 0x20, 0x5, 0xe0, 0x0, 0x9a,
0x0, 0xf, 0x30, 0x6, 0xc0, 0x0, 0xd4, 0x0,
/* U+002A "*" */
0x0, 0x7, 0x90, 0x0, 0x0, 0x7, 0x80, 0x0,
0x48, 0x26, 0x81, 0x86, 0x39, 0xee, 0xee, 0xa4,
0x0, 0x1e, 0xe1, 0x0, 0x0, 0xa8, 0x6c, 0x0,
0x6, 0xd0, 0xb, 0x70, 0x0, 0x20, 0x1, 0x0,
/* U+002B "+" */
0x0, 0x0, 0xb6, 0x0, 0x0, 0x0, 0xb, 0x60,
0x0, 0x0, 0x0, 0xb6, 0x0, 0x0, 0x0, 0xb,
0x60, 0x0, 0x3f, 0xff, 0xff, 0xff, 0xd0, 0x22,
0x2c, 0x72, 0x22, 0x0, 0x0, 0xb6, 0x0, 0x0,
0x0, 0xb, 0x60, 0x0, 0x0, 0x0, 0xb6, 0x0,
0x0,
/* U+002C "," */
0x0, 0xb, 0xd0, 0xaf, 0x40, 0xc2, 0x8a, 0x6,
0x0,
/* U+002D "-" */
0x3f, 0xff, 0xff, 0xff, 0xd0, 0x22, 0x22, 0x22,
0x22,
/* U+002E "." */
0x0, 0xa, 0xd0, 0x9c, 0x0,
/* U+002F "/" */
0x0, 0x0, 0x0, 0x62, 0x0, 0x0, 0x1, 0xf1,
0x0, 0x0, 0x7, 0xa0, 0x0, 0x0, 0xd, 0x40,
0x0, 0x0, 0x3e, 0x0, 0x0, 0x0, 0x99, 0x0,
0x0, 0x0, 0xe3, 0x0, 0x0, 0x4, 0xd0, 0x0,
0x0, 0xa, 0x70, 0x0, 0x0, 0xf, 0x10, 0x0,
0x0, 0x6c, 0x0, 0x0, 0x0, 0xc6, 0x0, 0x0,
0x2, 0xf0, 0x0, 0x0, 0x7, 0xa0, 0x0, 0x0,
0xd, 0x40, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x0,
/* U+0030 "0" */
0x0, 0x2a, 0xed, 0x80, 0x0, 0x1d, 0xb4, 0x6e,
0x90, 0x8, 0xc0, 0x0, 0x3f, 0x20, 0xe6, 0x0,
0x0, 0xc7, 0xf, 0x30, 0x0, 0x9, 0xa2, 0xf2,
0x0, 0x0, 0x8b, 0x2f, 0x20, 0x0, 0x8, 0xb0,
0xf3, 0x0, 0x0, 0x9a, 0xe, 0x60, 0x0, 0xc,
0x70, 0x8c, 0x0, 0x3, 0xf2, 0x1, 0xdb, 0x46,
0xe9, 0x0, 0x2, 0xae, 0xd7, 0x0,
/* U+0031 "1" */
0x0, 0x1c, 0xb0, 0x6e, 0xfb, 0x4e, 0x69, 0xb1,
0x0, 0x9b, 0x0, 0x9, 0xb0, 0x0, 0x9b, 0x0,
0x9, 0xb0, 0x0, 0x9b, 0x0, 0x9, 0xb0, 0x0,
0x9b, 0x0, 0x9, 0xb0, 0x0, 0x9b,
/* U+0032 "2" */
0x0, 0x1a, 0xee, 0xa2, 0x0, 0x1e, 0xa4, 0x4b,
0xe1, 0x9, 0xd0, 0x0, 0xe, 0x60, 0xc8, 0x0,
0x0, 0xc8, 0x4, 0x20, 0x0, 0xf, 0x50, 0x0,
0x0, 0x9, 0xd0, 0x0, 0x0, 0xa, 0xe3, 0x0,
0x0, 0x2d, 0xc1, 0x0, 0x0, 0x4f, 0x90, 0x0,
0x0, 0x2f, 0x70, 0x0, 0x0, 0xb, 0xd3, 0x33,
0x33, 0x20, 0xef, 0xff, 0xff, 0xf9,
/* U+0033 "3" */
0x0, 0x3b, 0xee, 0xb3, 0x0, 0x3f, 0x94, 0x4a,
0xf2, 0xb, 0xa0, 0x0, 0xe, 0x70, 0x63, 0x0,
0x0, 0xc6, 0x0, 0x0, 0x0, 0x6e, 0x10, 0x0,
0xe, 0xfe, 0x20, 0x0, 0x0, 0x13, 0x8d, 0x20,
0x0, 0x0, 0x0, 0xba, 0x1e, 0x30, 0x0, 0x9,
0xb0, 0xd8, 0x0, 0x0, 0xd9, 0x4, 0xf8, 0x34,
0xbe, 0x10, 0x4, 0xcf, 0xea, 0x20,
/* U+0034 "4" */
0x0, 0x0, 0x3, 0xf5, 0x0, 0x0, 0x0, 0x1e,
0xf5, 0x0, 0x0, 0x0, 0xb8, 0xd5, 0x0, 0x0,
0x6, 0xc0, 0xd5, 0x0, 0x0, 0x3e, 0x20, 0xd5,
0x0, 0x0, 0xd5, 0x0, 0xd5, 0x0, 0x9, 0x90,
0x0, 0xd5, 0x0, 0x5d, 0x0, 0x0, 0xd5, 0x0,
0x9f, 0xff, 0xff, 0xff, 0xf3, 0x12, 0x22, 0x22,
0xe7, 0x20, 0x0, 0x0, 0x0, 0xd5, 0x0, 0x0,
0x0, 0x0, 0xd5, 0x0,
/* U+0035 "5" */
0x5, 0xff, 0xff, 0xff, 0x40, 0x7c, 0x33, 0x33,
0x31, 0x8, 0xa0, 0x0, 0x0, 0x0, 0xa8, 0x0,
0x0, 0x0, 0xb, 0x78, 0xde, 0xa2, 0x0, 0xdf,
0x83, 0x4b, 0xe1, 0x7, 0x50, 0x0, 0xd, 0x80,
0x0, 0x0, 0x0, 0x9b, 0x5, 0x0, 0x0, 0x9,
0xb0, 0xf6, 0x0, 0x0, 0xe7, 0x6, 0xf8, 0x45,
0xdd, 0x0, 0x5, 0xcf, 0xd9, 0x0,
/* U+0036 "6" */
0x0, 0x9, 0xee, 0xb3, 0x0, 0xc, 0xb4, 0x5b,
0xe1, 0x6, 0xd0, 0x0, 0xe, 0x70, 0xc6, 0x0,
0x0, 0x0, 0xf, 0x26, 0xce, 0xb2, 0x1, 0xf8,
0xa3, 0x4b, 0xe1, 0x2f, 0xb0, 0x0, 0xd, 0x81,
0xf5, 0x0, 0x0, 0x9b, 0xf, 0x60, 0x0, 0x9,
0xb0, 0x9b, 0x0, 0x0, 0xe7, 0x2, 0xea, 0x44,
0xcd, 0x0, 0x2, 0xae, 0xea, 0x10,
/* U+0037 "7" */
0x7f, 0xff, 0xff, 0xff, 0x1, 0x44, 0x44, 0x49,
0xe0, 0x0, 0x0, 0x0, 0xc8, 0x0, 0x0, 0x0,
0x2f, 0x20, 0x0, 0x0, 0x9, 0xb0, 0x0, 0x0,
0x0, 0xe5, 0x0, 0x0, 0x0, 0x5e, 0x0, 0x0,
0x0, 0xc, 0x90, 0x0, 0x0, 0x2, 0xf3, 0x0,
0x0, 0x0, 0x8c, 0x0, 0x0, 0x0, 0xe, 0x60,
0x0, 0x0, 0x5, 0xf1, 0x0, 0x0,
/* U+0038 "8" */
0x0, 0x5c, 0xfe, 0xa2, 0x0, 0x6f, 0x62, 0x3a,
0xe1, 0xd, 0x70, 0x0, 0xd, 0x60, 0xc6, 0x0,
0x0, 0xc6, 0x6, 0xd3, 0x0, 0x6e, 0x10, 0x8,
0xff, 0xff, 0x30, 0x8, 0xe6, 0x23, 0x9f, 0x32,
0xf3, 0x0, 0x0, 0xab, 0x4f, 0x0, 0x0, 0x6,
0xe2, 0xf3, 0x0, 0x0, 0xab, 0xa, 0xe5, 0x23,
0x9f, 0x40, 0x7, 0xdf, 0xeb, 0x30,
/* U+0039 "9" */
0x0, 0x5c, 0xfd, 0x80, 0x0, 0x6f, 0x73, 0x4c,
0xa0, 0xf, 0x60, 0x0, 0x1e, 0x32, 0xf2, 0x0,
0x0, 0xb8, 0xf, 0x40, 0x0, 0xe, 0xa0, 0xae,
0x40, 0x2a, 0xcc, 0x0, 0x9f, 0xfe, 0x58, 0xb0,
0x0, 0x1, 0x0, 0xa9, 0x7, 0x20, 0x0, 0xe,
0x60, 0xb9, 0x0, 0x6, 0xf0, 0x4, 0xf7, 0x37,
0xf6, 0x0, 0x5, 0xcf, 0xc6, 0x0,
/* U+003A ":" */
0x0, 0xa, 0xd0, 0x9c, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xa, 0xd0, 0x9c, 0x0,
/* U+003B ";" */
0x0, 0xa, 0xd0, 0x9c, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0xb, 0xd0, 0xaf, 0x40, 0xc2, 0x8a,
0x6, 0x0,
/* U+003C "<" */
0x0, 0x0, 0x0, 0x1, 0x70, 0x0, 0x0, 0x29,
0xfa, 0x0, 0x2, 0xaf, 0xa2, 0x0, 0x3b, 0xf9,
0x20, 0x0, 0x3f, 0xc1, 0x0, 0x0, 0x0, 0x7e,
0xc5, 0x0, 0x0, 0x0, 0x7, 0xed, 0x60, 0x0,
0x0, 0x0, 0x6d, 0xe6, 0x0, 0x0, 0x0, 0x5,
0xa0,
/* U+003D "=" */
0x3f, 0xff, 0xff, 0xff, 0xd0, 0x22, 0x22, 0x22,
0x22, 0x0, 0x0, 0x0, 0x0, 0x3, 0xff, 0xff,
0xff, 0xfd, 0x2, 0x22, 0x22, 0x22, 0x20,
/* U+003E ">" */
0x26, 0x0, 0x0, 0x0, 0x1, 0xde, 0x70, 0x0,
0x0, 0x0, 0x5c, 0xe7, 0x10, 0x0, 0x0, 0x4,
0xbf, 0x81, 0x0, 0x0, 0x0, 0x4e, 0xd0, 0x0,
0x1, 0x7e, 0xc5, 0x0, 0x18, 0xfc, 0x40, 0x1,
0x9f, 0xb3, 0x0, 0x0, 0x3a, 0x20, 0x0, 0x0,
0x0,
/* U+003F "?" */
0x0, 0x7d, 0xfd, 0x50, 0x7, 0xe6, 0x37, 0xf5,
0xf, 0x50, 0x0, 0xaa, 0x1d, 0x10, 0x0, 0x9b,
0x0, 0x0, 0x1, 0xe7, 0x0, 0x0, 0x1c, 0xc0,
0x0, 0x0, 0xcc, 0x0, 0x0, 0x3, 0xf1, 0x0,
0x0, 0x5, 0xb0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x8, 0xd0, 0x0, 0x0, 0x7, 0xd0, 0x0,
/* U+0040 "@" */
0x0, 0x0, 0x7b, 0xee, 0xc7, 0x0, 0x0, 0x2,
0xd9, 0x30, 0x2, 0x9d, 0x10, 0x0, 0xe5, 0x5,
0xcd, 0x48, 0x6b, 0x0, 0x9a, 0x5, 0xf6, 0x3d,
0xb0, 0xc2, 0xe, 0x30, 0xe5, 0x0, 0xa6, 0x9,
0x51, 0xf0, 0x3e, 0x0, 0xd, 0x20, 0xa3, 0x1f,
0x5, 0xc0, 0x3, 0xe0, 0x1d, 0x0, 0xe2, 0x2f,
0x23, 0xcc, 0x1b, 0x60, 0xa, 0x70, 0x7e, 0xd3,
0xcd, 0x63, 0x50, 0x2e, 0x20, 0x0, 0x0, 0x2,
0xe3, 0x0, 0x5e, 0x72, 0x0, 0x16, 0xd4, 0x0,
0x0, 0x18, 0xce, 0xed, 0x81, 0x0,
/* U+0041 "A" */
0x0, 0x0, 0xaf, 0x30, 0x0, 0x0, 0x0, 0x1f,
0xd9, 0x0, 0x0, 0x0, 0x6, 0xc4, 0xe0, 0x0,
0x0, 0x0, 0xc6, 0xe, 0x50, 0x0, 0x0, 0x2f,
0x0, 0x8b, 0x0, 0x0, 0x8, 0xa0, 0x2, 0xf1,
0x0, 0x0, 0xe3, 0x0, 0xb, 0x70, 0x0, 0x4f,
0xff, 0xff, 0xfd, 0x0, 0xa, 0x92, 0x22, 0x23,
0xf3, 0x1, 0xf3, 0x0, 0x0, 0xb, 0x90, 0x6e,
0x0, 0x0, 0x0, 0x6e, 0xc, 0x90, 0x0, 0x0,
0x1, 0xf5,
/* U+0042 "B" */
0xdf, 0xff, 0xff, 0xc5, 0x0, 0xd8, 0x22, 0x23,
0x8f, 0x40, 0xd7, 0x0, 0x0, 0xb, 0x90, 0xd7,
0x0, 0x0, 0xa, 0x90, 0xd7, 0x0, 0x0, 0x5e,
0x30, 0xdf, 0xff, 0xff, 0xf5, 0x0, 0xd8, 0x22,
0x23, 0x7e, 0x70, 0xd7, 0x0, 0x0, 0x6, 0xf0,
0xd7, 0x0, 0x0, 0x2, 0xf2, 0xd7, 0x0, 0x0,
0x6, 0xf0, 0xd8, 0x22, 0x24, 0x8f, 0x90, 0xdf,
0xff, 0xff, 0xd7, 0x0,
/* U+0043 "C" */
0x0, 0x5, 0xbe, 0xfc, 0x60, 0x0, 0x9, 0xf9,
0x54, 0x8e, 0xa0, 0x5, 0xf3, 0x0, 0x0, 0x2e,
0x60, 0xd8, 0x0, 0x0, 0x0, 0x78, 0x1f, 0x20,
0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0,
0x0, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x2, 0xf2,
0x0, 0x0, 0x0, 0x13, 0xe, 0x70, 0x0, 0x0,
0x8, 0xb0, 0x6e, 0x20, 0x0, 0x3, 0xf5, 0x0,
0xaf, 0x85, 0x48, 0xf9, 0x0, 0x0, 0x6b, 0xee,
0xc5, 0x0,
/* U+0044 "D" */
0xdf, 0xff, 0xfc, 0x91, 0x0, 0xd9, 0x33, 0x46,
0xde, 0x30, 0xd7, 0x0, 0x0, 0xa, 0xc0, 0xd7,
0x0, 0x0, 0x2, 0xf4, 0xd7, 0x0, 0x0, 0x0,
0xd6, 0xd7, 0x0, 0x0, 0x0, 0xb8, 0xd7, 0x0,
0x0, 0x0, 0xb8, 0xd7, 0x0, 0x0, 0x0, 0xd6,
0xd7, 0x0, 0x0, 0x3, 0xf3, 0xd7, 0x0, 0x0,
0xc, 0xb0, 0xd9, 0x33, 0x47, 0xed, 0x20, 0xdf,
0xff, 0xec, 0x80, 0x0,
/* U+0045 "E" */
0xdf, 0xff, 0xff, 0xff, 0x3d, 0x93, 0x33, 0x33,
0x30, 0xd7, 0x0, 0x0, 0x0, 0xd, 0x70, 0x0,
0x0, 0x0, 0xd7, 0x0, 0x0, 0x0, 0xd, 0xff,
0xff, 0xff, 0xd0, 0xd9, 0x22, 0x22, 0x22, 0xd,
0x70, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd, 0x70, 0x0, 0x0, 0x0, 0xd9, 0x33, 0x33,
0x33, 0x1d, 0xff, 0xff, 0xff, 0xf8,
/* U+0046 "F" */
0xdf, 0xff, 0xff, 0xfc, 0xd9, 0x33, 0x33, 0x32,
0xd7, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd7, 0x0, 0x0, 0x0, 0xdf, 0xff, 0xff, 0xf7,
0xd9, 0x22, 0x22, 0x21, 0xd7, 0x0, 0x0, 0x0,
0xd7, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd7, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
/* U+0047 "G" */
0x0, 0x5, 0xbe, 0xec, 0x60, 0x0, 0x8, 0xf9,
0x54, 0x8f, 0xb0, 0x5, 0xf3, 0x0, 0x0, 0x2f,
0x60, 0xd8, 0x0, 0x0, 0x0, 0x9c, 0x1f, 0x30,
0x0, 0x0, 0x0, 0x4, 0xf0, 0x0, 0x0, 0x0,
0x0, 0x4f, 0x0, 0x0, 0xff, 0xff, 0xe1, 0xf2,
0x0, 0x2, 0x22, 0x7e, 0xe, 0x80, 0x0, 0x0,
0x5, 0xe0, 0x5f, 0x30, 0x0, 0x0, 0x6e, 0x0,
0x9f, 0x95, 0x45, 0x9f, 0xb0, 0x0, 0x4a, 0xdf,
0xda, 0x40,
/* U+0048 "H" */
0xd7, 0x0, 0x0, 0x0, 0xe6, 0xd7, 0x0, 0x0,
0x0, 0xe6, 0xd7, 0x0, 0x0, 0x0, 0xe6, 0xd7,
0x0, 0x0, 0x0, 0xe6, 0xd7, 0x0, 0x0, 0x0,
0xe6, 0xdf, 0xff, 0xff, 0xff, 0xf6, 0xd9, 0x22,
0x22, 0x22, 0xe6, 0xd7, 0x0, 0x0, 0x0, 0xe6,
0xd7, 0x0, 0x0, 0x0, 0xe6, 0xd7, 0x0, 0x0,
0x0, 0xe6, 0xd7, 0x0, 0x0, 0x0, 0xe6, 0xd7,
0x0, 0x0, 0x0, 0xe6,
/* U+0049 "I" */
0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
0xb8, 0xb8, 0xb8, 0xb8,
/* U+004A "J" */
0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2, 0xf2,
0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2, 0xf2,
0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2, 0xf2,
0x0, 0x0, 0x2, 0xf2, 0x0, 0x0, 0x2, 0xf2,
0xb9, 0x0, 0x3, 0xf1, 0x9c, 0x0, 0x7, 0xf0,
0x3f, 0x84, 0x6f, 0x90, 0x5, 0xdf, 0xd8, 0x0,
/* U+004B "K" */
0xd7, 0x0, 0x0, 0x1c, 0xc0, 0xd, 0x70, 0x0,
0x1c, 0xc0, 0x0, 0xd7, 0x0, 0xc, 0xc0, 0x0,
0xd, 0x70, 0xc, 0xc0, 0x0, 0x0, 0xd7, 0xc,
0xc0, 0x0, 0x0, 0xd, 0x8c, 0xf7, 0x0, 0x0,
0x0, 0xdf, 0xb6, 0xf5, 0x0, 0x0, 0xd, 0xc0,
0x8, 0xf3, 0x0, 0x0, 0xd7, 0x0, 0xa, 0xe2,
0x0, 0xd, 0x70, 0x0, 0xc, 0xd0, 0x0, 0xd7,
0x0, 0x0, 0x1e, 0xb0, 0xd, 0x70, 0x0, 0x0,
0x3f, 0x90,
/* U+004C "L" */
0xd7, 0x0, 0x0, 0x0, 0xd, 0x70, 0x0, 0x0,
0x0, 0xd7, 0x0, 0x0, 0x0, 0xd, 0x70, 0x0,
0x0, 0x0, 0xd7, 0x0, 0x0, 0x0, 0xd, 0x70,
0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0, 0xd,
0x70, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd, 0x70, 0x0, 0x0, 0x0, 0xd9, 0x33, 0x33,
0x33, 0xd, 0xff, 0xff, 0xff, 0xf0,
/* U+004D "M" */
0xdf, 0x0, 0x0, 0x0, 0x0, 0xdf, 0xdf, 0x60,
0x0, 0x0, 0x4, 0xff, 0xde, 0xd0, 0x0, 0x0,
0xb, 0xef, 0xd8, 0xf3, 0x0, 0x0, 0x2f, 0x8f,
0xd7, 0xaa, 0x0, 0x0, 0x8b, 0x5f, 0xd7, 0x3f,
0x10, 0x0, 0xe5, 0x5f, 0xd7, 0xd, 0x70, 0x5,
0xe0, 0x5f, 0xd7, 0x6, 0xe0, 0xc, 0x80, 0x5f,
0xd7, 0x0, 0xf5, 0x3f, 0x10, 0x5f, 0xd7, 0x0,
0x9b, 0x9a, 0x0, 0x5f, 0xd7, 0x0, 0x2f, 0xf4,
0x0, 0x5f, 0xd7, 0x0, 0xb, 0xd0, 0x0, 0x5f,
/* U+004E "N" */
0xdd, 0x0, 0x0, 0x0, 0xf5, 0xdf, 0x80, 0x0,
0x0, 0xf5, 0xdb, 0xf3, 0x0, 0x0, 0xf5, 0xd7,
0x9d, 0x0, 0x0, 0xf5, 0xd7, 0xe, 0x80, 0x0,
0xf5, 0xd7, 0x4, 0xf2, 0x0, 0xf5, 0xd7, 0x0,
0x9c, 0x0, 0xf5, 0xd7, 0x0, 0xe, 0x70, 0xf5,
0xd7, 0x0, 0x4, 0xf2, 0xf5, 0xd7, 0x0, 0x0,
0xac, 0xf5, 0xd7, 0x0, 0x0, 0x1e, 0xf5, 0xd7,
0x0, 0x0, 0x5, 0xf5,
/* U+004F "O" */
0x0, 0x4, 0xae, 0xeb, 0x70, 0x0, 0x0, 0x8f,
0x95, 0x47, 0xec, 0x10, 0x5, 0xf4, 0x0, 0x0,
0x1d, 0x90, 0xd, 0x90, 0x0, 0x0, 0x4, 0xf2,
0x1f, 0x30, 0x0, 0x0, 0x0, 0xe5, 0x4f, 0x0,
0x0, 0x0, 0x0, 0xc8, 0x4f, 0x0, 0x0, 0x0,
0x0, 0xc8, 0x1f, 0x30, 0x0, 0x0, 0x0, 0xe5,
0xe, 0x80, 0x0, 0x0, 0x4, 0xf2, 0x5, 0xf3,
0x0, 0x0, 0x1d, 0x90, 0x0, 0x9f, 0x95, 0x47,
0xec, 0x10, 0x0, 0x4, 0xbe, 0xeb, 0x70, 0x0,
/* U+0050 "P" */
0xdf, 0xff, 0xfe, 0xb3, 0xd, 0x93, 0x33, 0x4a,
0xf3, 0xd7, 0x0, 0x0, 0xc, 0x9d, 0x70, 0x0,
0x0, 0x9b, 0xd7, 0x0, 0x0, 0xb, 0x9d, 0x70,
0x0, 0x17, 0xf4, 0xdf, 0xff, 0xff, 0xe6, 0xd,
0x92, 0x22, 0x10, 0x0, 0xd7, 0x0, 0x0, 0x0,
0xd, 0x70, 0x0, 0x0, 0x0, 0xd7, 0x0, 0x0,
0x0, 0xd, 0x70, 0x0, 0x0, 0x0,
/* U+0051 "Q" */
0x0, 0x4, 0xae, 0xeb, 0x70, 0x0, 0x0, 0x8f,
0x95, 0x47, 0xec, 0x10, 0x5, 0xf4, 0x0, 0x0,
0x1d, 0x90, 0xd, 0x90, 0x0, 0x0, 0x4, 0xf2,
0x1f, 0x30, 0x0, 0x0, 0x0, 0xe5, 0x4f, 0x0,
0x0, 0x0, 0x0, 0xc8, 0x4f, 0x0, 0x0, 0x0,
0x0, 0xc8, 0x1f, 0x30, 0x0, 0x29, 0x0, 0xe5,
0xe, 0x80, 0x0, 0xc, 0x94, 0xf2, 0x5, 0xf3,
0x0, 0x1, 0xee, 0x90, 0x0, 0x9f, 0x95, 0x47,
0xef, 0x40, 0x0, 0x4, 0xbe, 0xfc, 0x67, 0xe0,
0x0, 0x0, 0x0, 0x0, 0x0, 0xa2,
/* U+0052 "R" */
0xdf, 0xff, 0xff, 0xc4, 0x0, 0xd9, 0x33, 0x34,
0x9f, 0x30, 0xd7, 0x0, 0x0, 0xc, 0x90, 0xd7,
0x0, 0x0, 0x9, 0xc0, 0xd7, 0x0, 0x0, 0xb,
0xa0, 0xd7, 0x0, 0x1, 0x7f, 0x20, 0xdf, 0xff,
0xff, 0xf3, 0x0, 0xd9, 0x22, 0x34, 0xaf, 0x10,
0xd7, 0x0, 0x0, 0xd, 0x70, 0xd7, 0x0, 0x0,
0xa, 0x90, 0xd7, 0x0, 0x0, 0x8, 0xc0, 0xd7,
0x0, 0x0, 0x4, 0xf2,
/* U+0053 "S" */
0x0, 0x6c, 0xfe, 0xc6, 0x0, 0x9, 0xe7, 0x44,
0x8f, 0x80, 0xf, 0x40, 0x0, 0x6, 0xf0, 0x1f,
0x40, 0x0, 0x0, 0xa2, 0xa, 0xe5, 0x0, 0x0,
0x0, 0x0, 0x7d, 0xfa, 0x50, 0x0, 0x0, 0x0,
0x27, 0xde, 0x50, 0x0, 0x0, 0x0, 0x6, 0xf3,
0x5f, 0x0, 0x0, 0x0, 0xc8, 0x1f, 0x50, 0x0,
0x0, 0xe6, 0x7, 0xf8, 0x44, 0x6d, 0xe1, 0x0,
0x5c, 0xef, 0xd9, 0x10,
/* U+0054 "T" */
0xbf, 0xff, 0xff, 0xff, 0xf9, 0x23, 0x33, 0xca,
0x33, 0x32, 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0,
0x0, 0xb9, 0x0, 0x0, 0x0, 0x0, 0xb9, 0x0,
0x0, 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0, 0x0,
0xb9, 0x0, 0x0, 0x0, 0x0, 0xb9, 0x0, 0x0,
0x0, 0x0, 0xb9, 0x0, 0x0, 0x0, 0x0, 0xb9,
0x0, 0x0, 0x0, 0x0, 0xb9, 0x0, 0x0, 0x0,
0x0, 0xb9, 0x0, 0x0,
/* U+0055 "U" */
0xd7, 0x0, 0x0, 0x0, 0xf4, 0xd7, 0x0, 0x0,
0x0, 0xf4, 0xd7, 0x0, 0x0, 0x0, 0xf4, 0xd7,
0x0, 0x0, 0x0, 0xf4, 0xd7, 0x0, 0x0, 0x0,
0xf4, 0xd7, 0x0, 0x0, 0x0, 0xf4, 0xd7, 0x0,
0x0, 0x0, 0xf4, 0xc8, 0x0, 0x0, 0x1, 0xf3,
0xaa, 0x0, 0x0, 0x3, 0xf1, 0x6f, 0x10, 0x0,
0x9, 0xd0, 0xd, 0xe6, 0x45, 0xaf, 0x40, 0x0,
0x8d, 0xfe, 0xb3, 0x0,
/* U+0056 "V" */
0xba, 0x0, 0x0, 0x0, 0x7e, 0x6, 0xf0, 0x0,
0x0, 0xc, 0x90, 0x1f, 0x50, 0x0, 0x2, 0xf4,
0x0, 0xbb, 0x0, 0x0, 0x7e, 0x0, 0x5, 0xf1,
0x0, 0xd, 0x80, 0x0, 0xf, 0x60, 0x2, 0xf3,
0x0, 0x0, 0xab, 0x0, 0x8d, 0x0, 0x0, 0x4,
0xf1, 0xd, 0x80, 0x0, 0x0, 0xe, 0x62, 0xf2,
0x0, 0x0, 0x0, 0x9c, 0x8c, 0x0, 0x0, 0x0,
0x3, 0xfe, 0x70, 0x0, 0x0, 0x0, 0xd, 0xf1,
0x0, 0x0,
/* U+0057 "W" */
0xca, 0x0, 0x0, 0x6f, 0x40, 0x0, 0xc, 0xa8,
0xe0, 0x0, 0xa, 0xf8, 0x0, 0x0, 0xf6, 0x3f,
0x20, 0x0, 0xeb, 0xc0, 0x0, 0x4f, 0x10, 0xf6,
0x0, 0x2f, 0x3f, 0x10, 0x8, 0xd0, 0xb, 0xa0,
0x6, 0xc0, 0xe4, 0x0, 0xc9, 0x0, 0x6e, 0x0,
0xb8, 0x9, 0x90, 0xf, 0x40, 0x2, 0xf2, 0xf,
0x30, 0x5d, 0x4, 0xf0, 0x0, 0xd, 0x63, 0xf0,
0x1, 0xf1, 0x8b, 0x0, 0x0, 0x9a, 0x7b, 0x0,
0xd, 0x5c, 0x70, 0x0, 0x5, 0xeb, 0x70, 0x0,
0x9a, 0xf3, 0x0, 0x0, 0x1f, 0xf3, 0x0, 0x5,
0xfe, 0x0, 0x0, 0x0, 0xce, 0x0, 0x0, 0x1f,
0xa0, 0x0,
/* U+0058 "X" */
0x4f, 0x50, 0x0, 0x2, 0xf7, 0x0, 0x9e, 0x10,
0x0, 0xcc, 0x0, 0x0, 0xda, 0x0, 0x7f, 0x20,
0x0, 0x4, 0xf5, 0x2f, 0x60, 0x0, 0x0, 0x9,
0xec, 0xb0, 0x0, 0x0, 0x0, 0xe, 0xf1, 0x0,
0x0, 0x0, 0x3, 0xff, 0x50, 0x0, 0x0, 0x0,
0xda, 0x7f, 0x10, 0x0, 0x0, 0x9e, 0x10, 0xcb,
0x0, 0x0, 0x3f, 0x50, 0x2, 0xf6, 0x0, 0xd,
0xb0, 0x0, 0x7, 0xf2, 0x9, 0xe1, 0x0, 0x0,
0xc, 0xc0,
/* U+0059 "Y" */
0x9e, 0x0, 0x0, 0x0, 0x6f, 0x31, 0xe9, 0x0,
0x0, 0x1e, 0x80, 0x5, 0xf3, 0x0, 0xa, 0xd0,
0x0, 0xa, 0xd0, 0x4, 0xf4, 0x0, 0x0, 0x1f,
0x70, 0xda, 0x0, 0x0, 0x0, 0x6f, 0x9e, 0x10,
0x0, 0x0, 0x0, 0xcf, 0x50, 0x0, 0x0, 0x0,
0x5, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x5f, 0x0,
0x0, 0x0, 0x0, 0x5, 0xf0, 0x0, 0x0, 0x0,
0x0, 0x5f, 0x0, 0x0, 0x0, 0x0, 0x5, 0xf0,
0x0, 0x0,
/* U+005A "Z" */
0x1f, 0xff, 0xff, 0xff, 0xf3, 0x3, 0x33, 0x33,
0x3d, 0xe0, 0x0, 0x0, 0x0, 0x7f, 0x30, 0x0,
0x0, 0x3, 0xf7, 0x0, 0x0, 0x0, 0xd, 0xb0,
0x0, 0x0, 0x0, 0xae, 0x10, 0x0, 0x0, 0x6,
0xf4, 0x0, 0x0, 0x0, 0x2f, 0x80, 0x0, 0x0,
0x0, 0xdc, 0x0, 0x0, 0x0, 0x9, 0xe1, 0x0,
0x0, 0x0, 0x5f, 0x83, 0x33, 0x33, 0x31, 0x9f,
0xff, 0xff, 0xff, 0xf9,
/* U+005B "[" */
0x4f, 0xff, 0x94, 0xe2, 0x21, 0x4e, 0x0, 0x4,
0xe0, 0x0, 0x4e, 0x0, 0x4, 0xe0, 0x0, 0x4e,
0x0, 0x4, 0xe0, 0x0, 0x4e, 0x0, 0x4, 0xe0,
0x0, 0x4e, 0x0, 0x4, 0xe0, 0x0, 0x4e, 0x0,
0x4, 0xe0, 0x0, 0x4e, 0x0, 0x4, 0xff, 0xf9,
0x2, 0x22, 0x10,
/* U+005C "\\" */
0x26, 0x0, 0x0, 0x0, 0x1f, 0x10, 0x0, 0x0,
0xa, 0x70, 0x0, 0x0, 0x5, 0xd0, 0x0, 0x0,
0x0, 0xe3, 0x0, 0x0, 0x0, 0x98, 0x0, 0x0,
0x0, 0x3e, 0x0, 0x0, 0x0, 0xd, 0x40, 0x0,
0x0, 0x7, 0xa0, 0x0, 0x0, 0x2, 0xf0, 0x0,
0x0, 0x0, 0xc6, 0x0, 0x0, 0x0, 0x6c, 0x0,
0x0, 0x0, 0xf, 0x20, 0x0, 0x0, 0xa, 0x70,
0x0, 0x0, 0x4, 0xd0, 0x0, 0x0, 0x0, 0xe3,
/* U+005D "]" */
0x4f, 0xff, 0x90, 0x22, 0xa9, 0x0, 0x8, 0x90,
0x0, 0x89, 0x0, 0x8, 0x90, 0x0, 0x89, 0x0,
0x8, 0x90, 0x0, 0x89, 0x0, 0x8, 0x90, 0x0,
0x89, 0x0, 0x8, 0x90, 0x0, 0x89, 0x0, 0x8,
0x90, 0x0, 0x89, 0x0, 0x8, 0x94, 0xff, 0xf9,
0x2, 0x22, 0x10,
/* U+005E "^" */
0x0, 0xa, 0xe0, 0x0, 0x0, 0x1f, 0xc6, 0x0,
0x0, 0x89, 0x4d, 0x0, 0x0, 0xe2, 0xd, 0x40,
0x6, 0xb0, 0x6, 0xa0, 0xd, 0x30, 0x0, 0xe1,
/* U+005F "_" */
0xff, 0xff, 0xff, 0xff, 0x22, 0x22, 0x22, 0x22,
/* U+0060 "`" */
0x56, 0x0, 0x1e, 0x30, 0x2, 0xc0,
/* U+0061 "a" */
0x0, 0x9e, 0xfd, 0x70, 0xb, 0xd5, 0x24, 0xd7,
0x4, 0x10, 0x0, 0x6d, 0x0, 0x7c, 0xee, 0xef,
0xb, 0xd4, 0x21, 0x6f, 0x2f, 0x20, 0x0, 0x7f,
0x4f, 0x0, 0x0, 0xdf, 0x1f, 0x92, 0x3c, 0xaf,
0x4, 0xdf, 0xd5, 0x3f,
/* U+0062 "b" */
0xf, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x0, 0x0,
0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x7d,
0xe9, 0x0, 0xf, 0xb9, 0x34, 0xdc, 0x0, 0xfb,
0x0, 0x1, 0xf5, 0xf, 0x50, 0x0, 0xb, 0x90,
0xf3, 0x0, 0x0, 0xaa, 0xf, 0x50, 0x0, 0xb,
0x90, 0xfa, 0x0, 0x1, 0xf5, 0xf, 0xc8, 0x24,
0xcc, 0x0, 0xf3, 0x9e, 0xe9, 0x0,
/* U+0063 "c" */
0x0, 0x5c, 0xfd, 0x80, 0x0, 0x6f, 0x73, 0x6e,
0x90, 0xe, 0x70, 0x0, 0x6f, 0x3, 0xf1, 0x0,
0x0, 0x10, 0x4f, 0x0, 0x0, 0x0, 0x3, 0xf1,
0x0, 0x0, 0x50, 0xe, 0x60, 0x0, 0x4f, 0x0,
0x7f, 0x62, 0x5e, 0x80, 0x0, 0x6c, 0xfd, 0x70,
0x0,
/* U+0064 "d" */
0x0, 0x0, 0x0, 0xe, 0x60, 0x0, 0x0, 0x0,
0xe6, 0x0, 0x0, 0x0, 0xe, 0x60, 0x6, 0xce,
0xa1, 0xe6, 0x6, 0xf6, 0x25, 0xbe, 0x60, 0xe6,
0x0, 0x5, 0xf6, 0x3f, 0x10, 0x0, 0xf, 0x64,
0xf0, 0x0, 0x0, 0xe6, 0x3f, 0x10, 0x0, 0xf,
0x60, 0xe6, 0x0, 0x4, 0xf6, 0x6, 0xf6, 0x25,
0xde, 0x60, 0x6, 0xcf, 0xb3, 0xc6,
/* U+0065 "e" */
0x0, 0x6c, 0xfc, 0x50, 0x0, 0x7e, 0x63, 0x6e,
0x50, 0x1f, 0x50, 0x0, 0x6d, 0x5, 0xf0, 0x0,
0x1, 0xf2, 0x7f, 0xee, 0xee, 0xef, 0x45, 0xe1,
0x11, 0x11, 0x10, 0x2f, 0x30, 0x0, 0x4c, 0x0,
0x8e, 0x52, 0x6e, 0x80, 0x0, 0x7d, 0xfd, 0x60,
0x0,
/* U+0066 "f" */
0x0, 0x3d, 0xfe, 0x0, 0xbb, 0x32, 0x0, 0xd7,
0x0, 0xef, 0xff, 0xfc, 0x22, 0xd8, 0x21, 0x0,
0xd6, 0x0, 0x0, 0xd6, 0x0, 0x0, 0xd6, 0x0,
0x0, 0xd6, 0x0, 0x0, 0xd6, 0x0, 0x0, 0xd6,
0x0, 0x0, 0xd6, 0x0,
/* U+0067 "g" */
0x0, 0x5c, 0xeb, 0x2c, 0x70, 0x6f, 0x72, 0x5c,
0xe7, 0xe, 0x70, 0x0, 0x4f, 0x73, 0xf1, 0x0,
0x0, 0xe7, 0x4f, 0x0, 0x0, 0xd, 0x73, 0xf1,
0x0, 0x0, 0xe7, 0xe, 0x60, 0x0, 0x4f, 0x70,
0x6f, 0x63, 0x5c, 0xd7, 0x0, 0x6c, 0xeb, 0x2d,
0x60, 0x42, 0x0, 0x0, 0xf3, 0xa, 0xe4, 0x23,
0xbc, 0x0, 0x8, 0xef, 0xe9, 0x10,
/* U+0068 "h" */
0xf, 0x40, 0x0, 0x0, 0xf, 0x40, 0x0, 0x0,
0xf, 0x40, 0x0, 0x0, 0xf, 0x48, 0xee, 0x80,
0xf, 0xc7, 0x36, 0xf7, 0xf, 0x90, 0x0, 0x9c,
0xf, 0x50, 0x0, 0x6e, 0xf, 0x40, 0x0, 0x5e,
0xf, 0x40, 0x0, 0x5e, 0xf, 0x40, 0x0, 0x5e,
0xf, 0x40, 0x0, 0x5e, 0xf, 0x40, 0x0, 0x5e,
/* U+0069 "i" */
0xab, 0xa, 0xc0, 0x0, 0x9, 0xa0, 0x9a, 0x9,
0xa0, 0x9a, 0x9, 0xa0, 0x9a, 0x9, 0xa0, 0x9a,
0x9, 0xa0,
/* U+006A "j" */
0x0, 0x7d, 0x0, 0x8, 0xd0, 0x0, 0x0, 0x0,
0x6, 0xd0, 0x0, 0x6d, 0x0, 0x6, 0xd0, 0x0,
0x6d, 0x0, 0x6, 0xd0, 0x0, 0x6d, 0x0, 0x6,
0xd0, 0x0, 0x6d, 0x0, 0x6, 0xd0, 0x0, 0x7d,
0x0, 0x3c, 0xb0, 0x3f, 0xd2, 0x0,
/* U+006B "k" */
0xf, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x0, 0x0,
0x0, 0xf, 0x40, 0x0, 0x0, 0x0, 0xf4, 0x0,
0x2e, 0x90, 0xf, 0x40, 0x2e, 0x90, 0x0, 0xf4,
0x2e, 0x90, 0x0, 0xf, 0x6e, 0xb0, 0x0, 0x0,
0xff, 0xcf, 0x20, 0x0, 0xf, 0x90, 0xbd, 0x0,
0x0, 0xf4, 0x1, 0xe9, 0x0, 0xf, 0x40, 0x4,
0xf5, 0x0, 0xf4, 0x0, 0x8, 0xf2,
/* U+006C "l" */
0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
0xb8, 0xb8, 0xb8, 0xb8,
/* U+006D "m" */
0xf, 0x5a, 0xec, 0x40, 0x9e, 0xd6, 0x0, 0xfe,
0x63, 0x9e, 0xa7, 0x37, 0xf4, 0xf, 0x80, 0x0,
0xeb, 0x0, 0xb, 0x90, 0xf4, 0x0, 0xc, 0x80,
0x0, 0x9a, 0xf, 0x40, 0x0, 0xc7, 0x0, 0x9,
0xa0, 0xf4, 0x0, 0xc, 0x70, 0x0, 0x9a, 0xf,
0x40, 0x0, 0xc7, 0x0, 0x9, 0xa0, 0xf4, 0x0,
0xc, 0x70, 0x0, 0x9a, 0xf, 0x40, 0x0, 0xc7,
0x0, 0x9, 0xa0,
/* U+006E "n" */
0xf, 0x49, 0xee, 0x80, 0xf, 0xd7, 0x36, 0xf7,
0xf, 0x90, 0x0, 0x8c, 0xf, 0x50, 0x0, 0x5e,
0xf, 0x40, 0x0, 0x5f, 0xf, 0x40, 0x0, 0x5f,
0xf, 0x40, 0x0, 0x5f, 0xf, 0x40, 0x0, 0x5f,
0xf, 0x40, 0x0, 0x5f,
/* U+006F "o" */
0x0, 0x4c, 0xfd, 0x80, 0x0, 0x5f, 0x73, 0x5d,
0xb0, 0xe, 0x70, 0x0, 0x2f, 0x42, 0xf1, 0x0,
0x0, 0xb8, 0x4f, 0x0, 0x0, 0xa, 0xa2, 0xf1,
0x0, 0x0, 0xb8, 0xe, 0x70, 0x0, 0x2f, 0x40,
0x5f, 0x72, 0x4d, 0xb0, 0x0, 0x4c, 0xfd, 0x80,
0x0,
/* U+0070 "p" */
0xf, 0x39, 0xee, 0x90, 0x0, 0xfc, 0x93, 0x4d,
0xc0, 0xf, 0xa0, 0x0, 0x1f, 0x50, 0xf5, 0x0,
0x0, 0xb9, 0xf, 0x30, 0x0, 0xa, 0xa0, 0xf5,
0x0, 0x0, 0xb9, 0xf, 0xa0, 0x0, 0x1f, 0x50,
0xfb, 0x82, 0x4c, 0xc0, 0xf, 0x47, 0xde, 0xa0,
0x0, 0xf4, 0x0, 0x0, 0x0, 0xf, 0x40, 0x0,
0x0, 0x0, 0xf4, 0x0, 0x0, 0x0,
/* U+0071 "q" */
0x0, 0x6c, 0xfb, 0x2c, 0x60, 0x6f, 0x62, 0x5d,
0xe6, 0xe, 0x60, 0x0, 0x4f, 0x63, 0xf1, 0x0,
0x0, 0xf6, 0x4f, 0x0, 0x0, 0xe, 0x63, 0xf1,
0x0, 0x0, 0xf6, 0xe, 0x60, 0x0, 0x4f, 0x60,
0x7f, 0x62, 0x5b, 0xe6, 0x0, 0x6d, 0xea, 0x1e,
0x60, 0x0, 0x0, 0x0, 0xe6, 0x0, 0x0, 0x0,
0xe, 0x60, 0x0, 0x0, 0x0, 0xe6,
/* U+0072 "r" */
0xf, 0x4a, 0xfc, 0xf, 0xcc, 0x66, 0xf, 0xc0,
0x0, 0xf, 0x60, 0x0, 0xf, 0x40, 0x0, 0xf,
0x30, 0x0, 0xf, 0x30, 0x0, 0xf, 0x30, 0x0,
0xf, 0x30, 0x0,
/* U+0073 "s" */
0x3, 0xbf, 0xeb, 0x20, 0x1f, 0x93, 0x4b, 0xe0,
0x3f, 0x10, 0x1, 0xa2, 0xc, 0xd7, 0x20, 0x0,
0x0, 0x6b, 0xfd, 0x50, 0x0, 0x0, 0x6, 0xf4,
0x5d, 0x0, 0x0, 0xd8, 0x1e, 0x92, 0x27, 0xf4,
0x3, 0xbe, 0xfd, 0x60,
/* U+0074 "t" */
0x0, 0x82, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xf3,
0x0, 0xbf, 0xff, 0xf3, 0x13, 0xf5, 0x20, 0x0,
0xf3, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xf3, 0x0,
0x0, 0xf3, 0x0, 0x0, 0xf3, 0x0, 0x0, 0xe7,
0x20, 0x0, 0x7f, 0xf0,
/* U+0075 "u" */
0xf, 0x40, 0x0, 0x4f, 0xf, 0x40, 0x0, 0x4f,
0xf, 0x40, 0x0, 0x4f, 0xf, 0x40, 0x0, 0x4f,
0xf, 0x40, 0x0, 0x4f, 0xf, 0x40, 0x0, 0x5f,
0xe, 0x70, 0x0, 0xbf, 0x9, 0xe5, 0x39, 0xdf,
0x0, 0x9e, 0xd8, 0x5f,
/* U+0076 "v" */
0xba, 0x0, 0x0, 0xe7, 0x6f, 0x0, 0x4, 0xf1,
0x1f, 0x40, 0x9, 0xc0, 0xb, 0xa0, 0xe, 0x60,
0x5, 0xe0, 0x3f, 0x10, 0x0, 0xf4, 0x9b, 0x0,
0x0, 0xa9, 0xe5, 0x0, 0x0, 0x5f, 0xf0, 0x0,
0x0, 0xf, 0xa0, 0x0,
/* U+0077 "w" */
0xc9, 0x0, 0xb, 0xc0, 0x0, 0x8d, 0x7e, 0x0,
0xf, 0xf0, 0x0, 0xd8, 0x2f, 0x20, 0x3d, 0xc4,
0x1, 0xf3, 0xd, 0x70, 0x79, 0x78, 0x6, 0xe0,
0x8, 0xb0, 0xb4, 0x3d, 0xa, 0x90, 0x3, 0xf1,
0xf0, 0xf, 0x1e, 0x40, 0x0, 0xe9, 0xc0, 0xb,
0x9f, 0x0, 0x0, 0x9f, 0x70, 0x6, 0xfa, 0x0,
0x0, 0x4f, 0x30, 0x2, 0xf5, 0x0,
/* U+0078 "x" */
0x3f, 0x40, 0x2, 0xf5, 0x0, 0x8e, 0x0, 0xca,
0x0, 0x0, 0xd9, 0x7e, 0x10, 0x0, 0x2, 0xff,
0x40, 0x0, 0x0, 0xd, 0xe1, 0x0, 0x0, 0x8,
0xdc, 0xa0, 0x0, 0x3, 0xf4, 0x2f, 0x50, 0x0,
0xd9, 0x0, 0x7e, 0x10, 0x9e, 0x0, 0x0, 0xcb,
0x0,
/* U+0079 "y" */
0xba, 0x0, 0x0, 0xba, 0x5f, 0x0, 0x1, 0xf4,
0xe, 0x60, 0x7, 0xe0, 0x9, 0xc0, 0xc, 0x80,
0x2, 0xf2, 0x2f, 0x20, 0x0, 0xc8, 0x8c, 0x0,
0x0, 0x6d, 0xd6, 0x0, 0x0, 0xf, 0xf0, 0x0,
0x0, 0xb, 0xa0, 0x0, 0x0, 0x1f, 0x40, 0x0,
0x0, 0x7e, 0x0, 0x0, 0x0, 0xd8, 0x0, 0x0,
/* U+007A "z" */
0x6f, 0xff, 0xff, 0xf2, 0x2, 0x22, 0x2d, 0xb0,
0x0, 0x0, 0x8e, 0x10, 0x0, 0x4, 0xf4, 0x0,
0x0, 0x1e, 0x80, 0x0, 0x0, 0xbc, 0x0, 0x0,
0x7, 0xe2, 0x0, 0x0, 0x3f, 0x72, 0x22, 0x20,
0x9f, 0xff, 0xff, 0xf6,
/* U+007B "{" */
0x0, 0x4d, 0xe0, 0xe, 0x72, 0x1, 0xf1, 0x0,
0x2f, 0x0, 0x2, 0xf0, 0x0, 0x2f, 0x0, 0x3,
0xf0, 0x0, 0x8b, 0x0, 0xaf, 0x10, 0x2, 0xab,
0x0, 0x3, 0xf0, 0x0, 0x2f, 0x0, 0x2, 0xf0,
0x0, 0x2f, 0x0, 0x0, 0xf4, 0x0, 0x8, 0xfe,
0x0, 0x0, 0x10,
/* U+007C "|" */
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
0xf1,
/* U+007D "}" */
0x9e, 0x80, 0x1, 0x4f, 0x40, 0x0, 0xb7, 0x0,
0xb, 0x70, 0x0, 0xb7, 0x0, 0xb, 0x70, 0x0,
0xa8, 0x0, 0x6, 0xc1, 0x0, 0xb, 0xf0, 0x5,
0xd4, 0x0, 0xa8, 0x0, 0xb, 0x70, 0x0, 0xb7,
0x0, 0xb, 0x70, 0x1, 0xe6, 0x9, 0xfc, 0x0,
0x11, 0x0, 0x0,
/* U+007E "~" */
0x1a, 0xea, 0x40, 0x54, 0x57, 0x16, 0xdf, 0xd2,
0x0, 0x0, 0x1, 0x0,
/* U+007F "" */
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 85, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 85, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 18, .adv_w = 109, .box_w = 5, .box_h = 5, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 31, .adv_w = 154, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 91, .adv_w = 154, .box_w = 9, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 163, .adv_w = 248, .box_w = 14, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 247, .adv_w = 186, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 319, .adv_w = 62, .box_w = 2, .box_h = 5, .ofs_x = 1, .ofs_y = 7},
{.bitmap_index = 324, .adv_w = 85, .box_w = 5, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 364, .adv_w = 85, .box_w = 5, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 404, .adv_w = 130, .box_w = 8, .box_h = 8, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 436, .adv_w = 155, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 477, .adv_w = 68, .box_w = 3, .box_h = 6, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 486, .adv_w = 155, .box_w = 9, .box_h = 2, .ofs_x = 0, .ofs_y = 3},
{.bitmap_index = 495, .adv_w = 68, .box_w = 3, .box_h = 3, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 500, .adv_w = 128, .box_w = 8, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 564, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 618, .adv_w = 103, .box_w = 5, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 648, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 702, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 756, .adv_w = 154, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 816, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 870, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 924, .adv_w = 140, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 978, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1032, .adv_w = 154, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1086, .adv_w = 68, .box_w = 3, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1100, .adv_w = 68, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 1118, .adv_w = 155, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1159, .adv_w = 155, .box_w = 9, .box_h = 5, .ofs_x = 0, .ofs_y = 1},
{.bitmap_index = 1182, .adv_w = 155, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1223, .adv_w = 137, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1271, .adv_w = 220, .box_w = 13, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1349, .adv_w = 168, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1415, .adv_w = 173, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1475, .adv_w = 186, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1541, .adv_w = 181, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1601, .adv_w = 163, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1655, .adv_w = 148, .box_w = 8, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1703, .adv_w = 191, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1769, .adv_w = 184, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1829, .adv_w = 61, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1841, .adv_w = 132, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1889, .adv_w = 177, .box_w = 11, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1955, .adv_w = 151, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2009, .adv_w = 226, .box_w = 12, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2081, .adv_w = 184, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2141, .adv_w = 196, .box_w = 12, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2213, .adv_w = 164, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2267, .adv_w = 196, .box_w = 12, .box_h = 13, .ofs_x = 0, .ofs_y = -1},
{.bitmap_index = 2345, .adv_w = 173, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2405, .adv_w = 162, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2465, .adv_w = 158, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2525, .adv_w = 183, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 2585, .adv_w = 164, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2651, .adv_w = 238, .box_w = 15, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2741, .adv_w = 163, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2807, .adv_w = 169, .box_w = 11, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2873, .adv_w = 160, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 2933, .adv_w = 85, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 2976, .adv_w = 128, .box_w = 8, .box_h = 16, .ofs_x = 0, .ofs_y = -2},
{.bitmap_index = 3040, .adv_w = 85, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3083, .adv_w = 133, .box_w = 8, .box_h = 6, .ofs_x = 0, .ofs_y = 6},
{.bitmap_index = 3107, .adv_w = 128, .box_w = 8, .box_h = 2, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3115, .adv_w = 85, .box_w = 4, .box_h = 3, .ofs_x = 1, .ofs_y = 10},
{.bitmap_index = 3121, .adv_w = 143, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3157, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3211, .adv_w = 140, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3252, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3306, .adv_w = 142, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3347, .adv_w = 95, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3383, .adv_w = 151, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3437, .adv_w = 142, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3485, .adv_w = 66, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 3503, .adv_w = 68, .box_w = 5, .box_h = 15, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 3541, .adv_w = 135, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3595, .adv_w = 60, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 3607, .adv_w = 219, .box_w = 13, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3666, .adv_w = 143, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3702, .adv_w = 150, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3743, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3797, .adv_w = 150, .box_w = 9, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 3851, .adv_w = 93, .box_w = 6, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3878, .adv_w = 129, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3914, .adv_w = 91, .box_w = 6, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3950, .adv_w = 143, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 3986, .adv_w = 123, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4022, .adv_w = 193, .box_w = 12, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4076, .adv_w = 130, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4117, .adv_w = 127, .box_w = 8, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4165, .adv_w = 125, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 4201, .adv_w = 85, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4244, .adv_w = 50, .box_w = 2, .box_h = 17, .ofs_x = 1, .ofs_y = -2},
{.bitmap_index = 4261, .adv_w = 85, .box_w = 5, .box_h = 17, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 4304, .adv_w = 128, .box_w = 8, .box_h = 3, .ofs_x = 0, .ofs_y = 4},
{.bitmap_index = 4316, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 96, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
#endif
.glyph_bitmap = glyph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = NULL,
.kern_scale = 0,
.cmap_num = 1,
.bpp = 4,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
const lv_font_t ui_font_PingFangEN16 = {
#else
lv_font_t ui_font_PingFangEN16 = {
#endif
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 18, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
#if LV_VERSION_CHECK(7, 4, 0) || LVGL_VERSION_MAJOR >= 8
.underline_position = -2,
.underline_thickness = 1,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if UI_FONT_PINGFANGEN16*/
@@ -0,0 +1,16 @@
{
"codename": "PingFangEN16",
"ttf_path": "\\assets\\pingfang.otf",
"bin_path": "\\assets\\ui_font_PingFangEN16.bin",
"c_path": "\\assets\\ui_font_PingFangEN16.c",
"cfg_path": "\\assets\\ui_font_PingFangEN16.fcfg",
"size": 16,
"bpp": 4,
"letters": 0,
"ranges": [
"0x20-0x7f"
],
"symbols": "",
"customparams": "--no-compress --no-prefilter",
"uploaded": false
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,16 @@
{
"codename": "PingFangEN20",
"ttf_path": "\\assets\\pingfang.otf",
"bin_path": "\\assets\\ui_font_PingFangEN20.bin",
"c_path": "\\assets\\ui_font_PingFangEN20.c",
"cfg_path": "\\assets\\ui_font_PingFangEN20.fcfg",
"size": 20,
"bpp": 4,
"letters": 0,
"ranges": [
"0x20-0x7f"
],
"symbols": "",
"customparams": "--no-compress --no-prefilter",
"uploaded": false
}
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

@@ -20,6 +20,4 @@ idf_component_register(
${APP_DIR}
${SETTINGS_DIR}
)
spiffs_create_partition_image(storage ../spiffs FLASH_IN_PROJECT)
+2 -21
View File
@@ -1,20 +1,5 @@
menu "Example Configuration"
config ESP_WIFI_SSID
string "WiFi SSID"
default "Network SSID"
help
SSID (network name) for the example to connect to.
config ESP_WIFI_PASSWORD
string "WiFi Password"
default "Password"
help
WiFi password (WPA or WPA2) for the example to use.
config OPENAI_API_KEY
string "OpenAI Key"
default "sk-xxxxxxxx"
help
OpenAI api key for the example to use.
config VOICE_ID
string "Speaker Id"
default "qiumum_0gushi"
@@ -23,6 +8,7 @@ menu "Example Configuration"
config VOLUME_LEVEL
int "volume level"
default "70"
range 1 100
help
speaker volume
config MAX_TOKEN
@@ -30,17 +16,12 @@ menu "Example Configuration"
default 500
range 1 2048
help
Chat GPT response token between 1 - 2048.
Chat GPT response token between 1 - 2048.
config ESP_MAXIMUM_RETRY
int "Maximum retry"
default 5
help
Set the Maximum retry to avoid station reconnecting to the AP unlimited when the AP is really inexistent.
config MESSAGE_CONTENT_SIZE
int "Message Content Size"
default 3072
help
Size of the message content array in bytes.
choice ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD
prompt "WiFi Scan auth mode threshold"
+7 -5
View File
@@ -35,8 +35,8 @@ static bool mute_flag = true;
bool record_flag = false;
uint32_t record_total_len = 0;
uint32_t file_total_len = 0;
volatile uint8_t *record_audio_buffer = NULL;
volatile uint8_t *audio_rx_buffer = NULL;
static uint8_t *record_audio_buffer = NULL;
uint8_t *audio_rx_buffer = NULL;
audio_play_finish_cb_t audio_play_finish_cb = NULL;
extern sr_data_t *g_sr_data;
@@ -66,7 +66,7 @@ static esp_err_t audio_mute_function(AUDIO_PLAYER_MUTE_SETTING setting)
codec_handle->mute_set_fn(setting == AUDIO_PLAYER_MUTE ? true : false);
// restore the voice volume upon unmuting
if (setting == AUDIO_PLAYER_UNMUTE) {
codec_handle->volume_set_fn(85, NULL);
codec_handle->volume_set_fn(CONFIG_VOLUME_LEVEL, NULL);
} else {
if (audio_play_finish_cb) {
audio_play_finish_cb();
@@ -228,6 +228,10 @@ esp_err_t audio_play_task(void *filepath)
ESP_LOGI(TAG, "frame_rate= %" PRIi32 ", ch=%d, width=%d", wav_head.SampleRate, wav_head.NumChannels, wav_head.BitsPerSample);
codec_handle->i2s_reconfig_clk_fn(wav_head.SampleRate, wav_head.BitsPerSample, I2S_SLOT_MODE_STEREO);
codec_handle->mute_set_fn(false);
codec_handle->volume_set_fn(CONFIG_VOLUME_LEVEL,NULL);
vTaskDelay(pdMS_TO_TICKS(500));
size_t cnt, total_cnt = 0;
do {
/* Read file in chunks into the scratch buffer */
@@ -235,8 +239,6 @@ esp_err_t audio_play_task(void *filepath)
if (len <= 0) {
break;
} else if (len > 0) {
codec_handle->mute_set_fn(false);
codec_handle->volume_set_fn(65, NULL);
codec_handle->i2s_write_fn(buffer, len, &cnt, portMAX_DELAY);
total_cnt += cnt;
}
+1 -2
View File
@@ -38,8 +38,7 @@ void sr_handler_task(void *pvParam);
/**
* @brief The buffer to hold the recorded audio.
*/
extern volatile uint8_t *record_audio_buffer;
extern volatile uint8_t *audio_rx_buffer;
extern uint8_t *audio_rx_buffer;
esp_err_t audio_play_task(void *filepath);
+13 -15
View File
@@ -14,6 +14,7 @@
#include "ui.h"
#define LABEL_WIFI_TEXT "Connecting to Wi-Fi\n"
#define LABEL_NOT_WIFI_TEXT "Not Connected to Wi-Fi\n"
#define LABEL_WIFI_DOT_COUNT_MAX (10)
#define WIFI_CHECK_TIMER_INTERVAL_S (1)
#define REPLY_SCROLL_TIMER_INTERVAL_MS (1000)
@@ -47,15 +48,12 @@ void ui_ctrl_init(void)
static void wifi_check_timer_handler(lv_timer_t *timer)
{
if (WIFI_STATUS_CONNECTED_OK == wifi_connected_already()){
_ui_flag_modify(ui_PanelSetupSteps, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
_ui_flag_modify(ui_PanelSetupWifi, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
if (WIFI_STATUS_CONNECTED_OK == wifi_connected_already()) {
lv_obj_clear_flag(ui_PanelSetupSteps, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_flag(ui_PanelSetupWifi, LV_OBJ_FLAG_HIDDEN);
lv_timer_del(timer);
if (ui_get_btn_op_group()) {
lv_group_remove_all_objs(ui_get_btn_op_group());
lv_group_add_obj(ui_get_btn_op_group(), ui_ButtonSetup);
}
} else if (WIFI_STATUS_CONNECTED_FAILED == wifi_connected_already()) {
lv_label_set_text(ui_LabelSetupWifi, LABEL_NOT_WIFI_TEXT);
} else {
if (strlen(lv_label_get_text(ui_LabelSetupWifi)) >= sizeof(LABEL_WIFI_TEXT) + LABEL_WIFI_DOT_COUNT_MAX + 1) {
lv_label_set_text(ui_LabelSetupWifi, LABEL_WIFI_TEXT);
@@ -291,16 +289,16 @@ static void reply_content_scroll_timer_handler()
offset = lv_obj_get_scroll_y(ui_ContainerReplyContent);
// ESP_LOGI(TAG, "offset: %d, content_height: %d, font_height: %d", offset, content_height, font->line_height);
if ((content_height > lv_obj_get_height(ui_ContainerReplyContent)) &&
(offset < (content_height - lv_obj_get_height(ui_ContainerReplyContent)))) {
(offset < (content_height - lv_obj_get_height(ui_ContainerReplyContent)))) {
offset += font->line_height / 2;
lv_obj_scroll_to_y(ui_ContainerReplyContent, offset, LV_ANIM_OFF);
} else if (reply_audio_end) {
ESP_LOGI(TAG, "reply scroll timer stop");
reply_content_get = false;
reply_audio_start = false;
reply_audio_end = false;
lv_timer_pause(scroll_timer_handle);
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 1000);
ESP_LOGI(TAG, "reply scroll timer stop");
reply_content_get = false;
reply_audio_start = false;
reply_audio_end = false;
lv_timer_pause(scroll_timer_handle);
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 1000);
}
}
}
+23 -7
View File
@@ -8,6 +8,11 @@
#include "ui.h"
#include "app_ui_ctrl.h"
#include"OpenAI.h"
#include "esp_ota_ops.h"
#include "esp_system.h"
#include "esp_log.h"
static char *TAG = "ui-events";
void EventBtnSetupClick(lv_event_t *e)
{
@@ -19,14 +24,25 @@ void EventPanelSleepClickCb(lv_event_t *e)
{
// Your code here
app_sr_start_once();
printf("sr start once\n");
ESP_LOGI(TAG, "sr start once");
}
void EventSettingsRegionValueChange(lv_event_t *e)
static void RestartToFactoryPartition(void){
const esp_partition_t *update_partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL);
// Set the boot partition to switch to Project 1 using OTA handle
ESP_LOGI(TAG, "Switch to partition OTA_1");
esp_ota_set_boot_partition(update_partition);
esp_restart();
}
void EventWifiResetConfirmClick(lv_event_t * e)
{
if (lv_dropdown_get_selected(lv_event_get_target(e)) == 0) {
set_server(REGION_Espressif);
} else {
set_server(REGION_OpenAI);
}
ESP_LOGI(TAG, "Reboot from WIFI Page to Factory Partition");
RestartToFactoryPartition();
}
void EventResetConfirm(lv_event_t * e)
{
ESP_LOGI(TAG, "Reboot from Settings Page to Factory Partition");
RestartToFactoryPartition();
}
+9 -20
View File
@@ -26,10 +26,9 @@
If you'd rather not, just change the below entries to strings with
the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid"
*/
// #define EXAMPLE_ESP_WIFI_SSID "esp-office-2.4G"
// #define EXAMPLE_ESP_WIFI_PASS "1qazxsw2"
#define EXAMPLE_ESP_MAXIMUM_RETRY 10
#define EXAMPLE_ESP_MAXIMUM_RETRY CONFIG_ESP_MAXIMUM_RETRY
#if CONFIG_ESP_WIFI_AUTH_OPEN
#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_OPEN
@@ -108,7 +107,6 @@ esp_err_t send_network_event(net_event_t event)
ESP_RETURN_ON_FALSE(pdPASS == ret_val, ESP_ERR_INVALID_STATE,
TAG, "The last event has not been processed yet");
return ESP_OK;
}
@@ -198,9 +196,8 @@ static void wifi_reconnect_sta(void)
ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
esp_wifi_connect();
ESP_LOGI(TAG, "wifi_reconnect_sta finished.%d, %s, %d, %s", \
sys_param->ssid_len, wifi_config.sta.ssid,
sys_param->password_len, wifi_config.sta.password);
ESP_LOGI(TAG, "wifi_reconnect_sta finished.%s, %s", \
wifi_config.sta.ssid, wifi_config.sta.password);
xEventGroupWaitBits(s_wifi_event_group, WIFI_CONNECTED_BIT, 0, 1, 5000 / portTICK_RATE_MS);
}
@@ -230,32 +227,24 @@ static void wifi_init_sta(void)
NULL,
&instance_got_ip));
wifi_config_t wifi_config = {
wifi_config_t wifi_config = {
.sta = {
.ssid = DEFAULT_ESP_WIFI_SSID,
.password = DEFAULT_ESP_WIFI_PASS,
/* Setting a password implies station will connect to all security modes including WEP/WPA.
* However these modes are deprecated and not advisable to be used. Incase your Access point
* doesn't support WPA2, these mode can be enabled by commenting below line */
//.threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD,
//.sae_pwe_h2e = 2,
.ssid = {0},
.password = {0},
},
};
sys_param_t *sys_param = settings_get_parameter();
memcpy(wifi_config.sta.ssid, sys_param->ssid, sizeof(wifi_config.sta.ssid));
memcpy(wifi_config.sta.password, sys_param->password, sizeof(wifi_config.sta.password));
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
ESP_ERROR_CHECK(esp_wifi_start() );
ESP_LOGI(TAG, "wifi_init_sta finished.%s:%d, %s:%d", \
wifi_config.sta.ssid, sys_param->ssid_len, wifi_config.sta.password, sys_param->password_len);
ESP_LOGI(TAG, "wifi_init_sta finished.%s, %s", \
wifi_config.sta.ssid, wifi_config.sta.password);
}
static void network_task(void *args)
{
static WiFi_Connect_Status wifi_status;
net_event_t net_event;
TickType_t tick;
@@ -1,4 +1,5 @@
## IDF Component Manager Manifest File
dependencies:
espressif/openai: "^0.1.1"
chmorgan/esp-file-iterator: "1.0.0"
espressif/esp-sr: "1.3.3"
+77 -82
View File
@@ -21,92 +21,92 @@
#include "app_wifi.h"
#include "settings.h"
#define SCROLL_START_DELAY_S (2)
#define OPENAI_API_KEY CONFIG_OPENAI_API_KEY
#define SCROLL_START_DELAY_S (1.5)
static char *TAG = "app_main";
format_t file_type = FORMAT_WAV;
static sys_param_t *sys_param = NULL;
/* program flow. This function is called in app_audio.c */
esp_err_t start_openai(uint8_t *audio, int audio_len)
{
sys_param_t *sys_set = settings_get_parameter();
switch (sys_set->current_server) {
case REGION_Espressif:
ui_ctrl_show_panel(UI_CTRL_PANEL_GET, 0);
esp_err_t err = create_whisper_request_from_record(audio, audio_len);
if ((err == ESP_ERR_INVALID_ARG) || (strcmp(get_message_content_for_chatgpt(), "invalid_request_error") == 0)) {
// UI listen fail
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, "Sorry, I can't understand.");
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 2000);
return ESP_FAIL;
} else {
ui_ctrl_label_show_text(UI_CTRL_LABEL_REPLY_QUESTION, get_message_content_for_whisper());
ui_ctrl_label_show_text(UI_CTRL_LABEL_REPLY_CONTENT, get_message_content_for_chatgpt());
ui_ctrl_show_panel(UI_CTRL_PANEL_REPLY, 0);
ESP_LOGI(TAG, "create_TTS_request");
esp_err_t status = text_to_speech_request(get_message_content_for_chatgpt(), AUDIO_CODECS_MP3);
if (status != ESP_OK) {
ESP_LOGE(TAG, "Error creating ChatGPT request: %s\n", esp_err_to_name(status));
// UI reply audio fail
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 0);
} else {
ESP_LOGI(TAG, "reply audio start");
// Wait a moment before starting to scroll the reply content
vTaskDelay(pdMS_TO_TICKS(SCROLL_START_DELAY_S * 1000));
ui_ctrl_reply_set_audio_start_flag(true);
}
}
break;
case REGION_OpenAI:
ui_ctrl_show_panel(UI_CTRL_PANEL_GET, 0);
esp_err_t err2 = create_whisper_request_from_record(audio, audio_len);
if ((err2 == ESP_ERR_INVALID_ARG) || strcmp(get_message_content_for_chatgpt(), "invalid_request_error") == 0 || strcmp(get_message_content_for_chatgpt(), "server_error") == 0) {
// UI listen fail
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, "Sorry, I can't understand.");
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 2000);
return ESP_FAIL;
} else {
ESP_LOGI(TAG, "create_chatgpt_request: %s", get_message_content_for_chatgpt());
static OpenAI_t *openai = NULL;
static OpenAI_AudioTranscription_t *audioTranscription = NULL;
static OpenAI_ChatCompletion_t *chatCompletion = NULL;
// UI listen success
ui_ctrl_label_show_text(UI_CTRL_LABEL_REPLY_QUESTION, get_message_content_for_chatgpt());
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, get_message_content_for_chatgpt());
if (openai == NULL) {
openai = OpenAICreate(sys_param->key);
audioTranscription = openai->audioTranscriptionCreate(openai);
chatCompletion = openai->chatCreate(openai);
esp_err_t status = create_chatgpt_request(get_message_content_for_chatgpt());
if (status != ESP_OK) {
ESP_LOGE(TAG, "Error creating ChatGPT request: %s\n", esp_err_to_name(status));
}
} if (strcmp(get_message_content_for_chatgpt(), "invalid_request_error") == 0) {
audioTranscription->setResponseFormat(audioTranscription, OPENAI_AUDIO_RESPONSE_FORMAT_JSON);
audioTranscription->setLanguage(audioTranscription,"en");
audioTranscription->setTemperature(audioTranscription, 0.2);
// UI reply fail
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, "Sorry, I can't understand.");
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 2000);
chatCompletion->setModel(chatCompletion, "gpt-3.5-turbo");
chatCompletion->setSystem(chatCompletion, "Code geek");
chatCompletion->setMaxTokens(chatCompletion, CONFIG_MAX_TOKEN);
chatCompletion->setTemperature(chatCompletion, 0.2);
chatCompletion->setStop(chatCompletion, "\r");
chatCompletion->setPresencePenalty(chatCompletion, 0);
chatCompletion->setFrequencyPenalty(chatCompletion, 0);
chatCompletion->setUser(chatCompletion, "OpenAI-ESP32");
}
return ESP_FAIL;
} else {
// UI reply content
ui_ctrl_label_show_text(UI_CTRL_LABEL_REPLY_CONTENT, get_message_content_for_chatgpt());
ui_ctrl_show_panel(UI_CTRL_PANEL_REPLY, 0);
esp_err_t status = text_to_speech_request(get_message_content_for_chatgpt(), AUDIO_CODECS_MP3);
if (status != ESP_OK) {
ESP_LOGE(TAG, "Error creating ChatGPT request: %s\n", esp_err_to_name(status));
// UI reply audio fail
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 0);
} else {
ESP_LOGI(TAG, "replay audio start");
// Wait a moment before start to scroll the reply content
vTaskDelay(pdMS_TO_TICKS(SCROLL_START_DELAY_S * 1000));
ui_ctrl_reply_set_audio_start_flag(true);
}
}
break;
default:
// Handle other server regions if necessary
break;
}
return ESP_OK;
ui_ctrl_show_panel(UI_CTRL_PANEL_GET, 0);
char *text = audioTranscription->file(audioTranscription, (uint8_t *)audio, audio_len, OPENAI_AUDIO_INPUT_FORMAT_WAV); // Calling transcript api
if (text == NULL){
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, "API Key is not valid");
return ESP_FAIL;
}
if (strcmp(text, "invalid_request_error") == 0 || strcmp(text, "server_error") == 0) {
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, "Sorry, I can't understand.");
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 2000);
return ESP_FAIL;
}
// UI listen success
ui_ctrl_label_show_text(UI_CTRL_LABEL_REPLY_QUESTION, text);
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, text);
OpenAI_StringResponse_t *result = chatCompletion->message(chatCompletion, text, false); //Calling Chat completion api
char *response = result->getData(result, 0);
if (response != NULL && (strcmp(response, "invalid_request_error") == 0 || strcmp(response, "server_error") == 0)) {
// UI listen fail
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, "Sorry, I can't understand.");
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 2000);
return ESP_FAIL;
}
// UI listen success
ui_ctrl_label_show_text(UI_CTRL_LABEL_REPLY_QUESTION, text);
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, response);
if (strcmp(response, "invalid_request_error") == 0) {
ui_ctrl_label_show_text(UI_CTRL_LABEL_LISTEN_SPEAK, "Sorry, I can't understand.");
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 2000);
return ESP_FAIL;
}
ui_ctrl_label_show_text(UI_CTRL_LABEL_REPLY_CONTENT, response);
ui_ctrl_show_panel(UI_CTRL_PANEL_REPLY, 0);
esp_err_t status = text_to_speech_request(response, AUDIO_CODECS_MP3);
if (status != ESP_OK) {
ESP_LOGE(TAG, "Error creating ChatGPT request: %s\n", esp_err_to_name(status));
// UI reply audio fail
ui_ctrl_show_panel(UI_CTRL_PANEL_SLEEP, 0);
} else {
// Wait a moment before starting to scroll the reply content
vTaskDelay(pdMS_TO_TICKS(SCROLL_START_DELAY_S * 1000));
ui_ctrl_reply_set_audio_start_flag(true);
}
// Clearing resources
result->delete(result);
free(text);
return ESP_OK;
}
/* play audio function */
@@ -129,9 +129,9 @@ void app_main()
}
ESP_ERROR_CHECK(ret);
ESP_ERROR_CHECK(settings_read_parameter_from_nvs());
sys_param = settings_get_parameter();
bsp_spiffs_mount();
bsp_i2c_init();
bsp_display_start();
bsp_board_init();
@@ -139,13 +139,8 @@ void app_main()
ESP_LOGI(TAG, "Display LVGL demo");
bsp_display_backlight_on();
ui_ctrl_init();
app_network_start();
sys_param_t *sys_set = settings_get_parameter();
set_api_key(OPENAI_API_KEY);
set_server(sys_set->current_server);
set_audio_type(file_type);
ESP_LOGI(TAG, "speech recognition start");
app_sr_start(false);
audio_register_play_finish_cb(audio_play_finish_cb);
+40 -79
View File
@@ -14,111 +14,72 @@
#include "nvs_flash.h"
#include "nvs.h"
#include "settings.h"
#include "esp_ota_ops.h"
static const char *TAG = "settings";
#define NAME_SPACE "sys_param"
#define KEY "param"
const char *uf2_nvs_partition = "nvs";
const char *uf2_nvs_namespace = "configuration";
static nvs_handle_t my_handle;
static sys_param_t g_sys_param = {0};
static const sys_param_t g_default_sys_param = {
.need_hint = true,
.current_server = REGION_OpenAI,
};
esp_err_t settings_factory_reset(void)
{
ESP_LOGW(TAG, "Set to default");
memcpy(&g_sys_param, &g_default_sys_param, sizeof(sys_param_t));
ESP_LOGW(TAG, "ssid|password:[%s:%s]", DEFAULT_ESP_WIFI_SSID, DEFAULT_ESP_WIFI_PASS);
if((0 == strlen(DEFAULT_ESP_WIFI_SSID)) || ( 0 == strlen(DEFAULT_ESP_WIFI_PASS))){
memcpy(&g_sys_param.ssid[0], "DEFAULT_ESP_WIFI_SSID", strlen("DEFAULT_ESP_WIFI_SSID"));
memcpy(&g_sys_param.password[0], "DEFAULT_ESP_WIFI_PASS", strlen("DEFAULT_ESP_WIFI_PASS"));
} else {
memcpy(&g_sys_param.ssid[0], DEFAULT_ESP_WIFI_SSID, strlen(DEFAULT_ESP_WIFI_SSID));
memcpy(&g_sys_param.password[0], DEFAULT_ESP_WIFI_PASS, strlen(DEFAULT_ESP_WIFI_PASS));
}
g_sys_param.password_len = strlen(g_sys_param.password);
g_sys_param.ssid_len = strlen(g_sys_param.ssid);
ESP_LOGW(TAG, "current_server:[%d]", REGION_OpenAI);
g_sys_param.current_server = REGION_OpenAI;
settings_write_parameter_to_nvs();
const esp_partition_t *update_partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL);
ESP_LOGI(TAG, "Switch to partition factory");
esp_ota_set_boot_partition(update_partition);
esp_restart();
return ESP_OK;
}
static esp_err_t settings_check(sys_param_t *param)
{
esp_err_t ret;
ESP_GOTO_ON_FALSE(param->current_server < REGION_Max, ESP_ERR_INVALID_ARG, reset, TAG, "server incorrect");
if (((0 == param->ssid_len) || (param->ssid_len > 32)) || \
((0 == param->password_len) || (param->password_len > 64)) || \
(param->ssid_len != strlen(param->ssid)) || \
(param->password_len != strlen(param->password))) {
ESP_LOGI(TAG, "ssid | password incorrect, [%d.%d, %d.%d]", \
param->ssid_len, strlen(param->ssid), param->password_len, strlen(param->password));
goto reset;
}
return ret;
reset:
settings_factory_reset();
return ret;
}
esp_err_t settings_read_parameter_from_nvs(void)
{
nvs_handle_t my_handle = 0;
esp_err_t ret = nvs_open(NAME_SPACE, NVS_READONLY, &my_handle);
esp_err_t ret = nvs_open_from_partition(uf2_nvs_partition, uf2_nvs_namespace, NVS_READONLY, &my_handle);
if (ESP_ERR_NVS_NOT_FOUND == ret) {
ESP_LOGW(TAG, "Not found, Set to default");
memcpy(&g_sys_param, &g_default_sys_param, sizeof(sys_param_t));
memcpy(&g_sys_param.ssid[0], DEFAULT_ESP_WIFI_SSID, strlen(DEFAULT_ESP_WIFI_SSID));
memcpy(&g_sys_param.password[0], DEFAULT_ESP_WIFI_PASS, strlen(DEFAULT_ESP_WIFI_PASS));
g_sys_param.ssid_len = strlen(DEFAULT_ESP_WIFI_SSID);
g_sys_param.password_len = strlen(DEFAULT_ESP_WIFI_PASS);
settings_write_parameter_to_nvs();
return ESP_OK;
ESP_LOGI(TAG, "Credentials not found");
goto err;
}
ESP_GOTO_ON_FALSE(ESP_OK == ret, ret, err, TAG, "nvs open failed (0x%x)", ret);
size_t len = 0;
size_t len = sizeof(sys_param_t);
ret = nvs_get_blob(my_handle, KEY, &g_sys_param, &len);
ESP_GOTO_ON_FALSE(ESP_OK == ret, ret, err, TAG, "can't read param");
// Read SSID
len = sizeof(g_sys_param.ssid);
ret = nvs_get_str(my_handle, "ssid", g_sys_param.ssid, &len);
if (ret != ESP_OK || len == 0) {
ESP_LOGI(TAG, "No SSID found");
goto err;
}
// Read password
len = sizeof(g_sys_param.password);
ret = nvs_get_str(my_handle, "password", g_sys_param.password, &len);
if (ret != ESP_OK || len == 0) {
ESP_LOGI(TAG, "No Password found");
goto err;
}
// Read key
len = sizeof(g_sys_param.key);
ret = nvs_get_str(my_handle, "ChatGPT_key", g_sys_param.key, &len);
if (ret != ESP_OK || len == 0) {
ESP_LOGI(TAG, "No OpenAI key found");
goto err;
}
nvs_close(my_handle);
g_sys_param.current_server = REGION_Max;
ESP_LOGI(TAG, "stored ssid:%s", g_sys_param.ssid);
ESP_LOGI(TAG, "stored password:%s", g_sys_param.password);
ESP_LOGI(TAG, "stored OpenAI:%s", g_sys_param.key);
return ESP_OK;
settings_check(&g_sys_param);
return ret;
err:
if (my_handle) {
nvs_close(my_handle);
}
settings_factory_reset();
return ret;
}
esp_err_t settings_write_parameter_to_nvs(void)
{
ESP_LOGI(TAG, "Saving settings");
settings_check(&g_sys_param);
nvs_handle_t my_handle = {0};
esp_err_t err = nvs_open(NAME_SPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
ESP_LOGI(TAG, "Error (%s) opening NVS handle!\n", esp_err_to_name(err));
} else {
err = nvs_set_blob(my_handle, KEY, &g_sys_param, sizeof(sys_param_t));
err |= nvs_commit(my_handle);
nvs_close(my_handle);
}
return ESP_OK == err ? ESP_OK : ESP_FAIL;
}
sys_param_t *settings_get_parameter(void)
{
return &g_sys_param;
+7 -12
View File
@@ -3,25 +3,20 @@
*
* SPDX-License-Identifier: Unlicense OR CC0-1.0
*/
#pragma once
#include "OpenAI.h"
#define DEFAULT_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID
#define DEFAULT_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD
#define SSID_SIZE 32
#define PASSWORD_SIZE 64
#define KEY_SIZE 64
typedef struct {
bool need_hint;
region_t current_server;
char ssid[32]; /**< SSID of target AP. */
char password[64]; /**< Password of target AP. */
uint8_t ssid_len; /**< SSID of target AP. */
uint8_t password_len; /**< Password of target AP. */
char ssid[SSID_SIZE]; /* SSID of target AP. */
char password[PASSWORD_SIZE]; /* Password of target AP. */
char key[KEY_SIZE]; /* OpenAI key. */
} sys_param_t;
esp_err_t settings_factory_reset(void);
esp_err_t settings_read_parameter_from_nvs(void);
esp_err_t settings_write_parameter_to_nvs(void);
sys_param_t *settings_get_parameter(void);
sys_param_t *settings_get_parameter(void);
+1 -2
View File
@@ -10,7 +10,6 @@
#include "esp_err.h"
#include "esp_log.h"
#include "esp_http_client.h"
#include <json_parser.h>
#include "app_audio.h"
#include "app_ui_ctrl.h"
#include "audio_player.h"
@@ -145,7 +144,7 @@ esp_err_t text_to_speech_request(const char *message, AUDIO_CODECS_FORMAT code_f
.event_handler = http_event_handler,
.buffer_size = 128000,
.buffer_size_tx = 4000,
.timeout_ms = 30000,
.timeout_ms = 40000,
.crt_bundle_attach = esp_crt_bundle_attach,
};
+4 -1
View File
@@ -1,10 +1,14 @@
SET(SOURCES screens/ui_ScreenSetup.c
screens/ui_ScreenWifiReset.c
screens/ui_ScreenListen.c
screens/ui_ScreenSettings.c
screens/ui_ScreenReset.c
ui.c
ui_helpers.c
images/ui_img_setup_bg_png.c
images/ui_img_setup_text_bg_png.c
images/ui_img_reset_icon_png.c
images/ui_img_settings_back_png.c
images/ui_img_body_shadow_png.c
images/ui_img_body_png.c
images/ui_img_body_eye_screen_png.c
@@ -18,7 +22,6 @@ SET(SOURCES screens/ui_ScreenSetup.c
images/ui_img_reply_small_shadow_png.c
images/ui_img_reply_chatgpt_logo_png.c
images/ui_img_settings_icon_png.c
images/ui_img_settings_back_png.c
images/ui_img_listen_body_eyes_2_png.c
fonts/ui_font_KaiTiCN20.c
fonts/ui_font_PingFangEN14.c
+4 -1
View File
@@ -1,10 +1,14 @@
screens/ui_ScreenSetup.c
screens/ui_ScreenWifiReset.c
screens/ui_ScreenListen.c
screens/ui_ScreenSettings.c
screens/ui_ScreenReset.c
ui.c
ui_helpers.c
images/ui_img_setup_bg_png.c
images/ui_img_setup_text_bg_png.c
images/ui_img_reset_icon_png.c
images/ui_img_settings_back_png.c
images/ui_img_body_shadow_png.c
images/ui_img_body_png.c
images/ui_img_body_eye_screen_png.c
@@ -18,7 +22,6 @@ images/ui_img_reply_body_png.c
images/ui_img_reply_small_shadow_png.c
images/ui_img_reply_chatgpt_logo_png.c
images/ui_img_settings_icon_png.c
images/ui_img_settings_back_png.c
images/ui_img_listen_body_eyes_2_png.c
fonts/ui_font_KaiTiCN20.c
fonts/ui_font_PingFangEN14.c
@@ -0,0 +1,40 @@
// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.3.0
// LVGL version: 8.3.4
// Project name: chat_gpt
#include "../ui.h"
#ifndef LV_ATTRIBUTE_MEM_ALIGN
#define LV_ATTRIBUTE_MEM_ALIGN
#endif
// IMAGE DATA: assets\reset_icon.png
const LV_ATTRIBUTE_MEM_ALIGN uint8_t ui_img_reset_icon_png_data[] = {
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,0xFF,0xFF,0x04,0xFF,0xFF,0x42,0xFF,0xFF,0x7D,0xFF,0xFF,0xA3,0xFF,0xFF,0xB1,0xFF,0xFF,0xB0,0xFF,0xFF,0xA3,0xFF,0xFF,0x7C,0xFF,0xFF,0x4A,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x3C,0xFF,0xFF,0x75,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,0xFF,0xFF,0x29,0xFF,0xFF,0xA0,0xFF,0xFF,0xED,0xFF,0xFF,0xFC,0xFF,0xFF,0xD0,0xFF,0xFF,0xB4,0xFF,0xFF,0x9C,0xFF,0xFF,0x97,0xFF,0xFF,0xA7,0xFF,0xFF,0xCE,0xFF,0xFF,0xFA,0xFF,0xFF,0xF6,0xFF,0xFF,0xA2,0xFF,0xFF,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x7B,0xFF,0xFF,0xCC,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,0xFF,0xFF,0x16,0xFF,0xFF,0x9A,0xFF,0xFF,0xFB,0xFF,0xFF,0xC1,0xFF,0xFF,0x61,0xFF,0xFF,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x0E,0xFF,0xFF,0x58,0xFF,0xFF,0xC0,0xFF,0xFF,0xFE,0xFF,0xFF,0xA4,0xFF,0xFF,0x15,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x7B,0xFF,0xFF,0xCC,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,0xFF,0xFF,0x32,0xFF,0xFF,0xE3,0xFF,0xFF,0xD4,0xFF,0xFF,0x4A,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,0xFF,0xFF,0x42,0xFF,0xFF,0xD5,0xFF,0xFF,0xE6,0xFF,0xFF,0x3E,0x00,0x00,0x00,0xFF,0xFF,0x7B,0xFF,0xFF,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x4D,0xFF,0xFF,0xF5,0xFF,0xFF,0xA6,0xFF,0xFF,0x09,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,0xFF,0xFF,0x09,0xFF,0xFF,0x9D,0xFF,0xFF,0xF7,0xFF,0xFF,0x4F,0xFF,0xFF,0x7B,0xFF,0xFF,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x32,0xFF,0xFF,0xF5,0xFF,0xFF,0x86,0xFF,0xFF,0x01,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,0xFF,0xFF,0x86,0xFF,0xFF,0xF7,0xFF,0xFF,0xB6,0xFF,0xFF,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x16,0xFF,0xFF,0xE3,0xFF,0xFF,0xA6,0xFF,0xFF,0x01,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,0xFF,0xFF,0x33,0xFF,0xFF,0x55,0xFF,0xFF,0x55,0xFF,0xFF,0x55,0xFF,0xFF,0x55,0xFF,0xFF,0xD6,0xFF,0xFF,0xFF,0xFF,0xFF,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x9A,0xFF,0xFF,0xD4,0xFF,0xFF,0x09,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,0xFF,0xFF,0xBA,0xFF,0xFF,0xEE,0xFF,0xFF,0xEE,0xFF,0xFF,0xEE,0xFF,0xFF,0xEE,0xFF,0xFF,0xEE,0xFF,0xFF,0xEE,0xFF,0xFF,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x27,0xFF,0xFF,0xFB,0xFF,0xFF,0x49,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,0xFF,0xFF,0xA0,0xFF,0xFF,0xC1,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,0xFF,0xFF,0x04,0xFF,0xFF,0xEC,0xFF,0xFF,0x60,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,0xFF,0xFF,0x43,0xFF,0xFF,0xFC,0xFF,0xFF,0x14,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,0xFF,0xFF,0x7E,0xFF,0xFF,0xCF,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,0xFF,0xFF,0xA1,0xFF,0xFF,0xB4,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,0xFF,0xFF,0xB1,0xFF,0xFF,0x9B,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,0xFF,0xFF,0x3D,0xFF,0xFF,0x53,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xB4,0xFF,0xFF,0x93,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,0xFF,0xFF,0x94,0xFF,0xFF,0xB3,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xA2,0xFF,0xFF,0xA6,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,0xFF,0xFF,0x6E,0xFF,0xFF,0x7D,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0x78,0xFF,0xFF,0xB9,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,0xFF,0xFF,0x06,0xFF,0xFF,0x10,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,0xFF,0xFF,0x01,0xFF,0xFF,0x1B,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,0xFF,0xFF,0x57,0xFF,0xFF,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x6E,0xFF,0xFF,0xB1,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,0xFF,0xFF,0xA1,0xFF,0xFF,0xA5,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x35,0xFF,0xFF,0xFE,0xFF,0xFF,0x3D,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,0xFF,0xFF,0x13,0xFF,0xFF,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xA9,0xFF,0xFF,0xC9,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,0xFF,0xFF,0x07,0xFF,0xFF,0x79,0xFF,0xFF,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x13,0xFF,0xFF,0x50,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,0xFF,0xFF,0x99,0xFF,0xFF,0xEA,0xFF,0xFF,0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x04,0xFF,0xFF,0x3C,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,0xFF,0xFF,0x2B,0xFF,0xFF,0xF9,0xFF,0xFF,0x41,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,0xFF,0xFF,0x23,0xFF,0xFF,0xFA,0xFF,0xFF,0x97,0xFF,0xFF,0x07,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,0xFF,0xFF,0x17,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,0xFF,0xFF,0x43,0xFF,0xFF,0xEA,0xFF,0xFF,0xCA,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,0xFF,0xFF,0x3E,0xFF,0xFF,0xD0,0xFF,0xFF,0x6A,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,0xFF,0xFF,0x18,0xFF,0xFF,0x59,0x00,0x00,0x00,0xFF,0xFF,0x0C,0xFF,0xFF,0x47,0xFF,0xFF,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x39,0xFF,0xFF,0xFE,0xFF,0xFF,0xA8,0xFF,0xFF,0x15,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,0xFF,0xFF,0x39,0xFF,0xFF,0xF7,0xFF,0xFF,0xF9,0xFF,0xFF,0xC9,0xFF,0xFF,0x28,0x00,0x00,0x00,0xFF,0xFF,0x10,0xFF,0xFF,0xA0,0xFF,0xFF,0xCC,0xFF,0xFF,0xB7,0x00,0x00,0x00,0xFF,0xFF,0x03,0xFF,0xFF,0x22,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,0xFF,0xFF,0x0C,0xFF,0xFF,0x4D,0xFF,0xFF,0x79,0xFF,0xFF,0x17,0x00,0x00,0x00,0xFF,0xFF,0x11,0xFF,0xFF,0x98,0xFF,0xFF,0x7F,0xFF,0xFF,0x36,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,
};
const lv_img_dsc_t ui_img_reset_icon_png = {
.header.always_zero = 0,
.header.w = 32,
.header.h = 32,
.data_size = sizeof(ui_img_reset_icon_png_data),
.header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA,
.data = ui_img_reset_icon_png_data
};
@@ -0,0 +1,73 @@
// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.3.0
// LVGL version: 8.3.4
// Project name: chat_gpt
#include "../ui.h"
void ui_ScreenReset_screen_init(void)
{
ui_ScreenReset = lv_obj_create(NULL);
lv_obj_clear_flag(ui_ScreenReset, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_bg_img_src(ui_ScreenReset, &ui_img_setup_bg_png, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_LabelResetTitle = lv_label_create(ui_ScreenReset);
lv_obj_set_width(ui_LabelResetTitle, 230);
lv_obj_set_height(ui_LabelResetTitle, LV_SIZE_CONTENT); /// 140
lv_obj_set_x(ui_LabelResetTitle, 45);
lv_obj_set_y(ui_LabelResetTitle, 15);
lv_label_set_text(ui_LabelResetTitle, "Factory Reset");
lv_obj_set_style_text_color(ui_LabelResetTitle, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(ui_LabelResetTitle, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_align(ui_LabelResetTitle, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelResetTitle, &ui_font_PingFangEN20, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_LabelResetContent = lv_label_create(ui_ScreenReset);
lv_obj_set_width(ui_LabelResetContent, lv_pct(88));
lv_obj_set_height(ui_LabelResetContent, lv_pct(61));
lv_obj_set_x(ui_LabelResetContent, lv_pct(0));
lv_obj_set_y(ui_LabelResetContent, lv_pct(20));
lv_obj_set_align(ui_LabelResetContent, LV_ALIGN_TOP_MID);
lv_label_set_text(ui_LabelResetContent,
"1. Press the \"OK\" button to enter factory reset mode.\n2. Connect the box to your PC and add the OpenAI key and Wi-Fi credentials.\n3. Follow the on-screen prompts to complete the setup process.");
lv_obj_set_style_text_color(ui_LabelResetContent, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(ui_LabelResetContent, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_letter_space(ui_LabelResetContent, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_line_space(ui_LabelResetContent, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelResetContent, &ui_font_PingFangEN14, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_ButtonResetConfirm = lv_btn_create(ui_ScreenReset);
lv_obj_set_width(ui_ButtonResetConfirm, 72);
lv_obj_set_height(ui_ButtonResetConfirm, 24);
lv_obj_set_x(ui_ButtonResetConfirm, 0);
lv_obj_set_y(ui_ButtonResetConfirm, -20);
lv_obj_set_align(ui_ButtonResetConfirm, LV_ALIGN_BOTTOM_MID);
lv_obj_add_flag(ui_ButtonResetConfirm, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
lv_obj_clear_flag(ui_ButtonResetConfirm, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_radius(ui_ButtonResetConfirm, 17, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_ButtonResetConfirm, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_ButtonResetConfirm, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_LabelSetupBtn2 = lv_label_create(ui_ButtonResetConfirm);
lv_obj_set_width(ui_LabelSetupBtn2, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_LabelSetupBtn2, LV_SIZE_CONTENT); /// 1
lv_obj_set_align(ui_LabelSetupBtn2, LV_ALIGN_CENTER);
lv_label_set_text(ui_LabelSetupBtn2, "OK");
lv_obj_set_style_text_color(ui_LabelSetupBtn2, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(ui_LabelSetupBtn2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_align(ui_LabelSetupBtn2, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelSetupBtn2, &ui_font_PingFangEN16, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_ImageResetBack = lv_img_create(ui_ScreenReset);
lv_img_set_src(ui_ImageResetBack, &ui_img_settings_back_png);
lv_obj_set_width(ui_ImageResetBack, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_ImageResetBack, LV_SIZE_CONTENT); /// 1
lv_obj_set_x(ui_ImageResetBack, 10);
lv_obj_set_y(ui_ImageResetBack, 10);
lv_obj_add_flag(ui_ImageResetBack, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_ADV_HITTEST); /// Flags
lv_obj_clear_flag(ui_ImageResetBack, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_add_event_cb(ui_ButtonResetConfirm, ui_event_ButtonResetConfirm, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_ImageResetBack, ui_event_ImageResetBack, LV_EVENT_ALL, NULL);
}
@@ -24,9 +24,7 @@ void ui_ScreenSettings_screen_init(void)
ui_PanelSettings = lv_obj_create(ui_ScreenSettings);
lv_obj_set_width(ui_PanelSettings, lv_pct(100));
lv_obj_set_height(ui_PanelSettings, lv_pct(75));
lv_obj_set_x(ui_PanelSettings, 0);
lv_obj_set_y(ui_PanelSettings, 1);
lv_obj_set_height(ui_PanelSettings, lv_pct(79));
lv_obj_set_align(ui_PanelSettings, LV_ALIGN_BOTTOM_MID);
lv_obj_set_flex_flow(ui_PanelSettings, LV_FLEX_FLOW_COLUMN);
lv_obj_set_flex_align(ui_PanelSettings, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_SPACE_BETWEEN);
@@ -98,7 +96,7 @@ void ui_ScreenSettings_screen_init(void)
ui_PanelSettingsRegion = lv_obj_create(ui_PanelSettings);
lv_obj_set_width(ui_PanelSettingsRegion, lv_pct(100));
lv_obj_set_height(ui_PanelSettingsRegion, lv_pct(18));
lv_obj_set_height(ui_PanelSettingsRegion, lv_pct(19));
lv_obj_set_align(ui_PanelSettingsRegion, LV_ALIGN_BOTTOM_MID);
lv_obj_set_flex_flow(ui_PanelSettingsRegion, LV_FLEX_FLOW_ROW);
lv_obj_set_flex_align(ui_PanelSettingsRegion, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
@@ -157,7 +155,18 @@ void ui_ScreenSettings_screen_init(void)
lv_obj_add_flag(ui_ImageSettingsBack, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_ADV_HITTEST); /// Flags
lv_obj_clear_flag(ui_ImageSettingsBack, LV_OBJ_FLAG_SCROLLABLE); /// Flags
ui_ImageSettingsReset = lv_img_create(ui_ScreenSettings);
lv_img_set_src(ui_ImageSettingsReset, &ui_img_reset_icon_png);
lv_obj_set_width(ui_ImageSettingsReset, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_ImageSettingsReset, LV_SIZE_CONTENT); /// 1
lv_obj_set_x(ui_ImageSettingsReset, -10);
lv_obj_set_y(ui_ImageSettingsReset, 10);
lv_obj_set_align(ui_ImageSettingsReset, LV_ALIGN_TOP_RIGHT);
lv_obj_add_flag(ui_ImageSettingsReset, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_ADV_HITTEST); /// Flags
lv_obj_clear_flag(ui_ImageSettingsReset, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_add_event_cb(ui_DropdownSettingsRegion, ui_event_DropdownSettingsRegion, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_ImageSettingsBack, ui_event_ImageSettingsBack, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_ImageSettingsReset, ui_event_ImageSettingsReset, LV_EVENT_ALL, NULL);
}
@@ -23,7 +23,6 @@ void ui_ScreenSetup_screen_init(void)
ui_PanelSetupWifi = lv_obj_create(ui_ScreenSetup);
lv_obj_set_width(ui_PanelSetupWifi, 320);
lv_obj_set_height(ui_PanelSetupWifi, 240);
lv_obj_add_flag(ui_PanelSetupWifi, LV_OBJ_FLAG_HIDDEN); /// Flags
lv_obj_clear_flag(ui_PanelSetupWifi, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_radius(ui_PanelSetupWifi, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_PanelSetupWifi, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
@@ -56,11 +55,22 @@ void ui_ScreenSetup_screen_init(void)
lv_obj_set_style_text_align(ui_LabelSetupWifi, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelSetupWifi, &ui_font_PingFangEN20, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_ImageSetupWifiReset = lv_img_create(ui_PanelSetupWifi);
lv_img_set_src(ui_ImageSetupWifiReset, &ui_img_reset_icon_png);
lv_obj_set_width(ui_ImageSetupWifiReset, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_ImageSetupWifiReset, LV_SIZE_CONTENT); /// 1
lv_obj_set_x(ui_ImageSetupWifiReset, -10);
lv_obj_set_y(ui_ImageSetupWifiReset, 10);
lv_obj_set_align(ui_ImageSetupWifiReset, LV_ALIGN_TOP_RIGHT);
lv_obj_add_flag(ui_ImageSetupWifiReset, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_ADV_HITTEST); /// Flags
lv_obj_clear_flag(ui_ImageSetupWifiReset, LV_OBJ_FLAG_SCROLLABLE); /// Flags
ui_PanelSetupSteps = lv_obj_create(ui_ScreenSetup);
lv_obj_set_width(ui_PanelSetupSteps, 320);
lv_obj_set_height(ui_PanelSetupSteps, 240);
lv_obj_set_x(ui_PanelSetupSteps, -1);
lv_obj_set_y(ui_PanelSetupSteps, 0);
lv_obj_set_y(ui_PanelSetupSteps, -2);
lv_obj_add_flag(ui_PanelSetupSteps, LV_OBJ_FLAG_HIDDEN); /// Flags
lv_obj_clear_flag(ui_PanelSetupSteps, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_radius(ui_PanelSetupSteps, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_PanelSetupSteps, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
@@ -134,5 +144,6 @@ void ui_ScreenSetup_screen_init(void)
lv_obj_set_style_text_align(ui_LabelSetupBtn, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelSetupBtn, &ui_font_PingFangEN16, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_add_event_cb(ui_ImageSetupWifiReset, ui_event_ImageSetupWifiReset, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_ButtonSetup, ui_event_ButtonSetup, LV_EVENT_ALL, NULL);
}
@@ -0,0 +1,73 @@
// This file was generated by SquareLine Studio
// SquareLine Studio version: SquareLine Studio 1.3.0
// LVGL version: 8.3.4
// Project name: chat_gpt
#include "../ui.h"
void ui_ScreenWifiReset_screen_init(void)
{
ui_ScreenWifiReset = lv_obj_create(NULL);
lv_obj_clear_flag(ui_ScreenWifiReset, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_bg_img_src(ui_ScreenWifiReset, &ui_img_setup_bg_png, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_LabelWifiResetTitle = lv_label_create(ui_ScreenWifiReset);
lv_obj_set_width(ui_LabelWifiResetTitle, 230);
lv_obj_set_height(ui_LabelWifiResetTitle, LV_SIZE_CONTENT); /// 140
lv_obj_set_x(ui_LabelWifiResetTitle, 45);
lv_obj_set_y(ui_LabelWifiResetTitle, 15);
lv_label_set_text(ui_LabelWifiResetTitle, "Factory Reset");
lv_obj_set_style_text_color(ui_LabelWifiResetTitle, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(ui_LabelWifiResetTitle, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_align(ui_LabelWifiResetTitle, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelWifiResetTitle, &ui_font_PingFangEN20, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_ButtonWifiResetConfirm = lv_btn_create(ui_ScreenWifiReset);
lv_obj_set_width(ui_ButtonWifiResetConfirm, 72);
lv_obj_set_height(ui_ButtonWifiResetConfirm, 24);
lv_obj_set_x(ui_ButtonWifiResetConfirm, 0);
lv_obj_set_y(ui_ButtonWifiResetConfirm, -20);
lv_obj_set_align(ui_ButtonWifiResetConfirm, LV_ALIGN_BOTTOM_MID);
lv_obj_add_flag(ui_ButtonWifiResetConfirm, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
lv_obj_clear_flag(ui_ButtonWifiResetConfirm, LV_OBJ_FLAG_SCROLLABLE); /// Flags
lv_obj_set_style_radius(ui_ButtonWifiResetConfirm, 17, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(ui_ButtonWifiResetConfirm, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(ui_ButtonWifiResetConfirm, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_LabelSetupBtn1 = lv_label_create(ui_ButtonWifiResetConfirm);
lv_obj_set_width(ui_LabelSetupBtn1, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_LabelSetupBtn1, LV_SIZE_CONTENT); /// 1
lv_obj_set_align(ui_LabelSetupBtn1, LV_ALIGN_CENTER);
lv_label_set_text(ui_LabelSetupBtn1, "OK");
lv_obj_set_style_text_color(ui_LabelSetupBtn1, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(ui_LabelSetupBtn1, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_align(ui_LabelSetupBtn1, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelSetupBtn1, &ui_font_PingFangEN16, LV_PART_MAIN | LV_STATE_DEFAULT);
ui_ImageWifiResetBack = lv_img_create(ui_ScreenWifiReset);
lv_img_set_src(ui_ImageWifiResetBack, &ui_img_settings_back_png);
lv_obj_set_width(ui_ImageWifiResetBack, LV_SIZE_CONTENT); /// 1
lv_obj_set_height(ui_ImageWifiResetBack, LV_SIZE_CONTENT); /// 1
lv_obj_set_x(ui_ImageWifiResetBack, 10);
lv_obj_set_y(ui_ImageWifiResetBack, 10);
lv_obj_add_flag(ui_ImageWifiResetBack, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_ADV_HITTEST); /// Flags
lv_obj_clear_flag(ui_ImageWifiResetBack, LV_OBJ_FLAG_SCROLLABLE); /// Flags
ui_LabelWifiResetContent = lv_label_create(ui_ScreenWifiReset);
lv_obj_set_width(ui_LabelWifiResetContent, lv_pct(88));
lv_obj_set_height(ui_LabelWifiResetContent, lv_pct(61));
lv_obj_set_x(ui_LabelWifiResetContent, lv_pct(0));
lv_obj_set_y(ui_LabelWifiResetContent, lv_pct(20));
lv_obj_set_align(ui_LabelWifiResetContent, LV_ALIGN_TOP_MID);
lv_label_set_text(ui_LabelWifiResetContent,
"1. Press the \"OK\" button to enter factory reset mode.\n2. Connect the box to your PC and add the OpenAI key and Wi-Fi credentials.\n3. Follow the on-screen prompts to complete the setup process.");
lv_obj_set_style_text_color(ui_LabelWifiResetContent, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_opa(ui_LabelWifiResetContent, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_letter_space(ui_LabelWifiResetContent, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_line_space(ui_LabelWifiResetContent, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui_LabelWifiResetContent, &ui_font_PingFangEN14, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_add_event_cb(ui_ButtonWifiResetConfirm, ui_event_ButtonWifiResetConfirm, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_ImageWifiResetBack, ui_event_ImageWifiResetBack, LV_EVENT_ALL, NULL);
}
+70 -19
View File
@@ -18,6 +18,8 @@ lv_obj_t * ui_ScreenSetup;
lv_obj_t * ui_ImageSetupTextBg;
lv_obj_t * ui_PanelSetupWifi;
lv_obj_t * ui_LabelSetupWifi;
void ui_event_ImageSetupWifiReset(lv_event_t * e);
lv_obj_t * ui_ImageSetupWifiReset;
lv_obj_t * ui_PanelSetupSteps;
lv_obj_t * ui_LabelSetupStepContent;
lv_obj_t * ui_LabelSetupStepTile;
@@ -25,6 +27,17 @@ void ui_event_ButtonSetup(lv_event_t * e);
lv_obj_t * ui_ButtonSetup;
lv_obj_t * ui_LabelSetupBtn;
// SCREEN: ui_ScreenWifiReset
void ui_ScreenWifiReset_screen_init(void);
lv_obj_t * ui_ScreenWifiReset;
lv_obj_t * ui_LabelWifiResetTitle;
void ui_event_ButtonWifiResetConfirm(lv_event_t * e);
lv_obj_t * ui_ButtonWifiResetConfirm;
lv_obj_t * ui_LabelSetupBtn1;
void ui_event_ImageWifiResetBack(lv_event_t * e);
lv_obj_t * ui_ImageWifiResetBack;
lv_obj_t * ui_LabelWifiResetContent;
// SCREEN: ui_ScreenListen
void ui_ScreenListen_screen_init(void);
lv_obj_t * ui_ScreenListen;
@@ -72,6 +85,19 @@ void ui_event_DropdownSettingsRegion(lv_event_t * e);
lv_obj_t * ui_DropdownSettingsRegion;
void ui_event_ImageSettingsBack(lv_event_t * e);
lv_obj_t * ui_ImageSettingsBack;
void ui_event_ImageSettingsReset(lv_event_t * e);
lv_obj_t * ui_ImageSettingsReset;
// SCREEN: ui_ScreenReset
void ui_ScreenReset_screen_init(void);
lv_obj_t * ui_ScreenReset;
lv_obj_t * ui_LabelResetTitle;
lv_obj_t * ui_LabelResetContent;
void ui_event_ButtonResetConfirm(lv_event_t * e);
lv_obj_t * ui_ButtonResetConfirm;
lv_obj_t * ui_LabelSetupBtn2;
void ui_event_ImageResetBack(lv_event_t * e);
lv_obj_t * ui_ImageResetBack;
void ui_event____initial_actions0(lv_event_t * e);
lv_obj_t * ui____initial_actions0;
const lv_img_dsc_t * ui_imgset_listen_body_eyes_[2] = {&ui_img_listen_body_eyes_1_png, &ui_img_listen_body_eyes_2_png};
@@ -187,10 +213,16 @@ void get_eye_blink_Animation(lv_obj_t * TargetObject, int delay)
}
///////////////////// FUNCTIONS ////////////////////
void ui_event_ImageSetupWifiReset(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
if(event_code == LV_EVENT_CLICKED) {
_ui_screen_change(ui_ScreenWifiReset, LV_SCR_LOAD_ANIM_NONE, 0, 0);
}
}
void ui_event_ButtonSetup(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_CLICKED) {
_ui_screen_change(ui_ScreenListen, LV_SCR_LOAD_ANIM_NONE, 0, 0);
if(ui_get_btn_op_group()) {
@@ -208,10 +240,23 @@ void ui_event_ButtonSetup(lv_event_t * e)
_ui_flag_modify(ui_PanelReply, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
}
}
void ui_event_ButtonWifiResetConfirm(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
if(event_code == LV_EVENT_CLICKED) {
EventWifiResetConfirmClick(e);
}
}
void ui_event_ImageWifiResetBack(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
if(event_code == LV_EVENT_CLICKED) {
_ui_screen_change(ui_ScreenSetup, LV_SCR_LOAD_ANIM_NONE, 0, 0);
}
}
void ui_event_PanelSleep(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(true == lv_obj_has_flag(ui_PanelSleep, LV_OBJ_FLAG_HIDDEN)) {
return;
@@ -230,7 +275,6 @@ void ui_event_PanelSleep(lv_event_t * e)
void ui_event_ImageListenSettings(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_CLICKED) {
_ui_screen_change(ui_ScreenSettings, LV_SCR_LOAD_ANIM_NONE, 0, 0);
if(ui_get_btn_op_group()) {
@@ -242,33 +286,38 @@ void ui_event_ImageListenSettings(lv_event_t * e)
void ui_event_DropdownSettingsRegion(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_VALUE_CHANGED) {
EventSettingsRegionValueChange(e);
} else if(event_code == LV_EVENT_LONG_PRESSED_REPEAT) {
#if CONFIG_BSP_BOARD_ESP32_S3_BOX_Lite
lv_event_send(ui_ImageSettingsBack, LV_EVENT_CLICKED, NULL);
#endif
}
}
void ui_event_ImageSettingsBack(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_CLICKED) {
_ui_screen_change(ui_ScreenListen, LV_SCR_LOAD_ANIM_NONE, 0, 0);
if(ui_get_btn_op_group()) {
lv_group_remove_all_objs(ui_get_btn_op_group());
lv_group_add_obj(ui_get_btn_op_group(), ui_PanelSleep);
}
}
}
void ui_event_ImageSettingsReset(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
if(event_code == LV_EVENT_CLICKED) {
_ui_screen_change(ui_ScreenReset, LV_SCR_LOAD_ANIM_NONE, 0, 0);
}
}
void ui_event_ButtonResetConfirm(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
if(event_code == LV_EVENT_CLICKED) {
EventResetConfirm(e);
}
}
void ui_event_ImageResetBack(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
if(event_code == LV_EVENT_CLICKED) {
_ui_screen_change(ui_ScreenSettings, LV_SCR_LOAD_ANIM_NONE, 0, 0);
}
}
void ui_event____initial_actions0(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_SCREEN_LOAD_START) {
_ui_flag_modify(ui_PanelSetupWifi, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_REMOVE);
_ui_flag_modify(ui_PanelSetupSteps, LV_OBJ_FLAG_HIDDEN, _UI_MODIFY_FLAG_ADD);
@@ -291,8 +340,10 @@ void ui_init(void)
lv_disp_set_theme(dispp, theme);
ui_ScreenSetup_screen_init();
ui_ScreenWifiReset_screen_init();
ui_ScreenListen_screen_init();
ui_ScreenSettings_screen_init();
ui_ScreenReset_screen_init();
ui____initial_actions0 = lv_obj_create(NULL);
lv_obj_add_event_cb(ui____initial_actions0, ui_event____initial_actions0, LV_EVENT_ALL, NULL);
+26 -1
View File
@@ -24,12 +24,24 @@ extern lv_obj_t * ui_ScreenSetup;
extern lv_obj_t * ui_ImageSetupTextBg;
extern lv_obj_t * ui_PanelSetupWifi;
extern lv_obj_t * ui_LabelSetupWifi;
void ui_event_ImageSetupWifiReset(lv_event_t * e);
extern lv_obj_t * ui_ImageSetupWifiReset;
extern lv_obj_t * ui_PanelSetupSteps;
extern lv_obj_t * ui_LabelSetupStepContent;
extern lv_obj_t * ui_LabelSetupStepTile;
void ui_event_ButtonSetup(lv_event_t * e);
extern lv_obj_t * ui_ButtonSetup;
extern lv_obj_t * ui_LabelSetupBtn;
// SCREEN: ui_ScreenWifiReset
void ui_ScreenWifiReset_screen_init(void);
extern lv_obj_t * ui_ScreenWifiReset;
extern lv_obj_t * ui_LabelWifiResetTitle;
void ui_event_ButtonWifiResetConfirm(lv_event_t * e);
extern lv_obj_t * ui_ButtonWifiResetConfirm;
extern lv_obj_t * ui_LabelSetupBtn1;
void ui_event_ImageWifiResetBack(lv_event_t * e);
extern lv_obj_t * ui_ImageWifiResetBack;
extern lv_obj_t * ui_LabelWifiResetContent;
// SCREEN: ui_ScreenListen
void ui_ScreenListen_screen_init(void);
extern lv_obj_t * ui_ScreenListen;
@@ -76,6 +88,18 @@ void ui_event_DropdownSettingsRegion(lv_event_t * e);
extern lv_obj_t * ui_DropdownSettingsRegion;
void ui_event_ImageSettingsBack(lv_event_t * e);
extern lv_obj_t * ui_ImageSettingsBack;
void ui_event_ImageSettingsReset(lv_event_t * e);
extern lv_obj_t * ui_ImageSettingsReset;
// SCREEN: ui_ScreenReset
void ui_ScreenReset_screen_init(void);
extern lv_obj_t * ui_ScreenReset;
extern lv_obj_t * ui_LabelResetTitle;
extern lv_obj_t * ui_LabelResetContent;
void ui_event_ButtonResetConfirm(lv_event_t * e);
extern lv_obj_t * ui_ButtonResetConfirm;
extern lv_obj_t * ui_LabelSetupBtn2;
void ui_event_ImageResetBack(lv_event_t * e);
extern lv_obj_t * ui_ImageResetBack;
void ui_event____initial_actions0(lv_event_t * e);
extern lv_obj_t * ui____initial_actions0;
@@ -84,6 +108,8 @@ lv_group_t *ui_get_btn_op_group(void);
LV_IMG_DECLARE(ui_img_setup_bg_png); // assets\setup_bg.png
LV_IMG_DECLARE(ui_img_setup_text_bg_png); // assets\setup_text_bg.png
LV_IMG_DECLARE(ui_img_reset_icon_png); // assets\reset_icon.png
LV_IMG_DECLARE(ui_img_settings_back_png); // assets\settings_back.png
LV_IMG_DECLARE(ui_img_body_shadow_png); // assets\body_shadow.png
LV_IMG_DECLARE(ui_img_body_png); // assets\body.png
LV_IMG_DECLARE(ui_img_body_eye_screen_png); // assets\body_eye_screen.png
@@ -97,7 +123,6 @@ LV_IMG_DECLARE(ui_img_reply_body_png); // assets\reply_body.png
LV_IMG_DECLARE(ui_img_reply_small_shadow_png); // assets\reply_small_shadow.png
LV_IMG_DECLARE(ui_img_reply_chatgpt_logo_png); // assets\reply_chatgpt_logo.png
LV_IMG_DECLARE(ui_img_settings_icon_png); // assets\settings_icon.png
LV_IMG_DECLARE(ui_img_settings_back_png); // assets\settings_back.png
LV_IMG_DECLARE(ui_img_listen_body_eyes_2_png); // assets\listen_body_eyes_2.png
LV_FONT_DECLARE(ui_font_KaiTiCN20);
+3 -1
View File
@@ -11,8 +11,10 @@ extern "C" {
#endif
void EventBtnSetupClick(lv_event_t * e);
void EventWifiResetConfirmClick(lv_event_t * e);
void EventPanelSleepClickCb(lv_event_t * e);
void EventSettingsRegionValueChange(lv_event_t * e);
// void EventSettingsRegionValueChange(lv_event_t * e);
void EventResetConfirm(lv_event_t * e);
#ifdef __cplusplus
} /*extern "C"*/
+8 -6
View File
@@ -1,7 +1,9 @@
# Name, Type, SubType, Offset, Size, Flags
# Name, Type, SubType, Offset, Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 8M,
storage, data, spiffs, , 2M,
model, data, spiffs, , 4000K
nvs, data, nvs, 0x9000, 0x4000,
otadata, data, ota, 0xd000, 0x2000,
phy_init, data, phy, 0xf000, 0x1000,
ota_0, app, ota_0, 0x10000, 6M,
uf2, app, factory, 0x700000, 2M,
storage, data, spiffs, 0x900000, 2M,
model, data, spiffs, 0xb00000, 4000K
1 # Name, Type, SubType, Offset, Size, Flags # Name, Type, SubType, Offset, Size, Flags
2 # Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap # Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
3 nvs, data, nvs, 0x9000, 0x6000, nvs, data, nvs, 0x9000, 0x4000,
4 phy_init, data, phy, 0xf000, 0x1000, otadata, data, ota, 0xd000, 0x2000,
5 factory, app, factory, 0x10000, 8M, phy_init, data, phy, 0xf000, 0x1000,
6 storage, data, spiffs, , 2M, ota_0, app, ota_0, 0x10000, 6M,
7 model, data, spiffs, , 4000K uf2, app, factory, 0x700000, 2M,
8 storage, data, spiffs, 0x900000, 2M,
9 model, data, spiffs, 0xb00000, 4000K
-3
View File
@@ -5,9 +5,6 @@ CONFIG_IDF_TARGET="esp32s3"
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_ESP_WIFI_SSID=""
CONFIG_ESP_WIFI_PASSWORD=""
CONFIG_OPENAI_API_KEY=""
CONFIG_SR_WN_WN9_HIESP=y
CONFIG_SR_MN_CN_NONE=y
CONFIG_SR_MN_EN_MULTINET5_SINGLE_RECOGNITION_QUANT8=y
Binary file not shown.

After

Width:  |  Height:  |  Size: 568 B

+7 -1
View File
@@ -1,7 +1,7 @@
esp_toml_version = 1.0
firmware_images_url = "https://dl.espressif.com/AE/esp-box/"
supported_apps = ["ESP-BOX_Demo_EN_V0_3_0", "ESP-BOX_Demo_CN_V0_3_0", "ESP-BOX_USB_Headset_V0_0_1"]
supported_apps = ["ESP-BOX_Demo_EN_V0_3_0", "ESP-BOX_Demo_CN_V0_3_0", "ESP-BOX_USB_Headset_V0_0_1", "ESP-BOX_ChatGPT_Demo_V1_0"]
[ESP-BOX_Demo_EN_V0_3_0]
chipsets = ["ESP32-S3"]
@@ -19,4 +19,10 @@ ios_app_url = ""
chipsets = ["ESP32-S3"]
image.esp32-s3 = "ESP-BOX_USB_Headset_V0.0.1.bin"
android_app_url = ""
ios_app_url = ""
[ESP-BOX_ChatGPT_Demo_V1_0]
chipsets = ["ESP32-S3"]
image.esp32-s3 = "ESP-BOX_ChatGPT_Demo_V1.0.bin"
android_app_url = ""
ios_app_url = ""