#pragma once
// mp3enc-tables.h
// Numerical constants for the MP3 encoder.
// Extracted from minimp3 (CC0, github.com/lieff/minimp3).
// Values match ISO 11172-3 Annex B+C.
// MIT license.

#include <stdint.h>

// Layer III bitrates in kbps, indexed by bitrate_index 0..14
// Index 0 = free format, index 15 = forbidden
static const int mp3enc_bitrate_kbps[15] = { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320 };

// MPEG1 sample rates, indexed by sampling_frequency field (2 bits)
static const int mp3enc_samplerate[3] = { 44100, 48000, 32000 };

// slen1 and slen2 from scalefac_compress (0..15)
// slen1 = mp3enc_slen[0][i], slen2 = mp3enc_slen[1][i]
static const uint8_t mp3enc_slen[2][16] = {
    { 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
    { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 }
};

// Pretab values added to scalefactors when preflag=1 (ISO Table B.6)
static const uint8_t mp3enc_pretab[22] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 };

// SFB boundaries: long blocks (ISO Table B.8, from minimp3 CC0)
// MPEG1 only: [0]=44100Hz, [1]=48000Hz, [2]=32000Hz
// These correspond to minimp3 g_scf_long[5..7].
static const uint8_t mp3enc_sfb_long[3][23] = {
    { 4, 4, 4, 4, 4, 4, 6, 6, 8, 8,  10, 12, 16, 20, 24, 28, 34, 42, 50, 54, 76,  158, 0 },
    { 4, 4, 4, 4, 4, 4, 6, 6, 6, 8,  10, 12, 16, 18, 22, 28, 34, 40, 46, 54, 54,  192, 0 },
    { 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12, 16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26,  0 }
};

// SFB boundaries: short blocks (ISO Table B.8, from minimp3 CC0)
// [sr_index][band_width]
// SFB boundaries: short blocks (ISO Table B.8, from minimp3 CC0)
// MPEG1 only: [0]=44100Hz, [1]=48000Hz, [2]=32000Hz
static const uint8_t mp3enc_sfb_short[3][40] = {
    { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 8, 8, 10, 10,
     10, 12, 12, 12, 14, 14, 14, 18, 18, 18, 22, 22, 22, 30, 30, 30, 56, 56, 56, 0 },
    { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 10, 10,
     10, 12, 12, 12, 14, 14, 14, 16, 16, 16, 20, 20, 20, 26, 26, 26, 66, 66, 66, 0 },
    { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 8, 8, 12, 12,
     12, 16, 16, 16, 20, 20, 20, 26, 26, 26, 34, 34, 34, 42, 42, 42, 12, 12, 12, 0 }
};

// SFB boundaries: mixed blocks (ISO Table B.8, from minimp3 CC0)
// [sr_index][band_width]
static const uint8_t mp3enc_sfb_mixed[8][40] = {
    { 6,  6,  6,  6,  6,  6,  6,  6,  6,  8,  8,  8,  10, 10, 10, 12, 12, 12, 14,
     14, 14, 18, 18, 18, 24, 24, 24, 30, 30, 30, 40, 40, 40, 18, 18, 18, 0 },
    { 12, 12, 12, 4,  4,  4,  8,  8, 8, 12, 12, 12, 16, 16, 16, 20, 20, 20, 24, 24,
     24, 28, 28, 28, 36, 36, 36, 2, 2, 2,  2,  2,  2,  2,  2,  2,  26, 26, 26, 0 },
    { 6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  6,  8,  8,  8,  10, 10, 10, 14,
     14, 14, 18, 18, 18, 26, 26, 26, 32, 32, 32, 42, 42, 42, 18, 18, 18, 0 },
    { 6,  6,  6,  6,  6,  6,  6,  6,  6,  8,  8,  8,  10, 10, 10, 12, 12, 12, 14,
     14, 14, 18, 18, 18, 24, 24, 24, 32, 32, 32, 44, 44, 44, 12, 12, 12, 0 },
    { 6,  6,  6,  6,  6,  6,  6,  6,  6,  8,  8,  8,  10, 10, 10, 12, 12, 12, 14,
     14, 14, 18, 18, 18, 24, 24, 24, 30, 30, 30, 40, 40, 40, 18, 18, 18, 0 },
    { 4,  4,  4,  4,  4,  4,  6,  6,  4,  4,  4,  6,  6,  6,  8,  8,  8,  10, 10, 10,
     12, 12, 12, 14, 14, 14, 18, 18, 18, 22, 22, 22, 30, 30, 30, 56, 56, 56, 0 },
    { 4,  4,  4,  4,  4,  4,  6,  6,  4,  4,  4,  6,  6,  6,  6,  6,  6,  10, 10, 10,
     12, 12, 12, 14, 14, 14, 16, 16, 16, 20, 20, 20, 26, 26, 26, 66, 66, 66, 0 },
    { 4,  4,  4,  4,  4,  4,  6,  6,  4,  4,  4,  6,  6,  6,  8,  8,  8,  12, 12, 12,
     16, 16, 16, 20, 20, 20, 26, 26, 26, 34, 34, 34, 42, 42, 42, 12, 12, 12, 0 }
};

// Alias reduction butterfly coefficients (ISO Table B.9, from minimp3 CC0)
// cs[i] = 1/sqrt(1 + ci^2), ca[i] = ci/sqrt(1 + ci^2)
static const float mp3enc_cs[8] = { 0.85749293f, 0.88174200f, 0.94962865f, 0.98331459f,
                                    0.99551782f, 0.99916056f, 0.99989920f, 0.99999316f };
static const float mp3enc_ca[8] = { 0.51449576f, 0.47173197f, 0.31337745f, 0.18191320f,
                                    0.09457419f, 0.04096558f, 0.01419856f, 0.00369997f };

// MDCT window shapes for overlap add (from minimp3 CC0)
// [0] = normal/start, [1] = stop block
// First 9 values: sin(pi/36 * (i + 0.5)) for i=0..8
// Last 9 values: sin(pi/36 * (i + 18.5)) for i=0..8
static const float mp3enc_mdct_win[2][18] = {
    { 0.99904822f, 0.99144486f, 0.97629601f, 0.95371695f, 0.92387953f, 0.88701083f, 0.84339145f, 0.79335334f,
     0.73727734f,                                                                                                          0.04361938f, 0.13052619f, 0.21643961f, 0.30070580f, 0.38268343f, 0.46174861f, 0.53729961f,
     0.60876143f,                                                                                                                                                                                                                  0.67559021f },
    { 1,           1,           1,           1,           1,           1,           0.99144486f, 0.92387953f, 0.79335334f, 0,           0,           0,           0,           0,           0,           0.13052619f, 0.38268343f, 0.60876143f }
};

