]> git.sesse.net Git - ffmpeg/blob - libavcodec/atrac3plus_data.h
avformat/avio: Add Metacube support
[ffmpeg] / libavcodec / atrac3plus_data.h
1 /*
2  * ATRAC3+ compatible decoder
3  *
4  * Copyright (c) 2010-2013 Maxim Poliakovski
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 #ifndef AVCODEC_ATRAC3PLUS_DATA_H
24 #define AVCODEC_ATRAC3PLUS_DATA_H
25
26 #include <stddef.h>
27 #include <stdint.h>
28
29 /** VLC tables for wordlen */
30 static const uint8_t atrac3p_wl_cbs[][12] = {
31     {  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
32     {  1,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
33     {  1,  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0 },
34     {  1,  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0 },
35 };
36
37 /** VLC tables for code table indexes */
38 static const uint8_t atrac3p_ct_cbs[][12] = {
39     {  1,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
40     {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
41     {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
42     {  1,  0,  1,  6,  0,  0,  0,  0,  0,  0,  0,  0 },
43 };
44 /* Symbols for wordlen interleaved with symbols for code table */
45 static const uint8_t atrac3p_wl_ct_xlats[] = {
46     /* wordlen table 1 - 3 entries */
47     0,  1,  7,
48     /* code table 1    - 4 entries */
49     0,  1,  2,  3,
50     /* wordlen table 2 - 5 entries */
51     0,  1,  2,  6,  7,
52     /* code table 2    - 8 entries */
53     0,  1,  2,  3,  4,  5,  6,  7,
54     /* wordlen table 3 - 8 entries */
55     0,  1,  7,  2,  5,  6,  3,  4,
56     /* code table 3    - 8 entries */
57     0,  1,  2,  3,  6,  7,  4,  5,
58     /* wordlen table 4 - 8 entries */
59     0,  1,  7,  2,  3,  6,  4,  5,
60     /* code table 4    - 8 entries */
61     0,  1,  2,  3,  4,  5,  6,  7,
62 };
63
64 /** VLC tables for scale factor indexes */
65 static const uint8_t atrac3p_sf_cbs[][12] = {
66     {  0,  1,  4,  2,  0,  0,  0,  7, 50,  0,  0,  0 },
67     {  0,  1,  4,  2,  0,  0,  0,  7, 50,  0,  0,  0 },
68     {  1,  0,  2,  0,  4,  0,  2,  1, 54,  0,  0,  0 },
69     {  0,  1,  4,  0,  4,  0,  3,  0, 52,  0,  0,  0 },
70     {  0,  1,  4,  2,  0,  8,  0,  0,  0,  0,  0,  0 },
71     {  0,  1,  4,  2,  0,  8,  0,  0,  0,  0,  0,  0 },
72     {  1,  0,  2,  2,  2,  0,  8,  0,  0,  0,  0,  0 },
73     {  0,  1,  4,  2,  2,  2,  4,  0,  0,  0,  0,  0 },
74 };
75
76 static const uint8_t atrac3p_sf_xlats[] = {
77     /* Scale factor index 1 - 64 entries */
78      0,  1, 61, 62, 63,  2, 60,  3,  4,  5,  6, 57, 58, 59,  7,  8,
79      9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
80     25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
81     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
82     /* Scale factor index 2 - 64 entries */
83      0,  1,  2, 62, 63,  3, 61,  4,  5,  6, 57, 58, 59, 60,  7,  8,
84      9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
85     25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
86     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
87     /* Scale factor index 3 - 64 entries */
88      0,  1, 63,  2,  3, 61, 62,  4, 60, 59,  5,  6,  7,  8,  9, 10,
89     11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
90     27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
91     43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
92     /* Scale factor index 4 - 64 entries */
93      0,  1,  2, 62, 63,  3,  4, 60, 61,  5, 58, 59,  6,  7,  8,  9,
94     10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
95     26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
96     42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
97     /* Scale factor index 5 - 15 entries */
98      0,  1, 13, 14, 15,  2, 12,  3,  4,  5,  6,  7,  9, 10, 11,
99     /* Scale factor index 6 - 15 entries */
100      0,  1,  2, 14, 15,  3, 13,  4,  5,  6,  7,  9, 10, 11, 12,
101     /* Scale factor index 7 - 15 entries */
102      0,  1, 15,  2, 14,  3, 13,  4,  5,  6,  7,  9, 10, 11, 12,
103     /* Scale factor index 8 - 15 entries */
104      0,  1,  2, 14, 15,  3, 13,  4, 12,  5, 11,  6,  7,  9, 10,
105 };
106
107 /* weights for quantized word lengths */
108 static const int8_t atrac3p_wl_weights[6][32] = {
109     { 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
110       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
111     { 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0,
112       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
113     { 6, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 1, 1,
114       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 },
115     { 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
116       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
117     { 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0,
118       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
119     { 6, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 2, 2, 1, 1,
120       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
121 };
122
123 /* weights for quantized scale factors
124  * sf_weights[i] = i / (tab_idx + 1)
125  * where tab_idx = [1,2] */
126 static const int8_t atrac3p_sf_weights[2][32] = {
127     { 0, 0, 1, 1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,
128       8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 },
129     { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4,  4,  5,
130       5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10 }
131 };
132
133 /** Ungroup table for word length segments.
134  *  Numbers in this table tell which coeff belongs to which segment. */
135 static const uint8_t atrac3p_qu_num_to_seg[32] = {
136     0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5,
137     5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9
138 };
139
140 /** Map quant unit number to subband number */
141 static const uint8_t atrac3p_qu_to_subband[32] = {
142     0, 0, 0, 0, 0, 0, 0, 0, 1, 1,  1,  1,  2,  2,  2, 2,
143     3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
144 };
145
146 /** Map subband number to number of power compensation groups */
147 static const int atrac3p_subband_to_num_powgrps[16] = {
148     1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5
149 };
150
151 /** 3D base shape tables. The values are grouped together as follows:
152  *  [num_start_values = 8][num_shape_tables = 16][num_seg_coeffs = 9]
153  *  For each of the 8 start values there are 16 different shapes each
154  *  9 coefficients long. */
155 static const int8_t atrac3p_wl_shapes[8][16][9] = {
156     { {  0,  0,  0,  0,  0,  0,  0, -2, -1 },
157       {  0,  0,  0,  0,  0,  0,  0, -5, -1 },
158       {  0,  0,  0, -7,  0,  0,  0,  0,  0 },
159       {  0,  0,  0,  0,  0, -7,  0,  0,  0 },
160       {  0,  0,  0,  0,  0,  0, -5,  0,  0 },
161       {  0,  0,  0,  0, -5,  0,  0,  0,  0 },
162       { -7, -7,  0,  0,  0,  0,  0,  0,  0 },
163       {  0, -7,  0,  0,  0,  0,  0,  0,  0 },
164       { -2, -2, -5,  0,  0,  0,  0,  0,  0 },
165       {  0,  0,  0, -2, -5,  0,  0,  0,  0 },
166       {  0,  0,  0,  0,  0, -2, -5,  0,  0 },
167       {  0,  0,  0, -5,  0,  0,  0,  0,  0 },
168       {  0, -2, -7, -2,  0,  0,  0,  0,  0 },
169       {  0,  0,  0,  0, -2, -5,  0,  0,  0 },
170       {  0,  0,  0, -5, -5,  0,  0,  0,  0 },
171       {  0,  0,  0, -5, -2,  0,  0,  0,  0 } },
172     { { -1, -5, -3, -2, -1, -1,  0,  0,  0 },
173       { -2, -5, -3, -3, -2, -1, -1,  0,  0 },
174       {  0, -1, -1, -1,  0,  0,  0,  0,  0 },
175       { -1, -3,  0,  0,  0,  0,  0,  0,  0 },
176       { -1, -2,  0,  0,  0,  0,  0,  0,  0 },
177       { -1, -3, -1,  0,  0,  0,  0,  1,  1 },
178       { -1, -5, -3, -3, -2, -1,  0,  0,  0 },
179       { -1, -1, -4, -2, -2, -1, -1,  0,  0 },
180       { -1, -1, -3, -2, -3, -1, -1, -1,  0 },
181       { -1, -4, -2, -3, -1,  0,  0,  0,  0 },
182       {  0, -1, -2, -2, -1, -1,  0,  0,  0 },
183       {  0, -2, -1,  0,  0,  0,  0,  0,  0 },
184       { -1, -1,  0,  0,  0,  0,  0,  0,  0 },
185       { -1, -1, -3, -2, -2, -1, -1, -1,  0 },
186       {  0,  0,  0,  0,  0,  0,  0,  0,  0 },
187       {  0, -1, -3, -2, -2, -1, -1, -1,  0 }, },
188     { { -1, -2,  0,  1,  1,  1,  1,  1,  1 },
189       {  0, -1,  1,  1,  1,  1,  1,  1,  1 },
190       {  0, -2,  1,  1,  1,  1,  1,  1,  1 },
191       {  0, -2,  0,  1,  1,  1,  1,  1,  1 },
192       { -1, -1,  0,  1,  1,  1,  1,  1,  1 },
193       {  0,  0, -1,  0,  1,  1,  1,  1,  1 },
194       { -1, -1,  1,  1,  1,  1,  1,  1,  1 },
195       {  0,  0, -1,  1,  1,  1,  1,  1,  1 },
196       {  0, -1,  0,  1,  1,  1,  1,  1,  1 },
197       { -1, -1, -1,  1,  1,  1,  1,  1,  1 },
198       {  0,  0,  0,  0,  1,  1,  1,  1,  1 },
199       {  0,  0,  0,  1,  1,  1,  1,  1,  1 },
200       {  0, -1, -1,  1,  1,  1,  1,  1,  1 },
201       {  0,  1,  0,  1,  1,  1,  1,  1,  1 },
202       {  0, -3, -2,  1,  1,  1,  1,  2,  2 },
203       { -3, -5, -3,  2,  2,  2,  2,  2,  2 }, },
204     { { -1, -2,  0,  2,  2,  2,  2,  2,  2 },
205       { -1, -2,  0,  1,  2,  2,  2,  2,  2 },
206       {  0, -2,  0,  2,  2,  2,  2,  2,  2 },
207       { -1,  0,  1,  2,  2,  2,  2,  2,  2 },
208       {  0,  0,  1,  2,  2,  2,  2,  2,  2 },
209       {  0, -2,  0,  1,  2,  2,  2,  2,  2 },
210       {  0, -1,  1,  2,  2,  2,  2,  2,  2 },
211       { -1, -1,  0,  2,  2,  2,  2,  2,  2 },
212       { -1, -1,  0,  1,  2,  2,  2,  2,  2 },
213       { -1, -2, -1,  2,  2,  2,  2,  2,  2 },
214       {  0, -1,  0,  2,  2,  2,  2,  2,  2 },
215       {  1,  1,  0,  1,  2,  2,  2,  2,  2 },
216       {  0,  1,  2,  2,  2,  2,  2,  2,  2 },
217       {  1,  0,  0,  1,  2,  2,  2,  2,  2 },
218       {  0,  0,  0,  1,  2,  2,  2,  2,  2 },
219       { -1, -1, -1,  1,  2,  2,  2,  2,  2 }, },
220     { {  0,  1,  2,  3,  3,  3,  3,  3,  3 },
221       {  1,  1,  2,  3,  3,  3,  3,  3,  3 },
222       { -1,  0,  1,  2,  3,  3,  3,  3,  3 },
223       {  0,  0,  2,  3,  3,  3,  3,  3,  3 },
224       { -1,  0,  1,  3,  3,  3,  3,  3,  3 },
225       {  0,  0,  1,  3,  3,  3,  3,  3,  3 },
226       {  1,  2,  3,  3,  3,  3,  3,  3,  3 },
227       {  1,  2,  2,  3,  3,  3,  3,  3,  3 },
228       {  0,  1,  1,  3,  3,  3,  3,  3,  3 },
229       {  0,  0,  1,  2,  3,  3,  3,  3,  3 },
230       { -1,  1,  2,  3,  3,  3,  3,  3,  3 },
231       { -1,  0,  2,  3,  3,  3,  3,  3,  3 },
232       {  2,  2,  3,  3,  3,  3,  3,  3,  3 },
233       {  1,  1,  3,  3,  3,  3,  3,  3,  3 },
234       {  0,  2,  3,  3,  3,  3,  3,  3,  3 },
235       {  0,  1,  1,  2,  3,  3,  3,  3,  3 }, },
236     { {  0,  1,  2,  3,  4,  4,  4,  4,  4 },
237       {  1,  2,  3,  4,  4,  4,  4,  4,  4 },
238       {  0,  0,  2,  3,  4,  4,  4,  4,  4 },
239       {  1,  1,  2,  4,  4,  4,  4,  4,  4 },
240       {  0,  1,  2,  4,  4,  4,  4,  4,  4 },
241       { -1,  0,  1,  3,  4,  4,  4,  4,  4 },
242       {  0,  0,  1,  3,  4,  4,  4,  4,  4 },
243       {  1,  1,  2,  3,  4,  4,  4,  4,  4 },
244       {  0,  1,  1,  3,  4,  4,  4,  4,  4 },
245       {  2,  2,  3,  4,  4,  4,  4,  4,  4 },
246       {  1,  1,  3,  4,  4,  4,  4,  4,  4 },
247       {  1,  2,  2,  4,  4,  4,  4,  4,  4 },
248       { -1,  0,  2,  3,  4,  4,  4,  4,  4 },
249       {  0,  1,  3,  4,  4,  4,  4,  4,  4 },
250       {  1,  2,  2,  3,  4,  4,  4,  4,  4 },
251       {  0,  2,  3,  4,  4,  4,  4,  4,  4 }, },
252     { {  1,  2,  3,  4,  5,  5,  5,  5,  5 },
253       {  0,  1,  2,  3,  4,  5,  5,  5,  5 },
254       {  0,  1,  2,  3,  5,  5,  5,  5,  5 },
255       {  1,  1,  3,  4,  5,  5,  5,  5,  5 },
256       {  1,  1,  2,  4,  5,  5,  5,  5,  5 },
257       {  1,  2,  2,  4,  5,  5,  5,  5,  5 },
258       {  1,  1,  2,  3,  5,  5,  5,  5,  5 },
259       {  2,  2,  3,  4,  5,  5,  5,  5,  5 },
260       {  0,  1,  2,  4,  5,  5,  5,  5,  5 },
261       {  2,  2,  3,  5,  5,  5,  5,  5,  5 },
262       {  1,  2,  3,  5,  5,  5,  5,  5,  5 },
263       {  0,  1,  3,  4,  5,  5,  5,  5,  5 },
264       {  1,  2,  2,  3,  5,  5,  5,  5,  5 },
265       {  2,  3,  4,  5,  5,  5,  5,  5,  5 },
266       {  0,  2,  3,  4,  5,  5,  5,  5,  5 },
267       {  1,  1,  1,  3,  4,  5,  5,  5,  5 }, },
268     { {  1,  2,  3,  4,  5,  5,  5,  6,  6 },
269       {  1,  2,  3,  4,  5,  6,  6,  6,  6 },
270       {  2,  3,  4,  5,  6,  6,  6,  6,  6 },
271       {  1,  2,  3,  4,  6,  6,  6,  6,  6 },
272       {  2,  2,  3,  4,  5,  5,  5,  6,  6 },
273       {  1,  2,  3,  4,  5,  5,  6,  6,  6 },
274       {  2,  2,  3,  4,  6,  6,  6,  6,  6 },
275       {  2,  2,  3,  4,  5,  6,  6,  6,  6 },
276       {  2,  2,  4,  5,  6,  6,  6,  6,  6 },
277       {  2,  2,  3,  5,  6,  6,  6,  6,  6 },
278       {  1,  2,  3,  5,  6,  6,  6,  6,  6 },
279       {  2,  3,  3,  5,  6,  6,  6,  6,  6 },
280       {  1,  2,  4,  5,  6,  6,  6,  6,  6 },
281       {  2,  2,  3,  4,  5,  5,  6,  6,  6 },
282       {  2,  3,  3,  4,  6,  6,  6,  6,  6 },
283       {  1,  3,  4,  5,  6,  6,  6,  6,  6 } }
284 };
285
286 /** 2D base shape tables for scale factor coding.
287  *  The values are grouped together as follows:
288  *  [num_shape_tables = 64][num_seg_coeffs = 9] */
289 static const int8_t atrac3p_sf_shapes[64][9] = {
290     { -3, -2, -1,  0,  3,  5,  6,  8, 40 },
291     { -3, -2,  0,  1,  7,  9, 11, 13, 20 },
292     { -1,  0,  0,  1,  6,  8, 10, 13, 41 },
293     {  0,  0,  0,  2,  5,  5,  6,  8, 14 },
294     {  0,  0,  0,  2,  6,  7,  8, 11, 47 },
295     {  0,  0,  1,  2,  5,  7,  8, 10, 32 },
296     {  0,  0,  1,  3,  8, 10, 12, 14, 47 },
297     {  0,  0,  2,  4,  9, 10, 12, 14, 40 },
298     {  0,  0,  3,  5,  9, 10, 12, 14, 22 },
299     {  0,  1,  3,  5, 10, 14, 18, 22, 31 },
300     {  0,  2,  5,  6, 10, 10, 10, 12, 46 },
301     {  0,  2,  5,  7, 12, 14, 15, 18, 44 },
302     {  1,  1,  4,  5,  7,  7,  8,  9, 15 },
303     {  1,  2,  2,  2,  4,  5,  7,  9, 26 },
304     {  1,  2,  2,  3,  6,  7,  7,  8, 47 },
305     {  1,  2,  2,  3,  6,  8, 10, 13, 22 },
306     {  1,  3,  4,  7, 13, 17, 21, 24, 41 },
307     {  1,  4,  0,  4, 10, 12, 13, 14, 17 },
308     {  2,  3,  3,  3,  6,  8, 10, 13, 48 },
309     {  2,  3,  3,  4,  9, 12, 14, 17, 47 },
310     {  2,  3,  3,  5, 10, 12, 14, 17, 25 },
311     {  2,  3,  5,  7,  8,  9,  9,  9, 13 },
312     {  2,  3,  5,  9, 16, 21, 25, 28, 33 },
313     {  2,  4,  5,  8, 12, 14, 17, 19, 26 },
314     {  2,  4,  6,  8, 12, 13, 13, 15, 20 },
315     {  2,  4,  7, 12, 20, 26, 30, 32, 35 },
316     {  3,  3,  5,  6, 12, 14, 16, 19, 34 },
317     {  3,  4,  4,  5,  7,  9, 10, 11, 48 },
318     {  3,  4,  5,  6,  8,  9, 10, 11, 16 },
319     {  3,  5,  5,  5,  7,  9, 10, 13, 35 },
320     {  3,  5,  5,  7, 10, 12, 13, 15, 49 },
321     {  3,  5,  7,  7,  8,  7,  9, 12, 21 },
322     {  3,  5,  7,  8, 12, 14, 15, 15, 24 },
323     {  3,  5,  7, 10, 16, 21, 24, 27, 44 },
324     {  3,  5,  8, 14, 21, 26, 28, 29, 42 },
325     {  3,  6, 10, 13, 18, 19, 20, 22, 27 },
326     {  3,  6, 11, 16, 24, 27, 28, 29, 31 },
327     {  4,  5,  4,  3,  4,  6,  8, 11, 18 },
328     {  4,  6,  5,  6,  9, 10, 12, 14, 20 },
329     {  4,  6,  7,  6,  6,  6,  7,  8, 46 },
330     {  4,  6,  7,  9, 13, 16, 18, 20, 48 },
331     {  4,  6,  7,  9, 14, 17, 20, 23, 31 },
332     {  4,  6,  9, 11, 14, 15, 15, 17, 21 },
333     {  4,  8, 13, 20, 27, 32, 35, 36, 38 },
334     {  5,  6,  6,  4,  5,  6,  7,  6,  6 },
335     {  5,  7,  7,  8,  9,  9, 10, 12, 49 },
336     {  5,  8,  9,  9, 10, 11, 12, 13, 42 },
337     {  5,  8, 10, 12, 15, 16, 17, 19, 42 },
338     {  5,  8, 12, 17, 26, 31, 32, 33, 44 },
339     {  5,  9, 13, 16, 20, 22, 23, 23, 35 },
340     {  6,  8,  8,  7,  6,  5,  6,  8, 15 },
341     {  6,  8,  8,  8,  9, 10, 12, 16, 24 },
342     {  6,  8,  8,  9, 10, 10, 11, 11, 13 },
343     {  6,  8, 10, 13, 19, 21, 24, 26, 32 },
344     {  6,  9, 10, 11, 13, 13, 14, 16, 49 },
345     {  7,  9,  9, 10, 13, 14, 16, 19, 27 },
346     {  7, 10, 12, 13, 16, 16, 17, 17, 27 },
347     {  7, 10, 12, 14, 17, 19, 20, 22, 48 },
348     {  8,  9, 10,  9, 10, 11, 11, 11, 19 },
349     {  8, 11, 12, 12, 13, 13, 13, 13, 17 },
350     {  8, 11, 13, 14, 16, 17, 19, 20, 27 },
351     {  8, 12, 17, 22, 26, 28, 29, 30, 33 },
352     { 10, 14, 16, 19, 21, 22, 22, 24, 28 },
353     { 10, 15, 17, 18, 21, 22, 23, 25, 43 }
354 };
355
356 static const uint8_t atrac3p_ct_restricted_to_full[2][7][4] = {
357     { { 0, 5, 4, 1 },
358       { 0, 1, 2, 3 },
359       { 3, 0, 4, 2 },
360       { 4, 0, 1, 2 },
361       { 1, 0, 4, 3 },
362       { 3, 0, 2, 1 },
363       { 0, 3, 1, 2 } },
364     { { 4, 0, 1, 2 },
365       { 0, 3, 2, 1 },
366       { 0, 1, 2, 3 },
367       { 0, 1, 2, 4 },
368       { 0, 1, 2, 3 },
369       { 1, 4, 2, 0 },
370       { 0, 1, 2, 3 } }
371 };
372
373 /** Tables for spectrum coding */
374
375 /* If the first entry of a subtable is negative, it means
376  * that another VLC is to be reused. */
377 static const int8_t atrac3p_spectra_cbs[][12] = {
378     {  1,  0,  0,  1,  7,  0, 19,  5, 13, 21,  6,  8 },
379     {  0,  1,  0,  4, 11,  0,  1, 29,  6, 20,  7,  2 },
380     {  0,  0,  1,  8,  0, 13, 18,  7,  2,  0,  0,  0 },
381     {  0,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
382     {  0,  0,  1,  3,  5,  8, 12, 23, 72, 68, 31,  2 },
383     {  0,  1,  3,  2,  6,  4,  0,  0,  0,  0,  0,  0 },
384     {  0,  1,  2,  2,  2,  6, 14, 21, 13,  2,  0,  0 },
385     {  1,  0,  0,  0,  8,  1, 18,  9, 22, 10, 12,  0 },
386     {  0,  0,  0,  0, 16, 11, 32, 19,  1,  2,  0,  0 },
387     {  1,  0,  0,  4,  2,  2,  9, 15, 12,  4,  0,  0 },
388     {  0,  1,  0,  4,  3,  5, 16, 28, 34, 26,  4,  0 },
389     {  0,  0,  0,  0,  9, 12, 16, 44, 98, 42,  4,  0 },
390     {  0,  1,  1,  2,  2,  5,  7, 21, 54, 85, 62, 16 },
391     {  0,  0,  3,  2,  5,  7, 17, 23,  6,  0,  0,  0 },
392     {  1,  0,  0,  2,  6,  0,  7, 21, 15, 17,  8,  4 },
393     {  0,  1,  4,  0,  4,  3,  8,  3,  2,  0,  0,  0 },
394     {  0,  0,  5,  0,  4,  6, 10, 16,  8,  0,  0,  0 },
395     {  0,  3,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
396     {  0,  1,  5,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
397     {  0,  0,  0,  3,  4, 12, 15, 34, 83, 75, 30,  0 },
398     {  0,  0,  0,  3, 14, 10, 20, 16,  0,  0,  0,  0 },
399     {  1,  0,  3,  1,  0,  4,  0,  0,  0,  0,  0,  0 },
400     {  1,  0,  0,  2,  2,  6, 12, 18, 19, 15,  6,  0 },
401     {  0,  0,  1,  1, 13,  1, 14, 28, 33, 81, 32, 52 },
402     {  1,  1,  1,  1,  2,  0,  0,  0,  0,  0,  0,  0 },
403     {  0,  1,  0,  2,  3,  6, 19,  9, 75, 110, 0,  0 },
404     {  0,  0,  1,  3,  5,  5, 13, 27, 69, 96, 35,  2 },
405     {  0,  0,  0,  7,  6,  8, 22, 20,  0,  0,  0,  0 },
406     {  1,  0,  0,  6,  2,  0,  0,  0, 19,  9, 24, 20 },
407     {  0,  0,  1,  2, 13,  1, 31, 13, 16,  4,  0,  0 },
408     {  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
409     {  0,  0,  0,  5,  4, 12, 17, 47, 24, 12,  0,  0 },
410     {  0,  2,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0 },
411     {  0,  0,  0,  0,  1, 16, 31, 36, 172, 0,  0,  0 },
412     {  0,  0,  0,  5, 12,  9, 12, 15, 10,  0,  0,  0 },
413     {  0,  1,  0,  6,  2,  6, 18,  4, 26,  6, 12,  0 },
414     {  1,  0,  2,  2,  0,  4,  3,  8,  3,  2,  0,  0 },
415     {  0,  2,  3,  2,  0,  0,  0,  0,  0,  0,  0,  0 },
416     {  0,  0,  0,  4,  7, 12, 19, 21, 58,  0,  0,  0 },
417     {  1,  1,  1,  0,  3,  2,  0,  0,  0,  0,  0,  0 },
418     {  0,  0,  1,  8,  6,  8,  8,  0,  0,  0,  0,  0 },
419     {  0,  0,  1,  5,  7,  8, 16, 22,  4,  0,  0,  0 },
420     {  0,  1,  0,  8,  0,  1, 16, 10, 29, 12,  4,  0 },
421     {  0,  0,  5,  2,  2,  9,  5,  2,  0,  0,  0,  0 },
422     {  0,  0,  1,  1, 10,  4, 16, 29, 46, 75, 74,  0 },
423     {  0,  0,  0,  1,  7, 12, 36, 63,  2,  0,  0,  0 },
424     {  0,  3,  0,  1,  3,  4,  4,  0,  0,  0,  0,  0 },
425     {  0,  1,  2,  2,  6,  8,  6,  3,  1,  2,  0,  0 },
426     {  0,  1,  1,  3,  4,  6, 13, 25, 10,  0,  0,  0 },
427     {  1,  1,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0 },
428     {  0,  1,  0,  4,  8,  3,  8, 24, 17, 12,  4,  0 },
429     {  0,  1,  1,  5,  2,  8,  7, 13,  8,  4,  0,  0 },
430     {  1,  0,  0,  4,  0,  4,  5,  9, 30, 45, 21,  2 },
431     {  0,  1,  3,  3,  4,  4,  0,  0,  0,  0,  0,  0 },
432     {  0,  0,  1,  3,  4,  8, 10, 36, 60, 78, 48,  8 },
433     { -6 },
434     {  1,  0,  0,  2,  6,  0, 11, 13, 12, 24,  4,  8 },
435     {  1,  0,  0,  4,  0,  8,  4,  9, 19, 13, 13, 10 },
436     {  1,  0,  0,  4,  0,  5, 12, 13, 14,  0,  0,  0 },
437     {  0,  1,  0,  4,  4,  5,  9, 30, 45, 21,  2,  0 },
438     {  0,  0,  1,  4,  4,  4, 12, 30, 73, 75, 22,  0 },
439     { -5 },
440     {  0,  0,  3,  2,  4,  8, 23, 13, 10,  0,  0,  0 },
441     { -14 },
442     {  0,  0,  1,  3, 12,  0, 30,  9, 18,  8,  0,  0 },
443     { -9 },
444     {  1,  0,  0,  4,  0,  3,  5, 16, 28, 34, 26,  4 },
445     { -11 },
446     {  0,  0,  0,  4,  4,  9, 13, 37, 76, 72, 39,  2 },
447     { -6 },
448     { -28 },
449     { -22 },
450     { -2 },
451     { -31 },
452     { -60 },
453     {  0,  0,  2,  2,  4,  5, 11, 26, 67, 78, 51, 10 },
454     { -6 },
455     { -35 },
456     {  0,  1,  0,  4,  6,  7, 10, 22, 11, 16,  4,  0 },
457     {  0,  1,  0,  0,  4, 11,  8, 28, 92, 97, 13,  2 },
458     { -59 },
459     {  1,  0,  0,  0,  4,  6,  6, 14, 42, 63, 59, 30 },
460     { -75 },
461     {  1,  0,  2,  0,  2,  2,  6, 17, 14, 13,  6,  0 },
462     {  1,  0,  0,  1,  7,  0, 20,  4, 10, 24,  2, 12 },
463     {  1,  0,  1,  3,  2,  3,  7,  4,  4,  0,  0,  0 },
464     {  0,  1,  1,  3,  4,  9, 15, 12,  4,  0,  0,  0 },
465     { -66 },
466     { -32 },
467     { -12 },
468     {  0,  1,  1,  3,  4,  6, 14, 22, 12,  0,  0,  0 },
469     { -42 },
470     {  1,  0,  1,  3,  2,  3,  7,  4,  4,  0,  0,  0 },
471     {  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0,  0 },
472     { -17 },
473     { -39 },
474     {  1,  0,  2,  0,  2,  4, 11,  9,  2,  0,  0,  0 },
475     { -62 },
476     { -28 },
477     {  1,  0,  0,  2,  3,  5, 12, 14, 18, 15,  9,  2 },
478     {  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0,  0 },
479     {  1,  1,  1,  1,  2,  0,  0,  0,  0,  0,  0,  0 },
480     {  1,  0,  0,  2,  2,  2,  6, 12, 34, 92, 54, 20 },
481     {  1,  0,  0,  3,  0,  3,  3, 10, 40, 85, 61, 50 },
482     {  0,  1,  2,  1,  4,  7, 10, 26, 12,  0,  0,  0 },
483     {  1,  0,  0,  1,  7,  0, 19,  5, 13, 23,  0, 12 },
484     { -78 },
485     {  1,  0,  0,  0,  1,  4,  9, 4, 103, 110, 24, 0 },
486     {  1,  0,  2,  2,  2,  4,  0,  0,  0,  0,  0,  0 },
487     {  0,  1,  4,  0,  0,  0,  8, 11, 24, 53, 64, 60 },
488     { -47 },
489     {  0,  1,  0,  4,  6, 10, 12,  7, 15,  4,  4,  0 },
490 };
491
492 static const uint8_t atrac3p_spectra_xlats[] = {
493     /* Table set A, code table 0, wordlen 1 - 81 entries */
494     0x00, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x50, 0xD0, 0x70,
495     0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0x41, 0xC1, 0x31, 0x05, 0x0D,
496     0xC3, 0x13, 0x07, 0x0F, 0x44, 0xCC, 0x11, 0x43, 0x33, 0x54, 0x74, 0xDC,
497     0xFC, 0x71, 0x15, 0x4D, 0xCD, 0x1D, 0xD3, 0xC7, 0x37, 0x3F, 0xD4, 0xF4,
498     0x5C, 0x7C, 0x51, 0xD1, 0xF1, 0x45, 0xC5, 0x35, 0xDD, 0x3D, 0x53, 0x73,
499     0xF3, 0x47, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0x55, 0xF5, 0x7D, 0xD7, 0x5F,
500     0xFF, 0xD5, 0x75, 0x5D, 0xFD, 0x57, 0xF7, 0xDF, 0x7F,
501     /* Table set A, code table 0, wordlen 2 - 81 entries */
502     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
503     0x05, 0x45, 0x15, 0x55, 0x90, 0x80, 0x20, 0x60, 0x84, 0x94, 0x24, 0x64,
504     0x08, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x85, 0x95, 0x65, 0x09, 0x49,
505     0x19, 0x59, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56, 0x88, 0x61,
506     0x25, 0x29, 0x69, 0x5A, 0xA0, 0xA4, 0x98, 0x28, 0x68, 0xA1, 0xA5, 0x89,
507     0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x96, 0x26, 0x66, 0x0A, 0x4A, 0x1A,
508     0xA8, 0x86, 0xA6, 0x8A, 0x9A, 0x2A, 0x6A, 0xA2, 0xAA,
509     /* Table set A, code table 0, wordlen 3 - 49 entries */
510     0x00, 0x08, 0x38, 0x01, 0x09, 0x39, 0x07, 0x0F, 0x3F, 0x10, 0x30, 0x11,
511     0x31, 0x02, 0x0A, 0x3A, 0x05, 0x06, 0x0E, 0x3E, 0x17, 0x37, 0x18, 0x28,
512     0x19, 0x29, 0x2A, 0x32, 0x03, 0x0B, 0x33, 0x3B, 0x0D, 0x15, 0x3D, 0x16,
513     0x1E, 0x36, 0x1F, 0x2F, 0x12, 0x1A, 0x13, 0x2B, 0x1D, 0x35, 0x2E, 0x1B,
514     0x2D,
515     /* Table set A, code table 0, wordlen 4 - 6 entries */
516     0x01, 0x02, 0x00, 0x03, 0x04, 0x05,
517     /* Table set A, code table 0, wordlen 5 - 225 entries */
518     0x00, 0x10, 0xF0, 0x01, 0x11, 0xF1, 0x0F, 0x1F, 0xFF, 0x20, 0xE0, 0xE1,
519     0x02, 0xF2, 0x0E, 0x1E, 0x2F, 0x30, 0xD0, 0x21, 0x12, 0x22, 0xE2, 0x03,
520     0x0D, 0x2E, 0xEE, 0xFE, 0xEF, 0x40, 0xC0, 0x31, 0xC1, 0xD1, 0x32, 0xD2,
521     0x13, 0x23, 0xE3, 0xF3, 0x04, 0xF4, 0x0C, 0x1C, 0x1D, 0x2D, 0xED, 0xFD,
522     0x3E, 0xDE, 0x3F, 0xDF, 0x50, 0x60, 0x70, 0x90, 0xA0, 0xB0, 0x41, 0x51,
523     0x61, 0x71, 0x91, 0xA1, 0xB1, 0x42, 0x62, 0x92, 0xA2, 0xC2, 0x33, 0xC3,
524     0xD3, 0x14, 0x24, 0x34, 0xD4, 0xE4, 0x05, 0x15, 0xF5, 0x06, 0x16, 0x26,
525     0xE6, 0xF6, 0x07, 0x17, 0xE7, 0xF7, 0x09, 0x19, 0x29, 0xF9, 0x0A, 0x1A,
526     0x2A, 0xEA, 0xFA, 0x0B, 0x1B, 0xFB, 0x2C, 0x3C, 0xDC, 0xEC, 0xFC, 0x3D,
527     0x4D, 0xCD, 0xDD, 0x4E, 0x6E, 0x7E, 0xAE, 0xCE, 0x4F, 0x5F, 0x6F, 0x7F,
528     0x9F, 0xAF, 0xBF, 0xCF, 0x52, 0x72, 0xB2, 0x43, 0x53, 0x63, 0x73, 0x93,
529     0xA3, 0xB3, 0x44, 0x64, 0x74, 0x94, 0xA4, 0xB4, 0xC4, 0x25, 0x35, 0xA5,
530     0xC5, 0xD5, 0xE5, 0x36, 0x46, 0xB6, 0xC6, 0xD6, 0x27, 0x37, 0x47, 0xB7,
531     0xC7, 0xD7, 0x39, 0x49, 0x59, 0xC9, 0xD9, 0xE9, 0x3A, 0x4A, 0x5A, 0xCA,
532     0xDA, 0x2B, 0x3B, 0x4B, 0x6B, 0x7B, 0xDB, 0xEB, 0x4C, 0x5C, 0x6C, 0x7C,
533     0x9C, 0xAC, 0xCC, 0x5D, 0x6D, 0x7D, 0x9D, 0xAD, 0xBD, 0x5E, 0x9E, 0xBE,
534     0x54, 0x45, 0x55, 0x65, 0x75, 0x95, 0xB5, 0x56, 0x66, 0x76, 0x96, 0xA6,
535     0x57, 0x67, 0x97, 0xA7, 0x69, 0x79, 0xA9, 0xB9, 0x6A, 0x7A, 0x9A, 0xAA,
536     0xBA, 0x5B, 0x9B, 0xAB, 0xBB, 0xCB, 0xBC, 0x77, 0x99,
537     /* Table set A, code table 0, wordlen 6 - 16 entries */
538     0x01, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0D, 0x0E,
539     0x0A, 0x0B, 0x0C, 0x0F,
540     /* Table set A, code table 0, wordlen 7 - 63 entries */
541     0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x3D, 0x04, 0x05, 0x06, 0x3A, 0x3B,
542     0x3C, 0x07, 0x08, 0x09, 0x0A, 0x1A, 0x1B, 0x1C, 0x24, 0x25, 0x26, 0x36,
543     0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x19, 0x1D, 0x1E,
544     0x1F, 0x21, 0x22, 0x23, 0x27, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
545     0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x29, 0x2A, 0x2B, 0x2C, 0x2D,
546     0x2E, 0x18, 0x28,
547     /* Table set A, code table 1, wordlen 1 - 81 entries */
548     0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0xD0, 0x50, 0x70,
549     0xF0, 0xC4, 0x34, 0x4C, 0xCC, 0x1C, 0x41, 0xC1, 0x31, 0x05, 0x0D, 0x43,
550     0xC3, 0x13, 0x07, 0x0F, 0x44, 0x14, 0x74, 0xDC, 0x3C, 0x11, 0x1D, 0x33,
551     0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0x15, 0x35,
552     0x4D, 0xCD, 0xDD, 0x3D, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77, 0x3F, 0x51,
553     0x45, 0xC5, 0x55, 0x53, 0xF3, 0x4F, 0xCF, 0x1F, 0xFF, 0xD5, 0x75, 0xF5,
554     0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
555     /* Table set A, code table 1, wordlen 2 - 81 entries */
556     0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54, 0x01, 0x41, 0x11, 0x51,
557     0x05, 0x45, 0x15, 0x55, 0x90, 0x94, 0x58, 0x91, 0x95, 0x19, 0x59, 0x06,
558     0x46, 0x16, 0x56, 0x80, 0x60, 0x84, 0x24, 0x64, 0xA4, 0x08, 0x48, 0x18,
559     0x68, 0x81, 0x21, 0x61, 0xA1, 0x85, 0x25, 0x65, 0xA5, 0x09, 0x49, 0x99,
560     0x69, 0xA9, 0x02, 0x42, 0x12, 0x52, 0x96, 0x26, 0x66, 0x1A, 0x5A, 0x20,
561     0xA0, 0x88, 0x98, 0x28, 0xA8, 0x89, 0x29, 0x82, 0x92, 0x22, 0x62, 0x86,
562     0xA6, 0x0A, 0x4A, 0x9A, 0x6A, 0xAA, 0xA2, 0x8A, 0x2A,
563     /* Table set A, code table 1, wordlen 3 - 49 entries */
564     0x00, 0x08, 0x38, 0x01, 0x07, 0x39, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
565     0x02, 0x3A, 0x06, 0x0E, 0x3E, 0x17, 0x18, 0x28, 0x11, 0x29, 0x0A, 0x32,
566     0x03, 0x0B, 0x3B, 0x05, 0x0D, 0x3D, 0x16, 0x1F, 0x37, 0x19, 0x12, 0x1A,
567     0x2A, 0x13, 0x33, 0x15, 0x35, 0x1E, 0x2E, 0x36, 0x2F, 0x1B, 0x2B, 0x1D,
568     0x2D,
569     /* Table set A, code table 1, wordlen 4 - 121 entries */
570     0x00, 0x10, 0xF0, 0x01, 0x0F, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x11, 0x02,
571     0x0E, 0x30, 0x50, 0xB0, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x05, 0x0B,
572     0x0D, 0x1E, 0xFE, 0x2F, 0xEF, 0x40, 0xC0, 0x31, 0x51, 0xB1, 0xC1, 0xD1,
573     0x22, 0x52, 0xE2, 0x13, 0xF3, 0x04, 0x15, 0xF5, 0x1B, 0xEB, 0xFB, 0x0C,
574     0x1D, 0xFD, 0x2E, 0x5E, 0xEE, 0x3F, 0x5F, 0xBF, 0xDF, 0x41, 0x32, 0x42,
575     0xB2, 0xD2, 0x23, 0x53, 0xB3, 0xE3, 0x14, 0x24, 0xE4, 0xF4, 0x25, 0x35,
576     0xD5, 0xE5, 0x2B, 0x3B, 0xDB, 0x1C, 0x2C, 0xBC, 0xEC, 0xFC, 0x2D, 0xBD,
577     0xED, 0x3E, 0x4E, 0xBE, 0xDE, 0x4F, 0xCF, 0xC2, 0x33, 0x43, 0xC3, 0xD3,
578     0x34, 0x44, 0x54, 0xB4, 0xD4, 0x45, 0x55, 0xC5, 0x4B, 0xCB, 0x3C, 0x4C,
579     0x5C, 0xCC, 0xDC, 0x3D, 0x4D, 0x5D, 0xCD, 0xDD, 0xCE, 0xC4, 0xB5, 0x5B,
580     0xBB,
581     /* Table set A, code table 1, wordlen 5 - 225 entries */
582     0x00, 0x10, 0xF0, 0x01, 0x11, 0xF1, 0x0F, 0x1F, 0xFF, 0x20, 0xE0, 0x21,
583     0xE1, 0x02, 0x12, 0xF2, 0x0E, 0x1E, 0xFE, 0x2F, 0xEF, 0x30, 0xD0, 0x31,
584     0xD1, 0x22, 0xE2, 0x03, 0x13, 0xF3, 0x0D, 0x1D, 0xFD, 0x2E, 0xEE, 0x3F,
585     0xDF, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x41, 0xC1, 0x32, 0x42, 0xC2,
586     0xD2, 0x23, 0x33, 0xD3, 0xE3, 0x04, 0x14, 0x24, 0xE4, 0xF4, 0x06, 0x16,
587     0xF6, 0x07, 0x09, 0x0A, 0x1A, 0xFA, 0x0C, 0x1C, 0x2C, 0xEC, 0xFC, 0x2D,
588     0x3D, 0xDD, 0xED, 0x3E, 0x4E, 0xCE, 0xDE, 0x4F, 0xCF, 0x50, 0xB0, 0x51,
589     0x61, 0x71, 0x91, 0xA1, 0xB1, 0x52, 0x62, 0x72, 0x92, 0xA2, 0xB2, 0x43,
590     0x53, 0x63, 0x73, 0x93, 0xA3, 0xC3, 0x34, 0x44, 0x64, 0xA4, 0xC4, 0xD4,
591     0x05, 0x15, 0x25, 0x35, 0xD5, 0xE5, 0xF5, 0x26, 0x36, 0x46, 0xC6, 0xD6,
592     0xE6, 0x17, 0x27, 0x37, 0xC7, 0xD7, 0xE7, 0xF7, 0x19, 0x29, 0x39, 0xC9,
593     0xD9, 0xE9, 0xF9, 0x2A, 0x3A, 0x4A, 0x5A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B,
594     0x2B, 0x3B, 0xCB, 0xDB, 0xEB, 0xFB, 0x3C, 0x4C, 0x6C, 0x7C, 0x9C, 0xAC,
595     0xBC, 0xCC, 0xDC, 0x4D, 0x5D, 0x6D, 0x7D, 0x9D, 0xAD, 0xBD, 0xCD, 0x5E,
596     0x6E, 0x7E, 0x9E, 0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x9F, 0xAF, 0xBF, 0xB3,
597     0x54, 0x74, 0x94, 0xB4, 0x45, 0x55, 0x65, 0x75, 0x95, 0xA5, 0xB5, 0xC5,
598     0x56, 0x66, 0x76, 0x96, 0xA6, 0xB6, 0x47, 0x57, 0x67, 0xA7, 0xB7, 0x49,
599     0x59, 0x69, 0xA9, 0xB9, 0x6A, 0x7A, 0x9A, 0xAA, 0xBA, 0x4B, 0x5B, 0x6B,
600     0x7B, 0x9B, 0xAB, 0xBB, 0x5C, 0x77, 0x97, 0x79, 0x99,
601     /* Table set A, code table 1, wordlen 6 - 256 entries */
602     0x00, 0x01, 0x10, 0x11, 0x21, 0x12, 0x20, 0x31, 0x02, 0x22, 0x13, 0x30,
603     0x41, 0x32, 0x03, 0x23, 0x14, 0x24, 0x40, 0x51, 0x61, 0xD1, 0xE1, 0x42,
604     0x52, 0xD2, 0x33, 0x43, 0xD3, 0x04, 0x34, 0x05, 0x15, 0x25, 0x16, 0x1D,
605     0x2D, 0x1E, 0x2E, 0x50, 0x60, 0xD0, 0xE0, 0xF0, 0x71, 0x81, 0xF1, 0x62,
606     0x72, 0xE2, 0xF2, 0x53, 0x63, 0xE3, 0xF3, 0x44, 0x54, 0xD4, 0xE4, 0xF4,
607     0x35, 0x45, 0x55, 0xD5, 0xE5, 0xF5, 0x06, 0x26, 0x36, 0xD6, 0x07, 0x17,
608     0x27, 0x37, 0xD7, 0x18, 0x28, 0x1C, 0x0D, 0x3D, 0x4D, 0x5D, 0x6D, 0x8D,
609     0x0E, 0x3E, 0x4E, 0x5E, 0x0F, 0x1F, 0x2F, 0x3F, 0x5F, 0x70, 0x80, 0x90,
610     0xC0, 0x91, 0xA1, 0xB1, 0xC1, 0x82, 0x92, 0xA2, 0xC2, 0x73, 0x83, 0x93,
611     0xA3, 0xC3, 0x64, 0x74, 0x84, 0x94, 0xA4, 0xC4, 0x65, 0x75, 0x85, 0x46,
612     0x56, 0x66, 0xC6, 0xE6, 0xF6, 0x47, 0x57, 0xE7, 0xF7, 0x08, 0x38, 0x48,
613     0x58, 0x68, 0xD8, 0xE8, 0xF8, 0x09, 0x19, 0x29, 0x39, 0x59, 0xD9, 0xE9,
614     0xF9, 0x1A, 0x2A, 0x3A, 0xDA, 0xEA, 0xFA, 0x1B, 0x2B, 0xDB, 0xEB, 0xFB,
615     0x0C, 0x2C, 0x3C, 0xDC, 0xEC, 0x7D, 0x9D, 0xAD, 0xBD, 0xCD, 0x6E, 0x7E,
616     0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0x4F, 0x6F, 0x7F, 0x8F, 0xAF, 0xA0, 0xB2,
617     0xB3, 0xB4, 0x95, 0xA5, 0xB5, 0xC5, 0x76, 0x86, 0x96, 0xA6, 0xB6, 0x67,
618     0x77, 0x87, 0x97, 0xC7, 0x78, 0x88, 0x98, 0xC8, 0x49, 0x69, 0x79, 0x89,
619     0x99, 0xC9, 0x0A, 0x4A, 0x5A, 0x6A, 0x7A, 0xCA, 0x0B, 0x3B, 0x4B, 0x5B,
620     0x6B, 0xCB, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xFC,
621     0xDD, 0xED, 0xFD, 0xDE, 0xEE, 0xFE, 0x9F, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF,
622     0xB0, 0xA7, 0xB7, 0xA8, 0xB8, 0xA9, 0xB9, 0x8A, 0x9A, 0xAA, 0xBA, 0x7B,
623     0x8B, 0x9B, 0xAB, 0xBB,
624     /* Table set A, code table 1, wordlen 7 - 63 entries */
625     0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x04, 0x3B, 0x3C, 0x3D, 0x05, 0x06,
626     0x07, 0x08, 0x38, 0x39, 0x3A, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x1A,
627     0x1B, 0x24, 0x25, 0x26, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x0F, 0x10,
628     0x11, 0x12, 0x13, 0x14, 0x15, 0x19, 0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22,
629     0x23, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x16, 0x17, 0x18,
630     0x28, 0x29, 0x2A,
631     /* Table set A, code table 2, wordlen 1 - 81 entries */
632     0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0xD0, 0x70, 0x34,
633     0x1C, 0x0D, 0x13, 0x07, 0x50, 0xF0, 0x44, 0xC4, 0x14, 0x74, 0x4C, 0xCC,
634     0xDC, 0x3C, 0x41, 0xC1, 0x11, 0x31, 0x05, 0x1D, 0x43, 0xC3, 0x33, 0x37,
635     0x0F, 0x54, 0xF4, 0xFC, 0xD1, 0x71, 0x15, 0x4D, 0xCD, 0xDD, 0xD3, 0x73,
636     0x47, 0xC7, 0x77, 0x3F, 0xD4, 0x5C, 0x7C, 0x51, 0xF1, 0x45, 0xC5, 0x55,
637     0x35, 0x3D, 0x53, 0xF3, 0x17, 0x4F, 0xCF, 0x1F, 0xFF, 0x75, 0xF5, 0x5D,
638     0x7D, 0xD7, 0xF7, 0x5F, 0xDF, 0xD5, 0xFD, 0x57, 0x7F,
639     /* Table set A, code table 2, wordlen 2 - 25 entries */
640     0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x02, 0x06,
641     0x30, 0x11, 0x31, 0x0A, 0x3A, 0x0E, 0x17, 0x37, 0x32, 0x16, 0x3E, 0x12,
642     0x36,
643     /* Table set A, code table 2, wordlen 3 - 49 entries */
644     0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x30, 0x02,
645     0x3A, 0x06, 0x0E, 0x18, 0x28, 0x11, 0x31, 0x0A, 0x03, 0x05, 0x3E, 0x17,
646     0x37, 0x19, 0x29, 0x12, 0x2A, 0x32, 0x0B, 0x33, 0x3B, 0x0D, 0x15, 0x3D,
647     0x16, 0x1E, 0x36, 0x1F, 0x2F, 0x1A, 0x13, 0x1B, 0x2B, 0x1D, 0x2D, 0x35,
648     0x2E,
649     /* Table set A, code table 2, wordlen 4 - 6 entries */
650     0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
651     /* Table set A, code table 2, wordlen 5 - 8 entries */
652     0x01, 0x00, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
653     /* Table set A, code table 2, wordlen 6 - 256 entries */
654     0x00, 0x01, 0x11, 0x10, 0x21, 0x12, 0x22, 0x20, 0x30, 0x31, 0x41, 0x02,
655     0x32, 0x03, 0x13, 0x23, 0x33, 0x14, 0x24, 0x40, 0x51, 0x61, 0x42, 0x52,
656     0x43, 0x53, 0x04, 0x34, 0x44, 0x15, 0x25, 0x35, 0x16, 0x26, 0x50, 0x60,
657     0x71, 0x81, 0xD1, 0x62, 0x72, 0x82, 0xD2, 0x63, 0x73, 0xD3, 0x54, 0x64,
658     0x05, 0x45, 0x55, 0x65, 0x06, 0x36, 0x46, 0x56, 0x17, 0x27, 0x37, 0x47,
659     0x18, 0x28, 0x38, 0x19, 0x1D, 0x2D, 0x3D, 0x1E, 0x70, 0x80, 0x90, 0xD0,
660     0xE0, 0x91, 0xA1, 0xB1, 0xC1, 0xE1, 0xF1, 0x92, 0xA2, 0xC2, 0xE2, 0xF2,
661     0x83, 0x93, 0xA3, 0xC3, 0xE3, 0xF3, 0x74, 0x84, 0x94, 0xA4, 0xC4, 0xD4,
662     0xE4, 0xF4, 0x75, 0x85, 0x95, 0xD5, 0xE5, 0x66, 0x76, 0x86, 0xD6, 0xE6,
663     0x07, 0x57, 0x67, 0x77, 0xD7, 0x08, 0x48, 0x58, 0x68, 0xD8, 0x09, 0x29,
664     0x39, 0x49, 0x59, 0x69, 0x1A, 0x2A, 0x3A, 0x4A, 0x1B, 0x2B, 0x1C, 0x2C,
665     0x3C, 0x4C, 0x0D, 0x4D, 0x5D, 0x6D, 0x7D, 0x8D, 0x0E, 0x2E, 0x3E, 0x4E,
666     0x5E, 0x6E, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0xA0, 0xB0, 0xC0, 0xF0, 0xB2,
667     0xB3, 0xB4, 0xA5, 0xB5, 0xC5, 0xF5, 0x96, 0xA6, 0xB6, 0xC6, 0xF6, 0x87,
668     0x97, 0xA7, 0xB7, 0xC7, 0xE7, 0xF7, 0x78, 0x88, 0x98, 0xA8, 0xC8, 0xE8,
669     0xF8, 0x79, 0x89, 0x99, 0xC9, 0xD9, 0xE9, 0xF9, 0x0A, 0x5A, 0x6A, 0x7A,
670     0x8A, 0xDA, 0xEA, 0xFA, 0x0B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0xDB,
671     0x0C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xDC, 0x9D, 0xAD, 0xBD, 0xCD, 0x7E,
672     0x8E, 0x9E, 0xAE, 0xBE, 0x0F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xB8, 0xA9,
673     0xB9, 0x9A, 0xAA, 0xBA, 0xCA, 0x9B, 0xAB, 0xBB, 0xCB, 0xEB, 0xFB, 0xAC,
674     0xBC, 0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF,
675     0xCF, 0xDF, 0xEF, 0xFF,
676     /* Table set A, code table 2, wordlen 7 - 63 entries */
677     0x00, 0x02, 0x03, 0x01, 0x05, 0x06, 0x07, 0x09, 0x36, 0x37, 0x38, 0x3A,
678     0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x04, 0x08, 0x0A, 0x0B, 0x0C, 0x0E, 0x31,
679     0x34, 0x35, 0x39, 0x0D, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x16, 0x17, 0x19,
680     0x1A, 0x1E, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x32, 0x33, 0x14,
681     0x15, 0x18, 0x1B, 0x1C, 0x1D, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
682     0x28, 0x29, 0x2A,
683     /* Table set A, code table 3, wordlen 1 - 9 entries */
684     0x00, 0x04, 0x0C, 0x01, 0x03, 0x05, 0x0D, 0x07, 0x0F,
685     /* Table set A, code table 3, wordlen 2 - 81 entries */
686     0x00, 0x40, 0x01, 0x10, 0x04, 0x80, 0x50, 0x20, 0x14, 0x05, 0x02, 0x90,
687     0x60, 0x44, 0x54, 0x24, 0x08, 0x18, 0x41, 0x11, 0x15, 0x09, 0x06, 0xA0,
688     0x84, 0x94, 0x64, 0xA4, 0x48, 0x58, 0x28, 0x51, 0x21, 0x45, 0x55, 0x25,
689     0x19, 0x12, 0x16, 0x0A, 0x1A, 0x68, 0xA8, 0x81, 0x91, 0x61, 0xA1, 0x85,
690     0x95, 0x65, 0xA5, 0x49, 0x59, 0x29, 0x69, 0x42, 0x52, 0x46, 0x56, 0x2A,
691     0x88, 0x98, 0x89, 0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86, 0x26, 0x66,
692     0x4A, 0x5A, 0x6A, 0xA2, 0x96, 0xA6, 0x8A, 0x9A, 0xAA,
693     /* Table set A, code table 3, wordlen 3 - 256 entries */
694     0x00, 0x10, 0x40, 0x50, 0x04, 0x44, 0x14, 0x54, 0x01, 0x41, 0x11, 0x51,
695     0x05, 0x45, 0x15, 0x55, 0x90, 0x20, 0x94, 0x64, 0x18, 0x21, 0x95, 0x19,
696     0x69, 0x02, 0x52, 0x06, 0x46, 0x16, 0x80, 0x60, 0x84, 0xD4, 0x24, 0x08,
697     0x48, 0x58, 0x68, 0x81, 0x91, 0x61, 0x85, 0x25, 0x65, 0xA5, 0x09, 0x49,
698     0x59, 0x29, 0x42, 0x12, 0x56, 0x96, 0xA6, 0x0A, 0x17, 0x1B, 0xD0, 0xC4,
699     0x74, 0xF4, 0x88, 0xC8, 0x28, 0xA1, 0x71, 0xC5, 0xD5, 0x75, 0x99, 0xB9,
700     0x4D, 0x1D, 0x2D, 0x6D, 0x22, 0x62, 0x66, 0x4A, 0x1A, 0x9A, 0x6A, 0x8E,
701     0x5E, 0x43, 0x23, 0x07, 0x47, 0x57, 0x6B, 0xC0, 0xA0, 0xE0, 0x70, 0xB0,
702     0xA4, 0xE4, 0x34, 0xB4, 0x98, 0xD8, 0xA8, 0x38, 0x78, 0x0C, 0x4C, 0x1C,
703     0x5C, 0x9C, 0x6C, 0x7C, 0xC1, 0xD1, 0xE1, 0x31, 0xE5, 0x35, 0xB5, 0xF5,
704     0x89, 0xA9, 0x79, 0xF9, 0x0D, 0xCD, 0x9D, 0xDD, 0xAD, 0x3D, 0x7D, 0x82,
705     0xC2, 0x92, 0xD2, 0xE2, 0x72, 0xF2, 0x86, 0xD6, 0xE6, 0x76, 0xB6, 0x8A,
706     0x5A, 0xDA, 0xEA, 0xFA, 0x4E, 0x1E, 0x9E, 0xEE, 0x03, 0x13, 0x53, 0x97,
707     0xB7, 0x0B, 0x4B, 0x8B, 0x5B, 0x9B, 0xEB, 0x7B, 0x0F, 0x4F, 0x1F, 0x5F,
708     0x9F, 0x2F, 0x3F, 0xBF, 0xE8, 0xB8, 0xF8, 0x8C, 0x2C, 0x3C, 0xFC, 0xB1,
709     0xC9, 0xD9, 0xE9, 0x39, 0x5D, 0xED, 0xBD, 0xA2, 0x32, 0x26, 0x36, 0x2A,
710     0xAA, 0xBA, 0x0E, 0x2E, 0x6E, 0x83, 0xC3, 0x93, 0x63, 0xB3, 0xA7, 0x37,
711     0x30, 0xF0, 0xCC, 0xDC, 0xAC, 0xEC, 0xBC, 0xF1, 0x8D, 0xFD, 0xB2, 0xC6,
712     0xF6, 0xCA, 0x3A, 0x7A, 0xCE, 0xDE, 0xAE, 0x3E, 0x7E, 0xBE, 0xFE, 0xD3,
713     0xA3, 0xE3, 0x33, 0x73, 0xF3, 0x87, 0xC7, 0xD7, 0x27, 0x67, 0xE7, 0x77,
714     0xF7, 0xCB, 0xDB, 0x2B, 0xAB, 0x3B, 0xBB, 0xFB, 0x8F, 0xCF, 0xDF, 0x6F,
715     0xAF, 0xEF, 0x7F, 0xFF,
716     /* Table set A, code table 3, wordlen 4 - 6 entries */
717     0x01, 0x00, 0x02, 0x03, 0x04, 0x05,
718     /* Table set A, code table 3, wordlen 5 - 225 entries */
719     0x00, 0xF0, 0x0F, 0x10, 0x01, 0xFF, 0x20, 0xE0, 0x11, 0xF1, 0x0E, 0x1F,
720     0x30, 0x40, 0xD0, 0x21, 0xE1, 0x02, 0x12, 0x22, 0xE2, 0xF2, 0x03, 0x13,
721     0x1E, 0x2E, 0x3E, 0xEE, 0xFE, 0x2F, 0xEF, 0xD2, 0x43, 0xF3, 0x04, 0x0D,
722     0x2D, 0x3D, 0x3F, 0xDF, 0x50, 0x60, 0x70, 0x90, 0xB0, 0x31, 0x41, 0x91,
723     0xA1, 0xC1, 0xD1, 0x42, 0xA2, 0xC2, 0x23, 0x33, 0xE3, 0x24, 0x34, 0xB4,
724     0xD4, 0xF4, 0x05, 0x15, 0x45, 0xE5, 0x16, 0x36, 0x56, 0xA6, 0xC6, 0xD6,
725     0xF6, 0x57, 0xC7, 0xF7, 0x09, 0x29, 0x49, 0x59, 0x69, 0xF9, 0x0A, 0x2A,
726     0x3A, 0x4A, 0xDA, 0xEA, 0xFA, 0x0B, 0x2B, 0xAB, 0xEB, 0xFB, 0x0C, 0x1C,
727     0x2C, 0x3C, 0x4C, 0x5C, 0xCC, 0xDC, 0xFC, 0x1D, 0x4D, 0x6D, 0xBD, 0xCD,
728     0xED, 0xFD, 0x4E, 0x6E, 0xCE, 0xDE, 0x7F, 0xA0, 0xC0, 0x51, 0x61, 0x71,
729     0xB1, 0x32, 0x52, 0x62, 0x72, 0x92, 0xB2, 0x53, 0x63, 0x73, 0x93, 0xA3,
730     0xB3, 0xC3, 0xD3, 0x14, 0x44, 0x54, 0x64, 0x74, 0x94, 0xA4, 0xC4, 0xE4,
731     0x25, 0x35, 0x55, 0x65, 0x75, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xF5, 0x06,
732     0x26, 0x46, 0x66, 0x76, 0x96, 0xB6, 0xE6, 0x07, 0x17, 0x27, 0x37, 0x47,
733     0x67, 0x77, 0x97, 0xA7, 0xB7, 0xD7, 0xE7, 0x19, 0x39, 0x79, 0x99, 0xA9,
734     0xB9, 0xC9, 0xD9, 0xE9, 0x1A, 0x5A, 0x6A, 0x7A, 0x9A, 0xAA, 0xBA, 0xCA,
735     0x1B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x9B, 0xBB, 0xCB, 0xDB, 0x6C, 0x7C,
736     0x9C, 0xAC, 0xBC, 0xEC, 0x5D, 0x7D, 0x9D, 0xAD, 0xDD, 0x5E, 0x7E, 0x9E,
737     0xAE, 0xBE, 0x4F, 0x5F, 0x6F, 0x9F, 0xAF, 0xBF, 0xCF,
738     /* Table set A, code table 3, wordlen 6 - 256 entries */
739     0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x22, 0x31, 0x41, 0x32,
740     0x13, 0x23, 0x30, 0x40, 0x51, 0x42, 0x03, 0x33, 0x43, 0x04, 0x14, 0x24,
741     0x34, 0x15, 0x25, 0x50, 0x61, 0x71, 0xD1, 0x52, 0x62, 0x72, 0xD2, 0x53,
742     0x63, 0xD3, 0x44, 0x54, 0x64, 0x05, 0x35, 0x45, 0x55, 0x16, 0x26, 0x36,
743     0x46, 0x17, 0x27, 0x1D, 0x2D, 0x3D, 0x60, 0x70, 0xD0, 0x81, 0x91, 0xA1,
744     0xC1, 0xE1, 0xF1, 0x82, 0x92, 0xC2, 0xE2, 0xF2, 0x73, 0x83, 0xE3, 0xF3,
745     0x74, 0x84, 0xC4, 0xD4, 0xE4, 0xF4, 0x65, 0x75, 0x85, 0xD5, 0xE5, 0x06,
746     0x56, 0x66, 0xD6, 0xE6, 0x07, 0x37, 0x47, 0x57, 0x67, 0xD7, 0xE7, 0x18,
747     0x28, 0x38, 0x48, 0x58, 0xD8, 0x19, 0x29, 0x2A, 0x1C, 0x2C, 0x0D, 0x4D,
748     0x5D, 0x6D, 0x7D, 0x8D, 0x9D, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
749     0x1F, 0x2F, 0x3F, 0x80, 0x90, 0xA0, 0xC0, 0xE0, 0xF0, 0xB1, 0xA2, 0xB2,
750     0x93, 0xA3, 0xB3, 0xC3, 0x94, 0xA4, 0xB4, 0x95, 0xA5, 0xB5, 0xC5, 0xF5,
751     0x76, 0x86, 0x96, 0xA6, 0xC6, 0xF6, 0x77, 0x87, 0x97, 0xA7, 0xC7, 0xF7,
752     0x08, 0x68, 0x78, 0x88, 0x98, 0xC8, 0xE8, 0xF8, 0x09, 0x39, 0x49, 0x59,
753     0x69, 0x79, 0x89, 0xD9, 0xE9, 0xF9, 0x0A, 0x1A, 0x3A, 0x4A, 0x5A, 0x6A,
754     0xDA, 0xEA, 0xFA, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0xDB, 0xEB, 0xFB, 0x0C,
755     0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xDC, 0xEC, 0xAD, 0xBD, 0xCD,
756     0xDD, 0xED, 0x0E, 0x8E, 0x9E, 0xAE, 0xBE, 0x0F, 0x4F, 0x5F, 0x6F, 0x7F,
757     0x8F, 0x9F, 0xAF, 0xB0, 0xB6, 0xB7, 0xA8, 0xB8, 0x99, 0xA9, 0xB9, 0xC9,
758     0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0x0B, 0x6B, 0x7B, 0x8B, 0x9B, 0xCB,
759     0xAC, 0xBC, 0xCC, 0xFC, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF, 0xCF, 0xDF,
760     0xEF, 0xFF, 0xAB, 0xBB,
761     /* Table set A, code table 3, wordlen 7 - 63 entries */
762     0x00, 0x01, 0x02, 0x03, 0x3D, 0x3E, 0x3F, 0x04, 0x05, 0x06, 0x3A, 0x3B,
763     0x3C, 0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D,
764     0x0E, 0x0F, 0x10, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x23, 0x24, 0x25,
765     0x26, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x11, 0x12, 0x13, 0x14, 0x15,
766     0x16, 0x17, 0x18, 0x1F, 0x21, 0x22, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
767     0x2D, 0x2E, 0x2F,
768     /* Table set A, code table 4, wordlen 1 - 81 entries */
769     0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0x50, 0xD0, 0x70,
770     0xF0, 0xC4, 0x34, 0x4C, 0xCC, 0x1C, 0x41, 0xC1, 0x31, 0x05, 0x0D, 0x43,
771     0xC3, 0x13, 0x07, 0x0F, 0x44, 0x14, 0x74, 0xDC, 0x3C, 0x11, 0x1D, 0x33,
772     0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0xC5, 0x15,
773     0x35, 0x4D, 0xCD, 0xDD, 0x3D, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77, 0x1F,
774     0x3F, 0x51, 0x45, 0x55, 0xD5, 0x75, 0xF5, 0x5D, 0x7D, 0xFD, 0x53, 0xF3,
775     0x57, 0xD7, 0xF7, 0x4F, 0xCF, 0x5F, 0xDF, 0x7F, 0xFF,
776     /* Table set A, code table 4, wordlen 2 - 81 entries */
777     0x00, 0x40, 0x01, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
778     0x05, 0x45, 0x15, 0x55, 0x59, 0x80, 0x90, 0x20, 0x60, 0x84, 0x94, 0x24,
779     0x64, 0x08, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x61, 0x85, 0x95, 0x25,
780     0x65, 0x09, 0x49, 0x19, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56,
781     0xA0, 0xA4, 0x68, 0xA1, 0xA5, 0x99, 0x29, 0x69, 0x96, 0x66, 0x4A, 0x1A,
782     0x5A, 0x88, 0x98, 0x28, 0x89, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86, 0x26,
783     0xA6, 0x0A, 0x9A, 0x2A, 0x6A, 0xA8, 0xA2, 0x8A, 0xAA,
784     /* Table set A, code table 4, wordlen 3 - 7 entries */
785     0x00, 0x07, 0x01, 0x02, 0x06, 0x03, 0x05,
786     /* Table set A, code table 4, wordlen 4 - 121 entries */
787     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x21,
788     0xE1, 0x02, 0x12, 0xF2, 0x0E, 0x1E, 0xFE, 0x2F, 0xEF, 0x30, 0x50, 0xD0,
789     0xD1, 0x22, 0xE2, 0x03, 0x13, 0xF3, 0x0D, 0x1D, 0x2D, 0xFD, 0x2E, 0xEE,
790     0x3F, 0xDF, 0x40, 0xB0, 0xC0, 0x31, 0x41, 0x51, 0xB1, 0xC1, 0x32, 0xB2,
791     0xC2, 0xD2, 0x23, 0xB3, 0xD3, 0xE3, 0x04, 0x14, 0xE4, 0xF4, 0x05, 0x15,
792     0xD5, 0xE5, 0xF5, 0x0B, 0x1B, 0x2B, 0x3B, 0xEB, 0xFB, 0x0C, 0x1C, 0x2C,
793     0xFC, 0x3D, 0x5D, 0xED, 0x3E, 0x4E, 0x5E, 0xBE, 0xDE, 0x4F, 0x5F, 0xBF,
794     0xCF, 0x42, 0x52, 0x33, 0x53, 0xC3, 0x24, 0xB4, 0xD4, 0x25, 0x35, 0xC5,
795     0x4B, 0xCB, 0xDB, 0x3C, 0x4C, 0x5C, 0xDC, 0xEC, 0x4D, 0xBD, 0xCD, 0xDD,
796     0xCE, 0x43, 0x34, 0x44, 0x54, 0xC4, 0x45, 0x55, 0xB5, 0x5B, 0xBB, 0xBC,
797     0xCC,
798     /* Table set A, code table 4, wordlen 5 - 8 entries */
799     0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x06, 0x07,
800     /* Table set A, code table 4, wordlen 6 - 256 entries */
801     0x02, 0x00, 0x30, 0x21, 0x31, 0x41, 0x61, 0x12, 0x22, 0x42, 0x62, 0x43,
802     0x53, 0x24, 0x45, 0x26, 0x27, 0x10, 0x40, 0xB0, 0x01, 0x11, 0x81, 0x32,
803     0x52, 0x72, 0x92, 0x03, 0x13, 0x33, 0x63, 0x14, 0x34, 0x54, 0x64, 0x74,
804     0x05, 0x15, 0x25, 0x35, 0x55, 0x65, 0x06, 0x46, 0x56, 0x57, 0x67, 0x88,
805     0x20, 0x51, 0x91, 0xD1, 0xF2, 0x23, 0x83, 0x93, 0x04, 0x44, 0x84, 0x94,
806     0x75, 0x85, 0xC5, 0x36, 0x66, 0x96, 0xB6, 0x07, 0x37, 0x97, 0x08, 0x28,
807     0x38, 0x48, 0x68, 0x09, 0x69, 0x79, 0x0A, 0x2A, 0x1B, 0x9B, 0x2C, 0x4D,
808     0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 0xC0, 0xD0, 0xE0, 0xF0, 0x71, 0xA1,
809     0xB1, 0xC1, 0xE1, 0xF1, 0x82, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0x73, 0xA3,
810     0xB3, 0xC3, 0xD3, 0xE3, 0xF3, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4, 0x95,
811     0xA5, 0xB5, 0xD5, 0xE5, 0xF5, 0x16, 0x76, 0x86, 0xA6, 0xC6, 0xD6, 0xE6,
812     0xF6, 0x17, 0x47, 0x77, 0x87, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7, 0x18,
813     0x58, 0x78, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8, 0x19, 0x29, 0x39,
814     0x49, 0x59, 0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9, 0x1A, 0x3A,
815     0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
816     0x0B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0x8B, 0xAB, 0xBB, 0xCB, 0xDB,
817     0xEB, 0xFB, 0x0C, 0x1C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0x9C, 0xAC,
818     0xBC, 0xCC, 0xDC, 0xEC, 0xFC, 0x0D, 0x1D, 0x2D, 0x3D, 0x5D, 0x6D, 0x7D,
819     0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD, 0x0E, 0x1E, 0x2E, 0x3E,
820     0x4E, 0x5E, 0x6E, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
821     0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xBF,
822     0xCF, 0xDF, 0xEF, 0xFF,
823     /* Table set A, code table 4, wordlen 7 - 63 entries */
824     0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x06, 0x08, 0x36, 0x38,
825     0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x07, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
826     0x35, 0x37, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x24, 0x25, 0x27,
827     0x2A, 0x34, 0x16, 0x19, 0x1C, 0x23, 0x26, 0x28, 0x29, 0x2B, 0x2D, 0x2E,
828     0x2F, 0x30, 0x31, 0x32, 0x33, 0x17, 0x18, 0x1A, 0x1B, 0x1D, 0x1E, 0x1F,
829     0x21, 0x22, 0x2C,
830     /* Table set A, code table 5, wordlen 1 - 81 entries */
831     0x00, 0x40, 0xC0, 0x30, 0x04, 0x01, 0x03, 0x10, 0x0C, 0xD0, 0x70, 0x34,
832     0x1C, 0x0D, 0x07, 0x50, 0xF0, 0x44, 0xC4, 0x14, 0x4C, 0xCC, 0x3C, 0x41,
833     0xC1, 0x11, 0x31, 0x05, 0x43, 0xC3, 0x13, 0x33, 0x0F, 0x74, 0xDC, 0x1D,
834     0x37, 0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0xFC, 0xD1, 0x71, 0xF1, 0xC5, 0x15,
835     0x35, 0x4D, 0xCD, 0xDD, 0x3D, 0x53, 0xD3, 0x73, 0x47, 0xC7, 0x17, 0x77,
836     0x4F, 0x1F, 0x3F, 0x51, 0x45, 0x55, 0xF3, 0xCF, 0xFF, 0xD5, 0x75, 0xF5,
837     0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
838     /* Table set A, code table 5, wordlen 2 - 25 entries */
839     0x00, 0x08, 0x38, 0x01, 0x07, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x02, 0x06,
840     0x30, 0x11, 0x31, 0x0A, 0x3A, 0x0E, 0x17, 0x37, 0x32, 0x16, 0x3E, 0x12,
841     0x36,
842     /* Table set A, code table 5, wordlen 3 - 7 entries */
843     0x00, 0x01, 0x02, 0x06, 0x07, 0x03, 0x05,
844     /* Table set A, code table 5, wordlen 4 - 121 entries */
845     0x00, 0x01, 0x0F, 0x1F, 0x10, 0xE0, 0xF0, 0x11, 0xF1, 0x2F, 0xFF, 0x20,
846     0x21, 0xE1, 0x02, 0x12, 0xF2, 0x03, 0xF3, 0x0E, 0x2E, 0xFE, 0x3F, 0x30,
847     0x40, 0xD0, 0xC1, 0xD1, 0x22, 0xC2, 0x33, 0xE3, 0x0C, 0xCC, 0x0D, 0x1D,
848     0x2D, 0xFD, 0x1E, 0x3E, 0x5E, 0xEF, 0xC0, 0x52, 0xB2, 0xD2, 0x43, 0xC3,
849     0xD3, 0x24, 0x45, 0xF5, 0x4B, 0x5B, 0xFB, 0x1C, 0x3D, 0xBD, 0xDD, 0xEE,
850     0xBF, 0xCF, 0xDF, 0x50, 0xB0, 0x31, 0x41, 0x51, 0xB1, 0x32, 0x42, 0xE2,
851     0x13, 0x23, 0x53, 0xB3, 0x04, 0x14, 0x34, 0x44, 0x54, 0xB4, 0xC4, 0xD4,
852     0xE4, 0xF4, 0x05, 0x15, 0x25, 0x35, 0x55, 0xB5, 0xC5, 0xD5, 0xE5, 0x0B,
853     0x1B, 0x2B, 0x3B, 0xBB, 0xCB, 0xDB, 0xEB, 0x2C, 0x3C, 0x4C, 0x5C, 0xBC,
854     0xDC, 0xEC, 0xFC, 0x4D, 0x5D, 0xCD, 0xED, 0x4E, 0xBE, 0xCE, 0xDE, 0x4F,
855     0x5F,
856     /* Table set A, code table 5, wordlen 5 - 8 entries */
857     0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x04, 0x05,
858     /* Table set A, code table 5, wordlen 6 - 31 entries */
859     0x04, 0x00, 0x01, 0x02, 0x03, 0x1C, 0x1D, 0x1E, 0x1F, 0x05, 0x06, 0x07,
860     0x18, 0x19, 0x1B, 0x08, 0x09, 0x0E, 0x13, 0x15, 0x16, 0x17, 0x1A, 0x0A,
861     0x0B, 0x0C, 0x0D, 0x0F, 0x11, 0x12, 0x14,
862     /* Table set A, code table 5, wordlen 7 - 63 entries */
863     0x00, 0x01, 0x02, 0x3D, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x06, 0x3A, 0x3B,
864     0x3C, 0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x0B, 0x0C, 0x0D,
865     0x0E, 0x0F, 0x1A, 0x1B, 0x1C, 0x24, 0x25, 0x26, 0x31, 0x32, 0x33, 0x34,
866     0x35, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x17, 0x18, 0x19, 0x1D, 0x1E,
867     0x1F, 0x21, 0x22, 0x23, 0x27, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x16,
868     0x28, 0x29, 0x2A,
869     /* Table set A, code table 6, wordlen 1 - 81 entries */
870     0x00, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x03, 0x70, 0x50, 0xD0,
871     0xF0, 0x44, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0x31, 0x05, 0x0D, 0x13,
872     0x07, 0x0F, 0x74, 0xCC, 0xDC, 0xFC, 0x41, 0xC1, 0x11, 0x43, 0xC3, 0x33,
873     0x54, 0xD4, 0xF4, 0x5C, 0x7C, 0x51, 0xD1, 0x71, 0xF1, 0x45, 0xC5, 0x15,
874     0x35, 0x4D, 0xCD, 0x1D, 0x3D, 0x53, 0xD3, 0x73, 0xF3, 0x47, 0xC7, 0x17,
875     0x37, 0x4F, 0xCF, 0x1F, 0x3F, 0x55, 0xD5, 0x75, 0xF5, 0x5D, 0xDD, 0xFD,
876     0x57, 0xD7, 0x77, 0xF7, 0xFF, 0x7D, 0x5F, 0xDF, 0x7F,
877     /* Table set A, code table 6, wordlen 2 - 25 entries */
878     0x00, 0x08, 0x38, 0x01, 0x07, 0x39, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
879     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x37, 0x11, 0x0A, 0x32, 0x16, 0x3E, 0x12,
880     0x36,
881     /* Table set A, code table 6, wordlen 3 - 256 entries */
882     0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x01, 0x41, 0x05, 0x45, 0x55,
883     0x54, 0x11, 0x51, 0x15, 0x80, 0x90, 0x60, 0x24, 0x64, 0xA4, 0x48, 0x61,
884     0x95, 0x25, 0xA5, 0x02, 0x42, 0x52, 0x16, 0x56, 0x20, 0x84, 0x94, 0x18,
885     0x58, 0x81, 0x91, 0x85, 0x65, 0x09, 0x49, 0x19, 0x59, 0x99, 0x29, 0x69,
886     0x79, 0x5D, 0x12, 0x62, 0x06, 0x46, 0x86, 0x66, 0x1A, 0x5A, 0x6A, 0x47,
887     0x17, 0xC0, 0xA0, 0xE0, 0xC4, 0xD4, 0x74, 0x08, 0x78, 0x0C, 0x4C, 0x1C,
888     0x5C, 0xD1, 0x21, 0xE1, 0x71, 0xC5, 0xE5, 0x75, 0xB5, 0x89, 0xBD, 0x92,
889     0x22, 0x96, 0xA6, 0x36, 0x0A, 0x4A, 0x8A, 0x9A, 0x2A, 0x7A, 0xDE, 0x6E,
890     0x43, 0x13, 0x53, 0x23, 0x07, 0x77, 0x4B, 0x1B, 0x9B, 0x6B, 0x2F, 0xD0,
891     0x30, 0x70, 0xE4, 0x34, 0xF4, 0xC8, 0x98, 0x28, 0x68, 0xA8, 0xE8, 0x38,
892     0xB8, 0xF8, 0x9C, 0x2C, 0x6C, 0x7C, 0xA1, 0xB1, 0xD5, 0x35, 0xC9, 0xD9,
893     0xA9, 0xE9, 0x39, 0xB9, 0xF9, 0xCD, 0x1D, 0x2D, 0xAD, 0x7D, 0xC2, 0xD2,
894     0xA2, 0xB2, 0xF2, 0xC6, 0x26, 0x76, 0xB6, 0xDA, 0xAA, 0xEA, 0x3A, 0xFA,
895     0x0E, 0x4E, 0x2E, 0x7E, 0xBE, 0xFE, 0x03, 0x83, 0x63, 0xA3, 0xB3, 0x87,
896     0x57, 0x97, 0xD7, 0x27, 0x0B, 0x8B, 0x5B, 0x2B, 0xAB, 0xCF, 0x1F, 0x9F,
897     0x7F, 0xBF, 0xB0, 0xF0, 0xB4, 0x88, 0xD8, 0x8C, 0xCC, 0xDC, 0xAC, 0xEC,
898     0x3C, 0xBC, 0xFC, 0xC1, 0x31, 0xF1, 0xF5, 0x0D, 0x4D, 0x8D, 0x9D, 0xDD,
899     0x6D, 0xED, 0x3D, 0xFD, 0x82, 0xE2, 0x32, 0x72, 0xD6, 0xE6, 0xF6, 0xCA,
900     0xBA, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xAE, 0xEE, 0x3E, 0xC3, 0x93, 0xD3,
901     0xE3, 0x33, 0x73, 0xF3, 0xC7, 0x67, 0xA7, 0xE7, 0x37, 0xB7, 0xF7, 0xCB,
902     0xDB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB, 0x0F, 0x4F, 0x8F, 0x5F, 0xDF, 0x6F,
903     0xAF, 0xEF, 0x3F, 0xFF,
904     /* Table set A, code table 6, wordlen 4 - 121 entries */
905     0x00, 0x10, 0x20, 0xE0, 0xF0, 0x02, 0x0E, 0xEF, 0x30, 0x01, 0x11, 0x21,
906     0x31, 0xF1, 0x12, 0xF2, 0x1E, 0xEE, 0xDF, 0xFF, 0x40, 0xC0, 0xD0, 0xD1,
907     0xE1, 0x22, 0x32, 0x42, 0xD2, 0xE2, 0x03, 0x13, 0x23, 0xB3, 0xC3, 0xE3,
908     0xF3, 0xE4, 0x05, 0xF5, 0x2B, 0x0C, 0xFC, 0x1D, 0x2D, 0xBD, 0xDD, 0xFD,
909     0x2E, 0x4E, 0xDE, 0xFE, 0x0F, 0x1F, 0x2F, 0x3F, 0x50, 0xB0, 0x41, 0x51,
910     0xB1, 0xC1, 0x52, 0xB2, 0xC2, 0x33, 0x43, 0x53, 0xD3, 0x04, 0x14, 0x24,
911     0x34, 0x44, 0x54, 0xB4, 0xC4, 0xD4, 0xF4, 0x15, 0x25, 0x35, 0x45, 0x55,
912     0xB5, 0xC5, 0xD5, 0xE5, 0x0B, 0x1B, 0x3B, 0x4B, 0x5B, 0xBB, 0xCB, 0xDB,
913     0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0xBC, 0xCC, 0xDC, 0xEC, 0x0D,
914     0x3D, 0x4D, 0x5D, 0xCD, 0xED, 0x3E, 0x5E, 0xBE, 0xCE, 0x4F, 0xCF, 0x5F,
915     0xBF,
916     /* Table set A, code table 6, wordlen 5 - 15 entries */
917     0x00, 0x01, 0x0F, 0x0E, 0x02, 0x03, 0x0D, 0x04, 0x06, 0x0A, 0x0C, 0x05,
918     0x07, 0x09, 0x0B,
919     /* Table set A, code table 6, wordlen 6 - 31 entries */
920     0x00, 0x01, 0x1F, 0x02, 0x1E, 0x03, 0x04, 0x0F, 0x11, 0x1C, 0x1D, 0x05,
921     0x06, 0x07, 0x08, 0x18, 0x19, 0x1A, 0x1B, 0x09, 0x0A, 0x0B, 0x15, 0x16,
922     0x17, 0x0C, 0x13, 0x14, 0x0D, 0x0E, 0x12,
923     /* Table set A, code table 6, wordlen 7 - 63 entries */
924     0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
925     0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1A, 0x26, 0x34,
926     0x35, 0x36, 0x37, 0x38, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x19, 0x1B,
927     0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x27, 0x2D, 0x2E,
928     0x2F, 0x30, 0x31, 0x32, 0x33, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29,
929     0x2A, 0x2B, 0x2C,
930     /* Table set A, code table 7, wordlen 1 - 4 entries */
931     0x00, 0x01, 0x02, 0x03,
932     /* Table set A, code table 7, wordlen 2 - 81 entries */
933     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x05,
934     0x15, 0x51, 0x45, 0x55, 0x80, 0x90, 0x20, 0x64, 0x08, 0x19, 0x02, 0x06,
935     0x60, 0x84, 0x94, 0x24, 0x48, 0x18, 0x58, 0x81, 0x91, 0x21, 0x61, 0x85,
936     0x95, 0x25, 0x65, 0x09, 0x49, 0x59, 0x42, 0x12, 0x52, 0x46, 0x16, 0x56,
937     0xA0, 0xA4, 0x98, 0x28, 0x68, 0xA1, 0xA5, 0x99, 0x29, 0x69, 0x96, 0x26,
938     0x66, 0x0A, 0x4A, 0x1A, 0x5A, 0x88, 0xA8, 0x89, 0xA9, 0x82, 0x92, 0x22,
939     0x62, 0x86, 0xA6, 0x2A, 0x6A, 0xA2, 0x8A, 0x9A, 0xAA,
940     /* Table set A, code table 7, wordlen 3 - 49 entries */
941     0x00, 0x08, 0x38, 0x01, 0x39, 0x07, 0x0F, 0x09, 0x3F, 0x10, 0x30, 0x31,
942     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x32, 0x0D, 0x16, 0x3E, 0x37,
943     0x18, 0x28, 0x19, 0x29, 0x12, 0x2A, 0x03, 0x3B, 0x05, 0x15, 0x1E, 0x1F,
944     0x2F, 0x1A, 0x0B, 0x2B, 0x33, 0x35, 0x3D, 0x2E, 0x36, 0x13, 0x1B, 0x1D,
945     0x2D,
946     /* Table set A, code table 7, wordlen 4 - 121 entries */
947     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
948     0xF2, 0x0E, 0x21, 0xE1, 0x12, 0xE2, 0x1E, 0x2E, 0xFE, 0x2F, 0xEF, 0x30,
949     0x50, 0xB0, 0xC0, 0xD0, 0x31, 0xB1, 0xD1, 0x22, 0xD2, 0x03, 0x13, 0xE3,
950     0xF3, 0xF4, 0x05, 0xE5, 0xF5, 0x0B, 0x1B, 0x0C, 0x0D, 0x1D, 0x2D, 0xFD,
951     0x3E, 0xEE, 0x3F, 0x5F, 0xDF, 0x40, 0x41, 0x51, 0xC1, 0x32, 0x42, 0x52,
952     0xB2, 0xC2, 0x23, 0x33, 0xB3, 0xC3, 0xD3, 0x04, 0x14, 0x24, 0xD4, 0xE4,
953     0x15, 0x25, 0xC5, 0xD5, 0x2B, 0x3B, 0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x5C,
954     0xEC, 0xFC, 0x3D, 0x5D, 0xDD, 0xED, 0x4E, 0x5E, 0xBE, 0xCE, 0xDE, 0x4F,
955     0xBF, 0xCF, 0x43, 0x53, 0x34, 0x54, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0xB5,
956     0x4B, 0x5B, 0xCB, 0xDB, 0x4C, 0xBC, 0xCC, 0xDC, 0x4D, 0xBD, 0xCD, 0x44,
957     0xBB,
958     /* Table set A, code table 7, wordlen 5 - 15 entries */
959     0x00, 0x01, 0x0E, 0x0F, 0x02, 0x03, 0x0D, 0x04, 0x06, 0x0A, 0x0C, 0x05,
960     0x07, 0x09, 0x0B,
961     /* Table set A, code table 7, wordlen 6 - 256 entries */
962     0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x41, 0x22,
963     0x03, 0x13, 0x23, 0x14, 0x40, 0x51, 0x61, 0x32, 0x42, 0x33, 0x04, 0x24,
964     0x15, 0x16, 0x50, 0x60, 0xD0, 0x71, 0x81, 0xD1, 0xE1, 0xF1, 0x52, 0x62,
965     0x72, 0xD2, 0x43, 0x53, 0x63, 0xD3, 0x34, 0x44, 0x54, 0x05, 0x25, 0x35,
966     0x45, 0x06, 0x26, 0x36, 0x17, 0x27, 0x18, 0x0D, 0x1D, 0x2D, 0x3D, 0x1E,
967     0x2E, 0x1F, 0x70, 0x80, 0xE0, 0xF0, 0x91, 0xA1, 0xC1, 0x82, 0x92, 0xC2,
968     0xE2, 0xF2, 0x73, 0x83, 0x93, 0xE3, 0xF3, 0x64, 0x74, 0x84, 0xD4, 0xE4,
969     0xF4, 0x55, 0x65, 0xD5, 0xE5, 0xF5, 0x46, 0x56, 0x66, 0xD6, 0x07, 0x37,
970     0x47, 0x57, 0x08, 0x28, 0x38, 0x48, 0x19, 0x29, 0x39, 0x1A, 0x2A, 0x1B,
971     0x1C, 0x2C, 0x3C, 0x4D, 0x5D, 0x6D, 0x0E, 0x3E, 0x4E, 0x5E, 0x0F, 0x2F,
972     0x3F, 0x4F, 0x90, 0xA0, 0xB0, 0xC0, 0xB1, 0xA2, 0xB2, 0xA3, 0xB3, 0xC3,
973     0x94, 0xA4, 0xB4, 0xC4, 0x75, 0x85, 0x95, 0xA5, 0xC5, 0x76, 0x86, 0x96,
974     0xE6, 0xF6, 0x67, 0x77, 0x87, 0xD7, 0xE7, 0xF7, 0x58, 0x68, 0x78, 0x88,
975     0xD8, 0xE8, 0xF8, 0x09, 0x49, 0x59, 0x69, 0xD9, 0xE9, 0xF9, 0x0A, 0x3A,
976     0x4A, 0x5A, 0xDA, 0xEA, 0x0B, 0x2B, 0x3B, 0x4B, 0xDB, 0x0C, 0x4C, 0x5C,
977     0x6C, 0xDC, 0x7D, 0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0x6E, 0x7E, 0x8E, 0x9E,
978     0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xAF, 0xB5, 0xA6, 0xB6, 0xC6,
979     0x97, 0xA7, 0xC7, 0x98, 0xA8, 0xB8, 0xC8, 0x79, 0x89, 0x99, 0xA9, 0xB9,
980     0xC9, 0x6A, 0x7A, 0x8A, 0x9A, 0xAA, 0xCA, 0xFA, 0x5B, 0x6B, 0x7B, 0x8B,
981     0xCB, 0xEB, 0xFB, 0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xEC, 0xFC, 0xDD, 0xED,
982     0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xBF, 0xCF, 0xDF, 0xB7, 0xBA, 0x9B, 0xAB,
983     0xBB, 0xCC, 0xEF, 0xFF,
984     /* Table set B, code table 0, wordlen 1 - 81 entries */
985     0x00, 0x01, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x50, 0xD0, 0x70,
986     0xF0, 0x34, 0x1C, 0x05, 0x0D, 0x13, 0x07, 0x0F, 0x44, 0xC4, 0x14, 0x4C,
987     0xCC, 0x3C, 0x41, 0xC1, 0x11, 0x31, 0x43, 0xC3, 0x33, 0x54, 0x74, 0xDC,
988     0xFC, 0x71, 0x15, 0x4D, 0x1D, 0xD3, 0xC7, 0x37, 0x3F, 0xD4, 0xF4, 0x5C,
989     0x7C, 0x51, 0xD1, 0xF1, 0x45, 0xC5, 0x55, 0x35, 0xCD, 0xDD, 0x3D, 0x53,
990     0x73, 0xF3, 0x47, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0xFF, 0xF5, 0x7D, 0xD7,
991     0x5F, 0xD5, 0x75, 0x5D, 0xFD, 0x57, 0xF7, 0xDF, 0x7F,
992     /* Table set B, code table 0, wordlen 2 - 81 entries */
993     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x05,
994     0x15, 0x80, 0x51, 0x45, 0x55, 0x90, 0x20, 0x60, 0x24, 0x08, 0x18, 0x09,
995     0x02, 0x06, 0x84, 0x94, 0x64, 0x48, 0x58, 0x81, 0x91, 0x21, 0x61, 0x95,
996     0x25, 0x65, 0x19, 0x59, 0x42, 0x12, 0x46, 0x16, 0x56, 0xA0, 0xA4, 0x28,
997     0x68, 0x85, 0xA5, 0x49, 0x29, 0x69, 0x52, 0x0A, 0x1A, 0x5A, 0x88, 0x98,
998     0xA1, 0x89, 0x99, 0xA9, 0x22, 0x62, 0x96, 0x26, 0x66, 0x4A, 0x6A, 0xA8,
999     0x82, 0x92, 0xA2, 0x86, 0xA6, 0x8A, 0x9A, 0x2A, 0xAA,
1000     /* Table set B, code table 0, wordlen 3 - 49 entries */
1001     0x00, 0x08, 0x38, 0x01, 0x07, 0x30, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x18,
1002     0x28, 0x31, 0x02, 0x3A, 0x03, 0x05, 0x06, 0x0E, 0x17, 0x37, 0x11, 0x19,
1003     0x29, 0x0A, 0x32, 0x0B, 0x3B, 0x0D, 0x15, 0x3D, 0x3E, 0x1F, 0x2F, 0x12,
1004     0x1A, 0x2A, 0x13, 0x1B, 0x2B, 0x33, 0x1D, 0x2D, 0x35, 0x16, 0x1E, 0x2E,
1005     0x36,
1006     /* Table set B, code table 0, wordlen 4 - 121 entries */
1007     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
1008     0xF2, 0x0E, 0x21, 0xE1, 0x12, 0xE2, 0x1E, 0x2E, 0xFE, 0x2F, 0xEF, 0x30,
1009     0x50, 0xB0, 0xC0, 0xD0, 0x31, 0xB1, 0xD1, 0x22, 0xD2, 0x03, 0x13, 0xE3,
1010     0xF3, 0xF4, 0x05, 0xE5, 0xF5, 0x0B, 0x1B, 0x0C, 0x0D, 0x1D, 0x2D, 0xFD,
1011     0x3E, 0xEE, 0x3F, 0x5F, 0xDF, 0x40, 0x41, 0x51, 0xC1, 0x32, 0x42, 0x52,
1012     0xB2, 0xC2, 0x23, 0x33, 0xB3, 0xC3, 0xD3, 0x04, 0x14, 0x24, 0xD4, 0xE4,
1013     0x15, 0x25, 0xC5, 0xD5, 0x2B, 0x3B, 0xEB, 0xFB, 0x1C, 0x2C, 0x3C, 0x5C,
1014     0xEC, 0xFC, 0x3D, 0x5D, 0xDD, 0xED, 0x4E, 0x5E, 0xBE, 0xCE, 0xDE, 0x4F,
1015     0xBF, 0xCF, 0x43, 0x53, 0x34, 0x54, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0xB5,
1016     0x4B, 0x5B, 0xCB, 0xDB, 0x4C, 0xBC, 0xCC, 0xDC, 0x4D, 0xBD, 0xCD, 0x44,
1017     0xBB,
1018     /* Table set B, code table 0, wordlen 5 - 225 entries */
1019     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x02,
1020     0x0E, 0x30, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x0D, 0x1E, 0xFE, 0x2F,
1021     0xEF, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x31, 0xD1, 0x22, 0x32, 0xD2,
1022     0xE2, 0x13, 0x23, 0xE3, 0xF3, 0x04, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x1D,
1023     0x2D, 0xFD, 0x2E, 0x3E, 0xEE, 0x3F, 0xDF, 0x50, 0xB0, 0x41, 0x51, 0x61,
1024     0x71, 0x91, 0xA1, 0xB1, 0xC1, 0x42, 0x62, 0x72, 0x92, 0xA2, 0xC2, 0x33,
1025     0x93, 0xA3, 0xD3, 0x14, 0x24, 0xE4, 0xF4, 0x05, 0x15, 0xF5, 0x16, 0x26,
1026     0xD6, 0xE6, 0xF6, 0x17, 0x27, 0xD7, 0xE7, 0xF7, 0x19, 0x29, 0x39, 0xE9,
1027     0xF9, 0x1A, 0x2A, 0xEA, 0xFA, 0x0B, 0x1B, 0xFB, 0x1C, 0x2C, 0xEC, 0xFC,
1028     0x3D, 0x7D, 0x9D, 0xDD, 0xED, 0x4E, 0x6E, 0x7E, 0x9E, 0xAE, 0xCE, 0xDE,
1029     0x4F, 0x5F, 0x6F, 0x7F, 0x9F, 0xAF, 0xBF, 0xCF, 0x52, 0xB2, 0x43, 0x53,
1030     0x63, 0x73, 0xB3, 0xC3, 0x34, 0x44, 0x64, 0x74, 0x94, 0xA4, 0xB4, 0xC4,
1031     0xD4, 0x25, 0x35, 0x65, 0x75, 0x95, 0xA5, 0xD5, 0xE5, 0x36, 0x46, 0x56,
1032     0x66, 0xA6, 0xB6, 0xC6, 0x37, 0x47, 0x57, 0xB7, 0xC7, 0x49, 0x59, 0x69,
1033     0xB9, 0xC9, 0xD9, 0x3A, 0x4A, 0x5A, 0x6A, 0xAA, 0xBA, 0xCA, 0xDA, 0x2B,
1034     0x3B, 0x6B, 0x7B, 0x9B, 0xAB, 0xDB, 0xEB, 0x3C, 0x4C, 0x6C, 0x7C, 0x9C,
1035     0xAC, 0xCC, 0xDC, 0x4D, 0x5D, 0x6D, 0xAD, 0xBD, 0xCD, 0x5E, 0xBE, 0x54,
1036     0x45, 0x55, 0xB5, 0xC5, 0x76, 0x96, 0x67, 0x77, 0x97, 0xA7, 0x79, 0x99,
1037     0xA9, 0x7A, 0x9A, 0x4B, 0x5B, 0xBB, 0xCB, 0x5C, 0xBC,
1038     /* Table set B, code table 0, wordlen 7 - 63 entries */
1039     0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
1040     0x08, 0x38, 0x39, 0x3A, 0x3B, 0x09, 0x0A, 0x0B, 0x0C, 0x19, 0x1A, 0x1B,
1041     0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x33,
1042     0x34, 0x35, 0x36, 0x37, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x2D,
1043     0x2E, 0x2F, 0x30, 0x31, 0x32, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29,
1044     0x2A, 0x2B, 0x2C,
1045     /* Table set B, code table 1, wordlen 2 - 81 entries */
1046     0x00, 0x40, 0x04, 0x01, 0x10, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
1047     0x05, 0x45, 0x15, 0x55, 0x80, 0x90, 0x20, 0x60, 0x84, 0x94, 0x24, 0x64,
1048     0x08, 0x48, 0x18, 0x81, 0x91, 0x61, 0x85, 0x95, 0x25, 0x65, 0x09, 0x49,
1049     0x19, 0x59, 0x02, 0x42, 0x12, 0x52, 0x06, 0x46, 0x16, 0x56, 0xA4, 0x58,
1050     0x68, 0x21, 0xA5, 0x29, 0x69, 0x1A, 0x5A, 0xA0, 0x88, 0x98, 0x28, 0xA1,
1051     0x89, 0x99, 0xA9, 0x92, 0x22, 0x62, 0x86, 0x96, 0x26, 0x66, 0x0A, 0x4A,
1052     0x6A, 0xA8, 0x82, 0xA2, 0xA6, 0x8A, 0x9A, 0x2A, 0xAA,
1053     /* Table set B, code table 1, wordlen 4 - 121 entries */
1054     0x00, 0x10, 0xF0, 0x01, 0x0F, 0xF1, 0x1F, 0xFF, 0x20, 0xE0, 0x11, 0x02,
1055     0x0E, 0x30, 0x50, 0xB0, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x05, 0x0B,
1056     0x0D, 0x1E, 0xFE, 0x2F, 0xEF, 0x40, 0xC0, 0x31, 0x51, 0xB1, 0xC1, 0xD1,
1057     0x22, 0x52, 0xE2, 0x13, 0xF3, 0x04, 0x15, 0xF5, 0x1B, 0xEB, 0xFB, 0x0C,
1058     0x1D, 0xFD, 0x2E, 0x5E, 0xEE, 0x3F, 0x5F, 0xBF, 0xDF, 0x41, 0x32, 0x42,
1059     0xB2, 0xD2, 0x23, 0x53, 0xB3, 0xE3, 0x14, 0x24, 0xE4, 0xF4, 0x25, 0x35,
1060     0xD5, 0xE5, 0x2B, 0x3B, 0xDB, 0x1C, 0x2C, 0xBC, 0xEC, 0xFC, 0x2D, 0xBD,
1061     0xED, 0x3E, 0x4E, 0xBE, 0xDE, 0x4F, 0xCF, 0xC2, 0x33, 0x43, 0xC3, 0xD3,
1062     0x34, 0x44, 0x54, 0xB4, 0xD4, 0x45, 0x55, 0xC5, 0x4B, 0xCB, 0x3C, 0x4C,
1063     0x5C, 0xCC, 0xDC, 0x3D, 0x4D, 0x5D, 0xCD, 0xDD, 0xCE, 0xC4, 0xB5, 0x5B,
1064     0xBB,
1065     /* Table set B, code table 1, wordlen 6 - 256 entries */
1066     0x00, 0x10, 0x01, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x41, 0x22,
1067     0x32, 0x03, 0x13, 0x23, 0x14, 0x40, 0x51, 0x61, 0x42, 0x52, 0x33, 0x43,
1068     0x04, 0x24, 0x34, 0x15, 0x25, 0x16, 0x50, 0x60, 0x70, 0x71, 0x81, 0xD1,
1069     0xE1, 0x62, 0x72, 0x82, 0xD2, 0x53, 0x63, 0x73, 0xD3, 0x44, 0x54, 0x05,
1070     0x35, 0x45, 0x55, 0x06, 0x26, 0x36, 0x07, 0x17, 0x27, 0x37, 0x18, 0x28,
1071     0x19, 0x1D, 0x2D, 0x3D, 0x1E, 0x2E, 0x1F, 0x80, 0x90, 0xD0, 0xE0, 0xF0,
1072     0x91, 0xA1, 0xB1, 0xC1, 0xF1, 0x92, 0xA2, 0xB2, 0xC2, 0xE2, 0xF2, 0x83,
1073     0x93, 0xA3, 0xC3, 0xE3, 0xF3, 0x64, 0x74, 0x84, 0x94, 0xD4, 0xE4, 0xF4,
1074     0x65, 0x75, 0x85, 0xD5, 0xE5, 0x46, 0x56, 0x66, 0x76, 0xD6, 0xE6, 0x47,
1075     0x57, 0x67, 0xD7, 0x08, 0x38, 0x48, 0x58, 0x09, 0x29, 0x39, 0x49, 0x0A,
1076     0x1A, 0x2A, 0x3A, 0x1B, 0x2B, 0x0C, 0x1C, 0x2C, 0x3C, 0x0D, 0x4D, 0x5D,
1077     0x6D, 0x7D, 0x0E, 0x3E, 0x4E, 0x5E, 0x6E, 0x0F, 0x2F, 0x3F, 0x4F, 0xA0,
1078     0xB0, 0xC0, 0xB3, 0xA4, 0xB4, 0xC4, 0x95, 0xA5, 0xB5, 0xC5, 0xF5, 0x86,
1079     0x96, 0xA6, 0xB6, 0xC6, 0xF6, 0x77, 0x87, 0x97, 0xA7, 0xC7, 0xE7, 0xF7,
1080     0x68, 0x78, 0x88, 0x98, 0xD8, 0xE8, 0xF8, 0x59, 0x69, 0x79, 0x89, 0xD9,
1081     0xE9, 0xF9, 0x4A, 0x5A, 0x6A, 0x7A, 0xDA, 0xEA, 0x0B, 0x3B, 0x4B, 0x5B,
1082     0xDB, 0xEB, 0x4C, 0x5C, 0x6C, 0x7C, 0x8C, 0xDC, 0x8D, 0x9D, 0xAD, 0xBD,
1083     0xCD, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0x5F, 0x6F, 0x7F, 0x8F, 0x9F, 0xB7,
1084     0xA8, 0xB8, 0xC8, 0x99, 0xA9, 0xB9, 0xC9, 0x8A, 0x9A, 0xAA, 0xBA, 0xCA,
1085     0xFA, 0x6B, 0x7B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xFB, 0x9C, 0xAC, 0xBC,
1086     0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xCE, 0xDE, 0xEE, 0xFE, 0xAF, 0xBF,
1087     0xCF, 0xDF, 0xEF, 0xFF,
1088     /* Table set B, code table 2, wordlen 6 - 256 entries */
1089     0x00, 0x01, 0x10, 0x11, 0x20, 0x21, 0x02, 0x12, 0x30, 0x31, 0x22, 0x03,
1090     0x13, 0x40, 0x41, 0x51, 0x32, 0x42, 0x23, 0x33, 0x04, 0x14, 0x24, 0x15,
1091     0x50, 0x61, 0x71, 0xD1, 0xE1, 0x52, 0x62, 0xD2, 0x43, 0x53, 0xD3, 0x34,
1092     0x44, 0x05, 0x25, 0x35, 0x06, 0x16, 0x26, 0x17, 0x18, 0x1D, 0x2D, 0x3D,
1093     0x1E, 0x2E, 0x60, 0x70, 0x80, 0xD0, 0xE0, 0xF0, 0x81, 0x91, 0xA1, 0xC1,
1094     0xF1, 0x72, 0x82, 0x92, 0xC2, 0xE2, 0xF2, 0x63, 0x73, 0xE3, 0xF3, 0x54,
1095     0x64, 0x74, 0xD4, 0xE4, 0xF4, 0x45, 0x55, 0x65, 0xD5, 0xE5, 0xF5, 0x36,
1096     0x46, 0x56, 0xD6, 0xE6, 0x07, 0x27, 0x37, 0x47, 0xD7, 0x08, 0x28, 0x38,
1097     0x19, 0x29, 0x1A, 0x1B, 0x1C, 0x2C, 0x0D, 0x4D, 0x5D, 0x6D, 0x7D, 0x0E,
1098     0x3E, 0x4E, 0x5E, 0x6E, 0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x90, 0xA0, 0xC0,
1099     0xB1, 0xA2, 0xB2, 0x83, 0x93, 0xA3, 0xB3, 0xC3, 0x84, 0x94, 0xA4, 0xC4,
1100     0x75, 0x85, 0x95, 0xC5, 0x66, 0x76, 0x86, 0x96, 0xC6, 0xF6, 0x57, 0x67,
1101     0x77, 0xE7, 0xF7, 0x48, 0x58, 0x68, 0x78, 0xD8, 0xE8, 0xF8, 0x09, 0x39,
1102     0x49, 0x59, 0xD9, 0xE9, 0xF9, 0x0A, 0x2A, 0x3A, 0x4A, 0xDA, 0xEA, 0x0B,
1103     0x2B, 0x3B, 0xDB, 0xEB, 0x0C, 0x3C, 0x4C, 0x5C, 0x6C, 0xDC, 0x8D, 0x9D,
1104     0xAD, 0xBD, 0xCD, 0x7E, 0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0x5F, 0x6F, 0x7F,
1105     0x8F, 0x9F, 0xAF, 0xB0, 0xB4, 0xA5, 0xB5, 0xA6, 0xB6, 0x87, 0x97, 0xA7,
1106     0xB7, 0xC7, 0x88, 0x98, 0xA8, 0xC8, 0x69, 0x79, 0x89, 0x99, 0xA9, 0xC9,
1107     0x5A, 0x6A, 0x7A, 0x9A, 0xCA, 0xFA, 0x4B, 0x5B, 0x6B, 0x7B, 0xCB, 0xFB,
1108     0x7C, 0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xEC, 0xFC, 0xDD, 0xED, 0xFD, 0xDE,
1109     0xEE, 0xFE, 0xBF, 0xCF, 0xDF, 0xEF, 0xB8, 0xB9, 0x8A, 0xAA, 0xBA, 0x8B,
1110     0x9B, 0xAB, 0xBB, 0xFF,
1111     /* Table set B, code table 3, wordlen 2 - 81 entries */
1112     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x41, 0x11, 0x05, 0x80,
1113     0x54, 0x51, 0x45, 0x15, 0x55, 0x02, 0x90, 0x20, 0x60, 0x84, 0x24, 0x08,
1114     0x18, 0x09, 0x12, 0x06, 0xA0, 0x94, 0x64, 0x48, 0x58, 0x81, 0x91, 0x21,
1115     0x61, 0x85, 0x95, 0x25, 0x65, 0x49, 0x19, 0x59, 0x42, 0x52, 0x46, 0x16,
1116     0x56, 0x0A, 0xA4, 0x28, 0x68, 0xA1, 0xA5, 0x29, 0x69, 0x26, 0x4A, 0x1A,
1117     0x5A, 0x88, 0x98, 0xA8, 0x89, 0x99, 0xA9, 0x82, 0x92, 0x22, 0x62, 0x86,
1118     0x96, 0x66, 0x9A, 0x2A, 0x6A, 0xA2, 0xA6, 0x8A, 0xAA,
1119     /* Table set B, code table 3, wordlen 3 - 256 entries */
1120     0x00, 0x40, 0x10, 0x04, 0x01, 0x50, 0x44, 0x14, 0x54, 0x41, 0x11, 0x51,
1121     0x05, 0x45, 0x15, 0x55, 0x20, 0x95, 0x65, 0x49, 0x59, 0x52, 0x46, 0x16,
1122     0x80, 0x90, 0x60, 0x84, 0x94, 0x24, 0x64, 0xA4, 0x08, 0x48, 0x18, 0x58,
1123     0x81, 0x91, 0x21, 0x61, 0x85, 0x25, 0x09, 0x19, 0x69, 0x02, 0x42, 0x12,
1124     0x06, 0x56, 0x5A, 0x57, 0xD0, 0x74, 0x68, 0x5C, 0xC1, 0xD5, 0xA5, 0xE5,
1125     0x75, 0xB5, 0xF5, 0x99, 0xD9, 0xA9, 0xE9, 0x79, 0xB9, 0xF9, 0x1D, 0x5D,
1126     0x9D, 0xDD, 0x6D, 0xAD, 0xED, 0x7D, 0xBD, 0xFD, 0x82, 0x92, 0xD2, 0x62,
1127     0x96, 0xD6, 0x26, 0x66, 0xA6, 0xE6, 0x76, 0xB6, 0xF6, 0x0A, 0x4A, 0x1A,
1128     0x9A, 0xDA, 0x2A, 0x6A, 0xAA, 0xEA, 0x7A, 0xBA, 0xFA, 0x5E, 0x9E, 0xDE,
1129     0x6E, 0xAE, 0xEE, 0x7E, 0xBE, 0xFE, 0x03, 0x13, 0x53, 0x17, 0x97, 0xD7,
1130     0x67, 0xA7, 0xE7, 0x77, 0xB7, 0xF7, 0x5B, 0x9B, 0xDB, 0x6B, 0xAB, 0xEB,
1131     0x7B, 0xBB, 0xFB, 0x5F, 0x9F, 0xDF, 0x6F, 0xAF, 0xEF, 0x7F, 0xBF, 0xFF,
1132     0xC0, 0xA0, 0xE0, 0x30, 0xC4, 0xD4, 0xE4, 0x34, 0xB4, 0xF4, 0x88, 0xC8,
1133     0x98, 0xD8, 0x28, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8, 0x0C, 0x4C, 0x1C,
1134     0x9C, 0xDC, 0x6C, 0xAC, 0xEC, 0x7C, 0xBC, 0xFC, 0xD1, 0xA1, 0xE1, 0x31,
1135     0x71, 0xB1, 0xF1, 0xC5, 0x35, 0x89, 0xC9, 0x29, 0x39, 0x0D, 0x4D, 0x8D,
1136     0xCD, 0x2D, 0x3D, 0x22, 0xA2, 0xE2, 0x72, 0xB2, 0xF2, 0x86, 0xC6, 0x36,
1137     0x8A, 0xCA, 0x3A, 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x2E, 0x3E, 0x43, 0x83,
1138     0x93, 0xD3, 0x23, 0x63, 0xA3, 0xE3, 0x73, 0xB3, 0xF3, 0x07, 0x47, 0x87,
1139     0xC7, 0x27, 0x37, 0x4B, 0x8B, 0xCB, 0x1B, 0x2B, 0x3B, 0x4F, 0x8F, 0xCF,
1140     0x1F, 0x70, 0xB0, 0xF0, 0x8C, 0xCC, 0x2C, 0x3C, 0xC2, 0x32, 0xC3, 0x0F,
1141     0x2F, 0x3F, 0x33, 0x0B,
1142     /* Table set B, code table 3, wordlen 5 - 225 entries */
1143     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x11, 0xF1, 0x02, 0x0E, 0x1F, 0xFF, 0x20,
1144     0xE0, 0x21, 0xF2, 0xFE, 0xEF, 0x30, 0xD0, 0xE1, 0x12, 0x22, 0xE2, 0x03,
1145     0x0D, 0x1D, 0x1E, 0x2E, 0xEE, 0x2F, 0xDF, 0x40, 0x60, 0x70, 0x90, 0xA0,
1146     0xB0, 0xC0, 0x31, 0x71, 0x91, 0xC1, 0xD1, 0x32, 0xD2, 0x13, 0xE3, 0xF3,
1147     0x04, 0x05, 0x06, 0x07, 0x17, 0xF7, 0x09, 0x19, 0x0A, 0x1A, 0xFA, 0x0C,
1148     0x1C, 0x2D, 0xED, 0xFD, 0x3E, 0x7E, 0xDE, 0x3F, 0x6F, 0x7F, 0x9F, 0xAF,
1149     0xCF, 0x50, 0x41, 0x51, 0x61, 0xA1, 0xB1, 0x62, 0x72, 0x92, 0xA2, 0xC2,
1150     0x23, 0x33, 0x63, 0x73, 0x93, 0xA3, 0xD3, 0x14, 0x24, 0x34, 0xD4, 0xE4,
1151     0xF4, 0x15, 0xF5, 0x16, 0x26, 0xD6, 0xE6, 0xF6, 0x27, 0x37, 0x47, 0xE7,
1152     0x29, 0x39, 0xC9, 0xD9, 0xE9, 0xF9, 0x2A, 0xEA, 0x0B, 0x1B, 0xFB, 0x2C,
1153     0x7C, 0xEC, 0xFC, 0x3D, 0x4D, 0x6D, 0x7D, 0xDD, 0x4E, 0x5E, 0x6E, 0x9E,
1154     0xAE, 0xCE, 0x4F, 0x5F, 0x42, 0x52, 0xB2, 0x43, 0xB3, 0xC3, 0x44, 0x64,
1155     0x74, 0x94, 0xA4, 0x25, 0x35, 0x65, 0x75, 0x95, 0xA5, 0xE5, 0x36, 0x46,
1156     0x66, 0x76, 0x96, 0xA6, 0xB6, 0xC6, 0x57, 0xA7, 0xB7, 0xC7, 0xD7, 0x59,
1157     0xA9, 0xB9, 0x3A, 0x4A, 0x6A, 0xCA, 0xDA, 0x2B, 0x3B, 0x6B, 0x9B, 0xAB,
1158     0xDB, 0xEB, 0x3C, 0x6C, 0x9C, 0xAC, 0xCC, 0xDC, 0x5D, 0x9D, 0xAD, 0xBD,
1159     0xCD, 0xBE, 0xBF, 0x53, 0x54, 0xB4, 0xC4, 0x45, 0x55, 0xB5, 0xC5, 0xD5,
1160     0x56, 0x67, 0x77, 0x97, 0x49, 0x69, 0x79, 0x99, 0x5A, 0x7A, 0x9A, 0xAA,
1161     0xBA, 0x4B, 0x5B, 0x7B, 0xBB, 0xCB, 0x4C, 0x5C, 0xBC,
1162     /* Table set B, code table 3, wordlen 7 - 63 entries */
1163     0x00, 0x01, 0x3F, 0x02, 0x3E, 0x03, 0x3D, 0x04, 0x05, 0x06, 0x3A, 0x3B,
1164     0x3C, 0x07, 0x08, 0x09, 0x0A, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x22, 0x23,
1165     0x25, 0x26, 0x27, 0x37, 0x38, 0x39, 0x0B, 0x0D, 0x0E, 0x0F, 0x1E, 0x1F,
1166     0x21, 0x24, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x0C, 0x10, 0x11, 0x12,
1167     0x13, 0x15, 0x29, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x14, 0x16, 0x17,
1168     0x18, 0x28, 0x2A,
1169     /* Table set B, code table 4, wordlen 1 - 81 entries */
1170     0x00, 0x01, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x03, 0x50, 0xD0, 0x70,
1171     0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0xC1, 0x11, 0x31, 0x05, 0x0D,
1172     0xC3, 0x13, 0x33, 0x07, 0x0F, 0x44, 0xCC, 0x41, 0x43, 0x54, 0x74, 0xDC,
1173     0xFC, 0x71, 0x15, 0x4D, 0x1D, 0x37, 0x3F, 0xD4, 0xF4, 0x5C, 0x7C, 0x51,
1174     0xD1, 0xF1, 0x45, 0xC5, 0x35, 0xCD, 0xDD, 0x3D, 0x53, 0xD3, 0x73, 0xF3,
1175     0x47, 0xC7, 0x17, 0x77, 0x4F, 0xCF, 0x1F, 0x55, 0xFF, 0xD5, 0x75, 0xF5,
1176     0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
1177     /* Table set B, code table 4, wordlen 2 - 25 entries */
1178     0x00, 0x07, 0x08, 0x38, 0x01, 0x39, 0x0F, 0x10, 0x09, 0x3F, 0x30, 0x31,
1179     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x3E, 0x37, 0x12, 0x32, 0x16,
1180     0x36,
1181     /* Table set B, code table 4, wordlen 3 - 49 entries */
1182     0x00, 0x07, 0x08, 0x38, 0x01, 0x09, 0x39, 0x0F, 0x3F, 0x10, 0x30, 0x31,
1183     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x37, 0x18, 0x28, 0x11, 0x19, 0x29, 0x0A,
1184     0x03, 0x0B, 0x3B, 0x05, 0x0D, 0x3D, 0x3E, 0x1F, 0x2F, 0x12, 0x1A, 0x2A,
1185     0x32, 0x13, 0x33, 0x15, 0x35, 0x16, 0x1E, 0x2E, 0x36, 0x1B, 0x2B, 0x1D,
1186     0x2D,
1187     /* Table set B, code table 4, wordlen 7 - 63 entries */
1188     0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x3C, 0x3D, 0x05, 0x06, 0x07,
1189     0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x1A, 0x1B, 0x25, 0x26,
1190     0x34, 0x35, 0x36, 0x37, 0x38, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x19,
1191     0x1C, 0x1D, 0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x27, 0x2E, 0x2F, 0x30,
1192     0x31, 0x32, 0x33, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29, 0x2A,
1193     0x2B, 0x2C, 0x2D,
1194     /* Table set B, code table 5, wordlen 2 - 25 entries */
1195     0x00, 0x01, 0x08, 0x38, 0x07, 0x39, 0x0F, 0x30, 0x09, 0x3F, 0x10, 0x31,
1196     0x02, 0x3A, 0x06, 0x0E, 0x17, 0x11, 0x0A, 0x3E, 0x37, 0x12, 0x32, 0x16,
1197     0x36,
1198     /* Table set B, code table 5, wordlen 3 - 7 entries */
1199     0x00, 0x07, 0x01, 0x02, 0x03, 0x05, 0x06,
1200     /* Table set B, code table 5, wordlen 6 - 31 entries */
1201     0x00, 0x01, 0x1F, 0x02, 0x1E, 0x03, 0x04, 0x0D, 0x1D, 0x05, 0x06, 0x07,
1202     0x0E, 0x0F, 0x11, 0x12, 0x13, 0x1A, 0x1B, 0x1C, 0x08, 0x09, 0x0C, 0x14,
1203     0x15, 0x16, 0x17, 0x18, 0x19, 0x0A, 0x0B,
1204     /* Table set B, code table 6, wordlen 2 - 81 entries */
1205     0x00, 0x40, 0x01, 0x10, 0x04, 0x02, 0x80, 0x50, 0x90, 0x05, 0x06, 0x20,
1206     0x60, 0x44, 0x14, 0x54, 0x24, 0x08, 0x18, 0x41, 0x11, 0x15, 0x09, 0xA0,
1207     0x84, 0x94, 0x64, 0xA4, 0x28, 0x51, 0x45, 0x55, 0x19, 0x12, 0x16, 0x0A,
1208     0x1A, 0x48, 0x58, 0x68, 0x81, 0x91, 0x21, 0x61, 0x85, 0x95, 0x25, 0x65,
1209     0x49, 0x59, 0x29, 0x69, 0x42, 0x46, 0x56, 0x88, 0x98, 0xA8, 0xA1, 0xA5,
1210     0x99, 0xA9, 0x52, 0x22, 0x26, 0x66, 0x4A, 0x5A, 0x2A, 0x6A, 0x89, 0x82,
1211     0x92, 0x62, 0x86, 0x96, 0xA6, 0x8A, 0xAA, 0xA2, 0x9A,
1212     /* Table set B, code table 6, wordlen 3 - 7 entries */
1213     0x00, 0x01, 0x07, 0x02, 0x03, 0x05, 0x06,
1214     /* Table set B, code table 6, wordlen 4 - 6 entries */
1215     0x01, 0x00, 0x02, 0x05, 0x03, 0x04,
1216     /* Table set B, code table 6, wordlen 5 - 225 entries */
1217     0x00, 0xF0, 0x01, 0x10, 0x0F, 0x11, 0xF1, 0x20, 0xE0, 0x02, 0x0E, 0x1F,
1218     0xFF, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x07, 0x0A, 0x0D, 0x1E, 0xFE, 0x2F,
1219     0xEF, 0x30, 0x70, 0x90, 0xA0, 0xC0, 0x71, 0x91, 0xC1, 0xD1, 0x32, 0x92,
1220     0xE2, 0x03, 0x13, 0x63, 0x04, 0x06, 0xE6, 0xE7, 0xF7, 0x09, 0x19, 0x39,
1221     0xFA, 0x0C, 0x1C, 0xDD, 0xED, 0xFD, 0x2E, 0x7E, 0x9E, 0x3F, 0x9F, 0x40,
1222     0x50, 0x60, 0xB0, 0x31, 0x41, 0x61, 0xA1, 0xB1, 0x22, 0x42, 0x72, 0xA2,
1223     0xB2, 0xC2, 0xD2, 0x23, 0x33, 0x73, 0xA3, 0xC3, 0xD3, 0xE3, 0xF3, 0x14,
1224     0x24, 0x34, 0x44, 0x74, 0xD4, 0xE4, 0x05, 0x25, 0x45, 0x65, 0x95, 0xA5,
1225     0x16, 0x26, 0x46, 0x76, 0xA6, 0xB6, 0xC6, 0xD6, 0xF6, 0x17, 0x27, 0x37,
1226     0x47, 0x67, 0xA7, 0xD7, 0x29, 0x69, 0xB9, 0xD9, 0xE9, 0xF9, 0x1A, 0x2A,
1227     0x3A, 0x9A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B, 0x3B, 0x6B, 0xEB, 0xFB, 0x2C,
1228     0x6C, 0xEC, 0xFC, 0x1D, 0x2D, 0x4D, 0x6D, 0x9D, 0xAD, 0x3E, 0x4E, 0x6E,
1229     0xAE, 0xCE, 0xEE, 0x4F, 0x5F, 0x6F, 0xDF, 0x51, 0x52, 0x62, 0x43, 0x93,
1230     0xB3, 0x54, 0x94, 0xA4, 0xF4, 0x15, 0x75, 0xB5, 0xE5, 0xF5, 0x36, 0x56,
1231     0x66, 0x96, 0x57, 0x77, 0x49, 0x59, 0xA9, 0xC9, 0x4A, 0x5A, 0x6A, 0x7A,
1232     0xAA, 0xBA, 0x2B, 0x4B, 0x7B, 0x9B, 0xAB, 0xDB, 0x3C, 0x4C, 0x7C, 0x9C,
1233     0xAC, 0xBC, 0xCC, 0x3D, 0x5D, 0x7D, 0xBD, 0xCD, 0x5E, 0xBE, 0xDE, 0xBF,
1234     0xCF, 0x53, 0x64, 0xB4, 0xC4, 0x35, 0x55, 0xC5, 0xD5, 0x97, 0xB7, 0xC7,
1235     0x79, 0x99, 0x5B, 0xBB, 0xCB, 0x5C, 0xDC, 0x7F, 0xAF,
1236     /* Table set B, code table 6, wordlen 6 - 256 entries */
1237     0x00, 0x10, 0x01, 0x11, 0x21, 0x02, 0x12, 0x20, 0x22, 0x13, 0x30, 0x31,
1238     0x41, 0xD1, 0xE1, 0x32, 0x52, 0x03, 0x23, 0x2D, 0x40, 0x50, 0x60, 0x80,
1239     0xD0, 0xE0, 0x51, 0x61, 0xF1, 0x42, 0x62, 0xD2, 0xE2, 0xF2, 0x33, 0x43,
1240     0xC3, 0xD3, 0xE3, 0x04, 0x14, 0xD4, 0xF4, 0x25, 0x35, 0x16, 0x17, 0xF7,
1241     0xD8, 0x1C, 0x3C, 0x0D, 0x1D, 0x3D, 0x5D, 0x0E, 0x1E, 0x2E, 0x7E, 0x2F,
1242     0xC0, 0xF0, 0x71, 0x81, 0x91, 0xC1, 0x72, 0x82, 0x92, 0xB2, 0xC2, 0x53,
1243     0x63, 0x73, 0x93, 0xA3, 0xF3, 0x24, 0x44, 0x64, 0x84, 0xA4, 0xB4, 0x05,
1244     0x15, 0x95, 0xD5, 0x06, 0x26, 0x36, 0x46, 0x96, 0xD6, 0xE6, 0xF6, 0x07,
1245     0x27, 0x37, 0xD7, 0xE7, 0x08, 0x18, 0x28, 0x38, 0xE8, 0xF8, 0x09, 0x19,
1246     0x29, 0xE9, 0xF9, 0x0A, 0x1A, 0xCA, 0xDA, 0xEA, 0x0B, 0x1B, 0xDB, 0xEB,
1247     0xFB, 0x2C, 0x4C, 0x5C, 0x7C, 0x8C, 0x4D, 0x6D, 0x8D, 0x9D, 0xFD, 0x3E,
1248     0x5E, 0x6E, 0x8E, 0x9E, 0xEE, 0x0F, 0x1F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
1249     0xCF, 0x70, 0xA1, 0xA2, 0x83, 0xB3, 0x34, 0x74, 0xC4, 0xE4, 0x55, 0x65,
1250     0x85, 0xA5, 0xC5, 0xE5, 0xF5, 0x56, 0x66, 0x76, 0x86, 0xA6, 0xC6, 0x57,
1251     0x67, 0x77, 0x97, 0xA7, 0x48, 0x88, 0x98, 0x49, 0x59, 0x79, 0x99, 0x3A,
1252     0x4A, 0x8A, 0xBA, 0xFA, 0x2B, 0x7B, 0x0C, 0xAC, 0xBC, 0xCC, 0xEC, 0x7D,
1253     0xAD, 0xBD, 0xDD, 0x4E, 0xBE, 0xCE, 0xFE, 0x8F, 0x9F, 0xAF, 0xBF, 0xDF,
1254     0xEF, 0xFF, 0x90, 0xA0, 0xB0, 0xB1, 0x54, 0x94, 0x45, 0x75, 0xB5, 0xB6,
1255     0x47, 0x87, 0xB7, 0xC7, 0x58, 0x68, 0x78, 0xA8, 0xB8, 0xC8, 0x39, 0x69,
1256     0x89, 0xA9, 0xB9, 0xC9, 0xD9, 0x2A, 0x5A, 0x6A, 0x7A, 0x9A, 0xAA, 0x3B,
1257     0x4B, 0x5B, 0x6B, 0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0x6C, 0x9C, 0xDC, 0xFC,
1258     0xCD, 0xED, 0xAE, 0xDE,
1259     /* Table set B, code table 6, wordlen 7 - 63 entries */
1260     0x00, 0x01, 0x3F, 0x3E, 0x02, 0x03, 0x3C, 0x3D, 0x04, 0x05, 0x06, 0x07,
1261     0x39, 0x3A, 0x3B, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x34, 0x35, 0x36, 0x37,
1262     0x38, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
1263     0x1E, 0x1F, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x2E, 0x2F, 0x30,
1264     0x31, 0x32, 0x33, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x28, 0x29, 0x2A,
1265     0x2B, 0x2C, 0x2D,
1266     /* Table set B, code table 7, wordlen 1 - 81 entries */
1267     0x00, 0x03, 0x40, 0xC0, 0x10, 0x30, 0x04, 0x0C, 0x01, 0x50, 0xD0, 0x70,
1268     0xF0, 0xC4, 0x14, 0x34, 0x4C, 0x1C, 0x3C, 0xC1, 0x11, 0x31, 0x05, 0x0D,
1269     0x13, 0x33, 0x07, 0x0F, 0x44, 0xCC, 0x41, 0x43, 0xC3, 0x54, 0x74, 0xDC,
1270     0xFC, 0xF1, 0xC5, 0x15, 0x1D, 0x53, 0xC7, 0x37, 0x4F, 0x3F, 0xD4, 0xF4,
1271     0x5C, 0x7C, 0x51, 0xD1, 0x71, 0x45, 0x55, 0x35, 0x4D, 0xCD, 0xDD, 0x3D,
1272     0xD3, 0x73, 0xF3, 0x47, 0x17, 0x77, 0xCF, 0x1F, 0xFF, 0xD5, 0x75, 0xF5,
1273     0x5D, 0x7D, 0xFD, 0x57, 0xD7, 0xF7, 0x5F, 0xDF, 0x7F,
1274     /* Table set B, code table 7, wordlen 3 - 256 entries */
1275     0x00, 0x40, 0x10, 0x04, 0x01, 0x05, 0x50, 0x14, 0x54, 0x41, 0x11, 0x51,
1276     0x45, 0x15, 0x55, 0x44, 0x95, 0x6A, 0x03, 0x80, 0xC0, 0x90, 0xD0, 0x94,
1277     0xD4, 0x24, 0x64, 0x58, 0x91, 0xA1, 0x85, 0xD5, 0x25, 0x65, 0xA5, 0xE5,
1278     0x75, 0xB5, 0xF5, 0x19, 0x59, 0x99, 0xD9, 0x69, 0xA9, 0xE9, 0x79, 0xB9,
1279     0xF9, 0x4D, 0x5D, 0x9D, 0xDD, 0x6D, 0xAD, 0xED, 0x7D, 0xBD, 0xFD, 0x02,
1280     0x42, 0x52, 0x06, 0x46, 0x16, 0x56, 0x96, 0xD6, 0x26, 0x66, 0xA6, 0xE6,
1281     0x76, 0xB6, 0xF6, 0x1A, 0x5A, 0x9A, 0xDA, 0xAA, 0xEA, 0x7A, 0xBA, 0xFA,
1282     0x5E, 0x9E, 0xDE, 0x6E, 0xAE, 0xEE, 0x7E, 0xBE, 0xFE, 0x07, 0x47, 0x57,
1283     0x97, 0xD7, 0x67, 0xA7, 0xE7, 0x77, 0xB7, 0xF7, 0x5B, 0x9B, 0xDB, 0x6B,
1284     0xAB, 0xEB, 0x7B, 0xBB, 0xFB, 0x5F, 0x9F, 0xDF, 0x6F, 0xAF, 0xEF, 0x7F,
1285     0xBF, 0xFF, 0x20, 0x60, 0x70, 0xB0, 0xF0, 0x84, 0xC4, 0xA4, 0xE4, 0x74,
1286     0xB4, 0xF4, 0x08, 0x88, 0x18, 0x98, 0xD8, 0x68, 0xA8, 0xE8, 0x78, 0xB8,
1287     0xF8, 0x1C, 0x5C, 0x9C, 0xDC, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
1288     0x81, 0xD1, 0x21, 0x61, 0xE1, 0x71, 0xB1, 0xF1, 0xC5, 0x35, 0x09, 0x49,
1289     0x89, 0xC9, 0x29, 0x39, 0x0D, 0x8D, 0xCD, 0x1D, 0x2D, 0x3D, 0x92, 0xD2,
1290     0x22, 0x62, 0xA2, 0xE2, 0x72, 0xB2, 0xF2, 0x86, 0xC6, 0x36, 0x0A, 0x4A,
1291     0x8A, 0xCA, 0x2A, 0x3A, 0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x2E, 0x3E, 0x13,
1292     0x53, 0x93, 0xD3, 0x63, 0xA3, 0xE3, 0x73, 0xB3, 0xF3, 0x87, 0xC7, 0x17,
1293     0x27, 0x37, 0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x2B, 0x3B, 0x0F, 0x4F, 0x8F,
1294     0xCF, 0x1F, 0x2F, 0x3F, 0xA0, 0xE0, 0x30, 0x34, 0x48, 0xC8, 0x28, 0x38,
1295     0x0C, 0x4C, 0x8C, 0xCC, 0x2C, 0xC1, 0x31, 0x82, 0xC2, 0x12, 0x32, 0x43,
1296     0x83, 0xC3, 0x23, 0x33,
1297     /* Table set B, code table 7, wordlen 4 - 11 entries */
1298     0x00, 0x01, 0x0F, 0x02, 0x0E, 0x05, 0x0D, 0x03, 0x04, 0x0B, 0x0C,
1299     /* Table set B, code table 7, wordlen 5 - 225 entries */
1300     0x00, 0x10, 0xF0, 0x01, 0x0F, 0x20, 0xE0, 0x11, 0xF1, 0x02, 0x0E, 0x1F,
1301     0xFF, 0xD0, 0x21, 0xE1, 0x12, 0xF2, 0x03, 0x0D, 0x1E, 0xFE, 0x2F, 0xEF,
1302     0x30, 0x40, 0x60, 0x70, 0x90, 0xA0, 0xC0, 0x31, 0xD1, 0x22, 0xE2, 0x13,
1303     0xF3, 0x04, 0x06, 0x07, 0x09, 0x0C, 0x1D, 0xFD, 0x2E, 0xEE, 0x3F, 0xDF,
1304     0x50, 0xB0, 0x41, 0x61, 0x71, 0x91, 0xA1, 0xC1, 0x32, 0x62, 0x72, 0x92,
1305     0xA2, 0xD2, 0x23, 0xD3, 0xE3, 0x14, 0xF4, 0x05, 0x16, 0x26, 0xE6, 0xF6,
1306     0x17, 0x27, 0xE7, 0xF7, 0x19, 0x29, 0xF9, 0x0A, 0x1A, 0x2A, 0xFA, 0x0B,
1307     0x1C, 0x2C, 0xFC, 0x2D, 0x3D, 0xED, 0x3E, 0x4E, 0x7E, 0x9E, 0xDE, 0x4F,
1308     0x6F, 0x7F, 0x9F, 0xAF, 0xCF, 0x51, 0xB1, 0x42, 0x52, 0xB2, 0xC2, 0x33,
1309     0x63, 0x73, 0x93, 0xA3, 0xB3, 0xC3, 0x24, 0x34, 0x74, 0xA4, 0xD4, 0xE4,
1310     0x15, 0x25, 0x65, 0x95, 0xE5, 0xF5, 0x36, 0xD6, 0x37, 0x47, 0xC7, 0xD7,
1311     0x39, 0x59, 0xB9, 0xC9, 0xD9, 0xE9, 0x3A, 0x6A, 0xDA, 0xEA, 0x1B, 0x2B,
1312     0x9B, 0xAB, 0xEB, 0xFB, 0x6C, 0x7C, 0x9C, 0xAC, 0xEC, 0x4D, 0x6D, 0x7D,
1313     0x9D, 0xAD, 0xBD, 0xDD, 0x5E, 0x6E, 0xAE, 0xCE, 0x5F, 0x43, 0x53, 0x44,
1314     0x54, 0x64, 0x94, 0xB4, 0xC4, 0x35, 0x45, 0x55, 0x75, 0xA5, 0xB5, 0xC5,
1315     0xD5, 0x46, 0x56, 0x66, 0x76, 0x96, 0xA6, 0xB6, 0xC6, 0x57, 0x67, 0x77,
1316     0x97, 0xA7, 0xB7, 0x49, 0x69, 0x79, 0x99, 0xA9, 0x4A, 0x5A, 0x7A, 0x9A,
1317     0xAA, 0xBA, 0xCA, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B, 0xBB, 0xCB, 0xDB, 0x3C,
1318     0x4C, 0x5C, 0xBC, 0xCC, 0xDC, 0x5D, 0xCD, 0xBE, 0xBF,
1319     /* Table set B, code table 7, wordlen 7 - 63 entries */
1320     0x00, 0x01, 0x02, 0x3E, 0x3F, 0x03, 0x04, 0x05, 0x3B, 0x3C, 0x3D, 0x06,
1321     0x07, 0x08, 0x09, 0x0A, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x0B, 0x0C, 0x0D,
1322     0x0E, 0x0F, 0x10, 0x2F, 0x31, 0x32, 0x33, 0x34, 0x35, 0x11, 0x12, 0x13,
1323     0x14, 0x2D, 0x2E, 0x30, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x25,
1324     0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x1C, 0x1D, 0x1E, 0x23, 0x1F,
1325     0x21, 0x22, 0x24,
1326     /* Table set B, code table 7, wordlen 7 - 8 entries */
1327     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1328     /* Table set B, code table 7, wordlen 7 - 8 entries */
1329     0x00, 0x01, 0x07, 0x02, 0x06, 0x03, 0x04, 0x05,
1330     /* Table set B, code table 7, wordlen 7 - 16 entries */
1331     0x07, 0x05, 0x08, 0x06, 0x09, 0x04, 0x0A, 0x0B, 0x00, 0x01, 0x02, 0x03,
1332     0x0C, 0x0D, 0x0E, 0x0F,
1333     /* Table set B, code table 7, wordlen 7 - 15 entries */
1334     0x0F, 0x0E, 0x01, 0x0D, 0x02, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07, 0x08,
1335     0x09, 0x0A, 0x0B,
1336     /* Table set B, code table 7, wordlen 7 - 16 entries */
1337     0x00, 0x01, 0x0E, 0x0F, 0x02, 0x0D, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07,
1338     0x08, 0x09, 0x0A, 0x0B,
1339     /* Table set B, code table 7, wordlen 7 - 16 entries */
1340     0x00, 0x01, 0x0F, 0x0E, 0x02, 0x0D, 0x03, 0x0C, 0x04, 0x05, 0x06, 0x07,
1341     0x08, 0x09, 0x0A, 0x0B,
1342     /* Table set B, code table 7, wordlen 7 - 32 entries */
1343     0x00, 0x01, 0x1F, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x1A, 0x1B, 0x1C,
1344     0x1D, 0x1E, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11,
1345     0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
1346     /* Table set B, code table 7, wordlen 7 - 31 entries */
1347     0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
1348     0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1349     0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
1350     /* Table set B, code table 7, wordlen 7 - 32 entries */
1351     0x00, 0x1C, 0x1D, 0x01, 0x02, 0x03, 0x04, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1352     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B,
1353     0x1E, 0x1F, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A,
1354     /* Table set B, code table 7, wordlen 7 - 31 entries */
1355     0x02, 0x03, 0x04, 0x05, 0x06, 0x01, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
1356     0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
1357     0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
1358     /* Table set B, code table 7, wordlen 7 - 32 entries */
1359     0x00, 0x01, 0x02, 0x1F, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x1D, 0x1E,
1360     0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14,
1361     0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C,
1362     /* Table set B, code table 7, wordlen 7 - 16 entries */
1363     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
1364     0x0C, 0x0D, 0x0E, 0x0F,
1365     /* Table set B, code table 7, wordlen 7 - 8 entries */
1366     0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1367     /* Table set B, code table 7, wordlen 7 - 8 entries */
1368     0x00, 0x01, 0x07, 0x02, 0x03, 0x04, 0x05, 0x06,
1369     /* Table set B, code table 7, wordlen 7 - 32 entries */
1370     0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x05, 0x06,
1371     0x07, 0x12, 0x13, 0x14, 0x15, 0x16, 0x04, 0x17, 0x18, 0x19, 0x1A, 0x1B,
1372     0x00, 0x01, 0x02, 0x03, 0x1C, 0x1D, 0x1E, 0x1F,
1373     /* Table set B, code table 7, wordlen 7 - 32 entries */
1374     0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x0E,
1375     0x0F, 0x10, 0x11, 0x1D, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x1E, 0x04, 0x05,
1376     0x06, 0x07, 0x08, 0x1F, 0x00, 0x01, 0x02, 0x03,
1377     /* Table set B, code table 7, wordlen 7 - 32 entries */
1378     0x00, 0x01, 0x02, 0x1F, 0x03, 0x1D, 0x1E, 0x04, 0x05, 0x06, 0x1B, 0x1C,
1379     0x07, 0x18, 0x19, 0x1A, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1380     0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1381     /* Table set B, code table 7, wordlen 7 - 256 entries */
1382     0x00, 0x01, 0xFF, 0x02, 0xFE, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xFB,
1383     0xFC, 0xFD, 0x09, 0x0A, 0x0B, 0x0C, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0x0D,
1384     0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
1385     0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
1386     0x26, 0xF3, 0xF4, 0xF5, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
1387     0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,
1388     0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46,
1389     0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52,
1390     0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0xC2,
1391     0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE,
1392     0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA,
1393     0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
1394     0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2,
1395     0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
1396     0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
1397     0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81,
1398     0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D,
1399     0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
1400     0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5,
1401     0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1,
1402     0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD,
1403     0xBE, 0xBF, 0xC0, 0xC1,
1404 };
1405
1406 /** Tables for spectrum coding. */
1407 typedef struct Atrac3pSpecCodeTab {
1408     uint8_t group_size;  ///< number of coefficients grouped together
1409     uint8_t num_coeffs;  ///< 1 - map index to a single value, > 1 - map index to a vector of values
1410     uint8_t bits;        ///< number of bits a single coefficient occupy
1411     uint8_t is_signed;   ///< 1 - values in that table are signed ones, otherwise - absolute ones
1412 } Atrac3pSpecCodeTab;
1413
1414 static const Atrac3pSpecCodeTab atrac3p_spectra_tabs[112] = {
1415     /* table set = A */
1416     /* code table = 0 */
1417     { 1, 4, 2, 1 }, // wordlen = 1
1418     { 1, 4, 2, 0 }, // wordlen = 2
1419     { 1, 2, 3, 1 }, // wordlen = 3
1420     { 1, 1, 3, 0 }, // wordlen = 4
1421     { 1, 2, 4, 1 }, // wordlen = 5
1422     { 1, 1, 4, 0 }, // wordlen = 6
1423     { 1, 1, 6, 1 }, // wordlen = 7
1424
1425     /* code table = 1 */
1426     { 4, 4, 2, 1 }, // wordlen = 1
1427     { 1, 4, 2, 0 }, // wordlen = 2
1428     { 1, 2, 3, 1 }, // wordlen = 3
1429     { 1, 2, 4, 1 }, // wordlen = 4
1430     { 1, 2, 4, 1 }, // wordlen = 5
1431     { 1, 2, 4, 0 }, // wordlen = 6
1432     { 1, 1, 6, 1 }, // wordlen = 7
1433
1434     /* code table = 2 */
1435     { 1, 4, 2, 1 }, // wordlen = 1
1436     { 1, 2, 3, 1 }, // wordlen = 2
1437     { 1, 2, 3, 1 }, // wordlen = 3
1438     { 1, 1, 3, 0 }, // wordlen = 4
1439     { 1, 1, 3, 0 }, // wordlen = 5
1440     { 1, 2, 4, 0 }, // wordlen = 6
1441     { 1, 1, 6, 1 }, // wordlen = 7
1442
1443     /* code table = 3 */
1444     { 1, 2, 2, 1 }, // wordlen = 1
1445     { 1, 4, 2, 0 }, // wordlen = 2
1446     { 1, 4, 2, 0 }, // wordlen = 3
1447     { 1, 1, 3, 0 }, // wordlen = 4
1448     { 1, 2, 4, 1 }, // wordlen = 5
1449     { 1, 2, 4, 0 }, // wordlen = 6
1450     { 1, 1, 6, 1 }, // wordlen = 7
1451
1452     /* code table = 4 */
1453     { 1, 4, 2, 1 }, // wordlen = 1
1454     { 1, 4, 2, 0 }, // wordlen = 2
1455     { 1, 1, 3, 1 }, // wordlen = 3
1456     { 1, 2, 4, 1 }, // wordlen = 4
1457     { 1, 1, 3, 0 }, // wordlen = 5
1458     { 1, 2, 4, 0 }, // wordlen = 6
1459     { 1, 1, 6, 1 }, // wordlen = 7
1460
1461     /* code table = 5 */
1462     { 1, 4, 2, 1 }, // wordlen = 1
1463     { 1, 2, 3, 1 }, // wordlen = 2
1464     { 1, 1, 3, 1 }, // wordlen = 3
1465     { 1, 2, 4, 1 }, // wordlen = 4
1466     { 1, 1, 3, 0 }, // wordlen = 5
1467     { 1, 1, 5, 1 }, // wordlen = 6
1468     { 1, 1, 6, 1 }, // wordlen = 7
1469
1470     /* code table = 6 */
1471     { 2, 4, 2, 1 }, // wordlen = 1
1472     { 1, 2, 3, 1 }, // wordlen = 2
1473     { 1, 4, 2, 0 }, // wordlen = 3
1474     { 1, 2, 4, 1 }, // wordlen = 4
1475     { 1, 1, 4, 1 }, // wordlen = 5
1476     { 1, 1, 5, 1 }, // wordlen = 6
1477     { 1, 1, 6, 1 }, // wordlen = 7
1478
1479     /* code table = 7 */
1480     { 1, 2, 1, 0 }, // wordlen = 1
1481     { 2, 4, 2, 0 }, // wordlen = 2
1482     { 1, 2, 3, 1 }, // wordlen = 3
1483     { 1, 2, 4, 1 }, // wordlen = 4
1484     { 1, 1, 4, 1 }, // wordlen = 5
1485     { 2, 2, 4, 0 }, // wordlen = 6
1486     { 4, 1, 6, 1 }, // wordlen = 7
1487
1488     /* table set = B */
1489     /* code table = 0 */
1490     { 4, 4, 2, 1 }, // wordlen = 1
1491     { 1, 4, 2, 0 }, // wordlen = 2
1492     { 4, 2, 3, 1 }, // wordlen = 3
1493     { 1, 2, 4, 1 }, // wordlen = 4
1494     { 1, 2, 4, 1 }, // wordlen = 5
1495     { 1, 1, 4, 0 }, // wordlen = 6
1496     { 1, 1, 6, 1 }, // wordlen = 7
1497
1498     /* code table = 1 */
1499     { 1, 4, 2, 1 }, // wordlen = 1
1500     { 1, 4, 2, 0 }, // wordlen = 2
1501     { 1, 2, 3, 1 }, // wordlen = 3
1502     { 1, 2, 4, 1 }, // wordlen = 4
1503     { 1, 2, 4, 1 }, // wordlen = 5
1504     { 1, 2, 4, 0 }, // wordlen = 6
1505     { 1, 1, 6, 1 }, // wordlen = 7
1506
1507     /* code table = 2 */
1508     { 4, 4, 2, 1 }, // wordlen = 1
1509     { 4, 4, 2, 0 }, // wordlen = 2
1510     { 1, 2, 3, 1 }, // wordlen = 3
1511     { 1, 2, 4, 1 }, // wordlen = 4
1512     { 2, 2, 4, 1 }, // wordlen = 5
1513     { 2, 2, 4, 0 }, // wordlen = 6
1514     { 4, 1, 6, 1 }, // wordlen = 7
1515
1516     /* code table = 3 */
1517     { 1, 4, 2, 1 }, // wordlen = 1
1518     { 1, 4, 2, 0 }, // wordlen = 2
1519     { 1, 4, 2, 0 }, // wordlen = 3
1520     { 2, 2, 4, 1 }, // wordlen = 4
1521     { 1, 2, 4, 1 }, // wordlen = 5
1522     { 1, 2, 4, 0 }, // wordlen = 6
1523     { 1, 1, 6, 1 }, // wordlen = 7
1524
1525     /* code table = 4 */
1526     { 1, 4, 2, 1 }, // wordlen = 1
1527     { 4, 2, 3, 1 }, // wordlen = 2
1528     { 1, 2, 3, 1 }, // wordlen = 3
1529     { 4, 2, 4, 1 }, // wordlen = 4
1530     { 1, 1, 3, 0 }, // wordlen = 5
1531     { 1, 2, 4, 0 }, // wordlen = 6
1532     { 1, 1, 6, 1 }, // wordlen = 7
1533
1534     /* code table = 5 */
1535     { 2, 4, 2, 1 }, // wordlen = 1
1536     { 1, 2, 3, 1 }, // wordlen = 2
1537     { 4, 1, 3, 1 }, // wordlen = 3
1538     { 1, 1, 3, 0 }, // wordlen = 4
1539     { 1, 1, 3, 0 }, // wordlen = 5
1540     { 1, 1, 5, 1 }, // wordlen = 6
1541     { 2, 1, 6, 1 }, // wordlen = 7
1542
1543     /* code table = 6 */
1544     { 1, 4, 2, 1 }, // wordlen = 1
1545     { 1, 4, 2, 0 }, // wordlen = 2
1546     { 1, 1, 3, 1 }, // wordlen = 3
1547     { 1, 1, 3, 0 }, // wordlen = 4
1548     { 4, 2, 4, 1 }, // wordlen = 5
1549     { 1, 2, 4, 0 }, // wordlen = 6
1550     { 1, 1, 6, 1 }, // wordlen = 7
1551
1552     /* code table = 7 */
1553     { 1, 4, 2, 1 }, // wordlen = 1
1554     { 4, 4, 2, 0 }, // wordlen = 2
1555     { 4, 4, 2, 0 }, // wordlen = 3
1556     { 1, 1, 4, 1 }, // wordlen = 4
1557     { 1, 2, 4, 1 }, // wordlen = 5
1558     { 1, 1, 5, 1 }, // wordlen = 6
1559     { 1, 1, 6, 1 }, // wordlen = 7
1560 };
1561
1562 /* Huffman tables for gain control data. */
1563 static const uint8_t atrac3p_gain_cbs[][12] = {
1564     {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1565     {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1566     {  1,  0,  2,  2,  1,  2,  8,  0,  0,  0,  0,  0 },
1567     {  1,  1,  1,  1,  1,  0,  2,  0,  8,  0,  0,  0 },
1568     {  1,  0,  3,  1,  1,  0,  2,  0,  8,  0,  0,  0 },
1569     {  1,  1,  1,  1,  1,  0,  1,  2,  8,  0,  0,  0 },
1570     {  0,  1,  0,  2, 11, 18,  0,  0,  0,  0,  0,  0 },
1571     {  0,  1,  2,  4,  4,  4,  0, 16,  0,  0,  0,  0 },
1572     {  0,  0,  0,  3, 23,  6,  0,  0,  0,  0,  0,  0 },
1573     {  0,  0,  5,  3,  2,  3,  2, 16,  0,  0,  0,  0 },
1574     {  1,  0,  0,  3,  2,  6, 20,  0,  0,  0,  0,  0 },
1575 };
1576
1577 static const uint8_t atrac3p_gain_xlats[] = {
1578     /* Number of gain control points 1 - 8 entries */
1579      0,  1,  2,  3,  4,  5,  6,  7,
1580     /* Number of gain control points 2 - 8 entries */
1581      0,  1,  7,  2,  6,  3,  4,  5,
1582     /* Gain compensation level 1 - 16 entries */
1583      7,  5,  8,  6,  9,  4, 10, 11,  0,  1,  2,  3, 12, 13, 14, 15,
1584     /* Gain compensation level 2 - 15 entries */
1585     15, 14,  1, 13,  2,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1586     /* Gain compensation level 3 - 16 entries */
1587      0,  1, 14, 15,  2, 13,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1588     /* Gain compensation level 4 - 16 entries */
1589      0,  1, 15, 14,  2, 13,  3, 12,  4,  5,  6,  7,  8,  9, 10, 11,
1590     /* Gain compensation location 3 - 32 entries */
1591      0,  1, 31,  2,  3,  4,  5,  6,  7, 26, 27, 28, 29, 30,  8,  9, 10, 11, 12,
1592     13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
1593     /* Gain compensation location 1 - 31 entries */
1594      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1595     20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1596     /* Gain compensation location 4 - 32 entries */
1597      0, 28, 29,  1,  2,  3,  4, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
1598     23, 24, 25, 26, 27, 30, 31,  5,  6,  7,  8,  9, 10,
1599     /* Gain compensation location 2 - 31 entries */
1600      2,  3,  4,  5,  6,  1,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1601     20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1602     /* Gain compensation location 5 - 32 entries */
1603      0,  1,  2, 31,  3,  4,  5,  6,  7,  8, 29, 30,  9, 10, 11, 12, 13, 14, 15,
1604     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
1605 };
1606
1607 /* Huffman tables for GHA waves data. */
1608 static const uint8_t atrac3p_tone_cbs[][12] = {
1609     {  1,  0,  1,  2,  4,  8,  0,  0,  0,  0,  0,  0 },
1610     {  1,  1,  1,  1,  1,  1,  2,  0,  0,  0,  0,  0 },
1611     {  1,  1,  1,  1,  0,  4,  0,  0,  0,  0,  0,  0 },
1612     {  0,  0,  0, 10,  8,  6,  0,  8,  0,  0,  0,  0 },
1613     {  0,  0,  0, 11,  5,  6,  6,  4,  0,  0,  0,  0 },
1614     {  0,  1,  3,  3,  1,  4,  4, 16,  0,  0,  0,  0 },
1615     {  1,  0,  0,  2,  2,  0,  9,  9, 29,104, 100, 0 },
1616 };
1617
1618 static const uint8_t atrac3p_tone_xlats[] = {
1619     /* Number of tone bands - 16 entries */
1620       0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
1621      15,
1622     /* Number of tones 1 - 8 entries */
1623       0,   1,   2,   3,   4,   5,   6,   7,
1624     /* Number of tones 2 - 8 entries */
1625       0,   1,   7,   2,   3,   4,   5,   6,
1626     /* Amplitude information 1 - 32 entries */
1627       8,   9,  10,  11,  12,  13,  14,  15,  16,  17,   5,   6,   7,  18,  19,
1628      20,  21,  22,   4,  23,  24,  25,  26,  27,   0,   1,   2,   3,  28,  29,
1629      30,  31,
1630     /* Amplitude information 2 - 32 entries */
1631      18,  19,  20,  21,  22,  23,  24,  25,  26,  27,  28,  14,  15,  16,  17,
1632      29,   9,  10,  11,  12,  13,  30,   4,   5,   6,   7,   8,  31,   0,   1,
1633       2,   3,
1634     /* Amplitude information 3 - 32 entries */
1635       0,   1,   2,  31,   3,  29,  30,   4,   5,   6,  27,  28,   7,  24,  25,
1636      26,   8,   9,  10,  11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,
1637      22,  23,
1638     /* Frequencies - 256 entries */
1639       0,   1, 255,   2, 254,   3,   4,   5,   6,   7,   8, 251, 252, 253,   9,
1640      10,  11,  12, 246, 247, 248, 249, 250,  13,  14,  15,  16,  17,  18,  19,
1641      20,  21,  22,  23,  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,
1642      35,  36,  37,  38, 243, 244, 245,  39,  40,  41,  42,  43,  44,  45,  46,
1643      47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,
1644      62,  63,  64,  65,  66,  67,  68,  69,  70,  71,  72,  73,  74,  75,  76,
1645      77,  78,  79,  80,  81,  82,  83,  84,  85,  86,  87,  88,  89,  90,  91,
1646      92,  93, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
1647     207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
1648     222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
1649     237, 238, 239, 240, 241, 242,  94,  95,  96,  97,  98,  99, 100, 101, 102,
1650     103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
1651     118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
1652     133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
1653     148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
1654     163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
1655     178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
1656     193,
1657 };
1658
1659 #endif /* AVCODEC_ATRAC3PLUS_DATA_H */