summaryrefslogtreecommitdiff
path: root/appl/cmd/dd.b
blob: cba8067cc0fa81ad2d935f5251a5c96bc459d9ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
implement dd;

include "sys.m";
	sys: Sys;
	stderr: ref Sys->FD;

include "draw.m";

dd: module
{
	init: fn(nil: ref Draw->Context, argv: list of string);
};

BIG:	con 2147483647;
LCASE,
UCASE,
SWAB,
NERR	,
SYNC	:	con (1<<iota);

NULL,
CNULL,
EBCDIC,
IBM,
ASCII,
BLOCK,
UNBLOCK:	con iota;

cflag:		int;
ctype:	int;

fflag:		int;
arg:		string;
ifile:		string;
ofile:		string;
ibuf:		array of byte;
obuf:		array of byte;
op:		int;
skip:		int;
oseekn:	int;
iseekn:	int;
count:	int;
files:=	1;
ibs:=		512;
obs:=		512;
bs:		int;
cbs:		int;
ibc:		int;
obc:		int;
cbc:		int;
nifr:		int;
nipr:		int;
nofr:		int;
nopr:		int;
ntrunc:	int;
ibf:		ref Sys->FD;
obf:		ref Sys->FD;
nspace:	int;

iskey(key:string, s: string): int
{
	return key[0] == '-' && key[1:] ==  s;
}

exits(msg: string)
{
	if(msg == nil)
		exit;

	raise "fail:"+msg;
}

perror(msg: string)
{
	sys->fprint(stderr, "%s: %r\n", msg);
}

init(nil: ref Draw->Context, argv: list of string)
{
	sys = load Sys Sys->PATH;
	if(sys == nil)
		return;
	stderr = sys->fildes(2);

	ctype = NULL;
	argv = tl argv;
	while(argv != nil) {
		key := hd argv;
		argv = tl argv;
		if(argv == nil){
			sys->fprint(stderr, "dd: arg %s needs a value\n", key);
			exits("arg");
		}
		arg = hd argv;
		argv = tl argv;
		if(iskey(key, "ibs")) {
			ibs = number(BIG);
			continue;
		}
		if(iskey(key, "obs")) {
			obs = number(BIG);
			continue;
		}
		if(iskey(key, "cbs")) {
			cbs = number(BIG);
			continue;
		}
		if(iskey(key, "bs")) {
			bs = number(BIG);
			continue;
		}
		if(iskey(key, "if")) {
			ifile = arg[0:];
			continue;
		}
		if(iskey(key, "of")) {
			ofile = arg[0:];
			continue;
		}
		if(iskey(key, "skip")) {
			skip = number(BIG);
			continue;
		}
		if(iskey(key, "seek") || iskey(key, "oseek")) {
			oseekn = number(BIG);
			continue;
		}
		if(iskey(key, "iseek")) {
			iseekn = number(BIG);
			continue;
		}
		if(iskey(key, "count")) {
			count = number(BIG);
			continue;
		}
		if(iskey(key, "files")) {
			files = number(BIG);
			continue;
		}
		if(iskey(key, "conv")) {
			do {
				if(arg == nil)
					break;
				if(match(","))
					continue;
				if(match("ebcdic")) {
					ctype = EBCDIC;
					continue;
				}
				if(match("ibm")) {
					ctype = IBM;
					continue;
				}
				if(match("ascii")) {
					ctype = ASCII;
					continue;
				}
				if(match("block")) {
					ctype = BLOCK;
					continue;
				}
				if(match("unblock")) {
					ctype = UNBLOCK;
					continue;
				}
				if(match("lcase")) {
					cflag |= LCASE;
					continue;
				}
				if(match("ucase")) {
					cflag |= UCASE;
					continue;
				}
				if(match("swab")) {
					cflag |= SWAB;
					continue;
				}
				if(match("noerror")) {
					cflag |= NERR;
					continue;
				}
				if(match("sync")) {
					cflag |= SYNC;
					continue;
				}
			} while(1);
			continue;
		}
		sys->fprint(stderr, "dd: bad arg: %s\n", key);
		exits("arg");
	}
	if(ctype == NULL && cflag&(LCASE|UCASE))
		ctype = CNULL;
	if(ifile != nil)
		ibf = sys->open(ifile, Sys->OREAD);
	else
		ibf = sys->fildes(sys->dup(0, -1));

	if(ibf == nil) {
		sys->fprint(stderr, "dd: open %s: %r\n", ifile);
		exits("open");
	}

	if(ofile != nil){
		obf = sys->create(ofile, Sys->OWRITE, 8r664);
		if(obf == nil) {
			sys->fprint(stderr, "dd: create %s: %r\n", ofile);
			exits("create");
		}
	}else{
		obf = sys->fildes(sys->dup(1, -1));
		if(obf == nil) {
			sys->fprint(stderr, "dd: can't dup file descriptor: %r\n");
			exits("dup");
		}
	}
	if(bs)
		ibs = obs = bs;
	if(ibs == obs && ctype == NULL)
		fflag++;
	if(ibs == 0 || obs == 0) {
		sys->fprint(stderr, "dd: counts: cannot be zero\n");
		exits("counts");
	}
	ibuf = array[ibs] of byte;
	obuf = array[obs] of byte;

	if(fflag)
		obuf = ibuf;

	sys->seek(obf, big obs*big oseekn, Sys->SEEKRELA);
	sys->seek(ibf, big ibs*big iseekn,  Sys->SEEKRELA);
	while(skip) {
		sys->read(ibf, ibuf, ibs);
		skip--;
	}

	ibc = 0;
	obc = 0;
	cbc = 0;
	op = 0;
	ip := 0;
	do {
		if(ibc-- == 0) {
			ibc = 0;
			if(count==0 || nifr+nipr!=count) {
				if(cflag&(NERR|SYNC))
					for(ip=0; ip < len ibuf; ip++)
						ibuf[ip] = byte 0;
				ibc = sys->read(ibf, ibuf, ibs);
			}
			if(ibc == -1) {
				perror("read");
				if((cflag&NERR) == 0) {
					flsh();
					term();
				}
				ibc = 0;
				for(c:=0; c<ibs; c++)
					if(ibuf[c] != byte 0)
						ibc = c;
				stats();
			}
			if(ibc == 0 && --files<=0) {
				flsh();
				term();
			}
			if(ibc != ibs) {
				nipr++;
				if(cflag&SYNC)
					ibc = ibs;
			} else
				nifr++;
			ip = 0;
			c := (ibc>>1) & ~1;
			if(cflag&SWAB && c) do {
				a := ibuf[ip++];
				ibuf[ip-1] = ibuf[ip];
				ibuf[ip++] = a;
			} while(--c);
			if(fflag) {
				obc = ibc;
				flsh();
				ibc = 0;
			}
			continue;
		}
		c := 0;
		c |= int ibuf[ip++];
		c &= 8r377;
		conv(c);
	} while(1);
}

