improve ui auto test

This commit is contained in:
lixianjing 2023-11-12 17:42:22 +08:00
parent 5f1773d7c6
commit e57c0a47a7
55 changed files with 2668 additions and 1076 deletions

View File

@ -1417,12 +1417,10 @@ ret_t application_init() {
fs_get_user_storage_path(os_fs(), path);
log_debug("user storage path:%s\n", path);
#ifndef REMOTE_UI_URL
#define REMOTE_UI_URL "tcp://localhost:2233"
#endif/*REMOTE_UI_URL*/
#ifdef TK_IS_PC
tk_service_start(main_loop_get_event_source_manager(main_loop()), REMOTE_UI_URL, remote_ui_service_create, NULL);
#endif/*TK_IS_PC*/
return show_preload_res_window();
}

View File

@ -2,7 +2,7 @@
<slide_view x="0" y="0" w="100%" h="100%" loop="true">
<view x="0" y="0" w="100%" h="100%" children_layout="default(c=2,r=8,m=5,s=5)">
<button focusable="true" focused="true" name="open:basic" text="Basic"/>
<button focusable="true" name="open:button" text="Buttons"/>
<button focusable="true" name="open:button" tr_text="Button"/>
<button focusable="true" name="open:edit" text="Edits"/>
<button focusable="true" name="open:keyboard" text="KeyBoard"/>
<button focusable="true" name="open:list_view" text="ListView"/>

View File

@ -1,5 +1,18 @@
# 最新动态
2023/11/12
* 修复im->busy没有正常复位的情况。
* 完善UI测试框架和demoui测试用例。
* 增加函数assets\_manager\_dump
* 增加函数image\_manager\_dump
* 完善widget\_child支持通过索引访问子控件。
* 完善widget\_find\_by\_path支持通过类型查找子控件。
* 窗口管理器支持属性WIDGET\_PROP\_SCREEN\_SAVER\_TIME/WIDGET\_PROP\_SHOW\_FPS/WIDGET\_PROP\_MAX\_FPS
2023/11/11
* 增加属性WIDGET\_PROP\_SCREEN\_SAVER\_TIME/WIDGET\_PROP\_SHOW\_FPS/WIDGET\_PROP\_MAX\_FPS
* 增加函数fs\_file\_equal
2023/11/9
* 完善serial helper
* 修复value_int64接口强转uin32类型值对象时出现溢出的问题(感谢雨欣提供补丁)

View File