// MDCT twiddle factors for 18 point and 6 point transforms (from minimp3 CC0)
static const float mp3enc_twid9[18] = { 0.73727734f, 0.79335334f, 0.84339145f, 0.88701083f, 0.92387953f, 0.95371695f,
                                        0.97629601f, 0.99144486f, 0.99904822f, 0.67559021f, 0.60876143f, 0.53729961f,
                                        0.46174861f, 0.38268343f, 0.30070580f, 0.21643961f, 0.13052619f, 0.04361938f };
static const float mp3enc_twid3[6]  = { 0.79335334f, 0.92387953f, 0.99144486f, 0.60876143f, 0.38268343f, 0.13052619f };

// Analysis filterbank window, 512 coefficients.
// Ci coefficients for the polyphase analysis filter (ISO 11172-3 Table C.1).
// Extracted from minimp3 (CC0).
static const float mp3enc_enwindow[512] = {
    0.000000e+00f,  -0.000000e+00f, -0.000000e+00f, -0.000000e+00f, -0.000000e+00f, -0.000000e+00f, -0.000000e+00f,
    -1.000000e-06f, -1.000000e-06f, -1.000000e-06f, -1.000000e-06f, -1.000000e-06f, -1.000000e-06f, -2.000000e-06f,
    -2.000000e-06f, -2.000000e-06f, -2.000000e-06f, -3.000000e-06f, -3.000000e-06f, -3.000000e-06f, -4.000000e-06f,
    -4.000000e-06f, -5.000000e-06f, -5.000000e-06f, -6.000000e-06f, -7.000000e-06f, -8.000000e-06f, -8.000000e-06f,
    -9.000000e-06f, -1.000000e-05f, -1.100000e-05f, -1.200000e-05f, -1.400000e-05f, -1.500000e-05f, -1.700000e-05f,
    -1.800000e-05f, -2.000000e-05f, -2.100000e-05f, -2.300000e-05f, -2.500000e-05f, -2.800000e-05f, -3.000000e-05f,
    -3.200000e-05f, -3.500000e-05f, -3.800000e-05f, -4.100000e-05f, -4.300000e-05f, -4.600000e-05f, -5.000000e-05f,
    -5.300000e-05f, -5.600000e-05f, -6.000000e-05f, -6.300000e-05f, -6.600000e-05f, -7.000000e-05f, -7.300000e-05f,
    -7.700000e-05f, -8.100000e-05f, -8.400000e-05f, -8.700000e-05f, -9.100000e-05f, -9.300000e-05f, -9.600000e-05f,
    -9.900000e-05f, 1.020000e-04f,  1.040000e-04f,  1.060000e-04f,  1.070000e-04f,  1.080000e-04f,  1.090000e-04f,
    1.090000e-04f,  1.080000e-04f,  1.070000e-04f,  1.050000e-04f,  1.030000e-04f,  9.900000e-05f,  9.500000e-05f,
    9.000000e-05f,  8.400000e-05f,  7.800000e-05f,  7.000000e-05f,  6.100000e-05f,  5.100000e-05f,  4.000000e-05f,
    2.700000e-05f,  1.400000e-05f,  -1.000000e-06f, -1.700000e-05f, -3.400000e-05f, -5.300000e-05f, -7.300000e-05f,
    -9.400000e-05f, -1.160000e-04f, -1.400000e-04f, -1.650000e-04f, -1.910000e-04f, -2.190000e-04f, -2.470000e-04f,
    -2.770000e-04f, -3.080000e-04f, -3.390000e-04f, -3.710000e-04f, -4.040000e-04f, -4.380000e-04f, -4.730000e-04f,
    -5.070000e-04f, -5.420000e-04f, -5.770000e-04f, -6.120000e-04f, -6.470000e-04f, -6.810000e-04f, -7.140000e-04f,
    -7.470000e-04f, -7.790000e-04f, -8.100000e-04f, -8.390000e-04f, -8.660000e-04f, -8.920000e-04f, -9.150000e-04f,
    -9.360000e-04f, -9.540000e-04f, -9.690000e-04f, -9.810000e-04f, -9.890000e-04f, -9.940000e-04f, -9.950000e-04f,
    -9.920000e-04f, -9.840000e-04f, 9.710000e-04f,  9.540000e-04f,  9.310000e-04f,  9.030000e-04f,  8.690000e-04f,
    8.290000e-04f,  7.840000e-04f,  7.320000e-04f,  6.740000e-04f,  6.100000e-04f,  5.390000e-04f,  4.630000e-04f,
    3.790000e-04f,  2.880000e-04f,  1.920000e-04f,  8.800000e-05f,  -2.100000e-05f, -1.370000e-04f, -2.600000e-04f,
    -3.880000e-04f, -5.220000e-04f, -6.620000e-04f, -8.070000e-04f, -9.570000e-04f, -1.111000e-03f, -1.270000e-03f,
    -1.432000e-03f, -1.598000e-03f, -1.767000e-03f, -1.937000e-03f, -2.110000e-03f, -2.283000e-03f, -2.457000e-03f,
    -2.631000e-03f, -2.803000e-03f, -2.974000e-03f, -3.142000e-03f, -3.307000e-03f, -3.467000e-03f, -3.623000e-03f,
    -3.772000e-03f, -3.914000e-03f, -4.049000e-03f, -4.175000e-03f, -4.291000e-03f, -4.396000e-03f, -4.490000e-03f,
    -4.570000e-03f, -4.638000e-03f, -4.691000e-03f, -4.728000e-03f, -4.749000e-03f, -4.752000e-03f, -4.737000e-03f,
    -4.703000e-03f, -4.649000e-03f, -4.574000e-03f, -4.477000e-03f, -4.358000e-03f, -4.215000e-03f, -4.049000e-03f,
    -3.859000e-03f, -3.643000e-03f, -3.402000e-03f, 3.135000e-03f,  2.841000e-03f,  2.522000e-03f,  2.175000e-03f,
    1.801000e-03f,  1.400000e-03f,  9.710000e-04f,  5.160000e-04f,  3.300000e-05f,  -4.760000e-04f, -1.012000e-03f,
    -1.574000e-03f, -2.162000e-03f, -2.774000e-03f, -3.411000e-03f, -4.072000e-03f, -4.756000e-03f, -5.462000e-03f,
    -6.189000e-03f, -6.937000e-03f, -7.703000e-03f, -8.487000e-03f, -9.288000e-03f, -1.010400e-02f, -1.093300e-02f,
    -1.177500e-02f, -1.262800e-02f, -1.348900e-02f, -1.435900e-02f, -1.523400e-02f, -1.611300e-02f, -1.699400e-02f,
    -1.787600e-02f, -1.875700e-02f, -1.963400e-02f, -2.050700e-02f, -2.137200e-02f, -2.222900e-02f, -2.307400e-02f,
    -2.390700e-02f, -2.472500e-02f, -2.552700e-02f, -2.631100e-02f, -2.707400e-02f, -2.781500e-02f, -2.853300e-02f,
    -2.922500e-02f, -2.989000e-02f, -3.052700e-02f, -3.113300e-02f, -3.170700e-02f, -3.224800e-02f, -3.275500e-02f,
    -3.322600e-02f, -3.366000e-02f, -3.405600e-02f, -3.441300e-02f, -3.473000e-02f, -3.500700e-02f, -3.524200e-02f,
    -3.543500e-02f, -3.558600e-02f, -3.569400e-02f, -3.575900e-02f, 3.578100e-02f,  3.575900e-02f,  3.569400e-02f,
    3.558600e-02f,  3.543500e-02f,  3.524200e-02f,  3.500700e-02f,  3.473000e-02f,  3.441300e-02f,  3.405600e-02f,
    3.366000e-02f,  3.322600e-02f,  3.275500e-02f,  3.224800e-02f,  3.170700e-02f,  3.113300e-02f,  3.052700e-02f,
    2.989000e-02f,  2.922500e-02f,  2.853300e-02f,  2.781500e-02f,  2.707400e-02f,  2.631100e-02f,  2.552700e-02f,
    2.472500e-02f,  2.390700e-02f,  2.307400e-02f,  2.222900e-02f,  2.137200e-02f,  2.050700e-02f,  1.963400e-02f,
    1.875700e-02f,  1.787600e-02f,  1.699400e-02f,  1.611300e-02f,  1.523400e-02f,  1.435900e-02f,  1.348900e-02f,
    1.262800e-02f,  1.177500e-02f,  1.093300e-02f,  1.010400e-02f,  9.288000e-03f,  8.487000e-03f,  7.703000e-03f,
    6.937000e-03f,  6.189000e-03f,  5.462000e-03f,  4.756000e-03f,  4.072000e-03f,  3.411000e-03f,  2.774000e-03f,
    2.162000e-03f,  1.574000e-03f,  1.012000e-03f,  4.760000e-04f,  -3.300000e-05f, -5.160000e-04f, -9.710000e-04f,
    -1.400000e-03f, -1.801000e-03f, -2.175000e-03f, -2.522000e-03f, -2.841000e-03f, 3.135000e-03f,  3.402000e-03f,
    3.643000e-03f,  3.859000e-03f,  4.049000e-03f,  4.215000e-03f,  4.358000e-03f,  4.477000e-03f,  4.574000e-03f,
    4.649000e-03f,  4.703000e-03f,  4.737000e-03f,  4.752000e-03f,  4.749000e-03f,  4.728000e-03f,  4.691000e-03f,
    4.638000e-03f,  4.570000e-03f,  4.490000e-03f,  4.396000e-03f,  4.291000e-03f,  4.175000e-03f,  4.049000e-03f,
    3.914000e-03f,  3.772000e-03f,  3.623000e-03f,  3.467000e-03f,  3.307000e-03f,  3.142000e-03f,  2.974000e-03f,
    2.803000e-03f,  2.631000e-03f,  2.457000e-03f,  2.283000e-03f,  2.110000e-03f,  1.937000e-03f,  1.767000e-03f,
    1.598000e-03f,  1.432000e-03f,  1.270000e-03f,  1.111000e-03f,  9.570000e-04f,  8.070000e-04f,  6.620000e-04f,
    5.220000e-04f,  3.880000e-04f,  2.600000e-04f,  1.370000e-04f,  2.100000e-05f,  -8.800000e-05f, -1.920000e-04f,
    -2.880000e-04f, -3.790000e-04f, -4.630000e-04f, -5.390000e-04f, -6.100000e-04f, -6.740000e-04f, -7.320000e-04f,
    -7.840000e-04f, -8.290000e-04f, -8.690000e-04f, -9.030000e-04f, -9.310000e-04f, -9.540000e-04f, 9.710000e-04f,
    9.840000e-04f,  9.920000e-04f,  9.950000e-04f,  9.940000e-04f,  9.890000e-04f,  9.810000e-04f,  9.690000e-04f,
    9.540000e-04f,  9.360000e-04f,  9.150000e-04f,  8.920000e-04f,  8.660000e-04f,  8.390000e-04f,  8.100000e-04f,
    7.790000e-04f,  7.470000e-04f,  7.140000e-04f,  6.810000e-04f,  6.470000e-04f,  6.120000e-04f,  5.770000e-04f,
    5.420000e-04f,  5.070000e-04f,  4.730000e-04f,  4.380000e-04f,  4.040000e-04f,  3.710000e-04f,  3.390000e-04f,
    3.080000e-04f,  2.770000e-04f,  2.470000e-04f,  2.190000e-04f,  1.910000e-04f,  1.650000e-04f,  1.400000e-04f,
    1.160000e-04f,  9.400000e-05f,  7.300000e-05f,  5.300000e-05f,  3.400000e-05f,  1.700000e-05f,  1.000000e-06f,
    -1.400000e-05f, -2.700000e-05f, -4.000000e-05f, -5.100000e-05f, -6.100000e-05f, -7.000000e-05f, -7.800000e-05f,
    -8.400000e-05f, -9.000000e-05f, -9.500000e-05f, -9.900000e-05f, -1.030000e-04f, -1.050000e-04f, -1.070000e-04f,
    -1.080000e-04f, -1.090000e-04f, -1.090000e-04f, -1.080000e-04f, -1.070000e-04f, -1.060000e-04f, -1.040000e-04f,
    1.020000e-04f,  9.900000e-05f,  9.600000e-05f,  9.300000e-05f,  9.100000e-05f,  8.700000e-05f,  8.400000e-05f,
    8.100000e-05f,  7.700000e-05f,  7.300000e-05f,  7.000000e-05f,  6.600000e-05f,  6.300000e-05f,  6.000000e-05f,
    5.600000e-05f,  5.300000e-05f,  5.000000e-05f,  4.600000e-05f,  4.300000e-05f,  4.100000e-05f,  3.800000e-05f,
    3.500000e-05f,  3.200000e-05f,  3.000000e-05f,  2.800000e-05f,  2.500000e-05f,  2.300000e-05f,  2.100000e-05f,
    2.000000e-05f,  1.800000e-05f,  1.700000e-05f,  1.500000e-05f,  1.400000e-05f,  1.200000e-05f,  1.100000e-05f,
    1.000000e-05f,  9.000000e-06f,  8.000000e-06f,  8.000000e-06f,  7.000000e-06f,  6.000000e-06f,  5.000000e-06f,
    5.000000e-06f,  4.000000e-06f,  4.000000e-06f,  3.000000e-06f,  3.000000e-06f,  3.000000e-06f,  2.000000e-06f,
    2.000000e-06f,  2.000000e-06f,  2.000000e-06f,  1.000000e-06f,  1.000000e-06f,  1.000000e-06f,  1.000000e-06f,
    1.000000e-06f,  1.000000e-06f,  0.000000e+00f,  0.000000e+00f,  0.000000e+00f,  0.000000e+00f,  0.000000e+00f,
    0.000000e+00f
};

