-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcommon.c
666 lines (655 loc) · 13.5 KB
/
common.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
/* bypass godbolt's relative include detection */
#define INDIRECT_BOLINE_C "../boline/boline.c"
#define INDIRECT_CM_C "../boline/cm.c"
#ifndef GODBOLT
#include INDIRECT_BOLINE_C
#include INDIRECT_CM_C
#endif
/*
* Some common utilities used in multiple aoc solutions
*/
/*
* Helper for iterating through a large comma separated input faster.
*
* This construct can be used to run a nested CM on a batch of inputs at a time,
* to reduce the overhead of copying every following input in each iteration.
*
* minimal usage:
* #define RUN__0end ,RUN_END
* #define RUN__0batch ,RUN_BATCH
* #define CM_0run(P,data,x,...) B_CHECK(RUN__##x,RUN_NEXT)(,data,x,P##__VA_ARGS__)
*
* #define RUN_BATCH(P,data,...) )NEXT ,0run,(data x)
* #define RUN_END(P,data,...) )END (data)
* #define RUN_NEXT(P,data,x,...) (,0run,data x,P##__VA_ARGS__)
*
* #define RUN(...) BATCH(,0run,(),__VA_ARGS__)
*
* RUN(1,2,3) -> (1 2 3)
*/
#define CM_0batch(_,fx,xx,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, \
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,...) \
B_CATe(BATCH__,CM(,fx,B_OPEN _##xx, \
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z, \
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0batch,)),_##__VA_ARGS__)
/*
* The user needs to ensure that the nested execution ends in either
* NEXT ,fx,(arguments)
* , to handle the next batch, when the 0batch input was reached, or
* END (out)
* , to signal the end of input, when the 0end input was reached.
*/
#define BATCH__NEXT BATCH_NEXT(
#define BATCH__END BATCH_END(
#define BATCH_NEXT(P,fx,xx,...) (,0batch,fx,P##xx,P##__VA_ARGS__)
#define BATCH_END(xx,...) )B_SCAN(B_OPEN xx)
/* The arguments need to be properly padded to avoid having
* too few arguments for CM_0batch */
#define BATCH_PADDING52 ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
#define BATCH_PADDING BATCH_PADDING52 BATCH_PADDING52
#define BATCH(P,fx,xx,...) CM(,0batch,fx,P##xx,P##__VA_ARGS__,0end,BATCH_PADDING)
/*
* Lookup table to convert hex ASCII characters to tokens:
*/
#define ASCII_20
#define ASCII_21 !
#define ASCII_24 $
#define ASCII_25 %
#define ASCII_26 &
#define ASCII_28 (
#define ASCII_29 )
#define ASCII_2a *
#define ASCII_2b +
#define ASCII_2c ,
#define ASCII_2d -
#define ASCII_2e .
#define ASCII_2f /
#define ASCII_30 0
#define ASCII_31 1
#define ASCII_32 2
#define ASCII_33 3
#define ASCII_34 4
#define ASCII_35 5
#define ASCII_36 6
#define ASCII_37 7
#define ASCII_38 8
#define ASCII_39 9
#define ASCII_3a :
#define ASCII_3b ;
#define ASCII_3c <
#define ASCII_3d =
#define ASCII_3e >
#define ASCII_3f ?
#define ASCII_40 @
#define ASCII_41 A
#define ASCII_42 B
#define ASCII_43 C
#define ASCII_44 D
#define ASCII_45 E
#define ASCII_46 F
#define ASCII_47 G
#define ASCII_48 H
#define ASCII_49 I
#define ASCII_4a J
#define ASCII_4b K
#define ASCII_4c L
#define ASCII_4d M
#define ASCII_4e N
#define ASCII_4f O
#define ASCII_50 P
#define ASCII_51 Q
#define ASCII_52 R
#define ASCII_53 S
#define ASCII_54 T
#define ASCII_55 U
#define ASCII_56 V
#define ASCII_57 W
#define ASCII_58 X
#define ASCII_59 Y
#define ASCII_5a Z
#define ASCII_5b [
#define ASCII_5d ]
#define ASCII_5e ^
#define ASCII_5f _
#define ASCII_61 a
#define ASCII_62 b
#define ASCII_63 c
#define ASCII_64 d
#define ASCII_65 e
#define ASCII_66 f
#define ASCII_67 g
#define ASCII_68 h
#define ASCII_69 i
#define ASCII_6a j
#define ASCII_6b k
#define ASCII_6c l
#define ASCII_6d m
#define ASCII_6e n
#define ASCII_6f o
#define ASCII_70 p
#define ASCII_71 q
#define ASCII_72 r
#define ASCII_73 s
#define ASCII_74 t
#define ASCII_75 u
#define ASCII_76 v
#define ASCII_77 w
#define ASCII_78 x
#define ASCII_79 y
#define ASCII_7a z
#define ASCII_7b {
#define ASCII_7c |
#define ASCII_7d }
#define ASCII_7e ~
#define EQ_0000 ,1
#define EQ_0101 ,1
#define EQ_0202 ,1
#define EQ_0303 ,1
#define EQ_0404 ,1
#define EQ_0505 ,1
#define EQ_0606 ,1
#define EQ_0707 ,1
#define EQ_0808 ,1
#define EQ_0909 ,1
#define EQ_0a0a ,1
#define EQ_0b0b ,1
#define EQ_0c0c ,1
#define EQ_0d0d ,1
#define EQ_0e0e ,1
#define EQ_0f0f ,1
#define EQ_1010 ,1
#define EQ_1111 ,1
#define EQ_1212 ,1
#define EQ_1313 ,1
#define EQ_1414 ,1
#define EQ_1515 ,1
#define EQ_1616 ,1
#define EQ_1717 ,1
#define EQ_1818 ,1
#define EQ_1919 ,1
#define EQ_1a1a ,1
#define EQ_1b1b ,1
#define EQ_1c1c ,1
#define EQ_1d1d ,1
#define EQ_1e1e ,1
#define EQ_1f1f ,1
#define EQ_2020 ,1
#define EQ_2121 ,1
#define EQ_2222 ,1
#define EQ_2323 ,1
#define EQ_2424 ,1
#define EQ_2525 ,1
#define EQ_2626 ,1
#define EQ_2727 ,1
#define EQ_2828 ,1
#define EQ_2929 ,1
#define EQ_2a2a ,1
#define EQ_2b2b ,1
#define EQ_2c2c ,1
#define EQ_2d2d ,1
#define EQ_2e2e ,1
#define EQ_2f2f ,1
#define EQ_3030 ,1
#define EQ_3131 ,1
#define EQ_3232 ,1
#define EQ_3333 ,1
#define EQ_3434 ,1
#define EQ_3535 ,1
#define EQ_3636 ,1
#define EQ_3737 ,1
#define EQ_3838 ,1
#define EQ_3939 ,1
#define EQ_3a3a ,1
#define EQ_3b3b ,1
#define EQ_3c3c ,1
#define EQ_3d3d ,1
#define EQ_3e3e ,1
#define EQ_3f3f ,1
#define EQ_4040 ,1
#define EQ_4141 ,1
#define EQ_4242 ,1
#define EQ_4343 ,1
#define EQ_4444 ,1
#define EQ_4545 ,1
#define EQ_4646 ,1
#define EQ_4747 ,1
#define EQ_4848 ,1
#define EQ_4949 ,1
#define EQ_4a4a ,1
#define EQ_4b4b ,1
#define EQ_4c4c ,1
#define EQ_4d4d ,1
#define EQ_4e4e ,1
#define EQ_4f4f ,1
#define EQ_5050 ,1
#define EQ_5151 ,1
#define EQ_5252 ,1
#define EQ_5353 ,1
#define EQ_5454 ,1
#define EQ_5555 ,1
#define EQ_5656 ,1
#define EQ_5757 ,1
#define EQ_5858 ,1
#define EQ_5959 ,1
#define EQ_5a5a ,1
#define EQ_5b5b ,1
#define EQ_5c5c ,1
#define EQ_5d5d ,1
#define EQ_5e5e ,1
#define EQ_5f5f ,1
#define EQ_6060 ,1
#define EQ_6161 ,1
#define EQ_6262 ,1
#define EQ_6363 ,1
#define EQ_6464 ,1
#define EQ_6565 ,1
#define EQ_6666 ,1
#define EQ_6767 ,1
#define EQ_6868 ,1
#define EQ_6969 ,1
#define EQ_6a6a ,1
#define EQ_6b6b ,1
#define EQ_6c6c ,1
#define EQ_6d6d ,1
#define EQ_6e6e ,1
#define EQ_6f6f ,1
#define EQ_7070 ,1
#define EQ_7171 ,1
#define EQ_7272 ,1
#define EQ_7373 ,1
#define EQ_7474 ,1
#define EQ_7575 ,1
#define EQ_7676 ,1
#define EQ_7777 ,1
#define EQ_7878 ,1
#define EQ_7979 ,1
#define EQ_7a7a ,1
#define EQ_7b7b ,1
#define EQ_7c7c ,1
#define EQ_7d7d ,1
#define EQ_7e7e ,1
#define EQ_7f7f ,1
#define EQ_8080 ,1
#define EQ_8181 ,1
#define EQ_8282 ,1
#define EQ_8383 ,1
#define EQ_8484 ,1
#define EQ_8585 ,1
#define EQ_8686 ,1
#define EQ_8787 ,1
#define EQ_8888 ,1
#define EQ_8989 ,1
#define EQ_8a8a ,1
#define EQ_8b8b ,1
#define EQ_8c8c ,1
#define EQ_8d8d ,1
#define EQ_8e8e ,1
#define EQ_8f8f ,1
#define EQ_9090 ,1
#define EQ_9191 ,1
#define EQ_9292 ,1
#define EQ_9393 ,1
#define EQ_9494 ,1
#define EQ_9595 ,1
#define EQ_9696 ,1
#define EQ_9797 ,1
#define EQ_9898 ,1
#define EQ_9999 ,1
#define EQ_9a9a ,1
#define EQ_9b9b ,1
#define EQ_9c9c ,1
#define EQ_9d9d ,1
#define EQ_9e9e ,1
#define EQ_9f9f ,1
#define EQ_a0a0 ,1
#define EQ_a1a1 ,1
#define EQ_a2a2 ,1
#define EQ_a3a3 ,1
#define EQ_a4a4 ,1
#define EQ_a5a5 ,1
#define EQ_a6a6 ,1
#define EQ_a7a7 ,1
#define EQ_a8a8 ,1
#define EQ_a9a9 ,1
#define EQ_aaaa ,1
#define EQ_abab ,1
#define EQ_acac ,1
#define EQ_adad ,1
#define EQ_aeae ,1
#define EQ_afaf ,1
#define EQ_b0b0 ,1
#define EQ_b1b1 ,1
#define EQ_b2b2 ,1
#define EQ_b3b3 ,1
#define EQ_b4b4 ,1
#define EQ_b5b5 ,1
#define EQ_b6b6 ,1
#define EQ_b7b7 ,1
#define EQ_b8b8 ,1
#define EQ_b9b9 ,1
#define EQ_baba ,1
#define EQ_bbbb ,1
#define EQ_bcbc ,1
#define EQ_bdbd ,1
#define EQ_bebe ,1
#define EQ_bfbf ,1
#define EQ_c0c0 ,1
#define EQ_c1c1 ,1
#define EQ_c2c2 ,1
#define EQ_c3c3 ,1
#define EQ_c4c4 ,1
#define EQ_c5c5 ,1
#define EQ_c6c6 ,1
#define EQ_c7c7 ,1
#define EQ_c8c8 ,1
#define EQ_c9c9 ,1
#define EQ_caca ,1
#define EQ_cbcb ,1
#define EQ_cccc ,1
#define EQ_cdcd ,1
#define EQ_cece ,1
#define EQ_cfcf ,1
#define EQ_d0d0 ,1
#define EQ_d1d1 ,1
#define EQ_d2d2 ,1
#define EQ_d3d3 ,1
#define EQ_d4d4 ,1
#define EQ_d5d5 ,1
#define EQ_d6d6 ,1
#define EQ_d7d7 ,1
#define EQ_d8d8 ,1
#define EQ_d9d9 ,1
#define EQ_dada ,1
#define EQ_dbdb ,1
#define EQ_dcdc ,1
#define EQ_dddd ,1
#define EQ_dede ,1
#define EQ_dfdf ,1
#define EQ_e0e0 ,1
#define EQ_e1e1 ,1
#define EQ_e2e2 ,1
#define EQ_e3e3 ,1
#define EQ_e4e4 ,1
#define EQ_e5e5 ,1
#define EQ_e6e6 ,1
#define EQ_e7e7 ,1
#define EQ_e8e8 ,1
#define EQ_e9e9 ,1
#define EQ_eaea ,1
#define EQ_ebeb ,1
#define EQ_ecec ,1
#define EQ_eded ,1
#define EQ_eeee ,1
#define EQ_efef ,1
#define EQ_f0f0 ,1
#define EQ_f1f1 ,1
#define EQ_f2f2 ,1
#define EQ_f3f3 ,1
#define EQ_f4f4 ,1
#define EQ_f5f5 ,1
#define EQ_f6f6 ,1
#define EQ_f7f7 ,1
#define EQ_f8f8 ,1
#define EQ_f9f9 ,1
#define EQ_fafa ,1
#define EQ_fbfb ,1
#define EQ_fcfc ,1
#define EQ_fdfd ,1
#define EQ_fefe ,1
#define EQ_ffff ,1
#define B8_00 (0,0)
#define B8_01 (1,0)
#define B8_02 (2,0)
#define B8_03 (3,0)
#define B8_04 (4,0)
#define B8_05 (5,0)
#define B8_06 (6,0)
#define B8_07 (7,0)
#define B8_08 (8,0)
#define B8_09 (9,0)
#define B8_0a (a,0)
#define B8_0b (b,0)
#define B8_0c (c,0)
#define B8_0d (d,0)
#define B8_0e (e,0)
#define B8_0f (f,0)
#define B8_10 (0,1)
#define B8_11 (1,1)
#define B8_12 (2,1)
#define B8_13 (3,1)
#define B8_14 (4,1)
#define B8_15 (5,1)
#define B8_16 (6,1)
#define B8_17 (7,1)
#define B8_18 (8,1)
#define B8_19 (9,1)
#define B8_1a (a,1)
#define B8_1b (b,1)
#define B8_1c (c,1)
#define B8_1d (d,1)
#define B8_1e (e,1)
#define B8_1f (f,1)
#define B8_20 (0,2)
#define B8_21 (1,2)
#define B8_22 (2,2)
#define B8_23 (3,2)
#define B8_24 (4,2)
#define B8_25 (5,2)
#define B8_26 (6,2)
#define B8_27 (7,2)
#define B8_28 (8,2)
#define B8_29 (9,2)
#define B8_2a (a,2)
#define B8_2b (b,2)
#define B8_2c (c,2)
#define B8_2d (d,2)
#define B8_2e (e,2)
#define B8_2f (f,2)
#define B8_30 (0,3)
#define B8_31 (1,3)
#define B8_32 (2,3)
#define B8_33 (3,3)
#define B8_34 (4,3)
#define B8_35 (5,3)
#define B8_36 (6,3)
#define B8_37 (7,3)
#define B8_38 (8,3)
#define B8_39 (9,3)
#define B8_3a (a,3)
#define B8_3b (b,3)
#define B8_3c (c,3)
#define B8_3d (d,3)
#define B8_3e (e,3)
#define B8_3f (f,3)
#define B8_40 (0,4)
#define B8_41 (1,4)
#define B8_42 (2,4)
#define B8_43 (3,4)
#define B8_44 (4,4)
#define B8_45 (5,4)
#define B8_46 (6,4)
#define B8_47 (7,4)
#define B8_48 (8,4)
#define B8_49 (9,4)
#define B8_4a (a,4)
#define B8_4b (b,4)
#define B8_4c (c,4)
#define B8_4d (d,4)
#define B8_4e (e,4)
#define B8_4f (f,4)
#define B8_50 (0,5)
#define B8_51 (1,5)
#define B8_52 (2,5)
#define B8_53 (3,5)
#define B8_54 (4,5)
#define B8_55 (5,5)
#define B8_56 (6,5)
#define B8_57 (7,5)
#define B8_58 (8,5)
#define B8_59 (9,5)
#define B8_5a (a,5)
#define B8_5b (b,5)
#define B8_5c (c,5)
#define B8_5d (d,5)
#define B8_5e (e,5)
#define B8_5f (f,5)
#define B8_60 (0,6)
#define B8_61 (1,6)
#define B8_62 (2,6)
#define B8_63 (3,6)
#define B8_64 (4,6)
#define B8_65 (5,6)
#define B8_66 (6,6)
#define B8_67 (7,6)
#define B8_68 (8,6)
#define B8_69 (9,6)
#define B8_6a (a,6)
#define B8_6b (b,6)
#define B8_6c (c,6)
#define B8_6d (d,6)
#define B8_6e (e,6)
#define B8_6f (f,6)
#define B8_70 (0,7)
#define B8_71 (1,7)
#define B8_72 (2,7)
#define B8_73 (3,7)
#define B8_74 (4,7)
#define B8_75 (5,7)
#define B8_76 (6,7)
#define B8_77 (7,7)
#define B8_78 (8,7)
#define B8_79 (9,7)
#define B8_7a (a,7)
#define B8_7b (b,7)
#define B8_7c (c,7)
#define B8_7d (d,7)
#define B8_7e (e,7)
#define B8_7f (f,7)
#define B8_80 (0,8)
#define B8_81 (1,8)
#define B8_82 (2,8)
#define B8_83 (3,8)
#define B8_84 (4,8)
#define B8_85 (5,8)
#define B8_86 (6,8)
#define B8_87 (7,8)
#define B8_88 (8,8)
#define B8_89 (9,8)
#define B8_8a (a,8)
#define B8_8b (b,8)
#define B8_8c (c,8)
#define B8_8d (d,8)
#define B8_8e (e,8)
#define B8_8f (f,8)
#define B8_90 (0,9)
#define B8_91 (1,9)
#define B8_92 (2,9)
#define B8_93 (3,9)
#define B8_94 (4,9)
#define B8_95 (5,9)
#define B8_96 (6,9)
#define B8_97 (7,9)
#define B8_98 (8,9)
#define B8_99 (9,9)
#define B8_9a (a,9)
#define B8_9b (b,9)
#define B8_9c (c,9)
#define B8_9d (d,9)
#define B8_9e (e,9)
#define B8_9f (f,9)
#define B8_a0 (0,a)
#define B8_a1 (1,a)
#define B8_a2 (2,a)
#define B8_a3 (3,a)
#define B8_a4 (4,a)
#define B8_a5 (5,a)
#define B8_a6 (6,a)
#define B8_a7 (7,a)
#define B8_a8 (8,a)
#define B8_a9 (9,a)
#define B8_aa (a,a)
#define B8_ab (b,a)
#define B8_ac (c,a)
#define B8_ad (d,a)
#define B8_ae (e,a)
#define B8_af (f,a)
#define B8_b0 (0,b)
#define B8_b1 (1,b)
#define B8_b2 (2,b)
#define B8_b3 (3,b)
#define B8_b4 (4,b)
#define B8_b5 (5,b)
#define B8_b6 (6,b)
#define B8_b7 (7,b)
#define B8_b8 (8,b)
#define B8_b9 (9,b)
#define B8_ba (a,b)
#define B8_bb (b,b)
#define B8_bc (c,b)
#define B8_bd (d,b)
#define B8_be (e,b)
#define B8_bf (f,b)
#define B8_c0 (0,c)
#define B8_c1 (1,c)
#define B8_c2 (2,c)
#define B8_c3 (3,c)
#define B8_c4 (4,c)
#define B8_c5 (5,c)
#define B8_c6 (6,c)
#define B8_c7 (7,c)
#define B8_c8 (8,c)
#define B8_c9 (9,c)
#define B8_ca (a,c)
#define B8_cb (b,c)
#define B8_cc (c,c)
#define B8_cd (d,c)
#define B8_ce (e,c)
#define B8_cf (f,c)
#define B8_d0 (0,d)
#define B8_d1 (1,d)
#define B8_d2 (2,d)
#define B8_d3 (3,d)
#define B8_d4 (4,d)
#define B8_d5 (5,d)
#define B8_d6 (6,d)
#define B8_d7 (7,d)
#define B8_d8 (8,d)
#define B8_d9 (9,d)
#define B8_da (a,d)
#define B8_db (b,d)
#define B8_dc (c,d)
#define B8_dd (d,d)
#define B8_de (e,d)
#define B8_df (f,d)
#define B8_e0 (0,e)
#define B8_e1 (1,e)
#define B8_e2 (2,e)
#define B8_e3 (3,e)
#define B8_e4 (4,e)
#define B8_e5 (5,e)
#define B8_e6 (6,e)
#define B8_e7 (7,e)
#define B8_e8 (8,e)
#define B8_e9 (9,e)
#define B8_ea (a,e)
#define B8_eb (b,e)
#define B8_ec (c,e)
#define B8_ed (d,e)
#define B8_ee (e,e)
#define B8_ef (f,e)
#define B8_f0 (0,f)
#define B8_f1 (1,f)
#define B8_f2 (2,f)
#define B8_f3 (3,f)
#define B8_f4 (4,f)
#define B8_f5 (5,f)
#define B8_f6 (6,f)
#define B8_f7 (7,f)
#define B8_f8 (8,f)
#define B8_f9 (9,f)
#define B8_fa (a,f)
#define B8_fb (b,f)
#define B8_fc (c,f)
#define B8_fd (d,f)
#define B8_fe (e,f)
#define B8_ff (f,f)