FFmpeg
atrac3plus_data.h
Go to the documentation of this file.
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
1413 
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 */
uint8_t bits
number of bits a single coefficient occupy
uint8_t is_signed
1 - values in that table are signed ones, otherwise - absolute ones
static const Atrac3pSpecCodeTab atrac3p_spectra_tabs[112]
static const uint8_t atrac3p_gain_cbs[][12]
static const uint8_t atrac3p_ct_cbs[][12]
VLC tables for code table indexes.
static const uint8_t atrac3p_sf_xlats[]
uint8_t
static const uint8_t atrac3p_wl_cbs[][12]
VLC tables for wordlen.
uint8_t num_coeffs
1 - map index to a single value, > 1 - map index to a vector of values
static const int atrac3p_subband_to_num_powgrps[16]
Map subband number to number of power compensation groups.
static const uint8_t atrac3p_qu_to_subband[32]
Map quant unit number to subband number.
static const int8_t atrac3p_sf_shapes[64][9]
2D base shape tables for scale factor coding.
static const int8_t atrac3p_sf_weights[2][32]
Tables for spectrum coding.
uint8_t group_size
number of coefficients grouped together
static const uint8_t atrac3p_qu_num_to_seg[32]
Ungroup table for word length segments.
static const uint8_t atrac3p_ct_restricted_to_full[2][7][4]
static const uint8_t atrac3p_spectra_xlats[]
static const int8_t atrac3p_wl_weights[6][32]
static const uint8_t atrac3p_gain_xlats[]
static const uint8_t atrac3p_tone_xlats[]
static const int8_t atrac3p_wl_shapes[8][16][9]
3D base shape tables.
static const uint8_t atrac3p_tone_cbs[][12]
static const uint8_t atrac3p_sf_cbs[][12]
VLC tables for scale factor indexes.
static const uint8_t atrac3p_wl_ct_xlats[]
static const int8_t atrac3p_spectra_cbs[][12]
Tables for spectrum coding.