-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathv42.c
712 lines (712 loc) · 48.8 KB
/
v42.c
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
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
void putc(char c)
{
*((char *) 0xffffffff) = c;
}
void puts(const char *s)
{
while (*s)
{
*((char *) 0xffffffff) = *s++;
}
}
int abs(int x)
{
return x < 0 ? -x : x;
}
void puti(int x)
{
int i = 0, j = 0;
char buf[12];
if (x < 0)
{
x = -x;
buf[i++] = '-';
}
buf[i] = '0' + ((x / 1000000000) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x / 100000000) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x / 10000000) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x / 1000000) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x / 100000) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x / 10000) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x / 1000) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x / 100) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x / 10) % 10);
if (j || buf[i] != '0')
j = i += 1;
buf[i] = '0' + ((x) % 10);
j = i + 1;
buf[j] = 0;
puts(buf);
}
void putf(double x)
{
int dec = (int) x;
int fra = abs((int) ((x - dec) * 1000000));
puti(dec);
putc('.');
puti(fra);
}
void *memcpy(void *d, const void *s, unsigned long t)
{
while (t--)
{
*((char *) d) = *((char *) s);
}
return d;
}
int strncmp(const char *s1, const char *s2, unsigned long n)
{
unsigned long i;
for (i = 0; i < n; i++)
{
if (s1[i] < s2[i])
return -1;
else if (s1[i] > s2[i])
return +1;
}
return 0;
}
int rand(void)
{
static unsigned long next = 1;
next = next * 1103515245 + 12345;
return (unsigned int) (next / 65536) % 32768;
}
double fabsd(double x)
{
return x < 0 ? -x : x;
}
double sind(double rad)
{
double app;
double diff;
int inc = 1;
while (rad > 2 * 3.14159265358979323846)
rad -= 2 * 3.14159265358979323846;
while (rad < -2 * 3.14159265358979323846)
rad += 2 * 3.14159265358979323846;
app = diff = rad;
diff = (diff * (-(rad * rad))) /
((2.0 * inc) * (2.0 * inc + 1.0));
app = app + diff;
inc++;
while (fabsd(diff) >= 0.00001)
{
diff = (diff * (-(rad * rad))) /
((2.0 * inc) * (2.0 * inc + 1.0));
app = app + diff;
inc++;
}
return app;
}
double cosd(double rad)
{
double app;
double diff;
int inc = 1;
rad += 3.14159265358979323846 / 2.0;
while (rad > 2 * 3.14159265358979323846)
rad -= 2 * 3.14159265358979323846;
while (rad < -2 * 3.14159265358979323846)
rad += 2 * 3.14159265358979323846;
app = diff = rad;
diff = (diff * (-(rad * rad))) /
((2.0 * inc) * (2.0 * inc + 1.0));
app = app + diff;
inc++;
while (fabsd(diff) >= 0.00001)
{
diff = (diff * (-(rad * rad))) /
((2.0 * inc) * (2.0 * inc + 1.0));
app = app + diff;
inc++;
}
return app;
}
double tand(double rad)
{
return sind(rad) / cosd(rad);
}
double sqrtd(double val)
{
double x = val / 10;
double dx;
double diff;
double min_tol = 0.00001;
int i, flag;
flag = 0;
if (val == 0)
x = 0;
else
{
for (i = 1; i < 20; i++)
{
if (!flag)
{
dx = (val - (x * x)) / (2.0 * x);
x = x + dx;
diff = val - (x * x);
if (fabsd(diff) <= min_tol)
flag = 1;
} else
x = x;
}
}
return x;
}
int p0;
int p1;
int p2;
int c1;
int c2;
int c3;
int escape;
int compress;
struct dict
{
unsigned int parent:11;
unsigned int kids:11;
unsigned int sibling:11;
unsigned int data:8;
};
struct dict dict[(1 << 11) + 1];
unsigned long last;
unsigned char inbuf[] = {
'%', '!', 'P', 'S', '-', 'A', 'd', 'o', 'b', 'e', '-', '2', '.', '0', '\n',
'%', '%', 'C', 'r', 'e', 'a', 't', 'o', 'r', ':', ' ', 'd', 'v', 'i', 'p', 's', 'k', ' ', '5', '.', '5', '8', 'a', ' ', 'C', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', ' ', '1', '9', '8', '6', ',', ' ', '1', '9', '9', '4', ' ', 'R', 'a', 'd', 'i', 'c', 'a', 'l', ' ', 'E', 'y', 'e', ' ', 'S', 'o', 'f', 't', 'w', 'a', 'r', 'e', '\n',
'%', '%', 'T', 'i', 't', 'l', 'e', ':', ' ', 's', 'e', 's', 't', 'e', 'm', 'p', 'l', 'a', 't', 'e', '.', 'd', 'v', 'i', '\n',
'%', '%', 'P', 'a', 'g', 'e', 's', ':', ' ', '1', '\n',
'%', '%', 'P', 'a', 'g', 'e', 'O', 'r', 'd', 'e', 'r', ':', ' ', 'A', 's', 'c', 'e', 'n', 'd', '\n',
'%', '%', 'B', 'o', 'u', 'n', 'd', 'i', 'n', 'g', 'B', 'o', 'x', ':', ' ', '0', ' ', '0', ' ', '6', '1', '2', ' ', '7', '9', '2', '\n',
'%', '%', 'D', 'o', 'c', 'u', 'm', 'e', 'n', 't', 'F', 'o', 'n', 't', 's', ':', ' ', 'T', 'i', 'm', 'e', 's', '-', 'B', 'o', 'l', 'd', ' ', 'T', 'i', 'm', 'e', 's', '-', 'R', 'o', 'm', 'a', 'n', ' ', 'T', 'i', 'm', 'e', 's', '-', 'B', 'o', 'l', 'd', 'I', 't', 'a', 'l', 'i', 'c', ' ', 'T', 'i', 'm', 'e', 's', '-', 'I', 't', 'a', 'l', 'i', 'c', '\n',
'%', '%', 'D', 'o', 'c', 'u', 'm', 'e', 'n', 't', 'P', 'a', 'p', 'e', 'r', 'S', 'i', 'z', 'e', 's', ':', ' ', 'L', 'e', 't', 't', 'e', 'r', '\n',
'%', '%', 'E', 'n', 'd', 'C', 'o', 'm', 'm', 'e', 'n', 't', 's', '\n',
'%', 'D', 'V', 'I', 'P', 'S', 'C', 'o', 'm', 'm', 'a', 'n', 'd', 'L', 'i', 'n', 'e', ':', ' ', 'd', 'v', 'i', 'p', 's', ' ', 's', 'e', 's', 't', 'e', 'm', 'p', 'l', 'a', 't', 'e', '.', 'd', 'v', 'i', '\n',
'%', 'D', 'V', 'I', 'P', 'S', 'P', 'a', 'r', 'a', 'm', 'e', 't', 'e', 'r', 's', ':', ' ', 'd', 'p', 'i', '=', '3', '0', '0', ',', ' ', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'e', 'd', ',', ' ', 'c', 'o', 'm', 'm', 'e', 'n', 't', 's', ' ', 'r', 'e', 'm', 'o', 'v', 'e', 'd', '\n',
'%', 'D', 'V', 'I', 'P', 'S', 'S', 'o', 'u', 'r', 'c', 'e', ':', ' ', ' ', 'T', 'e', 'X', ' ', 'o', 'u', 't', 'p', 'u', 't', ' ', '1', '9', '9', '6', '.', '0', '1', '.', '2', '5', ':', '2', '2', '0', '4', '\n',
'%', '%', 'B', 'e', 'g', 'i', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 't', ':', ' ', 't', 'e', 'x', 'c', '.', 'p', 'r', 'o', '\n',
'/', 'T', 'e', 'X', 'D', 'i', 'c', 't', ' ', '2', '5', '0', ' ', 'd', 'i', 'c', 't', ' ', 'd', 'e', 'f', ' ', 'T', 'e', 'X', 'D', 'i', 'c', 't', ' ', 'b', 'e', 'g', 'i', 'n', ' ', '/', 'N', '{', 'd', 'e', 'f', '}', 'd', 'e', 'f', ' ', '/', 'B', '{', 'b', 'i', 'n', 'd', ' ', 'd', 'e', 'f', '}', 'N', ' ', '/', 'S', '{', 'e', 'x', 'c', 'h', '}', 'N', '\n',
'/', 'X', '{', 'S', ' ', 'N', '}', 'B', ' ', '/', 'T', 'R', '{', 't', 'r', 'a', 'n', 's', 'l', 'a', 't', 'e', '}', 'N', ' ', '/', 'i', 's', 'l', 's', ' ', 'f', 'a', 'l', 's', 'e', ' ', 'N', ' ', '/', 'v', 's', 'i', 'z', 'e', ' ', '1', '1', ' ', '7', '2', ' ', 'm', 'u', 'l', ' ', 'N', ' ', '/', 'h', 's', 'i', 'z', 'e', ' ', '8', '.', '5', ' ', '7', '2', '\n',
'm', 'u', 'l', ' ', 'N', ' ', '/', 'l', 'a', 'n', 'd', 'p', 'l', 'u', 's', '9', '0', '{', 'f', 'a', 'l', 's', 'e', '}', 'd', 'e', 'f', ' ', '/', '@', 'r', 'i', 'g', 'i', 'n', '{', 'i', 's', 'l', 's', '{', '[', '0', ' ', 'l', 'a', 'n', 'd', 'p', 'l', 'u', 's', '9', '0', '{', '1', ' ', '-', '1', '}', '{', '-', '1', ' ', '1', '}', '\n',
'i', 'f', 'e', 'l', 's', 'e', ' ', '0', ' ', '0', ' ', '0', ']', 'c', 'o', 'n', 'c', 'a', 't', '}', 'i', 'f', ' ', '7', '2', ' ', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', 'd', 'i', 'v', ' ', '7', '2', ' ', 'V', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', 'd', 'i', 'v', ' ', 'n', 'e', 'g', ' ', 's', 'c', 'a', 'l', 'e', '\n',
'i', 's', 'l', 's', '{', 'l', 'a', 'n', 'd', 'p', 'l', 'u', 's', '9', '0', '{', 'V', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', '7', '2', ' ', 'd', 'i', 'v', ' ', 'v', 's', 'i', 'z', 'e', ' ', 'm', 'u', 'l', ' ', '0', ' ', 'e', 'x', 'c', 'h', '}', '{', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', '-', '7', '2', ' ', 'd', 'i', 'v', '\n',
'h', 's', 'i', 'z', 'e', ' ', 'm', 'u', 'l', ' ', '0', '}', 'i', 'f', 'e', 'l', 's', 'e', ' ', 'T', 'R', '}', 'i', 'f', ' ', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', 'V', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', 'v', 's', 'i', 'z', 'e', ' ', '-', '7', '2', ' ', 'd', 'i', 'v', ' ', '1', ' ', 'a', 'd', 'd', ' ', 'm', 'u', 'l', '\n',
'T', 'R', '[', 'm', 'a', 't', 'r', 'i', 'x', ' ', 'c', 'u', 'r', 'r', 'e', 'n', 't', 'm', 'a', 't', 'r', 'i', 'x', '{', 'd', 'u', 'p', ' ', 'd', 'u', 'p', ' ', 'r', 'o', 'u', 'n', 'd', ' ', 's', 'u', 'b', ' ', 'a', 'b', 's', ' ', '0', '.', '0', '0', '0', '0', '1', ' ', 'l', 't', '{', 'r', 'o', 'u', 'n', 'd', '}', 'i', 'f', '}', '\n',
'f', 'o', 'r', 'a', 'l', 'l', ' ', 'r', 'o', 'u', 'n', 'd', ' ', 'e', 'x', 'c', 'h', ' ', 'r', 'o', 'u', 'n', 'd', ' ', 'e', 'x', 'c', 'h', ']', 's', 'e', 't', 'm', 'a', 't', 'r', 'i', 'x', '}', 'N', ' ', '/', '@', 'l', 'a', 'n', 'd', 's', 'c', 'a', 'p', 'e', '{', '/', 'i', 's', 'l', 's', ' ', 't', 'r', 'u', 'e', ' ', 'N', '}', 'B', '\n',
'/', '@', 'm', 'a', 'n', 'u', 'a', 'l', 'f', 'e', 'e', 'd', '{', 's', 't', 'a', 't', 'u', 's', 'd', 'i', 'c', 't', ' ', '/', 'm', 'a', 'n', 'u', 'a', 'l', 'f', 'e', 'e', 'd', ' ', 't', 'r', 'u', 'e', ' ', 'p', 'u', 't', '}', 'B', ' ', '/', '@', 'c', 'o', 'p', 'i', 'e', 's', '{', '/', '#', 'c', 'o', 'p', 'i', 'e', 's', ' ', 'X', '}', 'B', '\n',
'/', 'F', 'M', 'a', 't', '[', '1', ' ', '0', ' ', '0', ' ', '-', '1', ' ', '0', ' ', '0', ']', 'N', ' ', '/', 'F', 'B', 'B', '[', '0', ' ', '0', ' ', '0', ' ', '0', ']', 'N', ' ', '/', 'n', 'n', ' ', '0', ' ', 'N', ' ', '/', 'I', 'E', ' ', '0', ' ', 'N', ' ', '/', 'c', 't', 'r', ' ', '0', ' ', 'N', ' ', '/', 'd', 'f', '-', 't', 'a', 'i', 'l', '{', '\n',
'/', 'n', 'n', ' ', '8', ' ', 'd', 'i', 'c', 't', ' ', 'N', ' ', 'n', 'n', ' ', 'b', 'e', 'g', 'i', 'n', ' ', '/', 'F', 'o', 'n', 't', 'T', 'y', 'p', 'e', ' ', '3', ' ', 'N', ' ', '/', 'F', 'o', 'n', 't', 'M', 'a', 't', 'r', 'i', 'x', ' ', 'f', 'n', 't', 'r', 'x', ' ', 'N', ' ', '/', 'F', 'o', 'n', 't', 'B', 'B', 'o', 'x', ' ', 'F', 'B', 'B', ' ', 'N', '\n',
's', 't', 'r', 'i', 'n', 'g', ' ', '/', 'b', 'a', 's', 'e', ' ', 'X', ' ', 'a', 'r', 'r', 'a', 'y', ' ', '/', 'B', 'i', 't', 'M', 'a', 'p', 's', ' ', 'X', ' ', '/', 'B', 'u', 'i', 'l', 'd', 'C', 'h', 'a', 'r', '{', 'C', 'h', 'a', 'r', 'B', 'u', 'i', 'l', 'd', 'e', 'r', '}', 'N', ' ', '/', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', ' ', 'I', 'E', ' ', 'N', '\n',
'e', 'n', 'd', ' ', 'd', 'u', 'p', '{', '/', 'f', 'o', 'o', ' ', 's', 'e', 't', 'f', 'o', 'n', 't', '}', '2', ' ', 'a', 'r', 'r', 'a', 'y', ' ', 'c', 'o', 'p', 'y', ' ', 'c', 'v', 'x', ' ', 'N', ' ', 'l', 'o', 'a', 'd', ' ', '0', ' ', 'n', 'n', ' ', 'p', 'u', 't', ' ', '/', 'c', 't', 'r', ' ', '0', ' ', 'N', '[', '}', 'B', ' ', '/', 'd', 'f', '{', '\n',
'/', 's', 'f', ' ', '1', ' ', 'N', ' ', '/', 'f', 'n', 't', 'r', 'x', ' ', 'F', 'M', 'a', 't', ' ', 'N', ' ', 'd', 'f', '-', 't', 'a', 'i', 'l', '}', 'B', ' ', '/', 'd', 'f', 's', '{', 'd', 'i', 'v', ' ', '/', 's', 'f', ' ', 'X', ' ', '/', 'f', 'n', 't', 'r', 'x', '[', 's', 'f', ' ', '0', ' ', '0', ' ', 's', 'f', ' ', 'n', 'e', 'g', ' ', '0', ' ', '0', ']', '\n',
'N', ' ', 'd', 'f', '-', 't', 'a', 'i', 'l', '}', 'B', ' ', '/', 'E', '{', 'p', 'o', 'p', ' ', 'n', 'n', ' ', 'd', 'u', 'p', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'f', 'o', 'n', 't', ' ', 's', 'e', 't', 'f', 'o', 'n', 't', '}', 'B', ' ', '/', 'c', 'h', '-', 'w', 'i', 'd', 't', 'h', '{', 'c', 'h', '-', 'd', 'a', 't', 'a', ' ', 'd', 'u', 'p', '\n',
'l', 'e', 'n', 'g', 't', 'h', ' ', '5', ' ', 's', 'u', 'b', ' ', 'g', 'e', 't', '}', 'B', ' ', '/', 'c', 'h', '-', 'h', 'e', 'i', 'g', 'h', 't', '{', 'c', 'h', '-', 'd', 'a', 't', 'a', ' ', 'd', 'u', 'p', ' ', 'l', 'e', 'n', 'g', 't', 'h', ' ', '4', ' ', 's', 'u', 'b', ' ', 'g', 'e', 't', '}', 'B', ' ', '/', 'c', 'h', '-', 'x', 'o', 'f', 'f', '{', '\n',
'1', '2', '8', ' ', 'c', 'h', '-', 'd', 'a', 't', 'a', ' ', 'd', 'u', 'p', ' ', 'l', 'e', 'n', 'g', 't', 'h', ' ', '3', ' ', 's', 'u', 'b', ' ', 'g', 'e', 't', ' ', 's', 'u', 'b', '}', 'B', ' ', '/', 'c', 'h', '-', 'y', 'o', 'f', 'f', '{', 'c', 'h', '-', 'd', 'a', 't', 'a', ' ', 'd', 'u', 'p', ' ', 'l', 'e', 'n', 'g', 't', 'h', ' ', '2', ' ', 's', 'u', 'b', '\n',
'g', 'e', 't', ' ', '1', '2', '7', ' ', 's', 'u', 'b', '}', 'B', ' ', '/', 'c', 'h', '-', 'd', 'x', '{', 'c', 'h', '-', 'd', 'a', 't', 'a', ' ', 'd', 'u', 'p', ' ', 'l', 'e', 'n', 'g', 't', 'h', ' ', '1', ' ', 's', 'u', 'b', ' ', 'g', 'e', 't', '}', 'B', ' ', '/', 'c', 'h', '-', 'i', 'm', 'a', 'g', 'e', '{', 'c', 'h', '-', 'd', 'a', 't', 'a', '\n',
'd', 'u', 'p', ' ', 't', 'y', 'p', 'e', ' ', '/', 's', 't', 'r', 'i', 'n', 'g', 't', 'y', 'p', 'e', ' ', 'n', 'e', '{', 'c', 't', 'r', ' ', 'g', 'e', 't', ' ', '/', 'c', 't', 'r', ' ', 'c', 't', 'r', ' ', '1', ' ', 'a', 'd', 'd', ' ', 'N', '}', 'i', 'f', '}', 'B', ' ', '/', 'i', 'd', ' ', '0', ' ', 'N', ' ', '/', 'r', 'w', ' ', '0', ' ', 'N', '\n',
'/', 'r', 'c', ' ', '0', ' ', 'N', ' ', '/', 'g', 'p', ' ', '0', ' ', 'N', ' ', '/', 'c', 'p', ' ', '0', ' ', 'N', ' ', '/', 'G', ' ', '0', ' ', 'N', ' ', '/', 's', 'f', ' ', '0', ' ', 'N', ' ', '/', 'C', 'h', 'a', 'r', 'B', 'u', 'i', 'l', 'd', 'e', 'r', '{', 's', 'a', 'v', 'e', ' ', '3', ' ', '1', ' ', 'r', 'o', 'l', 'l', ' ', 'S', ' ', 'd', 'u', 'p', '\n',
'/', 'b', 'a', 's', 'e', ' ', 'g', 'e', 't', ' ', '2', ' ', 'i', 'n', 'd', 'e', 'x', ' ', 'g', 'e', 't', ' ', 'S', ' ', '/', 'B', 'i', 't', 'M', 'a', 'p', 's', ' ', 'g', 'e', 't', ' ', 'S', ' ', 'g', 'e', 't', ' ', '/', 'c', 'h', '-', 'd', 'a', 't', 'a', ' ', 'X', ' ', 'p', 'o', 'p', ' ', '/', 'c', 't', 'r', ' ', '0', ' ', 'N', ' ', 'c', 'h', '-', 'd', 'x', '\n',
'0', ' ', 'c', 'h', '-', 'x', 'o', 'f', 'f', ' ', 'c', 'h', '-', 'y', 'o', 'f', 'f', ' ', 'c', 'h', '-', 'h', 'e', 'i', 'g', 'h', 't', ' ', 's', 'u', 'b', ' ', 'c', 'h', '-', 'x', 'o', 'f', 'f', ' ', 'c', 'h', '-', 'w', 'i', 'd', 't', 'h', ' ', 'a', 'd', 'd', ' ', 'c', 'h', '-', 'y', 'o', 'f', 'f', '\n',
's', 'e', 't', 'c', 'a', 'c', 'h', 'e', 'd', 'e', 'v', 'i', 'c', 'e', ' ', 'c', 'h', '-', 'w', 'i', 'd', 't', 'h', ' ', 'c', 'h', '-', 'h', 'e', 'i', 'g', 'h', 't', ' ', 't', 'r', 'u', 'e', '[', '1', ' ', '0', ' ', '0', ' ', '-', '1', ' ', '-', '.', '1', ' ', 'c', 'h', '-', 'x', 'o', 'f', 'f', ' ', 's', 'u', 'b', ' ', 'c', 'h', '-', 'y', 'o', 'f', 'f', '\n',
'.', '1', ' ', 's', 'u', 'b', ']', '/', 'i', 'd', ' ', 'c', 'h', '-', 'i', 'm', 'a', 'g', 'e', ' ', 'N', ' ', '/', 'r', 'w', ' ', 'c', 'h', '-', 'w', 'i', 'd', 't', 'h', ' ', '7', ' ', 'a', 'd', 'd', ' ', '8', ' ', 'i', 'd', 'i', 'v', ' ', 's', 't', 'r', 'i', 'n', 'g', ' ', 'N', ' ', '/', 'r', 'c', ' ', '0', ' ', 'N', ' ', '/', 'g', 'p', ' ', '0', ' ', 'N', '\n',
'/', 'c', 'p', ' ', '0', ' ', 'N', '{', 'r', 'c', ' ', '0', ' ', 'n', 'e', '{', 'r', 'c', ' ', '1', ' ', 's', 'u', 'b', ' ', '/', 'r', 'c', ' ', 'X', ' ', 'r', 'w', '}', '{', 'G', '}', 'i', 'f', 'e', 'l', 's', 'e', '}', 'i', 'm', 'a', 'g', 'e', 'm', 'a', 's', 'k', ' ', 'r', 'e', 's', 't', 'o', 'r', 'e', '}', 'B', ' ', '/', 'G', '{', '{', 'i', 'd', '\n',
'g', 'p', ' ', 'g', 'e', 't', ' ', '/', 'g', 'p', ' ', 'g', 'p', ' ', '1', ' ', 'a', 'd', 'd', ' ', 'N', ' ', 'd', 'u', 'p', ' ', '1', '8', ' ', 'm', 'o', 'd', ' ', 'S', ' ', '1', '8', ' ', 'i', 'd', 'i', 'v', ' ', 'p', 'l', ' ', 'S', ' ', 'g', 'e', 't', ' ', 'e', 'x', 'e', 'c', '}', 'l', 'o', 'o', 'p', '}', 'B', ' ', '/', 'a', 'd', 'v', '{', 'c', 'p', '\n',
'a', 'd', 'd', ' ', '/', 'c', 'p', ' ', 'X', '}', 'B', ' ', '/', 'c', 'h', 'g', '{', 'r', 'w', ' ', 'c', 'p', ' ', 'i', 'd', ' ', 'g', 'p', ' ', '4', ' ', 'i', 'n', 'd', 'e', 'x', ' ', 'g', 'e', 't', 'i', 'n', 't', 'e', 'r', 'v', 'a', 'l', ' ', 'p', 'u', 't', 'i', 'n', 't', 'e', 'r', 'v', 'a', 'l', ' ', 'd', 'u', 'p', ' ', 'g', 'p', ' ', 'a', 'd', 'd', '\n',
'/', 'g', 'p', ' ', 'X', ' ', 'a', 'd', 'v', '}', 'B', ' ', '/', 'n', 'd', '{', '/', 'c', 'p', ' ', '0', ' ', 'N', ' ', 'r', 'w', ' ', 'e', 'x', 'i', 't', '}', 'B', ' ', '/', 'l', 's', 'h', '{', 'r', 'w', ' ', 'c', 'p', ' ', '2', ' ', 'c', 'o', 'p', 'y', ' ', 'g', 'e', 't', ' ', 'd', 'u', 'p', ' ', '0', ' ', 'e', 'q', '{', 'p', 'o', 'p', ' ', '1', '}', '{', '\n',
'd', 'u', 'p', ' ', '2', '5', '5', ' ', 'e', 'q', '{', 'p', 'o', 'p', ' ', '2', '5', '4', '}', '{', 'd', 'u', 'p', ' ', 'd', 'u', 'p', ' ', 'a', 'd', 'd', ' ', '2', '5', '5', ' ', 'a', 'n', 'd', ' ', 'S', ' ', '1', ' ', 'a', 'n', 'd', ' ', 'o', 'r', '}', 'i', 'f', 'e', 'l', 's', 'e', '}', 'i', 'f', 'e', 'l', 's', 'e', ' ', 'p', 'u', 't', ' ', '1', '\n',
'a', 'd', 'v', '}', 'B', ' ', '/', 'r', 's', 'h', '{', 'r', 'w', ' ', 'c', 'p', ' ', '2', ' ', 'c', 'o', 'p', 'y', ' ', 'g', 'e', 't', ' ', 'd', 'u', 'p', ' ', '0', ' ', 'e', 'q', '{', 'p', 'o', 'p', ' ', '1', '2', '8', '}', '{', 'd', 'u', 'p', ' ', '2', '5', '5', ' ', 'e', 'q', '{', 'p', 'o', 'p', ' ', '1', '2', '7', '}', '{', 'd', 'u', 'p', ' ', '2', '\n',
'i', 'd', 'i', 'v', ' ', 'S', ' ', '1', '2', '8', ' ', 'a', 'n', 'd', ' ', 'o', 'r', '}', 'i', 'f', 'e', 'l', 's', 'e', '}', 'i', 'f', 'e', 'l', 's', 'e', ' ', 'p', 'u', 't', ' ', '1', ' ', 'a', 'd', 'v', '}', 'B', ' ', '/', 'c', 'l', 'r', '{', 'r', 'w', ' ', 'c', 'p', ' ', '2', ' ', 'i', 'n', 'd', 'e', 'x', ' ', 's', 't', 'r', 'i', 'n', 'g', '\n',
'p', 'u', 't', 'i', 'n', 't', 'e', 'r', 'v', 'a', 'l', ' ', 'a', 'd', 'v', '}', 'B', ' ', '/', 's', 'e', 't', '{', 'r', 'w', ' ', 'c', 'p', ' ', 'f', 'i', 'l', 'l', 's', 't', 'r', ' ', '0', ' ', '4', ' ', 'i', 'n', 'd', 'e', 'x', ' ', 'g', 'e', 't', 'i', 'n', 't', 'e', 'r', 'v', 'a', 'l', ' ', 'p', 'u', 't', 'i', 'n', 't', 'e', 'r', 'v', 'a', 'l', '\n',
'a', 'd', 'v', '}', 'B', ' ', '/', 'f', 'i', 'l', 'l', 's', 't', 'r', ' ', '1', '8', ' ', 's', 't', 'r', 'i', 'n', 'g', ' ', '0', ' ', '1', ' ', '1', '7', '{', '2', ' ', 'c', 'o', 'p', 'y', ' ', '2', '5', '5', ' ', 'p', 'u', 't', ' ', 'p', 'o', 'p', '}', 'f', 'o', 'r', ' ', 'N', ' ', '/', 'p', 'l', '[', '{', 'a', 'd', 'v', ' ', '1', ' ', 'c', 'h', 'g', '}', '\n',
'{', 'a', 'd', 'v', ' ', '1', ' ', 'c', 'h', 'g', ' ', 'n', 'd', '}', '{', '1', ' ', 'a', 'd', 'd', ' ', 'c', 'h', 'g', '}', '{', '1', ' ', 'a', 'd', 'd', ' ', 'c', 'h', 'g', ' ', 'n', 'd', '}', '{', 'a', 'd', 'v', ' ', 'l', 's', 'h', '}', '{', 'a', 'd', 'v', ' ', 'l', 's', 'h', ' ', 'n', 'd', '}', '{', 'a', 'd', 'v', ' ', 'r', 's', 'h', '}', '{', '\n',
'a', 'd', 'v', ' ', 'r', 's', 'h', ' ', 'n', 'd', '}', '{', '1', ' ', 'a', 'd', 'd', ' ', 'a', 'd', 'v', '}', '{', '/', 'r', 'c', ' ', 'X', ' ', 'n', 'd', '}', '{', '1', ' ', 'a', 'd', 'd', ' ', 's', 'e', 't', '}', '{', '1', ' ', 'a', 'd', 'd', ' ', 'c', 'l', 'r', '}', '{', 'a', 'd', 'v', ' ', '2', ' ', 'c', 'h', 'g', '}', '{', 'a', 'd', 'v', ' ', '2', '\n',
'c', 'h', 'g', ' ', 'n', 'd', '}', '{', 'p', 'o', 'p', ' ', 'n', 'd', '}', ']', 'd', 'u', 'p', '{', 'b', 'i', 'n', 'd', ' ', 'p', 'o', 'p', '}', 'f', 'o', 'r', 'a', 'l', 'l', ' ', 'N', ' ', '/', 'D', '{', '/', 'c', 'c', ' ', 'X', ' ', 'd', 'u', 'p', ' ', 't', 'y', 'p', 'e', ' ', '/', 's', 't', 'r', 'i', 'n', 'g', 't', 'y', 'p', 'e', ' ', 'n', 'e', '{', ']', '\n',
'}', 'i', 'f', ' ', 'n', 'n', ' ', '/', 'b', 'a', 's', 'e', ' ', 'g', 'e', 't', ' ', 'c', 'c', ' ', 'c', 't', 'r', ' ', 'p', 'u', 't', ' ', 'n', 'n', ' ', '/', 'B', 'i', 't', 'M', 'a', 'p', 's', ' ', 'g', 'e', 't', ' ', 'S', ' ', 'c', 't', 'r', ' ', 'S', ' ', 's', 'f', ' ', '1', ' ', 'n', 'e', '{', 'd', 'u', 'p', ' ', 'd', 'u', 'p', '\n',
'l', 'e', 'n', 'g', 't', 'h', ' ', '1', ' ', 's', 'u', 'b', ' ', 'd', 'u', 'p', ' ', '2', ' ', 'i', 'n', 'd', 'e', 'x', ' ', 'S', ' ', 'g', 'e', 't', ' ', 's', 'f', ' ', 'd', 'i', 'v', ' ', 'p', 'u', 't', '}', 'i', 'f', ' ', 'p', 'u', 't', ' ', '/', 'c', 't', 'r', ' ', 'c', 't', 'r', ' ', '1', ' ', 'a', 'd', 'd', ' ', 'N', '}', 'B', ' ', '/', 'I', '{', '\n',
'c', 'c', ' ', '1', ' ', 'a', 'd', 'd', ' ', 'D', '}', 'B', ' ', '/', 'b', 'o', 'p', '{', 'u', 's', 'e', 'r', 'd', 'i', 'c', 't', ' ', '/', 'b', 'o', 'p', '-', 'h', 'o', 'o', 'k', ' ', 'k', 'n', 'o', 'w', 'n', '{', 'b', 'o', 'p', '-', 'h', 'o', 'o', 'k', '}', 'i', 'f', ' ', '/', 'S', 'I', ' ', 's', 'a', 'v', 'e', ' ', 'N', ' ', '@', 'r', 'i', 'g', 'i', 'n', '\n',
'0', ' ', '0', ' ', 'm', 'o', 'v', 'e', 't', 'o', ' ', '/', 'V', ' ', 'm', 'a', 't', 'r', 'i', 'x', ' ', 'c', 'u', 'r', 'r', 'e', 'n', 't', 'm', 'a', 't', 'r', 'i', 'x', ' ', 'd', 'u', 'p', ' ', '1', ' ', 'g', 'e', 't', ' ', 'd', 'u', 'p', ' ', 'm', 'u', 'l', ' ', 'e', 'x', 'c', 'h', ' ', '0', ' ', 'g', 'e', 't', ' ', 'd', 'u', 'p', ' ', 'm', 'u', 'l', '\n',
'a', 'd', 'd', ' ', '.', '9', '9', ' ', 'l', 't', '{', '/', 'Q', 'V', '}', '{', '/', 'R', 'V', '}', 'i', 'f', 'e', 'l', 's', 'e', ' ', 'l', 'o', 'a', 'd', ' ', 'd', 'e', 'f', ' ', 'p', 'o', 'p', ' ', 'p', 'o', 'p', '}', 'N', ' ', '/', 'e', 'o', 'p', '{', 'S', 'I', ' ', 'r', 'e', 's', 't', 'o', 'r', 'e', ' ', 'u', 's', 'e', 'r', 'd', 'i', 'c', 't', '\n',
'/', 'e', 'o', 'p', '-', 'h', 'o', 'o', 'k', ' ', 'k', 'n', 'o', 'w', 'n', '{', 'e', 'o', 'p', '-', 'h', 'o', 'o', 'k', '}', 'i', 'f', ' ', 's', 'h', 'o', 'w', 'p', 'a', 'g', 'e', '}', 'N', ' ', '/', '@', 's', 't', 'a', 'r', 't', '{', 'u', 's', 'e', 'r', 'd', 'i', 'c', 't', ' ', '/', 's', 't', 'a', 'r', 't', '-', 'h', 'o', 'o', 'k', '\n',
'k', 'n', 'o', 'w', 'n', '{', 's', 't', 'a', 'r', 't', '-', 'h', 'o', 'o', 'k', '}', 'i', 'f', ' ', 'p', 'o', 'p', ' ', '/', 'V', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', 'X', ' ', '/', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', 'X', ' ', '1', '0', '0', '0', ' ', 'd', 'i', 'v', ' ', '/', 'D', 'V', 'I', 'm', 'a', 'g', ' ', 'X', '\n',
'/', 'I', 'E', ' ', '2', '5', '6', ' ', 'a', 'r', 'r', 'a', 'y', ' ', 'N', ' ', '0', ' ', '1', ' ', '2', '5', '5', '{', 'I', 'E', ' ', 'S', ' ', '1', ' ', 's', 't', 'r', 'i', 'n', 'g', ' ', 'd', 'u', 'p', ' ', '0', ' ', '3', ' ', 'i', 'n', 'd', 'e', 'x', ' ', 'p', 'u', 't', ' ', 'c', 'v', 'n', ' ', 'p', 'u', 't', '}', 'f', 'o', 'r', '\n',
'6', '5', '7', '8', '1', '.', '7', '6', ' ', 'd', 'i', 'v', ' ', '/', 'v', 's', 'i', 'z', 'e', ' ', 'X', ' ', '6', '5', '7', '8', '1', '.', '7', '6', ' ', 'd', 'i', 'v', ' ', '/', 'h', 's', 'i', 'z', 'e', ' ', 'X', '}', 'N', ' ', '/', 'p', '{', 's', 'h', 'o', 'w', '}', 'N', ' ', '/', 'R', 'M', 'a', 't', '[', '1', ' ', '0', ' ', '0', ' ', '-', '1', ' ', '0', '\n',
'0', ']', 'N', ' ', '/', 'B', 'D', 'o', 't', ' ', '2', '6', '0', ' ', 's', 't', 'r', 'i', 'n', 'g', ' ', 'N', ' ', '/', 'r', 'u', 'l', 'e', 'x', ' ', '0', ' ', 'N', ' ', '/', 'r', 'u', 'l', 'e', 'y', ' ', '0', ' ', 'N', ' ', '/', 'v', '{', '/', 'r', 'u', 'l', 'e', 'y', ' ', 'X', ' ', '/', 'r', 'u', 'l', 'e', 'x', ' ', 'X', ' ', 'V', '}', 'B', ' ', '/', 'V', '\n',
'{', '}', 'B', ' ', '/', 'R', 'V', ' ', 's', 't', 'a', 't', 'u', 's', 'd', 'i', 'c', 't', ' ', 'b', 'e', 'g', 'i', 'n', ' ', '/', 'p', 'r', 'o', 'd', 'u', 'c', 't', ' ', 'w', 'h', 'e', 'r', 'e', '{', 'p', 'o', 'p', ' ', 'p', 'r', 'o', 'd', 'u', 'c', 't', ' ', 'd', 'u', 'p', ' ', 'l', 'e', 'n', 'g', 't', 'h', ' ', '7', ' ', 'g', 'e', '{', '0', ' ', '7', '\n',
'g', 'e', 't', 'i', 'n', 't', 'e', 'r', 'v', 'a', 'l', ' ', 'd', 'u', 'p', '(', 'D', 'i', 's', 'p', 'l', 'a', 'y', ')', 'e', 'q', ' ', 'e', 'x', 'c', 'h', ' ', '0', ' ', '4', ' ', 'g', 'e', 't', 'i', 'n', 't', 'e', 'r', 'v', 'a', 'l', '(', 'N', 'e', 'X', 'T', ')', 'e', 'q', ' ', 'o', 'r', '}', '{', 'p', 'o', 'p', ' ', 'f', 'a', 'l', 's', 'e', '}', '\n',
'i', 'f', 'e', 'l', 's', 'e', '}', '{', 'f', 'a', 'l', 's', 'e', '}', 'i', 'f', 'e', 'l', 's', 'e', ' ', 'e', 'n', 'd', '{', '{', 'g', 's', 'a', 'v', 'e', ' ', 'T', 'R', ' ', '-', '.', '1', ' ', '.', '1', ' ', 'T', 'R', ' ', '1', ' ', '1', ' ', 's', 'c', 'a', 'l', 'e', ' ', 'r', 'u', 'l', 'e', 'x', ' ', 'r', 'u', 'l', 'e', 'y', ' ', 'f', 'a', 'l', 's', 'e', '\n',
'R', 'M', 'a', 't', '{', 'B', 'D', 'o', 't', '}', 'i', 'm', 'a', 'g', 'e', 'm', 'a', 's', 'k', ' ', 'g', 'r', 'e', 's', 't', 'o', 'r', 'e', '}', '}', '{', '{', 'g', 's', 'a', 'v', 'e', ' ', 'T', 'R', ' ', '-', '.', '1', ' ', '.', '1', ' ', 'T', 'R', ' ', 'r', 'u', 'l', 'e', 'x', ' ', 'r', 'u', 'l', 'e', 'y', ' ', 's', 'c', 'a', 'l', 'e', ' ', '1', ' ', '1', '\n',
'f', 'a', 'l', 's', 'e', ' ', 'R', 'M', 'a', 't', '{', 'B', 'D', 'o', 't', '}', 'i', 'm', 'a', 'g', 'e', 'm', 'a', 's', 'k', ' ', 'g', 'r', 'e', 's', 't', 'o', 'r', 'e', '}', '}', 'i', 'f', 'e', 'l', 's', 'e', ' ', 'B', ' ', '/', 'Q', 'V', '{', 'g', 's', 'a', 'v', 'e', ' ', 'n', 'e', 'w', 'p', 'a', 't', 'h', ' ', 't', 'r', 'a', 'n', 's', 'f', 'o', 'r', 'm', '\n',
'r', 'o', 'u', 'n', 'd', ' ', 'e', 'x', 'c', 'h', ' ', 'r', 'o', 'u', 'n', 'd', ' ', 'e', 'x', 'c', 'h', ' ', 'i', 't', 'r', 'a', 'n', 's', 'f', 'o', 'r', 'm', ' ', 'm', 'o', 'v', 'e', 't', 'o', ' ', 'r', 'u', 'l', 'e', 'x', ' ', '0', ' ', 'r', 'l', 'i', 'n', 'e', 't', 'o', ' ', '0', ' ', 'r', 'u', 'l', 'e', 'y', ' ', 'n', 'e', 'g', '\n',
'r', 'l', 'i', 'n', 'e', 't', 'o', ' ', 'r', 'u', 'l', 'e', 'x', ' ', 'n', 'e', 'g', ' ', '0', ' ', 'r', 'l', 'i', 'n', 'e', 't', 'o', ' ', 'f', 'i', 'l', 'l', ' ', 'g', 'r', 'e', 's', 't', 'o', 'r', 'e', '}', 'B', ' ', '/', 'a', '{', 'm', 'o', 'v', 'e', 't', 'o', '}', 'B', ' ', '/', 'd', 'e', 'l', 't', 'a', ' ', '0', ' ', 'N', ' ', '/', 't', 'a', 'i', 'l', '\n',
'{', 'd', 'u', 'p', ' ', '/', 'd', 'e', 'l', 't', 'a', ' ', 'X', ' ', '0', ' ', 'r', 'm', 'o', 'v', 'e', 't', 'o', '}', 'B', ' ', '/', 'M', '{', 'S', ' ', 'p', ' ', 'd', 'e', 'l', 't', 'a', ' ', 'a', 'd', 'd', ' ', 't', 'a', 'i', 'l', '}', 'B', ' ', '/', 'b', '{', 'S', ' ', 'p', ' ', 't', 'a', 'i', 'l', '}', 'B', ' ', '/', 'c', '{', '-', '4', ' ', 'M', '}', '\n',
'B', ' ', '/', 'd', '{', '-', '3', ' ', 'M', '}', 'B', ' ', '/', 'e', '{', '-', '2', ' ', 'M', '}', 'B', ' ', '/', 'f', '{', '-', '1', ' ', 'M', '}', 'B', ' ', '/', 'g', '{', '0', ' ', 'M', '}', 'B', ' ', '/', 'h', '{', '1', ' ', 'M', '}', 'B', ' ', '/', 'i', '{', '2', ' ', 'M', '}', 'B', ' ', '/', 'j', '{', '3', ' ', 'M', '}', 'B', ' ', '/', 'k', '{', '\n',
'4', ' ', 'M', '}', 'B', ' ', '/', 'w', '{', '0', ' ', 'r', 'm', 'o', 'v', 'e', 't', 'o', '}', 'B', ' ', '/', 'l', '{', 'p', ' ', '-', '4', ' ', 'w', '}', 'B', ' ', '/', 'm', '{', 'p', ' ', '-', '3', ' ', 'w', '}', 'B', ' ', '/', 'n', '{', 'p', ' ', '-', '2', ' ', 'w', '}', 'B', ' ', '/', 'o', '{', 'p', ' ', '-', '1', ' ', 'w', '}', 'B', ' ', '/', 'q', '{', '\n',
'p', ' ', '1', ' ', 'w', '}', 'B', ' ', '/', 'r', '{', 'p', ' ', '2', ' ', 'w', '}', 'B', ' ', '/', 's', '{', 'p', ' ', '3', ' ', 'w', '}', 'B', ' ', '/', 't', '{', 'p', ' ', '4', ' ', 'w', '}', 'B', ' ', '/', 'x', '{', '0', ' ', 'S', ' ', 'r', 'm', 'o', 'v', 'e', 't', 'o', '}', 'B', ' ', '/', 'y', '{', '3', ' ', '2', ' ', 'r', 'o', 'l', 'l', ' ', 'p', '\n',
'a', '}', 'B', ' ', '/', 'b', 'o', 's', '{', '/', 'S', 'S', ' ', 's', 'a', 'v', 'e', ' ', 'N', '}', 'B', ' ', '/', 'e', 'o', 's', '{', 'S', 'S', ' ', 'r', 'e', 's', 't', 'o', 'r', 'e', '}', 'B', ' ', 'e', 'n', 'd', '\n',
'%', '%', 'E', 'n', 'd', 'P', 'r', 'o', 'c', 'S', 'e', 't', '\n',
'%', '%', 'B', 'e', 'g', 'i', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 't', ':', ' ', 't', 'e', 'x', 'p', 's', '.', 'p', 'r', 'o', '\n',
'T', 'e', 'X', 'D', 'i', 'c', 't', ' ', 'b', 'e', 'g', 'i', 'n', ' ', '/', 'r', 'f', '{', 'f', 'i', 'n', 'd', 'f', 'o', 'n', 't', ' ', 'd', 'u', 'p', ' ', 'l', 'e', 'n', 'g', 't', 'h', ' ', '1', ' ', 'a', 'd', 'd', ' ', 'd', 'i', 'c', 't', ' ', 'b', 'e', 'g', 'i', 'n', '{', '1', ' ', 'i', 'n', 'd', 'e', 'x', ' ', '/', 'F', 'I', 'D', ' ', 'n', 'e', ' ', '2', '\n',
'i', 'n', 'd', 'e', 'x', ' ', '/', 'U', 'n', 'i', 'q', 'u', 'e', 'I', 'D', ' ', 'n', 'e', ' ', 'a', 'n', 'd', '{', 'd', 'e', 'f', '}', '{', 'p', 'o', 'p', ' ', 'p', 'o', 'p', '}', 'i', 'f', 'e', 'l', 's', 'e', '}', 'f', 'o', 'r', 'a', 'l', 'l', '[', '1', ' ', 'i', 'n', 'd', 'e', 'x', ' ', '0', ' ', '6', ' ', '-', '1', ' ', 'r', 'o', 'l', 'l', '\n',
'e', 'x', 'e', 'c', ' ', '0', ' ', 'e', 'x', 'c', 'h', ' ', '5', ' ', '-', '1', ' ', 'r', 'o', 'l', 'l', ' ', 'V', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', 'd', 'i', 'v', ' ', 'm', 'u', 'l', ' ', 'n', 'e', 'g', ' ', '0', ' ', '0', ']', '/', 'M', 'e', 't', 'r', 'i', 'c', 's', '\n',
'e', 'x', 'c', 'h', ' ', 'd', 'e', 'f', ' ', 'd', 'i', 'c', 't', ' ', 'b', 'e', 'g', 'i', 'n', ' ', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', '{', 'e', 'x', 'c', 'h', ' ', 'd', 'u', 'p', ' ', 't', 'y', 'p', 'e', ' ', '/', 'i', 'n', 't', 'e', 'g', 'e', 'r', 't', 'y', 'p', 'e', ' ', 'n', 'e', '{', 'p', 'o', 'p', ' ', 'p', 'o', 'p', ' ', '1', ' ', 's', 'u', 'b', '\n',
'd', 'u', 'p', ' ', '0', ' ', 'l', 'e', '{', 'p', 'o', 'p', '}', '{', '[', '}', 'i', 'f', 'e', 'l', 's', 'e', '}', '{', 'F', 'o', 'n', 't', 'M', 'a', 't', 'r', 'i', 'x', ' ', '0', ' ', 'g', 'e', 't', ' ', 'd', 'i', 'v', ' ', 'M', 'e', 't', 'r', 'i', 'c', 's', ' ', '0', ' ', 'g', 'e', 't', ' ', 'd', 'i', 'v', ' ', 'd', 'e', 'f', '}', '\n',
'i', 'f', 'e', 'l', 's', 'e', '}', 'f', 'o', 'r', 'a', 'l', 'l', ' ', 'M', 'e', 't', 'r', 'i', 'c', 's', ' ', '/', 'M', 'e', 't', 'r', 'i', 'c', 's', ' ', 'c', 'u', 'r', 'r', 'e', 'n', 't', 'd', 'i', 'c', 't', ' ', 'e', 'n', 'd', ' ', 'd', 'e', 'f', '[', '2', ' ', 'i', 'n', 'd', 'e', 'x', ' ', 'c', 'u', 'r', 'r', 'e', 'n', 't', 'd', 'i', 'c', 't', '\n',
'e', 'n', 'd', ' ', 'd', 'e', 'f', 'i', 'n', 'e', 'f', 'o', 'n', 't', ' ', '3', ' ', '-', '1', ' ', 'r', 'o', 'l', 'l', ' ', 'm', 'a', 'k', 'e', 'f', 'o', 'n', 't', ' ', '/', 's', 'e', 't', 'f', 'o', 'n', 't', ' ', 'l', 'o', 'a', 'd', ']', 'c', 'v', 'x', ' ', 'd', 'e', 'f', '}', 'd', 'e', 'f', '\n',
'/', 'O', 'b', 'l', 'i', 'q', 'u', 'e', 'S', 'l', 'a', 'n', 't', '{', 'd', 'u', 'p', ' ', 's', 'i', 'n', ' ', 'S', ' ', 'c', 'o', 's', ' ', 'd', 'i', 'v', ' ', 'n', 'e', 'g', '}', 'B', ' ', '/', 'S', 'l', 'a', 'n', 't', 'F', 'o', 'n', 't', '{', '4', ' ', 'i', 'n', 'd', 'e', 'x', ' ', 'm', 'u', 'l', ' ', 'a', 'd', 'd', '}', 'd', 'e', 'f', '\n',
'/', 'E', 'x', 't', 'e', 'n', 'd', 'F', 'o', 'n', 't', '{', '3', ' ', '-', '1', ' ', 'r', 'o', 'l', 'l', ' ', 'm', 'u', 'l', ' ', 'e', 'x', 'c', 'h', '}', 'd', 'e', 'f', ' ', '/', 'R', 'e', 'E', 'n', 'c', 'o', 'd', 'e', 'F', 'o', 'n', 't', '{', '/', 'E', 'n', 'c', 'o', 'd', 'i', 'n', 'g', ' ', 'e', 'x', 'c', 'h', ' ', 'd', 'e', 'f', '}', 'd', 'e', 'f', '\n',
'e', 'n', 'd', '\n',
'%', '%', 'E', 'n', 'd', 'P', 'r', 'o', 'c', 'S', 'e', 't', '\n',
'T', 'e', 'X', 'D', 'i', 'c', 't', ' ', 'b', 'e', 'g', 'i', 'n', ' ', '4', '0', '2', '5', '8', '4', '3', '1', ' ', '5', '2', '0', '9', '9', '1', '4', '6', ' ', '1', '0', '0', '0', ' ', '3', '0', '0', ' ', '3', '0', '0', ' ', '(', 's', 'e', 's', 't', 'e', 'm', 'p', 'l', 'a', 't', 'e', '.', 'd', 'v', 'i', ')', '\n',
'@', 's', 't', 'a', 'r', 't', ' ', '/', 'F', 'a', ' ', '1', '3', '9', '[', '9', ' ', '1', '3', ' ', '3', '[', '1', '7', ' ', '1', '7', ' ', '4', '[', '9', ' ', '1', '7', ' ', '1', '[', '1', '1', ' ', '1', '5', ' ', '3', '[', '1', '5', ' ', '1', '2', '[', '2', '0', '\n',
'3', '7', '[', '8', ' ', '4', '6', '[', '{', '}', '1', '1', ' ', '3', '3', '.', '3', '3', '3', '3', '3', '4', ' ', '/', 'T', 'i', 'm', 'e', 's', '-', 'R', 'o', 'm', 'a', 'n', ' ', 'r', 'f', ' ', '/', 'F', 'b', ' ', '1', ' ', '5', '0', ' ', 'd', 'f', '<', '1', '2', '1', '8', '1', '2', '7', '8', '1', '2', '9', '8', '1', '2', '1', '8', 'A', 'C', '1', '2', '\n',
'F', 'F', '0', '8', '1', '0', '7', 'D', '8', 'F', '0', 'F', '>', '4', '9', ' ', 'D', ' ', 'E', ' ', '/', 'F', 'c', ' ', '1', ' ', '1', '6', ' ', 'd', 'f', '<', 'E', 'A', '0', '3', 'C', '0', 'E', 'A', '0', 'F', 'F', '0', 'E', 'A', '1', 'F', 'F', '8', 'E', 'A', '3', 'F', 'F', 'C', 'E', 'A', '7', 'F', 'F', 'E', 'A', '2', 'B', '5', 'F', 'C', 'A', '4', 'E', 'A', '\n',
'7', 'F', 'F', 'E', 'A', '2', 'E', 'A', '3', 'F', 'F', 'C', 'E', 'A', '1', 'F', 'F', '8', 'E', 'A', '0', 'F', 'F', '0', 'E', 'A', '0', '3', 'C', '0', '1', '0', '1', '0', '7', 'E', '9', '1', '1', '5', '>', '1', '5', ' ', 'D', ' ', 'E', ' ', '/', 'F', 'd', ' ', '1', '\n',
'5', '0', ' ', 'd', 'f', '<', '1', '2', '0', 'C', '1', '2', '1', 'C', '1', '2', 'E', 'C', '1', '2', '0', 'C', 'A', 'F', 'E', 'A', 'F', 'F', 'C', '0', '0', 'A', '1', '3', '7', 'D', '9', '2', '1', '1', '>', '4', '9', ' ', 'D', ' ', 'E', ' ', '/', 'F', 'e', ' ', '8', '1', '[', '2', '3', '\n',
'5', '2', '[', '2', '1', ' ', '1', '[', '3', '0', ' ', '2', '1', ' ', '2', '1', ' ', '1', '2', ' ', '1', '6', ' ', '1', '4', ' ', '2', '1', ' ', '2', '1', ' ', '2', '1', ' ', '2', '1', ' ', '3', '2', ' ', '1', '2', ' ', '2', '1', ' ', '1', '[', '1', '2', ' ', '2', '1', '\n',
'2', '1', ' ', '1', '4', ' ', '1', '8', ' ', '2', '1', ' ', '1', '8', ' ', '2', '1', ' ', '1', '8', ' ', '3', '[', '1', '4', ' ', '1', '[', '1', '4', ' ', '6', '[', '2', '5', ' ', '1', '[', '2', '8', ' ', '8', '[', '1', '4', ' ', '3', '[', '2', '5', ' ', '1', '7', '[', '2', '1', '\n',
'1', '[', '2', '1', ' ', '2', '[', '1', '0', ' ', '1', '[', '1', '0', ' ', '2', '[', '1', '4', ' ', '1', '4', ' ', '4', '0', '[', '{', '}', '3', '6', ' ', '4', '1', '.', '6', '6', '6', '6', '6', '9', ' ', '/', 'T', 'i', 'm', 'e', 's', '-', 'R', 'o', 'm', 'a', 'n', '\n',
'r', 'f', ' ', '/', 'F', 'f', ' ', '1', '3', '5', '[', '1', '8', ' ', '3', '[', '1', '2', ' ', '1', '6', ' ', '1', '6', ' ', '1', '[', '2', '1', ' ', '2', '1', ' ', '2', '1', ' ', '3', '0', ' ', '1', '2', ' ', '2', '[', '1', '2', ' ', '2', '1', ' ', '2', '1', '\n',
'1', '2', ' ', '1', '8', ' ', '1', '[', '1', '8', ' ', '2', '1', ' ', '2', '1', ' ', '1', '2', '[', '2', '3', ' ', '5', '[', '2', '8', ' ', '2', '6', '[', '2', '1', ' ', '4', '[', '1', '0', ' ', '4', '6', '[', '{', '}', '2', '1', ' ', '4', '1', '.', '6', '6', '6', '6', '6', '9', '\n',
'/', 'T', 'i', 'm', 'e', 's', '-', 'I', 't', 'a', 'l', 'i', 'c', ' ', 'r', 'f', ' ', '/', 'F', 'g', ' ', '1', '7', '1', '[', '2', '5', ' ', '2', '3', ' ', '2', '8', ' ', '1', '4', '[', '2', '8', ' ', '2', '8', ' ', '2', '8', ' ', '6', '5', '[', '{', '}', '6', '\n',
'4', '1', '.', '6', '6', '6', '6', '6', '9', ' ', '/', 'T', 'i', 'm', 'e', 's', '-', 'B', 'o', 'l', 'd', 'I', 't', 'a', 'l', 'i', 'c', ' ', 'r', 'f', ' ', '/', 'F', 'h', ' ', '1', '3', '4', '[', '2', '5', ' ', '3', '[', '2', '5', ' ', '1', '4', ' ', '1', '9', '\n',
'1', '7', ' ', '1', '[', '2', '5', ' ', '2', '5', ' ', '2', '5', ' ', '3', '9', ' ', '1', '4', ' ', '2', '[', '1', '4', ' ', '2', '5', ' ', '2', '[', '2', '2', ' ', '2', '5', ' ', '2', '2', ' ', '1', '[', '2', '2', ' ', '6', '[', '3', '0', ' ', '6', '[', '2', '8', '\n',
'2', '[', '2', '8', ' ', '1', '[', '3', '6', ' ', '4', '4', ' ', '3', '[', '1', '7', ' ', '1', '[', '3', '6', ' ', '1', '[', '3', '0', ' ', '3', '6', ' ', '3', '3', ' ', '1', '[', '3', '6', ' ', '1', '7', '[', '1', '4', ' ', '2', '[', '1', '2', ' ', '4', '4', '[', '{', '}', '2', '9', '\n',
'5', '0', '.', '0', '0', '0', '0', '0', '1', ' ', '/', 'T', 'i', 'm', 'e', 's', '-', 'R', 'o', 'm', 'a', 'n', ' ', 'r', 'f', ' ', '/', 'F', 'i', ' ', '1', '3', '4', '[', '3', '0', ' ', '3', '[', '3', '3', ' ', '2', '0', ' ', '2', '3', ' ', '2', '7', ' ', '1', '[', '3', '3', '\n',
'3', '0', ' ', '3', '3', ' ', '5', '0', ' ', '1', '7', ' ', '2', '[', '1', '7', ' ', '2', '[', '2', '0', ' ', '2', '7', ' ', '3', '3', ' ', '2', '7', ' ', '1', '[', '3', '0', ' ', '1', '2', '[', '4', '0', ' ', '3', '3', ' ', '4', '3', ' ', '1', '[', '3', '7', '\n',
'6', '[', '2', '3', ' ', '3', '[', '4', '0', ' ', '2', '[', '4', '0', ' ', '1', '4', '[', '3', '0', ' ', '3', '0', ' ', '3', '0', ' ', '4', '9', '[', '{', '}', '2', '6', ' ', '5', '9', '.', '9', '9', '9', '9', '7', '4', ' ', '/', 'T', 'i', 'm', 'e', 's', '-', 'B', 'o', 'l', 'd', '\n',
'r', 'f', ' ', 'e', 'n', 'd', '\n',
'%', '%', 'E', 'n', 'd', 'P', 'r', 'o', 'l', 'o', 'g', '\n',
'%', '%', 'B', 'e', 'g', 'i', 'n', 'S', 'e', 't', 'u', 'p', '\n',
'%', '%', 'F', 'e', 'a', 't', 'u', 'r', 'e', ':', ' ', '*', 'R', 'e', 's', 'o', 'l', 'u', 't', 'i', 'o', 'n', ' ', '3', '0', '0', 'd', 'p', 'i', '\n',
'T', 'e', 'X', 'D', 'i', 'c', 't', ' ', 'b', 'e', 'g', 'i', 'n', '\n',
'%', '%', 'P', 'a', 'p', 'e', 'r', 'S', 'i', 'z', 'e', ':', ' ', 'L', 'e', 't', 't', 'e', 'r', '\n',
'%', '%', 'B', 'e', 'g', 'i', 'n', 'P', 'a', 'p', 'e', 'r', 'S', 'i', 'z', 'e', ':', ' ', 'L', 'e', 't', 't', 'e', 'r', '\n',
'l', 'e', 't', 't', 'e', 'r', '\n',
'%', '%', 'E', 'n', 'd', 'P', 'a', 'p', 'e', 'r', 'S', 'i', 'z', 'e', '\n',
'\n',
'%', '%', 'E', 'n', 'd', 'S', 'e', 't', 'u', 'p', '\n',
'%', '%', 'P', 'a', 'g', 'e', ':', ' ', '1', ' ', '1', '\n',
'1', ' ', '0', ' ', 'b', 'o', 'p', ' ', '7', '8', '7', ' ', '1', '7', '4', ' ', 'a', ' ', 'F', 'i', '(', 'S', 'E', 'S', ')', '1', '5', ' ', 'b', '(', 'P', 'a', 'p', 'e', 'r', ')', 'f', '(', 'T', ')', '-', '5', ' ', 'b', '(', 'e', 'm', 'p', 'l', 'a', 't', 'e', ')', '9', '1', '4', '\n',
'2', '9', '5', ' ', 'y', ' ', 'F', 'h', '(', 'A', 'u', 't', 'h', 'o', 'r', ')', '1', '1', ' ', 'b', '(', 'N', 'a', 'm', 'e', ')', '9', '3', '2', ' ', '4', '1', '1', ' ', 'y', '(', 'D', 'e', 'p', 'a', 'r', 't', 'm', 'e', 'n', 't', ')', '8', '1', '7', ' ', '4', '6', '9', '\n',
'y', '(', 'M', 'o', 't', 'o', 'r', 'o', 'l', 'a', ')', 'h', '(', 'G', 'r', 'o', 'u', 'p', '/', 'S', 'e', 'c', 't', 'o', 'r', ')', '9', '0', '3', ' ', '5', '2', '7', ' ', 'y', '(', 'C', 'i', 't', 'y', ')', 'm', '(', ',', ')', 'g', '(', 'S', 't', 'a', 't', 'e', ')', 'g', '(', 'Z', 'I', 'P', ')', '9', '0', '3', '\n',
'5', '8', '5', ' ', 'y', '(', 'E', 'm', 'a', 'i', 'l', ')', 'g', '(', 'A', 'd', 'd', 'r', 'e', 's', 's', ')', '4', '0', '8', ' ', '7', '4', '8', ' ', 'y', ' ', 'F', 'g', '(', 'A', 'B', 'S', 'T', 'R', 'A', 'C', 'T', ')', '0', ' ', '8', '3', '9', ' ', 'y', ' ', 'F', 'f', '(', 'T', 'h', 'e', ')', 'h', '(', 't', 'e', 'x', 't', ')', 'g', '(', 'o', 'f', ')', '\n',
'f', '(', 't', 'h', 'e', ')', 'h', '(', 'a', 'b', 's', 't', 'r', 'a', 'c', 't', ')', 'f', '(', 'g', 'o', 'e', 's', ')', 'h', '(', 'h', 'e', 'r', ')', 'n', '(', 'e', '.', ')', '2', '3', ' ', 'b', '(', 'N', 'o', ')', '1', '3', ' ', 'b', '(', 'm', 'o', 'r', ')', 'n', '(', 'e', ')', 'g', '(', 't', 'h', 'a', 'n', ')', 'f', '(', '3', ')', 'h', '\n',
'(', 'i', 'n', 'c', 'h', 'e', 's', ')', 'g', '(', 'o', 'f', ')', '0', ' ', '8', '8', '9', ' ', 'y', '(', 'a', 'b', 's', 't', 'r', 'a', 'c', 't', ')', 'c', '(', 't', 'e', 'x', 't', ')', 'i', '(', 'p', 'l', 'e', 'a', 's', 'e', '.', ')', '0', ' ', '1', '0', '2', '9', '\n',
'y', ' ', 'F', 'i', '(', '1', ')', '6', '0', ' ', 'b', '(', 'I', 'n', 't', 'r', ')', 'o', '(', 'o', 'd', 'u', 'c', 't', 'i', 'o', 'n', ')', '0', ' ', '1', '1', '4', '6', ' ', 'y', '(', '2', ')', 'g', '(', 'B', 'o', 'd', 'y', ')', '1', '4', ' ', 'b', '(', 'S', 'e', 'c', 't', 'i', 'o', 'n', 's', ')', '0', '\n',
'1', '2', '3', '9', ' ', 'y', ' ', 'F', 'e', '(', 'T', 'h', 'i', 's', ')', 'd', '(', 'i', 's', ')', 'f', '(', 'a', ')', 'i', '(', 'b', 'o', 'd', 'y', ')', 'e', '(', 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'p', 'h', '.', ')', '1', '6', ' ', 'b', '(', 'I', 't', ')', '1', '0', '\n',
'b', '(', 'i', 's', ')', 'h', '(', 'n', 'o', 't', ')', 'f', '(', 'v', 'e', 'r', 'y', ')', 'h', '(', 'l', 'o', 'n', 'g', ',', ')', 'f', '(', 'b', 'u', 't', ')', 'g', '(', 'l', 'o', 'n', 'g', ')', 'g', '(', 'e', 'n', 'o', 'u', 'g', 'h', ')', '0', ' ', '1', '2', '8', '9', '\n',
'y', '(', 't', 'o', ')', 'g', '(', 'm', 'a', 'k', 'e', ')', 'h', '(', 'i', 't', ')', 'e', '(', '\\', '2', '5', '6', 't', ')', 'h', '(', 'o', 'n', ')', 'g', '(', 'm', 'u', 'l', 't', 'i', 'p', 'l', 'e', ')', 'f', '(', 'l', 'i', 'n', 'e', 's', '.', ')', '1', '2', '5', '\n',
'1', '3', '3', '9', ' ', 'y', '(', 'T', 'h', 'i', 's', ')', 'g', '(', 'i', 's', ')', 'h', '(', 'a', 'n', 'o', 't', 'h', 'e', 'r', ')', 'f', '(', 'b', 'o', 'd', 'y', ')', 'g', '(', 'p', 'a', 'r', 'a', 'g', 'r', 'a', 'h', '.', ')', '1', '5', ' ', 'b', '(', 'I', 't', ')', '9', '\n',
'b', '(', 'i', 's', ')', 'g', '(', 'm', 'u', 'c', 'h', ')', 'i', '(', 'l', 'o', 'n', 'g', 'e', 'r', ')', 'e', '(', '\\', '\\', '(', 'w', 'e', 'l', 'l', ',', ')', '0', ' ', '1', '3', '8', '8', ' ', 'y', '(', 'a', ')', 'j', '(', 'l', 'i', 't', 't', 'l', 'e', ')', 'd', '(', 'l', 'o', 'n', 'g', 'e', 'r', ')', 'i', '(', 'a', 't', ')', 'g', '\n',
'(', 'l', 'e', 'a', 's', 't', '\\', '\\', ')', ',', ')', 'h', '(', 'a', 'n', 'd', ')', 'f', '(', 'i', 't', ')', 'f', '(', 'r', 'e', 'q', 'u', 'i', 'r', 'e', 's', ')', 'h', '(', 'a', 't', ')', 'h', '(', 'l', 'e', 'a', 's', 't', ')', 'f', '(', '3', ')', 'g', '(', 'l', 'i', 'n', 'e', 's', ')', 'g', '(', 't', 'o', ')', 'g', '(', '\\', '2', '5', '6', 't', ')', 'g', '\n',
'(', 't', 'h', 'e', ')', '0', ' ', '1', '4', '3', '8', ' ', 'y', '(', 'c', 'o', 'n', 't', 'e', 'n', 't', ')', 'f', '(', 'o', 'f', ')', 'g', '(', 'i', 't', '.', ')', '2', '1', '2', ' ', '1', '4', '2', '3', ' ', 'y', ' ', 'F', 'd', '(', '1', ')', '4', '2', ' ', '1', '5', '2', '1', '\n',
'y', ' ', 'F', 'c', '(', '\\', '0', '1', '7', ')', '2', '0', ' ', 'b', ' ', 'F', 'e', '(', 'T', 'h', 'i', 's', ')', '1', '0', ' ', 'b', '(', 'i', 's', ')', 'g', '(', 'a', ')', 'h', '(', 'b', 'u', 'l', 'l', 'e', 't', '.', ')', '0', ' ', '1', '6', '6', '1', ' ', 'y', '\n',
'F', 'i', '(', '3', ')', '6', '0', ' ', 'b', '(', 'R', 'e', 'f', 'e', 'r', ')', 'o', '(', 'e', 'n', 'c', 'e', 's', ')', '2', '1', ' ', '1', '7', '5', '4', ' ', 'y', ' ', 'F', 'e', '(', '[', '1', ']', '\\', '\\', ')', ')', '9', ' ', 'b', '(', 'R', 'e', 'f', 'e', 'r', 'e', 'n', 'c', 'e', 's', ')', 'j', '(', 'i', 'n', ')', 'e', '(', 'I', 'E', 'E', 'E', ')', 'h', '\n',
'(', 's', 't', 'a', 'n', 'd', 'a', 'r', 'd', ')', 'f', '(', 'f', 'o', 'r', 'm', 'a', 't', '.', ')', 'p', ' ', '0', ' ', '2', '5', '1', '1', ' ', '4', '1', '2', ' ', '2', ' ', 'v', ' ', '4', '2', ' ', '2', '5', '3', '8', ' ', 'a', ' ', 'F', 'b', '(', '1', ')', '6', '0', '\n',
'2', '5', '5', '0', ' ', 'y', ' ', 'F', 'a', '(', 'T', 'h', 'i', 's', ')', 'e', '(', 'i', 's', ')', 'h', '(', 'a', ')', 'f', '(', 'f', 'o', 'o', 't', 'n', 'o', 't', 'e', '.', ')', 'p', ' ', 'e', 'o', 'p', '\n',
'%', '%', 'T', 'r', 'a', 'i', 'l', 'e', 'r', '\n',
'e', 'n', 'd', '\n',
'u', 's', 'e', 'r', 'd', 'i', 'c', 't', ' ', '/', 'e', 'n', 'd', '-', 'h', 'o', 'o', 'k', ' ', 'k', 'n', 'o', 'w', 'n', '{', 'e', 'n', 'd', '-', 'h', 'o', 'o', 'k', '}', 'i', 'f', '\n',
'%', '%', 'E', 'O', 'F', '\0'
};
unsigned long baddr, eaddr;
int codedone;
unsigned char codebuf[8 * 1024];
unsigned char outbuf[8 * 1024];
unsigned char *eout = outbuf;
static unsigned char *gP, *gE;
int getdata()
{
if (gP >= gE)
{
if (!gE)
{
gP = inbuf;
gE = inbuf + sizeof(inbuf);
return ((-1));
}
if (gP > gE)
return ((-6));
gP++;
return ((-5));
}
return (*gP++);
}
int getcode(int size)
{
unsigned char *p;
unsigned long code;
if (size == 0)
{
baddr = (baddr + 7) & ~7;
return (0);
}
if (codedone)
{
if (codedone < 0)
return ((-6));
codedone = 0;
return ((-1));
}
if (baddr >= eaddr)
{
codedone = -1;
return ((-5));
}
p = codebuf + (baddr >> 3);
code = ((((p[0] << 8) | p[1]) << 8) | p[2]) << 8;
code <<= (baddr & 7);
code >>= 32 - size;
baddr += size;
return (code);
}
void putcode(unsigned long code, int size)
{
unsigned char *p;
if (code == (-5))
{
eaddr = (baddr + 7) & ~7;
baddr = 0;
codedone = 1;
return;
}
if (size == 0)
{
baddr = (baddr + 7) & ~7;
codebuf[baddr >> 3] = 0;
return;
}
if (size != 8 && code == 1 && (baddr & 7) == 0)
return;
p = codebuf + (baddr >> 3);
code <<= 24 - size - (baddr & 7);
p[2] = code;
code >>= 8;
p[1] = code;
code >>= 8;
p[0] |= code;
baddr += size;
}
void putdata(int data)
{
if (data == (-5))
return;
*eout++ = data;
}
void init_dict()
{
struct dict *dp;
unsigned long data;
for (dp = dict, data = -3; dp < &dict[(1 << 11) + 1]; dp++, data++)
{
dp->parent = 0;
dp->kids = 0;
dp->sibling = 0;
dp->data = data;
}
c1 = ((1 << 8) + 3);
c2 = 8 + 1;
c3 = 2 * (1 << 8);
escape = 0;
compress = 0;
last = 0;
}
unsigned long search_dict(unsigned long string, unsigned char data)
{
unsigned long kid;
if (!string)
return (data + 3);
for (kid = dict[string].kids; kid; kid = dict[kid].sibling)
if (kid != last && dict[kid].data == data)
return (kid);
return (0);
}
void add_dict(unsigned long string, unsigned char data)
{
struct dict *dp;
unsigned long kid, prev, me;
if (!string)
return;
dp = &dict[c1];
dp->data = data;
dp->parent = string;
dp->kids = 0;
dp->sibling = dict[string].kids;
dict[string].kids = c1;
last = c1;
dp++;
for (;;)
{
while (dp->kids)
dp++;
if (dp < &dict[(1 << 11)])
break;
dp = &dict[((1 << 8) + 3)];
}
c1 = me = dp - dict;
if (dp->parent)
{
kid = dict[dp->parent].kids;
for (prev = 0; kid; prev = kid, kid = dict[kid].sibling)
if (kid == me)
break;
if (prev)
dict[prev].sibling = dp->sibling;
else
dict[dp->parent].kids = dp->sibling;
}
}
void checksize_dict()
{
while (c1 >= c3)
{
putcode(2, c2);
c2++;
c3 <<= 1;
}
}
void encode()
{
unsigned long dp;
unsigned long string;
int len;
unsigned long data;
int outbits, inbits;
int nosqueeze;
inbits = 0;
outbits = 0;
string = 0;
len = 0;
nosqueeze = 0;
for (;;)
{
switch (data = getdata())
{
case (-6):
case (-2):
return;
case (-1):
init_dict();
continue;
case (-5):
if (string)
{
if (compress)
{
checksize_dict();
putcode(string, c2);
putcode(1, c2);
}
}
putcode((-5), 0);
continue;
case (-3):
case (-4):
continue;
default:
break;
}
if (inbits > 8 * 256)
{
if (inbits < outbits)
{
if (compress)
{
if (string)
{
checksize_dict();
putcode(string, c2);
}
if (!search_dict(string, data))
add_dict(string, data);
putcode(0, c2);
putcode(0, 0);
compress = 0;
string = 0;
len = 0;
} else if (++nosqueeze >= 5 && c3 > 2 * (1 << 8))
{
nosqueeze = 0;
putcode(escape, 8);
putcode(2, 8);
init_dict();
string = 0;
len = 0;
}
} else if (!compress)
{
if (!search_dict(string, data))
add_dict(string, data);
putcode(escape, 8);
putcode(0, 8);
compress = 1;
string = 0;
len = 0;
}
inbits = 0;
outbits = 0;
}
inbits += 8;
if (!compress)
{
putcode(data, 8);
if (data == escape)
putcode(1, 8);
}
if (data == escape)
escape = (escape + 51) % 256;
dp = search_dict(string, data);
if (dp)
{
string = dp;
len++;
continue;
}
if (string)
{
if (compress)
{
checksize_dict();
putcode(string, c2);
}
}
outbits += c2;
if (len < 250)
add_dict(string, data);
string = data + 3;
len = 1;
}
}
void decode()
{
static unsigned char str[250 + 1];
unsigned long dp;
unsigned long string;
unsigned long code;
unsigned char *s;
string = 0;
for (;;)
{
switch (code = getcode(compress ? c2 : 8))
{
case (-2):
puts("decode: error code in input stream");
return;
case (-6):
return;
case (-1):
init_dict();
continue;
case (-5):
putdata((-5));
continue;
case (-3):
case (-4):
continue;
default:
break;
}
if (compress)
{
switch (code)
{
case 0:
code = getcode(0);
compress = 0;
break;
case 1:
code = getcode(0);
putdata((-5));
break;
case 2:
c2++;
c3 <<= 1;
break;
default:
s = &str[250];
for (dp = code; dp; dp = dict[dp].parent)
*--s = dict[dp].data;
if (!search_dict(string, *s))
add_dict(string, *s);
for (; s < &str[250]; s++)
{
putdata(*s);
if (*s == escape)
escape = (escape + 51) % 256;
}
string = code;
break;
}
} else
{
if (code == escape)
{
switch (getcode(8))
{
case 0:
compress = 1;
continue;
case 2:
init_dict();
string = 0;
continue;
case 1:
break;
default:
puts("decode: escape error input stream");
continue;
}
escape = (escape + 51) % 256;
}
putdata(code);
dp = search_dict(string, code);
if (dp)
{
string = dp;
continue;
}
add_dict(string, code);
string = code + 3;
}
}
}
main(argc, argv)
int argc;
char *argv[];
{
unsigned char *s, *t, *e;
gP = gE = 0;
codedone = baddr = eaddr = escape = compress = 0;
eout = outbuf;
encode();
decode();
for (s = inbuf, t = outbuf, e = s + sizeof(inbuf); s < e; s++, t++)
{
if (*s != *t)
break;
}
if (t != eout)
{
puts("v42: fail\n");
} else
{
puts("v42: success\n");
}
return 0;
}