Reformat minibidi.[ch] in line with my coding conventions. It was
[sgt/putty] / minibidi.h
CommitLineData
f0fccd51 1/************************************************************************
debe256d 2 * $Id$
f0fccd51 3 *
4 * ------------
5 * Description:
6 * ------------
7 * This is an implemention of Unicode's Bidirectional Algorithm
8 * (known as UAX #9).
9 *
10 * http://www.unicode.org/reports/tr9/
11 *
12 * Author: Ahmad Khalifa
13 *
14 * -----------------
15 * Revision Details: (Updated by Revision Control System)
16 * -----------------
debe256d 17 * $Date$
18 * $Author$
19 * $Revision$
f0fccd51 20 *
21 * (www.arabeyes.org - under MIT license)
22 *
23 ************************************************************************/
24
25/*
26 * TODO:
27 * =====
28 * - work almost finished
29 * - Shaping Table to be expanded to include the whole range.
30 * - Ligature handling
31 */
32
33#include <stdlib.h> /* definition of wchar_t*/
34
35#define LMASK 0x3F /* Embedding Level mask */
36#define OMASK 0xC0 /* Override mask */
37#define OISL 0x80 /* Override is L */
38#define OISR 0x40 /* Override is R */
39
40/* Shaping Helpers */
cd985a32 41#define STYPE(xh) ((((xh) >= SHAPE_FIRST) && ((xh) <= SHAPE_LAST)) ? \
42shapetypes[(xh)-SHAPE_FIRST].type : SU) /*))*/
43#define SISOLATED(xh) (shapetypes[(xh)-SHAPE_FIRST].form_b)
44#define SFINAL(xh) ((xh)+1)
45#define SINITIAL(xh) ((xh)+2)
46#define SMEDIAL(ch) ((ch)+3)
f0fccd51 47
48typedef struct bidi_char {
49 wchar_t origwc, wc;
50 unsigned short index;
51} bidi_char;
52
53/* function declarations */
54void flipThisRun(bidi_char *from, unsigned char* level, int max, int count);
55int findIndexOfRun(unsigned char* level , int start, int count, int tlevel);
56unsigned char getType(wchar_t ch);
57unsigned char setOverrideBits(unsigned char level, unsigned char override);
598b33ba 58int getPreviousLevel(unsigned char* level, int from);
f0fccd51 59unsigned char leastGreaterOdd(unsigned char x);
60unsigned char leastGreaterEven(unsigned char x);
61unsigned char getRLE(wchar_t ch);
62int do_shape(bidi_char *line, bidi_char *to, int count);
63int do_bidi(bidi_char *line, int count);
64void doMirror(wchar_t* ch);
65
66/* character types */
cd985a32 67enum {
68 L,
69 LRE,
70 LRO,
71 R,
72 AL,
73 RLE,
74 RLO,
75 PDF,
76 EN,
77 ES,
78 ET,
79 AN,
80 CS,
81 NSM,
82 BN,
83 B,
84 S,
85 WS,
86 ON,
f0fccd51 87};
88
89/* Shaping Types */
cd985a32 90enum {
91 SL, /* Left-Joining, doesnt exist in U+0600 - U+06FF */
92 SR, /* Right-Joining, ie has Isolated, Final */
93 SD, /* Dual-Joining, ie has Isolated, Final, Initial, Medial */
94 SU, /* Non-Joining */
95 SC /* Join-Causing, like U+0640 (TATWEEL) */
f0fccd51 96};
97
cd985a32 98typedef struct {
99 char type;
100 wchar_t form_b;
f0fccd51 101} shape_node;
102
103/* Kept near the actual table, for verification. */
104#define SHAPE_FIRST 0x621
105#define SHAPE_LAST 0x64A
106
107const shape_node shapetypes[] = {
cd985a32 108 /* index, Typ, Iso, Ligature Index*/
109 /* 621 */ {SU, 0xFE80},
110 /* 622 */ {SR, 0xFE81},
111 /* 623 */ {SR, 0xFE83},
112 /* 624 */ {SR, 0xFE85},
113 /* 625 */ {SR, 0xFE87},
114 /* 626 */ {SD, 0xFE89},
115 /* 627 */ {SR, 0xFE8D},
116 /* 628 */ {SD, 0xFE8F},
117 /* 629 */ {SR, 0xFE93},
118 /* 62A */ {SD, 0xFE95},
119 /* 62B */ {SD, 0xFE99},
120 /* 62C */ {SD, 0xFE9D},
121 /* 62D */ {SD, 0xFEA1},
122 /* 62E */ {SD, 0xFEA5},
123 /* 62F */ {SR, 0xFEA9},
124 /* 630 */ {SR, 0xFEAB},
125 /* 631 */ {SR, 0xFEAD},
126 /* 632 */ {SR, 0xFEAF},
127 /* 633 */ {SD, 0xFEB1},
128 /* 634 */ {SD, 0xFEB5},
129 /* 635 */ {SD, 0xFEB9},
130 /* 636 */ {SD, 0xFEBD},
131 /* 637 */ {SD, 0xFEC1},
132 /* 638 */ {SD, 0xFEC5},
133 /* 639 */ {SD, 0xFEC9},
134 /* 63A */ {SD, 0xFECD},
135 /* 63B */ {SU, 0x0},
136 /* 63C */ {SU, 0x0},
137 /* 63D */ {SU, 0x0},
138 /* 63E */ {SU, 0x0},
139 /* 63F */ {SU, 0x0},
140 /* 640 */ {SC, 0x0},
141 /* 641 */ {SD, 0xFED1},
142 /* 642 */ {SD, 0xFED5},
143 /* 643 */ {SD, 0xFED9},
144 /* 644 */ {SD, 0xFEDD},
145 /* 645 */ {SD, 0xFEE1},
146 /* 646 */ {SD, 0xFEE5},
147 /* 647 */ {SD, 0xFEE9},
148 /* 648 */ {SR, 0xFEED},
149 /* 649 */ {SR, 0xFEEF}, /* SD */
150 /* 64A */ {SD, 0xFEF1},
f0fccd51 151};
152
153/*
154 * This describes the data byte and its frequency
155 */
cd985a32 156typedef struct {
157 unsigned char d;
158 unsigned char f;
159} RLENode;
f0fccd51 160
161
162/* This is an array of RLENodes, which is the
163 * Compressed unicode types table
164 */
cd985a32 165const RLENode RLE_table[] = {
598b33ba 166 { BN, 9}, { S, 1}, { B, 1}, { S, 1}, { WS, 1},
167 { B, 1}, { BN, 14}, { B, 3}, { S, 1}, { WS, 1},
168 { ON, 2}, { ET, 3}, { ON, 5}, { ET, 1}, { CS, 1},
169 { ET, 1}, { CS, 1}, { ES, 1}, { EN, 10}, { CS, 1},
170 { ON, 6}, { L, 26}, { ON, 6}, { L, 26}, { ON, 4},
171 { BN, 6}, { B, 1}, { BN, 26}, { CS, 1}, { ON, 1},
172 { ET, 4}, { ON, 4}, { L, 1}, { ON, 5}, { ET, 2},
173 { EN, 2}, { ON, 1}, { L, 1}, { ON, 3}, { EN, 1},
174 { L, 1}, { ON, 5}, { L, 23}, { ON, 1}, { L, 31},
175 { ON, 1}, { L, 255}, { L, 42}, { ON, 1}, { L, 18},
176 { ON, 28}, { L, 94}, { ON, 2}, { L, 9}, { ON, 2},
177 { L, 7}, { ON, 14}, { L, 2}, { ON, 14}, { L, 5},
178 { ON, 9}, { L, 1}, { ON, 17}, {NSM, 80}, { ON, 16},
179 {NSM, 16}, { ON, 10}, { L, 1}, { ON, 11}, { L, 1},
180 { ON, 1}, { L, 3}, { ON, 1}, { L, 1}, { ON, 1},
181 { L, 20}, { ON, 1}, { L, 44}, { ON, 1}, { L, 38},
182 { ON, 10}, { L, 131}, {NSM, 4}, { ON, 1}, {NSM, 2},
183 { L, 69}, { ON, 1}, { L, 38}, { ON, 2}, { L, 2},
184 { ON, 6}, { L, 16}, { ON, 33}, { L, 38}, { ON, 2},
185 { L, 7}, { ON, 1}, { L, 39}, { ON, 1}, { L, 1},
186 { ON, 7}, {NSM, 17}, { ON, 1}, {NSM, 23}, { ON, 1},
187 {NSM, 3}, { R, 1}, {NSM, 1}, { R, 1}, {NSM, 2},
188 { R, 1}, {NSM, 1}, { ON, 11}, { R, 27}, { ON, 5},
189 { R, 5}, { ON, 23}, { CS, 1}, { ON, 14}, { AL, 1},
190 { ON, 3}, { AL, 1}, { ON, 1}, { AL, 26}, { ON, 5},
191 { AL, 11}, {NSM, 11}, { ON, 10}, { AN, 10}, { ET, 1},
192 { AN, 2}, { AL, 3}, {NSM, 1}, { AL, 101}, {NSM, 7},
193 { AL, 1}, {NSM, 7}, { AL, 2}, {NSM, 2}, { ON, 1},
194 {NSM, 4}, { ON, 2}, { EN, 10}, { AL, 5}, { ON, 1},
195 { AL, 14}, { ON, 1}, { BN, 1}, { AL, 1}, {NSM, 1},
196 { AL, 27}, { ON, 3}, {NSM, 27}, { ON, 53}, { AL, 38},
197 {NSM, 11}, { AL, 1}, { ON, 255}, { ON, 80}, {NSM, 2},
198 { L, 1}, { ON, 1}, { L, 53}, { ON, 2}, {NSM, 1},
199 { L, 4}, {NSM, 8}, { L, 4}, {NSM, 1}, { ON, 2},
200 { L, 1}, {NSM, 4}, { ON, 3}, { L, 10}, {NSM, 2},
201 { L, 13}, { ON, 16}, {NSM, 1}, { L, 2}, { ON, 1},
202 { L, 8}, { ON, 2}, { L, 2}, { ON, 2}, { L, 22},
203 { ON, 1}, { L, 7}, { ON, 1}, { L, 1}, { ON, 3},
204 { L, 4}, { ON, 2}, {NSM, 1}, { ON, 1}, { L, 3},
205 {NSM, 4}, { ON, 2}, { L, 2}, { ON, 2}, { L, 2},
206 {NSM, 1}, { ON, 9}, { L, 1}, { ON, 4}, { L, 2},
207 { ON, 1}, { L, 3}, {NSM, 2}, { ON, 2}, { L, 12},
208 { ET, 2}, { L, 7}, { ON, 7}, {NSM, 1}, { ON, 2},
209 { L, 6}, { ON, 4}, { L, 2}, { ON, 2}, { L, 22},
210 { ON, 1}, { L, 7}, { ON, 1}, { L, 2}, { ON, 1},
211 { L, 2}, { ON, 1}, { L, 2}, { ON, 2}, {NSM, 1},
212 { ON, 1}, { L, 3}, {NSM, 2}, { ON, 4}, {NSM, 2},
213 { ON, 2}, {NSM, 3}, { ON, 11}, { L, 4}, { ON, 1},
214 { L, 1}, { ON, 7}, { L, 10}, {NSM, 2}, { L, 3},
215 { ON, 12}, {NSM, 2}, { L, 1}, { ON, 1}, { L, 7},
216 { ON, 1}, { L, 1}, { ON, 1}, { L, 3}, { ON, 1},
217 { L, 22}, { ON, 1}, { L, 7}, { ON, 1}, { L, 2},
218 { ON, 1}, { L, 5}, { ON, 2}, {NSM, 1}, { L, 4},
219 {NSM, 5}, { ON, 1}, {NSM, 2}, { L, 1}, { ON, 1},
220 { L, 2}, {NSM, 1}, { ON, 2}, { L, 1}, { ON, 15},
221 { L, 1}, { ON, 5}, { L, 10}, { ON, 17}, {NSM, 1},
222 { L, 2}, { ON, 1}, { L, 8}, { ON, 2}, { L, 2},
223 { ON, 2}, { L, 22}, { ON, 1}, { L, 7}, { ON, 1},
224 { L, 2}, { ON, 2}, { L, 4}, { ON, 2}, {NSM, 1},
225 { L, 2}, {NSM, 1}, { L, 1}, {NSM, 3}, { ON, 3},
226 { L, 2}, { ON, 2}, { L, 2}, {NSM, 1}, { ON, 8},
227 {NSM, 1}, { L, 1}, { ON, 4}, { L, 2}, { ON, 1},
228 { L, 3}, { ON, 4}, { L, 11}, { ON, 17}, {NSM, 1},
229 { L, 1}, { ON, 1}, { L, 6}, { ON, 3}, { L, 3},
230 { ON, 1}, { L, 4}, { ON, 3}, { L, 2}, { ON, 1},
231 { L, 1}, { ON, 1}, { L, 2}, { ON, 3}, { L, 2},
232 { ON, 3}, { L, 3}, { ON, 3}, { L, 8}, { ON, 1},
233 { L, 3}, { ON, 4}, { L, 2}, {NSM, 1}, { L, 2},
234 { ON, 3}, { L, 3}, { ON, 1}, { L, 3}, {NSM, 1},
235 { ON, 9}, { L, 1}, { ON, 15}, { L, 12}, { ON, 14},
236 { L, 3}, { ON, 1}, { L, 8}, { ON, 1}, { L, 3},
237 { ON, 1}, { L, 23}, { ON, 1}, { L, 10}, { ON, 1},
238 { L, 5}, { ON, 4}, {NSM, 3}, { L, 4}, { ON, 1},
239 {NSM, 3}, { ON, 1}, {NSM, 4}, { ON, 7}, {NSM, 2},
240 { ON, 9}, { L, 2}, { ON, 4}, { L, 10}, { ON, 18},
241 { L, 2}, { ON, 1}, { L, 8}, { ON, 1}, { L, 3},
242 { ON, 1}, { L, 23}, { ON, 1}, { L, 10}, { ON, 1},
243 { L, 5}, { ON, 4}, { L, 1}, {NSM, 1}, { L, 5},
244 { ON, 1}, {NSM, 1}, { L, 2}, { ON, 1}, { L, 2},
245 {NSM, 2}, { ON, 7}, { L, 2}, { ON, 7}, { L, 1},
246 { ON, 1}, { L, 2}, { ON, 4}, { L, 10}, { ON, 18},
247 { L, 2}, { ON, 1}, { L, 8}, { ON, 1}, { L, 3},
248 { ON, 1}, { L, 23}, { ON, 1}, { L, 16}, { ON, 4},
249 { L, 3}, {NSM, 3}, { ON, 2}, { L, 3}, { ON, 1},
250 { L, 3}, {NSM, 1}, { ON, 9}, { L, 1}, { ON, 8},
251 { L, 2}, { ON, 4}, { L, 10}, { ON, 18}, { L, 2},
252 { ON, 1}, { L, 18}, { ON, 3}, { L, 24}, { ON, 1},
253 { L, 9}, { ON, 1}, { L, 1}, { ON, 2}, { L, 7},
254 { ON, 3}, {NSM, 1}, { ON, 4}, { L, 3}, {NSM, 3},
255 { ON, 1}, {NSM, 1}, { ON, 1}, { L, 8}, { ON, 18},
256 { L, 3}, { ON, 12}, { L, 48}, {NSM, 1}, { L, 2},
257 {NSM, 7}, { ON, 4}, { ET, 1}, { L, 7}, {NSM, 8},
258 { L, 13}, { ON, 37}, { L, 2}, { ON, 1}, { L, 1},
259 { ON, 2}, { L, 2}, { ON, 1}, { L, 1}, { ON, 2},
260 { L, 1}, { ON, 6}, { L, 4}, { ON, 1}, { L, 7},
261 { ON, 1}, { L, 3}, { ON, 1}, { L, 1}, { ON, 1},
262 { L, 1}, { ON, 2}, { L, 2}, { ON, 1}, { L, 4},
263 {NSM, 1}, { L, 2}, {NSM, 6}, { ON, 1}, {NSM, 2},
264 { L, 1}, { ON, 2}, { L, 5}, { ON, 1}, { L, 1},
265 { ON, 1}, {NSM, 6}, { ON, 2}, { L, 10}, { ON, 2},
266 { L, 2}, { ON, 34}, { L, 24}, {NSM, 2}, { L, 27},
267 {NSM, 1}, { L, 1}, {NSM, 1}, { L, 1}, {NSM, 1},
268 { ON, 4}, { L, 10}, { ON, 1}, { L, 34}, { ON, 6},
269 {NSM, 14}, { L, 1}, {NSM, 5}, { L, 1}, {NSM, 2},
270 { L, 4}, { ON, 4}, {NSM, 8}, { ON, 1}, {NSM, 36},
271 { ON, 1}, { L, 8}, {NSM, 1}, { L, 6}, { ON, 2},
272 { L, 1}, { ON, 48}, { L, 34}, { ON, 1}, { L, 5},
273 { ON, 1}, { L, 2}, { ON, 1}, { L, 1}, {NSM, 4},
274 { L, 1}, {NSM, 1}, { ON, 3}, {NSM, 2}, { L, 1},
275 {NSM, 1}, { ON, 6}, { L, 24}, {NSM, 2}, { ON, 70},
276 { L, 38}, { ON, 10}, { L, 41}, { ON, 2}, { L, 1},
277 { ON, 4}, { L, 90}, { ON, 5}, { L, 68}, { ON, 5},
278 { L, 82}, { ON, 6}, { L, 7}, { ON, 1}, { L, 63},
279 { ON, 1}, { L, 1}, { ON, 1}, { L, 4}, { ON, 2},
280 { L, 7}, { ON, 1}, { L, 1}, { ON, 1}, { L, 4},
281 { ON, 2}, { L, 39}, { ON, 1}, { L, 1}, { ON, 1},
282 { L, 4}, { ON, 2}, { L, 31}, { ON, 1}, { L, 1},
283 { ON, 1}, { L, 4}, { ON, 2}, { L, 7}, { ON, 1},
284 { L, 1}, { ON, 1}, { L, 4}, { ON, 2}, { L, 7},
285 { ON, 1}, { L, 7}, { ON, 1}, { L, 23}, { ON, 1},
286 { L, 31}, { ON, 1}, { L, 1}, { ON, 1}, { L, 4},
287 { ON, 2}, { L, 7}, { ON, 1}, { L, 39}, { ON, 1},
288 { L, 19}, { ON, 6}, { L, 28}, { ON, 35}, { L, 85},
289 { ON, 12}, { L, 255}, { L, 255}, { L, 120}, { ON, 9},
290 { WS, 1}, { L, 26}, { ON, 5}, { L, 81}, { ON, 15},
291 { L, 13}, { ON, 1}, { L, 4}, {NSM, 3}, { ON, 11},
292 { L, 18}, {NSM, 3}, { L, 2}, { ON, 9}, { L, 18},
293 {NSM, 2}, { ON, 12}, { L, 13}, { ON, 1}, { L, 3},
294 { ON, 1}, {NSM, 2}, { ON, 12}, { L, 55}, {NSM, 7},
295 { L, 8}, {NSM, 1}, { L, 2}, {NSM, 11}, { L, 7},
296 { ET, 1}, { L, 1}, { ON, 3}, { L, 10}, { ON, 33},
297 {NSM, 3}, { BN, 1}, { ON, 1}, { L, 10}, { ON, 6},
298 { L, 88}, { ON, 8}, { L, 41}, {NSM, 1}, { ON, 255},
299 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 91},
300 { L, 156}, { ON, 4}, { L, 90}, { ON, 6}, { L, 22},
301 { ON, 2}, { L, 6}, { ON, 2}, { L, 38}, { ON, 2},
302 { L, 6}, { ON, 2}, { L, 8}, { ON, 1}, { L, 1},
303 { ON, 1}, { L, 1}, { ON, 1}, { L, 1}, { ON, 1},
304 { L, 31}, { ON, 2}, { L, 53}, { ON, 1}, { L, 7},
305 { ON, 1}, { L, 1}, { ON, 3}, { L, 3}, { ON, 1},
306 { L, 7}, { ON, 3}, { L, 4}, { ON, 2}, { L, 6},
307 { ON, 4}, { L, 13}, { ON, 5}, { L, 3}, { ON, 1},
308 { L, 7}, { ON, 3}, { WS, 11}, { BN, 3}, { L, 1},
309 { R, 1}, { ON, 24}, { WS, 1}, { B, 1}, {LRE, 1},
310 {RLE, 1}, {PDF, 1}, {LRO, 1}, {RLO, 1}, { WS, 1},
311 { ET, 5}, { ON, 42}, { WS, 1}, { BN, 4}, { ON, 6},
312 { BN, 6}, { EN, 1}, { L, 1}, { ON, 2}, { EN, 6},
313 { ET, 2}, { ON, 3}, { L, 1}, { EN, 10}, { ET, 2},
314 { ON, 20}, { ET, 18}, { ON, 30}, {NSM, 27}, { ON, 23},
315 { L, 1}, { ON, 4}, { L, 1}, { ON, 2}, { L, 10},
316 { ON, 1}, { L, 1}, { ON, 3}, { L, 5}, { ON, 6},
317 { L, 1}, { ON, 1}, { L, 1}, { ON, 1}, { L, 1},
318 { ON, 1}, { L, 4}, { ET, 1}, { L, 3}, { ON, 1},
319 { L, 7}, { ON, 3}, { L, 3}, { ON, 5}, { L, 5},
320 { ON, 22}, { L, 36}, { ON, 142}, { ET, 2}, { ON, 255},
321 { ON, 35}, { L, 69}, { ON, 26}, { L, 1}, { ON, 202},
322 { EN, 60}, { L, 78}, { EN, 1}, { ON, 255}, { ON, 255},
323 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
324 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 32},
325 { WS, 1}, { ON, 4}, { L, 3}, { ON, 25}, { L, 9},
326 {NSM, 6}, { ON, 1}, { L, 5}, { ON, 2}, { L, 5},
327 { ON, 4}, { L, 86}, { ON, 2}, {NSM, 2}, { ON, 2},
328 { L, 3}, { ON, 1}, { L, 90}, { ON, 1}, { L, 4},
329 { ON, 5}, { L, 40}, { ON, 4}, { L, 94}, { ON, 1},
330 { L, 40}, { ON, 56}, { L, 45}, { ON, 3}, { L, 36},
331 { ON, 28}, { L, 28}, { ON, 3}, { L, 50}, { ON, 15},
332 { L, 12}, { ON, 4}, { L, 47}, { ON, 1}, { L, 119},
333 { ON, 4}, { L, 99}, { ON, 2}, { L, 31}, { ON, 1},
334 { L, 1}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
335 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
336 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
337 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
338 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
339 { ON, 255}, { ON, 205}, { L, 1}, { ON, 74}, { L, 1},
340 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
341 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
342 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
343 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
344 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
345 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
346 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
347 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
348 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
349 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
350 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
351 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
352 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
353 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
354 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
355 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
356 { ON, 255}, { ON, 245}, { L, 1}, { ON, 90}, { L, 255},
357 { L, 255}, { L, 255}, { L, 255}, { L, 145}, { ON, 255},
358 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
359 { ON, 255}, { ON, 122}, { L, 1}, { ON, 255}, { ON, 255},
360 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
361 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
362 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
363 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
364 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
365 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
366 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
367 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
368 { ON, 255}, { ON, 205}, { L, 1}, { ON, 92}, { L, 1},
369 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 129}, { L, 2},
370 { ON, 126}, { L, 2}, { ON, 255}, { ON, 255}, { ON, 255},
371 { ON, 255}, { ON, 2}, { L, 2}, { ON, 255}, { ON, 255},
372 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
373 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
374 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
375 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255}, { ON, 255},
376 { ON, 255}, { ON, 255}, { ON, 255}, { ON, 23}, { L, 255},
377 { L, 48}, { ON, 2}, { L, 59}, { ON, 149}, { L, 7},
378 { ON, 12}, { L, 5}, { ON, 5}, { R, 1}, {NSM, 1},
379 { R, 10}, { ET, 1}, { R, 13}, { ON, 1}, { R, 5},
380 { ON, 1}, { R, 1}, { ON, 1}, { R, 2}, { ON, 1},
381 { R, 2}, { ON, 1}, { R, 10}, { AL, 98}, { ON, 33},
382 { AL, 255}, { AL, 108}, { ON, 18}, { AL, 64}, { ON, 2},
383 { AL, 54}, { ON, 40}, { AL, 13}, { ON, 3}, {NSM, 16},
384 { ON, 16}, {NSM, 4}, { ON, 44}, { CS, 1}, { ON, 1},
385 { CS, 1}, { ON, 2}, { CS, 1}, { ON, 9}, { ET, 1},
386 { ON, 2}, { ET, 2}, { ON, 5}, { ET, 2}, { ON, 5},
387 { AL, 5}, { ON, 1}, { AL, 135}, { ON, 2}, { BN, 1},
388 { ON, 3}, { ET, 3}, { ON, 5}, { ET, 1}, { CS, 1},
389 { ET, 1}, { CS, 1}, { ES, 1}, { EN, 10}, { CS, 1},
390 { ON, 6}, { L, 26}, { ON, 6}, { L, 26}, { ON, 11},
391 { L, 89}, { ON, 3}, { L, 6}, { ON, 2}, { L, 6},
392 { ON, 2}, { L, 6}, { ON, 2}, { L, 3}, { ON, 3},
393 { ET, 2}, { ON, 3}, { ET, 2}, { ON, 9}, { L, 14},
f0fccd51 394};