source: azure_iot_hub_f767zi/trunk/asp_baseplatform/ui/snfont_disp/glcd_disp.c@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 60.7 KB
Line 
1/*
2 * TOPPERS BASE PLATFORM MIDDLEWARE
3 *
4 * Copyright (C) 2017-2019 by TOPPERS PROJECT
5 * Educational Working Group.
6 *
7 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
10 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
11 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
12 * スコード中に含まれていること.
13 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
14 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
15 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
16 * の無保証規定を掲載すること.
17 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
18 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
19 * と.
20 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
21 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
22 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
23 * 報告すること.
24 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
25 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
26 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
27 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
28 * 免責すること.
29 *
30 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
31 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
32 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
33 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
34 * の責任を負わない.
35 *
36 * $Id$
37 */
38/*
39 * GRAPHIC-LCDテキスト表示プログラムの本体
40 */
41
42#include <kernel.h>
43#include <t_syslog.h>
44#include <t_stdlib.h>
45#include <stdio.h>
46#include <string.h>
47#include <target_syssvc.h>
48#include "syssvc/serial.h"
49#include "syssvc/syslog.h"
50#ifndef NOT_USEFILFONT
51#include "fcntl.h"
52#endif
53#include "glcd_disp.h"
54
55/*
56 * 東雲漢字のイメージデータは以下のファイルにある
57 * 東雲フォントを使用する場合は、以下のフォントデータを
58 * デフォルトドライブのrootに置いてください
59 * shinonome_font12.fnt(12x12)
60 * shinonome_font16.fnt(16x16)
61 */
62
63
64#define NUM_FONT_WORK 2
65
66typedef struct font_work_s {
67 FILE *pffont;
68 uint8_t arrtibute;
69 uint8_t image_size;
70 uint16_t num_table2B;
71 uint32_t num_table3B;
72 uint32_t offset_image_2B;
73 uint32_t offset_image_3B;
74 uint8_t table[256];
75} font_work_t;
76
77#ifndef NOT_USEFILFONT
78/*
79 * 2バイトコード 1バイト目
80 */
81static const uint8_t Utf8CodeTable_2B_1st[][2] = {
82 {0xC2, 0x06},
83 {0xC3, 0x02},
84 {0xCE, 0x27},
85 {0xCF, 0x09},
86 {0xD0, 0x31},
87 {0xD1, 0x11}
88};
89
90/*
91 * 3バイトコード 1バイト目
92 */
93static const uint8_t Utf8CodeTable_3B_1st[][2] = {
94 {0xE2, 0x0E},
95 {0xE3, 0x04},
96 {0xE4, 0x08},
97 {0xE5, 0x40},
98 {0xE6, 0x40},
99 {0xE7, 0x3F},
100 {0xE8, 0x3F},
101 {0xE9, 0x3C},
102 {0xEF, 0x03}
103};
104
105/*
106 * 3バイトコード 2バイト目
107 */
108static const uint8_t Utf8CodeTable_3B_2nd[][2] = {
109 {0x80, 0x0E},
110 {0x84, 0x02},
111 {0x86, 0x04},
112 {0x87, 0x02},
113 {0x88, 0x14},
114 {0x89, 0x07},
115 {0x8A, 0x05},
116 {0x8C, 0x01},
117 {0x94, 0x1E},
118 {0x95, 0x02},
119 {0x96, 0x06},
120 {0x97, 0x06},
121 {0x98, 0x02},
122 {0x99, 0x05},
123 {0x80, 0x15},
124 {0x81, 0x3F},
125 {0x82, 0x37},
126 {0x83, 0x3B},
127 {0xB8, 0x1F},
128 {0xB9, 0x13},
129 {0xBA, 0x23},
130 {0xBB, 0x1E},
131 {0xBC, 0x13},
132 {0xBD, 0x1A},
133 {0xBE, 0x14},
134 {0xBF, 0x1A},
135 {0x80, 0x1A},
136 {0x81, 0x12},
137 {0x82, 0x0F},
138 {0x83, 0x13},
139 {0x84, 0x14},
140 {0x85, 0x21},
141 {0x86, 0x24},
142 {0x87, 0x1B},
143 {0x88, 0x1B},
144 {0x89, 0x1A},
145 {0x8A, 0x17},
146 {0x8B, 0x1C},
147 {0x8C, 0x1A},
148 {0x8D, 0x21},
149 {0x8E, 0x11},
150 {0x8F, 0x24},
151 {0x90, 0x1E},
152 {0x91, 0x14},
153 {0x92, 0x16},
154 {0x93, 0x13},
155 {0x94, 0x0E},
156 {0x95, 0x0F},
157 {0x96, 0x17},
158 {0x97, 0x0D},
159 {0x98, 0x0E},
160 {0x99, 0x0D},
161 {0x9A, 0x0D},
162 {0x9B, 0x17},
163 {0x9C, 0x16},
164 {0x9D, 0x0E},
165 {0x9E, 0x0C},
166 {0x9F, 0x12},
167 {0xA0, 0x13},
168 {0xA1, 0x14},
169 {0xA2, 0x0F},
170 {0xA3, 0x1D},
171 {0xA4, 0x1A},
172 {0xA5, 0x1A},
173 {0xA6, 0x13},
174 {0xA7, 0x12},
175 {0xA8, 0x0F},
176 {0xA9, 0x0A},
177 {0xAA, 0x06},
178 {0xAB, 0x0E},
179 {0xAC, 0x0B},
180 {0xAD, 0x1A},
181 {0xAE, 0x21},
182 {0xAF, 0x22},
183 {0xB0, 0x1F},
184 {0xB1, 0x19},
185 {0xB2, 0x11},
186 {0xB3, 0x0F},
187 {0xB4, 0x0F},
188 {0xB5, 0x0B},
189 {0xB6, 0x0E},
190 {0xB7, 0x1A},
191 {0xB8, 0x15},
192 {0xB9, 0x1C},
193 {0xBA, 0x14},
194 {0xBB, 0x21},
195 {0xBC, 0x1F},
196 {0xBD, 0x1B},
197 {0xBE, 0x1F},
198 {0xBF, 0x14},
199 {0x80, 0x16},
200 {0x81, 0x1C},
201 {0x82, 0x1C},
202 {0x83, 0x17},
203 {0x84, 0x16},
204 {0x85, 0x20},
205 {0x86, 0x14},
206 {0x87, 0x16},
207 {0x88, 0x1D},
208 {0x89, 0x17},
209 {0x8A, 0x19},
210 {0x8B, 0x22},
211 {0x8C, 0x11},
212 {0x8D, 0x12},
213 {0x8E, 0x1C},
214 {0x8F, 0x12},
215 {0x90, 0x0F},
216 {0x91, 0x09},
217 {0x92, 0x12},
218 {0x93, 0x18},
219 {0x94, 0x14},
220 {0x95, 0x16},
221 {0x96, 0x1B},
222 {0x97, 0x19},
223 {0x98, 0x17},
224 {0x99, 0x17},
225 {0x9A, 0x15},
226 {0x9B, 0x18},
227 {0x9C, 0x1F},
228 {0x9D, 0x1F},
229 {0x9E, 0x17},
230 {0x9F, 0x1C},
231 {0xA0, 0x12},
232 {0xA1, 0x17},
233 {0xA2, 0x1A},
234 {0xA3, 0x16},
235 {0xA4, 0x1C},
236 {0xA5, 0x1A},
237 {0xA6, 0x12},
238 {0xA7, 0x17},
239 {0xA8, 0x1A},
240 {0xA9, 0x0D},
241 {0xAA, 0x10},
242 {0xAB, 0x0D},
243 {0xAC, 0x12},
244 {0xAD, 0x19},
245 {0xAE, 0x1A},
246 {0xAF, 0x10},
247 {0xB0, 0x0D},
248 {0xB1, 0x15},
249 {0xB2, 0x1B},
250 {0xB3, 0x16},
251 {0xB4, 0x14},
252 {0xB5, 0x11},
253 {0xB6, 0x0E},
254 {0xB7, 0x1B},
255 {0xB8, 0x1C},
256 {0xB9, 0x10},
257 {0xBA, 0x13},
258 {0xBB, 0x14},
259 {0xBC, 0x13},
260 {0xBD, 0x11},
261 {0xBE, 0x0F},
262 {0xBF, 0x16},
263 {0x80, 0x12},
264 {0x81, 0x0A},
265 {0x82, 0x0D},
266 {0x83, 0x09},
267 {0x84, 0x09},
268 {0x85, 0x0F},
269 {0x86, 0x0D},
270 {0x87, 0x16},
271 {0x88, 0x12},
272 {0x89, 0x15},
273 {0x8A, 0x0E},
274 {0x8B, 0x15},
275 {0x8C, 0x12},
276 {0x8D, 0x0E},
277 {0x8E, 0x09},
278 {0x8F, 0x0F},
279 {0x90, 0x0D},
280 {0x91, 0x12},
281 {0x92, 0x07},
282 {0x93, 0x11},
283 {0x94, 0x1D},
284 {0x95, 0x20},
285 {0x96, 0x18},
286 {0x97, 0x18},
287 {0x98, 0x0D},
288 {0x99, 0x19},
289 {0x9A, 0x15},
290 {0x9B, 0x19},
291 {0x9C, 0x13},
292 {0x9D, 0x0D},
293 {0x9E, 0x10},
294 {0x9F, 0x10},
295 {0xA0, 0x0D},
296 {0xA1, 0x08},
297 {0xA2, 0x14},
298 {0xA3, 0x0F},
299 {0xA4, 0x0D},
300 {0xA5, 0x16},
301 {0xA6, 0x14},
302 {0xA7, 0x12},
303 {0xA8, 0x16},
304 {0xA9, 0x16},
305 {0xAA, 0x13},
306 {0xAB, 0x20},
307 {0xAC, 0x15},
308 {0xAD, 0x17},
309 {0xAE, 0x15},
310 {0xAF, 0x13},
311 {0xB0, 0x13},
312 {0xB1, 0x11},
313 {0xB2, 0x1C},
314 {0xB3, 0x16},
315 {0xB4, 0x1F},
316 {0xB5, 0x1A},
317 {0xB6, 0x1A},
318 {0xB7, 0x16},
319 {0xB8, 0x19},
320 {0xB9, 0x18},
321 {0xBA, 0x0E},
322 {0xBC, 0x03},
323 {0xBD, 0x17},
324 {0xBE, 0x18},
325 {0xBF, 0x12},
326 {0x80, 0x16},
327 {0x81, 0x16},
328 {0x82, 0x19},
329 {0x83, 0x14},
330 {0x84, 0x10},
331 {0x85, 0x14},
332 {0x86, 0x18},
333 {0x87, 0x19},
334 {0x88, 0x1E},
335 {0x89, 0x15},
336 {0x8A, 0x12},
337 {0x8B, 0x17},
338 {0x8C, 0x16},
339 {0x8D, 0x0D},
340 {0x8E, 0x12},
341 {0x8F, 0x15},
342 {0x90, 0x12},
343 {0x91, 0x14},
344 {0x92, 0x10},
345 {0x93, 0x11},
346 {0x94, 0x10},
347 {0x95, 0x13},
348 {0x96, 0x17},
349 {0x97, 0x11},
350 {0x98, 0x0E},
351 {0x99, 0x0E},
352 {0x9A, 0x0D},
353 {0x9B, 0x16},
354 {0x9C, 0x13},
355 {0x9D, 0x13},
356 {0x9E, 0x0A},
357 {0x9F, 0x0F},
358 {0xA0, 0x0F},
359 {0xA1, 0x19},
360 {0xA2, 0x14},
361 {0xA3, 0x17},
362 {0xA4, 0x10},
363 {0xA5, 0x13},
364 {0xA6, 0x19},
365 {0xA7, 0x0A},
366 {0xA8, 0x1A},
367 {0xA9, 0x18},
368 {0xAA, 0x1B},
369 {0xAB, 0x1C},
370 {0xAC, 0x18},
371 {0xAD, 0x15},
372 {0xAE, 0x0B},
373 {0xB0, 0x03},
374 {0xB1, 0x12},
375 {0xB2, 0x22},
376 {0xB3, 0x1B},
377 {0xB4, 0x0C},
378 {0xB5, 0x0A},
379 {0xB6, 0x09},
380 {0xB7, 0x13},
381 {0xB8, 0x0C},
382 {0xB9, 0x12},
383 {0xBA, 0x13},
384 {0xBB, 0x12},
385 {0xBC, 0x18},
386 {0xBD, 0x0F},
387 {0xBE, 0x12},
388 {0xBF, 0x16},
389 {0x80, 0x23},
390 {0x81, 0x27},
391 {0x82, 0x12},
392 {0x83, 0x0C},
393 {0x84, 0x06},
394 {0x85, 0x15},
395 {0x86, 0x12},
396 {0x87, 0x1B},
397 {0x88, 0x0B},
398 {0x89, 0x0F},
399 {0x8A, 0x0E},
400 {0x8B, 0x0B},
401 {0x8C, 0x13},
402 {0x8D, 0x0D},
403 {0x8E, 0x0B},
404 {0x8F, 0x0C},
405 {0x90, 0x0E},
406 {0x91, 0x12},
407 {0x92, 0x01},
408 {0x95, 0x01},
409 {0x96, 0x1B},
410 {0x97, 0x0D},
411 {0x98, 0x09},
412 {0x99, 0x1D},
413 {0x9A, 0x1E},
414 {0x9B, 0x1C},
415 {0x9C, 0x18},
416 {0x9D, 0x18},
417 {0x9E, 0x12},
418 {0x9F, 0x0E},
419 {0xA0, 0x19},
420 {0xA1, 0x12},
421 {0xA2, 0x05},
422 {0xA3, 0x11},
423 {0xA4, 0x14},
424 {0xA5, 0x0A},
425 {0xA6, 0x0C},
426 {0xA7, 0x15},
427 {0xA8, 0x0C},
428 {0xA9, 0x10},
429 {0xAA, 0x05},
430 {0xAB, 0x15},
431 {0xAC, 0x11},
432 {0xAD, 0x0E},
433 {0xAE, 0x10},
434 {0xAF, 0x13},
435 {0xB0, 0x19},
436 {0xB1, 0x0A},
437 {0xB3, 0x09},
438 {0xB4, 0x13},
439 {0xB5, 0x11},
440 {0xB6, 0x0D},
441 {0xB7, 0x0F},
442 {0xB8, 0x03},
443 {0xB9, 0x05},
444 {0xBA, 0x17},
445 {0xBB, 0x19},
446 {0xBC, 0x0A},
447 {0xBD, 0x12},
448 {0xBE, 0x05},
449 {0xBC, 0x3D},
450 {0xBD, 0x1F},
451 {0xBF, 0x05}
452};
453
454/*
455 * 2バイトコード 2バイト目
456 */
457static const uint8_t Utf8CodeTable_2B_2nd[] = {
458 0xA7, 0xA8, 0xB0, 0xB1, 0xB4, 0xB6, 0x97, 0xB7, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, /* 0000-0015 */
459 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, /* 0016-0031 */
460 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x80, /* 0032-0047 */
461 0x81, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x81, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* 0048-0063 */
462 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, /* 0064-0079 */
463 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, /* 0080-0095 */
464 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, /* 0096-0111 */
465 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x91 /* 0112-0121 */
466};
467
468// 3バイトコード 3バイト目 bitmapデータ
469static const uint8_t Utf8CodeTable_3B_3rd[] = {
470 0x90, 0x95, 0x98, 0x99, 0x9C, 0x9D, 0xA0, 0xA1, 0xA5, 0xA6, 0xB0, 0xB2, 0xB3, 0xBB, 0x83, 0xAB, /* 0000-0015 */
471 0x90, 0x91, 0x92, 0x93, 0x92, 0x94, 0x80, 0x82, 0x83, 0x87, 0x88, 0x8B, 0x9A, 0x9D, 0x9E, 0xA0, /* 0016-0031 */
472 0xA5, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xB4, 0xB5, 0xBD, 0x92, 0xA0, 0xA1, 0xA6, 0xA7, 0xAA, /* 0032-0047 */
473 0xAB, 0x82, 0x83, 0x86, 0x87, 0xA5, 0x92, 0x80, 0x81, 0x82, 0x83, 0x8C, 0x8F, 0x90, 0x93, 0x94, /* 0048-0063 */
474 0x97, 0x98, 0x9B, 0x9C, 0x9D, 0xA0, 0xA3, 0xA4, 0xA5, 0xA8, 0xAB, 0xAC, 0xAF, 0xB0, 0xB3, 0xB4, /* 0064-0079 */
475 0xB7, 0xB8, 0xBB, 0xBC, 0xBF, 0x82, 0x8B, 0xA0, 0xA1, 0xB2, 0xB3, 0xBC, 0xBD, 0x86, 0x87, 0x8B, /* 0080-0095 */
476 0x8E, 0x8F, 0xAF, 0x85, 0x86, 0x80, 0x82, 0xAA, 0xAD, 0xAF, 0x80, 0x81, 0x82, 0x83, 0x85, 0x86, /* 0096-0111 */
477 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x81, /* 0112-0127 */
478 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, /* 0128-0143 */
479 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, /* 0144-0159 */
480 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, /* 0160-0175 */
481 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x80, 0x81, /* 0176-0191 */
482 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, /* 0192-0207 */
483 0x92, 0x93, 0x9B, 0x9C, 0x9D, 0x9E, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, /* 0208-0223 */
484 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, /* 0224-0239 */
485 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, /* 0240-0255 */
486 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, /* 0256-0271 */
487 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, /* 0272-0287 */
488 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xBB, 0xBC, 0xBD, 0xBE, /* 0288-0303 */
489 0x80, 0x81, 0x83, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8D, 0x8E, 0x90, 0x91, 0x94, 0x95, 0x96, 0x97, /* 0304-0319 */
490 0x98, 0x99, 0x9E, 0xA1, 0xA6, 0xAA, 0xAD, 0xB1, 0xB2, 0xB6, 0xB8, 0xB9, 0xBB, 0xBC, 0xBF, 0x82, /* 0320-0335 */
491 0x83, 0x85, 0x8B, 0x8D, 0x8E, 0x8F, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9D, 0x9E, 0x9F, 0xA2, 0xB1, /* 0336-0351 */
492 0xB3, 0xBE, 0x80, 0x82, 0x85, 0x86, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8E, 0x91, 0x92, 0x94, 0x95, /* 0352-0367 */
493 0x98, 0x99, 0x9B, 0x9C, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA4, 0xA5, 0xA6, 0xA8, 0xAB, 0xAC, 0xAD, /* 0368-0383 */
494 0xAE, 0xB0, 0xB3, 0xB6, 0xBA, 0x80, 0x81, 0x82, 0x84, 0x86, 0x87, 0x8A, 0x8B, 0x8D, 0x8E, 0x8F, /* 0384-0399 */
495 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9D, 0x9E, 0x9F, 0xA3, 0xA4, 0xA5, 0xAD, 0xAE, 0xB0, 0xB2, /* 0400-0415 */
496 0xB6, 0xB7, 0xBB, 0x81, 0x89, 0x8A, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x9A, 0x9C, 0x9D, 0xAF, 0xB0, /* 0416-0431 */
497 0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBD, 0x83, 0x86, 0x87, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x93, 0x95, /* 0432-0447 */
498 0x97, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0xA9, 0xAF, 0xB0, 0xB3, 0xB5, 0xB6, 0xBB, 0xBC, 0xBF, /* 0448-0463 */
499 0x83, 0x86, 0x88, 0x8B, 0x8D, 0x8F, 0x91, 0x96, 0x98, 0x9B, 0x9D, 0xA0, 0xA1, 0xAB, 0xAD, 0xAE, /* 0464-0479 */
500 0xAF, 0xB5, 0xB6, 0xBF, 0x82, 0x83, 0x84, 0x8A, 0x8E, 0x90, 0x91, 0x94, 0x97, 0x98, 0x9A, 0x9B, /* 0480-0495 */
501 0x9D, 0x9F, 0xA1, 0xA3, 0xA4, 0xA5, 0xAE, 0xAF, 0xB3, 0xB5, 0xB6, 0xB8, 0xBA, 0xBE, 0x85, 0x86, /* 0496-0511 */
502 0x89, 0x8B, 0x8D, 0x8F, 0x91, 0x92, 0x94, 0x96, 0x99, 0x9A, 0x9F, 0xA1, 0xA3, 0xA4, 0xA5, 0xA6, /* 0512-0527 */
503 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xB6, 0xB9, 0x83, 0x87, 0x88, 0x89, 0x8F, 0x90, 0x95, 0x96, /* 0528-0543 */
504 0x9A, 0x9C, 0xA5, 0xAC, 0xB2, 0xB4, 0xB5, 0xB6, 0xB8, 0xBD, 0x80, 0x85, 0x8D, 0x91, 0x98, 0x99, /* 0544-0559 */
505 0x9A, 0xAC, 0xAD, 0xB2, 0xB3, 0xB4, 0xB5, 0xB7, 0xBE, 0x82, 0x85, 0x89, 0x8A, 0x8D, 0x8F, 0x91, /* 0560-0575 */
506 0x95, 0x96, 0x9A, 0x9E, 0xA3, 0xA5, 0xA7, 0xAD, 0xAE, 0xB5, 0xB9, 0xBB, 0x80, 0x81, 0x82, 0x84, /* 0576-0591 */
507 0x89, 0x92, 0x94, 0x95, 0x96, 0x98, 0x9A, 0x9F, 0xA1, 0xAA, 0xB2, 0xB7, 0xBA, 0xBB, 0xBC, 0xBF, /* 0592-0607 */
508 0x80, 0x81, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8B, 0x8C, 0x8D, 0x8E, 0x90, 0x92, 0x94, /* 0608-0623 */
509 0x9A, 0x9C, 0xA2, 0xA5, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xB1, 0xB5, 0xB6, 0xB7, 0xB8, /* 0624-0639 */
510 0xBC, 0x80, 0x82, 0x85, 0x86, 0x89, 0x8A, 0x8C, 0x8D, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x95, 0x96, /* 0640-0655 */
511 0x97, 0x99, 0xA0, 0xA2, 0xA4, 0xA5, 0xA6, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xB0, 0xB1, 0xB2, 0xB3, /* 0656-0671 */
512 0xB4, 0xB5, 0xB6, 0xB7, 0xBD, 0x84, 0x85, 0x86, 0x89, 0x8B, 0x8C, 0x8D, 0x96, 0x9B, 0x9C, 0x9D, /* 0672-0687 */
513 0xA0, 0xA1, 0xA6, 0xA7, 0xA9, 0xAA, 0xAD, 0xB0, 0xB1, 0xB5, 0xB6, 0xB8, 0xB9, 0xBA, 0xBD, 0xBE, /* 0688-0703 */
514 0x80, 0x83, 0x84, 0x86, 0x87, 0x88, 0x8A, 0x8B, 0x8E, 0x91, 0x94, 0x97, 0x9D, 0xA4, 0xA5, 0xA7, /* 0704-0719 */
515 0xA9, 0xAA, 0xAE, 0xB0, 0xB3, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0x83, 0x84, 0x87, 0x8A, 0x8B, /* 0720-0735 */
516 0x8C, 0x8D, 0x8F, 0x94, 0x96, 0x9B, 0x9E, 0xA3, 0xA4, 0xA5, 0xA9, 0xAA, 0xAF, 0xB0, 0xB1, 0xB2, /* 0736-0751 */
517 0xB3, 0xB4, 0xB5, 0xBD, 0xBF, 0x83, 0x87, 0x88, 0x89, 0x8D, 0x91, 0x92, 0x94, 0x9B, 0x9F, 0xA0, /* 0752-0767 */
518 0xA3, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xB1, 0xB4, 0xB5, 0xB9, 0xBC, 0xBE, 0x81, 0x83, 0x85, 0x87, /* 0768-0783 */
519 0x89, 0x8D, 0x92, 0x95, 0x97, 0x98, 0x99, 0x9D, 0x9E, 0x9F, 0xA0, 0xA2, 0xA3, 0xA4, 0xA6, 0xA7, /* 0784-0799 */
520 0xB2, 0xB3, 0xB5, 0xB8, 0xB9, 0xBA, 0xBE, 0xBF, 0x81, 0x82, 0x85, 0x86, 0x88, 0x8D, 0x8F, 0x90, /* 0800-0815 */
521 0x95, 0x96, 0x97, 0x99, 0x9A, 0x9D, 0xA0, 0xA1, 0xA3, 0xAA, 0xAF, 0xB1, 0xB3, 0xB8, 0xB9, 0xBA, /* 0816-0831 */
522 0xBB, 0xBF, 0x80, 0x81, 0x83, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8D, 0x91, 0x92, 0x93, 0x94, /* 0832-0847 */
523 0x97, 0x98, 0x9A, 0x9C, 0x9E, 0xA0, 0xA6, 0xA9, 0xAE, 0xAF, 0xB0, 0xB1, 0xB3, 0xB4, 0xB5, 0xB7, /* 0848-0863 */
524 0xB8, 0xBB, 0xBF, 0x82, 0x84, 0x96, 0x98, 0x9A, 0x9F, 0xA0, 0xA5, 0xA6, 0xA8, 0xA9, 0xAD, 0xAE, /* 0864-0879 */
525 0xB0, 0xB3, 0xB6, 0xBB, 0x82, 0x83, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x94, 0x96, 0x97, /* 0880-0895 */
526 0x99, 0x9B, 0x9F, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, /* 0896-0911 */
527 0xB0, 0xB1, 0xB2, 0xB3, 0xB6, 0xB7, 0xB8, 0xBA, 0x81, 0x83, 0x84, 0x88, 0x89, 0x8A, 0x8B, 0x8C, /* 0912-0927 */
528 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x9B, 0x9D, 0x9F, 0xA0, 0xA6, 0xA9, 0xAB, 0xAC, 0xAD, 0xAE, 0xB6, /* 0928-0943 */
529 0xB8, 0xB9, 0xBB, 0xBC, 0xBD, 0xBE, 0x80, 0x82, 0x86, 0x88, 0x89, 0x8A, 0x8E, 0x91, 0x9F, 0xA8, /* 0944-0959 */
530 0xAA, 0xB0, 0xB1, 0xB3, 0xB5, 0xB6, 0xB7, 0xBB, 0xBC, 0xBD, 0x80, 0x84, 0x86, 0x8B, 0x8C, 0x8E, /* 0960-0975 */
531 0x8F, 0x90, 0x92, 0xA2, 0xA4, 0xA5, 0xA8, 0xAB, 0xAC, 0xAF, 0xB2, 0xB3, 0xB8, 0xBC, 0xBD, 0xBE, /* 0976-0991 */
532 0x80, 0x81, 0x82, 0x84, 0x87, 0x88, 0x89, 0x98, 0xA1, 0xA2, 0xA5, 0xA6, 0xA8, 0xA9, 0xAD, 0xAE, /* 0992-1007 */
533 0xB2, 0xBA, 0xBD, 0x84, 0x86, 0x87, 0x8F, 0x90, 0x94, 0x96, 0xAE, 0xAF, 0xB1, 0xB3, 0xB8, 0xB9, /* 1008-1023 */
534 0xBE, 0x80, 0x84, 0x85, 0x86, 0x8C, 0x8F, 0x93, 0x96, 0x97, 0x9C, 0x9D, 0xA3, 0xBB, 0xBC, 0xBE,
535 0x80, 0x83, 0x84, 0x87, 0x89, 0x8A, 0x8B, 0x98, 0x99, 0x9A, 0x9C, 0x9D, 0x9E, 0x9F, 0xA7, 0xA8,
536 0xA9, 0xAA, 0xAB, 0xAC, 0xAE, 0xB0, 0xB6, 0x84, 0x85, 0x87, 0x94, 0x9A, 0x9C, 0x9F, 0xA3, 0xA4,
537 0xB7, 0xB9, 0xBD, 0xBE, 0x86, 0x89, 0x94, 0x96, 0x97, 0x98, 0x9B, 0xA9, 0xAF, 0xB1, 0xB2, 0xB4,
538 0xB6, 0xB8, 0x82, 0x8C, 0x8E, 0x90, 0x9B, 0xA4, 0xA8, 0xAA, 0xAB, 0xAC, 0xB4, 0xB8, 0xBA, 0x80,
539 0x86, 0x87, 0x8A, 0x8F, 0x94, 0xA0, 0xA2, 0xA5, 0xAE, 0xB4, 0xB6, 0xBC, 0x80, 0x81, 0x82, 0x83,
540 0x88, 0x8E, 0x91, 0x93, 0x97, 0x98, 0x9A, 0x9B, 0x9E, 0xA0, 0xA3, 0xAE, 0xB0, 0xB2, 0xB3, 0xB9,
541 0xBA, 0xBD, 0xBF, 0x80, 0x83, 0x84, 0x88, 0x89, 0x8B, 0x8D, 0x8F, 0x92, 0x93, 0x96, 0x98, 0x9C,
542 0x9F, 0xA6, 0xA7, 0xA8, 0xAD, 0xB0, 0xB7, 0xB8, 0xBB, 0x80, 0x82, 0x87, 0x8A, 0x8E, 0x8F, 0x90,
543 0x91, 0xA1, 0xA4, 0xA6, 0xA9, 0xAA, 0xBF, 0x82, 0x88, 0x89, 0x8B, 0x93, 0xA0, 0xA2, 0xA3, 0xA4,
544 0xAA, 0xB0, 0xB3, 0x80, 0x83, 0x86, 0x8B, 0x8E, 0x92, 0x93, 0x94, 0x96, 0x9C, 0x9F, 0xA0, 0xA3,
545 0xB4, 0xB7, 0xB9, 0xBA, 0xBC, 0x80, 0x82, 0x85, 0x86, 0x8A, 0x8B, 0x95, 0x99, 0x9D, 0xA1, 0xA4,
546 0xAA, 0xAF, 0xB0, 0xB1, 0xB4, 0xB5, 0xBA, 0xBD, 0x80, 0x81, 0x8A, 0x8B, 0x91, 0x92, 0x94, 0x97,
547 0x98, 0x99, 0x9A, 0x9E, 0xA2, 0xA9, 0xAB, 0xB0, 0xB2, 0xB5, 0xB9, 0xBE, 0x83, 0x85, 0x93, 0x97,
548 0x9C, 0x9F, 0xA8, 0xAB, 0xAE, 0xB3, 0xB8, 0xB9, 0xBA, 0xBB, 0xBE, 0x81, 0x85, 0x87, 0x8A, 0x8C,
549 0x91, 0x93, 0x95, 0x97, 0x98, 0x99, 0x9C, 0x9E, 0x9F, 0xA4, 0xA5, 0xAB, 0xAC, 0xAE, 0xAF, 0xB0,
550 0xB1, 0xB2, 0xB7, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x82, 0x89, 0x8A, 0x8F, 0x90, 0x95, 0x96, 0x98,
551 0x99, 0x9A, 0x9B, 0x9C, 0xA2, 0xA5, 0xA7, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xB1, 0xB2, 0xB7,
552 0xB8, 0xBE, 0x84, 0x87, 0x88, 0x89, 0x8E, 0x8F, 0x90, 0x91, 0x94, 0x95, 0x97, 0x98, 0x9A, 0xA0,
553 0xA2, 0xA5, 0xA7, 0xA8, 0xA9, 0xAA, 0xAC, 0xAE, 0xB3, 0xB4, 0xB8, 0xBD, 0x81, 0x82, 0x83, 0x84,
554 0x8A, 0x8D, 0x93, 0x96, 0x99, 0x9B, 0x9D, 0xA3, 0xA5, 0xA8, 0xAC, 0xB2, 0xB9, 0xBB, 0xBE, 0x86,
555 0x89, 0x8B, 0x90, 0x91, 0x93, 0x94, 0x99, 0x9A, 0x9C, 0xA5, 0xA6, 0xA8, 0xAA, 0xAB, 0xB6, 0xBB,
556 0xBF, 0x81, 0x83, 0x89, 0x91, 0x98, 0x9A, 0x9C, 0x9F, 0xA0, 0xA5, 0xA9, 0xAF, 0xB5, 0xB6, 0xBC,
557 0x80, 0x81, 0x86, 0x89, 0x9A, 0xA2, 0xA6, 0xAA, 0xAC, 0xBF, 0x92, 0x9A, 0x9B, 0xBC, 0xBD, 0xBE,
558 0x81, 0x82, 0x89, 0x8B, 0x8C, 0x90, 0x96, 0x97, 0xA1, 0xA3, 0xA6, 0xA9, 0xBA, 0xBB, 0x89, 0x8B,
559 0x8C, 0x96, 0xA2, 0xAA, 0xAC, 0xB0, 0xB2, 0xB6, 0xBE, 0x80, 0x83, 0x85, 0x90, 0x91, 0x94, 0x95,
560 0x97, 0x98, 0x9A, 0x9B, 0x9C, 0x9D, 0x9F, 0xA3, 0xA4, 0xA5, 0xA6, 0xA9, 0xAB, 0xB0, 0xB1, 0xB3,
561 0xB5, 0xB8, 0xBA, 0x80, 0x83, 0x85, 0x87, 0x88, 0x89, 0x8B, 0x8C, 0x8D, 0x8F, 0x95, 0x97, 0x98,
562 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9F, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xAE, 0xB0, 0xB3, 0xB4, 0xB5,
563 0xB6, 0xB8, 0xB9, 0xBF, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x89, 0x8C, 0x90, 0x92, 0x93, 0x94,
564 0x9B, 0x9D, 0x9E, 0x9F, 0xA1, 0xA2, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAB, 0xAE, 0xB0, 0xB3,
565 0xB5, 0xB6, 0xB8, 0xBA, 0xBE, 0xBF, 0x81, 0x82, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B,
566 0x8D, 0x8E, 0x8F, 0x91, 0x93, 0x96, 0x9A, 0xA0, 0xA2, 0xA4, 0xA8, 0xAD, 0xB1, 0xB8, 0xB9, 0xBA,
567 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0x80, 0x81, 0x85, 0x86, 0x88, 0x8A, 0x8B, 0x8D, 0x8E, 0x8F, 0x90,
568 0x91, 0x93, 0x95, 0x9E, 0xA0, 0xA1, 0xA4, 0xA5, 0xAC, 0xAE, 0xAF, 0xB1, 0xB6, 0xB9, 0x8C, 0x90,
569 0x91, 0x94, 0xA1, 0xA8, 0xA9, 0xAB, 0xAC, 0xB1, 0xB3, 0xB6, 0xB7, 0xB8, 0xBB, 0xBC, 0xBE, 0x85,
570 0x87, 0x99, 0xA0, 0xA1, 0xA8, 0xA9, 0xAA, 0xAD, 0xAF, 0xB0, 0xB6, 0xBA, 0xBB, 0xBD, 0x87, 0x8B,
571 0x8E, 0x91, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9F, 0xA2, 0xA9, 0x8B, 0x8C, 0x8E,
572 0x90, 0x92, 0x9C, 0xA9, 0xAC, 0xAF, 0xB3, 0xB6, 0x82, 0x84, 0x87, 0x8B, 0x8C, 0x90, 0x9D, 0xA2,
573 0xAC, 0xAE, 0xB7, 0xBA, 0xBC, 0xBD, 0x89, 0x8C, 0x8D, 0x92, 0x93, 0x96, 0x9B, 0x9D, 0x9E, 0xA1,
574 0xA3, 0xA5, 0xA6, 0xA7, 0xA8, 0xAB, 0xAE, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB7, 0xBB, 0xBD, 0xBE,
575 0x82, 0x83, 0x86, 0x8B, 0x8C, 0x91, 0x96, 0x99, 0x9A, 0x9B, 0x9D, 0xA5, 0xAB, 0xAD, 0xAF, 0xB0,
576 0xB3, 0xB6, 0xB7, 0xB8, 0xBD, 0x80, 0x83, 0x84, 0x85, 0x87, 0x8C, 0x8E, 0x94, 0x95, 0x97, 0x9F,
577 0xA1, 0xA2, 0xA3, 0xA4, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE,
578 0xBF, 0x81, 0x83, 0x84, 0x87, 0x8A, 0x8F, 0x95, 0x96, 0x97, 0x9A, 0x9C, 0xA0, 0xA6, 0xA7, 0xAB,
579 0xAD, 0xB5, 0xB6, 0xB7, 0xB8, 0x81, 0x82, 0x83, 0x88, 0x89, 0x8A, 0x8F, 0x90, 0x93, 0x96, 0x9A,
580 0x9B, 0x9D, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA8, 0xA9, 0xAC, 0xB0, 0xB1, 0xB3, 0xB4, 0xB6, 0xB7,
581 0xB8, 0xBA, 0xBB, 0xBC, 0xBE, 0xBF, 0x81, 0x83, 0x84, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8F, 0x90,
582 0x91, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x9B, 0x9F, 0xA5, 0xA6, 0xA7, 0xA9, 0xAD, 0xAF, 0xB1,
583 0xB5, 0xB7, 0xB8, 0xBC, 0xBE, 0x81, 0x88, 0x8A, 0x8C, 0x8E, 0x91, 0x93, 0x96, 0x97, 0x99, 0x9C,
584 0x9D, 0xA1, 0xA2, 0xA6, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xB0, 0xB1, 0xB3, 0xB7, 0xB9, 0xBC, 0xBF,
585 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x87, 0x88, 0x8A, 0x8B, 0x8C, 0x90, 0x91, 0x92, 0x93, 0x97,
586 0x98, 0x99, 0x9E, 0xA0, 0xA1, 0xA8, 0xA9, 0xAA, 0xAD, 0xAE, 0xB3, 0xB4, 0xB9, 0xBC, 0xBD, 0x83,
587 0x85, 0x8C, 0x8D, 0x96, 0x97, 0x98, 0x99, 0x9C, 0x9D, 0xA0, 0xA4, 0xAB, 0xB0, 0xB1, 0xB5, 0xB8,
588 0xBB, 0xBD, 0xBF, 0x8E, 0x8F, 0x90, 0x92, 0x95, 0x96, 0x99, 0x9B, 0x9C, 0x9D, 0xA0, 0xA1, 0xA5,
589 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAF, 0xB1, 0xBA, 0x81, 0x82, 0x83, 0x86, 0x8A, 0x8B, 0x8D,
590 0x90, 0x92, 0x95, 0x99, 0x9A, 0x9F, 0xA0, 0xA2, 0xA3, 0xA4, 0xA5, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC,
591 0xAD, 0xAF, 0xB0, 0xB5, 0xB7, 0x81, 0x83, 0x84, 0x89, 0x8B, 0x8C, 0x8D, 0x92, 0x94, 0x96, 0x97,
592 0x9A, 0x9B, 0x9F, 0xA0, 0xA3, 0xA6, 0xA7, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB8, 0xBC,
593 0xBD, 0x85, 0x86, 0x87, 0x91, 0x93, 0x98, 0x9A, 0x9C, 0x9F, 0xA0, 0xA1, 0xA3, 0xA7, 0xA8, 0xB0,
594 0xB1, 0xB3, 0xB4, 0xB6, 0xB7, 0xB9, 0xBA, 0xBB, 0x80, 0x81, 0x83, 0x86, 0x88, 0x89, 0x8D, 0x8E,
595 0x8F, 0x95, 0x9A, 0x9B, 0x9F, 0xA1, 0xA7, 0xA8, 0xAC, 0xB4, 0xBC, 0xBD, 0xBE, 0xBF, 0x82, 0x84,
596 0x87, 0x88, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x93, 0x95, 0x98, 0x99, 0x9A, 0x9D, 0x9F, 0xA2, 0xA3,
597 0xA5, 0xA7, 0xA8, 0xAB, 0xAE, 0xAF, 0xB0, 0xB1, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xBE, 0x82, 0x87,
598 0x8A, 0x8E, 0x90, 0x91, 0x94, 0x96, 0x99, 0x9A, 0xA4, 0xA7, 0xA9, 0xAB, 0xAC, 0xAE, 0xB2, 0xB6,
599 0xBA, 0xBE, 0x83, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x90, 0xA3, 0xA6, 0xB2, 0xB4,
600 0xB6, 0xB7, 0xB8, 0xBA, 0xBC, 0xBD, 0xBE, 0xBF, 0x80, 0x88, 0x89, 0x8A, 0x8C, 0x8D, 0x8E, 0x90,
601 0x91, 0x92, 0x94, 0x96, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA1, 0xA6, 0xAA, 0xAE, 0xAF, 0xB0, 0xB2,
602 0xB3, 0xB4, 0xB8, 0xBB, 0xBF, 0x80, 0x81, 0x87, 0x88, 0x89, 0x8B, 0x8D, 0x8E, 0x93, 0x95, 0x98,
603 0x9B, 0x9E, 0xA0, 0xA3, 0xA8, 0xAE, 0xB1, 0xB6, 0xB9, 0xBC, 0xBE, 0xBF, 0x80, 0x82, 0x83, 0x84,
604 0x89, 0x8A, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x9B, 0x9C, 0x9E, 0xAB, 0xAC, 0xB1,
605 0xB5, 0xB9, 0xBB, 0xBC, 0xBD, 0x82, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8C, 0x8D, 0x8F, 0x90,
606 0x91, 0x92, 0x93, 0x94, 0x97, 0x98, 0x99, 0x9B, 0x9C, 0x9D, 0xA0, 0xA1, 0xAC, 0xAD, 0xAE, 0xAF,
607 0xB1, 0xB3, 0xB5, 0xB6, 0xB7, 0xBE, 0xBF, 0x81, 0x82, 0x87, 0x88, 0x89, 0x8C, 0x91, 0x99, 0x9F,
608 0xA7, 0xA8, 0xAB, 0xAF, 0xBA, 0xBD, 0xBE, 0xBF, 0x89, 0x8C, 0x8D, 0x8F, 0x90, 0x95, 0x97, 0x9C,
609 0xA7, 0xA8, 0xA9, 0xAB, 0xAE, 0xB2, 0xB6, 0xB7, 0xBA, 0xBB, 0x80, 0x83, 0x88, 0x89, 0x8C, 0x8E,
610 0x8F, 0x92, 0x96, 0x98, 0x9B, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA5, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB,
611 0xAC, 0xB2, 0xB4, 0xB5, 0xBB, 0xBE, 0x80, 0x83, 0x84, 0x86, 0x89, 0x8F, 0x90, 0x92, 0x96, 0x9A,
612 0x9B, 0xA1, 0xA3, 0xA9, 0xAE, 0xB4, 0xB6, 0xBA, 0x86, 0x8D, 0x8F, 0x93, 0x96, 0x97, 0x9C, 0xA6,
613 0xA8, 0xAC, 0xAD, 0xB4, 0xB6, 0xBA, 0xBE, 0x82, 0x8E, 0x98, 0xA7, 0xA9, 0xAF, 0xB6, 0xB8, 0xBA,
614 0x83, 0x88, 0x92, 0x93, 0x95, 0x9A, 0x9E, 0xA4, 0xA5, 0xA9, 0xAB, 0xAD, 0xAE, 0xB0, 0xB2, 0xB9,
615 0xBB, 0xBC, 0x81, 0x82, 0x85, 0x87, 0x8D, 0x92, 0x94, 0x98, 0x9A, 0xA0, 0xA1, 0xA2, 0xA3, 0xA6,
616 0xA7, 0xAC, 0xAF, 0xB1, 0xB2, 0xB4, 0xB6, 0xBA, 0xBD, 0xBE, 0x80, 0x85, 0x98, 0x9C, 0x9D, 0xA3,
617 0xA4, 0xAA, 0xAB, 0xAC, 0xAF, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBB, 0xBE, 0xBF, 0x85, 0x88,
618 0x8D, 0x8F, 0x91, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9D, 0x9E, 0xA2, 0xA3, 0xA6, 0xAC, 0xB0, 0xB2,
619 0xB4, 0xB5, 0xB7, 0xB8, 0x82, 0x83, 0x87, 0x88, 0x89, 0x8C, 0x8E, 0x90, 0x91, 0x97, 0x99, 0x9B,
620 0x9C, 0x9F, 0xA1, 0xA4, 0xA5, 0xA7, 0xAB, 0xAC, 0xAD, 0xAF, 0xB0, 0xB7, 0xB9, 0xBC, 0xBD, 0x81,
621 0x83, 0x84, 0x85, 0x86, 0x8B, 0x8C, 0x8F, 0x92, 0x97, 0x99, 0x9B, 0xA0, 0xA1, 0xA2, 0xA5, 0xA6,
622 0xA7, 0xA8, 0xA9, 0xAC, 0xAD, 0xB1, 0xBA, 0xBB, 0x82, 0x83, 0x86, 0x87, 0x8A, 0x8C, 0x8E, 0x8F,
623 0x93, 0x94, 0x9C, 0x9F, 0xA0, 0xA5, 0xA7, 0xA8, 0xAD, 0xAF, 0xB4, 0xB5, 0xB6, 0xBC, 0xBF, 0x81,
624 0x82, 0x83, 0x84, 0x89, 0x8B, 0x8F, 0x92, 0x9D, 0x9E, 0x9F, 0xA2, 0xA4, 0xA6, 0xA7, 0xA8, 0xA9,
625 0xAE, 0xAF, 0xB0, 0xB4, 0xB6, 0xBA, 0x81, 0x83, 0x84, 0x87, 0x88, 0x89, 0x8E, 0x91, 0x96, 0x97,
626 0x98, 0x9D, 0xA2, 0xA6, 0xAB, 0xAE, 0xB4, 0xB8, 0xB9, 0xBC, 0xBE, 0x81, 0x84, 0x87, 0x89, 0x96,
627 0x99, 0x9A, 0x9C, 0x9D, 0xA0, 0xA6, 0xA9, 0xB0, 0xB2, 0xB3, 0xB4, 0xB5, 0xB7, 0xB8, 0xB9, 0xBC,
628 0xBD, 0xBE, 0xBF, 0x80, 0x83, 0x88, 0x89, 0x8B, 0x8D, 0x8F, 0x94, 0x95, 0x96, 0x97, 0x9B, 0x9D,
629 0x9E, 0x9F, 0xA6, 0xA7, 0xA8, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xB1, 0xB4, 0xB6, 0xB7, 0xB8, 0xBA,
630 0xBD, 0xBF, 0x81, 0x86, 0x89, 0x8E, 0x8F, 0x90, 0x91, 0x93, 0x96, 0x99, 0x9C, 0x9E, 0x9F, 0xA0,
631 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xAA, 0xAD, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB5, 0xB7, 0xBC, 0xBE,
632 0xBF, 0x85, 0x87, 0x89, 0x8B, 0x8C, 0x90, 0x95, 0x97, 0x9A, 0x9C, 0x9D, 0xA0, 0xA1, 0xA2, 0xA6,
633 0xA9, 0xAF, 0xB3, 0xB4, 0xB6, 0xB7, 0xB8, 0xB9, 0x81, 0x84, 0x86, 0x8A, 0x8E, 0x8F, 0x90, 0x91,
634 0x93, 0x94, 0x98, 0x9A, 0x9D, 0x9E, 0xA2, 0xA4, 0xA7, 0xA9, 0xAC, 0xAE, 0xAF, 0xB1, 0xB3, 0xB4,
635 0xB5, 0xBB, 0xBE, 0xBF, 0x82, 0x83, 0x84, 0x93, 0x96, 0x97, 0x9E, 0xA1, 0xA2, 0xA9, 0xAA, 0xAB,
636 0xB2, 0xB4, 0xB8, 0xB9, 0xBC, 0xBD, 0x80, 0x81, 0x82, 0x83, 0x86, 0x88, 0x8D, 0x8E, 0x90, 0x91,
637 0x93, 0x94, 0x99, 0x9C, 0x9D, 0x9F, 0xA3, 0xA7, 0xB4, 0xB6, 0xB7, 0xBE, 0xBF, 0x81, 0x83, 0x85,
638 0x8D, 0x8F, 0x93, 0x94, 0x97, 0x9B, 0x9D, 0x9F, 0xA0, 0xA2, 0xA6, 0xA7, 0xA8, 0xAD, 0xAF, 0xB0,
639 0xB1, 0xB3, 0xB5, 0xB6, 0xB9, 0xBA, 0xBC, 0x84, 0x86, 0x89, 0x8A, 0x8B, 0x8D, 0x92, 0x94, 0x95,
640 0x97, 0x98, 0x9A, 0x9F, 0xA0, 0xA1, 0xA3, 0xA7, 0xAE, 0xAF, 0xB2, 0xB9, 0xBA, 0x80, 0x81, 0x84,
641 0x85, 0x88, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x92, 0x99, 0x9A, 0x9B, 0x9C, 0xA1, 0xA2, 0xA3, 0xA5,
642 0xA6, 0xA8, 0xAA, 0xB0, 0xB4, 0xB6, 0xB9, 0xBD, 0xBF, 0x8A, 0x93, 0x94, 0x95, 0x99, 0x9A, 0x9C,
643 0x9D, 0x9E, 0xA0, 0xA1, 0xA2, 0xAA, 0xAB, 0xAD, 0xAE, 0xAF, 0xB3, 0xB4, 0xB5, 0xB7, 0xB8, 0xB9,
644 0xBC, 0xBD, 0xBE, 0x81, 0x82, 0x8A, 0x8E, 0x91, 0x94, 0x95, 0x9B, 0x9C, 0xA0, 0xA7, 0xAE, 0xB1,
645 0xB2, 0xB4, 0xBB, 0xBE, 0xBF, 0x81, 0x83, 0x87, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x90, 0x93, 0x98,
646 0x99, 0x9D, 0x9E, 0xA7, 0xA8, 0xAB, 0xAD, 0xB2, 0xB9, 0xBB, 0xBD, 0xBF, 0x82, 0x85, 0x8A, 0x8B,
647 0x8C, 0x92, 0x93, 0x94, 0x97, 0x99, 0x9B, 0x9E, 0x9F, 0xA1, 0xA2, 0xA3, 0xA9, 0xAA, 0xAB, 0xAE,
648 0xB5, 0xB6, 0xB8, 0xB9, 0xBA, 0xBD, 0x84, 0x87, 0x88, 0x8B, 0x98, 0x99, 0x9F, 0xA1, 0xA2, 0xA6,
649 0xB2, 0xB8, 0xBF, 0x80, 0x84, 0x8D, 0x8E, 0x90, 0x97, 0x9C, 0xA0, 0xA2, 0xA3, 0xAA, 0xAC, 0xAE,
650 0xB3, 0xB8, 0xBB, 0x81, 0x82, 0x83, 0x91, 0x93, 0x9A, 0x9B, 0x9E, 0x9F, 0xA8, 0xAA, 0xBA, 0xBB,
651 0x84, 0x85, 0x8A, 0x92, 0x96, 0x9D, 0x9F, 0xA0, 0xA1, 0xA3, 0xA7, 0xB2, 0xB7, 0xB8, 0xB9, 0xBA,
652 0xBD, 0xBE, 0x83, 0x87, 0x89, 0x8C, 0x8E, 0x90, 0x93, 0x94, 0x99, 0x9B, 0x9F, 0xA1, 0xA2, 0xA3,
653 0xA4, 0xA6, 0xA9, 0xAA, 0xAF, 0xB3, 0xB4, 0xB8, 0xB9, 0xBB, 0xBF, 0x80, 0x83, 0x84, 0x86, 0x89,
654 0x8A, 0x8B, 0x8D, 0x95, 0x96, 0x98, 0x9E, 0xA4, 0xAA, 0xAB, 0xAF, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5,
655 0xB7, 0xBA, 0xBB, 0xBC, 0xBF, 0x80, 0x85, 0x86, 0x8B, 0x8D, 0x8E, 0x92, 0x93, 0x94, 0x98, 0x9B,
656 0x9F, 0xAB, 0xAC, 0xAF, 0xB3, 0x88, 0x8F, 0x91, 0x93, 0x94, 0x97, 0x9B, 0xA3, 0xA4, 0xB4, 0xB7,
657 0xB8, 0xBE, 0x80, 0x81, 0x82, 0x8E, 0x90, 0x95, 0x97, 0x9A, 0x9D, 0x9E, 0x9F, 0xA0, 0xA2, 0xA8,
658 0xAA, 0xB0, 0xB2, 0xB3, 0xBA, 0xBD, 0xBE, 0x81, 0x82, 0x83, 0x88, 0x8C, 0x8D, 0x90, 0x92, 0x93,
659 0x96, 0x99, 0x9A, 0x9B, 0xA1, 0xA2, 0xAB, 0xAE, 0xB1, 0xB3, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD,
660 0xBE, 0xBF, 0x81, 0x84, 0x85, 0x89, 0x8A, 0x8C, 0x93, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0xA1, 0xA2,
661 0xA3, 0xA5, 0xA8, 0xAA, 0xAF, 0xB0, 0xB1, 0xB3, 0x8B, 0x8C, 0x92, 0x97, 0x99, 0x9B, 0x9E, 0x9F,
662 0xA5, 0xA9, 0xAA, 0xAB, 0xB2, 0xB3, 0xB5, 0xB6, 0xB8, 0xBB, 0xBD, 0xBE, 0x81, 0x84, 0x85, 0x99,
663 0x9A, 0x9C, 0xA3, 0xA4, 0xA6, 0xA9, 0xAA, 0xAC, 0xAE, 0xB4, 0xB7, 0xB8, 0xB9, 0x85, 0x88, 0x8C,
664 0x8E, 0x93, 0x95, 0x99, 0x9B, 0x9C, 0xAF, 0xB2, 0xB5, 0xB8, 0xBC, 0x80, 0x85, 0x86, 0x87, 0x8B,
665 0x8C, 0x91, 0x92, 0x95, 0x98, 0x99, 0x9E, 0xA1, 0xA4, 0xA6, 0xA8, 0xAA, 0xAB, 0xAC, 0xAE, 0xB1,
666 0xB3, 0xB5, 0xB7, 0xB9, 0xBA, 0xBB, 0x85, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x93, 0x95, 0x99, 0x9A,
667 0x9B, 0x9D, 0x9F, 0xA0, 0xA1, 0xA3, 0xA4, 0xA5, 0xA6, 0xA9, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB8,
668 0xBA, 0xBE, 0x83, 0x8A, 0x8D, 0x8E, 0x96, 0x98, 0x9B, 0x9F, 0xA7, 0xAB, 0xAE, 0xAF, 0xB2, 0xB6,
669 0xBE, 0xBF, 0x80, 0x82, 0x8C, 0x8F, 0x90, 0x96, 0x98, 0x9C, 0x9D, 0x9F, 0xA2, 0xA5, 0xAA, 0xAF,
670 0xB2, 0xB6, 0xB7, 0xBA, 0xBD, 0x82, 0x84, 0x85, 0x89, 0x8B, 0x8C, 0x91, 0x93, 0x94, 0x95, 0x9D,
671 0x9E, 0xAC, 0xAF, 0xB2, 0xB4, 0xB7, 0xB8, 0xBE, 0xBF, 0x81, 0x82, 0x86, 0x89, 0x8F, 0x91, 0x93,
672 0x94, 0x95, 0xA0, 0xA2, 0xA3, 0xAB, 0xAC, 0xB1, 0xB2, 0xB8, 0xBE, 0xBF, 0x81, 0x85, 0x94, 0x98,
673 0x9B, 0x9C, 0x9F, 0xA4, 0xA6, 0xAD, 0xAE, 0xAF, 0xB0, 0xB4, 0xB8, 0xBA, 0xBC, 0x80, 0x81, 0x82,
674 0x84, 0x86, 0x8E, 0x91, 0x97, 0xA1, 0xA3, 0xA4, 0xAA, 0xB1, 0xB3, 0xB9, 0x80, 0x81, 0x82, 0x83,
675 0x86, 0x94, 0x95, 0x98, 0x9B, 0x9F, 0xA0, 0xA1, 0xA4, 0xAB, 0xAC, 0xAE, 0xAF, 0xB1, 0xB3, 0xB6,
676 0xBA, 0xBE, 0x81, 0x89, 0x8B, 0x8F, 0x91, 0x95, 0x98, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA6, 0xA7,
677 0xAC, 0xB0, 0xB2, 0xBE, 0x8C, 0x91, 0x98, 0xA3, 0xAB, 0xAF, 0xB0, 0xB8, 0xBC, 0xBD, 0x89, 0x8A,
678 0x8E, 0x92, 0x99, 0xAC, 0xAD, 0xAE, 0xAF, 0xB3, 0xB8, 0xB9, 0xBA, 0x88, 0x8B, 0x8F, 0x99, 0x9D,
679 0x9F, 0xB1, 0xB9, 0xBD, 0x89, 0x94, 0x99, 0x9A, 0x9C, 0xA1, 0xA6, 0xB6, 0xBC, 0x89, 0x8C, 0x8E,
680 0x95, 0x96, 0x99, 0xA2, 0xA4, 0xA5, 0xA6, 0xA7, 0xA9, 0xAC, 0xAE, 0xBD, 0x84, 0x88, 0x8A, 0x8F,
681 0x94, 0x95, 0x99, 0x9F, 0xA8, 0xAC, 0xB1, 0xB9, 0xBE, 0x83, 0x88, 0x89, 0x8E, 0x90, 0x92, 0x94,
682 0x95, 0x97, 0x9F, 0xA0, 0xA5, 0xA6, 0xA7, 0xAC, 0xAD, 0xAE, 0xB5, 0xB9, 0xBB, 0xBC, 0xBF, 0x86,
683 0x8D, 0x90, 0x9B, 0xA8, 0xAA, 0xAC, 0xAD, 0xB0, 0xB2, 0xB5, 0xB6, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE,
684 0xBF, 0x80, 0x86, 0x87, 0x88, 0x8B, 0x8C, 0x92, 0x98, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA2, 0xA7,
685 0xA9, 0xB2, 0xB4, 0xB9, 0xBD, 0xBE, 0x80, 0x81, 0x82, 0x87, 0x92, 0x96, 0xA0, 0xA2, 0xA7, 0xAC,
686 0xAF, 0xB2, 0xB6, 0xB9, 0x82, 0x83, 0x84, 0x86, 0x8E, 0x90, 0x92, 0x97, 0x99, 0x9B, 0xA0, 0xA1,
687 0xA2, 0xA9, 0xAC, 0xAD, 0xB7, 0xB8, 0xB9, 0xBC, 0xBD, 0x8A, 0x96, 0x97, 0x9B, 0x9C, 0x9D, 0x9F,
688 0xA5, 0xA9, 0xAA, 0xAB, 0xAE, 0xAF, 0xB4, 0xB6, 0xB7, 0xBE, 0xBF, 0x84, 0x85, 0x8E, 0x8F, 0x97,
689 0xA3, 0xA8, 0xAA, 0xB0, 0xB2, 0xB5, 0xB8, 0xBA, 0xBB, 0x84, 0x87, 0x89, 0x8B, 0x96, 0xA9, 0xB2,
690 0xB3, 0xBB, 0x80, 0x82, 0x88, 0x8A, 0x8D, 0x8E, 0x9E, 0xA0, 0xA5, 0xAA, 0xAD, 0xAE, 0xB1, 0xB8,
691 0xBE, 0x83, 0x85, 0x86, 0x89, 0xA2, 0xA5, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xBA, 0xBF, 0x81, 0x95,
692 0x99, 0x9A, 0x9B, 0x9C, 0x9E, 0x9F, 0xA0, 0xA3, 0xA4, 0xA9, 0xAA, 0xAF, 0xB0, 0xB3, 0xB6, 0xBE,
693 0x83, 0x8B, 0x9E, 0xA2, 0xA7, 0xB0, 0xBD, 0x8A, 0x8F, 0x94, 0x9C, 0xA0, 0xA2, 0xA3, 0xA6, 0xA7,
694 0xA9, 0xAE, 0xB0, 0xB1, 0xB2, 0xB6, 0xB7, 0xB8, 0x83, 0x84, 0x85, 0x8C, 0x8D, 0x8E, 0x91, 0x93,
695 0x95, 0x98, 0x9A, 0x9C, 0x9E, 0x9F, 0xA3, 0xA5, 0xA6, 0xA8, 0xAB, 0xAC, 0xB0, 0xB1, 0xB2, 0xB3,
696 0xB7, 0xB8, 0xBA, 0xBB, 0xBC, 0x84, 0x86, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8F, 0x91, 0x94, 0x99,
697 0x9A, 0x9B, 0x9C, 0x9D, 0xA0, 0xA2, 0xA4, 0xA5, 0xA6, 0xA7, 0xA9, 0xAA, 0xAB, 0xAD, 0xB0, 0xB3,
698 0xB4, 0xB6, 0xB7, 0xB8, 0xBF, 0x82, 0x86, 0x87, 0x89, 0x8A, 0x8B, 0x8E, 0x8F, 0x91, 0x94, 0x9A,
699 0x9D, 0xA3, 0xA5, 0xAB, 0xB1, 0xB2, 0xB3, 0xB5, 0xB8, 0xB9, 0xBC, 0xBD, 0xBE, 0x82, 0x83, 0x85,
700 0x87, 0x8A, 0x8D, 0x92, 0x94, 0x95, 0x98, 0x99, 0x9B, 0x9E, 0xA2, 0xA3, 0xA9, 0xB0, 0xB2, 0xB3,
701 0xB4, 0xBA, 0xBC, 0xBE, 0xBF, 0x81, 0x89, 0x8B, 0x8D, 0x9F, 0xA0, 0xA1, 0xA2, 0xA4, 0xA7, 0xB0,
702 0xB4, 0xBB, 0x82, 0x86, 0x87, 0x88, 0x8C, 0x92, 0x96, 0x98, 0x9C, 0xA1, 0xA2, 0xA7, 0xA8, 0xA9,
703 0xAA, 0xAC, 0xB0, 0xB2, 0xB6, 0xB8, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0x80, 0x83, 0x84, 0x86, 0x87,
704 0x88, 0x8B, 0x8E, 0x90, 0x93, 0x96, 0x99, 0x9A, 0xAE, 0xB0, 0xB4, 0xB7, 0xB8, 0xB9, 0xBA, 0xBF,
705 0x82, 0x83, 0x86, 0x88, 0x8A, 0x8D, 0x92, 0x96, 0x97, 0x9B, 0x9C, 0x9E, 0x9F, 0xA1, 0xA3, 0xA4,
706 0xA5, 0xA7, 0xAA, 0xAE, 0xB2, 0xB4, 0xB8, 0xBB, 0xBE, 0x81, 0x84, 0x87, 0x88, 0x89, 0x8B, 0x8C,
707 0x9B, 0x9E, 0x9F, 0xA0, 0xA4, 0xA5, 0xA6, 0xA9, 0xB7, 0xB8, 0xBA, 0xBC, 0x80, 0x87, 0x9A, 0x9B,
708 0xA1, 0xA3, 0xA5, 0xA6, 0xA8, 0xAB, 0xB9, 0xBE, 0xBF, 0x8B, 0x8E, 0x91, 0x9E, 0xA0, 0xA5, 0xAC,
709 0xAD, 0xB0, 0xB3, 0xB6, 0xB9, 0xBB, 0xBC, 0xBD, 0xBF, 0x87, 0x8D, 0x97, 0x9A, 0x9B, 0x9C, 0xA2,
710 0xA3, 0xA5, 0xA7, 0xA9, 0xAD, 0xAE, 0xAF, 0xB3, 0xBC, 0x82, 0x8C, 0x92, 0x94, 0x95, 0xA0, 0xA5,
711 0xA6, 0xA7, 0xB2, 0xB4, 0xBA, 0xBF, 0x85, 0x9D, 0xAB, 0xAC, 0xAF, 0xB2, 0xB4, 0xBC, 0x81, 0x86,
712 0x87, 0x8C, 0x8D, 0x8E, 0x91, 0x93, 0x95, 0x97, 0x9A, 0xA3, 0xA7, 0xA9, 0xAA, 0xAF, 0xB5, 0xBA,
713 0xBC, 0xBE, 0x81, 0x85, 0x86, 0x8A, 0x8B, 0x90, 0x91, 0x94, 0x9A, 0xA7, 0xA8, 0xAC, 0xAF, 0xB4,
714 0xBD, 0x81, 0x87, 0x8E, 0x91, 0x92, 0x99, 0xA6, 0xAA, 0xAB, 0xAC, 0xBA, 0xBC, 0xBE, 0x80, 0x81,
715 0x87, 0x88, 0x89, 0x90, 0x93, 0x95, 0x96, 0x97, 0x9A, 0x9D, 0x9E, 0x9F, 0xA0, 0xA2, 0xA5, 0xA8,
716 0xAD, 0xB7, 0xBA, 0xBF, 0x80, 0x81, 0x84, 0x85, 0x8A, 0x8D, 0x8E, 0x8F, 0x9D, 0xA6, 0xA7, 0xAA,
717 0xAE, 0xB0, 0xB3, 0xB9, 0xBA, 0xBD, 0xBE, 0xBF, 0x80, 0x81, 0x89, 0x8B, 0x91, 0x92, 0x95, 0x98,
718 0x9F, 0xA1, 0xA3, 0xA4, 0xA6, 0xA7, 0xA9, 0xAC, 0xB0, 0xBB, 0x80, 0x88, 0x8B, 0x8D, 0x8E, 0x94,
719 0x97, 0x98, 0x99, 0x9A, 0x9C, 0x9F, 0xA0, 0xAE, 0xB1, 0xB2, 0xB7, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
720 0x80, 0x82, 0x83, 0x86, 0x89, 0x8D, 0x8E, 0x8F, 0x90, 0x97, 0xA1, 0xA2, 0xA3, 0xA9, 0xAB, 0xB0,
721 0xB4, 0xB6, 0xB9, 0xBA, 0xBD, 0xBF, 0x81, 0x83, 0x84, 0x88, 0x92, 0x93, 0x95, 0x96, 0x97, 0x98,
722 0x9F, 0xA9, 0xAA, 0xAE, 0xAF, 0xB0, 0xB6, 0xBA, 0xBF, 0x83, 0x84, 0x85, 0x87, 0x88, 0x8A, 0x8B,
723 0x8D, 0x8F, 0x92, 0x93, 0x95, 0x99, 0x9A, 0x9C, 0x9D, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA5, 0xA6,
724 0xAA, 0xAD, 0xAF, 0xB0, 0xB6, 0xB8, 0xB9, 0xBA, 0xBF, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8B, 0x8F,
725 0x91, 0x98, 0x99, 0x9B, 0x9E, 0xA0, 0xA5, 0xA6, 0xA8, 0xAC, 0xB3, 0xB5, 0xB6, 0xB9, 0x85, 0x86,
726 0x88, 0x89, 0x8B, 0x8C, 0x8D, 0x8F, 0x90, 0x91, 0x92, 0x94, 0x96, 0x9D, 0xA5, 0xA7, 0xAC, 0xAE,
727 0xB0, 0xB1, 0xB4, 0xB5, 0xBA, 0x86, 0x87, 0x8B, 0x8D, 0x8F, 0x92, 0x94, 0x95, 0x97, 0x98, 0x99,
728 0x9A, 0x9C, 0x9D, 0x9F, 0xA1, 0xAA, 0xAD, 0xB1, 0xB4, 0xB8, 0x80, 0x81, 0x84, 0x86, 0x87, 0x89,
729 0x8B, 0x8C, 0x8F, 0x9D, 0xA0, 0xA4, 0xA5, 0xA6, 0xA9, 0xAD, 0xB3, 0xB6, 0xB7, 0x80, 0x87, 0x8D,
730 0x91, 0x92, 0x93, 0x94, 0x97, 0x9F, 0xA1, 0xA3, 0xA7, 0xAA, 0xAB, 0xB7, 0xB8, 0xBD, 0xBE, 0xBF,
731 0x80, 0x83, 0x8C, 0x8D, 0x8F, 0x90, 0x94, 0x96, 0x98, 0x9F, 0xA0, 0xA4, 0xA5, 0xAC, 0xB3, 0xB5,
732 0xBE, 0x81, 0x82, 0x83, 0x89, 0x8B, 0x8D, 0x90, 0x92, 0x95, 0x97, 0x98, 0x9B, 0x9F, 0xA1, 0xA2,
733 0xA4, 0xA5, 0xA7, 0xA8, 0xAB, 0xAD, 0xAE, 0xB1, 0xB2, 0xB3, 0xB9, 0xBD, 0xBE, 0x80, 0x82, 0x85,
734 0x8A, 0x8E, 0x92, 0x96, 0x98, 0x9C, 0x9E, 0x9F, 0xA0, 0xA2, 0xA7, 0xAF, 0xB2, 0xB4, 0xB6, 0xB8,
735 0xBA, 0xBB, 0xBE, 0x80, 0x82, 0x84, 0x85, 0x86, 0x8A, 0x8B, 0x8D, 0x90, 0x94, 0x95, 0x97, 0x98,
736 0x99, 0x9A, 0x9B, 0x9C, 0xA0, 0xA1, 0xA2, 0xAB, 0xAC, 0xAE, 0xAF, 0xB0, 0xB2, 0xB3, 0xB5, 0xB9,
737 0xBA, 0xBF, 0x82, 0x83, 0x84, 0x85, 0x86, 0x8B, 0x8C, 0x8E, 0x8F, 0x90, 0x96, 0x9B, 0x9E, 0xA1,
738 0xA2, 0xA3, 0xA6, 0xA8, 0xAE, 0xB1, 0xB2, 0xB3, 0xB5, 0xB6, 0xB9, 0xBD, 0x89, 0x8F, 0x93, 0x99,
739 0x9A, 0x9B, 0x9C, 0x9F, 0xA2, 0xA3, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB4, 0xB5,
740 0xB8, 0xBA, 0xBB, 0xBD, 0xBE, 0xBF, 0x87, 0x8A, 0x8B, 0x8F, 0x91, 0x92, 0x95, 0x98, 0x9A, 0x9C,
741 0x9D, 0x9E, 0xA0, 0xA1, 0xA4, 0xA8, 0xA9, 0xAC, 0xAF, 0xB2, 0xB4, 0xBB, 0x81, 0x84, 0x85, 0x89,
742 0x8A, 0x8B, 0x92, 0x9B, 0x9E, 0x9F, 0xA1, 0xA2, 0xA3, 0xA6, 0xAB, 0xAE, 0xB1, 0xB2, 0xB5, 0xB7,
743 0xB9, 0xBA, 0xBB, 0xBD, 0xBE, 0x81, 0x83, 0x86, 0x8A, 0x8B, 0x8D, 0x94, 0x95, 0x96, 0x99, 0x9A,
744 0x9D, 0x9E, 0xA6, 0xA7, 0xA9, 0xAA, 0xAD, 0xB0, 0xB9, 0xBB, 0xBC, 0xBD, 0xBF, 0x82, 0x83, 0x88,
745 0x89, 0x8C, 0x8E, 0x8F, 0x90, 0x92, 0x93, 0x94, 0x96, 0x9B, 0x9C, 0xB6, 0xB8, 0xBA, 0x85, 0x8C,
746 0x8D, 0x8E, 0x90, 0x91, 0x94, 0x95, 0x98, 0x9F, 0xA0, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAE, 0xB0,
747 0xB2, 0xB5, 0xB7, 0xB8, 0xB9, 0x82, 0x83, 0x85, 0x86, 0x87, 0x88, 0x8A, 0x8C, 0x8E, 0x94, 0x9A,
748 0x9D, 0x9E, 0xA3, 0xA4, 0xA8, 0xA9, 0xAE, 0xAF, 0xB2, 0xB6, 0xB8, 0xB9, 0xBD, 0x81, 0x85, 0x86,
749 0x8A, 0x8C, 0x92, 0x94, 0x95, 0xA0, 0xA1, 0xA6, 0xA9, 0xAB, 0xB0, 0xB3, 0xB9, 0xBB, 0xBC, 0x80,
750 0x81, 0x83, 0x84, 0x85, 0x86, 0x8B, 0x8C, 0x90, 0x92, 0x95, 0x97, 0x98, 0x99, 0x9C, 0xA1, 0xA8,
751 0xB3, 0xB6, 0xBB, 0xBD, 0xBF, 0x86, 0x8A, 0x92, 0x96, 0x98, 0x9A, 0x9E, 0x9F, 0xA1, 0xA2, 0xA8,
752 0xAF, 0xB0, 0xB2, 0xB3, 0xB4, 0xB6, 0xB7, 0xB9, 0xBD, 0xBE, 0xBF, 0x84, 0x85, 0x86, 0x87, 0x89,
753 0x8B, 0x8C, 0x93, 0x96, 0x98, 0x9A, 0x9B, 0x9D, 0xA1, 0xA2, 0xA5, 0xA9, 0xAA, 0xAC, 0xAD, 0xAF,
754 0xB1, 0xB2, 0xB4, 0xBA, 0x83, 0x84, 0x86, 0x8C, 0x8E, 0x96, 0x99, 0x9A, 0x9B, 0x9D, 0x9E, 0xA1,
755 0xA4, 0xA5, 0xAF, 0xB1, 0xB4, 0xB8, 0xBC, 0xBD, 0x82, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x9A,
756 0x9B, 0xA3, 0xA9, 0xAF, 0xB1, 0xB3, 0xB9, 0xBE, 0x86, 0x8B, 0x8E, 0x90, 0x91, 0x93, 0x94, 0x95,
757 0x9F, 0xA5, 0xA6, 0xAB, 0xAE, 0xB0, 0xB1, 0xB4, 0xB8, 0xB9, 0xBA, 0xBF, 0x80, 0x82, 0x83, 0x88,
758 0x8A, 0x8F, 0x93, 0x95, 0x9A, 0x9C, 0x9D, 0xA0, 0xA3, 0xA4, 0xA8, 0xA9, 0xB0, 0xB3, 0xB5, 0xB8,
759 0xBA, 0xBD, 0xBE, 0xBF, 0x80, 0x82, 0x86, 0x88, 0x89, 0x8D, 0x91, 0x93, 0x98, 0x99, 0x9A, 0x9F,
760 0xA0, 0xA3, 0xA5, 0xA7, 0xA8, 0xAA, 0xAD, 0xB3, 0xB4, 0xBA, 0xBB, 0xBC, 0xBE, 0x81, 0x82, 0x85,
761 0x87, 0x88, 0x89, 0x8A, 0x8C, 0x8D, 0x8E, 0x90, 0x92, 0x96, 0x97, 0x98, 0x9B, 0x9C, 0x9E, 0x9F,
762 0xA9, 0xAA, 0xAB, 0xAC, 0xAE, 0xB3, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0x80, 0x87, 0x98, 0x99, 0x9A,
763 0x9D, 0x9F, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAB, 0xAE, 0xAF, 0xB1, 0xB2, 0xB6, 0xB7, 0xB8, 0xBE,
764 0x8B, 0x8D, 0x92, 0x99, 0x9D, 0x9F, 0xA5, 0xA6, 0xAB, 0xAC, 0xAD, 0xAF, 0xB1, 0xB3, 0xB8, 0xB9,
765 0xBB, 0xBD, 0x85, 0x91, 0x92, 0x93, 0x94, 0x97, 0x99, 0x9B, 0x9C, 0x9E, 0x9F, 0xA1, 0xA3, 0xA5,
766 0xA6, 0xA7, 0xAB, 0xB1, 0xB3, 0xB4, 0xB9, 0xBA, 0xBB, 0x82, 0x83, 0x84, 0x85, 0x86, 0x89, 0x8E,
767 0x96, 0x97, 0x98, 0x9C, 0xA3, 0xA8, 0xAB, 0xAF, 0xB1, 0xB2, 0xB4, 0xB5, 0xB6, 0xB8, 0xB9, 0x80,
768 0x85, 0x89, 0x8A, 0x8F, 0x90, 0x92, 0x98, 0xB3, 0xB5, 0xB7, 0xBB, 0xBC, 0x85, 0x87, 0x89, 0x8A,
769 0x8E, 0x93, 0x96, 0x9A, 0x9E, 0x9F, 0xA0, 0xA2, 0xA8, 0xAA, 0xAB, 0xB1, 0xB5, 0xBD, 0x81, 0x85,
770 0x8A, 0x8C, 0x8E, 0x93, 0x96, 0x98, 0x9C, 0x9F, 0xA0, 0xA9, 0xAB, 0xAF, 0xB0, 0xB1, 0xB2, 0xB4,
771 0xB7, 0xBB, 0xBD, 0x83, 0x84, 0x87, 0x8B, 0x8C, 0x8D, 0x8E, 0x93, 0xA0, 0xA2, 0xA9, 0xAA, 0xAC,
772 0xB1, 0xB5, 0xB8, 0xBC, 0xBD, 0x86, 0x89, 0x8E, 0x97, 0x9B, 0xA1, 0xA2, 0xA3, 0xA6, 0xA9, 0xAB,
773 0xAC, 0xAD, 0xAE, 0xAF, 0xB1, 0xB5, 0xB7, 0xB9, 0xBA, 0x82, 0x84, 0x8B, 0x90, 0x94, 0x99, 0x9C,
774 0x9F, 0xA1, 0xAD, 0xB2, 0xB8, 0xB9, 0xBB, 0xBC, 0xBF, 0x81, 0x84, 0x86, 0x89, 0x8A, 0x8B, 0x8D,
775 0x90, 0x91, 0x96, 0x99, 0x9A, 0xAC, 0xAE, 0xB4, 0xBC, 0xBF, 0x80, 0x86, 0x91, 0x93, 0x94, 0x95,
776 0x97, 0x98, 0x9A, 0x9F, 0xA1, 0xA6, 0xAC, 0xAD, 0xB5, 0xBD, 0x80, 0x81, 0x83, 0x88, 0x89, 0x8A,
777 0x8B, 0x8E, 0x95, 0x97, 0x98, 0x9A, 0xA3, 0xA8, 0xA9, 0xAA, 0xAD, 0xB7, 0xBE, 0x80, 0x84, 0x87,
778 0x88, 0x8A, 0x90, 0x91, 0x94, 0x97, 0x99, 0x9B, 0x9C, 0xA4, 0xA6, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC,
779 0xAE, 0xAF, 0xB9, 0xBA, 0x81, 0x89, 0x8D, 0x8F, 0x90, 0x95, 0x9C, 0x9D, 0xA4, 0xA5, 0xA9, 0xAA,
780 0xB7, 0xB9, 0xBA, 0xBB, 0xBE, 0x82, 0x86, 0x87, 0x8A, 0x8B, 0x93, 0x96, 0x97, 0x9A, 0xA2, 0xAD,
781 0xAF, 0xB0, 0xBF, 0x8D, 0x8E, 0x90, 0x94, 0x95, 0x9A, 0x9C, 0x9E, 0x9F, 0xA7, 0xAB, 0xB1, 0xB9,
782 0xBB, 0x8A, 0x8B, 0x8C, 0x93, 0x95, 0xA3, 0xA4, 0xA9, 0xAA, 0xAB, 0xAF, 0xB0, 0xB6, 0x84, 0x86,
783 0x87, 0x89, 0x8B, 0x8D, 0x8E, 0x94, 0x99, 0x9B, 0x9E, 0x9F, 0xA4, 0xA9, 0xAC, 0xAD, 0xAE, 0xAF,
784 0xB8, 0xB9, 0xBB, 0xBE, 0x80, 0x82, 0x83, 0x86, 0x88, 0x89, 0x8A, 0x8D, 0x91, 0x92, 0x98, 0x9A,
785 0x9C, 0xA5, 0xA9, 0xB4, 0xB7, 0xBB, 0xBF, 0x89, 0x8B, 0x8C, 0x8E, 0x93, 0x95, 0x97, 0x99, 0x9F,
786 0xA0, 0xA3, 0xA6, 0xA8, 0xAA, 0xAE, 0xB4, 0xB6, 0xB8, 0xBF, 0x82, 0x8D, 0x9F, 0xA2, 0xAB, 0xAF,
787 0xB3, 0xBA, 0xBB, 0xBD, 0x80, 0x84, 0x86, 0x87, 0x8B, 0x90, 0x92, 0xA0, 0xAF, 0xB2, 0xB6, 0xB7,
788 0xB9, 0xBB, 0xBE, 0x85, 0x8D, 0x8E, 0x8F, 0x91, 0x95, 0x96, 0xA1, 0xA2, 0xA3, 0xA7, 0xB1, 0xB6,
789 0xB9, 0xBB, 0x80, 0x82, 0x84, 0x86, 0x8C, 0x8D, 0x92, 0x93, 0x97, 0x99, 0x9B, 0x9D, 0x9E, 0xA1,
790 0xA2, 0xA3, 0xA8, 0xAB, 0xB0, 0xB2, 0xB5, 0xB7, 0xBD, 0xBE, 0xBF, 0x81, 0x82, 0x88, 0x8B, 0x8D,
791 0x92, 0x96, 0x97, 0x99, 0x9E, 0xA2, 0xA4, 0xAB, 0xAE, 0xB0, 0xB1, 0xB4, 0xB5, 0xB7, 0xBF, 0x81,
792 0x82, 0x83, 0x84, 0x85, 0x8F, 0x94, 0x95, 0x98, 0x99, 0x9C, 0x9D, 0x9F, 0xA1, 0xA8, 0xB2, 0xB3,
793 0xB4, 0xB8, 0xB9, 0xBC, 0xBD, 0xBE, 0x82, 0x84, 0x87, 0x8A, 0x8C, 0x90, 0x92, 0x93, 0x9D, 0x9E,
794 0xA5, 0xAA, 0xAB, 0xB6, 0xB8, 0xBB, 0x81, 0x83, 0x84, 0x8C, 0x8D, 0x96, 0x9E, 0x9F, 0xA0, 0xA4,
795 0xA6, 0xAA, 0xAD, 0xAF, 0xB2, 0xB4, 0xB7, 0xBE, 0xBF, 0x81, 0x83, 0x86, 0x87, 0x88, 0x8A, 0x8B,
796 0x8F, 0x93, 0x96, 0x97, 0x98, 0x9A, 0xA1, 0xA6, 0xA7, 0xA9, 0xAA, 0xAC, 0xAF, 0xB2, 0xB3, 0xBA,
797 0xBD, 0xBF, 0x80, 0x92, 0x9A, 0x9C, 0x9D, 0xA3, 0xA6, 0xA7, 0xB4, 0xB8, 0x80, 0x82, 0x83, 0x88,
798 0x8A, 0x8C, 0x8E, 0x90, 0x93, 0x96, 0x97, 0x98, 0x9B, 0x9D, 0x9F, 0xA3, 0xA5, 0xAA, 0xAD, 0xB1,
799 0xB3, 0xB4, 0xB6, 0xBA, 0xBB, 0xBC, 0x81, 0x86, 0x88, 0x90, 0x91, 0x92, 0x94, 0x95, 0x9B, 0x9E,
800 0xA0, 0xA2, 0xA3, 0xA6, 0xA9, 0xAB, 0xAC, 0xAD, 0xAE, 0xB0, 0xB1, 0xB2, 0xB3, 0xBC, 0x82, 0x84,
801 0x85, 0x87, 0x89, 0x8C, 0x8D, 0x91, 0x93, 0x95, 0x98, 0x9A, 0x9E, 0xA0, 0xA1, 0xA3, 0xA4, 0xA5,
802 0xA6, 0xA8, 0xAC, 0xAD, 0xB0, 0xB2, 0xB9, 0xBC, 0xBF, 0x82, 0x84, 0x87, 0x8B, 0x8C, 0x8D, 0x8F,
803 0x92, 0x96, 0x9A, 0x9B, 0x9C, 0x9E, 0xA0, 0xA1, 0xA2, 0xA4, 0xA6, 0xA7, 0xAB, 0xAD, 0xAE, 0xB1,
804 0xB3, 0xB7, 0xB8, 0xBA, 0xBE, 0x80, 0x81, 0x82, 0x84, 0x87, 0x8C, 0x8E, 0x90, 0x94, 0x96, 0x97,
805 0x99, 0x9A, 0x9B, 0x9D, 0xA0, 0xA1, 0xA6, 0xA8, 0xAB, 0xAC, 0xB3, 0xB9, 0xBE, 0x81, 0x89, 0x8C,
806 0x8E, 0x8F, 0x96, 0x98, 0x9A, 0x9B, 0x9C, 0x9F, 0xA6, 0xAB, 0xAC, 0xAF, 0xB0, 0xB1, 0xB2, 0xB4,
807 0xB7, 0xBD, 0x80, 0x83, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x93, 0x96, 0x99, 0x9A, 0xB7, 0xBA, 0xBF,
808 0x81, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x95, 0x9A, 0xA1, 0xA2, 0xAA, 0xAB, 0xAC, 0xB8, 0xB9,
809 0xBA, 0xBC, 0x82, 0x85, 0x89, 0x8A, 0x8C, 0x8D, 0x8E, 0x94, 0x98, 0x9D, 0x9E, 0xA0, 0xA1, 0xA2,
810 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB2, 0xB3, 0xB4, 0xB6, 0xB7, 0xB8,
811 0xBB, 0xBC, 0xBD, 0xBF, 0x80, 0x81, 0x82, 0x83, 0x84, 0x87, 0x88, 0x8A, 0x8D, 0x8E, 0x91, 0x93,
812 0x9A, 0x9B, 0x9C, 0x9E, 0xA0, 0xA2, 0xA3, 0xA4, 0xA6, 0xAA, 0xAD, 0xBA, 0xBB, 0xBC, 0xBD, 0x84,
813 0x85, 0x87, 0x88, 0x8A, 0x8B, 0x8D, 0x8F, 0x90, 0x93, 0x94, 0x96, 0xA4, 0xA6, 0xA7, 0xAB, 0xAD,
814 0xB0, 0xB1, 0xB3, 0xB4, 0xB7, 0x81, 0x85, 0x8A, 0x99, 0xA3, 0xA8, 0xB3, 0xBA, 0xBE, 0x82, 0x8B,
815 0x8C, 0x8F, 0x96, 0x9A, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3, 0xA8, 0xAA, 0xAB, 0xAF, 0xB3, 0xB5, 0xBC,
816 0xBF, 0x88, 0x89, 0x8A, 0x8F, 0x90, 0x9D, 0x9E, 0x9F, 0xAA, 0xB0, 0xB4, 0xB5, 0x82, 0x84, 0x87,
817 0x88, 0x89, 0x8A, 0x8C, 0x90, 0x95, 0x99, 0x9F, 0xA0, 0xA3, 0xA4, 0xB2, 0xB4, 0xB6, 0xBC, 0x81,
818 0x84, 0x85, 0x87, 0x8A, 0x8B, 0x8D, 0x91, 0x93, 0x94, 0x99, 0xA1, 0xAA, 0xAB, 0xAC, 0xAF, 0xB0,
819 0xB1, 0xBE, 0x85, 0x86, 0x88, 0x8A, 0x8B, 0x8C, 0x8D, 0x92, 0x9B, 0x9F, 0xA2, 0xA3, 0xAB, 0xB8,
820 0xBB, 0xBC, 0xBD, 0xBE, 0x83, 0x85, 0x89, 0x8A, 0x8C, 0x92, 0x93, 0x94, 0x95, 0x99, 0x9B, 0x9C,
821 0x9D, 0x9F, 0xA6, 0xA9, 0xAA, 0xAF, 0xB3, 0xB8, 0xB9, 0xBB, 0xBE, 0xBF, 0x82, 0x84, 0x85, 0x86,
822 0x89, 0x8C, 0x8D, 0x8E, 0x97, 0x9C, 0x9F, 0xA1, 0xA2, 0xA3, 0xA4, 0x9B, 0x9C, 0x9E, 0x9F, 0xA3,
823 0xA7, 0xA8, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB7, 0xBA, 0xBB, 0xBC, 0xBF, 0x82, 0x84, 0x85,
824 0x8E, 0x91, 0x94, 0x9A, 0xA2, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xAD, 0xAF, 0xB0, 0xB4, 0xB7, 0xB8,
825 0xB9, 0xBA, 0xBD, 0x80, 0x81, 0x83, 0x85, 0x86, 0x8B, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x93, 0x94,
826 0x95, 0x96, 0x97, 0x99, 0x9A, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA7, 0xAE, 0xB1, 0xB2,
827 0xB5, 0xB6, 0xB8, 0xB9, 0xBC, 0xBE, 0x81, 0x82, 0x85, 0x87, 0x89, 0x8A, 0x8B, 0x8D, 0x8E, 0x8F,
828 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x98, 0x99, 0x9C, 0x9E, 0xA0, 0xA1, 0xA3, 0xA5, 0xA8,
829 0xA9, 0xAD, 0xAE, 0xAF, 0xB2, 0xB5, 0xB6, 0xB7, 0xB8, 0xBA, 0xBC, 0xBD, 0xBF, 0x80, 0x81, 0x82,
830 0x83, 0x84, 0x87, 0x89, 0x8A, 0x8F, 0x91, 0xA3, 0xA6, 0xA8, 0xAA, 0xAF, 0xB1, 0xB5, 0xB8, 0x81,
831 0x8A, 0x8E, 0x9B, 0xA1, 0xA2, 0xA4, 0xA8, 0xAD, 0xB5, 0xB7, 0xBD, 0x82, 0x92, 0x99, 0xAD, 0xB0,
832 0xB2, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x92, 0x94, 0x96, 0x98, 0xA2, 0xA3, 0xA5, 0xA9, 0xAA,
833 0xAC, 0xB2, 0xB3, 0xB5, 0xB7, 0xB8, 0x82, 0x87, 0x89, 0x8B, 0x8D, 0x90, 0x92, 0x97, 0x9C, 0xA2,
834 0xA4, 0xAA, 0xAB, 0xAF, 0xB4, 0xB5, 0xB8, 0xBA, 0x80, 0x81, 0x86, 0x87, 0x88, 0x89, 0x8B, 0x8C,
835 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x96, 0x98, 0x9B, 0x9C, 0x9D, 0x9F, 0xA1, 0xA3, 0xA6, 0xA7, 0xB5,
836 0xB6, 0xBC, 0xBF, 0x8D, 0x8E, 0x91, 0x94, 0x95, 0x9E, 0xA9, 0xAC, 0xB4, 0xB7, 0xBF, 0x84, 0x85,
837 0x88, 0x89, 0x8B, 0x90, 0x97, 0x9A, 0x9B, 0x9E, 0xA2, 0xA4, 0xA6, 0xB1, 0xBE, 0x80, 0x83, 0x85,
838 0x91, 0x93, 0x95, 0x96, 0x98, 0x9A, 0x9B, 0x9C, 0xAD, 0xB7, 0xB9, 0x8F, 0x92, 0xA4, 0xA9, 0xAA,
839 0xAD, 0xB2, 0xB3, 0xB8, 0xBA, 0xBC, 0x86, 0x8F, 0x90, 0x98, 0x99, 0x9A, 0xA0, 0xA2, 0xA3, 0xA6,
840 0xA8, 0xAB, 0xAC, 0xAE, 0xAF, 0xB2, 0xB5, 0xBA, 0xBB, 0x84, 0x8B, 0x8D, 0x94, 0x96, 0x9B, 0x9C,
841 0xA0, 0xAC, 0xAE, 0xB5, 0xBC, 0xBE, 0x8C, 0x94, 0x96, 0x97, 0x9A, 0xA7, 0xAC, 0xAD, 0xAE, 0xB0,
842 0xB9, 0x83, 0x88, 0x90, 0x91, 0x96, 0x97, 0x98, 0x9D, 0xA1, 0xA4, 0xA5, 0xA8, 0x83, 0x87, 0x90,
843 0x93, 0x94, 0x98, 0x99, 0x9A, 0xA1, 0xAB, 0xB5, 0xB6, 0xB8, 0xBA, 0x81, 0x84, 0x91, 0x92, 0x93,
844 0x9A, 0x9B, 0x9E, 0xA0, 0xA2, 0xAA, 0xB0, 0xB5, 0xB7, 0xBC, 0xBD, 0xBE, 0xBF, 0x81, 0xB7, 0x80,
845 0x82, 0x83, 0x87, 0x89, 0x8A, 0x8B, 0x8F, 0x91, 0x93, 0x94, 0x96, 0x98, 0x99, 0xA0, 0xA2, 0xA3,
846 0xA4, 0xA5, 0xA7, 0xA8, 0xAD, 0xB2, 0xB9, 0xBB, 0xBC, 0xBE, 0x83, 0x87, 0x8A, 0x8C, 0x8D, 0x94,
847 0x95, 0x96, 0x98, 0x9C, 0xA1, 0xA2, 0xA5, 0x9C, 0xA1, 0xA8, 0xAA, 0xAE, 0xAF, 0xB2, 0xBB, 0xBF,
848 0x80, 0x82, 0x84, 0x8B, 0x8C, 0x8D, 0x8F, 0x90, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA2, 0xA3, 0xA4,
849 0xA5, 0xA6, 0xAA, 0xAC, 0xB0, 0xB2, 0xB3, 0xB5, 0xB6, 0xB7, 0xB8, 0xBA, 0xBD, 0x85, 0x86, 0x88,
850 0x8A, 0x8B, 0x8D, 0x8E, 0x8F, 0x94, 0x95, 0x97, 0x98, 0x99, 0x9B, 0x9C, 0xA0, 0xA3, 0xA7, 0xA8,
851 0xAA, 0xB0, 0xB1, 0xB2, 0xB4, 0xB6, 0xB7, 0xB8, 0xB9, 0xBB, 0xBC, 0x80, 0x81, 0x84, 0x85, 0x86,
852 0x87, 0x89, 0x8B, 0x8C, 0x8D, 0x8E, 0x91, 0x95, 0x96, 0x99, 0x9B, 0x9C, 0xA2, 0xA3, 0xA8, 0xAA,
853 0xAB, 0xB0, 0xB2, 0xB6, 0xB7, 0xB9, 0xBB, 0x80, 0x84, 0x86, 0x87, 0x88, 0x8A, 0x8D, 0x8E, 0x8F,
854 0x91, 0x93, 0x96, 0x99, 0x9C, 0x9E, 0xA4, 0xA7, 0xAA, 0xB0, 0xB2, 0xB8, 0xB9, 0xBD, 0xBE, 0x82,
855 0x84, 0x86, 0x88, 0x89, 0x92, 0x96, 0x99, 0x9C, 0x9E, 0xA0, 0xA1, 0xA2, 0xA4, 0xA6, 0xA8, 0xA9,
856 0xAB, 0xAD, 0xB1, 0xB4, 0xB9, 0xBA, 0xBC, 0x81, 0x84, 0x85, 0x86, 0x8B, 0x8D, 0x8F, 0x90, 0x98,
857 0x9C, 0xA0, 0xA3, 0xA6, 0xA8, 0xAB, 0xAD, 0xB3, 0xB4, 0x83, 0x86, 0x88, 0x8B, 0x93, 0x9C, 0xAD,
858 0xAE, 0xB2, 0xB3, 0xB5, 0xB6, 0xBB, 0xBF, 0x81, 0x82, 0x83, 0x85, 0x86, 0x88, 0x8C, 0x8F, 0x90,
859 0x91, 0x92, 0x93, 0x97, 0x98, 0x9A, 0xA1, 0xA4, 0xAC, 0xAD, 0xB4, 0xB7, 0xB8, 0xBB, 0xBC, 0xBD,
860 0x86, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x94, 0x95, 0x98, 0x9B, 0x9E, 0xA7, 0xAB, 0xAF, 0xB0, 0xB1,
861 0xB3, 0xB4, 0xA8, 0xAA, 0xAF, 0xB1, 0xB6, 0x83, 0x84, 0x86, 0x9B, 0x9C, 0x9F, 0xA2, 0xA9, 0xAB,
862 0xAD, 0xAE, 0xAF, 0xB2, 0xB4, 0xBC, 0xBD, 0xBE, 0x83, 0x85, 0x89, 0x8A, 0x8C, 0x90, 0x92, 0x93,
863 0x94, 0x98, 0x9D, 0x9E, 0xA0, 0xA1, 0xA4, 0xA8, 0xAC, 0xAE, 0xBD, 0xBE, 0x82, 0x85, 0x89, 0x8B,
864 0x8C, 0x90, 0x91, 0x92, 0x95, 0x97, 0x96, 0x97, 0x98, 0x99, 0xA5, 0xA8, 0xAC, 0xAD, 0xAE, 0xB3,
865 0xB4, 0xBC, 0x81, 0x84, 0x85, 0x86, 0x88, 0x90, 0x91, 0x92, 0x95, 0x98, 0x9B, 0x9D, 0x9F, 0xA2,
866 0xAD, 0xAE, 0xB1, 0xB2, 0xB8, 0xBB, 0xBF, 0x81, 0x85, 0x8E, 0x8F, 0x92, 0x93, 0x99, 0xA8, 0xAB,
867 0xB0, 0xB7, 0xBE, 0x80, 0x82, 0x83, 0x85, 0x8D, 0x95, 0x97, 0x9A, 0x9B, 0x9F, 0xA2, 0xA4, 0xA5,
868 0xA9, 0xAA, 0xAB, 0xA8, 0xAD, 0xB0, 0xB8, 0xBC, 0x80, 0x84, 0x8F, 0x91, 0x93, 0x94, 0x98, 0x9E,
869 0x9F, 0xA2, 0xA3, 0xA6, 0xAA, 0xAB, 0xAD, 0xAE, 0xAF, 0xB1, 0xB4, 0xB7, 0xBB, 0x86, 0x98, 0x9A,
870 0x9F, 0xA2, 0xA3, 0xA5, 0xA7, 0xA8, 0xA9, 0xAA, 0xAE, 0xAF, 0xB1, 0xB2, 0xBB, 0xBC, 0x81, 0x82,
871 0x83, 0x84, 0x85, 0x8D, 0x8E, 0x8F, 0x91, 0x94, 0x98, 0x9A, 0xAF, 0xB4, 0x83, 0x8E, 0x91, 0x92,
872 0x93, 0x96, 0x97, 0x9F, 0xA0, 0xA8, 0xAA, 0xAB, 0xAD, 0xAE, 0xB4, 0xB9, 0x80, 0x86, 0x89, 0x8A,
873 0x8F, 0x91, 0x92, 0x94, 0x96, 0x9B, 0xA1, 0xA2, 0xA3, 0xA4, 0xA8, 0xB0, 0xB1, 0xB2, 0xB5, 0x84,
874 0x86, 0x88, 0x89, 0x8A, 0x8C, 0x8D, 0x90, 0x92, 0x93, 0x94, 0x95, 0x9B, 0xA1, 0xA4, 0xA5, 0xAD,
875 0xAE, 0xAF, 0xB0, 0xB2, 0xB9, 0xBA, 0xBB, 0xBE, 0x86, 0x87, 0x88, 0x92, 0x97, 0x9A, 0xA0, 0xA7,
876 0xB6, 0xB8, 0xA5, 0xA7, 0xA9, 0xAB, 0xAC, 0xB0, 0xB3, 0xB4, 0xB6, 0x83, 0x86, 0x87, 0x88, 0x89,
877 0x8E, 0x92, 0x95, 0x9B, 0x9F, 0xA3, 0xA6, 0xA8, 0xAA, 0xAB, 0xAC, 0xBB, 0xBE, 0xBF, 0x81, 0x84,
878 0x86, 0x88, 0x90, 0x91, 0x99, 0x9C, 0x9D, 0x9E, 0xA0, 0xA1, 0xA4, 0xAC, 0xAF, 0xB2, 0xBA, 0x87,
879 0x89, 0x8F, 0x9A, 0xA4, 0xA9, 0xAB, 0xAF, 0xB2, 0xB4, 0xB8, 0xBA, 0xBB, 0x81, 0x82, 0x84, 0x86,
880 0x8F, 0x93, 0x99, 0xA6, 0xAD, 0xAF, 0xB2, 0xB8, 0xB9, 0xBA, 0xBD, 0x9A, 0x9B, 0x9E, 0xB5, 0xB8,
881 0xB9, 0xBD, 0xBF, 0x81, 0x88, 0x8B, 0x8C, 0x91, 0x92, 0x93, 0x95, 0x97, 0x9D, 0x9F, 0xA5, 0xA6,
882 0xA9, 0xAA, 0xAD, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBE, 0xBF, 0x84, 0x8C, 0x8D, 0x8E, 0x8F, 0x90,
883 0x92, 0x94, 0x98, 0x99, 0x9B, 0x9C, 0x9D, 0x9E, 0xA0, 0xA5, 0xA8, 0xAF, 0xB4, 0xB6, 0xB7, 0xB9,
884 0xBB, 0xBC, 0xBD, 0x87, 0x88, 0x8E, 0x93, 0x95, 0xA0, 0xA1, 0xAC, 0xBB, 0xBE, 0x8A, 0x8B, 0x8E,
885 0x8F, 0x92, 0x94, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA6, 0xA7, 0xAA, 0xAC, 0xB2, 0xB6, 0xB7, 0x8D,
886 0x95, 0x9C, 0x9D, 0xA0, 0x81, 0x83, 0x84, 0x85, 0x86, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
887 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E,
888 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE,
889 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE,
890 0xBF, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
891 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E,
892 0xA0, 0xA1, 0xA2, 0xA3, 0xA5
893};
894
895
896#define UTF8_CODE_2B_1_NUM (sizeof(Utf8CodeTable_2B_1st)/2)
897#define UTF8_CODE_3B_1_NUM (sizeof(Utf8CodeTable_3B_1st)/2)
898#define UTF8_CODE_3B_2_NUM (sizeof(Utf8CodeTable_3B_2nd)/2)
899#define UTF8_CODE_2B_2_NUM sizeof(Utf8CodeTable_2B_2nd)
900#define UTF8_CODE_3B_3_NUM sizeof(Utf8CodeTable_3B_3rd)
901
902static font_work_t FontWork[NUM_FONT_WORK];
903static uint8_t font_data[256];
904#endif
905
906/*
907 * フォントの幅を取得する
908 * param1 phead: フォントヘッダ
909 * param2 c: キャラクタ
910 * param3 len:キャラクタの長さ領域へのポインタ
911 * return フォント幅
912 */
913static int
914GetFontWidth(font_head_t *phead, uint8_t c, int *len)
915{
916 const font_t **pf = phead->font_table;
917 int width;
918
919 width = phead->font_width;
920 *len = 1;
921 if(phead->file_attribute == 0){
922 if(c < 0x80 || c >= 0xA0)
923 width = pf[c]->width;
924 }
925 else if((c & 0xE0) == 0xC0)
926 *len = 2;
927 else if((c & 0xF0) == 0xE0)
928 *len = 3;
929 else if((c & 0xF8) == 0xF0)
930 *len = 4;
931 else if(c < 0x80 || c >= 0xA0)
932 width = pf[c]->width;
933 return width;
934}
935
936#ifndef NOT_USEFILFONT
937/*
938 * 2バイトコードビットマップ番号
939 */
940static int
941GetFont2BNo(font_work_t *pft, uint8_t *ptr)
942{
943 int totalk = 0;
944 uint32_t i, j;
945
946 for(i = 0 ; i < UTF8_CODE_2B_1_NUM; i++){
947 if(Utf8CodeTable_2B_1st[i][0] == ptr[0]) {
948 for(j = 0 ; j < Utf8CodeTable_2B_1st[i][1] ; j++) {
949 if(Utf8CodeTable_2B_2nd[totalk] == ptr[1])
950 return totalk;
951 totalk++;
952 }
953 }
954 else
955 totalk += Utf8CodeTable_2B_1st[i][1];
956 }
957 return -1;
958}
959
960/*
961 * 3バイトコードビットマップ番号
962 */
963static int
964GetFont3BNo(font_work_t *pft, uint8_t *ptr)
965{
966 int totalk = 0;
967 int totalj = 0;
968 uint32_t i, j, k;
969
970 for(i = 0 ; i < UTF8_CODE_3B_1_NUM ; i++){
971 if(Utf8CodeTable_3B_1st[i][0] == ptr[0]){
972 for(j = 0 ; j < Utf8CodeTable_3B_1st[i][1]; j++){
973 if(Utf8CodeTable_3B_2nd[totalj][0] == ptr[1]){
974 for(k = 0 ; k < Utf8CodeTable_3B_2nd[totalj][1]; k++) {
975 if(Utf8CodeTable_3B_3rd[totalk] == ptr[2])
976 return totalk;
977 totalk++;
978 }
979 return -1;
980 }
981 else /*読み飛ばすbitmap個数を蓄積*/
982 totalk += Utf8CodeTable_3B_2nd[totalj][1];
983 totalj++;
984 }
985 }
986 else{ /*読み飛ばすbitmap個数を蓄積*/
987 for(j = 0 ; j < Utf8CodeTable_3B_1st[i][1] ; j++){
988 totalk += Utf8CodeTable_3B_2nd[totalj][1];
989 totalj++;
990 }
991 }
992 }
993 return -1;
994}
995#endif
996
997/*
998 * 文字描画
999 * param1 pDrawProp: Pointer to Draw Prop
1000 * param2 x0: 文字描画 X座標始点
1001 * param3 y0: 文字描画 Y座標始点
1002 * param4 c: 文字イメージへのポインタ
1003 */
1004#ifndef MAX_FONT_IMAGE
1005static void
1006DrawChar(LCD_DrawProp_t *pDrawProp, uint16_t x0, uint16_t y0, const font_t *pf)
1007{
1008 LCD_Handler_t *hlcd = pDrawProp->hlcd;
1009 uint32_t h, w;
1010 const uint8_t *pchar;
1011
1012 for(h = 0 ; h < pf->height ; h++){
1013 pchar = (pf->image + pf->stride * h);
1014 for(w = 0; w < pf->width ; w++){
1015 if(pf->stride != 0 && (pchar[w/8] & (1 << (7 - (w % 8)))) != 0){
1016 lcd_drawPixel(hlcd, (x0 + w), (y0 + h), pDrawProp->TextColor);
1017 }
1018 else{
1019 lcd_drawPixel(hlcd, (x0 + w), (y0 + h), pDrawProp->BackColor);
1020 }
1021 }
1022 }
1023}
1024#else
1025static void
1026DrawChar(LCD_DrawProp_t *pDrawProp, uint16_t x0, uint16_t y0, const font_t *pf)
1027{
1028 LCD_Handler_t *hlcd = pDrawProp->hlcd;
1029 uint32_t h, w;
1030 const uint8_t *pchar;
1031#ifdef TRS_COLOR_T
1032 TRS_COLOR_T image[MAX_FONT_IMAGE];
1033#else
1034 color_t image[MAX_FONT_IMAGE];
1035#endif
1036
1037 for(h = 0 ; h < pf->height ; h++){
1038 pchar = (pf->image + pf->stride * h);
1039 for(w = 0; w < pf->width ; w++){
1040 if(pf->stride != 0 && (pchar[w/8] & (1 << (7 - (w % 8)))) != 0){
1041 image[w] = pDrawProp->TextColor;
1042 }
1043 else{
1044 image[w] = pDrawProp->BackColor;
1045 }
1046 }
1047 lcd_drawImageHLine(hlcd, x0, (y0 + h), pf->width, image);
1048 }
1049}
1050#endif
1051
1052/*
1053 * 一文字描画(UTF8)
1054 * param1 pDrawProp: Pointer to Draw Prop
1055 * param2 x0: 文字描画 X座標始点
1056 * param3 y0: 文字描画 Y座標始点
1057 * param4 描画コードへのポインタ
1058 */
1059static void
1060lcd_DisplayData(LCD_DrawProp_t *pDrawProp, uint16_t x0, uint16_t y0, uint8_t *ptr)
1061{
1062 font_head_t *phead = (font_head_t *)pDrawProp->pFont;
1063 DrawChar(pDrawProp, x0, y0, lcd_getFontTable(phead, ptr));
1064}
1065
1066/*
1067 * フォントデータからフォントテーブルを取り出す
1068 * param1 phead: フォントヘッダ
1069 * param2 ptr: フォントデータへのポインタ
1070 * return フォントテーブルへのポインタ
1071 */
1072const font_t *
1073lcd_getFontTable(font_head_t *phead, uint8_t *ptr)
1074{
1075 const font_t **pf = phead->font_table;
1076 int len;
1077#ifndef NOT_USEFILFONT
1078 char fname[32+4];
1079 font_t *pwf = (font_t *)font_data;
1080 font_file_head_t *pffh;
1081 font_work_t *pft = NULL;
1082 int no, i, k, off = 0;
1083#endif
1084
1085 GetFontWidth(phead, *ptr, &len);
1086 if(len == 1)
1087 return pf[*ptr];
1088 else if(phead->file_attribute == 0)
1089 return pf[*ptr];
1090 else{
1091#ifndef NOT_USEFILFONT
1092 pwf->width = phead->font_width;
1093 pwf->height = phead->font_height;
1094 pwf->stride = (phead->font_width + 7) >> 3;
1095 pwf->iheight = phead->font_height;
1096 memset(pwf->image, 0, pwf->height * pwf->stride);
1097
1098 if(phead->pdata == NULL){
1099 for(i = 0 ; i < NUM_FONT_WORK ; i++){
1100 if(FontWork[i].pffont == NULL){
1101 pft = &FontWork[i];
1102 break;
1103 }
1104 }
1105 if(pft != NULL){
1106 sprintf(fname, "%s.fnt", phead->font_name);
1107 pft->pffont = fopen(fname, "rb");
1108 if(pft->pffont != NULL){
1109 if(fread(pft->table, sizeof(font_file_head_t), 1, pft->pffont) != 1){
1110 phead->file_attribute = 0x00;
1111 fclose(pft->pffont);
1112 pft->pffont = NULL;
1113 }
1114 else{
1115 pffh = (font_file_head_t *)pft->table;
1116 pft->offset_image_2B = pffh->off_2byte_font;
1117 pft->offset_image_3B = pffh->off_3byte_font;
1118 pft->num_table2B = pffh->siz_2byte_font;
1119 pft->num_table3B = pffh->siz_3byte_font;
1120 pft->image_size = pffh->csize + pffh->isize;
1121 phead->pdata = pft;
1122 }
1123 }
1124 else
1125 phead->file_attribute = 0x00;
1126 }
1127 else
1128 phead->file_attribute = 0x00;
1129 }
1130 if((pft = phead->pdata) != NULL){
1131 no = -1;
1132 if(len == 2){
1133 no = GetFont2BNo(pft, ptr);
1134 off = pft->offset_image_2B;
1135 }
1136 else if(len == 3){
1137 no = GetFont3BNo(pft, ptr);
1138 off = pft->offset_image_3B;
1139 }
1140 if(no >= 0){
1141 uint32_t length = 0;
1142 uint32_t data = 0, j, c;
1143 fseek(pft->pffont, (no * pft->image_size + off), SEEK_SET);
1144 fread(pft->table, pft->image_size, 1, pft->pffont);
1145
1146 for(i = j = k = no = 0 ; i < phead->font_height ; i++){
1147 while(length < phead->font_width){
1148 data <<= 8;
1149 data |= pft->table[no+1];
1150 length += 8;
1151 no++;
1152 }
1153 j = phead->font_width;
1154 while(j >= 8){
1155 c = data >> (length - 8);
1156 j -= 8;
1157 length -= 8;
1158 pwf->image[k++] = c;
1159 }
1160 if(j > 0){
1161 c = data << (8-j);
1162 length -= j;
1163 pwf->image[k++] = c;
1164 }
1165 }
1166 }
1167 }
1168 return pwf;
1169#else
1170 return pf[*ptr];
1171#endif
1172 }
1173}
1174
1175/*
1176 * 文字列表示ラインクリア
1177 * param1 pDrawProp: Pointer to Draw Prop
1178 * param2 ライン番号
1179 */
1180void
1181lcd_clearStringLine(LCD_DrawProp_t *pDrawProp, uint16_t Line)
1182{
1183 font_head_t *phead = (font_head_t *)pDrawProp->pFont;
1184 lcd_fillRect(pDrawProp->hlcd, 0, (Line * phead->font_height), pDrawProp->hlcd->_width, phead->font_height, pDrawProp->BackColor);
1185}
1186
1187/*
1188 * 一文字描画
1189 * param1 pDrawProp: Pointer to Draw Prop
1190 * param2 x0: 文字描画 X座標始点
1191 * param3 y0: 文字描画 Y座標始点
1192 * param4 描画アスキーコード(範囲は0x20から0x7Eまで)
1193 */
1194void
1195lcd_DisplayChar(LCD_DrawProp_t *pDrawProp, uint16_t x0, uint16_t y0, uint8_t Ascii)
1196{
1197 font_head_t *phead = (font_head_t *)pDrawProp->pFont;
1198 const font_t **pf = phead->font_table;
1199
1200 DrawChar(pDrawProp, x0, y0, pf[Ascii]);
1201}
1202
1203/*
1204 * 文字列描画
1205 * param1 pDrawProp: Pointer to Draw Prop
1206 * param1 x0: 文字列描画 X座標始点
1207 * param2 y0: 文字列描画 Y座標始点
1208 * param3 Text: 描画文字列へのポインタ
1209 * param4 Mode: 表示モード
1210 */
1211void
1212lcd_DisplayStringAt(LCD_DrawProp_t *pDrawProp, uint16_t x0, uint16_t y0, uint8_t *Text, Line_ModeTypdef Mode)
1213{
1214 LCD_Handler_t *hlcd = pDrawProp->hlcd;
1215 font_head_t *phead = (font_head_t *)pDrawProp->pFont;
1216 const font_t **pf = phead->font_table;
1217 uint16_t ref_column = 1;
1218 uint32_t size = 0;
1219 uint8_t *ptr = (uint8_t *)Text, c;
1220 int wid, len = 1;
1221
1222 /* Get the text size */
1223 while(*ptr){
1224 size += GetFontWidth(phead, *ptr, &len);
1225 ptr += len;
1226 }
1227
1228 switch (Mode){
1229 case CENTER_MODE:
1230 ref_column = x0 + (hlcd->_width - size) / 2;
1231 break;
1232 case LEFT_MODE:
1233 ref_column = x0;
1234 break;
1235 case RIGHT_MODE:
1236 ref_column = - x0 + (hlcd->_width - size);
1237 break;
1238 default:
1239 ref_column = x0;
1240 break;
1241 }
1242
1243 /*
1244 * 開始カラム位置をスクリーン内に収める
1245 */
1246 if((ref_column < 1) || (ref_column >= 0x8000)){
1247 ref_column = 1;
1248 }
1249
1250 /*
1251 * 一文字描画を使って文字列を描画する
1252 */
1253 while (((c = *Text) != 0) && pf[c] != 0 && (ref_column + (wid = GetFontWidth(phead, c, &len))) <= hlcd->_width){
1254 lcd_DisplayData(pDrawProp, ref_column, y0, Text);
1255 ref_column += wid; /* 次のカラムに移動 */
1256 Text += len; /* 次の文字に移動 */
1257 }
1258}
1259
1260/*
1261 * 文字列描画
1262 * param1 pDrawProp: Pointer to Draw Prop
1263 * param2 x0: 文字列描画 X座標始点
1264 * param3 y0: 文字列描画 Y座標始点
1265 * param4 Text: 描画文字列へのポインタ
1266 */
1267void
1268lcd_DisplayStringAtLine(LCD_DrawProp_t *pDrawProp, uint16_t Line, uint8_t *ptr)
1269{
1270 font_head_t *phead = (font_head_t *)pDrawProp->pFont;
1271 const font_t *pf;
1272
1273 pf = phead->font_table[' '];
1274 lcd_DisplayStringAt(pDrawProp, 0, Line * pf->height, ptr, LEFT_MODE);
1275}
1276
Note: See TracBrowser for help on using the repository browser.