@ -1,5 +1,5 @@
TK_CONST_DATA_ALIGN(const unsigned char ui_images[]) = {
0x04,0x00,0x01,0x01,0x06,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x73,0x00,0x00,
0x04,0x00,0x01,0x01,0x07,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x73,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
@ -91,114 +91,225 @@ TK_CONST_DATA_ALIGN(const unsigned char ui_images[]) = {
0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,
0x67,0x65,0x00,0x65,0x61,0x72,0x74,0x68,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x67,0x65,0x00,0x67,0x72,0x61,0x79,0x5f,0x38,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,
0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x64,0x65,0x66,0x61,
0x75,0x6c,0x74,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,
0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,
0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x64,0x65,0x66,
0x61,0x75,0x6c,0x74,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x65,0x61,0x72,0x74,0x68,0x00,
0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x00,0x6c,0x61,0x62,0x65,
0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,
0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,
0x65,0x78,0x74,0x00,0x69,0x63,0x6f,0x6e,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x65,
0x61,0x72,0x74,0x68,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x63,0x65,0x6e,0x74,0x65,
0x72,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,
0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x63,0x65,0x6e,0x74,0x65,0x72,0x00,0x00,0x00,
0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,0x70,0x74,
0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,
0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x33,0x29,0x00,0x00,0x69,0x6d,0x61,0x67,
0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,
0x67,0x65,0x00,0x31,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x73,0x63,0x61,0x6c,0x65,
0x5f,0x77,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x73,0x63,0x61,0x6c,0x65,0x5f,0x77,0x00,
0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,
0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x31,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,
0x65,0x00,0x73,0x63,0x61,0x6c,0x65,0x5f,0x68,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,
0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,
0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x73,
0x63,0x61,0x6c,0x65,0x5f,0x68,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,
0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x31,0x00,0x64,
0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x73,0x63,0x61,0x6c,0x65,0x00,0x00,0x6c,0x61,0x62,0x65,
0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,
0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,
0x65,0x78,0x74,0x00,0x73,0x63,0x61,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,
0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,
0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,
0x31,0x2c,0x63,0x3d,0x32,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x69,0x6d,0x61,0x67,
0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,
0x67,0x65,0x00,0x62,0x72,0x69,0x63,0x6b,0x73,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,
0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,
0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x72,0x69,0x63,0x6b,0x73,0x00,
0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x78,0x00,0x00,
0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,
0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x78,0x00,0x00,0x00,0x00,
0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,0x70,0x74,0x79,
0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,
0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x32,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,
0x29,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,
0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x72,0x69,0x63,0x6b,0x73,0x00,0x64,0x72,0x61,
0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x79,0x00,0x00,0x6c,0x61,0x62,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,
0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x65,0x61,0x72,0x74,0x68,
0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x69,0x63,0x6f,0x6e,0x00,0x00,0x6c,0x61,0x62,
0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,
0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,
0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,
0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x79,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,
0x74,0x65,0x78,0x74,0x00,0x69,0x63,0x6f,0x6e,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,
0x65,0x61,0x72,0x74,0x68,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x63,0x65,0x6e,0x74,
0x65,0x72,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x63,0x65,0x6e,0x74,0x65,0x72,0x00,0x00,
0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,0x70,
0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x33,0x29,0x00,0x00,0x69,0x6d,0x61,
0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,
0x61,0x67,0x65,0x00,0x31,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x73,0x63,0x61,0x6c,
0x65,0x5f,0x77,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,
0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,
0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x73,0x63,0x61,0x6c,0x65,0x5f,0x77,
0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,
0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x31,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,
0x70,0x65,0x00,0x73,0x63,0x61,0x6c,0x65,0x5f,0x68,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,
0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,
0x73,0x63,0x61,0x6c,0x65,0x5f,0x68,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,
0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x31,0x00,
0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x73,0x63,0x61,0x6c,0x65,0x00,0x00,0x6c,0x61,0x62,
0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,
0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,
0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,
0x74,0x65,0x78,0x74,0x00,0x73,0x63,0x61,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,
0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,
0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,
0x3d,0x31,0x2c,0x63,0x3d,0x32,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x69,0x6d,0x61,
0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,
0x61,0x67,0x65,0x00,0x62,0x72,0x69,0x63,0x6b,0x73,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x79,0x5f,0x69,0x6e,0x76,0x65,0x72,0x73,0x65,0x00,0x00,0x6c,
0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,
0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,
0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,
0x65,0x61,0x74,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x72,0x69,0x63,0x6b,0x73,
0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x78,0x00,
0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,
0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x78,0x00,0x00,0x00,
0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,0x70,0x74,
0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,
0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x32,0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,
0x32,0x29,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,
0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x62,0x72,0x69,0x63,0x6b,0x73,0x00,0x64,0x72,
0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x79,0x00,0x00,0x6c,0x61,
0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,
0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,
0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,
0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x79,0x00,0x00,0x00,0x00,0x69,0x6d,
0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,
0x6d,0x61,0x67,0x65,0x00,0x62,0x72,0x69,0x63,0x6b,0x73,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,
0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x79,0x5f,0x69,0x6e,0x76,0x65,0x72,0x73,0x65,0x00,0x00,
0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,
0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x79,0x5f,0x69,0x6e,0x76,
0x65,0x72,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,
0x6c,0x65,0x00,0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,
0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x33,
0x2c,0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,
0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,
0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,
0x70,0x61,0x74,0x63,0x68,0x39,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,
0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,
0x68,0x39,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,
0x74,0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x70,0x61,0x74,0x63,0x68,
0x33,0x5f,0x78,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,
0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,
0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,
0x78,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,
0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,
0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x70,0x61,0x74,0x63,0x68,0x33,
0x5f,0x79,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x79,
0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,
0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x33,0x2c,0x73,0x3d,0x32,
0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,
0x62,0x74,0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,
0x61,0x74,0x39,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,
0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,
0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x39,
0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,
0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,
0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x33,
0x5f,0x78,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x33,0x5f,
0x78,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,
0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,
0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,
0x33,0x5f,0x79,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,
0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,
0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x33,
0x5f,0x79,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x31,0x29,0x00,
0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,
0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,
0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x78,0x5f,0x73,
0x63,0x61,0x6c,0x65,0x5f,0x79,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,
0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,
0x68,0x33,0x5f,0x78,0x5f,0x73,0x63,0x61,0x6c,0x65,0x5f,0x79,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,
0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,
0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x31,0x30,0x29,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,
0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,
0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x79,0x5f,0x73,0x63,0x61,0x6c,0x65,0x5f,0x78,0x00,0x00,0x6c,
0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,
0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x5f,0x79,0x5f,0x69,0x6e,0x76,0x65,
0x72,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,
0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x79,0x5f,0x73,0x63,0x61,0x6c,
0x65,0x5f,0x78,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,
0x65,0x00,0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,
@ -206,158 +317,47 @@ TK_CONST_DATA_ALIGN(const unsigned char ui_images[]) = {
0x73,0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,
0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,
0x65,0x6e,0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x70,
0x61,0x74,0x63,0x68,0x39,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,
0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,
0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,0x68,
0x39,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,
0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,
0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x70,0x61,0x74,0x63,0x68,0x33,
0x5f,0x78,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x78,
0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,
0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,
0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,
0x79,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,
0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x79,0x00,
0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,
0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x33,0x2c,0x73,0x3d,0x32,0x2c,
0x6d,0x3d,0x32,0x29,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,
0x74,0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,
0x74,0x39,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x39,0x00,
0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,
0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,0x5f,
0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x33,0x5f,
0x78,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,
0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x33,0x5f,0x78,
0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,
0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,
0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x33,
0x5f,0x79,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,
0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x72,0x65,0x70,0x65,0x61,0x74,0x33,0x5f,
0x79,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,
0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x31,0x29,0x00,0x00,
0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,
0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x64,
0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x78,0x5f,0x73,0x63,
0x61,0x6c,0x65,0x5f,0x79,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,
0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,
0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,0x68,
0x33,0x5f,0x78,0x5f,0x73,0x63,0x61,0x6c,0x65,0x5f,0x79,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,
0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,
0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,
0x72,0x3d,0x31,0x2c,0x63,0x3d,0x31,0x30,0x29,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,
0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x67,0x72,
0x65,0x65,0x6e,0x5f,0x62,0x74,0x6e,0x5f,0x6e,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,
0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x79,0x5f,0x73,0x63,0x61,0x6c,0x65,0x5f,0x78,0x00,0x00,0x6c,0x61,
0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,
0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,
0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,
0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x74,0x63,0x68,0x33,0x5f,0x79,0x5f,0x73,0x63,0x61,0x6c,0x65,
0x5f,0x78,0x00,0x00,0x00,0x00,0x00,0x6c,0x69,0x73,0x74,0x5f,0x69,0x74,0x65,0x6d,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,
0x00,0x65,0x6d,0x70,0x74,0x79,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,
0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x72,0x3d,0x31,0x2c,0x63,0x3d,0x33,0x2c,0x73,
0x3d,0x32,0x2c,0x6d,0x3d,0x32,0x29,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x74,0x79,
0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x69,0x6d,0x61,0x67,
0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x64,0x5f,0x66,0x67,0x23,0x78,0x79,0x77,0x68,0x28,0x30,0x2c,0x30,
0x2c,0x31,0x30,0x36,0x2c,0x35,0x34,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x63,
0x65,0x6e,0x74,0x65,0x72,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,
0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,0x30,
0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x63,0x6b,0x65,
0x64,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x69,
0x6d,0x61,0x67,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x64,0x5f,0x66,0x67,0x23,0x67,0x72,0x69,0x64,0x28,
0x34,0x2c,0x33,0x2c,0x30,0x2c,0x32,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x69,0x6d,0x61,
0x67,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x64,0x5f,0x66,0x67,0x23,0x78,0x79,0x77,0x68,0x28,0x30,0x2c,
0x30,0x2c,0x31,0x30,0x36,0x2c,0x35,0x34,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,
0x63,0x65,0x6e,0x74,0x65,0x72,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,0x30,
0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x63,0x6b,
0x65,0x64,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,
0x65,0x64,0x20,0x63,0x65,0x6e,0x74,0x65,0x72,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,
0x00,0x69,0x6d,0x61,0x67,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x64,0x5f,0x66,0x67,0x23,0x78,0x79,0x77,
0x68,0x28,0x31,0x30,0x36,0x2c,0x30,0x2c,0x31,0x30,0x36,0x2c,0x35,0x34,0x29,0x00,0x64,0x72,0x61,0x77,
0x5f,0x74,0x79,0x70,0x65,0x00,0x73,0x63,0x61,0x6c,0x65,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,
0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,0x65,0x00,
0x69,0x6d,0x61,0x67,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x64,0x5f,0x66,0x67,0x23,0x67,0x72,0x69,0x64,
0x28,0x34,0x2c,0x33,0x2c,0x30,0x2c,0x32,0x29,0x00,0x64,0x72,0x61,0x77,0x5f,0x74,0x79,0x70,0x65,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,
0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x77,0x3d,0x31,
0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,0x00,0x70,0x61,0x63,
0x6b,0x65,0x64,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x00,0x00,0x00,0x00,0x69,0x6d,0x61,0x67,0x65,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6f,0x72,0x64,0x65,0x72,0x00,0x69,0x6d,0x61,0x67,
0x65,0x00,0x69,0x6d,0x61,0x67,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x64,0x5f,0x66,0x67,0x23,0x78,0x79,
0x77,0x68,0x28,0x31,0x30,0x36,0x2c,0x30,0x2c,0x31,0x30,0x36,0x2c,0x35,0x34,0x29,0x00,0x64,0x72,0x61,
0x77,0x5f,0x74,0x79,0x70,0x65,0x00,0x73,0x63,0x61,0x6c,0x65,0x00,0x00,0x6c,0x61,0x62,0x65,0x6c,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,
0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,
0x74,0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,
0x74,0x00,0x70,0x61,0x63,0x6b,0x65,0x64,0x20,0x73,0x63,0x61,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,
0x73,0x63,0x72,0x6f,0x6c,0x6c,0x5f,0x62,0x61,0x72,0x5f,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0c,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,
0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x72,0x69,0x67,0x68,0x74,0x2c,0x79,0x3d,0x30,0x2c,
0x77,0x3d,0x31,0x32,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x62,0x61,
0x72,0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x30,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,
0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x74,0x65,0x78,0x74,
0x00,0x70,0x61,0x63,0x6b,0x65,0x64,0x20,0x73,0x63,0x61,0x6c,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x73,
0x63,0x72,0x6f,0x6c,0x6c,0x5f,0x62,0x61,0x72,0x5f,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x72,0x69,0x67,0x68,0x74,0x2c,0x79,0x3d,0x30,0x2c,0x77,
0x3d,0x31,0x32,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x62,0x61,0x72,
0x00,0x76,0x61,0x6c,0x75,0x65,0x00,0x30,0x00,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,
0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,
0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x31,0x30,
0x2c,0x77,0x3d,0x32,0x35,0x25,0x2c,0x68,0x3d,0x33,0x30,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,0x6c,
0x6f,0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,};/*7222*/
0x28,0x78,0x3d,0x63,0x65,0x6e,0x74,0x65,0x72,0x2c,0x79,0x3d,0x62,0x6f,0x74,0x74,0x6f,0x6d,0x3a,0x31,
0x30,0x2c,0x77,0x3d,0x32,0x35,0x25,0x2c,0x68,0x3d,0x33,0x30,0x29,0x00,0x6e,0x61,0x6d,0x65,0x00,0x63,
0x6c,0x6f,0x73,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6c,0x6f,0x73,0x65,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,};/*7223*/

View File

@ -1,5 +1,5 @@
TK_CONST_DATA_ALIGN(const unsigned char ui_main[]) = {
0x04,0x00,0x01,0x01,0xb6,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
0x04,0x00,0x01,0x01,0xb8,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x6d,0x61,0x69,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x12,0x12,0x22,0x11,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
@ -28,306 +28,306 @@ TK_CONST_DATA_ALIGN(const unsigned char ui_main[]) = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,
0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x75,0x74,0x74,0x6f,0x6e,0x73,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x74,0x6f,0x6e,0x00,0x74,0x72,0x5f,0x74,0x65,0x78,0x74,0x00,0x42,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,
0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x65,0x64,0x69,0x74,0x00,0x74,0x65,0x78,
0x74,0x00,0x45,0x64,0x69,0x74,0x73,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,
0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x65,0x6e,0x3a,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x74,0x65,0x78,0x74,0x00,0x4b,0x65,0x79,
0x42,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,
0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,
0x3a,0x6c,0x69,0x73,0x74,0x5f,0x76,0x69,0x65,0x77,0x00,0x74,0x65,0x78,0x74,0x00,0x4c,0x69,0x73,0x74,
0x56,0x69,0x65,0x77,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,
0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,
0x73,0x6c,0x69,0x64,0x65,0x5f,0x76,0x69,0x65,0x77,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x6c,0x69,0x64,
0x65,0x56,0x69,0x65,0x77,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,
0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,
0x3a,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x6e,0x69,0x6d,
0x61,0x74,0x65,0x20,0x57,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x65,0x6e,0x3a,0x61,0x6e,0x69,0x6d,0x61,0x74,0x65,0x5f,0x77,0x69,0x64,0x67,0x65,0x74,
0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x6e,0x69,0x6d,0x61,0x74,0x65,0x20,0x57,0x69,0x64,0x67,0x65,0x74,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,
0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x74,0x61,0x62,0x5f,
0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x00,0x74,0x65,0x78,0x74,0x00,0x54,0x61,0x62,0x20,0x43,0x6f,0x6e,
0x74,0x72,0x6f,0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,
0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,
0x63,0x6f,0x6d,0x62,0x6f,0x5f,0x62,0x6f,0x78,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6f,0x6d,0x62,0x6f,
0x42,0x6f,0x78,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,
0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x72,
0x69,0x63,0x68,0x5f,0x74,0x65,0x78,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x69,0x63,0x68,0x54,0x65,
0x78,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,
0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x63,0x6f,
0x6c,0x6f,0x72,0x5f,0x70,0x69,0x63,0x6b,0x65,0x72,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6f,0x6c,0x6f,
0x72,0x20,0x50,0x69,0x63,0x6b,0x65,0x72,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,
0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,
0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,
0x25,0x29,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x63,0x3d,0x32,0x2c,0x72,0x3d,0x38,0x2c,0x6d,0x3d,0x35,0x2c,0x73,
0x3d,0x35,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,
0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x74,0x69,
0x6d,0x65,0x5f,0x63,0x6c,0x6f,0x63,0x6b,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x6e,0x61,0x6c,0x6f,0x67,
0x20,0x43,0x6c,0x6f,0x63,0x6b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x64,0x69,0x67,0x69,0x74,0x5f,0x63,0x6c,0x6f,0x63,0x6b,0x00,0x74,0x65,0x78,0x74,0x00,0x44,
0x69,0x67,0x69,0x74,0x20,0x43,0x6c,0x6f,0x63,0x6b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x65,0x6e,0x3a,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x4c,0x6f,
0x63,0x61,0x6c,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,
0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,
0x69,0x6d,0x61,0x67,0x65,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x49,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,
0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x67,0x61,0x75,0x67,0x65,0x00,0x74,
0x65,0x78,0x74,0x00,0x47,0x61,0x75,0x67,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,
0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x65,0x64,0x69,0x74,0x00,0x74,
0x65,0x78,0x74,0x00,0x45,0x64,0x69,0x74,0x73,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x65,0x6e,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x77,0x69,
0x74,0x63,0x68,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,
0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x74,
0x65,0x78,0x74,0x5f,0x73,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x65,
0x6c,0x65,0x63,0x74,0x6f,0x72,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x69,0x6d,0x61,0x67,0x65,0x5f,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x00,0x74,0x65,
0x78,0x74,0x00,0x49,0x6d,0x61,0x67,0x65,0x20,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,
0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x70,0x72,0x6f,0x67,0x72,0x65,
0x73,0x73,0x5f,0x63,0x69,0x72,0x63,0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x72,0x6f,0x67,0x72,
0x65,0x73,0x73,0x43,0x69,0x72,0x63,0x6c,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x65,0x6e,0x3a,0x69,0x6d,0x61,0x67,0x65,0x5f,0x76,0x61,0x6c,0x75,0x65,0x00,0x74,0x65,0x78,
0x74,0x00,0x56,0x61,0x6c,0x75,0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x76,0x67,0x5f,0x69,0x6d,0x61,0x67,0x65,0x00,0x74,
0x65,0x78,0x74,0x00,0x53,0x56,0x47,0x20,0x49,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x67,0x69,0x66,0x5f,0x69,0x6d,0x61,0x67,0x65,0x00,0x74,
0x65,0x78,0x74,0x00,0x47,0x49,0x46,0x20,0x49,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x76,0x69,0x65,
0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,
0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,
0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,
0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,
0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x63,0x3d,0x32,0x2c,0x72,0x3d,0x38,0x2c,
0x6d,0x3d,0x35,0x2c,0x73,0x3d,0x35,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x6f,0x70,0x65,0x6e,0x3a,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x74,0x65,0x78,0x74,0x00,0x4b,
0x65,0x79,0x42,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,
0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x65,0x6e,0x3a,0x6c,0x61,0x62,0x65,0x6c,0x00,0x74,0x65,0x78,0x74,0x00,0x4c,0x61,0x62,0x65,0x6c,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x65,0x6e,0x3a,0x6c,0x69,0x73,0x74,0x5f,0x76,0x69,0x65,0x77,0x00,0x74,0x65,0x78,0x74,0x00,0x4c,0x69,
0x73,0x74,0x56,0x69,0x65,0x77,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,
0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x69,0x61,0x6c,0x6f,
0x67,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x69,0x61,0x6c,0x6f,0x67,0x73,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,
0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x6c,0x69,0x64,0x65,0x5f,0x6d,0x65,0x6e,
0x75,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x6c,0x69,0x64,0x65,0x20,0x4d,0x65,0x6e,0x75,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,
0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x6f,0x66,0x74,0x5f,0x6b,0x65,
0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x75,0x73,0x74,0x6f,0x6d,0x20,0x4b,
0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x73,0x6c,0x69,0x64,0x65,0x5f,0x76,0x69,0x65,0x77,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x6c,
0x69,0x64,0x65,0x56,0x69,0x65,0x77,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,
0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x65,0x6e,0x3a,0x76,0x67,0x63,0x61,0x6e,0x76,0x61,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x56,0x47,0x20,
0x43,0x61,0x6e,0x76,0x61,0x73,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x6c,0x69,0x6e,0x65,0x61,0x72,0x5f,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x00,0x74,0x65,
0x78,0x74,0x00,0x4c,0x69,0x6e,0x65,0x61,0x72,0x20,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,
0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x72,0x61,0x64,0x69,0x61,0x6c,
0x5f,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x61,0x64,0x69,0x61,
0x6c,0x20,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x74,0x72,0x6f,0x6b,0x65,0x5f,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,
0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x74,0x72,0x6f,0x6b,0x65,0x20,0x47,0x72,0x61,0x64,0x69,0x65,
0x6e,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,
0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x6f,0x76,
0x65,0x72,0x6c,0x61,0x79,0x00,0x74,0x65,0x78,0x74,0x00,0x4f,0x76,0x65,0x72,0x6c,0x61,0x79,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,
0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x6d,0x6c,0x65,0x64,0x69,0x74,
0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x75,0x6c,0x74,0x69,0x4c,0x69,0x6e,0x65,0x20,0x45,0x64,0x69,0x74,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,
0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x68,0x73,0x63,0x72,
0x6f,0x6c,0x6c,0x5f,0x6c,0x61,0x62,0x65,0x6c,0x00,0x74,0x65,0x78,0x74,0x00,0x48,0x53,0x63,0x72,0x6f,
0x6c,0x6c,0x20,0x4c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x65,0x6e,0x3a,0x6d,0x65,0x6e,0x75,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6f,0x6e,0x74,0x65,0x78,
0x74,0x4d,0x65,0x6e,0x75,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,
0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,
0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,
0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,
0x75,0x6c,0x74,0x28,0x63,0x3d,0x32,0x2c,0x72,0x3d,0x38,0x2c,0x6d,0x3d,0x35,0x2c,0x73,0x3d,0x35,0x29,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,
0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x72,0x61,0x67,0x67,
0x61,0x62,0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x72,0x61,0x67,0x67,0x61,0x62,0x6c,0x65,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,
0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x72,0x69,0x63,0x68,0x5f,
0x74,0x65,0x78,0x74,0x5f,0x76,0x69,0x65,0x77,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x69,0x63,0x68,0x54,
0x65,0x78,0x74,0x56,0x69,0x65,0x77,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,
0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,
0x65,0x6e,0x3a,0x62,0x69,0x64,0x69,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x69,0x64,0x69,0x72,0x65,0x63,
0x74,0x69,0x6f,0x6e,0x61,0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x67,0x72,0x69,0x64,0x00,0x74,0x65,0x78,0x74,0x00,0x47,0x72,0x69,0x64,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,
0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x74,0x69,
0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x54,0x69,0x6c,0x65,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,
0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x66,0x6c,0x6f,0x61,0x74,0x69,
0x6e,0x67,0x5f,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x74,0x65,0x78,0x74,0x00,0x46,0x6c,0x6f,
0x61,0x74,0x69,0x6e,0x67,0x20,0x4b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x6c,0x69,0x64,0x65,0x72,0x00,0x74,0x65,0x78,
0x74,0x00,0x53,0x6c,0x69,0x64,0x65,0x72,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x65,0x6e,0x3a,0x63,0x6c,0x6f,0x73,0x65,0x5f,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x74,0x65,0x78,
0x74,0x00,0x63,0x6c,0x6f,0x73,0x65,0x5f,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x69,0x61,0x6c,0x6f,0x67,0x5f,0x68,0x69,0x67,
0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x69,0x61,0x6c,0x6f,0x67,0x20,0x48,
0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x65,0x6e,0x3a,0x73,0x76,0x67,0x5f,0x74,0x65,0x73,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x56,
0x47,0x20,0x54,0x65,0x73,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x73,0x70,0x69,0x6e,0x5f,0x62,0x6f,0x78,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x70,0x69,0x6e,
0x20,0x62,0x6f,0x78,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,
0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,
0x6d,0x6f,0x64,0x65,0x6c,0x65,0x73,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x6f,0x64,0x65,0x6c,0x65,
0x73,0x73,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,
0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,
0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x63,0x68,0x69,
0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,
0x28,0x63,0x3d,0x31,0x2c,0x72,0x3d,0x38,0x2c,0x6d,0x3d,0x35,0x2c,0x73,0x3d,0x35,0x29,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,
0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x72,0x6f,0x70,0x5f,0x66,0x69,0x6c,
0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x72,0x6f,0x70,0x20,0x46,0x69,0x6c,0x65,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,
0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x6d,0x65,0x6d,0x74,0x65,0x73,0x74,0x00,
0x74,0x65,0x78,0x74,0x00,0x4d,0x65,0x6d,0x54,0x65,0x73,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x65,0x6e,0x3a,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x6e,
0x69,0x6d,0x61,0x74,0x65,0x20,0x57,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x63,0x61,0x6c,0x69,0x62,0x72,0x61,0x74,0x69,0x6f,0x6e,0x5f,
0x77,0x69,0x6e,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x61,0x6c,0x69,0x62,0x72,0x61,0x74,0x69,0x6f,0x6e,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x61,0x6e,0x69,0x6d,0x61,0x74,0x65,0x5f,0x77,0x69,0x64,0x67,
0x65,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x6e,0x69,0x6d,0x61,0x74,0x65,0x20,0x57,0x69,0x64,0x67,
0x65,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,
0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x68,0x6f,0x77,0x5f,0x66,0x70,0x73,0x00,
0x74,0x65,0x78,0x74,0x00,0x53,0x68,0x6f,0x77,0x20,0x46,0x50,0x53,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,
0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x74,0x61,
0x62,0x5f,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x00,0x74,0x65,0x78,0x74,0x00,0x54,0x61,0x62,0x20,0x43,
0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x73,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x54,0x61,
0x6b,0x65,0x20,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x63,0x6f,0x6d,0x62,0x6f,0x5f,0x62,0x6f,0x78,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6f,0x6d,
0x62,0x6f,0x42,0x6f,0x78,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,
0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,
0x3a,0x72,0x69,0x63,0x68,0x5f,0x74,0x65,0x78,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x69,0x63,0x68,
0x54,0x65,0x78,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,
0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,
0x63,0x6f,0x6c,0x6f,0x72,0x5f,0x70,0x69,0x63,0x6b,0x65,0x72,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6f,
0x6c,0x6f,0x72,0x20,0x50,0x69,0x63,0x6b,0x65,0x72,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,
0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,
0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,
0x30,0x30,0x25,0x29,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,
0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x63,0x3d,0x32,0x2c,0x72,0x3d,0x38,0x2c,0x6d,0x3d,0x35,
0x2c,0x73,0x3d,0x35,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,
0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,
0x74,0x69,0x6d,0x65,0x5f,0x63,0x6c,0x6f,0x63,0x6b,0x00,0x74,0x65,0x78,0x74,0x00,0x41,0x6e,0x61,0x6c,
0x6f,0x67,0x20,0x43,0x6c,0x6f,0x63,0x6b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x65,0x6e,0x3a,0x64,0x69,0x67,0x69,0x74,0x5f,0x63,0x6c,0x6f,0x63,0x6b,0x00,0x74,0x65,0x78,0x74,
0x00,0x44,0x69,0x67,0x69,0x74,0x20,0x43,0x6c,0x6f,0x63,0x6b,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x6c,0x6f,0x63,0x61,0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,
0x4c,0x6f,0x63,0x61,0x6c,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x69,0x6d,0x61,0x67,0x65,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x49,0x6d,0x61,0x67,0x65,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,
0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x67,0x61,0x75,0x67,0x65,
0x00,0x74,0x65,0x78,0x74,0x00,0x47,0x61,0x75,0x67,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x72,0x65,0x6c,0x6f,0x61,0x64,0x5f,0x74,0x68,0x65,0x6d,0x65,0x00,0x74,0x65,0x78,0x74,0x00,
0x54,0x65,0x73,0x74,0x20,0x43,0x68,0x61,0x6e,0x67,0x65,0x20,0x54,0x68,0x65,0x6d,0x65,0x00,0x00,0x00,
0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x77,0x69,0x74,0x63,0x68,0x00,0x74,0x65,0x78,0x74,0x00,0x53,
0x77,0x69,0x74,0x63,0x68,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,
0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,
0x3a,0x74,0x65,0x78,0x74,0x5f,0x73,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x00,0x74,0x65,0x78,0x74,0x00,
0x53,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x65,0x6e,0x3a,0x69,0x6d,0x61,0x67,0x65,0x5f,0x61,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x00,
0x74,0x65,0x78,0x74,0x00,0x49,0x6d,0x61,0x67,0x65,0x20,0x41,0x6e,0x69,0x6d,0x61,0x74,0x69,0x6f,0x6e,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,
0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x70,0x72,0x6f,0x67,
0x72,0x65,0x73,0x73,0x5f,0x63,0x69,0x72,0x63,0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x50,0x72,0x6f,
0x67,0x72,0x65,0x73,0x73,0x43,0x69,0x72,0x63,0x6c,0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,
0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x69,0x6d,0x61,0x67,0x65,0x5f,0x76,0x61,0x6c,0x75,0x65,0x00,0x74,
0x65,0x78,0x74,0x00,0x56,0x61,0x6c,0x75,0x65,0x20,0x49,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,
0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x76,0x67,0x5f,0x69,0x6d,0x61,0x67,0x65,
0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x56,0x47,0x20,0x49,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,
0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x67,0x69,0x66,0x5f,0x69,0x6d,0x61,0x67,0x65,
0x00,0x74,0x65,0x78,0x74,0x00,0x47,0x49,0x46,0x20,0x49,0x6d,0x61,0x67,0x65,0x00,0x00,0x00,0x00,0x76,
0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,
0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,
0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,
0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,
0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x63,0x3d,0x32,0x2c,0x72,0x3d,
0x38,0x2c,0x6d,0x3d,0x35,0x2c,0x73,0x3d,0x35,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x65,0x6e,0x3a,0x6c,0x61,0x62,0x65,0x6c,0x00,0x74,0x65,0x78,0x74,0x00,0x4c,0x61,0x62,0x65,
0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,
0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x69,0x61,
0x6c,0x6f,0x67,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x69,0x61,0x6c,0x6f,0x67,0x73,0x00,0x00,0x00,
0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,
0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x65,0x78,0x69,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x45,0x78,
0x69,0x74,0x00,0x00,0x00,0x00,0x00,0x73,0x6c,0x69,0x64,0x65,0x5f,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,
0x6f,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,0x5f,
0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,0x79,
0x3d,0x62,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x32,0x30,0x29,0x00,0x74,0x72,0x61,0x6e,
0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0x74,0x72,0x75,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,0x62,0x6c,
0x75,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*6630*/
0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x6c,0x69,0x64,0x65,0x5f,0x6d,
0x65,0x6e,0x75,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x6c,0x69,0x64,0x65,0x20,0x4d,0x65,0x6e,0x75,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,
0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x6f,0x66,0x74,0x5f,
0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x75,0x73,0x74,0x6f,0x6d,
0x20,0x4b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x65,0x6e,0x3a,0x76,0x67,0x63,0x61,0x6e,0x76,0x61,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x56,
0x47,0x20,0x43,0x61,0x6e,0x76,0x61,0x73,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x65,0x6e,0x3a,0x6c,0x69,0x6e,0x65,0x61,0x72,0x5f,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x00,
0x74,0x65,0x78,0x74,0x00,0x4c,0x69,0x6e,0x65,0x61,0x72,0x20,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,
0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x72,0x61,0x64,0x69,
0x61,0x6c,0x5f,0x67,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x61,0x64,
0x69,0x61,0x6c,0x20,0x47,0x72,0x61,0x64,0x69,0x65,0x6e,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,
0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,
0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x74,0x72,0x6f,0x6b,0x65,0x5f,0x67,0x72,0x61,0x64,0x69,
0x65,0x6e,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x74,0x72,0x6f,0x6b,0x65,0x20,0x47,0x72,0x61,0x64,
0x69,0x65,0x6e,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,
0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,
0x6f,0x76,0x65,0x72,0x6c,0x61,0x79,0x00,0x74,0x65,0x78,0x74,0x00,0x4f,0x76,0x65,0x72,0x6c,0x61,0x79,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,
0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x6d,0x6c,0x65,0x64,
0x69,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x75,0x6c,0x74,0x69,0x4c,0x69,0x6e,0x65,0x20,0x45,0x64,
0x69,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,
0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x68,0x73,
0x63,0x72,0x6f,0x6c,0x6c,0x5f,0x6c,0x61,0x62,0x65,0x6c,0x00,0x74,0x65,0x78,0x74,0x00,0x48,0x53,0x63,
0x72,0x6f,0x6c,0x6c,0x20,0x4c,0x61,0x62,0x65,0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x65,0x6e,0x3a,0x6d,0x65,0x6e,0x75,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6f,0x6e,0x74,
0x65,0x78,0x74,0x4d,0x65,0x6e,0x75,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,
0x65,0x6c,0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,
0x3d,0x30,0x2c,0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,
0x29,0x00,0x63,0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,
0x66,0x61,0x75,0x6c,0x74,0x28,0x63,0x3d,0x32,0x2c,0x72,0x3d,0x38,0x2c,0x6d,0x3d,0x35,0x2c,0x73,0x3d,
0x35,0x29,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,
0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x72,0x61,
0x67,0x67,0x61,0x62,0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x72,0x61,0x67,0x67,0x61,0x62,0x6c,
0x65,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,
0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x72,0x69,0x63,
0x68,0x5f,0x74,0x65,0x78,0x74,0x5f,0x76,0x69,0x65,0x77,0x00,0x74,0x65,0x78,0x74,0x00,0x52,0x69,0x63,
0x68,0x54,0x65,0x78,0x74,0x56,0x69,0x65,0x77,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,
0x6f,0x70,0x65,0x6e,0x3a,0x62,0x69,0x64,0x69,0x00,0x74,0x65,0x78,0x74,0x00,0x42,0x69,0x64,0x69,0x72,
0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x65,0x6e,0x3a,0x67,0x72,0x69,0x64,0x00,0x74,0x65,0x78,0x74,0x00,0x47,0x72,0x69,0x64,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,
0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x63,0x6f,0x6c,0x6f,0x72,0x5f,
0x74,0x69,0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x54,0x69,0x6c,0x65,
0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,
0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x66,0x6c,0x6f,0x61,
0x74,0x69,0x6e,0x67,0x5f,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x74,0x65,0x78,0x74,0x00,0x46,
0x6c,0x6f,0x61,0x74,0x69,0x6e,0x67,0x20,0x4b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,
0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x6c,0x69,0x64,0x65,0x72,0x00,0x74,
0x65,0x78,0x74,0x00,0x53,0x6c,0x69,0x64,0x65,0x72,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x65,0x6e,0x3a,0x63,0x6c,0x6f,0x73,0x65,0x5f,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x74,
0x65,0x78,0x74,0x00,0x63,0x6c,0x6f,0x73,0x65,0x5f,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00,0x62,
0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,
0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x69,0x61,0x6c,0x6f,0x67,0x5f,0x68,
0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x69,0x61,0x6c,0x6f,0x67,
0x20,0x48,0x69,0x67,0x68,0x6c,0x69,0x67,0x68,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,
0x00,0x6f,0x70,0x65,0x6e,0x3a,0x73,0x76,0x67,0x5f,0x74,0x65,0x73,0x74,0x00,0x74,0x65,0x78,0x74,0x00,
0x53,0x56,0x47,0x20,0x54,0x65,0x73,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,
0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,
0x70,0x65,0x6e,0x3a,0x73,0x70,0x69,0x6e,0x5f,0x62,0x6f,0x78,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x70,
0x69,0x6e,0x20,0x62,0x6f,0x78,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,
0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,
0x6e,0x3a,0x6d,0x6f,0x64,0x65,0x6c,0x65,0x73,0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x6f,0x64,0x65,
0x6c,0x65,0x73,0x73,0x00,0x00,0x00,0x00,0x76,0x69,0x65,0x77,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x73,0x65,0x6c,0x66,
0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,0x2c,
0x79,0x3d,0x30,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x31,0x30,0x30,0x25,0x29,0x00,0x63,
0x68,0x69,0x6c,0x64,0x72,0x65,0x6e,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,
0x6c,0x74,0x28,0x63,0x3d,0x31,0x2c,0x72,0x3d,0x38,0x2c,0x6d,0x3d,0x35,0x2c,0x73,0x3d,0x35,0x29,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,
0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x64,0x72,0x6f,0x70,0x5f,0x66,
0x69,0x6c,0x65,0x00,0x74,0x65,0x78,0x74,0x00,0x44,0x72,0x6f,0x70,0x20,0x46,0x69,0x6c,0x65,0x00,0x00,
0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,
0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x6d,0x65,0x6d,0x74,0x65,0x73,
0x74,0x00,0x74,0x65,0x78,0x74,0x00,0x4d,0x65,0x6d,0x54,0x65,0x73,0x74,0x00,0x00,0x00,0x62,0x75,0x74,
0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,
0x6e,0x61,0x6d,0x65,0x00,0x6f,0x70,0x65,0x6e,0x3a,0x63,0x61,0x6c,0x69,0x62,0x72,0x61,0x74,0x69,0x6f,
0x6e,0x5f,0x77,0x69,0x6e,0x00,0x74,0x65,0x78,0x74,0x00,0x43,0x61,0x6c,0x69,0x62,0x72,0x61,0x74,0x69,
0x6f,0x6e,0x00,0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,
0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x68,0x6f,0x77,0x5f,0x66,0x70,
0x73,0x00,0x74,0x65,0x78,0x74,0x00,0x53,0x68,0x6f,0x77,0x20,0x46,0x50,0x53,0x00,0x00,0x00,0x62,0x75,
0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,
0x00,0x6e,0x61,0x6d,0x65,0x00,0x73,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x00,0x74,0x65,0x78,0x74,0x00,
0x54,0x61,0x6b,0x65,0x20,0x53,0x6e,0x61,0x70,0x73,0x68,0x6f,0x74,0x00,0x00,0x00,0x62,0x75,0x74,0x74,
0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,0x74,0x72,0x75,0x65,0x00,0x6e,
0x61,0x6d,0x65,0x00,0x72,0x65,0x6c,0x6f,0x61,0x64,0x5f,0x74,0x68,0x65,0x6d,0x65,0x00,0x74,0x65,0x78,
0x74,0x00,0x54,0x65,0x73,0x74,0x20,0x43,0x68,0x61,0x6e,0x67,0x65,0x20,0x54,0x68,0x65,0x6d,0x65,0x00,
0x00,0x00,0x62,0x75,0x74,0x74,0x6f,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x6f,0x63,0x75,0x73,0x61,0x62,0x6c,0x65,0x00,
0x74,0x72,0x75,0x65,0x00,0x6e,0x61,0x6d,0x65,0x00,0x65,0x78,0x69,0x74,0x00,0x74,0x65,0x78,0x74,0x00,
0x45,0x78,0x69,0x74,0x00,0x00,0x00,0x00,0x00,0x73,0x6c,0x69,0x64,0x65,0x5f,0x69,0x6e,0x64,0x69,0x63,
0x61,0x74,0x6f,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x73,0x65,0x6c,
0x66,0x5f,0x6c,0x61,0x79,0x6f,0x75,0x74,0x00,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x28,0x78,0x3d,0x30,
0x2c,0x79,0x3d,0x62,0x2c,0x77,0x3d,0x31,0x30,0x30,0x25,0x2c,0x68,0x3d,0x32,0x30,0x29,0x00,0x74,0x72,
0x61,0x6e,0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0x74,0x72,0x75,0x65,0x00,0x73,0x74,0x79,0x6c,0x65,0x00,
0x62,0x6c,0x75,0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};/*6632*/

Binary file not shown.

Binary file not shown.

26
run_ui_test.sh Executable file
View File

@ -0,0 +1,26 @@
./bin/ui_test tests/ui_test_data/demouiold/screen_saver.ini
./bin/ui_test tests/ui_test_data/demouiold/fps.ini
./bin/ui_test tests/ui_test_data/demouiold/main_snapshot.ini
./bin/ui_test tests/ui_test_data/demouiold/main_source.ini
./bin/ui_test tests/ui_test_data/demouiold/max_fps.ini
./bin/ui_test tests/ui_test_data/demouiold/overlay.ini
./bin/ui_test tests/ui_test_data/demouiold/exec_fscript.ini
./bin/ui_test tests/ui_test_data/demouiold/create_widget.ini
./bin/ui_test tests/ui_test_data/demouiold/create_window.ini
./bin/ui_test tests/ui_test_data/demouiold/send_key_events.ini
./bin/ui_test tests/ui_test_data/demouiold/send_pointer_events.ini
./bin/ui_test tests/ui_test_data/demouiold/get_loaded_assets_info.ini
./bin/ui_test tests/ui_test_data/demouiold/get_loaded_image_info.ini
./bin/ui_test tests/ui_test_data/demouiold/language.ini
./bin/ui_test tests/ui_test_data/demouiold/theme.ini
./bin/ui_test tests/ui_test_data/demouiold/basic.ini
./bin/ui_test tests/ui_test_data/demouiold/button.ini
./bin/ui_test tests/ui_test_data/demouiold/edit.ini
./bin/ui_test tests/ui_test_data/demouiold/keyboard.ini
./bin/ui_test tests/ui_test_data/demouiold/toast.ini
#./bin/ui_test tests/ui_test_data/demouiold/warn.ini
#./bin/ui_test tests/ui_test_data/demouiold/info.ini
#./bin/ui_test tests/ui_test_data/demouiold/confirm.ini

View File

@ -1181,7 +1181,23 @@ static widget_t* widget_lookup_child(widget_t* widget, const char* name) {
}
widget_t* widget_child(widget_t* widget, const char* path) {
return widget_lookup_child(widget, path);
return_value_if_fail(widget != NULL && path != NULL, NULL);
if (*path == '[' && path[strlen(path) - 1] == ']') {
int32_t index = tk_atoi(path + 1);
if (index < 0) {
index = widget_count_children(widget) - index;
}
if (index >= 0) {
return widget_get_child(widget, index);
} else {
log_debug("invalid index:%d\n", index);
return NULL;
}
} else {
return widget_lookup_child(widget, path);
}
}
widget_t* widget_get_focused_widget(widget_t* widget) {
@ -5290,6 +5306,10 @@ widget_t* widget_find_by_path(widget_t* widget, const char* path, bool_t recursi
return widget;
} else if (tk_str_eq(name, STR_PROP_WINDOW)) {
return widget_get_window(widget);
} else if (tk_str_eq(name, STR_PROP_TOP_WINDOW)) {
return window_manager_get_top_window(window_manager());
} else if (tk_str_eq(name, STR_PROP_MAIN_WINDOW)) {
return window_manager_get_top_main_window(window_manager());
} else if (tk_str_eq(name, STR_PROP_WINDOW_MANAGER)) {
return widget_get_window_manager(widget);
} else {
@ -5308,18 +5328,29 @@ widget_t* widget_find_by_path(widget_t* widget, const char* path, bool_t recursi
iter = widget;
} else if (tk_str_eq(name, STR_PROP_WINDOW)) {
iter = widget_get_window(widget);
} else if (tk_str_eq(name, STR_PROP_TOP_WINDOW)) {
iter = window_manager_get_top_window(window_manager());
} else if (tk_str_eq(name, STR_PROP_MAIN_WINDOW)) {
iter = window_manager_get_top_main_window(window_manager());
} else if (tk_str_eq(name, STR_PROP_WINDOW_MANAGER)) {
iter = widget_get_window_manager(widget);
} else {
widget_t* save = iter;
iter = widget_child(iter, name);
if (iter == NULL) {
iter = widget_lookup_by_type_child(save, name);
}
}
is_first = FALSE;
} else {
widget_t* save = iter;
iter = widget_child(iter, name);
if (iter == NULL) {
iter = widget_lookup_by_type_child(save, name);
}
}
}
tokenizer_deinit(t);
return iter;
}

