]> git.sesse.net Git - ffmpeg/blob - libavcodec/g723_1.h
Merge commit 'f1011ea28a4048ddec97794ca3e9901474fe055f'
[ffmpeg] / libavcodec / g723_1.h
1 /*
2  * G.723.1 common header and data tables
3  * Copyright (c) 2006 Benjamin Larsson
4  * Copyright (c) 2010 Mohamed Naufal Basheer
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22
23 /**
24  * @file
25  * G.723.1 types, functions and data tables
26  */
27
28 #ifndef AVCODEC_G723_1_H
29 #define AVCODEC_G723_1_H
30
31 #include <stdint.h>
32
33 #include "libavutil/log.h"
34
35 #define SUBFRAMES       4
36 #define SUBFRAME_LEN    60
37 #define FRAME_LEN       (SUBFRAME_LEN << 2)
38 #define HALF_FRAME_LEN  (FRAME_LEN / 2)
39 #define LPC_FRAME       (HALF_FRAME_LEN + SUBFRAME_LEN)
40 #define LPC_ORDER       10
41 #define LSP_BANDS       3
42 #define LSP_CB_SIZE     256
43 #define PITCH_MIN       18
44 #define PITCH_MAX       (PITCH_MIN + 127)
45 #define PITCH_ORDER     5
46 #define GRID_SIZE       2
47 #define PULSE_MAX       6
48 #define GAIN_LEVELS     24
49 #define COS_TBL_SIZE    512
50
51 /**
52  * Bitexact implementation of 2ab scaled by 1/2^16.
53  *
54  * @param a 32 bit multiplicand
55  * @param b 16 bit multiplier
56  */
57 #define MULL2(a, b) \
58         ((((a) >> 16) * (b) * 2) + (((a) & 0xffff) * (b) >> 15))
59
60 /**
61  * G723.1 frame types
62  */
63 enum FrameType {
64     ACTIVE_FRAME,        ///< Active speech
65     SID_FRAME,           ///< Silence Insertion Descriptor frame
66     UNTRANSMITTED_FRAME
67 };
68
69 /**
70  * G723.1 rate values
71  */
72 enum Rate {
73     RATE_6300,
74     RATE_5300
75 };
76
77 /**
78  * G723.1 unpacked data subframe
79  */
80 typedef struct G723_1_Subframe {
81     int ad_cb_lag;     ///< adaptive codebook lag
82     int ad_cb_gain;
83     int dirac_train;
84     int pulse_sign;
85     int grid_index;
86     int amp_index;
87     int pulse_pos;
88 } G723_1_Subframe;
89
90 /**
91  * Pitch postfilter parameters
92  */
93 typedef struct PPFParam {
94     int     index;    ///< postfilter backward/forward lag
95     int16_t opt_gain; ///< optimal gain
96     int16_t sc_gain;  ///< scaling gain
97 } PPFParam;
98
99 /**
100  * Harmonic filter parameters
101  */
102 typedef struct HFParam {
103     int index;
104     int gain;
105 } HFParam;
106
107 /**
108  * Optimized fixed codebook excitation parameters
109  */
110 typedef struct FCBParam {
111     int min_err;
112     int amp_index;
113     int grid_index;
114     int dirac_train;
115     int pulse_pos[PULSE_MAX];
116     int pulse_sign[PULSE_MAX];
117 } FCBParam;
118
119 typedef struct G723_1_ChannelContext {
120     G723_1_Subframe subframe[4];
121     enum FrameType cur_frame_type;
122     enum FrameType past_frame_type;
123     enum Rate cur_rate;
124     uint8_t lsp_index[LSP_BANDS];
125     int pitch_lag[2];
126     int erased_frames;
127
128     int16_t prev_lsp[LPC_ORDER];
129     int16_t sid_lsp[LPC_ORDER];
130     int16_t prev_excitation[PITCH_MAX];
131     int16_t excitation[PITCH_MAX + FRAME_LEN + 4];
132     int16_t synth_mem[LPC_ORDER];
133     int16_t fir_mem[LPC_ORDER];
134     int     iir_mem[LPC_ORDER];
135
136     int random_seed;
137     int cng_random_seed;
138     int interp_index;
139     int interp_gain;
140     int sid_gain;
141     int cur_gain;
142     int reflection_coef;
143     int pf_gain;                 ///< formant postfilter
144                                  ///< gain scaling unit memory
145     int16_t audio[FRAME_LEN + LPC_ORDER + PITCH_MAX + 4];
146
147     /* encoder */
148     int16_t prev_data[HALF_FRAME_LEN];
149     int16_t prev_weight_sig[PITCH_MAX];
150
151     int16_t hpf_fir_mem;                   ///< highpass filter fir
152     int     hpf_iir_mem;                   ///< and iir memories
153     int16_t perf_fir_mem[LPC_ORDER];       ///< perceptual filter fir
154     int16_t perf_iir_mem[LPC_ORDER];       ///< and iir memories
155
156     int16_t harmonic_mem[PITCH_MAX];
157 } G723_1_ChannelContext;
158
159 typedef struct G723_1_Context {
160     AVClass *class;
161     int postfilter;
162
163     G723_1_ChannelContext ch[2];
164 } G723_1_Context;
165
166
167 /**
168  * Scale vector contents based on the largest of their absolutes.
169  */
170 int ff_g723_1_scale_vector(int16_t *dst, const int16_t *vector, int length);
171
172 /**
173  * Calculate the number of left-shifts required for normalizing the input.
174  *
175  * @param num   input number
176  * @param width width of the input, 16 bits(0) / 32 bits(1)
177  */
178 int ff_g723_1_normalize_bits(int num, int width);
179
180 int ff_g723_1_dot_product(const int16_t *a, const int16_t *b, int length);
181
182 /**
183  * Get delayed contribution from the previous excitation vector.
184  */
185 void ff_g723_1_get_residual(int16_t *residual, int16_t *prev_excitation,
186                             int lag);
187
188 /**
189  * Generate a train of dirac functions with period as pitch lag.
190  */
191 void ff_g723_1_gen_dirac_train(int16_t *buf, int pitch_lag);
192
193
194 /**
195  * Generate adaptive codebook excitation.
196  */
197 void ff_g723_1_gen_acb_excitation(int16_t *vector, int16_t *prev_excitation,
198                                   int pitch_lag, G723_1_Subframe *subfrm,
199                                   enum Rate cur_rate);
200 /**
201  * Quantize LSP frequencies by interpolation and convert them to
202  * the corresponding LPC coefficients.
203  *
204  * @param lpc      buffer for LPC coefficients
205  * @param cur_lsp  the current LSP vector
206  * @param prev_lsp the previous LSP vector
207  */
208 void ff_g723_1_lsp_interpolate(int16_t *lpc, int16_t *cur_lsp,
209                                int16_t *prev_lsp);
210
211 /**
212  * Perform inverse quantization of LSP frequencies.
213  *
214  * @param cur_lsp    the current LSP vector
215  * @param prev_lsp   the previous LSP vector
216  * @param lsp_index  VQ indices
217  * @param bad_frame  bad frame flag
218  */
219 void ff_g723_1_inverse_quant(int16_t *cur_lsp, int16_t *prev_lsp,
220                              uint8_t *lsp_index, int bad_frame);
221
222 static const uint8_t frame_size[4] = { 24, 20, 4, 1 };
223
224 /**
225  * Postfilter gain weighting factors scaled by 2^15
226  */
227 static const int16_t ppf_gain_weight[2] = {0x1800, 0x2000};
228
229 /**
230  * LSP DC component
231  */
232 static const int16_t dc_lsp[LPC_ORDER] = {
233     0x0c3b,
234     0x1271,
235     0x1e0a,
236     0x2a36,
237     0x3630,
238     0x406f,
239     0x4d28,
240     0x56f4,
241     0x638c,
242     0x6c46
243 };
244
245 /* Cosine table scaled by 2^14 */
246 static const int16_t cos_tab[COS_TBL_SIZE + 1] = {
247     16384,  16383,  16379,  16373,  16364,  16353,  16340,  16324,
248     16305,  16284,  16261,  16235,  16207,  16176,  16143,  16107,
249     16069,  16029,  15986,  15941,  15893,  15843,  15791,  15736,
250     15679,  15619,  15557,  15493,  15426,  15357,  15286,  15213,
251     15137,  15059,  14978,  14896,  14811,  14724,  14635,  14543,
252     14449,  14354,  14256,  14155,  14053,  13949,  13842,  13733,
253     13623,  13510,  13395,  13279,  13160,  13039,  12916,  12792,
254     12665,  12537,  12406,  12274,  12140,  12004,  11866,  11727,
255     11585,  11442,  11297,  11151,  11003,  10853,  10702,  10549,
256     10394,  10238,  10080,   9921,   9760,   9598,   9434,   9269,
257      9102,   8935,   8765,   8595,   8423,   8250,   8076,   7900,
258      7723,   7545,   7366,   7186,   7005,   6823,   6639,   6455,
259      6270,   6084,   5897,   5708,   5520,   5330,   5139,   4948,
260      4756,   4563,   4370,   4176,   3981,   3786,   3590,   3393,
261      3196,   2999,   2801,   2603,   2404,   2205,   2006,   1806,
262      1606,   1406,   1205,   1005,    804,    603,    402,    201,
263         0,   -201,   -402,   -603,   -804,  -1005,  -1205,  -1406,
264     -1606,  -1806,  -2006,  -2205,  -2404,  -2603,  -2801,  -2999,
265     -3196,  -3393,  -3590,  -3786,  -3981,  -4176,  -4370,  -4563,
266     -4756,  -4948,  -5139,  -5330,  -5520,  -5708,  -5897,  -6084,
267     -6270,  -6455,  -6639,  -6823,  -7005,  -7186,  -7366,  -7545,
268     -7723,  -7900,  -8076,  -8250,  -8423,  -8595,  -8765,  -8935,
269     -9102,  -9269,  -9434,  -9598,  -9760,  -9921, -10080, -10238,
270    -10394, -10549, -10702, -10853, -11003, -11151, -11297, -11442,
271    -11585, -11727, -11866, -12004, -12140, -12274, -12406, -12537,
272    -12665, -12792, -12916, -13039, -13160, -13279, -13395, -13510,
273    -13623, -13733, -13842, -13949, -14053, -14155, -14256, -14354,
274    -14449, -14543, -14635, -14724, -14811, -14896, -14978, -15059,
275    -15137, -15213, -15286, -15357, -15426, -15493, -15557, -15619,
276    -15679, -15736, -15791, -15843, -15893, -15941, -15986, -16029,
277    -16069, -16107, -16143, -16176, -16207, -16235, -16261, -16284,
278    -16305, -16324, -16340, -16353, -16364, -16373, -16379, -16383,
279    -16384, -16383, -16379, -16373, -16364, -16353, -16340, -16324,
280    -16305, -16284, -16261, -16235, -16207, -16176, -16143, -16107,
281    -16069, -16029, -15986, -15941, -15893, -15843, -15791, -15736,
282    -15679, -15619, -15557, -15493, -15426, -15357, -15286, -15213,
283    -15137, -15059, -14978, -14896, -14811, -14724, -14635, -14543,
284    -14449, -14354, -14256, -14155, -14053, -13949, -13842, -13733,
285    -13623, -13510, -13395, -13279, -13160, -13039, -12916, -12792,
286    -12665, -12537, -12406, -12274, -12140, -12004, -11866, -11727,
287    -11585, -11442, -11297, -11151, -11003, -10853, -10702, -10549,
288    -10394, -10238, -10080,  -9921,  -9760,  -9598,  -9434,  -9269,
289     -9102,  -8935,  -8765,  -8595,  -8423,  -8250,  -8076,  -7900,
290     -7723,  -7545,  -7366,  -7186,  -7005,  -6823,  -6639,  -6455,
291     -6270,  -6084,  -5897,  -5708,  -5520,  -5330,  -5139,  -4948,
292     -4756,  -4563,  -4370,  -4176,  -3981,  -3786,  -3590,  -3393,
293     -3196,  -2999,  -2801,  -2603,  -2404,  -2205,  -2006,  -1806,
294     -1606,  -1406,  -1205,  -1005,   -804,   -603,   -402,   -201,
295         0,    201,    402,    603,    804,   1005,   1205,   1406,
296      1606,   1806,   2006,   2205,   2404,   2603,   2801,   2999,
297      3196,   3393,   3590,   3786,   3981,   4176,   4370,   4563,
298      4756,   4948,   5139,   5330,   5520,   5708,   5897,   6084,
299      6270,   6455,   6639,   6823,   7005,   7186,   7366,   7545,
300      7723,   7900,   8076,   8250,   8423,   8595,   8765,   8935,
301      9102,   9269,   9434,   9598,   9760,   9921,  10080,  10238,
302     10394,  10549,  10702,  10853,  11003,  11151,  11297,  11442,
303     11585,  11727,  11866,  12004,  12140,  12274,  12406,  12537,
304     12665,  12792,  12916,  13039,  13160,  13279,  13395,  13510,
305     13623,  13733,  13842,  13949,  14053,  14155,  14256,  14354,
306     14449,  14543,  14635,  14724,  14811,  14896,  14978,  15059,
307     15137,  15213,  15286,  15357,  15426,  15493,  15557,  15619,
308     15679,  15736,  15791,  15843,  15893,  15941,  15986,  16029,
309     16069,  16107,  16143,  16176,  16207,  16235,  16261,  16284,
310     16305,  16324,  16340,  16353,  16364,  16373,  16379,  16383,
311     16384
312 };
313
314 /**
315  *  LSP VQ tables
316  */
317 static const int16_t lsp_band0[LSP_CB_SIZE][3] = {
318     {    0,      0,      0}, { -270,  -1372,  -1032}, { -541,  -1650,  -1382},
319     { -723,  -2011,  -2213}, { -941,  -1122,  -1942}, { -780,  -1145,  -2454},
320     { -884,  -1309,  -1373}, {-1051,  -1523,  -1766}, {-1083,  -1622,  -2300},
321     { -777,  -1377,  -2147}, { -935,  -1467,  -2763}, { -802,  -1327,  -3471},
322     { -935,  -1959,  -3999}, { -240,    -89,    222}, { -661,   -257,   -160},
323     { -994,   -466,   -419}, { -188,   -164,   -278}, { -342,   -512,   -415},
324     { -607,   -511,   -797}, {   16,     19,   -716}, {  374,    425,   -972},
325     { -346,    245,   -282}, { -265,    506,   -754}, { -620,   -147,   1955},
326     { -742,   -860,   2597}, { -150,   -352,   2704}, {  305,    880,   1954},
327     {  123,    731,   2766}, { -348,    765,   3327}, {  618,    221,   3258},
328     { -178,    -47,   4219}, {  393,   1304,   3842}, {  698,   1702,   4801},
329     {   63,   -584,   1229}, { -215,   -732,   1704}, {  172,   -335,   1909},
330     {   -2,    216,   1797}, {  353,    127,   2205}, {-1208,    188,     11},
331     { -513,    -75,   -683}, { -973,    222,   -646}, { -616,   -843,   -388},
332     { -950,  -1113,   -359}, {-1431,   -623,   -705}, {-1398,  -1063,   -178},
333     {  -45,   -461,     35}, {   -9,   -657,   -216}, {  127,  -1078,     95},
334     { -950,  -1156,    584}, {-1480,  -1494,    449}, { -120,   -705,    516},
335     { -368,   -961,    727}, { -378,   -526,    973}, { -793,   -614,    676},
336     { -801,   -755,   1287}, {-1476,   -340,   1636}, { -505,  -1254,   1543},
337     {-1243,  -1622,   1532}, { -776,  -1477,   -655}, {-1151,  -1296,   -823},
338     {-1153,  -1672,  -1124}, {-1291,  -2003,  -1702}, { -622,  -1283,     57},
339     { -471,  -1611,    509}, {-1060,  -1570,   -139}, { -873,  -2156,   -536},
340     {-1716,  -2021,   -364}, {-2150,  -3218,  -1291}, {-1248,  -1945,  -2904},
341     {-1215,  -2633,  -2855}, {  167,   -244,     84}, {  349,   -412,   -217},
342     {  -40,   -352,    632}, {  227,   -529,    405}, {   68,   -383,   -443},
343     {  167,   -558,   -706}, { -275,   -854,    -14}, { -351,  -1089,   -449},
344     {  341,    -72,   -289}, {  603,   -106,   -474}, {  322,   -219,   -649},
345     {  179,   -317,   -998}, {  450,   -291,   -996}, {  555,    195,   -525},
346     {  784,    272,   -831}, { -148,   -384,   -849}, {   82,   -536,  -1357},
347     {  238,   -172,  -1354}, {  422,   -268,  -1841}, {  297,   -737,  -2079},
348     { -111,   -801,   -598}, {    1,   -668,   -984}, { -131,   -818,  -1299},
349     { -329,   -521,  -1310}, { -151,   -778,  -1834}, {  -93,   -352,  -1746},
350     { -568,   -640,  -1821}, { -509,   -941,  -2183}, {  464,   -815,  -1250},
351     {   79,  -1133,  -1597}, { -184,  -1353,  -2123}, { -196,   -410,  -2427},
352     { -192,   -833,  -2810}, { -259,  -1382,  -3045}, { -217,      4,  -1166},
353     { -800,   -325,  -1219}, { -363,   -830,   -898}, { -661,  -1134,   -960},
354     { -386,   -980,  -1501}, { -627,  -1159,  -1722}, { -903,   -829,   -855},
355     { -685,   -829,  -1313}, {-1065,   -959,  -1405}, {  441,     25,   -847},
356     {  655,    -27,  -1181}, { 1159,   -110,   -705}, {  856,    253,  -1671},
357     {  415,    404,     -1}, {  322,    903,   -398}, {  670,    499,   -292},
358     {  803,    591,   -610}, { 1144,    591,   -814}, {  717,    183,    393},
359     {  857,    381,    106}, {  609,     62,    -27}, {  792,    198,   -325},
360     {  735,    805,     88}, { 1142,    812,     78}, { 1028,    366,   -292},
361     { 1309,    743,   -237}, { 1615,    589,    -79}, { 1010,    639,   -243},
362     {  999,    964,   -311}, { 1500,   1137,   -615}, {  988,    357,    646},
363     { 1227,    667,    683}, { 1164,   1565,    894}, { 1392,   2015,    477},
364     { 1138,    533,    250}, { 1437,    896,    391}, { 1765,   1118,     99},
365     { 1112,   1090,    802}, { 1596,    846,   1134}, {  937,   1161,    279},
366     { 1719,   1254,    683}, { 1338,   1086,     35}, { 1419,   1324,    428},
367     { 1428,   1524,     40}, { 2108,   1594,     89}, { 1015,    544,   1222},
368     { 1121,    925,   1263}, { 1030,   1318,   1485}, { 1295,    789,   1817},
369     { 1323,   1272,   1909}, { 1724,   1237,   1803}, { 1797,   1689,    858},
370     { 2149,   1367,   1301}, { 2302,   1867,    761}, { 2863,   2351,   1053},
371     {   52,    163,    -76}, {  230,    309,   -492}, {  -71,    619,     39},
372     { -218,    856,    499}, { -654,    736,   -207}, { -535,   1259,    155},
373     { -480,   1476,    643}, {  262,   1081,    102}, {  309,   1592,   -182},
374     {  627,   1629,    534}, {  337,    643,    456}, {  758,    670,    713},
375     {  202,   1126,    658}, {  612,   1131,    666}, {  686,   1223,   1136},
376     { -131,    377,    525}, {   42,    708,    907}, {   87,   1488,   1035},
377     {  432,   2117,    904}, {  137,    981,   1332}, { -447,   1014,   1136},
378     { -839,   1793,   1246}, { -559,    297,    198}, { -850,    685,    446},
379     {-1273,    632,    826}, { -401,   -544,    173}, { -753,   -793,    144},
380     { -436,     -9,    772}, { -115,   -243,   1310}, { -670,   -269,    374},
381     {-1027,    -13,    639}, { -887,    -81,   1137}, {-1277,   -455,    158},
382     {-1411,   -720,    736}, {  172,     88,    403}, {  386,    255,    756},
383     { -500,    522,    910}, { -958,    659,   1388}, { -395,    301,   1344},
384     { -356,    768,   1813}, { -613,    841,   2419}, {  445,   -122,    252},
385     {  629,    -87,    723}, {  283,   -253,    870}, {  456,   -116,   1381},
386     {  757,    180,   1059}, {  532,    408,   1509}, {  947,    288,   1806},
387     { 1325,    994,   2524}, {  892,   1219,   3023}, { 1397,   1596,   3406},
388     { 1143,   1552,   2546}, { 1850,   1433,   2710}, {  -10,    134,   1002},
389     {  154,    499,   1323}, {  508,    792,   1117}, {  509,   1340,   1616},
390     {  762,    862,   1608}, {  787,    740,   2320}, {  794,   1727,   1283},
391     {  465,   2108,   1660}, { -120,   1451,   1613}, { -386,   2016,   2169},
392     {  891,   1225,   2050}, {  456,   1480,   2185}, { 1493,   1283,   1209},
393     { 1397,   1636,   1518}, { 1776,   1738,   1552}, { 1572,   1698,   2141},
394     { 1389,   2126,   1271}, { 1959,   2413,   1119}, { 1365,   2892,   1505},
395     { 2206,   1971,   1623}, { 2076,   1950,   2280}, { 1717,   2291,   1867},
396     { 2366,   2515,   1953}, { 2865,   2838,   2522}, { 2535,   3465,   2011},
397     { 3381,   4127,   2638}, {  836,   2667,   2289}, { 1761,   2773,   2337},
398     { 1415,   3325,   2911}, { 2354,   3138,   3126}, { 2659,   4192,   4010},
399     { 1048,   1786,   1818}, { 1242,   2111,   2240}, { 1512,   2079,   2780},
400     { 1573,   2491,   3138}, { 2230,   2377,   2782}, {  416,   1773,   2704},
401     {  725,   2336,   3297}, { 1252,   2373,   3978}, { 2094,   2268,   3568},
402     { 2011,   2712,   4528}, { 1341,   3507,   3876}, { 1216,   3919,   4922},
403     { 1693,   4793,   6012}
404 };
405
406 static const int16_t lsp_band1[LSP_CB_SIZE][3] = {
407     {    0,      0,      0}, {-2114,  -1302,     76}, {-2652,  -1278,  -1368},
408     {-2847,   -828,   -349}, {-3812,  -2190,   -349}, {-3946,   -364,   -449},
409     {-2725,  -4492,  -3607}, {-3495,  -4764,  -1744}, {  -51,   -756,     84},
410     { -153,  -1191,    504}, {  108,  -1418,   1167}, { -835,   -896,    390},
411     { -569,  -1702,     87}, {-1151,  -1818,    933}, {-1826,  -2547,    411},
412     {-1842,  -1818,   1451}, {-2438,  -1611,    781}, {-2747,  -2477,   1311},
413     { -940,   1252,    477}, {-1629,   1688,    602}, {-1202,    617,    280},
414     {-1737,    393,    580}, {-1528,   1077,   1199}, {-2165,   -161,   1408},
415     {-2504,  -1087,   2371}, {-3458,   -175,   1395}, {-1397,    -98,   -843},
416     {-2252,   -177,  -1149}, {-1489,   -726,  -1283}, {-1558,   -265,  -1744},
417     {-1867,   -821,  -1897}, {-2062,  -1516,  -2340}, {-2595,  -1142,  -2861},
418     {  170,     46,   -819}, { -193,   -204,  -1151}, {  326,   -196,  -1532},
419     {  780,    329,   -816}, {  201,    369,  -1243}, {  650,   -209,  -1060},
420     { 1144,    -15,  -1216}, { 1203,   -259,  -1867}, { -890,   -564,  -1430},
421     { -638,   -852,  -1921}, {  177,   -739,  -1358}, { -261,   -526,  -1666},
422     {  206,   -407,  -2255}, {  338,   -526,   -822}, {  421,  -1095,  -1009},
423     {  765,   -607,  -1408}, {  825,  -1295,  -2004}, {  357,   -905,  -1815},
424     {  -58,  -1248,  -1588}, { -596,  -1436,  -2046}, {  -73,  -1159,  -2116},
425     { -115,  -1382,  -2581}, { -160,  -1723,  -1952}, {   -6,  -2196,  -2954},
426     { -649,  -1705,  -2603}, { -617,  -1453,  -3282}, { -949,  -2019,  -3102},
427     { -812,   1544,   1937}, {-1854,    574,   2000}, {-1463,   1140,   2649},
428     {-2683,   1748,   1452}, {-2486,   2241,   2523}, {  783,   1910,   1435},
429     {  581,   2682,   1376}, {  236,   2197,   1885}, { -453,   2943,   2057},
430     { -682,   2178,   2565}, {-1342,   3201,   3328}, { -288,   -184,    262},
431     {  121,   -149,   -183}, {  758,   -412,    206}, { 1038,   -204,    853},
432     { 1577,   -457,    700}, {  937,   -640,   -567}, { 1508,   -528,  -1024},
433     { -225,   -527,   -427}, { -564,  -1095,   -332}, { -742,   -353,   -186},
434     {-1288,   -459,     84}, {-1853,   -484,   -274}, {-1554,   -731,    825},
435     {-2425,   -234,    382}, {-1722,    293,   -271}, {-2515,    425,   -564},
436     {-2599,    818,    464}, { -358,    118,   -375}, { -613,    198,   -874},
437     { -690,    683,   -324}, {-1352,   1155,   -168}, {-1093,    129,   -324},
438     {-1184,    611,   -858}, {  433,    386,   -372}, { -120,    486,   -634},
439     {  234,    851,   -631}, {  602,    128,     46}, { 1099,    410,    159},
440     {  715,   -145,   -424}, { 1198,    -85,   -593}, { 1390,    367,   -358},
441     { 1683,    362,   -964}, { 1711,    622,     45}, { 2033,    833,   -383},
442     { 2890,    549,   -506}, {    7,    401,     52}, {   72,    811,    415},
443     {  566,    668,     41}, {  467,   1218,    130}, {   68,    957,   -187},
444     {  -25,   1649,   -103}, { -661,    260,    214}, { -925,    -94,    612},
445     { -321,   -422,    965}, { -788,   -672,   1783}, {  400,   -673,    779},
446     {  741,   -595,   1635}, { -161,    307,    657}, { -382,    836,    871},
447     { -814,    400,   1223}, {  364,    606,   1247}, {   57,     75,   1571},
448     {  151,    471,   2287}, {  -81,   1021,   1502}, {  227,   1470,   1097},
449     {  658,   1275,   1653}, {  664,   1478,   2377}, {  263,   -127,    444},
450     {  264,     89,    969}, {  794,    171,    576}, {  821,    186,   1226},
451     {  404,    462,    517}, {  339,    918,    794}, { 1280,   1423,    196},
452     { 1453,   2019,    365}, { 1615,   1481,    672}, { 2394,   1708,    508},
453     {  806,   1238,    573}, {  713,   1158,   1078}, { 1285,   1436,   1232},
454     { 1790,   1188,   1141}, {  765,    643,    864}, { 1032,    797,   1279},
455     {  900,    563,   1827}, { 1514,    673,   2312}, { 1544,   1129,   3240},
456     { 1469,   1050,   1594}, { 1945,   1318,   1988}, { 2397,   2026,   2060},
457     { 3538,   2057,   2620}, { 1249,   -118,     74}, { 1727,    194,    421},
458     { 2078,    -50,   -463}, {  970,    688,   -432}, { 1149,    952,   -110},
459     { 1254,   1275,   -651}, { 1386,    929,    401}, { 1960,   1167,    232},
460     {  407,   -752,   -243}, {  859,  -1118,    172}, { -227,   -860,   -992},
461     { -796,  -1175,  -1380}, {    8,  -1282,   -388}, {  353,  -1781,  -1037},
462     { -732,   -397,   -807}, { -853,    -28,  -1342}, {-1229,  -1207,  -1959},
463     {-1015,  -1125,  -2543}, {-1452,  -1791,  -2725}, {-1891,  -2416,  -3269},
464     { -918,  -1629,   -783}, { -580,  -2155,   -698}, {-1097,  -2364,    -96},
465     {-1387,  -1513,      7}, {-1588,  -2076,   -664}, {-1473,  -2740,   -784},
466     {-2378,  -3149,    -56}, {-2856,  -2092,   -169}, {-3391,  -3708,    316},
467     {-1176,   -890,   -614}, {-1944,  -1061,   -800}, { -299,  -1517,  -1000},
468     { -640,  -1850,  -1526}, {-1454,  -1536,  -1233}, {-1890,  -1955,  -1756},
469     {-1086,  -1921,  -2122}, { -750,  -2325,  -2260}, {-1325,  -2413,  -2673},
470     {-1114,  -2542,  -3459}, {-1341,  -2901,  -3963}, {-1160,  -2226,  -1393},
471     {-1001,  -2772,  -1573}, {-1594,  -2641,  -1978}, {-1534,  -3046,  -2624},
472     {-2224,  -2196,   -675}, {-2807,  -3054,  -1102}, {-2008,  -2840,  -1186},
473     {-1980,  -3332,  -1695}, {-1715,  -3562,   -505}, {-2527,  -4000,  -1887},
474     {-2333,  -2734,  -2296}, {-3440,  -2401,  -3211}, {-2008,  -3528,  -3337},
475     {-2247,  -3291,  -4510}, { -475,    949,    155}, { -149,   1365,    545},
476     { -757,   1644,   1083}, { -217,   2053,   1353}, {-1433,   2301,   1462},
477     {  495,   1661,    529}, {   10,   2037,    740}, { 2082,   1898,    978},
478     { 2831,   2294,    911}, {  842,    793,    420}, { 1223,   1023,    863},
479     { 1237,    451,    780}, { 1744,    708,    822}, { 1533,    284,   1384},
480     { 2135,    609,   1538}, { 2305,    626,    540}, { 2368,   1187,    955},
481     { 2586,   1255,     -7}, { 3116,   1131,    726}, { 3431,   1730,    428},
482     { 2734,   1648,   1307}, { 2988,   1231,   2010}, { 3523,   2024,   1488},
483     { 1034,   1657,    871}, { 1206,   2163,   1036}, { 1807,   2372,   1233},
484     { 1808,   1769,   1493}, { 1573,   2332,   1779}, { 1216,   1609,   1866},
485     { 1480,   1898,   2513}, {  465,   2708,   2776}, {  771,   3638,   3338},
486     { 1869,   2599,   2623}, { 2825,   2745,   2468}, { 2638,   2439,   1585},
487     { 2094,   2970,   1308}, { 2022,   3057,   1999}, { 3428,   2912,   1816},
488     { 4536,   2974,   2129}, { 1046,   2563,   2086}, { 1363,   3562,   2318},
489     { 2511,   1891,   2984}, { 1866,   2306,   3986}, { 3272,   2924,   3682},
490     { 3146,   3564,   2272}, { 3592,   3968,   2822}, { 2431,   3369,   3069},
491     { 1931,   4709,   3090}, { 2629,   4220,   3986}, { 4639,   4056,   3664},
492     { 4035,   5334,   4912}
493 };
494
495 static const int16_t lsp_band2[LSP_CB_SIZE][4] = {
496     {    0,      0,      0,      0}, {  601,    512,   -542,    334},
497     {  428,   1087,   -484,   -132}, {  652,    622,   -391,   -572},
498     {  378,    799,    141,   -860}, { 1040,    409,    112,   -554},
499     { 1123,    670,    -75,   -847}, { 1421,    494,   -315,  -1095},
500     {  787,   1001,    114,   -460}, {  988,   1672,    216,   -681},
501     { 1007,   1241,   -132,  -1247}, { 1073,    399,    186,     -5},
502     { 1262,    193,   -694,   -129}, {  325,    196,     51,   -641},
503     {  861,    -59,    350,   -458}, { 1261,    567,    586,   -346},
504     { 1532,    885,    210,   -517}, { 2027,    937,    113,   -792},
505     { 1383,   1064,    334,     38}, { 1964,   1468,    459,    133},
506     { 2062,   1186,    -98,   -121}, { 2577,   1445,    506,   -373},
507     { 2310,   1682,     -2,   -960}, { 2876,   1939,    765,    138},
508     { 3581,   2360,    649,   -414}, {  219,    176,   -398,   -309},
509     {  434,    -78,   -435,   -880}, { -344,    301,    265,   -552},
510     { -915,    470,    657,   -380}, {  419,   -432,   -163,   -453},
511     {  351,   -953,      8,   -562}, {  789,    -43,     20,   -958},
512     {  302,   -594,   -352,  -1159}, { 1040,    108,   -668,   -924},
513     { 1333,    210,  -1217,  -1663}, {  483,    589,   -350,  -1140},
514     { 1003,    824,   -802,  -1184}, {  745,     58,   -589,  -1443},
515     {  346,    247,   -915,  -1683}, {  270,    796,   -720,  -2043},
516     { 1208,    722,   -222,   -193}, { 1486,   1180,   -412,   -672},
517     { 1722,    179,    -69,   -521}, { 2047,    860,   -666,  -1410},
518     { -146,    222,   -281,   -805}, { -189,     90,   -114,  -1307},
519     { -152,   1086,   -241,   -764}, { -439,    733,   -601,  -1302},
520     { -833,   -167,   -351,   -601}, { -856,   -422,   -411,  -1059},
521     { -747,   -355,   -582,  -1644}, { -837,    210,   -916,  -1144},
522     {-1800,     32,   -878,  -1687}, {  -48,    -23,  -1146,     52},
523     { -350,   -409,  -1656,   -364}, {  265,   -728,   -858,   -577},
524     {  458,   -247,  -1141,   -997}, {  691,   -407,  -1988,  -1161},
525     {  -66,   -104,   -705,  -1249}, { -431,    -93,  -1191,  -1844},
526     {  203,   -732,  -1000,  -1693}, {   10,   -832,  -1846,  -1819},
527     {  493,   -128,  -1436,  -1768}, {  488,   -311,  -1730,  -2540},
528     { -653,   -532,  -1150,  -1172}, {-1086,   -289,  -1706,  -1533},
529     { -699,  -1205,  -1216,  -1766}, {-1032,  -1481,  -2074,  -1523},
530     { -721,  -1220,  -2277,  -2600}, {   12,   -539,  -1484,  -1131},
531     {  -40,   -911,  -2106,   -441}, { -471,   -484,  -2267,  -1549},
532     { -141,   -988,  -3006,  -1721}, {-1545,  -2102,   -583,    342},
533     {-1383,  -2772,   -386,    -13}, {-2118,  -2589,  -1205,     72},
534     {-2147,  -3231,   -965,    390}, {-2949,  -3300,   -621,    637},
535     {-3907,  -4138,   -865,    803}, {-1287,   -845,   -375,   -548},
536     {-1416,  -1169,   -487,  -1277}, {-1400,  -1690,  -1027,   -418},
537     {-2018,  -1909,  -1188,  -1260}, {-1418,  -2222,  -2029,   -128},
538     {-2067,  -2998,  -2693,   -310}, { -950,  -1028,  -1538,    185},
539     {-1616,   -915,  -2205,   -549}, {   19,   -821,  -1145,    352},
540     {  184,  -1175,  -1356,   -627}, { -547,  -1088,  -1661,   -911},
541     { -216,  -1502,  -2197,   -948}, { -795,  -1306,  -2374,   -451},
542     { -924,  -1889,  -2796,   -680}, { -600,  -1614,  -3609,   -885},
543     {-2392,  -2528,    319,    303}, {-2908,  -2095,   -310,    573},
544     {-3460,  -2141,     49,   -113}, {-2231,   -448,    675,   -146},
545     {-2805,   -532,   1231,    479}, {-2684,   -486,   -200,    611},
546     {-3525,   -971,   -198,    704}, {-3707,    173,    349,    254},
547     {-4734,  -1447,    -34,    880}, {  777,   -512,    114,    -10},
548     { 1250,    -66,    442,     -5}, {  604,    613,    452,   -352},
549     { 1224,    777,    675,  -1014}, {-1372,    -79,  -1208,   -238},
550     {-2389,    -17,  -1157,   -818}, {-1504,   -673,  -1133,  -1060},
551     {-1984,   -799,  -2005,  -1973}, {-2037,   -798,  -1068,   -105},
552     {-3190,   -899,  -1817,   -194}, { -156,   -886,    394,   -318},
553     { -258,  -1283,    551,    202}, { -536,  -1729,    910,    331},
554     { -847,  -1109,    795,   -163}, {-1171,  -1128,    715,    519},
555     {-1080,  -1319,   1685,    668}, {-1000,  -1921,     96,    211},
556     {-1487,  -2148,    831,    174}, {-1139,   -374,    414,     -4},
557     {-1517,  -1383,    396,   -352}, {-1012,    439,    -59,   -967},
558     {-1812,    706,   -440,  -1030}, {-1971,   -329,    -34,   -827},
559     {-2472,  -1588,   -151,   -606}, {-2161,    374,   -281,     76},
560     {-3012,    231,    -15,   -690}, { 1104,    566,    721,    209},
561     { 1685,    564,    383,     98}, { 1898,    750,    792,    -97},
562     {  556,    -64,    561,    -93}, {  876,    162,    913,    -22},
563     {  961,    675,   1296,    140}, {  756,   -396,    851,    544},
564     {  360,   -303,   1341,    396}, {  878,    -22,   1464,    863},
565     { -309,   -273,    642,   -129}, { -686,    -82,    842,    454},
566     {   -5,    -47,   1069,    998}, {  -94,    967,   1277,    298},
567     { -489,    385,   1473,    746}, { -369,   -717,   1333,    242},
568     {  281,   -993,   1726,    924}, {  464,    601,   1575,   1376},
569     { -250,    206,   2339,   1175}, { -438,    377,   -597,   -285},
570     {-1020,    787,   -790,   -287}, { -458,   -410,    215,    295},
571     { -589,   -860,   -121,    797}, {-1175,    122,   -437,    466},
572     {-1480,   -121,    367,    924}, {  234,    323,    770,   -555},
573     {  145,     30,    996,     26}, {   66,    849,     93,   -145},
574     { -117,   1261,    474,   -399}, {-1495,   1051,    218,   -506},
575     {-1390,    694,    994,     88}, {  616,      7,     78,    304},
576     { 1060,     52,    -62,    835}, {  833,    454,    649,   1359},
577     { -770,    464,     47,     93}, { -574,   1199,    -39,    379},
578     {  114,    -98,    488,    485}, {  727,    244,    606,    696},
579     {  -76,    455,    671,    546}, { -565,    -13,    145,    819},
580     { -376,    569,    448,   1128}, {  218,    122,    265,   1167},
581     {  230,    738,    932,   1003}, {  138,    477,     36,    450},
582     {  404,    787,    -73,   1000}, {  497,   1259,    387,   1231},
583     {   17,    207,    195,    -79}, {  562,    358,     53,   -158},
584     {  493,    387,    478,    189}, {  678,    831,    640,    558},
585     { -197,    523,    613,     57}, {  429,    894,    769,    111},
586     {   67,   1174,    568,    511}, { 1242,    824,    251,    840},
587     { 1419,   1074,    864,    481}, {  924,   1474,    669,    724},
588     { 1539,   1879,    654,   1590}, {  445,    337,   1111,    541},
589     {  472,   1421,   1264,   1094}, {  794,    735,   1103,    668},
590     { 1055,    863,   1192,   1020}, {  778,   1105,    806,   1798},
591     { 1052,   1527,   1587,   2151}, {  881,   1552,   1265,    391},
592     {  726,    872,   1812,    601}, { 1469,    280,   1008,    616},
593     { 1403,    577,   1803,   1244}, { 1650,   1314,   1148,   1072},
594     { 1297,   1669,   1911,   1026}, { 2093,   1044,   2115,   1189},
595     { 1644,   1961,   2587,   1512}, {   25,   -315,     -9,   -106},
596     {  290,   -339,    428,   -444}, {  -68,   -783,    735,    772},
597     {  245,   -555,    468,     47}, {  334,   -895,    814,    146},
598     {  235,    368,   -964,   -959}, { -203,    315,  -1566,  -1217},
599     {  801,     17,   -276,   -354}, {  894,   -495,   -789,   -635},
600     {  716,    291,  -1189,   -357}, {  560,   -260,   -733,     -2},
601     {  679,   -508,  -1429,    211}, {  -51,    -62,   -428,    557},
602     {  322,   -638,   -211,    614}, { -878,  -1057,    -84,    -71},
603     { -388,  -1415,   -167,   -318}, { -754,  -1574,    214,   -539},
604     {-1419,  -2004,    -92,   -787}, {  -47,   -856,   -347,   -255},
605     {   23,  -1211,   -173,    320}, { -658,   -487,   -893,    353},
606     { -783,  -1587,   -584,    507}, {-1420,   -859,   -378,    441},
607     {-2095,  -1491,   -137,    439}, { -321,  -1450,  -1288,    -12},
608     { -359,  -2113,   -553,     -8}, { -831,  -1918,  -1561,     32},
609     {-1014,  -2487,  -1359,   -939}, { -475,   -311,   -169,   -236},
610     { -907,   -426,    276,   -611}, {  -96,   -400,     50,   -710},
611     { -426,  -1022,    -10,   -985}, { -197,   -258,   -744,   -575},
612     { -611,   -930,   -771,   -394}, { -267,   -776,   -612,   -939},
613     { -256,  -1346,   -802,  -1122}, { -796,  -1570,   -825,   -754},
614     {  712,    876,    141,    227}, {  981,   1509,     85,    124},
615     { 1462,   1228,    979,    -39}, { 1734,    999,   1481,    440},
616     { 2293,   1116,    769,    440}, { 2504,   1480,   1241,    356},
617     { 2474,   1909,   1558,    810}, {  917,   1134,    607,   -134},
618     {  509,   1809,    781,   -123}, { 1712,   1506,    559,   -423},
619     { 2037,   2317,    726,   -155}, { 3031,   2676,   1203,    331},
620     { 3664,   3274,   1768,    531}, { 1610,   1839,    867,    183},
621     { 1774,   1972,   1538,     97}, { 1822,   2158,   1282,    659},
622     { 2222,   2758,   1818,    900}, { 3251,   2124,   1723,    996},
623     { 3633,   2336,   2408,   1453}, { 2923,   3517,   2567,   1318},
624 };
625
626 /**
627  * Used for the coding/decoding of the pulses positions
628  * for the MP-MLQ codebook
629  */
630 static const int32_t combinatorial_table[PULSE_MAX][SUBFRAME_LEN/GRID_SIZE] = {
631     {118755, 98280, 80730,  65780, 53130,
632       42504, 33649, 26334,  20349, 15504,
633       11628,  8568,  6188,   4368,  3003,
634        2002,  1287,   792,    462,   252,
635         126,    56,    21,      6,     1,
636           0,     0,     0,      0,     0},
637
638     { 23751, 20475, 17550,  14950, 12650,
639       10626,  8855,  7315,   5985,  4845,
640        3876,  3060,  2380,   1820,  1365,
641        1001,   715,   495,    330,   210,
642         126,    70,    35,     15,     5,
643           1,     0,     0,      0,     0},
644
645     {  3654,  3276,  2925,   2600,  2300,
646        2024,  1771,  1540,   1330,  1140,
647         969,   816,   680,    560,   455,
648         364,   286,   220,    165,   120,
649          84,    56,    35,     20,    10,
650           4,     1,     0,      0,     0},
651
652     {   406,   378,   351,    325,   300,
653         276,   253,   231,    210,   190,
654         171,   153,   136,    120,   105,
655          91,    78,    66,     55,    45,
656          36,    28,    21,     15,    10,
657           6,     3,     1,      0,     0},
658
659     {    29,    28,    27,     26,    25,
660          24,    23,    22,     21,    20,
661          19,    18,    17,     16,    15,
662          14,    13,    12,     11,    10,
663           9,     8,     7,      6,     5,
664           4,     3,     2,      1,     0},
665
666     {     1,     1,     1,      1,     1,
667           1,     1,     1,      1,     1,
668           1,     1,     1,      1,     1,
669           1,     1,     1,      1,     1,
670           1,     1,     1,      1,     1,
671           1,     1,     1,      1,     1},
672 };
673
674 static const int16_t pitch_contrib[340] = {
675     60,     0,  0,  2489, 60,     0,  0,  5217,
676      1,  6171,  0,  3953,  0, 10364,  1,  9357,
677     -1,  8843,  1,  9396,  0,  5794, -1, 10816,
678      2, 11606, -2, 12072,  0,  8616,  1, 12170,
679      0, 14440,  0,  7787, -1, 13721,  0, 18205,
680      0, 14471,  0, 15807,  1, 15275,  0, 13480,
681     -1, 18375, -1,     0,  1, 11194, -1, 13010,
682      1, 18836, -2, 20354,  1, 16233, -1,     0,
683     60,     0,  0, 12130,  0, 13385,  1, 17834,
684      1, 20875,  0, 21996,  1,     0,  1, 18277,
685     -1, 21321,  1, 13738, -1, 19094, -1, 20387,
686     -1,     0,  0, 21008, 60,     0, -2, 22807,
687      0, 15900,  1,     0,  0, 17989, -1, 22259,
688      1, 24395,  1, 23138,  0, 23948,  1, 22997,
689      2, 22604, -1, 25942,  0, 26246,  1, 25321,
690      0, 26423,  0, 24061,  0, 27247, 60,     0,
691     -1, 25572,  1, 23918,  1, 25930,  2, 26408,
692     -1, 19049,  1, 27357, -1, 24538, 60,     0,
693     -1, 25093,  0, 28549,  1,     0,  0, 22793,
694     -1, 25659,  0, 29377,  0, 30276,  0, 26198,
695      1, 22521, -1, 28919,  0, 27384,  1, 30162,
696     -1,     0,  0, 24237, -1, 30062,  0, 21763,
697      1, 30917, 60,     0,  0, 31284,  0, 29433,
698      1, 26821,  1, 28655,  0, 31327,  2, 30799,
699      1, 31389,  0, 32322,  1, 31760, -2, 31830,
700      0, 26936, -1, 31180,  1, 30875,  0, 27873,
701     -1, 30429,  1, 31050,  0,     0,  0, 31912,
702      1, 31611,  0, 31565,  0, 25557,  0, 31357,
703     60,     0,  1, 29536,  1, 28985, -1, 26984,
704     -1, 31587,  2, 30836, -2, 31133,  0, 30243,
705     -1, 30742, -1, 32090, 60,     0,  2, 30902,
706     60,     0,  0, 30027,  0, 29042, 60,     0,
707      0, 31756,  0, 24553,  0, 25636, -2, 30501,
708     60,     0, -1, 29617,  0, 30649, 60,     0,
709      0, 29274,  2, 30415,  0, 27480,  0, 31213,
710     -1, 28147,  0, 30600,  1, 31652,  2, 29068,
711     60,     0,  1, 28571,  1, 28730,  1, 31422,
712      0, 28257,  0, 24797, 60,     0,  0,     0,
713     60,     0,  0, 22105,  0, 27852, 60,     0,
714     60,     0, -1, 24214,  0, 24642,  0, 23305,
715     60,     0, 60,     0,  1, 22883,  0, 21601,
716     60,     0,  2, 25650, 60,     0, -2, 31253,
717     -2, 25144,  0, 17998
718 };
719
720 /**
721  * Number of non-zero pulses in the MP-MLQ excitation
722  */
723 static const int8_t pulses[4] = {6, 5, 6, 5};
724
725 /**
726  * Size of the MP-MLQ fixed excitation codebooks
727  */
728 static const int32_t max_pos[4] = {593775, 142506, 593775, 142506};
729
730 static const int16_t fixed_cb_gain[GAIN_LEVELS] = {
731       1,    2,    3,    4,    6,    9,   13,   18,
732      26,   38,   55,   80,  115,  166,  240,  348,
733     502,  726, 1050, 1517, 2193, 3170, 4582, 6623,
734 };
735
736 static const int16_t adaptive_cb_gain85[85 * 20] = {
737         0,      0,      0,      0,      0,      0,      0,      0,
738         0,      0,      0,      0,      0,      0,      0,      0,
739         0,      0,      0,      0,    800,   1496,    167,   -256,
740      -338,    -39,   -136,     -1,     -4,     -6,    -73,     -8,
741       -15,     12,     23,      2,     16,     30,      3,     -5,
742      -462,   -686,    493,   2575,    311,    -13,    -28,    -14,
743      -404,     -5,    -19,     13,     20,     72,    107,    -77,
744         8,     13,     -9,    -48,   1483,    144,    784,    928,
745      1243,   -134,     -1,    -37,    -52,    -94,    -13,    -71,
746        -6,    -84,     -8,    -44,   -112,    -10,    -59,    -70,
747       -77,    275,   3522,   1056,  -1254,      0,     -4,   -757,
748       -68,    -95,      1,     16,    -59,      4,    -17,   -227,
749        -5,     21,    269,     80,   -125,    -40,   -264,    381,
750      5027,      0,      0,     -4,     -8,  -1542,      0,     -2,
751         0,      2,      0,      6,     38,     12,     81,   -117,
752       138,    332,   2215,   2574,   1339,     -1,     -6,   -299,
753      -404,   -109,     -2,    -18,    -44,    -21,    -52,   -348,
754       -11,    -27,   -181,   -210,   3685,   2883,   -887,    866,
755     -1639,   -828,   -507,    -48,    -45,   -164,   -648,    199,
756       156,   -194,   -152,     46,    368,    288,    -88,     86,
757      1396,   2146,   2235,    345,    942,   -118,   -281,   -305,
758        -7,    -54,   -182,   -190,   -292,    -29,    -45,    -47,
759       -80,   -123,   -128,    -19,     13,   4475,   3549,   -804,
760      -655,      0,  -1222,   -768,    -39,    -26,     -3,     -2,
761      -969,      0,    219,    174,      0,    179,    141,    -32,
762      -724,    254,    242,   6049,   2462,    -32,     -3,     -3,
763     -2233,   -370,     11,     10,     -3,    267,    -94,    -89,
764       108,    -38,    -36,   -909,    626,  -1713,   6121,   4561,
765     -1061,    -23,   -179,  -2287,  -1270,    -68,     65,   -233,
766       640,   -174,    477,  -1704,     40,   -111,    396,    295,
767      -350,   1391,   7985,    511,   -405,     -7,   -118,  -3892,
768       -15,    -10,     29,    170,   -678,     10,    -43,   -249,
769        -8,     34,    197,     12,   3144,   -529,    608,   2530,
770      3878,   -603,    -17,    -22,   -390,   -918,    101,   -116,
771        19,   -485,     81,    -93,   -744,    125,   -144,   -599,
772      2589,   -689,   3045,   5603,   -404,   -409,    -29,   -566,
773     -1916,    -10,    108,   -481,    128,   -885,    235,  -1041,
774        63,    -17,     75,    138,   3107,    513,   1374,  -3594,
775     -4922,   -589,    -16,   -115,   -788,  -1478,    -97,   -260,
776       -43,    681,    112,    301,    933,    154,    413,  -1079,
777      2468,   6010,   1107,   -390,   1961,   -372,  -2204,    -74,
778        -9,   -234,   -905,   -166,   -406,     58,    143,     26,
779      -295,   -719,   -132,     46,   4773,   2766,   2368,   4862,
780     -4044,  -1390,   -467,   -342,  -1443,   -998,   -806,   -690,
781      -399,  -1416,   -821,   -702,   1178,    682,    584,   1200,
782      1665,  -1879,   1443,   1701,   8562,   -169,   -215,   -127,
783      -176,  -4475,    190,   -146,    165,   -172,    195,   -149,
784      -870,    982,   -754,   -889,   2716,   9011,  -1007,    755,
785     -1785,   -450,  -4956,    -61,    -34,   -194,  -1493,    167,
786       554,   -125,   -415,     46,    296,    982,   -109,     82,
787     -2727,   7548,   1285,    938,   3420,   -453,  -3478,   -100,
788       -53,   -714,   1256,    213,   -592,    156,   -432,    -73,
789       569,  -1576,   -268,   -196,   3677,    882,   4050,   1202,
790      2323,   -825,    -47,  -1001,    -88,   -329,   -198,   -909,
791      -218,   -269,    -64,   -297,   -521,   -125,   -574,   -170,
792      2046,   -753,    122,  10102,    603,   -255,    -34,      0,
793     -6229,    -22,     94,    -15,      5,  -1261,    464,    -75,
794       -75,     27,     -4,   -372,    449,  -1815,  10690,   3870,
795      -527,    -12,   -201,  -6976,   -914,    -16,     49,   -293,
796      1184,   -106,    428,  -2525,     14,    -58,    344,    124,
797      -941,   2352,   5049,   3650,   2637,    -54,   -337,  -1556,
798      -813,   -424,    135,    290,   -725,    209,   -524,  -1125,
799       151,   -378,   -812,   -587,  -1879,    796,   3117,   9569,
800      -404,   -215,    -38,   -593,  -5589,     -9,     91,    357,
801      -151,   1097,   -464,  -1821,    -46,     19,     76,    236,
802     -1715,   2043,  -2096,   9946,   4001,   -179,   -254,   -268,
803     -6038,   -977,    213,   -219,    261,   1041,  -1240,   1272,
804       418,   -498,    511,  -2429,  -5772,   -618,  -3921,    284,
805     -3155,  -2033,    -23,   -938,     -4,   -607,   -218,  -1381,
806      -148,    100,     10,     68,  -1111,   -119,   -755,     54,
807       382,   4748,   8003,  -2064,   2198,     -8,  -1376,  -3909,
808      -260,   -294,   -110,   -186,  -2319,     48,    598,   1008,
809       -51,   -637,  -1073,    277,   -867,   3015,  11926,  -1675,
810       947,    -45,   -555,  -8681,   -171,    -54,    159,    631,
811     -2195,    -88,    308,   1219,     50,   -174,   -690,     96,
812     -4933,   -432,   6757,   3771,   1352,  -1485,    -11,  -2786,
813      -867,   -111,   -130,   2034,    178,   1135,     99,  -1555,
814       407,     35,   -557,   -311,    152,   9726,   4231,  -1928,
815      1490,     -1,  -5774,  -1092,   -226,   -135,    -90,    -39,
816     -2511,     17,   1144,    498,    -13,   -884,   -384,    175,
817      2512,    193,   9033,   5361,  -3148,   -385,     -2,  -4980,
818     -1754,   -605,    -29,  -1385,   -106,   -822,    -63,  -2956,
819       482,     37,   1735,   1030,   8464,   2844,     12,    549,
820      2132,  -4373,   -493,      0,    -18,   -277,  -1469,     -6,
821        -2,   -284,    -95,      0,  -1101,   -370,     -1,    -71,
822      2141,  -2602,   7166,   9046,  -1350,   -279,   -413,  -3134,
823     -4994,   -111,    340,   -936,   1138,  -1182,   1436,  -3957,
824       176,   -214,    590,    745,   -244,    278,  13307,   1227,
825      -161,     -3,     -4, -10808,    -91,     -1,      4,    198,
826      -226,     18,    -20,   -997,     -2,      2,    131,     12,
827     -1947,   8217,   6269,    917,  -2559,   -231,  -4121,  -2399,
828       -51,   -399,    976,    745,  -3144,    108,   -460,   -350,
829      -304,   1283,    979,    143,  -1810,   2061,  -2781,   6056,
830     10058,   -200,   -259,   -472,  -2238,  -6174,    227,   -307,
831       349,    669,   -761,   1028,   1111,  -1265,   1707,  -3717,
832      7827,   9161,  -3409,   2473,  -1510,  -3739,  -5122,   -709,
833      -373,   -139,  -4376,   1628,   1906,  -1181,  -1382,    514,
834       721,    844,   -314,    228,  -1430,   8313,   9541,  -2955,
835      1626,   -124,  -4218,  -5556,   -533,   -161,    725,    832,
836     -4841,   -257,   1499,   1721,    142,   -825,   -947,    293,
837      2819,  -4247,   5391,   8673,   2756,   -485,  -1101,  -1774,
838     -4591,   -463,    730,   -927,   1397,  -1492,   2248,  -2854,
839      -474,    714,   -907,  -1459,    141,  14552,    690,    257,
840      -112,     -1, -12926,    -29,     -4,      0,   -125,     -5,
841      -613,     -2,   -228,    -10,      0,     99,      4,      1,
842     11938,  -1859,   1806,   -962,   -884,  -8699,   -211,   -199,
843       -56,    -47,   1355,  -1316,    205,    701,   -109,    106,
844       644,   -100,     97,    -51,   3728,   1982,   2264,   4584,
845      3131,   -848,   -239,   -312,  -1282,   -598,   -451,   -515,
846      -273,  -1043,   -554,   -633,   -712,   -378,   -432,   -876,
847     -1181,    766,    720,  14303,   -216,    -85,    -35,    -31,
848    -12486,     -2,     55,     51,    -33,   1031,   -668,   -628,
849       -15,     10,      9,    189,  -4385,   4826,  10112,   1569,
850      3388,  -1173,  -1421,  -6242,   -150,   -700,   1291,   2706,
851     -2979,    420,   -462,   -969,    906,   -998,  -2091,   -324,
852      -448,   1932,  15591,  -1842,    657,    -12,   -227, -14837,
853      -207,    -26,     52,    427,  -1838,    -50,    217,   1753,
854        18,    -77,   -626,     74,  -4141,   1844,   3962,   5517,
855      6220,  -1046,   -207,   -958,  -1858,  -2361,    466,   1001,
856      -446,   1394,   -621,  -1334,   1572,   -700,  -1504,  -2094,
857       729,  -2299,  14755,   3657,   -952,    -32,   -322, -13288,
858      -816,    -55,    102,   -656,   2071,   -162,    513,  -3294,
859        42,   -133,    857,    212,  -1385,   5801,  13339,  -3137,
860      1344,   -117,  -2054, -10861,   -600,   -110,    490,   1127,
861     -4723,   -265,   1111,   2554,    113,   -476,  -1094,    257,
862      4710,   9661,   1073,  -2467,   3274,  -1354,  -5697,    -70,
863      -371,   -654,  -2777,   -308,   -633,    709,   1455,    161,
864      -941,  -1930,   -214,    493,   1843,  -3624,  12422,   6898,
865     -1559,   -207,   -802,  -9419,  -2904,   -148,    407,  -1397,
866      2748,   -775,   1526,  -5230,    175,   -344,   1182,    656,
867      1433,   2394,   2507,   1380,   8780,   -125,   -349,   -383,
868      -116,  -4705,   -209,   -219,   -366,   -120,   -201,   -211,
869      -768,  -1283,  -1343,   -740,  -1712,  12915,   5883,  -2197,
870       991,   -179, -10181,  -2112,   -294,    -60,   1350,    615,
871     -4638,   -229,   1732,    789,    103,   -781,   -356,    133,
872     15072,   2158,  -1245,    910,   -496, -13865,   -284,    -94,
873       -50,    -15,  -1986,   1145,    164,   -837,   -119,     69,
874       456,     65,    -37,     27,   4655,   7319,   4916,    586,
875     -3381,  -1322,  -3270,  -1475,    -20,   -697,  -2079,  -1396,
876     -2196,   -166,   -261,   -175,    960,   1510,   1014,    120,
877      1191,  -2140,   5120,  13498,  -1418,    -86,   -279,  -1600,
878    -11121,   -122,    155,   -372,    669,   -981,   1763,  -4218,
879       103,   -185,    443,   1168,  -1530,   -817,   8191,   9632,
880     -1452,   -143,    -40,  -4095,  -5663,   -128,    -76,    765,
881       408,    900,    480,  -4815,   -135,    -72,    726,    854,
882     -3236,    607,   1696,  -2106,  11485,   -639,    -22,   -175,
883      -270,  -8051,    119,    335,    -62,   -416,     78,    218,
884      2268,   -425,  -1189,   1476,   3203,  -1903,   -837,   9679,
885      7057,   -626,   -221,    -42,  -5718,  -3039,    372,    163,
886       -97,  -1892,   1124,    494,  -1380,    819,    360,  -4169,
887       213,   -655,  17015,    620,   -384,     -2,    -26, -17671,
888       -23,     -9,      8,   -221,    681,     -8,     24,   -644,
889         5,    -15,    399,     14,   5088,     35,  -3339,   3726,
890      8488,  -1580,      0,   -680,   -847,  -4397,    -10,   1037,
891         7,  -1157,     -8,    759,  -2636,    -18,   1730,  -1930,
892      -988,   1454,  -2688,  15039,   2682,    -59,   -129,   -441,
893    -13805,   -439,     87,   -162,    238,    907,  -1335,   2467,
894       161,   -238,    440,  -2462,  -4865,  -2842,    -53,   5495,
895      6523,  -1445,   -493,      0,  -1843,  -2597,   -844,    -16,
896        -9,   1632,    953,     18,   1937,   1131,     21,  -2188,
897      3076,  15069,  -2914,   1810,   -971,   -577, -13860,   -518,
898      -200,    -57,  -2829,    547,   2680,   -339,  -1665,    322,
899       182,    893,   -172,    107,   1311,   5355,  11054,   2299,
900     -3654,   -105,  -1750,  -7458,   -322,   -814,   -428,   -885,
901     -3613,   -184,   -751,  -1551,    292,   1194,   2465,    512,
902      4035,   5619,   4618,   1815,   1912,   -994,  -1927,  -1301,
903      -201,   -223,  -1384,  -1137,  -1583,   -447,   -622,   -511,
904      -471,   -656,   -539,   -211,  -2131,   2754,  -4501,  12879,
905      7432,   -277,   -463,  -1236, -10124,  -3371,    358,   -585,
906       756,   1675,  -2165,   3538,    967,  -1249,   2042,  -5842,
907      5618,   -515,   3219,  -4149,   4857,  -1926,    -16,   -632,
908     -1050,  -1440,    176,  -1104,    101,   1422,   -130,    815,
909     -1666,    152,   -954,   1230,   1838,  -1709,   1139,  16867,
910       716,   -206,   -178,    -79, -17366,    -31,    191,   -127,
911       118,  -1892,   1759,  -1173,    -80,     74,    -49,   -737,
912      1978,  -3845,  10050,  11854,  -2492,   -238,   -902,  -6164,
913     -8576,   -379,    464,  -1213,   2358,  -1431,   2782,  -7271,
914       301,   -585,   1529,   1803,  -2600,  11246,  11289,  -3647,
915      1463,   -412,  -7720,  -7778,   -812,   -130,   1784,   1791,
916     -7749,   -578,   2504,   2513,    232,  -1004,  -1008,    325,
917      3442,    907,   2725,   8970,   3638,   -723,    -50,   -453,
918     -4911,   -808,   -190,   -572,   -150,  -1884,   -496,  -1492,
919      -764,   -201,   -605,  -1992,   -126,  17498,   3481,  -2003,
920      1090,      0, -18689,   -739,   -244,    -72,    135,     26,
921     -3717,    -15,   2139,    425,      8,  -1165,   -231,    133,
922     -1814,   1048,  -2164,   4070,  16272,   -200,    -67,   -285,
923     -1011, -16160,    116,   -239,    138,    450,   -260,    537,
924      1801,  -1041,   2149,  -4042,   9354,  12580,  -1883,    962,
925      -617,  -5341,  -9660,   -216,    -56,    -23,  -7183,   1075,
926      1446,   -549,   -738,    110,    352,    474,    -71,     36,
927      1708,   4199,   7387,   6335,   1003,   -178,  -1076,  -3330,
928     -2449,    -61,   -437,   -770,  -1893,   -660,  -1623,  -2856,
929      -104,   -257,   -452,   -388,  -2624,   5623,  17310,  -2353,
930       592,   -420,  -1930, -18288,   -338,    -21,    900,   2772,
931     -5941,   -376,    807,   2486,     94,   -203,   -625,     85,
932      1211,   -850,   1193,  -1926,  15992,    -89,    -44,    -86,
933      -226, -15609,     62,    -88,     61,    142,   -100,    140,
934     -1182,    830,  -1165,   1880,   3983,  -2054,  11506,    -19,
935      3622,   -968,   -257,  -8080,      0,   -801,    499,  -2797,
936      1442,      4,     -2,     13,   -880,    454,  -2544,      4,
937      -786,  -1354,  16092,   7246,  -1665,    -37,   -111, -15805,
938     -3205,   -169,    -65,    772,   1330,    348,    599,  -7117,
939       -80,   -137,   1636,    736,  -4316,   -511,   6674,  11665,
940      4633,  -1137,    -15,  -2719,  -8305,  -1310,   -134,   1758,
941       208,   3073,    364,  -4752,   1220,    144,  -1887,  -3299,
942      7912,   4557,   1937,   1885,   7037,  -3821,  -1267,   -229,
943      -216,  -3022,  -2200,   -935,   -538,   -910,   -524,   -222,
944     -3398,  -1957,   -832,   -809,   3434,   2967,   5867,   8196,
945      8766,   -720,   -537,  -2101,  -4100,  -4690,   -622,  -1230,
946     -1062,  -1718,  -1484,  -2935,  -1837,  -1588,  -3139,  -4385,
947      5881,   9176,   8119,   3934,   3355,  -2111,  -5139,  -4023,
948      -944,   -687,  -3294,  -2914,  -4547,  -1412,  -2203,  -1949,
949     -1204,  -1879,  -1662,   -805
950 };
951
952 static const int16_t adaptive_cb_gain170[170 * 20] = {
953         0,      0,      0,      0,      0,      0,      0,      0,
954         0,      0,      0,      0,      0,      0,      0,      0,
955         0,      0,      0,      0,    776,    212,    715,    670,
956       809,    -36,     -2,    -31,    -27,    -39,    -10,    -33,
957        -9,    -31,     -8,    -29,    -38,    -10,    -35,    -33,
958      1296,   1316,   -168,   -320,   -815,   -102,   -105,     -1,
959        -6,    -40,   -104,     13,     13,     25,     25,     -3,
960        64,     65,     -8,    -15,   -589,    680,   2478,    308,
961      -596,    -21,    -28,   -375,     -5,    -21,     24,     89,
962      -102,     11,    -12,    -46,    -21,     24,     90,     11,
963      -735,   -487,     -5,   2948,    468,    -33,    -14,      0,
964      -530,    -13,    -21,      0,      0,    132,     87,      0,
965        21,     13,      0,    -84,   1042,   1730,   1068,    333,
966       626,    -66,   -182,    -69,     -6,    -23,   -110,    -67,
967      -112,    -21,    -35,    -21,    -39,    -66,    -40,    -12,
968       486,   -769,   4074,   2825,  -1107,    -14,    -36,  -1013,
969      -487,    -74,     22,   -120,    191,    -83,    132,   -702,
970        32,    -52,    275,    191,   1521,   -767,   -124,   4320,
971      1026,   -141,    -35,      0,  -1139,    -64,     71,     11,
972        -5,   -401,    202,     32,    -95,     48,      7,   -270,
973      2425,   1267,   3439,    -91,  -1166,   -359,    -98,   -722,
974         0,    -83,   -187,   -509,   -266,     13,      7,     19,
975       172,     90,    244,     -6,  -1251,    975,    173,   4039,
976      2005,    -95,    -58,     -1,   -996,   -245,     74,     13,
977       -10,    308,   -240,    -42,    153,   -119,    -21,   -494,
978      1820,    632,   1322,   2062,   1031,   -202,    -24,   -106,
979      -259,    -64,    -70,   -146,    -51,   -229,    -79,   -166,
980      -114,    -39,    -83,   -129,   -447,   4904,    244,   -315,
981     -2038,    -12,  -1467,     -3,     -6,   -253,    134,      6,
982       -73,     -8,     94,      4,    -55,    610,     30,    -39,
983      -208,  -1102,    463,   -448,   5653,     -2,    -74,    -13,
984       -12,  -1950,    -14,      5,     31,     -5,    -30,     12,
985        71,    380,   -159,    154,   4739,   2600,  -1864,    856,
986     -1554,  -1371,   -412,   -212,    -44,   -147,   -752,    539,
987       295,   -247,   -135,     97,    449,    246,   -176,     81,
988      1894,   3533,     35,    -26,   2145,   -219,   -762,      0,
989         0,   -280,   -408,     -4,     -7,      3,      5,      0,
990      -248,   -462,     -4,      3,  -2699,   1841,   4072,   2443,
991      1582,   -444,   -207,  -1012,   -364,   -152,    303,    670,
992      -457,    402,   -274,   -607,    260,   -177,   -393,   -236,
993      -844,   3358,   6106,  -1059,   -537,    -43,   -688,  -2275,
994       -68,    -17,    173,    314,  -1251,    -54,    217,    395,
995       -27,    110,    200,    -34,   1251,   1016,   3020,   2210,
996      1445,    -95,    -63,   -556,   -298,   -127,    -77,   -230,
997      -187,   -168,   -137,   -407,   -110,    -89,   -266,   -194,
998      2099,   2277,   4038,   3533,  -2870,   -269,   -316,   -995,
999      -762,   -503,   -291,   -517,   -561,   -452,   -491,   -871,
1000       367,    399,    707,    619,    400,  -1114,   8516,   2422,
1001     -1117,     -9,    -75,  -4426,   -358,    -76,     27,   -208,
1002       579,    -59,    164,  -1259,     27,    -75,    580,    165,
1003     -4398,  -2011,   3912,  -2407,   2258,  -1180,   -247,   -934,
1004      -353,   -311,   -540,   1050,    480,   -646,   -295,    575,
1005       606,    277,   -539,    331,   1767,  -1447,   4240,   6160,
1006      -757,   -190,   -127,  -1097,  -2316,    -35,    156,   -457,
1007       374,   -664,    544,  -1594,     81,    -66,    195,    284,
1008      1594,  -1463,   1035,   6938,   1920,   -155,   -130,    -65,
1009     -2938,   -225,    142,   -100,     92,   -675,    619,   -438,
1010      -186,    171,   -121,   -813,   -562,   4716,   4085,   -591,
1011      2421,    -19,  -1357,  -1018,    -21,   -357,    162,    140,
1012     -1175,    -20,    170,    147,     83,   -696,   -603,     87,
1013      1552,   8778,   -935,    354,  -1424,   -147,  -4703,    -53,
1014        -7,   -123,   -831,     88,    501,    -33,   -189,     20,
1015       134,    763,    -81,     30,   4831,  -4431,     41,  -1479,
1016     -2976,  -1424,  -1198,      0,   -133,   -540,   1306,    -12,
1017        11,    436,   -400,      3,    877,   -804,      7,   -268,
1018      2090,   1192,   1006,   1645,   4853,   -266,    -86,    -61,
1019      -165,  -1437,   -152,   -128,    -73,   -210,   -119,   -101,
1020      -619,   -353,   -298,   -487,   2386,   5712,   1426,    -94,
1021      1350,   -347,  -1991,   -124,      0,   -111,   -832,   -207,
1022      -497,     13,     32,      8,   -196,   -470,   -117,      7,
1023     -1349,   1091,   1659,   8891,    313,   -111,    -72,   -168,
1024     -4825,     -5,     89,    136,   -110,    732,   -592,   -900,
1025        25,    -20,    -31,   -170,   9980,    916,   -381,   -808,
1026        88,  -6080,    -51,     -8,    -39,      0,   -558,    232,
1027        21,    492,     45,    -18,    -53,     -4,      2,      4,
1028      2338,  -1031,   -248,   3928,   6484,   -333,    -64,     -3,
1029      -942,  -2566,    147,     35,    -15,   -560,    247,     59,
1030      -925,    408,     98,  -1555,   6166,  -1240,   -337,   3672,
1031     -1277,  -2320,    -93,     -6,   -823,    -99,    466,    126,
1032       -25,  -1382,    278,     75,    480,    -96,    -26,    286,
1033      4377,   -132,  -2588,   1701,   4865,  -1169,     -1,   -409,
1034      -176,  -1444,     35,    691,    -20,   -454,     13,    268,
1035     -1299,     39,    768,   -505,   2594,   3295,   3944,   1481,
1036       682,   -410,   -662,   -949,   -133,    -28,   -521,   -624,
1037      -793,   -234,   -297,   -356,   -108,   -137,   -164,    -61,
1038      4151,    624,    815,   4485,   2229,  -1052,    -23,    -40,
1039     -1228,   -303,   -158,   -206,    -31,  -1136,   -170,   -223,
1040      -565,    -84,   -111,   -610,  -3575,   -361,   4924,   2791,
1041      4698,   -780,     -7,  -1480,   -475,  -1347,    -78,   1074,
1042       108,    609,     61,   -839,   1025,    103,  -1412,   -800,
1043     -2518,   3791,   8623,    315,   2465,   -387,   -877,  -4538,
1044        -6,   -370,    582,   1325,  -1995,     48,    -73,   -166,
1045       378,   -570,  -1297,    -47,   -691,   2989,   9957,   -421,
1046     -1142,    -29,   -545,  -6051,    -10,    -79,    126,    420,
1047     -1817,    -17,     76,    256,    -48,    208,    694,    -29,
1048     -1918,    104,  -3190,  -3410,  -4440,   -224,      0,   -621,
1049      -709,  -1203,     12,   -373,     20,   -399,     21,   -664,
1050      -519,     28,   -864,   -924,  -3359,  -1668,   1854,   6939,
1051      1430,   -688,   -169,   -209,  -2939,   -124,   -341,    380,
1052       188,   1422,    706,   -785,    293,    145,   -161,   -606,
1053        42,   9706,   3164,   -952,    907,      0,  -5750,   -611,
1054       -55,    -50,    -25,     -8,  -1874,      2,    564,    183,
1055        -2,   -537,   -175,     52,   1607,    785,   2862,   4327,
1056      3307,   -157,    -37,   -500,  -1143,   -667,    -77,   -280,
1057      -137,   -424,   -207,   -756,   -324,   -158,   -577,   -873,
1058      6801,   3416,   2227,   1682,  -3217,  -2823,   -712,   -302,
1059      -172,   -631,  -1418,   -924,   -464,   -698,   -350,   -228,
1060      1335,    670,    437,    330,   3459,   3898,    364,   7841,
1061     -2640,   -730,   -927,     -8,  -3753,   -425,   -823,    -76,
1062       -86,  -1655,  -1865,   -174,    557,    628,     58,   1263,
1063     -5902,  -3458,  -2465,  -1886,   4334,  -2126,   -730,   -371,
1064      -217,  -1146,  -1245,   -888,   -520,   -679,   -398,   -283,
1065      1561,    915,    652,    499,  -3710,   1133,   7849,   3443,
1066      -215,   -840,    -78,  -3760,   -723,     -2,    256,   1777,
1067      -543,    779,   -238,  -1649,    -48,     14,    103,     45,
1068      4132,   2828,      2,  -4212,  -4116,  -1042,   -488,      0,
1069     -1083,  -1034,   -713,      0,      0,   1062,    727,      0,
1070      1038,    710,      0,  -1058,   5875,   8496,  -1796,   1376,
1071     -1786,  -2107,  -4406,   -197,   -115,   -194,  -3047,    644,
1072       931,   -493,   -713,    150,    640,    926,   -195,    150,
1073      3143,   3483,   3546,   -793,   4489,   -603,   -740,   -767,
1074       -38,  -1230,   -668,   -680,   -754,    152,    168,    171,
1075      -861,   -954,   -971,    217,   2845,   7965,   3695,  -5432,
1076      3978,   -494,  -3873,   -833,  -1801,   -966,  -1383,   -641,
1077     -1796,    943,   2641,   1225,   -691,  -1934,   -897,   1319,
1078      1538,    150,   7139,   2049,   3097,   -144,     -1,  -3110,
1079      -256,   -585,    -14,   -670,    -65,   -192,    -18,   -892,
1080      -290,    -28,  -1349,   -387,    618,   7520,   4729,   -238,
1081     -3373,    -23,  -3452,  -1365,     -3,   -694,   -283,   -178,
1082     -2170,      8,    109,     68,    127,   1548,    973,    -49,
1083      2965,  -3013,   7912,   7076,  -1997,   -536,   -554,  -3821,
1084     -3056,   -243,    545,  -1431,   1455,  -1280,   1301,  -3417,
1085       361,   -367,    964,    862,   2443,   -929,  -1113,   9677,
1086      4138,   -364,    -52,    -75,  -5716,  -1045,    138,    166,
1087       -63,  -1443,    549,    657,   -617,    234,    281,  -2444,
1088      1966,   3309,  10085,  -3399,   2105,   -236,   -668,  -6207,
1089      -705,   -270,   -397,  -1210,  -2037,    408,    686,   2092,
1090      -252,   -425,  -1295,    436,   -112,  -1368,   8868,   4822,
1091      2048,      0,   -114,  -4800,  -1419,   -256,     -9,     61,
1092       740,     33,    402,  -2610,     14,    171,  -1108,   -602,
1093     -2597,    438,  -1839,   6229,   7266,   -411,    -11,   -206,
1094     -2368,  -3223,     69,   -291,     49,    987,   -166,    699,
1095      1152,   -194,    816,  -2763,   3454,    553,   9127,   4946,
1096     -5596,   -728,    -18,  -5084,  -1493,  -1911,   -116,  -1924,
1097      -308,  -1042,   -166,  -2755,   1179,    188,   3117,   1689,
1098      -532,   -663,  12262,   2495,  -1004,    -17,    -26,  -9177,
1099      -380,    -61,    -21,    398,    496,     81,    101,  -1867,
1100       -32,    -40,    751,    152,  -2100,   1317,  -1509,  11425,
1101      2997,   -269,   -105,   -139,  -7967,   -548,    168,   -193,
1102       121,   1464,   -918,   1052,    384,   -240,    276,  -2090,
1103      1193,  -2697,  11259,   5373,   -763,    -86,   -444,  -7737,
1104     -1762,    -35,    196,   -819,   1853,   -391,    884,  -3692,
1105        55,   -125,    525,    250,   2405,   -471,  11079,    203,
1106       782,   -353,    -13,  -7491,     -2,    -37,     69,  -1626,
1107       318,    -29,      5,   -137,   -114,     22,   -529,     -9,
1108     -1871,   5685,  11290,  -2662,   1353,   -213,  -1972,  -7780,
1109      -432,   -111,    649,   1289,  -3917,   -304,    923,   1834,
1110       154,   -469,   -932,    220,  -3768,   5927,  -3093,   5041,
1111      5212,   -866,  -2144,   -584,  -1551,  -1658,   1363,   -711,
1112      1119,   1159,  -1824,    951,   1198,  -1885,    984,  -1603,
1113     -2546,   9502,   5969,  -2440,   1928,   -395,  -5511,  -2175,
1114      -363,   -226,   1477,    927,  -3462,   -379,   1415,    889,
1115       299,  -1118,   -702,    287,  -4963,   3568,   4592,   5508,
1116      3451,  -1503,   -777,  -1287,  -1851,   -727,   1080,   1391,
1117     -1000,   1668,  -1199,  -1543,   1045,   -751,   -967,  -1160,
1118      1745,  -2586,   3983,  10899,  -1551,   -186,   -408,   -968,
1119     -7250,   -146,    275,   -424,    628,  -1161,   1720,  -2649,
1120       165,   -244,    377,   1032,    867,   -456,   -727,   3369,
1121     11822,    -45,    -12,    -32,   -692,  -8531,     24,     38,
1122       -20,   -178,     93,    149,   -625,    329,    525,  -2431,
1123      7535,   2422,   1926,   1405,   1599,  -3466,   -358,   -226,
1124      -120,   -156,  -1114,   -886,   -284,   -646,   -207,   -165,
1125      -735,   -236,   -188,   -137,   1041,   -735,   -142,  13209,
1126      1515,    -66,    -33,     -1, -10649,   -140,     46,      9,
1127        -6,   -839,    593,    114,    -96,     68,     13,  -1222,
1128      7950,   6745,  -1444,  -1008,   2721,  -3857,  -2777,   -127,
1129       -62,   -452,  -3273,    700,    594,    489,    415,    -88,
1130     -1320,  -1120,    239,    167,  -4754,  -1379,   4522,   -578,
1131     -5733,  -1379,   -116,  -1248,    -20,  -2006,   -400,   1312,
1132       380,   -167,    -48,    159,  -1663,   -482,   1582,   -202,
1133      3220,   5978,   5923,   2430,  -2689,   -633,  -2181,  -2141,
1134      -360,   -441,  -1175,  -1164,  -2161,   -477,   -886,   -878,
1135       528,    981,    972,    398,    377,   1312,  13978,  -1470,
1136       677,     -8,   -105, -11925,   -132,    -28,    -30,   -321,
1137     -1119,     33,    117,   1254,    -15,    -54,   -577,     60,
1138     -3435,   6770,    314,   -885,   5686,   -720,  -2797,     -6,
1139       -47,  -1973,   1419,     65,   -129,   -185,    366,     16,
1140      1192,  -2349,   -109,    307,   3171,   8774,  -2260,   2679,
1141      3069,   -613,  -4699,   -312,   -438,   -575,  -1698,    437,
1142      1210,   -518,  -1435,    369,   -594,  -1643,    423,   -501,
1143      5557,   1509,   5407,   -125,  -7386,  -1884,   -139,  -1784,
1144         0,  -3330,   -511,  -1834,   -498,     42,     11,     41,
1145      2505,    680,   2438,    -56,  -2838,   2595,  13228,    271,
1146      1793,   -491,   -411, -10680,     -4,   -196,    449,   2291,
1147     -2095,     47,    -42,   -219,    310,   -284,  -1447,    -29,
1148       664,   -278,  14966,    951,   -711,    -26,     -4, -13672,
1149       -55,    -30,     11,   -606,    253,    -38,     16,   -869,
1150        28,    -12,    650,     41,    808,   1770,   8658,   5863,
1151     -1486,    -39,   -191,  -4576,  -2098,   -134,    -87,   -427,
1152      -935,   -289,   -633,  -3098,     73,    160,    785,    531,
1153      3063,   1539,   2000,   -542,   9576,   -572,   -144,   -244,
1154       -17,  -5597,   -287,   -374,   -188,    101,     51,     66,
1155     -1790,   -900,  -1169,    317,    514,  14083,   -323,    896,
1156      -891,    -16, -12106,     -6,    -49,    -48,   -442,     10,
1157       277,    -28,   -770,     17,     27,    766,    -17,     48,
1158       892,    158,   5237,  11057,  -1603,    -48,     -1,  -1674,
1159     -7462,   -156,     -8,   -285,    -50,   -602,   -106,  -3534,
1160        87,     15,    512,   1082,  -1612,   2564,  -4296,  12526,
1161      5710,   -158,   -401,  -1126,  -9576,  -1990,    252,   -422,
1162       672,   1232,  -1960,   3284,    561,   -893,   1497,  -4365,
1163      4889,  -6878,    612,   6109,   4753,  -1459,  -2887,    -22,
1164     -2277,  -1379,   2052,   -182,    257,  -1823,   2564,   -228,
1165     -1418,   1995,   -177,  -1772,   3053,   -506,   2403,   9625,
1166      1322,   -569,    -15,   -352,  -5655,   -106,     94,   -448,
1167        74,  -1794,    297,  -1412,   -246,     40,   -194,   -777,
1168      -754,  12904,   4480,  -2113,   1471,    -34, -10163,  -1225,
1169      -272,   -132,    594,    206,  -3529,    -97,   1664,    577,
1170        67,  -1159,   -402,    189,   4255,   1476,   5055,   2393,
1171      2912,  -1105,   -132,  -1559,   -349,   -517,   -383,  -1313,
1172      -455,   -621,   -215,   -738,   -756,   -262,   -898,   -425,
1173     -1371,    535,   1417,  14604,   -997,   -114,    -17,   -122,
1174    -13017,    -60,     44,    118,    -46,   1222,   -477,  -1263,
1175       -83,     32,     86,    888,   5368,  -1744,   4083,  -1236,
1176      3753,  -1758,   -185,  -1017,    -93,   -860,    571,  -1338,
1177       434,    405,   -131,    308,  -1229,    399,   -935,    283,
1178      1588,  -3097,  14415,   3699,  -1171,   -154,   -585, -12683,
1179      -835,    -83,    300,  -1397,   2725,   -358,    699,  -3255,
1180       113,   -221,   1030,    264,    212,   7989,   9471,  -3344,
1181      2009,     -2,  -3895,  -5475,   -682,   -246,   -103,   -123,
1182     -4618,     43,   1630,   1933,    -26,   -979,  -1161,    410,
1183       856,   2294,   -627,   6930,   6929,    -44,   -321,    -24,
1184     -2931,  -2930,   -119,     32,     87,   -362,   -970,    265,
1185      -362,   -970,    265,  -2931,   2357,  -4187,   7162,   7683,
1186      3371,   -339,  -1070,  -3131,  -3603,   -693,    602,  -1030,
1187      1830,  -1105,   1963,  -3359,   -485,    861,  -1474,  -1581,
1188       350,   4585,  14053,  -3819,   1218,     -7,  -1283, -12054,
1189      -890,    -90,    -97,   -300,  -3933,     81,   1068,   3275,
1190       -26,   -341,  -1045,    284,  -3248,   3531,    475,   2137,
1191     11711,   -644,   -761,    -13,   -278,  -8372,    700,     94,
1192      -102,    423,   -460,    -62,   2322,  -2524,   -340,  -1528,
1193     -3017,   3852,   1725,   8440,   5257,   -555,   -905,   -181,
1194     -4348,  -1686,    709,    317,   -405,   1554,  -1984,   -889,
1195       968,  -1236,   -553,  -2708,   -909,   3196,  15512,  -2528,
1196      1066,    -50,   -623, -14686,   -390,    -69,    177,    861,
1197     -3026,   -140,    493,   2393,     59,   -208,  -1009,    164,
1198       959,  -3370,   9617,   9545,  -1761,    -56,   -693,  -5645,
1199     -5561,   -189,    197,   -563,   1978,   -558,   1963,  -5603,
1200       103,   -362,   1034,   1026,   7575,  11796,  -4845,   3252,
1201     -1703,  -3502,  -8493,  -1433,   -645,   -177,  -5454,   2240,
1202      3488,  -1503,  -2341,    961,    787,   1226,   -503,    338,
1203      6409,   1722,   1764,  -4191,   6015,  -2507,   -181,   -189,
1204     -1072,  -2208,   -673,   -690,   -185,   1639,    440,    451,
1205     -2353,   -632,   -647,   1538,  -2420,  12161,   5038,   1286,
1206     -2098,   -357,  -9027,  -1549,   -100,   -268,   1796,    744,
1207     -3740,    190,   -954,   -395,   -310,   1557,    645,    164,
1208     -2232,  -1341,   7246,   9470,  -1977,   -304,   -109,  -3204,
1209     -5474,   -238,   -182,    987,    593,   1290,    775,  -4188,
1210      -269,   -161,    874,   1143,   1030,   7034,   4231,   1551,
1211      3077,    -64,  -3019,  -1093,   -146,   -577,   -442,   -266,
1212     -1816,    -97,   -666,   -400,   -193,  -1321,   -794,   -291,
1213      5121,  11835,   -477,  -1749,   2298,  -1601,  -8549,    -13,
1214      -186,   -322,  -3699,    149,    344,    546,   1264,    -50,
1215      -718,  -1660,     66,    245,  -3328,   3827,   5921,   9976,
1216     -1045,   -676,   -894,  -2140,  -6075,    -66,    777,   1203,
1217     -1383,   2027,  -2330,  -3605,   -212,    244,    377,    636,
1218      3813,   5718,  -4666,  -3412,   5674,   -887,  -1995,  -1329,
1219      -710,  -1965,  -1331,   1086,   1628,    794,   1191,   -972,
1220     -1320,  -1980,   1616,   1181,   1348,  -3672,  13154,   6938,
1221     -1690,   -110,   -823, -10561,  -2938,   -174,    302,  -1082,
1222      2948,   -570,   1555,  -5570,    139,   -379,   1357,    716,
1223      2151,  -3586,   6949,  12131,  -1224,   -282,   -785,  -2947,
1224     -8982,    -91,    470,   -912,   1521,  -1592,   2655,  -5145,
1225       160,   -268,    519,    906,  -2889,   9647,  10276,  -2728,
1226       995,   -509,  -5680,  -6445,   -454,    -60,   1701,   1812,
1227     -6051,   -481,   1606,   1711,    175,   -586,   -624,    165,
1228      6177,   2184,    555,   1985,   6589,  -2329,   -291,    -18,
1229      -240,  -2650,   -823,   -209,    -74,   -748,   -264,    -67,
1230     -2484,   -878,   -223,   -798,   -492,    391,  17166,   -681,
1231       240,    -14,     -9, -17987,    -28,     -3,     11,    515,
1232      -410,    -20,     16,    713,      7,     -5,   -252,     10,
1233     12628,   5448,  -2630,   3011,  -2695,  -9733,  -1811,   -422,
1234      -553,   -443,  -4199,   2027,    874,  -2321,  -1001,    483,
1235      2077,    896,   -432,    495,  -3628,   -534,   3447,   7002,
1236      6751,   -803,    -17,   -725,  -2992,  -2782,   -118,    763,
1237       112,   1550,    228,  -1473,   1495,    220,  -1420,  -2885,
1238     -5239,   5901,   8107,   3650,   4846,  -1675,  -2125,  -4012,
1239      -813,  -1433,   1887,   2592,  -2920,   1167,  -1315,  -1806,
1240      1550,  -1745,  -2398,  -1080,   6157,   6678,   4099,  -1074,
1241      2348,  -2314,  -2722,  -1025,    -70,   -336,  -2509,  -1540,
1242     -1670,    403,    437,    268,   -882,   -957,   -587,    153,
1243      1079,  16099,    242,   -881,   1690,    -71, -15820,     -3,
1244       -47,   -174,  -1060,    -16,   -238,     58,    865,     13,
1245      -111,  -1661,    -25,     90,   -278,    227,  -1039,   1636,
1246     16945,     -4,     -3,    -65,   -163, -17526,      3,    -17,
1247        14,     27,    -22,    103,    287,   -234,   1074,  -1693,
1248     15778,  -1454,    574,   -603,   -107, -15195,   -129,    -20,
1249       -22,      0,   1400,   -553,     51,    581,    -53,     21,
1250       103,     -9,      3,     -3,   2406,   -836,  13224,   7993,
1251     -4266,   -353,    -42, -10673,  -3899,  -1111,    122,  -1942,
1252       674,  -1174,    407,  -6451,    626,   -217,   3443,   2081,
1253      3184,  14368,  -3336,   2255,  -1801,   -619, -12600,   -679,
1254      -310,   -198,  -2793,    648,   2926,   -438,  -1977,    459,
1255       350,   1580,   -366,    247,  -1698,  17076,   2504,   -539,
1256      -646,   -176, -17798,   -382,    -17,    -25,   1770,    259,
1257     -2610,    -55,    561,     82,    -67,    673,     98,    -21,
1258      2375,   -797,  -2696,  14483,   5383,   -344,    -38,   -443,
1259    -12803,  -1769,    115,    391,   -131,  -2100,    705,   2384,
1260      -780,    262,    886,  -4759,  -2691,   2554,  -4520,   9573,
1261     10655,   -442,   -398,  -1247,  -5594,  -6930,    419,   -742,
1262       704,   1572,  -1492,   2641,   1750,  -1661,   2939,  -6226,
1263     -4332,  -4399,  -1657,   4880,   7375,  -1145,  -1181,   -167,
1264     -1453,  -3319,  -1163,   -438,   -444,   1290,   1310,    493,
1265      1950,   1980,    745,  -2196,  -3498,   7405,   9955,   2693,
1266     -2971,   -746,  -3347,  -6049,   -442,   -538,   1581,   2125,
1267     -4499,    575,  -1217,  -1636,   -634,   1342,   1805,    488,
1268      6717,  -3792,   7739,   2798,   3489,  -2754,   -877,  -3655,
1269      -477,   -743,   1554,  -3173,   1791,  -1147,    647,  -1321,
1270     -1430,    807,  -1648,   -595,   5263,   9770,   3463,   1069,
1271     -3971,  -1690,  -5826,   -732,    -69,   -962,  -3138,  -1112,
1272     -2065,   -343,   -637,   -226,   1275,   2368,    839,    259,
1273      1243,  -2634,  16772,   1871,    332,    -94,   -423, -17169,
1274      -213,     -6,    199,  -1273,   2696,   -142,    300,  -1915,
1275       -25,     53,   -339,    -37,   2691,   2836,   3105,   5711,
1276      4817,   -442,   -491,   -588,  -1991,  -1416,   -465,   -510,
1277      -537,   -938,   -988,  -1082,   -791,   -834,   -913,  -1679,
1278      4366,   2944,   7210,   3627,   1161,  -1163,   -529,  -3172,
1279      -803,    -82,   -784,  -1921,  -1295,   -966,   -651,  -1596,
1280      -309,   -208,   -511,   -257,  13888,   3951,   -671,  -2305,
1281      3354, -11773,   -953,    -27,   -324,   -686,  -3349,    569,
1282       161,   1954,    556,    -94,  -2843,   -809,    137,    472,
1283      7053,   5847,   2929,   8378,  -4794,  -3036,  -2086,   -523,
1284     -4284,  -1403,  -2517,  -1261,  -1045,  -3607,  -2990,  -1498,
1285      2064,   1711,    857,   2451,  -2191,  12838,   9182,  -3915,
1286      1617,   -293, -10059,  -5146,   -935,   -159,   1717,   1228,
1287     -7195,   -523,   3068,   2194,    216,  -1267,   -906,    386,
1288     -4881,  13114,   5767,   -435,   4155,  -1454, -10498,  -2030,
1289       -11,  -1054,   3907,   1718,  -4616,   -129,    348,    153,
1290      1238,  -3326,  -1462,    110,   7843,  -1250,    210,   7106,
1291     -5203,  -3754,    -95,     -2,  -3082,  -1652,    598,   -100,
1292        16,  -3402,    542,    -91,   2491,   -397,     66,   2257,
1293     -2463,   8168,  14551,  -3908,   1828,   -370,  -4072, -12923,
1294      -932,   -204,   1228,   2188,  -7254,   -587,   1948,   3471,
1295       274,   -911,  -1623,    436,  -1579,    347,   -272,  -2735,
1296     16031,   -152,     -7,     -4,   -456, -15686,     33,    -26,
1297         5,   -263,     58,    -45,   1545,   -340,    266,   2676,
1298     -6327,   1328,   5093,  -5079,   7617,  -2443,   -107,  -1583,
1299     -1574,  -3541,    513,   1967,   -413,  -1961,    411,   1578,
1300      2941,   -617,  -2367,   2361,   3286,  -4509,  11306,  11025,
1301     -2623,   -659,  -1241,  -7802,  -7419,   -420,    904,  -2267,
1302      3112,  -2211,   3034,  -7608,    526,   -722,   1810,   1765,
1303      5567,  17853,  -3754,   1166,   -519,  -1892, -19455,   -860,
1304       -83,    -16,  -6067,   1275,   4090,   -396,  -1271,    267,
1305       176,    566,   -119,     37,  -2136,   -424,  15292,   5108,
1306     -1648,   -278,    -10, -14273,  -1593,   -165,    -55,   1993,
1307       396,    666,    132,  -4768,   -214,    -42,   1538,    514,
1308      2267,  -3297,   2549,  16563,   -791,   -313,   -663,   -396,
1309    -16745,    -38,    456,   -352,    513,  -2291,   3333,  -2576,
1310       109,   -159,    123,    799,   3655,   1899,  -3364,   6279,
1311     12510,   -815,   -220,   -690,  -2406,  -9552,   -423,    750,
1312       390,  -1400,   -728,   1289,  -2791,  -1450,   2568,  -4794,
1313      8052,   2285,  -6193,   5138,   6003,  -3957,   -318,  -2341,
1314     -1611,  -2199,  -1123,   3044,    864,  -2525,   -716,   1942,
1315     -2950,   -837,   2269,  -1882,   -386,  -2291,   7679,  15387,
1316     -2723,     -9,   -320,  -3599, -14452,   -452,    -54,    181,
1317      1074,    362,   2152,  -7212,    -64,   -380,   1276,   2557,
1318      2777,  -1173,   3984,  13079,   2508,   -470,    -84,   -969,
1319    -10440,   -384,    198,   -675,    285,  -2217,    936,  -3180,
1320      -425,    179,   -610,  -2002,  -1879,   1771,  -2684,  16705,
1321      1833,   -215,   -191,   -439, -17032,   -205,    203,   -308,
1322       290,   1916,  -1805,   2736,    210,   -198,    300,  -1869,
1323      1052,   4495,  15519,   1467,  -4032,    -67,  -1233, -14700,
1324      -131,   -992,   -288,   -997,  -4257,    -94,   -402,  -1389,
1325       259,   1106,   3819,    361,   3010,   2544,   6969,   7559,
1326      1996,   -553,   -395,  -2964,  -3487,   -243,   -467,  -1280,
1327     -1082,  -1388,  -1174,  -3215,   -366,   -310,   -849,   -921,
1328     -5209,  -1867,   8713,  10351,   1549,  -1656,   -212,  -4634,
1329     -6540,   -146,   -593,   2770,    993,   3291,   1180,  -5505,
1330       492,    176,   -824,   -979,  -4314,   8513,    913,   7547,
1331     -2723,  -1135,  -4423,    -50,  -3476,   -452,   2241,    240,
1332      -474,   1987,  -3921,   -420,   -717,   1415,    151,   1254,
1333     12929,  -1219,   2448,   1757,   6303, -10204,    -90,   -365,
1334      -188,  -2425,    962,  -1932,    182,  -1386,    130,   -262,
1335     -4974,    469,   -941,   -676,   6465,   4132,   3167,   3160,
1336      5697,  -2551,  -1042,   -612,   -609,  -1981,  -1630,  -1249,
1337      -798,  -1247,   -797,   -611,  -2248,  -1437,  -1101,  -1099,
1338     -3636,   4859,  18914,  -1335,    810,   -807,  -1441, -21836,
1339      -108,    -40,   1078,   4198,  -5609,   -296,    396,   1541,
1340       179,   -240,   -936,     66,   8844,   7864,    654,  -4063,
1341     -5680,  -4774,  -3774,    -26,  -1007,  -1969,  -4245,   -353,
1342      -314,   2193,   1950,    162,   3066,   2726,    226,  -1408,
1343      1859,   2634,   9228,    996,   9464,   -211,   -423,  -5197,
1344       -60,  -5467,   -299,  -1047,  -1483,   -113,   -160,   -561,
1345     -1074,  -1521,  -5330,   -575,   2949,  12260,  10290,   -497,
1346     -3943,   -530,  -9174,  -6463,    -15,   -949,  -2206,  -1852,
1347     -7700,     89,    372,    312,    709,   2950,   2476,   -119,
1348     -2903,   1552,  14867,   9970,   -496,   -514,   -147, -13491,
1349     -6068,    -15,    275,   2634,  -1408,   1766,   -944,  -9047,
1350       -87,     47,    450,    302,   3243,   8234,   7586,   3373,
1351      2151,   -642,  -4138,  -3512,   -694,   -282,  -1630,  -1501,
1352     -3812,   -667,  -1695,  -1561,   -425,  -1081,   -996,   -442,
1353     -9631,     60,   3501,   5359,  10150,  -5662,      0,   -748,
1354     -1752,  -6288,     35,   2058,    -12,   3150,    -19,  -1145,
1355      5967,    -37,  -2169,  -3320,  -6874,  -2553,  -5446,  -2195,
1356     -7841,  -2884,   -397,  -1810,   -294,  -3753,  -1071,  -2285,
1357      -848,   -921,   -342,   -729,  -3290,  -1221,  -2606,  -1050,
1358     -3413,  -1141,   4630,  13612,   7897,   -711,    -79,  -1308,
1359    -11310,  -3806,   -237,    964,    322,   2836,    948,  -3847,
1360      1645,    550,  -2231,  -6561,   4410,  -5678,   8006,  -3992,
1361      3811,  -1187,  -1968,  -3912,   -973,   -886,   1528,  -2155,
1362      2775,   1074,  -1383,   1951,  -1025,   1321,  -1862,    928,
1363      5659,  11535,   2203,   -452,   7169,  -1954,  -8121,   -296,
1364       -12,  -3137,  -3984,   -761,  -1551,    156,    318,     60,
1365     -2476,  -5048,   -964,    197,   2914,  -2914,   3485,  -3965,
1366     13675,   -518,   -518,   -741,   -959, -11414,    518,   -620,
1367       620,    705,   -705,    843,  -2433,   2432,  -2909,   3310,
1368      7843,   1907,   1022,   8882,   7972,  -3755,   -222,    -63,
1369     -4815,  -3879,   -913,   -489,   -119,  -4252,  -1034,   -554,
1370     -3816,   -928,   -497,  -4322,  13807,   9531,   1436,   1612,
1371      1779, -11636,  -5544,   -125,   -158,   -193,  -8032,  -1210,
1372      -835,  -1358,   -938,   -141,  -1499,  -1035,   -156,   -175,
1373     13620,  -5337,   5450,  -2263,   1723, -11322,  -1738,  -1813,
1374      -312,   -181,   4436,  -4531,   1775,   1881,   -737,    752,
1375     -1432,    561,   -573,    238,   5297,   8374,   8872,   7694,
1376      6538,  -1712,  -4280,  -4804,  -3613,  -2609,  -2707,  -2868,
1377     -4534,  -2487,  -3932,  -4166,  -2113,  -3341,  -3540,  -3070
1378 };
1379
1380 /**
1381  * 0.65^i (Zero part) and 0.75^i (Pole part) scaled by 2^15
1382  */
1383 static const int16_t postfilter_tbl[2][LPC_ORDER] = {
1384     /* Zero */
1385     {21299, 13844,  8999,  5849, 3802, 2471, 1606, 1044,  679,  441},
1386     /* Pole */
1387     {24576, 18432, 13824, 10368, 7776, 5832, 4374, 3281, 2460, 1845}
1388 };
1389
1390 /**
1391  * Hamming window coefficients scaled by 2^15
1392  */
1393 static const int16_t hamming_window[LPC_FRAME] = {
1394      2621,  2631,  2659,  2705,  2770,  2853,  2955,  3074,  3212,  3367,
1395      3541,  3731,  3939,  4164,  4405,  4663,  4937,  5226,  5531,  5851,
1396      6186,  6534,  6897,  7273,  7661,  8062,  8475,  8899,  9334,  9780,
1397     10235, 10699, 11172, 11653, 12141, 12636, 13138, 13645, 14157, 14673,
1398     15193, 15716, 16242, 16769, 17298, 17827, 18356, 18884, 19411, 19935,
1399     20457, 20975, 21489, 21999, 22503, 23002, 23494, 23978, 24455, 24924,
1400     25384, 25834, 26274, 26704, 27122, 27529, 27924, 28306, 28675, 29031,
1401     29373, 29700, 30012, 30310, 30592, 30857, 31107, 31340, 31557, 31756,
1402     31938, 32102, 32249, 32377, 32488, 32580, 32654, 32710, 32747, 32766,
1403     32766, 32747, 32710, 32654, 32580, 32488, 32377, 32249, 32102, 31938,
1404     31756, 31557, 31340, 31107, 30857, 30592, 30310, 30012, 29700, 29373,
1405     29031, 28675, 28306, 27924, 27529, 27122, 26704, 26274, 25834, 25384,
1406     24924, 24455, 23978, 23494, 23002, 22503, 21999, 21489, 20975, 20457,
1407     19935, 19411, 18884, 18356, 17827, 17298, 16769, 16242, 15716, 15193,
1408     14673, 14157, 13645, 13138, 12636, 12141, 11653, 11172, 10699, 10235,
1409      9780, 9334,   8899,  8475,  8062,  7661,  7273,  6897,  6534,  6186,
1410      5851, 5531,   5226,  4937,  4663,  4405,  4164,  3939,  3731,  3541,
1411      3367, 3212,   3074,  2955,  2853,  2770,  2705,  2659,  2631,  2621
1412 };
1413
1414 /**
1415  * Binomial window coefficients scaled by 2^15
1416  */
1417 static const int16_t binomial_window[LPC_ORDER] = {
1418     32749, 32695, 32604, 32477, 32315, 32118, 31887, 31622, 31324, 30995
1419 };
1420
1421 /**
1422  * 0.994^i scaled by 2^15
1423  */
1424 static const int16_t bandwidth_expand[LPC_ORDER] = {
1425     32571, 32376, 32182, 31989, 31797, 31606, 31416, 31228, 31040, 30854
1426 };
1427
1428 /**
1429  * 0.5^i scaled by 2^15
1430  */
1431 static const int16_t percept_flt_tbl[2][LPC_ORDER] = {
1432     /* Zero part */
1433     {29491, 26542, 23888, 21499, 19349, 17414, 15673, 14106, 12695, 11425},
1434     /* Pole part */
1435     {16384,  8192,  4096,  2048,  1024,   512,   256,   128,    64,    32}
1436 };
1437
1438 static const int cng_adaptive_cb_lag[4] = { 1, 0, 1, 3 };
1439
1440 static const int cng_filt[4] = { 273, 998, 499, 333 };
1441
1442 static const int cng_bseg[3] = { 2048, 18432, 231233 };
1443
1444 #endif /* AVCODEC_G723_1_H */