summaryrefslogtreecommitdiff
path: root/common/wmt_display/minivgui.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/wmt_display/minivgui.c')
-rwxr-xr-xcommon/wmt_display/minivgui.c1949
1 files changed, 1949 insertions, 0 deletions
diff --git a/common/wmt_display/minivgui.c b/common/wmt_display/minivgui.c
new file mode 100755
index 0000000..54820dd
--- /dev/null
+++ b/common/wmt_display/minivgui.c
@@ -0,0 +1,1949 @@
+/*++
+Copyright (c) 2010 WonderMedia Technologies, Inc.
+
+This program is free software: you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation, either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details. You
+should have received a copy of the GNU General Public License along with this
+program. If not, see http://www.gnu.org/licenses/>.
+
+WonderMedia Technologies, Inc.
+4F, 531, Chung-Cheng Road, Hsin-Tien, Taipei 231, R.O.C.
+--*/
+
+#include <config.h>
+#include <common.h>
+#include <command.h>
+#include <version.h>
+#include <stdarg.h>
+#include <linux/types.h>
+#include <devices.h>
+#include <linux/stddef.h>
+#include <asm/byteorder.h>
+#include <bmp_layout.h>
+
+#include "wmt_display.h"
+#include "minivgui.h"
+
+#define CHARGEANIM_PIC_NUM 7 // 1 big picture include 7 small pictures
+
+static char *sp_free_addr = (char *)5000000;
+
+static int s_display_percent;
+static int s_percent_val = -1;
+
+int g_tf_boot; // system boot from tf card. If set to 1, it means boot from eMMC. Otherwise, boot from Nand Flash
+
+typedef unsigned short GlyphScatter;
+
+#define Memcpy(dest, src, n) memcpy(dest, src, n)
+
+extern void *arm_memcpy(void *dest, const void *src, size_t n);
+extern void *arm_memset(void *s, int c, size_t count);
+extern void lcd_blt_enable(int no, int enable);
+
+typedef struct {
+ unsigned short ucs2Start;
+ unsigned short ucs2End;
+} GlyphRange;
+
+//
+// 字体文件布局
+// ----------------
+// | 文件头 | // FontFileHead
+// ---------------|
+// | 区间信息数组 | // 连续区间数据 GlyphRange[]
+// ----------------
+// | 离散信息数组 | // 离散点数据 GlyphScatter[] 已经排序
+// ---------------|
+// | missing点阵 | // missing glyph 点阵,额外的一个点阵用于显示无法找到的字符
+// ----------------
+// | 区间1点阵 | // 连续区间点阵数据
+// | 区间2点阵 | // 连续区间点阵数据
+// | 区间... | // 连续区间点阵数据
+// ----------------
+// | 离散1点阵 | // 离散的点阵
+// | 离散2点阵 | // 离散的点阵
+// | 离散... | // 离散的点阵
+// ----------------
+
+static const unsigned char s_fontData[] = {
+ 0x46, 0x54, 0x02, 0x10, 0x46, 0x6F, 0x6E, 0x74, 0x20, 0x31, 0x32, 0x78, 0x32, 0x32, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0C, 0x16, 0x2C, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0xC0, 0x39, 0xC0,
+ 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x04, 0x80, 0x04, 0x80, 0x09, 0x00,
+ 0x09, 0x00, 0x3F, 0xC0, 0x09, 0x00, 0x09, 0x00, 0x3F, 0xC0, 0x09, 0x00, 0x09, 0x00, 0x12, 0x00,
+ 0x12, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0F, 0x80, 0x10, 0x80, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00,
+ 0x1E, 0x00, 0x01, 0x80, 0x00, 0x80, 0x20, 0x80, 0x21, 0x80, 0x3F, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1C, 0x00, 0x22, 0x00, 0x22, 0x00, 0x22, 0x00, 0x1C, 0x00, 0x01, 0x80, 0x0E, 0x00, 0x30, 0x00,
+ 0x07, 0x00, 0x08, 0x80, 0x08, 0x80, 0x08, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x3F, 0x80, 0x04, 0x00, 0x06, 0x00, 0x0A, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x7F, 0xC0, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x18, 0x00,
+ 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00,
+ 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 0x00,
+ 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x10, 0x80, 0x10, 0x80, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40,
+ 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x80, 0x10, 0x80, 0x0F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0x00, 0x3A, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x1F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x10, 0x80,
+ 0x20, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
+ 0x10, 0x00, 0x20, 0x40, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x30, 0x80, 0x00, 0x40, 0x00, 0x40,
+ 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x20, 0x80,
+ 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x03, 0x00, 0x05, 0x00, 0x09, 0x00, 0x09, 0x00,
+ 0x11, 0x00, 0x11, 0x00, 0x21, 0x00, 0x3F, 0x80, 0x01, 0x00, 0x01, 0x00, 0x07, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x80, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x17, 0x00, 0x18, 0x80, 0x00, 0x40,
+ 0x00, 0x40, 0x00, 0x40, 0x20, 0x40, 0x10, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x06, 0x00,
+ 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x27, 0x80, 0x28, 0x40, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x10, 0x20, 0x08, 0x40, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x20, 0x40, 0x00, 0x40, 0x00, 0x80,
+ 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x11, 0x00, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x11, 0x00,
+ 0x0F, 0x00, 0x11, 0x00, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x11, 0x00, 0x0E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0E, 0x00, 0x11, 0x80, 0x20, 0x80, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x10, 0xC0, 0x0F, 0x40,
+ 0x00, 0x40, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0E, 0x00, 0x0E, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x18, 0x00,
+ 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x03, 0x00, 0x0C, 0x00,
+ 0x10, 0x00, 0x60, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00,
+ 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x00, 0x10, 0x00, 0x0C, 0x00, 0x03, 0x00, 0x00, 0x80, 0x00, 0x60, 0x00, 0x80, 0x03, 0x00,
+ 0x0C, 0x00, 0x10, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x10, 0x80, 0x10, 0x40,
+ 0x00, 0x40, 0x00, 0x40, 0x01, 0x80, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x18, 0x80, 0x20, 0x40, 0x20, 0x40, 0x21, 0xC0, 0x22, 0x40,
+ 0x24, 0x40, 0x24, 0x40, 0x24, 0x40, 0x23, 0xC0, 0x20, 0x00, 0x20, 0x00, 0x10, 0x80, 0x0F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3E, 0x00, 0x06, 0x00, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00, 0x10, 0x80, 0x10, 0x80,
+ 0x3F, 0xC0, 0x20, 0x40, 0x20, 0x40, 0x40, 0x20, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x80,
+ 0x10, 0x40, 0x10, 0x40, 0x10, 0x40, 0x10, 0x80, 0x1F, 0x80, 0x10, 0x40, 0x10, 0x20, 0x10, 0x20,
+ 0x10, 0x20, 0x10, 0x40, 0x7F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x20, 0x10, 0xE0, 0x20, 0x20,
+ 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x20, 0x20, 0x10, 0x40,
+ 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x80, 0x10, 0x40, 0x10, 0x40, 0x10, 0x20, 0x10, 0x20,
+ 0x10, 0x20, 0x10, 0x20, 0x10, 0x20, 0x10, 0x20, 0x10, 0x40, 0x10, 0x40, 0x3F, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0xE0, 0x10, 0x20, 0x10, 0x20, 0x11, 0x00, 0x11, 0x00, 0x1F, 0x00, 0x11, 0x00,
+ 0x11, 0x00, 0x10, 0x20, 0x10, 0x20, 0x10, 0x20, 0x7F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xE0,
+ 0x10, 0x20, 0x10, 0x20, 0x11, 0x00, 0x11, 0x00, 0x1F, 0x00, 0x11, 0x00, 0x11, 0x00, 0x10, 0x00,
+ 0x10, 0x00, 0x10, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x10, 0xC0, 0x20, 0x40,
+ 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x43, 0xE0, 0x40, 0x40, 0x40, 0x40, 0x20, 0x40, 0x10, 0x40,
+ 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xF0, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40,
+ 0x3F, 0xC0, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0xF9, 0xF0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3F, 0x80, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE0,
+ 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80,
+ 0x20, 0x80, 0x11, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xF0, 0x10, 0x40, 0x10, 0x80,
+ 0x11, 0x00, 0x12, 0x00, 0x14, 0x00, 0x1E, 0x00, 0x11, 0x00, 0x10, 0x80, 0x10, 0x80, 0x10, 0x40,
+ 0x78, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
+ 0x08, 0x00, 0x08, 0x00, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x08, 0x20, 0x3F, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xE0, 0xE0, 0x60, 0xC0, 0x51, 0x40, 0x51, 0x40, 0x51, 0x40, 0x4A, 0x40, 0x4A, 0x40,
+ 0x44, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xE0,
+ 0x30, 0x40, 0x28, 0x40, 0x28, 0x40, 0x24, 0x40, 0x24, 0x40, 0x22, 0x40, 0x22, 0x40, 0x21, 0x40,
+ 0x21, 0x40, 0x20, 0xC0, 0x70, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x10, 0x80, 0x20, 0x40,
+ 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x20, 0x40, 0x10, 0x80,
+ 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x10, 0x80, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40,
+ 0x10, 0x80, 0x1F, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0F, 0x00, 0x10, 0x80, 0x20, 0x40, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20,
+ 0x40, 0x20, 0x40, 0x20, 0x20, 0x40, 0x10, 0x80, 0x0F, 0x00, 0x04, 0x00, 0x0F, 0x20, 0x18, 0xC0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00,
+ 0x10, 0x80, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40, 0x10, 0x80, 0x1F, 0x00, 0x10, 0x80, 0x10, 0x40,
+ 0x10, 0x40, 0x10, 0x20, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x40, 0x10, 0xC0, 0x20, 0x40,
+ 0x20, 0x00, 0x30, 0x00, 0x0F, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x40, 0x20, 0x40, 0x30, 0x80,
+ 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x44, 0x40, 0x44, 0x40, 0x44, 0x40, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x1F, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0xE0, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40,
+ 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x10, 0x80, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0,
+ 0x20, 0x40, 0x20, 0x40, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x09, 0x00, 0x09, 0x00, 0x09, 0x00,
+ 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xF0, 0x40, 0x40, 0x40, 0x40,
+ 0x44, 0x40, 0x44, 0x40, 0x24, 0x80, 0x2A, 0x80, 0x2A, 0x80, 0x2A, 0x80, 0x2A, 0x80, 0x2A, 0x80,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xE0, 0x20, 0x80, 0x11, 0x00, 0x11, 0x00, 0x0A, 0x00,
+ 0x04, 0x00, 0x0A, 0x00, 0x11, 0x00, 0x10, 0x80, 0x20, 0x80, 0x40, 0x40, 0xF1, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0xF0, 0x20, 0x20, 0x10, 0x40, 0x08, 0x80, 0x05, 0x00, 0x05, 0x00, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0,
+ 0x20, 0x40, 0x20, 0x80, 0x21, 0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x40,
+ 0x10, 0x40, 0x20, 0x40, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0x00, 0x08, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x80,
+ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x3C, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00,
+ 0x09, 0x00, 0x09, 0x00, 0x10, 0x80, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x10, 0x40, 0x00, 0x40, 0x00, 0x40,
+ 0x0F, 0xC0, 0x10, 0x40, 0x20, 0x40, 0x20, 0xC0, 0x1F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x20, 0x00,
+ 0x20, 0x00, 0x20, 0x00, 0x27, 0x80, 0x28, 0x40, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x30, 0x20, 0x28, 0x40, 0x67, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0xA0, 0x10, 0x60, 0x20, 0x20, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x20, 0x10, 0x40,
+ 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x1E, 0x40, 0x21, 0xC0,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x21, 0xC0, 0x1E, 0x60, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x10, 0x80, 0x20, 0x40, 0x20, 0x40,
+ 0x3F, 0xC0, 0x20, 0x00, 0x20, 0x00, 0x10, 0x40, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xE0, 0x08, 0x00,
+ 0x08, 0x00, 0x08, 0x00, 0x3F, 0x80, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
+ 0x08, 0x00, 0x08, 0x00, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0E, 0xC0, 0x11, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x20, 0x80, 0x11, 0x80,
+ 0x0E, 0x80, 0x00, 0x80, 0x00, 0x80, 0x01, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x17, 0x00, 0x18, 0x80,
+ 0x10, 0x40, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40, 0x38, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x7F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
+ 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x3E, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00,
+ 0x11, 0xE0, 0x10, 0x80, 0x13, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x12, 0x00, 0x11, 0x00, 0x10, 0x80,
+ 0x31, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x3F, 0xE0, 0x00, 0x00,
+ 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, 0xC0, 0x33, 0x20, 0x22, 0x20, 0x22, 0x20,
+ 0x22, 0x20, 0x22, 0x20, 0x22, 0x20, 0x22, 0x20, 0x73, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x18, 0x80, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40, 0x10, 0x40,
+ 0x10, 0x40, 0x10, 0x40, 0x38, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x80, 0x10, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x40,
+ 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67, 0x80, 0x28, 0x40,
+ 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x20, 0x28, 0x40, 0x27, 0x80, 0x20, 0x00,
+ 0x20, 0x00, 0x20, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x60, 0x21, 0x40, 0x40, 0xC0, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x21, 0xC0, 0x1E, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40,
+ 0x00, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x19, 0xC0, 0x0A, 0x20, 0x0C, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00,
+ 0x08, 0x00, 0x08, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1F, 0x40, 0x20, 0xC0, 0x20, 0x40, 0x1F, 0x00, 0x00, 0x80, 0x00, 0x40, 0x20, 0x40, 0x30, 0x80,
+ 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x3F, 0xC0, 0x08, 0x00,
+ 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x60, 0x07, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xC0, 0x20, 0x40, 0x20, 0x40, 0x20, 0x40,
+ 0x20, 0x40, 0x20, 0x40, 0x20, 0x40, 0x20, 0xC0, 0x1F, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x20, 0x40, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x09, 0x00,
+ 0x09, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xE0, 0xF0, 0x40, 0x40, 0x44, 0x40, 0x44, 0x40, 0x24, 0x80, 0x2A, 0x80, 0x2A, 0x80, 0x2A, 0x80,
+ 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xE0, 0x20, 0x40,
+ 0x10, 0x80, 0x09, 0x00, 0x06, 0x00, 0x09, 0x00, 0x10, 0x80, 0x20, 0x40, 0x79, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x20, 0x40, 0x20, 0x80, 0x10, 0x80,
+ 0x10, 0x80, 0x09, 0x00, 0x09, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00,
+ 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3F, 0xC0, 0x20, 0x80, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00,
+ 0x10, 0x00, 0x20, 0x40, 0x3F, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x00, 0x02, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00,
+ 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x26, 0x40, 0x01, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+/**
+ * the VGUI private Font file version 1.0 head struct, internally used only.
+ */
+typedef struct {
+ char magic[2]; // "FT"
+ unsigned short version; // 0x1001 (1.01)
+
+ char name[32]; // description
+
+ unsigned char charWidth;
+ unsigned char charHeight;
+ unsigned short glyphBytes;
+
+ unsigned short rangeCount;
+ unsigned short scatterCount;
+} FontFileHeadV1;
+
+
+static mv_surface s_surface[5];
+
+unsigned int (*rgb2color)(unsigned char r, unsigned char g, unsigned char b);
+void (*putcolor2fb)(const mv_surface *s, int x, int y, unsigned int color);
+void (*putcolor2mem)(const mv_surface *s, int x, int y, unsigned int color);
+
+static unsigned char *m_fileStart;
+static unsigned char *m_glyphStart;
+static FontFileHeadV1 *m_fh;
+int bitsPerPixel;
+
+//Display Direction definition:
+// 0: portrait, the back button under the screen ( 竖屏, back 键在下)
+// 1: landscape, the back button on the right of the screnn ( 横屏, back键在右)
+// 2: portrait, the back button above the screen ( 竖屏, back键在上)
+// 3: landscape, the back button on the left of the screen ( 横屏, back键在左)
+int g_display_direction = 1;
+
+// for mem aligment
+extern void byte1_alig_mem_copy(char *src, char *des, unsigned int len);
+extern void byte2_alig_mem_copy(char *src, char *des, unsigned int len);
+extern void byte3_alig_mem_copy(char *src, char *des, unsigned int len);
+extern void mem_copy(char *src, char *des, unsigned int len);
+extern void byte1_less_bundle_copy(char *src, char *des, unsigned int len);
+extern void byte2_less_bundle_copy(char *src, char *des, unsigned int len);
+extern void byte3_less_bundle_copy(char *src, char *des, unsigned int len);
+extern void less_mem_copy(char *src, char *des, unsigned int len);
+
+// 24bits bitmap -> 146bits frame buffer
+extern void bit24_to_bit16_ali24(char *src, char *des, unsigned int len);
+extern void bit24_to_bit16_ali32(char *src, char *des, unsigned int len);
+
+static int setFontFileDat(const unsigned char *dat);
+
+static unsigned int rgb2color565(unsigned char r, unsigned char g, unsigned char b)
+{
+ unsigned int ret = 0;
+ ret = (unsigned int)(((r) >> 3) << 11 | ((g) >> 2) << 5 | ((b) >> 3));
+ return ret;
+}
+/*
+static unsigned int rgb2color555(unsigned char r, unsigned char g, unsigned char b)
+{
+ unsigned int ret = 0;
+ ret = (unsigned int)((((r) >> 3) << 10 | ((g) >> 3) << 5 | ((b) >> 3)) & 0x7fff);
+ return ret;
+}
+*/
+static unsigned int rgb2color888(unsigned char r, unsigned char g, unsigned char b)
+{
+ unsigned int ret = 0;
+ ret = (unsigned int)(((r) << 16 | (g) << 8 | (b)) & 0x00FFFFFF);
+ return ret;
+}
+/*
+static unsigned int rgb2color666(unsigned char r, unsigned char g, unsigned char b)
+{
+ unsigned int ret = 0;
+ ret = (unsigned int)(((r) >> 2) << 12 | ((g) >> 2) << 6 | ((b) >> 2));
+ return ret;
+}
+*/
+
+static void putcolor2fb16(const mv_surface *s, int x, int y, unsigned int color)
+{
+ if(g_display_direction == 1) {
+ if((g_logo_scale != LOGO_NOT_SCALE) || (x >= 0 && x < s->width && y >= 0 && y < s->height))
+ *(unsigned short *)(s->startAddr + (x * 2) + (s->lineBytes * y)) = (unsigned short)color;
+ } else { //circumrotate the font
+ int new_x, new_y;
+
+ new_x = x;
+ new_y = y;
+
+ switch(g_display_direction) {
+ case 0:
+ new_x = y;
+ new_y = (s->height - 1 - x);
+ break;
+
+ case 2:
+ new_x = (s->width - 1 - y);
+ new_y = x;
+ break;
+
+ case 3:
+ new_x = (s->width - 1 - x);
+ new_y = (s->height - 1 - y);
+ break;
+ }
+
+ if((g_logo_scale != LOGO_NOT_SCALE) || (new_x >= 0 && new_x < s->width && new_y >= 0 && new_y < s->height))
+ *(unsigned short *)(s->startAddr + (new_x * 2) + (s->lineBytes * new_y)) = (unsigned short)color;
+ }
+}
+
+static void putcolor2fb32(const mv_surface *s, int x, int y, unsigned int color)
+{
+ if(g_display_direction == 1) {
+ if((g_logo_scale != LOGO_NOT_SCALE) || (x >= 0 && x < s->width && y >= 0 && y < s->height))
+ *(unsigned int *)(s->startAddr + (x * 4) + (s->lineBytes * y)) = (unsigned int)color;
+ } else { //circumrotate the font
+ int new_x, new_y;
+
+ new_x = x;
+ new_y = y;
+
+ switch(g_display_direction) {
+ case 0:
+ new_x = y;
+ new_y = (s->height - 1 - x);
+ break;
+
+ case 2:
+ new_x = (s->width - 1 - y);
+ new_y = x;
+ break;
+
+ case 3:
+ new_x = (s->width - 1 - x);
+ new_y = (s->height - 1 - y);
+ break;
+ }
+
+ if((g_logo_scale != LOGO_NOT_SCALE) || (new_x >= 0 && new_x < s->width && new_y >= 0 && new_y < s->height))
+ *(unsigned int *)(s->startAddr + (new_x * 4) + (s->lineBytes * new_y)) = (unsigned int)color;
+ }
+}
+
+mv_surface *mv_getSurface(int no)
+{
+ return &s_surface[no];
+}
+
+static void putcolor2mem16(const mv_surface *s, int x, int y, unsigned int color)
+{
+ if(g_display_direction == 1) {
+ if((g_logo_scale != LOGO_NOT_SCALE) || (x >= 0 && x < s->width && y >= 0 && y < s->height))
+ *(unsigned short *)(sp_free_addr + (x * 2) + (s->lineBytes * y)) = (unsigned short)color;
+ } else { //circumrotate the font
+ int new_x, new_y;
+
+ new_x = x;
+ new_y = y;
+
+ switch(g_display_direction) {
+ case 0:
+ new_x = y;
+ new_y = (s->height - 1 - x);
+ break;
+
+ case 2:
+ new_x = (s->width - 1 - y);
+ new_y = x;
+ break;
+
+ case 3:
+ new_x = (s->width - 1 - x);
+ new_y = (s->height - 1 - y);
+ break;
+ }
+
+ if((g_logo_scale != LOGO_NOT_SCALE) || (new_x >= 0 && new_x < s->width && new_y >= 0 && new_y < s->height))
+ *(unsigned short *)(sp_free_addr + (new_x * 2) + (s->lineBytes * new_y)) = (unsigned short)color;
+ }
+}
+
+static void putcolor2mem32(const mv_surface *s, int x, int y, unsigned int color)
+{
+ if(g_display_direction == 1) {
+ if((g_logo_scale != LOGO_NOT_SCALE) || (x >= 0 && x < s->width && y >= 0 && y < s->height))
+ *(unsigned int *)(sp_free_addr + (x * 4) + (s->lineBytes * y)) = (unsigned int)color;
+ } else { //circumrotate the font
+ int new_x, new_y;
+
+ new_x = x;
+ new_y = y;
+
+ switch(g_display_direction) {
+ case 0:
+ new_x = y;
+ new_y = (s->height - 1 - x);
+ break;
+
+ case 2:
+ new_x = (s->width - 1 - y);
+ new_y = x;
+ break;
+
+ case 3:
+ new_x = (s->width - 1 - x);
+ new_y = (s->height - 1 - y);
+ break;
+ }
+
+ if((g_logo_scale != LOGO_NOT_SCALE) || (new_x >= 0 && new_x < s->width && new_y >= 0 && new_y < s->height))
+ *(unsigned int *)(sp_free_addr + (new_x * 4) + (s->lineBytes * new_y)) = (unsigned int)color;
+ }
+}
+
+static int get_fb_offset(const mv_surface *s, int img_width, int img_height, int xpos, int ypos)
+{
+ int x, y;
+ int bytes_per_pixel;
+
+ bytes_per_pixel = (s->bits_per_pixel >> 3);
+
+ switch(g_display_direction) {
+ case 0:
+ x = ypos;
+ y = s->height - xpos - img_width;
+ break;
+
+ case 2:
+ x = s->width - ypos - img_height;
+ y = xpos;
+ break;
+
+ case 3:
+ x = s->width - xpos - img_width;
+ y = s->height - ypos - img_height;
+ break;
+
+ case 1:
+ default:
+ x = xpos;
+ y = ypos;
+ break;
+ }
+
+ return (x * bytes_per_pixel + s->lineBytes * y);
+}
+
+static void mem2fb(const mv_surface *s, int width, int height, int xpos, int ypos)
+{
+ int new_width, new_height, new_xpos, new_ypos;
+ int i, bytes_per_pixel, fb_offset;
+ char *dest, *src;
+
+ new_width = width;
+ new_height = height;
+ new_xpos = xpos;
+ new_ypos = ypos;
+ bytes_per_pixel = (s->bits_per_pixel >> 3);
+
+ switch(g_display_direction) {
+ case 0: // the screen is portrait
+ case 2:
+ new_width = height;
+ new_height = width;
+ new_xpos = ypos;
+ new_ypos = xpos;
+ break;
+ }
+
+ fb_offset = get_fb_offset(s, width, height, xpos, ypos);
+ dest = s->startAddr + fb_offset;
+ src = sp_free_addr + fb_offset;
+
+ for (i = 0; i < new_height; i++) {
+ arm_memcpy(dest, src, new_width * bytes_per_pixel);
+ dest += s->lineBytes;
+ src += s->lineBytes;
+ }
+}
+
+void mv_clearFB(void)
+{
+ int no;
+ mv_surface *s;
+
+ for(no = 0; no < VPP_VOUT_INFO_NUM; no++) {
+ s = &s_surface[no];
+ if(s->startAddr)
+ arm_memset(s->startAddr, 0, s->height * s->lineBytes);
+ }
+}
+
+void mv_initSurface(int no, const mv_surface *s)
+{
+ static int flag = 0;
+ unsigned int free_addr;
+
+ Memcpy(&s_surface[no], s, sizeof(mv_surface));
+ if (flag == 0) {
+ setFontFileDat(s_fontData); //defined in "fontdata.h"
+ if (s->bits_per_pixel == 16) {
+ rgb2color = rgb2color565;
+ putcolor2fb = putcolor2fb16;
+ putcolor2mem = putcolor2mem16;
+ bitsPerPixel = 16;
+ } else {
+ rgb2color = rgb2color888;
+ putcolor2fb = putcolor2fb32;
+ putcolor2mem = putcolor2mem32;
+ }
+
+ free_addr = (unsigned int)s->startAddr - (1920 * 1080 * 4) * 2;
+ if(free_addr < 0)
+ free_addr = 0;
+
+ sp_free_addr = (char *)free_addr;
+
+ flag = 1;
+ }
+}
+
+void check_display_direction(void)
+{
+ char *env;
+
+ env = getenv("wmt.org.direction");
+ if (!env) {
+ g_display_direction = 1;
+ } else {
+ g_display_direction = simple_strtoul(env, NULL, 10);
+ if(g_display_direction < 0 || g_display_direction > 3)
+ g_display_direction = 1;
+ }
+
+ //printf("display direction %d\n", g_display_direction);
+}
+
+void check_tf_boot(void)
+{
+ char *env;
+
+ env = getenv("wmt.boot.dev");
+ if (env && !strnicmp(env, "TF", 2))
+ g_tf_boot = 1;
+}
+
+void mv_dumpSurface(void)
+{
+ printf("s_surface[0]: width = %d, height = %d, lineBytes = %d, bits_per_pixel = %d, startAddr = 0x%p\n",
+ s_surface[0].width, s_surface[0].height, s_surface[0].lineBytes, s_surface[0].bits_per_pixel, s_surface[0].startAddr);
+
+ printf("s_surface[1]: width = %d, height = %d, lineBytes = %d, bits_per_pixel = %d, startAddr = 0x%p\n",
+ s_surface[1].width, s_surface[1].height, s_surface[1].lineBytes, s_surface[1].bits_per_pixel, s_surface[1].startAddr);
+}
+
+void mv_drawLine(int no, int x1, int y1, int x2, int y2, unsigned int color)
+{
+ int i;
+ //mv_color* p;
+ const mv_surface *s = &s_surface[no];
+
+ if ( y1 == y2 ) {
+ if (x1 > x2) {
+ int tmp = x1;
+ x1 = x2;
+ x2 = tmp;
+ }
+#if 0
+ // horz line
+ p = getXYData(s, x1, y1);
+ for (i = x1; i < x2; ++i)
+ *p++ = color;
+#else
+ for (i = x1; i < x2; ++i)
+ putcolor2fb(s, i, y1, color);
+#endif
+ } else if ( x1 == x2 ) {
+ if (y1 > y2) {
+ int tmp = y1;
+ y1 = y2;
+ y2 = tmp;
+ }
+#if 0
+ // vert line
+ p = getXYData(s, x1,y1);
+ for (i = y1; i < y2; ++i) {
+ *p = color;
+ p = p + s->lineBytes;
+ }
+#else
+ for (i = y1; i < y2; ++i)
+ putcolor2fb(s, x1, i, color);
+#endif
+ }
+}
+
+void mv_drawRect(int no, const mv_Rect *rect, unsigned int color)
+{
+ mv_drawLine(no, rect->left, rect->top, rect->right, rect->top, color);
+ mv_drawLine(no, rect->left, rect->bottom, rect->right, rect->bottom, color);
+
+ mv_drawLine(no, rect->left, rect->top, rect->left, rect->bottom, color);
+ mv_drawLine(no, rect->right, rect->top, rect->right, rect->bottom, color);
+}
+
+void mv_fillRect(int no, const mv_Rect *rect, unsigned char r, unsigned char g, unsigned char b)
+{
+ int y;
+ unsigned int color = 0;
+
+ color = rgb2color(r, g, b);
+ for (y = rect->top; y < rect->bottom ; y++)
+ mv_drawLine(no, rect->left, y, rect->right, y, color);
+}
+
+int mv_le_to_cpu(char *buf, int size)
+{
+ int i;
+ int val = 0;
+
+ for(i = size - 1; i >= 0; i--) {
+ val = val << 8;
+ val |= buf[i];
+ }
+ return val;
+}
+
+int mv_loadBmp(int no, unsigned char *fileBuffer, int clearFB)
+{
+ unsigned char r, g, b;
+ int i, j, bytes;
+ int width, height, offset;
+ short colorBits;
+ unsigned char *colorMap;
+ mv_surface img;
+ bmp_header_t *header;
+ unsigned int dcolor = 0;
+ int xpos, ypos;
+ char *ptr;
+ int bits_per_pixel;
+ mv_surface *s;
+
+ char *source, *dst, *tmp_source, *tmp_dst;
+ int double_width, ali;
+
+ // for 32bits to 16bits
+ int bundle24, phase1, tmp_offset, tmp_phase1, tmp_bundle24, show_width, over_width, over_high;
+
+ s = &s_surface[no];
+ if(s->startAddr == 0)
+ return 0;
+
+ if (*fileBuffer != 'B') {
+ printf("fileBuffer : 0x%x = 0x%x \n", fileBuffer, *fileBuffer);
+ printf("Error : Not BMP Format\r\n");
+ return -1;
+ }
+
+ header = (bmp_header_t *)fileBuffer;
+ offset = mv_le_to_cpu((char *)&header->data_offset, 4);
+ width = mv_le_to_cpu((char *)&header->width, 4);
+ height = mv_le_to_cpu((char *)&header->height, 4);
+ colorBits = mv_le_to_cpu((char *)&header->bit_count, 2);
+
+ colorMap = (unsigned char *)(fileBuffer + 54); //颜色表地址(8bit时使用)
+
+ show_width = width;
+ over_width = 0;
+ over_high = 0;
+
+ img.width = width;
+ img.height = height;
+ img.lineBytes = s->lineBytes;
+
+ i = 0;
+ j = 0;
+
+ if(g_display_direction == 0 || g_display_direction == 2) { // the screen is portrait
+ if (width != s->height) {
+ if (width > s->height) {
+ printf("Warning : BMP Width(%d) > LCD(%d)\r\n", width, s->height);
+ if(g_logo_scale == LOGO_NOT_SCALE) {
+ /* only surport 24bit or 32bit bmp exceed screen size */
+ if(colorBits == 24 || colorBits == 32) {
+ /* only show bmp center if bmp size exceed screen size*/
+ over_width = width - s->height;
+ width = s->height;
+ img.width = width;
+ }
+ }
+ }
+ else
+ i = (s->height - width) / 2;
+ }
+ if (height != s->width) {
+ if (height > s->width) {
+ printf("Warning : BMP Height(%d) > LCD(%d)\r\n", height, s->width);
+ if(g_logo_scale == LOGO_NOT_SCALE) {
+ if(colorBits == 24 || colorBits == 32) {
+ over_high = height - s->width;
+ height = s->width;
+ img.height = height;
+ }
+ }
+ }
+ else
+ j = (s->width - height) / 2;
+ }
+
+ if ((g_logo_x >= 0) && (g_logo_x < s->height)) i = g_logo_x;
+ if ((g_logo_y >= 0) && (g_logo_y < s->width)) j = g_logo_y;
+
+ } else { // the screen is landscape
+ if (width != s->width) {
+ if (width > s->width) {
+ printf("Warning : BMP Width(%d) > LCD(%d)\r\n", width, s->width);
+ if(g_logo_scale == LOGO_NOT_SCALE) {
+ if(colorBits == 24 || colorBits == 32) {
+ over_width = width - s->width;
+ width = s->width;
+ img.width = width;
+ }
+ }
+ }
+ else
+ i = (s->width - width) / 2;
+ }
+ if (height != s->height) {
+ if (height > s->height) {
+ printf("Warning : BMP Height(%d) > LCD(%d)\r\n", height, s->height);
+ if(g_logo_scale == LOGO_NOT_SCALE) {
+ if(colorBits == 24 || colorBits == 32) {
+ over_high = height - s->height;
+ height = s->height;
+ img.height = height;
+ }
+ }
+ }
+ else
+ j = (s->height - height) / 2;
+ }
+
+ if ((g_logo_x >= 0) && (g_logo_x < s->width)) i = g_logo_x;
+ if ((g_logo_y >= 0) && (g_logo_y < s->height)) j = g_logo_y;
+ }
+
+ img.startAddr = (s->startAddr + (i * (s->bits_per_pixel >> 3)) + (s->lineBytes * j));
+
+ /* add for logo scale */
+ //set wimg.startAddr = (char *)vpp_calc_align((int)img.startAddr, 64);
+
+ if(g_logo_scale != LOGO_NOT_SCALE) {
+ if (g_logo_scale == LOGO_MODE_MAX)
+ g_logo_scale = ((width == 1280 && height == 720) || (width > 1280 || height > 720)) ?
+ LOGO_ORI_SCALE_FULL : LOGO_720P_SCALE_FULL;
+
+ if(g_logo_scale == LOGO_720P_SCALE_FULL) {
+
+ s->img_width = 1280;
+ s->img_height = 720;
+ s->img_startAddr = s->startAddr;
+
+ i = (1280 - width) / 2;
+ j = (720 - height) / 2;
+
+ img.startAddr = (s->startAddr + (i * (s->bits_per_pixel >> 3)) + (s->lineBytes * j));
+ img.startAddr = (char *)vpp_calc_align((int)img.startAddr, 64);
+ arm_memset(s->startAddr, 0, 720 * s->lineBytes); //clean fb
+ } else {
+ s->img_width = width;
+ s->img_height = height;
+ s->img_startAddr = img.startAddr;
+ }
+ }
+ /* end of logo scale */
+
+ xpos = i;
+ ypos = j;
+
+ if(clearFB)
+ arm_memset(s->startAddr, 0, s->height * s->lineBytes); //clear fb
+
+ switch (colorBits) {
+ // AimarMa -- Add 32bit BMP support
+ case 32: // r,g,b,a
+ bits_per_pixel = s->bits_per_pixel;
+ if (bits_per_pixel != 16 && g_display_direction == 1) {
+ for (i = 0; i <= height - 1 ; i++) {
+ //source = (char *)(fileBuffer + offset + i * width * 4);
+ source = (char *)(fileBuffer + offset + i * show_width * 4 + (over_high/2)*show_width * 4 + (over_width/2) * 4);
+ dst = (char *)(img.startAddr + img.lineBytes * (height - 1 - i));
+ mem_cpy_alignment (dst, source, width * 4);
+ }
+ } else {
+ offset = offset + (over_high/2)*show_width * 4 + (over_width/2) * 4;
+ for (i = height - 1; i >= 0; i--) {
+ for (j = 0; j < width; j++) {
+ b = *(fileBuffer + offset);
+ g = *(fileBuffer + offset + 1);
+ r = *(fileBuffer + offset + 2);
+ //a = *(unsigned char*)(fileBuffer + offset + 3);
+ //*getXYData(&img, j, i) = mv_RGB2Color(r,g,b);
+ dcolor = rgb2color(r, g, b);
+ //putcolor2fb(&img, j, i, dcolor);
+ putcolor2mem(&s_surface[no], j + xpos, i + ypos, dcolor);
+ offset += 4;
+ }
+ offset += over_width * 4;
+ }
+ mem2fb(s, width, height, xpos, ypos);
+ }
+ break;
+
+ case 24: // r,g,b
+ if(g_display_direction == 1) {
+ bits_per_pixel = s->bits_per_pixel;
+ ptr = malloc(width * 3);
+ if (!ptr) {
+ printf("allocate fail!!\n");
+ return 0;
+ }
+ bytes = 4 - (show_width * 3) % 4;
+ if (bytes == 4)
+ bytes = 0;
+
+ // 24bits -> 16bits
+ bundle24 = (width * 3) % 24; // 8 bits
+ phase1 = width * 3 - bundle24; // 24 bits
+ for (i = 0; i <= height - 1 ; i++) {
+ source = (char *)(fileBuffer + offset + i*show_width * 3 + (over_high/2)*show_width * 3 + (over_width/2) * 3);
+ dst = (char *)(img.startAddr + img.lineBytes * (height - 1 - i));
+ tmp_source = source;
+ tmp_dst = dst;
+ tmp_phase1 = phase1;
+ tmp_bundle24 = bundle24;
+ ali = 0;
+
+ // dst not ali
+ if ((int)dst % 4 != 0) {
+ b = *(source);
+ g = *(source + 1);
+ r = *(source + 2);
+ dcolor = rgb2color(r, g, b);
+ *(unsigned short *)(dst) = (unsigned short)dcolor;
+ tmp_dst = dst + 2;
+
+ tmp_source = source + 3;
+ tmp_phase1 = phase1 - 3;
+ tmp_bundle24 = tmp_phase1 % 24;
+ tmp_phase1 = tmp_phase1 - tmp_bundle24;
+ ali = 1;
+ }
+
+ // src -> tmp_buffer
+ mem_cpy_alignment(ptr, tmp_source, (width - ali) * 3);
+ if (bits_per_pixel == 16)
+ bit24_to_bit16_ali24 (tmp_dst, ptr, tmp_phase1);
+ else
+ bit24_to_bit16_ali32 (tmp_dst, ptr, tmp_phase1);
+
+ if (tmp_bundle24) {
+ tmp_offset = 0;
+ source = (char *)(ptr + tmp_phase1);
+ for (j = 0; j < tmp_bundle24 / 3; j++) {
+ b = *(source + tmp_offset);
+ g = *(source + tmp_offset + 1);
+ r = *(source + tmp_offset + 2);
+ dcolor = rgb2color(r, g, b);
+ if (bits_per_pixel == 16) {
+ tmp_dst = dst + (tmp_phase1 / 3) * 2 + j * 2;
+ *(unsigned short *)(tmp_dst) = (unsigned short)dcolor;
+ } else {
+ tmp_dst = dst + (tmp_phase1 / 3) * 4 + j * 4;
+ *(unsigned int *)(tmp_dst) = (unsigned int)dcolor;
+ }
+ tmp_offset += 3;
+ }
+ }
+ offset += bytes;
+ }
+
+ if( NULL != ptr )
+ free(ptr);
+ } else {
+ bytes = 4 - (show_width * 3) % 4;
+ if (bytes == 4)
+ bytes = 0;
+
+ offset = offset + (over_high/2)*show_width * 3 + (over_width/2) * 3;
+
+ for (i = height - 1; i >= 0; i--) {
+ for (j = 0; j < width; j++) {
+ b = *(fileBuffer + offset);
+ g = *(fileBuffer + offset + 1);
+ r = *(fileBuffer + offset + 2);
+ //*getXYData(&img, j, i) = mv_RGB2Color(r,g,b);
+ dcolor = rgb2color(r, g, b);
+ //putcolor2fb(&img, j, i, dcolor);
+ putcolor2mem(s, j + xpos, i + ypos, dcolor);
+ offset += 3;
+ }
+ offset += bytes;
+ offset += over_width * 3;
+ }
+ mem2fb(s, width, height, xpos, ypos);
+ }
+ break;
+ case 16: { //16bit 555
+ double_width = width * 2;
+ bytes = 4 - width % 4;
+ if (bytes == 4)
+ bytes = 0;
+ if (bitsPerPixel == 16) {
+ for (i = 0; i <= height - 1 ; i++) {
+ // multicopy-----------------------------------------------
+ source = (char *)(fileBuffer + offset + i * double_width);
+ dst = (char *)(img.startAddr + img.lineBytes * (height - 1 - i));
+ mem_cpy_alignment (dst, source, double_width);
+ //--------------------------------------------------------
+ }
+ } else {
+ unsigned short color16;
+ bytes = 4 - (width * 2) % 4;
+ if (bytes == 4)
+ bytes = 0;
+ for (i = height - 1; i >= 0; i--) {
+ for (j = 0; j < width; j++) {
+ color16 = *(unsigned short *)(fileBuffer + offset);
+#if ( GUI_RGB_FORMAT == RGB_FORMAT_565)
+ //*getXYData(&img, j, i) = (color16<<1) & 0xFFC0 | (color16 & 0x1F);
+ dcolor = (unsigned int)((((color16 & 0xF800) << 8) & 0x00FF0000) | (((color16 & 0x7E0) << 5) & 0x0000FF00) | (((color16 & 0x1F) << 3) & 0x000000FF));
+ //putcolor2fb(&img, j, i, dcolor);
+ putcolor2mem(&s_surface[no], j + xpos, i + ypos, dcolor);
+#else
+ //*getXYData(&img, j, i) = mv_RGB2Color((color16 & 0x7C00) >> 7, (color16 & 0x03E0) >> 2, (color16 & 0x001F) << 3);
+ dcolor = rgb2color((color16 & 0x7C00) >> 7, (color16 & 0x03E0) >> 2, (color16 & 0x001F) << 3);
+ //putcolor2fb(&img, j, i, dcolor);
+ putcolor2mem(&s_surface[no], j + xpos, i + ypos, dcolor);
+#endif
+ offset += 2;
+ }
+ offset += bytes;
+ }
+ mem2fb(s, width, height, xpos, ypos);
+ }
+ }
+ break;
+ case 8: //256 colormap
+ bytes = 4 - width % 4;
+ if (bytes == 4)
+ bytes = 0;
+ for (i = height - 1; i >= 0; i--) {
+ for (j = 0; j < width; j++) {
+ int offSet = *(fileBuffer + offset) * 4;
+ b = colorMap[offSet];
+ g = colorMap[offSet + 1];
+ r = colorMap[offSet + 2];
+ //*getXYData(&img, j, i) = mv_RGB2Color(r,g,b);
+ dcolor = rgb2color(r, g, b);
+ //putcolor2fb(&img, j, i, dcolor);
+ putcolor2mem(&s_surface[no], j + xpos, i + ypos, dcolor);
+ offset ++;
+ }
+ offset += bytes;
+ }
+ mem2fb(s, width, height, xpos, ypos);
+ break;
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+static void get_display_postion(const mv_surface *s, int disp_width, int disp_height, int *p_x, int *p_y)
+{
+ int pos_x = 0, pos_y = 0;
+
+ if(g_display_direction == 0 || g_display_direction == 2) {
+ if (disp_width > s->height)
+ printf("Warning : disp_width(%d) > LCD(%d)\r\n", disp_width, s->height);
+ else
+ pos_x = (s->height - disp_width) / 2;
+
+ if (disp_height > s->width)
+ printf("Warning : disp_height(%d) > LCD(%d)\r\n", disp_height, s->width);
+ else
+ pos_y = (s->width - disp_height) / 2;
+
+ } else {
+ if (disp_width > s->width)
+ printf("Warning : disp_width(%d) > LCD(%d)\r\n", disp_width, s->width);
+ else
+ pos_x = (s->width - disp_width) / 2;
+
+ if (disp_height > s->height)
+ printf("Warning : disp_height(%d) > LCD(%d)\r\n", disp_height, s->height);
+ else
+ pos_y = (s->height - disp_height) / 2;
+ }
+
+ *p_x = pos_x;
+ *p_y = pos_y;
+}
+
+int init_charge_percent(void)
+{
+ char *s;
+
+ s = getenv("wmt.ui.uboot.charging_percent");
+ if(s && !strcmp(s, "1"))
+ s_display_percent = 1;
+ else
+ s_display_percent = 0;
+
+ s_percent_val = -1;
+
+ return 0;
+}
+
+int clear_charge_percent(unsigned char *fileBuffer)
+{
+ int blank_width, anim_height;
+ mv_Rect rect;
+ int pos_x, pos_y;
+ bmp_header_t *header;
+ unsigned int logo_size;
+ int no;
+ mv_surface *s;
+
+ if(s_display_percent == 0)
+ return -1;
+
+ for(no = 0; no < VPP_VOUT_INFO_NUM; no++) {
+ s = &s_surface[no];
+ if(s->startAddr == 0)
+ continue;
+
+ if (*fileBuffer != 'B') {
+ //printf("Error : logo is Not BMP Format. Couldn't clear charging percent\n");
+ //return -1;
+ anim_height = 168;
+ } else {
+ if(!g_tf_boot) {
+ logo_size = (*(unsigned short *)(fileBuffer + 4) << 16) + (*(unsigned short *)(fileBuffer + 2));
+
+ fileBuffer = fileBuffer + logo_size;
+
+ if (*fileBuffer != 'B') {
+ //printf("Error : charge-anim is Not BMP Format. Couldn't clear charging percent\n");
+ //return -1;
+ anim_height = 168;
+ } else {
+ header = (bmp_header_t *)fileBuffer;
+ anim_height = mv_le_to_cpu((char *)&header->height, 4);
+ anim_height = anim_height / CHARGEANIM_PIC_NUM;
+ }
+ } else {
+ header = (bmp_header_t *)fileBuffer;
+ anim_height = mv_le_to_cpu((char *)&header->height, 4);
+ anim_height = anim_height / CHARGEANIM_PIC_NUM;
+ }
+ }
+
+ blank_width = 4 * CHAR_WIDTH; // clear 4 char
+
+ get_display_postion(s, blank_width, anim_height, &pos_x, &pos_y);
+
+ pos_y = pos_y - CHAR_HEIGHT - CHAR_HEIGHT;
+ if(pos_y < 0)
+ pos_y = 0;
+
+ rect.left = pos_x;
+ rect.right = pos_x + blank_width;
+ rect.top = pos_y;
+ rect.bottom = pos_y + CHAR_HEIGHT;
+
+ mv_fillRect(no, &rect, 0, 0, 0);
+ }
+
+ return 0;
+}
+
+int display_charge_percent(unsigned char *fileBuffer, int percent)
+{
+ int ret, len;
+ int text_width, anim_height;
+ char tmpbuf[20];
+ unsigned int rgb = 0xFF00; //green
+ char r, g, b;
+ int pos_x, pos_y;
+ bmp_header_t *header;
+ unsigned int logo_size;
+ int no;
+ mv_surface *s;
+
+ if(s_display_percent == 0)
+ return -1;
+
+ if(percent < 0 || percent > 100)
+ return -1;
+
+ if(percent != s_percent_val) {
+ ret = clear_charge_percent(fileBuffer);
+ if(ret)
+ return ret;
+
+ s_percent_val = percent;
+ } else
+ return 0;
+
+ for(no = 0; no < VPP_VOUT_INFO_NUM; no++) {
+ s = &s_surface[no];
+ if(s->startAddr == 0)
+ continue;
+
+ if (*fileBuffer != 'B') {
+ //printf("Error : logo is Not BMP Format. Couldn't display charging percent\n");
+ //return -1;
+ anim_height = 168;
+ } else {
+ if(!g_tf_boot) {
+ logo_size = (*(unsigned short *)(fileBuffer + 4) << 16) + (*(unsigned short *)(fileBuffer + 2));
+
+ fileBuffer = fileBuffer + logo_size;
+
+ if (*fileBuffer != 'B') {
+ //printf("Error : charge-anim is Not BMP Format. Couldn't display charging percent\n");
+ //return -1;
+ anim_height = 168;
+ } else {
+ header = (bmp_header_t *)fileBuffer;
+ anim_height = mv_le_to_cpu((char *)&header->height, 4);
+ anim_height = anim_height / CHARGEANIM_PIC_NUM;
+ }
+ } else {
+ header = (bmp_header_t *)fileBuffer;
+ anim_height = mv_le_to_cpu((char *)&header->height, 4);
+ anim_height = anim_height / CHARGEANIM_PIC_NUM;
+ }
+ }
+
+ len = sprintf(tmpbuf, "%d%%", percent);
+ tmpbuf[len] = '\0';
+ text_width = len * CHAR_WIDTH;
+
+ get_display_postion(s, text_width, anim_height, &pos_x, &pos_y);
+
+ pos_y = pos_y - CHAR_HEIGHT - CHAR_HEIGHT;
+ if(pos_y < 0)
+ pos_y = 0;
+
+ r = (rgb >> 16) & 0xFF;
+ g = (rgb >> 8) & 0xFF;
+ b = rgb & 0xFF;
+
+ mv_textOut(no, pos_x, pos_y, tmpbuf, r, g, b);
+ }
+
+ return 0;
+}
+
+static void hint_text(char *p_text, unsigned int rgb)
+{
+ int xpos, ypos;
+ int len, text_width, text_height;
+ mv_Rect rect;
+ char r, g, b;
+ int no;
+ mv_surface *s;
+
+ for(no = 0; no < VPP_VOUT_INFO_NUM; no++) {
+ s = &s_surface[no];
+ if(s->startAddr == 0)
+ continue;
+
+ len = strlen(p_text);
+
+ text_width = len * CHAR_WIDTH;
+ text_height = CHAR_HEIGHT;
+
+ get_display_postion(s, text_width, text_height, &xpos, &ypos);
+
+ rect.left = xpos;
+ rect.right = xpos + text_width;
+ rect.top = ypos;
+ rect.bottom = ypos + CHAR_HEIGHT;
+ mv_fillRect(no, &rect, 0, 0, 0);
+
+ r = (rgb >> 16) & 0xFF;
+ g = (rgb >> 8) & 0xFF;
+ b = rgb & 0xFF;
+
+ mv_textOut(no, xpos, ypos, p_text, r, g, b);
+ }
+}
+
+void show_text_to_screen(char *p_text, unsigned int rgb)
+{
+ if(!(g_display_vaild & DISPLAY_ENABLE)) {
+ if(display_init(0, 0) == -1) {
+ printf("Display init fail. Don't show_text_to_screen\n");
+ return;
+ }
+ }
+
+ mv_clearFB();
+
+ hint_text(p_text, rgb);
+
+ if (g_display_param.vout == VPP_VOUT_LCD)
+ lcd_blt_enable(g_pwm_setting.pwm_no, 1);
+
+}
+
+void show_text_to_screen_no_backlight(char *p_text, unsigned int rgb)
+{
+ if(!(g_display_vaild & DISPLAY_ENABLE))
+ return;
+
+ mv_clearFB();
+
+ hint_text(p_text, rgb);
+}
+
+static void hint_2lines_text(char *p_text1, char *p_text2, unsigned int rgb)
+{
+ int xpos, ypos;
+ int len, text_width, text_height;
+ mv_Rect rect;
+ char r, g, b;
+ int no;
+ mv_surface *s;
+
+ for(no = 0; no < 2; no++) {
+ s = &s_surface[no];
+ if(s->startAddr == 0)
+ continue;
+
+ if(strlen(p_text1) >= strlen(p_text2))
+ len = strlen(p_text1);
+ else
+ len = strlen(p_text2);
+
+ text_width = len * CHAR_WIDTH;
+ text_height = 2 * CHAR_HEIGHT + 10;
+
+ get_display_postion(s, text_width, text_height, &xpos, &ypos);
+
+ rect.left = xpos;
+ rect.right = xpos + text_width;
+ rect.top = ypos;
+ rect.bottom = ypos + text_height;
+ mv_fillRect(no, &rect, 0, 0, 0);
+
+ r = (rgb >> 16) & 0xFF;
+ g = (rgb >> 8) & 0xFF;
+ b = rgb & 0xFF;
+
+ mv_textOut(no, xpos, ypos, p_text1, r, g, b);
+ mv_textOut(no, xpos, ypos + CHAR_HEIGHT + 10, p_text2, r, g, b);
+ }
+}
+
+void show_2lines_text_to_screen(char *p_text1, char *p_text2, unsigned int rgb)
+{
+ if(!(g_display_vaild & DISPLAY_ENABLE)) {
+ if(display_init(0, 0) == -1) {
+ printf("Display init fail. Don't show_text_to_screen\n");
+ return;
+ }
+ }
+
+ mv_clearFB();
+
+ hint_2lines_text(p_text1, p_text2, rgb);
+
+ if (g_display_param.vout == VPP_VOUT_LCD)
+ lcd_blt_enable(g_pwm_setting.pwm_no, 1);
+
+}
+
+void show_2lines_text_to_screen_no_backlight(char *p_text1, char *p_text2, unsigned int rgb)
+{
+ if(!(g_display_vaild & DISPLAY_ENABLE))
+ return;
+
+ mv_clearFB();
+
+ hint_2lines_text(p_text1, p_text2, rgb);
+}
+
+int show_charge_picture(unsigned char *fileBuffer, int picture_no)
+{
+ int i, j, bytes;
+ unsigned char r, g, b;
+ bmp_header_t *header;
+ int width, height, offset;
+ short colorBits;
+ //mv_surface img;
+ unsigned int dcolor = 0;
+ int xpos, ypos;
+ unsigned int logo_size;
+ int no;
+ mv_surface *s;
+ unsigned char *buffer;
+
+ if(!g_tf_boot) {
+ if (*fileBuffer != 'B') {
+ printf("Error : logo is Not BMP Format\n");
+ if(picture_no == CHARGEANIM_PIC_NUM - 1)
+ hint_text("Low Battery", 0xFFFF00);
+ else
+ hint_text("Charging now ...", 0xFF00);
+ return -1;
+ }
+
+ logo_size = (*(unsigned short *)(fileBuffer + 4) << 16) + (*(unsigned short *)(fileBuffer + 2));
+
+ fileBuffer = fileBuffer + logo_size;
+
+ if (*fileBuffer != 'B') {
+ printf("Error : charge-anim is Not BMP Format\n");
+ if(picture_no == CHARGEANIM_PIC_NUM - 1)
+ hint_text("Low Battery", 0xFFFF00);
+ else
+ hint_text("Charging now ...", 0xFF00);
+
+ return -1;
+ }
+ } else {
+ if (*fileBuffer != 'B') {
+ printf("Error : charge-anim is Not BMP Format\n");
+ if(picture_no == CHARGEANIM_PIC_NUM - 1)
+ hint_text("Low Battery", 0xFFFF00);
+ else
+ hint_text("Charging now ...", 0xFF00);
+
+ return -1;
+ }
+ }
+
+ if(picture_no < 0 || picture_no >= CHARGEANIM_PIC_NUM) {
+ printf("Error : picture no (%d) error\n", picture_no);
+ return -1;
+ }
+
+ for(no = 0; no < VPP_VOUT_INFO_NUM; no++) {
+ s = &s_surface[no];
+ if(s->startAddr == 0)
+ continue;
+
+ buffer = fileBuffer;
+
+ header = (bmp_header_t *)buffer;
+ colorBits = mv_le_to_cpu((char *)&header->bit_count, 2);
+ if(colorBits != 24) {
+ printf("Error : charge_animation colorBits = %d, current only support 24bits\n",
+ colorBits);
+ return -1;
+ }
+
+ offset = mv_le_to_cpu((char *)&header->data_offset, 4);
+ width = mv_le_to_cpu((char *)&header->width, 4);
+ height = mv_le_to_cpu((char *)&header->height, 4);
+
+ height = height / CHARGEANIM_PIC_NUM;
+
+ get_display_postion(s, width, height, &xpos, &ypos);
+
+ buffer += (width * height * 3) * (6 - picture_no);
+
+ switch (colorBits) {
+ case 24: // r,g,b
+ bytes = 4 - (width * 3) % 4;
+ if (bytes == 4)
+ bytes = 0;
+ for (i = height - 1; i >= 0; i--) {
+ for (j = 0; j < width; j++) {
+ b = *(buffer + offset);
+ g = *(buffer + offset + 1);
+ r = *(buffer + offset + 2);
+ dcolor = rgb2color(r, g, b);
+
+ putcolor2mem(s, j + xpos, i + ypos, dcolor);
+ offset += 3;
+ }
+ offset += bytes;
+ }
+
+ mem2fb(s, width, height, xpos, ypos);
+ break;
+ }
+ }
+
+ return 0;
+}
+
+static int getGlyphIndex(unsigned short unicode)
+{
+ int i;
+ GlyphRange *const range = (GlyphRange *)(m_fh + 1);
+ GlyphScatter *start;
+ GlyphScatter *scatter;
+ int low;
+ int high;
+ int mid;
+ int glyphIndex = 1; // == 1 to skip missing lattice
+
+ for (i = 0 ; i < m_fh->rangeCount; i++) {
+ if ( unicode >= range[i].ucs2Start && unicode <= range[i].ucs2End) {
+ glyphIndex += (unicode - range[i].ucs2Start);
+ return glyphIndex;
+ }
+ glyphIndex += range[i].ucs2End - range[i].ucs2Start + 1;
+ }
+
+ start = (GlyphScatter *)(range + m_fh->rangeCount);
+ low = 0;
+ high = m_fh->scatterCount - 1;
+
+ while (low <= high) {
+ mid = (low + high) / 2;
+ scatter = start + mid;
+ if ( *scatter < unicode)
+ low = mid + 1;
+ else if ( *scatter > unicode)
+ high = mid - 1;
+ else
+ return(glyphIndex + mid);
+ }
+ return 0; // the missing glyph
+}
+
+
+static unsigned char *getLattice(int glyphIndex)
+{
+ return m_glyphStart + glyphIndex * m_fh->glyphBytes;
+}
+
+static int setFontFileDat(const unsigned char *dat)
+{
+ FontFileHeadV1 *fh = (FontFileHeadV1 *)dat;
+ if ( fh->magic[0] != 'F' || fh->magic[1] != 'T') {
+ return -1;
+ }
+
+ m_fileStart = (unsigned char * )dat;
+ m_fh = (FontFileHeadV1 *)m_fileStart;
+
+ m_glyphStart = m_fileStart + sizeof(FontFileHeadV1)
+ + m_fh->rangeCount * sizeof(GlyphRange)
+ + m_fh->scatterCount * sizeof(GlyphScatter);
+ return 0;
+}
+
+static void loadFontImage(int code, mv_surface *img)
+{
+ int idx = getGlyphIndex((unsigned short)code);
+
+ img->width = m_fh->charWidth;
+ img->height = m_fh->charHeight;
+ img->startAddr = (char *)getLattice(idx);
+}
+
+void mv_textOut(int no, int x, int y, const char *string, unsigned char r, unsigned char g, unsigned char b)
+{
+ mv_surface img;
+ const char *p;
+ const unsigned char *lattice;
+ int h, w;
+ unsigned int textColor = 0;
+ const mv_surface *s = &s_surface[no];
+
+ for (p = string; *p != '\0'; p++) {
+ loadFontImage(*p, &img);
+ lattice = (const unsigned char * )img.startAddr;
+ if (!lattice)
+ continue;
+
+ for ( h = 0 ; h < img.height; ++h) {
+ unsigned char mask = 0x80;
+ for ( w = 0 ; w < img.width; ++w) {
+ if (*lattice & mask) {
+ //*(getXYData(&s_primary, x + w, y + h)) = textColor;
+ textColor = rgb2color(r, g, b);
+ putcolor2fb(s, x + w, y + h, textColor);
+ }
+ mask >>= 1;
+ if ( mask == 0 ) {
+ mask = 0x80;
+ ++lattice; // next byte
+ }
+ }
+ if (mask != 0x80) {
+ ++lattice; // next byte
+ }
+ }
+
+ x += img.width;
+ }
+}
+
+void mem_cpy_alignment(char *des, char *src, int len)
+{
+ char *copy_some_src, *copy_some_dst;
+ int dst_alignment = (int)des % 4;
+ int src_alignment = (int)src % 4;
+ int i, tmp_len, len_less, len_less_4_byte;
+
+ int phase1, phase2;
+
+ // check dst, src ali
+ // all ali
+ if (!dst_alignment && !src_alignment) {
+ // check len 32bytes ali
+ phase1 = len_less = len % 32;
+ // len ali
+ if(!phase1 && len >= 32) {
+ mem_copy(src, des, len);
+ return;
+ } else {
+ // trans 32bytes ali data first
+ tmp_len = len - len_less;
+ if(len >= 32)
+ mem_copy(src, des, tmp_len);
+ // check len_less 4 bytes ali
+ phase2 = len_less % 4;
+ if(!phase2 && phase2 >= 4) {
+ less_mem_copy(src + tmp_len, des + tmp_len, len_less);
+ return;
+ } else {
+ // trans 4bytes ali data first
+ len_less = len_less - phase2;
+ if(len_less >= 4)
+ less_mem_copy(src + tmp_len, des + tmp_len, len_less);
+ // trans least bytes
+ for (i = 0; i < phase2; i++)
+ *(des + tmp_len + len_less + i) = *(src + tmp_len + len_less + i);
+ return;
+ }
+ }
+ }
+ tmp_len = len;
+ // dst not aligment, let dst alignment first
+ // ====================================================
+ copy_some_src = (char *)(src);
+ copy_some_dst = (char *)(des);
+ if (dst_alignment != 0) {
+ for (i = 0; i < 4 - dst_alignment; i++) {
+ *(des + i) = *(src + i);
+
+ // copy len
+ tmp_len = tmp_len - 1;
+
+ // copy complete
+ if (tmp_len <= 0)
+ return;
+ }
+
+ // src + bytes of already copy
+ copy_some_src = (char *)(src + ( 4 - dst_alignment)) ;
+ copy_some_dst = (char *)(des + ( 4 - dst_alignment)) ;
+ }
+ src_alignment = (int)copy_some_src % 4;
+
+ // ====================================================
+ // handle data len < 32bytes
+ if (tmp_len < 32) {
+ phase1 = len_less = tmp_len % 4;
+ // tmp_len 4bytes ali
+ if (!phase1 && tmp_len >= 4) {
+ switch (src_alignment) {
+ case 1:
+ byte1_less_bundle_copy (copy_some_src - src_alignment, copy_some_dst, tmp_len);
+ break;
+
+ case 2:
+ byte2_less_bundle_copy (copy_some_src - src_alignment, copy_some_dst, tmp_len);
+ break;
+
+ case 3:
+ byte3_less_bundle_copy (copy_some_src - src_alignment, copy_some_dst, tmp_len);
+ break;
+
+ default:
+ less_mem_copy (copy_some_src - src_alignment, copy_some_dst, tmp_len);
+ break;
+ }
+ return;
+ } else {
+ // trans 4bytes ali data first
+ len_less = tmp_len - phase1;
+ if(len_less >= 4)
+ switch (src_alignment) {
+ case 1:
+ byte1_less_bundle_copy (copy_some_src - src_alignment, copy_some_dst, len_less);
+ break;
+
+ case 2:
+ byte2_less_bundle_copy (copy_some_src - src_alignment, copy_some_dst, len_less);
+ break;
+
+ case 3:
+ byte3_less_bundle_copy (copy_some_src - src_alignment, copy_some_dst, len_less);
+ break;
+
+ default:
+ less_mem_copy (copy_some_src - src_alignment, copy_some_dst, len_less);
+ break;
+ }
+ // trans least bytes
+ for (i = 0; i < phase1; i++)
+ *(copy_some_dst + len_less + i) = *(copy_some_src + len_less + i);
+ return;
+ }
+ }
+ // ====================================================
+ phase1 = tmp_len % 32;
+ // data_len 32bytes ali
+ if (!phase1) {
+ switch (src_alignment) {
+ case 1:
+ byte1_alig_mem_copy (copy_some_src - src_alignment, copy_some_dst, tmp_len);
+ break;
+
+ case 2:
+ byte2_alig_mem_copy (copy_some_src - src_alignment, copy_some_dst, tmp_len);
+ break;
+
+ case 3:
+ byte3_alig_mem_copy (copy_some_src - src_alignment, copy_some_dst, tmp_len);
+ break;
+
+ default:
+ mem_copy (copy_some_src - src_alignment, copy_some_dst, tmp_len);
+ break;
+ }
+ return;
+ } else {
+ len_less = tmp_len - phase1;
+ // trans 32bytes ali data first
+ switch (src_alignment) {
+ case 1:
+ byte1_alig_mem_copy (copy_some_src - src_alignment, copy_some_dst, len_less);
+ break;
+
+ case 2:
+ byte2_alig_mem_copy (copy_some_src - src_alignment, copy_some_dst, len_less);
+ break;
+
+ case 3:
+ byte3_alig_mem_copy (copy_some_src - src_alignment, copy_some_dst, len_less);
+ break;
+
+ default:
+ mem_copy (copy_some_src - src_alignment, copy_some_dst, len_less);
+ break;
+ }
+ phase2 = phase1 % 4;
+ len_less_4_byte = phase1 - phase2;
+ // data_len 4bytes ali
+ if (!phase2) {
+ switch (src_alignment) {
+ case 1:
+ byte1_less_bundle_copy (copy_some_src - src_alignment + len_less, copy_some_dst + len_less, len_less_4_byte);
+ break;
+
+ case 2:
+ byte2_less_bundle_copy (copy_some_src - src_alignment + len_less, copy_some_dst + len_less, len_less_4_byte);
+ break;
+
+ case 3:
+ byte3_less_bundle_copy (copy_some_src - src_alignment + len_less, copy_some_dst + len_less, len_less_4_byte);
+ break;
+
+ default:
+ less_mem_copy (copy_some_src - src_alignment + len_less, copy_some_dst + len_less, len_less_4_byte);
+ break;
+ }
+ return;
+ } else {
+ // trans 4bytes ali data first
+ if(len_less_4_byte >= 4) {
+ switch (src_alignment) {
+ case 1:
+ byte1_less_bundle_copy (copy_some_src - src_alignment + len_less, copy_some_dst + len_less, len_less_4_byte);
+ break;
+
+ case 2:
+ byte2_less_bundle_copy (copy_some_src - src_alignment + len_less, copy_some_dst + len_less, len_less_4_byte);
+ break;
+
+ case 3:
+ byte3_less_bundle_copy (copy_some_src - src_alignment + len_less, copy_some_dst + len_less, len_less_4_byte);
+ break;
+
+ default:
+ less_mem_copy (copy_some_src - src_alignment + len_less, copy_some_dst + len_less, len_less_4_byte);
+ break;
+ }
+ }
+
+ // trans least bytes
+ for (i = 0; i < phase2; i++)
+ *(copy_some_dst + len_less + len_less_4_byte + i) = *(copy_some_src + len_less + len_less_4_byte + i);
+ return;
+ }
+ }
+}
+