Browse code

Canopus HQX decoder

Based on work by Kostya Shishkov <kostya.shishkov@gmail.com>.

Vittorio Giovara authored on 2015/02/23 03:38:31
Showing 14 changed files
... ...
@@ -19,6 +19,7 @@ version <next>:
19 19
 - RTP depacketizer for AC3 payload format (RFC 4184)
20 20
 - RTP depacketizer for loss tolerant payload format for MP3 audio (RFC 5219)
21 21
 - RTP depacketizer for DV (RFC 6469)
22
+- Canopus HQX decoder
22 23
 
23 24
 
24 25
 version 11:
... ...
@@ -222,6 +222,7 @@ library:
222 222
 @item Delphine Software International CIN @tab   @tab X
223 223
     @tab Multimedia format used by Delphine Software games.
224 224
 @item Digital Speech Standard (DSS) @tab   @tab X
225
+@item Canopus HQX               @tab   @tab X
225 226
 @item CD+G                      @tab   @tab X
226 227
     @tab Video format used by CD+G karaoke disks
227 228
 @item Commodore CDXL            @tab   @tab X
... ...
@@ -227,6 +227,7 @@ OBJS-$(CONFIG_HEVC_DECODER)            += hevc.o hevc_mvs.o hevc_ps.o hevc_sei.o
227 227
                                           hevc_cabac.o hevc_refs.o hevcpred.o    \
228 228
                                           hevcdsp.o hevc_filter.o
229 229
 OBJS-$(CONFIG_HNM4_VIDEO_DECODER)      += hnm4video.o
230
+OBJS-$(CONFIG_HQX_DECODER)             += hqx.o hqxvlc.o
230 231
 OBJS-$(CONFIG_HUFFYUV_DECODER)         += huffyuv.o huffyuvdec.o
231 232
 OBJS-$(CONFIG_HUFFYUV_ENCODER)         += huffyuv.o huffyuvenc.o
232 233
 OBJS-$(CONFIG_IDCIN_DECODER)           += idcinvideo.o
... ...
@@ -164,6 +164,7 @@ void avcodec_register_all(void)
164 164
     REGISTER_DECODER(H264_QSV,          h264_qsv);
165 165
     REGISTER_DECODER(HEVC,              hevc);
166 166
     REGISTER_DECODER(HNM4_VIDEO,        hnm4_video);
167
+    REGISTER_DECODER(HQX,               hqx);
167 168
     REGISTER_ENCDEC (HUFFYUV,           huffyuv);
168 169
     REGISTER_DECODER(IDCIN,             idcin);
169 170
     REGISTER_DECODER(IFF_BYTERUN1,      iff_byterun1);
... ...
@@ -293,6 +293,7 @@ enum AVCodecID {
293 293
     AV_CODEC_ID_SGIRLE,
294 294
     AV_CODEC_ID_MVC1,
295 295
     AV_CODEC_ID_MVC2,
296
+    AV_CODEC_ID_HQX,
296 297
 
297 298
     /* various PCM "codecs" */
298 299
     AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
... ...
@@ -1134,6 +1134,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
1134 1134
         .long_name = NULL_IF_CONFIG_SMALL("SGI RLE 8-bit"),
1135 1135
         .props     = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS,
1136 1136
     },
1137
+    {
1138
+        .id        = AV_CODEC_ID_HQX,
1139
+        .type      = AVMEDIA_TYPE_VIDEO,
1140
+        .name      = "hqx",
1141
+        .long_name = NULL_IF_CONFIG_SMALL("Canopus HQX"),
1142
+        .props     = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY,
1143
+    },
1137 1144
 
1138 1145
     /* image codecs */