conv(c: int)
{
	case ctype {
	NULL => null(c);
	CNULL => cnull(c);
	EBCDIC => ebcdic(c);
	IBM => ibm(c);
	ASCII => ascii(c);
	BLOCK => block(c);
	UNBLOCK => unblock(c);
	}
}

flsh()
{
	if(obc) {
		if(obc == obs)
			nofr++;
		else
			nopr++;
		c := sys->write(obf, obuf, obc);
		if(c != obc) {
			perror("write");
			term();
		}
		obc = 0;
	}
}

match(s: string): int
{
	if(len s > len arg)
		return 0;
	if(arg[:len s] == s) {
		arg = arg[len s:];
		return 1;
	}
	return 0;
}


number(bignum: int): int
{
	n := 0;
	i := 0;
	while(i < len arg && arg[i] >= '0' && arg[i] <= '9')
		n = n*10 + arg[i++] - '0';
	for(;i<len arg; i++) case(arg[i]) {
		'k' =>
			n *= 1024;
		'b' =>
			n *= 512;
		'x' =>
			arg = arg[i:];
			n *= number(BIG);
	}
	if(n>=bignum || n<0) {
		sys->fprint(stderr, "dd: argument out of range\n");
		exits("range");
	}
	return n;
}

cnull(cc: int)
{
	c := cc;
	if((cflag&UCASE) && c>='a' && c<='z')
		c += 'A'-'a';
	if((cflag&LCASE) && c>='A' && c<='Z')
		c += 'a'-'A';
	null(c);
}