// Huffman encoder tables (generated from minimp3 CC0 decoder trees)
// See gen_huff_enc.c for the generator source.
static const uint8_t  mp3enc_linbits[32]   = { 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0,  0,
                                               1, 2, 3, 4, 6, 8, 10, 13, 4, 5, 6, 7, 8, 9, 11, 13 };
static const uint16_t mp3enc_hcode_1[2][2] = {
    { 0x1, 0x1 },
    { 0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_1[2][2] = {
    { 1, 2 },
    { 3, 3 }
};
static const uint16_t mp3enc_hcode_2[3][3] = {
    { 0x1, 0x3, 0x3 },
    { 0x2, 0x1, 0x2 },
    { 0x1, 0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_2[3][3] = {
    { 1, 3, 5 },
    { 3, 3, 5 },
    { 6, 5, 6 }
};
static const uint16_t mp3enc_hcode_3[3][3] = {
    { 0x3, 0x1, 0x3 },
    { 0x2, 0x1, 0x2 },
    { 0x1, 0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_3[3][3] = {
    { 2, 3, 5 },
    { 2, 2, 5 },
    { 6, 5, 6 }
};
static const uint16_t mp3enc_hcode_5[4][4] = {
    { 0x1, 0x3, 0x7, 0x6 },
    { 0x2, 0x1, 0x5, 0x1 },
    { 0x6, 0x4, 0x7, 0x1 },
    { 0x5, 0x4, 0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_5[4][4] = {
    { 1, 3, 6, 7 },
    { 3, 3, 6, 6 },
    { 6, 6, 7, 7 },
    { 7, 7, 8, 8 }
};
static const uint16_t mp3enc_hcode_6[4][4] = {
    { 0x7, 0x6, 0x5, 0x3 },
    { 0x3, 0x2, 0x4, 0x3 },
    { 0x5, 0x3, 0x4, 0x2 },
    { 0x1, 0x2, 0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_6[4][4] = {
    { 3, 3, 4, 6 },
    { 3, 2, 4, 5 },
    { 5, 4, 5, 6 },
    { 7, 5, 6, 7 }
};
static const uint16_t mp3enc_hcode_7[6][6] = {
    { 0x1,  0x3, 0xb,  0xc,  0x7, 0x6 },
    { 0x2,  0x3, 0x4,  0xb,  0x6, 0x4 },
    { 0xa,  0x7, 0xd,  0x12, 0x9, 0x5 },
    { 0x13, 0xa, 0x11, 0xf,  0xe, 0x3 },
    { 0x10, 0x5, 0x8,  0xb,  0x3, 0x2 },
    { 0xa,  0x3, 0x4,  0x2,  0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_7[6][6] = {
    { 1, 3, 6, 7, 7,  8  },
    { 3, 4, 5, 7, 7,  8  },
    { 6, 6, 7, 8, 8,  9  },
    { 8, 7, 8, 9, 9,  10 },
    { 8, 7, 8, 9, 9,  10 },
    { 9, 8, 9, 9, 10, 10 }
};
static const uint16_t mp3enc_hcode_8[6][6] = {
    { 0x3,  0x5,  0x7, 0x13, 0xd, 0xc },
    { 0x4,  0x1,  0x3, 0x11, 0x5, 0x4 },
    { 0x6,  0x2,  0x5, 0xf,  0x8, 0x4 },
    { 0x12, 0x10, 0xe, 0xd,  0xb, 0x1 },
    { 0xc,  0x9,  0x7, 0xa,  0x5, 0x1 },
    { 0x5,  0x3,  0x3, 0x4,  0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_8[6][6] = {
    { 2, 3, 6, 8,  8,  9  },
    { 3, 2, 4, 8,  7,  8  },
    { 6, 4, 6, 8,  8,  9  },
    { 8, 8, 8, 9,  9,  9  },
    { 8, 8, 8, 9,  10, 11 },
    { 9, 8, 9, 10, 10, 11 }
};
static const uint16_t mp3enc_hcode_9[6][6] = {
    { 0x7, 0x6, 0x7, 0xf, 0xb, 0xe },
    { 0x5, 0x4, 0x6, 0x6, 0x7, 0x4 },
    { 0x9, 0x5, 0x8, 0x9, 0x9, 0x6 },
    { 0xe, 0x5, 0x8, 0xa, 0x6, 0x2 },
    { 0xf, 0x6, 0x8, 0x5, 0x4, 0x6 },
    { 0x7, 0x7, 0x5, 0x1, 0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_9[6][6] = {
    { 3, 3, 4, 6, 7, 8 },
    { 3, 3, 4, 5, 6, 7 },
    { 5, 4, 5, 6, 7, 8 },
    { 6, 5, 6, 7, 7, 8 },
    { 8, 6, 7, 7, 8, 9 },
    { 9, 8, 8, 8, 9, 9 }
};
static const uint16_t mp3enc_hcode_10[8][8] = {
    { 0x1,  0x3,  0xb,  0xe,  0x14, 0x1f, 0xe,  0x9 },
    { 0x2,  0x3,  0x9,  0xd,  0x13, 0x16, 0xd,  0x8 },
    { 0xa,  0x8,  0xf,  0x16, 0x21, 0x29, 0xa,  0x7 },
    { 0x17, 0xc,  0x15, 0x22, 0x2f, 0x1a, 0xb,  0x8 },
    { 0x23, 0x12, 0x20, 0x2e, 0x1b, 0x15, 0x10, 0x4 },
    { 0x1e, 0x15, 0x28, 0x17, 0x16, 0x14, 0x6,  0x4 },
    { 0xc,  0xc,  0x13, 0x12, 0x9,  0x5,  0x5,  0x2 },
    { 0x11, 0x7,  0x6,  0x7,  0x3,  0x3,  0x1,  0x0 }
};
static const uint8_t mp3enc_hlen_10[8][8] = {
    { 1,  3, 6,  7,  8,  9,  8,  9  },
    { 3,  4, 6,  7,  8,  9,  8,  8  },
    { 6,  6, 7,  8,  9,  10, 9,  9  },
    { 8,  7, 8,  9,  10, 10, 10, 10 },
    { 9,  8, 9,  10, 10, 11, 10, 10 },
    { 9,  9, 10, 10, 10, 11, 10, 11 },
    { 9,  8, 9,  9,  10, 10, 11, 11 },
    { 10, 8, 9,  10, 10, 11, 11, 11 }
};
static const uint16_t mp3enc_hcode_11[8][8] = {
    { 0x3,  0x5,  0xb,  0x19, 0x23, 0x1c, 0xe, 0xb },
    { 0x4,  0x3,  0x7,  0xb,  0x21, 0x1a, 0xc, 0x4 },
    { 0xa,  0x4,  0xd,  0x13, 0x1f, 0x20, 0x9, 0x6 },
    { 0x18, 0xa,  0x12, 0x3b, 0x3a, 0x13, 0xd, 0x6 },
    { 0x22, 0x20, 0x1e, 0x1b, 0x1e, 0x11, 0xe, 0x6 },
    { 0x21, 0x11, 0x1f, 0x12, 0x10, 0xf,  0x9, 0x3 },
    { 0x15, 0xb,  0x14, 0xc,  0x7,  0x8,  0x4, 0x2 },
    { 0xf,  0xa,  0x5,  0x5,  0x5,  0xe,  0x1, 0x0 }
};
static const uint8_t mp3enc_hlen_11[8][8] = {
    { 2, 3, 5, 7,  8,  8,  8,  8  },
    { 3, 3, 5, 6,  8,  8,  7,  7  },
    { 5, 4, 6, 7,  8,  9,  7,  8  },
    { 7, 6, 7, 9,  9,  10, 8,  9  },
    { 8, 8, 8, 8,  9,  10, 9,  10 },
    { 9, 8, 9, 10, 10, 11, 10, 10 },
    { 8, 7, 8, 8,  9,  10, 10, 10 },
    { 9, 8, 8, 9,  10, 11, 10, 10 }
};
static const uint16_t mp3enc_hcode_12[8][8] = {
    { 0x9,  0x7,  0x11, 0x11, 0x20, 0x28, 0x1b, 0x1b },
    { 0x6,  0x5,  0x7,  0xa,  0xd,  0x11, 0xc,  0xc  },
    { 0x10, 0x6,  0xb,  0xf,  0x16, 0x1f, 0xb,  0x8  },
    { 0x21, 0x9,  0xe,  0xc,  0x13, 0x1d, 0xf,  0xc  },
    { 0x29, 0x17, 0x15, 0x12, 0x12, 0x11, 0xa,  0x6  },
    { 0x27, 0x10, 0x1e, 0x1c, 0x10, 0xd,  0x7,  0x3  },
    { 0x26, 0x1a, 0xa,  0xe,  0x9,  0x4,  0x4,  0x1  },
    { 0x1a, 0xb,  0x7,  0x5,  0x5,  0x2,  0x1,  0x0  }
};
static const uint8_t mp3enc_hlen_12[8][8] = {
    { 4, 3, 5, 6, 7, 8, 8,  9  },
    { 3, 3, 4, 5, 6, 7, 7,  8  },
    { 5, 4, 5, 6, 7, 8, 7,  8  },
    { 7, 5, 6, 6, 7, 8, 8,  9  },
    { 8, 7, 7, 7, 8, 8, 8,  9  },
    { 9, 7, 8, 8, 8, 9, 9,  9  },
    { 9, 8, 7, 8, 8, 8, 9,  9  },
    { 9, 8, 8, 8, 9, 9, 10, 10 }
};
static const uint16_t mp3enc_hcode_13[16][16] = {
    { 0x1,  0x3,  0xf,  0x16, 0x23, 0x3a, 0x2f, 0x48, 0x2b, 0x35, 0x23, 0x35, 0x22, 0x2d, 0x30, 0x10 },
    { 0x5,  0x4,  0xd,  0x14, 0x10, 0x1b, 0x2d, 0x22, 0x14, 0x19, 0x21, 0x19, 0x20, 0x15, 0x17, 0xf  },
    { 0xe,  0xc,  0x17, 0x25, 0x3c, 0x32, 0x4e, 0x38, 0x1e, 0x29, 0x1f, 0x17, 0x1c, 0x22, 0x14, 0x11 },
    { 0x15, 0x13, 0x24, 0x3d, 0x39, 0x60, 0x4a, 0x5f, 0x2c, 0x25, 0x39, 0x26, 0x27, 0x40, 0x27, 0x1b },
    { 0x22, 0x1f, 0x3b, 0x38, 0x61, 0x4c, 0x73, 0x5c, 0x37, 0x2c, 0x2a, 0x46, 0x31, 0x38, 0x24, 0x19 },
    { 0x33, 0x1a, 0x31, 0x4f, 0x4b, 0x46, 0x5e, 0x55, 0x4e, 0x3b, 0x52, 0x3c, 0x4b, 0x32, 0x23, 0x14 },
    { 0x2e, 0x2c, 0x4d, 0x49, 0x72, 0x5d, 0x5a, 0x5b, 0x48, 0x36, 0x48, 0x33, 0x1e, 0x31, 0x35, 0x1d },
    { 0x47, 0x21, 0x41, 0x40, 0x5b, 0x54, 0x4f, 0x5a, 0x57, 0x51, 0x50, 0x24, 0x34, 0x2d, 0x15, 0xb  },
    { 0x2a, 0x1f, 0x1d, 0x2b, 0x36, 0x4d, 0x45, 0x56, 0x4e, 0x42, 0x2f, 0x37, 0x30, 0x1f, 0x10, 0x11 },
    { 0x34, 0x18, 0x28, 0x4c, 0x49, 0x3a, 0x53, 0x49, 0x3d, 0x4c, 0x3a, 0x1a, 0x28, 0x13, 0x17, 0xc  },
    { 0x44, 0x20, 0x1e, 0x38, 0x37, 0x4f, 0x47, 0x4d, 0x2e, 0x39, 0x37, 0x22, 0x34, 0xc,  0xd,  0x10 },
    { 0x34, 0x18, 0x28, 0x25, 0x29, 0x1d, 0x32, 0x41, 0x36, 0x36, 0x15, 0x17, 0x1c, 0xf,  0xa,  0x8  },
    { 0x43, 0x1f, 0x1b, 0x1a, 0x30, 0x4a, 0x3b, 0x33, 0x25, 0x25, 0x16, 0x1b, 0x12, 0xa,  0x6,  0x1  },
    { 0x2c, 0x23, 0x21, 0x1f, 0x35, 0x31, 0x26, 0x2c, 0x1e, 0x12, 0x1a, 0xe,  0x11, 0x7,  0x1,  0x1  },
    { 0x2b, 0x16, 0x2a, 0x19, 0x17, 0x29, 0x24, 0x2b, 0x14, 0x27, 0x26, 0x9,  0x9,  0x6,  0x4,  0x0  },
    { 0x13, 0xe,  0x10, 0xe,  0x18, 0x11, 0xf,  0x2a, 0x10, 0xb,  0x16, 0x7,  0x5,  0x3,  0x2,  0x1  }
};
static const uint8_t mp3enc_hlen_13[16][16] = {
    { 1,  3,  6,  7,  8,  9,  9,  10, 9,  10, 10, 11, 11, 12, 13, 12 },
    { 4,  4,  6,  7,  7,  8,  9,  9,  8,  9,  10, 10, 11, 11, 12, 12 },
    { 6,  6,  7,  8,  9,  9,  10, 10, 9,  10, 10, 10, 11, 12, 12, 13 },
    { 7,  7,  8,  9,  9,  10, 10, 11, 10, 10, 11, 11, 12, 13, 13, 14 },
    { 8,  8,  9,  9,  10, 10, 11, 11, 10, 11, 11, 12, 12, 13, 13, 14 },
    { 9,  8,  9,  10, 10, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14 },
    { 9,  9,  10, 10, 11, 11, 11, 12, 11, 11, 12, 12, 12, 14, 15, 15 },
    { 10, 9,  10, 10, 11, 11, 11, 12, 12, 13, 13, 12, 13, 14, 14, 14 },
    { 9,  9,  9,  10, 10, 11, 11, 12, 12, 12, 12, 13, 14, 14, 14, 15 },
    { 10, 9,  10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 17, 15 },
    { 11, 10, 10, 11, 11, 12, 12, 13, 12, 13, 14, 13, 15, 14, 15, 16 },
    { 11, 10, 11, 11, 12, 11, 12, 13, 13, 14, 13, 14, 15, 15, 15, 16 },
    { 12, 11, 11, 11, 12, 13, 13, 13, 13, 14, 14, 15, 15, 16, 15, 19 },
    { 12, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 16, 15, 17, 18 },
    { 13, 12, 13, 13, 13, 14, 14, 16, 15, 16, 16, 15, 16, 16, 16, 19 },
    { 13, 12, 13, 13, 14, 14, 14, 16, 15, 15, 17, 16, 16, 16, 16, 16 }
};
static const uint16_t mp3enc_hcode_15[16][16] = {
    { 0x7,  0xd,  0x13, 0x1d, 0x34, 0x4d, 0x7d, 0x6d, 0x5a, 0x47, 0x6d, 0x56, 0x76, 0x5b, 0x7b, 0x47 },
    { 0xc,  0x5,  0x11, 0x1c, 0x16, 0x25, 0x20, 0x35, 0x2b, 0x22, 0x35, 0x2a, 0x44, 0x2c, 0x3c, 0x25 },
    { 0x12, 0x10, 0xf,  0x19, 0x2a, 0x23, 0x3c, 0x31, 0x29, 0x43, 0x33, 0x28, 0x1e, 0x27, 0x3a, 0x22 },
    { 0x35, 0x1b, 0x18, 0x2b, 0x28, 0x42, 0x38, 0x5e, 0x4d, 0x3c, 0x2f, 0x25, 0x37, 0x26, 0x35, 0x1e },
    { 0x2f, 0x2e, 0x29, 0x27, 0x43, 0x3a, 0x32, 0x58, 0x49, 0x3a, 0x5a, 0x46, 0x32, 0x22, 0x2f, 0x1c },
    { 0x4c, 0x24, 0x22, 0x3f, 0x39, 0x34, 0x5c, 0x4b, 0x3f, 0x31, 0x52, 0x40, 0x2e, 0x3f, 0x2b, 0x14 },
    { 0x7c, 0x3d, 0x3b, 0x37, 0x5f, 0x5b, 0x4e, 0x42, 0x38, 0x58, 0x3a, 0x34, 0x4a, 0x34, 0x20, 0x11 },
    { 0x6c, 0x33, 0x30, 0x5d, 0x4f, 0x4a, 0x41, 0x7a, 0x5c, 0x4c, 0x39, 0x2b, 0x41, 0x2d, 0x16, 0x1a },
    { 0x59, 0x2a, 0x28, 0x4c, 0x48, 0x3e, 0x37, 0x5b, 0x4d, 0x43, 0x30, 0x46, 0x31, 0x1f, 0x25, 0x15 },
    { 0x7b, 0x46, 0x40, 0x3b, 0x39, 0x30, 0x57, 0x49, 0x42, 0x6a, 0x48, 0x37, 0x27, 0x34, 0x18, 0x10 },
    { 0x6c, 0x34, 0x32, 0x5d, 0x59, 0x4f, 0x47, 0x38, 0x2f, 0x47, 0x39, 0x2a, 0x18, 0x1c, 0x11, 0xa  },
    { 0x77, 0x53, 0x4e, 0x48, 0x45, 0x3f, 0x33, 0x2a, 0x43, 0x36, 0x29, 0x19, 0x10, 0x13, 0xc,  0x6  },
    { 0x6b, 0x41, 0x3e, 0x36, 0x31, 0x5a, 0x49, 0x40, 0x30, 0x26, 0x17, 0x1d, 0x16, 0xe,  0xf,  0x8  },
    { 0x51, 0x29, 0x50, 0x4b, 0x42, 0x3e, 0x33, 0x2c, 0x35, 0x27, 0x1b, 0x12, 0xd,  0x8,  0xa,  0x6  },
    { 0x7a, 0x3b, 0x38, 0x32, 0x2e, 0x28, 0x46, 0x15, 0x24, 0x17, 0x3e, 0xb,  0xe,  0x9,  0x2,  0x2  },
    { 0x3f, 0x24, 0x21, 0x1d, 0x1b, 0x26, 0x1e, 0x19, 0x14, 0xf,  0x9,  0xb,  0x7,  0x3,  0x1,  0x0  }
};
static const uint8_t mp3enc_hlen_15[16][16] = {
    { 3,  4,  5,  6,  7,  8,  9,  9,  9,  9,  10, 10, 11, 11, 12, 12 },
    { 4,  3,  5,  6,  6,  7,  7,  8,  8,  8,  9,  9,  10, 10, 11, 11 },
    { 5,  5,  5,  6,  7,  7,  8,  8,  8,  9,  9,  9,  9,  10, 11, 11 },
    { 7,  6,  6,  7,  7,  8,  8,  9,  9,  9,  9,  9,  10, 10, 11, 11 },
    { 7,  7,  7,  7,  8,  8,  8,  9,  9,  9,  10, 10, 10, 10, 11, 11 },
    { 8,  7,  7,  8,  8,  8,  9,  9,  9,  9,  10, 10, 10, 11, 11, 11 },
    { 9,  8,  8,  8,  9,  9,  9,  9,  9,  10, 10, 10, 11, 11, 11, 11 },
    { 9,  8,  8,  9,  9,  9,  9,  10, 10, 10, 10, 10, 11, 11, 11, 12 },
    { 9,  8,  8,  9,  9,  9,  9,  10, 10, 10, 10, 11, 11, 11, 12, 12 },
    { 10, 9,  9,  9,  9,  9,  10, 10, 10, 11, 11, 11, 11, 12, 12, 12 },
    { 10, 9,  9,  10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12 },
    { 11, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12 },
    { 11, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 13, 13 },
    { 11, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13 },
    { 12, 11, 11, 11, 11, 11, 12, 11, 12, 12, 13, 12, 13, 13, 12, 13 },
    { 13, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13 }
};
static const uint16_t mp3enc_hcode_16[16][16] = {
    { 0x1,   0x3,  0xf,  0x2d,  0x4b,  0x42,  0x6f,  0x62,  0x55,  0x9a,  0x8b,  0xf3,  0xca,  0x2eb, 0x179, 0xc  },
    { 0x5,   0x4,  0xd,  0x15,  0x24,  0x1e,  0x36,  0x30,  0x54,  0x4c,  0x81,  0x78,  0xe0,  0xd3,  0x171, 0xa  },
    { 0xe,   0xc,  0x17, 0x27,  0x44,  0x3b,  0x34,  0x5b,  0x51,  0x49,  0x43,  0x76,  0xde,  0xd2,  0x66,  0x7  },
    { 0x2c,  0x14, 0x26, 0x45,  0x41,  0x38,  0x64,  0x58,  0x9f,  0x8d,  0x7d,  0x73,  0xda,  0xd0,  0xbb,  0xb  },
    { 0x4a,  0x23, 0x43, 0x40,  0x73,  0x66,  0xb8,  0xa5,  0x9c,  0x83,  0xf7,  0xe3,  0xd8,  0x172, 0x2d6, 0xa  },
    { 0x3f,  0x3e, 0x3a, 0x72,  0x65,  0xb9,  0xb2,  0x9d,  0x8f,  0x100, 0xe9,  0xdf,  0x185, 0x17b, 0x2d2, 0x11 },
    { 0x6e,  0x35, 0x67, 0x63,  0xb3,  0xad,  0xa0,  0x94,  0x104, 0xf5,  0xe5,  0x18c, 0x182, 0x2de, 0x166, 0xb  },
    { 0x5d,  0x2f, 0x5a, 0x57,  0xa4,  0x109, 0x85,  0x105, 0xf9,  0x1aa, 0xdb,  0x2ea, 0x17d, 0x2d3, 0x2c7, 0x9  },
    { 0xac,  0x53, 0xa1, 0x9e,  0x9b,  0x8e,  0x101, 0xf8,  0x1ab, 0x196, 0x189, 0x2e6, 0x16c, 0x2ca, 0x2c5, 0xd  },
    { 0x95,  0x4b, 0x48, 0x8c,  0x108, 0xfd,  0xf4,  0x197, 0x191, 0x18a, 0x2e7, 0x2e0, 0x378, 0x6c7, 0x362, 0xc  },
    { 0x8a,  0x44, 0x7f, 0xfc,  0xf6,  0xe8,  0xe4,  0x18d, 0x188, 0x180, 0x2e1, 0x2d1, 0x1bb, 0x373, 0x6c6, 0xa  },
    { 0xf2,  0x77, 0x75, 0xd4,  0xe2,  0x190, 0xd9,  0x174, 0x17f, 0x2df, 0x2d0, 0x2c8, 0x2c3, 0x36d, 0x367, 0x7  },
    { 0xe1,  0xc9, 0x6e, 0xc7,  0x18b, 0x184, 0x181, 0x17c, 0x2d7, 0x167, 0x375, 0x2c2, 0x1b8, 0x36c, 0xd82, 0x5  },
    { 0xc3,  0x6b, 0xd1, 0x183, 0x17e, 0x17a, 0x16e, 0x379, 0x2c9, 0x2c6, 0x372, 0xdf,  0x1b5, 0xd83, 0x366, 0x3  },
    { 0x178, 0xcf, 0xce, 0x16d, 0x16a, 0x1bd, 0x2cb, 0x374, 0x2c4, 0x160, 0x1b7, 0x1b4, 0x6c0, 0x361, 0x1b2, 0x1  },
    { 0x11,  0x9,  0x10, 0x1a,  0x9,   0x10,  0xa,   0x8,   0x7,   0xb,   0x4,   0x6,   0x4,   0x2,   0x0,   0x3  }
};
static const uint8_t mp3enc_hlen_16[16][16] = {
    { 1,  3,  6,  8,  9,  9,  10, 10, 10, 11, 11, 12, 12, 14, 13, 9  },
    { 4,  4,  6,  7,  8,  8,  9,  9,  10, 10, 11, 11, 12, 12, 13, 8  },
    { 6,  6,  7,  8,  9,  9,  9,  10, 10, 10, 10, 11, 12, 12, 11, 8  },
    { 8,  7,  8,  9,  9,  9,  10, 10, 11, 11, 11, 11, 12, 12, 12, 9  },
    { 9,  8,  9,  9,  10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 14, 9  },
    { 9,  9,  9,  10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 10 },
    { 10, 9,  10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 14, 13, 10 },
    { 10, 9,  10, 10, 11, 12, 11, 12, 12, 13, 12, 14, 13, 14, 14, 10 },
    { 11, 10, 11, 11, 11, 11, 12, 12, 13, 13, 13, 14, 13, 14, 14, 11 },
    { 11, 10, 10, 11, 12, 12, 12, 13, 13, 13, 14, 14, 15, 16, 15, 11 },
    { 11, 10, 11, 12, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 16, 11 },
    { 12, 11, 11, 12, 12, 13, 12, 13, 13, 14, 14, 14, 14, 15, 15, 11 },
    { 12, 12, 11, 12, 13, 13, 13, 13, 14, 13, 15, 14, 14, 15, 17, 11 },
    { 12, 11, 12, 13, 13, 13, 13, 15, 14, 14, 15, 13, 14, 17, 15, 11 },
    { 13, 12, 12, 13, 13, 14, 14, 15, 14, 13, 14, 14, 16, 15, 14, 11 },
    { 9,  8,  9,  10, 9,  10, 10, 10, 10, 11, 10, 11, 11, 11, 11, 8  }
};
static const uint16_t mp3enc_hcode_24[16][16] = {
    { 0xf,   0xe,   0x2f,  0x51,  0x93,  0x107, 0xf9,  0x1b3, 0x1ab, 0x14f, 0x29c, 0x28c, 0x288, 0x26c, 0x409, 0x2b },
    { 0xd,   0xc,   0x16,  0x27,  0x48,  0x42,  0x7b,  0x73,  0xd4,  0xc7,  0xb8,  0x15a, 0x142, 0x12c, 0x118, 0x14 },
    { 0x2e,  0x15,  0x29,  0x4b,  0x45,  0x81,  0x79,  0x6f,  0xd0,  0xc5,  0xb7,  0xab,  0x13c, 0x128, 0x116, 0x13 },
    { 0x50,  0x26,  0x4a,  0x46,  0x87,  0x7e,  0x75,  0x6d,  0xcd,  0xbf,  0xb3,  0xa8,  0x138, 0x126, 0x112, 0x11 },
    { 0x92,  0x47,  0x44,  0x86,  0x7f,  0x77,  0x71,  0xd3,  0xc9,  0xbd,  0xaf,  0xa4,  0x133, 0x120, 0x10b, 0xf  },
    { 0x106, 0x82,  0x80,  0x7d,  0x76,  0x72,  0xd7,  0xcb,  0xc1,  0xb5,  0x158, 0x13e, 0x12e, 0x11a, 0x108, 0xd  },
    { 0xf8,  0x7a,  0x78,  0x74,  0x70,  0xd6,  0xce,  0xc4,  0xba,  0xae,  0x14b, 0x135, 0x124, 0x111, 0x103, 0xb  },
    { 0x1b2, 0xd8,  0xdd,  0xdc,  0xd2,  0xca,  0xc3,  0xbb,  0xb1,  0x14d, 0x13a, 0x12b, 0x11c, 0x10a, 0x17e, 0x9  },
    { 0x1aa, 0xd1,  0xcf,  0xcc,  0xc8,  0xc0,  0xb9,  0x161, 0xa9,  0x141, 0x130, 0x11f, 0x10d, 0x203, 0x17a, 0x7  },
    { 0x29d, 0xc6,  0xc2,  0xbe,  0xbc,  0xb4,  0x15b, 0x14c, 0x140, 0x131, 0x122, 0x114, 0x105, 0x17c, 0x174, 0x6  },
    { 0x28d, 0x147, 0xb6,  0xb2,  0x160, 0x155, 0x14a, 0x139, 0x12f, 0x121, 0x115, 0x107, 0x200, 0x176, 0x16f, 0x4  },
    { 0x289, 0x159, 0x154, 0x145, 0x143, 0x13d, 0x134, 0x12a, 0x11e, 0x113, 0x212, 0x201, 0x178, 0x171, 0x16b, 0x7  },
    { 0x26d, 0x13f, 0x13b, 0x137, 0x132, 0x12d, 0x123, 0x11b, 0x10c, 0x209, 0x17f, 0x177, 0x172, 0x16d, 0x168, 0x5  },
    { 0x205, 0x129, 0x127, 0x125, 0x11d, 0x119, 0x110, 0x213, 0x202, 0x17b, 0x175, 0x170, 0x16c, 0x169, 0x166, 0x3  },
    { 0x408, 0x117, 0x21d, 0x10f, 0x21c, 0x106, 0x208, 0x17d, 0x179, 0x173, 0x16e, 0x16a, 0x167, 0x165, 0x164, 0x1  },
    { 0x58,  0x2a,  0x12,  0x10,  0xe,   0xc,   0xa,   0x11,  0x10,  0xb,   0xa,   0x6,   0x4,   0x2,   0x0,   0x3  }
};
static const uint8_t mp3enc_hlen_24[16][16] = {
    { 4,  4,  6,  7,  8,  9,  9,  10, 10, 10, 11, 11, 11, 11, 12, 8 },
    { 4,  4,  5,  6,  7,  7,  8,  8,  9,  9,  9,  10, 10, 10, 10, 7 },
    { 6,  5,  6,  7,  7,  8,  8,  8,  9,  9,  9,  9,  10, 10, 10, 7 },
    { 7,  6,  7,  7,  8,  8,  8,  8,  9,  9,  9,  9,  10, 10, 10, 7 },
    { 8,  7,  7,  8,  8,  8,  8,  9,  9,  9,  9,  9,  10, 10, 10, 7 },
    { 9,  8,  8,  8,  8,  8,  9,  9,  9,  9,  10, 10, 10, 10, 10, 7 },
    { 9,  8,  8,  8,  8,  9,  9,  9,  9,  9,  10, 10, 10, 10, 10, 7 },
    { 10, 9,  9,  9,  9,  9,  9,  9,  9,  10, 10, 10, 10, 10, 11, 7 },
    { 10, 9,  9,  9,  9,  9,  9,  10, 9,  10, 10, 10, 10, 11, 11, 7 },
    { 11, 9,  9,  9,  9,  9,  10, 10, 10, 10, 10, 10, 10, 11, 11, 7 },
    { 11, 10, 9,  9,  10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 7 },
    { 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 8 },
    { 11, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 8 },
    { 11, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 8 },
    { 12, 10, 11, 10, 11, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 8 },
    { 9,  8,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  4 }
};
static const uint8_t mp3enc_count1a_code[16] = { 1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1 };
static const uint8_t mp3enc_count1a_len[16]  = { 1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6 };
static const uint8_t mp3enc_count1b_code[16] = { 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
static const uint8_t mp3enc_count1b_len[16]  = { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 };