1139 1146
     {
1140 1147
new file mode 100644
... ...
@@ -0,0 +1,645 @@
0
+/*
1
+ * Canopus HQX decoder
2
+ *
3
+ * This file is part of Libav.
4
+ *
5
+ * Libav is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * Libav is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with Libav; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+#include <inttypes.h>
21
+
22
+#include "libavutil/imgutils.h"
23
+#include "libavutil/intreadwrite.h"
24
+
25
+#include "avcodec.h"
26
+#include "get_bits.h"
27
+#include "internal.h"
28
+
29
+#include "hqx.h"
30
+
31
+/* HQX has four modes - 422, 444, 422alpha and 444alpha - all 12-bit */
32
+enum HQXFormat {
33
+    HQX_422 = 0,
34
+    HQX_444,
35
+    HQX_422A,
36
+    HQX_444A,
37
+};
38
+
39
+#define HQX_HEADER_SIZE 59
40
+
41
+typedef int (*mb_decode_func)(HQXContext *ctx, AVFrame *pic,
42
+                              GetBitContext *gb, int x, int y);
43
+
44
+/* macroblock selects a group of 4 possible quants and
45
+ * a block can use any of those four quantisers
46
+ * one column is powers of 2, the other one is powers of 2 * 3,
47
+ * then there is the special one, powers of 2 * 5 */
48
+static const int hqx_quants[16][4] = {
49
+    {  0x1,   0x2,   0x4,   0x8 }, {  0x1,  0x3,   0x6,   0xC },
50
+    {  0x2,   0x4,   0x8,  0x10 }, {  0x3,  0x6,   0xC,  0x18 },
51
+    {  0x4,   0x8,  0x10,  0x20 }, {  0x6,  0xC,  0x18,  0x30 },
52
+    {  0x8,  0x10,  0x20,  0x40 },
53
+                      { 0xA, 0x14, 0x28, 0x50 },
54
+                                   {  0xC, 0x18,  0x30,  0x60 },
55
+    { 0x10,  0x20,  0x40,  0x80 }, { 0x18, 0x30,  0x60,  0xC0 },
56
+    { 0x20,  0x40,  0x80, 0x100 }, { 0x30, 0x60,  0xC0, 0x180 },
57
+    { 0x40,  0x80, 0x100, 0x200 }, { 0x60, 0xC0, 0x180, 0x300 },
58
+    { 0x80, 0x100, 0x200, 0x400 }
59
+};
60
+
61
+static const uint8_t hqx_quant_luma[64] = {
62
+    16,  16,  16,  19,  19,  19,  42,  44,
63
+    16,  16,  19,  19,  19,  38,  43,  45,
64
+    16,  19,  19,  19,  40,  41,  45,  48,
65
+    19,  19,  19,  40,  41,  42,  46,  49,
66
+    19,  19,  40,  41,  42,  43,  48, 101,
67
+    19,  38,  41,  42,  43,  44,  98, 104,
68
+    42,  43,  45,  46,  48,  98, 109, 116,
69
+    44,  45,  48,  49, 101, 104, 116, 123,
70
+};
71
+
72
+static const uint8_t hqx_quant_chroma[64] = {
73
+    16,  16,  19,  25,  26,  26,  42,  44,
74
+    16,  19,  25,  25,  26,  38,  43,  91,
75
+    19,  25,  26,  27,  40,  41,  91,  96,
76
+    25,  25,  27,  40,  41,  84,  93, 197,
77
+    26,  26,  40,  41,  84,  86, 191, 203,
78
+    26,  38,  41,  84,  86, 177, 197, 209,
79
+    42,  43,  91,  93, 191, 197, 219, 232,
80
+    44,  91,  96, 197, 203, 209, 232, 246,
81
+};
82
+
83
+static inline void idct_col(int16_t *blk, const uint8_t *quant)
84
+{
85
+    int t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, tA, tB, tC, tD, tE, tF;
86
+    int t10, t11, t12, t13;
87
+    int s0, s1, s2, s3, s4, s5, s6, s7;
88
+
89
+    s0 = (int) blk[0 * 8] * quant[0 * 8];
90
+    s1 = (int) blk[1 * 8] * quant[1 * 8];
91
+    s2 = (int) blk[2 * 8] * quant[2 * 8];
92
+    s3 = (int) blk[3 * 8] * quant[3 * 8];
93
+    s4 = (int) blk[4 * 8] * quant[4 * 8];
94
+    s5 = (int) blk[5 * 8] * quant[5 * 8];
95
+    s6 = (int) blk[6 * 8] * quant[6 * 8];
96
+    s7 = (int) blk[7 * 8] * quant[7 * 8];
97
+
98
+    t0  =  (s3 * 19266 + s5 * 12873) >> 15;
99
+    t1  =  (s5 * 19266 - s3 * 12873) >> 15;
100
+    t2  = ((s7 * 4520  + s1 * 22725) >> 15) - t0;
101
+    t3  = ((s1 * 4520  - s7 * 22725) >> 15) - t1;
102
+    t4  = t0 * 2 + t2;
103
+    t5  = t1 * 2 + t3;
104
+    t6  = t2 - t3;
105
+    t7  = t3 * 2 + t6;
106
+    t8  = (t6 * 11585) >> 14;
107
+    t9  = (t7 * 11585) >> 14;
108
+    tA  = (s2 * 8867 - s6 * 21407) >> 14;
109
+    tB  = (s6 * 8867 + s2 * 21407) >> 14;
110
+    tC  = (s0 >> 1) - (s4 >> 1);
111
+    tD  = (s4 >> 1) * 2 + tC;
112
+    tE  = tC - (tA >> 1);
113
+    tF  = tD - (tB >> 1);
114
+    t10 = tF - t5;
115
+    t11 = tE - t8;
116
+    t12 = tE + (tA >> 1) * 2 - t9;
117
+    t13 = tF + (tB >> 1) * 2 - t4;
118
+
119
+    blk[0 * 8] = t13 + t4 * 2;
120
+    blk[1 * 8] = t12 + t9 * 2;
121
+    blk[2 * 8] = t11 + t8 * 2;
122
+    blk[3 * 8] = t10 + t5 * 2;
123
+    blk[4 * 8] = t10;
124
+    blk[5 * 8] = t11;
125
+    blk[6 * 8] = t12;
126
+    blk[7 * 8] = t13;
127
+}
128
+
129
+static inline void idct_row(int16_t *blk)
130
+{
131
+    int t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, tA, tB, tC, tD, tE, tF;
132
+    int t10, t11, t12, t13;
133
+
134
+    t0  =  (blk[3] * 19266 + blk[5] * 12873) >> 14;
135
+    t1  =  (blk[5] * 19266 - blk[3] * 12873) >> 14;
136
+    t2  = ((blk[7] * 4520  + blk[1] * 22725) >> 14) - t0;
137
+    t3  = ((blk[1] * 4520  - blk[7] * 22725) >> 14) - t1;
138
+    t4  = t0 * 2 + t2;
139
+    t5  = t1 * 2 + t3;
140
+    t6  = t2 - t3;
141
+    t7  = t3 * 2 + t6;
142
+    t8  = (t6 * 11585) >> 14;
143
+    t9  = (t7 * 11585) >> 14;
144
+    tA  = (blk[2] * 8867 - blk[6] * 21407) >> 14;
145
+    tB  = (blk[6] * 8867 + blk[2] * 21407) >> 14;
146
+    tC  = blk[0] - blk[4];
147
+    tD  = blk[4] * 2 + tC;
148
+    tE  = tC - tA;
149
+    tF  = tD - tB;
150
+    t10 = tF - t5;
151
+    t11 = tE - t8;
152
+    t12 = tE + tA * 2 - t9;
153
+    t13 = tF + tB * 2 - t4;
154
+
155
+    blk[0] = (t13 + t4 * 2 + 4) >> 3;
156
+    blk[1] = (t12 + t9 * 2 + 4) >> 3;
157
+    blk[2] = (t11 + t8 * 2 + 4) >> 3;
158
+    blk[3] = (t10 + t5 * 2 + 4) >> 3;
159
+    blk[4] = (t10          + 4) >> 3;
160
+    blk[5] = (t11          + 4) >> 3;
161
+    blk[6] = (t12          + 4) >> 3;
162
+    blk[7] = (t13          + 4) >> 3;
163
+}
164
+
165
+static void hqx_idct(int16_t *block, const uint8_t *quant)
166
+{
167
+    int i;
168
+
169
+    for (i = 0; i < 8; i++)
170
+        idct_col(block + i, quant + i);
171
+    for (i = 0; i < 8; i++)
172
+        idct_row(block + i * 8);
173
+}
174
+
175
+static void hqx_idct_put(uint16_t *dst, ptrdiff_t stride,
176
+                         int16_t *block, const uint8_t *quant)
177
+{
178
+    int i, j;
179
+
180
+    hqx_idct(block, quant);
181
+
182
+    for (i = 0; i < 8; i++) {
183
+        for (j = 0; j < 8; j++) {
184
+            int v = av_clip(block[j + i * 8] + 0x800, 0, 0x1000);
185
+            dst[j] = (v << 4) | (v >> 8);
186
+        }
187
+        dst += stride >> 1;
188
+    }
189
+}
190
+
191
+static inline void put_blocks(AVFrame *pic, int plane,
192
+                              int x, int y, int ilace,
193
+                              int16_t *block0, int16_t *block1,
194
+                              const uint8_t *quant)
195
+{
196
+    int fields = ilace ? 2 : 1;
197
+    int lsize = pic->linesize[plane];
198
+    uint8_t *p = pic->data[plane] + x * 2;
199
+
200
+    hqx_idct_put((uint16_t *)(p + y * lsize), lsize * fields, block0, quant);
201
+    hqx_idct_put((uint16_t *)(p + (y + (ilace ? 1 : 8)) * lsize),
202
+                 lsize * fields, block1, quant);
203
+}
204
+
205
+static inline void hqx_get_ac(GetBitContext *gb, const HQXAC *ac,
206
+                              int *run, int *lev)
207
+{
208
+    int val;
209
+
210
+    val = show_bits(gb, ac->lut_bits);
211
+    if (ac->lut[val].bits == -1) {
212
+        GetBitContext gb2 = *gb;
213
+        skip_bits(&gb2, ac->lut_bits);
214
+        val = ac->lut[val].lev + show_bits(&gb2, ac->extra_bits);
215
+    }
216
+    *run = ac->lut[val].run;
217
+    *lev = ac->lut[val].lev;
218
+    skip_bits(gb, ac->lut[val].bits);
219
+}
220
+
221
+static int decode_block(GetBitContext *gb, VLC *vlc,
222
+                        const int *quants, int dcb,
223
+                        int16_t block[64], int *last_dc)
224
+{
225
+    int q, dc;
226
+    int ac_idx;
227
+    int run, lev, pos = 1;
228
+
229
+    memset(block, 0, 64 * sizeof(*block));
230
+    dc = get_vlc2(gb, vlc->table, HQX_DC_VLC_BITS, 2);
231
+    if (dc < 0)
232
+        return AVERROR_INVALIDDATA;
233
+    *last_dc += dc;
234
+
235
+    block[0] = sign_extend(*last_dc << (12 - dcb), 12);
236
+
237
+    q = quants[get_bits(gb, 2)];
238
+    if (q >= 128)
239
+        ac_idx = HQX_AC_Q128;
240
+    else if (q >= 64)
241
+        ac_idx = HQX_AC_Q64;
242
+    else if (q >= 32)
243
+        ac_idx = HQX_AC_Q32;
244
+    else if (q >= 16)
245
+        ac_idx = HQX_AC_Q16;
246
+    else if (q >= 8)
247
+        ac_idx = HQX_AC_Q8;
248
+    else
249
+        ac_idx = HQX_AC_Q0;
250
+
251
+    do {
252
+        hqx_get_ac(gb, &ff_hqx_ac[ac_idx], &run, &lev);
253
+        pos += run;
254
+        if (pos >= 64)
255
+            break;
256
+        block[ff_zigzag_direct[pos++]] = lev * q;
257
+    } while (pos < 64);
258
+
259
+    return 0;
260
+}
261
+
262
+static int hqx_decode_422(HQXContext *ctx, AVFrame *pic,
263
+                          GetBitContext *gb, int x, int y)
264
+{
265
+    const int *quants;
266
+    int flag;
267
+    int last_dc;
268
+    int i, ret;
269
+
270
+    if (ctx->interlaced)
271
+        flag = get_bits1(gb);
272
+    else
273
+        flag = 0;
274
+
275
+    quants = hqx_quants[get_bits(gb, 4)];
276
+
277
+    for (i = 0; i < 8; i++) {
278
+        int vlc_index = ctx->dcb - 9;
279
+        if (i == 0 || i == 4 || i == 6)
280
+            last_dc = 0;
281
+        ret = decode_block(gb, &ctx->dc_vlc[vlc_index], quants,
282
+                           ctx->dcb, ctx->block[i], &last_dc);
283
+        if (ret < 0)
284
+            return ret;
285
+    }
286
+
287
+    put_blocks(pic, 0, x,      y, flag, ctx->block[0], ctx->block[2], hqx_quant_luma);
288
+    put_blocks(pic, 0, x + 8,  y, flag, ctx->block[1], ctx->block[3], hqx_quant_luma);
289
+    put_blocks(pic, 2, x >> 1, y, flag, ctx->block[4], ctx->block[5], hqx_quant_chroma);
290
+    put_blocks(pic, 1, x >> 1, y, flag, ctx->block[6], ctx->block[7], hqx_quant_chroma);
291
+
292
+    return 0;
293
+}
294
+
295
+static int hqx_decode_422a(HQXContext *ctx, AVFrame *pic,
296
+                           GetBitContext *gb, int x, int y)
297
+{
298
+    const int *quants;
299
+    int flag = 0;
300
+    int last_dc;
301
+    int i, ret;
302
+    int cbp;
303
+
304
+    cbp = get_vlc2(gb, ctx->cbp_vlc.table, ctx->cbp_vlc.bits, 1);
305
+
306
+    for (i = 0; i < 12; i++)
307
+        memset(ctx->block[i], 0, sizeof(**ctx->block) * 64);
308
+    for (i = 0; i < 12; i++)
309
+        ctx->block[i][0] = -0x800;
310
+    if (cbp) {
311
+        if (ctx->interlaced)
312
+            flag = get_bits1(gb);
313
+
314
+        quants = hqx_quants[get_bits(gb, 4)];
315
+
316
+        cbp |= cbp << 4; // alpha CBP
317
+        if (cbp & 0x3)   // chroma CBP - top
318
+            cbp |= 0x500;
319
+        if (cbp & 0xC)   // chroma CBP - bottom
320
+            cbp |= 0xA00;
321
+        for (i = 0; i < 12; i++) {
322
+            if (i == 0 || i == 4 || i == 8 || i == 10)
323
+                last_dc = 0;
324
+            if (cbp & (1 << i)) {
325
+                int vlc_index = ctx->dcb - 9;
326
+                ret = decode_block(gb, &ctx->dc_vlc[vlc_index], quants,
327
+                                   ctx->dcb, ctx->block[i], &last_dc);
328
+                if (ret < 0)
329
+                    return ret;
330
+            }
331
+        }
332
+    }
333
+
334
+    put_blocks(pic, 3, x,      y, flag, ctx->block[ 0], ctx->block[ 2], hqx_quant_luma);
335
+    put_blocks(pic, 3, x + 8,  y, flag, ctx->block[ 1], ctx->block[ 3], hqx_quant_luma);
336
+    put_blocks(pic, 0, x,      y, flag, ctx->block[ 4], ctx->block[ 6], hqx_quant_luma);
337
+    put_blocks(pic, 0, x + 8,  y, flag, ctx->block[ 5], ctx->block[ 7], hqx_quant_luma);
338
+    put_blocks(pic, 2, x >> 1, y, flag, ctx->block[ 8], ctx->block[ 9], hqx_quant_chroma);
339
+    put_blocks(pic, 1, x >> 1, y, flag, ctx->block[10], ctx->block[11], hqx_quant_chroma);
340
+
341
+    return 0;
342
+}
343
+
344
+static int hqx_decode_444(HQXContext *ctx, AVFrame *pic,
345
+                          GetBitContext *gb, int x, int y)
346
+{
347
+    const int *quants;
348
+    int flag;
349
+    int last_dc;
350
+    int i, ret;
351
+
352
+    if (ctx->interlaced)
353
+        flag = get_bits1(gb);
354
+    else
355
+        flag = 0;
356
+
357
+    quants = hqx_quants[get_bits(gb, 4)];
358
+
359
+    for (i = 0; i < 12; i++) {
360
+        int vlc_index = ctx->dcb - 9;
361
+        if (i == 0 || i == 4 || i == 8)
362
+            last_dc = 0;
363
+        ret = decode_block(gb, &ctx->dc_vlc[vlc_index], quants,
364
+                           ctx->dcb, ctx->block[i], &last_dc);
365
+        if (ret < 0)
366
+            return ret;
367
+    }
368
+
369
+    put_blocks(pic, 0, x,     y, flag, ctx->block[0], ctx->block[ 2], hqx_quant_luma);
370
+    put_blocks(pic, 0, x + 8, y, flag, ctx->block[1], ctx->block[ 3], hqx_quant_luma);
371
+    put_blocks(pic, 2, x,     y, flag, ctx->block[4], ctx->block[ 6], hqx_quant_chroma);
372
+    put_blocks(pic, 2, x + 8, y, flag, ctx->block[5], ctx->block[ 7], hqx_quant_chroma);
373
+    put_blocks(pic, 1, x,     y, flag, ctx->block[8], ctx->block[10], hqx_quant_chroma);
374
+    put_blocks(pic, 1, x + 8, y, flag, ctx->block[9], ctx->block[11], hqx_quant_chroma);
375
+
376
+    return 0;
377
+}
378
+
379
+static int hqx_decode_444a(HQXContext *ctx, AVFrame *pic,
380
+                           GetBitContext *gb, int x, int y)
381
+{
382
+    const int *quants;
383
+    int flag = 0;
384
+    int last_dc;
385
+    int i, ret;
386
+    int cbp;
387
+
388
+    cbp = get_vlc2(gb, ctx->cbp_vlc.table, ctx->cbp_vlc.bits, 1);
389
+
390
+    for (i = 0; i < 16; i++)
391
+        memset(ctx->block[i], 0, sizeof(**ctx->block) * 64);
392
+    for (i = 0; i < 16; i++)
393
+        ctx->block[i][0] = -0x800;
394
+    if (cbp) {
395
+        if (ctx->interlaced)
396
+            flag = get_bits1(gb);
397
+
398
+        quants = hqx_quants[get_bits(gb, 4)];
399
+
400
+        cbp |= cbp << 4; // alpha CBP
401
+        cbp |= cbp << 8; // chroma CBP
402
+        for (i = 0; i < 16; i++) {
403
+            if (i == 0 || i == 4 || i == 8 || i == 12)
404
+                last_dc = 0;
405
+            if (cbp & (1 << i)) {
406
+                int vlc_index = ctx->dcb - 9;
407
+                ret = decode_block(gb, &ctx->dc_vlc[vlc_index], quants,
408
+                                   ctx->dcb, ctx->block[i], &last_dc);
409
+                if (ret < 0)
410
+                    return ret;
411
+            }
412
+        }
413
+    }
414
+
415
+    put_blocks(pic, 3, x,     y, flag, ctx->block[ 0], ctx->block[ 2], hqx_quant_luma);
416
+    put_blocks(pic, 3, x + 8, y, flag, ctx->block[ 1], ctx->block[ 3], hqx_quant_luma);
417
+    put_blocks(pic, 0, x,     y, flag, ctx->block[ 4], ctx->block[ 6], hqx_quant_luma);
418
+    put_blocks(pic, 0, x + 8, y, flag, ctx->block[ 5], ctx->block[ 7], hqx_quant_luma);
419
+    put_blocks(pic, 2, x,     y, flag, ctx->block[ 8], ctx->block[10], hqx_quant_chroma);
420
+    put_blocks(pic, 2, x + 8, y, flag, ctx->block[ 9], ctx->block[11], hqx_quant_chroma);
421
+    put_blocks(pic, 1, x,     y, flag, ctx->block[12], ctx->block[14], hqx_quant_chroma);
422
+    put_blocks(pic, 1, x + 8, y, flag, ctx->block[13], ctx->block[15], hqx_quant_chroma);
423
+
424
+    return 0;
425
+}
426
+
427
+static const int shuffle_16[16] = {
428
+    0, 5, 11, 14, 2, 7, 9, 13, 1, 4, 10, 15, 3, 6, 8, 12
429
+};
430
+
431
+static int decode_slice(HQXContext *ctx, AVFrame *pic, GetBitContext *gb,
432
+                        int slice_no, mb_decode_func decode_func)
433
+{
434
+    int mb_w = (ctx->width  + 15) >> 4;
435
+    int mb_h = (ctx->height + 15) >> 4;
436
+    int grp_w = (mb_w + 4) / 5;
437
+    int grp_h = (mb_h + 4) / 5;
438
+    int grp_h_edge = grp_w * (mb_w / grp_w);
439
+    int grp_v_edge = grp_h * (mb_h / grp_h);
440
+    int grp_v_rest = mb_w - grp_h_edge;
441
+    int grp_h_rest = mb_h - grp_v_edge;
442
+    int num_mbs = mb_w * mb_h;
443
+    int num_tiles = (num_mbs + 479) / 480;
444
+    int std_tile_blocks = num_mbs / (16 * num_tiles);
445
+    int g_tile = slice_no * num_tiles;
446
+    int blk_addr, loc_addr, mb_x, mb_y, pos, loc_row, i;
447
+    int tile_blocks, tile_limit, tile_no;
448
+
449
+    for (tile_no = 0; tile_no < num_tiles; tile_no++, g_tile++) {
450
+        tile_blocks = std_tile_blocks;
451
+        tile_limit = -1;
452
+        if (g_tile < num_mbs - std_tile_blocks * 16 * num_tiles) {
453
+            tile_limit = num_mbs / (16 * num_tiles);
454
+            tile_blocks++;
455
+        }
456
+        for (i = 0; i < tile_blocks; i++) {
457
+            if (i == tile_limit)
458
+                blk_addr = g_tile + 16 * num_tiles * i;
459
+            else
460
+                blk_addr = tile_no + 16 * num_tiles * i +
461
+                           num_tiles * shuffle_16[(i + slice_no) & 0xF];
462
+            loc_row  = grp_h * (blk_addr / (grp_h * mb_w));
463
+            loc_addr =          blk_addr % (grp_h * mb_w);
464
+            if (loc_row >= grp_v_edge) {
465
+                mb_x = grp_w * (loc_addr / (grp_h_rest * grp_w));
466
+                pos  =          loc_addr % (grp_h_rest * grp_w);
467
+            } else {
468
+                mb_x = grp_w * (loc_addr / (grp_h * grp_w));
469
+                pos  =          loc_addr % (grp_h * grp_w);
470
+            }
471
+            if (mb_x >= grp_h_edge) {
472
+                mb_x +=            pos % grp_v_rest;
473
+                mb_y  = loc_row + (pos / grp_v_rest);
474
+            } else {
475
+                mb_x +=            pos % grp_w;
476
+                mb_y  = loc_row + (pos / grp_w);
477
+            }
478
+            decode_func(ctx, pic, gb, mb_x * 16, mb_y * 16);
479
+        }
480
+    }
481
+
482
+    return 0;
483
+}
484
+
485
+static int hqx_decode_frame(AVCodecContext *avctx, void *data,
486
+                            int *got_picture_ptr, AVPacket *avpkt)
487
+{
488
+    HQXContext *ctx = avctx->priv_data;
489
+    AVFrame *pic = data;
490
+    uint8_t *src = avpkt->data;
491
+    uint32_t info_tag, info_offset;
492
+    int data_start;
493
+    unsigned data_size;
494
+    GetBitContext gb;
495
+    int i, ret;
496
+    int slice;
497
+    uint32_t slice_off[17];
498
+    mb_decode_func decode_func = 0;
499
+
500
+    if (avpkt->size < 8)
501
+        return AVERROR_INVALIDDATA;
502
+
503
+    /* Skip the INFO header if present */
504
+    info_offset = 0;
505
+    info_tag    = AV_RL32(src);
506
+    if (info_tag == MKTAG('I', 'N', 'F', 'O')) {
507
+        info_offset = AV_RL32(src + 4);
508
+        if (info_offset > UINT32_MAX - 8 || info_offset + 8 > avpkt->size) {
509
+            av_log(avctx, AV_LOG_ERROR,
510
+                   "Invalid INFO header offset: 0x%08"PRIX32" is too large.\n",
511
+                   info_offset);
512
+            return AVERROR_INVALIDDATA;
513
+        }
514
+
515
+        info_offset += 8;
516
+        src         += info_offset;
517
+
518
+        av_log(avctx, AV_LOG_DEBUG, "Skipping INFO chunk.\n");
519
+    }
520
+
521
+    data_start = src - avpkt->data;
522
+    data_size  = avpkt->size - data_start;
523
+
524
+    if (data_size < HQX_HEADER_SIZE) {
525
+        av_log(avctx, AV_LOG_ERROR, "Frame too small.\n");
526
+        return AVERROR_INVALIDDATA;
527
+    }
528
+
529
+    if (src[0] != 'H' || src[1] != 'Q') {
530
+        av_log(avctx, AV_LOG_ERROR, "Not an HQX frame.\n");
531
+        return AVERROR_INVALIDDATA;
532
+    }
533
+    ctx->interlaced = !(src[2] & 0x80);
534
+    ctx->format     = src[2] & 7;
535
+    ctx->dcb        = (src[3] & 3) + 8;
536
+    ctx->width      = AV_RB16(src + 4);
537
+    ctx->height     = AV_RB16(src + 6);
538
+    for (i = 0; i < 17; i++)
539
+        slice_off[i] = AV_RB24(src + 8 + i * 3);
540
+
541
+    if (ctx->dcb == 8) {
542
+        av_log(avctx, AV_LOG_ERROR, "Invalid DC precision %d.\n", ctx->dcb);
543
+        return AVERROR_INVALIDDATA;
544
+    }
545
+    ret = av_image_check_size(ctx->width, ctx->height, 0, avctx);
546
+    if (ret < 0) {
547
+        av_log(avctx, AV_LOG_ERROR, "Invalid stored dimenstions %dx%d.\n",
548
+               ctx->width, ctx->height);
549
+        return AVERROR_INVALIDDATA;
550
+    }
551
+
552
+    avctx->coded_width         = FFALIGN(ctx->width,  16);
553
+    avctx->coded_height        = FFALIGN(ctx->height, 16);
554
+    avctx->width               = ctx->width;
555
+    avctx->height              = ctx->height;
556
+    avctx->bits_per_raw_sample = 10;
557
+
558
+    switch (ctx->format) {
559
+    case HQX_422:
560
+        avctx->pix_fmt = AV_PIX_FMT_YUV422P16;
561
+        decode_func = hqx_decode_422;
562
+        break;
563
+    case HQX_444:
564
+        avctx->pix_fmt = AV_PIX_FMT_YUV444P16;
565
+        decode_func = hqx_decode_444;
566
+        break;
567
+    case HQX_422A:
568
+        avctx->pix_fmt = AV_PIX_FMT_YUVA422P16;
569
+        decode_func = hqx_decode_422a;
570
+        break;
571
+    case HQX_444A:
572
+        avctx->pix_fmt = AV_PIX_FMT_YUVA444P16;
573
+        decode_func = hqx_decode_444a;
574
+        break;
575
+    }
576
+    if (!decode_func) {
577
+        av_log(avctx, AV_LOG_ERROR, "Invalid format: %d.\n", ctx->format);
578
+        return AVERROR_INVALIDDATA;
579
+    }
580
+
581
+    ret = ff_get_buffer(avctx, pic, 0);
582
+    if (ret < 0) {
583
+        av_log(avctx, AV_LOG_ERROR, "Could not allocate buffer.\n");
584
+        return ret;
585
+    }
586
+
587
+    for (slice = 0; slice < 16; slice++) {
588
+        if (slice_off[slice] < HQX_HEADER_SIZE ||
589
+            slice_off[slice] >= slice_off[slice + 1] ||
590
+            slice_off[slice + 1] > data_size) {
591
+            av_log(avctx, AV_LOG_ERROR, "Invalid slice size.\n");
592
+            break;
593
+        }
594
+        ret = init_get_bits(&gb, src + slice_off[slice],
595
+                            (slice_off[slice + 1] - slice_off[slice]) * 8);
596
+        if (ret < 0)
597
+            return ret;
598
+        ret = decode_slice(ctx, pic, &gb, slice, decode_func);
599
+        if (ret < 0) {
600
+            av_log(avctx, AV_LOG_ERROR, "Error decoding slice %d.\n", slice);
601
+        }
602
+    }
603
+
604
+    pic->key_frame = 1;
605
+    pic->pict_type = AV_PICTURE_TYPE_I;
606
+
607
+    *got_picture_ptr = 1;
608
+
609
+    return avpkt->size;
610
+}
611
+
612
+static av_cold int hqx_decode_close(AVCodecContext *avctx)
613
+{
614
+    int i;
615
+    HQXContext *ctx = avctx->priv_data;
616
+
617
+    ff_free_vlc(&ctx->cbp_vlc);
618
+    for (i = 0; i < 3; i++) {
619
+        ff_free_vlc(&ctx->dc_vlc[i]);
620
+    }
621
+
622
+    return 0;
623
+}
624
+
625
+static av_cold int hqx_decode_init(AVCodecContext *avctx)
626
+{
627
+    HQXContext *ctx = avctx->priv_data;
628
+    int ret = ff_hqx_init_vlcs(ctx);
629
+    if (ret < 0)
630
+        hqx_decode_close(avctx);
631
+    return ret;
632
+}
633
+
634
+AVCodec ff_hqx_decoder = {
635
+    .name           = "hqx",
636
+    .long_name      = NULL_IF_CONFIG_SMALL("Canopus HQX"),
637
+    .type           = AVMEDIA_TYPE_VIDEO,
638
+    .id             = AV_CODEC_ID_HQX,
639
+    .priv_data_size = sizeof(HQXContext),
640
+    .init           = hqx_decode_init,
641
+    .decode         = hqx_decode_frame,
642
+    .close          = hqx_decode_close,
643
+    .capabilities   = CODEC_CAP_DR1,
644
+};
0 645
new file mode 100644
... ...
@@ -0,0 +1,65 @@
0
+/*
1
+ * Canopus HQX decoder
2
+ *
3
+ * This file is part of Libav.
4
+ *
5
+ * Libav is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * Libav is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with Libav; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+#ifndef AVCODEC_HQX_H
21
+#define AVCODEC_HQX_H
22
+
23
+#include <stdint.h>
24
+#include "libavutil/mem.h"
25
+#include "get_bits.h"
26
+
27
+enum HQXACMode {
28
+    HQX_AC_Q0 = 0,
29
+    HQX_AC_Q8,
30
+    HQX_AC_Q16,
31
+    HQX_AC_Q32,
32
+    HQX_AC_Q64,
33
+    HQX_AC_Q128,
34
+    NUM_HQX_AC
35
+};
36
+
37
+typedef struct HQXLUT {
38
+    int16_t lev;
39
+    uint8_t run;
40
+    int8_t  bits;
41
+} HQXLUT;
42
+
43
+typedef struct HQXAC {
44
+    int lut_bits, extra_bits;
45
+    const HQXLUT *lut;
46
+} HQXAC;
47
+
48
+typedef struct HQXContext {
49
+    int format, dcb, width, height;
50
+    int interlaced;
51
+
52
+    DECLARE_ALIGNED(16, int16_t, block)[16][64];
53
+
54
+    VLC cbp_vlc;
55
+    VLC dc_vlc[3];
56
+} HQXContext;
57
+
58
+#define HQX_DC_VLC_BITS 9
59
+
60
+extern const HQXAC ff_hqx_ac[NUM_HQX_AC];
61
+
62
+int ff_hqx_init_vlcs(HQXContext *ctx);
63
+
64
+#endif /* AVCODEC_HQX_H */
0 65
new file mode 100644
... ...
@@ -0,0 +1,2167 @@
0
+/*
1
+ * Canopus HQX decoder
2
+ *
3
+ * This file is part of Libav.
4
+ *
5
+ * Libav is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * Libav is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with Libav; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+#include "hqx.h"
21
+
22
+static const uint8_t cbp_vlc_bits[16] = {
23
+    0x04, 0x1C, 0x1D, 0x09, 0x1E, 0x0B, 0x1B, 0x08,
24
+    0x1F, 0x1A, 0x0C, 0x07, 0x0A, 0x06, 0x05, 0x00,
25
+};
26
+
27
+static const uint8_t cbp_vlc_lens[16] = {
28
+    4, 5, 5, 4, 5, 4, 5, 4, 5, 5, 4, 4, 4, 4, 4, 2,
29
+};
30
+
31
+static const uint16_t dc9_vlc_bits[512] = {
32
+    0x0010, 0x0008, 0x0022, 0x0024, 0x0026, 0x0028, 0x002A, 0x002C,
33
+    0x002E, 0x0030, 0x0032, 0x0034, 0x0074, 0x0076, 0x0078, 0x007A,
34
+    0x007C, 0x0000, 0x0002, 0x0004, 0x0006, 0x0008, 0x000A, 0x000C,
35
+    0x000E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058, 0x005A, 0x005C,
36
+    0x005E, 0x0020, 0x0022, 0x0024, 0x0026, 0x0028, 0x002A, 0x002C,
37
+    0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038, 0x003A, 0x003C,
38
+    0x003E, 0x00C0, 0x00C2, 0x00C4, 0x00C6, 0x00C8, 0x00CA, 0x00CC,
39
+    0x00CE, 0x00D0, 0x00D2, 0x00D4, 0x00D6, 0x00D8, 0x00DA, 0x00DC,
40
+    0x00DE, 0x01C0, 0x01C2, 0x01C4, 0x01C6, 0x01C8, 0x01CA, 0x01CC,
41
+    0x01CE, 0x01D0, 0x01D2, 0x01D4, 0x01D6, 0x01D8, 0x01DA, 0x01DC,
42
+    0x01DE, 0x01E0, 0x01E2, 0x01E4, 0x01E6, 0x01E8, 0x01EA, 0x01EC,
43
+    0x01EE, 0x01F0, 0x01F2, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FC,
44
+    0x01FE, 0x06C0, 0x06C2, 0x06C4, 0x06C6, 0x06C8, 0x06CA, 0x06CC,
45
+    0x06CE, 0x06D0, 0x06D2, 0x06D4, 0x06D6, 0x06D8, 0x06DA, 0x06DC,
46
+    0x06DE, 0x06E0, 0x06E2, 0x06E4, 0x06E6, 0x06E8, 0x06EA, 0x06EC,
47
+    0x06EE, 0x06F0, 0x06F2, 0x06F4, 0x06F6, 0x06F8, 0x06FA, 0x06FC,
48
+    0x06FE, 0x0E00, 0x0E02, 0x0E04, 0x0E06, 0x0E08, 0x0E0A, 0x0E0C,
49
+    0x0E0E, 0x0E10, 0x0E12, 0x0E14, 0x0E16, 0x0E18, 0x0E1A, 0x0E1C,
50
+    0x0E1E, 0x0E20, 0x0E22, 0x0E24, 0x0E26, 0x0E28, 0x0E2A, 0x0E2C,
51
+    0x0E2E, 0x0E30, 0x0E32, 0x0E34, 0x0E36, 0x0E38, 0x0E3A, 0x0E3C,
52
+    0x0E3E, 0x0E40, 0x0E42, 0x0E44, 0x0E46, 0x0E48, 0x0E4A, 0x0E4C,
53
+    0x0E4E, 0x0E50, 0x0E52, 0x0E54, 0x0E56, 0x0E58, 0x0E5A, 0x0E5C,
54
+    0x0E5E, 0x0E60, 0x0E62, 0x0E64, 0x0E66, 0x0E68, 0x0E6A, 0x0E6C,
55
+    0x0E6E, 0x0E70, 0x0E72, 0x0E74, 0x0E76, 0x0E78, 0x0E7A, 0x0E7C,
56
+    0x0E7E, 0x1F80, 0x1F82, 0x1F84, 0x1F86, 0x1F88, 0x1F8A, 0x1F8C,
57
+    0x1F8E, 0x1F90, 0x1F92, 0x1F94, 0x1F96, 0x1F98, 0x1F9A, 0x1F9C,
58
+    0x1F9E, 0x1FA0, 0x1FA2, 0x1FA4, 0x1FA6, 0x1FA8, 0x1FAA, 0x1FAC,
59
+    0x1FAE, 0x1FB0, 0x1FB2, 0x1FB4, 0x1FB6, 0x1FB8, 0x1FBA, 0x1FBC,
60
+    0x1FBE, 0x1FC0, 0x1FC2, 0x1FC4, 0x1FC6, 0x1FC8, 0x1FCA, 0x1FCC,
61
+    0x1FCE, 0x1FD0, 0x1FD2, 0x1FD4, 0x1FD6, 0x1FD8, 0x1FDA, 0x1FDC,
62
+    0x1FDE, 0x1FE0, 0x1FE2, 0x1FE4, 0x1FE6, 0x1FE8, 0x1FEA, 0x1FEC,
63
+    0x1FEE, 0x1FF0, 0x1FF2, 0x1FF4, 0x1FF6, 0x1FF8, 0x1FFA, 0x1FFC,
64
+    0x0FFF, 0x1FFD, 0x1FFB, 0x1FF9, 0x1FF7, 0x1FF5, 0x1FF3, 0x1FF1,
65
+    0x1FEF, 0x1FED, 0x1FEB, 0x1FE9, 0x1FE7, 0x1FE5, 0x1FE3, 0x1FE1,
66
+    0x1FDF, 0x1FDD, 0x1FDB, 0x1FD9, 0x1FD7, 0x1FD5, 0x1FD3, 0x1FD1,
67
+    0x1FCF, 0x1FCD, 0x1FCB, 0x1FC9, 0x1FC7, 0x1FC5, 0x1FC3, 0x1FC1,
68
+    0x1FBF, 0x1FBD, 0x1FBB, 0x1FB9, 0x1FB7, 0x1FB5, 0x1FB3, 0x1FB1,
69
+    0x1FAF, 0x1FAD, 0x1FAB, 0x1FA9, 0x1FA7, 0x1FA5, 0x1FA3, 0x1FA1,
70
+    0x1F9F, 0x1F9D, 0x1F9B, 0x1F99, 0x1F97, 0x1F95, 0x1F93, 0x1F91,
71
+    0x1F8F, 0x1F8D, 0x1F8B, 0x1F89, 0x1F87, 0x1F85, 0x1F83, 0x1F81,
72
+    0x0E7F, 0x0E7D, 0x0E7B, 0x0E79, 0x0E77, 0x0E75, 0x0E73, 0x0E71,
73
+    0x0E6F, 0x0E6D, 0x0E6B, 0x0E69, 0x0E67, 0x0E65, 0x0E63, 0x0E61,
74
+    0x0E5F, 0x0E5D, 0x0E5B, 0x0E59, 0x0E57, 0x0E55, 0x0E53, 0x0E51,
75
+    0x0E4F, 0x0E4D, 0x0E4B, 0x0E49, 0x0E47, 0x0E45, 0x0E43, 0x0E41,
76
+    0x0E3F, 0x0E3D, 0x0E3B, 0x0E39, 0x0E37, 0x0E35, 0x0E33, 0x0E31,
77
+    0x0E2F, 0x0E2D, 0x0E2B, 0x0E29, 0x0E27, 0x0E25, 0x0E23, 0x0E21,
78
+    0x0E1F, 0x0E1D, 0x0E1B, 0x0E19, 0x0E17, 0x0E15, 0x0E13, 0x0E11,
79
+    0x0E0F, 0x0E0D, 0x0E0B, 0x0E09, 0x0E07, 0x0E05, 0x0E03, 0x0E01,
80
+    0x06FF, 0x06FD, 0x06FB, 0x06F9, 0x06F7, 0x06F5, 0x06F3, 0x06F1,
81
+    0x06EF, 0x06ED, 0x06EB, 0x06E9, 0x06E7, 0x06E5, 0x06E3, 0x06E1,
82
+    0x06DF, 0x06DD, 0x06DB, 0x06D9, 0x06D7, 0x06D5, 0x06D3, 0x06D1,
83
+    0x06CF, 0x06CD, 0x06CB, 0x06C9, 0x06C7, 0x06C5, 0x06C3, 0x06C1,
84
+    0x01FF, 0x01FD, 0x01FB, 0x01F9, 0x01F7, 0x01F5, 0x01F3, 0x01F1,
85
+    0x01EF, 0x01ED, 0x01EB, 0x01E9, 0x01E7, 0x01E5, 0x01E3, 0x01E1,
86
+    0x01DF, 0x01DD, 0x01DB, 0x01D9, 0x01D7, 0x01D5, 0x01D3, 0x01D1,
87
+    0x01CF, 0x01CD, 0x01CB, 0x01C9, 0x01C7, 0x01C5, 0x01C3, 0x01C1,
88
+    0x00DF, 0x00DD, 0x00DB, 0x00D9, 0x00D7, 0x00D5, 0x00D3, 0x00D1,
89
+    0x00CF, 0x00CD, 0x00CB, 0x00C9, 0x00C7, 0x00C5, 0x00C3, 0x00C1,
90
+    0x003F, 0x003D, 0x003B, 0x0039, 0x0037, 0x0035, 0x0033, 0x0031,
91
+    0x002F, 0x002D, 0x002B, 0x0029, 0x0027, 0x0025, 0x0023, 0x0021,
92
+    0x005F, 0x005D, 0x005B, 0x0059, 0x0057, 0x0055, 0x0053, 0x0051,
93
+    0x000F, 0x000D, 0x000B, 0x0009, 0x0007, 0x0005, 0x0003, 0x0001,
94
+    0x007D, 0x007B, 0x0079, 0x0077, 0x0075, 0x0035, 0x0033, 0x0031,
95
+    0x002F, 0x002D, 0x002B, 0x0029, 0x0027, 0x0025, 0x0023, 0x0009,
96
+};
97
+
98
+static const uint8_t dc9_vlc_lens[512] = {
99
+     5,  5,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  7,  7,  7,  7,
100
+     7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,
101
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
102
+     8,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
103
+     9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
104
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
105
+    10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
106
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
107
+    11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
108
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
109
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
110
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
111
+    12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
112
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
113
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
114
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
115
+    12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
116
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
117
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
118
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
119
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
120
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
121
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
122
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
123
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
124
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
125
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
126
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
127
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
128
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
129
+     8,  8,  8,  8,  8,  8,  8,  8,  7,  7,  7,  7,  7,  7,  7,  7,
130
+     7,  7,  7,  7,  7,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  5,
131
+};
132
+
133
+static const uint16_t dc10_vlc_bits[1024] = {
134
+    0x0014, 0x002A, 0x002C, 0x002E, 0x0064, 0x0066, 0x0068, 0x006A,
135
+    0x006C, 0x006E, 0x0070, 0x0072, 0x0074, 0x0076, 0x0078, 0x007A,
136
+    0x007C, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048, 0x004A, 0x004C,
137
+    0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058, 0x005A, 0x005C,
138
+    0x005E, 0x0000, 0x0002, 0x0004, 0x0006, 0x0008, 0x000A, 0x000C,
139
+    0x000E, 0x0010, 0x0012, 0x0014, 0x0016, 0x0018, 0x001A, 0x001C,
140
+    0x001E, 0x00C0, 0x00C2, 0x00C4, 0x00C6, 0x00C8, 0x00CA, 0x00CC,
141
+    0x00CE, 0x00D0, 0x00D2, 0x00D4, 0x00D6, 0x00D8, 0x00DA, 0x00DC,
142
+    0x00DE, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048, 0x004A, 0x004C,
143
+    0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058, 0x005A, 0x005C,
144
+    0x005E, 0x0060, 0x0062, 0x0064, 0x0066, 0x0068, 0x006A, 0x006C,
145
+    0x006E, 0x0070, 0x0072, 0x0074, 0x0076, 0x0078, 0x007A, 0x007C,
146
+    0x007E, 0x01C0, 0x01C2, 0x01C4, 0x01C6, 0x01C8, 0x01CA, 0x01CC,
147
+    0x01CE, 0x01D0, 0x01D2, 0x01D4, 0x01D6, 0x01D8, 0x01DA, 0x01DC,
148
+    0x01DE, 0x01E0, 0x01E2, 0x01E4, 0x01E6, 0x01E8, 0x01EA, 0x01EC,
149
+    0x01EE, 0x01F0, 0x01F2, 0x01F4, 0x01F6, 0x01F8, 0x01FA, 0x01FC,
150
+    0x01FE, 0x0400, 0x0402, 0x0404, 0x0406, 0x0408, 0x040A, 0x040C,
151
+    0x040E, 0x0410, 0x0412, 0x0414, 0x0416, 0x0418, 0x041A, 0x041C,
152
+    0x041E, 0x0420, 0x0422, 0x0424, 0x0426, 0x0428, 0x042A, 0x042C,
153
+    0x042E, 0x0430, 0x0432, 0x0434, 0x0436, 0x0438, 0x043A, 0x043C,
154
+    0x043E, 0x0440, 0x0442, 0x0444, 0x0446, 0x0448, 0x044A, 0x044C,
155
+    0x044E, 0x0450, 0x0452, 0x0454, 0x0456, 0x0458, 0x045A, 0x045C,
156
+    0x045E, 0x0460, 0x0462, 0x0464, 0x0466, 0x0468, 0x046A, 0x046C,
157
+    0x046E, 0x0470, 0x0472, 0x0474, 0x0476, 0x0478, 0x047A, 0x047C,
158
+    0x047E, 0x0C00, 0x0C02, 0x0C04, 0x0C06, 0x0C08, 0x0C0A, 0x0C0C,
159
+    0x0C0E, 0x0C10, 0x0C12, 0x0C14, 0x0C16, 0x0C18, 0x0C1A, 0x0C1C,
160
+    0x0C1E, 0x0C20, 0x0C22, 0x0C24, 0x0C26, 0x0C28, 0x0C2A, 0x0C2C,
161
+    0x0C2E, 0x0C30, 0x0C32, 0x0C34, 0x0C36, 0x0C38, 0x0C3A, 0x0C3C,
162
+    0x0C3E, 0x0C40, 0x0C42, 0x0C44, 0x0C46, 0x0C48, 0x0C4A, 0x0C4C,
163
+    0x0C4E, 0x0C50, 0x0C52, 0x0C54, 0x0C56, 0x0C58, 0x0C5A, 0x0C5C,
164
+    0x0C5E, 0x0C60, 0x0C62, 0x0C64, 0x0C66, 0x0C68, 0x0C6A, 0x0C6C,
165
+    0x0C6E, 0x0C70, 0x0C72, 0x0C74, 0x0C76, 0x0C78, 0x0C7A, 0x0C7C,
166
+    0x0C7E, 0x0900, 0x0902, 0x0904, 0x0906, 0x0908, 0x090A, 0x090C,
167
+    0x090E, 0x0910, 0x0912, 0x0914, 0x0916, 0x0918, 0x091A, 0x091C,
168
+    0x091E, 0x0920, 0x0922, 0x0924, 0x0926, 0x0928, 0x092A, 0x092C,
169
+    0x092E, 0x0930, 0x0932, 0x0934, 0x0936, 0x0938, 0x093A, 0x093C,
170
+    0x093E, 0x0940, 0x0942, 0x0944, 0x0946, 0x0948, 0x094A, 0x094C,
171
+    0x094E, 0x0950, 0x0952, 0x0954, 0x0956, 0x0958, 0x095A, 0x095C,
172
+    0x095E, 0x0960, 0x0962, 0x0964, 0x0966, 0x0968, 0x096A, 0x096C,
173
+    0x096E, 0x0970, 0x0972, 0x0974, 0x0976, 0x0978, 0x097A, 0x097C,
174
+    0x097E, 0x0980, 0x0982, 0x0984, 0x0986, 0x0988, 0x098A, 0x098C,
175
+    0x098E, 0x0990, 0x0992, 0x0994, 0x0996, 0x0998, 0x099A, 0x099C,
176
+    0x099E, 0x09A0, 0x09A2, 0x09A4, 0x09A6, 0x09A8, 0x09AA, 0x09AC,
177
+    0x09AE, 0x09B0, 0x09B2, 0x09B4, 0x09B6, 0x09B8, 0x09BA, 0x09BC,
178
+    0x09BE, 0x09C0, 0x09C2, 0x09C4, 0x09C6, 0x09C8, 0x09CA, 0x09CC,
179
+    0x09CE, 0x09D0, 0x09D2, 0x09D4, 0x09D6, 0x09D8, 0x09DA, 0x09DC,
180
+    0x09DE, 0x09E0, 0x09E2, 0x09E4, 0x09E6, 0x09E8, 0x09EA, 0x09EC,
181
+    0x09EE, 0x09F0, 0x09F2, 0x09F4, 0x09F6, 0x09F8, 0x09FA, 0x09FC,
182
+    0x09FE, 0x3F00, 0x3F02, 0x3F04, 0x3F06, 0x3F08, 0x3F0A, 0x3F0C,
183
+    0x3F0E, 0x3F10, 0x3F12, 0x3F14, 0x3F16, 0x3F18, 0x3F1A, 0x3F1C,
184
+    0x3F1E, 0x3F20, 0x3F22, 0x3F24, 0x3F26, 0x3F28, 0x3F2A, 0x3F2C,
185
+    0x3F2E, 0x3F30, 0x3F32, 0x3F34, 0x3F36, 0x3F38, 0x3F3A, 0x3F3C,
186
+    0x3F3E, 0x3F40, 0x3F42, 0x3F44, 0x3F46, 0x3F48, 0x3F4A, 0x3F4C,
187
+    0x3F4E, 0x3F50, 0x3F52, 0x3F54, 0x3F56, 0x3F58, 0x3F5A, 0x3F5C,
188
+    0x3F5E, 0x3F60, 0x3F62, 0x3F64, 0x3F66, 0x3F68, 0x3F6A, 0x3F6C,
189
+    0x3F6E, 0x3F70, 0x3F72, 0x3F74, 0x3F76, 0x3F78, 0x3F7A, 0x3F7C,
190
+    0x3F7E, 0x3F80, 0x3F82, 0x3F84, 0x3F86, 0x3F88, 0x3F8A, 0x3F8C,
191
+    0x3F8E, 0x3F90, 0x3F92, 0x3F94, 0x3F96, 0x3F98, 0x3F9A, 0x3F9C,
192
+    0x3F9E, 0x3FA0, 0x3FA2, 0x3FA4, 0x3FA6, 0x3FA8, 0x3FAA, 0x3FAC,
193
+    0x3FAE, 0x3FB0, 0x3FB2, 0x3FB4, 0x3FB6, 0x3FB8, 0x3FBA, 0x3FBC,
194
+    0x3FBE, 0x3FC0, 0x3FC2, 0x3FC4, 0x3FC6, 0x3FC8, 0x3FCA, 0x3FCC,
195
+    0x3FCE, 0x3FD0, 0x3FD2, 0x3FD4, 0x3FD6, 0x3FD8, 0x3FDA, 0x3FDC,
196
+    0x3FDE, 0x3FE0, 0x3FE2, 0x3FE4, 0x3FE6, 0x3FE8, 0x3FEA, 0x3FEC,
197
+    0x3FEE, 0x3FF0, 0x3FF2, 0x3FF4, 0x3FF6, 0x3FF8, 0x3FFA, 0x3FFC,
198
+    0x1FFF, 0x3FFD, 0x3FFB, 0x3FF9, 0x3FF7, 0x3FF5, 0x3FF3, 0x3FF1,
199
+    0x3FEF, 0x3FED, 0x3FEB, 0x3FE9, 0x3FE7, 0x3FE5, 0x3FE3, 0x3FE1,
200
+    0x3FDF, 0x3FDD, 0x3FDB, 0x3FD9, 0x3FD7, 0x3FD5, 0x3FD3, 0x3FD1,
201
+    0x3FCF, 0x3FCD, 0x3FCB, 0x3FC9, 0x3FC7, 0x3FC5, 0x3FC3, 0x3FC1,
202
+    0x3FBF, 0x3FBD, 0x3FBB, 0x3FB9, 0x3FB7, 0x3FB5, 0x3FB3, 0x3FB1,
203
+    0x3FAF, 0x3FAD, 0x3FAB, 0x3FA9, 0x3FA7, 0x3FA5, 0x3FA3, 0x3FA1,
204
+    0x3F9F, 0x3F9D, 0x3F9B, 0x3F99, 0x3F97, 0x3F95, 0x3F93, 0x3F91,
205
+    0x3F8F, 0x3F8D, 0x3F8B, 0x3F89, 0x3F87, 0x3F85, 0x3F83, 0x3F81,
206
+    0x3F7F, 0x3F7D, 0x3F7B, 0x3F79, 0x3F77, 0x3F75, 0x3F73, 0x3F71,
207
+    0x3F6F, 0x3F6D, 0x3F6B, 0x3F69, 0x3F67, 0x3F65, 0x3F63, 0x3F61,
208
+    0x3F5F, 0x3F5D, 0x3F5B, 0x3F59, 0x3F57, 0x3F55, 0x3F53, 0x3F51,
209
+    0x3F4F, 0x3F4D, 0x3F4B, 0x3F49, 0x3F47, 0x3F45, 0x3F43, 0x3F41,
210
+    0x3F3F, 0x3F3D, 0x3F3B, 0x3F39, 0x3F37, 0x3F35, 0x3F33, 0x3F31,
211
+    0x3F2F, 0x3F2D, 0x3F2B, 0x3F29, 0x3F27, 0x3F25, 0x3F23, 0x3F21,
212
+    0x3F1F, 0x3F1D, 0x3F1B, 0x3F19, 0x3F17, 0x3F15, 0x3F13, 0x3F11,
213
+    0x3F0F, 0x3F0D, 0x3F0B, 0x3F09, 0x3F07, 0x3F05, 0x3F03, 0x3F01,
214
+    0x09FF, 0x09FD, 0x09FB, 0x09F9, 0x09F7, 0x09F5, 0x09F3, 0x09F1,
215
+    0x09EF, 0x09ED, 0x09EB, 0x09E9, 0x09E7, 0x09E5, 0x09E3, 0x09E1,
216
+    0x09DF, 0x09DD, 0x09DB, 0x09D9, 0x09D7, 0x09D5, 0x09D3, 0x09D1,
217
+    0x09CF, 0x09CD, 0x09CB, 0x09C9, 0x09C7, 0x09C5, 0x09C3, 0x09C1,
218
+    0x09BF, 0x09BD, 0x09BB, 0x09B9, 0x09B7, 0x09B5, 0x09B3, 0x09B1,
219
+    0x09AF, 0x09AD, 0x09AB, 0x09A9, 0x09A7, 0x09A5, 0x09A3, 0x09A1,
220
+    0x099F, 0x099D, 0x099B, 0x0999, 0x0997, 0x0995, 0x0993, 0x0991,
221
+    0x098F, 0x098D, 0x098B, 0x0989, 0x0987, 0x0985, 0x0983, 0x0981,
222
+    0x097F, 0x097D, 0x097B, 0x0979, 0x0977, 0x0975, 0x0973, 0x0971,
223
+    0x096F, 0x096D, 0x096B, 0x0969, 0x0967, 0x0965, 0x0963, 0x0961,
224
+    0x095F, 0x095D, 0x095B, 0x0959, 0x0957, 0x0955, 0x0953, 0x0951,
225
+    0x094F, 0x094D, 0x094B, 0x0949, 0x0947, 0x0945, 0x0943, 0x0941,
226
+    0x093F, 0x093D, 0x093B, 0x0939, 0x0937, 0x0935, 0x0933, 0x0931,
227
+    0x092F, 0x092D, 0x092B, 0x0929, 0x0927, 0x0925, 0x0923, 0x0921,
228
+    0x091F, 0x091D, 0x091B, 0x0919, 0x0917, 0x0915, 0x0913, 0x0911,
229
+    0x090F, 0x090D, 0x090B, 0x0909, 0x0907, 0x0905, 0x0903, 0x0901,
230
+    0x0C7F, 0x0C7D, 0x0C7B, 0x0C79, 0x0C77, 0x0C75, 0x0C73, 0x0C71,
231
+    0x0C6F, 0x0C6D, 0x0C6B, 0x0C69, 0x0C67, 0x0C65, 0x0C63, 0x0C61,
232
+    0x0C5F, 0x0C5D, 0x0C5B, 0x0C59, 0x0C57, 0x0C55, 0x0C53, 0x0C51,
233
+    0x0C4F, 0x0C4D, 0x0C4B, 0x0C49, 0x0C47, 0x0C45, 0x0C43, 0x0C41,
234
+    0x0C3F, 0x0C3D, 0x0C3B, 0x0C39, 0x0C37, 0x0C35, 0x0C33, 0x0C31,
235
+    0x0C2F, 0x0C2D, 0x0C2B, 0x0C29, 0x0C27, 0x0C25, 0x0C23, 0x0C21,
236
+    0x0C1F, 0x0C1D, 0x0C1B, 0x0C19, 0x0C17, 0x0C15, 0x0C13, 0x0C11,
237
+    0x0C0F, 0x0C0D, 0x0C0B, 0x0C09, 0x0C07, 0x0C05, 0x0C03, 0x0C01,
238
+    0x047F, 0x047D, 0x047B, 0x0479, 0x0477, 0x0475, 0x0473, 0x0471,
239
+    0x046F, 0x046D, 0x046B, 0x0469, 0x0467, 0x0465, 0x0463, 0x0461,
240
+    0x045F, 0x045D, 0x045B, 0x0459, 0x0457, 0x0455, 0x0453, 0x0451,
241
+    0x044F, 0x044D, 0x044B, 0x0449, 0x0447, 0x0445, 0x0443, 0x0441,
242
+    0x043F, 0x043D, 0x043B, 0x0439, 0x0437, 0x0435, 0x0433, 0x0431,
243
+    0x042F, 0x042D, 0x042B, 0x0429, 0x0427, 0x0425, 0x0423, 0x0421,
244
+    0x041F, 0x041D, 0x041B, 0x0419, 0x0417, 0x0415, 0x0413, 0x0411,
245
+    0x040F, 0x040D, 0x040B, 0x0409, 0x0407, 0x0405, 0x0403, 0x0401,
246
+    0x01FF, 0x01FD, 0x01FB, 0x01F9, 0x01F7, 0x01F5, 0x01F3, 0x01F1,
247
+    0x01EF, 0x01ED, 0x01EB, 0x01E9, 0x01E7, 0x01E5, 0x01E3, 0x01E1,
248
+    0x01DF, 0x01DD, 0x01DB, 0x01D9, 0x01D7, 0x01D5, 0x01D3, 0x01D1,
249
+    0x01CF, 0x01CD, 0x01CB, 0x01C9, 0x01C7, 0x01C5, 0x01C3, 0x01C1,
250
+    0x007F, 0x007D, 0x007B, 0x0079, 0x0077, 0x0075, 0x0073, 0x0071,
251
+    0x006F, 0x006D, 0x006B, 0x0069, 0x0067, 0x0065, 0x0063, 0x0061,
252
+    0x005F, 0x005D, 0x005B, 0x0059, 0x0057, 0x0055, 0x0053, 0x0051,
253
+    0x004F, 0x004D, 0x004B, 0x0049, 0x0047, 0x0045, 0x0043, 0x0041,
254
+    0x00DF, 0x00DD, 0x00DB, 0x00D9, 0x00D7, 0x00D5, 0x00D3, 0x00D1,
255
+    0x00CF, 0x00CD, 0x00CB, 0x00C9, 0x00C7, 0x00C5, 0x00C3, 0x00C1,
256
+    0x001F, 0x001D, 0x001B, 0x0019, 0x0017, 0x0015, 0x0013, 0x0011,
257
+    0x000F, 0x000D, 0x000B, 0x0009, 0x0007, 0x0005, 0x0003, 0x0001,
258
+    0x005F, 0x005D, 0x005B, 0x0059, 0x0057, 0x0055, 0x0053, 0x0051,
259
+    0x004F, 0x004D, 0x004B, 0x0049, 0x0047, 0x0045, 0x0043, 0x0041,
260
+    0x007D, 0x007B, 0x0079, 0x0077, 0x0075, 0x0073, 0x0071, 0x006F,
261
+    0x006D, 0x006B, 0x0069, 0x0067, 0x0065, 0x002F, 0x002D, 0x002B,
262
+};
263
+
264
+static const uint8_t dc10_vlc_lens[1024] = {
265
+     5,  6,  6,  6,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,
266
+     7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
267
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
268
+     8,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
269
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
270
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
271
+     9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
272
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
273
+    10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
274
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
275
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
276
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
277
+    11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
278
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
279
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
280
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
281
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
282
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
283
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
284
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
285
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
286
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
287
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
288
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
289
+    12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
290
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
291
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
292
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
293
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
294
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
295
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
296
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
297
+    13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
298
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
299
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
300
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
301
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
302
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
303
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
304
+    14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
305
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
306
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
307
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
308
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
309
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
310
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
311
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
312
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
313
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
314
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
315
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
316
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
317
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
318
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
319
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
320
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
321
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
322
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
323
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
324
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
325
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
326
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
327
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
328
+     7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  7,  6,  6,  6,
329
+};
330
+
331
+static const uint16_t dc11_vlc_bits[2048] = {
332
+    0x0032, 0x0066, 0x0068, 0x006A, 0x006C, 0x006E, 0x0070, 0x0072,
333
+    0x0074, 0x00F0, 0x00F2, 0x00F4, 0x00F6, 0x00F8, 0x00FA, 0x00FC,
334
+    0x00FE, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048, 0x004A, 0x004C,
335
+    0x004E, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058, 0x005A, 0x005C,
336
+    0x005E, 0x00C0, 0x00C2, 0x00C4, 0x00C6, 0x00C8, 0x00CA, 0x00CC,
337
+    0x00CE, 0x00D0, 0x00D2, 0x00D4, 0x00D6, 0x00D8, 0x00DA, 0x00DC,
338
+    0x00DE, 0x00E0, 0x00E2, 0x00E4, 0x00E6, 0x00E8, 0x00EA, 0x00EC,
339
+    0x00EE, 0x00F0, 0x00F2, 0x00F4, 0x00F6, 0x00F8, 0x00FA, 0x00FC,
340
+    0x00FE, 0x0000, 0x0002, 0x0004, 0x0006, 0x0008, 0x000A, 0x000C,
341
+    0x000E, 0x0010, 0x0012, 0x0014, 0x0016, 0x0018, 0x001A, 0x001C,
342
+    0x001E, 0x0020, 0x0022, 0x0024, 0x0026, 0x0028, 0x002A, 0x002C,
343
+    0x002E, 0x0030, 0x0032, 0x0034, 0x0036, 0x0038, 0x003A, 0x003C,
344
+    0x003E, 0x0200, 0x0202, 0x0204, 0x0206, 0x0208, 0x020A, 0x020C,
345
+    0x020E, 0x0210, 0x0212, 0x0214, 0x0216, 0x0218, 0x021A, 0x021C,
346
+    0x021E, 0x0220, 0x0222, 0x0224, 0x0226, 0x0228, 0x022A, 0x022C,
347
+    0x022E, 0x0230, 0x0232, 0x0234, 0x0236, 0x0238, 0x023A, 0x023C,
348
+    0x023E, 0x0080, 0x0082, 0x0084, 0x0086, 0x0088, 0x008A, 0x008C,
349
+    0x008E, 0x0090, 0x0092, 0x0094, 0x0096, 0x0098, 0x009A, 0x009C,
350
+    0x009E, 0x00A0, 0x00A2, 0x00A4, 0x00A6, 0x00A8, 0x00AA, 0x00AC,
351
+    0x00AE, 0x00B0, 0x00B2, 0x00B4, 0x00B6, 0x00B8, 0x00BA, 0x00BC,
352
+    0x00BE, 0x00C0, 0x00C2, 0x00C4, 0x00C6, 0x00C8, 0x00CA, 0x00CC,
353
+    0x00CE, 0x00D0, 0x00D2, 0x00D4, 0x00D6, 0x00D8, 0x00DA, 0x00DC,
354
+    0x00DE, 0x00E0, 0x00E2, 0x00E4, 0x00E6, 0x00E8, 0x00EA, 0x00EC,
355
+    0x00EE, 0x00F0, 0x00F2, 0x00F4, 0x00F6, 0x00F8, 0x00FA, 0x00FC,
356
+    0x00FE, 0x0480, 0x0482, 0x0484, 0x0486, 0x0488, 0x048A, 0x048C,
357
+    0x048E, 0x0490, 0x0492, 0x0494, 0x0496, 0x0498, 0x049A, 0x049C,
358
+    0x049E, 0x04A0, 0x04A2, 0x04A4, 0x04A6, 0x04A8, 0x04AA, 0x04AC,
359
+    0x04AE, 0x04B0, 0x04B2, 0x04B4, 0x04B6, 0x04B8, 0x04BA, 0x04BC,
360
+    0x04BE, 0x04C0, 0x04C2, 0x04C4, 0x04C6, 0x04C8, 0x04CA, 0x04CC,
361
+    0x04CE, 0x04D0, 0x04D2, 0x04D4, 0x04D6, 0x04D8, 0x04DA, 0x04DC,
362
+    0x04DE, 0x04E0, 0x04E2, 0x04E4, 0x04E6, 0x04E8, 0x04EA, 0x04EC,
363
+    0x04EE, 0x04F0, 0x04F2, 0x04F4, 0x04F6, 0x04F8, 0x04FA, 0x04FC,
364
+    0x04FE, 0x0A00, 0x0A02, 0x0A04, 0x0A06, 0x0A08, 0x0A0A, 0x0A0C,
365
+    0x0A0E, 0x0A10, 0x0A12, 0x0A14, 0x0A16, 0x0A18, 0x0A1A, 0x0A1C,
366
+    0x0A1E, 0x0A20, 0x0A22, 0x0A24, 0x0A26, 0x0A28, 0x0A2A, 0x0A2C,
367
+    0x0A2E, 0x0A30, 0x0A32, 0x0A34, 0x0A36, 0x0A38, 0x0A3A, 0x0A3C,
368
+    0x0A3E, 0x0A40, 0x0A42, 0x0A44, 0x0A46, 0x0A48, 0x0A4A, 0x0A4C,
369
+    0x0A4E, 0x0A50, 0x0A52, 0x0A54, 0x0A56, 0x0A58, 0x0A5A, 0x0A5C,
370
+    0x0A5E, 0x0A60, 0x0A62, 0x0A64, 0x0A66, 0x0A68, 0x0A6A, 0x0A6C,
371
+    0x0A6E, 0x0A70, 0x0A72, 0x0A74, 0x0A76, 0x0A78, 0x0A7A, 0x0A7C,
372
+    0x0A7E, 0x0A80, 0x0A82, 0x0A84, 0x0A86, 0x0A88, 0x0A8A, 0x0A8C,
373
+    0x0A8E, 0x0A90, 0x0A92, 0x0A94, 0x0A96, 0x0A98, 0x0A9A, 0x0A9C,
374
+    0x0A9E, 0x0AA0, 0x0AA2, 0x0AA4, 0x0AA6, 0x0AA8, 0x0AAA, 0x0AAC,
375
+    0x0AAE, 0x0AB0, 0x0AB2, 0x0AB4, 0x0AB6, 0x0AB8, 0x0ABA, 0x0ABC,
376
+    0x0ABE, 0x0AC0, 0x0AC2, 0x0AC4, 0x0AC6, 0x0AC8, 0x0ACA, 0x0ACC,
377
+    0x0ACE, 0x0AD0, 0x0AD2, 0x0AD4, 0x0AD6, 0x0AD8, 0x0ADA, 0x0ADC,
378
+    0x0ADE, 0x0AE0, 0x0AE2, 0x0AE4, 0x0AE6, 0x0AE8, 0x0AEA, 0x0AEC,
379
+    0x0AEE, 0x0AF0, 0x0AF2, 0x0AF4, 0x0AF6, 0x0AF8, 0x0AFA, 0x0AFC,
380
+    0x0AFE, 0x1800, 0x1802, 0x1804, 0x1806, 0x1808, 0x180A, 0x180C,
381
+    0x180E, 0x1810, 0x1812, 0x1814, 0x1816, 0x1818, 0x181A, 0x181C,
382
+    0x181E, 0x1820, 0x1822, 0x1824, 0x1826, 0x1828, 0x182A, 0x182C,
383
+    0x182E, 0x1830, 0x1832, 0x1834, 0x1836, 0x1838, 0x183A, 0x183C,
384
+    0x183E, 0x1840, 0x1842, 0x1844, 0x1846, 0x1848, 0x184A, 0x184C,
385
+    0x184E, 0x1850, 0x1852, 0x1854, 0x1856, 0x1858, 0x185A, 0x185C,
386
+    0x185E, 0x1860, 0x1862, 0x1864, 0x1866, 0x1868, 0x186A, 0x186C,
387
+    0x186E, 0x1870, 0x1872, 0x1874, 0x1876, 0x1878, 0x187A, 0x187C,
388
+    0x187E, 0x1880, 0x1882, 0x1884, 0x1886, 0x1888, 0x188A, 0x188C,
389
+    0x188E, 0x1890, 0x1892, 0x1894, 0x1896, 0x1898, 0x189A, 0x189C,
390
+    0x189E, 0x18A0, 0x18A2, 0x18A4, 0x18A6, 0x18A8, 0x18AA, 0x18AC,
391
+    0x18AE, 0x18B0, 0x18B2, 0x18B4, 0x18B6, 0x18B8, 0x18BA, 0x18BC,
392
+    0x18BE, 0x18C0, 0x18C2, 0x18C4, 0x18C6, 0x18C8, 0x18CA, 0x18CC,
393
+    0x18CE, 0x18D0, 0x18D2, 0x18D4, 0x18D6, 0x18D8, 0x18DA, 0x18DC,
394
+    0x18DE, 0x18E0, 0x18E2, 0x18E4, 0x18E6, 0x18E8, 0x18EA, 0x18EC,
395
+    0x18EE, 0x18F0, 0x18F2, 0x18F4, 0x18F6, 0x18F8, 0x18FA, 0x18FC,
396
+    0x18FE, 0x1600, 0x1602, 0x1604, 0x1606, 0x1608, 0x160A, 0x160C,
397
+    0x160E, 0x1610, 0x1612, 0x1614, 0x1616, 0x1618, 0x161A, 0x161C,
398
+    0x161E, 0x1620, 0x1622, 0x1624, 0x1626, 0x1628, 0x162A, 0x162C,
399
+    0x162E, 0x1630, 0x1632, 0x1634, 0x1636, 0x1638, 0x163A, 0x163C,
400
+    0x163E, 0x1640, 0x1642, 0x1644, 0x1646, 0x1648, 0x164A, 0x164C,
401
+    0x164E, 0x1650, 0x1652, 0x1654, 0x1656, 0x1658, 0x165A, 0x165C,
402
+    0x165E, 0x1660, 0x1662, 0x1664, 0x1666, 0x1668, 0x166A, 0x166C,
403
+    0x166E, 0x1670, 0x1672, 0x1674, 0x1676, 0x1678, 0x167A, 0x167C,
404
+    0x167E, 0x1680, 0x1682, 0x1684, 0x1686, 0x1688, 0x168A, 0x168C,
405
+    0x168E, 0x1690, 0x1692, 0x1694, 0x1696, 0x1698, 0x169A, 0x169C,
406
+    0x169E, 0x16A0, 0x16A2, 0x16A4, 0x16A6, 0x16A8, 0x16AA, 0x16AC,
407
+    0x16AE, 0x16B0, 0x16B2, 0x16B4, 0x16B6, 0x16B8, 0x16BA, 0x16BC,
408
+    0x16BE, 0x16C0, 0x16C2, 0x16C4, 0x16C6, 0x16C8, 0x16CA, 0x16CC,
409
+    0x16CE, 0x16D0, 0x16D2, 0x16D4, 0x16D6, 0x16D8, 0x16DA, 0x16DC,
410
+    0x16DE, 0x16E0, 0x16E2, 0x16E4, 0x16E6, 0x16E8, 0x16EA, 0x16EC,
411
+    0x16EE, 0x16F0, 0x16F2, 0x16F4, 0x16F6, 0x16F8, 0x16FA, 0x16FC,
412
+    0x16FE, 0x1700, 0x1702, 0x1704, 0x1706, 0x1708, 0x170A, 0x170C,
413
+    0x170E, 0x1710, 0x1712, 0x1714, 0x1716, 0x1718, 0x171A, 0x171C,
414
+    0x171E, 0x1720, 0x1722, 0x1724, 0x1726, 0x1728, 0x172A, 0x172C,
415
+    0x172E, 0x1730, 0x1732, 0x1734, 0x1736, 0x1738, 0x173A, 0x173C,
416
+    0x173E, 0x1740, 0x1742, 0x1744, 0x1746, 0x1748, 0x174A, 0x174C,
417
+    0x174E, 0x1750, 0x1752, 0x1754, 0x1756, 0x1758, 0x175A, 0x175C,
418
+    0x175E, 0x1760, 0x1762, 0x1764, 0x1766, 0x1768, 0x176A, 0x176C,
419
+    0x176E, 0x1770, 0x1772, 0x1774, 0x1776, 0x1778, 0x177A, 0x177C,
420
+    0x177E, 0x1780, 0x1782, 0x1784, 0x1786, 0x1788, 0x178A, 0x178C,
421
+    0x178E, 0x1790, 0x1792, 0x1794, 0x1796, 0x1798, 0x179A, 0x179C,
422
+    0x179E, 0x17A0, 0x17A2, 0x17A4, 0x17A6, 0x17A8, 0x17AA, 0x17AC,
423
+    0x17AE, 0x17B0, 0x17B2, 0x17B4, 0x17B6, 0x17B8, 0x17BA, 0x17BC,
424
+    0x17BE, 0x17C0, 0x17C2, 0x17C4, 0x17C6, 0x17C8, 0x17CA, 0x17CC,
425
+    0x17CE, 0x17D0, 0x17D2, 0x17D4, 0x17D6, 0x17D8, 0x17DA, 0x17DC,
426
+    0x17DE, 0x17E0, 0x17E2, 0x17E4, 0x17E6, 0x17E8, 0x17EA, 0x17EC,
427
+    0x17EE, 0x17F0, 0x17F2, 0x17F4, 0x17F6, 0x17F8, 0x17FA, 0x17FC,
428
+    0x17FE, 0x7600, 0x7602, 0x7604, 0x7606, 0x7608, 0x760A, 0x760C,
429
+    0x760E, 0x7610, 0x7612, 0x7614, 0x7616, 0x7618, 0x761A, 0x761C,
430
+    0x761E, 0x7620, 0x7622, 0x7624, 0x7626, 0x7628, 0x762A, 0x762C,
431
+    0x762E, 0x7630, 0x7632, 0x7634, 0x7636, 0x7638, 0x763A, 0x763C,
432
+    0x763E, 0x7640, 0x7642, 0x7644, 0x7646, 0x7648, 0x764A, 0x764C,
433
+    0x764E, 0x7650, 0x7652, 0x7654, 0x7656, 0x7658, 0x765A, 0x765C,
434
+    0x765E, 0x7660, 0x7662, 0x7664, 0x7666, 0x7668, 0x766A, 0x766C,
435
+    0x766E, 0x7670, 0x7672, 0x7674, 0x7676, 0x7678, 0x767A, 0x767C,
436
+    0x767E, 0x7680, 0x7682, 0x7684, 0x7686, 0x7688, 0x768A, 0x768C,
437
+    0x768E, 0x7690, 0x7692, 0x7694, 0x7696, 0x7698, 0x769A, 0x769C,
438
+    0x769E, 0x76A0, 0x76A2, 0x76A4, 0x76A6, 0x76A8, 0x76AA, 0x76AC,
439
+    0x76AE, 0x76B0, 0x76B2, 0x76B4, 0x76B6, 0x76B8, 0x76BA, 0x76BC,
440
+    0x76BE, 0x76C0, 0x76C2, 0x76C4, 0x76C6, 0x76C8, 0x76CA, 0x76CC,
441
+    0x76CE, 0x76D0, 0x76D2, 0x76D4, 0x76D6, 0x76D8, 0x76DA, 0x76DC,
442
+    0x76DE, 0x76E0, 0x76E2, 0x76E4, 0x76E6, 0x76E8, 0x76EA, 0x76EC,
443
+    0x76EE, 0x76F0, 0x76F2, 0x76F4, 0x76F6, 0x76F8, 0x76FA, 0x76FC,
444
+    0x76FE, 0x7700, 0x7702, 0x7704, 0x7706, 0x7708, 0x770A, 0x770C,
445
+    0x770E, 0x7710, 0x7712, 0x7714, 0x7716, 0x7718, 0x771A, 0x771C,
446
+    0x771E, 0x7720, 0x7722, 0x7724, 0x7726, 0x7728, 0x772A, 0x772C,
447
+    0x772E, 0x7730, 0x7732, 0x7734, 0x7736, 0x7738, 0x773A, 0x773C,
448
+    0x773E, 0x7740, 0x7742, 0x7744, 0x7746, 0x7748, 0x774A, 0x774C,
449
+    0x774E, 0x7750, 0x7752, 0x7754, 0x7756, 0x7758, 0x775A, 0x775C,
450
+    0x775E, 0x7760, 0x7762, 0x7764, 0x7766, 0x7768, 0x776A, 0x776C,
451
+    0x776E, 0x7770, 0x7772, 0x7774, 0x7776, 0x7778, 0x777A, 0x777C,
452
+    0x777E, 0x7780, 0x7782, 0x7784, 0x7786, 0x7788, 0x778A, 0x778C,
453
+    0x778E, 0x7790, 0x7792, 0x7794, 0x7796, 0x7798, 0x779A, 0x779C,
454
+    0x779E, 0x77A0, 0x77A2, 0x77A4, 0x77A6, 0x77A8, 0x77AA, 0x77AC,
455
+    0x77AE, 0x77B0, 0x77B2, 0x77B4, 0x77B6, 0x77B8, 0x77BA, 0x77BC,
456
+    0x77BE, 0x77C0, 0x77C2, 0x77C4, 0x77C6, 0x77C8, 0x77CA, 0x77CC,
457
+    0x77CE, 0x77D0, 0x77D2, 0x77D4, 0x77D6, 0x77D8, 0x77DA, 0x77DC,
458
+    0x77DE, 0x77E0, 0x77E2, 0x77E4, 0x77E6, 0x77E8, 0x77EA, 0x77EC,
459
+    0x77EE, 0x77F0, 0x77F2, 0x77F4, 0x77F6, 0x77F8, 0x77FA, 0x77FC,
460
+    0x3BFF, 0x77FD, 0x77FB, 0x77F9, 0x77F7, 0x77F5, 0x77F3, 0x77F1,
461
+    0x77EF, 0x77ED, 0x77EB, 0x77E9, 0x77E7, 0x77E5, 0x77E3, 0x77E1,
462
+    0x77DF, 0x77DD, 0x77DB, 0x77D9, 0x77D7, 0x77D5, 0x77D3, 0x77D1,
463
+    0x77CF, 0x77CD, 0x77CB, 0x77C9, 0x77C7, 0x77C5, 0x77C3, 0x77C1,
464
+    0x77BF, 0x77BD, 0x77BB, 0x77B9, 0x77B7, 0x77B5, 0x77B3, 0x77B1,
465
+    0x77AF, 0x77AD, 0x77AB, 0x77A9, 0x77A7, 0x77A5, 0x77A3, 0x77A1,
466
+    0x779F, 0x779D, 0x779B, 0x7799, 0x7797, 0x7795, 0x7793, 0x7791,
467
+    0x778F, 0x778D, 0x778B, 0x7789, 0x7787, 0x7785, 0x7783, 0x7781,
468
+    0x777F, 0x777D, 0x777B, 0x7779, 0x7777, 0x7775, 0x7773, 0x7771,
469
+    0x776F, 0x776D, 0x776B, 0x7769, 0x7767, 0x7765, 0x7763, 0x7761,
470
+    0x775F, 0x775D, 0x775B, 0x7759, 0x7757, 0x7755, 0x7753, 0x7751,
471
+    0x774F, 0x774D, 0x774B, 0x7749, 0x7747, 0x7745, 0x7743, 0x7741,
472
+    0x773F, 0x773D, 0x773B, 0x7739, 0x7737, 0x7735, 0x7733, 0x7731,
473
+    0x772F, 0x772D, 0x772B, 0x7729, 0x7727, 0x7725, 0x7723, 0x7721,
474
+    0x771F, 0x771D, 0x771B, 0x7719, 0x7717, 0x7715, 0x7713, 0x7711,
475
+    0x770F, 0x770D, 0x770B, 0x7709, 0x7707, 0x7705, 0x7703, 0x7701,
476
+    0x76FF, 0x76FD, 0x76FB, 0x76F9, 0x76F7, 0x76F5, 0x76F3, 0x76F1,
477
+    0x76EF, 0x76ED, 0x76EB, 0x76E9, 0x76E7, 0x76E5, 0x76E3, 0x76E1,
478
+    0x76DF, 0x76DD, 0x76DB, 0x76D9, 0x76D7, 0x76D5, 0x76D3, 0x76D1,
479
+    0x76CF, 0x76CD, 0x76CB, 0x76C9, 0x76C7, 0x76C5, 0x76C3, 0x76C1,
480
+    0x76BF, 0x76BD, 0x76BB, 0x76B9, 0x76B7, 0x76B5, 0x76B3, 0x76B1,
481
+    0x76AF, 0x76AD, 0x76AB, 0x76A9, 0x76A7, 0x76A5, 0x76A3, 0x76A1,
482
+    0x769F, 0x769D, 0x769B, 0x7699, 0x7697, 0x7695, 0x7693, 0x7691,
483
+    0x768F, 0x768D, 0x768B, 0x7689, 0x7687, 0x7685, 0x7683, 0x7681,
484
+    0x767F, 0x767D, 0x767B, 0x7679, 0x7677, 0x7675, 0x7673, 0x7671,
485
+    0x766F, 0x766D, 0x766B, 0x7669, 0x7667, 0x7665, 0x7663, 0x7661,
486
+    0x765F, 0x765D, 0x765B, 0x7659, 0x7657, 0x7655, 0x7653, 0x7651,
487
+    0x764F, 0x764D, 0x764B, 0x7649, 0x7647, 0x7645, 0x7643, 0x7641,
488
+    0x763F, 0x763D, 0x763B, 0x7639, 0x7637, 0x7635, 0x7633, 0x7631,
489
+    0x762F, 0x762D, 0x762B, 0x7629, 0x7627, 0x7625, 0x7623, 0x7621,
490
+    0x761F, 0x761D, 0x761B, 0x7619, 0x7617, 0x7615, 0x7613, 0x7611,
491
+    0x760F, 0x760D, 0x760B, 0x7609, 0x7607, 0x7605, 0x7603, 0x7601,
492
+    0x17FF, 0x17FD, 0x17FB, 0x17F9, 0x17F7, 0x17F5, 0x17F3, 0x17F1,
493
+    0x17EF, 0x17ED, 0x17EB, 0x17E9, 0x17E7, 0x17E5, 0x17E3, 0x17E1,
494
+    0x17DF, 0x17DD, 0x17DB, 0x17D9, 0x17D7, 0x17D5, 0x17D3, 0x17D1,
495
+    0x17CF, 0x17CD, 0x17CB, 0x17C9, 0x17C7, 0x17C5, 0x17C3, 0x17C1,
496
+    0x17BF, 0x17BD, 0x17BB, 0x17B9, 0x17B7, 0x17B5, 0x17B3, 0x17B1,
497
+    0x17AF, 0x17AD, 0x17AB, 0x17A9, 0x17A7, 0x17A5, 0x17A3, 0x17A1,
498
+    0x179F, 0x179D, 0x179B, 0x1799, 0x1797, 0x1795, 0x1793, 0x1791,
499
+    0x178F, 0x178D, 0x178B, 0x1789, 0x1787, 0x1785, 0x1783, 0x1781,
500
+    0x177F, 0x177D, 0x177B, 0x1779, 0x1777, 0x1775, 0x1773, 0x1771,
501
+    0x176F, 0x176D, 0x176B, 0x1769, 0x1767, 0x1765, 0x1763, 0x1761,
502
+    0x175F, 0x175D, 0x175B, 0x1759, 0x1757, 0x1755, 0x1753, 0x1751,
503
+    0x174F, 0x174D, 0x174B, 0x1749, 0x1747, 0x1745, 0x1743, 0x1741,
504
+    0x173F, 0x173D, 0x173B, 0x1739, 0x1737, 0x1735, 0x1733, 0x1731,
505
+    0x172F, 0x172D, 0x172B, 0x1729, 0x1727, 0x1725, 0x1723, 0x1721,
506
+    0x171F, 0x171D, 0x171B, 0x1719, 0x1717, 0x1715, 0x1713, 0x1711,
507
+    0x170F, 0x170D, 0x170B, 0x1709, 0x1707, 0x1705, 0x1703, 0x1701,
508
+    0x16FF, 0x16FD, 0x16FB, 0x16F9, 0x16F7, 0x16F5, 0x16F3, 0x16F1,
509
+    0x16EF, 0x16ED, 0x16EB, 0x16E9, 0x16E7, 0x16E5, 0x16E3, 0x16E1,
510
+    0x16DF, 0x16DD, 0x16DB, 0x16D9, 0x16D7, 0x16D5, 0x16D3, 0x16D1,
511
+    0x16CF, 0x16CD, 0x16CB, 0x16C9, 0x16C7, 0x16C5, 0x16C3, 0x16C1,
512
+    0x16BF, 0x16BD, 0x16BB, 0x16B9, 0x16B7, 0x16B5, 0x16B3, 0x16B1,
513
+    0x16AF, 0x16AD, 0x16AB, 0x16A9, 0x16A7, 0x16A5, 0x16A3, 0x16A1,
514
+    0x169F, 0x169D, 0x169B, 0x1699, 0x1697, 0x1695, 0x1693, 0x1691,
515
+    0x168F, 0x168D, 0x168B, 0x1689, 0x1687, 0x1685, 0x1683, 0x1681,
516
+    0x167F, 0x167D, 0x167B, 0x1679, 0x1677, 0x1675, 0x1673, 0x1671,
517
+    0x166F, 0x166D, 0x166B, 0x1669, 0x1667, 0x1665, 0x1663, 0x1661,
518
+    0x165F, 0x165D, 0x165B, 0x1659, 0x1657, 0x1655, 0x1653, 0x1651,
519
+    0x164F, 0x164D, 0x164B, 0x1649, 0x1647, 0x1645, 0x1643, 0x1641,
520
+    0x163F, 0x163D, 0x163B, 0x1639, 0x1637, 0x1635, 0x1633, 0x1631,
521
+    0x162F, 0x162D, 0x162B, 0x1629, 0x1627, 0x1625, 0x1623, 0x1621,
522
+    0x161F, 0x161D, 0x161B, 0x1619, 0x1617, 0x1615, 0x1613, 0x1611,
523
+    0x160F, 0x160D, 0x160B, 0x1609, 0x1607, 0x1605, 0x1603, 0x1601,
524
+    0x18FF, 0x18FD, 0x18FB, 0x18F9, 0x18F7, 0x18F5, 0x18F3, 0x18F1,
525
+    0x18EF, 0x18ED, 0x18EB, 0x18E9, 0x18E7, 0x18E5, 0x18E3, 0x18E1,
526
+    0x18DF, 0x18DD, 0x18DB, 0x18D9, 0x18D7, 0x18D5, 0x18D3, 0x18D1,
527
+    0x18CF, 0x18CD, 0x18CB, 0x18C9, 0x18C7, 0x18C5, 0x18C3, 0x18C1,
528
+    0x18BF, 0x18BD, 0x18BB, 0x18B9, 0x18B7, 0x18B5, 0x18B3, 0x18B1,
529
+    0x18AF, 0x18AD, 0x18AB, 0x18A9, 0x18A7, 0x18A5, 0x18A3, 0x18A1,
530
+    0x189F, 0x189D, 0x189B, 0x1899, 0x1897, 0x1895, 0x1893, 0x1891,
531
+    0x188F, 0x188D, 0x188B, 0x1889, 0x1887, 0x1885, 0x1883, 0x1881,
532
+    0x187F, 0x187D, 0x187B, 0x1879, 0x1877, 0x1875, 0x1873, 0x1871,
533
+    0x186F, 0x186D, 0x186B, 0x1869, 0x1867, 0x1865, 0x1863, 0x1861,
534
+    0x185F, 0x185D, 0x185B, 0x1859, 0x1857, 0x1855, 0x1853, 0x1851,
535
+    0x184F, 0x184D, 0x184B, 0x1849, 0x1847, 0x1845, 0x1843, 0x1841,
536
+    0x183F, 0x183D, 0x183B, 0x1839, 0x1837, 0x1835, 0x1833, 0x1831,
537
+    0x182F, 0x182D, 0x182B, 0x1829, 0x1827, 0x1825, 0x1823, 0x1821,
538
+    0x181F, 0x181D, 0x181B, 0x1819, 0x1817, 0x1815, 0x1813, 0x1811,
539
+    0x180F, 0x180D, 0x180B, 0x1809, 0x1807, 0x1805, 0x1803, 0x1801,
540
+    0x0AFF, 0x0AFD, 0x0AFB, 0x0AF9, 0x0AF7, 0x0AF5, 0x0AF3, 0x0AF1,
541
+    0x0AEF, 0x0AED, 0x0AEB, 0x0AE9, 0x0AE7, 0x0AE5, 0x0AE3, 0x0AE1,
542
+    0x0ADF, 0x0ADD, 0x0ADB, 0x0AD9, 0x0AD7, 0x0AD5, 0x0AD3, 0x0AD1,
543
+    0x0ACF, 0x0ACD, 0x0ACB, 0x0AC9, 0x0AC7, 0x0AC5, 0x0AC3, 0x0AC1,
544
+    0x0ABF, 0x0ABD, 0x0ABB, 0x0AB9, 0x0AB7, 0x0AB5, 0x0AB3, 0x0AB1,
545
+    0x0AAF, 0x0AAD, 0x0AAB, 0x0AA9, 0x0AA7, 0x0AA5, 0x0AA3, 0x0AA1,
546
+    0x0A9F, 0x0A9D, 0x0A9B, 0x0A99, 0x0A97, 0x0A95, 0x0A93, 0x0A91,
547
+    0x0A8F, 0x0A8D, 0x0A8B, 0x0A89, 0x0A87, 0x0A85, 0x0A83, 0x0A81,
548
+    0x0A7F, 0x0A7D, 0x0A7B, 0x0A79, 0x0A77, 0x0A75, 0x0A73, 0x0A71,
549
+    0x0A6F, 0x0A6D, 0x0A6B, 0x0A69, 0x0A67, 0x0A65, 0x0A63, 0x0A61,
550
+    0x0A5F, 0x0A5D, 0x0A5B, 0x0A59, 0x0A57, 0x0A55, 0x0A53, 0x0A51,
551
+    0x0A4F, 0x0A4D, 0x0A4B, 0x0A49, 0x0A47, 0x0A45, 0x0A43, 0x0A41,
552
+    0x0A3F, 0x0A3D, 0x0A3B, 0x0A39, 0x0A37, 0x0A35, 0x0A33, 0x0A31,
553
+    0x0A2F, 0x0A2D, 0x0A2B, 0x0A29, 0x0A27, 0x0A25, 0x0A23, 0x0A21,
554
+    0x0A1F, 0x0A1D, 0x0A1B, 0x0A19, 0x0A17, 0x0A15, 0x0A13, 0x0A11,
555
+    0x0A0F, 0x0A0D, 0x0A0B, 0x0A09, 0x0A07, 0x0A05, 0x0A03, 0x0A01,
556
+    0x04FF, 0x04FD, 0x04FB, 0x04F9, 0x04F7, 0x04F5, 0x04F3, 0x04F1,
557
+    0x04EF, 0x04ED, 0x04EB, 0x04E9, 0x04E7, 0x04E5, 0x04E3, 0x04E1,
558
+    0x04DF, 0x04DD, 0x04DB, 0x04D9, 0x04D7, 0x04D5, 0x04D3, 0x04D1,
559
+    0x04CF, 0x04CD, 0x04CB, 0x04C9, 0x04C7, 0x04C5, 0x04C3, 0x04C1,
560
+    0x04BF, 0x04BD, 0x04BB, 0x04B9, 0x04B7, 0x04B5, 0x04B3, 0x04B1,
561
+    0x04AF, 0x04AD, 0x04AB, 0x04A9, 0x04A7, 0x04A5, 0x04A3, 0x04A1,
562
+    0x049F, 0x049D, 0x049B, 0x0499, 0x0497, 0x0495, 0x0493, 0x0491,
563
+    0x048F, 0x048D, 0x048B, 0x0489, 0x0487, 0x0485, 0x0483, 0x0481,
564
+    0x00FF, 0x00FD, 0x00FB, 0x00F9, 0x00F7, 0x00F5, 0x00F3, 0x00F1,
565
+    0x00EF, 0x00ED, 0x00EB, 0x00E9, 0x00E7, 0x00E5, 0x00E3, 0x00E1,
566
+    0x00DF, 0x00DD, 0x00DB, 0x00D9, 0x00D7, 0x00D5, 0x00D3, 0x00D1,
567
+    0x00CF, 0x00CD, 0x00CB, 0x00C9, 0x00C7, 0x00C5, 0x00C3, 0x00C1,
568
+    0x00BF, 0x00BD, 0x00BB, 0x00B9, 0x00B7, 0x00B5, 0x00B3, 0x00B1,
569
+    0x00AF, 0x00AD, 0x00AB, 0x00A9, 0x00A7, 0x00A5, 0x00A3, 0x00A1,
570
+    0x009F, 0x009D, 0x009B, 0x0099, 0x0097, 0x0095, 0x0093, 0x0091,
571
+    0x008F, 0x008D, 0x008B, 0x0089, 0x0087, 0x0085, 0x0083, 0x0081,
572
+    0x023F, 0x023D, 0x023B, 0x0239, 0x0237, 0x0235, 0x0233, 0x0231,
573
+    0x022F, 0x022D, 0x022B, 0x0229, 0x0227, 0x0225, 0x0223, 0x0221,
574
+    0x021F, 0x021D, 0x021B, 0x0219, 0x0217, 0x0215, 0x0213, 0x0211,
575
+    0x020F, 0x020D, 0x020B, 0x0209, 0x0207, 0x0205, 0x0203, 0x0201,
576
+    0x003F, 0x003D, 0x003B, 0x0039, 0x0037, 0x0035, 0x0033, 0x0031,
577
+    0x002F, 0x002D, 0x002B, 0x0029, 0x0027, 0x0025, 0x0023, 0x0021,
578
+    0x001F, 0x001D, 0x001B, 0x0019, 0x0017, 0x0015, 0x0013, 0x0011,
579
+    0x000F, 0x000D, 0x000B, 0x0009, 0x0007, 0x0005, 0x0003, 0x0001,
580
+    0x00FF, 0x00FD, 0x00FB, 0x00F9, 0x00F7, 0x00F5, 0x00F3, 0x00F1,
581
+    0x00EF, 0x00ED, 0x00EB, 0x00E9, 0x00E7, 0x00E5, 0x00E3, 0x00E1,
582
+    0x00DF, 0x00DD, 0x00DB, 0x00D9, 0x00D7, 0x00D5, 0x00D3, 0x00D1,
583
+    0x00CF, 0x00CD, 0x00CB, 0x00C9, 0x00C7, 0x00C5, 0x00C3, 0x00C1,
584
+    0x005F, 0x005D, 0x005B, 0x0059, 0x0057, 0x0055, 0x0053, 0x0051,
585
+    0x004F, 0x004D, 0x004B, 0x0049, 0x0047, 0x0045, 0x0043, 0x0041,
586
+    0x00FF, 0x00FD, 0x00FB, 0x00F9, 0x00F7, 0x00F5, 0x00F3, 0x00F1,
587
+    0x0075, 0x0073, 0x0071, 0x006F, 0x006D, 0x006B, 0x0069, 0x0067,
588
+};
589
+
590
+static const uint8_t dc11_vlc_lens[2048] = {
591
+     6,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,
592
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
593
+     8,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
594
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
595
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
596
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
597
+     9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
598
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
599
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
600
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
601
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
602
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
603
+    10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
604
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
605
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
606
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
607
+    11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
608
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
609
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
610
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
611
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
612
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
613
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
614
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
615
+    12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
616
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
617
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
618
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
619
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
620
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
621
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
622
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
623
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
624
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
625
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
626
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
627
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
628
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
629
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
630
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
631
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
632
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
633
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
634
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
635
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
636
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
637
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
638
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
639
+    13, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
640
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
641
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
642
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
643
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
644
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
645
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
646
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
647
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
648
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
649
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
650
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
651
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
652
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
653
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
654
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
655
+    14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
656
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
657
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
658
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
659
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
660
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
661
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
662
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
663
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
664
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
665
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
666
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
667
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
668
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
669
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
670
+    15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
671
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
672
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
673
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
674
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
675
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
676
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
677
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
678
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
679
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
680
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
681
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
682
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
683
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
684
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
685
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
686
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
687
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
688
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
689
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
690
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
691
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
692
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
693
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
694
+    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
695
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
696
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
697
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
698
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
699
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
700
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
701
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
702
+    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
703
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
704
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
705
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
706
+    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
707
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
708
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
709
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
710
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
711
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
712
+    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
713
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
714
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
715
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
716
+     9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,  9,
717
+     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
718
+     8,  8,  8,  8,  8,  8,  8,  8,  7,  7,  7,  7,  7,  7,  7,  7,
719
+};
720
+
721
+#define RPT_2(a, b, c)    { a, b, c }, { a, b, c }
722
+#define RPT_4(a, b, c)    RPT_2(  a, b, c), RPT_2(  a, b, c)
723
+#define RPT_8(a, b, c)    RPT_4(  a, b, c), RPT_4(  a, b, c)
724
+#define RPT_16(a, b, c)   RPT_8(  a, b, c), RPT_8(  a, b, c)
725
+#define RPT_32(a, b, c)   RPT_16( a, b, c), RPT_16( a, b, c)
726
+#define RPT_64(a, b, c)   RPT_32( a, b, c), RPT_32( a, b, c)
727
+#define RPT_128(a, b, c)  RPT_64( a, b, c), RPT_64( a, b, c)
728
+#define RPT_256(a, b, c)  RPT_128(a, b, c), RPT_128(a, b, c)
729
+#define RPT_512(a, b, c)  RPT_256(a, b, c), RPT_256(a, b, c)
730
+#define RPT_1024(a, b, c) RPT_512(a, b, c), RPT_512(a, b, c)
731
+
732
+static const HQXLUT ac0_lut[] = {
733
+    RPT_64  (   1,  0,  4 ), RPT_64  (  -1,  0,  4 ),
734
+    RPT_64  (   2,  0,  4 ), RPT_64  (  -2,  0,  4 ),
735
+    RPT_32  (   3,  0,  5 ), RPT_32  (  -3,  0,  5 ),
736
+    RPT_32  (   4,  0,  5 ), RPT_32  (  -4,  0,  5 ),
737
+    RPT_32  (   1,  1,  5 ), RPT_32  (  -1,  1,  5 ),
738
+    RPT_16  (   5,  0,  6 ), RPT_16  (  -5,  0,  6 ),
739
+    RPT_16  (   6,  0,  6 ), RPT_16  (  -6,  0,  6 ),
740
+    RPT_16  (   7,  0,  6 ), RPT_16  (  -7,  0,  6 ),
741
+    RPT_16  (   8,  0,  6 ), RPT_16  (  -8,  0,  6 ),
742
+    { 1024,  0, -1 }, { 1056,  0, -1 }, { 1088,  0, -1 }, { 1120,  0, -1 },
743
+    { 1152,  0, -1 }, { 1184,  0, -1 }, { 1216,  0, -1 }, { 1248,  0, -1 },
744
+    { 1280,  0, -1 }, { 1312,  0, -1 }, { 1344,  0, -1 }, { 1376,  0, -1 },
745
+    { 1408,  0, -1 }, { 1440,  0, -1 }, { 1472,  0, -1 }, { 1504,  0, -1 },
746
+    { 1536,  0, -1 }, { 1568,  0, -1 }, { 1600,  0, -1 }, { 1632,  0, -1 },
747
+    { 1664,  0, -1 }, { 1696,  0, -1 }, { 1728,  0, -1 }, { 1760,  0, -1 },
748
+    { 1792,  0, -1 }, { 1824,  0, -1 }, { 1856,  0, -1 }, { 1888,  0, -1 },
749
+    { 1920,  0, -1 }, { 1952,  0, -1 }, { 1984,  0, -1 }, { 2016,  0, -1 },
750
+    RPT_32  (   0, 64,  5 ), RPT_8   (   9,  0,  7 ),
751
+    RPT_8   (  -9,  0,  7 ), RPT_8   (  10,  0,  7 ),
752
+    RPT_8   ( -10,  0,  7 ), RPT_8   (  11,  0,  7 ),
753
+    RPT_8   ( -11,  0,  7 ), RPT_8   (  12,  0,  7 ),
754
+    RPT_8   ( -12,  0,  7 ), RPT_8   (  13,  0,  7 ),
755
+    RPT_8   ( -13,  0,  7 ), RPT_8   (  14,  0,  7 ),
756
+    RPT_8   ( -14,  0,  7 ), RPT_8   (   2,  1,  7 ),
757
+    RPT_8   (  -2,  1,  7 ), RPT_8   (   1,  2,  7 ),
758
+    RPT_8   (  -1,  2,  7 ), RPT_4   (  15,  0,  8 ),
759
+    RPT_4   ( -15,  0,  8 ), RPT_4   (  16,  0,  8 ),
760
+    RPT_4   ( -16,  0,  8 ), RPT_4   (  17,  0,  8 ),
761
+    RPT_4   ( -17,  0,  8 ), RPT_4   (  18,  0,  8 ),
762
+    RPT_4   ( -18,  0,  8 ), RPT_4   (  19,  0,  8 ),
763
+    RPT_4   ( -19,  0,  8 ), RPT_4   (  20,  0,  8 ),
764
+    RPT_4   ( -20,  0,  8 ), RPT_4   (  21,  0,  8 ),
765
+    RPT_4   ( -21,  0,  8 ), RPT_4   (   3,  1,  8 ),
766
+    RPT_4   (  -3,  1,  8 ), RPT_4   (   4,  1,  8 ),
767
+    RPT_4   (  -4,  1,  8 ), RPT_4   (   1,  3,  8 ),
768
+    RPT_4   (  -1,  3,  8 ), RPT_4   (   1,  4,  8 ),
769
+    RPT_4   (  -1,  4,  8 ), RPT_4   (   0,  0,  8 ),
770
+    RPT_2   (  22,  0,  9 ), RPT_2   ( -22,  0,  9 ),
771
+    RPT_2   (  23,  0,  9 ), RPT_2   ( -23,  0,  9 ),
772
+    RPT_2   (  24,  0,  9 ), RPT_2   ( -24,  0,  9 ),
773
+    RPT_2   (  25,  0,  9 ), RPT_2   ( -25,  0,  9 ),
774
+    RPT_2   (  26,  0,  9 ), RPT_2   ( -26,  0,  9 ),
775
+    RPT_2   (  27,  0,  9 ), RPT_2   ( -27,  0,  9 ),
776
+    RPT_2   (  28,  0,  9 ), RPT_2   ( -28,  0,  9 ),
777
+    RPT_2   (  29,  0,  9 ), RPT_2   ( -29,  0,  9 ),
778
+    RPT_2   (  30,  0,  9 ), RPT_2   ( -30,  0,  9 ),
779
+    RPT_2   (  31,  0,  9 ), RPT_2   ( -31,  0,  9 ),
780
+    RPT_2   (  32,  0,  9 ), RPT_2   ( -32,  0,  9 ),
781
+    RPT_2   (  33,  0,  9 ), RPT_2   ( -33,  0,  9 ),
782
+    RPT_2   (   5,  1,  9 ), RPT_2   (  -5,  1,  9 ),
783
+    RPT_2   (   6,  1,  9 ), RPT_2   (  -6,  1,  9 ),
784
+    RPT_2   (   2,  2,  9 ), RPT_2   (  -2,  2,  9 ),
785
+    RPT_2   (   1,  5,  9 ), RPT_2   (  -1,  5,  9 ),
786
+    RPT_2   (   1,  6,  9 ), RPT_2   (  -1,  6,  9 ),
787
+    {   34,  0, 10 }, {  -34,  0, 10 }, {   35,  0, 10 }, {  -35,  0, 10 },
788
+    {   36,  0, 10 }, {  -36,  0, 10 }, {   37,  0, 10 }, {  -37,  0, 10 },
789
+    {   38,  0, 10 }, {  -38,  0, 10 }, {   39,  0, 10 }, {  -39,  0, 10 },
790
+    {   40,  0, 10 }, {  -40,  0, 10 }, {   41,  0, 10 }, {  -41,  0, 10 },
791
+    {   42,  0, 10 }, {  -42,  0, 10 }, {   43,  0, 10 }, {  -43,  0, 10 },
792
+    {   44,  0, 10 }, {  -44,  0, 10 }, {   45,  0, 10 }, {  -45,  0, 10 },
793
+    {   46,  0, 10 }, {  -46,  0, 10 }, {   47,  0, 10 }, {  -47,  0, 10 },
794
+    {   48,  0, 10 }, {  -48,  0, 10 }, {   49,  0, 10 }, {  -49,  0, 10 },
795
+    {   50,  0, 10 }, {  -50,  0, 10 }, RPT_2   (   0,  1,  9 ),
796
+    {    7,  1, 10 }, {   -7,  1, 10 }, {    8,  1, 10 }, {   -8,  1, 10 },
797
+    {    9,  1, 10 }, {   -9,  1, 10 }, {   10,  1, 10 }, {  -10,  1, 10 },
798
+    RPT_2   (   0,  2,  9 ), {    3,  2, 10 }, {   -3,  2, 10 },
799
+    RPT_2   (   0,  3,  9 ), {    2,  3, 10 }, {   -2,  3, 10 },
800
+    {    1,  7, 10 }, {   -1,  7, 10 }, {    1,  8, 10 }, {   -1,  8, 10 },
801
+    { 2048,  0, -1 }, { 2080,  0, -1 }, { 2112,  0, -1 }, { 2144,  0, -1 },
802
+    { 2176,  0, -1 }, { 2208,  0, -1 }, { 2240,  0, -1 }, { 2272,  0, -1 },
803
+    { 2304,  0, -1 }, { 2336,  0, -1 }, { 2368,  0, -1 }, { 2400,  0, -1 },
804
+    { 2432,  0, -1 }, { 2464,  0, -1 }, { 2496,  0, -1 }, { 2528,  0, -1 },
805
+    { 2560,  0, -1 }, { 2592,  0, -1 }, { 2624,  0, -1 }, { 2656,  0, -1 },
806
+    { 2688,  0, -1 }, { 2720,  0, -1 }, { 2752,  0, -1 }, {    0,  4, 10 },
807
+    { 2784,  0, -1 }, {    0,  5, 10 }, {    0,  6, 10 }, { 2816,  0, -1 },
808
+    { 2848,  0, -1 }, { 2880,  0, -1 }, { 2912,  0, -1 }, { 2944,  0, -1 },
809
+    { 2976,  0, -1 }, { 3008,  0, -1 }, { 3040,  0, -1 }, { 3072,  0, -1 },
810
+    { 3104,  0, -1 }, { 3136,  0, -1 }, { 3168,  0, -1 }, { 3200,  0, -1 },
811
+    RPT_4   (   0,  0, 13 ), RPT_2   (   1,  0, 14 ),
812
+    RPT_2   (  -1,  0, 14 ), RPT_2   (   2,  0, 14 ),
813
+    RPT_2   (  -2,  0, 14 ), RPT_2   (   3,  0, 14 ),
814
+    RPT_2   (  -3,  0, 14 ), RPT_2   (   4,  0, 14 ),
815
+    RPT_2   (  -4,  0, 14 ), RPT_2   (   5,  0, 14 ),
816
+    RPT_2   (  -5,  0, 14 ), RPT_2   (   6,  0, 14 ),
817
+    RPT_2   (  -6,  0, 14 ), RPT_2   (   7,  0, 14 ),
818
+    RPT_2   (  -7,  0, 14 ), RPT_2   (   8,  0, 14 ),
819
+    RPT_2   (  -8,  0, 14 ), RPT_2   (   9,  0, 14 ),
820
+    RPT_2   (  -9,  0, 14 ), RPT_2   (  10,  0, 14 ),
821
+    RPT_2   ( -10,  0, 14 ), RPT_2   (  11,  0, 14 ),
822
+    RPT_2   ( -11,  0, 14 ), RPT_2   (  12,  0, 14 ),
823
+    RPT_2   ( -12,  0, 14 ), RPT_2   (  13,  0, 14 ),
824
+    RPT_2   ( -13,  0, 14 ), RPT_2   (  14,  0, 14 ),
825
+    RPT_2   ( -14,  0, 14 ), RPT_2   (  15,  0, 14 ),
826
+    RPT_2   ( -15,  0, 14 ), RPT_2   (  16,  0, 14 ),
827
+    RPT_2   ( -16,  0, 14 ), RPT_2   (  17,  0, 14 ),
828
+    RPT_2   ( -17,  0, 14 ), RPT_2   (  18,  0, 14 ),
829
+    RPT_2   ( -18,  0, 14 ), RPT_2   (  19,  0, 14 ),
830
+    RPT_2   ( -19,  0, 14 ), RPT_2   (  20,  0, 14 ),
831
+    RPT_2   ( -20,  0, 14 ), RPT_2   (  21,  0, 14 ),
832
+    RPT_2   ( -21,  0, 14 ), RPT_2   (  22,  0, 14 ),
833
+    RPT_2   ( -22,  0, 14 ), RPT_2   (  23,  0, 14 ),
834
+    RPT_2   ( -23,  0, 14 ), RPT_2   (  24,  0, 14 ),
835
+    RPT_2   ( -24,  0, 14 ), RPT_2   (  25,  0, 14 ),
836
+    RPT_2   ( -25,  0, 14 ), RPT_2   (  26,  0, 14 ),
837
+    RPT_2   ( -26,  0, 14 ), RPT_2   (  27,  0, 14 ),
838
+    RPT_2   ( -27,  0, 14 ), RPT_2   (  28,  0, 14 ),
839
+    RPT_2   ( -28,  0, 14 ), RPT_2   (  29,  0, 14 ),
840
+    RPT_2   ( -29,  0, 14 ), RPT_2   (  30,  0, 14 ),
841
+    RPT_2   ( -30,  0, 14 ), RPT_2   (  31,  0, 14 ),
842
+    RPT_2   ( -31,  0, 14 ), RPT_2   (  32,  0, 14 ),
843
+    RPT_2   ( -32,  0, 14 ), RPT_2   (  33,  0, 14 ),
844
+    RPT_2   ( -33,  0, 14 ), RPT_2   (  34,  0, 14 ),
845
+    RPT_2   ( -34,  0, 14 ), RPT_2   (  35,  0, 14 ),
846
+    RPT_2   ( -35,  0, 14 ), RPT_2   (  36,  0, 14 ),
847
+    RPT_2   ( -36,  0, 14 ), RPT_2   (  37,  0, 14 ),
848
+    RPT_2   ( -37,  0, 14 ), RPT_2   (  38,  0, 14 ),
849
+    RPT_2   ( -38,  0, 14 ), RPT_2   (  39,  0, 14 ),
850
+    RPT_2   ( -39,  0, 14 ), RPT_2   (  40,  0, 14 ),
851
+    RPT_2   ( -40,  0, 14 ), RPT_2   (  41,  0, 14 ),
852
+    RPT_2   ( -41,  0, 14 ), RPT_2   (  42,  0, 14 ),
853
+    RPT_2   ( -42,  0, 14 ), RPT_2   (  43,  0, 14 ),
854
+    RPT_2   ( -43,  0, 14 ), RPT_2   (  44,  0, 14 ),
855
+    RPT_2   ( -44,  0, 14 ), RPT_2   (  45,  0, 14 ),
856
+    RPT_2   ( -45,  0, 14 ), RPT_2   (  46,  0, 14 ),
857
+    RPT_2   ( -46,  0, 14 ), RPT_2   (  47,  0, 14 ),
858
+    RPT_2   ( -47,  0, 14 ), RPT_2   (  48,  0, 14 ),
859
+    RPT_2   ( -48,  0, 14 ), RPT_2   (  49,  0, 14 ),
860
+    RPT_2   ( -49,  0, 14 ), RPT_2   (  50,  0, 14 ),
861
+    RPT_2   ( -50,  0, 14 ), RPT_2   (  51,  0, 14 ),
862
+    RPT_2   ( -51,  0, 14 ), RPT_2   (  52,  0, 14 ),
863
+    RPT_2   ( -52,  0, 14 ), RPT_2   (  53,  0, 14 ),
864
+    RPT_2   ( -53,  0, 14 ), RPT_2   (  54,  0, 14 ),
865
+    RPT_2   ( -54,  0, 14 ), RPT_2   (  55,  0, 14 ),
866
+    RPT_2   ( -55,  0, 14 ), RPT_2   (  56,  0, 14 ),
867
+    RPT_2   ( -56,  0, 14 ), RPT_2   (  57,  0, 14 ),
868
+    RPT_2   ( -57,  0, 14 ), RPT_2   (  58,  0, 14 ),
869
+    RPT_2   ( -58,  0, 14 ), RPT_2   (  59,  0, 14 ),
870
+    RPT_2   ( -59,  0, 14 ), RPT_2   (  60,  0, 14 ),
871
+    RPT_2   ( -60,  0, 14 ), RPT_2   (  61,  0, 14 ),
872
+    RPT_2   ( -61,  0, 14 ), RPT_2   (  62,  0, 14 ),
873
+    RPT_2   ( -62,  0, 14 ), RPT_2   (  63,  0, 14 ),
874
+    RPT_2   ( -63,  0, 14 ), RPT_2   (  64,  0, 14 ),
875
+    RPT_2   ( -64,  0, 14 ), RPT_2   (  65,  0, 14 ),
876
+    RPT_2   ( -65,  0, 14 ), RPT_2   (  66,  0, 14 ),
877
+    RPT_2   ( -66,  0, 14 ), RPT_2   (  67,  0, 14 ),
878
+    RPT_2   ( -67,  0, 14 ), RPT_2   (  68,  0, 14 ),
879
+    RPT_2   ( -68,  0, 14 ), RPT_2   (  69,  0, 14 ),
880
+    RPT_2   ( -69,  0, 14 ), RPT_2   (  70,  0, 14 ),
881
+    RPT_2   ( -70,  0, 14 ), RPT_2   (  71,  0, 14 ),
882
+    RPT_2   ( -71,  0, 14 ), RPT_2   (  72,  0, 14 ),
883
+    RPT_2   ( -72,  0, 14 ), RPT_2   (  73,  0, 14 ),
884
+    RPT_2   ( -73,  0, 14 ), RPT_2   (  74,  0, 14 ),
885
+    RPT_2   ( -74,  0, 14 ), RPT_2   (  75,  0, 14 ),
886
+    RPT_2   ( -75,  0, 14 ), RPT_2   (  76,  0, 14 ),
887
+    RPT_2   ( -76,  0, 14 ), RPT_2   (  77,  0, 14 ),
888
+    RPT_2   ( -77,  0, 14 ), RPT_2   (  78,  0, 14 ),
889
+    RPT_2   ( -78,  0, 14 ), RPT_2   (  79,  0, 14 ),
890
+    RPT_2   ( -79,  0, 14 ), RPT_2   (  80,  0, 14 ),
891
+    RPT_2   ( -80,  0, 14 ), RPT_2   (  81,  0, 14 ),
892
+    RPT_2   ( -81,  0, 14 ), RPT_2   (  82,  0, 14 ),
893
+    RPT_2   ( -82,  0, 14 ), RPT_2   (  83,  0, 14 ),
894
+    RPT_2   ( -83,  0, 14 ), RPT_2   (  84,  0, 14 ),
895
+    RPT_2   ( -84,  0, 14 ), RPT_2   (  85,  0, 14 ),
896
+    RPT_2   ( -85,  0, 14 ), RPT_2   (  86,  0, 14 ),
897
+    RPT_2   ( -86,  0, 14 ), RPT_2   (  87,  0, 14 ),
898
+    RPT_2   ( -87,  0, 14 ), RPT_2   (  88,  0, 14 ),
899
+    RPT_2   ( -88,  0, 14 ), RPT_2   (  89,  0, 14 ),
900
+    RPT_2   ( -89,  0, 14 ), RPT_2   (  90,  0, 14 ),
901
+    RPT_2   ( -90,  0, 14 ), RPT_2   (  91,  0, 14 ),
902
+    RPT_2   ( -91,  0, 14 ), RPT_2   (  92,  0, 14 ),
903
+    RPT_2   ( -92,  0, 14 ), RPT_2   (  93,  0, 14 ),
904
+    RPT_2   ( -93,  0, 14 ), RPT_2   (  94,  0, 14 ),
905
+    RPT_2   ( -94,  0, 14 ), RPT_2   (  95,  0, 14 ),
906
+    RPT_2   ( -95,  0, 14 ), RPT_2   (  96,  0, 14 ),
907
+    RPT_2   ( -96,  0, 14 ), RPT_2   (  97,  0, 14 ),
908
+    RPT_2   ( -97,  0, 14 ), RPT_2   (  98,  0, 14 ),
909
+    RPT_2   ( -98,  0, 14 ), RPT_2   (  99,  0, 14 ),
910
+    RPT_2   ( -99,  0, 14 ), RPT_2   ( 100,  0, 14 ),
911
+    RPT_2   (-100,  0, 14 ), RPT_2   ( 101,  0, 14 ),
912
+    RPT_2   (-101,  0, 14 ), RPT_2   ( 102,  0, 14 ),
913
+    RPT_2   (-102,  0, 14 ), RPT_2   ( 103,  0, 14 ),
914
+    RPT_2   (-103,  0, 14 ), RPT_2   ( 104,  0, 14 ),
915
+    RPT_2   (-104,  0, 14 ), RPT_2   ( 105,  0, 14 ),
916
+    RPT_2   (-105,  0, 14 ), RPT_2   ( 106,  0, 14 ),
917
+    RPT_2   (-106,  0, 14 ), RPT_2   ( 107,  0, 14 ),
918
+    RPT_2   (-107,  0, 14 ), RPT_2   ( 108,  0, 14 ),
919
+    RPT_2   (-108,  0, 14 ), RPT_2   ( 109,  0, 14 ),
920
+    RPT_2   (-109,  0, 14 ), RPT_2   ( 110,  0, 14 ),
921
+    RPT_2   (-110,  0, 14 ), RPT_2   ( 111,  0, 14 ),
922
+    RPT_2   (-111,  0, 14 ), RPT_2   ( 112,  0, 14 ),
923
+    RPT_2   (-112,  0, 14 ), RPT_2   ( 113,  0, 14 ),
924
+    RPT_2   (-113,  0, 14 ), RPT_2   ( 114,  0, 14 ),
925
+    RPT_2   (-114,  0, 14 ), RPT_2   ( 115,  0, 14 ),
926
+    RPT_2   (-115,  0, 14 ), RPT_2   ( 116,  0, 14 ),
927
+    RPT_2   (-116,  0, 14 ), RPT_2   ( 117,  0, 14 ),
928
+    RPT_2   (-117,  0, 14 ), RPT_2   ( 118,  0, 14 ),
929
+    RPT_2   (-118,  0, 14 ), RPT_2   ( 119,  0, 14 ),
930
+    RPT_2   (-119,  0, 14 ), RPT_2   ( 120,  0, 14 ),
931
+    RPT_2   (-120,  0, 14 ), RPT_2   ( 121,  0, 14 ),
932
+    RPT_2   (-121,  0, 14 ), RPT_2   ( 122,  0, 14 ),
933
+    RPT_2   (-122,  0, 14 ), RPT_2   ( 123,  0, 14 ),
934
+    RPT_2   (-123,  0, 14 ), RPT_2   ( 124,  0, 14 ),
935
+    RPT_2   (-124,  0, 14 ), RPT_2   ( 125,  0, 14 ),
936
+    RPT_2   (-125,  0, 14 ), RPT_2   ( 126,  0, 14 ),
937
+    RPT_2   (-126,  0, 14 ), RPT_2   ( 127,  0, 14 ),
938
+    RPT_2   (-127,  0, 14 ), RPT_2   ( 128,  0, 14 ),
939
+    RPT_2   (-128,  0, 14 ), RPT_2   ( 129,  0, 14 ),
940
+    RPT_2   (-129,  0, 14 ), RPT_2   ( 130,  0, 14 ),
941
+    RPT_2   (-130,  0, 14 ), RPT_2   ( 131,  0, 14 ),
942
+    RPT_2   (-131,  0, 14 ), RPT_2   ( 132,  0, 14 ),
943
+    RPT_2   (-132,  0, 14 ), RPT_2   ( 133,  0, 14 ),
944
+    RPT_2   (-133,  0, 14 ), RPT_2   ( 134,  0, 14 ),
945
+    RPT_2   (-134,  0, 14 ), RPT_2   ( 135,  0, 14 ),
946
+    RPT_2   (-135,  0, 14 ), RPT_2   ( 136,  0, 14 ),
947
+    RPT_2   (-136,  0, 14 ), RPT_2   ( 137,  0, 14 ),
948
+    RPT_2   (-137,  0, 14 ), RPT_2   ( 138,  0, 14 ),
949
+    RPT_2   (-138,  0, 14 ), RPT_2   ( 139,  0, 14 ),
950
+    RPT_2   (-139,  0, 14 ), RPT_2   ( 140,  0, 14 ),
951
+    RPT_2   (-140,  0, 14 ), RPT_2   ( 141,  0, 14 ),
952
+    RPT_2   (-141,  0, 14 ), RPT_2   ( 142,  0, 14 ),
953
+    RPT_2   (-142,  0, 14 ), RPT_2   ( 143,  0, 14 ),
954
+    RPT_2   (-143,  0, 14 ), RPT_2   ( 144,  0, 14 ),
955
+    RPT_2   (-144,  0, 14 ), RPT_2   ( 145,  0, 14 ),
956
+    RPT_2   (-145,  0, 14 ), RPT_2   ( 146,  0, 14 ),
957
+    RPT_2   (-146,  0, 14 ), RPT_2   ( 147,  0, 14 ),
958
+    RPT_2   (-147,  0, 14 ), RPT_2   ( 148,  0, 14 ),
959
+    RPT_2   (-148,  0, 14 ), RPT_2   ( 149,  0, 14 ),
960
+    RPT_2   (-149,  0, 14 ), RPT_2   ( 150,  0, 14 ),
961
+    RPT_2   (-150,  0, 14 ), RPT_2   ( 151,  0, 14 ),
962
+    RPT_2   (-151,  0, 14 ), RPT_2   ( 152,  0, 14 ),
963
+    RPT_2   (-152,  0, 14 ), RPT_2   ( 153,  0, 14 ),
964
+    RPT_2   (-153,  0, 14 ), RPT_2   ( 154,  0, 14 ),
965
+    RPT_2   (-154,  0, 14 ), RPT_2   ( 155,  0, 14 ),
966
+    RPT_2   (-155,  0, 14 ), RPT_2   ( 156,  0, 14 ),
967
+    RPT_2   (-156,  0, 14 ), RPT_2   ( 157,  0, 14 ),
968
+    RPT_2   (-157,  0, 14 ), RPT_2   ( 158,  0, 14 ),
969
+    RPT_2   (-158,  0, 14 ), RPT_2   ( 159,  0, 14 ),
970
+    RPT_2   (-159,  0, 14 ), RPT_2   ( 160,  0, 14 ),
971
+    RPT_2   (-160,  0, 14 ), RPT_2   ( 161,  0, 14 ),
972
+    RPT_2   (-161,  0, 14 ), RPT_2   ( 162,  0, 14 ),
973
+    RPT_2   (-162,  0, 14 ), RPT_2   ( 163,  0, 14 ),
974
+    RPT_2   (-163,  0, 14 ), RPT_2   ( 164,  0, 14 ),
975
+    RPT_2   (-164,  0, 14 ), RPT_2   ( 165,  0, 14 ),
976
+    RPT_2   (-165,  0, 14 ), RPT_2   ( 166,  0, 14 ),
977
+    RPT_2   (-166,  0, 14 ), RPT_2   ( 167,  0, 14 ),
978
+    RPT_2   (-167,  0, 14 ), RPT_2   ( 168,  0, 14 ),
979
+    RPT_2   (-168,  0, 14 ), RPT_2   ( 169,  0, 14 ),
980
+    RPT_2   (-169,  0, 14 ), RPT_2   ( 170,  0, 14 ),
981
+    RPT_2   (-170,  0, 14 ), RPT_2   ( 171,  0, 14 ),
982
+    RPT_2   (-171,  0, 14 ), RPT_2   ( 172,  0, 14 ),
983
+    RPT_2   (-172,  0, 14 ), RPT_2   ( 173,  0, 14 ),
984
+    RPT_2   (-173,  0, 14 ), RPT_2   ( 174,  0, 14 ),
985
+    RPT_2   (-174,  0, 14 ), RPT_2   ( 175,  0, 14 ),
986
+    RPT_2   (-175,  0, 14 ), RPT_2   ( 176,  0, 14 ),
987
+    RPT_2   (-176,  0, 14 ), RPT_2   ( 177,  0, 14 ),
988
+    RPT_2   (-177,  0, 14 ), RPT_2   ( 178,  0, 14 ),
989
+    RPT_2   (-178,  0, 14 ), RPT_2   ( 179,  0, 14 ),
990
+    RPT_2   (-179,  0, 14 ), RPT_2   ( 180,  0, 14 ),
991
+    RPT_2   (-180,  0, 14 ), RPT_2   ( 181,  0, 14 ),
992
+    RPT_2   (-181,  0, 14 ), RPT_2   ( 182,  0, 14 ),
993
+    RPT_2   (-182,  0, 14 ), RPT_2   ( 183,  0, 14 ),
994
+    RPT_2   (-183,  0, 14 ), RPT_2   ( 184,  0, 14 ),
995
+    RPT_2   (-184,  0, 14 ), RPT_2   ( 185,  0, 14 ),
996
+    RPT_2   (-185,  0, 14 ), RPT_2   ( 186,  0, 14 ),
997
+    RPT_2   (-186,  0, 14 ), RPT_2   ( 187,  0, 14 ),
998
+    RPT_2   (-187,  0, 14 ), RPT_2   ( 188,  0, 14 ),
999
+    RPT_2   (-188,  0, 14 ), RPT_2   ( 189,  0, 14 ),
1000
+    RPT_2   (-189,  0, 14 ), RPT_2   ( 190,  0, 14 ),
1001
+    RPT_2   (-190,  0, 14 ), RPT_2   ( 191,  0, 14 ),
1002
+    RPT_2   (-191,  0, 14 ), RPT_2   ( 192,  0, 14 ),
1003
+    RPT_2   (-192,  0, 14 ), RPT_2   ( 193,  0, 14 ),
1004
+    RPT_2   (-193,  0, 14 ), RPT_2   ( 194,  0, 14 ),
1005
+    RPT_2   (-194,  0, 14 ), RPT_2   ( 195,  0, 14 ),
1006
+    RPT_2   (-195,  0, 14 ), RPT_2   ( 196,  0, 14 ),
1007
+    RPT_2   (-196,  0, 14 ), RPT_2   ( 197,  0, 14 ),
1008
+    RPT_2   (-197,  0, 14 ), RPT_2   ( 198,  0, 14 ),
1009
+    RPT_2   (-198,  0, 14 ), RPT_2   ( 199,  0, 14 ),
1010
+    RPT_2   (-199,  0, 14 ), RPT_2   ( 200,  0, 14 ),
1011
+    RPT_2   (-200,  0, 14 ), RPT_2   ( 201,  0, 14 ),
1012
+    RPT_2   (-201,  0, 14 ), RPT_2   ( 202,  0, 14 ),
1013
+    RPT_2   (-202,  0, 14 ), RPT_2   ( 203,  0, 14 ),
1014
+    RPT_2   (-203,  0, 14 ), RPT_2   ( 204,  0, 14 ),
1015
+    RPT_2   (-204,  0, 14 ), RPT_2   ( 205,  0, 14 ),
1016
+    RPT_2   (-205,  0, 14 ), RPT_2   ( 206,  0, 14 ),
1017
+    RPT_2   (-206,  0, 14 ), RPT_2   ( 207,  0, 14 ),
1018
+    RPT_2   (-207,  0, 14 ), RPT_2   ( 208,  0, 14 ),
1019
+    RPT_2   (-208,  0, 14 ), RPT_2   ( 209,  0, 14 ),
1020
+    RPT_2   (-209,  0, 14 ), RPT_2   ( 210,  0, 14 ),
1021
+    RPT_2   (-210,  0, 14 ), RPT_2   ( 211,  0, 14 ),
1022
+    RPT_2   (-211,  0, 14 ), RPT_2   ( 212,  0, 14 ),
1023
+    RPT_2   (-212,  0, 14 ), RPT_2   ( 213,  0, 14 ),
1024
+    RPT_2   (-213,  0, 14 ), RPT_2   ( 214,  0, 14 ),
1025
+    RPT_2   (-214,  0, 14 ), RPT_2   ( 215,  0, 14 ),
1026
+    RPT_2   (-215,  0, 14 ), RPT_2   ( 216,  0, 14 ),
1027
+    RPT_2   (-216,  0, 14 ), RPT_2   ( 217,  0, 14 ),
1028
+    RPT_2   (-217,  0, 14 ), RPT_2   ( 218,  0, 14 ),
1029
+    RPT_2   (-218,  0, 14 ), RPT_2   ( 219,  0, 14 ),
1030
+    RPT_2   (-219,  0, 14 ), RPT_2   ( 220,  0, 14 ),
1031
+    RPT_2   (-220,  0, 14 ), RPT_2   ( 221,  0, 14 ),
1032
+    RPT_2   (-221,  0, 14 ), RPT_2   ( 222,  0, 14 ),
1033
+    RPT_2   (-222,  0, 14 ), RPT_2   ( 223,  0, 14 ),
1034
+    RPT_2   (-223,  0, 14 ), RPT_2   ( 224,  0, 14 ),
1035
+    RPT_2   (-224,  0, 14 ), RPT_2   ( 225,  0, 14 ),
1036
+    RPT_2   (-225,  0, 14 ), RPT_2   ( 226,  0, 14 ),
1037
+    RPT_2   (-226,  0, 14 ), RPT_2   ( 227,  0, 14 ),
1038
+    RPT_2   (-227,  0, 14 ), RPT_2   ( 228,  0, 14 ),
1039
+    RPT_2   (-228,  0, 14 ), RPT_2   ( 229,  0, 14 ),
1040
+    RPT_2   (-229,  0, 14 ), RPT_2   ( 230,  0, 14 ),
1041
+    RPT_2   (-230,  0, 14 ), RPT_2   ( 231,  0, 14 ),
1042
+    RPT_2   (-231,  0, 14 ), RPT_2   ( 232,  0, 14 ),
1043
+    RPT_2   (-232,  0, 14 ), RPT_2   ( 233,  0, 14 ),
1044
+    RPT_2   (-233,  0, 14 ), RPT_2   ( 234,  0, 14 ),
1045
+    RPT_2   (-234,  0, 14 ), RPT_2   ( 235,  0, 14 ),
1046
+    RPT_2   (-235,  0, 14 ), RPT_2   ( 236,  0, 14 ),
1047
+    RPT_2   (-236,  0, 14 ), RPT_2   ( 237,  0, 14 ),
1048
+    RPT_2   (-237,  0, 14 ), RPT_2   ( 238,  0, 14 ),
1049
+    RPT_2   (-238,  0, 14 ), RPT_2   ( 239,  0, 14 ),
1050
+    RPT_2   (-239,  0, 14 ), RPT_2   ( 240,  0, 14 ),
1051
+    RPT_2   (-240,  0, 14 ), RPT_2   ( 241,  0, 14 ),
1052
+    RPT_2   (-241,  0, 14 ), RPT_2   ( 242,  0, 14 ),
1053
+    RPT_2   (-242,  0, 14 ), RPT_2   ( 243,  0, 14 ),
1054
+    RPT_2   (-243,  0, 14 ), RPT_2   ( 244,  0, 14 ),
1055
+    RPT_2   (-244,  0, 14 ), RPT_2   ( 245,  0, 14 ),
1056
+    RPT_2   (-245,  0, 14 ), RPT_2   ( 246,  0, 14 ),
1057
+    RPT_2   (-246,  0, 14 ), RPT_2   ( 247,  0, 14 ),
1058
+    RPT_2   (-247,  0, 14 ), RPT_2   ( 248,  0, 14 ),
1059
+    RPT_2   (-248,  0, 14 ), RPT_2   ( 249,  0, 14 ),
1060
+    RPT_2   (-249,  0, 14 ), RPT_2   ( 250,  0, 14 ),
1061
+    RPT_2   (-250,  0, 14 ), RPT_2   ( 251,  0, 14 ),
1062
+    RPT_2   (-251,  0, 14 ), RPT_2   ( 252,  0, 14 ),
1063
+    RPT_2   (-252,  0, 14 ), RPT_2   ( 253,  0, 14 ),
1064
+    RPT_2   (-253,  0, 14 ), RPT_2   ( 254,  0, 14 ),
1065
+    RPT_2   (-254,  0, 14 ), RPT_2   ( 255,  0, 14 ),
1066
+    RPT_2   (-255,  0, 14 ), {    0,  0, 15 }, {    0,  1, 15 },
1067
+    {    0,  2, 15 }, {    0,  3, 15 }, {    0,  4, 15 }, {    0,  5, 15 },
1068
+    {    0,  6, 15 }, {    0,  7, 15 }, {    0,  8, 15 }, {    0,  9, 15 },
1069
+    {    0, 10, 15 }, {    0, 11, 15 }, {    0, 12, 15 }, {    0, 13, 15 },
1070
+    {    0, 14, 15 }, {    0, 15, 15 }, {    0, 16, 15 }, {    0, 17, 15 },
1071
+    {    0, 18, 15 }, {    0, 19, 15 }, {    0, 20, 15 }, {    0, 21, 15 },
1072
+    {    0, 22, 15 }, {    0, 23, 15 }, {    0, 24, 15 }, {    0, 25, 15 },
1073
+    {    0, 26, 15 }, {    0, 27, 15 }, {    0, 28, 15 }, {    0, 29, 15 },
1074
+    {    0, 30, 15 }, {    0, 31, 15 }, {    0, 32, 15 }, {    0, 33, 15 },
1075
+    {    0, 34, 15 }, {    0, 35, 15 }, {    0, 36, 15 }, {    0, 37, 15 },
1076
+    {    0, 38, 15 }, {    0, 39, 15 }, {    0, 40, 15 }, {    0, 41, 15 },
1077
+    {    0, 42, 15 }, {    0, 43, 15 }, {    0, 44, 15 }, {    0, 45, 15 },
1078
+    {    0, 46, 15 }, {    0, 47, 15 }, {    0, 48, 15 }, {    0, 49, 15 },
1079
+    {    0, 50, 15 }, {    0, 51, 15 }, {    0, 52, 15 }, {    0, 53, 15 },
1080
+    {    0, 54, 15 }, {    0, 55, 15 }, {    0, 56, 15 }, {    0, 57, 15 },
1081
+    {    0, 58, 15 }, {    0, 59, 15 }, {    0, 60, 15 }, {    0, 61, 15 },
1082
+    {    0, 62, 15 }, {    0, 63, 15 }, RPT_16  (  51,  0, 11 ),
1083
+    RPT_16  ( -51,  0, 11 ), RPT_16  (  52,  0, 11 ),
1084
+    RPT_16  ( -52,  0, 11 ), RPT_16  (  53,  0, 11 ),
1085
+    RPT_16  ( -53,  0, 11 ), RPT_16  (  54,  0, 11 ),
1086
+    RPT_16  ( -54,  0, 11 ), RPT_16  (  55,  0, 11 ),
1087
+    RPT_16  ( -55,  0, 11 ), RPT_16  (  56,  0, 11 ),
1088
+    RPT_16  ( -56,  0, 11 ), RPT_16  (  57,  0, 11 ),
1089
+    RPT_16  ( -57,  0, 11 ), RPT_16  (  58,  0, 11 ),
1090
+    RPT_16  ( -58,  0, 11 ), RPT_16  (  59,  0, 11 ),
1091
+    RPT_16  ( -59,  0, 11 ), RPT_16  (  60,  0, 11 ),
1092
+    RPT_16  ( -60,  0, 11 ), RPT_16  (  61,  0, 11 ),
1093
+    RPT_16  ( -61,  0, 11 ), RPT_16  (  62,  0, 11 ),
1094
+    RPT_16  ( -62,  0, 11 ), RPT_16  (  63,  0, 11 ),
1095
+    RPT_16  ( -63,  0, 11 ), RPT_16  (  11,  1, 11 ),
1096
+    RPT_16  ( -11,  1, 11 ), RPT_16  (  12,  1, 11 ),
1097
+    RPT_16  ( -12,  1, 11 ), RPT_16  (  13,  1, 11 ),
1098
+    RPT_16  ( -13,  1, 11 ), RPT_16  (  14,  1, 11 ),
1099
+    RPT_16  ( -14,  1, 11 ), RPT_16  (   4,  2, 11 ),
1100
+    RPT_16  (  -4,  2, 11 ), RPT_16  (   5,  2, 11 ),
1101
+    RPT_16  (  -5,  2, 11 ), RPT_16  (   6,  2, 11 ),
1102
+    RPT_16  (  -6,  2, 11 ), RPT_16  (   3,  3, 11 ),
1103
+    RPT_16  (  -3,  3, 11 ), RPT_16  (   2,  4, 11 ),
1104
+    RPT_16  (  -2,  4, 11 ), RPT_16  (   1,  9, 11 ),
1105
+    RPT_16  (  -1,  9, 11 ), RPT_16  (   1, 10, 11 ),
1106
+    RPT_16  (  -1, 10, 11 ), RPT_8   (  15,  1, 12 ),
1107
+    RPT_8   ( -15,  1, 12 ), RPT_8   (  16,  1, 12 ),
1108
+    RPT_8   ( -16,  1, 12 ), RPT_8   (  17,  1, 12 ),
1109
+    RPT_8   ( -17,  1, 12 ), RPT_8   (  18,  1, 12 ),
1110
+    RPT_8   ( -18,  1, 12 ), RPT_8   (   7,  2, 12 ),
1111
+    RPT_8   (  -7,  2, 12 ), RPT_8   (   8,  2, 12 ),
1112
+    RPT_8   (  -8,  2, 12 ), RPT_8   (   9,  2, 12 ),
1113
+    RPT_8   (  -9,  2, 12 ), RPT_8   (  10,  2, 12 ),
1114
+    RPT_8   ( -10,  2, 12 ), RPT_8   (   4,  3, 12 ),
1115
+    RPT_8   (  -4,  3, 12 ), RPT_8   (   5,  3, 12 ),
1116
+    RPT_8   (  -5,  3, 12 ), RPT_8   (   6,  3, 12 ),
1117
+    RPT_8   (  -6,  3, 12 ), RPT_8   (   2,  5, 12 ),
1118
+    RPT_8   (  -2,  5, 12 ), RPT_16  (   0,  7, 11 ),
1119
+    RPT_16  (   0,  8, 11 ), RPT_16  (   0,  9, 11 ),
1120
+    RPT_16  (   0, 10, 11 ), RPT_8   (   1, 11, 12 ),
1121
+    RPT_8   (  -1, 11, 12 ), RPT_8   (   1, 12, 12 ),
1122
+    RPT_8   (  -1, 12, 12 ), RPT_8   (   1, 13, 12 ),
1123
+    RPT_8   (  -1, 13, 12 ), RPT_8   (   1, 14, 12 ),
1124
+    RPT_8   (  -1, 14, 12 ), RPT_4   (  19,  1, 13 ),
1125
+    RPT_4   ( -19,  1, 13 ), RPT_4   (  20,  1, 13 ),
1126
+    RPT_4   ( -20,  1, 13 ), RPT_4   (   3,  4, 13 ),
1127
+    RPT_4   (  -3,  4, 13 ), RPT_4   (   2,  6, 13 ),
1128
+    RPT_4   (  -2,  6, 13 ),
1129
+};
1130
+
1131
+static const HQXLUT ac8_lut[] = {
1132
+    RPT_128 (   1,  0,  4 ), RPT_128 (  -1,  0,  4 ),
1133
+    RPT_128 (   2,  0,  4 ), RPT_128 (  -2,  0,  4 ),
1134
+    RPT_64  (   3,  0,  5 ), RPT_64  (  -3,  0,  5 ),
1135
+    RPT_64  (   4,  0,  5 ), RPT_64  (  -4,  0,  5 ),
1136
+    RPT_128 (   0, 64,  4 ), RPT_32  (   5,  0,  6 ),
1137
+    RPT_32  (  -5,  0,  6 ), RPT_32  (   6,  0,  6 ),
1138
+    RPT_32  (  -6,  0,  6 ), RPT_32  (   7,  0,  6 ),
1139
+    RPT_32  (  -7,  0,  6 ), RPT_32  (   8,  0,  6 ),
1140
+    RPT_32  (  -8,  0,  6 ), RPT_32  (   1,  1,  6 ),
1141
+    RPT_32  (  -1,  1,  6 ), RPT_32  (   2,  1,  6 ),
1142
+    RPT_32  (  -2,  1,  6 ), RPT_16  (   9,  0,  7 ),
1143
+    RPT_16  (  -9,  0,  7 ), RPT_16  (  10,  0,  7 ),
1144
+    RPT_16  ( -10,  0,  7 ), RPT_16  (  11,  0,  7 ),
1145
+    RPT_16  ( -11,  0,  7 ), RPT_16  (  12,  0,  7 ),
1146
+    RPT_16  ( -12,  0,  7 ), RPT_16  (   3,  1,  7 ),
1147
+    RPT_16  (  -3,  1,  7 ), RPT_16  (   4,  1,  7 ),
1148
+    RPT_16  (  -4,  1,  7 ), RPT_16  (   1,  2,  7 ),
1149
+    RPT_16  (  -1,  2,  7 ), { 2048,  0, -1 }, { 2112,  0, -1 },
1150
+    { 2176,  0, -1 }, { 2240,  0, -1 }, { 2304,  0, -1 }, { 2368,  0, -1 },
1151
+    { 2432,  0, -1 }, { 2496,  0, -1 }, { 2560,  0, -1 }, { 2624,  0, -1 },
1152
+    { 2688,  0, -1 }, { 2752,  0, -1 }, { 2816,  0, -1 }, { 2880,  0, -1 },
1153
+    { 2944,  0, -1 }, { 3008,  0, -1 }, { 3072,  0, -1 }, { 3136,  0, -1 },
1154
+    { 3200,  0, -1 }, { 3264,  0, -1 }, { 3328,  0, -1 }, { 3392,  0, -1 },
1155
+    { 3456,  0, -1 }, { 3520,  0, -1 }, { 3584,  0, -1 }, { 3648,  0, -1 },
1156
+    { 3712,  0, -1 }, { 3776,  0, -1 }, { 3840,  0, -1 }, { 3904,  0, -1 },
1157
+    { 3968,  0, -1 }, { 4032,  0, -1 }, RPT_8   (  13,  0,  8 ),
1158
+    RPT_8   ( -13,  0,  8 ), RPT_8   (  14,  0,  8 ),
1159
+    RPT_8   ( -14,  0,  8 ), RPT_8   (  15,  0,  8 ),
1160
+    RPT_8   ( -15,  0,  8 ), RPT_8   (  16,  0,  8 ),
1161
+    RPT_8   ( -16,  0,  8 ), RPT_8   (  17,  0,  8 ),
1162
+    RPT_8   ( -17,  0,  8 ), RPT_8   (  18,  0,  8 ),
1163
+    RPT_8   ( -18,  0,  8 ), RPT_8   (   5,  1,  8 ),
1164
+    RPT_8   (  -5,  1,  8 ), RPT_8   (   6,  1,  8 ),
1165
+    RPT_8   (  -6,  1,  8 ), RPT_8   (   2,  2,  8 ),
1166
+    RPT_8   (  -2,  2,  8 ), RPT_8   (   1,  3,  8 ),
1167
+    RPT_8   (  -1,  3,  8 ), RPT_8   (   0,  0,  8 ),
1168
+    RPT_4   (  19,  0,  9 ), RPT_4   ( -19,  0,  9 ),
1169
+    RPT_4   (  20,  0,  9 ), RPT_4   ( -20,  0,  9 ),
1170
+    RPT_4   (  21,  0,  9 ), RPT_4   ( -21,  0,  9 ),
1171
+    RPT_4   (  22,  0,  9 ), RPT_4   ( -22,  0,  9 ),
1172
+    RPT_4   (  23,  0,  9 ), RPT_4   ( -23,  0,  9 ),
1173
+    RPT_4   (  24,  0,  9 ), RPT_4   ( -24,  0,  9 ),
1174
+    RPT_4   (  25,  0,  9 ), RPT_4   ( -25,  0,  9 ),
1175
+    RPT_4   (   7,  1,  9 ), RPT_4   (  -7,  1,  9 ),
1176
+    RPT_4   (   8,  1,  9 ), RPT_4   (  -8,  1,  9 ),
1177
+    RPT_4   (   3,  2,  9 ), RPT_4   (  -3,  2,  9 ),
1178
+    RPT_4   (   2,  3,  9 ), RPT_4   (  -2,  3,  9 ),
1179
+    RPT_4   (   1,  4,  9 ), RPT_4   (  -1,  4,  9 ),
1180
+    RPT_4   (   1,  5,  9 ), RPT_4   (  -1,  5,  9 ),
1181
+    RPT_2   (  26,  0, 10 ), RPT_2   ( -26,  0, 10 ),
1182
+    RPT_2   (  27,  0, 10 ), RPT_2   ( -27,  0, 10 ),
1183
+    RPT_2   (  28,  0, 10 ), RPT_2   ( -28,  0, 10 ),
1184
+    RPT_2   (  29,  0, 10 ), RPT_2   ( -29,  0, 10 ),
1185
+    RPT_2   (  30,  0, 10 ), RPT_2   ( -30,  0, 10 ),
1186
+    RPT_2   (  31,  0, 10 ), RPT_2   ( -31,  0, 10 ),
1187
+    RPT_2   (  32,  0, 10 ), RPT_2   ( -32,  0, 10 ),
1188
+    RPT_2   (  33,  0, 10 ), RPT_2   ( -33,  0, 10 ),
1189
+    RPT_2   (  34,  0, 10 ), RPT_2   ( -34,  0, 10 ),
1190
+    RPT_2   (  35,  0, 10 ), RPT_2   ( -35,  0, 10 ),
1191
+    RPT_2   (  36,  0, 10 ), RPT_2   ( -36,  0, 10 ),
1192
+    RPT_4   (   0,  1,  9 ), RPT_2   (   9,  1, 10 ),
1193
+    RPT_2   (  -9,  1, 10 ), RPT_2   (  10,  1, 10 ),
1194
+    RPT_2   ( -10,  1, 10 ), RPT_2   (  11,  1, 10 ),
1195
+    RPT_2   ( -11,  1, 10 ), RPT_2   (  12,  1, 10 ),
1196
+    RPT_2   ( -12,  1, 10 ), RPT_4   (   0,  2,  9 ),
1197
+    RPT_2   (   4,  2, 10 ), RPT_2   (  -4,  2, 10 ),
1198
+    RPT_2   (   5,  2, 10 ), RPT_2   (  -5,  2, 10 ),
1199
+    RPT_2   (   6,  2, 10 ), RPT_2   (  -6,  2, 10 ),
1200
+    RPT_4   (   0,  3,  9 ), RPT_2   (   3,  3, 10 ),
1201
+    RPT_2   (  -3,  3, 10 ), RPT_2   (   4,  3, 10 ),
1202
+    RPT_2   (  -4,  3, 10 ), RPT_4   (   0,  4,  9 ),
1203
+    RPT_2   (   2,  4, 10 ), RPT_2   (  -2,  4, 10 ),
1204
+    RPT_4   (   0,  5,  9 ), RPT_2   (   1,  6, 10 ),
1205
+    RPT_2   (  -1,  6, 10 ), RPT_2   (   1,  7, 10 ),
1206
+    RPT_2   (  -1,  7, 10 ), RPT_2   (   1,  8, 10 ),
1207
+    RPT_2   (  -1,  8, 10 ), {   37,  0, 11 }, {  -37,  0, 11 },
1208
+    {   38,  0, 11 }, {  -38,  0, 11 }, {   39,  0, 11 }, {  -39,  0, 11 },
1209
+    {   40,  0, 11 }, {  -40,  0, 11 }, {   41,  0, 11 }, {  -41,  0, 11 },
1210
+    {   42,  0, 11 }, {  -42,  0, 11 }, {   43,  0, 11 }, {  -43,  0, 11 },
1211
+    {   44,  0, 11 }, {  -44,  0, 11 }, {   45,  0, 11 }, {  -45,  0, 11 },
1212
+    {   46,  0, 11 }, {  -46,  0, 11 }, {   47,  0, 11 }, {  -47,  0, 11 },
1213
+    {   48,  0, 11 }, {  -48,  0, 11 }, {   13,  1, 11 }, {  -13,  1, 11 },
1214
+    {   14,  1, 11 }, {  -14,  1, 11 }, {   15,  1, 11 }, {  -15,  1, 11 },
1215
+    {   16,  1, 11 }, {  -16,  1, 11 }, {    7,  2, 11 }, {   -7,  2, 11 },
1216
+    {    8,  2, 11 }, {   -8,  2, 11 }, {    5,  3, 11 }, {   -5,  3, 11 },
1217
+    {    6,  3, 11 }, {   -6,  3, 11 }, {    3,  4, 11 }, {   -3,  4, 11 },
1218
+    {    4,  4, 11 }, {   -4,  4, 11 }, {    2,  5, 11 }, {   -2,  5, 11 },
1219
+    RPT_2   (   0,  6, 10 ), {    2,  6, 11 }, {   -2,  6, 11 },
1220
+    RPT_2   (   0,  7, 10 ), RPT_2   (   0,  8, 10 ),
1221
+    RPT_2   (   0,  9, 10 ), {    1,  9, 11 }, {   -1,  9, 11 },
1222
+    {    1, 10, 11 }, {   -1, 10, 11 }, {    1, 11, 11 }, {   -1, 11, 11 },
1223
+    {    1, 12, 11 }, {   -1, 12, 11 }, { 4096,  0, -1 }, { 4160,  0, -1 },
1224
+    { 4224,  0, -1 }, { 4288,  0, -1 }, { 4352,  0, -1 }, { 4416,  0, -1 },
1225
+    { 4480,  0, -1 }, { 4544,  0, -1 }, { 4608,  0, -1 }, { 4672,  0, -1 },
1226
+    { 4736,  0, -1 }, { 4800,  0, -1 }, { 4864,  0, -1 }, { 4928,  0, -1 },
1227
+    { 4992,  0, -1 }, { 5056,  0, -1 }, { 5120,  0, -1 }, { 5184,  0, -1 },
1228
+    { 5248,  0, -1 }, { 5312,  0, -1 }, { 5376,  0, -1 }, { 5440,  0, -1 },
1229
+    { 5504,  0, -1 }, { 5568,  0, -1 }, { 5632,  0, -1 }, { 5696,  0, -1 },
1230
+    { 5760,  0, -1 }, { 5824,  0, -1 }, { 5888,  0, -1 }, { 5952,  0, -1 },
1231
+    { 6016,  0, -1 }, { 6080,  0, -1 }, { 6144,  0, -1 }, { 6208,  0, -1 },
1232
+    { 6272,  0, -1 }, { 6336,  0, -1 }, { 6400,  0, -1 }, { 6464,  0, -1 },
1233
+    { 6528,  0, -1 }, { 6592,  0, -1 }, {    0, 10, 11 }, { 6656,  0, -1 },
1234
+    {    0, 11, 11 }, {    0, 12, 11 }, {    0, 13, 11 }, { 6720,  0, -1 },
1235
+    { 6784,  0, -1 }, { 6848,  0, -1 }, { 6912,  0, -1 }, { 6976,  0, -1 },
1236
+    { 7040,  0, -1 }, { 7104,  0, -1 }, { 7168,  0, -1 }, { 7232,  0, -1 },
1237
+    { 7296,  0, -1 }, { 7360,  0, -1 }, { 7424,  0, -1 }, { 7488,  0, -1 },
1238
+    { 7552,  0, -1 }, { 7616,  0, -1 }, RPT_8   (   0,  0, 14 ),
1239
+    RPT_4   (   1,  0, 15 ), RPT_4   (  -1,  0, 15 ),
1240
+    RPT_4   (   2,  0, 15 ), RPT_4   (  -2,  0, 15 ),
1241
+    RPT_4   (   3,  0, 15 ), RPT_4   (  -3,  0, 15 ),
1242
+    RPT_4   (   4,  0, 15 ), RPT_4   (  -4,  0, 15 ),
1243
+    RPT_4   (   5,  0, 15 ), RPT_4   (  -5,  0, 15 ),
1244
+    RPT_4   (   6,  0, 15 ), RPT_4   (  -6,  0, 15 ),
1245
+    RPT_4   (   7,  0, 15 ), RPT_4   (  -7,  0, 15 ),
1246
+    RPT_4   (   8,  0, 15 ), RPT_4   (  -8,  0, 15 ),
1247
+    RPT_4   (   9,  0, 15 ), RPT_4   (  -9,  0, 15 ),
1248
+    RPT_4   (  10,  0, 15 ), RPT_4   ( -10,  0, 15 ),
1249
+    RPT_4   (  11,  0, 15 ), RPT_4   ( -11,  0, 15 ),
1250
+    RPT_4   (  12,  0, 15 ), RPT_4   ( -12,  0, 15 ),
1251
+    RPT_4   (  13,  0, 15 ), RPT_4   ( -13,  0, 15 ),
1252
+    RPT_4   (  14,  0, 15 ), RPT_4   ( -14,  0, 15 ),
1253
+    RPT_4   (  15,  0, 15 ), RPT_4   ( -15,  0, 15 ),
1254
+    RPT_4   (  16,  0, 15 ), RPT_4   ( -16,  0, 15 ),
1255
+    RPT_4   (  17,  0, 15 ), RPT_4   ( -17,  0, 15 ),
1256
+    RPT_4   (  18,  0, 15 ), RPT_4   ( -18,  0, 15 ),
1257
+    RPT_4   (  19,  0, 15 ), RPT_4   ( -19,  0, 15 ),
1258
+    RPT_4   (  20,  0, 15 ), RPT_4   ( -20,  0, 15 ),
1259
+    RPT_4   (  21,  0, 15 ), RPT_4   ( -21,  0, 15 ),
1260
+    RPT_4   (  22,  0, 15 ), RPT_4   ( -22,  0, 15 ),
1261
+    RPT_4   (  23,  0, 15 ), RPT_4   ( -23,  0, 15 ),
1262
+    RPT_4   (  24,  0, 15 ), RPT_4   ( -24,  0, 15 ),
1263
+    RPT_4   (  25,  0, 15 ), RPT_4   ( -25,  0, 15 ),
1264
+    RPT_4   (  26,  0, 15 ), RPT_4   ( -26,  0, 15 ),
1265
+    RPT_4   (  27,  0, 15 ), RPT_4   ( -27,  0, 15 ),
1266
+    RPT_4   (  28,  0, 15 ), RPT_4   ( -28,  0, 15 ),
1267
+    RPT_4   (  29,  0, 15 ), RPT_4   ( -29,  0, 15 ),
1268
+    RPT_4   (  30,  0, 15 ), RPT_4   ( -30,  0, 15 ),
1269
+    RPT_4   (  31,  0, 15 ), RPT_4   ( -31,  0, 15 ),
1270
+    RPT_4   (  32,  0, 15 ), RPT_4   ( -32,  0, 15 ),
1271
+    RPT_4   (  33,  0, 15 ), RPT_4   ( -33,  0, 15 ),
1272
+    RPT_4   (  34,  0, 15 ), RPT_4   ( -34,  0, 15 ),
1273
+    RPT_4   (  35,  0, 15 ), RPT_4   ( -35,  0, 15 ),
1274
+    RPT_4   (  36,  0, 15 ), RPT_4   ( -36,  0, 15 ),
1275
+    RPT_4   (  37,  0, 15 ), RPT_4   ( -37,  0, 15 ),
1276
+    RPT_4   (  38,  0, 15 ), RPT_4   ( -38,  0, 15 ),
1277
+    RPT_4   (  39,  0, 15 ), RPT_4   ( -39,  0, 15 ),
1278
+    RPT_4   (  40,  0, 15 ), RPT_4   ( -40,  0, 15 ),
1279
+    RPT_4   (  41,  0, 15 ), RPT_4   ( -41,  0, 15 ),
1280
+    RPT_4   (  42,  0, 15 ), RPT_4   ( -42,  0, 15 ),
1281
+    RPT_4   (  43,  0, 15 ), RPT_4   ( -43,  0, 15 ),
1282
+    RPT_4   (  44,  0, 15 ), RPT_4   ( -44,  0, 15 ),
1283
+    RPT_4   (  45,  0, 15 ), RPT_4   ( -45,  0, 15 ),
1284
+    RPT_4   (  46,  0, 15 ), RPT_4   ( -46,  0, 15 ),
1285
+    RPT_4   (  47,  0, 15 ), RPT_4   ( -47,  0, 15 ),
1286
+    RPT_4   (  48,  0, 15 ), RPT_4   ( -48,  0, 15 ),
1287
+    RPT_4   (  49,  0, 15 ), RPT_4   ( -49,  0, 15 ),
1288
+    RPT_4   (  50,  0, 15 ), RPT_4   ( -50,  0, 15 ),
1289
+    RPT_4   (  51,  0, 15 ), RPT_4   ( -51,  0, 15 ),
1290
+    RPT_4   (  52,  0, 15 ), RPT_4   ( -52,  0, 15 ),
1291
+    RPT_4   (  53,  0, 15 ), RPT_4   ( -53,  0, 15 ),
1292
+    RPT_4   (  54,  0, 15 ), RPT_4   ( -54,  0, 15 ),
1293
+    RPT_4   (  55,  0, 15 ), RPT_4   ( -55,  0, 15 ),
1294
+    RPT_4   (  56,  0, 15 ), RPT_4   ( -56,  0, 15 ),
1295
+    RPT_4   (  57,  0, 15 ), RPT_4   ( -57,  0, 15 ),
1296
+    RPT_4   (  58,  0, 15 ), RPT_4   ( -58,  0, 15 ),
1297
+    RPT_4   (  59,  0, 15 ), RPT_4   ( -59,  0, 15 ),
1298
+    RPT_4   (  60,  0, 15 ), RPT_4   ( -60,  0, 15 ),
1299
+    RPT_4   (  61,  0, 15 ), RPT_4   ( -61,  0, 15 ),
1300
+    RPT_4   (  62,  0, 15 ), RPT_4   ( -62,  0, 15 ),
1301
+    RPT_4   (  63,  0, 15 ), RPT_4   ( -63,  0, 15 ),
1302
+    RPT_4   (  64,  0, 15 ), RPT_4   ( -64,  0, 15 ),
1303
+    RPT_4   (  65,  0, 15 ), RPT_4   ( -65,  0, 15 ),
1304
+    RPT_4   (  66,  0, 15 ), RPT_4   ( -66,  0, 15 ),
1305
+    RPT_4   (  67,  0, 15 ), RPT_4   ( -67,  0, 15 ),
1306
+    RPT_4   (  68,  0, 15 ), RPT_4   ( -68,  0, 15 ),
1307
+    RPT_4   (  69,  0, 15 ), RPT_4   ( -69,  0, 15 ),
1308
+    RPT_4   (  70,  0, 15 ), RPT_4   ( -70,  0, 15 ),
1309
+    RPT_4   (  71,  0, 15 ), RPT_4   ( -71,  0, 15 ),
1310
+    RPT_4   (  72,  0, 15 ), RPT_4   ( -72,  0, 15 ),
1311
+    RPT_4   (  73,  0, 15 ), RPT_4   ( -73,  0, 15 ),
1312
+    RPT_4   (  74,  0, 15 ), RPT_4   ( -74,  0, 15 ),
1313
+    RPT_4   (  75,  0, 15 ), RPT_4   ( -75,  0, 15 ),
1314
+    RPT_4   (  76,  0, 15 ), RPT_4   ( -76,  0, 15 ),
1315
+    RPT_4   (  77,  0, 15 ), RPT_4   ( -77,  0, 15 ),
1316
+    RPT_4   (  78,  0, 15 ), RPT_4   ( -78,  0, 15 ),
1317
+    RPT_4   (  79,  0, 15 ), RPT_4   ( -79,  0, 15 ),
1318
+    RPT_4   (  80,  0, 15 ), RPT_4   ( -80,  0, 15 ),
1319
+    RPT_4   (  81,  0, 15 ), RPT_4   ( -81,  0, 15 ),
1320
+    RPT_4   (  82,  0, 15 ), RPT_4   ( -82,  0, 15 ),
1321
+    RPT_4   (  83,  0, 15 ), RPT_4   ( -83,  0, 15 ),
1322
+    RPT_4   (  84,  0, 15 ), RPT_4   ( -84,  0, 15 ),
1323
+    RPT_4   (  85,  0, 15 ), RPT_4   ( -85,  0, 15 ),
1324
+    RPT_4   (  86,  0, 15 ), RPT_4   ( -86,  0, 15 ),
1325
+    RPT_4   (  87,  0, 15 ), RPT_4   ( -87,  0, 15 ),
1326
+    RPT_4   (  88,  0, 15 ), RPT_4   ( -88,  0, 15 ),
1327
+    RPT_4   (  89,  0, 15 ), RPT_4   ( -89,  0, 15 ),
1328
+    RPT_4   (  90,  0, 15 ), RPT_4   ( -90,  0, 15 ),
1329
+    RPT_4   (  91,  0, 15 ), RPT_4   ( -91,  0, 15 ),
1330
+    RPT_4   (  92,  0, 15 ), RPT_4   ( -92,  0, 15 ),
1331
+    RPT_4   (  93,  0, 15 ), RPT_4   ( -93,  0, 15 ),
1332
+    RPT_4   (  94,  0, 15 ), RPT_4   ( -94,  0, 15 ),
1333
+    RPT_4   (  95,  0, 15 ), RPT_4   ( -95,  0, 15 ),
1334
+    RPT_4   (  96,  0, 15 ), RPT_4   ( -96,  0, 15 ),
1335
+    RPT_4   (  97,  0, 15 ), RPT_4   ( -97,  0, 15 ),
1336
+    RPT_4   (  98,  0, 15 ), RPT_4   ( -98,  0, 15 ),
1337
+    RPT_4   (  99,  0, 15 ), RPT_4   ( -99,  0, 15 ),
1338
+    RPT_4   ( 100,  0, 15 ), RPT_4   (-100,  0, 15 ),
1339
+    RPT_4   ( 101,  0, 15 ), RPT_4   (-101,  0, 15 ),
1340
+    RPT_4   ( 102,  0, 15 ), RPT_4   (-102,  0, 15 ),
1341
+    RPT_4   ( 103,  0, 15 ), RPT_4   (-103,  0, 15 ),
1342
+    RPT_4   ( 104,  0, 15 ), RPT_4   (-104,  0, 15 ),
1343
+    RPT_4   ( 105,  0, 15 ), RPT_4   (-105,  0, 15 ),
1344
+    RPT_4   ( 106,  0, 15 ), RPT_4   (-106,  0, 15 ),
1345
+    RPT_4   ( 107,  0, 15 ), RPT_4   (-107,  0, 15 ),
1346
+    RPT_4   ( 108,  0, 15 ), RPT_4   (-108,  0, 15 ),
1347
+    RPT_4   ( 109,  0, 15 ), RPT_4   (-109,  0, 15 ),
1348
+    RPT_4   ( 110,  0, 15 ), RPT_4   (-110,  0, 15 ),
1349
+    RPT_4   ( 111,  0, 15 ), RPT_4   (-111,  0, 15 ),
1350
+    RPT_4   ( 112,  0, 15 ), RPT_4   (-112,  0, 15 ),
1351
+    RPT_4   ( 113,  0, 15 ), RPT_4   (-113,  0, 15 ),
1352
+    RPT_4   ( 114,  0, 15 ), RPT_4   (-114,  0, 15 ),
1353
+    RPT_4   ( 115,  0, 15 ), RPT_4   (-115,  0, 15 ),
1354
+    RPT_4   ( 116,  0, 15 ), RPT_4   (-116,  0, 15 ),
1355
+    RPT_4   ( 117,  0, 15 ), RPT_4   (-117,  0, 15 ),
1356
+    RPT_4   ( 118,  0, 15 ), RPT_4   (-118,  0, 15 ),
1357
+    RPT_4   ( 119,  0, 15 ), RPT_4   (-119,  0, 15 ),
1358
+    RPT_4   ( 120,  0, 15 ), RPT_4   (-120,  0, 15 ),
1359
+    RPT_4   ( 121,  0, 15 ), RPT_4   (-121,  0, 15 ),
1360
+    RPT_4   ( 122,  0, 15 ), RPT_4   (-122,  0, 15 ),
1361
+    RPT_4   ( 123,  0, 15 ), RPT_4   (-123,  0, 15 ),
1362
+    RPT_4   ( 124,  0, 15 ), RPT_4   (-124,  0, 15 ),
1363
+    RPT_4   ( 125,  0, 15 ), RPT_4   (-125,  0, 15 ),
1364
+    RPT_4   ( 126,  0, 15 ), RPT_4   (-126,  0, 15 ),
1365
+    RPT_4   ( 127,  0, 15 ), RPT_4   (-127,  0, 15 ),
1366
+    RPT_4   ( 128,  0, 15 ), RPT_4   (-128,  0, 15 ),
1367
+    RPT_4   ( 129,  0, 15 ), RPT_4   (-129,  0, 15 ),
1368
+    RPT_4   ( 130,  0, 15 ), RPT_4   (-130,  0, 15 ),
1369
+    RPT_4   ( 131,  0, 15 ), RPT_4   (-131,  0, 15 ),
1370
+    RPT_4   ( 132,  0, 15 ), RPT_4   (-132,  0, 15 ),
1371
+    RPT_4   ( 133,  0, 15 ), RPT_4   (-133,  0, 15 ),
1372
+    RPT_4   ( 134,  0, 15 ), RPT_4   (-134,  0, 15 ),
1373
+    RPT_4   ( 135,  0, 15 ), RPT_4   (-135,  0, 15 ),
1374
+    RPT_4   ( 136,  0, 15 ), RPT_4   (-136,  0, 15 ),
1375
+    RPT_4   ( 137,  0, 15 ), RPT_4   (-137,  0, 15 ),
1376
+    RPT_4   ( 138,  0, 15 ), RPT_4   (-138,  0, 15 ),
1377
+    RPT_4   ( 139,  0, 15 ), RPT_4   (-139,  0, 15 ),
1378
+    RPT_4   ( 140,  0, 15 ), RPT_4   (-140,  0, 15 ),
1379
+    RPT_4   ( 141,  0, 15 ), RPT_4   (-141,  0, 15 ),
1380
+    RPT_4   ( 142,  0, 15 ), RPT_4   (-142,  0, 15 ),
1381
+    RPT_4   ( 143,  0, 15 ), RPT_4   (-143,  0, 15 ),
1382
+    RPT_4   ( 144,  0, 15 ), RPT_4   (-144,  0, 15 ),
1383
+    RPT_4   ( 145,  0, 15 ), RPT_4   (-145,  0, 15 ),
1384
+    RPT_4   ( 146,  0, 15 ), RPT_4   (-146,  0, 15 ),
1385
+    RPT_4   ( 147,  0, 15 ), RPT_4   (-147,  0, 15 ),
1386
+    RPT_4   ( 148,  0, 15 ), RPT_4   (-148,  0, 15 ),
1387
+    RPT_4   ( 149,  0, 15 ), RPT_4   (-149,  0, 15 ),
1388
+    RPT_4   ( 150,  0, 15 ), RPT_4   (-150,  0, 15 ),
1389
+    RPT_4   ( 151,  0, 15 ), RPT_4   (-151,  0, 15 ),
1390
+    RPT_4   ( 152,  0, 15 ), RPT_4   (-152,  0, 15 ),
1391
+    RPT_4   ( 153,  0, 15 ), RPT_4   (-153,  0, 15 ),
1392
+    RPT_4   ( 154,  0, 15 ), RPT_4   (-154,  0, 15 ),
1393
+    RPT_4   ( 155,  0, 15 ), RPT_4   (-155,  0, 15 ),
1394
+    RPT_4   ( 156,  0, 15 ), RPT_4   (-156,  0, 15 ),
1395
+    RPT_4   ( 157,  0, 15 ), RPT_4   (-157,  0, 15 ),
1396
+    RPT_4   ( 158,  0, 15 ), RPT_4   (-158,  0, 15 ),
1397
+    RPT_4   ( 159,  0, 15 ), RPT_4   (-159,  0, 15 ),
1398
+    RPT_4   ( 160,  0, 15 ), RPT_4   (-160,  0, 15 ),
1399
+    RPT_4   ( 161,  0, 15 ), RPT_4   (-161,  0, 15 ),
1400
+    RPT_4   ( 162,  0, 15 ), RPT_4   (-162,  0, 15 ),
1401
+    RPT_4   ( 163,  0, 15 ), RPT_4   (-163,  0, 15 ),
1402
+    RPT_4   ( 164,  0, 15 ), RPT_4   (-164,  0, 15 ),
1403
+    RPT_4   ( 165,  0, 15 ), RPT_4   (-165,  0, 15 ),
1404
+    RPT_4   ( 166,  0, 15 ), RPT_4   (-166,  0, 15 ),
1405
+    RPT_4   ( 167,  0, 15 ), RPT_4   (-167,  0, 15 ),
1406
+    RPT_4   ( 168,  0, 15 ), RPT_4   (-168,  0, 15 ),
1407
+    RPT_4   ( 169,  0, 15 ), RPT_4   (-169,  0, 15 ),
1408
+    RPT_4   ( 170,  0, 15 ), RPT_4   (-170,  0, 15 ),
1409
+    RPT_4   ( 171,  0, 15 ), RPT_4   (-171,  0, 15 ),
1410
+    RPT_4   ( 172,  0, 15 ), RPT_4   (-172,  0, 15 ),
1411
+    RPT_4   ( 173,  0, 15 ), RPT_4   (-173,  0, 15 ),
1412
+    RPT_4   ( 174,  0, 15 ), RPT_4   (-174,  0, 15 ),
1413
+    RPT_4   ( 175,  0, 15 ), RPT_4   (-175,  0, 15 ),
1414
+    RPT_4   ( 176,  0, 15 ), RPT_4   (-176,  0, 15 ),
1415
+    RPT_4   ( 177,  0, 15 ), RPT_4   (-177,  0, 15 ),
1416
+    RPT_4   ( 178,  0, 15 ), RPT_4   (-178,  0, 15 ),
1417
+    RPT_4   ( 179,  0, 15 ), RPT_4   (-179,  0, 15 ),
1418
+    RPT_4   ( 180,  0, 15 ), RPT_4   (-180,  0, 15 ),
1419
+    RPT_4   ( 181,  0, 15 ), RPT_4   (-181,  0, 15 ),
1420
+    RPT_4   ( 182,  0, 15 ), RPT_4   (-182,  0, 15 ),
1421
+    RPT_4   ( 183,  0, 15 ), RPT_4   (-183,  0, 15 ),
1422
+    RPT_4   ( 184,  0, 15 ), RPT_4   (-184,  0, 15 ),
1423
+    RPT_4   ( 185,  0, 15 ), RPT_4   (-185,  0, 15 ),
1424
+    RPT_4   ( 186,  0, 15 ), RPT_4   (-186,  0, 15 ),
1425
+    RPT_4   ( 187,  0, 15 ), RPT_4   (-187,  0, 15 ),
1426
+    RPT_4   ( 188,  0, 15 ), RPT_4   (-188,  0, 15 ),
1427
+    RPT_4   ( 189,  0, 15 ), RPT_4   (-189,  0, 15 ),
1428
+    RPT_4   ( 190,  0, 15 ), RPT_4   (-190,  0, 15 ),
1429
+    RPT_4   ( 191,  0, 15 ), RPT_4   (-191,  0, 15 ),
1430
+    RPT_4   ( 192,  0, 15 ), RPT_4   (-192,  0, 15 ),
1431
+    RPT_4   ( 193,  0, 15 ), RPT_4   (-193,  0, 15 ),
1432
+    RPT_4   ( 194,  0, 15 ), RPT_4   (-194,  0, 15 ),
1433
+    RPT_4   ( 195,  0, 15 ), RPT_4   (-195,  0, 15 ),
1434
+    RPT_4   ( 196,  0, 15 ), RPT_4   (-196,  0, 15 ),
1435
+    RPT_4   ( 197,  0, 15 ), RPT_4   (-197,  0, 15 ),
1436
+    RPT_4   ( 198,  0, 15 ), RPT_4   (-198,  0, 15 ),
1437
+    RPT_4   ( 199,  0, 15 ), RPT_4   (-199,  0, 15 ),
1438
+    RPT_4   ( 200,  0, 15 ), RPT_4   (-200,  0, 15 ),
1439
+    RPT_4   ( 201,  0, 15 ), RPT_4   (-201,  0, 15 ),
1440
+    RPT_4   ( 202,  0, 15 ), RPT_4   (-202,  0, 15 ),
1441
+    RPT_4   ( 203,  0, 15 ), RPT_4   (-203,  0, 15 ),
1442
+    RPT_4   ( 204,  0, 15 ), RPT_4   (-204,  0, 15 ),
1443
+    RPT_4   ( 205,  0, 15 ), RPT_4   (-205,  0, 15 ),
1444
+    RPT_4   ( 206,  0, 15 ), RPT_4   (-206,  0, 15 ),
1445
+    RPT_4   ( 207,  0, 15 ), RPT_4   (-207,  0, 15 ),
1446
+    RPT_4   ( 208,  0, 15 ), RPT_4   (-208,  0, 15 ),
1447
+    RPT_4   ( 209,  0, 15 ), RPT_4   (-209,  0, 15 ),
1448
+    RPT_4   ( 210,  0, 15 ), RPT_4   (-210,  0, 15 ),
1449
+    RPT_4   ( 211,  0, 15 ), RPT_4   (-211,  0, 15 ),
1450
+    RPT_4   ( 212,  0, 15 ), RPT_4   (-212,  0, 15 ),
1451
+    RPT_4   ( 213,  0, 15 ), RPT_4   (-213,  0, 15 ),
1452
+    RPT_4   ( 214,  0, 15 ), RPT_4   (-214,  0, 15 ),
1453
+    RPT_4   ( 215,  0, 15 ), RPT_4   (-215,  0, 15 ),
1454
+    RPT_4   ( 216,  0, 15 ), RPT_4   (-216,  0, 15 ),
1455
+    RPT_4   ( 217,  0, 15 ), RPT_4   (-217,  0, 15 ),
1456
+    RPT_4   ( 218,  0, 15 ), RPT_4   (-218,  0, 15 ),
1457
+    RPT_4   ( 219,  0, 15 ), RPT_4   (-219,  0, 15 ),
1458
+    RPT_4   ( 220,  0, 15 ), RPT_4   (-220,  0, 15 ),
1459
+    RPT_4   ( 221,  0, 15 ), RPT_4   (-221,  0, 15 ),
1460
+    RPT_4   ( 222,  0, 15 ), RPT_4   (-222,  0, 15 ),
1461
+    RPT_4   ( 223,  0, 15 ), RPT_4   (-223,  0, 15 ),
1462
+    RPT_4   ( 224,  0, 15 ), RPT_4   (-224,  0, 15 ),
1463
+    RPT_4   ( 225,  0, 15 ), RPT_4   (-225,  0, 15 ),
1464
+    RPT_4   ( 226,  0, 15 ), RPT_4   (-226,  0, 15 ),
1465
+    RPT_4   ( 227,  0, 15 ), RPT_4   (-227,  0, 15 ),
1466
+    RPT_4   ( 228,  0, 15 ), RPT_4   (-228,  0, 15 ),
1467
+    RPT_4   ( 229,  0, 15 ), RPT_4   (-229,  0, 15 ),
1468
+    RPT_4   ( 230,  0, 15 ), RPT_4   (-230,  0, 15 ),
1469
+    RPT_4   ( 231,  0, 15 ), RPT_4   (-231,  0, 15 ),
1470
+    RPT_4   ( 232,  0, 15 ), RPT_4   (-232,  0, 15 ),
1471
+    RPT_4   ( 233,  0, 15 ), RPT_4   (-233,  0, 15 ),
1472
+    RPT_4   ( 234,  0, 15 ), RPT_4   (-234,  0, 15 ),
1473
+    RPT_4   ( 235,  0, 15 ), RPT_4   (-235,  0, 15 ),
1474
+    RPT_4   ( 236,  0, 15 ), RPT_4   (-236,  0, 15 ),
1475
+    RPT_4   ( 237,  0, 15 ), RPT_4   (-237,  0, 15 ),
1476
+    RPT_4   ( 238,  0, 15 ), RPT_4   (-238,  0, 15 ),
1477
+    RPT_4   ( 239,  0, 15 ), RPT_4   (-239,  0, 15 ),
1478
+    RPT_4   ( 240,  0, 15 ), RPT_4   (-240,  0, 15 ),
1479
+    RPT_4   ( 241,  0, 15 ), RPT_4   (-241,  0, 15 ),
1480
+    RPT_4   ( 242,  0, 15 ), RPT_4   (-242,  0, 15 ),
1481
+    RPT_4   ( 243,  0, 15 ), RPT_4   (-243,  0, 15 ),
1482
+    RPT_4   ( 244,  0, 15 ), RPT_4   (-244,  0, 15 ),
1483
+    RPT_4   ( 245,  0, 15 ), RPT_4   (-245,  0, 15 ),
1484
+    RPT_4   ( 246,  0, 15 ), RPT_4   (-246,  0, 15 ),
1485
+    RPT_4   ( 247,  0, 15 ), RPT_4   (-247,  0, 15 ),
1486
+    RPT_4   ( 248,  0, 15 ), RPT_4   (-248,  0, 15 ),
1487
+    RPT_4   ( 249,  0, 15 ), RPT_4   (-249,  0, 15 ),
1488
+    RPT_4   ( 250,  0, 15 ), RPT_4   (-250,  0, 15 ),
1489
+    RPT_4   ( 251,  0, 15 ), RPT_4   (-251,  0, 15 ),
1490
+    RPT_4   ( 252,  0, 15 ), RPT_4   (-252,  0, 15 ),
1491
+    RPT_4   ( 253,  0, 15 ), RPT_4   (-253,  0, 15 ),
1492
+    RPT_4   ( 254,  0, 15 ), RPT_4   (-254,  0, 15 ),
1493
+    RPT_4   ( 255,  0, 15 ), RPT_4   (-255,  0, 15 ),
1494
+    RPT_32  (  49,  0, 12 ), RPT_32  ( -49,  0, 12 ),
1495
+    RPT_32  (  50,  0, 12 ), RPT_32  ( -50,  0, 12 ),
1496
+    RPT_32  (  51,  0, 12 ), RPT_32  ( -51,  0, 12 ),
1497
+    RPT_32  (  52,  0, 12 ), RPT_32  ( -52,  0, 12 ),
1498
+    RPT_32  (  53,  0, 12 ), RPT_32  ( -53,  0, 12 ),
1499
+    RPT_32  (  54,  0, 12 ), RPT_32  ( -54,  0, 12 ),
1500
+    RPT_32  (  55,  0, 12 ), RPT_32  ( -55,  0, 12 ),
1501
+    RPT_32  (  56,  0, 12 ), RPT_32  ( -56,  0, 12 ),
1502
+    RPT_32  (  57,  0, 12 ), RPT_32  ( -57,  0, 12 ),
1503
+    RPT_32  (  58,  0, 12 ), RPT_32  ( -58,  0, 12 ),
1504
+    RPT_32  (  59,  0, 12 ), RPT_32  ( -59,  0, 12 ),
1505
+    RPT_32  (  60,  0, 12 ), RPT_32  ( -60,  0, 12 ),
1506
+    RPT_32  (  61,  0, 12 ), RPT_32  ( -61,  0, 12 ),
1507
+    RPT_32  (  62,  0, 12 ), RPT_32  ( -62,  0, 12 ),
1508
+    RPT_32  (  63,  0, 12 ), RPT_32  ( -63,  0, 12 ),
1509
+    RPT_32  (  17,  1, 12 ), RPT_32  ( -17,  1, 12 ),
1510
+    RPT_32  (  18,  1, 12 ), RPT_32  ( -18,  1, 12 ),
1511
+    RPT_32  (  19,  1, 12 ), RPT_32  ( -19,  1, 12 ),
1512
+    RPT_32  (  20,  1, 12 ), RPT_32  ( -20,  1, 12 ),
1513
+    RPT_32  (  21,  1, 12 ), RPT_32  ( -21,  1, 12 ),
1514
+    RPT_32  (  22,  1, 12 ), RPT_32  ( -22,  1, 12 ),
1515
+    RPT_32  (  23,  1, 12 ), RPT_32  ( -23,  1, 12 ),
1516
+    RPT_32  (  24,  1, 12 ), RPT_32  ( -24,  1, 12 ),
1517
+    RPT_32  (   9,  2, 12 ), RPT_32  (  -9,  2, 12 ),
1518
+    RPT_32  (  10,  2, 12 ), RPT_32  ( -10,  2, 12 ),
1519
+    RPT_32  (  11,  2, 12 ), RPT_32  ( -11,  2, 12 ),
1520
+    RPT_32  (  12,  2, 12 ), RPT_32  ( -12,  2, 12 ),
1521
+    RPT_32  (   7,  3, 12 ), RPT_32  (  -7,  3, 12 ),
1522
+    RPT_32  (   8,  3, 12 ), RPT_32  (  -8,  3, 12 ),
1523
+    RPT_32  (   5,  4, 12 ), RPT_32  (  -5,  4, 12 ),
1524
+    RPT_32  (   6,  4, 12 ), RPT_32  (  -6,  4, 12 ),
1525
+    RPT_32  (   3,  5, 12 ), RPT_32  (  -3,  5, 12 ),
1526
+    RPT_32  (   4,  5, 12 ), RPT_32  (  -4,  5, 12 ),
1527
+    RPT_32  (   5,  5, 12 ), RPT_32  (  -5,  5, 12 ),
1528
+    RPT_32  (   6,  5, 12 ), RPT_32  (  -6,  5, 12 ),
1529
+    RPT_32  (   3,  6, 12 ), RPT_32  (  -3,  6, 12 ),
1530
+    RPT_32  (   4,  6, 12 ), RPT_32  (  -4,  6, 12 ),
1531
+    RPT_32  (   2,  7, 12 ), RPT_32  (  -2,  7, 12 ),
1532
+    RPT_32  (   2,  8, 12 ), RPT_32  (  -2,  8, 12 ),
1533
+    RPT_32  (   2,  9, 12 ), RPT_32  (  -2,  9, 12 ),
1534
+    RPT_32  (   2, 10, 12 ), RPT_32  (  -2, 10, 12 ),
1535
+    RPT_32  (   1, 13, 12 ), RPT_32  (  -1, 13, 12 ),
1536
+    RPT_32  (   1, 14, 12 ), RPT_32  (  -1, 14, 12 ),
1537
+    {    0,  0, 17 }, {    0,  1, 17 }, {    0,  2, 17 }, {    0,  3, 17 },
1538
+    {    0,  4, 17 }, {    0,  5, 17 }, {    0,  6, 17 }, {    0,  7, 17 },
1539
+    {    0,  8, 17 }, {    0,  9, 17 }, {    0, 10, 17 }, {    0, 11, 17 },
1540
+    {    0, 12, 17 }, {    0, 13, 17 }, {    0, 14, 17 }, {    0, 15, 17 },
1541
+    {    0, 16, 17 }, {    0, 17, 17 }, {    0, 18, 17 }, {    0, 19, 17 },
1542
+    {    0, 20, 17 }, {    0, 21, 17 }, {    0, 22, 17 }, {    0, 23, 17 },
1543
+    {    0, 24, 17 }, {    0, 25, 17 }, {    0, 26, 17 }, {    0, 27, 17 },
1544
+    {    0, 28, 17 }, {    0, 29, 17 }, {    0, 30, 17 }, {    0, 31, 17 },
1545
+    {    0, 32, 17 }, {    0, 33, 17 }, {    0, 34, 17 }, {    0, 35, 17 },
1546
+    {    0, 36, 17 }, {    0, 37, 17 }, {    0, 38, 17 }, {    0, 39, 17 },
1547
+    {    0, 40, 17 }, {    0, 41, 17 }, {    0, 42, 17 }, {    0, 43, 17 },
1548
+    {    0, 44, 17 }, {    0, 45, 17 }, {    0, 46, 17 }, {    0, 47, 17 },
1549
+    {    0, 48, 17 }, {    0, 49, 17 }, {    0, 50, 17 }, {    0, 51, 17 },
1550
+    {    0, 52, 17 }, {    0, 53, 17 }, {    0, 54, 17 }, {    0, 55, 17 },
1551
+    {    0, 56, 17 }, {    0, 57, 17 }, {    0, 58, 17 }, {    0, 59, 17 },
1552
+    {    0, 60, 17 }, {    0, 61, 17 }, {    0, 62, 17 }, {    0, 63, 17 },
1553
+    RPT_16  (  25,  1, 13 ), RPT_16  ( -25,  1, 13 ),
1554
+    RPT_16  (  26,  1, 13 ), RPT_16  ( -26,  1, 13 ),
1555
+    RPT_16  (  27,  1, 13 ), RPT_16  ( -27,  1, 13 ),
1556
+    RPT_16  (  28,  1, 13 ), RPT_16  ( -28,  1, 13 ),
1557
+    RPT_16  (  29,  1, 13 ), RPT_16  ( -29,  1, 13 ),
1558
+    RPT_16  (  30,  1, 13 ), RPT_16  ( -30,  1, 13 ),
1559
+    RPT_16  (  31,  1, 13 ), RPT_16  ( -31,  1, 13 ),
1560
+    RPT_16  (  32,  1, 13 ), RPT_16  ( -32,  1, 13 ),
1561
+    RPT_16  (  13,  2, 13 ), RPT_16  ( -13,  2, 13 ),
1562
+    RPT_16  (  14,  2, 13 ), RPT_16  ( -14,  2, 13 ),
1563
+    RPT_16  (  15,  2, 13 ), RPT_16  ( -15,  2, 13 ),
1564
+    RPT_16  (  16,  2, 13 ), RPT_16  ( -16,  2, 13 ),
1565
+    RPT_16  (   9,  3, 13 ), RPT_16  (  -9,  3, 13 ),
1566
+    RPT_16  (  10,  3, 13 ), RPT_16  ( -10,  3, 13 ),
1567
+    RPT_16  (  11,  3, 13 ), RPT_16  ( -11,  3, 13 ),
1568
+    RPT_16  (   7,  4, 13 ), RPT_16  (  -7,  4, 13 ),
1569
+    RPT_16  (   3,  7, 13 ), RPT_16  (  -3,  7, 13 ),
1570
+    RPT_16  (   4,  7, 13 ), RPT_16  (  -4,  7, 13 ),
1571
+    RPT_16  (   3,  8, 13 ), RPT_16  (  -3,  8, 13 ),
1572
+    RPT_16  (   4,  8, 13 ), RPT_16  (  -4,  8, 13 ),
1573
+    RPT_16  (   3,  9, 13 ), RPT_16  (  -3,  9, 13 ),
1574
+    RPT_16  (   2, 11, 13 ), RPT_16  (  -2, 11, 13 ),
1575
+    RPT_16  (   2, 12, 13 ), RPT_16  (  -2, 12, 13 ),
1576
+    RPT_32  (   0, 14, 12 ),
1577
+};
1578
+
1579
+static const HQXLUT ac16_lut[] = {
1580
+    RPT_256 (   1,  0,  3 ), RPT_256 (  -1,  0,  3 ),
1581
+    RPT_128 (   2,  0,  4 ), RPT_128 (  -2,  0,  4 ),
1582
+    RPT_64  (   3,  0,  5 ), RPT_64  (  -3,  0,  5 ),
1583
+    RPT_64  (   4,  0,  5 ), RPT_64  (  -4,  0,  5 ),
1584
+    RPT_64  (   1,  1,  5 ), RPT_64  (  -1,  1,  5 ),
1585
+    RPT_128 (   0, 64,  4 ), RPT_32  (   5,  0,  6 ),
1586
+    RPT_32  (  -5,  0,  6 ), RPT_32  (   6,  0,  6 ),
1587
+    RPT_32  (  -6,  0,  6 ), RPT_32  (   2,  1,  6 ),
1588
+    RPT_32  (  -2,  1,  6 ), RPT_32  (   1,  2,  6 ),
1589
+    RPT_32  (  -1,  2,  6 ), RPT_16  (   7,  0,  7 ),
1590
+    RPT_16  (  -7,  0,  7 ), RPT_16  (   8,  0,  7 ),
1591
+    RPT_16  (  -8,  0,  7 ), RPT_16  (   9,  0,  7 ),
1592
+    RPT_16  (  -9,  0,  7 ), RPT_16  (   3,  1,  7 ),
1593
+    RPT_16  (  -3,  1,  7 ), RPT_16  (   1,  3,  7 ),
1594
+    RPT_16  (  -1,  3,  7 ), RPT_16  (   1,  4,  7 ),
1595
+    RPT_16  (  -1,  4,  7 ), RPT_8   (  10,  0,  8 ),
1596
+    RPT_8   ( -10,  0,  8 ), RPT_8   (  11,  0,  8 ),
1597
+    RPT_8   ( -11,  0,  8 ), RPT_8   (  12,  0,  8 ),
1598
+    RPT_8   ( -12,  0,  8 ), RPT_8   (   4,  1,  8 ),
1599
+    RPT_8   (  -4,  1,  8 ), RPT_8   (   2,  2,  8 ),
1600
+    RPT_8   (  -2,  2,  8 ), RPT_8   (   1,  5,  8 ),
1601
+    RPT_8   (  -1,  5,  8 ), RPT_8   (   1,  6,  8 ),
1602
+    RPT_8   (  -1,  6,  8 ), RPT_4   (  13,  0,  9 ),
1603
+    RPT_4   ( -13,  0,  9 ), RPT_4   (  14,  0,  9 ),
1604
+    RPT_4   ( -14,  0,  9 ), RPT_4   (  15,  0,  9 ),
1605
+    RPT_4   ( -15,  0,  9 ), RPT_4   (  16,  0,  9 ),
1606
+    RPT_4   ( -16,  0,  9 ), RPT_4   (  17,  0,  9 ),
1607
+    RPT_4   ( -17,  0,  9 ), RPT_4   (   5,  1,  9 ),
1608
+    RPT_4   (  -5,  1,  9 ), RPT_4   (   2,  3,  9 ),
1609
+    RPT_4   (  -2,  3,  9 ), RPT_4   (   1,  7,  9 ),
1610
+    RPT_4   (  -1,  7,  9 ), RPT_4   (   1,  8,  9 ),
1611
+    RPT_4   (  -1,  8,  9 ), RPT_4   (   1,  9,  9 ),
1612
+    RPT_4   (  -1,  9,  9 ), RPT_4   (   1, 10,  9 ),
1613
+    RPT_4   (  -1, 10,  9 ), RPT_4   (   0,  0,  9 ),
1614
+    RPT_2   (  18,  0, 10 ), RPT_2   ( -18,  0, 10 ),
1615
+    RPT_2   (  19,  0, 10 ), RPT_2   ( -19,  0, 10 ),
1616
+    RPT_2   (  20,  0, 10 ), RPT_2   ( -20,  0, 10 ),
1617
+    RPT_2   (  21,  0, 10 ), RPT_2   ( -21,  0, 10 ),
1618
+    RPT_2   (  22,  0, 10 ), RPT_2   ( -22,  0, 10 ),
1619
+    RPT_2   (   6,  1, 10 ), RPT_2   (  -6,  1, 10 ),
1620
+    RPT_2   (   7,  1, 10 ), RPT_2   (  -7,  1, 10 ),
1621
+    RPT_2   (   3,  2, 10 ), RPT_2   (  -3,  2, 10 ),
1622
+    RPT_2   (   2,  4, 10 ), RPT_2   (  -2,  4, 10 ),
1623
+    RPT_2   (   2,  5, 10 ), RPT_2   (  -2,  5, 10 ),
1624
+    RPT_2   (   1, 11, 10 ), RPT_2   (  -1, 11, 10 ),
1625
+    RPT_2   (   1, 12, 10 ), RPT_2   (  -1, 12, 10 ),
1626
+    RPT_2   (   1, 13, 10 ), RPT_2   (  -1, 13, 10 ),
1627
+    { 2048,  0, -1 }, { 2112,  0, -1 }, { 2176,  0, -1 }, { 2240,  0, -1 },
1628
+    { 2304,  0, -1 }, { 2368,  0, -1 }, { 2432,  0, -1 }, { 2496,  0, -1 },
1629
+    {   23,  0, 11 }, {  -23,  0, 11 }, {   24,  0, 11 }, {  -24,  0, 11 },
1630
+    {   25,  0, 11 }, {  -25,  0, 11 }, {   26,  0, 11 }, {  -26,  0, 11 },
1631
+    {   27,  0, 11 }, {  -27,  0, 11 }, {   28,  0, 11 }, {  -28,  0, 11 },
1632
+    {    8,  1, 11 }, {   -8,  1, 11 }, {    9,  1, 11 }, {   -9,  1, 11 },
1633
+    {    4,  2, 11 }, {   -4,  2, 11 }, {    3,  3, 11 }, {   -3,  3, 11 },
1634
+    {    3,  4, 11 }, {   -3,  4, 11 }, {    2,  6, 11 }, {   -2,  6, 11 },
1635
+    {    2,  7, 11 }, {   -2,  7, 11 }, { 2560,  0, -1 }, { 2624,  0, -1 },
1636
+    { 2688,  0, -1 }, { 2752,  0, -1 }, { 2816,  0, -1 }, { 2880,  0, -1 },
1637
+    { 2944,  0, -1 }, {    0,  1, 11 }, { 3008,  0, -1 }, { 3072,  0, -1 },
1638
+    { 3136,  0, -1 }, {    0,  2, 11 }, { 3200,  0, -1 }, {    0,  3, 11 },
1639
+    { 3264,  0, -1 }, { 3328,  0, -1 }, { 3392,  0, -1 }, { 3456,  0, -1 },
1640
+    { 3520,  0, -1 }, { 3584,  0, -1 }, { 3648,  0, -1 }, { 3712,  0, -1 },
1641
+    { 3776,  0, -1 }, { 3840,  0, -1 }, { 3904,  0, -1 }, { 3968,  0, -1 },
1642
+    { 4032,  0, -1 }, { 4096,  0, -1 }, { 4160,  0, -1 }, { 4224,  0, -1 },
1643
+    RPT_4   (   0,  0, 15 ), RPT_4   (   0,  1, 15 ),
1644
+    RPT_4   (   0,  2, 15 ), RPT_4   (   0,  3, 15 ),
1645
+    RPT_4   (   0,  4, 15 ), RPT_4   (   0,  5, 15 ),
1646
+    RPT_4   (   0,  6, 15 ), RPT_4   (   0,  7, 15 ),
1647
+    RPT_4   (   0,  8, 15 ), RPT_4   (   0,  9, 15 ),
1648
+    RPT_4   (   0, 10, 15 ), RPT_4   (   0, 11, 15 ),
1649
+    RPT_4   (   0, 12, 15 ), RPT_4   (   0, 13, 15 ),
1650
+    RPT_4   (   0, 14, 15 ), RPT_4   (   0, 15, 15 ),
1651
+    RPT_4   (   0, 16, 15 ), RPT_4   (   0, 17, 15 ),
1652
+    RPT_4   (   0, 18, 15 ), RPT_4   (   0, 19, 15 ),
1653
+    RPT_4   (   0, 20, 15 ), RPT_4   (   0, 21, 15 ),
1654
+    RPT_4   (   0, 22, 15 ), RPT_4   (   0, 23, 15 ),
1655
+    RPT_4   (   0, 24, 15 ), RPT_4   (   0, 25, 15 ),
1656
+    RPT_4   (   0, 26, 15 ), RPT_4   (   0, 27, 15 ),
1657
+    RPT_4   (   0, 28, 15 ), RPT_4   (   0, 29, 15 ),
1658
+    RPT_4   (   0, 30, 15 ), RPT_4   (   0, 31, 15 ),
1659
+    RPT_4   (   0, 32, 15 ), RPT_4   (   0, 33, 15 ),
1660
+    RPT_4   (   0, 34, 15 ), RPT_4   (   0, 35, 15 ),
1661
+    RPT_4   (   0, 36, 15 ), RPT_4   (   0, 37, 15 ),
1662
+    RPT_4   (   0, 38, 15 ), RPT_4   (   0, 39, 15 ),
1663
+    RPT_4   (   0, 40, 15 ), RPT_4   (   0, 41, 15 ),
1664
+    RPT_4   (   0, 42, 15 ), RPT_4   (   0, 43, 15 ),
1665
+    RPT_4   (   0, 44, 15 ), RPT_4   (   0, 45, 15 ),
1666
+    RPT_4   (   0, 46, 15 ), RPT_4   (   0, 47, 15 ),
1667
+    RPT_4   (   0, 48, 15 ), RPT_4   (   0, 49, 15 ),
1668
+    RPT_4   (   0, 50, 15 ), RPT_4   (   0, 51, 15 ),
1669
+    RPT_4   (   0, 52, 15 ), RPT_4   (   0, 53, 15 ),
1670
+    RPT_4   (   0, 54, 15 ), RPT_4   (   0, 55, 15 ),
1671
+    RPT_4   (   0, 56, 15 ), RPT_4   (   0, 57, 15 ),
1672
+    RPT_4   (   0, 58, 15 ), RPT_4   (   0, 59, 15 ),
1673
+    RPT_4   (   0, 60, 15 ), RPT_4   (   0, 61, 15 ),
1674
+    RPT_4   (   0, 62, 15 ), RPT_4   (   0, 63, 15 ),
1675
+    RPT_2   (   0,  0, 16 ), {    1,  0, 17 }, {   -1,  0, 17 },
1676
+    {    2,  0, 17 }, {   -2,  0, 17 }, {    3,  0, 17 }, {   -3,  0, 17 },
1677
+    {    4,  0, 17 }, {   -4,  0, 17 }, {    5,  0, 17 }, {   -5,  0, 17 },
1678
+    {    6,  0, 17 }, {   -6,  0, 17 }, {    7,  0, 17 }, {   -7,  0, 17 },
1679
+    {    8,  0, 17 }, {   -8,  0, 17 }, {    9,  0, 17 }, {   -9,  0, 17 },
1680
+    {   10,  0, 17 }, {  -10,  0, 17 }, {   11,  0, 17 }, {  -11,  0, 17 },
1681
+    {   12,  0, 17 }, {  -12,  0, 17 }, {   13,  0, 17 }, {  -13,  0, 17 },
1682
+    {   14,  0, 17 }, {  -14,  0, 17 }, {   15,  0, 17 }, {  -15,  0, 17 },
1683
+    {   16,  0, 17 }, {  -16,  0, 17 }, {   17,  0, 17 }, {  -17,  0, 17 },
1684
+    {   18,  0, 17 }, {  -18,  0, 17 }, {   19,  0, 17 }, {  -19,  0, 17 },
1685
+    {   20,  0, 17 }, {  -20,  0, 17 }, {   21,  0, 17 }, {  -21,  0, 17 },
1686
+    {   22,  0, 17 }, {  -22,  0, 17 }, {   23,  0, 17 }, {  -23,  0, 17 },
1687
+    {   24,  0, 17 }, {  -24,  0, 17 }, {   25,  0, 17 }, {  -25,  0, 17 },
1688
+    {   26,  0, 17 }, {  -26,  0, 17 }, {   27,  0, 17 }, {  -27,  0, 17 },
1689
+    {   28,  0, 17 }, {  -28,  0, 17 }, {   29,  0, 17 }, {  -29,  0, 17 },
1690
+    {   30,  0, 17 }, {  -30,  0, 17 }, {   31,  0, 17 }, {  -31,  0, 17 },
1691
+    {   32,  0, 17 }, {  -32,  0, 17 }, {   33,  0, 17 }, {  -33,  0, 17 },
1692
+    {   34,  0, 17 }, {  -34,  0, 17 }, {   35,  0, 17 }, {  -35,  0, 17 },
1693
+    {   36,  0, 17 }, {  -36,  0, 17 }, {   37,  0, 17 }, {  -37,  0, 17 },
1694
+    {   38,  0, 17 }, {  -38,  0, 17 }, {   39,  0, 17 }, {  -39,  0, 17 },
1695
+    {   40,  0, 17 }, {  -40,  0, 17 }, {   41,  0, 17 }, {  -41,  0, 17 },
1696
+    {   42,  0, 17 }, {  -42,  0, 17 }, {   43,  0, 17 }, {  -43,  0, 17 },
1697
+    {   44,  0, 17 }, {  -44,  0, 17 }, {   45,  0, 17 }, {  -45,  0, 17 },
1698
+    {   46,  0, 17 }, {  -46,  0, 17 }, {   47,  0, 17 }, {  -47,  0, 17 },
1699
+    {   48,  0, 17 }, {  -48,  0, 17 }, {   49,  0, 17 }, {  -49,  0, 17 },
1700
+    {   50,  0, 17 }, {  -50,  0, 17 }, {   51,  0, 17 }, {  -51,  0, 17 },
1701
+    {   52,  0, 17 }, {  -52,  0, 17 }, {   53,  0, 17 }, {  -53,  0, 17 },
1702
+    {   54,  0, 17 }, {  -54,  0, 17 }, {   55,  0, 17 }, {  -55,  0, 17 },
1703
+    {   56,  0, 17 }, {  -56,  0, 17 }, {   57,  0, 17 }, {  -57,  0, 17 },
1704
+    {   58,  0, 17 }, {  -58,  0, 17 }, {   59,  0, 17 }, {  -59,  0, 17 },
1705
+    {   60,  0, 17 }, {  -60,  0, 17 }, {   61,  0, 17 }, {  -61,  0, 17 },
1706
+    {   62,  0, 17 }, {  -62,  0, 17 }, {   63,  0, 17 }, {  -63,  0, 17 },
1707
+    {   64,  0, 17 }, {  -64,  0, 17 }, {   65,  0, 17 }, {  -65,  0, 17 },
1708
+    {   66,  0, 17 }, {  -66,  0, 17 }, {   67,  0, 17 }, {  -67,  0, 17 },
1709
+    {   68,  0, 17 }, {  -68,  0, 17 }, {   69,  0, 17 }, {  -69,  0, 17 },
1710
+    {   70,  0, 17 }, {  -70,  0, 17 }, {   71,  0, 17 }, {  -71,  0, 17 },
1711
+    {   72,  0, 17 }, {  -72,  0, 17 }, {   73,  0, 17 }, {  -73,  0, 17 },
1712
+    {   74,  0, 17 }, {  -74,  0, 17 }, {   75,  0, 17 }, {  -75,  0, 17 },
1713
+    {   76,  0, 17 }, {  -76,  0, 17 }, {   77,  0, 17 }, {  -77,  0, 17 },
1714
+    {   78,  0, 17 }, {  -78,  0, 17 }, {   79,  0, 17 }, {  -79,  0, 17 },
1715
+    {   80,  0, 17 }, {  -80,  0, 17 }, {   81,  0, 17 }, {  -81,  0, 17 },
1716
+    {   82,  0, 17 }, {  -82,  0, 17 }, {   83,  0, 17 }, {  -83,  0, 17 },
1717
+    {   84,  0, 17 }, {  -84,  0, 17 }, {   85,  0, 17 }, {  -85,  0, 17 },
1718
+    {   86,  0, 17 }, {  -86,  0, 17 }, {   87,  0, 17 }, {  -87,  0, 17 },
1719
+    {   88,  0, 17 }, {  -88,  0, 17 }, {   89,  0, 17 }, {  -89,  0, 17 },
1720
+    {   90,  0, 17 }, {  -90,  0, 17 }, {   91,  0, 17 }, {  -91,  0, 17 },
1721
+    {   92,  0, 17 }, {  -92,  0, 17 }, {   93,  0, 17 }, {  -93,  0, 17 },
1722
+    {   94,  0, 17 }, {  -94,  0, 17 }, {   95,  0, 17 }, {  -95,  0, 17 },
1723
+    {   96,  0, 17 }, {  -96,  0, 17 }, {   97,  0, 17 }, {  -97,  0, 17 },
1724
+    {   98,  0, 17 }, {  -98,  0, 17 }, {   99,  0, 17 }, {  -99,  0, 17 },
1725
+    {  100,  0, 17 }, { -100,  0, 17 }, {  101,  0, 17 }, { -101,  0, 17 },
1726
+    {  102,  0, 17 }, { -102,  0, 17 }, {  103,  0, 17 }, { -103,  0, 17 },
1727
+    {  104,  0, 17 }, { -104,  0, 17 }, {  105,  0, 17 }, { -105,  0, 17 },
1728
+    {  106,  0, 17 }, { -106,  0, 17 }, {  107,  0, 17 }, { -107,  0, 17 },
1729
+    {  108,  0, 17 }, { -108,  0, 17 }, {  109,  0, 17 }, { -109,  0, 17 },
1730
+    {  110,  0, 17 }, { -110,  0, 17 }, {  111,  0, 17 }, { -111,  0, 17 },
1731
+    {  112,  0, 17 }, { -112,  0, 17 }, {  113,  0, 17 }, { -113,  0, 17 },
1732
+    {  114,  0, 17 }, { -114,  0, 17 }, {  115,  0, 17 }, { -115,  0, 17 },
1733
+    {  116,  0, 17 }, { -116,  0, 17 }, {  117,  0, 17 }, { -117,  0, 17 },
1734
+    {  118,  0, 17 }, { -118,  0, 17 }, {  119,  0, 17 }, { -119,  0, 17 },
1735
+    {  120,  0, 17 }, { -120,  0, 17 }, {  121,  0, 17 }, { -121,  0, 17 },
1736
+    {  122,  0, 17 }, { -122,  0, 17 }, {  123,  0, 17 }, { -123,  0, 17 },
1737
+    {  124,  0, 17 }, { -124,  0, 17 }, {  125,  0, 17 }, { -125,  0, 17 },
1738
+    {  126,  0, 17 }, { -126,  0, 17 }, {  127,  0, 17 }, { -127,  0, 17 },
1739
+    RPT_32  (  29,  0, 12 ), RPT_32  ( -29,  0, 12 ),
1740
+    RPT_32  (  30,  0, 12 ), RPT_32  ( -30,  0, 12 ),
1741
+    RPT_32  (  31,  0, 12 ), RPT_32  ( -31,  0, 12 ),
1742
+    RPT_32  (  32,  0, 12 ), RPT_32  ( -32,  0, 12 ),
1743
+    RPT_32  (  33,  0, 12 ), RPT_32  ( -33,  0, 12 ),
1744
+    RPT_32  (  34,  0, 12 ), RPT_32  ( -34,  0, 12 ),
1745
+    RPT_32  (  35,  0, 12 ), RPT_32  ( -35,  0, 12 ),
1746
+    RPT_32  (  10,  1, 12 ), RPT_32  ( -10,  1, 12 ),
1747
+    RPT_32  (  11,  1, 12 ), RPT_32  ( -11,  1, 12 ),
1748
+    RPT_32  (  12,  1, 12 ), RPT_32  ( -12,  1, 12 ),
1749
+    RPT_32  (   5,  2, 12 ), RPT_32  (  -5,  2, 12 ),
1750
+    RPT_32  (   4,  3, 12 ), RPT_32  (  -4,  3, 12 ),
1751
+    RPT_32  (   3,  5, 12 ), RPT_32  (  -3,  5, 12 ),
1752
+    RPT_32  (   2,  8, 12 ), RPT_32  (  -2,  8, 12 ),
1753
+    RPT_32  (   2,  9, 12 ), RPT_32  (  -2,  9, 12 ),
1754
+    RPT_32  (   1, 14, 12 ), RPT_32  (  -1, 14, 12 ),
1755
+    RPT_32  (   1, 15, 12 ), RPT_32  (  -1, 15, 12 ),
1756
+    RPT_16  (  36,  0, 13 ), RPT_16  ( -36,  0, 13 ),
1757
+    RPT_16  (  37,  0, 13 ), RPT_16  ( -37,  0, 13 ),
1758
+    RPT_16  (  38,  0, 13 ), RPT_16  ( -38,  0, 13 ),
1759
+    RPT_16  (  39,  0, 13 ), RPT_16  ( -39,  0, 13 ),
1760
+    RPT_16  (  40,  0, 13 ), RPT_16  ( -40,  0, 13 ),
1761
+    RPT_16  (  13,  1, 13 ), RPT_16  ( -13,  1, 13 ),
1762
+    RPT_16  (  14,  1, 13 ), RPT_16  ( -14,  1, 13 ),
1763
+    RPT_16  (  15,  1, 13 ), RPT_16  ( -15,  1, 13 ),
1764
+    RPT_16  (   6,  2, 13 ), RPT_16  (  -6,  2, 13 ),
1765
+    RPT_16  (   7,  2, 13 ), RPT_16  (  -7,  2, 13 ),
1766
+    RPT_16  (   5,  3, 13 ), RPT_16  (  -5,  3, 13 ),
1767
+    RPT_32  (   0,  4, 12 ), RPT_16  (   4,  4, 13 ),
1768
+    RPT_16  (  -4,  4, 13 ), RPT_32  (   0,  5, 12 ),
1769
+    RPT_32  (   0,  6, 12 ), RPT_16  (   3,  6, 13 ),
1770
+    RPT_16  (  -3,  6, 13 ), RPT_32  (   0,  7, 12 ),
1771
+    RPT_16  (   3,  7, 13 ), RPT_16  (  -3,  7, 13 ),
1772
+    RPT_16  (   2, 10, 13 ), RPT_16  (  -2, 10, 13 ),
1773
+    RPT_16  (   1, 16, 13 ), RPT_16  (  -1, 16, 13 ),
1774
+};
1775
+
1776
+static const HQXLUT ac32_lut[] = {
1777
+    RPT_256 (   1,  0,  3 ), RPT_256 (  -1,  0,  3 ),
1778
+    RPT_128 (   2,  0,  4 ), RPT_128 (  -2,  0,  4 ),
1779
+    RPT_256 (   0, 64,  3 ), RPT_64  (   3,  0,  5 ),
1780
+    RPT_64  (  -3,  0,  5 ), RPT_64  (   1,  1,  5 ),
1781
+    RPT_64  (  -1,  1,  5 ), RPT_32  (   4,  0,  6 ),
1782
+    RPT_32  (  -4,  0,  6 ), RPT_32  (   5,  0,  6 ),
1783
+    RPT_32  (  -5,  0,  6 ), RPT_32  (   2,  1,  6 ),
1784
+    RPT_32  (  -2,  1,  6 ), RPT_32  (   1,  2,  6 ),
1785
+    RPT_32  (  -1,  2,  6 ), RPT_32  (   1,  3,  6 ),
1786
+    RPT_32  (  -1,  3,  6 ), RPT_16  (   6,  0,  7 ),
1787
+    RPT_16  (  -6,  0,  7 ), RPT_16  (   7,  0,  7 ),
1788
+    RPT_16  (  -7,  0,  7 ), RPT_16  (   3,  1,  7 ),
1789
+    RPT_16  (  -3,  1,  7 ), RPT_16  (   1,  4,  7 ),
1790
+    RPT_16  (  -1,  4,  7 ), RPT_16  (   1,  5,  7 ),
1791
+    RPT_16  (  -1,  5,  7 ), RPT_8   (   8,  0,  8 ),
1792
+    RPT_8   (  -8,  0,  8 ), RPT_8   (   9,  0,  8 ),
1793
+    RPT_8   (  -9,  0,  8 ), RPT_8   (  10,  0,  8 ),
1794
+    RPT_8   ( -10,  0,  8 ), RPT_8   (   4,  1,  8 ),
1795
+    RPT_8   (  -4,  1,  8 ), RPT_8   (   2,  2,  8 ),
1796
+    RPT_8   (  -2,  2,  8 ), RPT_8   (   1,  6,  8 ),
1797
+    RPT_8   (  -1,  6,  8 ), RPT_8   (   1,  7,  8 ),
1798
+    RPT_8   (  -1,  7,  8 ), RPT_8   (   1,  8,  8 ),
1799
+    RPT_8   (  -1,  8,  8 ), RPT_4   (  11,  0,  9 ),
1800
+    RPT_4   ( -11,  0,  9 ), RPT_4   (  12,  0,  9 ),
1801
+    RPT_4   ( -12,  0,  9 ), RPT_4   (  13,  0,  9 ),
1802
+    RPT_4   ( -13,  0,  9 ), RPT_4   (   5,  1,  9 ),
1803
+    RPT_4   (  -5,  1,  9 ), RPT_4   (   2,  3,  9 ),
1804
+    RPT_4   (  -2,  3,  9 ), RPT_4   (   1,  9,  9 ),
1805
+    RPT_4   (  -1,  9,  9 ), RPT_4   (   1, 10,  9 ),
1806
+    RPT_4   (  -1, 10,  9 ), RPT_2   (  14,  0, 10 ),
1807
+    RPT_2   ( -14,  0, 10 ), RPT_2   (  15,  0, 10 ),
1808
+    RPT_2   ( -15,  0, 10 ), RPT_2   (  16,  0, 10 ),
1809
+    RPT_2   ( -16,  0, 10 ), RPT_2   (   6,  1, 10 ),
1810
+    RPT_2   (  -6,  1, 10 ), RPT_2   (   7,  1, 10 ),
1811
+    RPT_2   (  -7,  1, 10 ), RPT_2   (   3,  2, 10 ),
1812
+    RPT_2   (  -3,  2, 10 ), RPT_2   (   3,  3, 10 ),
1813
+    RPT_2   (  -3,  3, 10 ), RPT_2   (   2,  4, 10 ),
1814
+    RPT_2   (  -2,  4, 10 ), RPT_2   (   2,  5, 10 ),
1815
+    RPT_2   (  -2,  5, 10 ), RPT_2   (   1, 11, 10 ),
1816
+    RPT_2   (  -1, 11, 10 ), RPT_2   (   1, 12, 10 ),
1817
+    RPT_2   (  -1, 12, 10 ), RPT_2   (   1, 13, 10 ),
1818
+    RPT_2   (  -1, 13, 10 ), { 2048,  0, -1 }, { 2112,  0, -1 },
1819
+    { 2176,  0, -1 }, { 2240,  0, -1 }, RPT_2   (   0,  0, 10 ),
1820
+    {   17,  0, 11 }, {  -17,  0, 11 }, {   18,  0, 11 }, {  -18,  0, 11 },
1821
+    {   19,  0, 11 }, {  -19,  0, 11 }, {   20,  0, 11 }, {  -20,  0, 11 },
1822
+    {    8,  1, 11 }, {   -8,  1, 11 }, {    9,  1, 11 }, {   -9,  1, 11 },
1823
+    {    4,  2, 11 }, {   -4,  2, 11 }, {    3,  4, 11 }, {   -3,  4, 11 },
1824
+    {    2,  6, 11 }, {   -2,  6, 11 }, {    2,  7, 11 }, {   -2,  7, 11 },
1825
+    {    2,  8, 11 }, {   -2,  8, 11 }, {    1, 14, 11 }, {   -1, 14, 11 },
1826
+    { 2304,  0, -1 }, { 2368,  0, -1 }, { 2432,  0, -1 }, { 2496,  0, -1 },
1827
+    { 2560,  0, -1 }, {    0,  1, 11 }, { 2624,  0, -1 }, { 2688,  0, -1 },
1828
+    {    0,  2, 11 }, { 2752,  0, -1 }, { 2816,  0, -1 }, {    0,  3, 11 },
1829
+    { 2880,  0, -1 }, {    0,  4, 11 }, { 2944,  0, -1 }, { 3008,  0, -1 },
1830
+    { 3072,  0, -1 }, { 3136,  0, -1 }, { 3200,  0, -1 }, { 3264,  0, -1 },
1831
+    { 3328,  0, -1 }, { 3392,  0, -1 }, { 3456,  0, -1 }, { 3520,  0, -1 },
1832
+    { 3584,  0, -1 }, { 3648,  0, -1 }, RPT_4   (   0,  0, 15 ),
1833
+    RPT_4   (   0,  1, 15 ), RPT_4   (   0,  2, 15 ),
1834
+    RPT_4   (   0,  3, 15 ), RPT_4   (   0,  4, 15 ),
1835
+    RPT_4   (   0,  5, 15 ), RPT_4   (   0,  6, 15 ),
1836
+    RPT_4   (   0,  7, 15 ), RPT_4   (   0,  8, 15 ),
1837
+    RPT_4   (   0,  9, 15 ), RPT_4   (   0, 10, 15 ),
1838
+    RPT_4   (   0, 11, 15 ), RPT_4   (   0, 12, 15 ),
1839
+    RPT_4   (   0, 13, 15 ), RPT_4   (   0, 14, 15 ),
1840
+    RPT_4   (   0, 15, 15 ), RPT_4   (   0, 16, 15 ),
1841
+    RPT_4   (   0, 17, 15 ), RPT_4   (   0, 18, 15 ),
1842
+    RPT_4   (   0, 19, 15 ), RPT_4   (   0, 20, 15 ),
1843
+    RPT_4   (   0, 21, 15 ), RPT_4   (   0, 22, 15 ),
1844
+    RPT_4   (   0, 23, 15 ), RPT_4   (   0, 24, 15 ),
1845
+    RPT_4   (   0, 25, 15 ), RPT_4   (   0, 26, 15 ),
1846
+    RPT_4   (   0, 27, 15 ), RPT_4   (   0, 28, 15 ),
1847
+    RPT_4   (   0, 29, 15 ), RPT_4   (   0, 30, 15 ),
1848
+    RPT_4   (   0, 31, 15 ), RPT_4   (   0, 32, 15 ),
1849
+    RPT_4   (   0, 33, 15 ), RPT_4   (   0, 34, 15 ),
1850
+    RPT_4   (   0, 35, 15 ), RPT_4   (   0, 36, 15 ),
1851
+    RPT_4   (   0, 37, 15 ), RPT_4   (   0, 38, 15 ),
1852
+    RPT_4   (   0, 39, 15 ), RPT_4   (   0, 40, 15 ),
1853
+    RPT_4   (   0, 41, 15 ), RPT_4   (   0, 42, 15 ),
1854
+    RPT_4   (   0, 43, 15 ), RPT_4   (   0, 44, 15 ),
1855
+    RPT_4   (   0, 45, 15 ), RPT_4   (   0, 46, 15 ),
1856
+    RPT_4   (   0, 47, 15 ), RPT_4   (   0, 48, 15 ),
1857
+    RPT_4   (   0, 49, 15 ), RPT_4   (   0, 50, 15 ),
1858
+    RPT_4   (   0, 51, 15 ), RPT_4   (   0, 52, 15 ),
1859
+    RPT_4   (   0, 53, 15 ), RPT_4   (   0, 54, 15 ),
1860
+    RPT_4   (   0, 55, 15 ), RPT_4   (   0, 56, 15 ),
1861
+    RPT_4   (   0, 57, 15 ), RPT_4   (   0, 58, 15 ),
1862
+    RPT_4   (   0, 59, 15 ), RPT_4   (   0, 60, 15 ),
1863
+    RPT_4   (   0, 61, 15 ), RPT_4   (   0, 62, 15 ),
1864
+    RPT_4   (   0, 63, 15 ), RPT_2   (   0,  0, 16 ),
1865
+    {    1,  0, 17 }, {   -1,  0, 17 }, {    2,  0, 17 }, {   -2,  0, 17 },
1866
+    {    3,  0, 17 }, {   -3,  0, 17 }, {    4,  0, 17 }, {   -4,  0, 17 },
1867
+    {    5,  0, 17 }, {   -5,  0, 17 }, {    6,  0, 17 }, {   -6,  0, 17 },
1868
+    {    7,  0, 17 }, {   -7,  0, 17 }, {    8,  0, 17 }, {   -8,  0, 17 },
1869
+    {    9,  0, 17 }, {   -9,  0, 17 }, {   10,  0, 17 }, {  -10,  0, 17 },
1870
+    {   11,  0, 17 }, {  -11,  0, 17 }, {   12,  0, 17 }, {  -12,  0, 17 },
1871
+    {   13,  0, 17 }, {  -13,  0, 17 }, {   14,  0, 17 }, {  -14,  0, 17 },
1872
+    {   15,  0, 17 }, {  -15,  0, 17 }, {   16,  0, 17 }, {  -16,  0, 17 },
1873
+    {   17,  0, 17 }, {  -17,  0, 17 }, {   18,  0, 17 }, {  -18,  0, 17 },
1874
+    {   19,  0, 17 }, {  -19,  0, 17 }, {   20,  0, 17 }, {  -20,  0, 17 },
1875
+    {   21,  0, 17 }, {  -21,  0, 17 }, {   22,  0, 17 }, {  -22,  0, 17 },
1876
+    {   23,  0, 17 }, {  -23,  0, 17 }, {   24,  0, 17 }, {  -24,  0, 17 },
1877
+    {   25,  0, 17 }, {  -25,  0, 17 }, {   26,  0, 17 }, {  -26,  0, 17 },
1878
+    {   27,  0, 17 }, {  -27,  0, 17 }, {   28,  0, 17 }, {  -28,  0, 17 },
1879
+    {   29,  0, 17 }, {  -29,  0, 17 }, {   30,  0, 17 }, {  -30,  0, 17 },
1880
+    {   31,  0, 17 }, {  -31,  0, 17 }, {   32,  0, 17 }, {  -32,  0, 17 },
1881
+    {   33,  0, 17 }, {  -33,  0, 17 }, {   34,  0, 17 }, {  -34,  0, 17 },
1882
+    {   35,  0, 17 }, {  -35,  0, 17 }, {   36,  0, 17 }, {  -36,  0, 17 },
1883
+    {   37,  0, 17 }, {  -37,  0, 17 }, {   38,  0, 17 }, {  -38,  0, 17 },
1884
+    {   39,  0, 17 }, {  -39,  0, 17 }, {   40,  0, 17 }, {  -40,  0, 17 },
1885
+    {   41,  0, 17 }, {  -41,  0, 17 }, {   42,  0, 17 }, {  -42,  0, 17 },
1886
+    {   43,  0, 17 }, {  -43,  0, 17 }, {   44,  0, 17 }, {  -44,  0, 17 },
1887
+    {   45,  0, 17 }, {  -45,  0, 17 }, {   46,  0, 17 }, {  -46,  0, 17 },
1888
+    {   47,  0, 17 }, {  -47,  0, 17 }, {   48,  0, 17 }, {  -48,  0, 17 },
1889
+    {   49,  0, 17 }, {  -49,  0, 17 }, {   50,  0, 17 }, {  -50,  0, 17 },
1890
+    {   51,  0, 17 }, {  -51,  0, 17 }, {   52,  0, 17 }, {  -52,  0, 17 },
1891
+    {   53,  0, 17 }, {  -53,  0, 17 }, {   54,  0, 17 }, {  -54,  0, 17 },
1892
+    {   55,  0, 17 }, {  -55,  0, 17 }, {   56,  0, 17 }, {  -56,  0, 17 },
1893
+    {   57,  0, 17 }, {  -57,  0, 17 }, {   58,  0, 17 }, {  -58,  0, 17 },
1894
+    {   59,  0, 17 }, {  -59,  0, 17 }, {   60,  0, 17 }, {  -60,  0, 17 },
1895
+    {   61,  0, 17 }, {  -61,  0, 17 }, {   62,  0, 17 }, {  -62,  0, 17 },
1896
+    {   63,  0, 17 }, {  -63,  0, 17 }, RPT_32  (  21,  0, 12 ),
1897
+    RPT_32  ( -21,  0, 12 ), RPT_32  (  22,  0, 12 ),
1898
+    RPT_32  ( -22,  0, 12 ), RPT_32  (  23,  0, 12 ),
1899
+    RPT_32  ( -23,  0, 12 ), RPT_32  (  10,  1, 12 ),
1900
+    RPT_32  ( -10,  1, 12 ), RPT_32  (  11,  1, 12 ),
1901
+    RPT_32  ( -11,  1, 12 ), RPT_32  (   5,  2, 12 ),
1902
+    RPT_32  (  -5,  2, 12 ), RPT_32  (   6,  2, 12 ),
1903
+    RPT_32  (  -6,  2, 12 ), RPT_32  (   4,  3, 12 ),
1904
+    RPT_32  (  -4,  3, 12 ), RPT_32  (   3,  5, 12 ),
1905
+    RPT_32  (  -3,  5, 12 ), RPT_32  (   3,  6, 12 ),
1906
+    RPT_32  (  -3,  6, 12 ), RPT_32  (   2,  9, 12 ),
1907
+    RPT_32  (  -2,  9, 12 ), RPT_32  (   1, 15, 12 ),
1908
+    RPT_32  (  -1, 15, 12 ), RPT_16  (  24,  0, 13 ),
1909
+    RPT_16  ( -24,  0, 13 ), RPT_16  (  25,  0, 13 ),
1910
+    RPT_16  ( -25,  0, 13 ), RPT_16  (  26,  0, 13 ),
1911
+    RPT_16  ( -26,  0, 13 ), RPT_16  (  12,  1, 13 ),
1912
+    RPT_16  ( -12,  1, 13 ), RPT_16  (  13,  1, 13 ),
1913
+    RPT_16  ( -13,  1, 13 ), RPT_16  (   5,  3, 13 ),
1914
+    RPT_16  (  -5,  3, 13 ), RPT_16  (   4,  4, 13 ),
1915
+    RPT_16  (  -4,  4, 13 ), RPT_32  (   0,  5, 12 ),
1916
+    RPT_16  (   4,  5, 13 ), RPT_16  (  -4,  5, 13 ),
1917
+    RPT_32  (   0,  6, 12 ), RPT_32  (   0,  7, 12 ),
1918
+    RPT_16  (   3,  7, 13 ), RPT_16  (  -3,  7, 13 ),
1919
+    RPT_32  (   0,  8, 12 ), RPT_16  (   3,  8, 13 ),
1920
+    RPT_16  (  -3,  8, 13 ), RPT_32  (   0,  9, 12 ),
1921
+    RPT_16  (   1, 16, 13 ), RPT_16  (  -1, 16, 13 ),
1922
+};
1923
+
1924
+static const HQXLUT ac64_lut[] = {
1925
+    RPT_512 (   1,  0,  3 ), RPT_512 (  -1,  0,  3 ),
1926
+    RPT_1024(   0, 64,  2 ), RPT_256 (   2,  0,  4 ),
1927
+    RPT_256 (  -2,  0,  4 ), RPT_128 (   3,  0,  5 ),
1928
+    RPT_128 (  -3,  0,  5 ), RPT_128 (   1,  1,  5 ),
1929
+    RPT_128 (  -1,  1,  5 ), RPT_64  (   4,  0,  6 ),
1930
+    RPT_64  (  -4,  0,  6 ), RPT_64  (   2,  1,  6 ),
1931
+    RPT_64  (  -2,  1,  6 ), RPT_64  (   1,  2,  6 ),
1932
+    RPT_64  (  -1,  2,  6 ), RPT_32  (   5,  0,  7 ),
1933
+    RPT_32  (  -5,  0,  7 ), RPT_32  (   1,  3,  7 ),
1934
+    RPT_32  (  -1,  3,  7 ), RPT_32  (   1,  4,  7 ),
1935
+    RPT_32  (  -1,  4,  7 ), RPT_16  (   6,  0,  8 ),
1936
+    RPT_16  (  -6,  0,  8 ), RPT_16  (   3,  1,  8 ),
1937
+    RPT_16  (  -3,  1,  8 ), RPT_16  (   2,  2,  8 ),
1938
+    RPT_16  (  -2,  2,  8 ), RPT_16  (   1,  5,  8 ),
1939
+    RPT_16  (  -1,  5,  8 ), RPT_16  (   1,  6,  8 ),
1940
+    RPT_16  (  -1,  6,  8 ), RPT_16  (   1,  7,  8 ),
1941
+    RPT_16  (  -1,  7,  8 ), RPT_8   (   7,  0,  9 ),
1942
+    RPT_8   (  -7,  0,  9 ), RPT_8   (   8,  0,  9 ),
1943
+    RPT_8   (  -8,  0,  9 ), RPT_8   (   4,  1,  9 ),
1944
+    RPT_8   (  -4,  1,  9 ), RPT_8   (   2,  3,  9 ),
1945
+    RPT_8   (  -2,  3,  9 ), RPT_8   (   1,  8,  9 ),
1946
+    RPT_8   (  -1,  8,  9 ), RPT_8   (   1,  9,  9 ),
1947
+    RPT_8   (  -1,  9,  9 ), RPT_4   (   9,  0, 10 ),
1948
+    RPT_4   (  -9,  0, 10 ), RPT_4   (  10,  0, 10 ),
1949
+    RPT_4   ( -10,  0, 10 ), RPT_4   (   5,  1, 10 ),
1950
+    RPT_4   (  -5,  1, 10 ), RPT_4   (   3,  2, 10 ),
1951
+    RPT_4   (  -3,  2, 10 ), RPT_4   (   2,  4, 10 ),
1952
+    RPT_4   (  -2,  4, 10 ), RPT_4   (   2,  5, 10 ),
1953
+    RPT_4   (  -2,  5, 10 ), RPT_4   (   1, 10, 10 ),
1954
+    RPT_4   (  -1, 10, 10 ), RPT_4   (   1, 11, 10 ),
1955
+    RPT_4   (  -1, 11, 10 ), { 4096,  0, -1 }, { 4128,  0, -1 },
1956
+    { 4160,  0, -1 }, { 4192,  0, -1 }, { 4224,  0, -1 }, { 4256,  0, -1 },
1957
+    { 4288,  0, -1 }, { 4320,  0, -1 }, RPT_4   (   0,  0, 10 ),
1958
+    RPT_2   (  11,  0, 11 ), RPT_2   ( -11,  0, 11 ),
1959
+    RPT_2   (  12,  0, 11 ), RPT_2   ( -12,  0, 11 ),
1960
+    RPT_2   (   6,  1, 11 ), RPT_2   (  -6,  1, 11 ),
1961
+    RPT_2   (   7,  1, 11 ), RPT_2   (  -7,  1, 11 ),
1962
+    RPT_2   (   3,  3, 11 ), RPT_2   (  -3,  3, 11 ),
1963
+    RPT_2   (   3,  4, 11 ), RPT_2   (  -3,  4, 11 ),
1964
+    RPT_2   (   3,  5, 11 ), RPT_2   (  -3,  5, 11 ),
1965
+    RPT_2   (   2,  6, 11 ), RPT_2   (  -2,  6, 11 ),
1966
+    RPT_2   (   2,  7, 11 ), RPT_2   (  -2,  7, 11 ),
1967
+    RPT_2   (   1, 12, 11 ), RPT_2   (  -1, 12, 11 ),
1968
+    RPT_2   (   1, 13, 11 ), RPT_2   (  -1, 13, 11 ),
1969
+    RPT_2   (   1, 14, 11 ), RPT_2   (  -1, 14, 11 ),
1970
+    {   13,  0, 12 }, {  -13,  0, 12 }, {   14,  0, 12 }, {  -14,  0, 12 },
1971
+    RPT_2   (   0,  1, 11 ), {    8,  1, 12 }, {   -8,  1, 12 },
1972
+    {    4,  2, 12 }, {   -4,  2, 12 }, {    4,  3, 12 }, {   -4,  3, 12 },
1973
+    {    2,  8, 12 }, {   -2,  8, 12 }, {    2,  9, 12 }, {   -2,  9, 12 },
1974
+    {    1, 15, 12 }, {   -1, 15, 12 }, { 4352,  0, -1 }, { 4384,  0, -1 },
1975
+    { 4416,  0, -1 }, { 4448,  0, -1 }, { 4480,  0, -1 }, {    0,  2, 12 },
1976
+    { 4512,  0, -1 }, {    0,  3, 12 }, { 4544,  0, -1 }, {    0,  4, 12 },
1977
+    { 4576,  0, -1 }, {    0,  5, 12 }, { 4608,  0, -1 }, {    0,  6, 12 },
1978
+    { 4640,  0, -1 }, { 4672,  0, -1 }, { 4704,  0, -1 }, { 4736,  0, -1 },
1979
+    RPT_4   (   0,  0, 15 ), RPT_4   (   0,  1, 15 ),
1980
+    RPT_4   (   0,  2, 15 ), RPT_4   (   0,  3, 15 ),
1981
+    RPT_4   (   0,  4, 15 ), RPT_4   (   0,  5, 15 ),
1982
+    RPT_4   (   0,  6, 15 ), RPT_4   (   0,  7, 15 ),
1983
+    RPT_4   (   0,  8, 15 ), RPT_4   (   0,  9, 15 ),
1984
+    RPT_4   (   0, 10, 15 ), RPT_4   (   0, 11, 15 ),
1985
+    RPT_4   (   0, 12, 15 ), RPT_4   (   0, 13, 15 ),
1986
+    RPT_4   (   0, 14, 15 ), RPT_4   (   0, 15, 15 ),
1987
+    RPT_4   (   0, 16, 15 ), RPT_4   (   0, 17, 15 ),
1988
+    RPT_4   (   0, 18, 15 ), RPT_4   (   0, 19, 15 ),
1989
+    RPT_4   (   0, 20, 15 ), RPT_4   (   0, 21, 15 ),
1990
+    RPT_4   (   0, 22, 15 ), RPT_4   (   0, 23, 15 ),
1991
+    RPT_4   (   0, 24, 15 ), RPT_4   (   0, 25, 15 ),
1992
+    RPT_4   (   0, 26, 15 ), RPT_4   (   0, 27, 15 ),
1993
+    RPT_4   (   0, 28, 15 ), RPT_4   (   0, 29, 15 ),
1994
+    RPT_4   (   0, 30, 15 ), RPT_4   (   0, 31, 15 ),
1995
+    RPT_4   (   0, 32, 15 ), RPT_4   (   0, 33, 15 ),
1996
+    RPT_4   (   0, 34, 15 ), RPT_4   (   0, 35, 15 ),
1997
+    RPT_4   (   0, 36, 15 ), RPT_4   (   0, 37, 15 ),
1998
+    RPT_4   (   0, 38, 15 ), RPT_4   (   0, 39, 15 ),
1999
+    RPT_4   (   0, 40, 15 ), RPT_4   (   0, 41, 15 ),
2000
+    RPT_4   (   0, 42, 15 ), RPT_4   (   0, 43, 15 ),
2001
+    RPT_4   (   0, 44, 15 ), RPT_4   (   0, 45, 15 ),
2002
+    RPT_4   (   0, 46, 15 ), RPT_4   (   0, 47, 15 ),
2003
+    RPT_4   (   0, 48, 15 ), RPT_4   (   0, 49, 15 ),
2004
+    RPT_4   (   0, 50, 15 ), RPT_4   (   0, 51, 15 ),
2005
+    RPT_4   (   0, 52, 15 ), RPT_4   (   0, 53, 15 ),
2006
+    RPT_4   (   0, 54, 15 ), RPT_4   (   0, 55, 15 ),
2007
+    RPT_4   (   0, 56, 15 ), RPT_4   (   0, 57, 15 ),
2008
+    RPT_4   (   0, 58, 15 ), RPT_4   (   0, 59, 15 ),
2009
+    RPT_4   (   0, 60, 15 ), RPT_4   (   0, 61, 15 ),
2010
+    RPT_4   (   0, 62, 15 ), RPT_4   (   0, 63, 15 ),
2011
+    RPT_2   (   0,  0, 16 ), {    1,  0, 17 }, {   -1,  0, 17 },
2012
+    {    2,  0, 17 }, {   -2,  0, 17 }, {    3,  0, 17 }, {   -3,  0, 17 },
2013
+    {    4,  0, 17 }, {   -4,  0, 17 }, {    5,  0, 17 }, {   -5,  0, 17 },
2014
+    {    6,  0, 17 }, {   -6,  0, 17 }, {    7,  0, 17 }, {   -7,  0, 17 },
2015
+    {    8,  0, 17 }, {   -8,  0, 17 }, {    9,  0, 17 }, {   -9,  0, 17 },
2016
+    {   10,  0, 17 }, {  -10,  0, 17 }, {   11,  0, 17 }, {  -11,  0, 17 },
2017
+    {   12,  0, 17 }, {  -12,  0, 17 }, {   13,  0, 17 }, {  -13,  0, 17 },
2018
+    {   14,  0, 17 }, {  -14,  0, 17 }, {   15,  0, 17 }, {  -15,  0, 17 },
2019
+    {   16,  0, 17 }, {  -16,  0, 17 }, {   17,  0, 17 }, {  -17,  0, 17 },
2020
+    {   18,  0, 17 }, {  -18,  0, 17 }, {   19,  0, 17 }, {  -19,  0, 17 },
2021
+    {   20,  0, 17 }, {  -20,  0, 17 }, {   21,  0, 17 }, {  -21,  0, 17 },
2022
+    {   22,  0, 17 }, {  -22,  0, 17 }, {   23,  0, 17 }, {  -23,  0, 17 },
2023
+    {   24,  0, 17 }, {  -24,  0, 17 }, {   25,  0, 17 }, {  -25,  0, 17 },
2024
+    {   26,  0, 17 }, {  -26,  0, 17 }, {   27,  0, 17 }, {  -27,  0, 17 },
2025
+    {   28,  0, 17 }, {  -28,  0, 17 }, {   29,  0, 17 }, {  -29,  0, 17 },
2026
+    {   30,  0, 17 }, {  -30,  0, 17 }, {   31,  0, 17 }, {  -31,  0, 17 },
2027
+    RPT_16  (  15,  0, 13 ), RPT_16  ( -15,  0, 13 ),
2028
+    RPT_16  (   9,  1, 13 ), RPT_16  (  -9,  1, 13 ),
2029
+    RPT_16  (  10,  1, 13 ), RPT_16  ( -10,  1, 13 ),
2030
+    RPT_16  (   5,  2, 13 ), RPT_16  (  -5,  2, 13 ),
2031
+    RPT_16  (   5,  3, 13 ), RPT_16  (  -5,  3, 13 ),
2032
+    RPT_16  (   4,  4, 13 ), RPT_16  (  -4,  4, 13 ),
2033
+    RPT_16  (   4,  5, 13 ), RPT_16  (  -4,  5, 13 ),
2034
+    RPT_16  (   3,  6, 13 ), RPT_16  (  -3,  6, 13 ),
2035
+    RPT_16  (   3,  7, 13 ), RPT_16  (  -3,  7, 13 ),
2036
+    RPT_16  (   1, 16, 13 ), RPT_16  (  -1, 16, 13 ),
2037
+    RPT_16  (   1, 17, 13 ), RPT_16  (  -1, 17, 13 ),
2038
+};
2039
+
2040
+static const HQXLUT ac128_lut[] = {
2041
+    RPT_256 (   1,  0,  3 ), RPT_256 (  -1,  0,  3 ),
2042
+    RPT_512 (   0, 64,  2 ), RPT_128 (   1,  1,  4 ),
2043
+    RPT_128 (  -1,  1,  4 ), RPT_64  (   2,  0,  5 ),
2044
+    RPT_64  (  -2,  0,  5 ), RPT_32  (   3,  0,  6 ),
2045
+    RPT_32  (  -3,  0,  6 ), RPT_32  (   2,  1,  6 ),
2046
+    RPT_32  (  -2,  1,  6 ), RPT_32  (   1,  2,  6 ),
2047
+    RPT_32  (  -1,  2,  6 ), RPT_32  (   1,  3,  6 ),
2048
+    RPT_32  (  -1,  3,  6 ), RPT_32  (   1,  4,  6 ),
2049
+    RPT_32  (  -1,  4,  6 ), RPT_16  (   4,  0,  7 ),
2050
+    RPT_16  (  -4,  0,  7 ), RPT_16  (   1,  5,  7 ),
2051
+    RPT_16  (  -1,  5,  7 ), RPT_16  (   1,  6,  7 ),
2052
+    RPT_16  (  -1,  6,  7 ), RPT_16  (   1,  7,  7 ),
2053
+    RPT_16  (  -1,  7,  7 ), RPT_8   (   5,  0,  8 ),
2054
+    RPT_8   (  -5,  0,  8 ), RPT_8   (   3,  1,  8 ),
2055
+    RPT_8   (  -3,  1,  8 ), RPT_8   (   2,  2,  8 ),
2056
+    RPT_8   (  -2,  2,  8 ), RPT_8   (   2,  3,  8 ),
2057
+    RPT_8   (  -2,  3,  8 ), RPT_8   (   1,  8,  8 ),
2058
+    RPT_8   (  -1,  8,  8 ), RPT_8   (   1,  9,  8 ),
2059
+    RPT_8   (  -1,  9,  8 ), RPT_4   (   6,  0,  9 ),
2060
+    RPT_4   (  -6,  0,  9 ), RPT_4   (   4,  1,  9 ),
2061
+    RPT_4   (  -4,  1,  9 ), RPT_4   (   2,  4,  9 ),
2062
+    RPT_4   (  -2,  4,  9 ), RPT_4   (   2,  5,  9 ),
2063
+    RPT_4   (  -2,  5,  9 ), RPT_4   (   1, 10,  9 ),
2064
+    RPT_4   (  -1, 10,  9 ), RPT_2   (   7,  0, 10 ),
2065
+    RPT_2   (  -7,  0, 10 ), RPT_2   (   5,  1, 10 ),
2066
+    RPT_2   (  -5,  1, 10 ), RPT_2   (   3,  2, 10 ),
2067
+    RPT_2   (  -3,  2, 10 ), RPT_2   (   3,  3, 10 ),
2068
+    RPT_2   (  -3,  3, 10 ), RPT_2   (   2,  6, 10 ),
2069
+    RPT_2   (  -2,  6, 10 ), { 2048,  0, -1 }, { 2112,  0, -1 },
2070
+    { 2176,  0, -1 }, { 2240,  0, -1 }, {    6,  1, 11 }, {   -6,  1, 11 },
2071
+    {    7,  1, 11 }, {   -7,  1, 11 }, {    3,  4, 11 }, {   -3,  4, 11 },
2072
+    {    3,  5, 11 }, {   -3,  5, 11 }, {    2,  7, 11 }, {   -2,  7, 11 },
2073
+    {    2,  8, 11 }, {   -2,  8, 11 }, {    2,  9, 11 }, {   -2,  9, 11 },
2074
+    {    1, 11, 11 }, {   -1, 11, 11 }, {    1, 12, 11 }, {   -1, 12, 11 },
2075
+    {    1, 13, 11 }, {   -1, 13, 11 }, {    0,  0, 11 }, { 2304,  0, -1 },
2076
+    { 2368,  0, -1 }, { 2432,  0, -1 }, { 2496,  0, -1 }, { 2560,  0, -1 },
2077
+    { 2624,  0, -1 }, { 2688,  0, -1 }, { 2752,  0, -1 }, { 2816,  0, -1 },
2078
+    { 2880,  0, -1 }, { 2944,  0, -1 }, RPT_4   (   0,  0, 15 ),
2079
+    RPT_4   (   0,  1, 15 ), RPT_4   (   0,  2, 15 ),
2080
+    RPT_4   (   0,  3, 15 ), RPT_4   (   0,  4, 15 ),
2081
+    RPT_4   (   0,  5, 15 ), RPT_4   (   0,  6, 15 ),
2082
+    RPT_4   (   0,  7, 15 ), RPT_4   (   0,  8, 15 ),
2083
+    RPT_4   (   0,  9, 15 ), RPT_4   (   0, 10, 15 ),
2084
+    RPT_4   (   0, 11, 15 ), RPT_4   (   0, 12, 15 ),
2085
+    RPT_4   (   0, 13, 15 ), RPT_4   (   0, 14, 15 ),
2086
+    RPT_4   (   0, 15, 15 ), RPT_4   (   0, 16, 15 ),
2087
+    RPT_4   (   0, 17, 15 ), RPT_4   (   0, 18, 15 ),
2088
+    RPT_4   (   0, 19, 15 ), RPT_4   (   0, 20, 15 ),
2089
+    RPT_4   (   0, 21, 15 ), RPT_4   (   0, 22, 15 ),
2090
+    RPT_4   (   0, 23, 15 ), RPT_4   (   0, 24, 15 ),
2091
+    RPT_4   (   0, 25, 15 ), RPT_4   (   0, 26, 15 ),
2092
+    RPT_4   (   0, 27, 15 ), RPT_4   (   0, 28, 15 ),
2093
+    RPT_4   (   0, 29, 15 ), RPT_4   (   0, 30, 15 ),
2094
+    RPT_4   (   0, 31, 15 ), RPT_4   (   0, 32, 15 ),
2095
+    RPT_4   (   0, 33, 15 ), RPT_4   (   0, 34, 15 ),
2096
+    RPT_4   (   0, 35, 15 ), RPT_4   (   0, 36, 15 ),
2097
+    RPT_4   (   0, 37, 15 ), RPT_4   (   0, 38, 15 ),
2098
+    RPT_4   (   0, 39, 15 ), RPT_4   (   0, 40, 15 ),
2099
+    RPT_4   (   0, 41, 15 ), RPT_4   (   0, 42, 15 ),
2100
+    RPT_4   (   0, 43, 15 ), RPT_4   (   0, 44, 15 ),
2101
+    RPT_4   (   0, 45, 15 ), RPT_4   (   0, 46, 15 ),
2102
+    RPT_4   (   0, 47, 15 ), RPT_4   (   0, 48, 15 ),
2103
+    RPT_4   (   0, 49, 15 ), RPT_4   (   0, 50, 15 ),
2104
+    RPT_4   (   0, 51, 15 ), RPT_4   (   0, 52, 15 ),
2105
+    RPT_4   (   0, 53, 15 ), RPT_4   (   0, 54, 15 ),
2106
+    RPT_4   (   0, 55, 15 ), RPT_4   (   0, 56, 15 ),
2107
+    RPT_4   (   0, 57, 15 ), RPT_4   (   0, 58, 15 ),
2108
+    RPT_4   (   0, 59, 15 ), RPT_4   (   0, 60, 15 ),
2109
+    RPT_4   (   0, 61, 15 ), RPT_4   (   0, 62, 15 ),
2110
+    RPT_4   (   0, 63, 15 ), RPT_32  (   8,  0, 12 ),
2111
+    RPT_32  (  -8,  0, 12 ), RPT_32  (   9,  0, 12 ),
2112
+    RPT_32  (  -9,  0, 12 ), RPT_32  (   8,  1, 12 ),
2113
+    RPT_32  (  -8,  1, 12 ), RPT_32  (   4,  2, 12 ),
2114
+    RPT_32  (  -4,  2, 12 ), RPT_32  (   4,  3, 12 ),
2115
+    RPT_32  (  -4,  3, 12 ), RPT_32  (   3,  6, 12 ),
2116
+    RPT_32  (  -3,  6, 12 ), RPT_32  (   1, 14, 12 ),
2117
+    RPT_32  (  -1, 14, 12 ), RPT_32  (   1, 15, 12 ),
2118
+    RPT_32  (  -1, 15, 12 ), RPT_32  (   1, 16, 12 ),
2119
+    RPT_32  (  -1, 16, 12 ), RPT_32  (   0,  1, 12 ),
2120
+    RPT_32  (   0,  2, 12 ), RPT_32  (   0,  3, 12 ),
2121
+    RPT_2   (   0,  0, 16 ), {    1,  0, 17 }, {   -1,  0, 17 },
2122
+    {    2,  0, 17 }, {   -2,  0, 17 }, {    3,  0, 17 }, {   -3,  0, 17 },
2123
+    {    4,  0, 17 }, {   -4,  0, 17 }, {    5,  0, 17 }, {   -5,  0, 17 },
2124
+    {    6,  0, 17 }, {   -6,  0, 17 }, {    7,  0, 17 }, {   -7,  0, 17 },
2125
+    {    8,  0, 17 }, {   -8,  0, 17 }, {    9,  0, 17 }, {   -9,  0, 17 },
2126
+    {   10,  0, 17 }, {  -10,  0, 17 }, {   11,  0, 17 }, {  -11,  0, 17 },
2127
+    {   12,  0, 17 }, {  -12,  0, 17 }, {   13,  0, 17 }, {  -13,  0, 17 },
2128
+    {   14,  0, 17 }, {  -14,  0, 17 }, {   15,  0, 17 }, {  -15,  0, 17 },
2129
+};
2130
+
2131
+const HQXAC ff_hqx_ac[NUM_HQX_AC] = {
2132
+    { 10, 5, ac0_lut   },
2133
+    { 11, 6, ac8_lut   },
2134
+    { 11, 6, ac16_lut  },
2135
+    { 11, 6, ac32_lut  },
2136
+    { 12, 5, ac64_lut  },
2137
+    { 11, 6, ac128_lut },
2138
+};
2139
+
2140
+static const int table_off[] = {
2141
+    0, 32, 928, 2272, 4640,
2142
+};
2143
+
2144
+#define INIT_DC_TABLE(idx, name)                                              \
2145
+    do {                                                                      \
2146
+        ret = init_vlc(&ctx->dc_vlc[idx], HQX_DC_VLC_BITS,                    \
2147
+                       FF_ARRAY_ELEMS(name ## _vlc_lens),                     \
2148
+                       name ## _vlc_lens, 1, 1,                               \
2149
+                       name ## _vlc_bits, 2, 2, 0);                           \
2150
+        if (ret < 0)                                                          \
2151
+            return ret;                                                       \
2152
+    } while (0)
2153
+
2154
+av_cold int ff_hqx_init_vlcs(HQXContext *ctx)
2155
+{
2156
+    int ret = init_vlc(&ctx->cbp_vlc, 5, FF_ARRAY_ELEMS(cbp_vlc_lens),
2157
+                       cbp_vlc_lens, 1, 1, cbp_vlc_bits, 1, 1, 0);
2158
+    if (ret < 0)
2159
+        return ret;
2160
+
2161
+    INIT_DC_TABLE(0, dc9);
2162
+    INIT_DC_TABLE(1, dc10);
2163
+    INIT_DC_TABLE(2, dc11);
2164
+
2165
+    return 0;
2166
+}
... ...
@@ -29,7 +29,7 @@
29 29
 #include "libavutil/version.h"
30 30
 
31 31
 #define LIBAVCODEC_VERSION_MAJOR 56
32
-#define LIBAVCODEC_VERSION_MINOR 16
32
+#define LIBAVCODEC_VERSION_MINOR 17
33 33
 #define LIBAVCODEC_VERSION_MICRO  0
34 34
 
35 35
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
... ...
@@ -351,6 +351,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
351 351
     { AV_CODEC_ID_PRORES,       MKTAG('A', 'P', 'C', 'N') },
352 352
     { AV_CODEC_ID_PRORES,       MKTAG('A', 'P', 'C', 'H') },
353 353
     { AV_CODEC_ID_QTRLE,        MKTAG('r', 'l', 'e', ' ') },
354
+    { AV_CODEC_ID_HQX,          MKTAG('C', 'H', 'Q', 'X') },
354 355
     { AV_CODEC_ID_NONE,         0 }
355 356
 };
356 357
 
... ...
@@ -52,6 +52,15 @@ fate-bink-video: $(FATE_BINK_VIDEO)
52 52
 FATE_SAMPLES_AVCONV-$(call DEMDEC, BMV, BMV_VIDEO) += fate-bmv-video
53 53
 fate-bmv-video: CMD = framecrc -i $(TARGET_SAMPLES)/bmv/SURFING-partial.BMV -pix_fmt rgb24 -an
54 54
 
55
+FATE_CANOPUS_HQX += fate-canopus-hqx422
56
+fate-canopus-hqx422: CMD = framecrc -i $(TARGET_SAMPLES)/canopus/hqx422.avi -pix_fmt yuv422p16be -an
57
+
58
+FATE_CANOPUS_HQX += fate-canopus-hqx422a
59
+fate-canopus-hqx422a: CMD = framecrc -i $(TARGET_SAMPLES)/canopus/hqx422a.avi -pix_fmt yuv422p16be -an
60
+
61
+FATE_SAMPLES_AVCONV-$(call DEMDEC, AVI, HQX) += $(FATE_CANOPUS_HQX)
62
+fate-canopus-hqx: $(FATE_CANOPUS_HQX)
63
+
55 64
 FATE_SAMPLES_AVCONV-$(call DEMDEC, MPEGPS, CAVS) += fate-cavs
56 65
 fate-cavs: CMD = framecrc -i $(TARGET_SAMPLES)/cavs/cavs.mpg -an
57 66
 
58 67
new file mode 100644
... ...
@@ -0,0 +1,2 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,  1658880, 0x823fcbac
0 2
new file mode 100644
... ...
@@ -0,0 +1,2 @@
0
+#tb 0: 1/25
1
+0,          0,          0,        1,  8294400, 0x9b38264d