View File

@ -20,6 +20,7 @@
*/
#include "tkc/fs.h"
#include "tkc/path.h"
#include "tkc/mem.h"
#include "tkc/crc.h"
#include "tkc/utils.h"
@ -67,14 +68,14 @@ ret_t remote_ui_login(remote_ui_t* ui, const char* username, const char* passwor
ubjson_writer_write_kv_str(writer, REMOTE_UI_KEY_PASSWORD, password);
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), MSG_REQ_LOGIN, MSG_DATA_TYPE_UBJSON, &(ui->client.wb));
return tk_client_request(&(ui->client), MSG_CODE_LOGIN, MSG_DATA_TYPE_UBJSON, &(ui->client.wb));
}
ret_t remote_ui_logout(remote_ui_t* ui) {
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
wbuffer_rewind(&(ui->client.wb));
return tk_client_request(&(ui->client), MSG_REQ_LOGOUT, MSG_DATA_TYPE_NONE, &(ui->client.wb));
return tk_client_request(&(ui->client), MSG_CODE_LOGOUT, MSG_DATA_TYPE_NONE, &(ui->client.wb));
}
ret_t remote_ui_get_dev_info(remote_ui_t* ui, remote_ui_dev_info_t* info) {
@ -86,7 +87,7 @@ ret_t remote_ui_get_dev_info(remote_ui_t* ui, remote_ui_dev_info_t* info) {
wb = &(ui->client.wb);
wbuffer_rewind(wb);
memset(info, 0x00, sizeof(*info));
ret = tk_client_request(&(ui->client), REMOTE_UI_REQ_GET_DEV_INFO, MSG_DATA_TYPE_NONE, wb);
ret = tk_client_request(&(ui->client), REMOTE_UI_GET_DEV_INFO, MSG_DATA_TYPE_NONE, wb);
if (ret == RET_OK) {
tk_object_t* obj = conf_ubjson_load_from_buff(wb->data, wb->cursor, FALSE);
if (obj != NULL) {
@ -127,7 +128,7 @@ ret_t remote_ui_reboot(remote_ui_t* ui, remote_ui_reboot_type_t reboot_type) {
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_int32(&(ui->client.wb), reboot_type);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_REBOOT, MSG_DATA_TYPE_NONE, &(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_REBOOT, MSG_DATA_TYPE_NONE, &(ui->client.wb));
}
ret_t remote_ui_download_file(remote_ui_t* ui, const char* remote_file, const char* local_file) {
@ -149,7 +150,8 @@ ret_t remote_ui_create_dir(remote_ui_t* ui, const char* remote_dir) {
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_string(&(ui->client.wb), remote_dir);
ret = tk_client_request(&(ui->client), REMOTE_UI_REQ_CREATE_DIR, MSG_DATA_TYPE_STRING, &(ui->client.wb));
ret = tk_client_request(&(ui->client), REMOTE_UI_CREATE_DIR, MSG_DATA_TYPE_STRING,
&(ui->client.wb));
return ret;
}
@ -161,7 +163,8 @@ ret_t remote_ui_remove_dir(remote_ui_t* ui, const char* remote_dir) {
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_string(&(ui->client.wb), remote_dir);
ret = tk_client_request(&(ui->client), REMOTE_UI_REQ_REMOVE_DIR, MSG_DATA_TYPE_STRING, &(ui->client.wb));
ret = tk_client_request(&(ui->client), REMOTE_UI_REMOVE_DIR, MSG_DATA_TYPE_STRING,
&(ui->client.wb));
return ret;
}
@ -173,21 +176,28 @@ ret_t remote_ui_remove_file(remote_ui_t* ui, const char* remote_file) {
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_string(&(ui->client.wb), remote_file);
ret = tk_client_request(&(ui->client), REMOTE_UI_REQ_REMOVE_FILE, MSG_DATA_TYPE_STRING, &(ui->client.wb));
ret = tk_client_request(&(ui->client), REMOTE_UI_REMOVE_FILE, MSG_DATA_TYPE_STRING,
&(ui->client.wb));
return ret;
}
ret_t remote_ui_take_screen_shot(remote_ui_t* ui, const char* file) {
return remote_ui_download_file(ui, REMOTE_UI_FILE_SCREEN_SHOT, file);
ret_t remote_ui_take_snapshot(remote_ui_t* ui, const char* target, const char* file) {
char remote_file[MAX_PATH + 1] = {0};
path_build(remote_file, sizeof(remote_file) - 1, REMOTE_UI_FILE_SNAPSHOT, target, NULL);
return remote_ui_download_file(ui, remote_file, file);
}
ret_t remote_ui_get_manifest(remote_ui_t* ui, const char* file) {
return remote_ui_download_file(ui, REMOTE_UI_FILE_MANIFEST, file);
}
ret_t remote_ui_get_xml_source(remote_ui_t* ui, const char* file) {
return remote_ui_download_file(ui, REMOTE_UI_FILE_XML_SOURCE, file);
ret_t remote_ui_get_xml_source(remote_ui_t* ui, const char* target, const char* file) {
char remote_file[MAX_PATH + 1] = {0};
path_build(remote_file, sizeof(remote_file) - 1, REMOTE_UI_FILE_XML_SOURCE, target, NULL);
return remote_ui_download_file(ui, remote_file, file);
}
ret_t remote_ui_on_event(remote_ui_t* ui, const char* target, uint32_t event, event_func_t func,
@ -214,7 +224,8 @@ ret_t remote_ui_on_event(remote_ui_t* ui, const char* target, uint32_t event, ev
ubjson_writer_write_kv_int(writer, REMOTE_UI_KEY_EVENT, event);
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_ON_EVENT, MSG_DATA_TYPE_UBJSON, &(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_ON_EVENT, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
ret_t remote_ui_off_event(remote_ui_t* ui, const char* target, uint32_t event) {
@ -234,7 +245,26 @@ ret_t remote_ui_off_event(remote_ui_t* ui, const char* target, uint32_t event) {
ubjson_writer_write_kv_int(writer, REMOTE_UI_KEY_EVENT, event);
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_OFF_EVENT, MSG_DATA_TYPE_UBJSON, &(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_OFF_EVENT, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
ret_t remote_ui_click(remote_ui_t* ui, const char* target) {
pointer_event_t e;
pointer_event_init(&e, EVT_CLICK, NULL, 0, 0);
return remote_ui_send_event(ui, target, (event_t*)&e);
}
ret_t remote_ui_key(remote_ui_t* ui, const char* target, int32_t key_code) {
key_event_t e;
key_event_init(&e, EVT_KEY_DOWN, NULL, key_code);
if (remote_ui_send_event(ui, target, (event_t*)&e) == RET_OK) {
key_event_init(&e, EVT_KEY_UP, NULL, key_code);
return remote_ui_send_event(ui, target, (event_t*)&e);
} else {
return RET_FAIL;
}
}
ret_t remote_ui_send_event(remote_ui_t* ui, const char* target, event_t* event) {
@ -270,7 +300,8 @@ ret_t remote_ui_send_event(remote_ui_t* ui, const char* target, event_t* event)
}
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_SEND_EVENT, MSG_DATA_TYPE_UBJSON, &(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_SEND_EVENT, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
ret_t remote_ui_open_window(remote_ui_t* ui, const char* name, const char* xml,
@ -290,7 +321,7 @@ ret_t remote_ui_open_window(remote_ui_t* ui, const char* name, const char* xml,
}
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_OPEN_WINDOW, MSG_DATA_TYPE_UBJSON,
return tk_client_request(&(ui->client), REMOTE_UI_OPEN_WINDOW, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
@ -308,39 +339,39 @@ static ret_t remote_ui_show_dialog(remote_ui_t* ui, const char* type, const char
ubjson_writer_write_kv_int(writer, REMOTE_UI_KEY_DURATION, duration);
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_OPEN_DIALOG, MSG_DATA_TYPE_UBJSON,
return tk_client_request(&(ui->client), REMOTE_UI_OPEN_DIALOG, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
ret_t remote_ui_show_confirm(remote_ui_t* ui, const char* title, const char* content) {
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(title != NULL, RET_BAD_PARAMS);
return_value_if_fail(content != NULL, RET_BAD_PARAMS);
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(title != NULL, RET_BAD_PARAMS);
return_value_if_fail(content != NULL, RET_BAD_PARAMS);
return remote_ui_show_dialog(ui, REMOTE_UI_DIALOG_TYPE_CONFIRM, title, content, 0);
return remote_ui_show_dialog(ui, REMOTE_UI_DIALOG_TYPE_CONFIRM, title, content, 0);
}
ret_t remote_ui_show_warn(remote_ui_t* ui, const char* title, const char* content) {
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(title != NULL, RET_BAD_PARAMS);
return_value_if_fail(content != NULL, RET_BAD_PARAMS);
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(title != NULL, RET_BAD_PARAMS);
return_value_if_fail(content != NULL, RET_BAD_PARAMS);
return remote_ui_show_dialog(ui, REMOTE_UI_DIALOG_TYPE_WARN, title, content, 0);
return remote_ui_show_dialog(ui, REMOTE_UI_DIALOG_TYPE_WARN, title, content, 0);
}
ret_t remote_ui_show_info(remote_ui_t* ui, const char* title, const char* content) {
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(title != NULL, RET_BAD_PARAMS);
return_value_if_fail(content != NULL, RET_BAD_PARAMS);
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(title != NULL, RET_BAD_PARAMS);
return_value_if_fail(content != NULL, RET_BAD_PARAMS);
return remote_ui_show_dialog(ui, NULL, title, content, 0);
return remote_ui_show_dialog(ui, NULL, title, content, 0);
}
ret_t remote_ui_show_toast(remote_ui_t* ui, uint32_t duration, const char* content) {
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(content != NULL, RET_BAD_PARAMS);
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(content != NULL, RET_BAD_PARAMS);
return remote_ui_show_dialog(ui, REMOTE_UI_DIALOG_TYPE_TOAST, "", content, duration);
return remote_ui_show_dialog(ui, REMOTE_UI_DIALOG_TYPE_TOAST, "", content, duration);
}
ret_t remote_ui_close_window(remote_ui_t* ui, const char* name) {
@ -349,7 +380,7 @@ ret_t remote_ui_close_window(remote_ui_t* ui, const char* name) {
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_string(&(ui->client.wb), name);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_CLOSE_WINDOW, MSG_DATA_TYPE_STRING,
return tk_client_request(&(ui->client), REMOTE_UI_CLOSE_WINDOW, MSG_DATA_TYPE_STRING,
&(ui->client.wb));
}
@ -357,14 +388,16 @@ ret_t remote_ui_back_to_prev(remote_ui_t* ui) {
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
wbuffer_rewind(&(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_REQ_BACK_TO_PREV, MSG_DATA_TYPE_NONE, &(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_BACK_TO_PREV, MSG_DATA_TYPE_NONE,
&(ui->client.wb));
}
ret_t remote_ui_back_to_home(remote_ui_t* ui) {
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
wbuffer_rewind(&(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_REQ_BACK_TO_HOME, MSG_DATA_TYPE_NONE, &(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_BACK_TO_HOME, MSG_DATA_TYPE_NONE,
&(ui->client.wb));
}
ret_t remote_ui_set_prop(remote_ui_t* ui, const char* target, const char* name,
@ -382,7 +415,8 @@ ret_t remote_ui_set_prop(remote_ui_t* ui, const char* target, const char* name,
ubjson_writer_write_kv_value(writer, REMOTE_UI_KEY_VALUE, value);
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_SET_PROP, MSG_DATA_TYPE_UBJSON, &(ui->client.wb));
return tk_client_request(&(ui->client), REMOTE_UI_SET_PROP, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
ret_t remote_ui_get_prop(remote_ui_t* ui, const char* target, const char* name, value_t* value) {
@ -400,7 +434,8 @@ ret_t remote_ui_get_prop(remote_ui_t* ui, const char* target, const char* name,
ubjson_writer_write_kv_value(writer, REMOTE_UI_KEY_VALUE, value);
ubjson_writer_write_object_end(writer);
ret = tk_client_request(&(ui->client), REMOTE_UI_REQ_GET_PROP, MSG_DATA_TYPE_UBJSON, &(ui->client.wb));
ret =
tk_client_request(&(ui->client), REMOTE_UI_GET_PROP, MSG_DATA_TYPE_UBJSON, &(ui->client.wb));
return_value_if_fail(ret == RET_OK, ret);
value_dup_str_with_len(value, (char*)(ui->client.wb.data), ui->client.wb.cursor);
@ -409,22 +444,21 @@ ret_t remote_ui_get_prop(remote_ui_t* ui, const char* target, const char* name,
}
ret_t remote_ui_set_theme(remote_ui_t* ui, const char* theme) {
value_t v;
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(theme != NULL, RET_BAD_PARAMS);
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_string(&(ui->client.wb), theme);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_SET_THEME, MSG_DATA_TYPE_STRING, &(ui->client.wb));
return remote_ui_set_prop(ui, REMOTE_UI_TARGET_GLOBAL, REMOTE_UI_PROP_THEME,
value_set_str(&v, theme));
}
ret_t remote_ui_set_language(remote_ui_t* ui, const char* language) {
value_t v;
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(language != NULL, RET_BAD_PARAMS);
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_string(&(ui->client.wb), language);
return tk_client_request(&(ui->client), REMOTE_UI_REQ_SET_LANGUAGE, MSG_DATA_TYPE_STRING,
&(ui->client.wb));
return remote_ui_set_prop(ui, REMOTE_UI_TARGET_GLOBAL, REMOTE_UI_PROP_LANGUAGE,
value_set_str(&v, language));
}
ret_t remote_ui_exec_fscript(remote_ui_t* ui, const char* script, str_t* str) {
@ -434,8 +468,8 @@ ret_t remote_ui_exec_fscript(remote_ui_t* ui, const char* script, str_t* str) {
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_string(&(ui->client.wb), script);
ret =
tk_client_request(&(ui->client), REMOTE_UI_REQ_EXEC_FSCRIPT, MSG_DATA_TYPE_STRING, &(ui->client.wb));
ret = tk_client_request(&(ui->client), REMOTE_UI_EXEC_FSCRIPT, MSG_DATA_TYPE_STRING,
&(ui->client.wb));
if (ret == RET_OK) {
str_set_with_len(str, (char*)(ui->client.wb.data), ui->client.wb.cursor);
}
@ -443,6 +477,72 @@ ret_t remote_ui_exec_fscript(remote_ui_t* ui, const char* script, str_t* str) {
return ret;
}
ret_t remote_ui_move_widget(remote_ui_t* ui, const char* target, int32_t x, int32_t y) {
ubjson_writer_t* writer = NULL;
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(target != NULL, RET_BAD_PARAMS);
writer = remote_ui_client_get_writer(ui);
ubjson_writer_write_object_begin(writer);
ubjson_writer_write_kv_str(writer, REMOTE_UI_KEY_TARGET, target);
ubjson_writer_write_kv_int(writer, REMOTE_UI_KEY_X, x);
ubjson_writer_write_kv_int(writer, REMOTE_UI_KEY_Y, y);
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_MOVE_WIDGET, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
ret_t remote_ui_resize_widget(remote_ui_t* ui, const char* target, uint32_t w, uint32_t h) {
ubjson_writer_t* writer = NULL;
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(target != NULL, RET_BAD_PARAMS);
writer = remote_ui_client_get_writer(ui);
ubjson_writer_write_object_begin(writer);
ubjson_writer_write_kv_str(writer, REMOTE_UI_KEY_TARGET, target);
ubjson_writer_write_kv_int(writer, REMOTE_UI_KEY_W, w);
ubjson_writer_write_kv_int(writer, REMOTE_UI_KEY_H, h);
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_RESIZE_WIDGET, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
ret_t remote_ui_destroy_widget(remote_ui_t* ui, const char* target) {
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(target != NULL, RET_BAD_PARAMS);
wbuffer_rewind(&(ui->client.wb));
wbuffer_write_string(&(ui->client.wb), target);
return tk_client_request(&(ui->client), REMOTE_UI_DESTROY_WIDGET, MSG_DATA_TYPE_STRING,
&(ui->client.wb));
}
ret_t remote_ui_create_widget(remote_ui_t* ui, const char* target, const char* xml) {
ubjson_writer_t* writer = NULL;
return_value_if_fail(ui != NULL && ui->client.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(target != NULL, RET_BAD_PARAMS);
return_value_if_fail(xml != NULL, RET_BAD_PARAMS);
writer = remote_ui_client_get_writer(ui);
ubjson_writer_write_object_begin(writer);
ubjson_writer_write_kv_str(writer, REMOTE_UI_KEY_TARGET, target);
ubjson_writer_write_kv_str(writer, REMOTE_UI_KEY_XML, xml);
ubjson_writer_write_object_end(writer);
return tk_client_request(&(ui->client), REMOTE_UI_CREATE_WIDGET, MSG_DATA_TYPE_UBJSON,
&(ui->client.wb));
}
ret_t remote_ui_get_loaded_images_info(remote_ui_t* ui, const char* file) {
return remote_ui_download_file(ui, REMOTE_UI_FILE_LOADED_IMAGES_INFO, file);
}
ret_t remote_ui_get_loaded_assets_info(remote_ui_t* ui, const char* file) {
return remote_ui_download_file(ui, REMOTE_UI_FILE_LOADED_ASSETS_INFO, file);
}
ret_t remote_ui_dispatch(remote_ui_t* ui) {
/*TODO*/
return RET_OK;

View File

@ -153,22 +153,23 @@ ret_t remote_ui_remove_dir(remote_ui_t* ui, const char* remote_dir);
ret_t remote_ui_remove_file(remote_ui_t* ui, const char* remote_file);
/**
* @method remote_ui_take_screen_shot
* @method remote_ui_take_snapshot
*
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} file
* @param {const char*} target
* @param {const char*} file
*
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_take_screen_shot(remote_ui_t* ui, const char* file);
ret_t remote_ui_take_snapshot(remote_ui_t* ui, const char* target, const char* file);
/**
* @method remote_ui_get_manifest
* manifest
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} file
* @param {const char*} file
*
* @return {ret_t} RET_OK表示成功
*/
@ -179,11 +180,12 @@ ret_t remote_ui_get_manifest(remote_ui_t* ui, const char* file);
* XML源码
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} file
* @param {const char*} target
* @param {const char*} file
*
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_get_xml_source(remote_ui_t* ui, const char* file);
ret_t remote_ui_get_xml_source(remote_ui_t* ui, const char* target, const char* file);
/**
* @method remote_ui_on_event
@ -224,6 +226,29 @@ ret_t remote_ui_off_event(remote_ui_t* ui, const char* target, uint32_t event);
*/
ret_t remote_ui_send_event(remote_ui_t* ui, const char* target, event_t* event);
/**
* @method remote_ui_click
*
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} target
*
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_click(remote_ui_t* ui, const char* target);
/**
* @method remote_ui_key
*
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} target
* @param {int32_t} key_code
*
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_key(remote_ui_t* ui, const char* target, int32_t key_code);
/**
* @method remote_ui_open_window
*
@ -366,9 +391,68 @@ ret_t remote_ui_set_language(remote_ui_t* ui, const char* language);
* @param {const char*} script
* @param {str_t*} result
* @return {ret_t} RET_OK表示成功
*/
*/
ret_t remote_ui_exec_fscript(remote_ui_t* ui, const char* script, str_t* result);
/**
* @method remote_ui_move_widget
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} target
* @param {int32_t} x x坐标
* @param {int32_t} y y坐标
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_move_widget(remote_ui_t* ui, const char* target, int32_t x, int32_t y);
/**
* @method remote_ui_resize_widget
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} target
* @param {uint32_t} w
* @param {uint32_t} h
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_resize_widget(remote_ui_t* ui, const char* target, uint32_t w, uint32_t h);
/**
* @method remote_ui_destroy_widget
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} target
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_destroy_widget(remote_ui_t* ui, const char* target);
/**
* @method remote_ui_create_widget
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} target
* @param {const char*} xml XML
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_create_widget(remote_ui_t* ui, const char* target, const char* xml);
/**
* @method remote_ui_get_loaded_images_info
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} file
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_get_loaded_images_info(remote_ui_t* ui, const char* file);
/**
* @method remote_ui_get_loaded_assets_info
*
* @param {remote_ui_t*} ui remote ui客户端对象
* @param {const char*} file
* @return {ret_t} RET_OK表示成功
*/
ret_t remote_ui_get_loaded_assets_info(remote_ui_t* ui, const char* file);
/**
* @method remote_ui_dispatch
*

View File

@ -31,6 +31,7 @@
#include "base/ui_loader.h"
#include "base/dialog.h"
#include "conf_io/conf_ubjson.h"
#include "conf_io/conf_json.h"
#include "tkc/object_default.h"
#include "ui_loader/ui_serializer.h"
#include "remote_ui/shared/remote_ui_types_def.h"
@ -41,6 +42,7 @@
static ret_t remote_ui_service_dispatch(remote_ui_service_t* ui);
static ret_t remote_ui_service_destroy(remote_ui_service_t* ui);
static ret_t remote_ui_service_set_language(remote_ui_service_t* ui, const char* language);
tk_service_t* remote_ui_service_create(tk_iostream_t* io, void* args) {
remote_ui_service_t* ui = NULL;
@ -144,13 +146,35 @@ static ret_t remote_ui_service_get_manifest(remote_ui_service_t* ui, str_t* resu
return ret;
}
static ret_t remote_ui_service_take_screen_shot(remote_ui_service_t* ui, const char* filename) {
static widget_t* remote_ui_service_get_app_window(widget_t* widget) {
return_value_if_fail(widget != NULL, NULL);
WIDGET_FOR_EACH_CHILD_BEGIN_R(widget, iter, i)
if (iter->visible && !widget_is_keyboard(iter) && !widget_is_always_on_top(iter)) {
return iter;
}
WIDGET_FOR_EACH_CHILD_END();
return NULL;
}
static widget_t* remote_ui_service_get_target_widget(remote_ui_service_t* ui, const char* target) {
widget_t* win = remote_ui_service_get_app_window(window_manager());
widget_t* widget = TK_STR_IS_EMPTY(target) ? win : widget_find_by_path(win, target, TRUE);
return widget;
}
static ret_t remote_ui_service_take_snapshot(remote_ui_service_t* ui, const char* target, const char* filename) {
ret_t ret = RET_OK;
bitmap_t* image = NULL;
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
return_value_if_fail(ui != NULL && ui->service.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(filename != NULL, RET_BAD_PARAMS);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
image = widget_take_snapshot(window_manager());
image = widget_take_snapshot(widget);
if (image != NULL) {
ret = bitmap_save_png(image, filename);
} else {
@ -167,15 +191,37 @@ static ret_t remote_ui_service_prepare_manifest(remote_ui_service_t* ui, const c
return file_write(filename, "TODO", 5);
}
static ret_t remote_ui_service_prepare_xml_source(remote_ui_service_t* ui, const char* filename) {
static ret_t remote_ui_service_prepare_loaded_images_info(remote_ui_service_t* ui, const char* target, const char* filename) {
str_t result;
str_init(&result, 10000);
image_manager_dump(image_manager(), &result);
file_write(filename, result.str, result.size);
str_reset(&result);
return RET_OK;
}
static ret_t remote_ui_service_prepare_loaded_assets_info(remote_ui_service_t* ui, const char* target, const char* filename) {
str_t result;
str_init(&result, 10000);
assets_manager_dump(assets_manager(), &result);
file_write(filename, result.str, result.size);
str_reset(&result);
return RET_OK;
}
static ret_t remote_ui_service_prepare_xml_source(remote_ui_service_t* ui, const char* target, const char* filename) {
str_t str;
ret_t ret = RET_OK;
widget_t* win = window_manager_get_top_window(window_manager());
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
return_value_if_fail(ui != NULL && ui->service.io != NULL, RET_BAD_PARAMS);
return_value_if_fail(filename != NULL, RET_BAD_PARAMS);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
str_init(&str, 10000);
widget_to_xml(win, &str);
widget_to_xml(widget, &str);
ret = file_write(filename, str.str, str.size);
str_reset(&str);
@ -191,8 +237,7 @@ static ret_t remote_ui_service_on_event_func(void* ctx, event_t* e) {
static ret_t remote_ui_service_on_event(remote_ui_service_t* ui, const char* target,
uint32_t event) {
widget_t* win = window_manager_get_top_window(window_manager());
widget_t* widget = widget_find_by_path(win, target, TRUE);
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
widget_on(widget, event, remote_ui_service_on_event_func, ui);
@ -202,8 +247,7 @@ static ret_t remote_ui_service_on_event(remote_ui_service_t* ui, const char* tar
static ret_t remote_ui_service_off_event(remote_ui_service_t* ui, const char* target,
uint32_t event) {
widget_t* win = window_manager_get_top_window(window_manager());
widget_t* widget = widget_find_by_path(win, target, TRUE);
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
widget_off_by_func(widget, event, remote_ui_service_on_event_func, ui);
@ -213,17 +257,17 @@ static ret_t remote_ui_service_off_event(remote_ui_service_t* ui, const char* ta
static ret_t remote_ui_service_send_event(remote_ui_service_t* ui, const char* target,
event_t* event) {
widget_t* win = window_manager_get_top_window(window_manager());
widget_t* widget = widget_find_by_path(win, target, TRUE);
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
event->target = widget;
if (!widget_is_window_manager(widget) && !widget_is_window(widget)) {
return widget_dispatch_async(widget, event);
}
switch (event->type) {
case EVT_CLICK: {
event->type = EVT_POINTER_DOWN;
widget_on_pointer_down(widget, pointer_event_cast(event));
event->type = EVT_POINTER_UP;
return widget_on_pointer_up(widget, pointer_event_cast(event));
return widget_dispatch_async(widget, event);
}
case EVT_POINTER_DOWN: {
return widget_on_pointer_down(widget, pointer_event_cast(event));
@ -264,6 +308,35 @@ static ret_t remote_ui_service_open_dialog(remote_ui_service_t* ui, const char*
return RET_OK;
}
static ret_t widget_init_with_conf(widget_t* win, const char* widget_name, conf_node_t* node) {
char buff[64] = {0};
conf_node_t* iter = conf_node_get_first_child(node);
widget_t* widget = widget_find_by_path(win, widget_name, TRUE);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
while (iter != NULL) {
value_t v;
const char* name = conf_node_get_name(iter);
if (conf_node_get_value(iter, &v) == RET_OK) {
log_debug("%s.%s=%s\n", widget_name, name, value_str_ex(&v, buff, sizeof(buff)));
widget_set_prop(widget, name, &v);
}
iter = iter->next;
}
return RET_OK;
}
static ret_t window_init_with_conf(widget_t* widget, conf_doc_t* doc) {
conf_node_t* iter = conf_node_get_first_child(doc->root);
while (iter != NULL) {
const char* name = conf_node_get_name(iter);
widget_init_with_conf(widget, name, iter);
iter = iter->next;
}
return RET_OK;
}
static ret_t remote_ui_service_open_window(remote_ui_service_t* ui, const char* name,
const char* xml, const char* init_json) {
widget_t* win = NULL;
@ -276,7 +349,11 @@ static ret_t remote_ui_service_open_window(remote_ui_service_t* ui, const char*
return_value_if_fail(win != NULL, RET_BAD_PARAMS);
if (init_json != NULL) {
/*TODO*/
conf_doc_t* doc = conf_doc_load_json(init_json, strlen(init_json));
if (doc != NULL) {
window_init_with_conf(win, doc);
conf_doc_destroy(doc);
}
}
return RET_OK;
@ -303,31 +380,61 @@ static ret_t remote_ui_service_back_to_home(remote_ui_service_t* ui) {
static ret_t remote_ui_service_set_prop(remote_ui_service_t* ui, const char* target,
const char* name, const value_t* value) {
widget_t* win = window_manager_get_top_window(window_manager());
widget_t* widget = widget_find_by_path(win, target, TRUE);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
if (tk_str_eq(target, REMOTE_UI_TARGET_GLOBAL)) {
if (tk_str_eq(name, REMOTE_UI_PROP_THEME)) {
return widget_set_theme(window_manager(), value_str(value));
} else if (tk_str_eq(name, REMOTE_UI_PROP_LANGUAGE)) {
return remote_ui_service_set_language(ui, value_str(value));
} else {
return RET_NOT_FOUND;
}
} else {
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
return widget_set_prop(widget, name, value);
return widget_set_prop(widget, name, value);
}
}
static ret_t remote_ui_service_get_prop(remote_ui_service_t* ui, const char* target,
const char* name, value_t* value) {
widget_t* win = window_manager_get_top_window(window_manager());
widget_t* widget = widget_find_by_path(win, target, TRUE);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
char buff[128] = {0};
if (tk_str_eq(target, REMOTE_UI_TARGET_GLOBAL)) {
if (tk_str_eq(name, REMOTE_UI_PROP_THEME)) {
value_set_str(value, widget_get_theme_name(window_manager()));
return RET_OK;
} else if (tk_str_eq(name, REMOTE_UI_PROP_LANGUAGE)) {
locale_info_t* info = widget_get_locale_info(window_manager());
tk_snprintf(buff, sizeof(buff)-1, "%s_%s", info->language, info->country);
value_dup_str(value, buff);
return RET_OK;
} else {
return RET_NOT_FOUND;
}
} else {
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
return_value_if_fail(widget != NULL, RET_BAD_PARAMS);
return widget_get_prop(widget, name, value);
}
static ret_t remote_ui_service_set_theme(remote_ui_service_t* ui, const char* theme) {
return widget_set_theme(window_manager(), theme);
return widget_get_prop(widget, name, value);
}
}
static ret_t remote_ui_service_exec_script(remote_ui_service_t* ui, const char* script,
value_t* v) {
ret_t ret = RET_FAIL;
tk_object_t* obj = object_default_create();
ret_t ret = fscript_eval(obj, script, v);
TK_OBJECT_UNREF(obj);
if (obj != NULL) {
widget_t* wm = window_manager();
widget_t* win = remote_ui_service_get_app_window(wm);
tk_object_set_prop_pointer(obj, STR_PROP_SELF, win);
tk_object_set_prop_pointer(obj, STR_PROP_WINDOW, win);
tk_object_set_prop_pointer(obj, STR_PROP_WINDOW_MANAGER, wm);
ret = fscript_eval(obj, script, v);
TK_OBJECT_UNREF(obj);
}
return ret;
}
@ -370,7 +477,6 @@ static ret_t remote_ui_service_dispatch_impl(remote_ui_service_t* ui, tk_msg_hea
wbuffer_t* wb) {
value_t v;
char buff[1024] = {0};
ret_t ret = RET_FAIL;
tk_object_t* obj = NULL;
ubjson_writer_t* writer = NULL;
tk_msg_header_t resp;
@ -383,34 +489,32 @@ static ret_t remote_ui_service_dispatch_impl(remote_ui_service_t* ui, tk_msg_hea
obj = conf_ubjson_load_from_buff(wb->data, wb->cursor, FALSE);
}
resp.type = req->type;
switch (req->type) {
case MSG_REQ_LOGIN: {
case MSG_CODE_LOGIN: {
const char* username = tk_object_get_prop_str(obj, "username");
const char* password = tk_object_get_prop_str(obj, "password");
resp.resp_code = remote_ui_service_login(ui, username, password);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = MSG_RESP_LOGIN;
wbuffer_rewind(wb);
break;
}
case MSG_REQ_LOGOUT: {
case MSG_CODE_LOGOUT: {
resp.resp_code = remote_ui_service_logout(ui);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = MSG_RESP_LOGOUT;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_GET_DEV_INFO: {
case REMOTE_UI_GET_DEV_INFO: {
remote_ui_dev_info_t info;
memset(&info, 0x00, sizeof(info));
resp.resp_code = remote_ui_service_get_dev_info(ui, &info);
resp.data_type = MSG_DATA_TYPE_UBJSON;
resp.type = REMOTE_UI_RESP_GET_DEV_INFO;
writer = remote_ui_service_get_writer(ui);
ret = remote_ui_dev_info_write(writer, &info);
remote_ui_dev_info_write(writer, &info);
break;
}
case REMOTE_UI_REQ_REBOOT: {
case REMOTE_UI_REBOOT: {
rbuffer_t rb;
uint32_t reboot_type = REMOTE_UI_REBOOT_DEFAULT;
rbuffer_init(&rb, wb->data, wb->cursor);
@ -418,29 +522,38 @@ static ret_t remote_ui_service_dispatch_impl(remote_ui_service_t* ui, tk_msg_hea
rbuffer_read_uint32(&rb, &reboot_type);
resp.resp_code = remote_ui_service_reboot(ui, reboot_type);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_REBOOT;
wbuffer_rewind(wb);
break;
}
case MSG_REQ_UPLOAD_FILE_BEGIN: {
case MSG_CODE_UPLOAD_FILE_BEGIN: {
const char* filename = (const char*)(wb->data);
filename = path_prepend_app_root(local_file, filename);
resp.resp_code = tk_service_upload_file(&(ui->service), filename);
return RET_OK;
break;
}
case MSG_REQ_DOWNLOAD_FILE_BEGIN: {
case MSG_CODE_DOWNLOAD_FILE_BEGIN: {
const char* filename = (const char*)(wb->data);
if (tk_str_eq(filename, REMOTE_UI_FILE_SCREEN_SHOT)) {
filename = path_prepend_temp_path(local_file, filename);
resp.resp_code = remote_ui_service_take_screen_shot(ui, filename);
if (tk_str_start_with(filename, REMOTE_UI_FILE_SNAPSHOT)) {
const char* target = filename + strlen(REMOTE_UI_FILE_SNAPSHOT) + 1;
filename = path_prepend_temp_path(local_file, "shot.png");
resp.resp_code = remote_ui_service_take_snapshot(ui, target, filename);
} else if (tk_str_eq(filename, REMOTE_UI_FILE_MANIFEST)) {
filename = path_prepend_temp_path(local_file, filename);
filename = path_prepend_temp_path(local_file, "manifest.txt");
resp.resp_code = remote_ui_service_prepare_manifest(ui, filename);
} else if (tk_str_eq(filename, REMOTE_UI_FILE_XML_SOURCE)) {
filename = path_prepend_temp_path(local_file, filename);
resp.resp_code = remote_ui_service_prepare_xml_source(ui, filename);
} else if (tk_str_start_with(filename, REMOTE_UI_FILE_XML_SOURCE)) {
const char* target = filename + strlen(REMOTE_UI_FILE_XML_SOURCE) + 1;
filename = path_prepend_temp_path(local_file, "source.xml");
resp.resp_code = remote_ui_service_prepare_xml_source(ui, target, filename);
} else if (tk_str_start_with(filename, REMOTE_UI_FILE_LOADED_IMAGES_INFO)) {
const char* target = filename + strlen(REMOTE_UI_FILE_LOADED_IMAGES_INFO) + 1;
filename = path_prepend_temp_path(local_file, "loaded_images_info.txt");
resp.resp_code = remote_ui_service_prepare_loaded_images_info(ui, target, filename);
} else if (tk_str_start_with(filename, REMOTE_UI_FILE_LOADED_ASSETS_INFO)) {
const char* target = filename + strlen(REMOTE_UI_FILE_LOADED_ASSETS_INFO) + 1;
filename = path_prepend_temp_path(local_file, "loaded_images_info.txt");
resp.resp_code = remote_ui_service_prepare_loaded_assets_info(ui, target, filename);
} else {
filename = path_prepend_app_root(local_file, filename);
}
@ -448,46 +561,42 @@ static ret_t remote_ui_service_dispatch_impl(remote_ui_service_t* ui, tk_msg_hea
resp.resp_code = tk_service_download_file(&(ui->service), filename);
return RET_OK;
}
case REMOTE_UI_REQ_CREATE_DIR: {
case REMOTE_UI_CREATE_DIR: {
const char* filename = (const char*)(wb->data);
filename = path_prepend_app_root(local_file, filename);
resp.resp_code = remote_ui_service_create_dir(ui, filename);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_CREATE_DIR;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_REMOVE_DIR: {
case REMOTE_UI_REMOVE_DIR: {
const char* filename = (const char*)(wb->data);
filename = path_prepend_app_root(local_file, filename);
resp.resp_code = remote_ui_service_remove_dir(ui, filename);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_REMOVE_DIR;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_REMOVE_FILE: {
case REMOTE_UI_REMOVE_FILE: {
const char* filename = (const char*)(wb->data);
filename = path_prepend_app_root(local_file, filename);
resp.resp_code = remote_ui_service_remove_file(ui, filename);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_REMOVE_FILE;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_OPEN_WINDOW: {
case REMOTE_UI_OPEN_WINDOW: {
const char* name = tk_object_get_prop_str(obj, REMOTE_UI_KEY_NAME);
const char* xml = tk_object_get_prop_str(obj, REMOTE_UI_KEY_XML);
const char* init_json = tk_object_get_prop_str(obj, REMOTE_UI_KEY_INIT);
resp.resp_code = remote_ui_service_open_window(ui, name, xml, init_json);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_OPEN_WINDOW;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_OPEN_DIALOG: {
case REMOTE_UI_OPEN_DIALOG: {
const char* type = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TYPE);
const char* title = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TITLE);
const char* content = tk_object_get_prop_str(obj, REMOTE_UI_KEY_CONTENT);
@ -495,33 +604,29 @@ static ret_t remote_ui_service_dispatch_impl(remote_ui_service_t* ui, tk_msg_hea
resp.resp_code = remote_ui_service_open_dialog(ui, type, title, content, duration);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_OPEN_WINDOW;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_BACK_TO_PREV: {
case REMOTE_UI_BACK_TO_PREV: {
resp.resp_code = remote_ui_service_back_to_prev(ui);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_BACK_TO_PREV;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_BACK_TO_HOME: {
case REMOTE_UI_BACK_TO_HOME: {
resp.resp_code = remote_ui_service_back_to_home(ui);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_BACK_TO_HOME;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_CLOSE_WINDOW: {
case REMOTE_UI_CLOSE_WINDOW: {
const char* name = (const char*)(wb->data);
resp.resp_code = remote_ui_service_close_window(ui, name);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_CLOSE_WINDOW;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_SET_PROP: {
case REMOTE_UI_SET_PROP: {
value_t v;
const char* target = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TARGET);
const char* name = tk_object_get_prop_str(obj, REMOTE_UI_KEY_NAME);
@ -535,7 +640,7 @@ static ret_t remote_ui_service_dispatch_impl(remote_ui_service_t* ui, tk_msg_hea
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_GET_PROP: {
case REMOTE_UI_GET_PROP: {
const char* str = NULL;
const char* target = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TARGET);
const char* name = tk_object_get_prop_str(obj, REMOTE_UI_KEY_NAME);
@ -546,55 +651,37 @@ static ret_t remote_ui_service_dispatch_impl(remote_ui_service_t* ui, tk_msg_hea
str = value_str_ex(&v, buff, sizeof(buff));
wbuffer_rewind(wb);
wbuffer_write_string(wb, str);
value_reset(&v);
break;
}
case REMOTE_UI_REQ_SET_LANGUAGE: {
const char* language = (const char*)(wb->data);
resp.resp_code = remote_ui_service_set_language(ui, language);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_SET_LANGUAGE;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_SET_THEME: {
const char* theme = (const char*)(wb->data);
resp.resp_code = remote_ui_service_set_theme(ui, theme);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_SET_THEME;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_EXEC_FSCRIPT: {
case REMOTE_UI_EXEC_FSCRIPT: {
const char* script = (const char*)(wb->data);
value_set_int(&v, 0);
resp.resp_code = remote_ui_service_exec_script(ui, script, &v);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_EXEC_FSCRIPT;
wbuffer_rewind(wb);
wbuffer_write_string(wb, value_str_ex(&v, buff, sizeof(buff)));
break;
}
case REMOTE_UI_REQ_ON_EVENT: {
case REMOTE_UI_ON_EVENT: {
const char* target = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TARGET);
uint32_t event_type = tk_object_get_prop_int(obj, REMOTE_UI_KEY_EVENT, 0);
resp.resp_code = remote_ui_service_on_event(ui, target, event_type);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_ON_EVENT;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_OFF_EVENT: {
case REMOTE_UI_OFF_EVENT: {
const char* target = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TARGET);
uint32_t event_type = tk_object_get_prop_int(obj, REMOTE_UI_KEY_EVENT, 0);
resp.resp_code = remote_ui_service_off_event(ui, target, event_type);
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_OFF_EVENT;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_REQ_SEND_EVENT: {
case REMOTE_UI_SEND_EVENT: {
event_t* e = NULL;
const char* target = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TARGET);
uint32_t event_type = tk_object_get_prop_int(obj, REMOTE_UI_KEY_EVENT, 0);
@ -626,12 +713,70 @@ static ret_t remote_ui_service_dispatch_impl(remote_ui_service_t* ui, tk_msg_hea
resp.resp_code = RET_FAIL;
}
resp.data_type = MSG_DATA_TYPE_NONE;
resp.type = REMOTE_UI_RESP_SEND_EVENT;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_MOVE_WIDGET: {
const char* target = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TARGET);
int x = tk_object_get_prop_int(obj, REMOTE_UI_KEY_X, 0);
int y = tk_object_get_prop_int(obj, REMOTE_UI_KEY_Y, 0);
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
if (widget != NULL) {
resp.resp_code = widget_move(widget, x, y);
} else {
resp.resp_code = RET_NOT_FOUND;
}
resp.data_type = MSG_DATA_TYPE_NONE;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_RESIZE_WIDGET: {
const char* target = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TARGET);
int w = tk_object_get_prop_int(obj, REMOTE_UI_KEY_W, 0);
int h = tk_object_get_prop_int(obj, REMOTE_UI_KEY_H, 0);
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
if (widget != NULL) {
resp.resp_code = widget_resize(widget, w, h);
} else {
resp.resp_code = RET_NOT_FOUND;
}
resp.data_type = MSG_DATA_TYPE_NONE;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_DESTROY_WIDGET: {
const char* target = (const char*)(wb->data);
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
if (widget != NULL) {
resp.resp_code = widget_destroy(widget);
} else {
resp.resp_code = RET_NOT_FOUND;
}
resp.data_type = MSG_DATA_TYPE_NONE;
wbuffer_rewind(wb);
break;
}
case REMOTE_UI_CREATE_WIDGET: {
const char* target = tk_object_get_prop_str(obj, REMOTE_UI_KEY_TARGET);
const char* xml = tk_object_get_prop_str(obj, REMOTE_UI_KEY_XML);
widget_t* widget = remote_ui_service_get_target_widget(ui, target);
if (widget != NULL) {
widget_t* new_widget = ui_loader_load_widget_from_xml(widget, xml, strlen(xml));
if (new_widget != NULL) {
resp.resp_code = RET_OK;
} else {
resp.resp_code = RET_FAIL;
}
} else {
resp.resp_code = RET_NOT_FOUND;
}
resp.data_type = MSG_DATA_TYPE_NONE;
wbuffer_rewind(wb);
break;
}
default: {
ret = RET_NOT_IMPL;
resp.resp_code = RET_NOT_IMPL;
break;
}
}

View File

@ -34,196 +34,112 @@ BEGIN_C_DECLS
*/
typedef enum _remote_ui_msg_code_t {
/**
* @const REMOTE_UI_REQ_GET_DEV_INFO
* @const REMOTE_UI_GET_DEV_INFO
*
*/
REMOTE_UI_REQ_GET_DEV_INFO = MSG_USER_START,
REMOTE_UI_GET_DEV_INFO = MSG_USER_START,
/**
* @const REMOTE_UI_REQ_REBOOT
* @const REMOTE_UI_REBOOT
*
*/
REMOTE_UI_REQ_REBOOT,
REMOTE_UI_REBOOT,
/**
* @const REMOTE_UI_REQ_CREATE_DIR
* @const REMOTE_UI_CREATE_DIR
*
*/
REMOTE_UI_REQ_CREATE_DIR,
REMOTE_UI_CREATE_DIR,
/**
* @const REMOTE_UI_REQ_REMOVE_DIR
* @const REMOTE_UI_REMOVE_DIR
*
*/
REMOTE_UI_REQ_REMOVE_DIR,
REMOTE_UI_REMOVE_DIR,
/**
* @const REMOTE_UI_REQ_REMOVE_FILE
* @const REMOTE_UI_REMOVE_FILE
*
*/
REMOTE_UI_REQ_REMOVE_FILE,
REMOTE_UI_REMOVE_FILE,
/**
* @const REMOTE_UI_REQ_ON_EVENT
* @const REMOTE_UI_ON_EVENT
*
*/
REMOTE_UI_REQ_ON_EVENT,
REMOTE_UI_ON_EVENT,
/**
* @const REMOTE_UI_REQ_OFF_EVENT
* @const REMOTE_UI_OFF_EVENT
*
*/
REMOTE_UI_REQ_OFF_EVENT,
REMOTE_UI_OFF_EVENT,
/**
* @const REMOTE_UI_REQ_SEND_EVENT
* @const REMOTE_UI_SEND_EVENT
*
*/
REMOTE_UI_REQ_SEND_EVENT,
REMOTE_UI_SEND_EVENT,
/**
* @const REMOTE_UI_REQ_OPEN_WINDOW
* @const REMOTE_UI_OPEN_WINDOW
*
*/
REMOTE_UI_REQ_OPEN_WINDOW,
REMOTE_UI_OPEN_WINDOW,
/**
* @const REMOTE_UI_REQ_OPEN_DIALOG
* @const REMOTE_UI_OPEN_DIALOG
*
*/
REMOTE_UI_REQ_OPEN_DIALOG,
REMOTE_UI_OPEN_DIALOG,
/**
* @const REMOTE_UI_REQ_CLOSE_WINDOW
* @const REMOTE_UI_CLOSE_WINDOW
*
*/
REMOTE_UI_REQ_CLOSE_WINDOW,
REMOTE_UI_CLOSE_WINDOW,
/**
* @const REMOTE_UI_REQ_BACK_TO_PREV
* @const REMOTE_UI_BACK_TO_PREV
*
*/
REMOTE_UI_REQ_BACK_TO_PREV,
REMOTE_UI_BACK_TO_PREV,
/**
* @const REMOTE_UI_REQ_BACK_TO_HOME
* @const REMOTE_UI_BACK_TO_HOME
*
*/
REMOTE_UI_REQ_BACK_TO_HOME,
REMOTE_UI_BACK_TO_HOME,
/**
* @const REMOTE_UI_REQ_SET_PROP
* @const REMOTE_UI_SET_PROP
*
*/
REMOTE_UI_REQ_SET_PROP,
REMOTE_UI_SET_PROP,
/**
* @const REMOTE_UI_REQ_GET_PROP
* @const REMOTE_UI_GET_PROP
*
*/
REMOTE_UI_REQ_GET_PROP,
REMOTE_UI_GET_PROP,
/**
* @const REMOTE_UI_REQ_SET_THEME
*
*/
REMOTE_UI_REQ_SET_THEME,
/**
* @const REMOTE_UI_REQ_SET_LANGUAGE
*
*/
REMOTE_UI_REQ_SET_LANGUAGE,
/**
* @const REMOTE_UI_REQ_GET_XML_SOURCE
* @const REMOTE_UI_GET_XML_SOURCE
* xml源码请求
*/
REMOTE_UI_REQ_GET_XML_SOURCE,
REMOTE_UI_GET_XML_SOURCE,
/**
* @const REMOTE_UI_REQ_EXEC_FSCRIPT
* @const REMOTE_UI_EXEC_FSCRIPT
*
*/
REMOTE_UI_REQ_EXEC_FSCRIPT,
REMOTE_UI_EXEC_FSCRIPT,
/**
* @const REMOTE_UI_RESP_GET_DEV_INFO
*
*/
REMOTE_UI_RESP_GET_DEV_INFO,
* @const REMOTE_UI_MOVE_WIDGET
*
*/
REMOTE_UI_MOVE_WIDGET,
/**
* @const REMOTE_UI_RESP_REBOOT
*
*/
REMOTE_UI_RESP_REBOOT,
* @const REMOTE_UI_RESIZE_WIDGET
*
*/
REMOTE_UI_RESIZE_WIDGET,
/**
* @const REMOTE_UI_RESP_CREATE_DIR
*
*/
REMOTE_UI_RESP_CREATE_DIR,
* @const REMOTE_UI_CREATE_WIDGET
*
*/
REMOTE_UI_CREATE_WIDGET,
/**
* @const REMOTE_UI_RESP_REMOVE_DIR
*
*/
REMOTE_UI_RESP_REMOVE_DIR,
/**
* @const REMOTE_UI_RESP_REMOVE_FILE
*
*/
REMOTE_UI_RESP_REMOVE_FILE,
/**
* @const REMOTE_UI_RESP_ON_EVENT
*
*/
REMOTE_UI_RESP_ON_EVENT,
/**
* @const REMOTE_UI_RESP_OFF_EVENT
*
*/
REMOTE_UI_RESP_OFF_EVENT,
/**
* @const REMOTE_UI_RESP_SEND_EVENT
*
*/
REMOTE_UI_RESP_SEND_EVENT,
/**
* @const REMOTE_UI_RESP_OPEN_WINDOW
*
*/
REMOTE_UI_RESP_OPEN_WINDOW,
/**
* @const REMOTE_UI_RESP_OPEN_DIALOG
*
*/
REMOTE_UI_RESP_OPEN_DIALOG,
/**
* @const REMOTE_UI_RESP_CLOSE_WINDOW
*
*/
REMOTE_UI_RESP_CLOSE_WINDOW,
/**
* @const REMOTE_UI_RESP_BACK_TO_PREV
*
*/
REMOTE_UI_RESP_BACK_TO_PREV,
/**
* @const REMOTE_UI_RESP_BACK_TO_HOME
*
*/
REMOTE_UI_RESP_BACK_TO_HOME,
/**
* @const REMOTE_UI_RESP_SET_PROP
*
*/
REMOTE_UI_RESP_SET_PROP,
/**
* @const REMOTE_UI_RESP_GET_PROP
*
*/
REMOTE_UI_RESP_GET_PROP,
/**
* @const REMOTE_UI_RESP_SET_THEME
*
*/
REMOTE_UI_RESP_SET_THEME,
/**
* @const REMOTE_UI_RESP_SET_LANGUAGE
*
*/
REMOTE_UI_RESP_SET_LANGUAGE,
/**
* @const REMOTE_UI_RESP_GET_XML_SOURCE
* xml源码响应
*/
REMOTE_UI_RESP_GET_XML_SOURCE,
/**
* @const REMOTE_UI_RESP_EXEC_FSCRIPT
*
*/
REMOTE_UI_RESP_EXEC_FSCRIPT,
* @const REMOTE_UI_DESTROY_WIDGET
*
*/
REMOTE_UI_DESTROY_WIDGET,
/**
* @const REMOTE_UI_NOTIFY
*
@ -316,6 +232,8 @@ typedef enum _remote_ui_reboot_type_t {
#define REMOTE_UI_KEY_INIT "init"
#define REMOTE_UI_KEY_X "x"
#define REMOTE_UI_KEY_Y "y"
#define REMOTE_UI_KEY_W "w"
#define REMOTE_UI_KEY_H "h"
#define REMOTE_UI_KEY_CODE "code"
#define REMOTE_UI_KEY_TYPE "type"
#define REMOTE_UI_KEY_TITLE "title"
@ -323,13 +241,24 @@ typedef enum _remote_ui_reboot_type_t {
#define REMOTE_UI_KEY_DURATION "duration"
#define REMOTE_UI_FILE_MANIFEST "__manifest__.txt"
#define REMOTE_UI_FILE_XML_SOURCE "__xml_source__.xml"
#define REMOTE_UI_FILE_SCREEN_SHOT "__screen_shot__.png"
#define REMOTE_UI_FILE_SNAPSHOT "__snapshot__."
#define REMOTE_UI_FILE_LOADED_IMAGES_INFO "__images_info__"
#define REMOTE_UI_FILE_LOADED_ASSETS_INFO "__assets_info__"
#define REMOTE_UI_DIALOG_TYPE_CONFIRM "confirm"
#define REMOTE_UI_DIALOG_TYPE_WARN "warn"
#define REMOTE_UI_DIALOG_TYPE_INFO "info"
#define REMOTE_UI_DIALOG_TYPE_TOAST "toast"
#define REMOTE_UI_TARGET_GLOBAL "global"
#define REMOTE_UI_PROP_THEME "theme"
#define REMOTE_UI_PROP_LANGUAGE "language"
#ifndef REMOTE_UI_URL
#define REMOTE_UI_URL "tcp://localhost:2233"
#endif/*REMOTE_UI_URL*/
END_C_DECLS
#endif /*TK_REMOTE_UI_TYPES_DEF_H*/

View File

@ -123,7 +123,7 @@ static ret_t tk_client_confirm_packet(tk_client_t* client, bool_t valid) {
tk_msg_header_t header;
header.size = 0;
header.type = MSG_REQ_CONFIRM;
header.type = MSG_CODE_CONFIRM;
header.data_type = MSG_DATA_TYPE_NONE;
header.resp_code = valid ? RET_OK : RET_CRC;
@ -209,18 +209,18 @@ ret_t tk_client_upload_file(tk_client_t* client, const char* remote_file, const
wbuffer_init(&wb, (void*)remote_file, strlen(remote_file) + 1);
wb.cursor = wb.capacity;
ret = tk_client_request(client, MSG_REQ_UPLOAD_FILE_BEGIN, MSG_DATA_TYPE_STRING, &wb);
ret = tk_client_request(client, MSG_CODE_UPLOAD_FILE_BEGIN, MSG_DATA_TYPE_STRING, &wb);
goto_error_if_fail(ret == RET_OK);
while ((len = fs_file_read(file, buff, sizeof(buff))) > 0) {
wbuffer_init(&wb, buff, len);
wb.cursor = len;
ret = tk_client_request(client, MSG_REQ_UPLOAD_FILE_DATA, MSG_DATA_TYPE_BINARY, &wb);
ret = tk_client_request(client, MSG_CODE_UPLOAD_FILE_DATA, MSG_DATA_TYPE_BINARY, &wb);
break_if_fail(ret == RET_OK);
}
wbuffer_rewind(&wb);
ret = tk_client_request(client, MSG_REQ_UPLOAD_FILE_END, MSG_DATA_TYPE_NONE, &wb);
ret = tk_client_request(client, MSG_CODE_UPLOAD_FILE_END, MSG_DATA_TYPE_NONE, &wb);
fs_file_close(file);
@ -248,16 +248,16 @@ ret_t tk_client_download_file(tk_client_t* client, const char* remote_file,
wb = &(client->wb);
wbuffer_rewind(wb);
wbuffer_write_string(wb, remote_file);
ret = tk_client_request(client, MSG_REQ_DOWNLOAD_FILE_BEGIN, MSG_DATA_TYPE_STRING, wb);
ret = tk_client_request(client, MSG_CODE_DOWNLOAD_FILE_BEGIN, MSG_DATA_TYPE_STRING, wb);
goto_error_if_fail(ret == RET_OK);
memset(&header, 0x00, sizeof(header));
while ((ret = tk_client_read_resp(client, &header, wb)) == RET_OK) {
if (header.type == MSG_RESP_DOWNLOAD_FILE_DATA) {
if (header.type == MSG_CODE_DOWNLOAD_FILE_DATA) {
len = fs_file_write(file, wb->data, wb->cursor);
break_if_fail(len == wb->cursor);
} else if (header.type == MSG_RESP_DOWNLOAD_FILE_END) {
} else if (header.type == MSG_CODE_DOWNLOAD_FILE_END) {
ret = RET_OK;
break;
} else {

View File

@ -67,81 +67,51 @@ typedef enum _tk_msg_code_t {
*/
MSG_NONE = 0,
/**
* @const MSG_REQ_CONFIRM
* @const MSG_CODE_CONFIRM
*
*/
MSG_REQ_CONFIRM,
MSG_CODE_CONFIRM,
/**
* @const MSG_REQ_LOGIN
* @const MSG_CODE_LOGIN
*
*/
MSG_REQ_LOGIN,
MSG_CODE_LOGIN,
/**
* @const MSG_REQ_LOGOUT
* @const MSG_CODE_LOGOUT
*
*/
MSG_REQ_LOGOUT,
MSG_CODE_LOGOUT,
/**
* @const MSG_REQ_UPLOAD_FILE_BEGIN
* @const MSG_CODE_UPLOAD_FILE_BEGIN
*
*/
MSG_REQ_UPLOAD_FILE_BEGIN,
MSG_CODE_UPLOAD_FILE_BEGIN,
/**
* @const MSG_REQ_UPLOAD_FILE_DATA
* @const MSG_CODE_UPLOAD_FILE_DATA
*
*/
MSG_REQ_UPLOAD_FILE_DATA,
MSG_CODE_UPLOAD_FILE_DATA,
/**
* @const MSG_REQ_UPLOAD_FILE_END
* @const MSG_CODE_UPLOAD_FILE_END
*
*/
MSG_REQ_UPLOAD_FILE_END,
MSG_CODE_UPLOAD_FILE_END,
/**
* @const MSG_REQ_DOWNLOAD_FILE_BEGIN
* @const MSG_CODE_DOWNLOAD_FILE_BEGIN
*
*/
MSG_REQ_DOWNLOAD_FILE_BEGIN,
MSG_CODE_DOWNLOAD_FILE_BEGIN,
/**
* @const MSG_CODE_DOWNLOAD_FILE_DATA
*
*/
MSG_CODE_DOWNLOAD_FILE_DATA,
/**
* @const MSG_CODE_DOWNLOAD_FILE_END
*
*/
MSG_CODE_DOWNLOAD_FILE_END,
/**
* @const MSG_RESP_LOGIN
*
*/
MSG_RESP_LOGIN,
/**
* @const MSG_RESP_LOGOUT
*
*/
MSG_RESP_LOGOUT,
/**
* @const MSG_RESP_UPLOAD_FILE_BEGIN
*
*/
MSG_RESP_UPLOAD_FILE_BEGIN,
/**
* @const MSG_RESP_UPLOAD_FILE_DATA
*
*/
MSG_RESP_UPLOAD_FILE_DATA,
/**
* @const MSG_RESP_UPLOAD_FILE_END
*
*/
MSG_RESP_UPLOAD_FILE_END,
/**
* @const MSG_RESP_DOWNLOAD_FILE_BEGIN
*
*/
MSG_RESP_DOWNLOAD_FILE_BEGIN,
/**
* @const MSG_RESP_DOWNLOAD_FILE_DATA
*
*/
MSG_RESP_DOWNLOAD_FILE_DATA,
/**
* @const MSG_RESP_DOWNLOAD_FILE_END
*
*/
MSG_RESP_DOWNLOAD_FILE_END,
/**
* @const MSG_USER_START
*

View File

@ -178,7 +178,7 @@ static ret_t tk_service_confirm_packet(tk_service_t* service, bool_t valid) {
tk_msg_header_t header;
header.size = 0;
header.type = MSG_REQ_CONFIRM;
header.type = MSG_CODE_CONFIRM;
header.data_type = MSG_DATA_TYPE_NONE;
header.resp_code = valid ? RET_OK : RET_CRC;
@ -334,28 +334,28 @@ ret_t tk_service_upload_file(tk_service_t* service, const char* filename) {
wbuffer_rewind(wb);
file = fs_open_file(os_fs(), filename, "wb+");
if (file != NULL) {
tk_service_send_resp(service, MSG_RESP_UPLOAD_FILE_BEGIN, MSG_DATA_TYPE_NONE, RET_OK, wb);
tk_service_send_resp(service, MSG_CODE_UPLOAD_FILE_BEGIN, MSG_DATA_TYPE_NONE, RET_OK, wb);
} else {
tk_service_send_resp(service, MSG_RESP_UPLOAD_FILE_BEGIN, MSG_DATA_TYPE_NONE, RET_FAIL, wb);
tk_service_send_resp(service, MSG_CODE_UPLOAD_FILE_BEGIN, MSG_DATA_TYPE_NONE, RET_FAIL, wb);
}
return_value_if_fail(file != NULL, RET_BAD_PARAMS);
memset(&header, 0x00, sizeof(header));
while ((ret = tk_service_read_req(service, &header, wb)) == RET_OK) {
if (header.type == MSG_REQ_UPLOAD_FILE_DATA) {
if (header.type == MSG_CODE_UPLOAD_FILE_DATA) {
len = fs_file_write(file, wb->data, wb->cursor);
ret = (len == wb->cursor) ? RET_OK : RET_FAIL;
tk_service_send_resp(service, MSG_RESP_UPLOAD_FILE_DATA, MSG_DATA_TYPE_NONE, ret, wb);
tk_service_send_resp(service, MSG_CODE_UPLOAD_FILE_DATA, MSG_DATA_TYPE_NONE, ret, wb);
break_if_fail(ret == RET_OK);
} else if (header.type == MSG_REQ_UPLOAD_FILE_END) {
} else if (header.type == MSG_CODE_UPLOAD_FILE_END) {
ret = RET_OK;
ret = tk_service_send_resp(service, MSG_RESP_UPLOAD_FILE_END, MSG_DATA_TYPE_NONE, ret, wb);
ret = tk_service_send_resp(service, MSG_CODE_UPLOAD_FILE_END, MSG_DATA_TYPE_NONE, ret, wb);
break_if_fail(ret == RET_OK);
break;
} else {
assert(!"impossible");
ret = RET_FAIL;
tk_service_send_resp(service, MSG_RESP_UPLOAD_FILE_END, MSG_DATA_TYPE_NONE, ret, wb);
tk_service_send_resp(service, MSG_CODE_UPLOAD_FILE_END, MSG_DATA_TYPE_NONE, ret, wb);
break;
}
}
@ -376,22 +376,22 @@ ret_t tk_service_download_file(tk_service_t* service, const char* filename) {
wbuffer_init(&wb, buff, sizeof(buff));
file = fs_open_file(os_fs(), filename, "rb");
if (file != NULL) {
tk_service_send_resp(service, MSG_RESP_DOWNLOAD_FILE_BEGIN, MSG_DATA_TYPE_NONE, RET_OK, &wb);
tk_service_send_resp(service, MSG_CODE_DOWNLOAD_FILE_BEGIN, MSG_DATA_TYPE_NONE, RET_OK, &wb);
} else {
tk_service_send_resp(service, MSG_RESP_DOWNLOAD_FILE_BEGIN, MSG_DATA_TYPE_NONE, RET_FAIL, &wb);
tk_service_send_resp(service, MSG_CODE_DOWNLOAD_FILE_BEGIN, MSG_DATA_TYPE_NONE, RET_FAIL, &wb);
}
return_value_if_fail(file != NULL, RET_BAD_PARAMS);
while ((len = fs_file_read(file, buff, sizeof(buff))) > 0) {
wbuffer_init(&wb, buff, len);
wb.cursor = len;
ret = tk_service_send_resp(service, MSG_RESP_DOWNLOAD_FILE_DATA, MSG_DATA_TYPE_BINARY, RET_OK,
ret = tk_service_send_resp(service, MSG_CODE_DOWNLOAD_FILE_DATA, MSG_DATA_TYPE_BINARY, RET_OK,
&wb);
break_if_fail(ret == RET_OK);
}
wbuffer_rewind(&wb);
ret = tk_service_send_resp(service, MSG_RESP_DOWNLOAD_FILE_END, MSG_DATA_TYPE_NONE, ret, &wb);
ret = tk_service_send_resp(service, MSG_CODE_DOWNLOAD_FILE_END, MSG_DATA_TYPE_NONE, ret, &wb);
fs_file_close(file);

View File

@ -1,68 +0,0 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[get_dev_info]
[create_dir]
path=abc/123
[upload]
remote = abc/123/test.txt
local = README.md
[download]
remote = abc/123/test.txt
local = README.md.download
ret=RET_OK
[remove_file]
filename=abc/123/test.txt
[remove_dir]
path=abc/123
[take_screen_shot]
filename=test.png
[get_manifest]
[open_window]
name=button
[sleep]
time=2000
[back]
[open_window]
name=edit
[sleep]
time=2000
[home]
[open_window]
name=rich_text
[sleep]
time=2000
[close_window]
name=rich_text
[set_prop]
target=open:button
name=text
value=Hello
[get_prop]
target=open:button
name=text
value=Hello
[logout]
[close]

View File

@ -1,15 +0,0 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[get_source]
filename=test.xml
[back]
[logout]
[close]

View File

@ -1,19 +0,0 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[send_event]
target=window
type=click
x = 100
y = 300
[back]
[logout]
[close]

View File

@ -1,19 +0,0 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[send_event]
type=key_down
key=RIGHT
[send_event]
type=key_up
key=RIGHT
[logout]
[close]

View File

@ -1,21 +0,0 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[set_prop]
target=open:button
name=text
value=Hello
[get_prop]
target=open:button
name=text
value=Hello
[logout]
[close]

View File

@ -1,17 +0,0 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[set_theme]
theme=default
[set_language]
language=zh_CN
[logout]
[close]

View File

@ -0,0 +1,64 @@
[create]
url=tcp://localhost:2233
[open_window]
name=basic
[sleep]
time=1000
[click]
target=inc_value
[click]
target=dec_value
[click]
target=r1
[get_prop]
target=r1
name=value
value=true
[click]
target=r2
[get_prop]
target=r2
name=value
value=true
[click]
target=r3
[get_prop]
target=r3
name=value
value=false
[click]
target=font_normal
[get_prop]
target=font_normal
name=value
value=true
[get_prop]
target=slider
name=value
value=40.000000
[key]
target=slider
key=RIGHT
[get_prop]
target=slider
name=value
value=41.000000
[back]

View File

@ -0,0 +1,45 @@
[create]
url=tcp://localhost:2233
[click]
target=open:button
[sleep]
time=1000
[click]
target=fullscreen
[get_prop]
target=window
name=h
value=480
[click]
target=fullscreen
[get_prop]
target=window
name=h
value=450
[click]
target=open:dialog1
[get_prop]
target=window
name=name
value=dialog1
[sleep]
time=1000
[click]
target=quit
[sleep]
time=1000
[home]

View File

@ -0,0 +1,18 @@
[create]
url=tcp://localhost:2233
[create_widget]
target=window
xml=@tests/ui_test_data/demouiold/data/quit.xml
[get_prop]
target=quit
name=text
value=Quit
[destroy_widget]
target=quit
[back]

View File

@ -0,0 +1,28 @@
[create]
url=tcp://localhost:2233
[open_window]
name=foo
xml=@tests/ui_test_data/demouiold/data/foo.xml
init=@tests/ui_test_data/demouiold/data/foo.json
[get_prop]
target=r1
name=value
value=true
[get_prop]
target=r2
name=value
value=true
[destroy_widget]
target=r2
[get_prop]
target=r2
name=value
value=0
[back]

View File

@ -0,0 +1,17 @@
{
"title": {
"text": "init json demo"
},
"bar1": {
"value":50
},
"bar2": {
"value":80
},
"r1": {
"value":true
},
"r2": {
"value":true
}
}

View File

@ -0,0 +1,55 @@
<window name="foo" anim_hint="htranslate" move_focus_prev_key="up" move_focus_next_key="down" text="Foo Window">
<app_bar x="0" y="0" w="100%" h="30" >
<label name="title" x="0" y="0" w="100%" h="100%" text="title"/>
</app_bar>
<row x="0" y="40" w="100%" h="30" children_layout="default(r=1,c=3,xm=2,s=10)">
<button name="inc_value" text="Inc" focusable="true" focus="true"/>
<button name="switch_to:main" text="Home" focusable="true"/>
<button name="dec_value" text="Dec" focusable="true" style.focused.text_color="red"/>
</row>
<row x="0" y="80" w="100%" h="30" children_layout="default(r=1,c=3,xm=2,s=10)">
<label style="left" name="left" text="Left"/>
<label style="center" name="center" text="Center"/>
<label style="right" name="right" text="Right"/>
</row>
<slider name="slider" x="10" y="116" w="-20" h="20" value="40" focusable="true"/>
<progress_bar name="bar1" x="10" y="142" w="-20" h="16" value="40" show_text="true"/>
<progress_bar name="bar2" x="r:10" y="b:10" w="20" h="118" value="20" vertical="true"/>
<timer duration="500" on:timer="print('timer');widget_add_value('bar1', 1);"/>
<row x="0" y="180" w="-50" h="90" children_layout="default(r=1,c=2,m=2)">
<column children_layout="default(r=3,c=1,ym=2,s=10)" >
<check_button name="r1" text="Book" focusable="true"/>
<check_button name="r2" text="Food" focusable="true"/>
<check_button name="r3" text="Pencil" value="true" focusable="true"/>
</column>
<column children_layout="default(r=3,c=1,ym=2,s=10)" >
<radio_button name="font_small" text="Small Font" focusable="true"/>
<radio_button name="font_normal" text="Normal Font" focusable="true"/>
<radio_button name="font_big" text="Big Font" focusable="true"/>
</column>
</row>
<row x="20" y="bottom:60" w="100" h="30" children_layout="default(r=1,c=4)">
<radio_button style="left"/>
<radio_button style="middle"/>
<radio_button style="right"/>
<check_button style="mute"/>
</row>
<grid x="20" y="bottom:10" w="80%" h="40" children_layout="default(r=1,c=5,x=2,s=10)">
<image draw_type="icon" image="earth"
animation="rotation(from=0, to=6.28, repeat_times=0, duration=2000, easing=linear)"/>
<image draw_type="icon" image="rgba" />
<image draw_type="icon" image="rgb" />
<image draw_type="icon" image="message"/>
<image draw_type="icon" image="red_btn_n"/>
</grid>
</window>

View File

@ -0,0 +1,2 @@
var a = widget_lookup('window', 'open:button', true)
widget_set(a, 'text', 'Open Button')

View File

@ -0,0 +1,4 @@
en_US: type=strings size=9138
default: type=style size=60359
default_full: type=font size=1732392
system_bar: type=style size=884

View File

@ -0,0 +1,21 @@
cursor: w=32 h=32 format=1
earth: w=48 h=48 format=1
logo: w=300 h=77 format=1
dialog_title: w=60 h=30 format=1
rgb: w=30 h=30 format=1
rgba: w=30 h=30 format=1
close_d: w=48 h=48 format=1
ani1: w=140 h=140 format=1
anic: w=140 h=140 format=1
close_n: w=48 h=48 format=1
ani5: w=140 h=140 format=1
ani4: w=140 h=140 format=1
ani2: w=140 h=140 format=1
checked: w=48 h=48 format=1
radio_unchecked: w=48 h=48 format=1
left_off: w=48 h=48 format=1
middle_off: w=48 h=48 format=1
right_off: w=48 h=48 format=1
unmuted: w=48 h=48 format=1
message: w=64 h=64 format=1
red_btn_n: w=30 h=30 format=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -0,0 +1,127 @@
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<window x="0" y="30" w="320" h="450" name="main" text="Desktop" focused="true" fullscreen="false">
<slide_view x="0" y="0" w="320" h="450" self_layout="default(x=0,y=0,w=100%,h=100%)" value="0" loop="true" vertical="false" auto_play="0">
<view x="0" y="0" w="320" h="450" children_layout="default(c=2,r=8,x=5,y=5,s=5)" self_layout="default(x=0,y=0,w=100%,h=100%)">
<button x="5" y="7" w="152" h="50" name="open:basic" text="Basic" focusable="true">
</button>
<button x="162" y="7" w="152" h="50" name="open:button" tr_text="Button" text="Button" focusable="true">
</button>
<button x="5" y="62" w="152" h="50" name="open:edit" text="Edits" focusable="true">
</button>
<button x="162" y="62" w="152" h="50" name="open:keyboard" text="KeyBoard" focusable="true">
</button>
<button x="5" y="117" w="152" h="50" name="open:list_view" text="ListView" focusable="true">
</button>
<button x="162" y="117" w="152" h="50" name="open:slide_view" text="SlideView" focusable="true">
</button>
<button x="5" y="172" w="152" h="50" name="open:animation" text="Animate Window" focusable="true">
</button>
<button x="162" y="172" w="152" h="50" name="open:animate_widget" text="Animate Widget" focusable="true">
</button>
<button x="5" y="227" w="152" h="50" name="open:tab_control" text="Tab Control" focusable="true">
</button>
<button x="162" y="227" w="152" h="50" name="open:combo_box" text="ComboBox" focusable="true">
</button>
<button x="5" y="282" w="152" h="50" name="open:rich_text" text="RichText" focusable="true">
</button>
<button x="162" y="282" w="152" h="50" name="open:color_picker" text="Color Picker" focusable="true">
</button>
</view>
<view x="0" y="0" w="320" h="450" children_layout="default(c=2,r=8,x=5,y=5,s=5)" self_layout="default(x=0,y=0,w=100%,h=100%)">
<button x="5" y="7" w="152" h="50" name="open:time_clock" text="Analog Clock" focusable="true">
</button>
<button x="162" y="7" w="152" h="50" name="open:digit_clock" text="Digit Clock" focusable="true">
</button>
<button x="5" y="62" w="152" h="50" name="open:locale" text="Locale" focusable="true">
</button>
<button x="162" y="62" w="152" h="50" name="open:images" text="Image" focusable="true">
</button>
<button x="5" y="117" w="152" h="50" name="open:gauge" text="Gauge" focusable="true">
</button>
<button x="162" y="117" w="152" h="50" name="open:switch" text="Switch" focusable="true">
</button>
<button x="5" y="172" w="152" h="50" name="open:text_selector" text="Selector" focusable="true">
</button>
<button x="162" y="172" w="152" h="50" name="open:image_animation" text="Image Animation" focusable="true">
</button>
<button x="5" y="227" w="152" h="50" name="open:progress_circle" text="ProgressCircle" focusable="true">
</button>
<button x="162" y="227" w="152" h="50" name="open:image_value" text="Value Image" focusable="true">
</button>
<button x="5" y="282" w="152" h="50" name="open:svg_image" text="SVG Image" focusable="true">
</button>
<button x="162" y="282" w="152" h="50" name="open:gif_image" text="GIF Image" focusable="true">
</button>
</view>
<view x="0" y="0" w="320" h="450" children_layout="default(c=2,r=8,x=5,y=5,s=5)" self_layout="default(x=0,y=0,w=100%,h=100%)">
<button x="5" y="7" w="152" h="50" name="open:label" text="Label" focusable="true">
</button>
<button x="162" y="7" w="152" h="50" name="open:dialogs" text="Dialogs" focusable="true">
</button>
<button x="5" y="62" w="152" h="50" name="open:slide_menu" text="Slide Menu" focusable="true">
</button>
<button x="162" y="62" w="152" h="50" name="open:soft_keyboard" text="Custom Keyboard" focusable="true">
</button>
<button x="5" y="117" w="152" h="50" name="open:vgcanvas" text="VG Canvas" focusable="true">
</button>
<button x="162" y="117" w="152" h="50" name="open:linear_gradient" text="Linear Gradient" focusable="true">
</button>
<button x="5" y="172" w="152" h="50" name="open:radial_gradient" text="Radial Gradient" focusable="true">
</button>
<button x="162" y="172" w="152" h="50" name="open:stroke_gradient" text="Stroke Gradient" focusable="true">
</button>
<button x="5" y="227" w="152" h="50" name="open:overlay" text="Overlay" focusable="true">
</button>
<button x="162" y="227" w="152" h="50" name="open:mledit" text="MultiLine Edit" focusable="true">
</button>
<button x="5" y="282" w="152" h="50" name="open:hscroll_label" text="HScroll Label" focusable="true">
</button>
<button x="162" y="282" w="152" h="50" name="open:menu" text="ContextMenu" focusable="true">
</button>
</view>
<view x="0" y="0" w="320" h="450" children_layout="default(c=2,r=8,x=5,y=5,s=5)" self_layout="default(x=0,y=0,w=100%,h=100%)">
<button x="5" y="7" w="152" h="50" name="open:draggable" text="Draggable" focusable="true">
</button>
<button x="162" y="7" w="152" h="50" name="open:rich_text_view" text="RichTextView" focusable="true">
</button>
<button x="5" y="62" w="152" h="50" name="open:bidi" text="Bidirectional" focusable="true">
</button>
<button x="162" y="62" w="152" h="50" name="open:grid" text="Grid" focusable="true">
</button>
<button x="5" y="117" w="152" h="50" name="open:color_tile" text="Color Tile" focusable="true">
</button>
<button x="162" y="117" w="152" h="50" name="open:floating_keyboard" text="Floating Keyboard" focusable="true">
</button>
<button x="5" y="172" w="152" h="50" name="open:slider" text="Slider" focusable="true">
</button>
<button x="162" y="172" w="152" h="50" name="open:close_window" text="close_window" focusable="true">
</button>
<button x="5" y="227" w="152" h="50" name="open:dialog_highlight" text="Dialog Highlight" focusable="true">
</button>
<button x="162" y="227" w="152" h="50" name="open:svg_test" text="SVG Test" focusable="true">
</button>
<button x="5" y="282" w="152" h="50" name="open:spin_box" text="Spin box" focusable="true">
</button>
<button x="162" y="282" w="152" h="50" name="open:modeless" text="Modeless" focusable="true">
</button>
</view>
<view x="0" y="0" w="320" h="450" children_layout="default(c=1,r=8,x=5,y=5,s=5)" self_layout="default(x=0,y=0,w=100%,h=100%)">
<button x="5" y="7" w="310" h="50" name="open:drop_file" text="Drop File" focusable="true">
</button>
<button x="5" y="62" w="310" h="50" name="open:memtest" text="MemTest" focusable="true">
</button>
<button x="5" y="117" w="310" h="50" name="open:calibration_win" text="Calibration" focusable="true">
</button>
<button x="5" y="172" w="310" h="50" name="show_fps" text="Show FPS" focusable="true">
</button>
<button x="5" y="227" w="310" h="50" name="snapshot" text="Take Snapshot" focusable="true">
</button>
<button x="5" y="282" w="310" h="50" name="reload_theme" text="Test Change Theme" focusable="true">
</button>
<button x="5" y="337" w="310" h="50" name="exit" text="Exit" focusable="true">
</button>
</view>
</slide_view>
<slide_indicator x="0" y="430" w="320" h="20" style="blue" self_layout="default(x=0,y=b:0,w=100%,h=20)" value="0" max="5" default_paint="0" auto_hide="0" margin="0" spacing="16.000000" size="8">
</slide_indicator>
</window>

View File

@ -0,0 +1 @@
<button name="quit" text="Quit" on:click="quit()" x="c" y="m" w="128" h="30"/>

View File

@ -0,0 +1,89 @@
[create]
url=tcp://localhost:2233
[click]
target=open:edit
[sleep]
time=1000
[get_prop]
target=window
name=name
value=edit
[set_prop]
target=window.list_view.scroll_view.[0].edit
name=text
value=88
[get_prop]
target=window.list_view.scroll_view.[0].edit
name=text
value=88
[click]
target=window.list_view.scroll_view.[0].edit.inc
[get_prop]
target=window.list_view.scroll_view.[0].edit
name=text
value=89
[click]
target=window.list_view.scroll_view.[0].edit.dec
[get_prop]
target=window.list_view.scroll_view.[0].edit
name=text
value=88
[key]
target=window.list_view.scroll_view.[0].edit
key=UP
[get_prop]
target=window.list_view.scroll_view.[0].edit
name=text
value=89
[key]
target=window.list_view.scroll_view.[0].edit
key=DOWN
[get_prop]
target=window.list_view.scroll_view.[0].edit
name=text
value=88
[key]
target=window.list_view.scroll_view.[0].edit
key=1
[get_prop]
target=window.list_view.scroll_view.[0].edit
name=text
value=1
[get_prop]
target=window.list_view.scroll_view.[0].edit
name=focused
value=true
[key]
target=window
key=TAB
[get_prop]
target=window.list_view.scroll_view.[0].edit
name=focused
value=false
[get_prop]
target=window.list_view.scroll_view.[1].edit
name=focused
value=true
[home]

View File

@ -1,16 +1,9 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[exec_fscript]
fscript=print("hello");
[back]
[exec_fscript]
fscript=@tests/ui_test_data/demouiold/data/fscript.fs
[logout]
[close]

View File

@ -0,0 +1,34 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[get_prop]
target=window_manager
name=show_fps
value=true
[set_prop]
target=window_manager
name=show_fps
value=false
[get_prop]
target=window_manager
name=show_fps
value=false
[set_prop]
target=window_manager
name=show_fps
value=true
[get_prop]
target=window_manager
name=show_fps
value=true
[close]

View File

@ -0,0 +1,6 @@
[create]
url=tcp://localhost:2233
[get_loaded_assets_info]
filename=tests/ui_test_data/demouiold/data/loaded_assets_info.txt

View File

@ -0,0 +1,7 @@
[create]
url=tcp://localhost:2233
[get_loaded_images_info]
filename=tests/ui_test_data/demouiold/data/loaded_image_info.txt

View File

@ -0,0 +1,14 @@
[create]
url=tcp://localhost:2233
[click]
target=open:keyboard
[get_prop]
target=window
name=name
value=keyboard
[back]

View File

@ -0,0 +1,49 @@
[create]
url=tcp://localhost:2233
[set_prop]
target=open:button
name=text
value=Button
[get_prop]
target=open:button
name=text
value=Button
[get_prop]
target=global
name=language
value=en_US
[set_prop]
target=global
name=language
value=zh_CN
[get_prop]
target=open:button
name=text
value=按钮
[get_prop]
target=global
name=language
value=zh_CN
[set_prop]
target=global
name=language
value=en_US
[get_prop]
target=global
name=language
value=en_US
[get_prop]
target=open:button
name=text
value=Button

View File

@ -0,0 +1,7 @@
[create]
url=tcp://localhost:2233
[take_snapshot]
target=window
filename=tests/ui_test_data/demouiold/data/main.png

View File

@ -0,0 +1,7 @@
[create]
url=tcp://localhost:2233
[get_source]
target=window
filename=tests/ui_test_data/demouiold/data/main_source.xml

View File

@ -0,0 +1,29 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[set_prop]
target=window_manager
name=max_fps
value=10
[get_prop]
target=window_manager
name=max_fps
value=10
[set_prop]
target=window_manager
name=max_fps
value=60
[get_prop]
target=window_manager
name=max_fps
value=60
[close]

View File

@ -0,0 +1,34 @@
[create]
url=tcp://localhost:2233
[move_widget]
target=window_manager.top
x=100
y=200
[get_prop]
target=window_manager.top
name=x
value=100
[get_prop]
target=window_manager.top
name=y
value=200
[resize_widget]
target=window_manager.top
w=200
h=100
[get_prop]
target=window_manager.top
name=w
value=200
[get_prop]
target=window_manager.top
name=h
value=100

View File

@ -0,0 +1,38 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[set_prop]
target=window_manager
name=screen_saver_time
value=1000
[sleep]
time=1100
[get_prop]
target=window
name=name
value=image_animation
[get_prop]
target=window_manager
name=screen_saver_time
value=1000
[set_prop]
target=window_manager
name=screen_saver_time
value=1000000
[get_prop]
target=window_manager
name=screen_saver_time
value=1000000
[back]
[close]

View File

@ -0,0 +1,53 @@
[create]
url=tcp://localhost:2233
[set_prop]
target=window.slide_view
name=value
value=0
[sleep]
time=500
[get_prop]
target=window.slide_view
name=value
value=0
[key]
target=window.slide_view
key=RIGHT
[sleep]
time=1000
[get_prop]
target=window.slide_view
name=value
value=1
[key]
target=window.slide_view
key=RIGHT
[sleep]
time=1000
[get_prop]
target=window.slide_view
name=value
value=2
[set_prop]
target=window.[0]
name=value
value=0
[sleep]
time=500
[get_prop]
target=window.[0]
name=value
value=0

View File

@ -1,10 +1,6 @@
[create]
url=tcp://localhost:2233
[login]
username=admin
password=admin
[send_event]
target=window
type=pointer_down
@ -24,8 +20,3 @@
y = 300
[back]
[logout]
[close]

View File

@ -0,0 +1,28 @@
[create]
url=tcp://localhost:2233
[get_prop]
target=global
name=theme
value=default
[set_prop]
target=global
name=theme
value=dark
[get_prop]
target=global
name=theme
value=dark
[set_prop]
target=global
name=theme
value=default
[get_prop]
target=global
name=theme
value=default

538
tools/ui_test/README.md Normal file
View File

@ -0,0 +1,538 @@
# UI 自动化测试工具
[AWTK UI 自动化](https://github.com/zlgopen/awtk-ui-automation) 提供了兼容 [Appium](http://appium.io) 的接口,可以使用 [Appium](http://appium.io) 的工具来进行 UI 自动化测试。但是使用起来有点麻烦,用的人不多,所以最终决定开发一个 AWTK 专用的 UI 自动化测试工具。相比 [Appium](http://appium.io),这个工具有下列特点:
* 不依赖额外的库。
* 无需安装额外的软件。
* 无需学习额外的编程语言和 API。
* 支持串口和网络两种方式连接 APP。
* 更加适合 AWTK 的测试方式。
主要用途:
* 自动化测试。
* 自动化演示。
* 压力测试。
* 查看系统状态(辅助调试)。
## 1. 启用 UI 自动化
* 包含头文件
```c
#include "remote_ui/service/remote_ui_service.h"
```
* 启动服务
```
tk_service_start(main_loop_get_event_source_manager(main_loop()), REMOTE_UI_URL, remote_ui_service_create, NULL);
```
> 完整示例请参考 demo_ui_old_app.c
## 2. 编写测试配置
测试用 ini 文件格式编写。通常一个应用程序需要多组测试用例,每个测试用例放到一个配置文件中,并取一个有意义的文件名。
下面给出一个简单的例子,后面会详细介绍每个命令的含义。
```ini
[create]
url=tcp://localhost:2233
[move_widget]
target=window_manager.top
x=100
y=200
[get_prop]
target=window_manager.top
name=x
value=100
[get_prop]
target=window_manager.top
name=y
value=200
[resize_widget]
target=window_manager.top
w=200
h=100
[get_prop]
target=window_manager.top
name=w
value=200
[get_prop]
target=window_manager.top
name=h
value=100
[close_window]
name=top
```
## 3. 运行测试
* 先启动被测试的应用程序。如
```sh
./bin/demouiold
```
* 再运行测试程序。如
```sh
./bin/ui_test tests/ui_test_data/demouiold/overlay.ini
```
> 如果存在多组测试用例,可以把它们放到一个批处理中。
## 4. 测试命令
### 4.0 常用参数
部分参数在很多命令中都会出现,这里统一说明。
#### 4.0.1 target
通常用来指定被操作的控件。它的值可以是控件的名字,也可以是控件的路径。如果是控件的路径,可以使用 `.` 来分隔控件的名字。如 `window_manager.top`
有几个特殊的名称:
* window_manager 代表窗口管理器。
* window 代表当前主窗口。比如 window.close 表示当前窗口上名为 close 的控件。路径默认为当前窗口,比如 close 也表示当前窗口上名为 close 的控件。
* global 代表全局对象。用来设置语言和主题之类的全局属性。
* [序数] 表示第几个子控件。如果序数为非负表示正向序数,为负数表示反向序数。
* 如果按名称查找失败,将名字作为控件类型进行查找。
示例:
* close_button 表示名为 close_button 的控件。
* window_manager.top 表示 window_manager 窗口中名为 top 的窗口。
* window_manager.top.close_button 表示 window_manager 窗口中,名为 top 的窗口中名为 close_button 的控件。
* window.[0] 表示当前窗口中第一个控件。
* window.[-1] 表示当前窗口中倒数第一个控件。
* window.slide\_view如果窗口中存在名为 slide\_view 的控件,则表示该控件,否则表示窗口中第一个 slide\_view 类型的控件。
### 4.1 create
* 功能:创建连接。
* 参数:
* url - 连接地址,如 tcp://localhost:2233。
* 示例:
```ini
[create]
url=tcp://localhost:2233
```
> url 参数可以为串口名通过串口连接到开发板。如serial:///dev/ttyUSB0
### 4.2 take_snapshot
* 功能:截屏。如果指定的文件不存在,则将截屏保存为指定的文件。如果存在,则与之进行比较,如果不一致,则提示测试失败。
* 参数:
* target - 目标。
* filename - 截屏文件名 (.png)。
* 示例:
```ini
[take_snapshot]
filename=win1.png
[take_snapshot]
target=window
filename=win2.png
[take_snapshot]
target=window_manager
filename=wm.png
[take_snapshot]
target=window_manager.top
filename=top.png
```
### 4.2 get_source
* 功能:获取控件源码。如果指定的文件不存在,则将源码保存为指定的文件。如果存在,则与之进行比较,如果不一致,则提示测试失败。
* 参数:
* target - 目标。
* filename - 源码文件名 (.xml)。
* 示例:
```ini
[get_source]
filename=win1.xml
[get_source]
target=window
filename=win2.xml
[get_source]
target=window_manager
filename=wm.xml
[get_source]
target=window_manager.top
filename=top.xml
```
### 4.3 open_window
功能:打开窗口。
参数:
* name - 窗口名。
* xml - xml 文件(可选,以@开头表示从文件读取),如果指定,表示从 XML 内容加载窗口,通常不需要。
* init - 初始化数据 (JSON 格式,可选,以@开头表示从文件读取)。
```ini
[open_window]
name=basic
[open_window]
name=foo
xml=@tests/ui_test_data/demouiold/data/foo.xml
init=@tests/ui_test_data/demouiold/data/foo.json
```
> xml 文件可以用 AWTK designer 生成,也可以手工编写。
初始化数据,第一级为控件名称(路径),第二级为控件的属性和值。如:
```
{
"bar1": {
"value":50
},
"bar2": {
"value":80
}
}
```
在上面的例子中bar1 和 bar2 是窗口中的两个进度条控件,这里分别设置它们的值为 50 和 80。
### 4.4 close_window
功能:关闭窗口。
参数:
* name - 窗口名。
```ini
[close_window]
name=top
```
### 4.5 back
功能:关闭当前窗口,返回上一级窗口。
参数:无。
```ini
[back]
```
### 4.6 home
功能:关闭除主窗口外的窗口,返回主窗口。
参数:无。
```ini
[home]
```
### 4.7 exec_fscript
功能:执行脚本。
参数:
* fscript - 脚本内容(以@开头表示从文件读取)。
示例:
```ini
[exec_fscript]
fscript=print("hello");
```
fscript 的用法请参考 [FSCRIPT 参考文档](https://awtk.zlg.cn/docs/awtk_docs/FScript/fscript.html)
### 4.8 create_widget
功能:创建控件。
参数:
* target - 目标(父控件)。
* xml - xml 内容(以@开头表示从文件读取)。
示例:
```ini
[create_widget]
target=window
xml=@tests/ui_test_data/demouiold/data/quit.xml
```
控件的 xml 比较简单,一般手写就可以了。如下面的例子在窗口的中间创建一个按钮:
```xml
<button name="quit" text="Quit" on:click="quit()" x="c" y="m" w="128" h="30"/>
```
### 4.9 destroy_widget
功能:销毁控件。
参数:
* target - 目标控件。
示例:
```ini
[destroy_widget]
target=quit
```
### 4.10 move_widget
功能:移动控件。
参数:
* target - 目标控件。
* x - x 坐标。
* y - y 坐标。
示例:
```ini
[move_widget]
target=window_manager.top
x=100
y=200
```
> x 和 y 的值为相对于父控件的坐标。
### 4.11 resize_widget
功能:调整控件大小。
参数:
* target - 目标控件。
* w - 宽度。
* h - 高度。
示例:
```ini
[resize_widget]
target=window_manager.top
w=200
h=100
```
### 4.12 set_prop
功能:设置对象(通常为控件)的属性。
参数:
* target - 目标控件(或 global 全局对象)。
* name - 属性名。
* value - 属性值。
示例:
> 设置是否显示 FPS
```ini
[set_prop]
target=window_manager
name=show_fps
value=false
```
> 设置屏保时间 (ms)
```ini
[set_prop]
target=window_manager
name=screen_saver_time
value=1000000
```
> 设置语言
```ini
[set_prop]
target=global
name=language
value=zh_CN
```
> 设置主题
```ini
[set_prop]
target=global
name=theme
value=default
```
### 4.13 get_prop
功能:获取对象(通常为控件)的属性。
参数:
* target - 目标控件(或 global 全局对象)。
* name - 属性名。
* value - 属性值(预期的值,如果实际值与之不同,认为测试失败)。
示例:
> 获取控件的文本
```ini
[get_prop]
target=button
name=text
value=按钮
```
> 获取当前的语言
```
[get_prop]
target=global
name=language
value=zh_CN
```
### 4.14 click
功能:点击控件(只支持按钮等可以点击的控件)。
参数:
* target - 目标。
```ini
[click]
target=start
```
### 4.15 key
功能:发送按键事件。
参数:
* target - 目标。
* key - 按键。
```ini
[key]
target=open_edit
key=RETURN
```
key 的取值请参考(去掉前缀 TK\_KEY\_ [按键定义] https://gitee.com/zlgopen/awtk/blob/master/docs/manual/key_code_t.md
### 4.16 send_event
功能:发送事件。
参数:
* target - 目标。
* type - 事件类型。
* key_down - 按键按下。
* key_up - 按键弹起。
* pointer_down - 指针按下。
* pointer_up - 指针弹起。
* pointer_move - 指针移动。
* click - 点击。
* x - x 坐标 (pointer 事件)。
* y - y 坐标 (pointer 事件)。
* key - key (key 事件)。
```ini
[send_event]
type=key_down
key=RIGHT
[send_event]
type=key_up
key=RIGHT
[send_event]
target=window
type=pointer_down
x = 100
y = 300
[send_event]
target=window
type=pointer_move
x = 101
y = 301
[send_event]
target=window
type=pointer_up
x = 100
y = 300
```
### 4.17 sleep
功能:休眠。
参数:
* ms - 等待时间(毫秒)。
```ini
```ini
[sleep]
time=1000
```
### 4.18 get_loaded_images_info
功能:获取已经加载的图片信息(辅助内存相关的调试)。
参数:
* filename - 保存文件名。
示例:
```ini
[get_loaded_images_info]
filename=loaded_image_info.txt
```
### 4.19 get_loaded_assets_info
功能:获取已经加载的资源信息(辅助内存相关的调试)。
参数:
* filename - 保存文件名。
示例:
```ini
[get_loaded_assets_info]
filename=loaded_assets_info.txt
```
* [参考示例](https://github.com/zlgopen/awtk/tree/master/tests/ui_test_data/demouiold/)

View File

@ -29,6 +29,9 @@
#include "remote_ui/client/remote_ui.h"
#include "streams/stream_factory.h"
#define STB_IMAGE_IMPLEMENTATION
#include "stb/stb_image.h"
static const char* fix_str(const char* str) {
return str != NULL ? str : "";
}
@ -50,6 +53,45 @@ static void check_return_code(ret_t ret, const char* expected_ret, const char* n
}
}
static char* read_text_file(const char* name) {
char filename[MAX_PATH + 1] = {0};
path_prepend_app_root(filename, name);
return (char*)file_read(filename, NULL);
}
static bool_t image_equal(const char* filename1, const char* filename2) {
int x1 = 0;
int y1 = 0;
int n1 = 0;
int x2 = 0;
int y2 = 0;
int n2 = 0;
bool_t ret = FALSE;
float* data1 = stbi_loadf(filename1, &x1, &y1, &n1, 0);
float* data2 = stbi_loadf(filename2, &x2, &y2, &n2, 0);
return_value_if_fail(data1 != NULL && data2 != NULL, FALSE);
if (x1 != x2 || y1 != y2 || n1 != n2) {
goto error;
}
if (memcmp(data1, data2, x1 * y1 * n1) != 0) {
goto error;
}
ret = TRUE;
error:
STBI_FREE(data1);
STBI_FREE(data2);
return ret;
}
static event_t* key_event_init_with_symbol(key_event_t* e, uint32_t type, const char* symbol) {
const key_type_value_t* kv = keys_type_find(symbol);
return_value_if_fail(kv != NULL, NULL);
return key_event_init(e, type, NULL, kv->value);
}
static void run_script(conf_doc_t* doc, uint32_t times) {
ret_t ret = RET_OK;
remote_ui_t* ui = NULL;
@ -110,34 +152,129 @@ static void run_script(conf_doc_t* doc, uint32_t times) {
ret = remote_ui_get_dev_info(ui, &info);
check_return_code(ret, expected_ret, name, info.name, info.os, info.arch);
log_debug("width=%d height=%d\n", info.screen_width, info.screen_height);
} else if (tk_str_eq(name, "take_screen_shot")) {
} else if (tk_str_eq(name, "take_snapshot")) {
char temp_file[MAX_PATH + 1] = {0};
const char* target = conf_node_get_child_value_str(iter, "target", "");
const char* filename = conf_node_get_child_value_str(iter, "filename", NULL);
ret = remote_ui_take_screen_shot(ui, filename);
path_prepend_temp_path(temp_file, "snapshot.png");
ret = remote_ui_take_snapshot(ui, target, temp_file);
if (ret == RET_OK) {
if (file_exist(filename)) {
if (image_equal(temp_file, filename)) {
ret = RET_OK;
fs_remove_file(os_fs(), temp_file);
} else {
ret = RET_FAIL;
log_debug("screen shot not equal:%s %s\n", temp_file, filename);
}
} else {
log_debug("copy %s to %s\n", temp_file, filename);
fs_copy_file(os_fs(), temp_file, filename);
fs_remove_file(os_fs(), temp_file);
}
}
check_return_code(ret, expected_ret, name, filename, NULL, NULL);
} else if (tk_str_eq(name, "get_source")) {
char temp_file[MAX_PATH + 1] = {0};
const char* target = conf_node_get_child_value_str(iter, "target", "");
const char* filename = conf_node_get_child_value_str(iter, "filename", NULL);
ret = remote_ui_get_xml_source(ui, filename);
path_prepend_temp_path(temp_file, "source.xml");
ret = remote_ui_get_xml_source(ui, target, temp_file);
if (ret == RET_OK) {
if (file_exist(filename)) {
if (fs_file_equal(os_fs(), temp_file, filename)) {
ret = RET_OK;
fs_remove_file(os_fs(), temp_file);
} else {
ret = RET_FAIL;
log_debug("source not equal:%s %s\n", temp_file, filename);
}
} else {
log_debug("copy %s to %s\n", temp_file, filename);
fs_copy_file(os_fs(), temp_file, filename);
fs_remove_file(os_fs(), temp_file);
}
}
check_return_code(ret, expected_ret, name, filename, NULL, NULL);
} else if (tk_str_eq(name, "get_manifest")) {
const char* filename = conf_node_get_child_value_str(iter, "filename", "manifest.txt");
ret = remote_ui_get_manifest(ui, filename);
check_return_code(ret, expected_ret, name, filename, NULL, NULL);
} else if (tk_str_eq(name, "get_loaded_images_info")) {
const char* filename = conf_node_get_child_value_str(iter, "filename", NULL);
ret = remote_ui_get_loaded_images_info(ui, filename);
check_return_code(ret, expected_ret, name, filename, NULL, NULL);
} else if (tk_str_eq(name, "get_loaded_assets_info")) {
const char* filename = conf_node_get_child_value_str(iter, "filename", NULL);
ret = remote_ui_get_loaded_assets_info(ui, filename);
check_return_code(ret, expected_ret, name, filename, NULL, NULL);
} else if (tk_str_eq(name, "open_window")) {
const char* wname = conf_node_get_child_value_str(iter, "name", NULL);
const char* xml = conf_node_get_child_value_str(iter, "xml", NULL);
const char* init = conf_node_get_child_value_str(iter, "init", NULL);
char* xml_content = NULL;
char* init_content = NULL;
if (xml != NULL && *xml == '@') {
xml_content = read_text_file(xml + 1);
xml = xml_content;
}
if (init != NULL && *init == '@') {
init_content = read_text_file(init + 1);
init = init_content;
}
ret = remote_ui_open_window(ui, wname, xml, init);
check_return_code(ret, expected_ret, name, wname, NULL, NULL);
if (xml_content != NULL) {
TKMEM_FREE(xml_content);
}
if (init_content != NULL) {
TKMEM_FREE(init_content);
}
sleep_ms(1000);
} else if (tk_str_eq(name, "close_window")) {
const char* wname = conf_node_get_child_value_str(iter, "name", NULL);
ret = remote_ui_close_window(ui, wname);
check_return_code(ret, expected_ret, name, wname, NULL, NULL);
sleep_ms(1000);
} else if (tk_str_eq(name, "create_widget")) {
const char* target = conf_node_get_child_value_str(iter, "target", NULL);
const char* xml = conf_node_get_child_value_str(iter, "xml", NULL);
char* xml_content = NULL;
if (xml != NULL && *xml == '@') {
xml_content = read_text_file(xml + 1);
xml = xml_content;
}
ret = remote_ui_create_widget(ui, target, xml);
check_return_code(ret, expected_ret, name, target, NULL, NULL);
if (xml_content != NULL) {
TKMEM_FREE(xml_content);
}
} else if (tk_str_eq(name, "destroy_widget")) {
const char* target = conf_node_get_child_value_str(iter, "target", NULL);
ret = remote_ui_destroy_widget(ui, target);
check_return_code(ret, expected_ret, name, target, NULL, NULL);
} else if (tk_str_eq(name, "move_widget")) {
const char* target = conf_node_get_child_value_str(iter, "target", NULL);
int32_t x = conf_node_get_child_value_int32(iter, "x", 0);
int32_t y = conf_node_get_child_value_int32(iter, "y", 0);
ret = remote_ui_move_widget(ui, target, x, y);
check_return_code(ret, expected_ret, name, target, NULL, NULL);
} else if (tk_str_eq(name, "resize_widget")) {
const char* target = conf_node_get_child_value_str(iter, "target", NULL);
int32_t w = conf_node_get_child_value_int32(iter, "w", 0);
int32_t h = conf_node_get_child_value_int32(iter, "h", 0);
ret = remote_ui_resize_widget(ui, target, w, h);
check_return_code(ret, expected_ret, name, target, NULL, NULL);
} else if (tk_str_eq(name, "back")) {
ret = remote_ui_back_to_prev(ui);
check_return_code(ret, expected_ret, name, NULL, NULL, NULL);
sleep_ms(1000);
} else if (tk_str_eq(name, "home")) {
ret = remote_ui_back_to_home(ui);
check_return_code(ret, expected_ret, name, NULL, NULL, NULL);
sleep_ms(1000);
} else if (tk_str_eq(name, "logout")) {
ret = remote_ui_logout(ui);
check_return_code(ret, expected_ret, name, NULL, NULL, NULL);
@ -174,17 +311,36 @@ static void run_script(conf_doc_t* doc, uint32_t times) {
} else if (tk_str_eq(name, "exec_fscript")) {
str_t str;
const char* fscript = conf_node_get_child_value_str(iter, "fscript", NULL);
char* fscript_content = NULL;
if (fscript != NULL && *fscript == '@') {
fscript_content = read_text_file(fscript + 1);
fscript = fscript_content;
}
str_init(&str, 1000);
ret = remote_ui_exec_fscript(ui, fscript, &str);
check_return_code(ret, expected_ret, name, fscript, str.str, NULL);
str_reset(&str);
if (fscript_content != NULL) {
TKMEM_FREE(fscript_content);
}
} else if (tk_str_eq(name, "click")) {
const char* target = conf_node_get_child_value_str(iter, "target", NULL);
ret = remote_ui_click(ui, target);
check_return_code(ret, expected_ret, name, target, NULL, NULL);
} else if (tk_str_eq(name, "key")) {
key_event_t event;
const char* target = conf_node_get_child_value_str(iter, "target", NULL);
const char* key = conf_node_get_child_value_str(iter, "key", NULL);
key_event_init_with_symbol(&event, EVT_KEY_DOWN, key);
ret = remote_ui_key(ui, target, event.key);
check_return_code(ret, expected_ret, name, target, key, NULL);
} else if (tk_str_eq(name, "send_event")) {
event_t* e = NULL;
const char* target = conf_node_get_child_value_str(iter, "target", NULL);
const char* type = conf_node_get_child_value_str(iter, "type", NULL);
const char* key = conf_node_get_child_value_str(iter, "key", NULL);
const char* x = conf_node_get_child_value_str(iter, "x", NULL);
const char* y = conf_node_get_child_value_str(iter, "y", NULL);
int x = conf_node_get_child_value_int32(iter, "x", 0);
int y = conf_node_get_child_value_int32(iter, "y", 0);
break_if_fail(type != NULL);
if (target == NULL) {
@ -194,27 +350,27 @@ static void run_script(conf_doc_t* doc, uint32_t times) {
if (strstr(type, "pointer") != NULL || strstr(type, "click") != NULL) {
pointer_event_t event;
if (strstr(type, "down") != NULL) {
e = pointer_event_init(&event, EVT_POINTER_DOWN, NULL, tk_atoi(x), tk_atoi(y));
e = pointer_event_init(&event, EVT_POINTER_DOWN, NULL, x, y);
} else if (strstr(type, "up") != NULL) {
e = pointer_event_init(&event, EVT_POINTER_UP, NULL, tk_atoi(x), tk_atoi(y));
e = pointer_event_init(&event, EVT_POINTER_UP, NULL, x, y);
} else if (strstr(type, "click") != NULL) {
e = pointer_event_init(&event, EVT_CLICK, NULL, tk_atoi(x), tk_atoi(y));
e = pointer_event_init(&event, EVT_CLICK, NULL, x, y);
} else {
e = pointer_event_init(&event, EVT_POINTER_MOVE, NULL, tk_atoi(x), tk_atoi(y));
e = pointer_event_init(&event, EVT_POINTER_MOVE, NULL, x, y);
}
ret = remote_ui_send_event(ui, target, e);
} else if (strstr(type, "key") != NULL) {
key_event_t event;
const key_type_value_t* kv = keys_type_find(key);
break_if_fail(kv != NULL);
if (strstr(type, "down") != NULL) {
e = key_event_init(&event, EVT_KEY_DOWN, NULL, kv->value);
e = key_event_init_with_symbol(&event, EVT_KEY_DOWN, key);
} else {
e = key_event_init(&event, EVT_KEY_UP, NULL, kv->value);
e = key_event_init_with_symbol(&event, EVT_KEY_UP, key);
}
ret = remote_ui_send_event(ui, target, e);
}
check_return_code(ret, expected_ret, name, target, type, NULL);
sleep_ms(100);
} else if (tk_str_eq(name, "confirm")) {
const char* title = conf_node_get_child_value_str(iter, "title", NULL);
const char* content = conf_node_get_child_value_str(iter, "content", NULL);