null(c: int)
{
	obuf[op++] = byte c;
	if(++obc >= obs) {
		flsh();
		op = 0;
	}
}

ascii(cc: int)
{
	c := etoa[cc];
	if(cbs == 0) {
		cnull(int c);
		return;
	}
	if(c == byte ' ')
		nspace++;
	else {
		while(nspace > 0) {
			null(' ');
			nspace--;
		}
		cnull(int c);
	}

	if(++cbc >= cbs) {
		null('\n');
		cbc = 0;
		nspace = 0;
	}
}

unblock(cc: int)
{
	c := cc & 8r377;
	if(cbs == 0) {
		cnull(c);
		return;
	}
	if(c == ' ')
		nspace++;
	else {
		while(nspace > 0) {
			null(' ');
			nspace--;
		}
		cnull(c);
	}

	if(++cbc >= cbs) {
		null('\n');
		cbc = 0;
		nspace = 0;
	}
}

ebcdic(cc: int)
{

	c := cc;
	if(cflag&UCASE && c>='a' && c<='z')
		c += 'A'-'a';
	if(cflag&LCASE && c>='A' && c<='Z')
		c += 'a'-'A';
	c = int atoe[c];
	if(cbs == 0) {
		null(c);
		return;
	}
	if(cc == '\n') {
		while(cbc < cbs) {
			null(int atoe[' ']);
			cbc++;
		}
		cbc = 0;
		return;
	}
	if(cbc == cbs)
		ntrunc++;
	cbc++;
	if(cbc <= cbs)
		null(c);
}

ibm(cc: int)
{
	c := cc;
	if(cflag&UCASE && c>='a' && c<='z')
		c += 'A'-'a';
	if(cflag&LCASE && c>='A' && c<='Z')
		c += 'a'-'A';
	c = int atoibm[c] & 8r377;
	if(cbs == 0) {
		null(c);
		return;
	}
	if(cc == '\n') {
		while(cbc < cbs) {
			null(int atoibm[' ']);
			cbc++;
		}
		cbc = 0;
		return;
	}
	if(cbc == cbs)
		ntrunc++;
	cbc++;
	if(cbc <= cbs)
		null(c);
}

block(cc: int)
{
	c := cc;
	if(cflag&UCASE && c>='a' && c<='z')
		c += 'A'-'a';
	if(cflag&LCASE && c>='A' && c<='Z')
		c += 'a'-'A';
	c &= 8r377;
	if(cbs == 0) {
		null(c);
		return;
	}
	if(cc == '\n') {
		while(cbc < cbs) {
			null(' ');
			cbc++;
		}
		cbc = 0;
		return;
	}
	if(cbc == cbs)
		ntrunc++;
	cbc++;
	if(cbc <= cbs)
		null(c);
}

term()
{
	stats();
	exits(nil);
}

stats()
{
	sys->fprint(stderr, "%ud+%ud records in\n", nifr, nipr);
	sys->fprint(stderr, "%ud+%ud records out\n", nofr, nopr);
	if(ntrunc)
		sys->fprint(stderr, "%ud truncated records\n", ntrunc);
}

