forked from google/periph
/
nrz.go
570 lines (565 loc) · 33.3 KB
/
nrz.go
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
// Copyright 2018 The Periph Authors. All rights reserved.
// Use of this source code is governed under the Apache License, Version 2.0
// that can be found in the LICENSE file.
package nrzled
// nrzMSB3 converts a byte into the MSB-first Non-Return-to-Zero encoded 24
// bits.
//
// zero becomes 100. one becomes 110.
//
// The upper 8 bits are zeros and shall be ignored.
//
// The Non-return-to-zero protocol is a self-clocking signal that enables
// one-way communication without the need of a dedicated clock signal, unlike
// SPI driven LEDs like the apa102.
//
// See https://en.wikipedia.org/wiki/Non-return-to-zero for more technical
// details.
func nrzMSB3Algo(b byte) uint32 {
// The stream is 1x01x01x01x01x01x01x01x0 with the x bits being the bits from
// `b` in reverse order.
out := uint32(0x924924)
out |= uint32(b&0x80) << (3*7 + 1 - 7)
out |= uint32(b&0x40) << (3*6 + 1 - 6)
out |= uint32(b&0x20) << (3*5 + 1 - 5)
out |= uint32(b&0x10) << (3*4 + 1 - 4)
out |= uint32(b&0x08) << (3*3 + 1 - 3)
out |= uint32(b&0x04) << (3*2 + 1 - 2)
out |= uint32(b&0x02) << (3*1 + 1 - 1)
out |= uint32(b&0x01) << (3*0 + 1 - 0)
return out
}
var nrzMSB3 = [...][3]byte{
{0x92, 0x49, 0x24}, // 0x00 | 100100100100100100100100
{0x92, 0x49, 0x26}, // 0x01 | 100100100100100100100110
{0x92, 0x49, 0x34}, // 0x02 | 100100100100100100110100
{0x92, 0x49, 0x36}, // 0x03 | 100100100100100100110110
{0x92, 0x49, 0xA4}, // 0x04 | 100100100100100110100100
{0x92, 0x49, 0xA6}, // 0x05 | 100100100100100110100110
{0x92, 0x49, 0xB4}, // 0x06 | 100100100100100110110100
{0x92, 0x49, 0xB6}, // 0x07 | 100100100100100110110110
{0x92, 0x4D, 0x24}, // 0x08 | 100100100100110100100100
{0x92, 0x4D, 0x26}, // 0x09 | 100100100100110100100110
{0x92, 0x4D, 0x34}, // 0x0A | 100100100100110100110100
{0x92, 0x4D, 0x36}, // 0x0B | 100100100100110100110110
{0x92, 0x4D, 0xA4}, // 0x0C | 100100100100110110100100
{0x92, 0x4D, 0xA6}, // 0x0D | 100100100100110110100110
{0x92, 0x4D, 0xB4}, // 0x0E | 100100100100110110110100
{0x92, 0x4D, 0xB6}, // 0x0F | 100100100100110110110110
{0x92, 0x69, 0x24}, // 0x10 | 100100100110100100100100
{0x92, 0x69, 0x26}, // 0x11 | 100100100110100100100110
{0x92, 0x69, 0x34}, // 0x12 | 100100100110100100110100
{0x92, 0x69, 0x36}, // 0x13 | 100100100110100100110110
{0x92, 0x69, 0xA4}, // 0x14 | 100100100110100110100100
{0x92, 0x69, 0xA6}, // 0x15 | 100100100110100110100110
{0x92, 0x69, 0xB4}, // 0x16 | 100100100110100110110100
{0x92, 0x69, 0xB6}, // 0x17 | 100100100110100110110110
{0x92, 0x6D, 0x24}, // 0x18 | 100100100110110100100100
{0x92, 0x6D, 0x26}, // 0x19 | 100100100110110100100110
{0x92, 0x6D, 0x34}, // 0x1A | 100100100110110100110100
{0x92, 0x6D, 0x36}, // 0x1B | 100100100110110100110110
{0x92, 0x6D, 0xA4}, // 0x1C | 100100100110110110100100
{0x92, 0x6D, 0xA6}, // 0x1D | 100100100110110110100110
{0x92, 0x6D, 0xB4}, // 0x1E | 100100100110110110110100
{0x92, 0x6D, 0xB6}, // 0x1F | 100100100110110110110110
{0x93, 0x49, 0x24}, // 0x20 | 100100110100100100100100
{0x93, 0x49, 0x26}, // 0x21 | 100100110100100100100110
{0x93, 0x49, 0x34}, // 0x22 | 100100110100100100110100
{0x93, 0x49, 0x36}, // 0x23 | 100100110100100100110110
{0x93, 0x49, 0xA4}, // 0x24 | 100100110100100110100100
{0x93, 0x49, 0xA6}, // 0x25 | 100100110100100110100110
{0x93, 0x49, 0xB4}, // 0x26 | 100100110100100110110100
{0x93, 0x49, 0xB6}, // 0x27 | 100100110100100110110110
{0x93, 0x4D, 0x24}, // 0x28 | 100100110100110100100100
{0x93, 0x4D, 0x26}, // 0x29 | 100100110100110100100110
{0x93, 0x4D, 0x34}, // 0x2A | 100100110100110100110100
{0x93, 0x4D, 0x36}, // 0x2B | 100100110100110100110110
{0x93, 0x4D, 0xA4}, // 0x2C | 100100110100110110100100
{0x93, 0x4D, 0xA6}, // 0x2D | 100100110100110110100110
{0x93, 0x4D, 0xB4}, // 0x2E | 100100110100110110110100
{0x93, 0x4D, 0xB6}, // 0x2F | 100100110100110110110110
{0x93, 0x69, 0x24}, // 0x30 | 100100110110100100100100
{0x93, 0x69, 0x26}, // 0x31 | 100100110110100100100110
{0x93, 0x69, 0x34}, // 0x32 | 100100110110100100110100
{0x93, 0x69, 0x36}, // 0x33 | 100100110110100100110110
{0x93, 0x69, 0xA4}, // 0x34 | 100100110110100110100100
{0x93, 0x69, 0xA6}, // 0x35 | 100100110110100110100110
{0x93, 0x69, 0xB4}, // 0x36 | 100100110110100110110100
{0x93, 0x69, 0xB6}, // 0x37 | 100100110110100110110110
{0x93, 0x6D, 0x24}, // 0x38 | 100100110110110100100100
{0x93, 0x6D, 0x26}, // 0x39 | 100100110110110100100110
{0x93, 0x6D, 0x34}, // 0x3A | 100100110110110100110100
{0x93, 0x6D, 0x36}, // 0x3B | 100100110110110100110110
{0x93, 0x6D, 0xA4}, // 0x3C | 100100110110110110100100
{0x93, 0x6D, 0xA6}, // 0x3D | 100100110110110110100110
{0x93, 0x6D, 0xB4}, // 0x3E | 100100110110110110110100
{0x93, 0x6D, 0xB6}, // 0x3F | 100100110110110110110110
{0x9A, 0x49, 0x24}, // 0x40 | 100110100100100100100100
{0x9A, 0x49, 0x26}, // 0x41 | 100110100100100100100110
{0x9A, 0x49, 0x34}, // 0x42 | 100110100100100100110100
{0x9A, 0x49, 0x36}, // 0x43 | 100110100100100100110110
{0x9A, 0x49, 0xA4}, // 0x44 | 100110100100100110100100
{0x9A, 0x49, 0xA6}, // 0x45 | 100110100100100110100110
{0x9A, 0x49, 0xB4}, // 0x46 | 100110100100100110110100
{0x9A, 0x49, 0xB6}, // 0x47 | 100110100100100110110110
{0x9A, 0x4D, 0x24}, // 0x48 | 100110100100110100100100
{0x9A, 0x4D, 0x26}, // 0x49 | 100110100100110100100110
{0x9A, 0x4D, 0x34}, // 0x4A | 100110100100110100110100
{0x9A, 0x4D, 0x36}, // 0x4B | 100110100100110100110110
{0x9A, 0x4D, 0xA4}, // 0x4C | 100110100100110110100100
{0x9A, 0x4D, 0xA6}, // 0x4D | 100110100100110110100110
{0x9A, 0x4D, 0xB4}, // 0x4E | 100110100100110110110100
{0x9A, 0x4D, 0xB6}, // 0x4F | 100110100100110110110110
{0x9A, 0x69, 0x24}, // 0x50 | 100110100110100100100100
{0x9A, 0x69, 0x26}, // 0x51 | 100110100110100100100110
{0x9A, 0x69, 0x34}, // 0x52 | 100110100110100100110100
{0x9A, 0x69, 0x36}, // 0x53 | 100110100110100100110110
{0x9A, 0x69, 0xA4}, // 0x54 | 100110100110100110100100
{0x9A, 0x69, 0xA6}, // 0x55 | 100110100110100110100110
{0x9A, 0x69, 0xB4}, // 0x56 | 100110100110100110110100
{0x9A, 0x69, 0xB6}, // 0x57 | 100110100110100110110110
{0x9A, 0x6D, 0x24}, // 0x58 | 100110100110110100100100
{0x9A, 0x6D, 0x26}, // 0x59 | 100110100110110100100110
{0x9A, 0x6D, 0x34}, // 0x5A | 100110100110110100110100
{0x9A, 0x6D, 0x36}, // 0x5B | 100110100110110100110110
{0x9A, 0x6D, 0xA4}, // 0x5C | 100110100110110110100100
{0x9A, 0x6D, 0xA6}, // 0x5D | 100110100110110110100110
{0x9A, 0x6D, 0xB4}, // 0x5E | 100110100110110110110100
{0x9A, 0x6D, 0xB6}, // 0x5F | 100110100110110110110110
{0x9B, 0x49, 0x24}, // 0x60 | 100110110100100100100100
{0x9B, 0x49, 0x26}, // 0x61 | 100110110100100100100110
{0x9B, 0x49, 0x34}, // 0x62 | 100110110100100100110100
{0x9B, 0x49, 0x36}, // 0x63 | 100110110100100100110110
{0x9B, 0x49, 0xA4}, // 0x64 | 100110110100100110100100
{0x9B, 0x49, 0xA6}, // 0x65 | 100110110100100110100110
{0x9B, 0x49, 0xB4}, // 0x66 | 100110110100100110110100
{0x9B, 0x49, 0xB6}, // 0x67 | 100110110100100110110110
{0x9B, 0x4D, 0x24}, // 0x68 | 100110110100110100100100
{0x9B, 0x4D, 0x26}, // 0x69 | 100110110100110100100110
{0x9B, 0x4D, 0x34}, // 0x6A | 100110110100110100110100
{0x9B, 0x4D, 0x36}, // 0x6B | 100110110100110100110110
{0x9B, 0x4D, 0xA4}, // 0x6C | 100110110100110110100100
{0x9B, 0x4D, 0xA6}, // 0x6D | 100110110100110110100110
{0x9B, 0x4D, 0xB4}, // 0x6E | 100110110100110110110100
{0x9B, 0x4D, 0xB6}, // 0x6F | 100110110100110110110110
{0x9B, 0x69, 0x24}, // 0x70 | 100110110110100100100100
{0x9B, 0x69, 0x26}, // 0x71 | 100110110110100100100110
{0x9B, 0x69, 0x34}, // 0x72 | 100110110110100100110100
{0x9B, 0x69, 0x36}, // 0x73 | 100110110110100100110110
{0x9B, 0x69, 0xA4}, // 0x74 | 100110110110100110100100
{0x9B, 0x69, 0xA6}, // 0x75 | 100110110110100110100110
{0x9B, 0x69, 0xB4}, // 0x76 | 100110110110100110110100
{0x9B, 0x69, 0xB6}, // 0x77 | 100110110110100110110110
{0x9B, 0x6D, 0x24}, // 0x78 | 100110110110110100100100
{0x9B, 0x6D, 0x26}, // 0x79 | 100110110110110100100110
{0x9B, 0x6D, 0x34}, // 0x7A | 100110110110110100110100
{0x9B, 0x6D, 0x36}, // 0x7B | 100110110110110100110110
{0x9B, 0x6D, 0xA4}, // 0x7C | 100110110110110110100100
{0x9B, 0x6D, 0xA6}, // 0x7D | 100110110110110110100110
{0x9B, 0x6D, 0xB4}, // 0x7E | 100110110110110110110100
{0x9B, 0x6D, 0xB6}, // 0x7F | 100110110110110110110110
{0xD2, 0x49, 0x24}, // 0x80 | 110100100100100100100100
{0xD2, 0x49, 0x26}, // 0x81 | 110100100100100100100110
{0xD2, 0x49, 0x34}, // 0x82 | 110100100100100100110100
{0xD2, 0x49, 0x36}, // 0x83 | 110100100100100100110110
{0xD2, 0x49, 0xA4}, // 0x84 | 110100100100100110100100
{0xD2, 0x49, 0xA6}, // 0x85 | 110100100100100110100110
{0xD2, 0x49, 0xB4}, // 0x86 | 110100100100100110110100
{0xD2, 0x49, 0xB6}, // 0x87 | 110100100100100110110110
{0xD2, 0x4D, 0x24}, // 0x88 | 110100100100110100100100
{0xD2, 0x4D, 0x26}, // 0x89 | 110100100100110100100110
{0xD2, 0x4D, 0x34}, // 0x8A | 110100100100110100110100
{0xD2, 0x4D, 0x36}, // 0x8B | 110100100100110100110110
{0xD2, 0x4D, 0xA4}, // 0x8C | 110100100100110110100100
{0xD2, 0x4D, 0xA6}, // 0x8D | 110100100100110110100110
{0xD2, 0x4D, 0xB4}, // 0x8E | 110100100100110110110100
{0xD2, 0x4D, 0xB6}, // 0x8F | 110100100100110110110110
{0xD2, 0x69, 0x24}, // 0x90 | 110100100110100100100100
{0xD2, 0x69, 0x26}, // 0x91 | 110100100110100100100110
{0xD2, 0x69, 0x34}, // 0x92 | 110100100110100100110100
{0xD2, 0x69, 0x36}, // 0x93 | 110100100110100100110110
{0xD2, 0x69, 0xA4}, // 0x94 | 110100100110100110100100
{0xD2, 0x69, 0xA6}, // 0x95 | 110100100110100110100110
{0xD2, 0x69, 0xB4}, // 0x96 | 110100100110100110110100
{0xD2, 0x69, 0xB6}, // 0x97 | 110100100110100110110110
{0xD2, 0x6D, 0x24}, // 0x98 | 110100100110110100100100
{0xD2, 0x6D, 0x26}, // 0x99 | 110100100110110100100110
{0xD2, 0x6D, 0x34}, // 0x9A | 110100100110110100110100
{0xD2, 0x6D, 0x36}, // 0x9B | 110100100110110100110110
{0xD2, 0x6D, 0xA4}, // 0x9C | 110100100110110110100100
{0xD2, 0x6D, 0xA6}, // 0x9D | 110100100110110110100110
{0xD2, 0x6D, 0xB4}, // 0x9E | 110100100110110110110100
{0xD2, 0x6D, 0xB6}, // 0x9F | 110100100110110110110110
{0xD3, 0x49, 0x24}, // 0xA0 | 110100110100100100100100
{0xD3, 0x49, 0x26}, // 0xA1 | 110100110100100100100110
{0xD3, 0x49, 0x34}, // 0xA2 | 110100110100100100110100
{0xD3, 0x49, 0x36}, // 0xA3 | 110100110100100100110110
{0xD3, 0x49, 0xA4}, // 0xA4 | 110100110100100110100100
{0xD3, 0x49, 0xA6}, // 0xA5 | 110100110100100110100110
{0xD3, 0x49, 0xB4}, // 0xA6 | 110100110100100110110100
{0xD3, 0x49, 0xB6}, // 0xA7 | 110100110100100110110110
{0xD3, 0x4D, 0x24}, // 0xA8 | 110100110100110100100100
{0xD3, 0x4D, 0x26}, // 0xA9 | 110100110100110100100110
{0xD3, 0x4D, 0x34}, // 0xAA | 110100110100110100110100
{0xD3, 0x4D, 0x36}, // 0xAB | 110100110100110100110110
{0xD3, 0x4D, 0xA4}, // 0xAC | 110100110100110110100100
{0xD3, 0x4D, 0xA6}, // 0xAD | 110100110100110110100110
{0xD3, 0x4D, 0xB4}, // 0xAE | 110100110100110110110100
{0xD3, 0x4D, 0xB6}, // 0xAF | 110100110100110110110110
{0xD3, 0x69, 0x24}, // 0xB0 | 110100110110100100100100
{0xD3, 0x69, 0x26}, // 0xB1 | 110100110110100100100110
{0xD3, 0x69, 0x34}, // 0xB2 | 110100110110100100110100
{0xD3, 0x69, 0x36}, // 0xB3 | 110100110110100100110110
{0xD3, 0x69, 0xA4}, // 0xB4 | 110100110110100110100100
{0xD3, 0x69, 0xA6}, // 0xB5 | 110100110110100110100110
{0xD3, 0x69, 0xB4}, // 0xB6 | 110100110110100110110100
{0xD3, 0x69, 0xB6}, // 0xB7 | 110100110110100110110110
{0xD3, 0x6D, 0x24}, // 0xB8 | 110100110110110100100100
{0xD3, 0x6D, 0x26}, // 0xB9 | 110100110110110100100110
{0xD3, 0x6D, 0x34}, // 0xBA | 110100110110110100110100
{0xD3, 0x6D, 0x36}, // 0xBB | 110100110110110100110110
{0xD3, 0x6D, 0xA4}, // 0xBC | 110100110110110110100100
{0xD3, 0x6D, 0xA6}, // 0xBD | 110100110110110110100110
{0xD3, 0x6D, 0xB4}, // 0xBE | 110100110110110110110100
{0xD3, 0x6D, 0xB6}, // 0xBF | 110100110110110110110110
{0xDA, 0x49, 0x24}, // 0xC0 | 110110100100100100100100
{0xDA, 0x49, 0x26}, // 0xC1 | 110110100100100100100110
{0xDA, 0x49, 0x34}, // 0xC2 | 110110100100100100110100
{0xDA, 0x49, 0x36}, // 0xC3 | 110110100100100100110110
{0xDA, 0x49, 0xA4}, // 0xC4 | 110110100100100110100100
{0xDA, 0x49, 0xA6}, // 0xC5 | 110110100100100110100110
{0xDA, 0x49, 0xB4}, // 0xC6 | 110110100100100110110100
{0xDA, 0x49, 0xB6}, // 0xC7 | 110110100100100110110110
{0xDA, 0x4D, 0x24}, // 0xC8 | 110110100100110100100100
{0xDA, 0x4D, 0x26}, // 0xC9 | 110110100100110100100110
{0xDA, 0x4D, 0x34}, // 0xCA | 110110100100110100110100
{0xDA, 0x4D, 0x36}, // 0xCB | 110110100100110100110110
{0xDA, 0x4D, 0xA4}, // 0xCC | 110110100100110110100100
{0xDA, 0x4D, 0xA6}, // 0xCD | 110110100100110110100110
{0xDA, 0x4D, 0xB4}, // 0xCE | 110110100100110110110100
{0xDA, 0x4D, 0xB6}, // 0xCF | 110110100100110110110110
{0xDA, 0x69, 0x24}, // 0xD0 | 110110100110100100100100
{0xDA, 0x69, 0x26}, // 0xD1 | 110110100110100100100110
{0xDA, 0x69, 0x34}, // 0xD2 | 110110100110100100110100
{0xDA, 0x69, 0x36}, // 0xD3 | 110110100110100100110110
{0xDA, 0x69, 0xA4}, // 0xD4 | 110110100110100110100100
{0xDA, 0x69, 0xA6}, // 0xD5 | 110110100110100110100110
{0xDA, 0x69, 0xB4}, // 0xD6 | 110110100110100110110100
{0xDA, 0x69, 0xB6}, // 0xD7 | 110110100110100110110110
{0xDA, 0x6D, 0x24}, // 0xD8 | 110110100110110100100100
{0xDA, 0x6D, 0x26}, // 0xD9 | 110110100110110100100110
{0xDA, 0x6D, 0x34}, // 0xDA | 110110100110110100110100
{0xDA, 0x6D, 0x36}, // 0xDB | 110110100110110100110110
{0xDA, 0x6D, 0xA4}, // 0xDC | 110110100110110110100100
{0xDA, 0x6D, 0xA6}, // 0xDD | 110110100110110110100110
{0xDA, 0x6D, 0xB4}, // 0xDE | 110110100110110110110100
{0xDA, 0x6D, 0xB6}, // 0xDF | 110110100110110110110110
{0xDB, 0x49, 0x24}, // 0xE0 | 110110110100100100100100
{0xDB, 0x49, 0x26}, // 0xE1 | 110110110100100100100110
{0xDB, 0x49, 0x34}, // 0xE2 | 110110110100100100110100
{0xDB, 0x49, 0x36}, // 0xE3 | 110110110100100100110110
{0xDB, 0x49, 0xA4}, // 0xE4 | 110110110100100110100100
{0xDB, 0x49, 0xA6}, // 0xE5 | 110110110100100110100110
{0xDB, 0x49, 0xB4}, // 0xE6 | 110110110100100110110100
{0xDB, 0x49, 0xB6}, // 0xE7 | 110110110100100110110110
{0xDB, 0x4D, 0x24}, // 0xE8 | 110110110100110100100100
{0xDB, 0x4D, 0x26}, // 0xE9 | 110110110100110100100110
{0xDB, 0x4D, 0x34}, // 0xEA | 110110110100110100110100
{0xDB, 0x4D, 0x36}, // 0xEB | 110110110100110100110110
{0xDB, 0x4D, 0xA4}, // 0xEC | 110110110100110110100100
{0xDB, 0x4D, 0xA6}, // 0xED | 110110110100110110100110
{0xDB, 0x4D, 0xB4}, // 0xEE | 110110110100110110110100
{0xDB, 0x4D, 0xB6}, // 0xEF | 110110110100110110110110
{0xDB, 0x69, 0x24}, // 0xF0 | 110110110110100100100100
{0xDB, 0x69, 0x26}, // 0xF1 | 110110110110100100100110
{0xDB, 0x69, 0x34}, // 0xF2 | 110110110110100100110100
{0xDB, 0x69, 0x36}, // 0xF3 | 110110110110100100110110
{0xDB, 0x69, 0xA4}, // 0xF4 | 110110110110100110100100
{0xDB, 0x69, 0xA6}, // 0xF5 | 110110110110100110100110
{0xDB, 0x69, 0xB4}, // 0xF6 | 110110110110100110110100
{0xDB, 0x69, 0xB6}, // 0xF7 | 110110110110100110110110
{0xDB, 0x6D, 0x24}, // 0xF8 | 110110110110110100100100
{0xDB, 0x6D, 0x26}, // 0xF9 | 110110110110110100100110
{0xDB, 0x6D, 0x34}, // 0xFA | 110110110110110100110100
{0xDB, 0x6D, 0x36}, // 0xFB | 110110110110110100110110
{0xDB, 0x6D, 0xA4}, // 0xFC | 110110110110110110100100
{0xDB, 0x6D, 0xA6}, // 0xFD | 110110110110110110100110
{0xDB, 0x6D, 0xB4}, // 0xFE | 110110110110110110110100
{0xDB, 0x6D, 0xB6}, // 0xFF | 110110110110110110110110
}
// nrzMSB4 converts a byte into the MSB-first Non-Return-to-Zero encoded 32
// bits.
//
// zero becomes 1000. one becomes 1110.
//
// Note that this is out of spec but is close enough.
func nrzMSB4Algo(b byte) uint32 {
out := uint32(0x88888888)
out |= (uint32(b&0x80) * 3) << (4*7 + 1 - 7)
out |= (uint32(b&0x40) * 3) << (4*6 + 1 - 6)
out |= (uint32(b&0x20) * 3) << (4*5 + 1 - 5)
out |= (uint32(b&0x10) * 3) << (4*4 + 1 - 4)
out |= (uint32(b&0x08) * 3) << (4*3 + 1 - 3)
out |= (uint32(b&0x04) * 3) << (4*2 + 1 - 2)
out |= (uint32(b&0x02) * 3) << (4*1 + 1 - 1)
out |= (uint32(b&0x01) * 3) << (4*0 + 1 - 0)
return out
}
var nrzMSB4 = [...][4]byte{
{0x88, 0x88, 0x88, 0x88}, // 0x00 | 10001000100010001000100010001000
{0x88, 0x88, 0x88, 0x8E}, // 0x01 | 10001000100010001000100010001110
{0x88, 0x88, 0x88, 0xE8}, // 0x02 | 10001000100010001000100011101000
{0x88, 0x88, 0x88, 0xEE}, // 0x03 | 10001000100010001000100011101110
{0x88, 0x88, 0x8E, 0x88}, // 0x04 | 10001000100010001000111010001000
{0x88, 0x88, 0x8E, 0x8E}, // 0x05 | 10001000100010001000111010001110
{0x88, 0x88, 0x8E, 0xE8}, // 0x06 | 10001000100010001000111011101000
{0x88, 0x88, 0x8E, 0xEE}, // 0x07 | 10001000100010001000111011101110
{0x88, 0x88, 0xE8, 0x88}, // 0x08 | 10001000100010001110100010001000
{0x88, 0x88, 0xE8, 0x8E}, // 0x09 | 10001000100010001110100010001110
{0x88, 0x88, 0xE8, 0xE8}, // 0x0A | 10001000100010001110100011101000
{0x88, 0x88, 0xE8, 0xEE}, // 0x0B | 10001000100010001110100011101110
{0x88, 0x88, 0xEE, 0x88}, // 0x0C | 10001000100010001110111010001000
{0x88, 0x88, 0xEE, 0x8E}, // 0x0D | 10001000100010001110111010001110
{0x88, 0x88, 0xEE, 0xE8}, // 0x0E | 10001000100010001110111011101000
{0x88, 0x88, 0xEE, 0xEE}, // 0x0F | 10001000100010001110111011101110
{0x88, 0x8E, 0x88, 0x88}, // 0x10 | 10001000100011101000100010001000
{0x88, 0x8E, 0x88, 0x8E}, // 0x11 | 10001000100011101000100010001110
{0x88, 0x8E, 0x88, 0xE8}, // 0x12 | 10001000100011101000100011101000
{0x88, 0x8E, 0x88, 0xEE}, // 0x13 | 10001000100011101000100011101110
{0x88, 0x8E, 0x8E, 0x88}, // 0x14 | 10001000100011101000111010001000
{0x88, 0x8E, 0x8E, 0x8E}, // 0x15 | 10001000100011101000111010001110
{0x88, 0x8E, 0x8E, 0xE8}, // 0x16 | 10001000100011101000111011101000
{0x88, 0x8E, 0x8E, 0xEE}, // 0x17 | 10001000100011101000111011101110
{0x88, 0x8E, 0xE8, 0x88}, // 0x18 | 10001000100011101110100010001000
{0x88, 0x8E, 0xE8, 0x8E}, // 0x19 | 10001000100011101110100010001110
{0x88, 0x8E, 0xE8, 0xE8}, // 0x1A | 10001000100011101110100011101000
{0x88, 0x8E, 0xE8, 0xEE}, // 0x1B | 10001000100011101110100011101110
{0x88, 0x8E, 0xEE, 0x88}, // 0x1C | 10001000100011101110111010001000
{0x88, 0x8E, 0xEE, 0x8E}, // 0x1D | 10001000100011101110111010001110
{0x88, 0x8E, 0xEE, 0xE8}, // 0x1E | 10001000100011101110111011101000
{0x88, 0x8E, 0xEE, 0xEE}, // 0x1F | 10001000100011101110111011101110
{0x88, 0xE8, 0x88, 0x88}, // 0x20 | 10001000111010001000100010001000
{0x88, 0xE8, 0x88, 0x8E}, // 0x21 | 10001000111010001000100010001110
{0x88, 0xE8, 0x88, 0xE8}, // 0x22 | 10001000111010001000100011101000
{0x88, 0xE8, 0x88, 0xEE}, // 0x23 | 10001000111010001000100011101110
{0x88, 0xE8, 0x8E, 0x88}, // 0x24 | 10001000111010001000111010001000
{0x88, 0xE8, 0x8E, 0x8E}, // 0x25 | 10001000111010001000111010001110
{0x88, 0xE8, 0x8E, 0xE8}, // 0x26 | 10001000111010001000111011101000
{0x88, 0xE8, 0x8E, 0xEE}, // 0x27 | 10001000111010001000111011101110
{0x88, 0xE8, 0xE8, 0x88}, // 0x28 | 10001000111010001110100010001000
{0x88, 0xE8, 0xE8, 0x8E}, // 0x29 | 10001000111010001110100010001110
{0x88, 0xE8, 0xE8, 0xE8}, // 0x2A | 10001000111010001110100011101000
{0x88, 0xE8, 0xE8, 0xEE}, // 0x2B | 10001000111010001110100011101110
{0x88, 0xE8, 0xEE, 0x88}, // 0x2C | 10001000111010001110111010001000
{0x88, 0xE8, 0xEE, 0x8E}, // 0x2D | 10001000111010001110111010001110
{0x88, 0xE8, 0xEE, 0xE8}, // 0x2E | 10001000111010001110111011101000
{0x88, 0xE8, 0xEE, 0xEE}, // 0x2F | 10001000111010001110111011101110
{0x88, 0xEE, 0x88, 0x88}, // 0x30 | 10001000111011101000100010001000
{0x88, 0xEE, 0x88, 0x8E}, // 0x31 | 10001000111011101000100010001110
{0x88, 0xEE, 0x88, 0xE8}, // 0x32 | 10001000111011101000100011101000
{0x88, 0xEE, 0x88, 0xEE}, // 0x33 | 10001000111011101000100011101110
{0x88, 0xEE, 0x8E, 0x88}, // 0x34 | 10001000111011101000111010001000
{0x88, 0xEE, 0x8E, 0x8E}, // 0x35 | 10001000111011101000111010001110
{0x88, 0xEE, 0x8E, 0xE8}, // 0x36 | 10001000111011101000111011101000
{0x88, 0xEE, 0x8E, 0xEE}, // 0x37 | 10001000111011101000111011101110
{0x88, 0xEE, 0xE8, 0x88}, // 0x38 | 10001000111011101110100010001000
{0x88, 0xEE, 0xE8, 0x8E}, // 0x39 | 10001000111011101110100010001110
{0x88, 0xEE, 0xE8, 0xE8}, // 0x3A | 10001000111011101110100011101000
{0x88, 0xEE, 0xE8, 0xEE}, // 0x3B | 10001000111011101110100011101110
{0x88, 0xEE, 0xEE, 0x88}, // 0x3C | 10001000111011101110111010001000
{0x88, 0xEE, 0xEE, 0x8E}, // 0x3D | 10001000111011101110111010001110
{0x88, 0xEE, 0xEE, 0xE8}, // 0x3E | 10001000111011101110111011101000
{0x88, 0xEE, 0xEE, 0xEE}, // 0x3F | 10001000111011101110111011101110
{0x8E, 0x88, 0x88, 0x88}, // 0x40 | 10001110100010001000100010001000
{0x8E, 0x88, 0x88, 0x8E}, // 0x41 | 10001110100010001000100010001110
{0x8E, 0x88, 0x88, 0xE8}, // 0x42 | 10001110100010001000100011101000
{0x8E, 0x88, 0x88, 0xEE}, // 0x43 | 10001110100010001000100011101110
{0x8E, 0x88, 0x8E, 0x88}, // 0x44 | 10001110100010001000111010001000
{0x8E, 0x88, 0x8E, 0x8E}, // 0x45 | 10001110100010001000111010001110
{0x8E, 0x88, 0x8E, 0xE8}, // 0x46 | 10001110100010001000111011101000
{0x8E, 0x88, 0x8E, 0xEE}, // 0x47 | 10001110100010001000111011101110
{0x8E, 0x88, 0xE8, 0x88}, // 0x48 | 10001110100010001110100010001000
{0x8E, 0x88, 0xE8, 0x8E}, // 0x49 | 10001110100010001110100010001110
{0x8E, 0x88, 0xE8, 0xE8}, // 0x4A | 10001110100010001110100011101000
{0x8E, 0x88, 0xE8, 0xEE}, // 0x4B | 10001110100010001110100011101110
{0x8E, 0x88, 0xEE, 0x88}, // 0x4C | 10001110100010001110111010001000
{0x8E, 0x88, 0xEE, 0x8E}, // 0x4D | 10001110100010001110111010001110
{0x8E, 0x88, 0xEE, 0xE8}, // 0x4E | 10001110100010001110111011101000
{0x8E, 0x88, 0xEE, 0xEE}, // 0x4F | 10001110100010001110111011101110
{0x8E, 0x8E, 0x88, 0x88}, // 0x50 | 10001110100011101000100010001000
{0x8E, 0x8E, 0x88, 0x8E}, // 0x51 | 10001110100011101000100010001110
{0x8E, 0x8E, 0x88, 0xE8}, // 0x52 | 10001110100011101000100011101000
{0x8E, 0x8E, 0x88, 0xEE}, // 0x53 | 10001110100011101000100011101110
{0x8E, 0x8E, 0x8E, 0x88}, // 0x54 | 10001110100011101000111010001000
{0x8E, 0x8E, 0x8E, 0x8E}, // 0x55 | 10001110100011101000111010001110
{0x8E, 0x8E, 0x8E, 0xE8}, // 0x56 | 10001110100011101000111011101000
{0x8E, 0x8E, 0x8E, 0xEE}, // 0x57 | 10001110100011101000111011101110
{0x8E, 0x8E, 0xE8, 0x88}, // 0x58 | 10001110100011101110100010001000
{0x8E, 0x8E, 0xE8, 0x8E}, // 0x59 | 10001110100011101110100010001110
{0x8E, 0x8E, 0xE8, 0xE8}, // 0x5A | 10001110100011101110100011101000
{0x8E, 0x8E, 0xE8, 0xEE}, // 0x5B | 10001110100011101110100011101110
{0x8E, 0x8E, 0xEE, 0x88}, // 0x5C | 10001110100011101110111010001000
{0x8E, 0x8E, 0xEE, 0x8E}, // 0x5D | 10001110100011101110111010001110
{0x8E, 0x8E, 0xEE, 0xE8}, // 0x5E | 10001110100011101110111011101000
{0x8E, 0x8E, 0xEE, 0xEE}, // 0x5F | 10001110100011101110111011101110
{0x8E, 0xE8, 0x88, 0x88}, // 0x60 | 10001110111010001000100010001000
{0x8E, 0xE8, 0x88, 0x8E}, // 0x61 | 10001110111010001000100010001110
{0x8E, 0xE8, 0x88, 0xE8}, // 0x62 | 10001110111010001000100011101000
{0x8E, 0xE8, 0x88, 0xEE}, // 0x63 | 10001110111010001000100011101110
{0x8E, 0xE8, 0x8E, 0x88}, // 0x64 | 10001110111010001000111010001000
{0x8E, 0xE8, 0x8E, 0x8E}, // 0x65 | 10001110111010001000111010001110
{0x8E, 0xE8, 0x8E, 0xE8}, // 0x66 | 10001110111010001000111011101000
{0x8E, 0xE8, 0x8E, 0xEE}, // 0x67 | 10001110111010001000111011101110
{0x8E, 0xE8, 0xE8, 0x88}, // 0x68 | 10001110111010001110100010001000
{0x8E, 0xE8, 0xE8, 0x8E}, // 0x69 | 10001110111010001110100010001110
{0x8E, 0xE8, 0xE8, 0xE8}, // 0x6A | 10001110111010001110100011101000
{0x8E, 0xE8, 0xE8, 0xEE}, // 0x6B | 10001110111010001110100011101110
{0x8E, 0xE8, 0xEE, 0x88}, // 0x6C | 10001110111010001110111010001000
{0x8E, 0xE8, 0xEE, 0x8E}, // 0x6D | 10001110111010001110111010001110
{0x8E, 0xE8, 0xEE, 0xE8}, // 0x6E | 10001110111010001110111011101000
{0x8E, 0xE8, 0xEE, 0xEE}, // 0x6F | 10001110111010001110111011101110
{0x8E, 0xEE, 0x88, 0x88}, // 0x70 | 10001110111011101000100010001000
{0x8E, 0xEE, 0x88, 0x8E}, // 0x71 | 10001110111011101000100010001110
{0x8E, 0xEE, 0x88, 0xE8}, // 0x72 | 10001110111011101000100011101000
{0x8E, 0xEE, 0x88, 0xEE}, // 0x73 | 10001110111011101000100011101110
{0x8E, 0xEE, 0x8E, 0x88}, // 0x74 | 10001110111011101000111010001000
{0x8E, 0xEE, 0x8E, 0x8E}, // 0x75 | 10001110111011101000111010001110
{0x8E, 0xEE, 0x8E, 0xE8}, // 0x76 | 10001110111011101000111011101000
{0x8E, 0xEE, 0x8E, 0xEE}, // 0x77 | 10001110111011101000111011101110
{0x8E, 0xEE, 0xE8, 0x88}, // 0x78 | 10001110111011101110100010001000
{0x8E, 0xEE, 0xE8, 0x8E}, // 0x79 | 10001110111011101110100010001110
{0x8E, 0xEE, 0xE8, 0xE8}, // 0x7A | 10001110111011101110100011101000
{0x8E, 0xEE, 0xE8, 0xEE}, // 0x7B | 10001110111011101110100011101110
{0x8E, 0xEE, 0xEE, 0x88}, // 0x7C | 10001110111011101110111010001000
{0x8E, 0xEE, 0xEE, 0x8E}, // 0x7D | 10001110111011101110111010001110
{0x8E, 0xEE, 0xEE, 0xE8}, // 0x7E | 10001110111011101110111011101000
{0x8E, 0xEE, 0xEE, 0xEE}, // 0x7F | 10001110111011101110111011101110
{0xE8, 0x88, 0x88, 0x88}, // 0x80 | 11101000100010001000100010001000
{0xE8, 0x88, 0x88, 0x8E}, // 0x81 | 11101000100010001000100010001110
{0xE8, 0x88, 0x88, 0xE8}, // 0x82 | 11101000100010001000100011101000
{0xE8, 0x88, 0x88, 0xEE}, // 0x83 | 11101000100010001000100011101110
{0xE8, 0x88, 0x8E, 0x88}, // 0x84 | 11101000100010001000111010001000
{0xE8, 0x88, 0x8E, 0x8E}, // 0x85 | 11101000100010001000111010001110
{0xE8, 0x88, 0x8E, 0xE8}, // 0x86 | 11101000100010001000111011101000
{0xE8, 0x88, 0x8E, 0xEE}, // 0x87 | 11101000100010001000111011101110
{0xE8, 0x88, 0xE8, 0x88}, // 0x88 | 11101000100010001110100010001000
{0xE8, 0x88, 0xE8, 0x8E}, // 0x89 | 11101000100010001110100010001110
{0xE8, 0x88, 0xE8, 0xE8}, // 0x8A | 11101000100010001110100011101000
{0xE8, 0x88, 0xE8, 0xEE}, // 0x8B | 11101000100010001110100011101110
{0xE8, 0x88, 0xEE, 0x88}, // 0x8C | 11101000100010001110111010001000
{0xE8, 0x88, 0xEE, 0x8E}, // 0x8D | 11101000100010001110111010001110
{0xE8, 0x88, 0xEE, 0xE8}, // 0x8E | 11101000100010001110111011101000
{0xE8, 0x88, 0xEE, 0xEE}, // 0x8F | 11101000100010001110111011101110
{0xE8, 0x8E, 0x88, 0x88}, // 0x90 | 11101000100011101000100010001000
{0xE8, 0x8E, 0x88, 0x8E}, // 0x91 | 11101000100011101000100010001110
{0xE8, 0x8E, 0x88, 0xE8}, // 0x92 | 11101000100011101000100011101000
{0xE8, 0x8E, 0x88, 0xEE}, // 0x93 | 11101000100011101000100011101110
{0xE8, 0x8E, 0x8E, 0x88}, // 0x94 | 11101000100011101000111010001000
{0xE8, 0x8E, 0x8E, 0x8E}, // 0x95 | 11101000100011101000111010001110
{0xE8, 0x8E, 0x8E, 0xE8}, // 0x96 | 11101000100011101000111011101000
{0xE8, 0x8E, 0x8E, 0xEE}, // 0x97 | 11101000100011101000111011101110
{0xE8, 0x8E, 0xE8, 0x88}, // 0x98 | 11101000100011101110100010001000
{0xE8, 0x8E, 0xE8, 0x8E}, // 0x99 | 11101000100011101110100010001110
{0xE8, 0x8E, 0xE8, 0xE8}, // 0x9A | 11101000100011101110100011101000
{0xE8, 0x8E, 0xE8, 0xEE}, // 0x9B | 11101000100011101110100011101110
{0xE8, 0x8E, 0xEE, 0x88}, // 0x9C | 11101000100011101110111010001000
{0xE8, 0x8E, 0xEE, 0x8E}, // 0x9D | 11101000100011101110111010001110
{0xE8, 0x8E, 0xEE, 0xE8}, // 0x9E | 11101000100011101110111011101000
{0xE8, 0x8E, 0xEE, 0xEE}, // 0x9F | 11101000100011101110111011101110
{0xE8, 0xE8, 0x88, 0x88}, // 0xA0 | 11101000111010001000100010001000
{0xE8, 0xE8, 0x88, 0x8E}, // 0xA1 | 11101000111010001000100010001110
{0xE8, 0xE8, 0x88, 0xE8}, // 0xA2 | 11101000111010001000100011101000
{0xE8, 0xE8, 0x88, 0xEE}, // 0xA3 | 11101000111010001000100011101110
{0xE8, 0xE8, 0x8E, 0x88}, // 0xA4 | 11101000111010001000111010001000
{0xE8, 0xE8, 0x8E, 0x8E}, // 0xA5 | 11101000111010001000111010001110
{0xE8, 0xE8, 0x8E, 0xE8}, // 0xA6 | 11101000111010001000111011101000
{0xE8, 0xE8, 0x8E, 0xEE}, // 0xA7 | 11101000111010001000111011101110
{0xE8, 0xE8, 0xE8, 0x88}, // 0xA8 | 11101000111010001110100010001000
{0xE8, 0xE8, 0xE8, 0x8E}, // 0xA9 | 11101000111010001110100010001110
{0xE8, 0xE8, 0xE8, 0xE8}, // 0xAA | 11101000111010001110100011101000
{0xE8, 0xE8, 0xE8, 0xEE}, // 0xAB | 11101000111010001110100011101110
{0xE8, 0xE8, 0xEE, 0x88}, // 0xAC | 11101000111010001110111010001000
{0xE8, 0xE8, 0xEE, 0x8E}, // 0xAD | 11101000111010001110111010001110
{0xE8, 0xE8, 0xEE, 0xE8}, // 0xAE | 11101000111010001110111011101000
{0xE8, 0xE8, 0xEE, 0xEE}, // 0xAF | 11101000111010001110111011101110
{0xE8, 0xEE, 0x88, 0x88}, // 0xB0 | 11101000111011101000100010001000
{0xE8, 0xEE, 0x88, 0x8E}, // 0xB1 | 11101000111011101000100010001110
{0xE8, 0xEE, 0x88, 0xE8}, // 0xB2 | 11101000111011101000100011101000
{0xE8, 0xEE, 0x88, 0xEE}, // 0xB3 | 11101000111011101000100011101110
{0xE8, 0xEE, 0x8E, 0x88}, // 0xB4 | 11101000111011101000111010001000
{0xE8, 0xEE, 0x8E, 0x8E}, // 0xB5 | 11101000111011101000111010001110
{0xE8, 0xEE, 0x8E, 0xE8}, // 0xB6 | 11101000111011101000111011101000
{0xE8, 0xEE, 0x8E, 0xEE}, // 0xB7 | 11101000111011101000111011101110
{0xE8, 0xEE, 0xE8, 0x88}, // 0xB8 | 11101000111011101110100010001000
{0xE8, 0xEE, 0xE8, 0x8E}, // 0xB9 | 11101000111011101110100010001110
{0xE8, 0xEE, 0xE8, 0xE8}, // 0xBA | 11101000111011101110100011101000
{0xE8, 0xEE, 0xE8, 0xEE}, // 0xBB | 11101000111011101110100011101110
{0xE8, 0xEE, 0xEE, 0x88}, // 0xBC | 11101000111011101110111010001000
{0xE8, 0xEE, 0xEE, 0x8E}, // 0xBD | 11101000111011101110111010001110
{0xE8, 0xEE, 0xEE, 0xE8}, // 0xBE | 11101000111011101110111011101000
{0xE8, 0xEE, 0xEE, 0xEE}, // 0xBF | 11101000111011101110111011101110
{0xEE, 0x88, 0x88, 0x88}, // 0xC0 | 11101110100010001000100010001000
{0xEE, 0x88, 0x88, 0x8E}, // 0xC1 | 11101110100010001000100010001110
{0xEE, 0x88, 0x88, 0xE8}, // 0xC2 | 11101110100010001000100011101000
{0xEE, 0x88, 0x88, 0xEE}, // 0xC3 | 11101110100010001000100011101110
{0xEE, 0x88, 0x8E, 0x88}, // 0xC4 | 11101110100010001000111010001000
{0xEE, 0x88, 0x8E, 0x8E}, // 0xC5 | 11101110100010001000111010001110
{0xEE, 0x88, 0x8E, 0xE8}, // 0xC6 | 11101110100010001000111011101000
{0xEE, 0x88, 0x8E, 0xEE}, // 0xC7 | 11101110100010001000111011101110
{0xEE, 0x88, 0xE8, 0x88}, // 0xC8 | 11101110100010001110100010001000
{0xEE, 0x88, 0xE8, 0x8E}, // 0xC9 | 11101110100010001110100010001110
{0xEE, 0x88, 0xE8, 0xE8}, // 0xCA | 11101110100010001110100011101000
{0xEE, 0x88, 0xE8, 0xEE}, // 0xCB | 11101110100010001110100011101110
{0xEE, 0x88, 0xEE, 0x88}, // 0xCC | 11101110100010001110111010001000
{0xEE, 0x88, 0xEE, 0x8E}, // 0xCD | 11101110100010001110111010001110
{0xEE, 0x88, 0xEE, 0xE8}, // 0xCE | 11101110100010001110111011101000
{0xEE, 0x88, 0xEE, 0xEE}, // 0xCF | 11101110100010001110111011101110
{0xEE, 0x8E, 0x88, 0x88}, // 0xD0 | 11101110100011101000100010001000
{0xEE, 0x8E, 0x88, 0x8E}, // 0xD1 | 11101110100011101000100010001110
{0xEE, 0x8E, 0x88, 0xE8}, // 0xD2 | 11101110100011101000100011101000
{0xEE, 0x8E, 0x88, 0xEE}, // 0xD3 | 11101110100011101000100011101110
{0xEE, 0x8E, 0x8E, 0x88}, // 0xD4 | 11101110100011101000111010001000
{0xEE, 0x8E, 0x8E, 0x8E}, // 0xD5 | 11101110100011101000111010001110
{0xEE, 0x8E, 0x8E, 0xE8}, // 0xD6 | 11101110100011101000111011101000
{0xEE, 0x8E, 0x8E, 0xEE}, // 0xD7 | 11101110100011101000111011101110
{0xEE, 0x8E, 0xE8, 0x88}, // 0xD8 | 11101110100011101110100010001000
{0xEE, 0x8E, 0xE8, 0x8E}, // 0xD9 | 11101110100011101110100010001110
{0xEE, 0x8E, 0xE8, 0xE8}, // 0xDA | 11101110100011101110100011101000
{0xEE, 0x8E, 0xE8, 0xEE}, // 0xDB | 11101110100011101110100011101110
{0xEE, 0x8E, 0xEE, 0x88}, // 0xDC | 11101110100011101110111010001000
{0xEE, 0x8E, 0xEE, 0x8E}, // 0xDD | 11101110100011101110111010001110
{0xEE, 0x8E, 0xEE, 0xE8}, // 0xDE | 11101110100011101110111011101000
{0xEE, 0x8E, 0xEE, 0xEE}, // 0xDF | 11101110100011101110111011101110
{0xEE, 0xE8, 0x88, 0x88}, // 0xE0 | 11101110111010001000100010001000
{0xEE, 0xE8, 0x88, 0x8E}, // 0xE1 | 11101110111010001000100010001110
{0xEE, 0xE8, 0x88, 0xE8}, // 0xE2 | 11101110111010001000100011101000
{0xEE, 0xE8, 0x88, 0xEE}, // 0xE3 | 11101110111010001000100011101110
{0xEE, 0xE8, 0x8E, 0x88}, // 0xE4 | 11101110111010001000111010001000
{0xEE, 0xE8, 0x8E, 0x8E}, // 0xE5 | 11101110111010001000111010001110
{0xEE, 0xE8, 0x8E, 0xE8}, // 0xE6 | 11101110111010001000111011101000
{0xEE, 0xE8, 0x8E, 0xEE}, // 0xE7 | 11101110111010001000111011101110
{0xEE, 0xE8, 0xE8, 0x88}, // 0xE8 | 11101110111010001110100010001000
{0xEE, 0xE8, 0xE8, 0x8E}, // 0xE9 | 11101110111010001110100010001110
{0xEE, 0xE8, 0xE8, 0xE8}, // 0xEA | 11101110111010001110100011101000
{0xEE, 0xE8, 0xE8, 0xEE}, // 0xEB | 11101110111010001110100011101110
{0xEE, 0xE8, 0xEE, 0x88}, // 0xEC | 11101110111010001110111010001000
{0xEE, 0xE8, 0xEE, 0x8E}, // 0xED | 11101110111010001110111010001110
{0xEE, 0xE8, 0xEE, 0xE8}, // 0xEE | 11101110111010001110111011101000
{0xEE, 0xE8, 0xEE, 0xEE}, // 0xEF | 11101110111010001110111011101110
{0xEE, 0xEE, 0x88, 0x88}, // 0xF0 | 11101110111011101000100010001000
{0xEE, 0xEE, 0x88, 0x8E}, // 0xF1 | 11101110111011101000100010001110
{0xEE, 0xEE, 0x88, 0xE8}, // 0xF2 | 11101110111011101000100011101000
{0xEE, 0xEE, 0x88, 0xEE}, // 0xF3 | 11101110111011101000100011101110
{0xEE, 0xEE, 0x8E, 0x88}, // 0xF4 | 11101110111011101000111010001000
{0xEE, 0xEE, 0x8E, 0x8E}, // 0xF5 | 11101110111011101000111010001110
{0xEE, 0xEE, 0x8E, 0xE8}, // 0xF6 | 11101110111011101000111011101000
{0xEE, 0xEE, 0x8E, 0xEE}, // 0xF7 | 11101110111011101000111011101110
{0xEE, 0xEE, 0xE8, 0x88}, // 0xF8 | 11101110111011101110100010001000
{0xEE, 0xEE, 0xE8, 0x8E}, // 0xF9 | 11101110111011101110100010001110
{0xEE, 0xEE, 0xE8, 0xE8}, // 0xFA | 11101110111011101110100011101000
{0xEE, 0xEE, 0xE8, 0xEE}, // 0xFB | 11101110111011101110100011101110
{0xEE, 0xEE, 0xEE, 0x88}, // 0xFC | 11101110111011101110111010001000
{0xEE, 0xEE, 0xEE, 0x8E}, // 0xFD | 11101110111011101110111010001110
{0xEE, 0xEE, 0xEE, 0xE8}, // 0xFE | 11101110111011101110111011101000
{0xEE, 0xEE, 0xEE, 0xEE}, // 0xFF | 11101110111011101110111011101110
}