Skip to main content

fax/
bitmaps.rs

1pub mod mode {
2    pub use super::*;
3    use crate::{BitReader, Bits};
4    static PREFIX_LUT_0: [Entry<Mode>; 128usize] = [
5        Entry::Value(Mode::EOF, 12u8),
6        Entry::Value(Mode::Extension, 7u8),
7        Entry::Value(Mode::Vertical(-3), 7u8),
8        Entry::Value(Mode::Vertical(3), 7u8),
9        Entry::Value(Mode::Vertical(-2), 6u8),
10        Entry::Value(Mode::Vertical(-2), 6u8),
11        Entry::Value(Mode::Vertical(2), 6u8),
12        Entry::Value(Mode::Vertical(2), 6u8),
13        Entry::Value(Mode::Pass, 4u8),
14        Entry::Value(Mode::Pass, 4u8),
15        Entry::Value(Mode::Pass, 4u8),
16        Entry::Value(Mode::Pass, 4u8),
17        Entry::Value(Mode::Pass, 4u8),
18        Entry::Value(Mode::Pass, 4u8),
19        Entry::Value(Mode::Pass, 4u8),
20        Entry::Value(Mode::Pass, 4u8),
21        Entry::Value(Mode::Horizontal, 3u8),
22        Entry::Value(Mode::Horizontal, 3u8),
23        Entry::Value(Mode::Horizontal, 3u8),
24        Entry::Value(Mode::Horizontal, 3u8),
25        Entry::Value(Mode::Horizontal, 3u8),
26        Entry::Value(Mode::Horizontal, 3u8),
27        Entry::Value(Mode::Horizontal, 3u8),
28        Entry::Value(Mode::Horizontal, 3u8),
29        Entry::Value(Mode::Horizontal, 3u8),
30        Entry::Value(Mode::Horizontal, 3u8),
31        Entry::Value(Mode::Horizontal, 3u8),
32        Entry::Value(Mode::Horizontal, 3u8),
33        Entry::Value(Mode::Horizontal, 3u8),
34        Entry::Value(Mode::Horizontal, 3u8),
35        Entry::Value(Mode::Horizontal, 3u8),
36        Entry::Value(Mode::Horizontal, 3u8),
37        Entry::Value(Mode::Vertical(-1), 3u8),
38        Entry::Value(Mode::Vertical(-1), 3u8),
39        Entry::Value(Mode::Vertical(-1), 3u8),
40        Entry::Value(Mode::Vertical(-1), 3u8),
41        Entry::Value(Mode::Vertical(-1), 3u8),
42        Entry::Value(Mode::Vertical(-1), 3u8),
43        Entry::Value(Mode::Vertical(-1), 3u8),
44        Entry::Value(Mode::Vertical(-1), 3u8),
45        Entry::Value(Mode::Vertical(-1), 3u8),
46        Entry::Value(Mode::Vertical(-1), 3u8),
47        Entry::Value(Mode::Vertical(-1), 3u8),
48        Entry::Value(Mode::Vertical(-1), 3u8),
49        Entry::Value(Mode::Vertical(-1), 3u8),
50        Entry::Value(Mode::Vertical(-1), 3u8),
51        Entry::Value(Mode::Vertical(-1), 3u8),
52        Entry::Value(Mode::Vertical(-1), 3u8),
53        Entry::Value(Mode::Vertical(1), 3u8),
54        Entry::Value(Mode::Vertical(1), 3u8),
55        Entry::Value(Mode::Vertical(1), 3u8),
56        Entry::Value(Mode::Vertical(1), 3u8),
57        Entry::Value(Mode::Vertical(1), 3u8),
58        Entry::Value(Mode::Vertical(1), 3u8),
59        Entry::Value(Mode::Vertical(1), 3u8),
60        Entry::Value(Mode::Vertical(1), 3u8),
61        Entry::Value(Mode::Vertical(1), 3u8),
62        Entry::Value(Mode::Vertical(1), 3u8),
63        Entry::Value(Mode::Vertical(1), 3u8),
64        Entry::Value(Mode::Vertical(1), 3u8),
65        Entry::Value(Mode::Vertical(1), 3u8),
66        Entry::Value(Mode::Vertical(1), 3u8),
67        Entry::Value(Mode::Vertical(1), 3u8),
68        Entry::Value(Mode::Vertical(1), 3u8),
69        Entry::Value(Mode::Vertical(0), 1u8),
70        Entry::Value(Mode::Vertical(0), 1u8),
71        Entry::Value(Mode::Vertical(0), 1u8),
72        Entry::Value(Mode::Vertical(0), 1u8),
73        Entry::Value(Mode::Vertical(0), 1u8),
74        Entry::Value(Mode::Vertical(0), 1u8),
75        Entry::Value(Mode::Vertical(0), 1u8),
76        Entry::Value(Mode::Vertical(0), 1u8),
77        Entry::Value(Mode::Vertical(0), 1u8),
78        Entry::Value(Mode::Vertical(0), 1u8),
79        Entry::Value(Mode::Vertical(0), 1u8),
80        Entry::Value(Mode::Vertical(0), 1u8),
81        Entry::Value(Mode::Vertical(0), 1u8),
82        Entry::Value(Mode::Vertical(0), 1u8),
83        Entry::Value(Mode::Vertical(0), 1u8),
84        Entry::Value(Mode::Vertical(0), 1u8),
85        Entry::Value(Mode::Vertical(0), 1u8),
86        Entry::Value(Mode::Vertical(0), 1u8),
87        Entry::Value(Mode::Vertical(0), 1u8),
88        Entry::Value(Mode::Vertical(0), 1u8),
89        Entry::Value(Mode::Vertical(0), 1u8),
90        Entry::Value(Mode::Vertical(0), 1u8),
91        Entry::Value(Mode::Vertical(0), 1u8),
92        Entry::Value(Mode::Vertical(0), 1u8),
93        Entry::Value(Mode::Vertical(0), 1u8),
94        Entry::Value(Mode::Vertical(0), 1u8),
95        Entry::Value(Mode::Vertical(0), 1u8),
96        Entry::Value(Mode::Vertical(0), 1u8),
97        Entry::Value(Mode::Vertical(0), 1u8),
98        Entry::Value(Mode::Vertical(0), 1u8),
99        Entry::Value(Mode::Vertical(0), 1u8),
100        Entry::Value(Mode::Vertical(0), 1u8),
101        Entry::Value(Mode::Vertical(0), 1u8),
102        Entry::Value(Mode::Vertical(0), 1u8),
103        Entry::Value(Mode::Vertical(0), 1u8),
104        Entry::Value(Mode::Vertical(0), 1u8),
105        Entry::Value(Mode::Vertical(0), 1u8),
106        Entry::Value(Mode::Vertical(0), 1u8),
107        Entry::Value(Mode::Vertical(0), 1u8),
108        Entry::Value(Mode::Vertical(0), 1u8),
109        Entry::Value(Mode::Vertical(0), 1u8),
110        Entry::Value(Mode::Vertical(0), 1u8),
111        Entry::Value(Mode::Vertical(0), 1u8),
112        Entry::Value(Mode::Vertical(0), 1u8),
113        Entry::Value(Mode::Vertical(0), 1u8),
114        Entry::Value(Mode::Vertical(0), 1u8),
115        Entry::Value(Mode::Vertical(0), 1u8),
116        Entry::Value(Mode::Vertical(0), 1u8),
117        Entry::Value(Mode::Vertical(0), 1u8),
118        Entry::Value(Mode::Vertical(0), 1u8),
119        Entry::Value(Mode::Vertical(0), 1u8),
120        Entry::Value(Mode::Vertical(0), 1u8),
121        Entry::Value(Mode::Vertical(0), 1u8),
122        Entry::Value(Mode::Vertical(0), 1u8),
123        Entry::Value(Mode::Vertical(0), 1u8),
124        Entry::Value(Mode::Vertical(0), 1u8),
125        Entry::Value(Mode::Vertical(0), 1u8),
126        Entry::Value(Mode::Vertical(0), 1u8),
127        Entry::Value(Mode::Vertical(0), 1u8),
128        Entry::Value(Mode::Vertical(0), 1u8),
129        Entry::Value(Mode::Vertical(0), 1u8),
130        Entry::Value(Mode::Vertical(0), 1u8),
131        Entry::Value(Mode::Vertical(0), 1u8),
132        Entry::Value(Mode::Vertical(0), 1u8),
133    ];
134    pub fn decode(reader: &mut impl BitReader) -> Option<Mode> {
135        let root = Entry::Prefix(7u8, &PREFIX_LUT_0);
136        root.find(reader)
137    }
138    pub fn encode(val: Mode) -> Option<Bits> {
139        let bits = match val {
140            Mode::Pass => Bits { data: 1u16, len: 4u8 },
141            Mode::Horizontal => Bits { data: 1u16, len: 3u8 },
142            Mode::Vertical(0) => Bits { data: 1u16, len: 1u8 },
143            Mode::Vertical(1) => Bits { data: 3u16, len: 3u8 },
144            Mode::Vertical(2) => Bits { data: 3u16, len: 6u8 },
145            Mode::Vertical(3) => Bits { data: 3u16, len: 7u8 },
146            Mode::Vertical(-1) => Bits { data: 2u16, len: 3u8 },
147            Mode::Vertical(-2) => Bits { data: 2u16, len: 6u8 },
148            Mode::Vertical(-3) => Bits { data: 2u16, len: 7u8 },
149            Mode::Extension => Bits { data: 1u16, len: 7u8 },
150            Mode::EOF => Bits { data: 1u16, len: 12u8 },
151            _ => return None,
152        };
153        Some(bits)
154    }
155    pub static ENTRIES: [(Mode, Bits); 11usize] = [
156        (Mode::Pass, Bits { data: 1u16, len: 4u8 }),
157        (Mode::Horizontal, Bits { data: 1u16, len: 3u8 }),
158        (Mode::Vertical(0), Bits { data: 1u16, len: 1u8 }),
159        (Mode::Vertical(1), Bits { data: 3u16, len: 3u8 }),
160        (Mode::Vertical(2), Bits { data: 3u16, len: 6u8 }),
161        (Mode::Vertical(3), Bits { data: 3u16, len: 7u8 }),
162        (Mode::Vertical(-1), Bits { data: 2u16, len: 3u8 }),
163        (Mode::Vertical(-2), Bits { data: 2u16, len: 6u8 }),
164        (Mode::Vertical(-3), Bits { data: 2u16, len: 7u8 }),
165        (Mode::Extension, Bits { data: 1u16, len: 7u8 }),
166        (Mode::EOF, Bits { data: 1u16, len: 12u8 }),
167    ];
168}
169pub mod black {
170    pub use super::*;
171    use crate::{BitReader, Bits};
172    static LEAF_LUT_00000: [Option<(u16, u8)>; 256usize] = [
173        None,
174        None,
175        None,
176        None,
177        None,
178        None,
179        None,
180        None,
181        None,
182        None,
183        None,
184        None,
185        None,
186        None,
187        None,
188        None,
189        None,
190        None,
191        None,
192        None,
193        None,
194        None,
195        None,
196        None,
197        None,
198        None,
199        None,
200        None,
201        None,
202        None,
203        None,
204        None,
205        Some((1792, 6u8)),
206        Some((1792, 6u8)),
207        Some((1792, 6u8)),
208        Some((1792, 6u8)),
209        Some((1984, 7u8)),
210        Some((1984, 7u8)),
211        Some((2048, 7u8)),
212        Some((2048, 7u8)),
213        Some((2112, 7u8)),
214        Some((2112, 7u8)),
215        Some((2176, 7u8)),
216        Some((2176, 7u8)),
217        Some((2240, 7u8)),
218        Some((2240, 7u8)),
219        Some((2304, 7u8)),
220        Some((2304, 7u8)),
221        Some((1856, 6u8)),
222        Some((1856, 6u8)),
223        Some((1856, 6u8)),
224        Some((1856, 6u8)),
225        Some((1920, 6u8)),
226        Some((1920, 6u8)),
227        Some((1920, 6u8)),
228        Some((1920, 6u8)),
229        Some((2368, 7u8)),
230        Some((2368, 7u8)),
231        Some((2432, 7u8)),
232        Some((2432, 7u8)),
233        Some((2496, 7u8)),
234        Some((2496, 7u8)),
235        Some((2560, 7u8)),
236        Some((2560, 7u8)),
237        Some((18, 5u8)),
238        Some((18, 5u8)),
239        Some((18, 5u8)),
240        Some((18, 5u8)),
241        Some((18, 5u8)),
242        Some((18, 5u8)),
243        Some((18, 5u8)),
244        Some((18, 5u8)),
245        Some((52, 7u8)),
246        Some((52, 7u8)),
247        Some((640, 8u8)),
248        Some((704, 8u8)),
249        Some((768, 8u8)),
250        Some((832, 8u8)),
251        Some((55, 7u8)),
252        Some((55, 7u8)),
253        Some((56, 7u8)),
254        Some((56, 7u8)),
255        Some((1280, 8u8)),
256        Some((1344, 8u8)),
257        Some((1408, 8u8)),
258        Some((1472, 8u8)),
259        Some((59, 7u8)),
260        Some((59, 7u8)),
261        Some((60, 7u8)),
262        Some((60, 7u8)),
263        Some((1536, 8u8)),
264        Some((1600, 8u8)),
265        Some((24, 6u8)),
266        Some((24, 6u8)),
267        Some((24, 6u8)),
268        Some((24, 6u8)),
269        Some((25, 6u8)),
270        Some((25, 6u8)),
271        Some((25, 6u8)),
272        Some((25, 6u8)),
273        Some((1664, 8u8)),
274        Some((1728, 8u8)),
275        Some((320, 7u8)),
276        Some((320, 7u8)),
277        Some((384, 7u8)),
278        Some((384, 7u8)),
279        Some((448, 7u8)),
280        Some((448, 7u8)),
281        Some((512, 8u8)),
282        Some((576, 8u8)),
283        Some((53, 7u8)),
284        Some((53, 7u8)),
285        Some((54, 7u8)),
286        Some((54, 7u8)),
287        Some((896, 8u8)),
288        Some((960, 8u8)),
289        Some((1024, 8u8)),
290        Some((1088, 8u8)),
291        Some((1152, 8u8)),
292        Some((1216, 8u8)),
293        Some((64, 5u8)),
294        Some((64, 5u8)),
295        Some((64, 5u8)),
296        Some((64, 5u8)),
297        Some((64, 5u8)),
298        Some((64, 5u8)),
299        Some((64, 5u8)),
300        Some((64, 5u8)),
301        Some((13, 3u8)),
302        Some((13, 3u8)),
303        Some((13, 3u8)),
304        Some((13, 3u8)),
305        Some((13, 3u8)),
306        Some((13, 3u8)),
307        Some((13, 3u8)),
308        Some((13, 3u8)),
309        Some((13, 3u8)),
310        Some((13, 3u8)),
311        Some((13, 3u8)),
312        Some((13, 3u8)),
313        Some((13, 3u8)),
314        Some((13, 3u8)),
315        Some((13, 3u8)),
316        Some((13, 3u8)),
317        Some((13, 3u8)),
318        Some((13, 3u8)),
319        Some((13, 3u8)),
320        Some((13, 3u8)),
321        Some((13, 3u8)),
322        Some((13, 3u8)),
323        Some((13, 3u8)),
324        Some((13, 3u8)),
325        Some((13, 3u8)),
326        Some((13, 3u8)),
327        Some((13, 3u8)),
328        Some((13, 3u8)),
329        Some((13, 3u8)),
330        Some((13, 3u8)),
331        Some((13, 3u8)),
332        Some((13, 3u8)),
333        Some((23, 6u8)),
334        Some((23, 6u8)),
335        Some((23, 6u8)),
336        Some((23, 6u8)),
337        Some((50, 7u8)),
338        Some((50, 7u8)),
339        Some((51, 7u8)),
340        Some((51, 7u8)),
341        Some((44, 7u8)),
342        Some((44, 7u8)),
343        Some((45, 7u8)),
344        Some((45, 7u8)),
345        Some((46, 7u8)),
346        Some((46, 7u8)),
347        Some((47, 7u8)),
348        Some((47, 7u8)),
349        Some((57, 7u8)),
350        Some((57, 7u8)),
351        Some((58, 7u8)),
352        Some((58, 7u8)),
353        Some((61, 7u8)),
354        Some((61, 7u8)),
355        Some((256, 7u8)),
356        Some((256, 7u8)),
357        Some((16, 5u8)),
358        Some((16, 5u8)),
359        Some((16, 5u8)),
360        Some((16, 5u8)),
361        Some((16, 5u8)),
362        Some((16, 5u8)),
363        Some((16, 5u8)),
364        Some((16, 5u8)),
365        Some((17, 5u8)),
366        Some((17, 5u8)),
367        Some((17, 5u8)),
368        Some((17, 5u8)),
369        Some((17, 5u8)),
370        Some((17, 5u8)),
371        Some((17, 5u8)),
372        Some((17, 5u8)),
373        Some((48, 7u8)),
374        Some((48, 7u8)),
375        Some((49, 7u8)),
376        Some((49, 7u8)),
377        Some((62, 7u8)),
378        Some((62, 7u8)),
379        Some((63, 7u8)),
380        Some((63, 7u8)),
381        Some((30, 7u8)),
382        Some((30, 7u8)),
383        Some((31, 7u8)),
384        Some((31, 7u8)),
385        Some((32, 7u8)),
386        Some((32, 7u8)),
387        Some((33, 7u8)),
388        Some((33, 7u8)),
389        Some((40, 7u8)),
390        Some((40, 7u8)),
391        Some((41, 7u8)),
392        Some((41, 7u8)),
393        Some((22, 6u8)),
394        Some((22, 6u8)),
395        Some((22, 6u8)),
396        Some((22, 6u8)),
397        Some((14, 3u8)),
398        Some((14, 3u8)),
399        Some((14, 3u8)),
400        Some((14, 3u8)),
401        Some((14, 3u8)),
402        Some((14, 3u8)),
403        Some((14, 3u8)),
404        Some((14, 3u8)),
405        Some((14, 3u8)),
406        Some((14, 3u8)),
407        Some((14, 3u8)),
408        Some((14, 3u8)),
409        Some((14, 3u8)),
410        Some((14, 3u8)),
411        Some((14, 3u8)),
412        Some((14, 3u8)),
413        Some((14, 3u8)),
414        Some((14, 3u8)),
415        Some((14, 3u8)),
416        Some((14, 3u8)),
417        Some((14, 3u8)),
418        Some((14, 3u8)),
419        Some((14, 3u8)),
420        Some((14, 3u8)),
421        Some((14, 3u8)),
422        Some((14, 3u8)),
423        Some((14, 3u8)),
424        Some((14, 3u8)),
425        Some((14, 3u8)),
426        Some((14, 3u8)),
427        Some((14, 3u8)),
428        Some((14, 3u8)),
429    ];
430    static LEAF_LUT_00001: [Option<(u16, u8)>; 128usize] = [
431        Some((10, 2u8)),
432        Some((10, 2u8)),
433        Some((10, 2u8)),
434        Some((10, 2u8)),
435        Some((10, 2u8)),
436        Some((10, 2u8)),
437        Some((10, 2u8)),
438        Some((10, 2u8)),
439        Some((10, 2u8)),
440        Some((10, 2u8)),
441        Some((10, 2u8)),
442        Some((10, 2u8)),
443        Some((10, 2u8)),
444        Some((10, 2u8)),
445        Some((10, 2u8)),
446        Some((10, 2u8)),
447        Some((10, 2u8)),
448        Some((10, 2u8)),
449        Some((10, 2u8)),
450        Some((10, 2u8)),
451        Some((10, 2u8)),
452        Some((10, 2u8)),
453        Some((10, 2u8)),
454        Some((10, 2u8)),
455        Some((10, 2u8)),
456        Some((10, 2u8)),
457        Some((10, 2u8)),
458        Some((10, 2u8)),
459        Some((10, 2u8)),
460        Some((10, 2u8)),
461        Some((10, 2u8)),
462        Some((10, 2u8)),
463        Some((11, 2u8)),
464        Some((11, 2u8)),
465        Some((11, 2u8)),
466        Some((11, 2u8)),
467        Some((11, 2u8)),
468        Some((11, 2u8)),
469        Some((11, 2u8)),
470        Some((11, 2u8)),
471        Some((11, 2u8)),
472        Some((11, 2u8)),
473        Some((11, 2u8)),
474        Some((11, 2u8)),
475        Some((11, 2u8)),
476        Some((11, 2u8)),
477        Some((11, 2u8)),
478        Some((11, 2u8)),
479        Some((11, 2u8)),
480        Some((11, 2u8)),
481        Some((11, 2u8)),
482        Some((11, 2u8)),
483        Some((11, 2u8)),
484        Some((11, 2u8)),
485        Some((11, 2u8)),
486        Some((11, 2u8)),
487        Some((11, 2u8)),
488        Some((11, 2u8)),
489        Some((11, 2u8)),
490        Some((11, 2u8)),
491        Some((11, 2u8)),
492        Some((11, 2u8)),
493        Some((11, 2u8)),
494        Some((11, 2u8)),
495        Some((15, 4u8)),
496        Some((15, 4u8)),
497        Some((15, 4u8)),
498        Some((15, 4u8)),
499        Some((15, 4u8)),
500        Some((15, 4u8)),
501        Some((15, 4u8)),
502        Some((15, 4u8)),
503        Some((128, 7u8)),
504        Some((192, 7u8)),
505        Some((26, 7u8)),
506        Some((27, 7u8)),
507        Some((28, 7u8)),
508        Some((29, 7u8)),
509        Some((19, 6u8)),
510        Some((19, 6u8)),
511        Some((20, 6u8)),
512        Some((20, 6u8)),
513        Some((34, 7u8)),
514        Some((35, 7u8)),
515        Some((36, 7u8)),
516        Some((37, 7u8)),
517        Some((38, 7u8)),
518        Some((39, 7u8)),
519        Some((21, 6u8)),
520        Some((21, 6u8)),
521        Some((42, 7u8)),
522        Some((43, 7u8)),
523        Some((0, 5u8)),
524        Some((0, 5u8)),
525        Some((0, 5u8)),
526        Some((0, 5u8)),
527        Some((12, 2u8)),
528        Some((12, 2u8)),
529        Some((12, 2u8)),
530        Some((12, 2u8)),
531        Some((12, 2u8)),
532        Some((12, 2u8)),
533        Some((12, 2u8)),
534        Some((12, 2u8)),
535        Some((12, 2u8)),
536        Some((12, 2u8)),
537        Some((12, 2u8)),
538        Some((12, 2u8)),
539        Some((12, 2u8)),
540        Some((12, 2u8)),
541        Some((12, 2u8)),
542        Some((12, 2u8)),
543        Some((12, 2u8)),
544        Some((12, 2u8)),
545        Some((12, 2u8)),
546        Some((12, 2u8)),
547        Some((12, 2u8)),
548        Some((12, 2u8)),
549        Some((12, 2u8)),
550        Some((12, 2u8)),
551        Some((12, 2u8)),
552        Some((12, 2u8)),
553        Some((12, 2u8)),
554        Some((12, 2u8)),
555        Some((12, 2u8)),
556        Some((12, 2u8)),
557        Some((12, 2u8)),
558        Some((12, 2u8)),
559    ];
560    static LEAF_LUT_00010: [Option<(u16, u8)>; 2usize] = [Some((9, 1u8)), Some((8, 1u8))];
561    static PREFIX_LUT_0: [Entry<u16>; 32usize] = [
562        Entry::Leaf(8u8, &LEAF_LUT_00000),
563        Entry::Leaf(7u8, &LEAF_LUT_00001),
564        Entry::Leaf(1u8, &LEAF_LUT_00010),
565        Entry::Value(7, 5u8),
566        Entry::Value(6, 4u8),
567        Entry::Value(6, 4u8),
568        Entry::Value(5, 4u8),
569        Entry::Value(5, 4u8),
570        Entry::Value(1, 3u8),
571        Entry::Value(1, 3u8),
572        Entry::Value(1, 3u8),
573        Entry::Value(1, 3u8),
574        Entry::Value(4, 3u8),
575        Entry::Value(4, 3u8),
576        Entry::Value(4, 3u8),
577        Entry::Value(4, 3u8),
578        Entry::Value(3, 2u8),
579        Entry::Value(3, 2u8),
580        Entry::Value(3, 2u8),
581        Entry::Value(3, 2u8),
582        Entry::Value(3, 2u8),
583        Entry::Value(3, 2u8),
584        Entry::Value(3, 2u8),
585        Entry::Value(3, 2u8),
586        Entry::Value(2, 2u8),
587        Entry::Value(2, 2u8),
588        Entry::Value(2, 2u8),
589        Entry::Value(2, 2u8),
590        Entry::Value(2, 2u8),
591        Entry::Value(2, 2u8),
592        Entry::Value(2, 2u8),
593        Entry::Value(2, 2u8),
594    ];
595    pub fn decode(reader: &mut impl BitReader) -> Option<u16> {
596        let root = Entry::Prefix(5u8, &PREFIX_LUT_0);
597        root.find(reader)
598    }
599    pub fn encode(val: u16) -> Option<Bits> {
600        let bits = match val {
601            0 => Bits { data: 55u16, len: 10u8 },
602            1 => Bits { data: 2u16, len: 3u8 },
603            2 => Bits { data: 3u16, len: 2u8 },
604            3 => Bits { data: 2u16, len: 2u8 },
605            4 => Bits { data: 3u16, len: 3u8 },
606            5 => Bits { data: 3u16, len: 4u8 },
607            6 => Bits { data: 2u16, len: 4u8 },
608            7 => Bits { data: 3u16, len: 5u8 },
609            8 => Bits { data: 5u16, len: 6u8 },
610            9 => Bits { data: 4u16, len: 6u8 },
611            10 => Bits { data: 4u16, len: 7u8 },
612            11 => Bits { data: 5u16, len: 7u8 },
613            12 => Bits { data: 7u16, len: 7u8 },
614            13 => Bits { data: 4u16, len: 8u8 },
615            14 => Bits { data: 7u16, len: 8u8 },
616            15 => Bits { data: 24u16, len: 9u8 },
617            16 => Bits { data: 23u16, len: 10u8 },
618            17 => Bits { data: 24u16, len: 10u8 },
619            18 => Bits { data: 8u16, len: 10u8 },
620            19 => Bits { data: 103u16, len: 11u8 },
621            20 => Bits { data: 104u16, len: 11u8 },
622            21 => Bits { data: 108u16, len: 11u8 },
623            22 => Bits { data: 55u16, len: 11u8 },
624            23 => Bits { data: 40u16, len: 11u8 },
625            24 => Bits { data: 23u16, len: 11u8 },
626            25 => Bits { data: 24u16, len: 11u8 },
627            26 => Bits { data: 202u16, len: 12u8 },
628            27 => Bits { data: 203u16, len: 12u8 },
629            28 => Bits { data: 204u16, len: 12u8 },
630            29 => Bits { data: 205u16, len: 12u8 },
631            30 => Bits { data: 104u16, len: 12u8 },
632            31 => Bits { data: 105u16, len: 12u8 },
633            32 => Bits { data: 106u16, len: 12u8 },
634            33 => Bits { data: 107u16, len: 12u8 },
635            34 => Bits { data: 210u16, len: 12u8 },
636            35 => Bits { data: 211u16, len: 12u8 },
637            36 => Bits { data: 212u16, len: 12u8 },
638            37 => Bits { data: 213u16, len: 12u8 },
639            38 => Bits { data: 214u16, len: 12u8 },
640            39 => Bits { data: 215u16, len: 12u8 },
641            40 => Bits { data: 108u16, len: 12u8 },
642            41 => Bits { data: 109u16, len: 12u8 },
643            42 => Bits { data: 218u16, len: 12u8 },
644            43 => Bits { data: 219u16, len: 12u8 },
645            44 => Bits { data: 84u16, len: 12u8 },
646            45 => Bits { data: 85u16, len: 12u8 },
647            46 => Bits { data: 86u16, len: 12u8 },
648            47 => Bits { data: 87u16, len: 12u8 },
649            48 => Bits { data: 100u16, len: 12u8 },
650            49 => Bits { data: 101u16, len: 12u8 },
651            50 => Bits { data: 82u16, len: 12u8 },
652            51 => Bits { data: 83u16, len: 12u8 },
653            52 => Bits { data: 36u16, len: 12u8 },
654            53 => Bits { data: 55u16, len: 12u8 },
655            54 => Bits { data: 56u16, len: 12u8 },
656            55 => Bits { data: 39u16, len: 12u8 },
657            56 => Bits { data: 40u16, len: 12u8 },
658            57 => Bits { data: 88u16, len: 12u8 },
659            58 => Bits { data: 89u16, len: 12u8 },
660            59 => Bits { data: 43u16, len: 12u8 },
661            60 => Bits { data: 44u16, len: 12u8 },
662            61 => Bits { data: 90u16, len: 12u8 },
663            62 => Bits { data: 102u16, len: 12u8 },
664            63 => Bits { data: 103u16, len: 12u8 },
665            64 => Bits { data: 15u16, len: 10u8 },
666            128 => Bits { data: 200u16, len: 12u8 },
667            192 => Bits { data: 201u16, len: 12u8 },
668            256 => Bits { data: 91u16, len: 12u8 },
669            320 => Bits { data: 51u16, len: 12u8 },
670            384 => Bits { data: 52u16, len: 12u8 },
671            448 => Bits { data: 53u16, len: 12u8 },
672            512 => Bits { data: 108u16, len: 13u8 },
673            576 => Bits { data: 109u16, len: 13u8 },
674            640 => Bits { data: 74u16, len: 13u8 },
675            704 => Bits { data: 75u16, len: 13u8 },
676            768 => Bits { data: 76u16, len: 13u8 },
677            832 => Bits { data: 77u16, len: 13u8 },
678            896 => Bits { data: 114u16, len: 13u8 },
679            960 => Bits { data: 115u16, len: 13u8 },
680            1024 => Bits { data: 116u16, len: 13u8 },
681            1088 => Bits { data: 117u16, len: 13u8 },
682            1152 => Bits { data: 118u16, len: 13u8 },
683            1216 => Bits { data: 119u16, len: 13u8 },
684            1280 => Bits { data: 82u16, len: 13u8 },
685            1344 => Bits { data: 83u16, len: 13u8 },
686            1408 => Bits { data: 84u16, len: 13u8 },
687            1472 => Bits { data: 85u16, len: 13u8 },
688            1536 => Bits { data: 90u16, len: 13u8 },
689            1600 => Bits { data: 91u16, len: 13u8 },
690            1664 => Bits { data: 100u16, len: 13u8 },
691            1728 => Bits { data: 101u16, len: 13u8 },
692            1792 => Bits { data: 8u16, len: 11u8 },
693            1856 => Bits { data: 12u16, len: 11u8 },
694            1920 => Bits { data: 13u16, len: 11u8 },
695            1984 => Bits { data: 18u16, len: 12u8 },
696            2048 => Bits { data: 19u16, len: 12u8 },
697            2112 => Bits { data: 20u16, len: 12u8 },
698            2176 => Bits { data: 21u16, len: 12u8 },
699            2240 => Bits { data: 22u16, len: 12u8 },
700            2304 => Bits { data: 23u16, len: 12u8 },
701            2368 => Bits { data: 28u16, len: 12u8 },
702            2432 => Bits { data: 29u16, len: 12u8 },
703            2496 => Bits { data: 30u16, len: 12u8 },
704            2560 => Bits { data: 31u16, len: 12u8 },
705            _ => return None,
706        };
707        Some(bits)
708    }
709    pub static ENTRIES: [(u16, Bits); 104usize] = [
710        (0, Bits { data: 55u16, len: 10u8 }),
711        (1, Bits { data: 2u16, len: 3u8 }),
712        (2, Bits { data: 3u16, len: 2u8 }),
713        (3, Bits { data: 2u16, len: 2u8 }),
714        (4, Bits { data: 3u16, len: 3u8 }),
715        (5, Bits { data: 3u16, len: 4u8 }),
716        (6, Bits { data: 2u16, len: 4u8 }),
717        (7, Bits { data: 3u16, len: 5u8 }),
718        (8, Bits { data: 5u16, len: 6u8 }),
719        (9, Bits { data: 4u16, len: 6u8 }),
720        (10, Bits { data: 4u16, len: 7u8 }),
721        (11, Bits { data: 5u16, len: 7u8 }),
722        (12, Bits { data: 7u16, len: 7u8 }),
723        (13, Bits { data: 4u16, len: 8u8 }),
724        (14, Bits { data: 7u16, len: 8u8 }),
725        (15, Bits { data: 24u16, len: 9u8 }),
726        (16, Bits { data: 23u16, len: 10u8 }),
727        (17, Bits { data: 24u16, len: 10u8 }),
728        (18, Bits { data: 8u16, len: 10u8 }),
729        (19, Bits { data: 103u16, len: 11u8 }),
730        (20, Bits { data: 104u16, len: 11u8 }),
731        (21, Bits { data: 108u16, len: 11u8 }),
732        (22, Bits { data: 55u16, len: 11u8 }),
733        (23, Bits { data: 40u16, len: 11u8 }),
734        (24, Bits { data: 23u16, len: 11u8 }),
735        (25, Bits { data: 24u16, len: 11u8 }),
736        (26, Bits { data: 202u16, len: 12u8 }),
737        (27, Bits { data: 203u16, len: 12u8 }),
738        (28, Bits { data: 204u16, len: 12u8 }),
739        (29, Bits { data: 205u16, len: 12u8 }),
740        (30, Bits { data: 104u16, len: 12u8 }),
741        (31, Bits { data: 105u16, len: 12u8 }),
742        (32, Bits { data: 106u16, len: 12u8 }),
743        (33, Bits { data: 107u16, len: 12u8 }),
744        (34, Bits { data: 210u16, len: 12u8 }),
745        (35, Bits { data: 211u16, len: 12u8 }),
746        (36, Bits { data: 212u16, len: 12u8 }),
747        (37, Bits { data: 213u16, len: 12u8 }),
748        (38, Bits { data: 214u16, len: 12u8 }),
749        (39, Bits { data: 215u16, len: 12u8 }),
750        (40, Bits { data: 108u16, len: 12u8 }),
751        (41, Bits { data: 109u16, len: 12u8 }),
752        (42, Bits { data: 218u16, len: 12u8 }),
753        (43, Bits { data: 219u16, len: 12u8 }),
754        (44, Bits { data: 84u16, len: 12u8 }),
755        (45, Bits { data: 85u16, len: 12u8 }),
756        (46, Bits { data: 86u16, len: 12u8 }),
757        (47, Bits { data: 87u16, len: 12u8 }),
758        (48, Bits { data: 100u16, len: 12u8 }),
759        (49, Bits { data: 101u16, len: 12u8 }),
760        (50, Bits { data: 82u16, len: 12u8 }),
761        (51, Bits { data: 83u16, len: 12u8 }),
762        (52, Bits { data: 36u16, len: 12u8 }),
763        (53, Bits { data: 55u16, len: 12u8 }),
764        (54, Bits { data: 56u16, len: 12u8 }),
765        (55, Bits { data: 39u16, len: 12u8 }),
766        (56, Bits { data: 40u16, len: 12u8 }),
767        (57, Bits { data: 88u16, len: 12u8 }),
768        (58, Bits { data: 89u16, len: 12u8 }),
769        (59, Bits { data: 43u16, len: 12u8 }),
770        (60, Bits { data: 44u16, len: 12u8 }),
771        (61, Bits { data: 90u16, len: 12u8 }),
772        (62, Bits { data: 102u16, len: 12u8 }),
773        (63, Bits { data: 103u16, len: 12u8 }),
774        (64, Bits { data: 15u16, len: 10u8 }),
775        (128, Bits { data: 200u16, len: 12u8 }),
776        (192, Bits { data: 201u16, len: 12u8 }),
777        (256, Bits { data: 91u16, len: 12u8 }),
778        (320, Bits { data: 51u16, len: 12u8 }),
779        (384, Bits { data: 52u16, len: 12u8 }),
780        (448, Bits { data: 53u16, len: 12u8 }),
781        (512, Bits { data: 108u16, len: 13u8 }),
782        (576, Bits { data: 109u16, len: 13u8 }),
783        (640, Bits { data: 74u16, len: 13u8 }),
784        (704, Bits { data: 75u16, len: 13u8 }),
785        (768, Bits { data: 76u16, len: 13u8 }),
786        (832, Bits { data: 77u16, len: 13u8 }),
787        (896, Bits { data: 114u16, len: 13u8 }),
788        (960, Bits { data: 115u16, len: 13u8 }),
789        (1024, Bits { data: 116u16, len: 13u8 }),
790        (1088, Bits { data: 117u16, len: 13u8 }),
791        (1152, Bits { data: 118u16, len: 13u8 }),
792        (1216, Bits { data: 119u16, len: 13u8 }),
793        (1280, Bits { data: 82u16, len: 13u8 }),
794        (1344, Bits { data: 83u16, len: 13u8 }),
795        (1408, Bits { data: 84u16, len: 13u8 }),
796        (1472, Bits { data: 85u16, len: 13u8 }),
797        (1536, Bits { data: 90u16, len: 13u8 }),
798        (1600, Bits { data: 91u16, len: 13u8 }),
799        (1664, Bits { data: 100u16, len: 13u8 }),
800        (1728, Bits { data: 101u16, len: 13u8 }),
801        (1792, Bits { data: 8u16, len: 11u8 }),
802        (1856, Bits { data: 12u16, len: 11u8 }),
803        (1920, Bits { data: 13u16, len: 11u8 }),
804        (1984, Bits { data: 18u16, len: 12u8 }),
805        (2048, Bits { data: 19u16, len: 12u8 }),
806        (2112, Bits { data: 20u16, len: 12u8 }),
807        (2176, Bits { data: 21u16, len: 12u8 }),
808        (2240, Bits { data: 22u16, len: 12u8 }),
809        (2304, Bits { data: 23u16, len: 12u8 }),
810        (2368, Bits { data: 28u16, len: 12u8 }),
811        (2432, Bits { data: 29u16, len: 12u8 }),
812        (2496, Bits { data: 30u16, len: 12u8 }),
813        (2560, Bits { data: 31u16, len: 12u8 }),
814    ];
815}
816pub mod white {
817    pub use super::*;
818    use crate::{BitReader, Bits};
819    static LEAF_LUT_0000: [Option<(u16, u8)>; 256usize] = [
820        None,
821        None,
822        None,
823        None,
824        None,
825        None,
826        None,
827        None,
828        None,
829        None,
830        None,
831        None,
832        None,
833        None,
834        None,
835        None,
836        Some((1792, 7u8)),
837        Some((1792, 7u8)),
838        Some((1984, 8u8)),
839        Some((2048, 8u8)),
840        Some((2112, 8u8)),
841        Some((2176, 8u8)),
842        Some((2240, 8u8)),
843        Some((2304, 8u8)),
844        Some((1856, 7u8)),
845        Some((1856, 7u8)),
846        Some((1920, 7u8)),
847        Some((1920, 7u8)),
848        Some((2368, 8u8)),
849        Some((2432, 8u8)),
850        Some((2496, 8u8)),
851        Some((2560, 8u8)),
852        Some((29, 4u8)),
853        Some((29, 4u8)),
854        Some((29, 4u8)),
855        Some((29, 4u8)),
856        Some((29, 4u8)),
857        Some((29, 4u8)),
858        Some((29, 4u8)),
859        Some((29, 4u8)),
860        Some((29, 4u8)),
861        Some((29, 4u8)),
862        Some((29, 4u8)),
863        Some((29, 4u8)),
864        Some((29, 4u8)),
865        Some((29, 4u8)),
866        Some((29, 4u8)),
867        Some((29, 4u8)),
868        Some((30, 4u8)),
869        Some((30, 4u8)),
870        Some((30, 4u8)),
871        Some((30, 4u8)),
872        Some((30, 4u8)),
873        Some((30, 4u8)),
874        Some((30, 4u8)),
875        Some((30, 4u8)),
876        Some((30, 4u8)),
877        Some((30, 4u8)),
878        Some((30, 4u8)),
879        Some((30, 4u8)),
880        Some((30, 4u8)),
881        Some((30, 4u8)),
882        Some((30, 4u8)),
883        Some((30, 4u8)),
884        Some((45, 4u8)),
885        Some((45, 4u8)),
886        Some((45, 4u8)),
887        Some((45, 4u8)),
888        Some((45, 4u8)),
889        Some((45, 4u8)),
890        Some((45, 4u8)),
891        Some((45, 4u8)),
892        Some((45, 4u8)),
893        Some((45, 4u8)),
894        Some((45, 4u8)),
895        Some((45, 4u8)),
896        Some((45, 4u8)),
897        Some((45, 4u8)),
898        Some((45, 4u8)),
899        Some((45, 4u8)),
900        Some((46, 4u8)),
901        Some((46, 4u8)),
902        Some((46, 4u8)),
903        Some((46, 4u8)),
904        Some((46, 4u8)),
905        Some((46, 4u8)),
906        Some((46, 4u8)),
907        Some((46, 4u8)),
908        Some((46, 4u8)),
909        Some((46, 4u8)),
910        Some((46, 4u8)),
911        Some((46, 4u8)),
912        Some((46, 4u8)),
913        Some((46, 4u8)),
914        Some((46, 4u8)),
915        Some((46, 4u8)),
916        Some((22, 3u8)),
917        Some((22, 3u8)),
918        Some((22, 3u8)),
919        Some((22, 3u8)),
920        Some((22, 3u8)),
921        Some((22, 3u8)),
922        Some((22, 3u8)),
923        Some((22, 3u8)),
924        Some((22, 3u8)),
925        Some((22, 3u8)),
926        Some((22, 3u8)),
927        Some((22, 3u8)),
928        Some((22, 3u8)),
929        Some((22, 3u8)),
930        Some((22, 3u8)),
931        Some((22, 3u8)),
932        Some((22, 3u8)),
933        Some((22, 3u8)),
934        Some((22, 3u8)),
935        Some((22, 3u8)),
936        Some((22, 3u8)),
937        Some((22, 3u8)),
938        Some((22, 3u8)),
939        Some((22, 3u8)),
940        Some((22, 3u8)),
941        Some((22, 3u8)),
942        Some((22, 3u8)),
943        Some((22, 3u8)),
944        Some((22, 3u8)),
945        Some((22, 3u8)),
946        Some((22, 3u8)),
947        Some((22, 3u8)),
948        Some((23, 3u8)),
949        Some((23, 3u8)),
950        Some((23, 3u8)),
951        Some((23, 3u8)),
952        Some((23, 3u8)),
953        Some((23, 3u8)),
954        Some((23, 3u8)),
955        Some((23, 3u8)),
956        Some((23, 3u8)),
957        Some((23, 3u8)),
958        Some((23, 3u8)),
959        Some((23, 3u8)),
960        Some((23, 3u8)),
961        Some((23, 3u8)),
962        Some((23, 3u8)),
963        Some((23, 3u8)),
964        Some((23, 3u8)),
965        Some((23, 3u8)),
966        Some((23, 3u8)),
967        Some((23, 3u8)),
968        Some((23, 3u8)),
969        Some((23, 3u8)),
970        Some((23, 3u8)),
971        Some((23, 3u8)),
972        Some((23, 3u8)),
973        Some((23, 3u8)),
974        Some((23, 3u8)),
975        Some((23, 3u8)),
976        Some((23, 3u8)),
977        Some((23, 3u8)),
978        Some((23, 3u8)),
979        Some((23, 3u8)),
980        Some((47, 4u8)),
981        Some((47, 4u8)),
982        Some((47, 4u8)),
983        Some((47, 4u8)),
984        Some((47, 4u8)),
985        Some((47, 4u8)),
986        Some((47, 4u8)),
987        Some((47, 4u8)),
988        Some((47, 4u8)),
989        Some((47, 4u8)),
990        Some((47, 4u8)),
991        Some((47, 4u8)),
992        Some((47, 4u8)),
993        Some((47, 4u8)),
994        Some((47, 4u8)),
995        Some((47, 4u8)),
996        Some((48, 4u8)),
997        Some((48, 4u8)),
998        Some((48, 4u8)),
999        Some((48, 4u8)),
1000        Some((48, 4u8)),
1001        Some((48, 4u8)),
1002        Some((48, 4u8)),
1003        Some((48, 4u8)),
1004        Some((48, 4u8)),
1005        Some((48, 4u8)),
1006        Some((48, 4u8)),
1007        Some((48, 4u8)),
1008        Some((48, 4u8)),
1009        Some((48, 4u8)),
1010        Some((48, 4u8)),
1011        Some((48, 4u8)),
1012        Some((13, 2u8)),
1013        Some((13, 2u8)),
1014        Some((13, 2u8)),
1015        Some((13, 2u8)),
1016        Some((13, 2u8)),
1017        Some((13, 2u8)),
1018        Some((13, 2u8)),
1019        Some((13, 2u8)),
1020        Some((13, 2u8)),
1021        Some((13, 2u8)),
1022        Some((13, 2u8)),
1023        Some((13, 2u8)),
1024        Some((13, 2u8)),
1025        Some((13, 2u8)),
1026        Some((13, 2u8)),
1027        Some((13, 2u8)),
1028        Some((13, 2u8)),
1029        Some((13, 2u8)),
1030        Some((13, 2u8)),
1031        Some((13, 2u8)),
1032        Some((13, 2u8)),
1033        Some((13, 2u8)),
1034        Some((13, 2u8)),
1035        Some((13, 2u8)),
1036        Some((13, 2u8)),
1037        Some((13, 2u8)),
1038        Some((13, 2u8)),
1039        Some((13, 2u8)),
1040        Some((13, 2u8)),
1041        Some((13, 2u8)),
1042        Some((13, 2u8)),
1043        Some((13, 2u8)),
1044        Some((13, 2u8)),
1045        Some((13, 2u8)),
1046        Some((13, 2u8)),
1047        Some((13, 2u8)),
1048        Some((13, 2u8)),
1049        Some((13, 2u8)),
1050        Some((13, 2u8)),
1051        Some((13, 2u8)),
1052        Some((13, 2u8)),
1053        Some((13, 2u8)),
1054        Some((13, 2u8)),
1055        Some((13, 2u8)),
1056        Some((13, 2u8)),
1057        Some((13, 2u8)),
1058        Some((13, 2u8)),
1059        Some((13, 2u8)),
1060        Some((13, 2u8)),
1061        Some((13, 2u8)),
1062        Some((13, 2u8)),
1063        Some((13, 2u8)),
1064        Some((13, 2u8)),
1065        Some((13, 2u8)),
1066        Some((13, 2u8)),
1067        Some((13, 2u8)),
1068        Some((13, 2u8)),
1069        Some((13, 2u8)),
1070        Some((13, 2u8)),
1071        Some((13, 2u8)),
1072        Some((13, 2u8)),
1073        Some((13, 2u8)),
1074        Some((13, 2u8)),
1075        Some((13, 2u8)),
1076    ];
1077    static LEAF_LUT_0001: [Option<(u16, u8)>; 16usize] = [
1078        Some((20, 3u8)),
1079        Some((20, 3u8)),
1080        Some((33, 4u8)),
1081        Some((34, 4u8)),
1082        Some((35, 4u8)),
1083        Some((36, 4u8)),
1084        Some((37, 4u8)),
1085        Some((38, 4u8)),
1086        Some((19, 3u8)),
1087        Some((19, 3u8)),
1088        Some((31, 4u8)),
1089        Some((32, 4u8)),
1090        Some((1, 2u8)),
1091        Some((1, 2u8)),
1092        Some((1, 2u8)),
1093        Some((1, 2u8)),
1094    ];
1095    static LEAF_LUT_0010: [Option<(u16, u8)>; 16usize] = [
1096        Some((12, 2u8)),
1097        Some((12, 2u8)),
1098        Some((12, 2u8)),
1099        Some((12, 2u8)),
1100        Some((53, 4u8)),
1101        Some((54, 4u8)),
1102        Some((26, 3u8)),
1103        Some((26, 3u8)),
1104        Some((39, 4u8)),
1105        Some((40, 4u8)),
1106        Some((41, 4u8)),
1107        Some((42, 4u8)),
1108        Some((43, 4u8)),
1109        Some((44, 4u8)),
1110        Some((21, 3u8)),
1111        Some((21, 3u8)),
1112    ];
1113    static LEAF_LUT_0011: [Option<(u16, u8)>; 16usize] = [
1114        Some((28, 3u8)),
1115        Some((28, 3u8)),
1116        Some((61, 4u8)),
1117        Some((62, 4u8)),
1118        Some((63, 4u8)),
1119        Some((0, 4u8)),
1120        Some((320, 4u8)),
1121        Some((384, 4u8)),
1122        Some((10, 1u8)),
1123        Some((10, 1u8)),
1124        Some((10, 1u8)),
1125        Some((10, 1u8)),
1126        Some((10, 1u8)),
1127        Some((10, 1u8)),
1128        Some((10, 1u8)),
1129        Some((10, 1u8)),
1130    ];
1131    static LEAF_LUT_0100: [Option<(u16, u8)>; 32usize] = [
1132        Some((11, 1u8)),
1133        Some((11, 1u8)),
1134        Some((11, 1u8)),
1135        Some((11, 1u8)),
1136        Some((11, 1u8)),
1137        Some((11, 1u8)),
1138        Some((11, 1u8)),
1139        Some((11, 1u8)),
1140        Some((11, 1u8)),
1141        Some((11, 1u8)),
1142        Some((11, 1u8)),
1143        Some((11, 1u8)),
1144        Some((11, 1u8)),
1145        Some((11, 1u8)),
1146        Some((11, 1u8)),
1147        Some((11, 1u8)),
1148        Some((27, 3u8)),
1149        Some((27, 3u8)),
1150        Some((27, 3u8)),
1151        Some((27, 3u8)),
1152        Some((59, 4u8)),
1153        Some((59, 4u8)),
1154        Some((60, 4u8)),
1155        Some((60, 4u8)),
1156        Some((1472, 5u8)),
1157        Some((1536, 5u8)),
1158        Some((1600, 5u8)),
1159        Some((1728, 5u8)),
1160        Some((18, 3u8)),
1161        Some((18, 3u8)),
1162        Some((18, 3u8)),
1163        Some((18, 3u8)),
1164    ];
1165    static LEAF_LUT_0101: [Option<(u16, u8)>; 16usize] = [
1166        Some((24, 3u8)),
1167        Some((24, 3u8)),
1168        Some((49, 4u8)),
1169        Some((50, 4u8)),
1170        Some((51, 4u8)),
1171        Some((52, 4u8)),
1172        Some((25, 3u8)),
1173        Some((25, 3u8)),
1174        Some((55, 4u8)),
1175        Some((56, 4u8)),
1176        Some((57, 4u8)),
1177        Some((58, 4u8)),
1178        Some((192, 2u8)),
1179        Some((192, 2u8)),
1180        Some((192, 2u8)),
1181        Some((192, 2u8)),
1182    ];
1183    static LEAF_LUT_0110: [Option<(u16, u8)>; 32usize] = [
1184        Some((1664, 2u8)),
1185        Some((1664, 2u8)),
1186        Some((1664, 2u8)),
1187        Some((1664, 2u8)),
1188        Some((1664, 2u8)),
1189        Some((1664, 2u8)),
1190        Some((1664, 2u8)),
1191        Some((1664, 2u8)),
1192        Some((448, 4u8)),
1193        Some((448, 4u8)),
1194        Some((512, 4u8)),
1195        Some((512, 4u8)),
1196        Some((704, 5u8)),
1197        Some((768, 5u8)),
1198        Some((640, 4u8)),
1199        Some((640, 4u8)),
1200        Some((576, 4u8)),
1201        Some((576, 4u8)),
1202        Some((832, 5u8)),
1203        Some((896, 5u8)),
1204        Some((960, 5u8)),
1205        Some((1024, 5u8)),
1206        Some((1088, 5u8)),
1207        Some((1152, 5u8)),
1208        Some((1216, 5u8)),
1209        Some((1280, 5u8)),
1210        Some((1344, 5u8)),
1211        Some((1408, 5u8)),
1212        Some((256, 3u8)),
1213        Some((256, 3u8)),
1214        Some((256, 3u8)),
1215        Some((256, 3u8)),
1216    ];
1217    static LEAF_LUT_1001: [Option<(u16, u8)>; 2usize] = [Some((128, 1u8)), Some((8, 1u8))];
1218    static LEAF_LUT_1010: [Option<(u16, u8)>; 4usize] = [Some((9, 1u8)), Some((9, 1u8)), Some((16, 2u8)), Some((17, 2u8))];
1219    static LEAF_LUT_1101: [Option<(u16, u8)>; 4usize] = [Some((14, 2u8)), Some((15, 2u8)), Some((64, 1u8)), Some((64, 1u8))];
1220    static PREFIX_LUT_0: [Entry<u16>; 16usize] = [
1221        Entry::Leaf(8u8, &LEAF_LUT_0000),
1222        Entry::Leaf(4u8, &LEAF_LUT_0001),
1223        Entry::Leaf(4u8, &LEAF_LUT_0010),
1224        Entry::Leaf(4u8, &LEAF_LUT_0011),
1225        Entry::Leaf(5u8, &LEAF_LUT_0100),
1226        Entry::Leaf(4u8, &LEAF_LUT_0101),
1227        Entry::Leaf(5u8, &LEAF_LUT_0110),
1228        Entry::Value(2, 4u8),
1229        Entry::Value(3, 4u8),
1230        Entry::Leaf(1u8, &LEAF_LUT_1001),
1231        Entry::Leaf(2u8, &LEAF_LUT_1010),
1232        Entry::Value(4, 4u8),
1233        Entry::Value(5, 4u8),
1234        Entry::Leaf(2u8, &LEAF_LUT_1101),
1235        Entry::Value(6, 4u8),
1236        Entry::Value(7, 4u8),
1237    ];
1238    pub fn decode(reader: &mut impl BitReader) -> Option<u16> {
1239        let root = Entry::Prefix(4u8, &PREFIX_LUT_0);
1240        root.find(reader)
1241    }
1242    pub fn encode(val: u16) -> Option<Bits> {
1243        let bits = match val {
1244            0 => Bits { data: 53u16, len: 8u8 },
1245            1 => Bits { data: 7u16, len: 6u8 },
1246            2 => Bits { data: 7u16, len: 4u8 },
1247            3 => Bits { data: 8u16, len: 4u8 },
1248            4 => Bits { data: 11u16, len: 4u8 },
1249            5 => Bits { data: 12u16, len: 4u8 },
1250            6 => Bits { data: 14u16, len: 4u8 },
1251            7 => Bits { data: 15u16, len: 4u8 },
1252            8 => Bits { data: 19u16, len: 5u8 },
1253            9 => Bits { data: 20u16, len: 5u8 },
1254            10 => Bits { data: 7u16, len: 5u8 },
1255            11 => Bits { data: 8u16, len: 5u8 },
1256            12 => Bits { data: 8u16, len: 6u8 },
1257            13 => Bits { data: 3u16, len: 6u8 },
1258            14 => Bits { data: 52u16, len: 6u8 },
1259            15 => Bits { data: 53u16, len: 6u8 },
1260            16 => Bits { data: 42u16, len: 6u8 },
1261            17 => Bits { data: 43u16, len: 6u8 },
1262            18 => Bits { data: 39u16, len: 7u8 },
1263            19 => Bits { data: 12u16, len: 7u8 },
1264            20 => Bits { data: 8u16, len: 7u8 },
1265            21 => Bits { data: 23u16, len: 7u8 },
1266            22 => Bits { data: 3u16, len: 7u8 },
1267            23 => Bits { data: 4u16, len: 7u8 },
1268            24 => Bits { data: 40u16, len: 7u8 },
1269            25 => Bits { data: 43u16, len: 7u8 },
1270            26 => Bits { data: 19u16, len: 7u8 },
1271            27 => Bits { data: 36u16, len: 7u8 },
1272            28 => Bits { data: 24u16, len: 7u8 },
1273            29 => Bits { data: 2u16, len: 8u8 },
1274            30 => Bits { data: 3u16, len: 8u8 },
1275            31 => Bits { data: 26u16, len: 8u8 },
1276            32 => Bits { data: 27u16, len: 8u8 },
1277            33 => Bits { data: 18u16, len: 8u8 },
1278            34 => Bits { data: 19u16, len: 8u8 },
1279            35 => Bits { data: 20u16, len: 8u8 },
1280            36 => Bits { data: 21u16, len: 8u8 },
1281            37 => Bits { data: 22u16, len: 8u8 },
1282            38 => Bits { data: 23u16, len: 8u8 },
1283            39 => Bits { data: 40u16, len: 8u8 },
1284            40 => Bits { data: 41u16, len: 8u8 },
1285            41 => Bits { data: 42u16, len: 8u8 },
1286            42 => Bits { data: 43u16, len: 8u8 },
1287            43 => Bits { data: 44u16, len: 8u8 },
1288            44 => Bits { data: 45u16, len: 8u8 },
1289            45 => Bits { data: 4u16, len: 8u8 },
1290            46 => Bits { data: 5u16, len: 8u8 },
1291            47 => Bits { data: 10u16, len: 8u8 },
1292            48 => Bits { data: 11u16, len: 8u8 },
1293            49 => Bits { data: 82u16, len: 8u8 },
1294            50 => Bits { data: 83u16, len: 8u8 },
1295            51 => Bits { data: 84u16, len: 8u8 },
1296            52 => Bits { data: 85u16, len: 8u8 },
1297            53 => Bits { data: 36u16, len: 8u8 },
1298            54 => Bits { data: 37u16, len: 8u8 },
1299            55 => Bits { data: 88u16, len: 8u8 },
1300            56 => Bits { data: 89u16, len: 8u8 },
1301            57 => Bits { data: 90u16, len: 8u8 },
1302            58 => Bits { data: 91u16, len: 8u8 },
1303            59 => Bits { data: 74u16, len: 8u8 },
1304            60 => Bits { data: 75u16, len: 8u8 },
1305            61 => Bits { data: 50u16, len: 8u8 },
1306            62 => Bits { data: 51u16, len: 8u8 },
1307            63 => Bits { data: 52u16, len: 8u8 },
1308            64 => Bits { data: 27u16, len: 5u8 },
1309            128 => Bits { data: 18u16, len: 5u8 },
1310            192 => Bits { data: 23u16, len: 6u8 },
1311            256 => Bits { data: 55u16, len: 7u8 },
1312            320 => Bits { data: 54u16, len: 8u8 },
1313            384 => Bits { data: 55u16, len: 8u8 },
1314            448 => Bits { data: 100u16, len: 8u8 },
1315            512 => Bits { data: 101u16, len: 8u8 },
1316            576 => Bits { data: 104u16, len: 8u8 },
1317            640 => Bits { data: 103u16, len: 8u8 },
1318            704 => Bits { data: 204u16, len: 9u8 },
1319            768 => Bits { data: 205u16, len: 9u8 },
1320            832 => Bits { data: 210u16, len: 9u8 },
1321            896 => Bits { data: 211u16, len: 9u8 },
1322            960 => Bits { data: 212u16, len: 9u8 },
1323            1024 => Bits { data: 213u16, len: 9u8 },
1324            1088 => Bits { data: 214u16, len: 9u8 },
1325            1152 => Bits { data: 215u16, len: 9u8 },
1326            1216 => Bits { data: 216u16, len: 9u8 },
1327            1280 => Bits { data: 217u16, len: 9u8 },
1328            1344 => Bits { data: 218u16, len: 9u8 },
1329            1408 => Bits { data: 219u16, len: 9u8 },
1330            1472 => Bits { data: 152u16, len: 9u8 },
1331            1536 => Bits { data: 153u16, len: 9u8 },
1332            1600 => Bits { data: 154u16, len: 9u8 },
1333            1664 => Bits { data: 24u16, len: 6u8 },
1334            1728 => Bits { data: 155u16, len: 9u8 },
1335            1792 => Bits { data: 8u16, len: 11u8 },
1336            1856 => Bits { data: 12u16, len: 11u8 },
1337            1920 => Bits { data: 13u16, len: 11u8 },
1338            1984 => Bits { data: 18u16, len: 12u8 },
1339            2048 => Bits { data: 19u16, len: 12u8 },
1340            2112 => Bits { data: 20u16, len: 12u8 },
1341            2176 => Bits { data: 21u16, len: 12u8 },
1342            2240 => Bits { data: 22u16, len: 12u8 },
1343            2304 => Bits { data: 23u16, len: 12u8 },
1344            2368 => Bits { data: 28u16, len: 12u8 },
1345            2432 => Bits { data: 29u16, len: 12u8 },
1346            2496 => Bits { data: 30u16, len: 12u8 },
1347            2560 => Bits { data: 31u16, len: 12u8 },
1348            _ => return None,
1349        };
1350        Some(bits)
1351    }
1352    pub static ENTRIES: [(u16, Bits); 104usize] = [
1353        (0, Bits { data: 53u16, len: 8u8 }),
1354        (1, Bits { data: 7u16, len: 6u8 }),
1355        (2, Bits { data: 7u16, len: 4u8 }),
1356        (3, Bits { data: 8u16, len: 4u8 }),
1357        (4, Bits { data: 11u16, len: 4u8 }),
1358        (5, Bits { data: 12u16, len: 4u8 }),
1359        (6, Bits { data: 14u16, len: 4u8 }),
1360        (7, Bits { data: 15u16, len: 4u8 }),
1361        (8, Bits { data: 19u16, len: 5u8 }),
1362        (9, Bits { data: 20u16, len: 5u8 }),
1363        (10, Bits { data: 7u16, len: 5u8 }),
1364        (11, Bits { data: 8u16, len: 5u8 }),
1365        (12, Bits { data: 8u16, len: 6u8 }),
1366        (13, Bits { data: 3u16, len: 6u8 }),
1367        (14, Bits { data: 52u16, len: 6u8 }),
1368        (15, Bits { data: 53u16, len: 6u8 }),
1369        (16, Bits { data: 42u16, len: 6u8 }),
1370        (17, Bits { data: 43u16, len: 6u8 }),
1371        (18, Bits { data: 39u16, len: 7u8 }),
1372        (19, Bits { data: 12u16, len: 7u8 }),
1373        (20, Bits { data: 8u16, len: 7u8 }),
1374        (21, Bits { data: 23u16, len: 7u8 }),
1375        (22, Bits { data: 3u16, len: 7u8 }),
1376        (23, Bits { data: 4u16, len: 7u8 }),
1377        (24, Bits { data: 40u16, len: 7u8 }),
1378        (25, Bits { data: 43u16, len: 7u8 }),
1379        (26, Bits { data: 19u16, len: 7u8 }),
1380        (27, Bits { data: 36u16, len: 7u8 }),
1381        (28, Bits { data: 24u16, len: 7u8 }),
1382        (29, Bits { data: 2u16, len: 8u8 }),
1383        (30, Bits { data: 3u16, len: 8u8 }),
1384        (31, Bits { data: 26u16, len: 8u8 }),
1385        (32, Bits { data: 27u16, len: 8u8 }),
1386        (33, Bits { data: 18u16, len: 8u8 }),
1387        (34, Bits { data: 19u16, len: 8u8 }),
1388        (35, Bits { data: 20u16, len: 8u8 }),
1389        (36, Bits { data: 21u16, len: 8u8 }),
1390        (37, Bits { data: 22u16, len: 8u8 }),
1391        (38, Bits { data: 23u16, len: 8u8 }),
1392        (39, Bits { data: 40u16, len: 8u8 }),
1393        (40, Bits { data: 41u16, len: 8u8 }),
1394        (41, Bits { data: 42u16, len: 8u8 }),
1395        (42, Bits { data: 43u16, len: 8u8 }),
1396        (43, Bits { data: 44u16, len: 8u8 }),
1397        (44, Bits { data: 45u16, len: 8u8 }),
1398        (45, Bits { data: 4u16, len: 8u8 }),
1399        (46, Bits { data: 5u16, len: 8u8 }),
1400        (47, Bits { data: 10u16, len: 8u8 }),
1401        (48, Bits { data: 11u16, len: 8u8 }),
1402        (49, Bits { data: 82u16, len: 8u8 }),
1403        (50, Bits { data: 83u16, len: 8u8 }),
1404        (51, Bits { data: 84u16, len: 8u8 }),
1405        (52, Bits { data: 85u16, len: 8u8 }),
1406        (53, Bits { data: 36u16, len: 8u8 }),
1407        (54, Bits { data: 37u16, len: 8u8 }),
1408        (55, Bits { data: 88u16, len: 8u8 }),
1409        (56, Bits { data: 89u16, len: 8u8 }),
1410        (57, Bits { data: 90u16, len: 8u8 }),
1411        (58, Bits { data: 91u16, len: 8u8 }),
1412        (59, Bits { data: 74u16, len: 8u8 }),
1413        (60, Bits { data: 75u16, len: 8u8 }),
1414        (61, Bits { data: 50u16, len: 8u8 }),
1415        (62, Bits { data: 51u16, len: 8u8 }),
1416        (63, Bits { data: 52u16, len: 8u8 }),
1417        (64, Bits { data: 27u16, len: 5u8 }),
1418        (128, Bits { data: 18u16, len: 5u8 }),
1419        (192, Bits { data: 23u16, len: 6u8 }),
1420        (256, Bits { data: 55u16, len: 7u8 }),
1421        (320, Bits { data: 54u16, len: 8u8 }),
1422        (384, Bits { data: 55u16, len: 8u8 }),
1423        (448, Bits { data: 100u16, len: 8u8 }),
1424        (512, Bits { data: 101u16, len: 8u8 }),
1425        (576, Bits { data: 104u16, len: 8u8 }),
1426        (640, Bits { data: 103u16, len: 8u8 }),
1427        (704, Bits { data: 204u16, len: 9u8 }),
1428        (768, Bits { data: 205u16, len: 9u8 }),
1429        (832, Bits { data: 210u16, len: 9u8 }),
1430        (896, Bits { data: 211u16, len: 9u8 }),
1431        (960, Bits { data: 212u16, len: 9u8 }),
1432        (1024, Bits { data: 213u16, len: 9u8 }),
1433        (1088, Bits { data: 214u16, len: 9u8 }),
1434        (1152, Bits { data: 215u16, len: 9u8 }),
1435        (1216, Bits { data: 216u16, len: 9u8 }),
1436        (1280, Bits { data: 217u16, len: 9u8 }),
1437        (1344, Bits { data: 218u16, len: 9u8 }),
1438        (1408, Bits { data: 219u16, len: 9u8 }),
1439        (1472, Bits { data: 152u16, len: 9u8 }),
1440        (1536, Bits { data: 153u16, len: 9u8 }),
1441        (1600, Bits { data: 154u16, len: 9u8 }),
1442        (1664, Bits { data: 24u16, len: 6u8 }),
1443        (1728, Bits { data: 155u16, len: 9u8 }),
1444        (1792, Bits { data: 8u16, len: 11u8 }),
1445        (1856, Bits { data: 12u16, len: 11u8 }),
1446        (1920, Bits { data: 13u16, len: 11u8 }),
1447        (1984, Bits { data: 18u16, len: 12u8 }),
1448        (2048, Bits { data: 19u16, len: 12u8 }),
1449        (2112, Bits { data: 20u16, len: 12u8 }),
1450        (2176, Bits { data: 21u16, len: 12u8 }),
1451        (2240, Bits { data: 22u16, len: 12u8 }),
1452        (2304, Bits { data: 23u16, len: 12u8 }),
1453        (2368, Bits { data: 28u16, len: 12u8 }),
1454        (2432, Bits { data: 29u16, len: 12u8 }),
1455        (2496, Bits { data: 30u16, len: 12u8 }),
1456        (2560, Bits { data: 31u16, len: 12u8 }),
1457    ];
1458}