etoa := array[] of
{
	byte 8r000,byte 8r001,byte 8r002,byte 8r003,byte 8r234,byte 8r011,byte 8r206,byte 8r177,
	byte 8r227,byte 8r215,byte 8r216,byte 8r013,byte 8r014,byte 8r015,byte 8r016,byte 8r017,
	byte 8r020,byte 8r021,byte 8r022,byte 8r023,byte 8r235,byte 8r205,byte 8r010,byte 8r207,
	byte 8r030,byte 8r031,byte 8r222,byte 8r217,byte 8r034,byte 8r035,byte 8r036,byte 8r037,
	byte 8r200,byte 8r201,byte 8r202,byte 8r203,byte 8r204,byte 8r012,byte 8r027,byte 8r033,
	byte 8r210,byte 8r211,byte 8r212,byte 8r213,byte 8r214,byte 8r005,byte 8r006,byte 8r007,
	byte 8r220,byte 8r221,byte 8r026,byte 8r223,byte 8r224,byte 8r225,byte 8r226,byte 8r004,
	byte 8r230,byte 8r231,byte 8r232,byte 8r233,byte 8r024,byte 8r025,byte 8r236,byte 8r032,
	byte 8r040,byte 8r240,byte 8r241,byte 8r242,byte 8r243,byte 8r244,byte 8r245,byte 8r246,
	byte 8r247,byte 8r250,byte 8r133,byte 8r056,byte 8r074,byte 8r050,byte 8r053,byte 8r041,
	byte 8r046,byte 8r251,byte 8r252,byte 8r253,byte 8r254,byte 8r255,byte 8r256,byte 8r257,
	byte 8r260,byte 8r261,byte 8r135,byte 8r044,byte 8r052,byte 8r051,byte 8r073,byte 8r136,
	byte 8r055,byte 8r057,byte 8r262,byte 8r263,byte 8r264,byte 8r265,byte 8r266,byte 8r267,
	byte 8r270,byte 8r271,byte 8r174,byte 8r054,byte 8r045,byte 8r137,byte 8r076,byte 8r077,
	byte 8r272,byte 8r273,byte 8r274,byte 8r275,byte 8r276,byte 8r277,byte 8r300,byte 8r301,
	byte 8r302,byte 8r140,byte 8r072,byte 8r043,byte 8r100,byte 8r047,byte 8r075,byte 8r042,
	byte 8r303,byte 8r141,byte 8r142,byte 8r143,byte 8r144,byte 8r145,byte 8r146,byte 8r147,
	byte 8r150,byte 8r151,byte 8r304,byte 8r305,byte 8r306,byte 8r307,byte 8r310,byte 8r311,
	byte 8r312,byte 8r152,byte 8r153,byte 8r154,byte 8r155,byte 8r156,byte 8r157,byte 8r160,
	byte 8r161,byte 8r162,byte 8r313,byte 8r314,byte 8r315,byte 8r316,byte 8r317,byte 8r320,
	byte 8r321,byte 8r176,byte 8r163,byte 8r164,byte 8r165,byte 8r166,byte 8r167,byte 8r170,
	byte 8r171,byte 8r172,byte 8r322,byte 8r323,byte 8r324,byte 8r325,byte 8r326,byte 8r327,
	byte 8r330,byte 8r331,byte 8r332,byte 8r333,byte 8r334,byte 8r335,byte 8r336,byte 8r337,
	byte 8r340,byte 8r341,byte 8r342,byte 8r343,byte 8r344,byte 8r345,byte 8r346,byte 8r347,
	byte 8r173,byte 8r101,byte 8r102,byte 8r103,byte 8r104,byte 8r105,byte 8r106,byte 8r107,
	byte 8r110,byte 8r111,byte 8r350,byte 8r351,byte 8r352,byte 8r353,byte 8r354,byte 8r355,
	byte 8r175,byte 8r112,byte 8r113,byte 8r114,byte 8r115,byte 8r116,byte 8r117,byte 8r120,
	byte 8r121,byte 8r122,byte 8r356,byte 8r357,byte 8r360,byte 8r361,byte 8r362,byte 8r363,
	byte 8r134,byte 8r237,byte 8r123,byte 8r124,byte 8r125,byte 8r126,byte 8r127,byte 8r130,
	byte 8r131,byte 8r132,byte 8r364,byte 8r365,byte 8r366,byte 8r367,byte 8r370,byte 8r371,
	byte 8r060,byte 8r061,byte 8r062,byte 8r063,byte 8r064,byte 8r065,byte 8r066,byte 8r067,
	byte 8r070,byte 8r071,byte 8r372,byte 8r373,byte 8r374,byte 8r375,byte 8r376,byte 8r377,
};
atoe := array[] of
{
	byte 8r000,byte 8r001,byte 8r002,byte 8r003,byte 8r067,byte 8r055,byte 8r056,byte 8r057,
	byte 8r026,byte 8r005,byte 8r045,byte 8r013,byte 8r014,byte 8r015,byte 8r016,byte 8r017,
	byte 8r020,byte 8r021,byte 8r022,byte 8r023,byte 8r074,byte 8r075,byte 8r062,byte 8r046,
	byte 8r030,byte 8r031,byte 8r077,byte 8r047,byte 8r034,byte 8r035,byte 8r036,byte 8r037,
	byte 8r100,byte 8r117,byte 8r177,byte 8r173,byte 8r133,byte 8r154,byte 8r120,byte 8r175,
	byte 8r115,byte 8r135,byte 8r134,byte 8r116,byte 8r153,byte 8r140,byte 8r113,byte 8r141,
	byte 8r360,byte 8r361,byte 8r362,byte 8r363,byte 8r364,byte 8r365,byte 8r366,byte 8r367,
	byte 8r370,byte 8r371,byte 8r172,byte 8r136,byte 8r114,byte 8r176,byte 8r156,byte 8r157,
	byte 8r174,byte 8r301,byte 8r302,byte 8r303,byte 8r304,byte 8r305,byte 8r306,byte 8r307,
	byte 8r310,byte 8r311,byte 8r321,byte 8r322,byte 8r323,byte 8r324,byte 8r325,byte 8r326,
	byte 8r327,byte 8r330,byte 8r331,byte 8r342,byte 8r343,byte 8r344,byte 8r345,byte 8r346,
	byte 8r347,byte 8r350,byte 8r351,byte 8r112,byte 8r340,byte 8r132,byte 8r137,byte 8r155,
	byte 8r171,byte 8r201,byte 8r202,byte 8r203,byte 8r204,byte 8r205,byte 8r206,byte 8r207,
	byte 8r210,byte 8r211,byte 8r221,byte 8r222,byte 8r223,byte 8r224,byte 8r225,byte 8r226,
	byte 8r227,byte 8r230,byte 8r231,byte 8r242,byte 8r243,byte 8r244,byte 8r245,byte 8r246,
	byte 8r247,byte 8r250,byte 8r251,byte 8r300,byte 8r152,byte 8r320,byte 8r241,byte 8r007,
	byte 8r040,byte 8r041,byte 8r042,byte 8r043,byte 8r044,byte 8r025,byte 8r006,byte 8r027,
	byte 8r050,byte 8r051,byte 8r052,byte 8r053,byte 8r054,byte 8r011,byte 8r012,byte 8r033,
	byte 8r060,byte 8r061,byte 8r032,byte 8r063,byte 8r064,byte 8r065,byte 8r066,byte 8r010,
	byte 8r070,byte 8r071,byte 8r072,byte 8r073,byte 8r004,byte 8r024,byte 8r076,byte 8r341,
	byte 8r101,byte 8r102,byte 8r103,byte 8r104,byte 8r105,byte 8r106,byte 8r107,byte 8r110,
	byte 8r111,byte 8r121,byte 8r122,byte 8r123,byte 8r124,byte 8r125,byte 8r126,byte 8r127,
	byte 8r130,byte 8r131,byte 8r142,byte 8r143,byte 8r144,byte 8r145,byte 8r146,byte 8r147,
	byte 8r150,byte 8r151,byte 8r160,byte 8r161,byte 8r162,byte 8r163,byte 8r164,byte 8r165,
	byte 8r166,byte 8r167,byte 8r170,byte 8r200,byte 8r212,byte 8r213,byte 8r214,byte 8r215,
	byte 8r216,byte 8r217,byte 8r220,byte 8r232,byte 8r233,byte 8r234,byte 8r235,byte 8r236,
	byte 8r237,byte 8r240,byte 8r252,byte 8r253,byte 8r254,byte 8r255,byte 8r256,byte 8r257,
	byte 8r260,byte 8r261,byte 8r262,byte 8r263,byte 8r264,byte 8r265,byte 8r266,byte 8r267,
	byte 8r270,byte 8r271,byte 8r272,byte 8r273,byte 8r274,byte 8r275,byte 8r276,byte 8r277,
	byte 8r312,byte 8r313,byte 8r314,byte 8r315,byte 8r316,byte 8r317,byte 8r332,byte 8r333,
	byte 8r334,byte 8r335,byte 8r336,byte 8r337,byte 8r352,byte 8r353,byte 8r354,byte 8r355,
	byte 8r356,byte 8r357,byte 8r372,byte 8r373,byte 8r374,byte 8r375,byte 8r376,byte 8r377,
};
atoibm := array[] of
{
	byte 8r000,byte 8r001,byte 8r002,byte 8r003,byte 8r067,byte 8r055,byte 8r056,byte 8r057,
	byte 8r026,byte 8r005,byte 8r045,byte 8r013,byte 8r014,byte 8r015,byte 8r016,byte 8r017,
	byte 8r020,byte 8r021,byte 8r022,byte 8r023,byte 8r074,byte 8r075,byte 8r062,byte 8r046,
	byte 8r030,byte 8r031,byte 8r077,byte 8r047,byte 8r034,byte 8r035,byte 8r036,byte 8r037,
	byte 8r100,byte 8r132,byte 8r177,byte 8r173,byte 8r133,byte 8r154,byte 8r120,byte 8r175,
	byte 8r115,byte 8r135,byte 8r134,byte 8r116,byte 8r153,byte 8r140,byte 8r113,byte 8r141,
	byte 8r360,byte 8r361,byte 8r362,byte 8r363,byte 8r364,byte 8r365,byte 8r366,byte 8r367,
	byte 8r370,byte 8r371,byte 8r172,byte 8r136,byte 8r114,byte 8r176,byte 8r156,byte 8r157,
	byte 8r174,byte 8r301,byte 8r302,byte 8r303,byte 8r304,byte 8r305,byte 8r306,byte 8r307,
	byte 8r310,byte 8r311,byte 8r321,byte 8r322,byte 8r323,byte 8r324,byte 8r325,byte 8r326,
	byte 8r327,byte 8r330,byte 8r331,byte 8r342,byte 8r343,byte 8r344,byte 8r345,byte 8r346,
	byte 8r347,byte 8r350,byte 8r351,byte 8r255,byte 8r340,byte 8r275,byte 8r137,byte 8r155,
	byte 8r171,byte 8r201,byte 8r202,byte 8r203,byte 8r204,byte 8r205,byte 8r206,byte 8r207,
	byte 8r210,byte 8r211,byte 8r221,byte 8r222,byte 8r223,byte 8r224,byte 8r225,byte 8r226,
	byte 8r227,byte 8r230,byte 8r231,byte 8r242,byte 8r243,byte 8r244,byte 8r245,byte 8r246,
	byte 8r247,byte 8r250,byte 8r251,byte 8r300,byte 8r117,byte 8r320,byte 8r241,byte 8r007,
	byte 8r040,byte 8r041,byte 8r042,byte 8r043,byte 8r044,byte 8r025,byte 8r006,byte 8r027,
	byte 8r050,byte 8r051,byte 8r052,byte 8r053,byte 8r054,byte 8r011,byte 8r012,byte 8r033,
	byte 8r060,byte 8r061,byte 8r032,byte 8r063,byte 8r064,byte 8r065,byte 8r066,byte 8r010,
	byte 8r070,byte 8r071,byte 8r072,byte 8r073,byte 8r004,byte 8r024,byte 8r076,byte 8r341,
	byte 8r101,byte 8r102,byte 8r103,byte 8r104,byte 8r105,byte 8r106,byte 8r107,byte 8r110,
	byte 8r111,byte 8r121,byte 8r122,byte 8r123,byte 8r124,byte 8r125,byte 8r126,byte 8r127,
	byte 8r130,byte 8r131,byte 8r142,byte 8r143,byte 8r144,byte 8r145,byte 8r146,byte 8r147,
	byte 8r150,byte 8r151,byte 8r160,byte 8r161,byte 8r162,byte 8r163,byte 8r164,byte 8r165,
	byte 8r166,byte 8r167,byte 8r170,byte 8r200,byte 8r212,byte 8r213,byte 8r214,byte 8r215,
	byte 8r216,byte 8r217,byte 8r220,byte 8r232,byte 8r233,byte 8r234,byte 8r235,byte 8r236,
	byte 8r237,byte 8r240,byte 8r252,byte 8r253,byte 8r254,byte 8r255,byte 8r256,byte 8r257,
	byte 8r260,byte 8r261,byte 8r262,byte 8r263,byte 8r264,byte 8r265,byte 8r266,byte 8r267,
	byte 8r270,byte 8r271,byte 8r272,byte 8r273,byte 8r274,byte 8r275,byte 8r276,byte 8r277,
	byte 8r312,byte 8r313,byte 8r314,byte 8r315,byte 8r316,byte 8r317,byte 8r332,byte 8r333,
	byte 8r334,byte 8r335,byte 8r336,byte 8r337,byte 8r352,byte 8r353,byte 8r354,byte 8r355,
	byte 8r356,byte 8r357,byte 8r372,byte 8r373,byte 8r374,byte 8r375,byte 8r376,byte 8r377,
};