[llvm-commits] CVS: llvm-test/MultiSource/Applications/oggenc/Makefile oggenc.c

Duraid Madina duraid at octopus.com.au
Sat Jan 21 06:50:13 PST 2006



Changes in directory llvm-test/MultiSource/Applications/oggenc:

Makefile added (r1.1)
oggenc.c added (r1.1)
---
Log message:


adding the ogg encoder



---
Diffs of the changes:  (+58422 -0)

 Makefile |   10 
 oggenc.c |58412 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 58422 insertions(+)


Index: llvm-test/MultiSource/Applications/oggenc/Makefile
diff -c /dev/null llvm-test/MultiSource/Applications/oggenc/Makefile:1.1
*** /dev/null	Sat Jan 21 08:50:11 2006
--- llvm-test/MultiSource/Applications/oggenc/Makefile	Sat Jan 21 08:50:01 2006
***************
*** 0 ****
--- 1,10 ----
+ LEVEL = ../../..
+ PROG = oggenc
+ 
+ CPPFLAGS =
+ LDFLAGS  = -lm
+ 
+ STDIN_FILENAME = $(SourceDir)/tune
+ RUN_OPTIONS="-Q -s 901820 -"
+ 
+ include ../../Makefile.multisrc


Index: llvm-test/MultiSource/Applications/oggenc/oggenc.c
diff -c /dev/null llvm-test/MultiSource/Applications/oggenc/oggenc.c:1.1
*** /dev/null	Sat Jan 21 08:50:13 2006
--- llvm-test/MultiSource/Applications/oggenc/oggenc.c	Sat Jan 21 08:50:01 2006
***************
*** 0 ****
--- 1,58412 ----
+ /* OggEnc
+  *
+  * This program is distributed under the GNU General Public License, version 2.
+  * A copy of this license is included with this source.
+  *
+  * Copyright 2000-2002, Michael Smith <msmith at xiph.org>
+  *
+  * Portions from Vorbize, (c) Kenneth Arnold <kcarnold at yahoo.com>
+  * and libvorbis examples, (c) Monty <monty at xiph.org>
+  */
+ #include <assert.h>
+ #include <ctype.h>
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <locale.h>
+ #include <math.h>
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <sys/stat.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
+ #include <time.h>
+ #include <unistd.h>
+ 
+ struct option
+ {
+ # if (defined __STDC__ && __STDC__) || defined __cplusplus
+   const char *name;
+ # else
+   char *name;
+ # endif
+   /* has_arg can't be an enum because some compilers complain about
+      type mismatches in all the code that assumes it is an int.  */
+   int has_arg;
+   int *flag;
+   int val;
+ };
+ 
+ # define no_argument            0
+ # define required_argument      1
+ # define optional_argument      2
+ 
+ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts);
+ extern int getopt_long (int ___argc, char *const *___argv,
+                         const char *__shortopts,
+                         const struct option *__longopts, int *__longind);
+ extern int getopt_long_only (int ___argc, char *const *___argv,
+                              const char *__shortopts,
+                              const struct option *__longopts, int *__longind);
+ 
+ extern int _getopt_internal (int ___argc, char *const *___argv,
+                              const char *__shortopts,
+                              const struct option *__longopts, int *__longind,
+                              int __long_only);
+ 
+ 
+ #define setbinmode(x) {}
+ #define DEFAULT_NAMEFMT_REMOVE "/"
+ #define DEFAULT_NAMEFMT_REPLACE NULL
+ 
+ #define __ENCODE_H
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+ 
+  ********************************************************************
+ 
+  function: libvorbis codec headers
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _vorbis_codec_h_
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the Xiph.Org Foundation http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: toplevel libogg include
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ #define _OGG_H
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the Xiph.Org Foundation http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: #ifdef jail to whip a few platforms into the UNIX ideal.
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ #define _OS_TYPES_H
+ 
+ /* make it easy on the folks that want to compile the libs with a
+    different malloc than stdlib */
+ #define _ogg_malloc  malloc
+ #define _ogg_calloc  calloc
+ #define _ogg_realloc realloc
+ #define _ogg_free    free
+ 
+ #define __CONFIG_TYPES_H__
+ 
+ /* these are filled in by configure */
+ typedef int16_t ogg_int16_t;
+ typedef u_int16_t ogg_uint16_t;
+ typedef int32_t ogg_int32_t;
+ typedef u_int32_t ogg_uint32_t;
+ typedef int64_t ogg_int64_t;
+ 
+ typedef struct {
+   long endbyte;
+   int  endbit;
+ 
+   unsigned char *buffer;
+   unsigned char *ptr;
+   long storage;
+ } oggpack_buffer;
+ 
+ /* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/
+ 
+ typedef struct {
+   unsigned char *header;
+   long header_len;
+   unsigned char *body;
+   long body_len;
+ } ogg_page;
+ 
+ /* ogg_stream_state contains the current encode/decode state of a logical
+    Ogg bitstream **********************************************************/
+ 
+ typedef struct {
+   unsigned char   *body_data;    /* bytes from packet bodies */
+   long    body_storage;          /* storage elements allocated */
+   long    body_fill;             /* elements stored; fill mark */
+   long    body_returned;         /* elements of fill returned */
+ 
+ 
+   int     *lacing_vals;      /* The values that will go to the segment table */
+   ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact
+ 				this way, but it is simple coupled to the
+ 				lacing fifo */
+   long    lacing_storage;
+   long    lacing_fill;
+   long    lacing_packet;
+   long    lacing_returned;
+ 
+   unsigned char    header[282];      /* working space for header encode */
+   int              header_fill;
+ 
+   int     e_o_s;          /* set when we have buffered the last packet in the
+                              logical bitstream */
+   int     b_o_s;          /* set after we've written the initial page
+                              of a logical bitstream */
+   long    serialno;
+   long    pageno;
+   ogg_int64_t  packetno;      /* sequence number for decode; the framing
+                              knows where there's a hole in the data,
+                              but we need coupling so that the codec
+                              (which is in a seperate abstraction
+                              layer) also knows about the gap */
+   ogg_int64_t   granulepos;
+ 
+ } ogg_stream_state;
+ 
+ /* ogg_packet is used to encapsulate the data and metadata belonging
+    to a single raw Ogg/Vorbis packet *************************************/
+ 
+ typedef struct {
+   unsigned char *packet;
+   long  bytes;
+   long  b_o_s;
+   long  e_o_s;
+ 
+   ogg_int64_t  granulepos;
+   
+   ogg_int64_t  packetno;     /* sequence number for decode; the framing
+ 				knows where there's a hole in the data,
+ 				but we need coupling so that the codec
+ 				(which is in a seperate abstraction
+ 				layer) also knows about the gap */
+ } ogg_packet;
+ 
+ typedef struct {
+   unsigned char *data;
+   int storage;
+   int fill;
+   int returned;
+ 
+   int unsynced;
+   int headerbytes;
+   int bodybytes;
+ } ogg_sync_state;
+ 
+ /* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
+ 
+ extern void  oggpack_writeinit(oggpack_buffer *b);
+ extern void  oggpack_writetrunc(oggpack_buffer *b,long bits);
+ extern void  oggpack_writealign(oggpack_buffer *b);
+ extern void  oggpack_writecopy(oggpack_buffer *b,void *source,long bits);
+ extern void  oggpack_reset(oggpack_buffer *b);
+ extern void  oggpack_writeclear(oggpack_buffer *b);
+ extern void  oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
+ extern void  oggpack_write(oggpack_buffer *b,unsigned long value,int bits);
+ extern long  oggpack_look(oggpack_buffer *b,int bits);
+ extern long  oggpack_look1(oggpack_buffer *b);
+ extern void  oggpack_adv(oggpack_buffer *b,int bits);
+ extern void  oggpack_adv1(oggpack_buffer *b);
+ extern long  oggpack_read(oggpack_buffer *b,int bits);
+ extern long  oggpack_read1(oggpack_buffer *b);
+ extern long  oggpack_bytes(oggpack_buffer *b);
+ extern long  oggpack_bits(oggpack_buffer *b);
+ extern unsigned char *oggpack_get_buffer(oggpack_buffer *b);
+ 
+ extern void  oggpackB_writeinit(oggpack_buffer *b);
+ extern void  oggpackB_writetrunc(oggpack_buffer *b,long bits);
+ extern void  oggpackB_writealign(oggpack_buffer *b);
+ extern void  oggpackB_writecopy(oggpack_buffer *b,void *source,long bits);
+ extern void  oggpackB_reset(oggpack_buffer *b);
+ extern void  oggpackB_writeclear(oggpack_buffer *b);
+ extern void  oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes);
+ extern void  oggpackB_write(oggpack_buffer *b,unsigned long value,int bits);
+ extern long  oggpackB_look(oggpack_buffer *b,int bits);
+ extern long  oggpackB_look1(oggpack_buffer *b);
+ extern void  oggpackB_adv(oggpack_buffer *b,int bits);
+ extern void  oggpackB_adv1(oggpack_buffer *b);
+ extern long  oggpackB_read(oggpack_buffer *b,int bits);
+ extern long  oggpackB_read1(oggpack_buffer *b);
+ extern long  oggpackB_bytes(oggpack_buffer *b);
+ extern long  oggpackB_bits(oggpack_buffer *b);
+ extern unsigned char *oggpackB_get_buffer(oggpack_buffer *b);
+ 
+ /* Ogg BITSTREAM PRIMITIVES: encoding **************************/
+ 
+ extern int      ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op);
+ extern int      ogg_stream_pageout(ogg_stream_state *os, ogg_page *og);
+ extern int      ogg_stream_flush(ogg_stream_state *os, ogg_page *og);
+ 
+ /* Ogg BITSTREAM PRIMITIVES: decoding **************************/
+ 
+ extern int      ogg_sync_init(ogg_sync_state *oy);
+ extern int      ogg_sync_clear(ogg_sync_state *oy);
+ extern int      ogg_sync_reset(ogg_sync_state *oy);
+ extern int	ogg_sync_destroy(ogg_sync_state *oy);
+ 
+ extern char    *ogg_sync_buffer(ogg_sync_state *oy, long size);
+ extern int      ogg_sync_wrote(ogg_sync_state *oy, long bytes);
+ extern long     ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
+ extern int      ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
+ extern int      ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
+ extern int      ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
+ extern int      ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
+ 
+ /* Ogg BITSTREAM PRIMITIVES: general ***************************/
+ 
+ extern int      ogg_stream_init(ogg_stream_state *os,int serialno);
+ extern int      ogg_stream_clear(ogg_stream_state *os);
+ extern int      ogg_stream_reset(ogg_stream_state *os);
+ extern int      ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
+ extern int      ogg_stream_destroy(ogg_stream_state *os);
+ extern int      ogg_stream_eos(ogg_stream_state *os);
+ 
+ extern void     ogg_page_checksum_set(ogg_page *og);
+ 
+ extern int      ogg_page_version(ogg_page *og);
+ extern int      ogg_page_continued(ogg_page *og);
+ extern int      ogg_page_bos(ogg_page *og);
+ extern int      ogg_page_eos(ogg_page *og);
+ extern ogg_int64_t  ogg_page_granulepos(ogg_page *og);
+ extern int      ogg_page_serialno(ogg_page *og);
+ extern long     ogg_page_pageno(ogg_page *og);
+ extern int      ogg_page_packets(ogg_page *og);
+ 
+ extern void     ogg_packet_clear(ogg_packet *op);
+ 
+ 
+ typedef struct vorbis_info{
+   int version;
+   int channels;
+   long rate;
+ 
+   /* The below bitrate declarations are *hints*.
+      Combinations of the three values carry the following implications:
+      
+      all three set to the same value: 
+        implies a fixed rate bitstream
+      only nominal set: 
+        implies a VBR stream that averages the nominal bitrate.  No hard 
+        upper/lower limit
+      upper and or lower set: 
+        implies a VBR bitstream that obeys the bitrate limits. nominal 
+        may also be set to give a nominal rate.
+      none set:
+        the coder does not care to speculate.
+   */
+ 
+   long bitrate_upper;
+   long bitrate_nominal;
+   long bitrate_lower;
+   long bitrate_window;
+ 
+   void *codec_setup;
+ } vorbis_info;
+ 
+ /* vorbis_dsp_state buffers the current vorbis audio
+    analysis/synthesis state.  The DSP state belongs to a specific
+    logical bitstream ****************************************************/
+ typedef struct vorbis_dsp_state{
+   int analysisp;
+   vorbis_info *vi;
+ 
+   float **pcm;
+   float **pcmret;
+   int      pcm_storage;
+   int      pcm_current;
+   int      pcm_returned;
+ 
+   int  preextrapolate;
+   int  eofflag;
+ 
+   long lW;
+   long W;
+   long nW;
+   long centerW;
+ 
+   ogg_int64_t granulepos;
+   ogg_int64_t sequence;
+ 
+   ogg_int64_t glue_bits;
+   ogg_int64_t time_bits;
+   ogg_int64_t floor_bits;
+   ogg_int64_t res_bits;
+ 
+   void       *backend_state;
+ } vorbis_dsp_state;
+ 
+ typedef struct vorbis_block{
+   /* necessary stream state for linking to the framing abstraction */
+   float  **pcm;       /* this is a pointer into local storage */ 
+   oggpack_buffer opb;
+   
+   long  lW;
+   long  W;
+   long  nW;
+   int   pcmend;
+   int   mode;
+ 
+   int         eofflag;
+   ogg_int64_t granulepos;
+   ogg_int64_t sequence;
+   vorbis_dsp_state *vd; /* For read-only access of configuration */
+ 
+   /* local storage to avoid remallocing; it's up to the mapping to
+      structure it */
+   void               *localstore;
+   long                localtop;
+   long                localalloc;
+   long                totaluse;
+   struct alloc_chain *reap;
+ 
+   /* bitmetrics for the frame */
+   long glue_bits;
+   long time_bits;
+   long floor_bits;
+   long res_bits;
+ 
+   void *internal;
+ 
+ } vorbis_block;
+ 
+ /* vorbis_block is a single block of data to be processed as part of
+ the analysis/synthesis stream; it belongs to a specific logical
+ bitstream, but is independant from other vorbis_blocks belonging to
+ that logical bitstream. *************************************************/
+ 
+ struct alloc_chain{
+   void *ptr;
+   struct alloc_chain *next;
+ };
+ 
+ /* vorbis_info contains all the setup information specific to the
+    specific compression/decompression mode in progress (eg,
+    psychoacoustic settings, channel setup, options, codebook
+    etc). vorbis_info and substructures are in backends.h.
+ *********************************************************************/
+ 
+ /* the comments are not part of vorbis_info so that vorbis_info can be
+    static storage */
+ typedef struct vorbis_comment{
+   /* unlimited user comment fields.  libvorbis writes 'libvorbis'
+      whatever vendor is set to in encode */
+   char **user_comments;
+   int   *comment_lengths;
+   int    comments;
+   char  *vendor;
+ 
+ } vorbis_comment;
+ 
+ 
+ /* libvorbis encodes in two abstraction layers; first we perform DSP
+    and produce a packet (see docs/analysis.txt).  The packet is then
+    coded into a framed OggSquish bitstream by the second layer (see
+    docs/framing.txt).  Decode is the reverse process; we sync/frame
+    the bitstream and extract individual packets, then decode the
+    packet back into PCM audio.
+ 
+    The extra framing/packetizing is used in streaming formats, such as
+    files.  Over the net (such as with UDP), the framing and
+    packetization aren't necessary as they're provided by the transport
+    and the streaming layer is not used */
+ 
+ /* Vorbis PRIMITIVES: general ***************************************/
+ 
+ extern void     vorbis_info_init(vorbis_info *vi);
+ extern void     vorbis_info_clear(vorbis_info *vi);
+ extern int      vorbis_info_blocksize(vorbis_info *vi,int zo);
+ extern void     vorbis_comment_init(vorbis_comment *vc);
+ extern void     vorbis_comment_add(vorbis_comment *vc, char *comment); 
+ extern void     vorbis_comment_add_tag(vorbis_comment *vc, 
+ 				       char *tag, char *contents);
+ extern char    *vorbis_comment_query(vorbis_comment *vc, char *tag, int count);
+ extern int      vorbis_comment_query_count(vorbis_comment *vc, char *tag);
+ extern void     vorbis_comment_clear(vorbis_comment *vc);
+ 
+ extern int      vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb);
+ extern int      vorbis_block_clear(vorbis_block *vb);
+ extern void     vorbis_dsp_clear(vorbis_dsp_state *v);
+ extern double   vorbis_granule_time(vorbis_dsp_state *v,
+ 				    ogg_int64_t granulepos);
+ 
+ /* Vorbis PRIMITIVES: analysis/DSP layer ****************************/
+ 
+ extern int      vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi);
+ extern int      vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
+ extern int      vorbis_analysis_headerout(vorbis_dsp_state *v,
+ 					  vorbis_comment *vc,
+ 					  ogg_packet *op,
+ 					  ogg_packet *op_comm,
+ 					  ogg_packet *op_code);
+ extern float  **vorbis_analysis_buffer(vorbis_dsp_state *v,int vals);
+ extern int      vorbis_analysis_wrote(vorbis_dsp_state *v,int vals);
+ extern int      vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb);
+ extern int      vorbis_analysis(vorbis_block *vb,ogg_packet *op);
+ 
+ extern int      vorbis_bitrate_addblock(vorbis_block *vb);
+ extern int      vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,
+ 					   ogg_packet *op);
+ 
+ /* Vorbis PRIMITIVES: synthesis layer *******************************/
+ extern int      vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,
+ 					  ogg_packet *op);
+ 
+ extern int      vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi);
+ extern int      vorbis_synthesis_restart(vorbis_dsp_state *v);
+ extern int      vorbis_synthesis(vorbis_block *vb,ogg_packet *op);
+ extern int      vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op);
+ extern int      vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb);
+ extern int      vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm);
+ extern int      vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm);
+ extern int      vorbis_synthesis_read(vorbis_dsp_state *v,int samples);
+ extern long     vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op);
+ 
+ extern int      vorbis_synthesis_halfrate(vorbis_info *v,int flag);
+ extern int      vorbis_synthesis_halfrate_p(vorbis_info *v);
+ 
+ /* Vorbis ERRORS and return codes ***********************************/
+ 
+ #define OV_FALSE      -1  
+ #define OV_EOF        -2
+ #define OV_HOLE       -3
+ 
+ #define OV_EREAD      -128
+ #define OV_EFAULT     -129
+ #define OV_EIMPL      -130
+ #define OV_EINVAL     -131
+ #define OV_ENOTVORBIS -132
+ #define OV_EBADHEADER -133
+ #define OV_EVERSION   -134
+ #define OV_ENOTAUDIO  -135
+ #define OV_EBADPACKET -136
+ #define OV_EBADLINK   -137
+ #define OV_ENOSEEK    -138
+ 
+ typedef void TIMER;
+ typedef long (*audio_read_func)(void *src, float **buffer, int samples);
+ typedef void (*progress_func)(char *fn, long totalsamples, 
+ 		long samples, double time);
+ typedef void (*enc_end_func)(char *fn, double time, int rate, 
+ 		long samples, long bytes);
+ typedef void (*enc_start_func)(char *fn, char *outfn, int bitrate, 
+         float quality, int qset, int managed, int min_br, int max_br);
+ typedef void (*error_func)(char *errormessage);
+ 
+ 
+ void *timer_start(void);
+ double timer_time(void *);
+ void timer_clear(void *);
+ int create_directories(char *);
+ 
+ void update_statistics_full(char *fn, long total, long done, double time);
+ void update_statistics_notime(char *fn, long total, long done, double time);
+ void update_statistics_null(char *fn, long total, long done, double time);
+ void start_encode_full(char *fn, char *outfn, int bitrate, float quality, int qset,
+         int managed, int min, int max);
+ void start_encode_null(char *fn, char *outfn, int bitrate, float quality, int qset,
+         int managed, int min, int max);
+ void final_statistics(char *fn, double time, int rate, long total_samples,
+ 		long bytes);
+ void final_statistics_null(char *fn, double time, int rate, long total_samples,
+ 		long bytes);
+ void encode_error(char *errmsg);
+ 
+ typedef struct {
+     char *arg;
+     char *val;
+ } adv_opt;
+ 
+ typedef struct
+ {
+ 	char **title;
+ 	int title_count;
+ 	char **artist;
+ 	int artist_count;
+ 	char **album;
+ 	int album_count;
+ 	char **comments;
+ 	int comment_count;
+ 	char **tracknum;
+ 	int track_count;
+ 	char **dates;
+ 	int date_count;
+ 	char **genre;
+ 	int genre_count;
+     adv_opt *advopt;
+     int advopt_count;
+ 	int copy_comments;
+ 
+ 	int quiet;
+ 
+ 	int rawmode;
+ 	int raw_samplesize;
+ 	int raw_samplerate;
+ 	int raw_channels;
+     int raw_endianness;
+ 
+ 	char *namefmt;
+     char *namefmt_remove;
+     char *namefmt_replace;
+ 	char *outfile;
+ 
+ 	/* All 3 in kbps */
+     int managed;
+ 	int min_bitrate;
+ 	int nominal_bitrate;
+ 	int max_bitrate;
+ 
+ 	/* Float from 0 to 1 (low->high) */
+ 	float quality;
+     int quality_set;
+ 
+     int resamplefreq;
+     int downmix;
+     float scale;
+ 
+ 	unsigned int serial;
+ } oe_options;
+ 
+ typedef struct
+ {
+ 	vorbis_comment *comments;
+ 	unsigned int serialno;
+ 
+ 	audio_read_func read_samples;
+ 	progress_func progress_update;
+ 	enc_end_func end_encode;
+ 	enc_start_func start_encode;
+ 	error_func error;
+ 	
+ 	void *readdata;
+ 
+ 	long total_samples_per_channel;
+ 	int channels;
+ 	long rate;
+ 	int samplesize;
+     int endianness;
+     int resamplefreq;
+ 	int copy_comments;
+ 
+ 	/* Various bitrate/quality options */
+     int managed;
+ 	int bitrate;
+ 	int min_bitrate;
+ 	int max_bitrate;
+ 	float quality;
+     int quality_set;
+     adv_opt *advopt;
+     int advopt_count;
+ 
+ 	FILE *out;
+ 	char *filename;
+ 	char *infilename;
+ } oe_enc_opt;
+ 
+ 
+ int oe_encode(oe_enc_opt *opt);
+ 
+ #define __AUDIO_H
+ 
+ int setup_resample(oe_enc_opt *opt);
+ void clear_resample(oe_enc_opt *opt);
+ void setup_downmix(oe_enc_opt *opt);
+ void clear_downmix(oe_enc_opt *opt);
+ void setup_scaler(oe_enc_opt *opt, float scale);
+ void clear_scaler(oe_enc_opt *opt);
+ 
+ typedef struct
+ {
+ 	int (*id_func)(unsigned char *buf, int len); /* Returns true if can load file */
+ 	int id_data_len; /* Amount of data needed to id whether this can load the file */
+ 	int (*open_func)(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen);
+ 	void (*close_func)(void *);
+ 	char *format;
+ 	char *description;
+ } input_format;
+ 
+ 
+ typedef struct {
+ 	short format;
+ 	short channels;
+ 	int samplerate;
+ 	int bytespersec;
+ 	short align;
+ 	short samplesize;
+ } wav_fmt;
+ 
+ typedef struct {
+ 	short channels;
+ 	short samplesize;
+ 	long totalsamples;
+ 	long samplesread;
+ 	FILE *f;
+ 	short bigendian;
+ } wavfile;
+ 
+ typedef struct {
+ 	short channels;
+ 	int totalframes;
+ 	short samplesize;
+ 	int rate;
+ 	int offset;
+ 	int blocksize;
+ } aiff_fmt;
+ 
+ typedef wavfile aifffile; /* They're the same */
+ 
+ input_format *open_audio_file(FILE *in, oe_enc_opt *opt);
+ 
+ int raw_open(FILE *in, oe_enc_opt *opt);
+ int wav_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen);
+ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen);
+ int wav_id(unsigned char *buf, int len);
+ int aiff_id(unsigned char *buf, int len);
+ void wav_close(void *);
+ void raw_close(void *);
+ 
+ long wav_read(void *, float **buffer, int samples);
+ long wav_ieee_read(void *, float **buffer, int samples);
+ long raw_read_stereo(void *, float **buffer, int samples);
+ 
+ #define _(X) (X)
+ #define textdomain(X)
+ #define bindtextdomain(X, Y)
+ #define N_(X) (X)
+ 
+ 
+ #define VERSION_STRING "OggEnc v1.0.1 (libvorbis 1.0.1)\n"
+ #define COPYRIGHT "(c) 2000-2003 Michael Smith <msmith at xiph.org>\n"
+ 
+ #define CHUNK 4096 /* We do reads, etc. in multiples of this */
+ 
+ struct option long_options[] = {
+ 	{"quiet",0,0,'Q'},
+ 	{"help",0,0,'h'},
+ 	{"comment",1,0,'c'},
+ 	{"artist",1,0,'a'},
+ 	{"album",1,0,'l'},
+ 	{"title",1,0,'t'},
+     {"genre",1,0,'G'},
+ 	{"names",1,0,'n'},
+     {"name-remove",1,0,'X'},
+     {"name-replace",1,0,'P'},
+ 	{"output",1,0,'o'},
+ 	{"version",0,0,'v'},
+ 	{"raw",0,0,'r'},
+ 	{"raw-bits",1,0,'B'},
+ 	{"raw-chan",1,0,'C'},
+ 	{"raw-rate",1,0,'R'},
+     {"raw-endianness",1,0, 0},
+ 	{"bitrate",1,0,'b'},
+ 	{"min-bitrate",1,0,'m'},
+ 	{"max-bitrate",1,0,'M'},
+ 	{"quality",1,0,'q'},
+ 	{"date",1,0,'d'},
+ 	{"tracknum",1,0,'N'},
+ 	{"serial",1,0,'s'},
+     {"managed", 0, 0, 0},
+     {"resample",1,0,0},
+     {"downmix", 0,0,0},
+     {"scale", 1, 0, 0}, 
+     {"advanced-encode-option", 1, 0, 0},
+ 	{"discard-comments", 0, 0, 0},
+ 	{NULL,0,0,0}
+ };
+ 	
+ static char *generate_name_string(char *format, char *remove_list, 
+         char *replace_list, char *artist, char *title, char *album, 
+         char *track, char *date, char *genre);
+ static void parse_options(int argc, char **argv, oe_options *opt);
+ static void build_comments(vorbis_comment *vc, oe_options *opt, int filenum, 
+ 		char **artist,char **album, char **title, char **tracknum, char **date,
+         char **genre);
+ static void usage(void);
+ 
+ int main(int argc, char **argv)
+ {
+ 	/* Default values */
+ 	oe_options opt = {NULL, 0, NULL, 0, NULL, 0, NULL, 0, NULL, 
+ 			  0, NULL, 0, NULL, 0, NULL, 0, 1, 0, 0,16,44100,2, 0, NULL,
+ 			  DEFAULT_NAMEFMT_REMOVE, DEFAULT_NAMEFMT_REPLACE, 
+ 			  NULL, 0, -1,-1,-1,.3,-1,0, 0,0.f, 0}; 
+ 
+ 	int i;
+ 
+ 	char **infiles;
+ 	int numfiles;
+ 	int errors=0;
+ 
+ 	parse_options(argc, argv, &opt);
+ 
+ 	if(optind >= argc)
+ 	{
+ 		fprintf(stderr, _("%s%s\nERROR: No input files specified. Use -h for help.\n"), VERSION_STRING, COPYRIGHT);
+ 		return 1;
+ 	}
+ 	else
+ 	{
+ 		infiles = argv + optind;
+ 		numfiles = argc - optind;
+ 	}
+ 
+ 	/* Now, do some checking for illegal argument combinations */
+ 
+ 	for(i = 0; i < numfiles; i++)
+ 	{
+ 		if(!strcmp(infiles[i], "-") && numfiles > 1)
+ 		{
+ 			fprintf(stderr, _("ERROR: Multiple files specified when using stdin\n"));
+ 			exit(1);
+ 		}
+ 	}
+ 
+ 	if(numfiles > 1 && opt.outfile)
+ 	{
+ 		fprintf(stderr, _("ERROR: Multiple input files with specified output filename: suggest using -n\n"));
+ 		exit(1);
+ 	}
+ 
+ 	if(opt.serial == 0)
+ 	{
+ 		/* We randomly pick a serial number. This is then incremented for each file */
+ 		srand(time(NULL));
+ 		opt.serial = rand();
+ 	}
+ 
+ 	for(i = 0; i < numfiles; i++)
+ 	{
+ 		/* Once through the loop for each file */
+ 
+ 		oe_enc_opt      enc_opts;
+ 		vorbis_comment  vc;
+ 		char *out_fn = NULL;
+ 		FILE *in, *out = NULL;
+ 		int foundformat = 0;
+ 		int closeout = 0, closein = 0;
+ 		char *artist=NULL, *album=NULL, *title=NULL, *track=NULL;
+         char *date=NULL, *genre=NULL;
+ 		input_format *format;
+ 
+ 		/* Set various encoding defaults */
+ 
+ 		enc_opts.serialno = opt.serial++;
+ 		enc_opts.progress_update = update_statistics_full;
+         enc_opts.start_encode = start_encode_full;
+ 		enc_opts.end_encode = final_statistics;
+ 		enc_opts.error = encode_error;
+ 		enc_opts.comments = &vc;
+ 		enc_opts.copy_comments = opt.copy_comments;
+ 
+ 		/* OK, let's build the vorbis_comments structure */
+ 		build_comments(&vc, &opt, i, &artist, &album, &title, &track, 
+                 &date, &genre);
+ 
+ 		if(!strcmp(infiles[i], "-"))
+ 		{
+ 			setbinmode(stdin);
+ 			in = stdin;
+             infiles[i] = NULL;
+ 			if(!opt.outfile)
+ 			{
+ 				setbinmode(stdout);
+ 				out = stdout;
+ 			}
+ 		}
+ 		else
+ 		{
+ 			in = fopen(infiles[i], "rb");
+ 
+ 			if(in == NULL)
+ 			{
+ 				fprintf(stderr, _("ERROR: Cannot open input file \"%s\": %s\n"), infiles[i], strerror(errno));
+ 				free(out_fn);
+ 				errors++;
+ 				continue;
+ 			}
+ 
+ 			closein = 1;
+ 		}
+ 
+ 		/* Now, we need to select an input audio format - we do this before opening
+ 		   the output file so that we don't end up with a 0-byte file if the input
+ 		   file can't be read */
+ 
+ 		if(opt.rawmode)
+ 		{
+ 			enc_opts.rate=opt.raw_samplerate;
+ 			enc_opts.channels=opt.raw_channels;
+ 			enc_opts.samplesize=opt.raw_samplesize;
+             enc_opts.endianness=opt.raw_endianness;
+ 			raw_open(in, &enc_opts);
+ 			foundformat=1;
+ 		}
+ 		else
+ 		{
+ 			format = open_audio_file(in, &enc_opts);
+ 			if(format)
+ 			{
+                 if(!opt.quiet)
+ 				    fprintf(stderr, _("Opening with %s module: %s\n"), 
+ 					    	format->format, format->description);
+ 				foundformat=1;
+ 			}
+ 
+ 		}
+ 
+ 		if(!foundformat)
+ 		{
+ 			fprintf(stderr, _("ERROR: Input file \"%s\" is not a supported format\n"), infiles[i]?infiles[i]:"(stdin)");
+     		if(closein)
+ 				fclose(in);
+ 			errors++;
+ 			continue;
+ 		}
+ 
+ 		/* Ok. We can read the file - so now open the output file */
+ 
+ 		if(opt.outfile && !strcmp(opt.outfile, "-"))
+ 		{
+ 			setbinmode(stdout);
+ 			out = stdout;
+ 		}
+ 		else if(out == NULL)
+ 		{
+ 			if(opt.outfile)
+ 			{
+ 				out_fn = strdup(opt.outfile);
+ 			}
+ 			else if(opt.namefmt)
+ 			{
+ 				out_fn = generate_name_string(opt.namefmt, opt.namefmt_remove, 
+                         opt.namefmt_replace, artist, title, album, track,date,
+                         genre);
+ 			}
+             /* This bit was widely derided in mid-2002, so it's been removed */
+             /*
+ 			else if(opt.title)
+ 			{
+ 				out_fn = malloc(strlen(title) + 5);
+ 				strcpy(out_fn, title);
+ 				strcat(out_fn, ".ogg");
+ 			}
+             */
+ 			else if(infiles[i])
+ 			{
+ 				/* Create a filename from existing filename, replacing extension with .ogg */
+ 				char *start, *end;
+ 
+ 				start = infiles[i];
+ 				end = strrchr(infiles[i], '.');
+ 				end = end?end:(start + strlen(infiles[i])+1);
+ 			
+ 				out_fn = malloc(end - start + 5);
+ 				strncpy(out_fn, start, end-start);
+ 				out_fn[end-start] = 0;
+ 				strcat(out_fn, ".ogg");
+ 			}
+             else {
+                 fprintf(stderr, _("WARNING: No filename, defaulting to \"default.ogg\"\n"));
+                 out_fn = strdup("default.ogg");
+             }
+ 
+             /* Create any missing subdirectories, if possible */
+             if(create_directories(out_fn)) {
+                 if(closein)
+                     fclose(in);
+ 				fprintf(stderr, _("ERROR: Could not create required subdirectories for output filename \"%s\"\n"), out_fn);
+ 				errors++;
+ 				free(out_fn);
+ 				continue;
+             }
+ 
+ 			out = fopen(out_fn, "wb");
+ 			if(out == NULL)
+ 			{
+ 				if(closein)
+ 					fclose(in);
+ 				fprintf(stderr, _("ERROR: Cannot open output file \"%s\": %s\n"), out_fn, strerror(errno));
+ 				errors++;
+ 				free(out_fn);
+ 				continue;
+ 			}	
+ 			closeout = 1;
+ 		}
+ 
+ 		/* Now, set the rest of the options */
+ 		enc_opts.out = out;
+ 		enc_opts.comments = &vc;
+ 		enc_opts.filename = out_fn;
+ 		enc_opts.infilename = infiles[i];
+         enc_opts.managed = opt.managed;
+ 		enc_opts.bitrate = opt.nominal_bitrate; 
+ 		enc_opts.min_bitrate = opt.min_bitrate;
+ 		enc_opts.max_bitrate = opt.max_bitrate;
+ 		enc_opts.quality = opt.quality;
+ 		enc_opts.quality_set = opt.quality_set;
+         enc_opts.advopt = opt.advopt;
+         enc_opts.advopt_count = opt.advopt_count;
+ 
+         if(opt.resamplefreq && opt.resamplefreq != enc_opts.rate) {
+             int fromrate = enc_opts.rate;
+             enc_opts.resamplefreq = opt.resamplefreq;
+             if(setup_resample(&enc_opts)) {
+                 errors++;
+                 goto clear_all;
+             }
+             else if(!opt.quiet)
+                 fprintf(stderr, _("Resampling input from %d Hz to %d Hz\n"), fromrate, opt.resamplefreq);
+         }
+ 
+         if(opt.downmix) {
+             if(enc_opts.channels == 2) {
+                 setup_downmix(&enc_opts);
+                 if(!opt.quiet)
+                     fprintf(stderr, _("Downmixing stereo to mono\n"));
+             }
+             else {
+                 fprintf(stderr, _("ERROR: Can't downmix except from stereo to mono\n"));
+                 errors++;
+                 if(opt.resamplefreq && opt.resamplefreq != enc_opts.rate)
+                     clear_resample(&enc_opts);
+                 goto clear_all;
+             }
+         }
+ 
+         if(opt.scale > 0.f) {
+             setup_scaler(&enc_opts, opt.scale);
+             if(!opt.quiet)
+                 fprintf(stderr, _("Scaling input to %f\n"), opt.scale);
+         }
+ 
+ 
+ 		if(!enc_opts.total_samples_per_channel)
+ 			enc_opts.progress_update = update_statistics_notime;
+ 
+ 		if(opt.quiet)
+ 		{
+             enc_opts.start_encode = start_encode_null;
+ 			enc_opts.progress_update = update_statistics_null;
+ 			enc_opts.end_encode = final_statistics_null;
+ 		}
+ 
+ 		if(oe_encode(&enc_opts))
+ 			errors++;
+ 
+         if(opt.scale > 0)
+             clear_scaler(&enc_opts);
+         if(opt.downmix)
+             clear_downmix(&enc_opts);
+         if(opt.resamplefreq && opt.resamplefreq != enc_opts.rate)
+             clear_resample(&enc_opts);
+ clear_all:
+ 
+ 		if(out_fn) free(out_fn);
+         if(opt.outfile) free(opt.outfile);
+ 		vorbis_comment_clear(&vc);
+ 		if(!opt.rawmode) 
+ 			format->close_func(enc_opts.readdata);
+ 
+ 		if(closein)
+ 			fclose(in);
+ 		if(closeout)
+ 			fclose(out);
+ 	}/* Finished this file, loop around to next... */
+ 
+ 	return errors?1:0;
+ 
+ }
+ 
+ static void usage(void)
+ {
+ 	fprintf(stdout, 
+ 		_("%s%s\n"
+ 		"Usage: oggenc [options] input.wav [...]\n"
+ 		"\n"
+ 		"OPTIONS:\n"
+ 		" General:\n"
+ 		" -Q, --quiet          Produce no output to stderr\n"
+ 		" -h, --help           Print this help text\n"
+ 		" -r, --raw            Raw mode. Input files are read directly as PCM data\n"
+ 		" -B, --raw-bits=n     Set bits/sample for raw input. Default is 16\n"
+ 		" -C, --raw-chan=n     Set number of channels for raw input. Default is 2\n"
+ 		" -R, --raw-rate=n     Set samples/sec for raw input. Default is 44100\n"
+         " --raw-endianness     1 for bigendian, 0 for little (defaults to 0)\n"
+ 		" -b, --bitrate        Choose a nominal bitrate to encode at. Attempt\n"
+ 		"                      to encode at a bitrate averaging this. Takes an\n"
+ 		"                      argument in kbps. This uses the bitrate management\n"
+         "                      engine, and is not recommended for most users.\n"
+         "                      See -q, --quality for a better alternative.\n"
+ 		" -m, --min-bitrate    Specify a minimum bitrate (in kbps). Useful for\n"
+ 		"                      encoding for a fixed-size channel.\n"
+ 		" -M, --max-bitrate    Specify a maximum bitrate in kbps. Useful for\n"
+ 		"                      streaming applications.\n"
+ 		" -q, --quality        Specify quality between 0 (low) and 10 (high),\n"
+ 		"                      instead of specifying a particular bitrate.\n"
+ 		"                      This is the normal mode of operation.\n"
+         "                      Fractional qualities (e.g. 2.75) are permitted\n"
+         "                      Quality -1 is also possible, but may not be of\n"
+         "                      acceptable quality.\n"
+         " --resample n         Resample input data to sampling rate n (Hz)\n"
+         " --downmix            Downmix stereo to mono. Only allowed on stereo\n"
+         "                      input.\n"
+ 		" -s, --serial         Specify a serial number for the stream. If encoding\n"
+ 		"                      multiple files, this will be incremented for each\n"
+ 		"                      stream after the first.\n"
+ 		" --discard-comments   Prevents comments in FLAC and Ogg FLAC files from\n"
+ 		"                      being copied to the output Ogg Vorbis file.\n"
+ 		"\n"
+ 		" Naming:\n"
+ 		" -o, --output=fn      Write file to fn (only valid in single-file mode)\n"
+ 		" -n, --names=string   Produce filenames as this string, with %%a, %%t, %%l,\n"
+ 		"                      %%n, %%d replaced by artist, title, album, track number,\n"
+ 		"                      and date, respectively (see below for specifying these).\n"
+ 		"                      %%%% gives a literal %%.\n"
+         " -X, --name-remove=s  Remove the specified characters from parameters to the\n"
+         "                      -n format string. Useful to ensure legal filenames.\n"
+         " -P, --name-replace=s Replace characters removed by --name-remove with the\n"
+         "                      characters specified. If this string is shorter than the\n"
+         "                      --name-remove list or is not specified, the extra\n"
+         "                      characters are just removed.\n"
+         "                      Default settings for the above two arguments are platform\n"
+         "                      specific.\n"
+ 		" -c, --comment=c      Add the given string as an extra comment. This may be\n"
+ 		"                      used multiple times. The argument should be in the\n"
+         "                      format \"tag=value\".\n"
+ 		" -d, --date           Date for track (usually date of performance)\n"
+ 		" -N, --tracknum       Track number for this track\n"
+ 		" -t, --title          Title for this track\n"
+ 		" -l, --album          Name of album\n"
+ 		" -a, --artist         Name of artist\n"
+         " -G, --genre          Genre of track\n"
+ 		"                      If multiple input files are given, then multiple\n"
+ 		"                      instances of the previous five arguments will be used,\n"
+ 		"                      in the order they are given. If fewer titles are\n"
+ 		"                      specified than files, OggEnc will print a warning, and\n"
+ 		"                      reuse the final one for the remaining files. If fewer\n"
+ 		"                      track numbers are given, the remaining files will be\n"
+ 		"                      unnumbered. For the others, the final tag will be reused\n"
+ 		"                      for all others without warning (so you can specify a date\n"
+ 		"                      once, for example, and have it used for all the files)\n"
+ 		"\n"
+ 		"INPUT FILES:\n"
+ 		" OggEnc input files must currently be 24, 16, or 8 bit PCM WAV, AIFF, or AIFF/C\n"
+ 		" files, 32 bit IEEE floating point WAV, and optionally FLAC or Ogg FLAC. Files\n"
+                 "  may be mono or stereo (or more channels) and any sample rate.\n"
+ 		" Alternatively, the --raw option may be used to use a raw PCM data file, which\n"
+ 		" must be 16 bit stereo little-endian PCM ('headerless wav'), unless additional\n"
+ 		" parameters for raw mode are specified.\n"
+ 		" You can specify taking the file from stdin by using - as the input filename.\n"
+ 		" In this mode, output is to stdout unless an output filename is specified\n"
+ 		" with -o\n"
+ 		"\n"), VERSION_STRING, COPYRIGHT);
+ }
+ 
+ static int strncpy_filtered(char *dst, char *src, int len, char *remove_list, 
+         char *replace_list)
+ {
+     char *hit, *drop_margin;
+     int used=0;
+ 
+     if(remove_list == NULL || *remove_list == 0)
+     {
+         strncpy(dst, src, len-1);
+         dst[len-1] = 0;
+         return strlen(dst);
+     }
+ 
+     drop_margin = remove_list + (replace_list == NULL?0:strlen(replace_list));
+ 
+     while(*src && used < len-1)
+     {
+         if((hit = strchr(remove_list, *src)) != NULL)
+         {
+             if(hit < drop_margin)
+             {
+                 *dst++ = replace_list[hit - remove_list];
+                 used++;
+             }
+         }
+         else
+         {
+             *dst++ = *src;
+             used++;
+         }
+         src++;
+     }
+     *dst = 0;
+ 
+     return used;
+ }
+ 
+ static char *generate_name_string(char *format, char *remove_list,
+         char *replace_list, char *artist, char *title, char *album, 
+         char *track, char *date, char *genre)
+ {
+ 	char *buffer;
+ 	char next;
+ 	char *string;
+ 	int used=0;
+ 	int buflen;
+ 
+ 	buffer = calloc(CHUNK+1,1);
+ 	buflen = CHUNK;
+ 
+ 	while(*format && used < buflen)
+ 	{
+ 		next = *format++;
+ 
+ 		if(next == '%')
+ 		{
+ 			switch(*format++)
+ 			{
+ 				case '%':
+ 					*(buffer+(used++)) = '%';
+ 					break;
+ 				case 'a':
+ 					string = artist?artist:_("(none)");
+ 					used += strncpy_filtered(buffer+used, string, buflen-used, 
+                             remove_list, replace_list);
+ 					break;
+ 				case 'd':
+ 					string = date?date:_("(none)");
+ 					used += strncpy_filtered(buffer+used, string, buflen-used,
+                             remove_list, replace_list);
+ 					break;
+                 case 'g':
+                     string = genre?genre:_("(none)");
+                     used += strncpy_filtered(buffer+used, string, buflen-used,
+                             remove_list, replace_list);
+                     break;
+ 				case 't':
+ 					string = title?title:_("(none)");
+ 					used += strncpy_filtered(buffer+used, string, buflen-used,
+                             remove_list, replace_list);
+ 					break;
+ 				case 'l':
+ 					string = album?album:_("(none)");
+ 					used += strncpy_filtered(buffer+used, string, buflen-used,
+                             remove_list, replace_list);
+ 					break;
+ 				case 'n':
+ 					string = track?track:_("(none)");
+ 					used += strncpy_filtered(buffer+used, string, buflen-used,
+                             remove_list, replace_list);
+ 					break;
+ 				default:
+ 					fprintf(stderr, _("WARNING: Ignoring illegal escape character '%c' in name format\n"), *(format - 1));
+ 					break;
+ 			}
+ 		}
+ 		else
+ 			*(buffer + (used++)) = next;
+ 	}
+ 
+ 	return buffer;
+ }
+ 
+ static void parse_options(int argc, char **argv, oe_options *opt)
+ {
+ 	int ret;
+ 	int option_index = 1;
+ 
+ 	while((ret = getopt_long(argc, argv, "A:a:b:B:c:C:d:G:hl:m:M:n:N:o:P:q:QrR:s:t:vX:", 
+ 					long_options, &option_index)) != -1)
+ 	{
+ 		switch(ret)
+ 		{
+ 			case 0:
+                 if(!strcmp(long_options[option_index].name, "managed")) {
+ 		            if(!opt->managed){
+                         if(!opt->quiet)
+             		        fprintf(stderr, 
+                                     _("Enabling bitrate management engine\n"));
+                         opt->managed = 1;
+         		    }
+                 }
+                 else if(!strcmp(long_options[option_index].name, 
+                             "raw-endianness")) {
+ 				    if (opt->rawmode != 1)
+     				{
+ 	    				opt->rawmode = 1;
+ 		    			fprintf(stderr, _("WARNING: Raw endianness specified for non-raw data. Assuming input is raw.\n"));
+ 			    	}
+ 				    if(sscanf(optarg, "%d", &opt->raw_endianness) != 1) {
+                         fprintf(stderr, _("WARNING: Couldn't read endianness argument \"%s\"\n"), optarg);
+     					opt->raw_endianness = 0;
+                     }
+                 }
+                 else if(!strcmp(long_options[option_index].name,
+                             "resample")) {
+ 				    if(sscanf(optarg, "%d", &opt->resamplefreq) != 1) {
+                         fprintf(stderr, _("WARNING: Couldn't read resampling frequency \"%s\"\n"), optarg);
+     					opt->resamplefreq = 0;
+                     }
+                     if(opt->resamplefreq < 100) /* User probably specified it
+                                                    in kHz accidently */
+                         fprintf(stderr, 
+                                 _("Warning: Resample rate specified as %d Hz. Did you mean %d Hz?\n"), 
+                                 opt->resamplefreq, opt->resamplefreq*1000);
+                 }
+                 else if(!strcmp(long_options[option_index].name, "downmix")) {
+                     opt->downmix = 1;
+                 }
+                 else if(!strcmp(long_options[option_index].name, "scale")) {
+                     opt->scale = atof(optarg);
+ 				    if(sscanf(optarg, "%f", &opt->scale) != 1) {
+                         opt->scale = 0;
+                         fprintf(stderr, _("Warning: Couldn't parse scaling factor \"%s\"\n"), 
+                                 optarg);
+                     }
+                 }
+                 else if(!strcmp(long_options[option_index].name, "advanced-encode-option")) {
+                     char *arg = strdup(optarg);
+                     char *val;
+ 
+                     val = strchr(arg, '=');
+                     if(val == NULL) {
+                         fprintf(stderr, _("No value for advanced encoder option found\n"));
+                         continue;
+                     }
+                     else
+                         *val++=0;
+ 
+                     opt->advopt = realloc(opt->advopt, (++opt->advopt_count)*sizeof(adv_opt));
+                     opt->advopt[opt->advopt_count - 1].arg = arg;
+                     opt->advopt[opt->advopt_count - 1].val = val;
+                 }
+                 else if(!strcmp(long_options[option_index].name, "discard-comments")) {
+ 		  opt->copy_comments = 0;
+ 		}
+ 
+                 else {
+ 				    fprintf(stderr, _("Internal error parsing command line options\n"));
+ 				    exit(1);
+                 }
+ 
+ 				break;
+ 			case 'a':
+ 				opt->artist = realloc(opt->artist, (++opt->artist_count)*sizeof(char *));
+ 				opt->artist[opt->artist_count - 1] = strdup(optarg);
+ 				break;
+ 			case 'c':
+                 if(strchr(optarg, '=') == NULL) {
+                     fprintf(stderr, _("Warning: Illegal comment used (\"%s\"), ignoring.\n"), optarg);
+                     break;
+                 }
+ 				opt->comments = realloc(opt->comments, (++opt->comment_count)*sizeof(char *));
+ 				opt->comments[opt->comment_count - 1] = strdup(optarg);
+ 				break;
+ 			case 'd':
+ 				opt->dates = realloc(opt->dates, (++opt->date_count)*sizeof(char *));
+ 				opt->dates[opt->date_count - 1] = strdup(optarg);
+ 				break;
+             case 'G':
+                 opt->genre = realloc(opt->genre, (++opt->genre_count)*sizeof(char *));
+                 opt->genre[opt->genre_count - 1] = strdup(optarg);
+                 break;
+ 			case 'h':
+ 				usage();
+ 				exit(0);
+ 				break;
+ 			case 'l':
+ 				opt->album = realloc(opt->album, (++opt->album_count)*sizeof(char *));
+ 				opt->album[opt->album_count - 1] = strdup(optarg);
+ 				break;
+ 			case 's':
+ 				/* Would just use atoi(), but that doesn't deal with unsigned
+ 				 * ints. Damn */
+ 				if(sscanf(optarg, "%u", &opt->serial) != 1)
+ 					opt->serial = 0; /* Failed, so just set to zero */
+ 				break;
+ 			case 't':
+ 				opt->title = realloc(opt->title, (++opt->title_count)*sizeof(char *));
+ 				opt->title[opt->title_count - 1] = strdup(optarg);
+ 				break;
+ 			case 'b':
+    				if(sscanf(optarg, "%d", &opt->nominal_bitrate)
+     					!= 1) {
+ 	    			fprintf(stderr, _("Warning: nominal bitrate \"%s\" not recognised\n"), optarg);
+ 		    		opt->nominal_bitrate = -1;
+ 				}
+ 
+ 				break;
+ 			case 'm':
+ 				if(sscanf(optarg, "%d", &opt->min_bitrate)
+ 						!= 1) {
+ 					fprintf(stderr, _("Warning: minimum bitrate \"%s\" not recognised\n"), optarg);
+ 					opt->min_bitrate = -1;
+ 				}
+ 				if(!opt->managed){
+ 				  if(!opt->quiet)
+ 				    fprintf(stderr, 
+ 					    _("Enabling bitrate management engine\n"));
+ 				  opt->managed = 1;
+ 				}
+ 				break;
+ 			case 'M':
+ 				if(sscanf(optarg, "%d", &opt->max_bitrate)
+ 						!= 1) {
+ 					fprintf(stderr, _("Warning: maximum bitrate \"%s\" not recognised\n"), optarg);
+ 					opt->max_bitrate = -1;
+ 				}
+ 				if(!opt->managed){
+ 				  if(!opt->quiet)
+ 				    fprintf(stderr, 
+ 					    _("Enabling bitrate management engine\n"));
+ 				  opt->managed = 1;
+ 				}
+ 				break;
+ 			case 'q':
+ 				if(sscanf(optarg, "%f", &opt->quality) != 1) {
+ 					fprintf(stderr, _("Quality option \"%s\" not recognised, ignoring\n"), optarg);
+ 					break;
+ 				}
+ 				opt->quality_set=1;
+ 				opt->quality *= 0.1;
+ 				if(opt->quality > 1.0f)
+ 				{
+ 					opt->quality = 1.0f;
+ 					fprintf(stderr, _("WARNING: quality setting too high, setting to maximum quality.\n"));
+ 				}
+ 				break;
+ 			case 'n':
+ 				if(opt->namefmt)
+ 				{
+ 					fprintf(stderr, _("WARNING: Multiple name formats specified, using final\n"));
+ 					free(opt->namefmt);
+ 				}
+ 				opt->namefmt = strdup(optarg);
+ 				break;
+             case 'X':
+ 				if(opt->namefmt_remove && opt->namefmt_remove != 
+                         DEFAULT_NAMEFMT_REMOVE)
+ 				{
+ 					fprintf(stderr, _("WARNING: Multiple name format filters specified, using final\n"));
+ 					free(opt->namefmt_remove);
+ 				}
+ 				opt->namefmt_remove = strdup(optarg);
+ 				break;
+             case 'P':
+ 				if(opt->namefmt_replace && opt->namefmt_replace != 
+                         DEFAULT_NAMEFMT_REPLACE)
+                 {
+ 					fprintf(stderr, _("WARNING: Multiple name format filter replacements specified, using final\n"));
+ 					free(opt->namefmt_replace);
+ 				}
+ 				opt->namefmt_replace = strdup(optarg);
+ 				break;
+ 			case 'o':
+ 				if(opt->outfile)
+ 				{
+ 					fprintf(stderr, _("WARNING: Multiple output files specified, suggest using -n\n"));
+ 					free(opt->outfile);
+ 				}
+ 				opt->outfile = strdup(optarg);
+ 				break;
+ 			case 'Q':
+ 				opt->quiet = 1;
+ 				break;
+ 			case 'r':
+ 				opt->rawmode = 1;
+ 				break;
+ 			case 'v':
+ 				fprintf(stdout, VERSION_STRING);
+ 				exit(0);
+ 				break;
+ 			case 'B':
+ 				if (opt->rawmode != 1)
+ 				{
+ 					opt->rawmode = 1;
+ 					fprintf(stderr, _("WARNING: Raw bits/sample specified for non-raw data. Assuming input is raw.\n"));
+ 				}
+ 				if(sscanf(optarg, "%u", &opt->raw_samplesize) != 1)
+ 				{
+ 					opt->raw_samplesize = 16; /* Failed, so just set to 16 */
+ 					fprintf(stderr, _("WARNING: Invalid bits/sample specified, assuming 16.\n"));
+ 				}
+ 				if((opt->raw_samplesize != 8) && (opt->raw_samplesize != 16))
+ 				{
+ 					fprintf(stderr, _("WARNING: Invalid bits/sample specified, assuming 16.\n"));
+ 				}
+ 				break;
+ 			case 'C':
+ 				if (opt->rawmode != 1)
+ 				{
+ 					opt->rawmode = 1;
+ 					fprintf(stderr, _("WARNING: Raw channel count specified for non-raw data. Assuming input is raw.\n"));
+ 				}
+ 				if(sscanf(optarg, "%u", &opt->raw_channels) != 1)
+ 				{
+ 					opt->raw_channels = 2; /* Failed, so just set to 2 */
+ 					fprintf(stderr, _("WARNING: Invalid channel count specified, assuming 2.\n"));
+ 				}
+ 				break;
+ 			case 'N':
+ 				opt->tracknum = realloc(opt->tracknum, (++opt->track_count)*sizeof(char *));
+ 				opt->tracknum[opt->track_count - 1] = strdup(optarg);
+ 				break;
+ 			case 'R':
+ 				if (opt->rawmode != 1)
+ 				{
+ 					opt->rawmode = 1;
+ 					fprintf(stderr, _("WARNING: Raw sample rate specified for non-raw data. Assuming input is raw.\n"));
+ 				}
+ 				if(sscanf(optarg, "%u", &opt->raw_samplerate) != 1)
+ 				{
+ 					opt->raw_samplerate = 44100; /* Failed, so just set to 44100 */
+ 					fprintf(stderr, _("WARNING: Invalid sample rate specified, assuming 44100.\n"));
+ 				}
+ 				break;
+ 			case '?':
+ 				fprintf(stderr, _("WARNING: Unknown option specified, ignoring->\n"));
+ 				break;
+ 			default:
+ 				usage();
+ 				exit(0);
+ 		}
+ 	}
+ 
+ }
+ 
+ static void add_tag(vorbis_comment *vc, oe_options *opt,char *name, char *value)
+ {
+   if(name == NULL)
+     vorbis_comment_add(vc, value);
+   else
+     vorbis_comment_add_tag(vc, name, value);
+ }
+ 
+ static void build_comments(vorbis_comment *vc, oe_options *opt, int filenum, 
+ 		char **artist, char **album, char **title, char **tracknum, 
+         char **date, char **genre)
+ {
+ 	int i;
+ 
+ 	vorbis_comment_init(vc);
+ 
+ 	for(i = 0; i < opt->comment_count; i++)
+ 		add_tag(vc, opt, NULL, opt->comments[i]);
+ 
+ 	if(opt->title_count)
+ 	{
+ 		if(filenum >= opt->title_count)
+ 		{
+ 			if(!opt->quiet)
+ 				fprintf(stderr, _("WARNING: Insufficient titles specified, defaulting to final title.\n"));
+ 			i = opt->title_count-1;
+ 		}
+ 		else
+ 			i = filenum;
+ 
+ 		*title = opt->title[i];
+ 		add_tag(vc, opt, "title", opt->title[i]);
+ 	}
+ 
+ 	if(opt->artist_count)
+ 	{
+ 		if(filenum >= opt->artist_count)
+ 			i = opt->artist_count-1;
+ 		else
+ 			i = filenum;
+ 	
+ 		*artist = opt->artist[i];
+ 		add_tag(vc, opt, "artist", opt->artist[i]);
+ 	}
+ 
+     if(opt->genre_count)
+     {
+         if(filenum >= opt->genre_count)
+             i = opt->genre_count-1;
+         else
+             i = filenum;
+ 
+         *genre = opt->genre[i];
+         add_tag(vc, opt, "genre", opt->genre[i]);
+     }
+ 
+ 	if(opt->date_count)
+ 	{
+ 		if(filenum >= opt->date_count)
+ 			i = opt->date_count-1;
+ 		else
+ 			i = filenum;
+ 	
+ 		*date = opt->dates[i];
+ 		add_tag(vc, opt, "date", opt->dates[i]);
+ 	}
+ 	
+ 	if(opt->album_count)
+ 	{
+ 		if(filenum >= opt->album_count)
+ 		{
+ 			i = opt->album_count-1;
+ 		}
+ 		else
+ 			i = filenum;
+ 
+ 		*album = opt->album[i];	
+ 		add_tag(vc, opt, "album", opt->album[i]);
+ 	}
+ 
+ 	if(filenum < opt->track_count)
+ 	{
+ 		i = filenum;
+ 		*tracknum = opt->tracknum[i];
+ 		add_tag(vc, opt, "tracknumber", opt->tracknum[i]);
+ 	}
+ }
+ 
+ /* OggEnc
+  **
+  ** This program is distributed under the GNU General Public License, version 2.
+  ** A copy of this license is included with this source.
+  **
+  ** Copyright 2000-2002, Michael Smith <msmith at xiph.org>
+  **
+  ** AIFF/AIFC support from OggSquish, (c) 1994-1996 Monty <xiphmont at xiph.org>
+  **/
+ 
+ 
+ /* This program is licensed under the GNU Library General Public License,
+  * version 2, a copy of which is included with this program (LICENCE.LGPL).
+  *   
+  * (c) 2002 Simon Hosie <gumboot at clear.net.nz>
+  *
+  *
+  * A resampler
+  *
+  * reference:
+  * 	'Digital Filters', third edition, by R. W. Hamming  ISBN 0-486-65088-X
+  *
+  * history:
+  *	2002-05-31	ready for the world (or some small section thereof)
+  *
+  *
+  * TOOD:
+  * 	zero-crossing clipping in coefficient table
+  */
+ 
+ #define _RESAMPLE_H_INCLUDED
+ 
+ typedef float SAMPLE;
+ 
+ typedef struct
+ {
+ 	unsigned int channels, infreq, outfreq, taps;
+ 	float *table;
+ 	SAMPLE *pool;
+ 
+ 	/* dynamic bits */
+ 	int poolfill;
+ 	int offset;
+ } res_state;
+ 
+ typedef enum
+ {
+ 	RES_END,
+ 	RES_GAIN,	/* (double)1.0 */
+ 	RES_CUTOFF,	/* (double)0.80 */ 
+ 	RES_TAPS,	/* (int)45 */
+ 	RES_BETA	/* (double)16.0 */
+ } res_parameter;
+ 
+ int res_init(res_state *state, int channels, int outfreq, int infreq, res_parameter op1, ...);
+ /*
+  * Configure *state to manage a data stream with the specified parameters.  The
+  * string 'params' is currently unspecified, but will configure the parameters
+  * of the filter.
+  *
+  * This function allocates memory, and requires that res_clear() be called when
+  * the buffer is no longer needed.
+  *
+  *
+  * All counts/lengths used in the following functions consider only the data in
+  * a single channel, and in numbers of samples rather than bytes, even though
+  * functionality will be mirrored across as many channels as specified here.
+  */
+ 
+ 
+ int res_push_max_input(res_state const *state, size_t maxoutput);
+ /*
+  *  Returns the maximum number of input elements that may be provided without
+  *  risk of flooding an output buffer of size maxoutput.  maxoutput is
+  *  specified in counts of elements, NOT in bytes.
+  */
+ 
+ 
+ int res_push_check(res_state const *state, size_t srclen);
+ /*
+  * Returns the number of elements that will be returned if the given srclen
+  * is used in the next call to res_push().
+  */
+ 
+ 
+ int res_push(res_state *state, SAMPLE **dstlist, SAMPLE const **srclist, size_t srclen);
+ int res_push_interleaved(res_state *state, SAMPLE *dest, SAMPLE const *source, size_t srclen);
+ /*
+  * Pushes srclen samples into the front end of the filter, and returns the
+  * number of resulting samples.
+  *
+  * res_push(): srclist and dstlist point to lists of pointers, each of which
+  * indicates the beginning of a list of samples.
+  *
+  * res_push_interleaved(): source and dest point to the beginning of a list of
+  * interleaved samples.
+  */
+ 
+ 
+ int res_drain(res_state *state, SAMPLE **dstlist);
+ int res_drain_interleaved(res_state *state, SAMPLE *dest);
+ /*
+  * Recover the remaining elements by flushing the internal pool with 0 values,
+  * and storing the resulting samples.
+  *
+  * After either of these functions are called, *state should only re-used in a
+  * final call to res_clear().
+  */
+ 
+ 
+ void res_clear(res_state *state);
+ /*
+  * Free allocated buffers, etc.
+  */
+ 
+ #define WAV_HEADER_SIZE 44
+ 
+ /* Macros to read header data */
+ #define READ_U32_LE(buf) \
+ 	(((buf)[3]<<24)|((buf)[2]<<16)|((buf)[1]<<8)|((buf)[0]&0xff))
+ 
+ #define READ_U16_LE(buf) \
+ 	(((buf)[1]<<8)|((buf)[0]&0xff))
+ 
+ #define READ_U32_BE(buf) \
+ 	(((buf)[0]<<24)|((buf)[1]<<16)|((buf)[2]<<8)|((buf)[3]&0xff))
+ 
+ #define READ_U16_BE(buf) \
+ 	(((buf)[0]<<8)|((buf)[1]&0xff))
+ 
+ /* Define the supported formats here */
+ input_format formats[] = {
+ 	{wav_id, 12, wav_open, wav_close, "wav", N_("WAV file reader")},
+ 	{aiff_id, 12, aiff_open, wav_close, "aiff", N_("AIFF/AIFC file reader")},
+ #ifdef HAVE_LIBFLAC
+ 	{flac_id,     4, flac_open, flac_close, "flac", N_("FLAC file reader")},
+ 	{oggflac_id, 32, flac_open, flac_close, "ogg", N_("Ogg FLAC file reader")},
+ #endif
+ 	{NULL, 0, NULL, NULL, NULL, NULL}
+ };
+ 
+ input_format *open_audio_file(FILE *in, oe_enc_opt *opt)
+ {
+ 	int j=0;
+ 	unsigned char *buf=NULL;
+ 	int buf_size=0, buf_filled=0;
+ 	int size,ret;
+ 
+ 	while(formats[j].id_func)
+ 	{
+ 		size = formats[j].id_data_len;
+ 		if(size >= buf_size)
+ 		{
+ 			buf = realloc(buf, size);
+ 			buf_size = size;
+ 		}
+ 
+ 		if(size > buf_filled)
+ 		{
+ 			ret = fread(buf+buf_filled, 1, buf_size-buf_filled, in);
+ 			buf_filled += ret;
+ 
+ 			if(buf_filled < size)
+ 			{ /* File truncated */
+ 				j++;
+ 				continue;
+ 			}
+ 		}
+ 
+ 		if(formats[j].id_func(buf, buf_filled))
+ 		{
+ 			/* ok, we now have something that can handle the file */
+ 			if(formats[j].open_func(in, opt, buf, buf_filled)) {
+                 free(buf);
+ 				return &formats[j];
+             }
+ 		}
+ 		j++;
+ 	}
+ 
+     free(buf);
+ 
+ 	return NULL;
+ }
+ 
+ static int seek_forward(FILE *in, int length)
+ {
+ 	if(fseek(in, length, SEEK_CUR))
+ 	{
+ 		/* Failed. Do it the hard way. */
+ 		unsigned char buf[1024];
+ 		int seek_needed = length, seeked;
+ 		while(seek_needed > 0)
+ 		{
+ 			seeked = fread(buf, 1, seek_needed>1024?1024:seek_needed, in);
+ 			if(!seeked)
+ 				return 0; /* Couldn't read more, can't read file */
+ 			else
+ 				seek_needed -= seeked;
+ 		}
+ 	}
+ 	return 1;
+ }
+ 
+ 
+ static int find_wav_chunk(FILE *in, char *type, unsigned int *len)
+ {
+ 	unsigned char buf[8];
+ 
+ 	while(1)
+ 	{
+ 		if(fread(buf,1,8,in) < 8) /* Suck down a chunk specifier */
+ 		{
+ 			fprintf(stderr, _("Warning: Unexpected EOF in reading WAV header\n"));
+ 			return 0; /* EOF before reaching the appropriate chunk */
+ 		}
+ 
+ 		if(memcmp(buf, type, 4))
+ 		{
+ 			*len = READ_U32_LE(buf+4);
+ 			if(!seek_forward(in, *len))
+ 				return 0;
+ 
+ 			buf[4] = 0;
+ 			fprintf(stderr, _("Skipping chunk of type \"%s\", length %d\n"), buf, *len);
+ 		}
+ 		else
+ 		{
+ 			*len = READ_U32_LE(buf+4);
+ 			return 1;
+ 		}
+ 	}
+ }
+ 
+ static int find_aiff_chunk(FILE *in, char *type, unsigned int *len)
+ {
+ 	unsigned char buf[8];
+ 
+ 	while(1)
+ 	{
+ 		if(fread(buf,1,8,in) <8)
+ 		{
+ 			fprintf(stderr, _("Warning: Unexpected EOF in AIFF chunk\n"));
+ 			return 0;
+ 		}
+ 
+ 		*len = READ_U32_BE(buf+4);
+ 
+ 		if(memcmp(buf,type,4))
+ 		{
+ 			if((*len) & 0x1)
+ 				(*len)++;
+ 
+ 			if(!seek_forward(in, *len))
+ 				return 0;
+ 		}
+ 		else
+ 			return 1;
+ 	}
+ }
+ 
+ 
+ 
+ double read_IEEE80(unsigned char *buf)
+ {
+ 	int s=buf[0]&0xff;
+ 	int e=((buf[0]&0x7f)<<8)|(buf[1]&0xff);
+ 	double f=((unsigned long)(buf[2]&0xff)<<24)|
+ 		((buf[3]&0xff)<<16)|
+ 		((buf[4]&0xff)<<8) |
+ 		 (buf[5]&0xff);
+ 
+ 	if(e==32767)
+ 	{
+ 		if(buf[2]&0x80)
+ 			return HUGE_VAL; /* Really NaN, but this won't happen in reality */
+ 		else
+ 		{
+ 			if(s)
+ 				return -HUGE_VAL;
+ 			else
+ 				return HUGE_VAL;
+ 		}
+ 	}
+ 
+ 	f=ldexp(f,32);
+ 	f+= ((buf[6]&0xff)<<24)|
+ 		((buf[7]&0xff)<<16)|
+ 		((buf[8]&0xff)<<8) |
+ 		 (buf[9]&0xff);
+ 
+ 	return ldexp(f, e-16446);
+ }
+ 
+ /* AIFF/AIFC support adapted from the old OggSQUISH application */
+ int aiff_id(unsigned char *buf, int len)
+ {
+ 	if(len<12) return 0; /* Truncated file, probably */
+ 
+ 	if(memcmp(buf, "FORM", 4))
+ 		return 0;
+ 
+ 	if(memcmp(buf+8, "AIF",3))
+ 		return 0;
+ 
+ 	if(buf[11]!='C' && buf[11]!='F')
+ 		return 0;
+ 
+ 	return 1;
+ }
+ 
+ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+ {
+ 	int aifc; /* AIFC or AIFF? */
+ 	unsigned int len;
+ 	unsigned char *buffer;
+ 	unsigned char buf2[8];
+ 	aiff_fmt format;
+ 	aifffile *aiff = malloc(sizeof(aifffile));
+ 
+ 	if(buf[11]=='C')
+ 		aifc=1;
+ 	else
+ 		aifc=0;
+ 
+ 	if(!find_aiff_chunk(in, "COMM", &len))
+ 	{
+ 		fprintf(stderr, _("Warning: No common chunk found in AIFF file\n"));
+ 		return 0; /* EOF before COMM chunk */
+ 	}
+ 
+ 	if(len < 18) 
+ 	{
+ 		fprintf(stderr, _("Warning: Truncated common chunk in AIFF header\n"));
+ 		return 0; /* Weird common chunk */
+ 	}
+ 
+ 	buffer = alloca(len);
+ 
+ 	if(fread(buffer,1,len,in) < len)
+ 	{
+ 		fprintf(stderr, _("Warning: Unexpected EOF in reading AIFF header\n"));
+ 		return 0;
+ 	}
+ 
+ 	format.channels = READ_U16_BE(buffer);
+ 	format.totalframes = READ_U32_BE(buffer+2);
+ 	format.samplesize = READ_U16_BE(buffer+6);
+ 	format.rate = (int)read_IEEE80(buffer+8);
+ 
+     aiff->bigendian = 1;
+ 
+ 	if(aifc)
+ 	{
+ 		if(len < 22)
+ 		{
+ 			fprintf(stderr, _("Warning: AIFF-C header truncated.\n"));
+ 			return 0;
+ 		}
+ 
+ 		if(!memcmp(buffer+18, "NONE", 4)) 
+ 		{
+ 			aiff->bigendian = 1;
+ 		}
+ 		else if(!memcmp(buffer+18, "sowt", 4)) 
+ 		{
+ 			aiff->bigendian = 0;
+ 		}
+ 		else
+ 		{
+ 			fprintf(stderr, _("Warning: Can't handle compressed AIFF-C (%c%c%c%c)\n"), *(buffer+18), *(buffer+19), *(buffer+20), *(buffer+21));
+ 			return 0; /* Compressed. Can't handle */
+ 		}
+ 	}
+ 
+ 	if(!find_aiff_chunk(in, "SSND", &len))
+ 	{
+ 		fprintf(stderr, _("Warning: No SSND chunk found in AIFF file\n"));
+ 		return 0; /* No SSND chunk -> no actual audio */
+ 	}
+ 
+ 	if(len < 8) 
+ 	{
+ 		fprintf(stderr, _("Warning: Corrupted SSND chunk in AIFF header\n"));
+ 		return 0; 
+ 	}
+ 
+ 	if(fread(buf2,1,8, in) < 8)
+ 	{
+ 		fprintf(stderr, _("Warning: Unexpected EOF reading AIFF header\n"));
+ 		return 0;
+ 	}
+ 
+ 	format.offset = READ_U32_BE(buf2);
+ 	format.blocksize = READ_U32_BE(buf2+4);
+ 
+ 	if( format.blocksize == 0 &&
+ 		(format.samplesize == 16 || format.samplesize == 8))
+ 	{
+ 		/* From here on, this is very similar to the wav code. Oh well. */
+ 		
+ 		opt->rate = format.rate;
+ 		opt->channels = format.channels;
+ 		opt->read_samples = wav_read; /* Similar enough, so we use the same */
+ 		opt->total_samples_per_channel = format.totalframes;
+ 
+ 		aiff->f = in;
+ 		aiff->samplesread = 0;
+ 		aiff->channels = format.channels;
+ 		aiff->samplesize = format.samplesize;
+ 		aiff->totalsamples = format.totalframes;
+ 
+ 		opt->readdata = (void *)aiff;
+ 
+ 		seek_forward(in, format.offset); /* Swallow some data */
+ 		return 1;
+ 	}
+ 	else
+ 	{
+ 		fprintf(stderr, 
+ 				_("Warning: OggEnc does not support this type of AIFF/AIFC file\n"
+ 				" Must be 8, 16, or 24 bit PCM.\n"));
+ 		return 0;
+ 	}
+ }
+ 
+ 
+ int wav_id(unsigned char *buf, int len)
+ {
+ 	unsigned int flen;
+ 	
+ 	if(len<12) return 0; /* Something screwed up */
+ 
+ 	if(memcmp(buf, "RIFF", 4))
+ 		return 0; /* Not wave */
+ 
+ 	flen = READ_U32_LE(buf+4); /* We don't use this */
+ 
+ 	if(memcmp(buf+8, "WAVE",4))
+ 		return 0; /* RIFF, but not wave */
+ 
+ 	return 1;
+ }
+ 
+ int wav_open(FILE *in, oe_enc_opt *opt, unsigned char *oldbuf, int buflen)
+ {
+ 	unsigned char buf[16];
+ 	unsigned int len;
+ 	int samplesize;
+ 	wav_fmt format;
+ 	wavfile *wav = malloc(sizeof(wavfile));
+ 
+ 	/* Ok. At this point, we know we have a WAV file. Now we have to detect
+ 	 * whether we support the subtype, and we have to find the actual data
+ 	 * We don't (for the wav reader) need to use the buffer we used to id this
+ 	 * as a wav file (oldbuf)
+ 	 */
+ 
+ 	if(!find_wav_chunk(in, "fmt ", &len))
+ 		return 0; /* EOF */
+ 
+ 	if(len < 16) 
+ 	{
+ 		fprintf(stderr, _("Warning: Unrecognised format chunk in WAV header\n"));
+ 		return 0; /* Weird format chunk */
+ 	}
+ 
+ 	/* A common error is to have a format chunk that is not 16 or 18 bytes
+ 	 * in size.  This is incorrect, but not fatal, so we only warn about 
+ 	 * it instead of refusing to work with the file.  Please, if you
+ 	 * have a program that's creating format chunks of sizes other than
+ 	 * 16 or 18 bytes in size, report a bug to the author.
+ 	 */
+ 	if(len!=16 && len!=18)
+ 		fprintf(stderr, 
+ 				_("Warning: INVALID format chunk in wav header.\n"
+ 				" Trying to read anyway (may not work)...\n"));
+ 
+ 	if(fread(buf,1,16,in) < 16)
+ 	{
+ 		fprintf(stderr, _("Warning: Unexpected EOF in reading WAV header\n"));
+ 		return 0;
+ 	}
+ 
+ 	/* Deal with stupid broken apps. Don't use these programs.
+ 	 */
+ 	if(len - 16 > 0 && !seek_forward(in, len-16))
+ 	    return 0;
+ 
+ 	format.format =      READ_U16_LE(buf); 
+ 	format.channels =    READ_U16_LE(buf+2); 
+ 	format.samplerate =  READ_U32_LE(buf+4);
+ 	format.bytespersec = READ_U32_LE(buf+8);
+ 	format.align =       READ_U16_LE(buf+12);
+ 	format.samplesize =  READ_U16_LE(buf+14);
+ 
+ 	if(!find_wav_chunk(in, "data", &len))
+ 		return 0; /* EOF */
+ 
+ 	if(format.format == 1)
+ 	{
+ 		samplesize = format.samplesize/8;
+ 		opt->read_samples = wav_read;
+ 	}
+ 	else if(format.format == 3)
+ 	{
+ 		samplesize = 4;
+ 		opt->read_samples = wav_ieee_read;
+ 	}
+ 	else
+ 	{
+ 		fprintf(stderr, 
+ 				_("ERROR: Wav file is unsupported type (must be standard PCM\n"
+ 				" or type 3 floating point PCM\n"));
+ 		return 0;
+ 	}
+ 
+ 
+ 
+ 	if( format.align == format.channels*samplesize &&
+ 			format.samplesize == samplesize*8 && 
+     		(format.samplesize == 24 || format.samplesize == 16 || 
+              format.samplesize == 8 ||
+ 	     (format.samplesize == 32 && format.format == 3)))
+ 	{
+ 		/* OK, good - we have the one supported format,
+ 		   now we want to find the size of the file */
+ 		opt->rate = format.samplerate;
+ 		opt->channels = format.channels;
+ 
+ 		wav->f = in;
+ 		wav->samplesread = 0;
+ 		wav->bigendian = 0;
+ 		wav->channels = format.channels; /* This is in several places. The price
+ 											of trying to abstract stuff. */
+ 		wav->samplesize = format.samplesize;
+ 
+ 		if(len)
+         {
+ 			opt->total_samples_per_channel = len/(format.channels*samplesize);
+ 		}
+ 		else
+ 		{
+ 			long pos;
+ 			pos = ftell(in);
+ 			if(fseek(in, 0, SEEK_END) == -1)
+ 			{
+ 				opt->total_samples_per_channel = 0; /* Give up */
+ 			}
+ 			else
+ 			{
+ 				opt->total_samples_per_channel = (ftell(in) - pos)/
+                     (format.channels*samplesize);
+ 				fseek(in,pos, SEEK_SET);
+ 			}
+ 		}
+ 		wav->totalsamples = opt->total_samples_per_channel;
+ 
+ 		opt->readdata = (void *)wav;
+ 		return 1;
+ 	}
+ 	else
+ 	{
+ 		fprintf(stderr, 
+ 				_("ERROR: Wav file is unsupported subformat (must be 8,16, or 24 bit PCM\n"
+ 				"or floating point PCM\n"));
+ 		return 0;
+ 	}
+ }
+ 
+ long wav_read(void *in, float **buffer, int samples)
+ {
+ 	wavfile *f = (wavfile *)in;
+ 	int sampbyte = f->samplesize / 8;
+ 	signed char *buf = alloca(samples*sampbyte*f->channels);
+ 	long bytes_read = fread(buf, 1, samples*sampbyte*f->channels, f->f);
+ 	int i,j;
+ 	long realsamples;
+ 
+ 	if(f->totalsamples && f->samplesread + 
+ 			bytes_read/(sampbyte*f->channels) > f->totalsamples) {
+ 		bytes_read = sampbyte*f->channels*(f->totalsamples - f->samplesread);
+     }
+ 
+ 	realsamples = bytes_read/(sampbyte*f->channels);
+ 	f->samplesread += realsamples;
+ 		
+ 	if(f->samplesize==8)
+ 	{
+ 		unsigned char *bufu = (unsigned char *)buf;
+ 		for(i = 0; i < realsamples; i++)
+ 		{
+ 			for(j=0; j < f->channels; j++)
+ 			{
+ 				buffer[j][i]=((int)(bufu[i*f->channels + j])-128)/128.0f;
+ 			}
+ 		}
+ 	}
+ 	else if(f->samplesize==16)
+ 	{
+ 		if(!f->bigendian)
+ 		{
+ 			for(i = 0; i < realsamples; i++)
+ 			{
+ 				for(j=0; j < f->channels; j++)
+ 				{
+ 					buffer[j][i] = ((buf[i*2*f->channels + 2*j + 1]<<8) |
+ 							        (buf[i*2*f->channels + 2*j] & 0xff))/32768.0f;
+ 				}
+ 			}
+ 		}
+ 		else
+ 		{
+ 			for(i = 0; i < realsamples; i++)
+ 			{
+ 				for(j=0; j < f->channels; j++)
+ 				{
+ 					buffer[j][i]=((buf[i*2*f->channels + 2*j]<<8) |
+ 							      (buf[i*2*f->channels + 2*j + 1] & 0xff))/32768.0f;
+ 				}
+ 			}
+ 		}
+ 	}
+     else if(f->samplesize==24) 
+     {
+         if(!f->bigendian) {
+             for(i = 0; i < realsamples; i++)
+             {
+                 for(j=0; j < f->channels; j++) 
+                 {
+                     buffer[j][i] = ((buf[i*3*f->channels + 3*j + 2] << 16) |
+                       (((unsigned char *)buf)[i*3*f->channels + 3*j + 1] << 8) |
+                       (((unsigned char *)buf)[i*3*f->channels + 3*j] & 0xff)) 
+                         / 8388608.0f;
+ 
+                 }
+             }
+         }
+         else {
+             fprintf(stderr, _("Big endian 24 bit PCM data is not currently "
+                               "supported, aborting.\n"));
+             return 0;
+         }
+     }
+     else {
+         fprintf(stderr, _("Internal error: attempt to read unsupported "
+                           "bitdepth %d\n"), f->samplesize);
+         return 0;
+     }
+ 
+ 	return realsamples;
+ }
+ 
+ long wav_ieee_read(void *in, float **buffer, int samples)
+ {
+ 	wavfile *f = (wavfile *)in;
+ 	float *buf = alloca(samples*4*f->channels); /* de-interleave buffer */
+ 	long bytes_read = fread(buf,1,samples*4*f->channels, f->f);
+ 	int i,j;
+ 	long realsamples;
+ 
+ 
+ 	if(f->totalsamples && f->samplesread +
+ 			bytes_read/(4*f->channels) > f->totalsamples)
+ 		bytes_read = 4*f->channels*(f->totalsamples - f->samplesread);
+ 	realsamples = bytes_read/(4*f->channels);
+ 	f->samplesread += realsamples;
+ 
+ 	for(i=0; i < realsamples; i++)
+ 		for(j=0; j < f->channels; j++)
+ 			buffer[j][i] = buf[i*f->channels + j];
+ 
+ 	return realsamples;
+ }
+ 
+ 
+ void wav_close(void *info)
+ {
+ 	wavfile *f = (wavfile *)info;
+ 
+ 	free(f);
+ }
+ 
+ int raw_open(FILE *in, oe_enc_opt *opt)
+ {
+ 	wav_fmt format; /* fake wave header ;) */
+ 	wavfile *wav = malloc(sizeof(wavfile));
+ 
+ 	/* construct fake wav header ;) */
+ 	format.format =      2; 
+ 	format.channels =    opt->channels;
+ 	format.samplerate =  opt->rate;
+ 	format.samplesize =  opt->samplesize;
+ 	format.bytespersec = opt->channels * opt->rate * opt->samplesize / 8;
+ 	format.align =       format.bytespersec;
+ 	wav->f =             in;
+ 	wav->samplesread =   0;
+ 	wav->bigendian =     opt->endianness;
+ 	wav->channels =      format.channels;
+ 	wav->samplesize =    opt->samplesize;
+     wav->totalsamples =  0;
+ 
+ 	opt->read_samples = wav_read;
+ 	opt->readdata = (void *)wav;
+ 	opt->total_samples_per_channel = 0; /* raw mode, don't bother */
+ 	return 1;
+ }
+ 
+ typedef struct {
+     res_state resampler;
+     audio_read_func real_reader;
+     void *real_readdata;
+     float **bufs;
+     int channels;
+     int bufsize;
+     int done;
+ } resampler;
+ 
+ static long read_resampled(void *d, float **buffer, int samples)
+ {
+     resampler *rs = d;
+     long in_samples;
+     int out_samples;
+ 
+     in_samples = res_push_max_input(&rs->resampler, samples);
+     if(in_samples > rs->bufsize)
+         in_samples = rs->bufsize;
+ 
+     in_samples = rs->real_reader(rs->real_readdata, rs->bufs, in_samples);
+ 
+     if(in_samples <= 0) {
+         if(!rs->done) {
+             rs->done = 1;
+             out_samples = res_drain(&rs->resampler, buffer);
+             return out_samples;
+         }
+         return 0;
+     }
+ 
+     out_samples = res_push(&rs->resampler, buffer, (float const **)rs->bufs, in_samples);
+ 
+     if(out_samples <= 0) {
+         fprintf(stderr, _("BUG: Got zero samples from resampler: your file will be truncated. Please report this.\n"));
+     }
+ 
+     return out_samples;
+ }
+ 
+ int setup_resample(oe_enc_opt *opt) {
+     resampler *rs = calloc(1, sizeof(resampler));
+     int c;
+ 
+     rs->bufsize = 4096; /* Shrug */
+     rs->real_reader = opt->read_samples;
+     rs->real_readdata = opt->readdata;
+     rs->bufs = malloc(sizeof(float *) * opt->channels);
+     rs->channels = opt->channels;
+     rs->done = 0;
+     if(res_init(&rs->resampler, rs->channels, opt->resamplefreq, opt->rate, RES_END))
+     {
+         fprintf(stderr, _("Couldn't initialise resampler\n"));
+         return -1;
+     }
+ 
+     for(c=0; c < opt->channels; c++)
+         rs->bufs[c] = malloc(sizeof(float) * rs->bufsize);
+ 
+     opt->read_samples = read_resampled;
+     opt->readdata = rs;
+     if(opt->total_samples_per_channel)
+         opt->total_samples_per_channel = (int)((float)opt->total_samples_per_channel * 
+             ((float)opt->resamplefreq/(float)opt->rate));
+     opt->rate = opt->resamplefreq;
+ 
+     return 0;
+ }
+ 
+ void clear_resample(oe_enc_opt *opt) {
+     resampler *rs = opt->readdata;
+     int i;
+ 
+     opt->read_samples = rs->real_reader;
+     opt->readdata = rs->real_readdata;
+     res_clear(&rs->resampler);
+ 
+     for(i = 0; i < rs->channels; i++)
+         free(rs->bufs[i]);
+ 
+     free(rs->bufs);
+ 
+     free(rs);
+ }
+ 
+ typedef struct {
+     audio_read_func real_reader;
+     void *real_readdata;
+     int channels;
+     float scale_factor;
+ } scaler;
+ 
+ static long read_scaler(void *data, float **buffer, int samples) {
+     scaler *d = data;
+     long in_samples = d->real_reader(d->real_readdata, buffer, samples);
+     int i,j;
+ 
+     for(i=0; i < d->channels; i++) {
+         for(j=0; j < in_samples; j++) {
+             buffer[i][j] *= d->scale_factor;
+         }
+     }
+ 
+     return in_samples;
+ }
+ 
+ 
+ void setup_scaler(oe_enc_opt *opt, float scale) {
+     scaler *d = calloc(1, sizeof(scaler));
+ 
+     d->real_reader = opt->read_samples;
+     d->real_readdata = opt->readdata;
+ 
+     opt->read_samples = read_scaler;
+     opt->readdata = d;
+     d->channels = opt->channels;
+     d->scale_factor = scale;
+ }
+ 
+ void clear_scaler(oe_enc_opt *opt) {
+     scaler *d = opt->readdata;
+ 
+     opt->read_samples = d->real_reader;
+     opt->readdata = d->real_readdata;
+ 
+     free(d);
+ }
+ 
+ typedef struct {
+     audio_read_func real_reader;
+     void *real_readdata;
+     float **bufs;
+ } downmix;
+ 
+ static long read_downmix(void *data, float **buffer, int samples)
+ {
+     downmix *d = data;
+     long in_samples = d->real_reader(d->real_readdata, d->bufs, samples);
+     int i;
+ 
+     for(i=0; i < in_samples; i++) {
+         buffer[0][i] = (d->bufs[0][i] + d->bufs[1][i])*0.5f;
+     }
+ 
+     return in_samples;
+ }
+ 
+ void setup_downmix(oe_enc_opt *opt) {
+     downmix *d = calloc(1, sizeof(downmix));
+ 
+     if(opt->channels != 2) {
+         fprintf(stderr, "Internal error! Please report this bug.\n");
+         return;
+     }
+     
+     d->bufs = malloc(2 * sizeof(float *));
+     d->bufs[0] = malloc(4096 * sizeof(float));
+     d->bufs[1] = malloc(4096 * sizeof(float));
+     d->real_reader = opt->read_samples;
+ 
+     d->real_readdata = opt->readdata;
+ 
+     opt->read_samples = read_downmix;
+     opt->readdata = d;
+ 
+     opt->channels = 1;
+ }
+ void clear_downmix(oe_enc_opt *opt) {
+     downmix *d = opt->readdata;
+ 
+     opt->read_samples = d->real_reader;
+     opt->readdata = d->real_readdata;
+     opt->channels = 2; /* other things in cleanup rely on this */
+ 
+     free(d->bufs[0]);
+     free(d->bufs[1]);
+     free(d->bufs);
+     free(d);
+ }
+ 
+ /* OggEnc
+  **
+  ** This program is distributed under the GNU General Public License, version 2.
+  ** A copy of this license is included with this source.
+  **
+  ** Copyright 2000-2002, Michael Smith <msmith at xiph.org>
+  **
+  ** Portions from Vorbize, (c) Kenneth Arnold <kcarnold at yahoo.com>
+  ** and libvorbis examples, (c) Monty <monty at xiph.org>
+  **/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: vorbis encode-engine setup
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _OV_ENC_H_
+ 
+ extern int vorbis_encode_init(vorbis_info *vi,
+ 			      long channels,
+ 			      long rate,
+ 			      
+ 			      long max_bitrate,
+ 			      long nominal_bitrate,
+ 			      long min_bitrate);
+ 
+ extern int vorbis_encode_setup_managed(vorbis_info *vi,
+ 				       long channels,
+ 				       long rate,
+ 				       
+ 				       long max_bitrate,
+ 				       long nominal_bitrate,
+ 				       long min_bitrate);
+   
+ extern int vorbis_encode_setup_vbr(vorbis_info *vi,
+ 				  long channels,
+ 				  long rate,
+ 				  
+ 				  float /* quality level from 0. (lo) to 1. (hi) */
+ 				  );
+ 
+ extern int vorbis_encode_init_vbr(vorbis_info *vi,
+ 				  long channels,
+ 				  long rate,
+ 				  
+ 				  float base_quality /* quality level from 0. (lo) to 1. (hi) */
+ 				  );
+ 
+ extern int vorbis_encode_setup_init(vorbis_info *vi);
+ 
+ extern int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg);
+ 
+ #define OV_ECTL_RATEMANAGE_GET       0x10
+ 
+ #define OV_ECTL_RATEMANAGE_SET       0x11
+ #define OV_ECTL_RATEMANAGE_AVG       0x12
+ #define OV_ECTL_RATEMANAGE_HARD      0x13
+ 
+ #define OV_ECTL_LOWPASS_GET          0x20
+ #define OV_ECTL_LOWPASS_SET          0x21
+ 
+ #define OV_ECTL_IBLOCK_GET           0x30
+ #define OV_ECTL_IBLOCK_SET           0x31
+ 
+ struct ovectl_ratemanage_arg {
+   int    management_active;
+ 
+   long   bitrate_hard_min;
+   long   bitrate_hard_max;
+   double bitrate_hard_window;
+ 
+   long   bitrate_av_lo;
+   long   bitrate_av_hi;
+   double bitrate_av_window;
+   double bitrate_av_window_center;
+ };
+ 
+ #define READSIZE 1024
+ 
+ 
+ int oe_write_page(ogg_page *page, FILE *fp);
+ 
+ #define SETD(toset) \
+     do {\
+         if(sscanf(opts[i].val, "%lf", &dval) != 1)\
+             fprintf(stderr, "For option %s, couldn't read value %s as double\n",\
+                     opts[i].arg, opts[i].val);\
+         else\
+             toset = dval;\
+     } while(0)
+ 
+ #define SETL(toset) \
+     do {\
+         if(sscanf(opts[i].val, "%ld", &lval) != 1)\
+             fprintf(stderr, "For option %s, couldn't read value %s as integer\n",\
+                     opts[i].arg, opts[i].val);\
+         else\
+             toset = lval;\
+     } while(0)
+ 
+ static void set_advanced_encoder_options(adv_opt *opts, int count, 
+         vorbis_info *vi)
+ {
+     int hard = 0;
+     int avg = 0;
+     struct ovectl_ratemanage_arg ai;
+     int i;
+     double dval;
+     long lval;
+ 
+     vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE_GET, &ai);
+ 
+     for(i=0; i < count; i++) {
+         fprintf(stderr, _("Setting advanced encoder option \"%s\" to %s\n"),
+                 opts[i].arg, opts[i].val);
+ 
+         if(!strcmp(opts[i].arg, "bitrate_average_window")) {
+             SETD(ai.bitrate_av_window);
+             avg = 1;
+         }
+         else if(!strcmp(opts[i].arg, "bitrate_average_window_center")) {
+             SETD(ai.bitrate_av_window_center);
+             avg = 1;
+         }
+         else if(!strcmp(opts[i].arg, "bitrate_average_low")) {
+             SETL(ai.bitrate_av_lo);
+             avg = 1;
+         }
+         else if(!strcmp(opts[i].arg, "bitrate_average_high")) {
+             SETL(ai.bitrate_av_hi);
+             avg = 1;
+         }
+         else if(!strcmp(opts[i].arg, "bitrate_hard_min")) {
+             SETL(ai.bitrate_hard_min);
+             hard = 1;
+         }
+         else if(!strcmp(opts[i].arg, "bitrate_hard_max")) {
+             SETL(ai.bitrate_hard_max);
+             hard = 1;
+         }
+         else if(!strcmp(opts[i].arg, "bitrate_hard_window")) {
+             SETD(ai.bitrate_hard_window);
+             hard = 1;
+         }
+         else if(!strcmp(opts[i].arg, "impulse_noisetune")) {
+             double val;
+             SETD(val);
+             vorbis_encode_ctl(vi, OV_ECTL_IBLOCK_SET, &val);
+         }
+         else if(!strcmp(opts[i].arg, "lowpass_frequency")) {
+             double prev, new;
+             SETD(new);
+             vorbis_encode_ctl(vi, OV_ECTL_LOWPASS_GET, &prev);
+             vorbis_encode_ctl(vi, OV_ECTL_LOWPASS_SET, &new);
+             fprintf(stderr, _("Changed lowpass frequency from %f kHz to %f kHz\n"), prev, new);
+         }
+         else {
+             fprintf(stderr, _("Unrecognised advanced option \"%s\"\n"), 
+                     opts[i].arg);
+         }
+     }
+ 
+     if(hard)
+         vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE_HARD, &ai);
+     if(avg)
+         vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE_AVG, &ai);
+ }
+ 
+ int oe_encode(oe_enc_opt *opt)
+ {
+ 
+ 	ogg_stream_state os;
+ 	ogg_page 		 og;
+ 	ogg_packet 		 op;
+ 
+ 	vorbis_dsp_state vd;
+ 	vorbis_block     vb;
+ 	vorbis_info      vi;
+ 
+ 	long samplesdone=0;
+     int eos;
+ 	long bytes_written = 0, packetsdone=0;
+ 	double time_elapsed;
+ 	int ret=0;
+ 	TIMER *timer;
+ 
+     if(opt->channels > 255) {
+         fprintf(stderr, _("255 channels should be enough for anyone. (Sorry, vorbis doesn't support more)\n"));
+         return 1;
+     }
+ 
+     /* get start time. */
+     timer = timer_start();
+ 
+     if(!opt->managed && (opt->min_bitrate>=0 || opt->max_bitrate>=0)){
+       fprintf(stderr, _("Requesting a minimum or maximum bitrate requires --managed\n"));
+       return 1;
+     }
+ 
+     /* if we had no quality or bitrate spec at all from the user, use
+        the default quality with no management --Monty 20020711 */
+     if(opt->bitrate < 0 && opt->min_bitrate < 0 && opt->max_bitrate < 0){
+       opt->quality_set=1;
+     }
+ 
+     opt->start_encode(opt->infilename, opt->filename, opt->bitrate, opt->quality, 
+ 		      opt->quality_set, opt->managed, opt->min_bitrate, opt->max_bitrate);
+     
+     /* Have vorbisenc choose a mode for us */
+     vorbis_info_init(&vi);
+     
+     if(opt->quality_set > 0){
+         if(vorbis_encode_setup_vbr(&vi, opt->channels, opt->rate, opt->quality)){
+ 	        fprintf(stderr, _("Mode initialisation failed: invalid parameters for quality\n"));
+ 	        vorbis_info_clear(&vi);
+ 	        return 1;
+         }
+ 
+         /* do we have optional hard quality restrictions? */
+         if(opt->max_bitrate > 0 || opt->min_bitrate > 0){
+             struct ovectl_ratemanage_arg ai;
+ 	        vorbis_encode_ctl(&vi, OV_ECTL_RATEMANAGE_GET, &ai);
+ 	
+ 	        ai.bitrate_hard_min=opt->min_bitrate;
+ 	        ai.bitrate_hard_max=opt->max_bitrate;
+ 	        ai.management_active=1;
+ 
+ 	        vorbis_encode_ctl(&vi, OV_ECTL_RATEMANAGE_SET, &ai);
+ 
+         }
+ 
+ 
+     }else {
+         if(vorbis_encode_setup_managed(&vi, opt->channels, opt->rate, 
+ 				     opt->max_bitrate>0?opt->max_bitrate*1000:-1,
+ 				     opt->bitrate*1000, 
+ 				     opt->min_bitrate>0?opt->min_bitrate*1000:-1)){
+ 	        fprintf(stderr, _("Mode initialisation failed: invalid parameters for bitrate\n"));
+ 	        vorbis_info_clear(&vi);
+ 	        return 1;
+         }
+     }
+     
+     if(opt->managed && opt->bitrate < 0)
+     {
+         vorbis_encode_ctl(&vi, OV_ECTL_RATEMANAGE_AVG, NULL);
+     }
+     else if(!opt->managed)
+     {
+         /* Turn off management entirely (if it was turned on). */
+         vorbis_encode_ctl(&vi, OV_ECTL_RATEMANAGE_SET, NULL);
+     }
+     
+     set_advanced_encoder_options(opt->advopt, opt->advopt_count, &vi);
+     
+     vorbis_encode_setup_init(&vi);
+ 
+ 
+ 	/* Now, set up the analysis engine, stream encoder, and other
+ 	   preparation before the encoding begins.
+ 	 */
+ 
+ 	vorbis_analysis_init(&vd,&vi);
+ 	vorbis_block_init(&vd,&vb);
+ 
+ 	ogg_stream_init(&os, opt->serialno);
+ 
+ 	/* Now, build the three header packets and send through to the stream 
+ 	   output stage (but defer actual file output until the main encode loop) */
+ 
+ 	{
+ 		ogg_packet header_main;
+ 		ogg_packet header_comments;
+ 		ogg_packet header_codebooks;
+ 		int result;
+ 
+ 		/* Build the packets */
+ 		vorbis_analysis_headerout(&vd,opt->comments,
+ 				&header_main,&header_comments,&header_codebooks);
+ 
+ 		/* And stream them out */
+ 		ogg_stream_packetin(&os,&header_main);
+ 		ogg_stream_packetin(&os,&header_comments);
+ 		ogg_stream_packetin(&os,&header_codebooks);
+ 
+ 		while((result = ogg_stream_flush(&os, &og)))
+ 		{
+ 			if(!result) break;
+ 			ret = oe_write_page(&og, opt->out);
+ 			if(ret != og.header_len + og.body_len)
+ 			{
+ 				opt->error(_("Failed writing header to output stream\n"));
+ 				ret = 1;
+ 				goto cleanup; /* Bail and try to clean up stuff */
+ 			}
+ 		}
+ 	}
+ 
+ 	eos = 0;
+ 
+ 	/* Main encode loop - continue until end of file */
+ 	while(!eos)
+ 	{
+ 		float **buffer = vorbis_analysis_buffer(&vd, READSIZE);
+ 		long samples_read = opt->read_samples(opt->readdata, 
+ 				buffer, READSIZE);
+ 
+ 		if(samples_read ==0)
+ 			/* Tell the library that we wrote 0 bytes - signalling the end */
+ 			vorbis_analysis_wrote(&vd,0);
+ 		else
+ 		{
+ 			samplesdone += samples_read;
+ 
+ 			/* Call progress update every 40 pages */
+ 			if(packetsdone>=40)
+ 			{
+ 				double time;
+ 
+ 				packetsdone = 0;
+ 				time = timer_time(timer);
+ 
+ 				opt->progress_update(opt->filename, opt->total_samples_per_channel, 
+ 						samplesdone, time);
+ 			}
+ 
+ 			/* Tell the library how many samples (per channel) we wrote 
+ 			   into the supplied buffer */
+ 			vorbis_analysis_wrote(&vd, samples_read);
+ 		}
+ 
+ 		/* While we can get enough data from the library to analyse, one
+ 		   block at a time... */
+ 		while(vorbis_analysis_blockout(&vd,&vb)==1)
+ 		{
+ 
+ 			/* Do the main analysis, creating a packet */
+ 			vorbis_analysis(&vb, NULL);
+ 			vorbis_bitrate_addblock(&vb);
+ 
+ 			while(vorbis_bitrate_flushpacket(&vd, &op)) 
+ 			{
+ 				/* Add packet to bitstream */
+ 				ogg_stream_packetin(&os,&op);
+ 				packetsdone++;
+ 
+ 				/* If we've gone over a page boundary, we can do actual output,
+ 				   so do so (for however many pages are available) */
+ 
+ 				while(!eos)
+ 				{
+ 					int result = ogg_stream_pageout(&os,&og);
+ 					if(!result) break;
+ 
+ 					ret = oe_write_page(&og, opt->out);
+ 					if(ret != og.header_len + og.body_len)
+ 					{
+ 						opt->error(_("Failed writing data to output stream\n"));
+ 						ret = 1;
+ 						goto cleanup; /* Bail */
+ 					}
+ 					else
+ 						bytes_written += ret; 
+ 	
+ 					if(ogg_page_eos(&og))
+ 						eos = 1;
+ 				}
+ 			}
+ 		}
+ 	}
+ 
+ 	ret = 0; /* Success, set return value to 0 since other things reuse it
+ 			  * for nefarious purposes. */
+ 
+ 	/* Cleanup time */
+ cleanup:
+ 
+ 	ogg_stream_clear(&os);
+ 
+ 	vorbis_block_clear(&vb);
+ 	vorbis_dsp_clear(&vd);
+ 	vorbis_info_clear(&vi);
+ 
+ 	time_elapsed = timer_time(timer);
+ 	opt->end_encode(opt->filename, time_elapsed, opt->rate, samplesdone, bytes_written);
+ 
+ 	timer_clear(timer);
+ 
+ 	return ret;
+ }
+ 
+ void update_statistics_full(char *fn, long total, long done, double time)
+ {
+ 	static char *spinner="|/-\\";
+ 	static int spinpoint = 0;
+ 	double remain_time;
+ 	int minutes=0,seconds=0;
+ 	
+ 	remain_time = time/((double)done/(double)total) - time;
+ 	minutes = ((int)remain_time)/60;
+ 	seconds = (int)(remain_time - (double)((int)remain_time/60)*60);
+ 
+ 	fprintf(stderr, "\r");
+ 	fprintf(stderr, _("\t[%5.1f%%] [%2dm%.2ds remaining] %c"), 
+ 			done*100.0/total, minutes, seconds, spinner[spinpoint++%4]);
+ }
+ 
+ void update_statistics_notime(char *fn, long total, long done, double time)
+ {
+ 	static char *spinner="|/-\\";
+ 	static int spinpoint =0;
+ 	
+ 	fprintf(stderr, "\r");
+ 	fprintf(stderr, _("\tEncoding [%2dm%.2ds so far] %c"), 
+             ((int)time)/60, (int)(time - (double)((int)time/60)*60),
+ 			spinner[spinpoint++%4]);
+ }
+ 
+ int oe_write_page(ogg_page *page, FILE *fp)
+ {
+ 	int written;
+ 	written = fwrite(page->header,1,page->header_len, fp);
+ 	written += fwrite(page->body,1,page->body_len, fp);
+ 
+ 	return written;
+ }
+ 
+ void final_statistics(char *fn, double time, int rate, long samples, long bytes)
+ {
+ 	double speed_ratio;
+ 	if(fn)
+ 		fprintf(stderr, _("\n\nDone encoding file \"%s\"\n"), fn);
+ 	else
+ 		fprintf(stderr, _("\n\nDone encoding.\n"));
+ 
+ 	speed_ratio = (double)samples / (double)rate / time;
+ 	
+ 	fprintf(stderr, _("\n\tFile length:  %dm %04.1fs\n"),
+ 			(int)(samples/rate/60),
+ 			samples/rate - 
+ 			floor(samples/rate/60)*60);
+ 	fprintf(stderr, _("\tElapsed time: %dm %04.1fs\n"),
+ 			(int)(time/60),
+ 			time - floor(time/60)*60);
+ 	fprintf(stderr, _("\tRate:         %.4f\n"), speed_ratio);
+ 	fprintf(stderr, _("\tAverage bitrate: %.1f kb/s\n\n"), 
+ 		8./1000.*((double)bytes/((double)samples/(double)rate)));
+ }
+ 
+ void final_statistics_null(char *fn, double time, int rate, long samples, 
+ 		long bytes)
+ {
+ 	/* Don't do anything, this is just a placeholder function for quiet mode */
+ }
+ 
+ void update_statistics_null(char *fn, long total, long done, double time)
+ {
+ 	/* So is this */
+ }
+ 
+ void encode_error(char *errmsg)
+ {
+ 	fprintf(stderr, "\n%s\n", errmsg);
+ }
+ 
+ static void print_brconstraints(int min, int max)
+ {
+     if(min > 0 && max > 0)
+         fprintf(stderr, "(min %d kbps, max %d kbps)", min,max);
+     else if(min > 0)
+         fprintf(stderr, "(min %d kbps, no max)", min);
+     else if(max > 0)
+         fprintf(stderr, "(no min, max %d kbps)", max);
+     else
+         fprintf(stderr, "(no min or max)");
+ }
+ 
+ void start_encode_full(char *fn, char *outfn, int bitrate, float quality, int qset,
+         int managed, int min, int max)
+ {
+   if(bitrate>0){
+     if(managed>0){
+       fprintf(stderr, _("Encoding %s%s%s to \n         "
+ 			"%s%s%s \nat average bitrate %d kbps "),
+ 	      fn?"\"":"", fn?fn:_("standard input"), fn?"\"":"",
+ 	      outfn?"\"":"", outfn?outfn:_("standard output"), outfn?"\"":"",
+ 	      bitrate);
+       print_brconstraints(min,max);
+       fprintf(stderr, ", \nusing full bitrate management engine\n");
+     } else {
+       fprintf(stderr, _("Encoding %s%s%s to \n         %s%s%s \nat approximate bitrate %d kbps (VBR encoding enabled)\n"),
+ 	      fn?"\"":"", fn?fn:_("standard input"), fn?"\"":"",
+ 	    outfn?"\"":"", outfn?outfn:_("standard output"), outfn?"\"":"",
+ 	      bitrate);
+     }
+   }else{
+     if(qset>0){
+       if(managed>0){
+ 	fprintf(stderr, _("Encoding %s%s%s to \n         %s%s%s \nat quality level %2.2f using constrained VBR "),
+ 		fn?"\"":"", fn?fn:_("standard input"), fn?"\"":"",
+ 		outfn?"\"":"", outfn?outfn:_("standard output"), outfn?"\"":"",
+ 		quality * 10);
+ 	print_brconstraints(min,max);
+ 	fprintf(stderr, "\n");
+       }else{
+         fprintf(stderr, _("Encoding %s%s%s to \n         %s%s%s \nat quality %2.2f\n"),
+ 			    fn?"\"":"", fn?fn:_("standard input"), fn?"\"":"",
+                 outfn?"\"":"", outfn?outfn:_("standard output"), outfn?"\"":"",
+                 quality * 10);
+       }
+     }else{
+       fprintf(stderr, _("Encoding %s%s%s to \n         %s%s%s \nusing bitrate management "),
+ 	      fn?"\"":"", fn?fn:_("standard input"), fn?"\"":"",
+ 	      outfn?"\"":"", outfn?outfn:_("standard output"), outfn?"\"":"");
+       print_brconstraints(min,max);
+       fprintf(stderr, "\n");
+     }
+   }
+ }
+ 
+ void start_encode_null(char *fn, char *outfn, int bitrate, float quality, int qset,
+         int managed, int min, int max)
+ {
+ }
+ 
+ 
+ /* OggEnc
+  **
+  ** This program is distributed under the GNU General Public License, version 2.
+  ** A copy of this license is included with this source.
+  **
+  ** Copyright 2000, Michael Smith <msmith at xiph.org>
+  **
+  ** Portions from Vorbize, (c) Kenneth Arnold <kcarnold at yahoo.com>
+  ** and libvorbis examples, (c) Monty <monty at xiph.org>
+  **/
+ 
+ /* Platform support routines  - win32, OS/2, unix */
+ 
+ 
+ #if defined(_WIN32) && defined(_MSC_VER)
+ 
+ void setbinmode(FILE *f)
+ {
+ 	_setmode( _fileno(f), _O_BINARY );
+ }
+ #endif /* win32 */
+ 
+ #ifdef __EMX__
+ void setbinmode(FILE *f) 
+ {
+ 	        _fsetmode( f, "b");
+ }
+ #endif
+ 
+ #if defined(__WATCOMC__) || defined(__BORLANDC__)
+ void setbinmode(FILE *f)
+ {
+ 	setmode(fileno(f), O_BINARY);
+ }
+ #endif
+ 
+ 
+ #if defined(_WIN32) || defined(__EMX__) || defined(__WATCOMC__)
+ void *timer_start(void)
+ {
+ 	time_t *start = malloc(sizeof(time_t));
+ 	time(start);
+ 	return (void *)start;
+ }
+ 
+ double timer_time(void *timer)
+ {
+ 	time_t now = time(NULL);
+ 	time_t start = *((time_t *)timer);
+ 
+     if(now-start)
+     	return (double)(now-start);
+     else
+         return 1; /* To avoid division by zero later, for very short inputs */
+ }
+ 
+ 
+ void timer_clear(void *timer)
+ {
+ 	free((time_t *)timer);
+ }
+ 
+ #else /* unix. Or at least win32 */
+ 
+ void *timer_start(void)
+ {
+ 	struct timeval *start = malloc(sizeof(struct timeval));
+ 	gettimeofday(start, NULL);
+ 	return (void *)start;
+ }
+ 
+ double timer_time(void *timer)
+ {
+ 	struct timeval now;
+ 	struct timeval start = *((struct timeval *)timer);
+ 
+ 	gettimeofday(&now, NULL);
+ 
+ 	return (double)now.tv_sec - (double)start.tv_sec + 
+ 		((double)now.tv_usec - (double)start.tv_usec)/1000000.0;
+ }
+ 
+ void timer_clear(void *timer)
+ {
+ 	free((time_t *)timer);
+ }
+ 
+ #endif
+ 
+ #ifdef _WIN32
+ 
+ #define PATH_SEPS "/\\"
+ #define mkdir(x,y) _mkdir((x))
+ 
+ /* MSVC does this, borland doesn't? */
+ #ifndef __BORLANDC__
+ #define stat _stat
+ #endif
+ 
+ #else
+ 
+ #define PATH_SEPS "/"
+ 
+ #endif
+ 
+ int create_directories(char *fn)
+ {
+     char *end, *start;
+     struct stat statbuf;
+     char *segment = malloc(strlen(fn)+1);
+ 
+     start = fn;
+ #ifdef _WIN32
+     if(strlen(fn) >= 3 && isalpha(fn[0]) && fn[1]==':')
+         start = start+2;
+ #endif
+ 
+     while((end = strpbrk(start+1, PATH_SEPS)) != NULL)
+     {
+         memcpy(segment, fn, end-fn);
+         segment[end-fn] = 0;
+ 
+         if(stat(segment,&statbuf)) {
+             if(errno == ENOENT) {
+                 if(mkdir(segment, 0777)) {
+                     fprintf(stderr, _("Couldn't create directory \"%s\": %s\n"),
+                             segment, strerror(errno));
+                     free(segment);
+                     return -1;
+                 }
+             }
+             else {
+                 fprintf(stderr, _("Error checking for existence of directory %s: %s\n"), 
+                             segment, strerror(errno));
+                 free(segment);
+                 return -1;
+             }
+         }
+ #if defined(_WIN32) && !defined(__BORLANDC__)
+         else if(!(_S_IFDIR & statbuf.st_mode)) {
+ #elif defined(__BORLANDC__)
+         else if(!(S_IFDIR & statbuf.st_mode)) {
+ #else
+         else if(!S_ISDIR(statbuf.st_mode)) {
+ #endif
+             fprintf(stderr, _("Error: path segment \"%s\" is not a directory\n"),
+                     segment);
+             free(segment);
+             return -1;
+         }
+ 
+         start = end+1;
+     }
+ 
+     free(segment);
+     return 0;
+ 
+ }
+ 
+ 
+ 
+ /* resample.c: see resample.h for interesting stuff */
+ 
+ 
+ /* Some systems don't define this */
+ #ifndef M_PI
+ #define M_PI       3.14159265358979323846 
+ #endif
+ 
+ static int hcf(int arg1, int arg2)
+ {
+ 	int mult = 1;
+ 
+ 	while (~(arg1 | arg2) & 1)
+ 		arg1 >>= 1, arg2 >>= 1, mult <<= 1;
+ 
+ 	while (arg1 > 0)
+ 	{
+ 		if (~(arg1 & arg2) & 1)
+ 		{
+ 			arg1 >>= (~arg1 & 1);
+ 			arg2 >>= (~arg2 & 1);
+ 		}
+ 		else if (arg1 < arg2)
+ 			arg2 = (arg2 - arg1) >> 1;
+ 		else
+ 			arg1 = (arg1 - arg2) >> 1;
+ 	}
+ 
+ 	return arg2 * mult;
+ }
+ 
+ 
+ static void filt_sinc(float *dest, int N, int step, double fc, double gain, int width)
+ {
+ 	double s = fc / step;
+ 	int mid, x;
+ 	float *endpoint = dest + N,
+ 		*base = dest,
+ 		*origdest = dest;
+ 	
+ 	assert(width <= N);
+ 
+ 	if ((N & 1) == 0)
+ 	{
+ 		*dest = 0.0;
+ 		dest += width;
+ 		if (dest >= endpoint)
+ 			dest = ++base;
+ 		N--;
+ 	}
+ 
+ 	mid = N / 2;
+ 	x = -mid;
+ 
+ 	while (N--)
+ 	{
+ 		*dest = (x ? sin(x * M_PI * s) / (x * M_PI) * step : fc) * gain;
+ 		x++;
+ 		dest += width;
+ 		if (dest >= endpoint)
+ 			dest = ++base;
+ 	}
+ 	assert(dest == origdest + width);
+ }
+ 
+ 
+ static double I_zero(double x)
+ {
+ 	int n = 0;
+ 	double u = 1.0,
+ 		s = 1.0,
+ 		t;
+ 
+ 	do
+ 	{
+ 		n += 2;
+ 		t = x / n;
+ 		u *= t * t;
+ 		s += u;
+ 	} while (u > 1e-21 * s);
+ 
+ 	return s;
+ }
+ 
+ 
+ static void win_kaiser(float *dest, int N, double alpha, int width)
+ {
+ 	double I_alpha, midsq;
+ 	int x;
+ 	float *endpoint = dest + N,
+ 		*base = dest,
+ 		*origdest = dest;
+ 
+ 	assert(width <= N);
+ 
+ 	if ((N & 1) == 0)
+ 	{
+ 		*dest = 0.0;
+ 		dest += width;
+ 		if (dest >= endpoint)
+ 			dest = ++base;
+ 		N--;
+ 	}
+ 
+ 	x = -(N / 2);
+ 	midsq = (double)(x - 1) * (double)(x - 1);
+ 	I_alpha = I_zero(alpha);
+ 
+ 	while (N--)
+ 	{
+ 		*dest *= I_zero(alpha * sqrt(1.0 - ((double)x * (double)x) / midsq)) / I_alpha;
+ 		x++;
+ 		dest += width;
+ 		if (dest >= endpoint)
+ 			dest = ++base;
+ 	}
+ 	assert(dest == origdest + width);
+ }
+ 
+ 
+ int res_init(res_state *state, int channels, int outfreq, int infreq, res_parameter op1, ...)
+ {
+ 	double beta = 16.0,
+ 		cutoff = 0.80,
+ 		gain = 1.0;
+ 	int taps = 45;
+ 
+ 	int factor;
+ 
+ 	assert(state);
+ 	assert(channels > 0);
+ 	assert(outfreq > 0);
+ 	assert(infreq > 0);
+ 	assert(taps > 0);
+ 
+ 	if (state == NULL || channels <= 0 || outfreq <= 0 || infreq <= 0 || taps <= 0)
+ 		return -1;
+ 
+ 	if (op1 != RES_END)
+ 	{
+ 		va_list argp;
+ 		va_start(argp, op1);
+ 		do
+ 		{
+ 			switch (op1)
+ 			{
+ 			case RES_GAIN:
+ 				gain = va_arg(argp, double);
+ 				break;
+ 
+ 			case RES_CUTOFF:
+ 				cutoff = va_arg(argp, double);
+ 				assert(cutoff > 0.01 && cutoff <= 1.0);
+ 				break;
+ 
+ 			case RES_TAPS:
+ 				taps = va_arg(argp, int);
+ 				assert(taps > 2 && taps < 1000);
+ 				break;
+ 				
+ 			case RES_BETA:
+ 				beta = va_arg(argp, double);
+ 				assert(beta > 2.0);
+ 				break;
+ 			default:
+ 				assert("arglist" == "valid");
+ 				return -1;
+ 			}
+ 			op1 = va_arg(argp, res_parameter);
+ 		} while (op1 != RES_END);
+ 		va_end(argp);
+ 	}
+ 
+ 	factor = hcf(infreq, outfreq);
+ 	outfreq /= factor;
+ 	infreq /= factor;
+ 
+ 	/* adjust to rational values for downsampling */
+ 	if (outfreq < infreq)
+ 	{
+ 		/* push the cutoff frequency down to the output frequency */
+ 		cutoff = cutoff * outfreq / infreq; 
+ 
+         /* compensate for the sharper roll-off requirement
+          * by using a bigger hammer */
+         taps = taps * infreq/outfreq;
+ 	}
+ 
+ 	assert(taps >= (infreq + outfreq - 1) / outfreq);
+ 
+ 	if ((state->table = calloc(outfreq * taps, sizeof(float))) == NULL)
+ 		return -1;
+ 	if ((state->pool = calloc(channels * taps, sizeof(SAMPLE))) == NULL)
+ 	{
+ 		free(state->table);
+ 		state->table = NULL;
+ 		return -1;
+ 	}
+ 
+ 	state->poolfill = taps / 2 + 1;
+ 	state->channels = channels;
+ 	state->outfreq = outfreq;
+ 	state->infreq = infreq;
+ 	state->taps = taps;
+ 	state->offset = 0;
+ 
+ 	filt_sinc(state->table, outfreq * taps, outfreq, cutoff, gain, taps);
+ 	win_kaiser(state->table, outfreq * taps, beta, taps);
+ 
+ 	return 0;
+ }
+ 
+ 
+ static SAMPLE sum(float const *scale, int count, SAMPLE const *source, SAMPLE const *trigger, SAMPLE const *reset, int srcstep)
+ {
+ 	float total = 0.0;
+ 
+ 	while (count--)
+ 	{
+ 		total += *source * *scale;
+ 
+ 		if (source == trigger)
+ 			source = reset, srcstep = 1;
+ 		source -= srcstep;
+ 		scale++;
+ 	}
+ 
+ 	return total;
+ }
+ 
+ 
+ static int push(res_state const * const state, SAMPLE *pool, int * const poolfill, int * const offset, SAMPLE *dest, int dststep, SAMPLE const *source, int srcstep, size_t srclen)
+ {
+ 	SAMPLE	* const destbase = dest,
+ 		*poolhead = pool + *poolfill,
+ 		*poolend = pool + state->taps,
+ 		*newpool = pool;
+ 	SAMPLE const *refill, *base, *endpoint;
+ 	int	lencheck;
+ 
+ 
+ 	assert(state);
+ 	assert(pool);
+ 	assert(poolfill);
+ 	assert(dest);
+ 	assert(source);
+ 
+ 	assert(state->poolfill != -1);
+ 	
+ 	lencheck = res_push_check(state, srclen);
+ 
+ 	/* fill the pool before diving in */
+ 	while (poolhead < poolend && srclen > 0)
+ 	{
+ 		*poolhead++ = *source;
+ 		source += srcstep;
+ 		srclen--;
+ 	}
+ 
+ 	if (srclen <= 0)
+ 		return 0;
+ 
+ 	base = source;
+ 	endpoint = source + srclen * srcstep;
+ 
+ 	while (source < endpoint)
+ 	{
+ 		*dest = sum(state->table + *offset * state->taps, state->taps, source, base, poolend, srcstep);
+ 		dest += dststep;
+ 		*offset += state->infreq;
+ 		while (*offset >= state->outfreq)
+ 		{
+ 			*offset -= state->outfreq;
+ 			source += srcstep;
+ 		}
+ 	}
+ 
+ 	assert(dest == destbase + lencheck * dststep);
+ 
+ 	/* pretend that source has that underrun data we're not going to get */
+ 	srclen += (source - endpoint) / srcstep;
+ 
+ 	/* if we didn't get enough to completely replace the pool, then shift things about a bit */
+ 	if (srclen < state->taps)
+ 	{
+ 		refill = pool + srclen;
+ 		while (refill < poolend)
+ 			*newpool++ = *refill++;
+ 
+ 		refill = source - srclen * srcstep;
+ 	}
+ 	else
+ 		refill = source - state->taps * srcstep;
+ 
+ 	/* pull in fresh pool data */
+ 	while (refill < endpoint)
+ 	{
+ 		*newpool++ = *refill;
+ 		refill += srcstep;
+ 	}
+ 
+ 	assert(newpool > pool);
+ 	assert(newpool <= poolend);
+ 
+ 	*poolfill = newpool - pool;
+ 
+ 	return (dest - destbase) / dststep;
+ }
+ 
+ 
+ int res_push_max_input(res_state const * const state, size_t maxoutput)
+ {
+ 	return maxoutput * state->infreq / state->outfreq;
+ }
+ 
+ 
+ int res_push_check(res_state const * const state, size_t srclen)
+ {
+ 	if (state->poolfill < state->taps)
+ 		srclen -= state->taps - state->poolfill;
+ 
+ 	return (srclen * state->outfreq - state->offset + state->infreq - 1) / state->infreq;
+ }
+ 
+ 
+ int res_push(res_state *state, SAMPLE **dstlist, SAMPLE const **srclist, size_t srclen)
+ {
+ 	int result = -1, poolfill = -1, offset = -1, i;
+ 
+ 	assert(state);
+ 	assert(dstlist);
+ 	assert(srclist);
+ 	assert(state->poolfill >= 0);
+ 
+ 	for (i = 0; i < state->channels; i++)
+ 	{
+ 		poolfill = state->poolfill;
+ 		offset = state->offset;
+ 		result = push(state, state->pool + i * state->taps, &poolfill, &offset, dstlist[i], 1, srclist[i], 1, srclen);
+ 	}
+ 	state->poolfill = poolfill;
+ 	state->offset = offset;
+ 
+ 	return result;
+ }
+ 
+ 
+ int res_push_interleaved(res_state *state, SAMPLE *dest, SAMPLE const *source, size_t srclen)
+ {
+ 	int result = -1, poolfill = -1, offset = -1, i;
+ 	
+ 	assert(state);
+ 	assert(dest);
+ 	assert(source);
+ 	assert(state->poolfill >= 0);
+ 
+ 	for (i = 0; i < state->channels; i++)
+ 	{
+ 		poolfill = state->poolfill;
+ 		offset = state->offset;
+ 		result = push(state, state->pool + i * state->taps, &poolfill, &offset, dest + i, state->channels, source + i, state->channels, srclen);
+ 	}
+ 	state->poolfill = poolfill;
+ 	state->offset = offset;
+ 
+ 	return result;
+ }
+ 
+ 
+ int res_drain(res_state *state, SAMPLE **dstlist)
+ {
+ 	SAMPLE *tail;
+ 	int result = -1, poolfill = -1, offset = -1, i;
+ 
+ 	assert(state);
+ 	assert(dstlist);
+ 	assert(state->poolfill >= 0);
+ 
+ 	if ((tail = calloc(state->taps, sizeof(SAMPLE))) == NULL)
+ 		return -1;
+ 
+ 	for (i = 0; i < state->channels; i++)
+ 	{
+ 		poolfill = state->poolfill;
+ 		offset = state->offset;
+ 		result = push(state, state->pool + i * state->taps, &poolfill, &offset, dstlist[i], 1, tail, 1, state->taps / 2 - 1);
+ 	}
+ 		
+ 	free(tail);
+ 
+ 	state->poolfill = -1;
+ 
+ 	return result;
+ }
+ 
+ 
+ int res_drain_interleaved(res_state *state, SAMPLE *dest)
+ {
+ 	SAMPLE *tail;
+ 	int result = -1, poolfill = -1, offset = -1, i;
+ 
+ 	assert(state);
+ 	assert(dest);
+ 	assert(state->poolfill >= 0);
+ 
+ 	if ((tail = calloc(state->taps, sizeof(SAMPLE))) == NULL)
+ 		return -1;
+ 
+ 	for (i = 0; i < state->channels; i++)
+ 	{
+ 		poolfill = state->poolfill;
+ 		offset = state->offset;
+ 		result = push(state, state->pool + i * state->taps, &poolfill, &offset, dest + i, state->channels, tail, 1, state->taps / 2 - 1);
+ 	}
+ 		
+ 	free(tail);
+ 
+ 	state->poolfill = -1;
+ 
+ 	return result;
+ }
+ 
+ 
+ void res_clear(res_state *state)
+ {
+ 	assert(state);
+ 	assert(state->table);
+ 	assert(state->pool);
+ 
+ 	free(state->table);
+ 	free(state->pool);
+ 	memset(state, 0, sizeof(*state));
+ }
+ 
+ /* Getopt for GNU.
+    NOTE: getopt is now part of the C library, so if you don't know what
+    "Keep this file name-space clean" means, talk to drepper at gnu.org
+    before changing it!
+ 
+    Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
+    	Free Software Foundation, Inc.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.
+ 
+    The GNU C Library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+ 
+    You should have received a copy of the GNU Library General Public
+    License along with the GNU C Library; see the file COPYING.LIB.  If not,
+    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+    Boston, MA 02111-1307, USA.  */
+ 
+ 
+ /* Comment out all this code if we are using the GNU C Library, and are not
+    actually compiling the library itself.  This code is part of the GNU C
+    Library, but also included in many other GNU distributions.  Compiling
+    and linking in this code is a waste when using the GNU C library
+    (especially if it is a shared library).  Rather than having every GNU
+    program understand `configure --with-gnu-libc' and omit the object files,
+    it is simpler to just do this in the source for each such file.  */
+ 
+ /* This version of `getopt' appears to the caller like standard Unix `getopt'
+    but it behaves differently for the user, since it allows the user
+    to intersperse the options with the other arguments.
+ 
+    As `getopt' works, it permutes the elements of ARGV so that,
+    when it is done, all the options precede everything else.  Thus
+    all application programs are extended to handle flexible argument order.
+ 
+    Setting the environment variable POSIXLY_CORRECT disables permutation.
+    Then the behavior is completely standard.
+ 
+    GNU application programs can use a third alternative mode in which
+    they can distinguish the relative order of options and other arguments.  */
+ 
+ /* Names for the values of the `has_arg' field of `struct option'.  */
+ 
+ /* For communication from `getopt' to the caller.
+    When `getopt' finds an option that takes an argument,
+    the argument value is returned here.
+    Also, when `ordering' is RETURN_IN_ORDER,
+    each non-option ARGV-element is returned here.  */
+ 
+ char *optarg;
+ 
+ /* Index in ARGV of the next element to be scanned.
+    This is used for communication to and from the caller
+    and for communication between successive calls to `getopt'.
+ 
+    On entry to `getopt', zero means this is the first call; initialize.
+ 
+    When `getopt' returns -1, this is the index of the first of the
+    non-option elements that the caller should itself scan.
+ 
+    Otherwise, `optind' communicates from one call to the next
+    how much of ARGV has been scanned so far.  */
+ 
+ /* 1003.2 says this must be 1 before any call.  */
+ int optind = 1;
+ 
+ /* Formerly, initialization of getopt depended on optind==0, which
+    causes problems with re-calling getopt as programs generally don't
+    know that. */
+ 
+ int __getopt_initialized;
+ 
+ /* The next char to be scanned in the option-element
+    in which the last option character we returned was found.
+    This allows us to pick up the scan where we left off.
+ 
+    If this is zero, or a null string, it means resume the scan
+    by advancing to the next ARGV-element.  */
+ 
+ static char *nextchar;
+ 
+ /* Callers store zero here to inhibit the error message
+    for unrecognized options.  */
+ 
+ int opterr = 1;
+ 
+ /* Set to an option character which was unrecognized.
+    This must be initialized on some systems to avoid linking in the
+    system's own getopt implementation.  */
+ 
+ int optopt = '?';
+ 
+ /* Describe how to deal with options that follow non-option ARGV-elements.
+ 
+    If the caller did not specify anything,
+    the default is REQUIRE_ORDER if the environment variable
+    POSIXLY_CORRECT is defined, PERMUTE otherwise.
+ 
+    REQUIRE_ORDER means don't recognize them as options;
+    stop option processing when the first non-option is seen.
+    This is what Unix does.
+    This mode of operation is selected by either setting the environment
+    variable POSIXLY_CORRECT, or using `+' as the first character
+    of the list of option characters.
+ 
+    PERMUTE is the default.  We permute the contents of ARGV as we scan,
+    so that eventually all the non-options are at the end.  This allows options
+    to be given in any order, even with programs that were not written to
+    expect this.
+ 
+    RETURN_IN_ORDER is an option available to programs that were written
+    to expect options and other ARGV-elements in any order and that care about
+    the ordering of the two.  We describe each non-option ARGV-element
+    as if it were the argument of an option with character code 1.
+    Using `-' as the first character of the list of option characters
+    selects this mode of operation.
+ 
+    The special argument `--' forces an end of option-scanning regardless
+    of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
+    `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
+ 
+ static enum
+ {
+   REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
+ } ordering;
+ 
+ /* Value of POSIXLY_CORRECT environment variable.  */
+ static char *posixly_correct;
+ 
+ #ifdef	__GNU_LIBRARY__
+ /* We want to avoid inclusion of string.h with non-GNU libraries
+    because there are many ways it can cause trouble.
+    On some systems, it contains special magic macros that don't work
+    in GCC.  */
+ # define my_index	strchr
+ #else
+ 
+ /* Avoid depending on library functions or files
+    whose names are inconsistent.  */
+ 
+ #ifndef getenv
+ extern char *getenv ();
+ #endif
+ 
+ static char *
+ my_index (str, chr)
+      const char *str;
+      int chr;
+ {
+   while (*str)
+     {
+       if (*str == chr)
+ 	return (char *) str;
+       str++;
+     }
+   return 0;
+ }
+ 
+ /* If using GCC, we can safely declare strlen this way.
+    If not using GCC, it is ok not to declare it.  */
+ #ifdef __GNUC__
+ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
+    That was relevant to code that was here before.  */
+ # if (!defined __STDC__ || !__STDC__) && !defined strlen
+ /* gcc with -traditional declares the built-in strlen to return int,
+    and has done so at least since version 2.4.5. -- rms.  */
+ extern int strlen (const char *);
+ # endif /* not __STDC__ */
+ #endif /* __GNUC__ */
+ 
+ #endif /* not __GNU_LIBRARY__ */
+ 
+ /* Handle permutation of arguments.  */
+ 
+ /* Describe the part of ARGV that contains non-options that have
+    been skipped.  `first_nonopt' is the index in ARGV of the first of them;
+    `last_nonopt' is the index after the last of them.  */
+ 
+ static int first_nonopt;
+ static int last_nonopt;
+ 
+ #ifdef _LIBC
+ /* Bash 2.0 gives us an environment variable containing flags
+    indicating ARGV elements that should not be considered arguments.  */
+ 
+ /* Defined in getopt_init.c  */
+ extern char *__getopt_nonoption_flags;
+ 
+ static int nonoption_flags_max_len;
+ static int nonoption_flags_len;
+ 
+ static int original_argc;
+ static char *const *original_argv;
+ 
+ /* Make sure the environment variable bash 2.0 puts in the environment
+    is valid for the getopt call we must make sure that the ARGV passed
+    to getopt is that one passed to the process.  */
+ static void
+ __attribute__ ((unused))
+ store_args_and_env (int argc, char *const *argv)
+ {
+   /* XXX This is no good solution.  We should rather copy the args so
+      that we can compare them later.  But we must not use malloc(3).  */
+   original_argc = argc;
+   original_argv = argv;
+ }
+ # ifdef text_set_element
+ text_set_element (__libc_subinit, store_args_and_env);
+ # endif /* text_set_element */
+ 
+ # define SWAP_FLAGS(ch1, ch2) \
+   if (nonoption_flags_len > 0)						      \
+     {									      \
+       char __tmp = __getopt_nonoption_flags[ch1];			      \
+       __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2];	      \
+       __getopt_nonoption_flags[ch2] = __tmp;				      \
+     }
+ #else	/* !_LIBC */
+ # define SWAP_FLAGS(ch1, ch2)
+ #endif	/* _LIBC */
+ 
+ /* Exchange two adjacent subsequences of ARGV.
+    One subsequence is elements [first_nonopt,last_nonopt)
+    which contains all the non-options that have been skipped so far.
+    The other is elements [last_nonopt,optind), which contains all
+    the options processed since those non-options were skipped.
+ 
+    `first_nonopt' and `last_nonopt' are relocated so that they describe
+    the new indices of the non-options in ARGV after they are moved.  */
+ 
+ #if defined __STDC__ && __STDC__
+ static void exchange (char **);
+ #endif
+ 
+ static void
+ exchange (argv)
+      char **argv;
+ {
+   int bottom = first_nonopt;
+   int middle = last_nonopt;
+   int top = optind;
+   char *tem;
+ 
+   /* Exchange the shorter segment with the far end of the longer segment.
+      That puts the shorter segment into the right place.
+      It leaves the longer segment in the right place overall,
+      but it consists of two parts that need to be swapped next.  */
+ 
+ #ifdef _LIBC
+   /* First make sure the handling of the `__getopt_nonoption_flags'
+      string can work normally.  Our top argument must be in the range
+      of the string.  */
+   if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
+     {
+       /* We must extend the array.  The user plays games with us and
+ 	 presents new arguments.  */
+       char *new_str = malloc (top + 1);
+       if (new_str == NULL)
+ 	nonoption_flags_len = nonoption_flags_max_len = 0;
+       else
+ 	{
+ 	  memset (__mempcpy (new_str, __getopt_nonoption_flags,
+ 			     nonoption_flags_max_len),
+ 		  '\0', top + 1 - nonoption_flags_max_len);
+ 	  nonoption_flags_max_len = top + 1;
+ 	  __getopt_nonoption_flags = new_str;
+ 	}
+     }
+ #endif
+ 
+   while (top > middle && middle > bottom)
+     {
+       if (top - middle > middle - bottom)
+ 	{
+ 	  /* Bottom segment is the short one.  */
+ 	  int len = middle - bottom;
+ 	  register int i;
+ 
+ 	  /* Swap it with the top part of the top segment.  */
+ 	  for (i = 0; i < len; i++)
+ 	    {
+ 	      tem = argv[bottom + i];
+ 	      argv[bottom + i] = argv[top - (middle - bottom) + i];
+ 	      argv[top - (middle - bottom) + i] = tem;
+ 	      SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
+ 	    }
+ 	  /* Exclude the moved bottom segment from further swapping.  */
+ 	  top -= len;
+ 	}
+       else
+ 	{
+ 	  /* Top segment is the short one.  */
+ 	  int len = top - middle;
+ 	  register int i;
+ 
+ 	  /* Swap it with the bottom part of the bottom segment.  */
+ 	  for (i = 0; i < len; i++)
+ 	    {
+ 	      tem = argv[bottom + i];
+ 	      argv[bottom + i] = argv[middle + i];
+ 	      argv[middle + i] = tem;
+ 	      SWAP_FLAGS (bottom + i, middle + i);
+ 	    }
+ 	  /* Exclude the moved top segment from further swapping.  */
+ 	  bottom += len;
+ 	}
+     }
+ 
+   /* Update records for the slots the non-options now occupy.  */
+ 
+   first_nonopt += (optind - last_nonopt);
+   last_nonopt = optind;
+ }
+ 
+ /* Initialize the internal data when the first call is made.  */
+ 
+ #if defined __STDC__ && __STDC__
+ static const char *_getopt_initialize (int, char *const *, const char *);
+ #endif
+ static const char *
+ _getopt_initialize (argc, argv, optstring)
+      int argc;
+      char *const *argv;
+      const char *optstring;
+ {
+   /* Start processing options with ARGV-element 1 (since ARGV-element 0
+      is the program name); the sequence of previously skipped
+      non-option ARGV-elements is empty.  */
+ 
+   first_nonopt = last_nonopt = optind;
+ 
+   nextchar = NULL;
+ 
+   posixly_correct = getenv ("POSIXLY_CORRECT");
+ 
+   /* Determine how to handle the ordering of options and nonoptions.  */
+ 
+   if (optstring[0] == '-')
+     {
+       ordering = RETURN_IN_ORDER;
+       ++optstring;
+     }
+   else if (optstring[0] == '+')
+     {
+       ordering = REQUIRE_ORDER;
+       ++optstring;
+     }
+   else if (posixly_correct != NULL)
+     ordering = REQUIRE_ORDER;
+   else
+     ordering = PERMUTE;
+ 
+ #ifdef _LIBC
+   if (posixly_correct == NULL
+       && argc == original_argc && argv == original_argv)
+     {
+       if (nonoption_flags_max_len == 0)
+ 	{
+ 	  if (__getopt_nonoption_flags == NULL
+ 	      || __getopt_nonoption_flags[0] == '\0')
+ 	    nonoption_flags_max_len = -1;
+ 	  else
+ 	    {
+ 	      const char *orig_str = __getopt_nonoption_flags;
+ 	      int len = nonoption_flags_max_len = strlen (orig_str);
+ 	      if (nonoption_flags_max_len < argc)
+ 		nonoption_flags_max_len = argc;
+ 	      __getopt_nonoption_flags =
+ 		(char *) malloc (nonoption_flags_max_len);
+ 	      if (__getopt_nonoption_flags == NULL)
+ 		nonoption_flags_max_len = -1;
+ 	      else
+ 		memset (__mempcpy (__getopt_nonoption_flags, orig_str, len),
+ 			'\0', nonoption_flags_max_len - len);
+ 	    }
+ 	}
+       nonoption_flags_len = nonoption_flags_max_len;
+     }
+   else
+     nonoption_flags_len = 0;
+ #endif
+ 
+   return optstring;
+ }
+ 
+ /* Scan elements of ARGV (whose length is ARGC) for option characters
+    given in OPTSTRING.
+ 
+    If an element of ARGV starts with '-', and is not exactly "-" or "--",
+    then it is an option element.  The characters of this element
+    (aside from the initial '-') are option characters.  If `getopt'
+    is called repeatedly, it returns successively each of the option characters
+    from each of the option elements.
+ 
+    If `getopt' finds another option character, it returns that character,
+    updating `optind' and `nextchar' so that the next call to `getopt' can
+    resume the scan with the following option character or ARGV-element.
+ 
+    If there are no more option characters, `getopt' returns -1.
+    Then `optind' is the index in ARGV of the first ARGV-element
+    that is not an option.  (The ARGV-elements have been permuted
+    so that those that are not options now come last.)
+ 
+    OPTSTRING is a string containing the legitimate option characters.
+    If an option character is seen that is not listed in OPTSTRING,
+    return '?' after printing an error message.  If you set `opterr' to
+    zero, the error message is suppressed but we still return '?'.
+ 
+    If a char in OPTSTRING is followed by a colon, that means it wants an arg,
+    so the following text in the same ARGV-element, or the text of the following
+    ARGV-element, is returned in `optarg'.  Two colons mean an option that
+    wants an optional arg; if there is text in the current ARGV-element,
+    it is returned in `optarg', otherwise `optarg' is set to zero.
+ 
+    If OPTSTRING starts with `-' or `+', it requests different methods of
+    handling the non-option ARGV-elements.
+    See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
+ 
+    Long-named options begin with `--' instead of `-'.
+    Their names may be abbreviated as long as the abbreviation is unique
+    or is an exact match for some defined option.  If they have an
+    argument, it follows the option name in the same ARGV-element, separated
+    from the option name by a `=', or else the in next ARGV-element.
+    When `getopt' finds a long-named option, it returns 0 if that option's
+    `flag' field is nonzero, the value of the option's `val' field
+    if the `flag' field is zero.
+ 
+    The elements of ARGV aren't really const, because we permute them.
+    But we pretend they're const in the prototype to be compatible
+    with other systems.
+ 
+    LONGOPTS is a vector of `struct option' terminated by an
+    element containing a name which is zero.
+ 
+    LONGIND returns the index in LONGOPT of the long-named option found.
+    It is only valid when a long-named option has been found by the most
+    recent call.
+ 
+    If LONG_ONLY is nonzero, '-' as well as '--' can introduce
+    long-named options.  */
+ 
+ int
+ _getopt_internal (argc, argv, optstring, longopts, longind, long_only)
+      int argc;
+      char *const *argv;
+      const char *optstring;
+      const struct option *longopts;
+      int *longind;
+      int long_only;
+ {
+   optarg = NULL;
+ 
+   if (optind == 0 || !__getopt_initialized)
+     {
+       if (optind == 0)
+ 	optind = 1;	/* Don't scan ARGV[0], the program name.  */
+       optstring = _getopt_initialize (argc, argv, optstring);
+       __getopt_initialized = 1;
+     }
+ 
+   /* Test whether ARGV[optind] points to a non-option argument.
+      Either it does not have option syntax, or there is an environment flag
+      from the shell indicating it is not an option.  The later information
+      is only used when the used in the GNU libc.  */
+ #ifdef _LIBC
+ # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0'	      \
+ 		      || (optind < nonoption_flags_len			      \
+ 			  && __getopt_nonoption_flags[optind] == '1'))
+ #else
+ # define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
+ #endif
+ 
+   if (nextchar == NULL || *nextchar == '\0')
+     {
+       /* Advance to the next ARGV-element.  */
+ 
+       /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
+ 	 moved back by the user (who may also have changed the arguments).  */
+       if (last_nonopt > optind)
+ 	last_nonopt = optind;
+       if (first_nonopt > optind)
+ 	first_nonopt = optind;
+ 
+       if (ordering == PERMUTE)
+ 	{
+ 	  /* If we have just processed some options following some non-options,
+ 	     exchange them so that the options come first.  */
+ 
+ 	  if (first_nonopt != last_nonopt && last_nonopt != optind)
+ 	    exchange ((char **) argv);
+ 	  else if (last_nonopt != optind)
+ 	    first_nonopt = optind;
+ 
+ 	  /* Skip any additional non-options
+ 	     and extend the range of non-options previously skipped.  */
+ 
+ 	  while (optind < argc && NONOPTION_P)
+ 	    optind++;
+ 	  last_nonopt = optind;
+ 	}
+ 
+       /* The special ARGV-element `--' means premature end of options.
+ 	 Skip it like a null option,
+ 	 then exchange with previous non-options as if it were an option,
+ 	 then skip everything else like a non-option.  */
+ 
+       if (optind != argc && !strcmp (argv[optind], "--"))
+ 	{
+ 	  optind++;
+ 
+ 	  if (first_nonopt != last_nonopt && last_nonopt != optind)
+ 	    exchange ((char **) argv);
+ 	  else if (first_nonopt == last_nonopt)
+ 	    first_nonopt = optind;
+ 	  last_nonopt = argc;
+ 
+ 	  optind = argc;
+ 	}
+ 
+       /* If we have done all the ARGV-elements, stop the scan
+ 	 and back over any non-options that we skipped and permuted.  */
+ 
+       if (optind == argc)
+ 	{
+ 	  /* Set the next-arg-index to point at the non-options
+ 	     that we previously skipped, so the caller will digest them.  */
+ 	  if (first_nonopt != last_nonopt)
+ 	    optind = first_nonopt;
+ 	  return -1;
+ 	}
+ 
+       /* If we have come to a non-option and did not permute it,
+ 	 either stop the scan or describe it to the caller and pass it by.  */
+ 
+       if (NONOPTION_P)
+ 	{
+ 	  if (ordering == REQUIRE_ORDER)
+ 	    return -1;
+ 	  optarg = argv[optind++];
+ 	  return 1;
+ 	}
+ 
+       /* We have found another option-ARGV-element.
+ 	 Skip the initial punctuation.  */
+ 
+       nextchar = (argv[optind] + 1
+ 		  + (longopts != NULL && argv[optind][1] == '-'));
+     }
+ 
+   /* Decode the current option-ARGV-element.  */
+ 
+   /* Check whether the ARGV-element is a long option.
+ 
+      If long_only and the ARGV-element has the form "-f", where f is
+      a valid short option, don't consider it an abbreviated form of
+      a long option that starts with f.  Otherwise there would be no
+      way to give the -f short option.
+ 
+      On the other hand, if there's a long option "fubar" and
+      the ARGV-element is "-fu", do consider that an abbreviation of
+      the long option, just like "--fu", and not "-f" with arg "u".
+ 
+      This distinction seems to be the most useful approach.  */
+ 
+   if (longopts != NULL
+       && (argv[optind][1] == '-'
+ 	  || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
+     {
+       char *nameend;
+       const struct option *p;
+       const struct option *pfound = NULL;
+       int exact = 0;
+       int ambig = 0;
+       int indfound = -1;
+       int option_index;
+ 
+       for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
+ 	/* Do nothing.  */ ;
+ 
+       /* Test all long options for either exact match
+ 	 or abbreviated matches.  */
+       for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ 	if (!strncmp (p->name, nextchar, nameend - nextchar))
+ 	  {
+ 	    if ((unsigned int) (nameend - nextchar)
+ 		== (unsigned int) strlen (p->name))
+ 	      {
+ 		/* Exact match found.  */
+ 		pfound = p;
+ 		indfound = option_index;
+ 		exact = 1;
+ 		break;
+ 	      }
+ 	    else if (pfound == NULL)
+ 	      {
+ 		/* First nonexact match found.  */
+ 		pfound = p;
+ 		indfound = option_index;
+ 	      }
+ 	    else
+ 	      /* Second or later nonexact match found.  */
+ 	      ambig = 1;
+ 	  }
+ 
+       if (ambig && !exact)
+ 	{
+ 	  if (opterr)
+ 	    fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+ 		     argv[0], argv[optind]);
+ 	  nextchar += strlen (nextchar);
+ 	  optind++;
+ 	  optopt = 0;
+ 	  return '?';
+ 	}
+ 
+       if (pfound != NULL)
+ 	{
+ 	  option_index = indfound;
+ 	  optind++;
+ 	  if (*nameend)
+ 	    {
+ 	      /* Don't test has_arg with >, because some C compilers don't
+ 		 allow it to be used on enums.  */
+ 	      if (pfound->has_arg)
+ 		optarg = nameend + 1;
+ 	      else
+ 		{
+ 		  if (opterr)
+ 		    {
+ 		      if (argv[optind - 1][1] == '-')
+ 			/* --option */
+ 			fprintf (stderr,
+ 				 _("%s: option `--%s' doesn't allow an argument\n"),
+ 				 argv[0], pfound->name);
+ 		      else
+ 			/* +option or -option */
+ 			fprintf (stderr,
+ 				 _("%s: option `%c%s' doesn't allow an argument\n"),
+ 				 argv[0], argv[optind - 1][0], pfound->name);
+ 		    }
+ 
+ 		  nextchar += strlen (nextchar);
+ 
+ 		  optopt = pfound->val;
+ 		  return '?';
+ 		}
+ 	    }
+ 	  else if (pfound->has_arg == 1)
+ 	    {
+ 	      if (optind < argc)
+ 		optarg = argv[optind++];
+ 	      else
+ 		{
+ 		  if (opterr)
+ 		    fprintf (stderr,
+ 			   _("%s: option `%s' requires an argument\n"),
+ 			   argv[0], argv[optind - 1]);
+ 		  nextchar += strlen (nextchar);
+ 		  optopt = pfound->val;
+ 		  return optstring[0] == ':' ? ':' : '?';
+ 		}
+ 	    }
+ 	  nextchar += strlen (nextchar);
+ 	  if (longind != NULL)
+ 	    *longind = option_index;
+ 	  if (pfound->flag)
+ 	    {
+ 	      *(pfound->flag) = pfound->val;
+ 	      return 0;
+ 	    }
+ 	  return pfound->val;
+ 	}
+ 
+       /* Can't find it as a long option.  If this is not getopt_long_only,
+ 	 or the option starts with '--' or is not a valid short
+ 	 option, then it's an error.
+ 	 Otherwise interpret it as a short option.  */
+       if (!long_only || argv[optind][1] == '-'
+ 	  || my_index (optstring, *nextchar) == NULL)
+ 	{
+ 	  if (opterr)
+ 	    {
+ 	      if (argv[optind][1] == '-')
+ 		/* --option */
+ 		fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+ 			 argv[0], nextchar);
+ 	      else
+ 		/* +option or -option */
+ 		fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
+ 			 argv[0], argv[optind][0], nextchar);
+ 	    }
+ 	  nextchar = (char *) "";
+ 	  optind++;
+ 	  optopt = 0;
+ 	  return '?';
+ 	}
+     }
+ 
+   /* Look at and handle the next short option-character.  */
+ 
+   {
+     char c = *nextchar++;
+     char *temp = my_index (optstring, c);
+ 
+     /* Increment `optind' when we start to process its last character.  */
+     if (*nextchar == '\0')
+       ++optind;
+ 
+     if (temp == NULL || c == ':')
+       {
+ 	if (opterr)
+ 	  {
+ 	    if (posixly_correct)
+ 	      /* 1003.2 specifies the format of this message.  */
+ 	      fprintf (stderr, _("%s: illegal option -- %c\n"),
+ 		       argv[0], c);
+ 	    else
+ 	      fprintf (stderr, _("%s: invalid option -- %c\n"),
+ 		       argv[0], c);
+ 	  }
+ 	optopt = c;
+ 	return '?';
+       }
+     /* Convenience. Treat POSIX -W foo same as long option --foo */
+     if (temp[0] == 'W' && temp[1] == ';')
+       {
+ 	char *nameend;
+ 	const struct option *p;
+ 	const struct option *pfound = NULL;
+ 	int exact = 0;
+ 	int ambig = 0;
+ 	int indfound = 0;
+ 	int option_index;
+ 
+ 	/* This is an option that requires an argument.  */
+ 	if (*nextchar != '\0')
+ 	  {
+ 	    optarg = nextchar;
+ 	    /* If we end this ARGV-element by taking the rest as an arg,
+ 	       we must advance to the next element now.  */
+ 	    optind++;
+ 	  }
+ 	else if (optind == argc)
+ 	  {
+ 	    if (opterr)
+ 	      {
+ 		/* 1003.2 specifies the format of this message.  */
+ 		fprintf (stderr, _("%s: option requires an argument -- %c\n"),
+ 			 argv[0], c);
+ 	      }
+ 	    optopt = c;
+ 	    if (optstring[0] == ':')
+ 	      c = ':';
+ 	    else
+ 	      c = '?';
+ 	    return c;
+ 	  }
+ 	else
+ 	  /* We already incremented `optind' once;
+ 	     increment it again when taking next ARGV-elt as argument.  */
+ 	  optarg = argv[optind++];
+ 
+ 	/* optarg is now the argument, see if it's in the
+ 	   table of longopts.  */
+ 
+ 	for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
+ 	  /* Do nothing.  */ ;
+ 
+ 	/* Test all long options for either exact match
+ 	   or abbreviated matches.  */
+ 	for (p = longopts, option_index = 0; p->name; p++, option_index++)
+ 	  if (!strncmp (p->name, nextchar, nameend - nextchar))
+ 	    {
+ 	      if ((unsigned int) (nameend - nextchar) == strlen (p->name))
+ 		{
+ 		  /* Exact match found.  */
+ 		  pfound = p;
+ 		  indfound = option_index;
+ 		  exact = 1;
+ 		  break;
+ 		}
+ 	      else if (pfound == NULL)
+ 		{
+ 		  /* First nonexact match found.  */
+ 		  pfound = p;
+ 		  indfound = option_index;
+ 		}
+ 	      else
+ 		/* Second or later nonexact match found.  */
+ 		ambig = 1;
+ 	    }
+ 	if (ambig && !exact)
+ 	  {
+ 	    if (opterr)
+ 	      fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+ 		       argv[0], argv[optind]);
+ 	    nextchar += strlen (nextchar);
+ 	    optind++;
+ 	    return '?';
+ 	  }
+ 	if (pfound != NULL)
+ 	  {
+ 	    option_index = indfound;
+ 	    if (*nameend)
+ 	      {
+ 		/* Don't test has_arg with >, because some C compilers don't
+ 		   allow it to be used on enums.  */
+ 		if (pfound->has_arg)
+ 		  optarg = nameend + 1;
+ 		else
+ 		  {
+ 		    if (opterr)
+ 		      fprintf (stderr, _("\
+ %s: option `-W %s' doesn't allow an argument\n"),
+ 			       argv[0], pfound->name);
+ 
+ 		    nextchar += strlen (nextchar);
+ 		    return '?';
+ 		  }
+ 	      }
+ 	    else if (pfound->has_arg == 1)
+ 	      {
+ 		if (optind < argc)
+ 		  optarg = argv[optind++];
+ 		else
+ 		  {
+ 		    if (opterr)
+ 		      fprintf (stderr,
+ 			       _("%s: option `%s' requires an argument\n"),
+ 			       argv[0], argv[optind - 1]);
+ 		    nextchar += strlen (nextchar);
+ 		    return optstring[0] == ':' ? ':' : '?';
+ 		  }
+ 	      }
+ 	    nextchar += strlen (nextchar);
+ 	    if (longind != NULL)
+ 	      *longind = option_index;
+ 	    if (pfound->flag)
+ 	      {
+ 		*(pfound->flag) = pfound->val;
+ 		return 0;
+ 	      }
+ 	    return pfound->val;
+ 	  }
+ 	  nextchar = NULL;
+ 	  return 'W';	/* Let the application handle it.   */
+       }
+     if (temp[1] == ':')
+       {
+ 	if (temp[2] == ':')
+ 	  {
+ 	    /* This is an option that accepts an argument optionally.  */
+ 	    if (*nextchar != '\0')
+ 	      {
+ 		optarg = nextchar;
+ 		optind++;
+ 	      }
+ 	    else
+ 	      optarg = NULL;
+ 	    nextchar = NULL;
+ 	  }
+ 	else
+ 	  {
+ 	    /* This is an option that requires an argument.  */
+ 	    if (*nextchar != '\0')
+ 	      {
+ 		optarg = nextchar;
+ 		/* If we end this ARGV-element by taking the rest as an arg,
+ 		   we must advance to the next element now.  */
+ 		optind++;
+ 	      }
+ 	    else if (optind == argc)
+ 	      {
+ 		if (opterr)
+ 		  {
+ 		    /* 1003.2 specifies the format of this message.  */
+ 		    fprintf (stderr,
+ 			   _("%s: option requires an argument -- %c\n"),
+ 			   argv[0], c);
+ 		  }
+ 		optopt = c;
+ 		if (optstring[0] == ':')
+ 		  c = ':';
+ 		else
+ 		  c = '?';
+ 	      }
+ 	    else
+ 	      /* We already incremented `optind' once;
+ 		 increment it again when taking next ARGV-elt as argument.  */
+ 	      optarg = argv[optind++];
+ 	    nextchar = NULL;
+ 	  }
+       }
+     return c;
+   }
+ }
+ 
+ int
+ getopt (argc, argv, optstring)
+      int argc;
+      char *const *argv;
+      const char *optstring;
+ {
+   return _getopt_internal (argc, argv, optstring,
+ 			   (const struct option *) 0,
+ 			   (int *) 0,
+ 			   0);
+ }
+ 
+ int
+ getopt_long (argc, argv, options, long_options, opt_index)
+      int argc;
+      char *const *argv;
+      const char *options;
+      const struct option *long_options;
+      int *opt_index;
+ {
+   return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
+ }
+ 
+ int
+ getopt_long_only (argc, argv, options, long_options, opt_index)
+      int argc;
+      char *const *argv;
+      const char *options;
+      const struct option *long_options;
+      int *opt_index;
+ {
+   return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
+ }
+ 
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: simple programmatic interface for encoder mode setup
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: libvorbis codec headers
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_CODECI_H_
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: PCM data envelope analysis and manipulation
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_ENVELOPE_
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: modified discrete cosine transform prototypes
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _OGG_mdct_H_
+ 
+ /*#define MDCT_INTEGERIZED  <- be warned there could be some hurt left here*/
+ #ifdef MDCT_INTEGERIZED
+ 
+ #define DATA_TYPE int
+ #define REG_TYPE  register int
+ #define TRIGBITS 14
+ #define cPI3_8 6270
+ #define cPI2_8 11585
+ #define cPI1_8 15137
+ 
+ #define FLOAT_CONV(x) ((int)((x)*(1<<TRIGBITS)+.5))
+ #define MULT_NORM(x) ((x)>>TRIGBITS)
+ #define HALVE(x) ((x)>>1)
+ 
+ #else
+ 
+ #define DATA_TYPE float
+ #define REG_TYPE  float
+ #define cPI3_8 .38268343236508977175F
+ #define cPI2_8 .70710678118654752441F
+ #define cPI1_8 .92387953251128675613F
+ 
+ #define FLOAT_CONV(x) (x)
+ #define MULT_NORM(x) (x)
+ #define HALVE(x) ((x)*.5f)
+ 
+ #endif
+ 
+ 
+ typedef struct {
+   int n;
+   int log2n;
+   
+   DATA_TYPE *trig;
+   int       *bitrev;
+ 
+   DATA_TYPE scale;
+ } mdct_lookup;
+ 
+ extern void mdct_init(mdct_lookup *lookup,int n);
+ extern void mdct_clear(mdct_lookup *l);
+ extern void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
+ extern void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out);
+ 
+ 
+ #define VE_PRE    16
+ #define VE_WIN    4
+ #define VE_POST   2
+ #define VE_AMP    (VE_PRE+VE_POST-1)
+ 
+ #define VE_BANDS  7
+ #define VE_NEARDC 15
+ 
+ #define VE_MINSTRETCH 2   /* a bit less than short block */
+ #define VE_MAXSTRETCH 12  /* one-third full block */
+ 
+ typedef struct {
+   float ampbuf[VE_AMP];
+   int   ampptr;
+ 
+   float nearDC[VE_NEARDC];
+   float nearDC_acc;
+   float nearDC_partialacc;
+   int   nearptr;
+ 
+ } envelope_filter_state;
+ 
+ typedef struct {
+   int begin;
+   int end;
+   float *window;
+   float total;
+ } envelope_band;
+ 
+ typedef struct {
+   int ch;
+   int winlength;
+   int searchstep;
+   float minenergy;
+ 
+   mdct_lookup  mdct;
+   float       *mdct_win;
+ 
+   envelope_band          band[VE_BANDS];
+   envelope_filter_state *filter;
+   int   stretch;
+ 
+   int                   *mark;
+ 
+   long storage;
+   long current;
+   long curmark;
+   long cursor;
+ } envelope_lookup;
+ 
+ extern void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi);
+ extern void _ve_envelope_clear(envelope_lookup *e);
+ extern long _ve_envelope_search(vorbis_dsp_state *v);
+ extern void _ve_envelope_shift(envelope_lookup *e,long shift);
+ extern int  _ve_envelope_mark(vorbis_dsp_state *v);
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: basic shared codebook operations
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_CODEBOOK_H_
+ 
+ /* This structure encapsulates huffman and VQ style encoding books; it
+    doesn't do anything specific to either.
+ 
+    valuelist/quantlist are nonNULL (and q_* significant) only if
+    there's entry->value mapping to be done.
+ 
+    If encode-side mapping must be done (and thus the entry needs to be
+    hunted), the auxiliary encode pointer will point to a decision
+    tree.  This is true of both VQ and huffman, but is mostly useful
+    with VQ.
+ 
+ */
+ 
+ typedef struct static_codebook{
+   long   dim;            /* codebook dimensions (elements per vector) */
+   long   entries;        /* codebook entries */
+   long  *lengthlist;     /* codeword lengths in bits */
+ 
+   /* mapping ***************************************************************/
+   int    maptype;        /* 0=none
+ 			    1=implicitly populated values from map column 
+ 			    2=listed arbitrary values */
+ 
+   /* The below does a linear, single monotonic sequence mapping. */
+   long     q_min;       /* packed 32 bit float; quant value 0 maps to minval */
+   long     q_delta;     /* packed 32 bit float; val 1 - val 0 == delta */
+   int      q_quant;     /* bits: 0 < quant <= 16 */
+   int      q_sequencep; /* bitflag */
+ 
+   long     *quantlist;  /* map == 1: (int)(entries^(1/dim)) element column map
+ 			   map == 2: list of dim*entries quantized entry vals
+ 			*/
+ 
+   /* encode helpers ********************************************************/
+   struct encode_aux_nearestmatch *nearest_tree;
+   struct encode_aux_threshmatch  *thresh_tree;
+   struct encode_aux_pigeonhole  *pigeon_tree;
+ 
+   int allocedp;
+ } static_codebook;
+ 
+ /* this structures an arbitrary trained book to quickly find the
+    nearest cell match */
+ typedef struct encode_aux_nearestmatch{
+   /* pre-calculated partitioning tree */
+   long   *ptr0;
+   long   *ptr1;
+ 
+   long   *p;         /* decision points (each is an entry) */
+   long   *q;         /* decision points (each is an entry) */
+   long   aux;        /* number of tree entries */
+   long   alloc;       
+ } encode_aux_nearestmatch;
+ 
+ /* assumes a maptype of 1; encode side only, so that's OK */
+ typedef struct encode_aux_threshmatch{
+   float *quantthresh;
+   long   *quantmap;
+   int     quantvals; 
+   int     threshvals; 
+ } encode_aux_threshmatch;
+ 
+ typedef struct encode_aux_pigeonhole{
+   float min;
+   float del;
+ 
+   int  mapentries;
+   int  quantvals;
+   long *pigeonmap;
+ 
+   long fittotal;
+   long *fitlist;
+   long *fitmap;
+   long *fitlength;
+ } encode_aux_pigeonhole;
+ 
+ typedef struct codebook{
+   long dim;           /* codebook dimensions (elements per vector) */
+   long entries;       /* codebook entries */
+   long used_entries;  /* populated codebook entries */
+   const static_codebook *c;
+ 
+   /* for encode, the below are entry-ordered, fully populated */
+   /* for decode, the below are ordered by bitreversed codeword and only
+      used entries are populated */
+   float        *valuelist;  /* list of dim*entries actual entry values */  
+   ogg_uint32_t *codelist;   /* list of bitstream codewords for each entry */
+ 
+   int          *dec_index;  /* only used if sparseness collapsed */
+   char         *dec_codelengths;
+   ogg_uint32_t *dec_firsttable;
+   int           dec_firsttablen;
+   int           dec_maxlength;
+ 
+ } codebook;
+ 
+ extern void vorbis_staticbook_clear(static_codebook *b);
+ extern void vorbis_staticbook_destroy(static_codebook *b);
+ extern int vorbis_book_init_encode(codebook *dest,const static_codebook *source);
+ extern int vorbis_book_init_decode(codebook *dest,const static_codebook *source);
+ extern void vorbis_book_clear(codebook *b);
+ 
+ extern float *_book_unquantize(const static_codebook *b,int n,int *map);
+ extern float *_book_logdist(const static_codebook *b,float *vals);
+ extern float _float32_unpack(long val);
+ extern long   _float32_pack(float val);
+ extern int  _best(codebook *book, float *a, int step);
+ extern int _ilog(unsigned int v);
+ extern long _book_maptype1_quantvals(const static_codebook *b);
+ 
+ extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul);
+ extern long vorbis_book_codeword(codebook *book,int entry);
+ extern long vorbis_book_codelen(codebook *book,int entry);
+ 
+ 
+ 
+ extern int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *b);
+ extern int vorbis_staticbook_unpack(oggpack_buffer *b,static_codebook *c);
+ 
+ extern int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b);
+ extern int vorbis_book_errorv(codebook *book, float *a);
+ extern int vorbis_book_encodev(codebook *book, int best,float *a, 
+ 			       oggpack_buffer *b);
+ 
+ extern long vorbis_book_decode(codebook *book, oggpack_buffer *b);
+ extern long vorbis_book_decodevs_add(codebook *book, float *a, 
+ 				     oggpack_buffer *b,int n);
+ extern long vorbis_book_decodev_set(codebook *book, float *a, 
+ 				    oggpack_buffer *b,int n);
+ extern long vorbis_book_decodev_add(codebook *book, float *a, 
+ 				    oggpack_buffer *b,int n);
+ extern long vorbis_book_decodevv_add(codebook *book, float **a,
+ 				     long off,int ch, 
+ 				    oggpack_buffer *b,int n);
+ 
+ #define BLOCKTYPE_IMPULSE    0
+ #define BLOCKTYPE_PADDING    1
+ #define BLOCKTYPE_TRANSITION 0 
+ #define BLOCKTYPE_LONG       1
+ 
+ #define PACKETBLOBS 15
+ 
+ typedef struct vorbis_block_internal{
+   float  **pcmdelay;  /* this is a pointer into local storage */ 
+   float  ampmax;
+   int    blocktype;
+ 
+   ogg_uint32_t   packetblob_markers[PACKETBLOBS];
+ } vorbis_block_internal;
+ 
+ typedef void vorbis_look_floor;
+ typedef void vorbis_look_residue;
+ typedef void vorbis_look_transform;
+ 
+ /* mode ************************************************************/
+ typedef struct {
+   int blockflag;
+   int windowtype;
+   int transformtype;
+   int mapping;
+ } vorbis_info_mode;
+ 
+ typedef void vorbis_info_floor;
+ typedef void vorbis_info_residue;
+ typedef void vorbis_info_mapping;
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: random psychoacoustics (not including preecho)
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_PSY_H_
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: fft transform
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_SMFT_H_
+ 
+ 
+ typedef struct {
+   int n;
+   float *trigcache;
+   int *splitcache;
+ } drft_lookup;
+ 
+ extern void drft_forward(drft_lookup *l,float *data);
+ extern void drft_backward(drft_lookup *l,float *data);
+ extern void drft_init(drft_lookup *l,int n);
+ extern void drft_clear(drft_lookup *l);
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: libvorbis backend and mapping structures; needed for 
+            static mode headers
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* this is exposed up here because we need it for static modes.
+    Lookups for each backend aren't exposed because there's no reason
+    to do so */
+ 
+ #define _vorbis_backend_h_
+ 
+ /* this would all be simpler/shorter with templates, but.... */
+ /* Floor backend generic *****************************************/
+ typedef struct{
+   void                   (*pack)  (vorbis_info_floor *,oggpack_buffer *);
+   vorbis_info_floor     *(*unpack)(vorbis_info *,oggpack_buffer *);
+   vorbis_look_floor     *(*look)  (vorbis_dsp_state *,vorbis_info_floor *);
+   void (*free_info) (vorbis_info_floor *);
+   void (*free_look) (vorbis_look_floor *);
+   void *(*inverse1)  (struct vorbis_block *,vorbis_look_floor *);
+   int   (*inverse2)  (struct vorbis_block *,vorbis_look_floor *,
+ 		     void *buffer,float *);
+ } vorbis_func_floor;
+ 
+ typedef struct{
+   int   order;
+   long  rate;
+   long  barkmap;
+ 
+   int   ampbits;
+   int   ampdB;
+ 
+   int   numbooks; /* <= 16 */
+   int   books[16];
+ 
+   float lessthan;     /* encode-only config setting hacks for libvorbis */
+   float greaterthan;  /* encode-only config setting hacks for libvorbis */
+ 
+ } vorbis_info_floor0;
+ 
+ 
+ #define VIF_POSIT 63
+ #define VIF_CLASS 16
+ #define VIF_PARTS 31
+ typedef struct{
+   int   partitions;                /* 0 to 31 */
+   int   partitionclass[VIF_PARTS]; /* 0 to 15 */
+ 
+   int   class_dim[VIF_CLASS];        /* 1 to 8 */
+   int   class_subs[VIF_CLASS];       /* 0,1,2,3 (bits: 1<<n poss) */
+   int   class_book[VIF_CLASS];       /* subs ^ dim entries */
+   int   class_subbook[VIF_CLASS][8]; /* [VIF_CLASS][subs] */
+ 
+ 
+   int   mult;                      /* 1 2 3 or 4 */ 
+   int   postlist[VIF_POSIT+2];    /* first two implicit */ 
+ 
+ 
+   /* encode side analysis parameters */
+   float maxover;     
+   float maxunder;  
+   float maxerr;    
+ 
+   float twofitweight;  
+   float twofitatten;
+ 
+   int   n;
+ 
+ } vorbis_info_floor1;
+ 
+ /* Residue backend generic *****************************************/
+ typedef struct{
+   void                 (*pack)  (vorbis_info_residue *,oggpack_buffer *);
+   vorbis_info_residue *(*unpack)(vorbis_info *,oggpack_buffer *);
+   vorbis_look_residue *(*look)  (vorbis_dsp_state *,
+ 				 vorbis_info_residue *);
+   void (*free_info)    (vorbis_info_residue *);
+   void (*free_look)    (vorbis_look_residue *);
+   long **(*class)      (struct vorbis_block *,vorbis_look_residue *,
+ 			float **,int *,int);
+   int  (*forward)      (struct vorbis_block *,vorbis_look_residue *,
+ 			float **,float **,int *,int,long **);
+   int  (*inverse)      (struct vorbis_block *,vorbis_look_residue *,
+ 			float **,int *,int);
+ } vorbis_func_residue;
+ 
+ typedef struct vorbis_info_residue0{
+ /* block-partitioned VQ coded straight residue */
+   long  begin;
+   long  end;
+ 
+   /* first stage (lossless partitioning) */
+   int    grouping;         /* group n vectors per partition */
+   int    partitions;       /* possible codebooks for a partition */
+   int    groupbook;        /* huffbook for partitioning */
+   int    secondstages[64]; /* expanded out to pointers in lookup */
+   int    booklist[256];    /* list of second stage books */
+ 
+   float  classmetric1[64];  
+   float  classmetric2[64];  
+ 
+ } vorbis_info_residue0;
+ 
+ /* Mapping backend generic *****************************************/
+ typedef struct{
+   void                 (*pack)  (vorbis_info *,vorbis_info_mapping *,
+ 				 oggpack_buffer *);
+   vorbis_info_mapping *(*unpack)(vorbis_info *,oggpack_buffer *);
+   void (*free_info)    (vorbis_info_mapping *);
+   int  (*forward)      (struct vorbis_block *vb);
+   int  (*inverse)      (struct vorbis_block *vb,vorbis_info_mapping *);
+ } vorbis_func_mapping;
+ 
+ typedef struct vorbis_info_mapping0{
+   int   submaps;  /* <= 16 */
+   int   chmuxlist[256];   /* up to 256 channels in a Vorbis stream */
+   
+   int   floorsubmap[16];   /* [mux] submap to floors */
+   int   residuesubmap[16]; /* [mux] submap to residue */
+ 
+   int   coupling_steps;
+   int   coupling_mag[256];
+   int   coupling_ang[256];
+ 
+ } vorbis_info_mapping0;
+ 
+ #ifndef EHMER_MAX
+ #define EHMER_MAX 56
+ #endif
+ 
+ /* psychoacoustic setup ********************************************/
+ #define P_BANDS 17      /* 62Hz to 16kHz */
+ #define P_LEVELS 8      /* 30dB to 100dB */
+ #define P_LEVEL_0 30.    /* 30 dB */
+ #define P_NOISECURVES 3
+ 
+ #define NOISE_COMPAND_LEVELS 40
+ typedef struct vorbis_info_psy{
+   int   blockflag;
+ 
+   float ath_adjatt;
+   float ath_maxatt;
+ 
+   float tone_masteratt[P_NOISECURVES];
+   float tone_centerboost;
+   float tone_decay;
+   float tone_abs_limit;
+   float toneatt[P_BANDS];
+ 
+   int noisemaskp;
+   float noisemaxsupp;
+   float noisewindowlo;
+   float noisewindowhi;
+   int   noisewindowlomin;
+   int   noisewindowhimin;
+   int   noisewindowfixed;
+   float noiseoff[P_NOISECURVES][P_BANDS];
+   float noisecompand[NOISE_COMPAND_LEVELS];
+ 
+   float max_curve_dB;
+ 
+   int normal_channel_p;
+   int normal_point_p;
+   int normal_start;
+   int normal_partition;
+   double normal_thresh;
+ } vorbis_info_psy;
+ 
+ typedef struct{
+   int   eighth_octave_lines;
+ 
+   /* for block long/short tuning; encode only */
+   float preecho_thresh[VE_BANDS];
+   float postecho_thresh[VE_BANDS];
+   float stretch_penalty;
+   float preecho_minenergy;
+ 
+   float ampmax_att_per_sec;
+ 
+   /* channel coupling config */
+   int   coupling_pkHz[PACKETBLOBS];  
+   int   coupling_pointlimit[2][PACKETBLOBS];  
+   int   coupling_prepointamp[PACKETBLOBS];  
+   int   coupling_postpointamp[PACKETBLOBS];  
+   int   sliding_lowpass[2][PACKETBLOBS];  
+ 
+ } vorbis_info_psy_global;
+ 
+ typedef struct {
+   float ampmax;
+   int   channels;
+ 
+   vorbis_info_psy_global *gi;
+   int   coupling_pointlimit[2][P_NOISECURVES];  
+ } vorbis_look_psy_global;
+ 
+ 
+ typedef struct {
+   int n;
+   struct vorbis_info_psy *vi;
+ 
+   float ***tonecurves;
+   float **noiseoffset;
+ 
+   float *ath;
+   long  *octave;             /* in n.ocshift format */
+   long  *bark;
+ 
+   long  firstoc;
+   long  shiftoc;
+   int   eighth_octave_lines; /* power of two, please */
+   int   total_octave_lines;  
+   long  rate; /* cache it */
+ } vorbis_look_psy;
+ 
+ extern void   _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
+ 			   vorbis_info_psy_global *gi,int n,long rate);
+ extern void   _vp_psy_clear(vorbis_look_psy *p);
+ extern void  *_vi_psy_dup(void *source);
+ 
+ extern void   _vi_psy_free(vorbis_info_psy *i);
+ extern vorbis_info_psy *_vi_psy_copy(vorbis_info_psy *i);
+ 
+ extern void _vp_remove_floor(vorbis_look_psy *p,
+ 			     float *mdct,
+ 			     int *icodedflr,
+ 			     float *residue,
+ 			     int sliding_lowpass);
+ 
+ extern void _vp_noisemask(vorbis_look_psy *p,
+ 			  float *logmdct, 
+ 			  float *logmask);
+ 
+ extern void _vp_tonemask(vorbis_look_psy *p,
+ 			 float *logfft,
+ 			 float *logmask,
+ 			 float global_specmax,
+ 			 float local_specmax);
+ 
+ extern void _vp_offset_and_mix(vorbis_look_psy *p,
+ 			       float *noise,
+ 			       float *tone,
+ 			       int offset_select,
+ 			       float *logmask);
+ 
+ extern float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd);
+ 
+ extern float **_vp_quantize_couple_memo(vorbis_block *vb,
+ 					vorbis_info_psy_global *g,
+ 					vorbis_look_psy *p,
+ 					vorbis_info_mapping0 *vi,
+ 					float **mdct);
+ 
+ extern void _vp_couple(int blobno,
+ 		       vorbis_info_psy_global *g,
+ 		       vorbis_look_psy *p,
+ 		       vorbis_info_mapping0 *vi,
+ 		       float **res,
+ 		       float **mag_memo,
+ 		       int   **mag_sort,
+ 		       int   **ifloor,
+ 		       int   *nonzero,
+ 		       int   sliding_lowpass);
+ 
+ extern void _vp_noise_normalize(vorbis_look_psy *p,
+ 				float *in,float *out,int *sortedindex);
+ 
+ extern void _vp_noise_normalize_sort(vorbis_look_psy *p,
+ 				     float *magnitudes,int *sortedindex);
+ 
+ extern int **_vp_quantize_couple_sort(vorbis_block *vb,
+ 				      vorbis_look_psy *p,
+ 				      vorbis_info_mapping0 *vi,
+ 				      float **mags);
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: bitrate tracking and management
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_BITRATE_H_
+ 
+ #define _OS_H
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: #ifdef jail to whip a few platforms into the UNIX ideal.
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: miscellaneous prototypes
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_RANDOM_H_
+ 
+ extern int analysis_noisy;
+ 
+ extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
+ extern void _vorbis_block_ripcord(vorbis_block *vb);
+ extern void _analysis_output(char *base,int i,float *v,int n,int bark,int dB,
+ 			     ogg_int64_t off);
+ 
+ #ifndef _V_IFDEFJAIL_H_
+ #  define _V_IFDEFJAIL_H_
+ 
+ #  ifdef __GNUC__
+ #    define STIN static __inline__
+ #  elif _WIN32
+ #    define STIN static __inline
+ #  else
+ #    define STIN static
+ #  endif
+ 
+ #ifdef DJGPP
+ #  define rint(x)   (floor((x)+0.5f))
+ #endif
+ 
+ #ifndef M_PI
+ #  define M_PI (3.1415926536f)
+ #endif
+ 
+ #ifndef FAST_HYPOT
+ #  define FAST_HYPOT hypot
+ #endif
+ 
+ #endif
+ 
+ #ifndef min
+ #  define min(x,y)  ((x)>(y)?(y):(x))
+ #endif
+ 
+ #ifndef max
+ #  define max(x,y)  ((x)<(y)?(y):(x))
+ #endif
+ 
+ #if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__)
+ #  define VORBIS_FPU_CONTROL
+ /* both GCC and MSVC are kinda stupid about rounding/casting to int.
+    Because of encapsulation constraints (GCC can't see inside the asm
+    block and so we end up doing stupid things like a store/load that
+    is collectively a noop), we do it this way */
+ 
+ /* we must set up the fpu before this works!! */
+ 
+ typedef ogg_int16_t vorbis_fpu_control;
+ 
+ static inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
+   ogg_int16_t ret;
+   ogg_int16_t temp;
+   __asm__ __volatile__("fnstcw %0\n\t"
+ 	  "movw %0,%%dx\n\t"
+ 	  "orw $62463,%%dx\n\t"
+ 	  "movw %%dx,%1\n\t"
+ 	  "fldcw %1\n\t":"=m"(ret):"m"(temp): "dx");
+   *fpu=ret;
+ }
+ 
+ static inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
+   __asm__ __volatile__("fldcw %0":: "m"(fpu));
+ }
+ 
+ /* assumes the FPU is in round mode! */
+ static inline int vorbis_ftoi(double f){  /* yes, double!  Otherwise,
+                                              we get extra fst/fld to
+                                              truncate precision */
+   int i;
+   __asm__("fistl %0": "=m"(i) : "t"(f));
+   return(i);
+ }
+ #endif
+ 
+ 
+ #if defined(_WIN32) && !defined(__GNUC__) && !defined(__BORLANDC__)
+ #  define VORBIS_FPU_CONTROL
+ 
+ typedef ogg_int16_t vorbis_fpu_control;
+ 
+ static __inline int vorbis_ftoi(double f){
+ 	int i;
+ 	__asm{
+ 		fld f
+ 		fistp i
+ 	}
+ 	return i;
+ }
+ 
+ static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
+ }
+ 
+ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
+ }
+ 
+ #endif
+ 
+ 
+ #ifndef VORBIS_FPU_CONTROL
+ 
+ typedef int vorbis_fpu_control;
+ 
+ static int vorbis_ftoi(double f){
+   return (int)(f+.5);
+ }
+ 
+ /* We don't have special code for this compiler/arch, so do it the slow way */
+ #  define vorbis_fpu_setround(vorbis_fpu_control) {}
+ #  define vorbis_fpu_restore(vorbis_fpu_control) {}
+ 
+ #endif
+ 
+ /* encode side bitrate tracking */
+ typedef struct bitrate_manager_state {
+   ogg_uint32_t  *queue_binned;
+   ogg_uint32_t  *queue_actual;
+   int            queue_size;
+ 
+   int            queue_head;
+   int            queue_bins;
+ 
+   long          *avg_binacc;
+   int            avg_center;
+   int            avg_tail;
+   ogg_uint32_t   avg_centeracc;
+   ogg_uint32_t   avg_sampleacc;
+   ogg_uint32_t   avg_sampledesired;
+   ogg_uint32_t   avg_centerdesired;
+ 
+   long          *minmax_binstack;
+   long          *minmax_posstack;
+   long          *minmax_limitstack;
+   long           minmax_stackptr;
+ 
+   long           minmax_acctotal;
+   int            minmax_tail;
+   ogg_uint32_t   minmax_sampleacc;
+   ogg_uint32_t   minmax_sampledesired;
+ 
+   int            next_to_flush;
+   int            last_to_flush;
+   
+   double         avgfloat;
+ 
+   /* unfortunately, we need to hold queued packet data somewhere */
+   oggpack_buffer *packetbuffers;
+   ogg_packet     *packets;
+ 
+ } bitrate_manager_state;
+ 
+ typedef struct bitrate_manager_info{
+   /* detailed bitrate management setup */
+   double queue_avg_time;
+   double queue_avg_center;
+   double queue_minmax_time;
+   double queue_hardmin;
+   double queue_hardmax;
+   double queue_avgmin;
+   double queue_avgmax;
+ 
+   double avgfloat_downslew_max;
+   double avgfloat_upslew_max;
+ 
+ } bitrate_manager_info;
+ 
+ extern void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bs);
+ extern void vorbis_bitrate_clear(bitrate_manager_state *bs);
+ extern int vorbis_bitrate_managed(vorbis_block *vb);
+ extern int vorbis_bitrate_addblock(vorbis_block *vb);
+ extern int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd, ogg_packet *op);
+ 
+ typedef struct private_state {
+   /* local lookup storage */
+   envelope_lookup        *ve; /* envelope lookup */    
+   int                     window[2];
+   vorbis_look_transform **transform[2];    /* block, type */
+   drft_lookup             fft_look[2];
+ 
+   int                     modebits;
+   vorbis_look_floor     **flr;
+   vorbis_look_residue   **residue;
+   vorbis_look_psy        *psy;
+   vorbis_look_psy_global *psy_g_look;
+ 
+   /* local storage, only used on the encoding side.  This way the
+      application does not need to worry about freeing some packets'
+      memory and not others'; packet storage is always tracked.
+      Cleared next call to a _dsp_ function */
+   unsigned char *header;
+   unsigned char *header1;
+   unsigned char *header2;
+ 
+   bitrate_manager_state bms;
+ 
+   ogg_int64_t sample_count;
+ } private_state;
+ 
+ /* codec_setup_info contains all the setup information specific to the
+    specific compression/decompression mode in progress (eg,
+    psychoacoustic settings, channel setup, options, codebook
+    etc).  
+ *********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: highlevel encoder setup struct seperated out for vorbisenc clarity
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ typedef struct highlevel_byblocktype {
+   double tone_mask_setting;
+   double tone_peaklimit_setting;
+   double noise_bias_setting;
+   double noise_compand_setting;
+ } highlevel_byblocktype;
+   
+ typedef struct highlevel_encode_setup {
+   void *setup;
+   int   set_in_stone;
+ 
+   double base_setting;
+   double long_setting;
+   double short_setting;
+   double impulse_noisetune;
+ 
+   int    managed;
+   long   bitrate_min;
+   long   bitrate_av_lo;
+   long   bitrate_av_hi;
+   long   bitrate_max;
+   double bitrate_limit_window;
+   double bitrate_av_window;
+   double bitrate_av_window_center;
+   
+   int impulse_block_p;
+   int noise_normalize_p;
+ 
+   double stereo_point_setting;
+   double lowpass_kHz;
+ 
+   double ath_floating_dB;
+   double ath_absolute_dB;
+ 
+   double amplitude_track_dBpersec;
+   double trigger_setting;
+   
+   highlevel_byblocktype block[4]; /* padding, impulse, transition, long */
+ 
+ } highlevel_encode_setup;
+ 
+ typedef struct codec_setup_info {
+ 
+   /* Vorbis supports only short and long blocks, but allows the
+      encoder to choose the sizes */
+ 
+   long blocksizes[2];
+ 
+   /* modes are the primary means of supporting on-the-fly different
+      blocksizes, different channel mappings (LR or M/A),
+      different residue backends, etc.  Each mode consists of a
+      blocksize flag and a mapping (along with the mapping setup */
+ 
+   int        modes;
+   int        maps;
+   int        floors;
+   int        residues;
+   int        books;
+   int        psys;     /* encode only */
+ 
+   vorbis_info_mode       *mode_param[64];
+   int                     map_type[64];
+   vorbis_info_mapping    *map_param[64];
+   int                     floor_type[64];
+   vorbis_info_floor      *floor_param[64];
+   int                     residue_type[64];
+   vorbis_info_residue    *residue_param[64];
+   static_codebook        *book_param[256];
+   codebook               *fullbooks;
+ 
+   vorbis_info_psy        *psy_param[4]; /* encode only */
+   vorbis_info_psy_global psy_g_param;
+ 
+   bitrate_manager_info   bi;
+   highlevel_encode_setup hi; /* used only by vorbisenc.c.  It's a
+                                 highly redundant structure, but
+                                 improves clarity of program flow. */
+   int         halfrate_flag; /* painless downsample for decode */  
+ } codec_setup_info;
+ 
+ extern vorbis_look_psy_global *_vp_global_look(vorbis_info *vi);
+ extern void _vp_global_free(vorbis_look_psy_global *look);
+ 
+ /* careful with this; it's using static array sizing to make managing
+    all the modes a little less annoying.  If we use a residue backend
+    with > 12 partition types, or a different division of iteration,
+    this needs to be updated. */
+ typedef struct {
+   static_codebook *books[12][3];
+ } static_bookblock;
+ 
+ typedef struct {
+   int res_type;
+   int limit_type; /* 0 lowpass limited, 1 point stereo limited */
+   vorbis_info_residue0 *res;
+   static_codebook  *book_aux;
+   static_codebook  *book_aux_managed;
+   static_bookblock *books_base;
+   static_bookblock *books_base_managed;
+ } vorbis_residue_template;
+ 
+ typedef struct {
+   vorbis_info_mapping0    *map;
+   vorbis_residue_template *res;
+ } vorbis_mapping_template;
+ 
+ typedef struct vp_adjblock{
+   int block[P_BANDS];
+ } vp_adjblock;
+ 
+ typedef struct {
+   int data[NOISE_COMPAND_LEVELS];
+ } compandblock;
+ 
+ /* high level configuration information for setting things up
+    step-by-step with the detailed vorbis_encode_ctl interface.
+    There's a fair amount of redundancy such that interactive setup
+    does not directly deal with any vorbis_info or codec_setup_info
+    initialization; it's all stored (until full init) in this highlevel
+    setup, then flushed out to the real codec setup structs later. */
+ 
+ typedef struct {
+   int att[P_NOISECURVES];
+   float boost;
+   float decay;
+ } att3;
+ typedef struct { int data[P_NOISECURVES]; } adj3; 
+ 
+ typedef struct {
+   int   pre[PACKETBLOBS];
+   int   post[PACKETBLOBS];
+   float kHz[PACKETBLOBS];
+   float lowpasskHz[PACKETBLOBS];
+ } adj_stereo;
+ 
+ typedef struct {
+   int lo;
+   int hi;
+   int fixed;
+ } noiseguard;
+ typedef struct {
+   int data[P_NOISECURVES][17];
+ } noise3;
+ 
+ typedef struct {
+   int      mappings;
+   double  *rate_mapping;
+   double  *quality_mapping;
+   int      coupling_restriction;
+   long     samplerate_min_restriction;
+   long     samplerate_max_restriction;
+ 
+ 
+   int     *blocksize_short;
+   int     *blocksize_long;
+ 
+   att3    *psy_tone_masteratt;
+   int     *psy_tone_0dB;
+   int     *psy_tone_dBsuppress;
+ 
+   vp_adjblock *psy_tone_adj_impulse;
+   vp_adjblock *psy_tone_adj_long;
+   vp_adjblock *psy_tone_adj_other;
+ 
+   noiseguard  *psy_noiseguards;
+   noise3      *psy_noise_bias_impulse;
+   noise3      *psy_noise_bias_padding;
+   noise3      *psy_noise_bias_trans;
+   noise3      *psy_noise_bias_long;
+   int         *psy_noise_dBsuppress;
+ 
+   compandblock  *psy_noise_compand;
+   double        *psy_noise_compand_short_mapping;
+   double        *psy_noise_compand_long_mapping;
+ 
+   int      *psy_noise_normal_start[2];
+   int      *psy_noise_normal_partition[2];
+   double   *psy_noise_normal_thresh;
+ 
+   int      *psy_ath_float;
+   int      *psy_ath_abs;
+ 
+   double   *psy_lowpass;
+ 
+   vorbis_info_psy_global *global_params;
+   double     *global_mapping;
+   adj_stereo *stereo_modes;
+ 
+   static_codebook ***floor_books;
+   vorbis_info_floor1 *floor_params;
+   int *floor_short_mapping;
+   int *floor_long_mapping;
+ 
+   vorbis_mapping_template *maps;
+ } ve_setup_data_template;
+ 
+ /* a few static coder conventions */
+ static vorbis_info_mode _mode_template[2]={
+   {0,0,0,0},
+   {1,0,0,1}
+ };
+ 
+ static vorbis_info_mapping0 _map_nominal[2]={
+   {1, {0,0}, {0}, {0}, 1,{0},{1}},
+   {1, {0,0}, {1}, {1}, 1,{0},{1}}
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: toplevel settings for 44.1/48kHz
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: key floor settings
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the Xiph.Org Foundation http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: static codebooks autogenerated by huff/huffbuld
+  last modified: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static long _huff_lengthlist_line_1024x27_0sub0[] = {
+ 	 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
+ 	 6, 5, 6, 5, 6, 5, 7, 5, 7, 5, 7, 5, 8, 5, 8, 6,
+ 	 8, 6, 9, 6, 9, 6, 9, 6,10, 6,10, 6,11, 6,11, 6,
+ 	11, 6,12, 6,12, 7,12, 7,12, 7,12, 7,12, 7,12, 7,
+ 	12, 7,12, 7,12, 7,12, 7,12, 8,12, 8,11, 8,11, 8,
+ 	12, 9,11, 9, 9,10,11, 9,12, 9,12,12,14,13,13,14,
+ 	13,13,13,12,14,16,20,20,21,14,14,15,21,21,21,20,
+ 	21,21,21,21,21,21,21,21,21,21,20,20,20,20,20,20,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_0sub0 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_1024x27_0sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_1sub0[] = {
+ 	 2, 5, 5, 4, 5, 4, 5, 4, 5, 4, 6, 4, 6, 5, 6, 5,
+ 	 7, 5, 7, 6, 8, 6, 8, 6, 8, 6, 9, 6,10, 6,10, 6,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_1sub0 = {
+ 	1, 32,
+ 	_huff_lengthlist_line_1024x27_1sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_1sub1[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 9, 5,10, 4,10, 4, 9, 4, 9, 3, 9, 4, 9, 4, 9, 4,
+ 	 9, 4, 9, 4, 9, 4, 8, 4, 8, 4, 8, 5, 9, 5, 9, 6,
+ 	 8, 6, 9, 7,10, 8,10, 9,10,10,10,12,11,13,12,13,
+ 	13,15,13,14,13,14,12,15,13,15,14,15,13,16,14,16,
+ 	14,15,14,14,14,16,15,18,15,18,16,18,18,18,18,18,
+ 	18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,17,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_1sub1 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_1024x27_1sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_2sub0[] = {
+ 	 1, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5,
+ 	 6, 6, 7, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9,10,10,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_2sub0 = {
+ 	1, 32,
+ 	_huff_lengthlist_line_1024x27_2sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_2sub1[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 3, 3, 4, 3, 4, 4, 5, 4, 5, 5, 5, 5, 6, 5, 6, 6,
+ 	 7, 6, 7, 7, 7, 7, 7, 7, 8, 9, 8, 9, 8,10, 8,11,
+ 	 8,12, 9,13, 9,14, 9,14, 8,12, 8,14, 9,14, 8,12,
+ 	 8,11, 8,11, 8,11, 9,11,10,11,10,12,10,12,11,12,
+ 	12,12,12,12,11,12,11,13,11,13,12,14,14,14,14,14,
+ 	14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,13,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_2sub1 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_1024x27_2sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_3sub1[] = {
+ 	 0, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 4, 4, 5, 4,
+ 	 5, 5,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_3sub1 = {
+ 	1, 18,
+ 	_huff_lengthlist_line_1024x27_3sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_3sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 3, 3, 3, 3, 4, 4, 4, 5, 4, 6, 5, 6, 5, 7,
+ 	 5, 9, 5,10, 6,11, 6,12, 7,13, 8,15, 8,15, 9,15,
+ 	 9,15,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_3sub2 = {
+ 	1, 50,
+ 	_huff_lengthlist_line_1024x27_3sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_3sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 2, 9, 2, 9, 2, 9, 4, 9, 6, 9, 7, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_3sub3 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_1024x27_3sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_4sub1[] = {
+ 	 0, 4, 5, 4, 5, 4, 6, 3, 6, 3, 5, 3, 5, 3, 6, 4,
+ 	 6, 4,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_4sub1 = {
+ 	1, 18,
+ 	_huff_lengthlist_line_1024x27_4sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_4sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 2, 4, 2, 5, 3, 5, 4, 6, 6, 6, 6, 7, 7,
+ 	 7, 8, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9,10,10,11,
+ 	10,11,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_4sub2 = {
+ 	1, 50,
+ 	_huff_lengthlist_line_1024x27_4sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_4sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 3, 3, 3, 6, 4, 6, 4, 5, 5, 7, 4, 8, 5, 9,
+ 	 4, 9, 5, 9, 5, 9, 6, 9, 5, 9, 7, 9, 7, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_4sub3 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_1024x27_4sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_class1[] = {
+ 	 2, 9, 8,14, 7,13,11,14, 1, 5, 3, 7, 4,10, 7,12,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_class1 = {
+ 	1, 16,
+ 	_huff_lengthlist_line_1024x27_class1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_class2[] = {
+ 	 1, 3, 2, 5, 4, 7, 6, 7,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_class2 = {
+ 	1, 8,
+ 	_huff_lengthlist_line_1024x27_class2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_class3[] = {
+ 	 1, 5, 6,19, 5, 8,10,19, 9,10,15,19,19,19,19,19,
+ 	 4, 7, 9,19, 6, 7,10,19,11,11,15,19,19,19,19,19,
+ 	 8,11,13,19, 8,11,14,19,13,13,17,19,19,19,19,19,
+ 	19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 	 3, 7, 9,19, 6, 8,11,19,11,11,15,19,19,19,19,19,
+ 	 5, 7,11,19, 6, 7,11,19,11,10,14,19,19,19,19,19,
+ 	 8,11,15,19, 8,10,14,19,13,13,16,19,19,19,19,19,
+ 	19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 	 6, 9,11,19, 8,10,12,19,15,14,17,19,19,19,19,19,
+ 	 5, 8,11,19, 7, 9,12,19,14,11,16,19,19,19,19,19,
+ 	 9,10,18,19, 9,10,15,19,14,16,19,19,19,19,19,19,
+ 	19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
+ 	16,17,19,19,16,17,17,19,19,19,19,19,19,19,19,19,
+ 	12,14,16,19,12,12,16,19,19,19,19,19,19,19,19,19,
+ 	18,18,19,19,17,16,19,19,19,19,19,19,19,19,19,19,
+ 	19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,18,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_class3 = {
+ 	1, 256,
+ 	_huff_lengthlist_line_1024x27_class3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_1024x27_class4[] = {
+ 	 1, 4, 8,12, 4, 6, 8,21, 9, 8,10,21,20,16,18,20,
+ 	 2, 6, 8,20, 7, 6, 9,19,11, 9,10,20,17,15,16,20,
+ 	 5, 8,11,19, 8, 8,10,15,12,10,12,15,20,20,15,20,
+ 	17,20,20,20,15,20,20,19,20,20,16,19,20,20,20,20,
+ };
+ 
+ static static_codebook _huff_book_line_1024x27_class4 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_1024x27_class4,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_0sub0[] = {
+ 	 5, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5,
+ 	 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6,
+ 	 8, 7, 8, 7, 8, 7, 8, 7, 9, 7, 9, 7, 9, 8,10, 8,
+ 	10, 8,10, 8,10, 8,10, 9,11, 9,11, 9,10, 9,10,10,
+ 	11,10,11,11,11,11,12,12,13,14,13,14,16,16,16,16,
+ 	16,16,15,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 	16,16,16,16,16,16,16,16,16,16,16,16,16,15,15,15,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_0sub0 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_128x11_0sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_1sub0[] = {
+ 	 2, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 	 6, 5, 6, 5, 6, 5, 7, 6, 7, 6, 7, 6, 8, 6, 8, 6,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_1sub0 = {
+ 	1, 32,
+ 	_huff_lengthlist_line_128x11_1sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_1sub1[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 6, 3, 6, 3, 7, 3, 7, 4, 8, 4, 8, 4, 8, 4, 9, 4,
+ 	10, 5, 9, 5,10, 5,10, 5,10, 5,12, 6,12, 6,10, 6,
+ 	10, 7,10, 8,10, 8,10, 9,11, 9,12,11,10,11,11,13,
+ 	12,12,12,13,10,13,10,13,10,13,10,13,11,13,10,13,
+ 	10,13,10,13,10,13,10,13,11,12,13,13,13,13,13,13,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_1sub1 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_128x11_1sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_2sub1[] = {
+ 	 0, 4, 5, 4, 5, 4, 5, 3, 4, 3, 4, 4, 4, 4, 4, 5,
+ 	 5, 5,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_2sub1 = {
+ 	1, 18,
+ 	_huff_lengthlist_line_128x11_2sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_2sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 2, 3, 3, 4, 3, 5, 4, 5, 5, 6, 5, 6, 6, 6,
+ 	 6, 8, 6,10, 7,10, 8,10, 8,10,10,10,10,10,10,10,
+ 	10,10,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_2sub2 = {
+ 	1, 50,
+ 	_huff_lengthlist_line_128x11_2sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_2sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_2sub3 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_128x11_2sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_3sub1[] = {
+ 	 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4,
+ 	 5, 4,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_3sub1 = {
+ 	1, 18,
+ 	_huff_lengthlist_line_128x11_3sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_3sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 3, 5, 3, 6, 4, 7, 4, 7, 4, 7, 4, 8, 4,
+ 	 8, 4, 9, 4, 9, 4, 9, 5,10, 5,11, 5,12, 6,13, 6,
+ 	13, 7,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_3sub2 = {
+ 	1, 50,
+ 	_huff_lengthlist_line_128x11_3sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_3sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 7, 2, 6, 2, 7, 3, 8, 4, 7, 6, 9, 7, 9, 7,
+ 	 9, 9, 9, 8, 9, 8, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_3sub3 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_128x11_3sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_class1[] = {
+ 	 1, 6, 3, 7, 2, 5, 4, 7,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_class1 = {
+ 	1, 8,
+ 	_huff_lengthlist_line_128x11_class1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_class2[] = {
+ 	 1, 5,11,14, 4,11,13,14,10,14,13,14,14,14,13,13,
+ 	 2, 6,11,13, 5,11,12,13,11,12,13,13,13,13,13,13,
+ 	 4, 8,12,13, 5, 9,11,13,12,13,13,13,13,13,13,13,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_class2 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_128x11_class2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x11_class3[] = {
+ 	 6, 7,11,16, 6, 7,10,16,11, 9,13,15,15,15,15,15,
+ 	 4, 4, 7,14, 4, 4, 6,14, 8, 6, 8,15,15,15,15,15,
+ 	 4, 4, 6,15, 3, 2, 4,13, 6, 5, 6,14,15,12,11,14,
+ 	11,11,13,15, 9, 8,10,15,11,10,11,15,15,15,15,15,
+ };
+ 
+ static static_codebook _huff_book_line_128x11_class3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_128x11_class3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_0sub0[] = {
+ 	 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 6, 5, 6, 5, 6, 5,
+ 	 6, 5, 6, 5, 6, 5, 6, 5, 7, 5, 7, 5, 7, 6, 7, 6,
+ 	 7, 6, 8, 6, 8, 6, 8, 6, 8, 6, 8, 6, 8, 7, 9, 7,
+ 	 9, 7, 9, 7, 9, 7, 9, 7, 9, 7,10, 7,10, 8,10, 8,
+ 	11, 8,11, 8,11, 8,12, 8,12, 8,12, 8,12, 9,12, 9,
+ 	12, 9,12, 9,13, 9,13,10,13,10,13,11,14,12,14,13,
+ 	14,14,16,15,17,17,19,18,19,19,19,19,19,19,19,19,
+ 	19,19,19,19,19,19,19,19,19,19,19,18,18,18,18,18,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_0sub0 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_128x17_0sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_1sub0[] = {
+ 	 2, 5, 5, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 6, 5,
+ 	 6, 5, 6, 6, 7, 6, 7, 6, 8, 6, 8, 7, 9, 7, 9, 8,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_1sub0 = {
+ 	1, 32,
+ 	_huff_lengthlist_line_128x17_1sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_1sub1[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 4, 2, 5, 3, 5, 3, 6, 4, 6, 4, 7, 4, 8, 5, 8, 5,
+ 	 8, 6, 9, 6, 9, 7, 9, 8,10, 8,10, 9,10,10,10,10,
+ 	10,12,10,14,11,15,12,15,11,15,11,15,11,14,11,15,
+ 	11,14,11,13,10,12,10,14,10,14,11,13,10,12,11,15,
+ 	12,15,13,15,12,13,14,15,15,15,15,15,15,15,15,15,
+ 	15,15,15,15,15,15,15,15,15,15,15,15,15,14,14,14,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_1sub1 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_128x17_1sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_2sub1[] = {
+ 	 0, 4, 5, 4, 7, 3, 8, 3, 9, 3,10, 2,12, 3,12, 4,
+ 	11, 6,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_2sub1 = {
+ 	1, 18,
+ 	_huff_lengthlist_line_128x17_2sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_2sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 7, 1, 8, 2, 9, 3, 9, 7, 9, 7, 9, 7, 8, 7,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_2sub2 = {
+ 	1, 50,
+ 	_huff_lengthlist_line_128x17_2sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_2sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_2sub3 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_128x17_2sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_3sub1[] = {
+ 	 0, 4, 4, 4, 5, 4, 5, 3, 5, 3, 5, 3, 5, 4, 6, 4,
+ 	 6, 4,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_3sub1 = {
+ 	1, 18,
+ 	_huff_lengthlist_line_128x17_3sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_3sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 3, 6, 3, 6, 3, 7, 4, 8, 4, 8, 4, 9, 4,
+ 	 9, 4,10, 4,10, 5,11, 5,11, 5,12, 5,12, 6,12, 6,
+ 	12, 7,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_3sub2 = {
+ 	1, 50,
+ 	_huff_lengthlist_line_128x17_3sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_3sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 7, 1, 7, 3, 6, 3, 6, 4, 6, 5, 6, 8, 7,10,
+ 	 7,11, 7,11, 8,11, 9,11, 7,11, 8,11, 8,11,10,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_3sub3 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_128x17_3sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_class1[] = {
+ 	 1, 3, 4, 7, 2, 6, 5, 7,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_class1 = {
+ 	1, 8,
+ 	_huff_lengthlist_line_128x17_class1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_class2[] = {
+ 	 1, 2, 7,14, 4, 9,13,14, 8,14,14,14,14,14,14,14,
+ 	 3, 5,10,14, 8,14,14,14,11,14,14,14,14,14,14,14,
+ 	 7,10,14,14,12,14,14,14,14,14,14,14,14,14,14,14,
+ 	14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,13,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_class2 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_128x17_class2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x17_class3[] = {
+ 	 2, 6,11,19, 5, 9,12,19,10,11,13,19,19,19,19,19,
+ 	 2, 5, 8,19, 4, 6, 8,19, 8, 8, 9,19,19,16,19,19,
+ 	 3, 6, 8,19, 3, 5, 7,18, 8, 8, 9,16,16,11,16,19,
+ 	14,14,14,19,10,10,11,19,16,12,14,19,19,19,19,19,
+ };
+ 
+ static static_codebook _huff_book_line_128x17_class3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_128x17_class3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x4_0sub0[] = {
+ 	 2, 2, 2, 2,
+ };
+ 
+ static static_codebook _huff_book_line_128x4_0sub0 = {
+ 	1, 4,
+ 	_huff_lengthlist_line_128x4_0sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x4_0sub1[] = {
+ 	 0, 0, 0, 0, 3, 2, 3, 2, 3, 3,
+ };
+ 
+ static static_codebook _huff_book_line_128x4_0sub1 = {
+ 	1, 10,
+ 	_huff_lengthlist_line_128x4_0sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x4_0sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 3, 4, 4, 4, 4,
+ 	 4, 3, 4, 4, 5, 3, 6, 4, 6,
+ };
+ 
+ static static_codebook _huff_book_line_128x4_0sub2 = {
+ 	1, 25,
+ 	_huff_lengthlist_line_128x4_0sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x4_0sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 2, 6, 3, 6, 3,
+ 	 7, 4, 7, 5, 7, 5, 7, 6, 8, 8, 9,10,10,16,10,16,
+ 	10,14,10,14,11,15,15,15,15,15,15,15,15,15,15,15,
+ };
+ 
+ static static_codebook _huff_book_line_128x4_0sub3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_128x4_0sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x4_class0[] = {
+ 	 8, 8, 8,14, 7, 7, 8,13, 7, 6, 7,11,11,11,10,13,
+ 	 9, 9,10,16, 8, 8, 9,12, 7, 7, 7,11,11,11,10,12,
+ 	11,11,11,14,10,10,10,14, 9, 8, 9,12,13,14,12,14,
+ 	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 	 8, 7, 8,11, 7, 7, 7,11, 6, 6, 6,10,10,10,10,14,
+ 	 8, 8, 8,12, 7, 7, 8,11, 6, 7, 7,10,10,10,10,13,
+ 	10,10,10,12,10, 9, 9,12, 9, 9, 9,12,12,13,12,14,
+ 	16,16,16,16,16,14,16,16,14,14,16,16,16,16,16,16,
+ 	 7, 6, 5, 7, 6, 6, 5, 6, 6, 5, 5, 5, 9,10, 9,10,
+ 	 8, 7, 6, 7, 7, 6, 5, 6, 6, 6, 5, 6,10,10, 9, 9,
+ 	10, 9, 7, 8, 9, 8, 7, 7, 8, 7, 6, 7,11,11,10, 9,
+ 	16,13,14,16,14,14,13,15,16,14,12,13,16,16,14,16,
+ 	 9, 8, 7, 8, 8, 8, 7, 8, 8, 7, 6, 7,10,10, 9,12,
+ 	 9, 9, 8, 8, 9, 8, 7, 8, 8, 8, 6, 7,10,10, 9,12,
+ 	11,10, 9,10,10, 9, 7, 9, 9, 8, 6, 9,12,11,10,13,
+ 	12,16,16,16,12,13,12,16,15,12,11,14,16,16,16,16,
+ };
+ 
+ static static_codebook _huff_book_line_128x4_class0 = {
+ 	1, 256,
+ 	_huff_lengthlist_line_128x4_class0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x7_0sub1[] = {
+ 	 0, 3, 3, 3, 3, 3, 3, 3, 3,
+ };
+ 
+ static static_codebook _huff_book_line_128x7_0sub1 = {
+ 	1, 9,
+ 	_huff_lengthlist_line_128x7_0sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x7_0sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 4, 3, 4, 4, 4,
+ 	 5, 4, 5, 4, 5, 4, 6, 4, 6,
+ };
+ 
+ static static_codebook _huff_book_line_128x7_0sub2 = {
+ 	1, 25,
+ 	_huff_lengthlist_line_128x7_0sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x7_0sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 3, 5, 3, 6, 4,
+ 	 6, 4, 6, 4, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 5, 5,
+ 	 6, 7, 8,10,12,12,12,12,12,12,12,12,12,12,12,12,
+ };
+ 
+ static static_codebook _huff_book_line_128x7_0sub3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_128x7_0sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x7_1sub1[] = {
+ 	 0, 3, 3, 3, 3, 2, 4, 3, 4,
+ };
+ 
+ static static_codebook _huff_book_line_128x7_1sub1 = {
+ 	1, 9,
+ 	_huff_lengthlist_line_128x7_1sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x7_1sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 3, 6, 3, 7, 3,
+ 	 8, 3, 9, 3,10, 3,11, 4,11,
+ };
+ 
+ static static_codebook _huff_book_line_128x7_1sub2 = {
+ 	1, 25,
+ 	_huff_lengthlist_line_128x7_1sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x7_1sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,12, 2, 9, 3,10, 4,
+ 	12, 5,12, 6,12,10,12,11,12,12,12,12,12,12,12,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ };
+ 
+ static static_codebook _huff_book_line_128x7_1sub3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_128x7_1sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x7_class0[] = {
+ 	10, 7, 8,14,10, 7, 7,12,11, 8, 8,13,16,16,16,16,
+ 	 8, 5, 5,10, 7, 4, 4, 8, 8, 5, 5, 9,16,16,16,16,
+ 	 7, 4, 5, 7, 6, 3, 3, 6, 8, 5, 5, 7,16,14,13,16,
+ 	 9, 7, 7,10, 7, 4, 4, 7, 9, 6, 5, 6,15,13,11,14,
+ };
+ 
+ static static_codebook _huff_book_line_128x7_class0 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_128x7_class0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_128x7_class1[] = {
+ 	 8,12,16,16,10,14,16,16,12,15,16,16,16,16,16,16,
+ 	 7,11,15,16, 7,11,16,16,10,12,16,16,16,16,16,16,
+ 	 9,15,16,16, 9,12,16,16,11,15,16,16,16,16,16,16,
+ 	16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+ 	 6,10,13,16, 7,10,15,16, 9,11,16,16,16,16,16,16,
+ 	 4, 8,13,16, 5, 8,15,16, 7, 9,15,16,16,16,16,16,
+ 	 6,12,16,16, 6,10,15,16, 9,10,14,16,16,16,16,16,
+ 	14,16,16,16,12,14,16,16,15,16,16,16,16,16,16,16,
+ 	 4, 9,11,16, 5, 9,13,16, 7, 9,15,16,16,16,16,16,
+ 	 2, 7,11,16, 3, 6,11,16, 5, 7,12,16,16,16,16,16,
+ 	 4, 9,14,16, 4, 7,13,16, 6, 8,13,16,16,16,16,16,
+ 	11,14,16,16,10,16,14,16,11,16,16,16,16,16,16,16,
+ 	 7,13,16,16, 9,13,15,16,11,13,16,16,16,16,16,16,
+ 	 5,10,14,16, 6,10,15,16, 9,10,16,16,16,16,16,16,
+ 	 7,13,16,16, 6,10,16,16, 9,12,16,16,16,16,16,16,
+ 	11,16,16,16,10,16,16,16,13,16,16,16,16,16,16,16,
+ };
+ 
+ static static_codebook _huff_book_line_128x7_class1 = {
+ 	1, 256,
+ 	_huff_lengthlist_line_128x7_class1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x4_0sub0[] = {
+ 	 1, 3, 2, 3,
+ };
+ 
+ static static_codebook _huff_book_line_256x4_0sub0 = {
+ 	1, 4,
+ 	_huff_lengthlist_line_256x4_0sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x4_0sub1[] = {
+ 	 0, 0, 0, 0, 2, 2, 3, 3, 3, 3,
+ };
+ 
+ static static_codebook _huff_book_line_256x4_0sub1 = {
+ 	1, 10,
+ 	_huff_lengthlist_line_256x4_0sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x4_0sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 4, 3, 4,
+ 	 4, 4, 5, 4, 5, 5, 6, 4, 6,
+ };
+ 
+ static static_codebook _huff_book_line_256x4_0sub2 = {
+ 	1, 25,
+ 	_huff_lengthlist_line_256x4_0sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x4_0sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 4, 3, 4, 3, 4, 4,
+ 	 5, 4, 5, 5, 6, 5, 7, 6, 8, 7, 9, 8, 9, 9,10,12,
+ 	15,15,15,15,15,15,15,15,14,14,14,14,14,14,14,14,
+ };
+ 
+ static static_codebook _huff_book_line_256x4_0sub3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_256x4_0sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x4_class0[] = {
+ 	 4, 5, 6,11, 5, 5, 6,10, 7, 6, 5, 6,14,13,10,10,
+ 	 6, 6, 6,10, 6, 6, 6,10, 7, 7, 7, 9, 9,10, 9,12,
+ 	 9, 8, 8,11, 8, 8, 8,10, 8, 8, 9,11, 8, 9, 9,13,
+ 	18,18,18,18,16,17,18,18,12,13,14,18,14,14,10,12,
+ 	 5, 5, 6,12, 6, 5, 6,10, 7, 7, 6, 7,13,12, 9,12,
+ 	 6, 6, 6,11, 6, 6, 6, 9, 7, 7, 7,10,10,10, 9,12,
+ 	 9, 8, 8,12, 8, 8, 7,11, 8, 8, 8,11, 9, 9, 8,10,
+ 	18,18,17,18,18,18,15,18,16,14,12,18,14,12,10,11,
+ 	 8, 7, 7,12, 8, 7, 7,10, 8, 7, 6, 6,11,10, 9,10,
+ 	 8, 8, 7,11, 8, 7, 7, 9, 8, 8, 7, 9,10,10, 9, 9,
+ 	10, 9, 8,12, 9, 9, 8,11,10, 9, 8, 9, 8, 8, 7, 9,
+ 	18,18,18,18,18,18,18,18,17,16,14,18,13,12,11,13,
+ 	12,12,13,16,11,10,10,16,12,12, 9, 7,15,12,11,11,
+ 	14,14,14,14,12,11,11,18,14,12,10,11,18,13,11,13,
+ 	18,18,18,17,17,16,15,17,18,15,16,18,16,12,11,11,
+ 	18,18,18,18,18,18,18,18,18,18,17,18,18,13,12,15,
+ };
+ 
+ static static_codebook _huff_book_line_256x4_class0 = {
+ 	1, 256,
+ 	_huff_lengthlist_line_256x4_class0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x7_0sub1[] = {
+ 	 0, 2, 3, 3, 3, 3, 4, 3, 4,
+ };
+ 
+ static static_codebook _huff_book_line_256x7_0sub1 = {
+ 	1, 9,
+ 	_huff_lengthlist_line_256x7_0sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x7_0sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 4, 3, 5, 3,
+ 	 6, 3, 6, 4, 6, 4, 7, 5, 7,
+ };
+ 
+ static static_codebook _huff_book_line_256x7_0sub2 = {
+ 	1, 25,
+ 	_huff_lengthlist_line_256x7_0sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x7_0sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 2, 5, 3, 5, 3,
+ 	 6, 3, 6, 4, 7, 6, 7, 8, 7, 9, 8, 9, 9, 9,10, 9,
+ 	11,13,11,13,10,10,13,13,13,13,13,13,12,12,12,12,
+ };
+ 
+ static static_codebook _huff_book_line_256x7_0sub3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_256x7_0sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x7_1sub1[] = {
+ 	 0, 3, 3, 3, 3, 2, 4, 3, 4,
+ };
+ 
+ static static_codebook _huff_book_line_256x7_1sub1 = {
+ 	1, 9,
+ 	_huff_lengthlist_line_256x7_1sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x7_1sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 4, 3, 4, 4,
+ 	 5, 4, 6, 5, 6, 7, 6, 8, 8,
+ };
+ 
+ static static_codebook _huff_book_line_256x7_1sub2 = {
+ 	1, 25,
+ 	_huff_lengthlist_line_256x7_1sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x7_1sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 4, 3, 6, 3, 7,
+ 	 3, 8, 5, 8, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7,
+ };
+ 
+ static static_codebook _huff_book_line_256x7_1sub3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_256x7_1sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x7_class0[] = {
+ 	 7, 5, 5, 9, 9, 6, 6, 9,12, 8, 7, 8,11, 8, 9,15,
+ 	 6, 3, 3, 7, 7, 4, 3, 6, 9, 6, 5, 6, 8, 6, 8,15,
+ 	 8, 5, 5, 9, 8, 5, 4, 6,10, 7, 5, 5,11, 8, 7,15,
+ 	14,15,13,13,13,13, 8,11,15,10, 7, 6,11, 9,10,15,
+ };
+ 
+ static static_codebook _huff_book_line_256x7_class0 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_256x7_class0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_256x7_class1[] = {
+ 	 5, 6, 8,15, 6, 9,10,15,10,11,12,15,15,15,15,15,
+ 	 4, 6, 7,15, 6, 7, 8,15, 9, 8, 9,15,15,15,15,15,
+ 	 6, 8, 9,15, 7, 7, 8,15,10, 9,10,15,15,15,15,15,
+ 	15,13,15,15,15,10,11,15,15,13,13,15,15,15,15,15,
+ 	 4, 6, 7,15, 6, 8, 9,15,10,10,12,15,15,15,15,15,
+ 	 2, 5, 6,15, 5, 6, 7,15, 8, 6, 7,15,15,15,15,15,
+ 	 5, 6, 8,15, 5, 6, 7,15, 9, 6, 7,15,15,15,15,15,
+ 	14,12,13,15,12,10,11,15,15,15,15,15,15,15,15,15,
+ 	 7, 8, 9,15, 9,10,10,15,15,14,14,15,15,15,15,15,
+ 	 5, 6, 7,15, 7, 8, 9,15,12, 9,10,15,15,15,15,15,
+ 	 7, 7, 9,15, 7, 7, 8,15,12, 8, 9,15,15,15,15,15,
+ 	13,13,14,15,12,11,12,15,15,15,15,15,15,15,15,15,
+ 	15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 	13,13,13,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 	15,12,13,15,15,12,13,15,15,14,15,15,15,15,15,15,
+ 	15,15,15,15,15,15,13,15,15,15,15,15,15,15,15,15,
+ };
+ 
+ static static_codebook _huff_book_line_256x7_class1 = {
+ 	1, 256,
+ 	_huff_lengthlist_line_256x7_class1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_0sub0[] = {
+ 	 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 	 5, 6, 5, 6, 6, 6, 6, 5, 6, 6, 7, 6, 7, 6, 7, 6,
+ 	 7, 6, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 9, 7, 9, 7,
+ 	 9, 7, 9, 8, 9, 8,10, 8,10, 8,10, 7,10, 6,10, 8,
+ 	10, 8,11, 7,10, 7,11, 8,11,11,12,12,11,11,12,11,
+ 	13,11,13,11,13,12,15,12,13,13,14,14,14,14,14,15,
+ 	15,15,16,14,17,19,19,18,18,18,18,18,18,18,18,18,
+ 	18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_0sub0 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_512x17_0sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_1sub0[] = {
+ 	 2, 4, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 5, 5, 6, 5,
+ 	 6, 5, 6, 6, 7, 6, 7, 6, 8, 7, 8, 7, 8, 7, 8, 7,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_1sub0 = {
+ 	1, 32,
+ 	_huff_lengthlist_line_512x17_1sub0,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_1sub1[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 4, 3, 5, 3, 5, 4, 5, 4, 5, 4, 5, 5, 5, 5, 6, 5,
+ 	 6, 5, 7, 5, 8, 6, 8, 6, 8, 6, 8, 6, 8, 7, 9, 7,
+ 	 9, 7,11, 9,11,11,12,11,14,12,14,16,14,16,13,16,
+ 	14,16,12,15,13,16,14,16,13,14,12,15,13,15,13,13,
+ 	13,15,12,14,14,15,13,15,12,15,15,15,15,15,15,15,
+ 	15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_1sub1 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_512x17_1sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_2sub1[] = {
+ 	 0, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 5, 4, 5, 3,
+ 	 5, 3,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_2sub1 = {
+ 	1, 18,
+ 	_huff_lengthlist_line_512x17_2sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_2sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 3, 4, 3, 4, 4, 5, 4, 5, 4, 6, 4, 6, 5,
+ 	 6, 5, 7, 5, 7, 6, 8, 6, 8, 6, 8, 7, 8, 7, 9, 7,
+ 	 9, 8,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_2sub2 = {
+ 	1, 50,
+ 	_huff_lengthlist_line_512x17_2sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_2sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 3, 3, 3, 3, 4, 3, 4, 4, 5, 5, 6, 6, 7, 7,
+ 	 7, 8, 8,11, 8, 9, 9, 9,10,11,11,11, 9,10,10,11,
+ 	11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_2sub3 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_512x17_2sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_3sub1[] = {
+ 	 0, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4, 5, 4, 5,
+ 	 5, 5,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_3sub1 = {
+ 	1, 18,
+ 	_huff_lengthlist_line_512x17_3sub1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_3sub2[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 2, 3, 3, 4, 3, 5, 4, 6, 4, 6, 5, 7, 6, 7,
+ 	 6, 8, 6, 8, 7, 9, 8,10, 8,12, 9,13,10,15,10,15,
+ 	11,14,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_3sub2 = {
+ 	1, 50,
+ 	_huff_lengthlist_line_512x17_3sub2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_3sub3[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 8, 4, 8, 4, 8, 4, 8, 5, 8, 5, 8, 6, 8,
+ 	 4, 8, 4, 8, 5, 8, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_3sub3 = {
+ 	1, 128,
+ 	_huff_lengthlist_line_512x17_3sub3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_class1[] = {
+ 	 1, 2, 3, 6, 5, 4, 7, 7,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_class1 = {
+ 	1, 8,
+ 	_huff_lengthlist_line_512x17_class1,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_class2[] = {
+ 	 3, 3, 3,14, 5, 4, 4,11, 8, 6, 6,10,17,12,11,17,
+ 	 6, 5, 5,15, 5, 3, 4,11, 8, 5, 5, 8,16, 9,10,14,
+ 	10, 8, 9,17, 8, 6, 6,13,10, 7, 7,10,16,11,13,14,
+ 	17,17,17,17,17,16,16,16,16,15,16,16,16,16,16,16,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_class2 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_512x17_class2,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist_line_512x17_class3[] = {
+ 	 2, 4, 6,17, 4, 5, 7,17, 8, 7,10,17,17,17,17,17,
+ 	 3, 4, 6,15, 3, 3, 6,15, 7, 6, 9,17,17,17,17,17,
+ 	 6, 8,10,17, 6, 6, 8,16, 9, 8,10,17,17,15,16,17,
+ 	17,17,17,17,12,15,15,16,12,15,15,16,16,16,16,16,
+ };
+ 
+ static static_codebook _huff_book_line_512x17_class3 = {
+ 	1, 64,
+ 	_huff_lengthlist_line_512x17_class3,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static static_codebook *_floor_128x4_books[]={
+   &_huff_book_line_128x4_class0,
+   &_huff_book_line_128x4_0sub0,
+   &_huff_book_line_128x4_0sub1,
+   &_huff_book_line_128x4_0sub2,
+   &_huff_book_line_128x4_0sub3,
+ };
+ static static_codebook *_floor_256x4_books[]={
+   &_huff_book_line_256x4_class0,
+   &_huff_book_line_256x4_0sub0,
+   &_huff_book_line_256x4_0sub1,
+   &_huff_book_line_256x4_0sub2,
+   &_huff_book_line_256x4_0sub3,
+ };
+ static static_codebook *_floor_128x7_books[]={
+   &_huff_book_line_128x7_class0,
+   &_huff_book_line_128x7_class1,
+   
+   &_huff_book_line_128x7_0sub1,
+   &_huff_book_line_128x7_0sub2,
+   &_huff_book_line_128x7_0sub3,
+   &_huff_book_line_128x7_1sub1,
+   &_huff_book_line_128x7_1sub2,
+   &_huff_book_line_128x7_1sub3, 
+ };
+ static static_codebook *_floor_256x7_books[]={
+   &_huff_book_line_256x7_class0,
+   &_huff_book_line_256x7_class1,
+   
+   &_huff_book_line_256x7_0sub1,
+   &_huff_book_line_256x7_0sub2,
+   &_huff_book_line_256x7_0sub3,
+   &_huff_book_line_256x7_1sub1,
+   &_huff_book_line_256x7_1sub2,
+   &_huff_book_line_256x7_1sub3, 
+ };
+ static static_codebook *_floor_128x11_books[]={
+   &_huff_book_line_128x11_class1,
+   &_huff_book_line_128x11_class2,
+   &_huff_book_line_128x11_class3,
+   
+   &_huff_book_line_128x11_0sub0,
+   &_huff_book_line_128x11_1sub0,
+   &_huff_book_line_128x11_1sub1,
+   &_huff_book_line_128x11_2sub1,
+   &_huff_book_line_128x11_2sub2,
+   &_huff_book_line_128x11_2sub3, 
+   &_huff_book_line_128x11_3sub1,
+   &_huff_book_line_128x11_3sub2,
+   &_huff_book_line_128x11_3sub3, 
+ };
+ static static_codebook *_floor_128x17_books[]={
+   &_huff_book_line_128x17_class1,
+   &_huff_book_line_128x17_class2,
+   &_huff_book_line_128x17_class3,
+   
+   &_huff_book_line_128x17_0sub0,
+   &_huff_book_line_128x17_1sub0,
+   &_huff_book_line_128x17_1sub1,
+   &_huff_book_line_128x17_2sub1,
+   &_huff_book_line_128x17_2sub2,
+   &_huff_book_line_128x17_2sub3, 
+   &_huff_book_line_128x17_3sub1,
+   &_huff_book_line_128x17_3sub2,
+   &_huff_book_line_128x17_3sub3, 
+ };
+ static static_codebook *_floor_512x17_books[]={
+   &_huff_book_line_512x17_class1,
+   &_huff_book_line_512x17_class2,
+   &_huff_book_line_512x17_class3,
+   
+   &_huff_book_line_512x17_0sub0,
+   &_huff_book_line_512x17_1sub0,
+   &_huff_book_line_512x17_1sub1,
+   &_huff_book_line_512x17_2sub1,
+   &_huff_book_line_512x17_2sub2,
+   &_huff_book_line_512x17_2sub3, 
+   &_huff_book_line_512x17_3sub1,
+   &_huff_book_line_512x17_3sub2,
+   &_huff_book_line_512x17_3sub3, 
+ };
+ static static_codebook *_floor_1024x27_books[]={
+   &_huff_book_line_1024x27_class1,
+   &_huff_book_line_1024x27_class2,
+   &_huff_book_line_1024x27_class3,
+   &_huff_book_line_1024x27_class4,
+   
+   &_huff_book_line_1024x27_0sub0,
+   &_huff_book_line_1024x27_1sub0,
+   &_huff_book_line_1024x27_1sub1,
+   &_huff_book_line_1024x27_2sub0,
+   &_huff_book_line_1024x27_2sub1,
+   &_huff_book_line_1024x27_3sub1,
+   &_huff_book_line_1024x27_3sub2,
+   &_huff_book_line_1024x27_3sub3,
+   &_huff_book_line_1024x27_4sub1,
+   &_huff_book_line_1024x27_4sub2,
+   &_huff_book_line_1024x27_4sub3,
+ };
+ 
+ static static_codebook **_floor_books[10]={
+   _floor_128x4_books,
+   _floor_256x4_books,
+   _floor_128x7_books,
+   _floor_256x7_books,
+   _floor_128x11_books,
+   _floor_128x17_books,
+   _floor_128x17_books,
+   _floor_1024x27_books,
+   _floor_1024x27_books,
+   _floor_512x17_books,
+ };
+ 
+ static vorbis_info_floor1 _floor[10]={
+   /* 128 x 4 */
+   {
+     1,{0},{4},{2},{0},
+     {{1,2,3,4}},
+     4,{0,128, 33,8,16,70},
+ 
+     60,30,500,   1.,18.,  -1
+   },
+   /* 256 x 4 */
+   {
+     1,{0},{4},{2},{0},
+     {{1,2,3,4}},
+     4,{0,256, 66,16,32,140},
+ 
+     60,30,500,   1.,18.,  -1
+   },
+   /* 128 x 7 */
+   {
+     2,{0,1},{3,4},{2,2},{0,1},
+     {{-1,2,3,4},{-1,5,6,7}},
+     4,{0,128, 14,4,58, 2,8,28,90},
+     
+     60,30,500,   1.,18.,  -1
+   },
+   /* 256 x 7 */
+   {
+     2,{0,1},{3,4},{2,2},{0,1},
+     {{-1,2,3,4},{-1,5,6,7}},
+     4,{0,256, 28,8,116, 4,16,56,180},
+     
+     60,30,500,   1.,18.,  -1
+   },
+ 
+   /* 128 x 11 */
+   {
+     4,{0,1,2,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
+     {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
+     
+     2,{0,128,  8,33,  4,16,70,  2,6,12,  23,46,90},
+     
+      60,30,500,   1,18.,  -1
+   },
+     
+   /* 128 x 17 */
+   {
+     6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
+     {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
+     2,{0,128,  12,46,  4,8,16,  23,33,70,  2,6,10,  14,19,28,  39,58,90},
+ 
+     60,30,500,    1,18.,  -1 
+   },
+   
+   /* 1024 x 17 */
+   {
+     6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
+     {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
+     2,{0,1024,  93,372,  33,65,130,  186,260,556,  
+        14,46,79,  111,158,220,  312,464,720},
+     
+     60,30,500,    1,18.,  -1 /* lowpass! */
+   },
+   /* 1024 x 27 */
+   {
+     8,{0,1,2,2,3,3,4,4},{3,4,3,4,3},{0,1,1,2,2},{-1,0,1,2,3},
+     {{4},{5,6},{7,8},{-1,9,10,11},{-1,12,13,14}},
+     2,{0,1024,   93,23,372, 6,46,186,750,  14,33,65, 130,260,556,
+        3,10,18,28,  39,55,79,111,  158,220,312,  464,650,850},
+     
+     60,30,500,    3,18.,  -1 /* lowpass */
+   },
+   /* 2048 x 27 */
+   {
+     8,{0,1,2,2,3,3,4,4},{3,4,3,4,3},{0,1,1,2,2},{-1,0,1,2,3},
+     {{4},{5,6},{7,8},{-1,9,10,11},{-1,12,13,14}},
+     2,{0,2048,   186,46,744, 12,92,372,1500,  28,66,130, 260,520,1112,
+        6,20,36,56,  78,110,158,222,  316,440,624,  928,1300,1700},
+     
+     60,30,500,    3,18.,  -1 /* lowpass */
+   },
+   /* 512 x 17 */
+   {
+     6,{0,1,1,2,3,3},{2,3,3,3},{0,1,2,2},{-1,0,1,2},
+     {{3},{4,5},{-1,6,7,8},{-1,9,10,11}},
+     2,{0,512,  46,186,  16,33,65,  93,130,278,  
+        7,23,39,  55,79,110,  156,232,360},
+     
+     60,30,500,    1,18.,  -1 /* lowpass! */
+   },
+ 
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: toplevel residue templates for 32/44.1/48kHz
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the Xiph.Org Foundation http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: static codebooks autogenerated by huff/huffbuld
+  last modified: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static long _vq_quantlist__16c0_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p1_0[] = {
+ 	 1, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0,
+ 	 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0,
+ 	 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0, 0,
+ 	 0, 0, 0, 9, 9,12, 0, 0, 0, 0, 0, 0,10,12,11, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0,
+ 	 0, 0, 0, 0, 9,12,10, 0, 0, 0, 0, 0, 0,10,11,12,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0,
+ 	 0, 0, 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,12,11, 0,
+ 	 0, 0, 0, 0, 0, 9,10,12, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7,10,10, 0, 0, 0, 0, 0, 0,10,11,12,
+ 	 0, 0, 0, 0, 0, 0, 9,12, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p1_0 = {
+ 	_vq_quantthresh__16c0_s_p1_0,
+ 	_vq_quantmap__16c0_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16c0_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__16c0_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__16c0_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p2_0[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p2_0 = {
+ 	_vq_quantthresh__16c0_s_p2_0,
+ 	_vq_quantmap__16c0_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16c0_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16c0_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16c0_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p3_0[] = {
+ 	 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 7, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 9, 9,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 6, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p3_0 = {
+ 	_vq_quantthresh__16c0_s_p3_0,
+ 	_vq_quantmap__16c0_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16c0_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16c0_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16c0_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p4_0[] = {
+ 	 1, 3, 2, 7, 8, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p4_0 = {
+ 	_vq_quantthresh__16c0_s_p4_0,
+ 	_vq_quantmap__16c0_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16c0_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16c0_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16c0_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p5_0[] = {
+ 	 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
+ 	 8, 8, 0, 0, 0, 7, 7, 7, 7, 8, 8, 0, 0, 0, 7, 7,
+ 	 8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0, 0, 0,
+ 	 8, 9, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
+ 	 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p5_0 = {
+ 	_vq_quantthresh__16c0_s_p5_0,
+ 	_vq_quantmap__16c0_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16c0_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16c0_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16c0_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p6_0[] = {
+ 	 1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+ 	11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,11,
+ 	11,11, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
+ 	11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
+ 	10,11,11,12,12,12,13, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,10,10,10,
+ 	10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
+ 	10,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0, 0, 9,
+ 	 9,10,10,11,11,12,12,13,13,13,14, 0, 0, 0, 0, 0,
+ 	10,10,10,11,11,11,12,12,13,13,13,14, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,11,11,12,12,13,13,14,14, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,12,12,13,13,13,13,14,14, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,12,12,12,13,13,14,15,14, 0,
+ 	 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,14,14,15,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,14,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p6_0 = {
+ 	_vq_quantthresh__16c0_s_p6_0,
+ 	_vq_quantmap__16c0_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _16c0_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__16c0_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__16c0_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,11,10,10,11,
+ 	11,10, 4, 7, 7,10,10,10,11,10,10, 6,10,10,11,11,
+ 	11,11,11,10, 6, 9, 9,11,12,12,11, 9, 9, 6, 9,10,
+ 	11,12,12,11, 9,10, 7,11,11,11,11,11,12,13,12, 6,
+ 	 9,10,11,10,10,12,13,13, 6,10, 9,11,10,10,11,12,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p7_0 = {
+ 	_vq_quantthresh__16c0_s_p7_0,
+ 	_vq_quantmap__16c0_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16c0_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16c0_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__16c0_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p7_1[] = {
+ 	 1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7,
+ 	 8, 8, 8, 9, 9, 9,10,10,10, 6, 7, 8, 8, 8, 8, 9,
+ 	 8,10,10,10, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10, 7,
+ 	 7, 8, 8, 9, 9, 8, 9,10,10,10, 8, 8, 9, 9, 9, 9,
+ 	 9, 9,11,11,11, 8, 8, 9, 9, 9, 9, 9,10,10,11,11,
+ 	 9, 9, 9, 9, 9, 9, 9,10,11,11,11,10,11, 9, 9, 9,
+ 	 9,10, 9,11,11,11,10,11,10,10, 9, 9,10,10,11,11,
+ 	11,11,11, 9, 9, 9, 9,10,10,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p7_1 = {
+ 	_vq_quantthresh__16c0_s_p7_1,
+ 	_vq_quantmap__16c0_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16c0_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__16c0_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__16c0_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p8_0[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 7, 6, 8, 8,10,10, 6, 5, 6,
+ 	 8, 8, 8, 8, 8, 8, 8, 9,10,10, 7, 6, 6, 8, 8, 8,
+ 	 8, 8, 8, 8, 8,10,10, 0, 8, 8, 8, 8, 9, 8, 9, 9,
+ 	 9,10,10,10, 0, 9, 8, 8, 8, 9, 9, 8, 8, 9, 9,10,
+ 	10, 0,12,11, 8, 8, 9, 9, 9, 9,10,10,11,10, 0,12,
+ 	13, 8, 8, 9,10, 9, 9,11,11,11,12, 0, 0, 0, 8, 8,
+ 	 8, 8,10, 9,12,13,12,14, 0, 0, 0, 8, 8, 8, 9,10,
+ 	10,12,12,13,14, 0, 0, 0,13,13, 9, 9,11,11, 0, 0,
+ 	14, 0, 0, 0, 0,14,14,10,10,12,11,12,14,14,14, 0,
+ 	 0, 0, 0, 0,11,11,13,13,14,13,14,14, 0, 0, 0, 0,
+ 	 0,12,13,13,12,13,14,14,14,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p8_0 = {
+ 	_vq_quantthresh__16c0_s_p8_0,
+ 	_vq_quantmap__16c0_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16c0_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16c0_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__16c0_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p8_1[] = {
+ 	 1, 4, 3, 5, 5, 7, 7, 7, 6, 6, 7, 7, 7, 5, 5, 7,
+ 	 7, 7, 6, 6, 7, 7, 7, 6, 6,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p8_1 = {
+ 	_vq_quantthresh__16c0_s_p8_1,
+ 	_vq_quantmap__16c0_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16c0_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__16c0_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16c0_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p9_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p9_0[] = {
+ 	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p9_0[] = {
+ 	-157.5, 157.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p9_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p9_0 = {
+ 	_vq_quantthresh__16c0_s_p9_0,
+ 	_vq_quantmap__16c0_s_p9_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16c0_s_p9_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16c0_s_p9_0,
+ 	1, -518803456, 1628680192, 2, 0,
+ 	_vq_quantlist__16c0_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p9_1[] = {
+ 	 1, 5, 5, 5, 5, 9,11,11,10,10,10,10,10,10,10, 7,
+ 	 6, 6, 6, 6,10,10,10,10,10,10,10,10,10,10, 7, 6,
+ 	 6, 6, 6,10, 9,10,10,10,10,10,10,10,10,10, 7, 7,
+ 	 8, 9,10,10,10,10,10,10,10,10,10,10,10, 8, 7,10,
+ 	10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p9_1[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p9_1 = {
+ 	_vq_quantthresh__16c0_s_p9_1,
+ 	_vq_quantmap__16c0_s_p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _16c0_s_p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__16c0_s_p9_1,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__16c0_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c0_s_p9_2[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__16c0_s_p9_2[] = {
+ 	 1, 5, 5, 7, 8, 8, 7, 9, 9, 9,12,12,11,12,12,10,
+ 	10,11,12,12,12,11,12,12, 8, 9, 8, 7, 9,10,10,11,
+ 	11,10,11,12,10,12,10,12,12,12,11,12,11, 9, 8, 8,
+ 	 9,10, 9, 8, 9,10,12,12,11,11,12,11,10,11,12,11,
+ 	12,12, 8, 9, 9, 9,10,11,12,11,12,11,11,11,11,12,
+ 	12,11,11,12,12,11,11, 9, 9, 8, 9, 9,11, 9, 9,10,
+ 	 9,11,11,11,11,12,11,11,10,12,12,12, 9,12,11,10,
+ 	11,11,11,11,12,12,12,11,11,11,12,10,12,12,12,10,
+ 	10, 9,10, 9,10,10, 9, 9, 9,10,10,12,10,11,11, 9,
+ 	11,11,10,11,11,11,10,10,10, 9, 9,10,10, 9, 9,10,
+ 	11,11,10,11,10,11,10,11,11,10,11,11,11,10, 9,10,
+ 	10, 9,10, 9, 9,11, 9, 9,11,10,10,11,11,10,10,11,
+ 	10,11, 8, 9,11,11,10, 9,10,11,11,10,11,11,10,10,
+ 	10,11,10, 9,10,10,11, 9,10,10, 9,11,10,10,10,10,
+ 	11,10,11,11, 9,11,10,11,10,10,11,11,10,10,10, 9,
+ 	10,10,11,11,11, 9,10,10,10,10,10,11,10,10,10, 9,
+ 	10,10,11,10,10,10,10,10, 9,10,11,10,10,10,10,11,
+ 	11,11,10,10,10,10,10,11,10,11,10,11,10,10,10, 9,
+ 	11,11,10,10,10,11,11,10,10,10,10,10,10,10,10,11,
+ 	11, 9,10,10,10,11,10,11,10,10,10,11, 9,10,11,10,
+ 	11,10,10, 9,10,10,10,11,10,11,10,10,10,10,10,11,
+ 	11,10,11,11,10,10,11,11,10, 9, 9,10,10,10,10,10,
+ 	 9,11, 9,10,10,10,11,11,10,10,10,10,11,11,11,10,
+ 	 9, 9,10,10,11,10,10,10,10,10,11,11,11,10,10,10,
+ 	11,11,11, 9,10,10,10,10, 9,10, 9,10,11,10,11,10,
+ 	10,11,11,10,11,11,11,11,11,10,11,10,10,10, 9,11,
+ 	11,10,11,11,11,11,11,11,11,11,11,10,11,10,10,10,
+ 	10,11,10,10,11, 9,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__16c0_s_p9_2[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__16c0_s_p9_2[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c0_s_p9_2 = {
+ 	_vq_quantthresh__16c0_s_p9_2,
+ 	_vq_quantmap__16c0_s_p9_2,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _16c0_s_p9_2 = {
+ 	2, 441,
+ 	_vq_lengthlist__16c0_s_p9_2,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__16c0_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__16c0_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16c0_s_single[] = {
+ 	 3, 4,19, 7, 9, 7, 8,11, 9,12, 4, 1,19, 6, 7, 7,
+ 	 8,10,11,13,18,18,18,18,18,18,18,18,18,18, 8, 6,
+ 	18, 8, 9, 9,11,12,14,18, 9, 6,18, 9, 7, 8, 9,11,
+ 	12,18, 7, 6,18, 8, 7, 7, 7, 9,11,17, 8, 8,18, 9,
+ 	 7, 6, 6, 8,11,17,10,10,18,12, 9, 8, 7, 9,12,18,
+ 	13,15,18,15,13,11,10,11,15,18,14,18,18,18,18,18,
+ 	16,16,18,18,
+ };
+ 
+ static static_codebook _huff_book__16c0_s_single = {
+ 	2, 100,
+ 	_huff_lengthlist__16c0_s_single,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16c1_s_long[] = {
+ 	 2, 5,20, 7,10, 7, 8,10,11,11, 4, 2,20, 5, 8, 6,
+ 	 7, 9,10,10,20,20,20,20,19,19,19,19,19,19, 7, 5,
+ 	19, 6,10, 7, 9,11,13,17,11, 8,19,10, 7, 7, 8,10,
+ 	11,15, 7, 5,19, 7, 7, 5, 6, 9,11,16, 7, 6,19, 8,
+ 	 7, 6, 6, 7, 9,13, 9, 9,19,11, 9, 8, 6, 7, 8,13,
+ 	12,14,19,16,13,10, 9, 8, 9,13,14,17,19,18,18,17,
+ 	12,11,11,13,
+ };
+ 
+ static static_codebook _huff_book__16c1_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__16c1_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p1_0[] = {
+ 	 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0,
+ 	 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8,11, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+ 	 0, 0, 0, 0, 0, 8, 9,11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
+ 	 0, 0, 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p1_0 = {
+ 	_vq_quantthresh__16c1_s_p1_0,
+ 	_vq_quantmap__16c1_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16c1_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__16c1_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__16c1_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p2_0[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p2_0 = {
+ 	_vq_quantthresh__16c1_s_p2_0,
+ 	_vq_quantmap__16c1_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16c1_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16c1_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16c1_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p3_0[] = {
+ 	 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 9, 9,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p3_0 = {
+ 	_vq_quantthresh__16c1_s_p3_0,
+ 	_vq_quantmap__16c1_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16c1_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16c1_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16c1_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p4_0[] = {
+ 	 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 9, 0, 0, 0, 0, 0,
+ 	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p4_0 = {
+ 	_vq_quantthresh__16c1_s_p4_0,
+ 	_vq_quantmap__16c1_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16c1_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16c1_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16c1_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p5_0[] = {
+ 	 1, 3, 3, 5, 5, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
+ 	 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 8, 8,
+ 	 8, 8, 9, 9, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
+ 	 9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0,
+ 	 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p5_0 = {
+ 	_vq_quantthresh__16c1_s_p5_0,
+ 	_vq_quantmap__16c1_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16c1_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16c1_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16c1_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p6_0[] = {
+ 	 1, 3, 3, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,12,
+ 	12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,12,12, 0, 0, 0, 8, 8, 8, 9,10, 9,10,10,10,10,
+ 	11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,11,
+ 	11,11,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
+ 	11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
+ 	10,11,11,12,12,13,13, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
+ 	10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, 9,
+ 	 9,10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0,
+ 	10,10,11,10,11,11,12,12,13,13,13,13, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,11,11,12,12,13,13,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,14, 0,
+ 	 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p6_0 = {
+ 	_vq_quantthresh__16c1_s_p6_0,
+ 	_vq_quantmap__16c1_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _16c1_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__16c1_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__16c1_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9,10,10,
+ 	10, 9, 4, 7, 7,10,10,10,11,10,10, 6,10,10,11,11,
+ 	11,11,10,10, 6,10, 9,11,11,11,11,10,10, 6,10,10,
+ 	11,11,11,11,10,10, 7,11,11,11,11,11,12,12,11, 6,
+ 	10,10,11,10,10,11,11,11, 6,10,10,10,11,10,11,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p7_0 = {
+ 	_vq_quantthresh__16c1_s_p7_0,
+ 	_vq_quantmap__16c1_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16c1_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16c1_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__16c1_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p7_1[] = {
+ 	 2, 3, 3, 5, 6, 7, 7, 7, 7, 8, 8,10,10,10, 6, 6,
+ 	 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 9, 9,10,10,10,10,10, 8, 8, 8,
+ 	 8, 9, 9,10,10,10,10,10, 9, 9, 8, 8, 9, 9,10,10,
+ 	10,10,10, 8, 8, 8, 8, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p7_1 = {
+ 	_vq_quantthresh__16c1_s_p7_1,
+ 	_vq_quantmap__16c1_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16c1_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__16c1_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__16c1_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 6, 5, 5,
+ 	 7, 8, 8, 9, 8, 8, 9, 9,10,11, 6, 5, 5, 8, 8, 9,
+ 	 9, 8, 8, 9,10,10,11, 0, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	10,10,11,11, 0, 9, 9, 9, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,13,13, 9, 9,10,10,10,10,11,11,12,12, 0,14,
+ 	13, 9, 9,10,10,10,10,11,11,12,12, 0, 0, 0,10,10,
+ 	 9, 9,11,11,12,12,13,12, 0, 0, 0,10,10, 9, 9,10,
+ 	10,12,12,13,13, 0, 0, 0,13,14,11,10,11,11,12,12,
+ 	13,14, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
+ 	 0, 0, 0, 0,12,12,12,12,13,13,14,15, 0, 0, 0, 0,
+ 	 0,12,12,12,12,13,13,14,15,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p8_0 = {
+ 	_vq_quantthresh__16c1_s_p8_0,
+ 	_vq_quantmap__16c1_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16c1_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16c1_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__16c1_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p8_1[] = {
+ 	 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
+ 	 6, 6, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p8_1 = {
+ 	_vq_quantthresh__16c1_s_p8_1,
+ 	_vq_quantmap__16c1_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16c1_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__16c1_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16c1_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p9_0[] = {
+ 	 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p9_0[] = {
+ 	-1732.5, -1417.5, -1102.5, -787.5, -472.5, -157.5, 157.5, 472.5, 
+ 	787.5, 1102.5, 1417.5, 1732.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p9_0 = {
+ 	_vq_quantthresh__16c1_s_p9_0,
+ 	_vq_quantmap__16c1_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16c1_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16c1_s_p9_0,
+ 	1, -513964032, 1628680192, 4, 0,
+ 	_vq_quantlist__16c1_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p9_1[] = {
+ 	 1, 4, 4, 4, 4, 8, 8,12,13,14,14,14,14,14,14, 6,
+ 	 6, 6, 6, 6,10, 9,14,14,14,14,14,14,14,14, 7, 6,
+ 	 5, 6, 6,10, 9,12,13,13,13,13,13,13,13,13, 7, 7,
+ 	 9, 9,11,11,12,13,13,13,13,13,13,13,13, 7, 7, 8,
+ 	 8,11,12,13,13,13,13,13,13,13,13,13,12,12,10,10,
+ 	13,12,13,13,13,13,13,13,13,13,13,12,12,10,10,13,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,13,12,13,12,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 	13,13,13,13,13,13,13,13,13,12,13,13,13,13,13,13,
+ 	13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p9_1[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p9_1 = {
+ 	_vq_quantthresh__16c1_s_p9_1,
+ 	_vq_quantmap__16c1_s_p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _16c1_s_p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__16c1_s_p9_1,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__16c1_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c1_s_p9_2[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__16c1_s_p9_2[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,10, 9,10,10,11,12,12, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,10,10,10,11,11,10,12,11,11,13,11, 7, 7, 8,
+ 	 8, 8, 8, 9, 9, 9,10,10,10,10, 9,10,10,11,11,12,
+ 	11,11, 8, 8, 8, 8, 9, 9,10,10,10,10,11,11,11,11,
+ 	11,11,11,12,11,12,12, 8, 8, 9, 9, 9, 9, 9,10,10,
+ 	10,10,10,10,11,11,11,11,11,11,12,11, 9, 9, 9, 9,
+ 	10,10,10,10,11,10,11,11,11,11,11,11,12,12,12,12,
+ 	11, 9, 9, 9, 9,10,10,10,10,11,11,11,11,11,11,11,
+ 	11,11,12,12,12,13, 9,10,10, 9,11,10,10,10,10,11,
+ 	11,11,11,11,10,11,12,11,12,12,11,12,11,10, 9,10,
+ 	10,11,10,11,11,11,11,11,11,11,11,11,12,12,11,12,
+ 	12,12,10,10,10,11,10,11,11,11,11,11,11,11,11,11,
+ 	11,11,12,13,12,12,11, 9,10,10,11,11,10,11,11,11,
+ 	12,11,11,11,11,11,12,12,13,13,12,13,10,10,12,10,
+ 	11,11,11,11,11,11,11,11,11,12,12,11,13,12,12,12,
+ 	12,13,12,11,11,11,11,11,11,12,11,12,11,11,11,11,
+ 	12,12,13,12,11,12,12,11,11,11,11,11,12,11,11,11,
+ 	11,12,11,11,12,11,12,13,13,12,12,12,12,11,11,11,
+ 	11,11,12,11,11,12,11,12,11,11,11,11,13,12,12,12,
+ 	12,13,11,11,11,12,12,11,11,11,12,11,12,12,12,11,
+ 	12,13,12,11,11,12,12,11,12,11,11,11,12,12,11,12,
+ 	11,11,11,12,12,12,12,13,12,13,12,12,12,12,11,11,
+ 	12,11,11,11,11,11,11,12,12,12,13,12,11,13,13,12,
+ 	12,11,12,10,11,11,11,11,12,11,12,12,11,12,12,13,
+ 	12,12,13,12,12,12,12,12,11,12,12,12,11,12,11,11,
+ 	11,12,13,12,13,13,13,13,13,12,13,13,12,12,13,11,
+ 	11,11,11,11,12,11,11,12,11,
+ };
+ 
+ static float _vq_quantthresh__16c1_s_p9_2[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__16c1_s_p9_2[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c1_s_p9_2 = {
+ 	_vq_quantthresh__16c1_s_p9_2,
+ 	_vq_quantmap__16c1_s_p9_2,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _16c1_s_p9_2 = {
+ 	2, 441,
+ 	_vq_lengthlist__16c1_s_p9_2,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__16c1_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__16c1_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16c1_s_short[] = {
+ 	 5, 6,17, 8,12, 9,10,10,12,13, 5, 2,17, 4, 9, 5,
+ 	 7, 8,11,13,16,16,16,16,16,16,16,16,16,16, 6, 4,
+ 	16, 5,10, 5, 7,10,14,16,13, 9,16,11, 8, 7, 8, 9,
+ 	13,16, 7, 4,16, 5, 7, 4, 6, 8,11,13, 8, 6,16, 7,
+ 	 8, 5, 5, 7, 9,13, 9, 8,16, 9, 8, 6, 6, 7, 9,13,
+ 	11,11,16,10,10, 7, 7, 7, 9,13,13,13,16,13,13, 9,
+ 	 9, 9,10,13,
+ };
+ 
+ static static_codebook _huff_book__16c1_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__16c1_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16c2_s_long[] = {
+ 	 4, 7, 9, 9, 9, 8, 9,10,15,19, 5, 4, 5, 6, 7, 7,
+ 	 8, 9,14,16, 6, 5, 4, 5, 6, 7, 8,10,12,19, 7, 6,
+ 	 5, 4, 5, 6, 7, 9,11,18, 8, 7, 6, 5, 5, 5, 7, 9,
+ 	10,17, 8, 7, 7, 5, 5, 5, 6, 7,12,18, 8, 8, 8, 7,
+ 	 7, 5, 5, 7,12,18, 8, 9,10, 9, 9, 7, 6, 7,12,17,
+ 	14,18,16,16,15,12,11,10,12,18,15,17,18,18,18,15,
+ 	14,14,16,18,
+ };
+ 
+ static static_codebook _huff_book__16c2_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__16c2_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p1_0[] = {
+ 	 1, 3, 3, 0, 0, 0, 0, 0, 0, 4, 5, 5, 0, 0, 0, 0,
+ 	 0, 0, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p1_0 = {
+ 	_vq_quantthresh__16c2_s_p1_0,
+ 	_vq_quantmap__16c2_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16c2_s_p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16c2_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__16c2_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p2_0[] = {
+ 	 2, 4, 3, 7, 7, 0, 0, 0, 7, 8, 0, 0, 0, 8, 8, 0,
+ 	 0, 0, 8, 8, 0, 0, 0, 8, 8, 4, 5, 4, 8, 8, 0, 0,
+ 	 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0,
+ 	 9, 9, 4, 4, 5, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8,
+ 	 8, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 7, 8, 8,10,10,
+ 	 0, 0, 0,12,11, 0, 0, 0,11,11, 0, 0, 0,14,13, 0,
+ 	 0, 0,14,13, 7, 8, 8, 9,10, 0, 0, 0,11,12, 0, 0,
+ 	 0,11,11, 0, 0, 0,14,14, 0, 0, 0,13,14, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 8,11,11, 0, 0, 0,
+ 	11,11, 0, 0, 0,12,11, 0, 0, 0,12,12, 0, 0, 0,13,
+ 	13, 8, 8, 8,11,11, 0, 0, 0,11,11, 0, 0, 0,11,12,
+ 	 0, 0, 0,12,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 8, 8, 8,12,11, 0, 0, 0,12,11, 0,
+ 	 0, 0,11,11, 0, 0, 0,13,13, 0, 0, 0,13,12, 8, 8,
+ 	 8,11,12, 0, 0, 0,11,12, 0, 0, 0,11,11, 0, 0, 0,
+ 	13,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 8, 9, 9,14,13, 0, 0, 0,13,12, 0, 0, 0,13,
+ 	13, 0, 0, 0,13,12, 0, 0, 0,13,13, 8, 9, 9,13,14,
+ 	 0, 0, 0,12,13, 0, 0, 0,13,13, 0, 0, 0,12,13, 0,
+ 	 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
+ 	 9, 9,14,13, 0, 0, 0,13,13, 0, 0, 0,13,12, 0, 0,
+ 	 0,13,13, 0, 0, 0,13,12, 8, 9, 9,14,14, 0, 0, 0,
+ 	13,13, 0, 0, 0,12,13, 0, 0, 0,13,13, 0, 0, 0,12,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p2_0 = {
+ 	_vq_quantthresh__16c2_s_p2_0,
+ 	_vq_quantmap__16c2_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16c2_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16c2_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16c2_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p3_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p3_0[] = {
+ 	 1, 3, 3, 6, 6, 7, 7, 8, 8, 0, 0, 0, 6, 6, 7, 7,
+ 	 9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0, 7, 7,
+ 	 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
+ 	 7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 9, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p3_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p3_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p3_0 = {
+ 	_vq_quantthresh__16c2_s_p3_0,
+ 	_vq_quantmap__16c2_s_p3_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16c2_s_p3_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16c2_s_p3_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16c2_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p4_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p4_0[] = {
+ 	 2, 3, 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9,10,
+ 	10, 0, 0, 0, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,
+ 	11,11, 0, 0, 0, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,
+ 	10,10,11, 0, 0, 0, 6, 6, 8, 8, 8, 8, 9, 9,10,10,
+ 	10,11,11,11, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9,
+ 	 9,10,10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
+ 	10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, 8, 9,
+ 	 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p4_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p4_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p4_0 = {
+ 	_vq_quantthresh__16c2_s_p4_0,
+ 	_vq_quantmap__16c2_s_p4_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _16c2_s_p4_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__16c2_s_p4_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__16c2_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p5_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p5_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6,10,10,10,10,
+ 	10,10, 4, 7, 6,10,10,10,10,10,10, 5, 9, 9, 9,12,
+ 	11,10,11,12, 7,10,10,12,12,12,12,12,12, 7,10,10,
+ 	11,12,12,12,12,13, 6,10,10,10,12,12,10,12,12, 7,
+ 	10,10,11,13,12,12,12,12, 7,10,10,11,12,12,12,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p5_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p5_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p5_0 = {
+ 	_vq_quantthresh__16c2_s_p5_0,
+ 	_vq_quantmap__16c2_s_p5_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16c2_s_p5_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16c2_s_p5_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__16c2_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p5_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p5_1[] = {
+ 	 2, 3, 3, 6, 6, 7, 7, 7, 7, 8, 8,11,11,11, 6, 6,
+ 	 7, 7, 8, 8, 8, 8,11,11,11, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,11,11,11, 6, 6, 8, 8, 8, 8, 9, 9,11,11,11, 6,
+ 	 6, 8, 8, 8, 8, 9, 9,11,11,11, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,11,11,11, 7, 7, 8, 8, 8, 8, 8, 9,11,11,11,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,11,11,11,11,11, 8, 8, 8,
+ 	 8, 8, 8,11,11,11,11,11, 8, 8, 8, 8, 8, 8,11,11,
+ 	11,11,11, 7, 7, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p5_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p5_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p5_1 = {
+ 	_vq_quantthresh__16c2_s_p5_1,
+ 	_vq_quantmap__16c2_s_p5_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16c2_s_p5_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__16c2_s_p5_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__16c2_s_p5_1,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p5_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p6_0[] = {
+ 	 1, 4, 4, 7, 6, 8, 8, 9, 9,10,10,11,11, 5, 5, 5,
+ 	 7, 7, 9, 9, 9, 9,11,11,12,12, 6, 5, 5, 7, 7, 9,
+ 	 9,10,10,11,11,12,12, 0, 6, 6, 7, 7, 9, 9,10,10,
+ 	11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,11,12,12,
+ 	12, 0,11,11, 8, 8,10,10,11,11,12,12,13,13, 0,11,
+ 	12, 8, 8,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p6_0 = {
+ 	_vq_quantthresh__16c2_s_p6_0,
+ 	_vq_quantmap__16c2_s_p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16c2_s_p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16c2_s_p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__16c2_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p6_1[] = {
+ 	 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
+ 	 6, 6, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p6_1 = {
+ 	_vq_quantthresh__16c2_s_p6_1,
+ 	_vq_quantmap__16c2_s_p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16c2_s_p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__16c2_s_p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16c2_s_p6_1,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p7_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 5, 5,
+ 	 8, 8, 9, 9,10,10,11,11,12,12, 6, 5, 5, 8, 8, 9,
+ 	 9,10,10,11,11,12,13,18, 6, 6, 7, 7, 9, 9,10,10,
+ 	12,12,13,13,18, 6, 6, 7, 7, 9, 9,10,10,12,12,13,
+ 	13,18,11,10, 8, 8,10,10,11,11,12,12,13,13,18,11,
+ 	11, 8, 8,10,10,11,11,12,13,13,13,18,18,18,10,11,
+ 	11,11,12,12,13,13,14,14,18,18,18,11,11,11,11,12,
+ 	12,13,13,14,14,18,18,18,14,14,12,12,12,12,14,14,
+ 	15,14,18,18,18,15,15,11,12,12,12,13,13,15,15,18,
+ 	18,18,18,18,13,13,13,13,13,14,17,16,18,18,18,18,
+ 	18,13,14,13,13,14,13,15,14,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p7_0[] = {
+ 	-60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 
+ 	27.5, 38.5, 49.5, 60.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p7_0 = {
+ 	_vq_quantthresh__16c2_s_p7_0,
+ 	_vq_quantmap__16c2_s_p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16c2_s_p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16c2_s_p7_0,
+ 	1, -523206656, 1618345984, 4, 0,
+ 	_vq_quantlist__16c2_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7, 9, 9, 9, 6, 6,
+ 	 7, 7, 8, 8, 8, 8, 9, 9, 9, 6, 6, 7, 7, 8, 8, 8,
+ 	 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 7,
+ 	 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8,
+ 	 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9,
+ 	 7, 7, 8, 8, 7, 7, 8, 8, 9, 9, 9, 9, 9, 7, 7, 7,
+ 	 7, 8, 8, 9, 9, 9, 9, 9, 8, 8, 7, 7, 8, 8, 9, 9,
+ 	 9, 9, 9, 7, 7, 7, 7, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p7_1 = {
+ 	_vq_quantthresh__16c2_s_p7_1,
+ 	_vq_quantmap__16c2_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16c2_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__16c2_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__16c2_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p8_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p8_0[] = {
+ 	 1, 4, 4, 7, 6, 7, 7, 6, 6, 8, 8, 9, 9,10,10, 6,
+ 	 6, 6, 8, 8, 9, 8, 8, 8, 9, 9,11,10,11,11, 7, 6,
+ 	 6, 8, 8, 9, 8, 7, 7, 9, 9,10,10,12,11,14, 8, 8,
+ 	 8, 9, 9, 9, 9, 9,10, 9,10,10,11,13,14, 8, 8, 8,
+ 	 8, 9, 9, 8, 8, 9, 9,10,10,11,12,14,13,11, 9, 9,
+ 	 9, 9, 9, 9, 9,10,11,10,13,12,14,11,13, 8, 9, 9,
+ 	 9, 9, 9,10,10,11,10,13,12,14,14,14, 8, 9, 9, 9,
+ 	11,11,11,11,11,12,13,13,14,14,14, 9, 8, 9, 9,10,
+ 	10,12,10,11,12,12,14,14,14,14,11,12,10,10,12,12,
+ 	12,12,13,14,12,12,14,14,14,12,12, 9,10,11,11,12,
+ 	14,12,14,14,14,14,14,14,14,14,11,11,12,11,12,14,
+ 	14,14,14,14,14,14,14,14,14,12,11,11,11,11,14,14,
+ 	14,14,14,14,14,14,14,14,14,14,13,12,14,14,14,14,
+ 	14,14,14,14,14,14,14,14,14,12,12,12,13,14,14,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p8_0[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p8_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p8_0 = {
+ 	_vq_quantthresh__16c2_s_p8_0,
+ 	_vq_quantmap__16c2_s_p8_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _16c2_s_p8_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__16c2_s_p8_0,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__16c2_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p8_1[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p8_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8,11,12,11, 7, 7, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9, 9,11,11,10, 7, 7, 8,
+ 	 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
+ 	11,11, 8, 7, 8, 8, 9, 9, 9, 9, 9, 9,10,10, 9,10,
+ 	10, 9,10,10,11,11,12, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9,10, 9,10,10,10,10,11,11,11, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,11,11,
+ 	11, 8, 8, 9, 8, 9, 9, 9, 9,10, 9, 9, 9,10,10,10,
+ 	10, 9,10,11,11,11, 9, 9, 9, 9,10, 9, 9, 9,10,10,
+ 	 9,10, 9,10,10,10,10,10,11,12,11,11,11, 9, 9, 9,
+ 	 9, 9,10,10, 9,10,10,10,10,10,10,10,10,12,11,13,
+ 	13,11, 9, 9, 9, 9,10,10, 9,10,10,10,10,11,10,10,
+ 	10,10,11,12,11,12,11, 9, 9, 9,10,10, 9,10,10,10,
+ 	10,10,10,10,10,10,10,11,11,11,12,11, 9,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,11,12,12,12,
+ 	11,11,11,10, 9,10,10,10,10,10,10,10,10,11,10,10,
+ 	10,11,11,11,11,11,11,11,10,10,10,11,10,10,10,10,
+ 	10,10,10,10,10,10,11,11,11,11,12,12,11,10,10,10,
+ 	10,10,10,10,10,11,10,10,10,11,10,12,11,11,12,11,
+ 	11,11,10,10,10,10,10,11,10,10,10,10,10,11,10,10,
+ 	11,11,11,12,11,12,11,11,12,10,10,10,10,10,10,10,
+ 	11,10,10,11,10,12,11,11,11,12,11,11,11,11,10,10,
+ 	10,10,10,10,10,11,11,11,10,11,12,11,11,11,12,11,
+ 	12,11,12,10,11,10,10,10,10,11,10,10,10,10,10,10,
+ 	12,11,11,11,11,11,12,12,10,10,10,10,10,11,10,10,
+ 	11,10,11,11,11,11,11,11,11,11,11,11,11,11,12,11,
+ 	10,11,10,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p8_1[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p8_1[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p8_1 = {
+ 	_vq_quantthresh__16c2_s_p8_1,
+ 	_vq_quantmap__16c2_s_p8_1,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _16c2_s_p8_1 = {
+ 	2, 441,
+ 	_vq_lengthlist__16c2_s_p8_1,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__16c2_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p9_0[] = {
+ 	 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p9_0[] = {
+ 	-5120.5, -4189.5, -3258.5, -2327.5, -1396.5, -465.5, 465.5, 1396.5, 
+ 	2327.5, 3258.5, 4189.5, 5120.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p9_0 = {
+ 	_vq_quantthresh__16c2_s_p9_0,
+ 	_vq_quantmap__16c2_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16c2_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16c2_s_p9_0,
+ 	1, -510275072, 1631393792, 4, 0,
+ 	_vq_quantlist__16c2_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p9_1[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p9_1[] = {
+ 	 1, 5, 5, 9, 8, 7, 7, 7, 6,10,11,11,11,11,11,11,
+ 	11, 8, 7, 6, 8, 8,10, 9,10,10,10, 9,11,10,10,10,
+ 	10,10, 8, 6, 6, 8, 8, 9, 8, 9, 8, 9,10,10,10,10,
+ 	10,10,10,10, 8,10, 9, 9, 9, 9,10,10,10,10,10,10,
+ 	10,10,10,10,10, 8, 9, 9, 9,10,10, 9,10,10,10,10,
+ 	10,10,10,10,10,10,10,10, 9, 8, 9, 9,10,10,10,10,
+ 	10,10,10,10,10,10,10,10, 9, 8, 8, 9, 9,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10, 9,10, 9, 9,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10, 9, 8, 9, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	 8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10, 9,10, 9,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10, 9,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p9_1[] = {
+ 	-367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, -24.5, 
+ 	24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, 367.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p9_1[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p9_1 = {
+ 	_vq_quantthresh__16c2_s_p9_1,
+ 	_vq_quantmap__16c2_s_p9_1,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _16c2_s_p9_1 = {
+ 	2, 289,
+ 	_vq_lengthlist__16c2_s_p9_1,
+ 	1, -518488064, 1622704128, 5, 0,
+ 	_vq_quantlist__16c2_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16c2_s_p9_2[] = {
+ 	13,
+ 	12,
+ 	14,
+ 	11,
+ 	15,
+ 	10,
+ 	16,
+ 	9,
+ 	17,
+ 	8,
+ 	18,
+ 	7,
+ 	19,
+ 	6,
+ 	20,
+ 	5,
+ 	21,
+ 	4,
+ 	22,
+ 	3,
+ 	23,
+ 	2,
+ 	24,
+ 	1,
+ 	25,
+ 	0,
+ 	26,
+ };
+ 
+ static long _vq_lengthlist__16c2_s_p9_2[] = {
+ 	 1, 4, 4, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 8, 7, 8, 7, 7, 4, 4,
+ };
+ 
+ static float _vq_quantthresh__16c2_s_p9_2[] = {
+ 	-12.5, -11.5, -10.5, -9.5, -8.5, -7.5, -6.5, -5.5, 
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 
+ 	11.5, 12.5, 
+ };
+ 
+ static long _vq_quantmap__16c2_s_p9_2[] = {
+ 	   25,   23,   21,   19,   17,   15,   13,   11,
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,   12,   14,   16,   18,   20,
+ 	   22,   24,   26,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16c2_s_p9_2 = {
+ 	_vq_quantthresh__16c2_s_p9_2,
+ 	_vq_quantmap__16c2_s_p9_2,
+ 	27,
+ 	27
+ };
+ 
+ static static_codebook _16c2_s_p9_2 = {
+ 	1, 27,
+ 	_vq_lengthlist__16c2_s_p9_2,
+ 	1, -528875520, 1611661312, 5, 0,
+ 	_vq_quantlist__16c2_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__16c2_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16c2_s_short[] = {
+ 	 7,10,11,11,11,14,15,15,17,14, 8, 6, 7, 7, 8, 9,
+ 	11,11,14,17, 9, 6, 6, 6, 7, 7,10,11,15,16, 9, 6,
+ 	 6, 4, 4, 5, 8, 9,12,16,10, 6, 6, 4, 4, 4, 6, 9,
+ 	13,16,10, 7, 6, 5, 4, 3, 5, 7,13,16,11, 9, 8, 7,
+ 	 6, 5, 5, 6,12,15,10,10,10, 9, 7, 6, 6, 7,11,15,
+ 	13,13,13,13,11,10,10, 9,12,16,16,16,16,14,16,15,
+ 	15,12,14,14,
+ };
+ 
+ static static_codebook _huff_book__16c2_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__16c2_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c0_s_long[] = {
+ 	 3, 4,18, 8, 8, 8, 9,10,11,13, 3, 2,18, 5, 5, 6,
+ 	 8,11,12,12,18,18,18,18,18,18,18,18,18,18, 8, 5,
+ 	18, 7, 8, 8,10,14,14,16, 8, 5,18, 7, 5, 6, 7,11,
+ 	12,13, 8, 6,18, 7, 5, 6, 7,10,12,14, 8, 7,18,10,
+ 	 7, 6, 6, 8,11,14, 9,10,18,13, 9, 7, 6, 8,10,13,
+ 	11,13,18,16,13,10, 9, 8, 8,11,12,17,18,17,18,14,
+ 	11, 9,10,14,
+ };
+ 
+ static static_codebook _huff_book__44c0_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c0_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p1_0[] = {
+ 	 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0,
+ 	 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+ 	 0, 0, 0, 0, 0, 8, 9,11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
+ 	 0, 0, 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p1_0 = {
+ 	_vq_quantthresh__44c0_s_p1_0,
+ 	_vq_quantmap__44c0_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c0_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__44c0_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c0_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p2_0[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p2_0 = {
+ 	_vq_quantthresh__44c0_s_p2_0,
+ 	_vq_quantmap__44c0_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c0_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c0_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c0_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p3_0[] = {
+ 	 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 7, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p3_0 = {
+ 	_vq_quantthresh__44c0_s_p3_0,
+ 	_vq_quantmap__44c0_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c0_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c0_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c0_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p4_0[] = {
+ 	 1, 3, 2, 8, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p4_0 = {
+ 	_vq_quantthresh__44c0_s_p4_0,
+ 	_vq_quantmap__44c0_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c0_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c0_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c0_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p5_0[] = {
+ 	 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 6, 7, 7, 7,
+ 	 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7,
+ 	 8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8,10, 9, 0, 0, 0,
+ 	 8, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
+ 	 0, 0,10, 9, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p5_0 = {
+ 	_vq_quantthresh__44c0_s_p5_0,
+ 	_vq_quantmap__44c0_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c0_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c0_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c0_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p6_0[] = {
+ 	 1, 3, 4, 6, 6, 7, 8, 8, 8, 8, 8, 9, 9,10,10,11,
+ 	11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,
+ 	11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
+ 	11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9,10,10,10,
+ 	10,11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,12,12,12,13, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
+ 	 9,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
+ 	 9, 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	10, 9,10,10,11,11,11,12,12,13,13,13, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,11,11,12,12,12,12,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,11,11,12,12,13,12,13,13, 0,
+ 	 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p6_0 = {
+ 	_vq_quantthresh__44c0_s_p6_0,
+ 	_vq_quantmap__44c0_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c0_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c0_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c0_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 	 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 7,10,10,10,11,
+ 	10,11,10,10, 6, 9, 9,11,10,10,11, 9,10, 6, 9, 9,
+ 	11,10,10,11, 9, 9, 7,10,10,11,11,11,12,11,11, 7,
+ 	 9, 9,10, 9, 9,11,11,10, 7, 9, 9,10,10,10,12,10,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p7_0 = {
+ 	_vq_quantthresh__44c0_s_p7_0,
+ 	_vq_quantmap__44c0_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c0_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c0_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c0_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p7_1[] = {
+ 	 2, 3, 3, 6, 6, 7, 7, 7, 7, 7, 7,10, 9, 9, 6, 6,
+ 	 7, 7, 8, 8, 8, 8, 9, 9, 9, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,10, 9,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 8, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 	 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 9, 8,10,10,
+ 	10,10,10, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p7_1 = {
+ 	_vq_quantthresh__44c0_s_p7_1,
+ 	_vq_quantmap__44c0_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c0_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c0_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c0_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 9, 7, 5, 5,
+ 	 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 6, 6, 7, 7, 8,
+ 	 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 8, 9, 9,
+ 	10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,12,12, 9, 8, 9, 9,10,10,10,11,12,11, 0,13,
+ 	13, 9, 8, 9, 9,10,10,10,11,11,11, 0, 0, 0,10,10,
+ 	 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10, 9, 8,10,
+ 	10,11,11,12,12, 0, 0, 0,13,13,10,10,11,11,12,12,
+ 	12,12, 0, 0, 0,15,15,10,10,11, 9,12,12,13,13, 0,
+ 	 0, 0, 0, 0,12,11,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0,12,12,11,11,12,11,14,13,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p8_0 = {
+ 	_vq_quantthresh__44c0_s_p8_0,
+ 	_vq_quantmap__44c0_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c0_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c0_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c0_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p8_1[] = {
+ 	 2, 3, 4, 4, 4, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
+ 	 6, 6, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p8_1 = {
+ 	_vq_quantthresh__44c0_s_p8_1,
+ 	_vq_quantmap__44c0_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c0_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c0_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c0_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p9_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p9_0[] = {
+ 	 1, 7, 7,11,11,10,11,11,11,11, 9,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11, 8,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11, 8,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p9_0[] = {
+ 	-331.5, -110.5, 110.5, 331.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p9_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p9_0 = {
+ 	_vq_quantthresh__44c0_s_p9_0,
+ 	_vq_quantmap__44c0_s_p9_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c0_s_p9_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c0_s_p9_0,
+ 	1, -518283264, 1627103232, 3, 0,
+ 	_vq_quantlist__44c0_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p9_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p9_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 9, 9,12,12,13,12, 6, 5, 5,
+ 	 7, 7, 8, 8,10,10,12,11,14,13, 6, 5, 5, 7, 7, 7,
+ 	 8, 9, 9,11,12,13,12,15, 7, 7, 7, 7, 9, 9,11,11,
+ 	14,13,14,13,15, 7, 7, 8, 8, 8, 9,10,10,11,11,12,
+ 	11,15,10,10, 8, 8,10,10,12,11,13,15,14,14,15,11,
+ 	10, 8, 8,11,11,11,11,13,13,12,13,15,15,15,10,10,
+ 	10,10,12,13,13,13,15,14,15,15,15,10,10,10,11,13,
+ 	14,13,14,14,14,15,15,15,15,15,11,12,11,13,14,14,
+ 	15,15,15,15,15,14,15,11,11,13,12,14,13,15,15,15,
+ 	15,15,15,15,13,12,13,12,15,15,15,15,15,15,15,15,
+ 	15,12,13,12,12,15,14,15,15,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p9_1[] = {
+ 	-93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, 
+ 	42.5, 59.5, 76.5, 93.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p9_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p9_1 = {
+ 	_vq_quantthresh__44c0_s_p9_1,
+ 	_vq_quantmap__44c0_s_p9_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c0_s_p9_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c0_s_p9_1,
+ 	1, -522616832, 1620115456, 4, 0,
+ 	_vq_quantlist__44c0_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_s_p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c0_s_p9_2[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 8,
+ 	 9,10,10,10, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10,10,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,11,10,10, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9,10, 9, 9,10,10,11, 9, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11, 9, 8, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,11,11,10,11,11, 9, 9,
+ 	 9, 9, 9, 9,10, 9, 9, 9,10, 9,10,10,10,11,11, 9,
+ 	 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10,11,10,10,10,11,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,
+ 	11,11,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
+ 	11,11,10,10, 9,10,10,10, 9,10, 9, 9, 9, 9,10,10,
+ 	11,10,11,11,11, 9,10, 9, 9, 9, 9, 9, 9, 9,10,10,
+ 	11,10,11,11,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,10,11,11,10,11,11, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44c0_s_p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_s_p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_s_p9_2 = {
+ 	_vq_quantthresh__44c0_s_p9_2,
+ 	_vq_quantmap__44c0_s_p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c0_s_p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c0_s_p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c0_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c0_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c0_s_short[] = {
+ 	 6, 8,17,12,12,12,14,15,17,16, 5, 1,16, 5, 6, 6,
+ 	 9,12,14,13,16,16,16,16,16,16,16,16,16,16, 9, 4,
+ 	16, 6, 9, 7,10,14,14,14, 8, 5,16, 8, 6, 7,10,13,
+ 	15,16, 9, 6,16, 7, 7, 7,10,12,15,14,10, 8,16, 9,
+ 	 9, 9,10,12,15,14,13, 7,16, 8, 7, 7,10,12,14,13,
+ 	15, 6,16, 7, 5, 5, 7, 9,13,16,14, 7,16, 8, 6, 6,
+ 	 8, 9,11,14,
+ };
+ 
+ static static_codebook _huff_book__44c0_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c0_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c0_sm_long[] = {
+ 	 3, 4,10, 8,11, 9,10,10,11,13, 3, 2,10, 5, 8, 6,
+ 	 8,11,12,13,10, 8, 7,10, 7, 8, 9,11,12,13, 8, 5,
+ 	12, 6, 9, 7,10,13,14,16,11, 7, 7, 9, 5, 6, 7,10,
+ 	13,13, 8, 6, 7, 7, 5, 5, 6, 9,12,13, 9, 8, 8, 8,
+ 	 7, 6, 6, 8,11,14,10,10,10,11, 9, 8, 7, 8,10,13,
+ 	11,14,12,15,13,11, 9, 8, 9,12,12,18,15,18,17,15,
+ 	12,10,10,14,
+ };
+ 
+ static static_codebook _huff_book__44c0_sm_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c0_sm_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p1_0[] = {
+ 	 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0,
+ 	 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
+ 	 0, 0, 0, 0, 0, 0, 9,10, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p1_0 = {
+ 	_vq_quantthresh__44c0_sm_p1_0,
+ 	_vq_quantmap__44c0_sm_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c0_sm_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__44c0_sm_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c0_sm_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p2_0[] = {
+ 	 1, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 6, 6, 0, 0, 0,
+ 	 8, 8, 0, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 8,
+ 	 8, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 6, 7, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0,
+ 	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, 0, 8, 8, 0, 0,
+ 	 0, 8, 8, 0, 0, 0,10, 9, 0, 0, 0, 0, 0, 0, 0, 6,
+ 	 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 9,
+ 	10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8,
+ 	 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0,
+ 	 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 8,10,10, 0, 0, 0,10,10, 0, 0, 0, 9,10, 0, 0, 0,
+ 	10,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0,10,
+ 	10, 0, 0, 0,10, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p2_0 = {
+ 	_vq_quantthresh__44c0_sm_p2_0,
+ 	_vq_quantmap__44c0_sm_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c0_sm_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c0_sm_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c0_sm_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p3_0[] = {
+ 	 2, 3, 4, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 6, 8, 8, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p3_0 = {
+ 	_vq_quantthresh__44c0_sm_p3_0,
+ 	_vq_quantmap__44c0_sm_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c0_sm_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c0_sm_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c0_sm_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p4_0[] = {
+ 	 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
+ 	 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p4_0 = {
+ 	_vq_quantthresh__44c0_sm_p4_0,
+ 	_vq_quantmap__44c0_sm_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c0_sm_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c0_sm_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c0_sm_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p5_0[] = {
+ 	 1, 3, 3, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7, 8, 8,
+ 	 9, 9, 0, 6, 6, 7, 7, 8, 8,10,10, 0, 7, 7, 8, 8,
+ 	 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
+ 	 8, 8, 9, 9,11,11, 0, 0, 0, 9, 9, 9, 9,11,11, 0,
+ 	 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p5_0 = {
+ 	_vq_quantthresh__44c0_sm_p5_0,
+ 	_vq_quantmap__44c0_sm_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c0_sm_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c0_sm_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c0_sm_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p6_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 9, 9, 8, 8,10,10,10,10,11,
+ 	11, 0, 6, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	12,12, 0, 6, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,12,12, 0, 7, 7, 8, 8, 8, 8,10,10,10,10,11,11,
+ 	11,11,12,12, 0, 0, 0, 8, 7, 8, 8,10,10,10,10,11,
+ 	11,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
+ 	11,11,12,12,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,
+ 	10,11,11,12,12,12,13, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
+ 	10,10,11,11,12,12,12,13,13,13, 0, 0, 0, 0, 0, 9,
+ 	 9,10, 9,11,11,12,12,13,13,13,13, 0, 0, 0, 0, 0,
+ 	10,10,10,10,11,11,12,12,13,13,14,14, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,11,11,12,12,13,13,14,14, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,11,11,12,12,13,13,14,14, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,14,14, 0,
+ 	 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p6_0 = {
+ 	_vq_quantthresh__44c0_sm_p6_0,
+ 	_vq_quantmap__44c0_sm_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c0_sm_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c0_sm_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c0_sm_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 5, 7, 6,10, 9, 9,10,
+ 	 9, 9, 4, 7, 7,10, 9, 9,11, 9, 9, 6,10,10,10,10,
+ 	10,11,10,10, 6, 9, 9,10,10,10,11, 9,10, 6, 9, 9,
+ 	10,10,10,11,10, 9, 7,10,10,11,11,11,11,11,11, 6,
+ 	 9, 9,10, 9,10,11,11,10, 6, 9, 9,10,10,10,11,10,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p7_0 = {
+ 	_vq_quantthresh__44c0_sm_p7_0,
+ 	_vq_quantmap__44c0_sm_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c0_sm_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c0_sm_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c0_sm_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p7_1[] = {
+ 	 2, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 9, 5, 5, 7, 7,
+ 	 7, 7, 8, 8, 8, 8, 9, 5, 5, 7, 7, 7, 7, 8, 8, 8,
+ 	 8,10, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 	 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
+ 	10,10,10, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p7_1 = {
+ 	_vq_quantthresh__44c0_sm_p7_1,
+ 	_vq_quantmap__44c0_sm_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c0_sm_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c0_sm_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c0_sm_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 7, 7, 9, 9,10,10, 7, 5, 5,
+ 	 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8,
+ 	 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,12,12, 9, 9, 9, 9,10,10,11,11,12,11, 0,12,
+ 	12, 9, 9, 9, 9,10,10,11,11,12,11, 0, 0, 0, 9, 9,
+ 	 9,10,11,11,11,11,12,12, 0, 0, 0,10,10, 9, 9,11,
+ 	11,11,11,12,12, 0, 0, 0,13,13,10,10,11,11,12,12,
+ 	13,13, 0, 0, 0,14,14,10,10,11,10,12,12,13,13, 0,
+ 	 0, 0, 0, 0,12,12,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0,12,12,11,10,12,11,14,14,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p8_0 = {
+ 	_vq_quantthresh__44c0_sm_p8_0,
+ 	_vq_quantmap__44c0_sm_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c0_sm_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c0_sm_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c0_sm_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p8_1[] = {
+ 	 2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p8_1 = {
+ 	_vq_quantthresh__44c0_sm_p8_1,
+ 	_vq_quantmap__44c0_sm_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c0_sm_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c0_sm_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c0_sm_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p9_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p9_0[] = {
+ 	 1, 3, 4,11,11,11,11,11,11, 4, 6, 6,10,10,10,10,
+ 	10,10, 4, 6, 5,10,10,10,10,10,10,10, 6, 7,10, 9,
+ 	10,10,10,10,10, 7, 9,10, 9,10,10,10,10,10, 9,10,
+ 	 7, 9,10,10,10,10,10,10,10, 9,10,10,10,10,10,10,
+ 	10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p9_0[] = {
+ 	-773.5, -552.5, -331.5, -110.5, 110.5, 331.5, 552.5, 773.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p9_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p9_0 = {
+ 	_vq_quantthresh__44c0_sm_p9_0,
+ 	_vq_quantmap__44c0_sm_p9_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c0_sm_p9_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c0_sm_p9_0,
+ 	1, -516186112, 1627103232, 4, 0,
+ 	_vq_quantlist__44c0_sm_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p9_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p9_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 9, 9,12,12,13,13, 6, 5, 5,
+ 	 7, 7, 8, 8,10,10,12,12,14,13, 6, 5, 5, 6, 7, 8,
+ 	 8,10, 9,11,12,13,12,18, 7, 7, 7, 7, 9, 9,11,11,
+ 	14,14,14,13,17, 7, 7, 8, 7, 9, 9,10,10,12,11,13,
+ 	12,18,10,10, 8, 8,10,10,12,11,13,14,16,15,17,11,
+ 	11, 8, 8,11,11,11,12,13,13,13,15,18,18,18,10,11,
+ 	10,10,12,13,14,13,17,14,17,17,17,10,10,11,11,14,
+ 	14,14,13,14,14,18,18,18,17,15,11,12,12,13,15,15,
+ 	16,17,18,16,18,14,15,11,11,14,13,14,14,16,17,18,
+ 	17,17,17,18,14,13,13,12,17,15,17,16,18,17,18,18,
+ 	18,12,13,12,13,16,14,18,18,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p9_1[] = {
+ 	-93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, 
+ 	42.5, 59.5, 76.5, 93.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p9_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p9_1 = {
+ 	_vq_quantthresh__44c0_sm_p9_1,
+ 	_vq_quantmap__44c0_sm_p9_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c0_sm_p9_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c0_sm_p9_1,
+ 	1, -522616832, 1620115456, 4, 0,
+ 	_vq_quantlist__44c0_sm_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c0_sm_p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c0_sm_p9_2[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9,10, 6, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10, 6, 6, 7, 7, 7, 7, 8, 8, 9, 8, 9, 9, 9,
+ 	 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,11,10,10, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10, 9,10,11,10, 9, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11,11, 9, 8, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,10,11,10,11,11, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,11,11, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,10,10,11,11,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,
+ 	11,11,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,11,10,
+ 	11,11,10,10, 9,10,10,10, 9, 9, 9, 9, 9, 9,10,10,
+ 	10,11,11,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	11,10,11,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,11,11,11,10,11,11, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44c0_sm_p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c0_sm_p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c0_sm_p9_2 = {
+ 	_vq_quantthresh__44c0_sm_p9_2,
+ 	_vq_quantmap__44c0_sm_p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c0_sm_p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c0_sm_p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c0_sm_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c0_sm_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c0_sm_short[] = {
+ 	 5, 7,12,12,13,13,13,15,16,18, 4, 2,11, 5, 9, 7,
+ 	 9,12,13,14,13, 7, 8, 9, 8, 9,11,13,19,19, 9, 4,
+ 	12, 5,10, 7, 9,12,15,14,11, 6, 7, 7, 5, 6, 8,11,
+ 	15,17,10, 5, 8, 6, 6, 5, 6, 9,14,14,10, 5, 9, 7,
+ 	 7, 6, 6, 9,12,14,12, 6,10, 7, 7, 7, 8, 9,13,14,
+ 	14, 7, 9, 7, 5, 5, 6, 9,11,13,14, 9,10, 9, 6, 6,
+ 	 7, 8,10,13,
+ };
+ 
+ static static_codebook _huff_book__44c0_sm_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c0_sm_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c1_s_long[] = {
+ 	 3, 4,19, 9,10, 9, 9,10,11,12, 4, 2,19, 5, 6, 6,
+ 	 8,10,12,11,19,19,19,19,19,19,19,19,18,18, 8, 4,
+ 	18, 6, 8, 7,10,13,14,13,10, 5,18, 7, 4, 6, 7,10,
+ 	12,13, 9, 6,18, 7, 5, 6, 7,10,12,13, 9, 7,18, 9,
+ 	 7, 6, 6, 7,10,13, 9, 9,18,12, 9, 8, 6, 6, 9,12,
+ 	10,12,18,15,12,11, 9, 8, 8,11,11,14,18,17,15,13,
+ 	12, 9,10,12,
+ };
+ 
+ static static_codebook _huff_book__44c1_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c1_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p1_0[] = {
+ 	 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0,
+ 	 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 	 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
+ 	 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+ 	 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p1_0 = {
+ 	_vq_quantthresh__44c1_s_p1_0,
+ 	_vq_quantmap__44c1_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c1_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__44c1_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c1_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p2_0[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p2_0 = {
+ 	_vq_quantthresh__44c1_s_p2_0,
+ 	_vq_quantmap__44c1_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c1_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c1_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c1_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p3_0[] = {
+ 	 2, 3, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p3_0 = {
+ 	_vq_quantthresh__44c1_s_p3_0,
+ 	_vq_quantmap__44c1_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c1_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c1_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c1_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p4_0[] = {
+ 	 1, 3, 2, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 9, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
+ 	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p4_0 = {
+ 	_vq_quantthresh__44c1_s_p4_0,
+ 	_vq_quantmap__44c1_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c1_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c1_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c1_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p5_0[] = {
+ 	 1, 3, 3, 5, 5, 6, 6, 8, 8, 0, 0, 0, 7, 7, 8, 7,
+ 	 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0, 0, 0, 7, 7,
+ 	 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
+ 	 8, 8, 9, 9,10,10, 0, 0, 0, 8, 8, 9, 9,10,10, 0,
+ 	 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p5_0 = {
+ 	_vq_quantthresh__44c1_s_p5_0,
+ 	_vq_quantmap__44c1_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c1_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c1_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c1_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p6_0[] = {
+ 	 1, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+ 	11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
+ 	11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10,10,10,
+ 	10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9,10,10,
+ 	10,11,11,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,12,12,13,12, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
+ 	10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
+ 	 9,10, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	10,10,10,10,11,11,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,11,11,11,11,12,12,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,11,11,12,12,13,12,13,13, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,13,13, 0,
+ 	 0, 0, 0, 0, 0, 0,11,11,11,12,12,12,13,13,14,14,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,11,11,12,12,13,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p6_0 = {
+ 	_vq_quantthresh__44c1_s_p6_0,
+ 	_vq_quantmap__44c1_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c1_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c1_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c1_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 	 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10,
+ 	10,11,10,10, 6, 9, 9,10,11,10,10, 9, 9, 6, 9, 9,
+ 	10,10,10,10, 9, 9, 7,10,10,11,10,10,11,11,11, 6,
+ 	 9, 9,10, 9, 9,11,10,10, 6, 9, 9,10, 9, 9,11,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p7_0 = {
+ 	_vq_quantthresh__44c1_s_p7_0,
+ 	_vq_quantmap__44c1_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c1_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c1_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c1_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p7_1[] = {
+ 	 2, 3, 3, 6, 6, 7, 7, 7, 7, 8, 8,10,10,10, 6, 6,
+ 	 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 	 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
+ 	10,10,10, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p7_1 = {
+ 	_vq_quantthresh__44c1_s_p7_1,
+ 	_vq_quantmap__44c1_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c1_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c1_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c1_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 7, 7, 9, 8,10,10, 6, 5, 5,
+ 	 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 6, 6, 7, 7, 8,
+ 	 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,12,12, 9, 9, 9, 9,10,10,10,11,12,11, 0,12,
+ 	13, 9, 8, 9, 9,10,10,11,11,11,11, 0, 0, 0, 9, 9,
+ 	 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0,13,14,10,10,11,11,12,12,
+ 	12,13, 0, 0, 0,14,14,10,10,11,10,12,12,13,13, 0,
+ 	 0, 0, 0, 0,12,11,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0,12,12,11,10,12,11,14,13,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p8_0 = {
+ 	_vq_quantthresh__44c1_s_p8_0,
+ 	_vq_quantmap__44c1_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c1_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c1_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c1_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p8_1[] = {
+ 	 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
+ 	 6, 6, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p8_1 = {
+ 	_vq_quantthresh__44c1_s_p8_1,
+ 	_vq_quantmap__44c1_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c1_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c1_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c1_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p9_0[] = {
+ 	 1, 6, 6, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 7, 6,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 4, 6, 6, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 7, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 8,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p9_0[] = {
+ 	-1215.5, -994.5, -773.5, -552.5, -331.5, -110.5, 110.5, 331.5, 
+ 	552.5, 773.5, 994.5, 1215.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p9_0 = {
+ 	_vq_quantthresh__44c1_s_p9_0,
+ 	_vq_quantmap__44c1_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c1_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c1_s_p9_0,
+ 	1, -514541568, 1627103232, 4, 0,
+ 	_vq_quantlist__44c1_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p9_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p9_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 9, 9,12,12,13,12, 6, 5, 5,
+ 	 7, 7, 8, 8,10,10,11,12,13,13, 6, 5, 5, 7, 7, 8,
+ 	 8, 9, 9,11,11,12,12,15, 7, 7, 7, 7, 9, 9,11,11,
+ 	13,13,14,13,15, 7, 7, 8, 7, 9, 9,10,10,12,11,14,
+ 	12,15,10,10, 8, 8,10,10,12,11,12,13,14,13,15,10,
+ 	10, 8, 8,11,10,11,11,13,12,13,15,14,15,15,10,10,
+ 	10,10,12,13,13,12,15,14,15,15,13,10,10,11,11,13,
+ 	13,13,12,13,13,15,15,15,14,15,11,11,13,13,13,13,
+ 	14,15,15,15,15,13,13,11,11,12,13,13,14,13,15,15,
+ 	15,14,15,15,13,12,12,11,13,13,15,15,15,15,15,15,
+ 	14,13,12,13,12,15,13,15,15,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p9_1[] = {
+ 	-93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, 
+ 	42.5, 59.5, 76.5, 93.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p9_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p9_1 = {
+ 	_vq_quantthresh__44c1_s_p9_1,
+ 	_vq_quantmap__44c1_s_p9_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c1_s_p9_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c1_s_p9_1,
+ 	1, -522616832, 1620115456, 4, 0,
+ 	_vq_quantlist__44c1_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_s_p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c1_s_p9_2[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 8, 9, 8, 9, 9,
+ 	 9,10,10,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9,10,10,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,11,10, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9,10, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,11, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10, 9,10,10,10,11,11, 9, 8, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,10,11,11,11,11, 9, 9,
+ 	 9, 9, 9, 9,10, 9,10, 9, 9, 9,10,10,10,11,10, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,11,11,11,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,
+ 	11,11,10, 9, 9,10, 9, 9, 9, 9, 9, 9, 9,10,10,10,
+ 	11,11,11,10, 9,10,10,10, 9, 9, 9, 9,10, 9,10,10,
+ 	10,10,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	11,10,10,10,10,10,10, 9, 9, 9, 9,10, 9, 9, 9, 9,
+ 	10,10,10,11,11,10,10,11,11, 9, 9,10, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44c1_s_p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_s_p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_s_p9_2 = {
+ 	_vq_quantthresh__44c1_s_p9_2,
+ 	_vq_quantmap__44c1_s_p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c1_s_p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c1_s_p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c1_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c1_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c1_s_short[] = {
+ 	 5, 7,17,13,12,12,14,16,15,16, 4, 2,17, 5, 7, 6,
+ 	 8,11,14,13,16,16,16,16,16,16,16,16,16,16,10, 4,
+ 	16, 4, 8, 6, 7,11,14,14,10, 5,16, 6, 5, 6, 8,12,
+ 	15,15,10, 5,16, 5, 6, 5, 7,10,14,15,11, 6,16, 7,
+ 	 8, 7, 7,10,14,14,13, 8,16, 8, 7, 7, 8,10,12,13,
+ 	12, 8,16, 7, 5, 5, 6, 8,11,13,13, 9,16, 9, 6, 6,
+ 	 7, 8,10,13,
+ };
+ 
+ static static_codebook _huff_book__44c1_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c1_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c1_sm_long[] = {
+ 	 3, 4,10, 9,11, 9,10,11,11,13, 4, 2,11, 5, 7, 7,
+ 	 8,10,12,13,10,10, 7,12, 8, 9, 9,10,12,13, 8, 5,
+ 	13, 6, 9, 7,10,12,15,15,10, 6, 7, 8, 5, 5, 7,10,
+ 	12,13, 9, 6, 8, 7, 5, 5, 6, 9,11,12, 9, 8, 9, 9,
+ 	 6, 5, 5, 7,10,13,10,10,10,12, 9, 7, 6, 7, 9,13,
+ 	10,13,11,17,11,11, 9, 8, 9,12,12,16,14,17,15,14,
+ 	12,10,10,12,
+ };
+ 
+ static static_codebook _huff_book__44c1_sm_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c1_sm_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p1_0[] = {
+ 	 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 0,
+ 	 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 9, 9,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
+ 	 0, 0, 0, 0, 0, 0, 9,10, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p1_0 = {
+ 	_vq_quantthresh__44c1_sm_p1_0,
+ 	_vq_quantmap__44c1_sm_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c1_sm_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__44c1_sm_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c1_sm_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p2_0[] = {
+ 	 1, 5, 5, 0, 0, 0, 5, 6, 0, 0, 0, 5, 6, 0, 0, 0,
+ 	 8, 8, 0, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 8,
+ 	 8, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 6, 7, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0,
+ 	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0, 0, 8, 8, 0, 0,
+ 	 0, 8, 8, 0, 0, 0,10, 9, 0, 0, 0, 0, 0, 0, 0, 6,
+ 	 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 9,
+ 	10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8,
+ 	 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0,
+ 	 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 8,10,10, 0, 0, 0,10,10, 0, 0, 0, 9,10, 0, 0, 0,
+ 	10,10, 0, 0, 0, 0, 0, 0, 0, 8,10,10, 0, 0, 0,10,
+ 	10, 0, 0, 0,10, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p2_0 = {
+ 	_vq_quantthresh__44c1_sm_p2_0,
+ 	_vq_quantmap__44c1_sm_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c1_sm_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c1_sm_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c1_sm_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p3_0[] = {
+ 	 2, 3, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 7, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p3_0 = {
+ 	_vq_quantthresh__44c1_sm_p3_0,
+ 	_vq_quantmap__44c1_sm_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c1_sm_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c1_sm_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c1_sm_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p4_0[] = {
+ 	 1, 3, 3, 7, 7, 0, 0, 0, 0, 0, 5, 5, 6, 6, 0, 0,
+ 	 0, 0, 0, 5, 5, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 9, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
+ 	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p4_0 = {
+ 	_vq_quantthresh__44c1_sm_p4_0,
+ 	_vq_quantmap__44c1_sm_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c1_sm_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c1_sm_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c1_sm_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p5_0[] = {
+ 	 2, 3, 3, 5, 5, 6, 6, 8, 8, 0, 5, 5, 6, 6, 7, 7,
+ 	 9, 9, 0, 5, 5, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7,
+ 	 7, 7, 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0,
+ 	 7, 7, 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0,
+ 	 0, 0, 9, 9, 9, 9,10,10, 0, 0, 0, 0, 0, 8, 8,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p5_0 = {
+ 	_vq_quantthresh__44c1_sm_p5_0,
+ 	_vq_quantmap__44c1_sm_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c1_sm_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c1_sm_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c1_sm_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p6_0[] = {
+ 	 2, 3, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+ 	11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,10,
+ 	11,11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10,
+ 	10,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9,
+ 	 9,10,10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8,10,10,
+ 	10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, 8,10,
+ 	10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, 8,
+ 	 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8,
+ 	 8, 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	 9, 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,10,10,11,11,12,12,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0,10,10,11,11,11,11,13,12,13,13, 0, 0,
+ 	 0, 0, 0, 0, 0,10,10,11,11,11,11,13,13,13,13, 0,
+ 	 0, 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,14,14,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,11,11,12,12,13,12,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p6_0 = {
+ 	_vq_quantthresh__44c1_sm_p6_0,
+ 	_vq_quantmap__44c1_sm_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c1_sm_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c1_sm_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c1_sm_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 	 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10,
+ 	10,10,10,10, 6, 9, 9,10,10,10,10, 9, 9, 6, 9, 9,
+ 	10,10,10,10,10, 9, 7,10,10,11,10,10,11,11,11, 6,
+ 	 9, 9,10, 9, 9,11,10,10, 6, 9, 9,10, 9, 9,11,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p7_0 = {
+ 	_vq_quantthresh__44c1_sm_p7_0,
+ 	_vq_quantmap__44c1_sm_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c1_sm_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c1_sm_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c1_sm_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6,
+ 	 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,10, 7, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 9, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 	 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
+ 	10,10,10, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p7_1 = {
+ 	_vq_quantthresh__44c1_sm_p7_1,
+ 	_vq_quantmap__44c1_sm_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c1_sm_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c1_sm_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c1_sm_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
+ 	 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8,
+ 	 8, 8, 8, 9, 9,11,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,12,12, 9, 9, 9, 9,10,10,11,11,12,11, 0,13,
+ 	13, 9, 9, 9, 9,10,10,11,11,12,12, 0, 0, 0, 9, 9,
+ 	 9, 9,10,10,11,12,12,12, 0, 0, 0,10,10, 9, 9,11,
+ 	11,12,12,13,13, 0, 0, 0,13,13,10,10,11,11,12,12,
+ 	13,13, 0, 0, 0,14,14,10,10,11,10,12,12,13,13, 0,
+ 	 0, 0, 0, 0,12,11,11,11,12,12,14,13, 0, 0, 0, 0,
+ 	 0,12,12,11,10,12,12,14,13,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p8_0 = {
+ 	_vq_quantthresh__44c1_sm_p8_0,
+ 	_vq_quantmap__44c1_sm_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c1_sm_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c1_sm_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c1_sm_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p8_1[] = {
+ 	 2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p8_1 = {
+ 	_vq_quantthresh__44c1_sm_p8_1,
+ 	_vq_quantmap__44c1_sm_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c1_sm_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c1_sm_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c1_sm_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p9_0[] = {
+ 	 1, 5, 5,11,11,11,11,11,11,11,11,11,11, 4, 5, 5,
+ 	11,10,11,11,11,11,11,11,11,11, 4, 5, 4,11,11,11,
+ 	11,11,11,11,11,11,11,11, 6, 7,11, 9,11,11,11,11,
+ 	11,11,11,11,11, 6, 7, 9, 8,11,11,11,11,11,11,11,
+ 	11,11, 9, 9, 7, 8,11,11,11,11,11,11,11,11,11,10,
+ 	10, 9,10,11,11,11,11,11,11,11,11,11,11,11, 8,11,
+ 	10,10,11,11,11,11,11,11,11,11,11, 9,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11, 9,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p9_0[] = {
+ 	-1215.5, -994.5, -773.5, -552.5, -331.5, -110.5, 110.5, 331.5, 
+ 	552.5, 773.5, 994.5, 1215.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p9_0 = {
+ 	_vq_quantthresh__44c1_sm_p9_0,
+ 	_vq_quantmap__44c1_sm_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c1_sm_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c1_sm_p9_0,
+ 	1, -514541568, 1627103232, 4, 0,
+ 	_vq_quantlist__44c1_sm_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p9_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p9_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7,10,10,12,12,13,13, 6, 5, 5,
+ 	 7, 7, 8, 8,10,10,12,12,14,13, 6, 5, 5, 7, 7, 8,
+ 	 8,10,10,12,12,13,13,16, 7, 7, 7, 7, 9, 9,11,11,
+ 	13,14,13,15,18, 7, 6, 8, 7, 9, 9,11,10,12,12,14,
+ 	12,19,10,10, 8, 8,10,10,12,11,13,15,15,15,17,11,
+ 	11, 8, 7,11,10,12,12,13,13,14,15,16,17,17,10,11,
+ 	10,10,13,13,14,13,16,15,17,17,16,10,10,11,11,14,
+ 	14,16,13,14,14,17,19,17,15,14,11,11,13,13,15,14,
+ 	16,15,17,16,17,14,14,11,11,14,13,14,14,14,15,17,
+ 	16,16,16,17,13,13,13,13,16,14,17,15,16,17,18,18,
+ 	17,13,13,13,13,15,15,16,16,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p9_1[] = {
+ 	-93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, 
+ 	42.5, 59.5, 76.5, 93.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p9_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p9_1 = {
+ 	_vq_quantthresh__44c1_sm_p9_1,
+ 	_vq_quantmap__44c1_sm_p9_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c1_sm_p9_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c1_sm_p9_1,
+ 	1, -522616832, 1620115456, 4, 0,
+ 	_vq_quantlist__44c1_sm_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c1_sm_p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c1_sm_p9_2[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9,10, 6, 6, 7, 7, 8, 7, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9,10, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10,10,10, 7, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10, 9,10,10,10, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11,11, 8, 8, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9,10,11,10,11,11, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10, 9, 9, 9,10,11,10,11,11, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,11,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,11,10,11,
+ 	11,10,11, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,
+ 	11,11,11,11, 9,10,10,10, 9, 9, 9, 9,10, 9,10,10,
+ 	10,11,11,11,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	11,10,11,10,11,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,11,11,10,10,10,11, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44c1_sm_p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c1_sm_p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c1_sm_p9_2 = {
+ 	_vq_quantthresh__44c1_sm_p9_2,
+ 	_vq_quantmap__44c1_sm_p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c1_sm_p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c1_sm_p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c1_sm_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c1_sm_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c1_sm_short[] = {
+ 	 4, 7,13,13,13,13,14,16,16,19, 4, 2,13, 5, 8, 7,
+ 	 9,12,14,13,16, 9,10,10, 9,10,11,13,17,19, 9, 4,
+ 	13, 5,10, 6, 8,11,15,15,11, 6, 9, 7, 6, 6, 8,11,
+ 	14,18,11, 5, 9, 6, 6, 5, 6, 9,13,15,12, 6, 9, 7,
+ 	 6, 5, 5, 8,12,15,13, 7,10, 8, 6, 6, 7, 9,12,13,
+ 	13, 9,11, 9, 6, 5, 6, 8,11,13,13,11,13,11, 7, 6,
+ 	 7, 8,10,12,
+ };
+ 
+ static static_codebook _huff_book__44c1_sm_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c1_sm_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c2_s_long[] = {
+ 	 5, 5,12,10,11,10,10,10,11,13, 5, 1, 9, 5, 8, 7,
+ 	 8,10,13,13,12, 9, 8,11, 7, 8, 9,11,13,15, 9, 5,
+ 	12, 6, 9, 8,10,12,15,14,12, 7, 6, 8, 5, 6, 7,10,
+ 	12,13,10, 7, 8, 7, 6, 6, 7, 9,12,12,10, 8, 9, 9,
+ 	 7, 6, 6, 7,10,11,10, 9,10,11, 9, 8, 6, 6, 8,11,
+ 	10,12,13,15,11,10, 8, 7, 8,11,11,13,16,16,14,13,
+ 	11, 9, 9,10,
+ };
+ 
+ static static_codebook _huff_book__44c2_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c2_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p1_0[] = {
+ 	 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0,
+ 	 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 	 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9,10,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8,10, 9, 0,
+ 	 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+ 	 0, 0, 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p1_0 = {
+ 	_vq_quantthresh__44c2_s_p1_0,
+ 	_vq_quantmap__44c2_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c2_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__44c2_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c2_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p2_0[] = {
+ 	 1, 4, 4, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0,
+ 	 7, 7, 0, 0, 0, 0, 0, 0, 0, 4, 6, 6, 0, 0, 0, 8,
+ 	 8, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 6, 6, 0, 0, 0, 8, 9, 0, 0, 0, 8, 8, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,11,10, 0, 0,
+ 	 0,11,11, 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 7,
+ 	 8, 8, 0, 0, 0,10,11, 0, 0, 0,11,11, 0, 0, 0,11,
+ 	11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 8, 0, 0, 0,11,11, 0, 0, 0,11,11,
+ 	 0, 0, 0,11,11, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0,
+ 	 0, 0,11,11, 0, 0, 0,11,11, 0, 0, 0,11,11, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 9, 9, 0, 0, 0,11,12, 0, 0, 0,11,12, 0, 0, 0,
+ 	12,11, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,12,
+ 	11, 0, 0, 0,11,11, 0, 0, 0,11,11, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p2_0 = {
+ 	_vq_quantthresh__44c2_s_p2_0,
+ 	_vq_quantmap__44c2_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c2_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c2_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c2_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p3_0[] = {
+ 	 2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 4, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p3_0 = {
+ 	_vq_quantthresh__44c2_s_p3_0,
+ 	_vq_quantmap__44c2_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c2_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c2_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c2_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p4_0[] = {
+ 	 1, 3, 3, 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, 6, 0, 0,
+ 	 0, 0, 0, 6, 6, 6, 6, 0, 0, 0, 0, 0, 6, 6, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p4_0 = {
+ 	_vq_quantthresh__44c2_s_p4_0,
+ 	_vq_quantmap__44c2_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c2_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c2_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c2_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p5_0[] = {
+ 	 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 7, 7, 7, 7, 8, 8,
+ 	 9, 9, 0, 7, 7, 7, 7, 8, 8, 9, 9, 0, 7, 7, 8, 7,
+ 	 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0, 0, 0,
+ 	 8, 8, 9, 9,10,10, 0, 0, 0, 8, 8, 9, 9,10,10, 0,
+ 	 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p5_0 = {
+ 	_vq_quantthresh__44c2_s_p5_0,
+ 	_vq_quantmap__44c2_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c2_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c2_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c2_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p6_0[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+ 	11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,10,
+ 	11,11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
+ 	10,11,11, 0, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9, 9,
+ 	 9,10,11,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9, 9,
+ 	 9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 9,
+ 	 9, 9, 9,10,10,11,11,12,12,12,13, 0, 0, 0, 0, 0,
+ 	10,10,10,10,10,11,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,10,10,11,11,12,12,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,11,11,12,12,12,12,13,13, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,11,11,12,11,12,12,13,13, 0,
+ 	 0, 0, 0, 0, 0, 0,11,11,11,11,12,12,13,12,14,13,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,11,11,12,12,12,13,13,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p6_0 = {
+ 	_vq_quantthresh__44c2_s_p6_0,
+ 	_vq_quantmap__44c2_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c2_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c2_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c2_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 	 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10, 9,10,10,
+ 	10,11,10,10, 6, 9, 9,10,10,10,11, 9, 9, 6, 9, 9,
+ 	10,10,10,11, 9, 9, 7,10,10,11,10,10,11,11,10, 6,
+ 	 9, 9,10, 9, 9,11,10,10, 6, 9, 9,10, 9,10,11,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p7_0 = {
+ 	_vq_quantthresh__44c2_s_p7_0,
+ 	_vq_quantmap__44c2_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c2_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c2_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c2_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 7, 7, 7, 7,10, 6, 6, 6, 6,
+ 	 7, 7, 8, 7, 8, 8, 9, 6, 6, 6, 6, 7, 7, 7, 7, 7,
+ 	 7,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,10, 9, 9, 6,
+ 	 6, 7, 7, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10, 9, 8, 8, 8,
+ 	 8, 8, 8,10,10,10, 9,10, 8, 8, 8, 8, 8, 8,10,10,
+ 	10,10, 9, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p7_1 = {
+ 	_vq_quantthresh__44c2_s_p7_1,
+ 	_vq_quantmap__44c2_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c2_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c2_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c2_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 6, 5, 5,
+ 	 7, 7, 8, 8, 9, 8, 9, 9,10,10, 7, 5, 5, 7, 7, 8,
+ 	 8, 8, 9,10, 9,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9,10,10,10,11,
+ 	11, 0,12,12, 9, 9,10,10,10,10,11,11,12,12, 0,13,
+ 	12, 9, 9,10, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
+ 	10,10,11,11,11,11,12,12, 0, 0, 0,10,10, 9, 9,11,
+ 	11,12,12,12,13, 0, 0, 0,13,13,10,10,11,11,12,12,
+ 	13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
+ 	 0, 0, 0, 0,12,12,11,12,12,12,14,13, 0, 0, 0, 0,
+ 	 0,12,12,12,12,12,12,14,13,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p8_0 = {
+ 	_vq_quantthresh__44c2_s_p8_0,
+ 	_vq_quantmap__44c2_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c2_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c2_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c2_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p8_1[] = {
+ 	 2, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 5, 5, 5, 5, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p8_1 = {
+ 	_vq_quantthresh__44c2_s_p8_1,
+ 	_vq_quantmap__44c2_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c2_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c2_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c2_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p9_0[] = {
+ 	 1, 5, 4,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 5, 7, 7,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 9, 6, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p9_0[] = {
+ 	-1215.5, -994.5, -773.5, -552.5, -331.5, -110.5, 110.5, 331.5, 
+ 	552.5, 773.5, 994.5, 1215.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p9_0 = {
+ 	_vq_quantthresh__44c2_s_p9_0,
+ 	_vq_quantmap__44c2_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c2_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c2_s_p9_0,
+ 	1, -514541568, 1627103232, 4, 0,
+ 	_vq_quantlist__44c2_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p9_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p9_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 9, 9,11,11,12,12, 6, 5, 5,
+ 	 7, 7, 8, 8,10,10,12,11,13,13, 6, 5, 5, 7, 7, 8,
+ 	 8, 9, 9,11,11,12,13,16, 7, 7, 8, 8, 9, 9,10,10,
+ 	13,13,16,14,16, 7, 7, 8, 8, 9, 9,10,10,13,13,15,
+ 	13,16,10,10, 8, 8,10,10,11,11,12,12,15,14,16,11,
+ 	11, 8, 8,10,10,11,11,12,12,14,13,16,16,16,10,11,
+ 	10,10,12,12,14,13,13,13,16,16,16,10, 9,10, 7,13,
+ 	12,13,13,13,13,16,16,16,14,15,11,11,12,12,13,13,
+ 	15,14,16,16,16,16,14,11, 9,12, 9,15,13,13,14,16,
+ 	16,16,16,16,13,13,12,12,14,15,16,15,16,16,15,16,
+ 	16,13,12,12,11,15,13,14,15,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p9_1[] = {
+ 	-93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 25.5, 
+ 	42.5, 59.5, 76.5, 93.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p9_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p9_1 = {
+ 	_vq_quantthresh__44c2_s_p9_1,
+ 	_vq_quantmap__44c2_s_p9_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c2_s_p9_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c2_s_p9_1,
+ 	1, -522616832, 1620115456, 4, 0,
+ 	_vq_quantlist__44c2_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c2_s_p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c2_s_p9_2[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9,
+ 	 9,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9,10, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10,11,10, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10,10,10, 7, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,11,11, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 8, 8, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,11,11,10,11,10, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,10, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10,11,11,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,11,10,10,11,
+ 	10,10,11, 9, 9,10,10, 9, 9,10,10, 9, 9,10,10,10,
+ 	11,10,11,10,10, 9, 9,10, 9, 9, 9, 9, 9, 9,10,10,
+ 	10,10,11,10,10, 9,10, 9, 9, 9, 9,10, 9, 9, 9,10,
+ 	10,10,11,11,10,10,10,10, 9, 9,10, 9, 9, 9,10, 9,
+ 	10,10,10,10,11,10,11,11,10, 9, 9, 9, 9, 9, 9, 9,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c2_s_p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c2_s_p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c2_s_p9_2 = {
+ 	_vq_quantthresh__44c2_s_p9_2,
+ 	_vq_quantmap__44c2_s_p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c2_s_p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c2_s_p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c2_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c2_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c2_s_short[] = {
+ 	 9, 9,12,11,11,11,12,12,12,13, 6, 2, 9, 4, 7, 6,
+ 	 8,11,15,17,12, 7, 8, 9, 7, 9,10,13,15,17,11, 4,
+ 	12, 4, 9, 5, 8,11,16,17,12, 6, 7, 6, 6, 6, 8,11,
+ 	15,17,11, 5, 9, 5, 6, 5, 6,10,15,15,12, 7,11, 7,
+ 	 7, 6, 7,10,13,16,13, 8,11, 9, 8, 6, 7,10,12,16,
+ 	13, 9, 9, 8, 5, 5, 6, 9,12,14,16,10, 9, 9, 6, 5,
+ 	 6, 8,11,14,
+ };
+ 
+ static static_codebook _huff_book__44c2_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c2_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c3_s_long[] = {
+ 	 4, 5,11,10,12,10,10,10,11,12, 4, 2,11, 5,11, 6,
+ 	 7, 9,13,16,11,11, 7,11, 6, 8, 8, 9,11,12,10, 5,
+ 	11, 6,10, 7, 9,11,16,16,14, 9, 6, 9, 4, 5, 7, 8,
+ 	11,13,10, 6, 7, 7, 5, 5, 6, 8,10,11,10, 7, 8, 8,
+ 	 6, 6, 5, 7, 9,10,10, 9, 8,11, 8, 7, 6, 6, 7,10,
+ 	10,12,10,14, 9, 9, 7, 7, 7, 9,10,14,11,16,12,12,
+ 	 9, 8, 8, 9,
+ };
+ 
+ static static_codebook _huff_book__44c3_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c3_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p1_0[] = {
+ 	 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0,
+ 	 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 	 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9,10,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8,10, 9, 0,
+ 	 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+ 	 0, 0, 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p1_0 = {
+ 	_vq_quantthresh__44c3_s_p1_0,
+ 	_vq_quantmap__44c3_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c3_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__44c3_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c3_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p2_0[] = {
+ 	 2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0,
+ 	 8, 7, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 8,
+ 	 7, 0, 0, 0, 7, 7, 0, 0, 0,10, 9, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 5, 6, 0, 0, 0, 7, 8, 0, 0, 0, 7, 7, 0,
+ 	 0, 0, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0,
+ 	 0, 7, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5,
+ 	 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9,
+ 	 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 5, 8, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7,
+ 	 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 8, 0,
+ 	 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 9,10, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0,
+ 	10,10, 0, 0, 0, 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 9,
+ 	 9, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p2_0 = {
+ 	_vq_quantthresh__44c3_s_p2_0,
+ 	_vq_quantmap__44c3_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c3_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c3_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c3_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p3_0[] = {
+ 	 2, 3, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 4, 4, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 8, 8,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p3_0 = {
+ 	_vq_quantthresh__44c3_s_p3_0,
+ 	_vq_quantmap__44c3_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c3_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c3_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c3_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p4_0[] = {
+ 	 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
+ 	 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 7, 0, 0, 0, 0, 0, 0, 0, 8, 7, 0, 0, 0, 0, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p4_0 = {
+ 	_vq_quantthresh__44c3_s_p4_0,
+ 	_vq_quantmap__44c3_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c3_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c3_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c3_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p5_0[] = {
+ 	 2, 3, 3, 5, 5, 7, 7, 9, 8, 0, 4, 4, 7, 7, 7, 7,
+ 	 9, 9, 0, 5, 5, 6, 7, 7, 7, 9, 9, 0, 6, 6, 7, 7,
+ 	 7, 7, 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0,
+ 	 8, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
+ 	 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p5_0 = {
+ 	_vq_quantthresh__44c3_s_p5_0,
+ 	_vq_quantmap__44c3_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c3_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c3_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c3_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p6_0[] = {
+ 	 2, 3, 3, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+ 	11, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	11,11, 0, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,11,11, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10, 9,
+ 	10,10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10,
+ 	 9,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,12,11,12,12, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8, 8,
+ 	 9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8,
+ 	 8, 9, 9,10,10,11,11,12,12,13,12, 0, 0, 0, 0, 0,
+ 	 9, 9,10,10,11,10,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,10,10,11,11,12,12,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0,10,10,11,11,12,12,12,12,13,13, 0, 0,
+ 	 0, 0, 0, 0, 0,10,10,11,11,11,11,12,12,13,13, 0,
+ 	 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,12,13,13,13,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p6_0 = {
+ 	_vq_quantthresh__44c3_s_p6_0,
+ 	_vq_quantmap__44c3_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c3_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c3_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c3_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 	 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10,
+ 	10,11,10,10, 6, 9, 9,10,10,10,10, 9, 9, 6, 9, 9,
+ 	10,10,10,10, 9, 9, 7,10,10,10,11,11,11,10,11, 6,
+ 	 9, 9,10,10, 9,11,10,10, 6, 9, 9,10, 9, 9,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p7_0 = {
+ 	_vq_quantthresh__44c3_s_p7_0,
+ 	_vq_quantmap__44c3_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c3_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c3_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c3_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6,
+ 	 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 	 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
+ 	10,10,10, 8, 8, 8, 8, 8, 9,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p7_1 = {
+ 	_vq_quantthresh__44c3_s_p7_1,
+ 	_vq_quantmap__44c3_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c3_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c3_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c3_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 7, 8, 8, 8, 9, 9,10,10, 6, 5, 5,
+ 	 7, 7, 8, 8, 9, 9, 9, 9,10,10, 7, 5, 5, 7, 7, 8,
+ 	 8, 9, 9, 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,11,12, 9, 9, 9,10,10,10,11,11,11,12, 0,13,
+ 	13, 9, 9, 9, 9,10,10,11,11,12,12, 0, 0, 0,10, 9,
+ 	 9, 9,10,11,11,11,12,12, 0, 0, 0,10,10, 9, 9,11,
+ 	11,11,11,12,13, 0, 0, 0,13,13,10,10,11,11,12,12,
+ 	13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
+ 	 0, 0, 0, 0,12,12,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0,12,12,11,11,12,12,13,13,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p8_0 = {
+ 	_vq_quantthresh__44c3_s_p8_0,
+ 	_vq_quantmap__44c3_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c3_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c3_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c3_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p8_1[] = {
+ 	 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p8_1 = {
+ 	_vq_quantthresh__44c3_s_p8_1,
+ 	_vq_quantmap__44c3_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c3_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c3_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c3_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p9_0[] = {
+ 	 1, 4, 4,10,10,10,10,10,10,10,10,10,10, 5,10, 7,
+ 	10,10,10,10,10,10,10,10,10,10, 5, 8, 6,10,10,10,
+ 	10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p9_0[] = {
+ 	-1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 382.5, 
+ 	637.5, 892.5, 1147.5, 1402.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p9_0 = {
+ 	_vq_quantthresh__44c3_s_p9_0,
+ 	_vq_quantmap__44c3_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c3_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c3_s_p9_0,
+ 	1, -514332672, 1627381760, 4, 0,
+ 	_vq_quantlist__44c3_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p9_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 9, 9,11,11,11,12,12,12, 6,
+ 	 5, 5, 7, 7, 8, 8,10, 9,11,11,13,12,13,14, 6, 5,
+ 	 5, 7, 7, 8, 8,10,10,11,11,12,12,13,13,17, 7, 7,
+ 	 8, 8, 9, 9,10,10,12,12,14,13,14,14,17, 8, 7, 8,
+ 	 7, 9, 9,10,10,12,12,13,13,13,14,17,11,11, 8, 8,
+ 	10,10,11,11,12,12,13,13,15,14,17,11,11, 8, 7,10,
+ 	10,11,11,12,12,13,14,14,13,17,17,17,10,11,10,10,
+ 	12,12,13,12,13,13,14,14,17,16,16,10,10,11, 9,13,
+ 	12,13,13,13,13,14,14,16,16,15,13,15,11,12,12,12,
+ 	14,14,14,14,14,15,16,16,16,14,14,11, 9,12,10,13,
+ 	13,14,14,14,14,16,16,16,16,16,12,13,12,12,13,14,
+ 	14,14,15,15,15,16,16,15,16,13,11,13,10,14,12,15,
+ 	14,16,14,15,16,16,16,16,15,15,13,13,13,13,14,14,
+ 	16,16,16,16,16,15,16,16,14,13,12,13,13,14,16,16,
+ 	16,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p9_1[] = {
+ 	-110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 
+ 	25.5, 42.5, 59.5, 76.5, 93.5, 110.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p9_1 = {
+ 	_vq_quantthresh__44c3_s_p9_1,
+ 	_vq_quantmap__44c3_s_p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44c3_s_p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__44c3_s_p9_1,
+ 	1, -522338304, 1620115456, 4, 0,
+ 	_vq_quantlist__44c3_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c3_s_p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c3_s_p9_2[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9,
+ 	 8,10, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9,10, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9,
+ 	 9, 9, 9,10, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10,10,10, 8, 7, 8, 8, 9, 8, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,10, 8, 8, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,11, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,11,10,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,
+ 	10,10,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
+ 	11,10,11,10, 9, 9, 9,10, 9, 9, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10, 9,
+ 	10,10,10,10,11,10,11,10,10, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44c3_s_p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c3_s_p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c3_s_p9_2 = {
+ 	_vq_quantthresh__44c3_s_p9_2,
+ 	_vq_quantmap__44c3_s_p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c3_s_p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c3_s_p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c3_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c3_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c3_s_short[] = {
+ 	10,10,13,12,13,12,12,12,12,13, 8, 3,11, 5,10, 5,
+ 	 7,11,14,16,11, 6, 9, 8, 7, 7, 9,12,15,16,12, 4,
+ 	12, 4,10, 5, 8,12,15,16,12, 6, 8, 7, 5, 5, 7,11,
+ 	14,15,11, 4, 9, 4, 6, 4, 6, 9,13,15,10, 6,10, 7,
+ 	 7, 5, 6, 9,13,15,12, 9,11, 9, 8, 6, 7, 9,12,15,
+ 	13,11,10, 9, 6, 5, 5, 8,11,14,16,12,11,10, 6, 5,
+ 	 6, 8,10,14,
+ };
+ 
+ static static_codebook _huff_book__44c3_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c3_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c4_s_long[] = {
+ 	 3, 5,11,11,13,11,11,11,12,12, 5, 2,11, 6,10, 7,
+ 	 8,10,13,16,10, 9, 6,10, 6, 7, 8, 9,11,12,11, 5,
+ 	11, 7,10, 8,10,12,15,17,12, 8, 5, 9, 4, 5, 7, 8,
+ 	10,12,10, 6, 7, 8, 5, 5, 6, 8,10,11,10, 8, 8, 9,
+ 	 6, 6, 6, 7, 9,10,11,10, 9,11, 8, 7, 6, 6, 7, 9,
+ 	11,13,10,15, 9, 9, 7, 7, 7, 8,10,15,11,17,11,11,
+ 	 9, 8, 7, 8,
+ };
+ 
+ static static_codebook _huff_book__44c4_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c4_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p1_0[] = {
+ 	 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0,
+ 	 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0, 0,
+ 	 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 8,10, 8, 0, 0, 0, 0, 0, 0, 8, 9,10,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8,10, 9, 0,
+ 	 0, 0, 0, 0, 0, 8, 8,10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+ 	 0, 0, 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p1_0 = {
+ 	_vq_quantthresh__44c4_s_p1_0,
+ 	_vq_quantmap__44c4_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c4_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__44c4_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c4_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p2_0[] = {
+ 	 2, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 0, 0, 0,
+ 	 7, 7, 0, 0, 0, 0, 0, 0, 0, 5, 6, 6, 0, 0, 0, 8,
+ 	 7, 0, 0, 0, 7, 7, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 6, 6, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0,
+ 	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 7, 7, 0, 0,
+ 	 0, 7, 7, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5,
+ 	 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9,
+ 	 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 5, 8, 7, 0, 0, 0, 7, 7, 0, 0, 0, 7, 7,
+ 	 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 5, 7, 8, 0,
+ 	 0, 0, 7, 7, 0, 0, 0, 7, 7, 0, 0, 0, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 7,10,10, 0, 0, 0, 9, 9, 0, 0, 0, 9, 9, 0, 0, 0,
+ 	10,10, 0, 0, 0, 0, 0, 0, 0, 7,10,10, 0, 0, 0, 9,
+ 	 9, 0, 0, 0, 9, 9, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p2_0 = {
+ 	_vq_quantthresh__44c4_s_p2_0,
+ 	_vq_quantmap__44c4_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c4_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c4_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c4_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p3_0[] = {
+ 	 2, 3, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p3_0 = {
+ 	_vq_quantthresh__44c4_s_p3_0,
+ 	_vq_quantmap__44c4_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c4_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c4_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c4_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p4_0[] = {
+ 	 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
+ 	 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 8, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p4_0 = {
+ 	_vq_quantthresh__44c4_s_p4_0,
+ 	_vq_quantmap__44c4_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c4_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c4_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c4_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p5_0[] = {
+ 	 2, 3, 3, 6, 6, 7, 7, 9, 9, 0, 4, 4, 7, 7, 7, 7,
+ 	 9, 9, 0, 4, 4, 7, 7, 7, 7, 9, 9, 0, 6, 6, 7, 7,
+ 	 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
+ 	 8, 8, 8, 8,10,10, 0, 0, 0, 8, 8, 8, 8,10,10, 0,
+ 	 0, 0,10,10, 9, 9,11,11, 0, 0, 0, 0, 0, 9, 9,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p5_0 = {
+ 	_vq_quantthresh__44c4_s_p5_0,
+ 	_vq_quantmap__44c4_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c4_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c4_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c4_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p6_0[] = {
+ 	 2, 4, 4, 6, 6, 8, 8, 8, 8, 9, 9,10, 9,10,10,11,
+ 	11, 0, 4, 4, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	11,11, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,12,12, 0, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10, 9,
+ 	10,11,11,11,12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9,10,
+ 	10,11,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,11,12,12, 0, 0, 0, 0, 0, 8, 8,
+ 	 9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0, 8,
+ 	 8, 9, 9,10,10,11,11,12,12,12,12, 0, 0, 0, 0, 0,
+ 	 9, 9,10,10,11,10,11,11,12,12,12,12, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,10,10,11,11,12,12,13,12, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,11,11,11,12,12,12,13,12, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,11,11,11,11,12,12,13,13, 0,
+ 	 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,12,12,13,13,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p6_0 = {
+ 	_vq_quantthresh__44c4_s_p6_0,
+ 	_vq_quantmap__44c4_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c4_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c4_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c4_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 	 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10,
+ 	10,11,10,10, 6, 9, 9,10,10,10,10,10, 9, 6, 9, 9,
+ 	10, 9,10,11, 9, 9, 7,10,10,11,11,11,11,10,10, 6,
+ 	 9, 9,10, 9, 9,10,10, 9, 6, 9, 9,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p7_0 = {
+ 	_vq_quantthresh__44c4_s_p7_0,
+ 	_vq_quantmap__44c4_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c4_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c4_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c4_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6,
+ 	 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 	 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 9,10,10,
+ 	10,10,10, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p7_1 = {
+ 	_vq_quantthresh__44c4_s_p7_1,
+ 	_vq_quantmap__44c4_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c4_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c4_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c4_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 8, 8, 9, 9,10,10, 6, 5, 5,
+ 	 7, 7, 8, 8, 9, 9,10,10,11,11, 7, 5, 5, 7, 7, 8,
+ 	 8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,12,12, 9, 9, 9, 9,10,10,10,10,11,11, 0,12,
+ 	12, 9, 8, 9, 9,10,10,11,11,12,11, 0, 0, 0, 9,10,
+ 	 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0,13,13,10,10,10,11,12,12,
+ 	12,12, 0, 0, 0,14,14,10,10,11,11,11,11,12,12, 0,
+ 	 0, 0, 0, 0,11,12,11,11,12,12,12,13, 0, 0, 0, 0,
+ 	 0,12,12,11,11,12,12,13,13,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p8_0 = {
+ 	_vq_quantthresh__44c4_s_p8_0,
+ 	_vq_quantmap__44c4_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c4_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c4_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c4_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p8_1[] = {
+ 	 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p8_1 = {
+ 	_vq_quantthresh__44c4_s_p8_1,
+ 	_vq_quantmap__44c4_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c4_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c4_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c4_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p9_0[] = {
+ 	 1, 3, 3,10,10,10,10,10,10,10,10,10,10, 5, 7, 7,
+ 	10,10,10,10,10,10,10,10,10,10, 5, 7, 8,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p9_0[] = {
+ 	-1732.5, -1417.5, -1102.5, -787.5, -472.5, -157.5, 157.5, 472.5, 
+ 	787.5, 1102.5, 1417.5, 1732.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p9_0 = {
+ 	_vq_quantthresh__44c4_s_p9_0,
+ 	_vq_quantmap__44c4_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c4_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c4_s_p9_0,
+ 	1, -513964032, 1628680192, 4, 0,
+ 	_vq_quantlist__44c4_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p9_1[] = {
+ 	 1, 4, 4, 5, 6, 7, 7, 9, 9,11,11,12,12,12,13, 6,
+ 	 5, 5, 6, 7, 8, 8,10,10,11,11,13,13,13,13, 6, 5,
+ 	 5, 7, 7, 8, 8,11,10,11,11,12,13,12,13,17, 7, 7,
+ 	 8, 8, 9, 9,11,11,12,12,12,13,15,14,17, 7, 7, 8,
+ 	 8, 9, 9,11,10,12,12,13,13,14,13,17,11,12, 9, 9,
+ 	10,10,12,12,13,13,14,14,14,14,17,12,11, 9, 8,11,
+ 	10,11,12,13,13,13,14,14,14,17,17,17,11,11,11,11,
+ 	13,13,13,13,14,13,15,14,17,17,17,11,10,11, 9,13,
+ 	12,13,14,15,14,15,14,17,17,17,14,14,11,12,12,13,
+ 	14,14,16,15,15,15,17,17,17,15,15,12,11,13,11,13,
+ 	13,13,15,16,14,17,17,17,17,17,13,13,14,13,14,14,
+ 	15,15,16,15,17,17,17,17,17,14,14,14,12,14,12,16,
+ 	14,15,14,17,17,17,17,17,16,17,13,14,14,15,15,15,
+ 	17,15,17,17,17,17,17,16,17,13,14,14,14,15,17,15,
+ 	15,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p9_1[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p9_1 = {
+ 	_vq_quantthresh__44c4_s_p9_1,
+ 	_vq_quantmap__44c4_s_p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44c4_s_p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__44c4_s_p9_1,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__44c4_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c4_s_p9_2[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__44c4_s_p9_2[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,11, 5, 5, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,10,11, 5, 5, 7, 7, 7,
+ 	 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
+ 	 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10,
+ 	10,10,10,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9,10,10,10,10,10,10,11,11,11, 8, 8, 8, 8,
+ 	 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,11,11,
+ 	11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,
+ 	10,10,10,11,11,11, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,10,10,10,10,10,11,11,11,11,11, 8, 8, 9,
+ 	 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,11,11,11,
+ 	11,11, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
+ 	10,10,11,11,11,11,11, 9, 9, 9, 9, 9,10,10,10,10,
+ 	10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9, 9,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,
+ 	11,11,11, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,
+ 	10,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,11,11,11,11,11,11,11,10,10, 9,
+ 	10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,
+ 	11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
+ 	12,11,11,10,10,10,10,10,10,10,10,10,10,10,10,12,
+ 	11,12,12,11,11,11,11,11,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,10,
+ 	10,10,10,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44c4_s_p9_2[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__44c4_s_p9_2[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c4_s_p9_2 = {
+ 	_vq_quantthresh__44c4_s_p9_2,
+ 	_vq_quantmap__44c4_s_p9_2,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _44c4_s_p9_2 = {
+ 	2, 441,
+ 	_vq_lengthlist__44c4_s_p9_2,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__44c4_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c4_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c4_s_short[] = {
+ 	 4, 9,13,12,16,11,12,15,15,16, 4, 2,11, 5,10, 6,
+ 	 8,11,14,14,13,11, 8,11, 7, 8,10,13,17,17,10, 4,
+ 	11, 5, 9, 6, 9,13,17,17,13, 9, 6, 9, 5, 5, 7,11,
+ 	15,17,10, 5, 7, 6, 5, 4, 7,10,15,15,10, 7, 9, 8,
+ 	 7, 6, 7,10,14,13,13,10,11,10, 8, 7, 8,10,14,14,
+ 	12,11,10, 9, 6, 5, 6, 9,13,17,14,13,11,10, 6, 6,
+ 	 6, 8,11,16,
+ };
+ 
+ static static_codebook _huff_book__44c4_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c4_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c5_s_long[] = {
+ 	 3, 6, 9,14,11,13,12,12,12,12, 6, 3, 5, 8, 6, 8,
+ 	10,11,12,14, 9, 5, 4,10, 5, 7, 8, 9,11,12,13, 8,
+ 	10, 9, 9, 9,12,15,16,17,10, 6, 5, 9, 3, 5, 6, 8,
+ 	10,12,10, 8, 7, 9, 5, 5, 6, 8,10,11,10, 9, 8,11,
+ 	 6, 6, 6, 7, 8,10,12,11, 9,13, 8, 7, 6, 6, 7, 9,
+ 	11,13,10,15, 9, 9, 7, 7, 7, 8,10,15,10,17,11,10,
+ 	 9, 8, 7, 7,
+ };
+ 
+ static static_codebook _huff_book__44c5_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c5_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p1_0[] = {
+ 	 2, 4, 4, 0, 0, 0, 0, 0, 0, 4, 7, 6, 0, 0, 0, 0,
+ 	 0, 0, 4, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 9, 8, 0, 0,
+ 	 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 9, 8, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+ 	 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
+ 	 0, 0, 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p1_0 = {
+ 	_vq_quantthresh__44c5_s_p1_0,
+ 	_vq_quantmap__44c5_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c5_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__44c5_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c5_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p2_0[] = {
+ 	 2, 4, 4, 0, 0, 0, 6, 5, 0, 0, 0, 5, 5, 0, 0, 0,
+ 	 7, 7, 0, 0, 0, 0, 0, 0, 0, 4, 6, 5, 0, 0, 0, 8,
+ 	 7, 0, 0, 0, 8, 8, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 5, 6, 0, 0, 0, 7, 8, 0, 0, 0, 7, 8, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 5, 8, 7, 0, 0, 0, 8, 8, 0, 0,
+ 	 0, 8, 8, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 6,
+ 	 7, 8, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,
+ 	10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 8, 7, 0, 0, 0, 8, 8, 0, 0, 0, 8, 8,
+ 	 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 6, 7, 8, 0,
+ 	 0, 0, 8, 8, 0, 0, 0, 8, 8, 0, 0, 0,10,10, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 9, 9, 0, 0, 0,10,10, 0, 0, 0,10,10, 0, 0, 0,
+ 	10,10, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,10,
+ 	10, 0, 0, 0,10,10, 0, 0, 0,10,10, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p2_0 = {
+ 	_vq_quantthresh__44c5_s_p2_0,
+ 	_vq_quantmap__44c5_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c5_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c5_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c5_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p3_0[] = {
+ 	 2, 4, 3, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 4, 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p3_0 = {
+ 	_vq_quantthresh__44c5_s_p3_0,
+ 	_vq_quantmap__44c5_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c5_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c5_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c5_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p4_0[] = {
+ 	 2, 3, 3, 6, 6, 0, 0, 0, 0, 0, 4, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 4, 4, 6, 6, 0, 0, 0, 0, 0, 5, 5, 6, 6,
+ 	 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0,
+ 	 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p4_0 = {
+ 	_vq_quantthresh__44c5_s_p4_0,
+ 	_vq_quantmap__44c5_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c5_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c5_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c5_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p5_0[] = {
+ 	 2, 3, 4, 5, 6, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
+ 	 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 6, 6, 7, 7,
+ 	 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0, 0, 0,
+ 	 7, 7, 8, 8,10,10, 0, 0, 0, 7, 8, 8, 8,10,10, 0,
+ 	 0, 0, 9, 9, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p5_0 = {
+ 	_vq_quantthresh__44c5_s_p5_0,
+ 	_vq_quantmap__44c5_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c5_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c5_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c5_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p6_0[] = {
+ 	 2, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,12,
+ 	12, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	12,12, 0, 4, 4, 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,12,12, 0, 6, 6, 7, 7, 8, 8, 9,10,10,10,11,11,
+ 	11,12,12,12, 0, 0, 0, 7, 7, 8, 8,10,10,10,10,11,
+ 	11,12,12,12,12, 0, 0, 0, 7, 7, 9, 9,10,10,10,10,
+ 	11,11,12,12,12,12, 0, 0, 0, 7, 7, 8, 9,10,10,10,
+ 	10,11,11,12,12,12,13, 0, 0, 0, 8, 8, 9, 9,10,10,
+ 	10,10,11,11,12,12,13,12, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8,
+ 	 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8,
+ 	 8, 9, 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	 9, 9,10,10,11,11,11,12,12,12,13,13, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,11,11,11,12,12,12,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,11,11,12,12,12,13,13,13, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,11,11,12,12,13,12,13,13, 0,
+ 	 0, 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,13,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p6_0 = {
+ 	_vq_quantthresh__44c5_s_p6_0,
+ 	_vq_quantmap__44c5_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c5_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c5_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c5_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 	 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10,
+ 	10,11,10,10, 6, 9, 9,10,10, 9,11,10,10, 6, 9, 9,
+ 	10, 9,10,11,10, 9, 7,10,10,11,11,11,11,10,10, 6,
+ 	 9, 9,10,10, 9,10, 9, 9, 6, 9, 9,10,10,10,11, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p7_0 = {
+ 	_vq_quantthresh__44c5_s_p7_0,
+ 	_vq_quantmap__44c5_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c5_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c5_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c5_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6,
+ 	 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,10, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 8, 8, 8, 8, 8, 8,10,10,10, 7, 7, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 	 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 9, 8,10,10,
+ 	10,10,10, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p7_1 = {
+ 	_vq_quantthresh__44c5_s_p7_1,
+ 	_vq_quantmap__44c5_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c5_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c5_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c5_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 8, 8, 9, 9,10,10, 6, 5, 5,
+ 	 7, 7, 8, 8, 9, 9,10,10,10,10, 7, 5, 5, 7, 7, 8,
+ 	 8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,11,12, 9, 9, 9, 9, 9,10,10,10,11,11, 0,13,
+ 	12, 9, 9, 9, 9,10,10,11,11,11,11, 0, 0, 0, 9,10,
+ 	 9, 9,10,10,11,11,12,11, 0, 0, 0,10,10, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0,13,13,10,10,11,11,11,12,
+ 	12,12, 0, 0, 0,14,14,10,10,11,11,11,11,12,12, 0,
+ 	 0, 0, 0, 0,12,12,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0,12,12,11,11,12,12,13,13,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p8_0 = {
+ 	_vq_quantthresh__44c5_s_p8_0,
+ 	_vq_quantmap__44c5_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c5_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c5_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c5_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p8_1[] = {
+ 	 2, 4, 4, 5, 5, 6, 5, 5, 5, 5, 6, 4, 5, 5, 5, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p8_1 = {
+ 	_vq_quantthresh__44c5_s_p8_1,
+ 	_vq_quantmap__44c5_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c5_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c5_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c5_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p9_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p9_0[] = {
+ 	 1, 3, 3,11,11,11,11,11,11,11,11,11,11,11,11, 5,
+ 	 7, 7,11,11,11,11,11,11,11,11,11,11,11,11, 5, 9,
+ 	 7,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p9_0[] = {
+ 	-2320.5, -1963.5, -1606.5, -1249.5, -892.5, -535.5, -178.5, 178.5, 
+ 	535.5, 892.5, 1249.5, 1606.5, 1963.5, 2320.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p9_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p9_0 = {
+ 	_vq_quantthresh__44c5_s_p9_0,
+ 	_vq_quantmap__44c5_s_p9_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44c5_s_p9_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44c5_s_p9_0,
+ 	1, -512522752, 1628852224, 4, 0,
+ 	_vq_quantlist__44c5_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p9_1[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p9_1[] = {
+ 	 1, 4, 4, 6, 6, 8, 7, 9, 9,10,10,11,11,12,12,13,
+ 	13, 6, 5, 5, 6, 6, 8, 8,10,10,11,11,12,12,13,13,
+ 	13,13, 6, 5, 5, 7, 7, 8, 8,10,10,11,11,12,12,13,
+ 	13,13,13,18, 7, 7, 8, 8, 9, 9,10,11,11,11,12,12,
+ 	13,13,13,14,18, 7, 7, 8, 8, 9, 9,11,10,12,12,13,
+ 	13,13,13,14,15,18,12,12, 9, 9,10,10,11,11,12,12,
+ 	13,13,13,14,14,14,18,12,12, 9, 8,10,10,11,11,12,
+ 	12,14,13,13,14,15,15,18,16,18,11,11,11,11,12,12,
+ 	13,13,13,14,14,14,14,15,17,18,17,11,10,11, 9,12,
+ 	13,13,13,14,14,13,14,14,14,18,18,18,13,14,11,12,
+ 	12,12,13,14,13,13,14,15,16,15,18,18,18,15,13,12,
+ 	 9,12,11,13,14,14,15,14,14,16,14,18,18,18,18,18,
+ 	12,13,13,13,13,14,15,14,15,15,15,15,18,18,18,18,
+ 	17,14,12,13,11,14,12,15,14,14,15,16,15,18,18,18,
+ 	17,18,15,18,13,13,14,13,15,14,16,15,17,16,18,18,
+ 	17,18,18,15,17,14,13,14,12,14,14,15,15,15,15,18,
+ 	18,18,17,17,18,18,14,15,14,14,14,14,15,14,16,16,
+ 	17,18,18,18,18,17,17,15,15,13,13,15,13,15,13,15,
+ 	15,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p9_1[] = {
+ 	-157.5, -136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 
+ 	10.5, 31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 157.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p9_1[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p9_1 = {
+ 	_vq_quantthresh__44c5_s_p9_1,
+ 	_vq_quantmap__44c5_s_p9_1,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c5_s_p9_1 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c5_s_p9_1,
+ 	1, -520814592, 1620377600, 5, 0,
+ 	_vq_quantlist__44c5_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c5_s_p9_2[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__44c5_s_p9_2[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,11, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,10,11, 5, 5, 7, 7, 7,
+ 	 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
+ 	 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,11,11,11, 8, 8, 8, 8,
+ 	 8, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,11,11,
+ 	11, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,10,10,10,
+ 	10,10,10,11,11,11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9,10,10,10,10,10,10,10,11,11,11,11,11, 8, 8, 9,
+ 	 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,11,11,11,
+ 	11,11, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,
+ 	10,10,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,10,10,
+ 	10,10,10,10,10,10,10,11,11,11,11,11, 9, 9, 9, 9,
+ 	 9, 9,10,10,10,10,10,10,10,10,10,10,11,11,11,11,
+ 	11,11,11, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
+ 	10,11,11,11,11,11,11,11,10, 9,10,10,10,10,10,10,
+ 	10,10,10, 9,10,10,11,11,11,11,11,11,11, 9, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,
+ 	11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	11,11,11,11,11,11,11,11,11,10,10,10,10,10, 9,10,
+ 	10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
+ 	11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,11,
+ 	11,11,11,11,11,11,11,11,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,10,
+ 	10,10,10,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44c5_s_p9_2[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__44c5_s_p9_2[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c5_s_p9_2 = {
+ 	_vq_quantthresh__44c5_s_p9_2,
+ 	_vq_quantmap__44c5_s_p9_2,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _44c5_s_p9_2 = {
+ 	2, 441,
+ 	_vq_lengthlist__44c5_s_p9_2,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__44c5_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c5_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c5_s_short[] = {
+ 	 3, 9,10,15,10,10,11,15,15,17, 4, 5, 7, 8, 7, 7,
+ 	 9,13,15,16, 7, 6, 6,10, 6, 8, 9,12,12,16,10, 8,
+ 	11, 8, 8, 7,11,15,17,17, 8, 5, 5, 8, 3, 4, 6,10,
+ 	15,17,10, 7, 7, 7, 4, 4, 5,10,14,17,10, 9, 8, 9,
+ 	 6, 5, 6,10,14,17,12,12,11,12, 9, 8, 8,11,14,17,
+ 	13,14,13,10, 7, 5, 6, 9,13,17,14,14,14,10, 7, 5,
+ 	 6, 7,10,15,
+ };
+ 
+ static static_codebook _huff_book__44c5_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c5_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c6_s_long[] = {
+ 	 3, 8,11,13,13,13,12,12,13,18, 6, 3, 4, 7, 9, 9,
+ 	11,11,13,16, 9, 4, 3, 5, 7, 7, 9,10,14,18,11, 7,
+ 	 4, 4, 6, 6, 8,10,14,15,11, 9, 6, 6, 6, 6, 8,10,
+ 	13,15,10, 9, 7, 6, 6, 6, 7, 8,12,12,12,10, 9, 8,
+ 	 7, 6, 6, 7,11,12,11,10,10, 9, 9, 7, 7, 6, 9,12,
+ 	12,12,13,13,13,10, 9, 8,10,12,13,14,16,16,17,14,
+ 	12,11,11,13,
+ };
+ 
+ static static_codebook _huff_book__44c6_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c6_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p1_0[] = {
+ 	 1, 5, 5, 0, 5, 5, 0, 5, 5, 5, 8, 7, 0, 9, 8, 0,
+ 	 8, 8, 6, 7, 8, 0, 8, 9, 0, 8, 8, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 5, 8, 8, 0, 8, 8, 0, 8, 8, 5, 8, 8,
+ 	 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 	 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9, 0, 8, 8, 0, 8,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p1_0 = {
+ 	_vq_quantthresh__44c6_s_p1_0,
+ 	_vq_quantmap__44c6_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c6_s_p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c6_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c6_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p2_0[] = {
+ 	 3, 5, 5, 8, 8, 0, 5, 5, 9, 9, 0, 5, 5, 9, 9, 0,
+ 	 7, 7,10,10, 0, 0, 0,10,10, 5, 7, 7, 9, 9, 0, 8,
+ 	 7,10, 9, 0, 8, 8,10,10, 0,10,10,11,11, 0, 0, 0,
+ 	11,11, 5, 7, 7, 9, 9, 0, 7, 8, 9,10, 0, 7, 8,10,
+ 	10, 0,10,10,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10,
+ 	 0,11,10,12,12, 0,11,11,12,12, 0,13,13,14,14, 0,
+ 	 0, 0,14,14, 8, 9, 9,10,11, 0,10,11,12,12, 0,11,
+ 	11,12,12, 0,13,13,14,14, 0, 0, 0,14,14, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 5, 8, 8,11,11, 0, 7, 7,10,10,
+ 	 0, 7, 7,10,10, 0, 9, 8,11,10, 0, 0, 0,11,11, 5,
+ 	 7, 8,11,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 8,
+ 	 9,10,11, 0, 0, 0,11,11, 9,10,10,12,12, 0,10,10,
+ 	12,11, 0,10,10,12,12, 0,12,12,13,13, 0, 0, 0,13,
+ 	13, 9,10,10,12,12, 0,10,10,11,12, 0,10,10,12,12,
+ 	 0,12,12,13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 5, 8, 7,11,10, 0, 7, 7,10,10, 0, 7, 7,
+ 	10,10, 0, 8, 9,11,11, 0, 0, 0,11,10, 5, 7, 8,10,
+ 	11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 8,11,11,
+ 	 0, 0, 0,11,11, 9,10,10,12,12, 0,10,10,12,12, 0,
+ 	10,10,12,12, 0,12,12,13,13, 0, 0, 0,13,13, 9, 9,
+ 	10,12,12, 0,10,10,12,12, 0,10,10,12,12, 0,12,12,
+ 	13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 7,10,10,13,13, 0, 9, 8,12,12, 0, 8, 9,12,12, 0,
+ 	10, 9,12,12, 0, 0, 0,12,12, 7,10,10,13,13, 0, 9,
+ 	 9,12,12, 0, 9, 8,12,12, 0, 9,10,12,12, 0, 0, 0,
+ 	12,12,10,11,11,14,14, 0,11,10,13,13, 0,11,11,13,
+ 	13, 0,12,12,13,13, 0, 0, 0,13,13,10,11,11,14,14,
+ 	 0,10,11,13,13, 0,11,11,13,13, 0,12,12,13,13, 0,
+ 	 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,
+ 	11,11,14,14, 0,11,11,13,13, 0,11,10,13,13, 0,12,
+ 	12,13,13, 0, 0, 0,13,13,10,11,11,14,14, 0,11,11,
+ 	13,13, 0,10,11,13,13, 0,12,12,13,13, 0, 0, 0,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p2_0 = {
+ 	_vq_quantthresh__44c6_s_p2_0,
+ 	_vq_quantmap__44c6_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c6_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c6_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c6_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p3_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p3_0[] = {
+ 	 2, 4, 4, 5, 5, 7, 7, 9, 9, 0, 4, 4, 6, 6, 7, 7,
+ 	 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6,
+ 	 8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0,
+ 	 7, 7, 8, 8,10,10, 0, 0, 0, 7, 7, 9, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p3_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p3_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p3_0 = {
+ 	_vq_quantthresh__44c6_s_p3_0,
+ 	_vq_quantmap__44c6_s_p3_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c6_s_p3_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c6_s_p3_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c6_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p4_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p4_0[] = {
+ 	 3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+ 	11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 8, 9,10,10,11,11,
+ 	11,11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
+ 	11,11,11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
+ 	11,11,12,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
+ 	10,11,11,12,12,12,12, 0, 0, 0, 6, 6, 7, 7, 9, 9,
+ 	10,10,11,11,12,12,12,13, 0, 0, 0, 0, 0, 7, 7, 9,
+ 	 9,10,10,11,11,12,12,12,13, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p4_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p4_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p4_0 = {
+ 	_vq_quantthresh__44c6_s_p4_0,
+ 	_vq_quantmap__44c6_s_p4_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c6_s_p4_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c6_s_p4_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c6_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p5_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p5_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 4, 7, 7, 9,10,10,10,
+ 	10,10, 4, 7, 7, 9,10,10,10,10,10, 5, 9, 9, 9,11,
+ 	11, 9,11,11, 7,10,10,11,12,11,12,12,12, 7,10,10,
+ 	11,12,12,12,12,12, 6,10,10, 9,11,11,10,11,11, 7,
+ 	10, 9,11,12,12,11,12,11, 7,10,10,11,12,12,11,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p5_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p5_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p5_0 = {
+ 	_vq_quantthresh__44c6_s_p5_0,
+ 	_vq_quantmap__44c6_s_p5_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c6_s_p5_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c6_s_p5_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c6_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p5_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p5_1[] = {
+ 	 3, 4, 4, 6, 6, 8, 8, 8, 8, 9, 9,11, 4, 4, 6, 6,
+ 	 8, 8, 9, 9, 9, 9,11, 4, 4, 6, 6, 8, 8, 9, 8, 9,
+ 	 9,12, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,12,12,12, 6,
+ 	 6, 8, 8, 9, 9, 9, 9,11,11,11, 7, 7, 8, 8, 9, 9,
+ 	 9, 9,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9,11,11,11,
+ 	 7, 7, 8, 8, 8, 8, 9, 9,11,11,11,11,11, 8, 8, 8,
+ 	 8, 9, 9,11,11,11,11,11, 7, 7, 8, 8, 8, 8,11,11,
+ 	11,11,11, 7, 7, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p5_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p5_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p5_1 = {
+ 	_vq_quantthresh__44c6_s_p5_1,
+ 	_vq_quantmap__44c6_s_p5_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c6_s_p5_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c6_s_p5_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c6_s_p5_1,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p5_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p6_0[] = {
+ 	 1, 4, 4, 6, 7, 8, 8, 8, 8, 9, 9,10,10, 5, 5, 5,
+ 	 7, 7, 9, 9, 9, 9,10,10,11,11, 6, 5, 5, 7, 7, 9,
+ 	 9, 9, 9,10,10,11,11, 0, 7, 7, 7, 7, 9, 9,10,10,
+ 	11,11,11,11, 0, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
+ 	12, 0,11,11, 8, 8,10, 9,10,11,11,11,12,12, 0,12,
+ 	12, 8, 8,10, 9,11,11,12,11,13,13, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p6_0 = {
+ 	_vq_quantthresh__44c6_s_p6_0,
+ 	_vq_quantmap__44c6_s_p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c6_s_p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c6_s_p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c6_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p6_1[] = {
+ 	 3, 4, 4, 5, 5, 6, 4, 4, 5, 5, 6, 4, 4, 5, 4, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p6_1 = {
+ 	_vq_quantthresh__44c6_s_p6_1,
+ 	_vq_quantmap__44c6_s_p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c6_s_p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c6_s_p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c6_s_p6_1,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p7_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 5, 5,
+ 	 7, 7, 8, 8, 9, 9,11,11,12,12, 6, 5, 5, 7, 7, 9,
+ 	 9, 9, 9,11,11,12,12,19, 7, 7, 7, 7, 9, 9,10,10,
+ 	11,11,12,12,19, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
+ 	12,19,11,11, 8, 8,10,10,11,11,11,12,12,12,19,12,
+ 	12, 8, 8,10, 9,11,11,12,12,13,12,19,19,19,11,11,
+ 	10,10,11,11,12,12,13,13,19,19,19,11,11,10,10,11,
+ 	11,12,12,13,13,19,19,19,14,14,11,11,11,12,13,13,
+ 	13,13,19,19,19,15,15,11,11,12,12,13,12,14,14,19,
+ 	19,19,19,18,13,13,12,12,13,13,14,14,18,18,18,18,
+ 	18,13,12,12,12,13,13,14,14,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p7_0[] = {
+ 	-60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 
+ 	27.5, 38.5, 49.5, 60.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p7_0 = {
+ 	_vq_quantthresh__44c6_s_p7_0,
+ 	_vq_quantmap__44c6_s_p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c6_s_p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c6_s_p7_0,
+ 	1, -523206656, 1618345984, 4, 0,
+ 	_vq_quantlist__44c6_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p7_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 9, 5, 5, 7, 7,
+ 	 7, 7, 7, 7, 8, 8, 9, 5, 5, 6, 6, 7, 7, 7, 7, 7,
+ 	 7, 9, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 9, 9, 9, 7,
+ 	 7, 7, 7, 7, 8, 7, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8,
+ 	 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 7, 7, 9, 9, 9,
+ 	 7, 7, 8, 8, 7, 7, 8, 8, 9, 9, 9, 8, 9, 8, 8, 7,
+ 	 7, 7, 7, 9, 9, 8, 8, 9, 8, 8, 7, 7, 8, 8, 9, 9,
+ 	 9, 9, 8, 7, 7, 7, 7, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p7_1 = {
+ 	_vq_quantthresh__44c6_s_p7_1,
+ 	_vq_quantmap__44c6_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c6_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c6_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c6_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p8_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p8_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 7, 7, 9, 9, 9,10,11,11, 6,
+ 	 5, 5, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11, 6, 5,
+ 	 5, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11,17, 8, 8,
+ 	 8, 8,10,10, 8, 9,10,10,11,11,12,11,17, 8, 8, 9,
+ 	 9,10,10, 9, 9,10,10,11,12,12,12,17,12,13, 9, 9,
+ 	10,10, 9,10,10,10,11,11,13,12,17,13,13,10, 9,10,
+ 	10,10,10,10,11,12,11,12,12,17,17,17, 9, 9, 9, 9,
+ 	10,10,11,11,11,12,12,13,17,17,17, 9, 9, 9, 9,11,
+ 	10,11,11,12,12,12,13,17,17,17,13,13,10,10,11,11,
+ 	12,11,12,13,13,13,17,17,17,14,13,10, 9,11, 9,12,
+ 	12,12,13,13,14,17,17,17,17,17,11,12,11,11,12,12,
+ 	13,14,13,14,17,17,17,17,17,12,10,11, 8,12,11,13,
+ 	14,14,14,17,17,16,16,16,13,15,11,12,12,13,13,13,
+ 	14,14,16,16,16,16,16,14,13,12, 9,13,10,14,13,14,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p8_0[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p8_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p8_0 = {
+ 	_vq_quantthresh__44c6_s_p8_0,
+ 	_vq_quantmap__44c6_s_p8_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44c6_s_p8_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44c6_s_p8_0,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__44c6_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p8_1[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p8_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9,
+ 	 9, 8, 9, 9, 9,11, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
+ 	 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
+ 	 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,11,10,11, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9,11,11,
+ 	11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10, 9,10, 9,
+ 	10,10, 9,11,11,11, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10, 9,10, 9, 9, 9, 9,11,11,11,11,11, 8, 8, 9,
+ 	 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,11,11,11,
+ 	11,11, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10,10, 9, 9,
+ 	 9, 9,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9,10,10,
+ 	 9,10, 9,10,10,10,10,11,11,11,11,11, 9, 9, 9, 9,
+ 	 9, 9,10,10,10,10, 9,10,10, 9,10, 9,11,11,11,11,
+ 	11,11,11, 9, 9, 9, 9,10, 9,10, 9, 9,10,10,10,10,
+ 	10,10,11,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,
+ 	 9,10, 9,10,10, 9,11,11,11,11,11,11,10, 9, 9, 9,
+ 	 9, 9,10, 9,10,10,10,10,10,10,10,11,11,11,11,11,
+ 	11,11, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	11,11,11,11,11,11,11,11,11, 9,10, 9,10, 9,10,10,
+ 	10,10,10,10,10,11,11,11,11,11,11,11,11,11,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
+ 	11,11,11,10,10, 9,10,10,10,10, 9,10, 9,10,10,11,
+ 	11,11,11,11,11,11,11,11,10,10,10, 9,10,10,10,10,
+ 	10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,10,
+ 	10, 9,10,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p8_1[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p8_1[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p8_1 = {
+ 	_vq_quantthresh__44c6_s_p8_1,
+ 	_vq_quantmap__44c6_s_p8_1,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _44c6_s_p8_1 = {
+ 	2, 441,
+ 	_vq_lengthlist__44c6_s_p8_1,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__44c6_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p9_0[] = {
+ 	 1, 4, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p9_0[] = {
+ 	-3503.5, -2866.5, -2229.5, -1592.5, -955.5, -318.5, 318.5, 955.5, 
+ 	1592.5, 2229.5, 2866.5, 3503.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p9_0 = {
+ 	_vq_quantthresh__44c6_s_p9_0,
+ 	_vq_quantmap__44c6_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c6_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c6_s_p9_0,
+ 	1, -511845376, 1630791680, 4, 0,
+ 	_vq_quantlist__44c6_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p9_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p9_1[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 7, 7, 8, 9,10,11, 6, 6, 6,
+ 	 7, 8, 8, 8, 7, 8, 9,10,11,10, 6, 5, 6, 7, 8, 8,
+ 	 8, 8, 8, 9,10,10,11,14, 9, 8, 8, 8, 9, 8, 8, 9,
+ 	10,10,12,11,14, 8, 8, 9, 8, 9, 8, 8, 8,11,10,11,
+ 	11,14,14,13, 8, 9, 9, 9, 9,10,11,11,12,12,13,12,
+ 	12, 8, 7,10, 9, 9, 9,11,11,11,10,13,13,13, 8, 9,
+ 	 9, 8,12,11,11,11,13,11,13,13,13, 9, 8, 9, 8,10,
+ 	10,11,10,11,10,13,13,13,12,12, 9,10,11,11,11,12,
+ 	13,12,13,13,13,13,12,10,10,10, 9,13,12,12,13,13,
+ 	13,13,13,13,12,12,10,10,12,12,13,13,13,13,13,13,
+ 	13,12,12,11,12,12,12,12,13,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p9_1[] = {
+ 	-269.5, -220.5, -171.5, -122.5, -73.5, -24.5, 24.5, 73.5, 
+ 	122.5, 171.5, 220.5, 269.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p9_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p9_1 = {
+ 	_vq_quantthresh__44c6_s_p9_1,
+ 	_vq_quantmap__44c6_s_p9_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c6_s_p9_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c6_s_p9_1,
+ 	1, -518889472, 1622704128, 4, 0,
+ 	_vq_quantlist__44c6_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c6_s_p9_2[] = {
+ 	24,
+ 	23,
+ 	25,
+ 	22,
+ 	26,
+ 	21,
+ 	27,
+ 	20,
+ 	28,
+ 	19,
+ 	29,
+ 	18,
+ 	30,
+ 	17,
+ 	31,
+ 	16,
+ 	32,
+ 	15,
+ 	33,
+ 	14,
+ 	34,
+ 	13,
+ 	35,
+ 	12,
+ 	36,
+ 	11,
+ 	37,
+ 	10,
+ 	38,
+ 	9,
+ 	39,
+ 	8,
+ 	40,
+ 	7,
+ 	41,
+ 	6,
+ 	42,
+ 	5,
+ 	43,
+ 	4,
+ 	44,
+ 	3,
+ 	45,
+ 	2,
+ 	46,
+ 	1,
+ 	47,
+ 	0,
+ 	48,
+ };
+ 
+ static long _vq_lengthlist__44c6_s_p9_2[] = {
+ 	 2, 4, 3, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 7, 6, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__44c6_s_p9_2[] = {
+ 	-23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, 
+ 	-15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, 
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ 	8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 
+ 	16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 
+ };
+ 
+ static long _vq_quantmap__44c6_s_p9_2[] = {
+ 	   47,   45,   43,   41,   39,   37,   35,   33,
+ 	   31,   29,   27,   25,   23,   21,   19,   17,
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,   18,   20,   22,   24,   26,   28,   30,
+ 	   32,   34,   36,   38,   40,   42,   44,   46,
+ 	   48,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c6_s_p9_2 = {
+ 	_vq_quantthresh__44c6_s_p9_2,
+ 	_vq_quantmap__44c6_s_p9_2,
+ 	49,
+ 	49
+ };
+ 
+ static static_codebook _44c6_s_p9_2 = {
+ 	1, 49,
+ 	_vq_lengthlist__44c6_s_p9_2,
+ 	1, -526909440, 1611661312, 6, 0,
+ 	_vq_quantlist__44c6_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c6_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c6_s_short[] = {
+ 	 4, 9,11,11,13,13,17,16,17,17, 4, 4, 6, 7, 9, 9,
+ 	12,15,17,17, 7, 5, 4, 5, 7, 8,11,12,17,17, 9, 6,
+ 	 4, 3, 5, 6,10,14,17,17,11, 8, 6, 4, 5, 6, 9,13,
+ 	17,17,11,10, 7, 5, 5, 5, 8,12,17,17,13,12, 9, 8,
+ 	 7, 6, 8,11,17,17,13,13, 9, 6, 6, 5, 6, 9,17,17,
+ 	17,16,10, 8, 7, 7, 8, 9,17,17,17,17,14,12,11,11,
+ 	11,13,17,17,
+ };
+ 
+ static static_codebook _huff_book__44c6_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c6_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c7_s_long[] = {
+ 	 3, 8,11,13,14,13,13,12,14,16, 6, 4, 5, 7, 9,10,
+ 	11,11,13,15,10, 4, 3, 5, 7, 7,10,10,14,16,11, 7,
+ 	 4, 4, 5, 6, 8,10,13,15,12, 9, 6, 5, 5, 6, 8, 9,
+ 	13,15,11, 9, 7, 6, 5, 5, 6, 8,11,13,11,10, 9, 8,
+ 	 7, 6, 6, 7,11,12,12,11,10, 9, 8, 7, 6, 6, 9,11,
+ 	12,12,12,12,12,10, 9, 8,10,12,12,14,15,16,16,14,
+ 	12,10,11,13,
+ };
+ 
+ static static_codebook _huff_book__44c7_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c7_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p1_0[] = {
+ 	 1, 5, 5, 0, 5, 5, 0, 5, 5, 6, 8, 7, 0, 9, 8, 0,
+ 	 8, 8, 5, 7, 8, 0, 8, 9, 0, 8, 8, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 5, 8, 8, 0, 8, 8, 0, 8, 8, 5, 8, 8,
+ 	 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 	 9, 8, 0, 8, 8, 0, 8, 8, 5, 8, 9, 0, 8, 8, 0, 8,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p1_0 = {
+ 	_vq_quantthresh__44c7_s_p1_0,
+ 	_vq_quantmap__44c7_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c7_s_p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c7_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c7_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p2_0[] = {
+ 	 3, 5, 5, 8, 8, 0, 5, 5, 9, 9, 0, 5, 5, 9, 9, 0,
+ 	 7, 7,10, 9, 0, 0, 0, 9,10, 5, 7, 7, 9, 9, 0, 8,
+ 	 7,10, 9, 0, 8, 7,10, 9, 0,10, 9,11,11, 0, 0, 0,
+ 	11,11, 6, 7, 7, 9, 9, 0, 7, 8, 9,10, 0, 7, 8,10,
+ 	10, 0, 9, 9,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10,
+ 	 0,11,10,12,12, 0,11,11,12,12, 0,13,13,14,14, 0,
+ 	 0, 0,14,14, 8, 9, 9,10,11, 0,10,11,11,12, 0,11,
+ 	11,12,12, 0,13,13,14,14, 0, 0, 0,14,14, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 5, 8, 7,11,11, 0, 7, 7,10,10,
+ 	 0, 7, 7,10,10, 0, 9, 8,11,10, 0, 0, 0,11,11, 5,
+ 	 7, 8,11,11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 8,
+ 	 9,10,11, 0, 0, 0,11,11, 9,10,10,12,12, 0,10,10,
+ 	12,11, 0,10,10,12,12, 0,12,12,13,13, 0, 0, 0,13,
+ 	13, 9,10,10,12,12, 0,10,10,11,12, 0,10,10,12,12,
+ 	 0,12,12,13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 5, 8, 7,11,10, 0, 7, 7,10,10, 0, 7, 7,
+ 	10,10, 0, 9, 9,11,11, 0, 0, 0,11,10, 5, 7, 8,10,
+ 	11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 9,11,11,
+ 	 0, 0, 0,10,11, 9,10, 9,12,11, 0,10,10,12,12, 0,
+ 	10,10,12,11, 0,12,12,13,13, 0, 0, 0,13,13, 9, 9,
+ 	10,11,12, 0,10,10,12,12, 0,10,10,11,12, 0,12,12,
+ 	13,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 9, 9,13,13, 0, 9, 8,12,12, 0, 8, 9,12,12, 0,
+ 	10, 9,12,12, 0, 0, 0,12,12, 7,10, 9,13,13, 0, 9,
+ 	 9,12,12, 0, 9, 8,12,12, 0, 9,10,12,12, 0, 0, 0,
+ 	12,12,10,11,11,14,14, 0,11,10,13,12, 0,11,11,13,
+ 	13, 0,12,12,13,13, 0, 0, 0,13,13,10,11,11,14,14,
+ 	 0,10,11,12,13, 0,11,11,13,13, 0,12,12,13,13, 0,
+ 	 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,
+ 	11,11,14,14, 0,11,11,13,13, 0,11,10,13,13, 0,12,
+ 	12,13,13, 0, 0, 0,13,13,10,11,11,14,14, 0,11,11,
+ 	13,13, 0,10,11,13,13, 0,12,12,13,13, 0, 0, 0,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p2_0 = {
+ 	_vq_quantthresh__44c7_s_p2_0,
+ 	_vq_quantmap__44c7_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c7_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c7_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c7_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p3_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p3_0[] = {
+ 	 2, 4, 4, 5, 5, 7, 7, 8, 8, 0, 4, 4, 6, 6, 7, 7,
+ 	 9, 9, 0, 4, 4, 6, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6,
+ 	 8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0,
+ 	 7, 7, 9, 9,10,10, 0, 0, 0, 7, 7, 9, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p3_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p3_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p3_0 = {
+ 	_vq_quantthresh__44c7_s_p3_0,
+ 	_vq_quantmap__44c7_s_p3_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c7_s_p3_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c7_s_p3_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c7_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p4_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p4_0[] = {
+ 	 3, 4, 4, 6, 5, 7, 7, 7, 7, 8, 8, 9, 9,10,10,11,
+ 	11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9,10,10,10,
+ 	11,11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,10,
+ 	11,11,11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
+ 	11,11,12,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
+ 	10,11,11,12,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
+ 	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
+ 	 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p4_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p4_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p4_0 = {
+ 	_vq_quantthresh__44c7_s_p4_0,
+ 	_vq_quantmap__44c7_s_p4_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c7_s_p4_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c7_s_p4_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c7_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p5_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p5_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 4, 7, 7,10,11,10,10,
+ 	11,11, 4, 7, 7,10,10,11,10,10,11, 5,10,10, 9,12,
+ 	11,10,12,12, 7,11,10,12,12,12,12,13,13, 7,10,11,
+ 	11,12,12,12,13,13, 5,10,10,10,12,12,10,12,12, 7,
+ 	11,10,12,13,13,12,12,12, 7,10,11,12,13,13,12,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p5_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p5_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p5_0 = {
+ 	_vq_quantthresh__44c7_s_p5_0,
+ 	_vq_quantmap__44c7_s_p5_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c7_s_p5_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c7_s_p5_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c7_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p5_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p5_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 9,12, 4, 4, 6, 6,
+ 	 7, 7, 8, 8, 9, 9,11, 5, 5, 6, 6, 7, 7, 8, 8, 9,
+ 	 9,12, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,12,12,12, 6,
+ 	 6, 7, 7, 8, 8, 9, 9,12,12,12, 6, 6, 7, 7, 8, 8,
+ 	 9, 9,12,11,11, 6, 6, 7, 7, 8, 8, 9, 9,12,12,11,
+ 	 7, 7, 8, 8, 8, 8, 8, 8,12,12,12,11,11, 8, 8, 8,
+ 	 8, 8, 8,12,12,12,11,11, 7, 7, 7, 7, 8, 8,12,12,
+ 	12,11,11, 7, 7, 7, 7, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p5_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p5_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p5_1 = {
+ 	_vq_quantthresh__44c7_s_p5_1,
+ 	_vq_quantmap__44c7_s_p5_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c7_s_p5_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c7_s_p5_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c7_s_p5_1,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p5_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p6_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 9, 9,10, 9,10,10, 5, 5, 5,
+ 	 7, 7, 9, 9, 9, 9,10,10,11,11, 6, 5, 5, 7, 7, 9,
+ 	 9, 9, 9,11,10,11,11, 0, 6, 6, 7, 7, 9, 9,10,10,
+ 	11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
+ 	12, 0,11,10, 8, 8,10,10,11,11,11,12,12,12, 0,11,
+ 	11, 8, 8,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p6_0 = {
+ 	_vq_quantthresh__44c7_s_p6_0,
+ 	_vq_quantmap__44c7_s_p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c7_s_p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c7_s_p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c7_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p6_1[] = {
+ 	 3, 4, 4, 5, 5, 6, 4, 4, 5, 5, 6, 4, 4, 4, 5, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p6_1 = {
+ 	_vq_quantthresh__44c7_s_p6_1,
+ 	_vq_quantmap__44c7_s_p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c7_s_p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c7_s_p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c7_s_p6_1,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p7_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 5, 5,
+ 	 7, 7, 9, 8, 9, 9,11,11,12,12, 6, 5, 5, 7, 7, 9,
+ 	 9, 9,10,11,11,12,12,20, 7, 7, 7, 7, 9, 9,10,10,
+ 	11,11,12,12,20, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
+ 	12,20,11,11, 8, 8,10, 9,11,11,11,11,12,12,20,12,
+ 	12, 8, 8, 9, 9,11,11,12,12,12,12,20,20,20,11,11,
+ 	10,10,11,11,12,12,13,13,20,20,20,11,11,10,10,11,
+ 	11,12,12,13,13,20,20,20,14,14,11,11,11,12,13,13,
+ 	13,13,20,20,20,15,14,11,11,11,11,13,13,14,14,20,
+ 	20,20,20,19,12,12,12,12,13,13,14,14,19,19,19,19,
+ 	19,13,12,12,12,13,13,14,14,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p7_0[] = {
+ 	-60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 
+ 	27.5, 38.5, 49.5, 60.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p7_0 = {
+ 	_vq_quantthresh__44c7_s_p7_0,
+ 	_vq_quantmap__44c7_s_p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c7_s_p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c7_s_p7_0,
+ 	1, -523206656, 1618345984, 4, 0,
+ 	_vq_quantlist__44c7_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p7_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 9, 5, 5, 6, 6,
+ 	 7, 7, 7, 7, 8, 8, 9, 5, 5, 6, 6, 7, 7, 7, 7, 7,
+ 	 7, 9, 6, 6, 7, 7, 7, 7, 8, 8, 7, 8, 9, 9, 9, 7,
+ 	 7, 7, 7, 7, 7, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8,
+ 	 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 8, 8, 9, 9, 9,
+ 	 7, 7, 8, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 7, 7, 7,
+ 	 7, 8, 7, 9, 9, 9, 9, 9, 8, 8, 7, 7, 8, 8, 9, 9,
+ 	 9, 9, 9, 7, 7, 7, 7, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p7_1 = {
+ 	_vq_quantthresh__44c7_s_p7_1,
+ 	_vq_quantmap__44c7_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c7_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c7_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c7_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p8_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p8_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9, 9,10,11,11, 6,
+ 	 5, 5, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11, 6, 5,
+ 	 5, 8, 8, 9, 9, 8, 8, 9, 9,10,10,11,11,17, 8, 8,
+ 	 8, 8,10, 9, 8, 9,10,10,11,11,11,11,17, 8, 8, 8,
+ 	 8,10,10, 9, 9,10,10,11,11,12,12,17,12,13, 9, 9,
+ 	10,10, 9, 9,10,11,11,11,12,12,17,13,13, 9, 9,10,
+ 	10,10,10,10,10,11,11,12,12,17,17,17, 9, 9, 9, 9,
+ 	10,10,11,11,11,12,12,12,17,17,17, 9, 9, 9, 9,11,
+ 	10,11,12,11,12,13,12,17,17,17,13,14,10,10,10,11,
+ 	12,11,12,12,12,13,17,17,17,14,14,10, 9,10, 9,12,
+ 	12,12,12,13,13,17,17,17,17,17,11,11,11,11,11,12,
+ 	13,13,13,14,17,17,17,17,17,12,10,11, 9,12,11,13,
+ 	15,14,14,17,17,17,17,17,14,15,11,12,12,13,13,12,
+ 	14,14,17,16,16,16,16,15,13,12, 9,12,10,14,12,15,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p8_0[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p8_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p8_0 = {
+ 	_vq_quantthresh__44c7_s_p8_0,
+ 	_vq_quantmap__44c7_s_p8_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44c7_s_p8_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44c7_s_p8_0,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__44c7_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p8_1[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p8_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9,
+ 	 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
+ 	 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,
+ 	 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,11,11,11, 7, 7, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11, 8, 8, 8, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,
+ 	11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9,
+ 	10,10, 9,11,11,11, 8, 9, 9, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10,10, 9, 9,10, 9,11,11,11,11,11, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,11,10,11,
+ 	11,11, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,10, 9,
+ 	 9,10,11,11,11,11,11, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	10, 9, 9,10,10,10,10,11,11,11,11,11, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,10, 9,10,10,10,10, 9,11,11,10,11,
+ 	11,11,11, 9, 9, 9, 9,10,10,10,10,10,10,10, 9,10,
+ 	10,10,11,11,11,11,11,11, 9, 9, 9, 9, 9,10,10,10,
+ 	10,10, 9, 9,10, 9,11,10,11,11,11,11,11, 9, 9, 9,
+ 	 9, 9,10,10, 9,10,10,10,10,10,10,11,11,11,11,11,
+ 	11,11,10, 9,10, 9,10,10,10,10,10,10,10,10,10, 9,
+ 	10,11,10,11,11,11,11,11,10, 9, 9,10,10,10,10,10,
+ 	10,10,10,10,10,11,11,11,11,11,11,11,10,11,10,10,
+ 	10,10,10,10,10,10, 9,10,10, 9,11,11,11,11,11,10,
+ 	11,11,11,10,10, 9, 9,10,10,10,10,10, 9,10,10,11,
+ 	11,11,11,11,10,11,11,11,10,10, 9, 9,10,10,10,10,
+ 	10,10,10,10,11,11,11,11,11,11,11,11,11,11,11, 9,
+ 	 9, 9, 9,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p8_1[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p8_1[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p8_1 = {
+ 	_vq_quantthresh__44c7_s_p8_1,
+ 	_vq_quantmap__44c7_s_p8_1,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _44c7_s_p8_1 = {
+ 	2, 441,
+ 	_vq_lengthlist__44c7_s_p8_1,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__44c7_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p9_0[] = {
+ 	 1, 4, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 9, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p9_0[] = {
+ 	-3503.5, -2866.5, -2229.5, -1592.5, -955.5, -318.5, 318.5, 955.5, 
+ 	1592.5, 2229.5, 2866.5, 3503.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p9_0 = {
+ 	_vq_quantthresh__44c7_s_p9_0,
+ 	_vq_quantmap__44c7_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c7_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c7_s_p9_0,
+ 	1, -511845376, 1630791680, 4, 0,
+ 	_vq_quantlist__44c7_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p9_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p9_1[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 7, 7, 9, 8,10,10, 6, 6, 6,
+ 	 7, 8, 8, 8, 8, 8, 9, 9,10,11, 6, 5, 6, 8, 7, 8,
+ 	 8, 8, 8, 9, 9,10,11,14, 9, 8, 9, 8, 9, 8, 8, 9,
+ 	10,10,11,11,14, 8, 9, 8, 8, 8, 9, 9, 8,12,10,11,
+ 	11,14,13,13, 8, 9, 9, 9, 9,10,10,12,12,12,14,14,
+ 	13, 8, 7,10, 9, 9,10,10,11,11,10,14,14,14, 8, 9,
+ 	 9, 8,11,10,12,11,11,11,14,14,14, 9, 7, 9, 8,10,
+ 	10,11,11,11,10,14,14,14,12,12,10, 9,11,11,11,13,
+ 	12,13,14,14,14,12,12,10,10,11, 8,11,11,14,13,14,
+ 	14,14,14,14,12,13,11,12,12,11,14,13,13,13,13,13,
+ 	13,12,11,11, 9,12,12,12,13,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p9_1[] = {
+ 	-269.5, -220.5, -171.5, -122.5, -73.5, -24.5, 24.5, 73.5, 
+ 	122.5, 171.5, 220.5, 269.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p9_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p9_1 = {
+ 	_vq_quantthresh__44c7_s_p9_1,
+ 	_vq_quantmap__44c7_s_p9_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c7_s_p9_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c7_s_p9_1,
+ 	1, -518889472, 1622704128, 4, 0,
+ 	_vq_quantlist__44c7_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c7_s_p9_2[] = {
+ 	24,
+ 	23,
+ 	25,
+ 	22,
+ 	26,
+ 	21,
+ 	27,
+ 	20,
+ 	28,
+ 	19,
+ 	29,
+ 	18,
+ 	30,
+ 	17,
+ 	31,
+ 	16,
+ 	32,
+ 	15,
+ 	33,
+ 	14,
+ 	34,
+ 	13,
+ 	35,
+ 	12,
+ 	36,
+ 	11,
+ 	37,
+ 	10,
+ 	38,
+ 	9,
+ 	39,
+ 	8,
+ 	40,
+ 	7,
+ 	41,
+ 	6,
+ 	42,
+ 	5,
+ 	43,
+ 	4,
+ 	44,
+ 	3,
+ 	45,
+ 	2,
+ 	46,
+ 	1,
+ 	47,
+ 	0,
+ 	48,
+ };
+ 
+ static long _vq_lengthlist__44c7_s_p9_2[] = {
+ 	 2, 4, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__44c7_s_p9_2[] = {
+ 	-23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, 
+ 	-15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, 
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ 	8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 
+ 	16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 
+ };
+ 
+ static long _vq_quantmap__44c7_s_p9_2[] = {
+ 	   47,   45,   43,   41,   39,   37,   35,   33,
+ 	   31,   29,   27,   25,   23,   21,   19,   17,
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,   18,   20,   22,   24,   26,   28,   30,
+ 	   32,   34,   36,   38,   40,   42,   44,   46,
+ 	   48,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c7_s_p9_2 = {
+ 	_vq_quantthresh__44c7_s_p9_2,
+ 	_vq_quantmap__44c7_s_p9_2,
+ 	49,
+ 	49
+ };
+ 
+ static static_codebook _44c7_s_p9_2 = {
+ 	1, 49,
+ 	_vq_lengthlist__44c7_s_p9_2,
+ 	1, -526909440, 1611661312, 6, 0,
+ 	_vq_quantlist__44c7_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c7_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c7_s_short[] = {
+ 	 4,10,12,13,15,15,16,16,17,17, 5, 5, 7, 8, 9, 9,
+ 	12,17,18,18, 7, 5, 4, 5, 7, 8,10,13,18,18, 8, 6,
+ 	 5, 4, 5, 6, 9,12,17,18,10, 9, 6, 4, 4, 5, 8,12,
+ 	18,17,11, 9, 7, 5, 4, 4, 6,10,17,17,13,12,10, 8,
+ 	 6, 5, 6, 9,17,17,14,13,12, 7, 6, 5, 5, 8,16,17,
+ 	16,15,14, 8, 8, 7, 7, 9,14,17,17,17,17,12,11,11,
+ 	11,12,16,17,
+ };
+ 
+ static static_codebook _huff_book__44c7_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c7_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c8_s_long[] = {
+ 	 3, 8,12,14,14,13,13,12,13,15, 6, 4, 6, 8,10,10,
+ 	11,11,13,15, 9, 5, 4, 5, 7, 8, 9,10,13,15,11, 7,
+ 	 4, 4, 5, 6, 8, 9,13,14,12, 9, 6, 5, 5, 5, 7, 9,
+ 	12,14,11,10, 7, 6, 5, 4, 6, 7,11,12,11,10, 9, 8,
+ 	 7, 5, 6, 6,10,11,12,11,10, 9, 8, 6, 6, 5, 8,10,
+ 	12,12,12,11,11,10, 9, 7, 8,11,12,13,14,14,15,13,
+ 	10, 9, 9,11,
+ };
+ 
+ static static_codebook _huff_book__44c8_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c8_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p1_0[] = {
+ 	 1, 5, 5, 0, 5, 5, 0, 5, 5, 6, 7, 7, 0, 9, 8, 0,
+ 	 8, 8, 6, 7, 8, 0, 8, 9, 0, 8, 8, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 5, 8, 8, 0, 8, 8, 0, 8, 8, 5, 8, 8,
+ 	 0, 8, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 	 8, 8, 0, 8, 8, 0, 8, 7, 5, 8, 8, 0, 8, 8, 0, 7,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p1_0 = {
+ 	_vq_quantthresh__44c8_s_p1_0,
+ 	_vq_quantmap__44c8_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c8_s_p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c8_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c8_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p2_0[] = {
+ 	 3, 5, 5, 8, 8, 0, 6, 6, 8, 8, 0, 5, 6, 8, 8, 0,
+ 	 7, 7, 9, 9, 0, 0, 0, 9, 9, 5, 7, 6, 9, 9, 0, 7,
+ 	 7,10, 9, 0, 7, 7,10, 9, 0, 9, 9,11,11, 0, 0, 0,
+ 	11,11, 5, 6, 7, 9, 9, 0, 7, 7, 9,10, 0, 7, 7, 9,
+ 	10, 0, 9, 9,11,11, 0, 0, 0,11,11, 8, 9, 9,11,10,
+ 	 0,11,10,12,11, 0,10,10,12,11, 0,13,13,14,13, 0,
+ 	 0, 0,14,13, 8, 9, 9,10,11, 0,10,11,11,12, 0,10,
+ 	10,12,12, 0,13,13,13,14, 0, 0, 0,13,14, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 6, 7, 7,10,10, 0, 7, 7,10,10,
+ 	 0, 7, 7,10,10, 0, 9, 8,10,10, 0, 0, 0,10,10, 6,
+ 	 7, 7,10,10, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 8,
+ 	 9,10,10, 0, 0, 0,10,10, 8,10, 9,12,12, 0,10, 9,
+ 	12,11, 0,10,10,11,12, 0,12,11,13,12, 0, 0, 0,13,
+ 	13, 8, 9,10,11,12, 0, 9,10,11,12, 0,10,10,11,12,
+ 	 0,11,12,12,13, 0, 0, 0,13,13, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 6, 8, 7,11,10, 0, 7, 7,10,10, 0, 7, 7,
+ 	10, 9, 0, 8, 9,10,10, 0, 0, 0,10,10, 6, 7, 8,10,
+ 	11, 0, 7, 7,10,10, 0, 7, 7,10,10, 0, 9, 8,10,10,
+ 	 0, 0, 0,10,10, 8,10, 9,12,11, 0,10,10,12,11, 0,
+ 	10,10,12,11, 0,11,12,13,12, 0, 0, 0,13,12, 9, 9,
+ 	10,11,12, 0,10,10,11,12, 0,10,10,11,12, 0,12,11,
+ 	12,13, 0, 0, 0,12,13, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 9, 9,12,13, 0, 9, 8,12,11, 0, 8, 9,11,12, 0,
+ 	10, 9,12,11, 0, 0, 0,11,12, 7, 9, 9,13,13, 0, 9,
+ 	 9,11,12, 0, 9, 8,12,11, 0, 9,10,11,12, 0, 0, 0,
+ 	12,11, 9,11,11,14,13, 0,10,10,13,12, 0,10,10,13,
+ 	13, 0,12,11,13,12, 0, 0, 0,13,13, 9,11,11,13,14,
+ 	 0,10,10,12,13, 0,10,10,13,13, 0,11,12,12,13, 0,
+ 	 0, 0,13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 	11,11,14,13, 0,10,10,13,12, 0,10,10,13,12, 0,11,
+ 	12,13,13, 0, 0, 0,13,12, 9,11,11,13,14, 0,10,10,
+ 	13,13, 0,10,10,12,13, 0,12,11,13,13, 0, 0, 0,12,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p2_0 = {
+ 	_vq_quantthresh__44c8_s_p2_0,
+ 	_vq_quantmap__44c8_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c8_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c8_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c8_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p3_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p3_0[] = {
+ 	 3, 3, 4, 5, 5, 7, 6, 8, 8, 0, 4, 4, 5, 5, 7, 7,
+ 	 9, 9, 0, 4, 4, 5, 6, 7, 7, 9, 9, 0, 5, 5, 6, 6,
+ 	 8, 8,10,10, 0, 0, 0, 6, 6, 8, 8,10,10, 0, 0, 0,
+ 	 7, 7, 8, 8,10,10, 0, 0, 0, 7, 7, 8, 8,10,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p3_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p3_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p3_0 = {
+ 	_vq_quantthresh__44c8_s_p3_0,
+ 	_vq_quantmap__44c8_s_p3_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c8_s_p3_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c8_s_p3_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c8_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p4_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p4_0[] = {
+ 	 3, 4, 4, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,10,10,
+ 	10, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,10,10,
+ 	11,11, 0, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
+ 	10,11,11, 0, 5, 5, 6, 6, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 6, 6, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,10,
+ 	11,11,12,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,10,
+ 	10,11,11,12,12,12,12, 0, 0, 0, 7, 7, 8, 8, 9, 9,
+ 	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 8, 8, 9,
+ 	 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p4_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p4_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p4_0 = {
+ 	_vq_quantthresh__44c8_s_p4_0,
+ 	_vq_quantmap__44c8_s_p4_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c8_s_p4_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c8_s_p4_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c8_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p5_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p5_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6,10,10,10,10,
+ 	10,10, 4, 6, 6,10,10,10,10,10,10, 5,10,10, 9,12,
+ 	12,10,12,12, 7,10,10,12,12,12,12,12,12, 7,10,10,
+ 	12,12,12,12,12,13, 6,10,10,10,12,12,11,12,12, 8,
+ 	10,10,12,13,12,12,12,12, 7,10,10,12,12,13,12,13,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p5_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p5_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p5_0 = {
+ 	_vq_quantthresh__44c8_s_p5_0,
+ 	_vq_quantmap__44c8_s_p5_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c8_s_p5_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c8_s_p5_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c8_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p5_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p5_1[] = {
+ 	 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7,10, 4, 4, 6, 6,
+ 	 7, 7, 8, 8, 8, 8,10, 5, 5, 6, 6, 7, 7, 8, 8, 8,
+ 	 8,11, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11, 6,
+ 	 6, 7, 7, 8, 8, 8, 8,11,11,11, 6, 6, 7, 7, 8, 8,
+ 	 8, 8,11,11,11, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11,
+ 	 7, 7, 7, 7, 8, 8, 8, 8,11,11,11,11,11, 7, 7, 8,
+ 	 8, 8, 8,11,11,11,11,11, 7, 7, 7, 7, 8, 8,11,11,
+ 	11,11,11, 7, 7, 7, 7, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p5_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p5_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p5_1 = {
+ 	_vq_quantthresh__44c8_s_p5_1,
+ 	_vq_quantmap__44c8_s_p5_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c8_s_p5_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c8_s_p5_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c8_s_p5_1,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p5_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p6_0[] = {
+ 	 1, 4, 4, 7, 6, 8, 8, 9, 9,10,10,11,11, 5, 5, 5,
+ 	 7, 7, 9, 9,10, 9,11,11,12,12, 6, 5, 5, 7, 7, 9,
+ 	 9,10,10,11,11,12,12, 0, 6, 6, 7, 7, 9, 9,10,10,
+ 	11,11,12,12, 0, 7, 7, 7, 7, 9, 9,10,10,12,12,12,
+ 	12, 0,10,10, 8, 8,10,10,11,11,12,12,13,13, 0,11,
+ 	11, 8, 8,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p6_0 = {
+ 	_vq_quantthresh__44c8_s_p6_0,
+ 	_vq_quantmap__44c8_s_p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c8_s_p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c8_s_p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c8_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p6_1[] = {
+ 	 3, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 6,
+ 	 5, 5, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p6_1 = {
+ 	_vq_quantthresh__44c8_s_p6_1,
+ 	_vq_quantmap__44c8_s_p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c8_s_p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c8_s_p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c8_s_p6_1,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p7_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 5, 5,
+ 	 7, 7, 9, 9,10,10,11,11,12,12, 6, 5, 5, 7, 7, 9,
+ 	 9,10,10,11,11,12,12,20, 6, 7, 7, 7, 9, 9,10,10,
+ 	11,11,12,12,20, 7, 7, 7, 7, 9, 9,10,10,11,11,12,
+ 	12,20,11,11, 8, 8,10,10,11,11,12,12,12,12,20,12,
+ 	12, 8, 8,10, 9,11,11,12,12,13,13,20,20,20,11,10,
+ 	10,10,11,11,12,12,13,13,20,20,20,10,11,10,10,11,
+ 	11,12,12,13,13,20,20,20,14,15,11,11,12,12,13,13,
+ 	14,13,20,20,20,15,15,11,11,12,12,13,13,14,14,20,
+ 	20,20,20,19,13,13,12,12,13,13,14,14,19,19,19,19,
+ 	19,13,13,12,12,13,13,14,14,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p7_0[] = {
+ 	-60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 
+ 	27.5, 38.5, 49.5, 60.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p7_0 = {
+ 	_vq_quantthresh__44c8_s_p7_0,
+ 	_vq_quantmap__44c8_s_p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c8_s_p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c8_s_p7_0,
+ 	1, -523206656, 1618345984, 4, 0,
+ 	_vq_quantlist__44c8_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p7_1[] = {
+ 	 4, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 5, 5, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 8, 5, 5, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 8, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
+ 	 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 8, 8,
+ 	 8, 8, 8, 7, 7, 7, 7, 7, 7,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p7_1 = {
+ 	_vq_quantthresh__44c8_s_p7_1,
+ 	_vq_quantmap__44c8_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c8_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c8_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c8_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p8_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p8_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,11, 6,
+ 	 5, 5, 7, 7, 9, 9, 8, 8,10,10,11,11,11,12, 6, 5,
+ 	 5, 7, 7, 9, 9, 9, 8,10,10,11,10,11,12,18, 8, 8,
+ 	 8, 8, 9, 9, 9, 9,10,10,11,11,12,12,18, 8, 8, 8,
+ 	 8, 9, 9, 9, 9,10,10,11,11,12,13,18,12,12, 9, 9,
+ 	10,10, 9, 9,10,11,11,12,13,12,18,12,12, 9, 9,10,
+ 	10,10,10,10,11,11,12,13,13,18,18,18, 9, 9, 9, 9,
+ 	10,10,11,11,12,12,12,12,18,18,18, 9, 9, 9, 9,10,
+ 	10,11,11,12,12,13,13,18,18,18,13,13,10,10,11,11,
+ 	12,11,12,12,13,13,18,18,18,14,14,10, 9,11,10,12,
+ 	12,12,12,13,13,18,18,18,18,18,11,12,11,11,12,12,
+ 	13,13,14,13,18,18,18,18,18,12,11,11,10,12,11,13,
+ 	13,13,14,18,18,18,18,18,15,16,12,12,12,13,13,13,
+ 	14,14,18,17,17,17,17,16,14,12,11,12,11,13,12,15,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p8_0[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p8_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p8_0 = {
+ 	_vq_quantthresh__44c8_s_p8_0,
+ 	_vq_quantmap__44c8_s_p8_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44c8_s_p8_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44c8_s_p8_0,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__44c8_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p8_1[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p8_1[] = {
+ 	 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 9, 9, 9, 9,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
+ 	 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
+ 	10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,11, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,11,11,10,11,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
+ 	10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,
+ 	 9, 9,10,11,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,11,10,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10, 9, 9, 9, 9, 9, 9, 9,11,10,11,10,
+ 	10,10,10, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9, 9,
+ 	 9,11,11,11,10,10,11,10, 9, 9, 9, 9, 9, 9,10,10,
+ 	 9, 9, 9, 9, 9, 9,10,11,10,10,10,11,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9,10, 9,11,11,10,10,10,
+ 	10,10, 9, 9, 9,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,11,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,11,11,10,11,10,10,10,10,10,10, 9,
+ 	10, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,
+ 	10,10,10, 9,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10, 9,
+ 	 9, 9, 9,10, 9, 9,10, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p8_1[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p8_1[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p8_1 = {
+ 	_vq_quantthresh__44c8_s_p8_1,
+ 	_vq_quantmap__44c8_s_p8_1,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _44c8_s_p8_1 = {
+ 	2, 441,
+ 	_vq_lengthlist__44c8_s_p8_1,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__44c8_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p9_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p9_0[] = {
+ 	 1, 5, 5,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10, 7,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10, 6, 8,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p9_0[] = {
+ 	-6982.5, -6051.5, -5120.5, -4189.5, -3258.5, -2327.5, -1396.5, -465.5, 
+ 	465.5, 1396.5, 2327.5, 3258.5, 4189.5, 5120.5, 6051.5, 6982.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p9_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p9_0 = {
+ 	_vq_quantthresh__44c8_s_p9_0,
+ 	_vq_quantmap__44c8_s_p9_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c8_s_p9_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c8_s_p9_0,
+ 	1, -509798400, 1631393792, 5, 0,
+ 	_vq_quantlist__44c8_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p9_1[] = {
+ 	9,
+ 	8,
+ 	10,
+ 	7,
+ 	11,
+ 	6,
+ 	12,
+ 	5,
+ 	13,
+ 	4,
+ 	14,
+ 	3,
+ 	15,
+ 	2,
+ 	16,
+ 	1,
+ 	17,
+ 	0,
+ 	18,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p9_1[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 7, 7, 9, 9,10,10,11,10,13,
+ 	12,11,12, 6, 6, 6, 8, 8, 8, 8, 8, 8, 9,10,10,10,
+ 	12,12,12,12,13,15, 5, 5, 5, 8, 8, 8, 8, 8, 8,10,
+ 	 9,10,11,12,13,12,13,13,12,15, 9, 8, 9, 9, 9, 9,
+ 	 9, 9,10,10,10,11,14,12,13,15,12,14,15, 8, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10,12,11,12,11,12,13,13,13,15,
+ 	13,13, 9, 9,10, 9,10,10,11,10,11,12,12,12,14,13,
+ 	14,15,15,13,13, 9, 8,10, 9,10,10,11,10,12,12,13,
+ 	13,14,13,14,15,15,15,15, 9, 9, 9, 9,10,11,12,12,
+ 	12,13,13,13,14,15,15,14,15,15,15, 9, 7, 9, 8,12,
+ 	11,11,13,12,12,13,12,14,13,13,14,15,15,15,13,13,
+ 	10,10,12,11,13,13,12,12,13,13,14,13,13,15,15,15,
+ 	15,12,13,11, 9,11,10,12,12,15,13,13,13,14,13,14,
+ 	13,15,15,15,15,15,12,12,11,11,12,13,15,13,13,14,
+ 	14,14,15,14,15,15,15,15,15,13,11,12,11,12,11,13,
+ 	14,13,13,14,14,13,14,15,15,15,15,15,15,15,12,12,
+ 	12,13,15,13,15,14,15,14,13,15,15,15,15,15,15,14,
+ 	15,13,13,12,11,14,12,15,13,14,14,14,13,15,15,15,
+ 	15,15,15,15,14,13,14,13,15,13,15,15,15,14,15,14,
+ 	15,15,15,15,15,15,15,14,14,14,13,13,13,15,15,15,
+ 	15,14,15,15,15,15,15,15,15,15,15,15,12,13,13,13,
+ 	14,15,15,13,15,15,15,15,15,15,15,15,15,15,15,15,
+ 	15,14,14,15,15,15,14,14,15,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p9_1[] = {
+ 	-416.5, -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, 
+ 	-24.5, 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, 
+ 	367.5, 416.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p9_1[] = {
+ 	   17,   15,   13,   11,    9,    7,    5,    3,
+ 	    1,    0,    2,    4,    6,    8,   10,   12,
+ 	   14,   16,   18,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p9_1 = {
+ 	_vq_quantthresh__44c8_s_p9_1,
+ 	_vq_quantmap__44c8_s_p9_1,
+ 	19,
+ 	19
+ };
+ 
+ static static_codebook _44c8_s_p9_1 = {
+ 	2, 361,
+ 	_vq_lengthlist__44c8_s_p9_1,
+ 	1, -518287360, 1622704128, 5, 0,
+ 	_vq_quantlist__44c8_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c8_s_p9_2[] = {
+ 	24,
+ 	23,
+ 	25,
+ 	22,
+ 	26,
+ 	21,
+ 	27,
+ 	20,
+ 	28,
+ 	19,
+ 	29,
+ 	18,
+ 	30,
+ 	17,
+ 	31,
+ 	16,
+ 	32,
+ 	15,
+ 	33,
+ 	14,
+ 	34,
+ 	13,
+ 	35,
+ 	12,
+ 	36,
+ 	11,
+ 	37,
+ 	10,
+ 	38,
+ 	9,
+ 	39,
+ 	8,
+ 	40,
+ 	7,
+ 	41,
+ 	6,
+ 	42,
+ 	5,
+ 	43,
+ 	4,
+ 	44,
+ 	3,
+ 	45,
+ 	2,
+ 	46,
+ 	1,
+ 	47,
+ 	0,
+ 	48,
+ };
+ 
+ static long _vq_lengthlist__44c8_s_p9_2[] = {
+ 	 3, 4, 3, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 6, 7, 6, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__44c8_s_p9_2[] = {
+ 	-23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, 
+ 	-15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, 
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ 	8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 
+ 	16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 
+ };
+ 
+ static long _vq_quantmap__44c8_s_p9_2[] = {
+ 	   47,   45,   43,   41,   39,   37,   35,   33,
+ 	   31,   29,   27,   25,   23,   21,   19,   17,
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,   18,   20,   22,   24,   26,   28,   30,
+ 	   32,   34,   36,   38,   40,   42,   44,   46,
+ 	   48,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c8_s_p9_2 = {
+ 	_vq_quantthresh__44c8_s_p9_2,
+ 	_vq_quantmap__44c8_s_p9_2,
+ 	49,
+ 	49
+ };
+ 
+ static static_codebook _44c8_s_p9_2 = {
+ 	1, 49,
+ 	_vq_lengthlist__44c8_s_p9_2,
+ 	1, -526909440, 1611661312, 6, 0,
+ 	_vq_quantlist__44c8_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c8_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c8_s_short[] = {
+ 	 4,11,13,14,16,15,16,16,17,16, 5, 6, 8, 9,10, 9,
+ 	11,17,16,17, 6, 6, 6, 6, 7, 8, 9,14,16,17, 8, 6,
+ 	 5, 4, 6, 7, 9,12,14,17, 9, 7, 6, 5, 5, 5, 8,11,
+ 	14,17,10, 9, 7, 6, 5, 3, 5, 8,13,17,12,11, 9, 8,
+ 	 7, 4, 4, 6,14,17,13,13,12, 8, 7, 5, 4, 5,12,17,
+ 	17,14,15,10, 8, 7, 7, 7,11,17,17,16,17,14,12,10,
+ 	11,11,15,17,
+ };
+ 
+ static static_codebook _huff_book__44c8_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c8_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c9_s_long[] = {
+ 	 3, 8,13,14,15,15,13,13,14,14, 6, 5, 8,10,12,12,
+ 	13,12,13,14,10, 6, 5, 6, 8, 9,11,11,13,14,13, 8,
+ 	 5, 4, 5, 6, 9,10,13,14,14,11, 7, 5, 4, 5, 8, 9,
+ 	12,14,12,11, 8, 6, 5, 3, 5, 7,10,13,12,10,10, 8,
+ 	 7, 5, 4, 6, 9,12,13,12,11,10, 9, 6, 5, 5, 7,10,
+ 	13,12,12,11,11, 9, 8, 7, 8,10,12,12,13,13,14,12,
+ 	10, 9, 9,10,
+ };
+ 
+ static static_codebook _huff_book__44c9_s_long = {
+ 	2, 100,
+ 	_huff_lengthlist__44c9_s_long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p1_0[] = {
+ 	 1, 5, 5, 0, 5, 5, 0, 5, 5, 6, 8, 8, 0, 9, 8, 0,
+ 	 8, 8, 6, 8, 8, 0, 8, 9, 0, 8, 8, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 5, 8, 8, 0, 8, 7, 0, 8, 8, 5, 8, 8,
+ 	 0, 7, 8, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 	 9, 8, 0, 8, 8, 0, 7, 7, 5, 8, 9, 0, 8, 8, 0, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p1_0 = {
+ 	_vq_quantthresh__44c9_s_p1_0,
+ 	_vq_quantmap__44c9_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c9_s_p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c9_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44c9_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p2_0[] = {
+ 	 3, 6, 6, 8, 8, 0, 6, 6, 8, 8, 0, 5, 5, 8, 8, 0,
+ 	 7, 7, 9, 9, 0, 0, 0, 9, 9, 6, 7, 7, 9, 8, 0, 8,
+ 	 7, 9, 9, 0, 7, 7, 9, 9, 0, 9, 9,11,10, 0, 0, 0,
+ 	10,10, 6, 7, 7, 8, 9, 0, 7, 8, 9, 9, 0, 7, 7, 9,
+ 	 9, 0, 9, 9,10,11, 0, 0, 0,10,10, 8, 9, 9,10,10,
+ 	 0,10,10,11,11, 0,10,10,11,11, 0,12,12,13,12, 0,
+ 	 0, 0,13,13, 8, 8, 9,10,10, 0,10,10,11,12, 0,10,
+ 	10,11,11, 0,12,12,13,13, 0, 0, 0,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 6, 8, 7,10,10, 0, 7, 7,10, 9,
+ 	 0, 7, 7,10,10, 0, 9, 8,10,10, 0, 0, 0,10,10, 6,
+ 	 7, 7,10,10, 0, 7, 7, 9,10, 0, 7, 7,10,10, 0, 8,
+ 	 9,10,10, 0, 0, 0,10,10, 8, 9, 9,11,11, 0,10, 9,
+ 	11,11, 0,10,10,11,11, 0,11,11,12,12, 0, 0, 0,12,
+ 	12, 8, 9, 9,11,11, 0, 9,10,11,11, 0,10,10,11,11,
+ 	 0,11,11,12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 5, 8, 7,10,10, 0, 7, 7,10,10, 0, 7, 7,
+ 	10, 9, 0, 8, 9,10,10, 0, 0, 0,10, 9, 5, 7, 8,10,
+ 	10, 0, 7, 7,10,10, 0, 7, 7, 9,10, 0, 9, 8,10,10,
+ 	 0, 0, 0,10,10, 8, 9, 9,12,11, 0,10,10,11,11, 0,
+ 	10, 9,11,11, 0,11,11,12,12, 0, 0, 0,12,12, 8, 9,
+ 	 9,11,11, 0,10,10,11,11, 0, 9,10,11,11, 0,11,11,
+ 	12,12, 0, 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 7, 9, 9,12,12, 0, 9, 9,11,11, 0, 8, 9,11,11, 0,
+ 	10, 9,12,11, 0, 0, 0,11,11, 7, 9, 9,12,12, 0, 8,
+ 	 9,11,11, 0, 9, 8,11,11, 0, 9,10,11,11, 0, 0, 0,
+ 	11,11, 9,11,11,13,13, 0,10,10,12,12, 0,10,10,12,
+ 	12, 0,12,11,12,12, 0, 0, 0,13,13, 9,10,11,13,13,
+ 	 0,10,10,12,12, 0,10,10,12,12, 0,11,11,12,12, 0,
+ 	 0, 0,12,12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
+ 	11,10,13,13, 0,10,10,12,12, 0,10, 9,12,12, 0,11,
+ 	11,12,13, 0, 0, 0,12,11, 9,10,10,12,13, 0,10,10,
+ 	12,12, 0,10,10,12,12, 0,11,11,13,12, 0, 0, 0,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p2_0 = {
+ 	_vq_quantthresh__44c9_s_p2_0,
+ 	_vq_quantmap__44c9_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c9_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44c9_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c9_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p3_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p3_0[] = {
+ 	 3, 4, 4, 5, 5, 6, 6, 8, 8, 0, 4, 4, 5, 5, 7, 6,
+ 	 8, 8, 0, 4, 4, 5, 5, 7, 7, 8, 8, 0, 5, 5, 6, 6,
+ 	 7, 7, 9, 9, 0, 0, 0, 6, 6, 7, 7, 9, 9, 0, 0, 0,
+ 	 7, 7, 8, 8, 9, 9, 0, 0, 0, 7, 7, 8, 8, 9, 9, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p3_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p3_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p3_0 = {
+ 	_vq_quantthresh__44c9_s_p3_0,
+ 	_vq_quantmap__44c9_s_p3_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44c9_s_p3_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44c9_s_p3_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44c9_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p4_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p4_0[] = {
+ 	 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9,10,
+ 	10, 0, 5, 5, 5, 5, 6, 6, 8, 7, 8, 8, 9, 9,10,10,
+ 	11,11, 0, 5, 5, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10,
+ 	10,11,11, 0, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 6, 6, 7, 7, 8, 8, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0, 7, 7, 7, 7, 9, 9, 9, 9,
+ 	11,11,11,11,12,12, 0, 0, 0, 7, 7, 7, 8, 9, 9, 9,
+ 	 9,11,10,11,11,12,12, 0, 0, 0, 7, 7, 7, 7, 9, 9,
+ 	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 7, 7, 9,
+ 	 9,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p4_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p4_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p4_0 = {
+ 	_vq_quantthresh__44c9_s_p4_0,
+ 	_vq_quantmap__44c9_s_p4_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44c9_s_p4_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44c9_s_p4_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44c9_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p5_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p5_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 6, 7, 7, 4, 6, 6,10,10,10,10,
+ 	10,10, 4, 6, 6,10,10,10,10,10,10, 5,10,10, 9,12,
+ 	12,10,12,12, 7,10,10,12,12,12,12,12,13, 7,10,10,
+ 	12,12,12,12,13,13, 6,10,10,10,12,12,11,12,12, 8,
+ 	10,10,12,12,12,12,12,12, 7,10,10,12,12,13,12,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p5_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p5_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p5_0 = {
+ 	_vq_quantthresh__44c9_s_p5_0,
+ 	_vq_quantmap__44c9_s_p5_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44c9_s_p5_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44c9_s_p5_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44c9_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p5_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p5_1[] = {
+ 	 4, 5, 5, 6, 6, 6, 7, 7, 7, 7, 7,10, 5, 5, 6, 6,
+ 	 7, 7, 7, 7, 8, 8,10, 5, 5, 6, 6, 7, 7, 7, 7, 8,
+ 	 8,11, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,11,11,11, 6,
+ 	 6, 7, 7, 8, 8, 8, 8,11,11,11, 6, 6, 7, 7, 8, 8,
+ 	 8, 8,11,11,11, 6, 6, 7, 7, 7, 7, 8, 8,11,11,11,
+ 	 7, 7, 7, 7, 7, 7, 8, 8,11,11,11,11,11, 7, 7, 7,
+ 	 7, 8, 8,11,11,11,11,11, 7, 7, 7, 7, 7, 7,11,11,
+ 	11,11,11, 7, 7, 7, 7, 7, 7,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p5_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p5_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p5_1 = {
+ 	_vq_quantthresh__44c9_s_p5_1,
+ 	_vq_quantmap__44c9_s_p5_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c9_s_p5_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c9_s_p5_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c9_s_p5_1,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p5_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p6_0[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 5, 4, 4,
+ 	 6, 6, 8, 8, 9, 9,10,10,11,11, 6, 4, 4, 6, 6, 8,
+ 	 8, 9, 9,10,10,12,12, 0, 6, 6, 6, 6, 8, 8,10,10,
+ 	11,11,12,12, 0, 6, 6, 6, 6, 8, 8,10,10,11,11,12,
+ 	12, 0,10,10, 8, 8, 9, 9,11,11,12,12,13,13, 0,11,
+ 	11, 8, 8, 9,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p6_0 = {
+ 	_vq_quantthresh__44c9_s_p6_0,
+ 	_vq_quantmap__44c9_s_p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c9_s_p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c9_s_p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44c9_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p6_1[] = {
+ 	 4, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5, 4, 4, 5, 5, 5,
+ 	 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p6_1 = {
+ 	_vq_quantthresh__44c9_s_p6_1,
+ 	_vq_quantmap__44c9_s_p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44c9_s_p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44c9_s_p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44c9_s_p6_1,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p7_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 9, 9,10,10,11,11, 6, 5, 5,
+ 	 7, 7, 9, 8,10,10,11,11,12,12, 6, 5, 5, 7, 7, 9,
+ 	 9,10,10,11,11,12,12,20, 6, 6, 7, 7, 9, 9,10,10,
+ 	11,11,12,12,20, 7, 7, 7, 7, 9, 9,10,10,11,11,13,
+ 	12,20,10,10, 8, 8, 9, 9,11,11,12,12,13,13,20,11,
+ 	11, 8, 8, 9, 9,11,11,12,12,13,13,20,20,20,10,10,
+ 	10,10,11,11,12,12,13,13,20,20,20,10,10,10,10,11,
+ 	11,12,12,13,13,20,20,20,14,14,11,11,12,12,13,13,
+ 	14,13,20,20,20,14,15,11,11,11,11,13,13,14,13,20,
+ 	20,20,20,19,12,12,12,12,13,13,14,14,19,19,19,19,
+ 	19,13,13,12,12,13,13,14,14,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p7_0[] = {
+ 	-60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 
+ 	27.5, 38.5, 49.5, 60.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p7_0 = {
+ 	_vq_quantthresh__44c9_s_p7_0,
+ 	_vq_quantmap__44c9_s_p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44c9_s_p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44c9_s_p7_0,
+ 	1, -523206656, 1618345984, 4, 0,
+ 	_vq_quantlist__44c9_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p7_1[] = {
+ 	 5, 6, 6, 6, 6, 7, 6, 7, 7, 7, 7, 8, 6, 6, 6, 6,
+ 	 7, 7, 7, 7, 7, 7, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7,
+ 	 7, 8, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 6,
+ 	 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
+ 	 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8,
+ 	 8, 8, 8, 7, 7, 7, 7, 7, 7,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p7_1 = {
+ 	_vq_quantthresh__44c9_s_p7_1,
+ 	_vq_quantmap__44c9_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44c9_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44c9_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44c9_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p8_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p8_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,11, 6,
+ 	 5, 5, 7, 7, 9, 9, 8, 9,10,10,11,11,12,12, 6, 5,
+ 	 5, 7, 7, 9, 9, 9, 9,10,10,11,11,12,12,19, 7, 8,
+ 	 8, 8, 9, 9, 9, 9,10,10,11,11,12,13,19, 8, 8, 8,
+ 	 8, 9, 9, 9, 9,10,10,11,12,12,12,19,12,12, 9, 9,
+ 	 9,10, 9,10,10,10,12,12,12,12,19,12,12, 9, 9,10,
+ 	 9,10,10,11,11,12,11,13,13,19,19,19, 9, 9, 9, 9,
+ 	10,10,11,11,12,12,12,12,19,19,19, 9, 9, 9, 9,10,
+ 	10,11,11,12,12,13,13,19,19,19,13,13,10,10,10,10,
+ 	12,12,12,12,13,13,19,19,19,13,13,10,10,10,10,12,
+ 	12,12,12,13,13,19,19,19,19,19,11,12,11,11,12,12,
+ 	13,12,13,13,19,19,19,18,18,12,11,11,10,12,11,13,
+ 	13,13,14,18,18,18,18,18,15,16,12,12,13,12,13,13,
+ 	14,14,18,18,18,18,18,16,15,12,11,12,11,13,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p8_0[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p8_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p8_0 = {
+ 	_vq_quantthresh__44c9_s_p8_0,
+ 	_vq_quantmap__44c9_s_p8_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44c9_s_p8_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44c9_s_p8_0,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__44c9_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p8_1[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p8_1[] = {
+ 	 4, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 6, 6, 7, 7, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10, 7, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 8, 8, 8, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
+ 	10, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,10, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
+ 	10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,
+ 	10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,10,10,10,10,10,10,10, 9, 9, 9, 9,10,10,10,10,
+ 	 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,
+ 	10,10, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10, 9, 9, 9,10, 9, 9, 9, 9,10,10,10,10,10,10,
+ 	10,10,10, 9,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
+ 	10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p8_1[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p8_1[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p8_1 = {
+ 	_vq_quantthresh__44c9_s_p8_1,
+ 	_vq_quantmap__44c9_s_p8_1,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _44c9_s_p8_1 = {
+ 	2, 441,
+ 	_vq_lengthlist__44c9_s_p8_1,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__44c9_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p9_0[] = {
+ 	9,
+ 	8,
+ 	10,
+ 	7,
+ 	11,
+ 	6,
+ 	12,
+ 	5,
+ 	13,
+ 	4,
+ 	14,
+ 	3,
+ 	15,
+ 	2,
+ 	16,
+ 	1,
+ 	17,
+ 	0,
+ 	18,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p9_0[] = {
+ 	 1, 4, 4,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10, 7, 9,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10, 7, 9,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p9_0[] = {
+ 	-7913.5, -6982.5, -6051.5, -5120.5, -4189.5, -3258.5, -2327.5, -1396.5, 
+ 	-465.5, 465.5, 1396.5, 2327.5, 3258.5, 4189.5, 5120.5, 6051.5, 
+ 	6982.5, 7913.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p9_0[] = {
+ 	   17,   15,   13,   11,    9,    7,    5,    3,
+ 	    1,    0,    2,    4,    6,    8,   10,   12,
+ 	   14,   16,   18,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p9_0 = {
+ 	_vq_quantthresh__44c9_s_p9_0,
+ 	_vq_quantmap__44c9_s_p9_0,
+ 	19,
+ 	19
+ };
+ 
+ static static_codebook _44c9_s_p9_0 = {
+ 	2, 361,
+ 	_vq_lengthlist__44c9_s_p9_0,
+ 	1, -508535424, 1631393792, 5, 0,
+ 	_vq_quantlist__44c9_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p9_1[] = {
+ 	9,
+ 	8,
+ 	10,
+ 	7,
+ 	11,
+ 	6,
+ 	12,
+ 	5,
+ 	13,
+ 	4,
+ 	14,
+ 	3,
+ 	15,
+ 	2,
+ 	16,
+ 	1,
+ 	17,
+ 	0,
+ 	18,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p9_1[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 8, 9,10,10,10,12,11,12,
+ 	13,13,12, 6, 5, 5, 8, 8, 8, 9, 8, 9,10,10,11,11,
+ 	12,12,14,13,13,12, 5, 5, 5, 8, 8, 9, 8, 8, 9,10,
+ 	10,11,11,12,12,14,12,13,13,16, 8, 8, 9, 9, 9, 9,
+ 	 9, 9,10,10,11,12,13,13,13,13,14,14,16, 8, 8, 9,
+ 	 9, 9, 9, 9, 9,11,11,12,11,13,13,14,13,13,13,16,
+ 	14,13, 9, 9, 9, 9,10,10,11,12,12,13,13,13,14,13,
+ 	15,14,16,13,13, 9, 8, 9, 9,10,10,12,11,13,13,14,
+ 	14,14,14,15,14,16,16,16, 9, 9, 9, 9,10,10,12,12,
+ 	12,13,13,13,15,13,15,15,16,16,16, 9, 7, 9, 8,10,
+ 	11,11,12,12,13,13,16,15,14,14,14,16,16,16,13,13,
+ 	10,10,11,11,13,15,13,14,13,14,14,13,14,14,16,16,
+ 	16,13,12,10, 9,11,11,12,12,14,14,13,14,14,14,14,
+ 	14,16,16,16,16,16,12,13,11,11,12,13,13,13,14,15,
+ 	14,14,16,15,16,16,16,16,16,12,11,12,12,15,13,13,
+ 	13,14,13,15,14,15,14,16,16,16,16,16,14,15,12,13,
+ 	13,12,14,15,15,14,15,14,15,13,16,16,16,16,16,16,
+ 	16,13,13,14,12,16,12,16,15,14,15,14,14,16,16,16,
+ 	16,16,16,16,15,14,14,14,15,16,16,16,16,14,16,16,
+ 	16,16,16,16,16,16,16,14,14,14,12,15,11,15,13,16,
+ 	15,16,15,16,16,16,16,16,16,16,15,16,14,14,15,13,
+ 	15,16,16,16,16,15,16,16,16,16,16,16,16,16,16,15,
+ 	15,14,13,14,16,16,14,15,16,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p9_1[] = {
+ 	-416.5, -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, 
+ 	-24.5, 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, 
+ 	367.5, 416.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p9_1[] = {
+ 	   17,   15,   13,   11,    9,    7,    5,    3,
+ 	    1,    0,    2,    4,    6,    8,   10,   12,
+ 	   14,   16,   18,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p9_1 = {
+ 	_vq_quantthresh__44c9_s_p9_1,
+ 	_vq_quantmap__44c9_s_p9_1,
+ 	19,
+ 	19
+ };
+ 
+ static static_codebook _44c9_s_p9_1 = {
+ 	2, 361,
+ 	_vq_lengthlist__44c9_s_p9_1,
+ 	1, -518287360, 1622704128, 5, 0,
+ 	_vq_quantlist__44c9_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44c9_s_p9_2[] = {
+ 	24,
+ 	23,
+ 	25,
+ 	22,
+ 	26,
+ 	21,
+ 	27,
+ 	20,
+ 	28,
+ 	19,
+ 	29,
+ 	18,
+ 	30,
+ 	17,
+ 	31,
+ 	16,
+ 	32,
+ 	15,
+ 	33,
+ 	14,
+ 	34,
+ 	13,
+ 	35,
+ 	12,
+ 	36,
+ 	11,
+ 	37,
+ 	10,
+ 	38,
+ 	9,
+ 	39,
+ 	8,
+ 	40,
+ 	7,
+ 	41,
+ 	6,
+ 	42,
+ 	5,
+ 	43,
+ 	4,
+ 	44,
+ 	3,
+ 	45,
+ 	2,
+ 	46,
+ 	1,
+ 	47,
+ 	0,
+ 	48,
+ };
+ 
+ static long _vq_lengthlist__44c9_s_p9_2[] = {
+ 	 3, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 7, 6, 6, 7, 7, 6, 7, 6, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__44c9_s_p9_2[] = {
+ 	-23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, 
+ 	-15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, 
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ 	8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 
+ 	16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 
+ };
+ 
+ static long _vq_quantmap__44c9_s_p9_2[] = {
+ 	   47,   45,   43,   41,   39,   37,   35,   33,
+ 	   31,   29,   27,   25,   23,   21,   19,   17,
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,   18,   20,   22,   24,   26,   28,   30,
+ 	   32,   34,   36,   38,   40,   42,   44,   46,
+ 	   48,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44c9_s_p9_2 = {
+ 	_vq_quantthresh__44c9_s_p9_2,
+ 	_vq_quantmap__44c9_s_p9_2,
+ 	49,
+ 	49
+ };
+ 
+ static static_codebook _44c9_s_p9_2 = {
+ 	1, 49,
+ 	_vq_lengthlist__44c9_s_p9_2,
+ 	1, -526909440, 1611661312, 6, 0,
+ 	_vq_quantlist__44c9_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44c9_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44c9_s_short[] = {
+ 	 5,13,17,15,16,16,18,17,18,18, 5, 7,10,12,12,12,
+ 	12,17,18,17, 7, 6, 7, 8, 9, 9, 9,13,17,17, 8, 6,
+ 	 6, 5, 6, 7, 8,11,16,18, 9, 7, 7, 5, 5, 6, 7,10,
+ 	15,18, 9, 8, 7, 6, 5, 4, 5, 7,13,17,11,11, 9, 8,
+ 	 7, 4, 3, 5,12,18,13,13,12,10, 7, 5, 4, 3, 8,13,
+ 	16,16,16,13, 8, 8, 7, 5, 8,12,15,18,17,15,11,10,
+ 	 9, 8,10,14,
+ };
+ 
+ static static_codebook _huff_book__44c9_s_short = {
+ 	2, 100,
+ 	_huff_lengthlist__44c9_s_short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p1_0[] = {
+ 	 1, 5, 4, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0,
+ 	 0, 0, 8,10,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,10, 9, 0, 0, 0,
+ 	 0, 0, 0, 8, 9,11, 0, 0, 0, 0, 0, 0, 9,11,11, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9,10, 0, 0,
+ 	 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 9,11,11,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,11, 0,
+ 	 0, 0, 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,11,11,
+ 	 0, 0, 0, 0, 0, 0, 8,11, 9, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p1_0 = {
+ 	_vq_quantthresh__8c0_s_p1_0,
+ 	_vq_quantmap__8c0_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8c0_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__8c0_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__8c0_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p2_0[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p2_0 = {
+ 	_vq_quantthresh__8c0_s_p2_0,
+ 	_vq_quantmap__8c0_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8c0_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__8c0_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8c0_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p3_0[] = {
+ 	 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 7, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 5, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 8, 8,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 7, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p3_0 = {
+ 	_vq_quantthresh__8c0_s_p3_0,
+ 	_vq_quantmap__8c0_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8c0_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__8c0_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8c0_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p4_0[] = {
+ 	 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0,
+ 	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p4_0 = {
+ 	_vq_quantthresh__8c0_s_p4_0,
+ 	_vq_quantmap__8c0_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _8c0_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__8c0_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__8c0_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p5_0[] = {
+ 	 1, 3, 3, 5, 5, 7, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
+ 	 8, 8, 0, 0, 0, 7, 7, 7, 7, 8, 9, 0, 0, 0, 8, 8,
+ 	 8, 8, 9, 9, 0, 0, 0, 8, 8, 8, 8, 9, 9, 0, 0, 0,
+ 	 9, 9, 8, 8,10,10, 0, 0, 0, 9, 9, 8, 8,10,10, 0,
+ 	 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p5_0 = {
+ 	_vq_quantthresh__8c0_s_p5_0,
+ 	_vq_quantmap__8c0_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _8c0_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__8c0_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__8c0_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p6_0[] = {
+ 	 1, 3, 3, 6, 6, 8, 8, 9, 9, 8, 8,10, 9,10,10,11,
+ 	11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	11,12, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,12,11, 0, 0, 0, 8, 8, 9, 9,10,10, 9, 9,10,10,
+ 	11,11,12,12, 0, 0, 0, 8, 8, 9, 9,10,10, 9, 9,11,
+ 	10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,10,10,
+ 	11,11,11,12,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,10,
+ 	10,11,11,12,12,13,13, 0, 0, 0,10,10,10,10,11,11,
+ 	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,10, 9,10,
+ 	11,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
+ 	10, 9,10,11,12,12,13,13,14,13, 0, 0, 0, 0, 0, 9,
+ 	 9, 9,10,10,10,11,11,13,12,13,13, 0, 0, 0, 0, 0,
+ 	10,10,10,10,11,11,12,12,13,13,14,14, 0, 0, 0, 0,
+ 	 0, 0, 0,10,10,11,11,12,12,13,13,13,14, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,11,11,12,12,13,14,14,14, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,11,11,12,12,13,13,14,13, 0,
+ 	 0, 0, 0, 0, 0, 0,11,11,12,12,13,13,14,14,14,14,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p6_0 = {
+ 	_vq_quantthresh__8c0_s_p6_0,
+ 	_vq_quantmap__8c0_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _8c0_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__8c0_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__8c0_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p7_0[] = {
+ 	 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,11, 9,10,12,
+ 	 9,10, 4, 7, 7,10,10,10,11, 9, 9, 6,11,10,11,11,
+ 	12,11,11,11, 6,10,10,11,11,12,11,10,10, 6, 9,10,
+ 	11,11,11,11,10,10, 7,10,11,12,11,11,12,11,12, 6,
+ 	 9, 9,10, 9, 9,11,10,10, 6, 9, 9,10,10,10,11,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p7_0 = {
+ 	_vq_quantthresh__8c0_s_p7_0,
+ 	_vq_quantmap__8c0_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8c0_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8c0_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__8c0_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p7_1[] = {
+ 	 1, 3, 3, 6, 6, 8, 8, 9, 9, 9, 9,10,10,10, 7, 7,
+ 	 8, 8, 9, 9, 9, 9,10,10, 9, 7, 7, 8, 8, 9, 9, 9,
+ 	 9,10,10,10, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10, 8,
+ 	 8, 9, 9, 9, 9, 8, 9,10,10,10, 8, 8, 9, 9, 9,10,
+ 	10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,10,11,10,11,
+ 	 9, 9, 9, 9,10,10,10,10,11,11,11,10,10, 9, 9,10,
+ 	10,10, 9,11,10,10,10,10,10,10, 9, 9,10,10,11,11,
+ 	10,10,10, 9, 9, 9,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p7_1 = {
+ 	_vq_quantthresh__8c0_s_p7_1,
+ 	_vq_quantmap__8c0_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _8c0_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__8c0_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__8c0_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p8_0[] = {
+ 	 1, 4, 4, 7, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 6, 6,
+ 	 7, 7, 8, 8, 7, 7, 8, 9,10,10, 7, 6, 6, 7, 7, 8,
+ 	 7, 7, 7, 9, 9,10,12, 0, 8, 8, 8, 8, 8, 9, 8, 8,
+ 	 9, 9,10,10, 0, 8, 8, 8, 8, 8, 9, 8, 9, 9, 9,11,
+ 	10, 0, 0,13, 9, 8, 9, 9, 9, 9,10,10,11,11, 0,13,
+ 	 0, 9, 9, 9, 9, 9, 9,11,10,11,11, 0, 0, 0, 8, 9,
+ 	10, 9,10,10,13,11,12,12, 0, 0, 0, 8, 9, 9, 9,10,
+ 	10,13,12,12,13, 0, 0, 0,12, 0,10,10,12,11,10,11,
+ 	12,12, 0, 0, 0,13,13,10,10,10,11,12, 0,13, 0, 0,
+ 	 0, 0, 0, 0,13,11, 0,12,12,12,13,12, 0, 0, 0, 0,
+ 	 0, 0,13,13,11,13,13,11,12,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p8_0 = {
+ 	_vq_quantthresh__8c0_s_p8_0,
+ 	_vq_quantmap__8c0_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _8c0_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__8c0_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__8c0_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p8_1[] = {
+ 	 1, 3, 4, 5, 5, 7, 6, 6, 6, 5, 7, 7, 7, 6, 6, 7,
+ 	 7, 7, 6, 6, 7, 7, 7, 6, 6,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p8_1 = {
+ 	_vq_quantthresh__8c0_s_p8_1,
+ 	_vq_quantmap__8c0_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8c0_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__8c0_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8c0_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p9_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p9_0[] = {
+ 	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p9_0[] = {
+ 	-157.5, 157.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p9_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p9_0 = {
+ 	_vq_quantthresh__8c0_s_p9_0,
+ 	_vq_quantmap__8c0_s_p9_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8c0_s_p9_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8c0_s_p9_0,
+ 	1, -518803456, 1628680192, 2, 0,
+ 	_vq_quantlist__8c0_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p9_1[] = {
+ 	 1, 4, 4, 5, 5,10, 8,11,11,11,11,11,11,11,11, 6,
+ 	 6, 6, 7, 6,11,10,11,11,11,11,11,11,11,11, 7, 5,
+ 	 6, 6, 6, 8, 7,11,11,11,11,11,11,11,11,11, 7, 8,
+ 	 8, 8, 9, 9,11,11,11,11,11,11,11,11,11, 9, 8, 7,
+ 	 8, 9,11,11,11,11,11,11,11,11,11,11,11,10,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,10,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p9_1[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p9_1 = {
+ 	_vq_quantthresh__8c0_s_p9_1,
+ 	_vq_quantmap__8c0_s_p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _8c0_s_p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__8c0_s_p9_1,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__8c0_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c0_s_p9_2[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__8c0_s_p9_2[] = {
+ 	 1, 5, 5, 7, 7, 8, 7, 8, 8,10,10, 9, 9,10,10,10,
+ 	11,11,10,12,11,12,12,12, 9, 8, 8, 8, 8, 8, 9,10,
+ 	10,10,10,11,11,11,10,11,11,12,12,11,12, 8, 8, 7,
+ 	 7, 8, 9,10,10,10, 9,10,10, 9,10,10,11,11,11,11,
+ 	11,11, 9, 9, 9, 9, 8, 9,10,10,11,10,10,11,11,12,
+ 	10,10,12,12,11,11,10, 9, 9,10, 8, 9,10,10,10, 9,
+ 	10,10,11,11,10,11,10,10,10,12,12,12, 9,10, 9,10,
+ 	 9, 9,10,10,11,11,11,11,10,10,10,11,12,11,12,11,
+ 	12,10,11,10,11, 9,10, 9,10, 9,10,10, 9,10,10,11,
+ 	10,11,11,11,11,12,11, 9,10,10,10,10,11,11,11,11,
+ 	11,10,11,11,11,11,10,12,10,12,12,11,12,10,10,11,
+ 	10, 9,11,10,11, 9,10,11,10,10,10,11,11,11,11,12,
+ 	12,10, 9, 9,11,10, 9,12,11,10,12,12,11,11,11,11,
+ 	10,11,11,12,11,10,12, 9,11,10,11,10,10,11,10,11,
+ 	 9,10,10,10,11,12,11,11,12,11,10,10,11,11, 9,10,
+ 	10,12,10,11,10,10,10, 9,10,10,10,10, 9,10,10,11,
+ 	11,11,11,12,11,10,10,10,10,11,11,10,11,11, 9,11,
+ 	10,12,10,12,11,10,11,10,10,10,11,10,10,11,11,10,
+ 	11,10,10,10,10,11,11,12,10,10,10,11,10,11,12,11,
+ 	10,11,10,10,11,11,10,12,10, 9,10,10,11,11,11,10,
+ 	12,10,10,11,11,11,10,10,11,10,10,10,11,10,11,10,
+ 	12,11,11,10,10,10,12,10,10,11, 9,10,11,11,11,10,
+ 	10,11,10,10, 9,11,11,12,12,11,12,11,11,11,11,11,
+ 	11, 9,10,11,10,12,10,10,10,10,11,10,10,11,10,10,
+ 	12,10,10,10,10,10, 9,12,10,10,10,10,12, 9,11,10,
+ 	10,11,10,12,12,10,12,12,12,10,10,10,10, 9,10,11,
+ 	10,10,12,10,10,12,11,10,11,10,10,12,11,10,12,10,
+ 	10,11, 9,11,10, 9,10, 9,10,
+ };
+ 
+ static float _vq_quantthresh__8c0_s_p9_2[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__8c0_s_p9_2[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c0_s_p9_2 = {
+ 	_vq_quantthresh__8c0_s_p9_2,
+ 	_vq_quantmap__8c0_s_p9_2,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _8c0_s_p9_2 = {
+ 	2, 441,
+ 	_vq_lengthlist__8c0_s_p9_2,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__8c0_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__8c0_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__8c0_s_single[] = {
+ 	 4, 5,18, 7,10, 6, 7, 8, 9,10, 5, 2,18, 5, 7, 5,
+ 	 6, 7, 8,11,17,17,17,17,17,17,17,17,17,17, 7, 4,
+ 	17, 6, 9, 6, 8,10,12,15,11, 7,17, 9, 6, 6, 7, 9,
+ 	11,15, 6, 4,17, 6, 6, 4, 5, 8,11,16, 6, 6,17, 8,
+ 	 6, 5, 6, 9,13,16, 8, 9,17,11, 9, 8, 8,11,13,17,
+ 	 9,12,17,15,14,13,12,13,14,17,12,15,17,17,17,17,
+ 	17,16,17,17,
+ };
+ 
+ static static_codebook _huff_book__8c0_s_single = {
+ 	2, 100,
+ 	_huff_lengthlist__8c0_s_single,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p1_0[] = {
+ 	 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0,
+ 	 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 7, 8, 0, 0, 0, 0, 0, 0, 7, 9, 8, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 8, 8, 0, 0, 0, 0,
+ 	 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+ 	 0, 0, 0, 8, 8,10, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 5, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0,
+ 	 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10, 0,
+ 	 0, 0, 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,10,10,
+ 	 0, 0, 0, 0, 0, 0, 8,10, 8, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p1_0 = {
+ 	_vq_quantthresh__8c1_s_p1_0,
+ 	_vq_quantmap__8c1_s_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8c1_s_p1_0 = {
+ 	8, 6561,
+ 	_vq_lengthlist__8c1_s_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__8c1_s_p1_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p2_0[] = {
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p2_0 = {
+ 	_vq_quantthresh__8c1_s_p2_0,
+ 	_vq_quantmap__8c1_s_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8c1_s_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__8c1_s_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8c1_s_p2_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p3_0[] = {
+ 	 2, 4, 4, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 4, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, 6, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 6, 6, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p3_0 = {
+ 	_vq_quantthresh__8c1_s_p3_0,
+ 	_vq_quantmap__8c1_s_p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8c1_s_p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__8c1_s_p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8c1_s_p3_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p4_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p4_0[] = {
+ 	 1, 2, 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+ 	 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+ 	 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+ 	 8, 8, 0, 0, 0, 0, 0, 0, 0, 9, 8, 0, 0, 0, 0, 0,
+ 	 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p4_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p4_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p4_0 = {
+ 	_vq_quantthresh__8c1_s_p4_0,
+ 	_vq_quantmap__8c1_s_p4_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _8c1_s_p4_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__8c1_s_p4_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__8c1_s_p4_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p5_0[] = {
+ 	 1, 3, 3, 4, 5, 6, 6, 8, 8, 0, 0, 0, 8, 8, 7, 7,
+ 	 9, 9, 0, 0, 0, 8, 8, 7, 7, 9, 9, 0, 0, 0, 9,10,
+ 	 8, 8, 9, 9, 0, 0, 0,10,10, 8, 8, 9, 9, 0, 0, 0,
+ 	11,10, 8, 8,10,10, 0, 0, 0,11,11, 8, 8,10,10, 0,
+ 	 0, 0,12,12, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p5_0 = {
+ 	_vq_quantthresh__8c1_s_p5_0,
+ 	_vq_quantmap__8c1_s_p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _8c1_s_p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__8c1_s_p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__8c1_s_p5_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p6_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p6_0[] = {
+ 	 1, 3, 3, 5, 5, 8, 8, 8, 8, 9, 9,10,10,11,11,11,
+ 	11, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	12,12, 0, 0, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,12,12, 0, 0, 0, 9, 9, 8, 8,10,10,10,10,11,11,
+ 	12,12,12,12, 0, 0, 0, 9, 9, 8, 8,10,10,10,10,11,
+ 	11,12,12,12,12, 0, 0, 0,10,10, 9, 9,10,10,10,10,
+ 	11,11,12,12,13,13, 0, 0, 0,10,10, 9, 9,10,10,10,
+ 	10,11,11,12,12,13,13, 0, 0, 0,11,11, 9, 9,10,10,
+ 	10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,10,
+ 	10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9, 9,
+ 	10,10,11,11,12,12,12,12,13,13, 0, 0, 0, 0, 0, 9,
+ 	 9,10,10,11,11,12,11,12,12,13,13, 0, 0, 0, 0, 0,
+ 	10,10,11,11,11,11,12,12,13,12,13,13, 0, 0, 0, 0,
+ 	 0, 0, 0,11,10,11,11,12,12,13,13,13,13, 0, 0, 0,
+ 	 0, 0, 0, 0,11,11,12,12,12,12,13,13,13,14, 0, 0,
+ 	 0, 0, 0, 0, 0,11,11,12,12,12,12,13,13,14,13, 0,
+ 	 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,13,13,14,14,
+ 	 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,13,13,13,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p6_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p6_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p6_0 = {
+ 	_vq_quantthresh__8c1_s_p6_0,
+ 	_vq_quantmap__8c1_s_p6_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _8c1_s_p6_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__8c1_s_p6_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__8c1_s_p6_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p7_0[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+ 	 9, 9, 5, 7, 7,10, 9, 9,10, 9, 9, 6,10,10,10,10,
+ 	10,11,10,10, 6, 9, 9,10, 9,10,11,10,10, 6, 9, 9,
+ 	10, 9, 9,11, 9,10, 7,10,10,11,11,11,11,10,10, 6,
+ 	 9, 9,10,10,10,11, 9, 9, 6, 9, 9,10,10,10,10, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p7_0 = {
+ 	_vq_quantthresh__8c1_s_p7_0,
+ 	_vq_quantmap__8c1_s_p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8c1_s_p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8c1_s_p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__8c1_s_p7_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p7_1[] = {
+ 	 2, 3, 3, 5, 5, 7, 7, 7, 7, 7, 7,10,10, 9, 7, 7,
+ 	 7, 7, 8, 8, 8, 8, 9, 9, 9, 7, 7, 7, 7, 8, 8, 8,
+ 	 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
+ 	 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 8, 8, 8, 8, 8,
+ 	 8, 8,10,10,10, 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,
+ 	 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+ 	 8, 8, 8,10,10,10,10,10, 8, 8, 8, 8, 8, 8,10,10,
+ 	10,10,10, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p7_1 = {
+ 	_vq_quantthresh__8c1_s_p7_1,
+ 	_vq_quantmap__8c1_s_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _8c1_s_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__8c1_s_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__8c1_s_p7_1,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p8_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p8_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 5,
+ 	 7, 7, 8, 8, 8, 8, 9,10,11,11, 7, 5, 5, 7, 7, 8,
+ 	 8, 9, 9,10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11, 0,12,12, 9, 9, 9, 9,10, 9,10,11,11,11, 0,13,
+ 	12, 9, 8, 9, 9,10,10,11,11,12,11, 0, 0, 0, 9, 9,
+ 	 9, 9,10,10,11,11,12,12, 0, 0, 0,10,10, 9, 9,10,
+ 	10,11,11,12,12, 0, 0, 0,13,13,10,10,11,11,12,11,
+ 	13,12, 0, 0, 0,14,14,10,10,11,10,11,11,12,12, 0,
+ 	 0, 0, 0, 0,12,12,11,11,12,12,13,13, 0, 0, 0, 0,
+ 	 0,12,12,11,10,12,11,13,12,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p8_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p8_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p8_0 = {
+ 	_vq_quantthresh__8c1_s_p8_0,
+ 	_vq_quantmap__8c1_s_p8_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _8c1_s_p8_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__8c1_s_p8_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__8c1_s_p8_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p8_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p8_1[] = {
+ 	 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
+ 	 6, 6, 5, 5, 6, 6, 6, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p8_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p8_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p8_1 = {
+ 	_vq_quantthresh__8c1_s_p8_1,
+ 	_vq_quantmap__8c1_s_p8_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8c1_s_p8_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__8c1_s_p8_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8c1_s_p8_1,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p9_0[] = {
+ 	 1, 3, 3,10,10,10,10,10,10,10,10,10,10, 5, 6, 6,
+ 	10,10,10,10,10,10,10,10,10,10, 6, 7, 8,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p9_0[] = {
+ 	-1732.5, -1417.5, -1102.5, -787.5, -472.5, -157.5, 157.5, 472.5, 
+ 	787.5, 1102.5, 1417.5, 1732.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p9_0 = {
+ 	_vq_quantthresh__8c1_s_p9_0,
+ 	_vq_quantmap__8c1_s_p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _8c1_s_p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__8c1_s_p9_0,
+ 	1, -513964032, 1628680192, 4, 0,
+ 	_vq_quantlist__8c1_s_p9_0,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p9_1[] = {
+ 	 1, 4, 4, 5, 5, 7, 7, 9, 9,11,11,12,12,13,13, 6,
+ 	 5, 5, 6, 6, 9, 9,10,10,12,12,12,13,15,14, 6, 5,
+ 	 5, 7, 7, 9, 9,10,10,12,12,12,13,14,13,17, 7, 7,
+ 	 8, 8,10,10,11,11,12,13,13,13,13,13,17, 7, 7, 8,
+ 	 8,10,10,11,11,13,13,13,13,14,14,17,11,11, 9, 9,
+ 	11,11,12,12,12,13,13,14,15,13,17,12,12, 9, 9,11,
+ 	11,12,12,13,13,13,13,14,16,17,17,17,11,12,12,12,
+ 	13,13,13,14,15,14,15,15,17,17,17,12,12,11,11,13,
+ 	13,14,14,15,14,15,15,17,17,17,15,15,13,13,14,14,
+ 	15,14,15,15,16,15,17,17,17,15,15,13,13,13,14,14,
+ 	15,15,15,15,16,17,17,17,17,16,14,15,14,14,15,14,
+ 	14,15,15,15,17,17,17,17,17,14,14,16,14,15,15,15,
+ 	15,15,15,17,17,17,17,17,17,16,16,15,17,15,15,14,
+ 	17,15,17,16,17,17,17,17,16,15,14,15,15,15,15,15,
+ 	15,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p9_1[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p9_1 = {
+ 	_vq_quantthresh__8c1_s_p9_1,
+ 	_vq_quantmap__8c1_s_p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _8c1_s_p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__8c1_s_p9_1,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__8c1_s_p9_1,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8c1_s_p9_2[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__8c1_s_p9_2[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,11,11,12, 7, 7, 7, 7, 8, 8, 9, 9,
+ 	 9, 9,10,10,10,10,10,10,10,10,11,11,11, 7, 7, 7,
+ 	 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,11,
+ 	11,12, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,10,
+ 	10,10,10,10,11,11,11, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9,10,10,10,10,10,10,10,10,11,11,11, 8, 8, 8, 8,
+ 	 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,11,11,
+ 	11, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10,
+ 	10,10,10,11,12,11, 9, 9, 8, 9, 9, 9, 9, 9,10,10,
+ 	10,10,10,10,10,10,10,10,11,11,11,11,11, 8, 8, 9,
+ 	 9, 9, 9,10,10,10,10,10,10,10,10,10,10,11,12,11,
+ 	12,11, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
+ 	10,10,11,11,11,11,11, 9, 9, 9, 9,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,12,11,12,11,11, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,12,11,11,11,
+ 	11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	11,11,11,12,11,11,12,11,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,11,10,11,11,11,11,11,11,11,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,11,11,12,11,12,
+ 	11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	11,11,12,11,12,11,11,11,11,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,11,11,12,11,11,12,11,11,12,10,10,
+ 	11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,
+ 	11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,12,
+ 	12,11,12,11,11,12,12,12,11,11,10,10,10,10,10,10,
+ 	10,10,10,11,12,12,11,12,12,11,12,11,11,11,11,10,
+ 	10,10,10,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__8c1_s_p9_2[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__8c1_s_p9_2[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8c1_s_p9_2 = {
+ 	_vq_quantthresh__8c1_s_p9_2,
+ 	_vq_quantmap__8c1_s_p9_2,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _8c1_s_p9_2 = {
+ 	2, 441,
+ 	_vq_lengthlist__8c1_s_p9_2,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__8c1_s_p9_2,
+ 	NULL,
+ 	&_vq_auxt__8c1_s_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__8c1_s_single[] = {
+ 	 4, 6,18, 8,11, 8, 8, 9, 9,10, 4, 4,18, 5, 9, 5,
+ 	 6, 7, 8,10,18,18,18,18,17,17,17,17,17,17, 7, 5,
+ 	17, 6,11, 6, 7, 8, 9,12,12, 9,17,12, 8, 8, 9,10,
+ 	10,13, 7, 5,17, 6, 8, 4, 5, 6, 8,10, 6, 5,17, 6,
+ 	 8, 5, 4, 5, 7, 9, 7, 7,17, 8, 9, 6, 5, 5, 6, 8,
+ 	 8, 8,17, 9,11, 8, 6, 6, 6, 7, 9,10,17,12,12,10,
+ 	 9, 7, 7, 8,
+ };
+ 
+ static static_codebook _huff_book__8c1_s_single = {
+ 	2, 100,
+ 	_huff_lengthlist__8c1_s_single,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ /***** residue backends *********************************************/
+ 
+ static vorbis_info_residue0 _residue_44_mid={
+   0,-1, -1, 10,-1,
+   /*  0     1     2     3     4     5     6     7     8  */
+   {0},
+   {-1},
+   {  .5,  1.5,  1.5,  2.5,  2.5,  4.5,  8.5,  16.5, 32.5},
+   {  .5,   .5, 999.,   .5,  999., 4.5,  8.5,  16.5, 32.5},
+ };
+ 
+ static vorbis_info_residue0 _residue_44_high={
+   0,-1, -1, 10,-1,
+   /*  0     1     2     3     4     5     6     7     8  */
+   {0},
+   {-1},
+   {  .5,  1.5,  2.5,  4.5,  8.5, 16.5, 32.5, 71.5,157.5},
+   {  .5,  1.5,  2.5,  3.5,  4.5,  8.5, 16.5, 71.5,157.5},
+ };
+ 
+ static static_bookblock _resbook_44s_0={
+   {
+     {0},{0,0,&_44c0_s_p1_0},{0,0,&_44c0_s_p2_0},{0,0,&_44c0_s_p3_0},
+     {0,0,&_44c0_s_p4_0},{0,0,&_44c0_s_p5_0},{0,0,&_44c0_s_p6_0},
+     {&_44c0_s_p7_0,&_44c0_s_p7_1},{&_44c0_s_p8_0,&_44c0_s_p8_1},
+     {&_44c0_s_p9_0,&_44c0_s_p9_1,&_44c0_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44sm_0={
+   {
+     {0},{0,0,&_44c0_sm_p1_0},{0,0,&_44c0_sm_p2_0},{0,0,&_44c0_sm_p3_0},
+     {0,0,&_44c0_sm_p4_0},{0,0,&_44c0_sm_p5_0},{0,0,&_44c0_sm_p6_0},
+     {&_44c0_sm_p7_0,&_44c0_sm_p7_1},{&_44c0_sm_p8_0,&_44c0_sm_p8_1},
+     {&_44c0_sm_p9_0,&_44c0_sm_p9_1,&_44c0_sm_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_1={
+   {
+     {0},{0,0,&_44c1_s_p1_0},{0,0,&_44c1_s_p2_0},{0,0,&_44c1_s_p3_0},
+     {0,0,&_44c1_s_p4_0},{0,0,&_44c1_s_p5_0},{0,0,&_44c1_s_p6_0},
+     {&_44c1_s_p7_0,&_44c1_s_p7_1},{&_44c1_s_p8_0,&_44c1_s_p8_1},
+     {&_44c1_s_p9_0,&_44c1_s_p9_1,&_44c1_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44sm_1={
+   {
+     {0},{0,0,&_44c1_sm_p1_0},{0,0,&_44c1_sm_p2_0},{0,0,&_44c1_sm_p3_0},
+     {0,0,&_44c1_sm_p4_0},{0,0,&_44c1_sm_p5_0},{0,0,&_44c1_sm_p6_0},
+     {&_44c1_sm_p7_0,&_44c1_sm_p7_1},{&_44c1_sm_p8_0,&_44c1_sm_p8_1},
+     {&_44c1_sm_p9_0,&_44c1_sm_p9_1,&_44c1_sm_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_2={
+   {
+     {0},{0,0,&_44c2_s_p1_0},{0,0,&_44c2_s_p2_0},{0,0,&_44c2_s_p3_0},
+     {0,0,&_44c2_s_p4_0},{0,0,&_44c2_s_p5_0},{0,0,&_44c2_s_p6_0},
+     {&_44c2_s_p7_0,&_44c2_s_p7_1},{&_44c2_s_p8_0,&_44c2_s_p8_1},
+     {&_44c2_s_p9_0,&_44c2_s_p9_1,&_44c2_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_3={
+   {
+     {0},{0,0,&_44c3_s_p1_0},{0,0,&_44c3_s_p2_0},{0,0,&_44c3_s_p3_0},
+     {0,0,&_44c3_s_p4_0},{0,0,&_44c3_s_p5_0},{0,0,&_44c3_s_p6_0},
+     {&_44c3_s_p7_0,&_44c3_s_p7_1},{&_44c3_s_p8_0,&_44c3_s_p8_1},
+     {&_44c3_s_p9_0,&_44c3_s_p9_1,&_44c3_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_4={
+   {
+     {0},{0,0,&_44c4_s_p1_0},{0,0,&_44c4_s_p2_0},{0,0,&_44c4_s_p3_0},
+     {0,0,&_44c4_s_p4_0},{0,0,&_44c4_s_p5_0},{0,0,&_44c4_s_p6_0},
+     {&_44c4_s_p7_0,&_44c4_s_p7_1},{&_44c4_s_p8_0,&_44c4_s_p8_1},
+     {&_44c4_s_p9_0,&_44c4_s_p9_1,&_44c4_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_5={
+   {
+     {0},{0,0,&_44c5_s_p1_0},{0,0,&_44c5_s_p2_0},{0,0,&_44c5_s_p3_0},
+     {0,0,&_44c5_s_p4_0},{0,0,&_44c5_s_p5_0},{0,0,&_44c5_s_p6_0},
+     {&_44c5_s_p7_0,&_44c5_s_p7_1},{&_44c5_s_p8_0,&_44c5_s_p8_1},
+     {&_44c5_s_p9_0,&_44c5_s_p9_1,&_44c5_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_6={
+   {
+     {0},{0,0,&_44c6_s_p1_0},{0,0,&_44c6_s_p2_0},{0,0,&_44c6_s_p3_0},
+     {0,0,&_44c6_s_p4_0},
+     {&_44c6_s_p5_0,&_44c6_s_p5_1},
+     {&_44c6_s_p6_0,&_44c6_s_p6_1},
+     {&_44c6_s_p7_0,&_44c6_s_p7_1},
+     {&_44c6_s_p8_0,&_44c6_s_p8_1},
+     {&_44c6_s_p9_0,&_44c6_s_p9_1,&_44c6_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_7={
+   {
+     {0},{0,0,&_44c7_s_p1_0},{0,0,&_44c7_s_p2_0},{0,0,&_44c7_s_p3_0},
+     {0,0,&_44c7_s_p4_0},
+     {&_44c7_s_p5_0,&_44c7_s_p5_1},
+     {&_44c7_s_p6_0,&_44c7_s_p6_1},
+     {&_44c7_s_p7_0,&_44c7_s_p7_1},
+     {&_44c7_s_p8_0,&_44c7_s_p8_1},
+     {&_44c7_s_p9_0,&_44c7_s_p9_1,&_44c7_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_8={
+   {
+     {0},{0,0,&_44c8_s_p1_0},{0,0,&_44c8_s_p2_0},{0,0,&_44c8_s_p3_0},
+     {0,0,&_44c8_s_p4_0},
+     {&_44c8_s_p5_0,&_44c8_s_p5_1},
+     {&_44c8_s_p6_0,&_44c8_s_p6_1},
+     {&_44c8_s_p7_0,&_44c8_s_p7_1},
+     {&_44c8_s_p8_0,&_44c8_s_p8_1},
+     {&_44c8_s_p9_0,&_44c8_s_p9_1,&_44c8_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44s_9={
+   {
+     {0},{0,0,&_44c9_s_p1_0},{0,0,&_44c9_s_p2_0},{0,0,&_44c9_s_p3_0},
+     {0,0,&_44c9_s_p4_0},
+     {&_44c9_s_p5_0,&_44c9_s_p5_1},
+     {&_44c9_s_p6_0,&_44c9_s_p6_1},
+     {&_44c9_s_p7_0,&_44c9_s_p7_1},
+     {&_44c9_s_p8_0,&_44c9_s_p8_1},
+     {&_44c9_s_p9_0,&_44c9_s_p9_1,&_44c9_s_p9_2}
+    }
+ };
+ 
+ 
+ static vorbis_residue_template _res_44s_0[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c0_s_short,&_huff_book__44c0_sm_short,
+    &_resbook_44s_0,&_resbook_44sm_0},
+ 
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c0_s_long,&_huff_book__44c0_sm_long,
+    &_resbook_44s_0,&_resbook_44sm_0}
+ };
+ static vorbis_residue_template _res_44s_1[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c1_s_short,&_huff_book__44c1_sm_short,
+    &_resbook_44s_1,&_resbook_44sm_1},
+ 
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c1_s_long,&_huff_book__44c1_sm_long,
+    &_resbook_44s_1,&_resbook_44sm_1}
+ };
+ static vorbis_residue_template _res_44s_2[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c2_s_short,&_huff_book__44c2_s_short,
+    &_resbook_44s_2,&_resbook_44s_2},
+ 
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c2_s_long,&_huff_book__44c2_s_long,
+    &_resbook_44s_2,&_resbook_44s_2}
+ };
+ static vorbis_residue_template _res_44s_3[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c3_s_short,&_huff_book__44c3_s_short,
+    &_resbook_44s_3,&_resbook_44s_3},
+ 
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c3_s_long,&_huff_book__44c3_s_long,
+    &_resbook_44s_3,&_resbook_44s_3}
+ };
+ static vorbis_residue_template _res_44s_4[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c4_s_short,&_huff_book__44c4_s_short,
+    &_resbook_44s_4,&_resbook_44s_4},
+ 
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c4_s_long,&_huff_book__44c4_s_long,
+    &_resbook_44s_4,&_resbook_44s_4}
+ };
+ static vorbis_residue_template _res_44s_5[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c5_s_short,&_huff_book__44c5_s_short,
+    &_resbook_44s_5,&_resbook_44s_5},
+ 
+   {2,0,  &_residue_44_mid,
+    &_huff_book__44c5_s_long,&_huff_book__44c5_s_long,
+    &_resbook_44s_5,&_resbook_44s_5}
+ };
+ static vorbis_residue_template _res_44s_6[]={
+   {2,0,  &_residue_44_high,
+    &_huff_book__44c6_s_short,&_huff_book__44c6_s_short,
+    &_resbook_44s_6,&_resbook_44s_6},
+ 
+   {2,0,  &_residue_44_high,
+    &_huff_book__44c6_s_long,&_huff_book__44c6_s_long,
+    &_resbook_44s_6,&_resbook_44s_6}
+ };
+ static vorbis_residue_template _res_44s_7[]={
+   {2,0,  &_residue_44_high,
+    &_huff_book__44c7_s_short,&_huff_book__44c7_s_short,
+    &_resbook_44s_7,&_resbook_44s_7},
+ 
+   {2,0,  &_residue_44_high,
+    &_huff_book__44c7_s_long,&_huff_book__44c7_s_long,
+    &_resbook_44s_7,&_resbook_44s_7}
+ };
+ static vorbis_residue_template _res_44s_8[]={
+   {2,0,  &_residue_44_high,
+    &_huff_book__44c8_s_short,&_huff_book__44c8_s_short,
+    &_resbook_44s_8,&_resbook_44s_8},
+ 
+   {2,0,  &_residue_44_high,
+    &_huff_book__44c8_s_long,&_huff_book__44c8_s_long,
+    &_resbook_44s_8,&_resbook_44s_8}
+ };
+ static vorbis_residue_template _res_44s_9[]={
+   {2,0,  &_residue_44_high,
+    &_huff_book__44c9_s_short,&_huff_book__44c9_s_short,
+    &_resbook_44s_9,&_resbook_44s_9},
+ 
+   {2,0,  &_residue_44_high,
+    &_huff_book__44c9_s_long,&_huff_book__44c9_s_long,
+    &_resbook_44s_9,&_resbook_44s_9}
+ };
+ 
+ static vorbis_mapping_template _mapres_template_44_stereo[]={
+   { _map_nominal, _res_44s_0 }, /* 0 */
+   { _map_nominal, _res_44s_1 }, /* 1 */
+   { _map_nominal, _res_44s_2 }, /* 2 */
+   { _map_nominal, _res_44s_3 }, /* 3 */
+   { _map_nominal, _res_44s_4 }, /* 4 */
+   { _map_nominal, _res_44s_5 }, /* 5 */
+   { _map_nominal, _res_44s_6 }, /* 6 */
+   { _map_nominal, _res_44s_7 }, /* 7 */
+   { _map_nominal, _res_44s_8 }, /* 8 */
+   { _map_nominal, _res_44s_9 }, /* 9 */
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: key psychoacoustic settings for 44.1/48kHz
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ 
+ /* preecho trigger settings *****************************************/
+ 
+ static vorbis_info_psy_global _psy_global_44[5]={
+ 
+   {8,   /* lines per eighth octave */
+    {20.f,14.f,12.f,12.f,12.f,12.f,12.f}, 
+    {-60.f,-30.f,-40.f,-40.f,-40.f,-40.f,-40.f}, 2,-75.f,
+    -6.f,
+    {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
+   },
+   {8,   /* lines per eighth octave */
+    {14.f,10.f,10.f,10.f,10.f,10.f,10.f}, 
+    {-40.f,-30.f,-25.f,-25.f,-25.f,-25.f,-25.f}, 2,-80.f,
+    -6.f,
+    {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
+   },
+   {8,   /* lines per eighth octave */
+    {12.f,10.f,10.f,10.f,10.f,10.f,10.f}, 
+    {-20.f,-20.f,-15.f,-15.f,-15.f,-15.f,-15.f}, 0,-80.f,
+    -6.f,
+    {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
+   },
+   {8,   /* lines per eighth octave */
+    {10.f,8.f,8.f,8.f,8.f,8.f,8.f}, 
+    {-20.f,-15.f,-12.f,-12.f,-12.f,-12.f,-12.f}, 0,-80.f,
+    -6.f,
+    {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
+   },
+   {8,   /* lines per eighth octave */
+    {10.f,6.f,6.f,6.f,6.f,6.f,6.f}, 
+    {-15.f,-15.f,-12.f,-12.f,-12.f,-12.f,-12.f}, 0,-85.f,
+    -6.f,
+    {99.},{{99.},{99.}},{0},{0},{{0.},{0.}}
+   },
+ };
+ 
+ /* noise compander lookups * low, mid, high quality ****************/
+ static compandblock _psy_compand_44[6]={
+   /* sub-mode Z short */
+   {{
+     0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
+     8, 9,10,11,12,13,14, 15,     /* 15dB */
+     16,17,18,19,20,21,22, 23,     /* 23dB */
+     24,25,26,27,28,29,30, 31,     /* 31dB */
+     32,33,34,35,36,37,38, 39,     /* 39dB */
+   }},
+   /* mode_Z nominal short*/
+   {{
+      0, 1, 2, 3, 4, 5, 6,  6,     /* 7dB */
+      7, 7, 7, 7, 6, 6, 6,  7,     /* 15dB */
+      7, 8, 9,10,11,12,13, 14,     /* 23dB */
+     15,16,17,17,17,18,18, 19,     /* 31dB */
+     19,19,20,21,22,23,24, 25,     /* 39dB */
+   }},
+   /* mode A short */
+   {{
+     0, 1, 2, 3, 4, 5, 5,  5,     /* 7dB */
+     6, 6, 6, 5, 4, 4, 4,  4,     /* 15dB */
+     4, 4, 5, 5, 5, 6, 6,  6,     /* 23dB */
+     7, 7, 7, 8, 8, 8, 9, 10,     /* 31dB */
+     11,12,13,14,15,16,17, 18,     /* 39dB */
+   }},
+   /* sub-mode Z long */
+   {{
+      0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
+      8, 9,10,11,12,13,14, 15,     /* 15dB */
+     16,17,18,19,20,21,22, 23,     /* 23dB */
+     24,25,26,27,28,29,30, 31,     /* 31dB */
+     32,33,34,35,36,37,38, 39,     /* 39dB */
+   }},
+   /* mode_Z nominal long */
+   {{
+     0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
+     8, 9,10,11,12,12,13, 13,     /* 15dB */
+     13,14,14,14,15,15,15, 15,     /* 23dB */
+     16,16,17,17,17,18,18, 19,     /* 31dB */
+     19,19,20,21,22,23,24, 25,     /* 39dB */
+   }},
+   /* mode A long */
+   {{
+     0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
+     8, 8, 7, 6, 5, 4, 4,  4,     /* 15dB */
+     4, 4, 5, 5, 5, 6, 6,  6,     /* 23dB */
+     7, 7, 7, 8, 8, 8, 9, 10,     /* 31dB */
+     11,12,13,14,15,16,17, 18,     /* 39dB */
+   }}
+ };
+ 
+ /* tonal masking curve level adjustments *************************/
+ static vp_adjblock _vp_tonemask_adj_longblock[11]={
+   /* adjust for mode zero */
+   /* 63     125     250     500     1     2     4     8    16 */
+   {{-15,-15,-15,-15,-10, -8, -4,-2, 0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 0 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 5, 0, 0, 0, 0, 0}}, /* 1 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 3 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 4 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 5 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 6 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 7 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 8 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 9 */
+   {{-15,-15,-15,-15,-15,-12,-10,-8, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 10 */
+ };
+ static vp_adjblock _vp_tonemask_adj_otherblock[11]={
+   /* adjust for mode zero */
+   /* 63     125     250     500       1     2     4     8    16 */
+   {{-20,-20,-20,-20,-14,-12,-10, -8, -4, 0, 0,10, 0, 0, 0, 0, 0}}, /* 0 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 5, 0, 0, 0, 0, 0}}, /* 1 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 3 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 4 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 5 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 6 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 7 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 8 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 9 */
+   {{-20,-20,-20,-20,-20,-18,-16,-14,-10, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 10 */
+ };
+ 
+ static noise3 _psy_noisebias_trans_low[2]={
+   /*  63     125     250     500      1k       2k      4k      8k     16k*/
+   /* 0 */
+   {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  8,  8,  8,  8, 10, 12, 14, 20},
+     {-30,-30,-30,-30,-26,-20,-16, -8, -6, -6, -2,  2,  2,  4,  8,  8, 15},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
+   /* 1 */
+   {{{-15,-15,-15,-15,-15,-10, -5,  0,  2,  2,  6,  6,  6,  8, 10, 12, 15},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2,  0,  0,  0,  2,  4,  10},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -4, -4, -4,  -2}}},
+ };
+ static noise3 _psy_noisebias_long_low[2]={
+     /*63     125     250     500      1k       2k      4k      8k     16k*/
+   /* 0 */
+   {{{-10,-10,-10,-10,-10, -4,  0,  0,  0,  6,  6,  6,  6, 10, 10, 12,  20},
+     {-20,-20,-20,-20,-20,-20,-10, -2,  0,  0,  0,  0,  0,  2,  4,  6,  15},
+     {-20,-20,-20,-20,-20,-20,-20,-10, -6, -6, -6, -6, -6, -4, -4, -4, -2}}},
+   /* 1 */
+   {{{-10,-10,-10,-10,-10,-10, -8, -8,  0,  2,  4,  4,  5,  5,  5,  8,  10},
+     {-20,-20,-20,-20,-20,-20,-20,-14, -8, -2,  0,  0,  0,  0,  2,  4,  10},
+     {-20,-20,-20,-20,-20,-20,-20,-14, -6, -6, -6, -6, -6, -4, -4, -4, -2}}},
+ };
+ 
+ static noise3 _psy_noisebias_trans[11]={
+   /*  63     125     250     500      1k       2k      4k      8k     16k*/
+   /* 0 */
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8,  10},
+     {-30,-30,-30,-30,-26,-22,-20,-14, -8, -4,  0,  0,  0,  0,  2,  4,  10},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -4, -4, -4,  -2}}},
+   /* 1 */
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8,  10},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2,  0,  2,  8},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},
+   /* 2 */
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  2,  2,  4,  4,  5,  6,  10},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2, -2, -2, -2,  0,  2,  6},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
+   /* 3 */
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  2,  2,  4,  4,  4,  5,  8},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -1,  1,  6},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
+   /* 4 */
+   {{{-20,-20,-20,-20,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -3, -3, -3, -3, -1,  1,  5},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
+   /* 5 */
+   {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
+     {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -4, -4, -4, -4, -2, -1,  2},
+     {-34,-34,-34,-34,-30,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}},
+   /* 6 */
+   {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4,  7},
+     {-32,-32,-32,-32,-28,-24,-24,-18,-14, -8, -6, -6, -6, -6, -4, -2,  1},
+     {-34,-34,-34,-34,-30,-26,-24,-18,-17,-15,-15,-15,-15,-13,-13,-12, -8}}},
+   /* 7 */
+   {{{-24,-24,-24,-24,-20,-18,-14, -8, -1,  1,  1,  1,  2,  3,  3,  4, 7},
+     {-32,-32,-32,-32,-28,-24,-24,-18,-14,-12,-10, -8, -8, -8, -6, -4,  0},
+     {-34,-34,-34,-34,-30,-26,-26,-24,-22,-19,-19,-19,-19,-18,-17,-16,-12}}},
+   /* 8 */
+   {{{-24,-24,-24,-24,-22,-20,-15,-10, -8, -2,  0,  0,  0,  1,  2,  3,  7},
+     {-36,-36,-36,-36,-30,-30,-30,-24,-18,-14,-12,-10,-10,-10, -8, -6, -2},
+     {-36,-36,-36,-36,-34,-30,-28,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},
+   /* 9 */
+   {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2,  2},
+     {-36,-36,-36,-36,-34,-32,-32,-28,-20,-16,-16,-16,-16,-14,-12,-10, -7},
+     {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},
+   /* 10 */
+   {{{-30,-30,-30,-30,-30,-30,-30,-28,-20,-14,-14,-14,-14,-14,-14,-12,-10},
+     {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-30,-30,-30,-30,-30,-30,-20},
+     {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
+ };
+ 
+ static noise3 _psy_noisebias_long[11]={
+     /*63     125     250     500      1k       2k      4k      8k     16k*/
+   /* 0 */
+   {{{-10,-10,-10,-10,-10,-10, -8,  2,  2,  2,  4,  4,  5,  5,  5,  8,  10},
+     {-20,-20,-20,-20,-20,-20,-20,-14, -6,  0,  0,  0,  0,  0,  2,  4,  10},
+     {-20,-20,-20,-20,-20,-20,-20,-14, -8, -6, -6, -6, -6, -4, -4, -4, -2}}},
+   /* 1 */
+   {{{-10,-10,-10,-10,-10,-10, -8, -4,  0,  2,  4,  4,  5,  5,  5,  8,  10},
+     {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2,  0,  2,  8},
+     {-20,-20,-20,-20,-20,-20,-20,-14,-10, -8, -8, -8, -8, -6, -6, -6, -4}}},
+   /* 2 */
+   {{{-10,-10,-10,-10,-10,-10,-10, -8,  0,  2,  2,  2,  4,  4,  5,  6,  10},
+     {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -2, -2, -2, -2,  0,  2,  6},
+     {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
+   /* 3 */
+   {{{-10,-10,-10,-10,-10,-10,-10, -8,  0,  2,  2,  2,  4,  4,  4,  5,  8},
+     {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -1,  1,  6},
+     {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
+   /* 4 */
+   {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
+     {-20,-20,-20,-20,-20,-20,-20,-14,-10, -4, -3, -3, -3, -3, -1,  1,  5},
+     {-20,-20,-20,-20,-20,-20,-20,-14,-10,-10,-10,-10,-10, -8, -8, -8, -4}}},
+   /* 5 */
+   {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
+     {-22,-22,-22,-22,-22,-22,-22,-16,-12, -6, -4, -4, -4, -4, -2, -1,  2},
+     {-24,-24,-24,-24,-24,-24,-24,-18,-14,-12,-12,-12,-12,-10,-10, -9, -5}}},
+   /* 6 */
+   {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
+     {-24,-24,-24,-24,-24,-24,-24,-18,-14, -8, -6, -6, -6, -6, -4, -2,  1},
+     {-26,-26,-26,-26,-26,-26,-26,-18,-16,-15,-15,-15,-15,-13,-13,-12, -8}}},
+   /* 7 */
+   {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  1,  1,  1,  2,  3,  3,  4,  7},
+     {-24,-24,-24,-24,-24,-24,-24,-18,-14,-10, -8, -8, -8, -8, -6, -4,  0},
+     {-26,-26,-26,-26,-26,-26,-26,-22,-20,-19,-19,-19,-19,-18,-17,-16,-12}}},
+   /* 8 */
+   {{{-15,-15,-15,-15,-15,-15,-15,-10, -4,  0,  0,  0,  0,  1,  2,  3,  7},
+     {-26,-26,-26,-26,-26,-26,-26,-20,-16,-12,-10,-10,-10,-10, -8, -6, -2},
+     {-28,-28,-28,-28,-28,-28,-28,-26,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},
+   /* 9 */
+   {{{-22,-22,-22,-22,-22,-22,-22,-18,-14, -8, -4, -4, -4, -4, -4, -2,  2},
+     {-26,-26,-26,-26,-26,-26,-26,-22,-18,-16,-16,-16,-16,-14,-12,-10, -7},
+     {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},
+   /* 10 */
+   {{{-24,-24,-24,-24,-24,-24,-24,-24,-24,-18,-14,-14,-14,-14,-14,-12,-10},
+     {-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-30,-20},
+     {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
+ };
+ 
+ static noise3 _psy_noisebias_impulse[11]={
+   /*  63     125     250     500      1k      2k      4k      8k     16k*/
+   /* 0 */
+   {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  4,  8,  8,  8, 10, 12, 14, 20},
+     {-30,-30,-30,-30,-26,-22,-20,-14, -6, -2,  0,  0,  0,  0,  2,  4,  10},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -4, -2}}},
+   /* 1 */
+   {{{-12,-12,-12,-12,-12, -8, -6, -4,  0,  4,  4,  4,  4, 10, 12, 14, 20},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -4, -4, -2, -2, -2, -2,  2},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8,-10,-10, -8, -8, -8, -6, -4}}},
+   /* 2 */
+   {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  8, 10, 10, 16},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2,  0},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
+   /* 3 */
+   {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  6,  8,  8, 14},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2,  0},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
+   /* 4 */
+   {{{-16,-16,-16,-16,-16,-12,-10, -6, -2,  0,  0,  0,  0,  4,  6,  6, 12},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -4, -4, -4, -2,  0},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10,-10,-10,-10,-10,-10,-10, -8, -4}}},
+   /* 5 */
+   {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  4,  6, 11},
+     {-32,-32,-32,-32,-28,-24,-22,-16,-10, -6, -8, -8, -6, -6, -6, -4, -2},
+     {-34,-34,-34,-34,-30,-26,-24,-18,-14,-12,-12,-12,-12,-12,-10, -9, -5}}},
+   /* 6 */
+   {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  4,  6, 11},
+     {-34,-34,-34,-34,-30,-30,-24,-20,-12,-12,-14,-14,-10, -9, -8, -6, -4},
+     {-34,-34,-34,-34,-34,-30,-26,-20,-16,-15,-15,-15,-15,-15,-13,-12, -8}}},
+   /* 7 */
+   {{{-22,-22,-22,-22,-22,-20,-14,-10, -6,  0,  0,  0,  0,  4,  4,  6, 11},
+     {-34,-34,-34,-34,-30,-30,-24,-20,-14,-14,-16,-16,-14,-12,-10,-10,-10},
+     {-34,-34,-34,-34,-32,-32,-30,-24,-20,-19,-19,-19,-19,-19,-17,-16,-12}}},
+   /* 8 */
+   {{{-24,-24,-24,-24,-24,-22,-14,-10, -6, -1, -1, -1, -1,  3,  3,  5, 10},
+     {-34,-34,-34,-34,-30,-30,-30,-24,-20,-20,-20,-20,-20,-18,-16,-16,-14},
+     {-36,-36,-36,-36,-36,-34,-28,-24,-24,-24,-24,-24,-24,-24,-24,-20,-16}}},
+   /* 9 */
+   {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -4, -4, -4, -4, -4, -2,  2},
+     {-36,-36,-36,-36,-34,-32,-32,-30,-26,-26,-26,-26,-26,-22,-20,-20,-18},
+     {-40,-40,-40,-40,-40,-40,-40,-32,-30,-30,-30,-30,-30,-30,-30,-24,-20}}},
+   /* 10 */
+   {{{-30,-30,-30,-30,-30,-26,-24,-24,-24,-20,-16,-16,-16,-16,-16,-14,-12},
+     {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-30,-30,-30,-30,-30,-30,-26},
+     {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
+ };
+ 
+ 
+ static noise3 _psy_noisebias_padding[11]={
+   /*  63     125     250     500      1k       2k      4k      8k     16k*/
+   /* 0 */
+   {{{-10,-10,-10,-10,-10, -4,  0,  0,  4,  8,  8,  8,  8, 10, 12, 14, 20},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -2,  2,  3,  6,  6,  8, 10},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4, -4, -4, -4, -4, -2,  0,  2}}},
+   /* 1 */
+   {{{-12,-12,-12,-12,-12, -8, -6, -4,  0,  4,  4,  4,  4, 10, 12, 14, 20},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4,  0,  0,  0,  2,  2,  4,  8},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -6, -6, -6, -6, -4, -2,  0}}},
+   /* 2 */
+   {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  8, 10, 10, 16},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -4,  0,  0,  0,  2,  2,  4,  8},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
+   /* 3 */
+   {{{-14,-14,-14,-14,-14,-10, -8, -6, -2,  2,  2,  2,  2,  6,  8,  8, 14},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1,  0,  0,  2,  6},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
+   /* 4 */
+   {{{-16,-16,-16,-16,-16,-12,-10, -6, -2,  0,  0,  0,  0,  4,  6,  6, 12},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -6, -1, -1, -1, -1,  0,  2,  6},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-10, -8, -8, -8, -8, -8, -6, -4, -2}}},
+   /* 5 */
+   {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  6,  6, 12},
+     {-32,-32,-32,-32,-28,-24,-22,-16,-12, -6, -3, -3, -3, -3, -2,  0,  4},
+     {-34,-34,-34,-34,-30,-26,-24,-18,-14,-10,-10,-10,-10,-10, -8, -5, -3}}},
+   /* 6 */
+   {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  6,  6, 12},
+     {-34,-34,-34,-34,-30,-30,-24,-20,-14, -8, -4, -4, -4, -4, -3, -1,  4},
+     {-34,-34,-34,-34,-34,-30,-26,-20,-16,-13,-13,-13,-13,-13,-11, -8, -6}}},
+   /* 7 */
+   {{{-20,-20,-20,-20,-20,-18,-14,-10, -4,  0,  0,  0,  0,  4,  6,  6, 12},
+     {-34,-34,-34,-34,-30,-30,-30,-24,-16,-10, -8, -6, -6, -6, -5, -3,  1},
+     {-34,-34,-34,-34,-32,-32,-28,-22,-18,-16,-16,-16,-16,-16,-14,-12,-10}}},
+   /* 8 */
+   {{{-22,-22,-22,-22,-22,-20,-14,-10, -4,  0,  0,  0,  0,  3,  5,  5, 11},
+     {-34,-34,-34,-34,-30,-30,-30,-24,-16,-12,-10, -8, -8, -8, -7, -5, -2},
+     {-36,-36,-36,-36,-36,-34,-28,-22,-20,-20,-20,-20,-20,-20,-20,-16,-14}}},
+   /* 9 */
+   {{{-28,-28,-28,-28,-28,-28,-28,-20,-14, -8, -2, -2, -2, -2,  0,  2,  6},
+     {-36,-36,-36,-36,-34,-32,-32,-24,-16,-12,-12,-12,-12,-12,-10, -8, -5},
+     {-40,-40,-40,-40,-40,-40,-40,-32,-26,-24,-24,-24,-24,-24,-24,-20,-18}}},
+   /* 10 */
+   {{{-30,-30,-30,-30,-30,-26,-24,-24,-24,-20,-12,-12,-12,-12,-12,-10, -8},
+     {-40,-40,-40,-40,-40,-40,-40,-40,-35,-30,-25,-25,-25,-25,-25,-25,-15},
+     {-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40,-40}}},
+ };
+ 
+ static noiseguard _psy_noiseguards_44[4]={
+   {3,3,15},
+   {3,3,15},
+   {10,10,100},
+   {10,10,100},
+ };
+ 
+ static int _psy_tone_suppress[11]={
+   -20,-20,-20,-20,-24,-30,-40,-40,-45,-45,-45,
+ };
+ 
+ static int _psy_tone_0dB[11]={
+   90,95,95,95,95,105,105,105,105,105,105,
+ };
+ 
+ static int _psy_noise_suppress[11]={
+  -20,-24,-24,-24,-24,-30,-40,-40,-45,-45,-45,
+ };
+ 
+ static vorbis_info_psy _psy_info_template={
+   -1,
+   -140.,-140.,
+   /* tonemask att boost/decay,suppr,curves */
+   {0.f,0.f,0.f},     0.,0.,    -40.f, {0.},  
+   
+   /*noisemaskp,supp, low/high window, low/hi guard, minimum */
+   1,          -0.f,         .5f, .5f,         0,0,0,
+   {{-1},{-1},{-1}},{-1},105.f,
+ 
+   0,0,-1,-1,0.,
+ };
+ 
+ /* ath ****************/
+ 
+ static int _psy_ath_floater[11]={
+   -100,-100,-100,-100,-100,-105,-105,-105,-105,-110,-120,
+ };
+ 
+ static int _psy_ath_abs[11]={
+   -130,-130,-130,-140,-140,-140,-140,-140,-140,-140,-150,
+ };
+ 
+ /* stereo setup.  These don't map directly to quality level, there's
+    an additional indirection as several of the below may be used in a
+    single bitmanaged stream
+ 
+ ****************/
+ 
+ /* various stereo possibilities */
+ 
+ /* stereo mode by base quality level */
+ static adj_stereo _psy_stereo_modes_44_low[2]={
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         0  */
+   {{  4,  4,  4,  4,  4,  4,  4,  3,  2,  2,  1,  0,  0,  0,  0},
+    {  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  5,  4,  3},
+    {  1,  2,  3,  4,  4,  4,  4,  4,  4,  5,  6,  7,  8,  8,  8},
+    { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         1  */
+   {{  4,  4,  4,  4,  4,  4,  4,  3,  2,  2,  1,  0,  0,  0,  0},
+    {  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  5,  4,  3},
+    {  1,  2,  3,  4,  5,  5,  6,  6,  6,  6,  6,  7,  8,  8,  8},
+    { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}},
+ };
+ 
+ static adj_stereo _psy_stereo_modes_44[11]={
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         0  */
+   {{  4,  4,  4,  4,  4,  4,  4,  3,  2,  2,  1,  0,  0,  0,  0},
+    {  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  5,  4,  3},
+    {  1,  2,  3,  4,  5,  5,  6,  6,  6,  6,  6,  7,  8,  8,  8},
+    { 12,12.5, 13,13.5, 14,14.5, 15, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         1  */
+   {{  3,  3,  3,  3,  3,  3,  3,  3,  2,  1,  0,  0,  0,  0,  0},
+    {  8,  8,  8,  8,  6,  6,  5,  5,  5,  5,  5,  5,  5,  4,  3},
+    {  1,  2,  3,  4,  4,  5,  6,  6,  6,  6,  6,  8,  8,  8,  8},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         2  */
+   {{  3,  3,  3,  3,  3,  3,  2,  2,  2,  1,  0,  0,  0,  0,  0},
+    {  8,  8,  8,  6,  5,  5,  5,  5,  5,  5,  5,  4,  3,  2,  1},
+    {  3,  4,  4,  4,  5,  6,  6,  6,  6,  6,  6,  8,  8,  8,  8},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         3  */
+   {{  2,  2,  2,  2,  2,  1,  1,  1,  1,  0,  0,  0,  0,  0,  0},
+    {  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  3,  2,  1},
+    {  4,  4,  5,  6,  6,  6,  6,  6,  8,  8, 10, 10, 10, 10, 10},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         4  */
+   {{  2,  2,  2,  1,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  3,  3,  2,  1,  0},
+    {  6,  6,  6,  8,  8,  8,  8,  8,  8,  8, 10, 10, 10, 10, 10},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         5  */
+   {{  2,  2,  2,  1,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  3,  3,  3,  3,  3,  2,  2,  2,  2,  2,  2,  0,  0,  0,  0},
+    {  6,  6,  8,  8,  8,  8, 10, 10, 10, 10, 10, 10, 10, 10, 10},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         6  */
+   {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  3,  3,  3,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  8,  8,  8,  8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         7  */
+   {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  3,  3,  3,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  8,  8,  8,  8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         8  */
+   {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  2,  2,  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14         9  */
+   {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14        10  */
+   {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+ };
+ 
+ /* tone master attenuation by base quality mode and bitrate tweak */
+ 
+ static att3 _psy_tone_masteratt_44_low[2]={
+   {{ 34,  20,   8},  0, 1.25}, /* 0 */
+   {{ 34,  20,   8}, -2, 1.25}, /* 1 */
+ };
+ static att3 _psy_tone_masteratt_44[11]={
+   {{ 30,  20,   8}, -2, 1.25}, /* 0 */
+   {{ 25,  14,   4},  0,    0}, /* 1 */
+   {{ 20,  10,  -2},  0,    0}, /* 2 */
+   {{ 20,   9,  -4},  0,    0}, /* 3 */
+   {{ 20,   9,  -4},  0,    0}, /* 4 */
+   {{ 20,   6,  -6},  0,    0}, /* 5 */
+   {{ 20,   3, -10},  0,    0}, /* 6 */
+   {{ 18,   1, -14},  0,    0}, /* 7 */
+   {{ 18,   0, -16},  0,    0}, /* 8 */
+   {{ 18,  -2, -16},  0,    0}, /* 9 */
+   {{ 12,  -2, -20},  0,    0}, /* 10 */
+ };
+ 
+ /* lowpass by mode **************/
+ static double _psy_lowpass_44_low[2]={
+   15.1,15.1,
+ };
+ static double _psy_lowpass_44[11]={
+   15.1,15.8,16.5,17.9,20.5,48.,999.,999.,999.,999.,999.
+ };
+ 
+ /* noise normalization **********/
+ 
+ static int _noise_start_short_44[10]={
+   16,16,16,16,32,32,9999,9999,9999,9999
+ };
+ static int _noise_start_long_44[10]={
+   128,128,128,256,512,512,9999,9999,9999,9999
+ };
+ static int _noise_part_short_44[10]={
+   8,8,8,8,8,8,8,8,8,8
+ };
+ static int _noise_part_long_44[10]={
+   32,32,32,32,32,32,32,32,32,32
+ };
+ static double _noise_thresh_44[10]={
+   .2,.2,.3,.4,.5,.5,9999.,9999.,9999.,9999.,
+ };
+ static double _noise_thresh_44_2[2]={
+   .5,.5,
+ };
+ 
+ 
+ static int _noise_start_short_44_low[2]={
+   32,32
+ };
+ static int _noise_start_long_44_low[2]={
+   256,256
+ };
+ 
+ static double rate_mapping_44_stereo_low[2]={
+   22500.,32000.
+ };
+ 
+ static double rate_mapping_44_stereo[11]={
+   32000.,40000.,48000.,56000.,64000.,
+   80000.,96000.,112000.,128000.,160000.,250001.
+ };
+ static double quality_mapping_44_stereo_low[2]={
+   -.1,.0,
+ };
+ static double quality_mapping_44[11]={
+   .0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1.0
+ };
+ 
+ static int blocksize_short_44_low[1]={
+   512
+ };
+ static int blocksize_long_44_low[1]={
+   4096
+ };
+ 
+ static int blocksize_short_44[10]={
+   256,256,256,256,256,256,256,256,256,256
+ };
+ static int blocksize_long_44[10]={
+   2048,2048,2048,2048,2048,2048,2048,2048,2048,2048
+ };
+ static double _psy_compand_short_mapping[11]={
+   1., 1., 1.3, 1.6, 2., 2., 2., 2., 2., 2., 2.
+ };
+ static double _psy_compand_long_mapping[11]={
+   4., 4., 4.3, 4.6, 5., 5., 5., 5., 5., 5., 5.
+ };
+ static double _global_mapping_44[11]={
+   1., 1., 1.5, 2., 2., 2.5, 2.7, 3.0, 3.5, 4., 4.
+ };
+ static double _global_mapping_44_low[2]={
+   0., 1.,
+ };
+ static int _floor_short_mapping_44_low[1]={
+   1,
+ };
+ static int _floor_long_mapping_44_low[1]={
+   8
+ };
+ static int _floor_short_mapping_44[10]={
+   0,0,2,2,4,5,5,5,5,5
+ };
+ static int _floor_long_mapping_44[10]={
+   7,7,7,7,7,7,7,7,7,7
+ };
+ 
+ ve_setup_data_template ve_setup_44_stereo={
+   10,
+   rate_mapping_44_stereo,
+   quality_mapping_44,
+   2,
+   40000,
+   50000,
+   
+   blocksize_short_44,
+   blocksize_long_44,
+ 
+   _psy_tone_masteratt_44,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_impulse,
+   _psy_noisebias_padding,
+   _psy_noisebias_trans,
+   _psy_noisebias_long,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44,_noise_start_long_44},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_44,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   _psy_stereo_modes_44,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44,
+   _floor_long_mapping_44,
+ 
+   _mapres_template_44_stereo
+ };
+ 
+ ve_setup_data_template ve_setup_44_stereo_low={
+   1,
+   rate_mapping_44_stereo_low,
+   quality_mapping_44_stereo_low,
+   2,
+   40000,
+   50000,
+   
+   blocksize_short_44_low,
+   blocksize_long_44_low,
+ 
+   _psy_tone_masteratt_44_low,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_long_low,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44_low,_noise_start_long_44_low},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_44_low,
+ 
+   _psy_global_44,
+   _global_mapping_44_low,
+   _psy_stereo_modes_44_low,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44_low,
+   _floor_long_mapping_44_low,
+ 
+   _mapres_template_44_stereo
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: toplevel settings for 44.1/48kHz uncoupled modes
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: toplevel residue templates for 32/44.1/48kHz uncoupled
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the Xiph.Org Foundation http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: static codebooks autogenerated by huff/huffbuld
+  last modified: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static long _vq_quantlist__16u0__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16u0__p1_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 8, 5, 8, 8, 8,10,10, 8,
+ 	10,11, 5, 8, 8, 8,10,10, 8,10,10, 4, 9, 9, 9,12,
+ 	11, 8,11,11, 8,12,11,10,12,14,10,13,13, 7,11,11,
+ 	10,14,12,11,14,14, 4, 9, 9, 8,11,11, 9,11,12, 7,
+ 	11,11,10,13,14,10,12,14, 8,11,12,10,14,14,10,13,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__16u0__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p1_0 = {
+ 	_vq_quantthresh__16u0__p1_0,
+ 	_vq_quantmap__16u0__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16u0__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16u0__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__16u0__p1_0,
+ 	NULL,
+ 	&_vq_auxt__16u0__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16u0__p2_0[] = {
+ 	 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 7, 8, 9, 7,
+ 	 8, 9, 5, 7, 7, 7, 9, 8, 7, 9, 7, 4, 7, 7, 7, 9,
+ 	 9, 7, 8, 8, 6, 9, 8, 7, 8,11, 9,11,10, 6, 8, 9,
+ 	 8,11, 8, 9,10,11, 4, 7, 7, 7, 8, 8, 7, 9, 9, 6,
+ 	 9, 8, 9,11,10, 8, 8,11, 6, 8, 9, 9,10,11, 8,11,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__16u0__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p2_0 = {
+ 	_vq_quantthresh__16u0__p2_0,
+ 	_vq_quantmap__16u0__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16u0__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16u0__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__16u0__p2_0,
+ 	NULL,
+ 	&_vq_auxt__16u0__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16u0__p3_0[] = {
+ 	 1, 5, 5, 7, 7, 6, 7, 7, 8, 8, 6, 7, 8, 8, 8, 8,
+ 	 9, 9,11,11, 8, 9, 9,11,11, 6, 9, 8,10,10, 8,10,
+ 	10,11,11, 8,10,10,11,11,10,11,10,13,12, 9,11,10,
+ 	13,13, 6, 8, 9,10,10, 8,10,10,11,11, 8,10,10,11,
+ 	11, 9,10,11,13,12,10,10,11,12,12, 8,11,11,14,13,
+ 	10,12,11,15,13, 9,12,11,15,14,12,14,13,16,14,12,
+ 	13,13,17,14, 8,11,11,13,14, 9,11,12,14,15,10,11,
+ 	12,13,15,11,13,13,14,16,12,13,14,14,16, 5, 9, 9,
+ 	11,11, 9,11,11,12,12, 8,11,11,12,12,11,12,12,15,
+ 	14,10,12,12,15,15, 8,11,11,13,12,10,12,12,13,13,
+ 	10,12,12,14,13,12,12,13,14,15,11,13,13,17,16, 7,
+ 	11,11,13,13,10,12,12,14,13,10,12,12,13,14,12,13,
+ 	12,15,14,11,13,13,15,14, 9,12,12,16,15,11,13,13,
+ 	17,16,10,13,13,16,16,13,14,15,15,16,13,15,14,19,
+ 	17, 9,12,12,14,16,11,13,13,15,16,10,13,13,17,16,
+ 	13,14,13,17,15,12,15,15,16,17, 5, 9, 9,11,11, 8,
+ 	11,11,13,12, 9,11,11,12,12,10,12,12,14,15,11,12,
+ 	12,14,14, 7,11,10,13,12,10,12,12,14,13,10,11,12,
+ 	13,13,11,13,13,15,16,12,12,13,15,15, 7,11,11,13,
+ 	13,10,13,13,14,14,10,12,12,13,13,11,13,13,16,15,
+ 	12,13,13,15,14, 9,12,12,15,15,10,13,13,17,16,11,
+ 	12,13,15,15,12,15,14,18,18,13,14,14,16,17, 9,12,
+ 	12,15,16,10,13,13,15,16,11,13,13,15,16,13,15,15,
+ 	17,17,13,15,14,16,15, 7,11,11,15,16,10,13,12,16,
+ 	17,10,12,13,15,17,15,16,16,18,17,13,15,15,17,18,
+ 	 8,12,12,16,16,11,13,14,17,18,11,13,13,18,16,15,
+ 	17,16,17,19,14,15,15,17,16, 8,12,12,16,15,11,14,
+ 	13,18,17,11,13,14,18,17,15,16,16,18,17,13,16,16,
+ 	18,18,11,15,14,18,17,13,14,15,18, 0,12,15,15, 0,
+ 	17,17,16,17,17,18,14,16,18,18, 0,11,14,14,17, 0,
+ 	12,15,14,17,19,12,15,14,18, 0,15,18,16, 0,17,14,
+ 	18,16,18, 0, 7,11,11,16,15,10,12,12,18,16,10,13,
+ 	13,16,15,13,15,14,17,17,14,16,16,19,18, 8,12,12,
+ 	16,16,11,13,13,18,16,11,13,14,17,16,14,15,15,19,
+ 	18,15,16,16, 0,19, 8,12,12,16,17,11,13,13,17,17,
+ 	11,14,13,17,17,13,15,15,17,19,15,17,17,19, 0,11,
+ 	14,15,19,17,12,15,16,18,18,12,14,15,19,17,14,16,
+ 	17, 0,18,16,16,19,17, 0,11,14,14,18,19,12,15,14,
+ 	17,17,13,16,14,17,16,14,17,16,18,18,15,18,15, 0,
+ 	18,
+ };
+ 
+ static float _vq_quantthresh__16u0__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p3_0 = {
+ 	_vq_quantthresh__16u0__p3_0,
+ 	_vq_quantmap__16u0__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16u0__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16u0__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16u0__p3_0,
+ 	NULL,
+ 	&_vq_auxt__16u0__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16u0__p4_0[] = {
+ 	 3, 5, 5, 8, 8, 6, 6, 6, 9, 9, 6, 6, 6, 9, 9, 9,
+ 	10, 9,11,11, 9, 9, 9,11,11, 6, 7, 7,10,10, 7, 7,
+ 	 8,10,10, 7, 7, 8,10,10,10,10,10,11,12, 9,10,10,
+ 	11,12, 6, 7, 7,10,10, 7, 8, 7,10,10, 7, 8, 7,10,
+ 	10,10,11,10,12,11,10,10,10,13,10, 9,10,10,12,12,
+ 	10,11,10,14,12, 9,11,11,13,13,11,12,13,13,13,11,
+ 	12,12,15,13, 9,10,10,12,13, 9,11,10,12,13,10,10,
+ 	11,12,13,11,12,12,12,13,11,12,12,13,13, 5, 7, 7,
+ 	10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,12,
+ 	13,10,10,11,12,12, 6, 8, 8,11,10, 7, 8, 9,10,12,
+ 	 8, 9, 9,11,11,11,10,11,11,12,10,11,11,13,12, 7,
+ 	 8, 8,10,11, 8, 9, 8,11,10, 8, 9, 9,11,11,10,12,
+ 	10,13,11,10,11,11,13,13,10,11,10,14,13,10,10,11,
+ 	13,13,10,12,11,14,13,12,11,13,12,13,13,12,13,14,
+ 	14,10,11,11,13,13,10,11,10,12,13,10,12,12,12,14,
+ 	12,12,12,14,12,12,13,12,17,15, 5, 7, 7,10,10, 7,
+ 	 8, 8,10,10, 7, 8, 8,11,10,10,10,11,12,12,10,11,
+ 	11,12,13, 6, 8, 8,11,10, 8, 9, 9,11,11, 7, 8, 9,
+ 	10,11,11,11,11,12,12,10,10,11,12,13, 6, 8, 8,10,
+ 	11, 8, 9, 9,11,11, 7, 9, 7,11,10,10,12,12,13,13,
+ 	11,11,10,13,11, 9,11,10,14,13,11,11,11,15,13,10,
+ 	10,11,13,13,12,13,13,14,14,12,11,12,12,13,10,11,
+ 	11,12,13,10,11,12,13,13,10,11,10,13,12,12,12,13,
+ 	14, 0,12,13,11,13,11, 8,10,10,13,13,10,11,11,14,
+ 	13,10,11,11,13,12,13,14,14,14,15,12,12,12,15,14,
+ 	 9,11,10,13,12,10,10,11,13,14,11,11,11,15,12,13,
+ 	12,14,15,16,13,13,13,14,13, 9,11,11,12,12,10,12,
+ 	11,13,13,10,11,11,13,14,13,13,13,15,15,13,13,14,
+ 	17,15,11,12,12,14,14,10,11,12,13,15,12,13,13, 0,
+ 	15,13,11,14,12,16,14,16,14, 0,15,11,12,12,14,16,
+ 	11,13,12,16,15,12,13,13,14,15,12,14,12,15,13,15,
+ 	14,14,16,16, 8,10,10,13,13,10,11,10,13,14,10,11,
+ 	11,13,13,13,13,12,14,14,14,13,13,16,17, 9,10,10,
+ 	12,14,10,12,11,14,13,10,11,12,13,14,12,12,12,15,
+ 	15,13,13,13,14,14, 9,10,10,13,13,10,11,12,12,14,
+ 	10,11,10,13,13,13,13,13,14,16,13,13,13,14,14,11,
+ 	12,13,15,13,12,14,13,14,16,12,12,13,13,14,13,14,
+ 	14,17,15,13,12,17,13,16,11,12,13,14,15,12,13,14,
+ 	14,17,11,12,11,14,14,13,16,14,16, 0,14,15,11,15,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__16u0__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p4_0 = {
+ 	_vq_quantthresh__16u0__p4_0,
+ 	_vq_quantmap__16u0__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16u0__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16u0__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16u0__p4_0,
+ 	NULL,
+ 	&_vq_auxt__16u0__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16u0__p5_0[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
+ 	 9, 9, 4, 6, 6, 8, 8, 8, 8, 9, 9, 7, 8, 8, 9, 9,
+ 	 9, 9,11,10, 7, 8, 8, 9, 9, 9, 9,10,11, 7, 8, 8,
+ 	 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
+ 	 9, 9,10,10,11,11,12,12, 9, 9, 9,10,10,11,11,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__16u0__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p5_0 = {
+ 	_vq_quantthresh__16u0__p5_0,
+ 	_vq_quantmap__16u0__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16u0__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16u0__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16u0__p5_0,
+ 	NULL,
+ 	&_vq_auxt__16u0__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16u0__p6_0[] = {
+ 	 1, 4, 4, 7, 7,10,10,12,12,13,13,18,17, 3, 6, 6,
+ 	 9, 9,11,11,13,13,14,14,18,17, 3, 6, 6, 9, 9,11,
+ 	11,13,13,14,14,17,18, 7, 9, 9,11,11,13,13,14,14,
+ 	15,15, 0, 0, 7, 9, 9,11,11,13,13,14,14,15,16,19,
+ 	18,10,11,11,13,13,14,14,16,15,17,18, 0, 0,10,11,
+ 	11,13,13,14,14,15,15,16,18, 0, 0,11,13,13,14,14,
+ 	15,15,17,17, 0,19, 0, 0,11,13,13,14,14,14,15,16,
+ 	18, 0,19, 0, 0,13,14,14,15,15,18,17,18,18, 0,19,
+ 	 0, 0,13,14,14,15,16,16,16,18,18,19, 0, 0, 0,16,
+ 	17,17, 0,17,19,19, 0,19, 0, 0, 0, 0,16,19,16,17,
+ 	18, 0,19, 0, 0, 0, 0, 0, 0,
+ };
+ 
+ static float _vq_quantthresh__16u0__p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p6_0 = {
+ 	_vq_quantthresh__16u0__p6_0,
+ 	_vq_quantmap__16u0__p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16u0__p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16u0__p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__16u0__p6_0,
+ 	NULL,
+ 	&_vq_auxt__16u0__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16u0__p6_1[] = {
+ 	 1, 4, 5, 6, 6, 4, 6, 6, 6, 6, 4, 6, 6, 6, 6, 6,
+ 	 6, 6, 7, 7, 6, 6, 6, 7, 7,
+ };
+ 
+ static float _vq_quantthresh__16u0__p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p6_1 = {
+ 	_vq_quantthresh__16u0__p6_1,
+ 	_vq_quantmap__16u0__p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16u0__p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__16u0__p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16u0__p6_1,
+ 	NULL,
+ 	&_vq_auxt__16u0__p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16u0__p7_0[] = {
+ 	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__16u0__p7_0[] = {
+ 	-157.5, 157.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p7_0 = {
+ 	_vq_quantthresh__16u0__p7_0,
+ 	_vq_quantmap__16u0__p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16u0__p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16u0__p7_0,
+ 	1, -518803456, 1628680192, 2, 0,
+ 	_vq_quantlist__16u0__p7_0,
+ 	NULL,
+ 	&_vq_auxt__16u0__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p7_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__16u0__p7_1[] = {
+ 	 1, 5, 5, 6, 5, 9,10,11,11,10,10,10,10,10,10, 5,
+ 	 8, 8, 8,10,10,10,10,10,10,10,10,10,10,10, 5, 8,
+ 	 9, 9, 9,10,10,10,10,10,10,10,10,10,10, 5,10, 8,
+ 	10,10,10,10,10,10,10,10,10,10,10,10, 4, 8, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10, 9,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__16u0__p7_1[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p7_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p7_1 = {
+ 	_vq_quantthresh__16u0__p7_1,
+ 	_vq_quantmap__16u0__p7_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _16u0__p7_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__16u0__p7_1,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__16u0__p7_1,
+ 	NULL,
+ 	&_vq_auxt__16u0__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u0__p7_2[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__16u0__p7_2[] = {
+ 	 1, 6, 6, 7, 8, 7, 7,10, 9,10, 9,11,10, 9,11,10,
+ 	 9, 9, 9, 9,10, 6, 8, 7, 9, 9, 8, 8,10,10, 9,11,
+ 	11,12,12,10, 9,11, 9,12,10, 9, 6, 9, 8, 9,12, 8,
+ 	 8,11, 9,11,11,12,11,12,12,10,11,11,10,10,11, 7,
+ 	10, 9, 9, 9, 9, 9,10, 9,10, 9,10,10,12,10,10,10,
+ 	11,12,10,10, 7, 9, 9, 9,10, 9, 9,10,10, 9, 9, 9,
+ 	11,11,10,10,10,10, 9, 9,12, 7, 9,10, 9,11, 9,10,
+ 	 9,10,11,11,11,10,11,12, 9,12,11,10,10,10, 7, 9,
+ 	 9, 9, 9,10,12,10, 9,11,12,10,11,12,12,11, 9,10,
+ 	11,10,11, 7, 9,10,10,11,10, 9,10,11,11,11,10,12,
+ 	12,12,11,11,10,11,11,12, 8, 9,10,12,11,10,10,12,
+ 	12,12,12,12,10,11,11, 9,11,10,12,11,11, 8, 9,10,
+ 	10,11,12,11,11,10,10,10,12,12,12, 9,10,12,12,12,
+ 	12,12, 8,10,11,10,10,12, 9,11,12,12,11,12,12,12,
+ 	12,10,12,10,10,10,10, 8,12,11,11,11,10,10,11,12,
+ 	12,12,12,11,12,12,12,11,11,11,12,10, 9,10,10,12,
+ 	10,12,10,12,12,10,10,10,11,12,12,12,11,12,12,12,
+ 	11,10,11,12,12,12,11,12,12,11,12,12,11,12,12,12,
+ 	12,11,12,12,10,10,10,10,11,11,12,11,12,12,12,12,
+ 	12,12,12,11,12,11,10,11,11,12,11,11, 9,10,10,10,
+ 	12,10,10,11, 9,11,12,11,12,11,12,12,10,11,10,12,
+ 	 9, 9, 9,12,11,10,11,10,12,10,12,10,12,12,12,11,
+ 	11,11,11,11,10, 9,10,10,11,10,11,11,12,11,10,11,
+ 	12,12,12,11,11, 9,12,10,12, 9,10,12,10,10,11,10,
+ 	11,11,12,11,10,11,10,11,11,11,11,12,11,11,10, 9,
+ 	10,10,10, 9,11,11,10, 9,12,10,11,12,11,12,12,11,
+ 	12,11,12,11,10,11,10,12,11,12,11,12,11,12,10,11,
+ 	10,10,12,11,10,11,11,11,10,
+ };
+ 
+ static float _vq_quantthresh__16u0__p7_2[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__16u0__p7_2[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u0__p7_2 = {
+ 	_vq_quantthresh__16u0__p7_2,
+ 	_vq_quantmap__16u0__p7_2,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _16u0__p7_2 = {
+ 	2, 441,
+ 	_vq_lengthlist__16u0__p7_2,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__16u0__p7_2,
+ 	NULL,
+ 	&_vq_auxt__16u0__p7_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16u0__single[] = {
+ 	 3, 5, 8, 7,14, 8, 9,19, 5, 2, 5, 5, 9, 6, 9,19,
+ 	 8, 4, 5, 7, 8, 9,13,19, 7, 4, 6, 5, 9, 6, 9,19,
+ 	12, 8, 7, 9,10,11,13,19, 8, 5, 8, 6, 9, 6, 7,19,
+ 	 8, 8,10, 7, 7, 4, 5,19,12,17,19,15,18,13,11,18,
+ };
+ 
+ static static_codebook _huff_book__16u0__single = {
+ 	2, 64,
+ 	_huff_lengthlist__16u0__single,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16u1__long[] = {
+ 	 3, 6,10, 8,12, 8,14, 8,14,19, 5, 3, 5, 5, 7, 6,
+ 	11, 7,16,19, 7, 5, 6, 7, 7, 9,11,12,19,19, 6, 4,
+ 	 7, 5, 7, 6,10, 7,18,18, 8, 6, 7, 7, 7, 7, 8, 9,
+ 	18,18, 7, 5, 8, 5, 7, 5, 8, 6,18,18,12, 9,10, 9,
+ 	 9, 9, 8, 9,18,18, 8, 7,10, 6, 8, 5, 6, 4,11,18,
+ 	11,15,16,12,11, 8, 8, 6, 9,18,14,18,18,18,16,16,
+ 	16,13,16,18,
+ };
+ 
+ static static_codebook _huff_book__16u1__long = {
+ 	2, 100,
+ 	_huff_lengthlist__16u1__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16u1__p1_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 7, 7,10,10, 7,
+ 	 9,10, 5, 7, 8, 7,10, 9, 7,10,10, 5, 8, 8, 8,10,
+ 	10, 8,10,10, 7,10,10,10,11,12,10,12,13, 7,10,10,
+ 	 9,13,11,10,12,13, 5, 8, 8, 8,10,10, 8,10,10, 7,
+ 	10,10,10,12,12, 9,11,12, 7,10,11,10,12,12,10,13,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__16u1__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p1_0 = {
+ 	_vq_quantthresh__16u1__p1_0,
+ 	_vq_quantmap__16u1__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16u1__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16u1__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__16u1__p1_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16u1__p2_0[] = {
+ 	 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 7, 8, 6,
+ 	 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 6, 8,
+ 	 8, 6, 8, 8, 6, 8, 8, 7, 7,10, 8, 9, 9, 6, 8, 8,
+ 	 7, 9, 8, 8, 9,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
+ 	 8, 8, 8,10, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 7,10,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__16u1__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p2_0 = {
+ 	_vq_quantthresh__16u1__p2_0,
+ 	_vq_quantmap__16u1__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16u1__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16u1__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__16u1__p2_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16u1__p3_0[] = {
+ 	 1, 5, 5, 8, 8, 6, 7, 7, 9, 9, 5, 7, 7, 9, 9, 9,
+ 	10, 9,11,11, 9, 9,10,11,11, 6, 8, 8,10,10, 8, 9,
+ 	10,11,11, 8, 9,10,11,11,10,11,11,12,13,10,11,11,
+ 	13,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10, 9,11,
+ 	11,10,11,11,13,13,10,11,11,13,12, 9,11,11,14,13,
+ 	10,12,12,15,14,10,12,11,14,13,12,13,13,15,15,12,
+ 	13,13,16,14, 9,11,11,13,14,10,11,12,14,14,10,12,
+ 	12,14,15,12,13,13,14,15,12,13,14,15,16, 5, 8, 8,
+ 	11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14,
+ 	14,11,12,12,14,14, 8,10,10,12,12, 9,11,12,12,13,
+ 	10,12,12,13,13,12,12,13,14,15,11,13,13,15,15, 7,
+ 	10,10,12,12, 9,12,11,13,12,10,11,12,13,13,12,13,
+ 	12,15,14,11,12,13,15,15,10,12,12,15,14,11,13,13,
+ 	16,15,11,13,13,16,15,14,13,14,15,16,13,15,15,17,
+ 	17,10,12,12,14,15,11,12,12,15,15,11,13,13,15,16,
+ 	13,15,13,16,15,13,15,15,16,17, 5, 8, 8,11,11, 8,
+ 	10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12,
+ 	12,14,14, 7,10,10,12,12,10,12,12,14,13, 9,11,12,
+ 	12,13,12,13,13,15,15,12,12,13,13,15, 7,10,10,12,
+ 	13,10,11,12,13,13,10,12,11,13,13,11,13,13,15,15,
+ 	12,13,12,15,14, 9,12,12,15,14,11,13,13,15,15,11,
+ 	12,13,15,15,13,14,14,17,19,13,13,14,16,16,10,12,
+ 	12,14,15,11,13,13,15,16,11,13,12,16,15,13,15,15,
+ 	17,18,14,15,13,16,15, 8,11,11,15,14,10,12,12,16,
+ 	15,10,12,12,16,16,14,15,15,18,17,13,14,15,16,18,
+ 	 9,12,12,15,15,11,12,14,16,17,11,13,13,16,15,15,
+ 	15,15,17,18,14,15,16,17,17, 9,12,12,15,15,11,14,
+ 	13,16,16,11,13,13,16,16,15,16,15,17,18,14,16,15,
+ 	17,16,12,14,14,17,16,12,14,15,18,17,13,15,15,17,
+ 	17,15,15,18,16,20,15,16,17,18,18,11,14,14,16,17,
+ 	13,15,14,18,17,13,15,15,17,17,15,17,15,18,17,15,
+ 	17,16,19,18, 8,11,11,14,15,10,12,12,15,15,10,12,
+ 	12,16,16,13,14,14,17,16,14,15,15,17,17, 9,12,12,
+ 	15,16,11,13,13,16,16,11,12,13,16,16,14,16,15,20,
+ 	17,14,16,16,17,17, 9,12,12,15,16,11,13,13,16,17,
+ 	11,13,13,17,16,14,15,15,17,18,15,15,15,18,18,11,
+ 	14,14,17,16,13,15,15,17,17,13,14,14,18,17,15,16,
+ 	16,18,19,15,15,17,17,19,11,14,14,16,17,13,15,14,
+ 	17,19,13,15,14,18,17,15,17,16,18,18,15,17,15,18,
+ 	16,
+ };
+ 
+ static float _vq_quantthresh__16u1__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p3_0 = {
+ 	_vq_quantthresh__16u1__p3_0,
+ 	_vq_quantmap__16u1__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16u1__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16u1__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16u1__p3_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16u1__p4_0[] = {
+ 	 4, 5, 5, 8, 8, 6, 6, 7, 9, 9, 6, 6, 6, 9, 9, 9,
+ 	10, 9,11,11, 9, 9,10,11,11, 6, 7, 7,10, 9, 7, 7,
+ 	 8, 9,10, 7, 7, 8,10,10,10,10,10,10,12, 9, 9,10,
+ 	11,12, 6, 7, 7, 9, 9, 7, 8, 7,10,10, 7, 8, 7,10,
+ 	10, 9,10, 9,12,11,10,10, 9,12,10, 9,10,10,12,11,
+ 	10,10,10,12,12, 9,10,10,12,12,12,11,12,13,13,11,
+ 	11,12,12,13, 9,10,10,11,12, 9,10,10,12,12,10,10,
+ 	10,12,12,11,12,11,14,13,11,12,12,14,13, 5, 7, 7,
+ 	10,10, 7, 8, 8,10,10, 7, 8, 7,10,10,10,10,10,12,
+ 	12,10,10,10,12,12, 6, 8, 7,10,10, 7, 7, 9,10,11,
+ 	 8, 9, 9,11,10,10,10,11,11,13,10,10,11,12,13, 6,
+ 	 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,10,11,10,11,
+ 	10,13,11,10,11,10,12,12,10,11,10,12,11,10,10,10,
+ 	12,13,10,11,11,13,12,11,11,13,11,14,12,12,13,14,
+ 	14, 9,10,10,12,13,10,11,10,13,12,10,11,11,12,13,
+ 	11,12,11,14,12,12,13,13,15,14, 5, 7, 7,10,10, 7,
+ 	 7, 8,10,10, 7, 8, 8,10,10,10,10,10,11,12,10,10,
+ 	10,12,12, 7, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 9,
+ 	10,11,10,11,11,12,12,10,10,11,11,13, 7, 7, 8,10,
+ 	10, 8, 8, 9,10,11, 7, 9, 7,11,10,10,11,11,13,12,
+ 	11,11,10,13,11, 9,10,10,12,12,10,11,11,13,12,10,
+ 	10,11,12,12,12,13,13,14,14,11,11,12,12,14,10,10,
+ 	11,12,12,10,11,11,12,13,10,10,10,13,12,12,13,13,
+ 	15,14,12,13,10,14,11, 8,10,10,12,12,10,11,10,13,
+ 	13, 9,10,10,12,12,12,13,13,15,14,11,12,12,13,13,
+ 	 9,10,10,13,12,10,10,11,13,13,10,11,10,13,12,12,
+ 	12,13,14,15,12,13,12,15,13, 9,10,10,12,13,10,11,
+ 	10,13,12,10,10,11,12,13,12,14,12,15,13,12,12,13,
+ 	14,15,11,12,11,14,13,11,11,12,14,15,12,13,12,15,
+ 	14,13,11,15,11,16,13,14,14,16,15,11,12,12,14,14,
+ 	11,12,11,14,13,12,12,13,14,15,13,14,12,16,12,14,
+ 	14,14,15,15, 8,10,10,12,12, 9,10,10,12,12,10,10,
+ 	11,13,13,11,12,12,13,13,12,13,13,14,15, 9,10,10,
+ 	13,12,10,11,11,13,12,10,10,11,13,13,12,13,12,15,
+ 	14,12,12,13,13,16, 9, 9,10,12,13,10,10,11,12,13,
+ 	10,11,10,13,13,12,12,13,13,15,13,13,12,15,13,11,
+ 	12,12,14,14,12,13,12,15,14,11,11,12,13,14,14,14,
+ 	14,16,15,13,12,15,12,16,11,11,12,13,14,12,13,13,
+ 	14,15,10,12,11,14,13,14,15,14,16,16,13,14,11,15,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__16u1__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p4_0 = {
+ 	_vq_quantthresh__16u1__p4_0,
+ 	_vq_quantmap__16u1__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16u1__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16u1__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16u1__p4_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16u1__p5_0[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 8, 8, 8,
+ 	10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
+ 	 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 7, 8, 8,
+ 	10, 9,11,11,12,11, 7, 8, 8, 9, 9,11,11,12,12, 9,
+ 	10,10,11,11,12,12,13,12, 9,10,10,11,11,12,12,12,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__16u1__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p5_0 = {
+ 	_vq_quantthresh__16u1__p5_0,
+ 	_vq_quantmap__16u1__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16u1__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16u1__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16u1__p5_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p6_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16u1__p6_0[] = {
+ 	 3, 4, 4, 6, 6, 7, 7, 9, 9, 4, 4, 4, 6, 6, 8, 8,
+ 	 9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7,
+ 	 8, 8,10, 9, 6, 6, 6, 7, 7, 8, 8, 9,10, 7, 8, 7,
+ 	 8, 8, 9, 9,10,10, 7, 8, 8, 8, 8, 9, 9,10,10, 9,
+ 	 9, 9,10,10,10,10,11,11, 9, 9, 9,10,10,10,10,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__16u1__p6_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p6_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p6_0 = {
+ 	_vq_quantthresh__16u1__p6_0,
+ 	_vq_quantmap__16u1__p6_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16u1__p6_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16u1__p6_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16u1__p6_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16u1__p7_0[] = {
+ 	 1, 4, 4, 4, 8, 8, 4, 8, 8, 5,11, 9, 8,12,11, 8,
+ 	12,11, 5,10,11, 8,11,12, 8,11,12, 4,11,11,11,14,
+ 	13,10,13,13, 8,14,13,12,14,16,12,16,15, 8,14,14,
+ 	13,16,14,12,15,16, 4,11,11,10,14,13,11,14,14, 8,
+ 	15,14,12,15,15,12,14,16, 8,14,14,11,16,15,12,15,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__16u1__p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p7_0 = {
+ 	_vq_quantthresh__16u1__p7_0,
+ 	_vq_quantmap__16u1__p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16u1__p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16u1__p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__16u1__p7_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16u1__p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 6, 5, 7, 7,
+ 	 8, 8, 8, 8, 8, 8, 4, 5, 6, 7, 7, 8, 8, 8, 8, 8,
+ 	 8, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 7, 8, 8, 8, 8, 9, 9, 9,10,
+ 	 9,10, 7, 8, 8, 8, 8, 9, 9, 9, 9,10, 9, 8, 8, 8,
+ 	 9, 9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9,10,
+ 	10,10,10, 8, 8, 8, 9, 9, 9,10,10,10,10,10, 8, 8,
+ 	 8, 9, 9,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__16u1__p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p7_1 = {
+ 	_vq_quantthresh__16u1__p7_1,
+ 	_vq_quantmap__16u1__p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16u1__p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__16u1__p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__16u1__p7_1,
+ 	NULL,
+ 	&_vq_auxt__16u1__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p8_0[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16u1__p8_0[] = {
+ 	 1, 4, 4, 5, 5, 8, 8,10,10,12,12, 4, 7, 7, 8, 8,
+ 	 9, 9,12,11,14,13, 4, 7, 7, 7, 8, 9,10,11,11,13,
+ 	12, 5, 8, 8, 9, 9,11,11,12,13,15,14, 5, 7, 8, 9,
+ 	 9,11,11,13,13,17,15, 8, 9,10,11,11,12,13,17,14,
+ 	17,16, 8,10, 9,11,11,12,12,13,15,15,17,10,11,11,
+ 	12,13,14,15,15,16,16,17, 9,11,11,12,12,14,15,17,
+ 	15,15,16,11,14,12,14,15,16,15,16,16,16,15,11,13,
+ 	13,14,14,15,15,16,16,15,16,
+ };
+ 
+ static float _vq_quantthresh__16u1__p8_0[] = {
+ 	-49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, 
+ 	38.5, 49.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p8_0[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p8_0 = {
+ 	_vq_quantthresh__16u1__p8_0,
+ 	_vq_quantmap__16u1__p8_0,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16u1__p8_0 = {
+ 	2, 121,
+ 	_vq_lengthlist__16u1__p8_0,
+ 	1, -524582912, 1618345984, 4, 0,
+ 	_vq_quantlist__16u1__p8_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p8_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16u1__p8_1[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 4, 6, 6, 7, 7,
+ 	 8, 7, 8, 8, 8, 8, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8,
+ 	 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 6, 7, 7, 7,
+ 	 7, 8, 8, 8, 8, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8,
+ 	 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 8, 8,
+ 	 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__16u1__p8_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p8_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p8_1 = {
+ 	_vq_quantthresh__16u1__p8_1,
+ 	_vq_quantmap__16u1__p8_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16u1__p8_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__16u1__p8_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__16u1__p8_1,
+ 	NULL,
+ 	&_vq_auxt__16u1__p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p9_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__16u1__p9_0[] = {
+ 	 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__16u1__p9_0[] = {
+ 	-1657.5, -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 
+ 	382.5, 637.5, 892.5, 1147.5, 1402.5, 1657.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p9_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p9_0 = {
+ 	_vq_quantthresh__16u1__p9_0,
+ 	_vq_quantmap__16u1__p9_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _16u1__p9_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__16u1__p9_0,
+ 	1, -514071552, 1627381760, 4, 0,
+ 	_vq_quantlist__16u1__p9_0,
+ 	NULL,
+ 	&_vq_auxt__16u1__p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__16u1__p9_1[] = {
+ 	 1, 6, 5, 9, 9,10,10, 6, 7, 9, 9,10,10,10,10, 5,
+ 	10, 8,10, 8,10,10, 8, 8,10, 9,10,10,10,10, 5, 8,
+ 	 9,10,10,10,10, 8,10,10,10,10,10,10,10, 9,10,10,
+ 	10,10,10,10, 9, 9,10,10,10,10,10,10, 9, 9, 8, 9,
+ 	10,10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10, 8,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10, 6, 8, 8,10,10,10, 8,
+ 	10,10,10,10,10,10,10,10, 5, 8, 8,10,10,10, 9, 9,
+ 	10,10,10,10,10,10,10,10, 9,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__16u1__p9_1[] = {
+ 	-110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 
+ 	25.5, 42.5, 59.5, 76.5, 93.5, 110.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p9_1 = {
+ 	_vq_quantthresh__16u1__p9_1,
+ 	_vq_quantmap__16u1__p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _16u1__p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__16u1__p9_1,
+ 	1, -522338304, 1620115456, 4, 0,
+ 	_vq_quantlist__16u1__p9_1,
+ 	NULL,
+ 	&_vq_auxt__16u1__p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u1__p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__16u1__p9_2[] = {
+ 	 1, 6, 6, 7, 8, 8,11,10, 9, 9,11, 9,10, 9,11,11,
+ 	 9, 6, 7, 6,11, 8,11, 9,10,10,11, 9,11,10,10,10,
+ 	11, 9, 5, 7, 7, 8, 8,10,11, 8, 8,11, 9, 9,10,11,
+ 	 9,10,11, 8, 9, 6, 8, 8, 9, 9,10,10,11,11,11, 9,
+ 	11,10, 9,11, 8, 8, 8, 9, 8, 9,10,11, 9, 9,11,11,
+ 	10, 9, 9,11,10, 8,11, 8, 9, 8,11, 9,10, 9,10,11,
+ 	11,10,10, 9,10,10, 8, 8, 9,10,10,10, 9,11, 9,10,
+ 	11,11,11,11,10, 9,11, 9, 9,11,11,10, 8,11,11,11,
+ 	 9,10,10,11,10,11,11, 9,11,10, 9,11,10,10,10,10,
+ 	 9,11,10,11,10, 9, 9,10,11, 9, 8,10,11,11,10,10,
+ 	11, 9,11,10,11,11,10,11, 9, 9, 8,10, 8, 9,11, 9,
+ 	 8,10,10, 9,11,10,11,10,11, 9,11, 8,10,11,11,11,
+ 	11,10,10,11,11,11,11,10,11,11,10, 9, 8,10,10, 9,
+ 	11,10,11,11,11, 9, 9, 9,11,11,11,10,10, 9, 9,10,
+ 	 9,11,11,11,11, 8,10,11,10,11,11,10,11,11, 9, 9,
+ 	 9,10, 9,11, 9,11,11,11,11,11,10,11,11,10,11,10,
+ 	11,11, 9,11,10,11,10, 9,10, 9,10,10,11,11,11,11,
+ 	 9,10, 9,10,11,11,10,11,11,11,11,11,11,10,11,11,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__16u1__p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__16u1__p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u1__p9_2 = {
+ 	_vq_quantthresh__16u1__p9_2,
+ 	_vq_quantmap__16u1__p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _16u1__p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__16u1__p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__16u1__p9_2,
+ 	NULL,
+ 	&_vq_auxt__16u1__p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16u1__short[] = {
+ 	 5, 7,10, 9,11,10,15,11,13,16, 6, 4, 6, 6, 7, 7,
+ 	10, 9,12,16,10, 6, 5, 6, 6, 7,10,11,16,16, 9, 6,
+ 	 7, 6, 7, 7,10, 8,14,16,11, 6, 5, 4, 5, 6, 8, 9,
+ 	15,16, 9, 6, 6, 5, 6, 6, 9, 8,14,16,12, 7, 6, 6,
+ 	 5, 6, 6, 7,13,16, 8, 6, 7, 6, 5, 5, 4, 4,11,16,
+ 	 9, 8, 9, 9, 7, 7, 6, 5,13,16,14,14,16,15,16,15,
+ 	16,16,16,16,
+ };
+ 
+ static static_codebook _huff_book__16u1__short = {
+ 	2, 100,
+ 	_huff_lengthlist__16u1__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16u2__long[] = {
+ 	 5, 7,10,10,10,11,11,13,18,19, 6, 5, 5, 6, 7, 8,
+ 	 9,12,19,19, 8, 5, 4, 4, 6, 7, 9,13,19,19, 8, 5,
+ 	 4, 4, 5, 6, 8,12,17,19, 7, 5, 5, 4, 4, 5, 7,12,
+ 	18,18, 8, 7, 7, 6, 5, 5, 6,10,18,18, 9, 9, 9, 8,
+ 	 6, 5, 6, 9,18,18,11,13,13,13, 8, 7, 7, 9,16,18,
+ 	13,17,18,16,11, 9, 9, 9,17,18,15,18,18,18,15,13,
+ 	13,14,18,18,
+ };
+ 
+ static static_codebook _huff_book__16u2__long = {
+ 	2, 100,
+ 	_huff_lengthlist__16u2__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__16u2__short[] = {
+ 	 8,11,12,12,14,15,16,16,16,16, 9, 7, 7, 8, 9,11,
+ 	13,14,16,16,13, 7, 6, 6, 7, 9,12,13,15,16,15, 7,
+ 	 6, 5, 4, 6,10,11,14,16,12, 8, 7, 4, 2, 4, 7,10,
+ 	14,16,11, 9, 7, 5, 3, 4, 6, 9,14,16,11,10, 9, 7,
+ 	 5, 5, 6, 9,16,16,10,10, 9, 8, 6, 6, 7,10,16,16,
+ 	11,11,11,10,10,10,11,14,16,16,16,14,14,13,14,16,
+ 	16,16,16,16,
+ };
+ 
+ static static_codebook _huff_book__16u2__short = {
+ 	2, 100,
+ 	_huff_lengthlist__16u2__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16u2_p1_0[] = {
+ 	 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 7, 9, 9, 7,
+ 	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 9, 5, 7, 7, 8, 9,
+ 	 9, 7, 9, 9, 7, 9, 9, 9,10,10, 9,10,10, 7, 9, 9,
+ 	 9,10,10, 9,10,11, 5, 7, 8, 8, 9, 9, 8, 9, 9, 7,
+ 	 9, 9, 9,10,10, 9, 9,10, 7, 9, 9, 9,10,10, 9,11,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__16u2_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p1_0 = {
+ 	_vq_quantthresh__16u2_p1_0,
+ 	_vq_quantmap__16u2_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16u2_p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16u2_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__16u2_p1_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16u2_p2_0[] = {
+ 	 3, 5, 5, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 9,
+ 	10, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
+ 	 8,10,10, 7, 8, 8,10,10,10,10,10,12,12, 9,10,10,
+ 	11,12, 5, 7, 7, 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,
+ 	10, 9,10,10,12,11,10,10,10,12,12, 9,10,10,12,12,
+ 	10,11,10,13,12, 9,10,10,12,12,12,12,12,14,14,11,
+ 	12,12,13,14, 9,10,10,12,12, 9,10,10,12,12,10,10,
+ 	10,12,12,11,12,12,14,13,12,13,12,14,14, 5, 7, 7,
+ 	 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,10,12,
+ 	12,10,10,11,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11,
+ 	 8, 9, 9,11,11,11,11,11,12,13,10,11,11,12,13, 7,
+ 	 8, 8,10,10, 8, 9, 8,11,10, 8, 9, 9,11,11,10,11,
+ 	10,13,12,10,11,11,13,13, 9,11,10,13,13,10,11,11,
+ 	13,13,10,11,11,13,13,12,12,13,13,15,12,12,13,14,
+ 	15, 9,10,10,12,12,10,11,10,13,12,10,11,11,13,13,
+ 	11,13,11,14,13,12,13,13,15,15, 5, 7, 7, 9, 9, 7,
+ 	 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,12,10,10,
+ 	11,12,12, 7, 8, 8,10,10, 8, 9, 9,11,11, 8, 8, 9,
+ 	10,11,10,11,11,13,13,10,10,11,12,13, 7, 8, 8,10,
+ 	11, 8, 9, 9,11,11, 8, 9, 9,11,11,10,11,11,13,12,
+ 	11,11,11,13,12, 9,10,10,12,12,10,11,11,13,13,10,
+ 	10,11,12,13,12,13,13,15,14,11,11,13,12,14,10,10,
+ 	11,13,13,10,11,11,13,13,10,11,11,13,13,12,13,13,
+ 	14,14,12,13,12,14,13, 8,10, 9,12,12, 9,11,10,13,
+ 	13, 9,10,10,12,13,12,13,13,14,14,12,12,13,14,14,
+ 	 9,11,10,13,13,10,11,11,13,13,10,11,11,13,13,12,
+ 	13,13,15,15,13,13,13,14,15, 9,10,10,12,13,10,11,
+ 	10,13,12,10,11,11,13,13,12,13,12,15,14,13,13,13,
+ 	14,15,11,12,12,15,14,12,12,13,15,15,12,13,13,15,
+ 	14,14,13,15,14,16,13,14,15,16,16,11,12,12,14,14,
+ 	11,12,12,15,14,12,13,13,15,15,13,14,13,16,14,14,
+ 	14,14,16,16, 8, 9, 9,12,12, 9,10,10,13,12, 9,10,
+ 	10,13,13,12,12,12,14,14,12,12,13,15,15, 9,10,10,
+ 	13,12,10,11,11,13,13,10,10,11,13,14,12,13,13,15,
+ 	15,12,12,13,14,15, 9,10,10,13,13,10,11,11,13,13,
+ 	10,11,11,13,13,12,13,13,14,14,13,14,13,15,14,11,
+ 	12,12,14,14,12,13,13,15,14,11,12,12,14,15,14,14,
+ 	14,16,15,13,12,14,14,16,11,12,13,14,15,12,13,13,
+ 	14,16,12,13,12,15,14,13,15,14,16,16,14,15,13,16,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__16u2_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p2_0 = {
+ 	_vq_quantthresh__16u2_p2_0,
+ 	_vq_quantmap__16u2_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16u2_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__16u2_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16u2_p2_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p3_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__16u2_p3_0[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 9, 9, 4, 5, 5, 6, 6, 8, 7,
+ 	 9, 9, 4, 5, 5, 6, 6, 7, 8, 9, 9, 6, 6, 6, 7, 7,
+ 	 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8, 9,10, 7, 8, 7,
+ 	 8, 8, 9, 9,10,10, 7, 8, 8, 8, 8, 9, 9,10,10, 9,
+ 	 9, 9,10, 9,10,10,11,11, 9, 9, 9,10,10,10,10,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__16u2_p3_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p3_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p3_0 = {
+ 	_vq_quantthresh__16u2_p3_0,
+ 	_vq_quantmap__16u2_p3_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _16u2_p3_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__16u2_p3_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__16u2_p3_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p4_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__16u2_p4_0[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,11,
+ 	11, 5, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,11,
+ 	12,11, 5, 5, 5, 7, 7, 8, 8, 9, 9, 9, 9,10,10,11,
+ 	11,12,12, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,12,12, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,
+ 	11,11,12,12,12,12, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,
+ 	10,11,11,11,12,12,12, 9, 9, 9, 9, 9, 9,10,10,10,
+ 	10,10,11,11,12,12,13,13, 8, 9, 9, 9, 9,10, 9,10,
+ 	10,10,10,11,11,12,12,13,13, 9, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,11,12,12,12,13,13, 9, 9, 9, 9, 9,10,
+ 	10,10,10,11,11,12,11,12,12,13,13,10,10,10,10,10,
+ 	11,11,11,11,11,12,12,12,12,13,13,14,10,10,10,10,
+ 	10,11,11,11,11,12,11,12,12,13,12,13,13,11,11,11,
+ 	11,11,12,12,12,12,12,12,13,13,13,13,14,14,11,11,
+ 	11,11,11,12,12,12,12,12,12,13,12,13,13,14,14,11,
+ 	12,12,12,12,12,12,13,13,13,13,13,13,14,14,14,14,
+ 	11,12,12,12,12,12,12,13,13,13,13,14,13,14,14,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__16u2_p4_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p4_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p4_0 = {
+ 	_vq_quantthresh__16u2_p4_0,
+ 	_vq_quantmap__16u2_p4_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _16u2_p4_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__16u2_p4_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__16u2_p4_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p5_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__16u2_p5_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 7,10, 9, 7,
+ 	10, 9, 5, 8, 9, 7, 9,10, 7, 9,10, 4, 9, 9, 9,11,
+ 	11, 8,11,11, 7,11,11,10,10,13,10,14,13, 7,11,11,
+ 	10,13,11,10,13,14, 5, 9, 9, 8,11,11, 9,11,11, 7,
+ 	11,11,10,14,13,10,12,14, 7,11,11,10,13,13,10,13,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__16u2_p5_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p5_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p5_0 = {
+ 	_vq_quantthresh__16u2_p5_0,
+ 	_vq_quantmap__16u2_p5_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _16u2_p5_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__16u2_p5_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__16u2_p5_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p5_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16u2_p5_1[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 5, 5, 5, 7, 7,
+ 	 7, 7, 8, 8, 8, 8, 5, 5, 6, 7, 7, 7, 7, 8, 8, 8,
+ 	 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7,
+ 	 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8,
+ 	 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__16u2_p5_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p5_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p5_1 = {
+ 	_vq_quantthresh__16u2_p5_1,
+ 	_vq_quantmap__16u2_p5_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16u2_p5_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__16u2_p5_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__16u2_p5_1,
+ 	NULL,
+ 	&_vq_auxt__16u2_p5_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16u2_p6_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 6, 6,
+ 	 8, 8, 9, 9, 9, 9,10,10,12,11, 4, 6, 6, 8, 8, 9,
+ 	 9, 9, 9,10,10,11,12, 7, 8, 8, 9, 9,10,10,10,10,
+ 	12,12,13,12, 7, 8, 8, 9, 9,10,10,10,10,11,12,12,
+ 	12, 8, 9, 9,10,10,11,11,11,11,12,12,13,13, 8, 9,
+ 	 9,10,10,11,11,11,11,12,13,13,13, 8, 9, 9,10,10,
+ 	11,11,12,12,13,13,14,14, 8, 9, 9,10,10,11,11,12,
+ 	12,13,13,14,14, 9,10,10,11,12,13,12,13,14,14,14,
+ 	14,14, 9,10,10,11,12,12,13,13,13,14,14,14,14,10,
+ 	11,11,12,12,13,13,14,14,15,15,15,15,10,11,11,12,
+ 	12,13,13,14,14,14,14,15,15,
+ };
+ 
+ static float _vq_quantthresh__16u2_p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p6_0 = {
+ 	_vq_quantthresh__16u2_p6_0,
+ 	_vq_quantmap__16u2_p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16u2_p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16u2_p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__16u2_p6_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__16u2_p6_1[] = {
+ 	 2, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 	 5, 5, 6, 6, 5, 5, 5, 6, 6,
+ };
+ 
+ static float _vq_quantthresh__16u2_p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p6_1 = {
+ 	_vq_quantthresh__16u2_p6_1,
+ 	_vq_quantmap__16u2_p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _16u2_p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__16u2_p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__16u2_p6_1,
+ 	NULL,
+ 	&_vq_auxt__16u2_p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__16u2_p7_0[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 8, 8, 9, 9,10,10, 4, 6, 6,
+ 	 9, 9, 9, 9, 9, 9,10,10,11,11, 4, 6, 6, 8, 9, 9,
+ 	 9, 9, 9,10,11,12,11, 7, 8, 9,10,10,10,10,11,10,
+ 	11,12,12,13, 7, 9, 9,10,10,10,10,10,10,11,12,13,
+ 	13, 7, 9, 8,10,10,11,11,11,12,12,13,13,14, 7, 9,
+ 	 9,10,10,11,11,11,12,13,13,13,13, 8, 9, 9,10,11,
+ 	11,12,12,12,13,13,13,13, 8, 9, 9,10,11,11,11,12,
+ 	12,13,13,14,14, 9,10,10,12,11,12,13,13,13,14,13,
+ 	13,13, 9,10,10,11,11,12,12,13,14,13,13,14,13,10,
+ 	11,11,12,13,14,14,14,15,14,14,14,14,10,11,11,12,
+ 	12,13,13,13,14,14,14,15,14,
+ };
+ 
+ static float _vq_quantthresh__16u2_p7_0[] = {
+ 	-60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 
+ 	27.5, 38.5, 49.5, 60.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p7_0 = {
+ 	_vq_quantthresh__16u2_p7_0,
+ 	_vq_quantmap__16u2_p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _16u2_p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__16u2_p7_0,
+ 	1, -523206656, 1618345984, 4, 0,
+ 	_vq_quantlist__16u2_p7_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__16u2_p7_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7,
+ 	 7, 7, 7, 7, 8, 8, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8,
+ 	 8, 6, 6, 7, 7, 7, 8, 7, 8, 8, 8, 8, 6, 7, 7, 7,
+ 	 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 8, 8, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__16u2_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p7_1 = {
+ 	_vq_quantthresh__16u2_p7_1,
+ 	_vq_quantmap__16u2_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _16u2_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__16u2_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__16u2_p7_1,
+ 	NULL,
+ 	&_vq_auxt__16u2_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p8_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__16u2_p8_0[] = {
+ 	 1, 5, 5, 7, 7, 8, 8, 7, 7, 8, 8,10, 9,11,11, 4,
+ 	 6, 6, 8, 8,10, 9, 9, 8, 9, 9,10,10,12,14, 4, 6,
+ 	 7, 8, 9, 9,10, 9, 8, 9, 9,10,12,12,11, 7, 8, 8,
+ 	10,10,10,10, 9, 9,10,10,11,13,13,12, 7, 8, 8, 9,
+ 	11,11,10, 9, 9,11,10,12,11,11,14, 8, 9, 9,11,10,
+ 	11,11,10,10,11,11,13,12,14,12, 8, 9, 9,11,12,11,
+ 	11,10,10,12,11,12,12,12,14, 7, 8, 8, 9, 9,10,10,
+ 	10,11,12,11,13,13,14,12, 7, 8, 9, 9, 9,10,10,11,
+ 	11,11,12,12,14,14,14, 8,10, 9,10,11,11,11,11,14,
+ 	12,12,13,14,14,13, 9, 9, 9,10,11,11,11,12,12,12,
+ 	14,12,14,13,14,10,10,10,12,11,12,11,14,13,14,13,
+ 	14,14,13,14, 9,10,10,11,12,11,13,12,13,13,14,14,
+ 	14,13,14,10,13,13,12,12,11,12,14,13,14,13,14,12,
+ 	14,13,10,11,11,12,11,12,12,14,14,14,13,14,14,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__16u2_p8_0[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p8_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p8_0 = {
+ 	_vq_quantthresh__16u2_p8_0,
+ 	_vq_quantmap__16u2_p8_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _16u2_p8_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__16u2_p8_0,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__16u2_p8_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p8_1[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__16u2_p8_1[] = {
+ 	 2, 5, 5, 7, 7, 8, 8, 8, 8, 9, 9,10, 9,10, 9, 9,
+ 	 9,10,10,10,10, 5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 9,
+ 	10, 9,10,10,10,10,10,10,11,10, 5, 6, 6, 7, 7, 8,
+ 	 8, 8, 9, 9,10,10,10,10,10,10,10,10,10,10,10, 7,
+ 	 7, 7, 8, 8, 9, 8, 9, 9,10, 9,10,10,10,10,10,10,
+ 	11,10,11,10, 7, 7, 7, 8, 8, 8, 9, 9, 9,10, 9,10,
+ 	10,10,10,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9,
+ 	10, 9,10,10,10,10,10,10,10,11,10,10,11,10, 8, 8,
+ 	 8, 8, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,11,
+ 	11,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,
+ 	11,10,11,10,11,10,11,10, 8, 9, 9, 9, 9, 9,10,10,
+ 	10,10,10,10,10,10,10,10,11,11,10,10,10, 9,10, 9,
+ 	 9,10,10,10,11,10,10,10,10,10,10,10,10,11,11,11,
+ 	11,11, 9, 9, 9,10, 9,10,10,10,10,10,10,11,10,11,
+ 	10,11,11,11,11,10,10, 9,10, 9,10,10,10,10,11,10,
+ 	10,10,10,10,11,10,11,10,11,10,10,11, 9,10,10,10,
+ 	10,10,10,10,10,10,11,10,10,11,11,10,11,11,11,11,
+ 	11, 9, 9,10,10,10,10,10,11,10,10,11,10,10,11,10,
+ 	10,11,11,11,11,11, 9,10,10,10,10,10,10,10,11,10,
+ 	11,10,11,10,11,11,11,11,11,10,11,10,10,10,10,10,
+ 	10,10,10,10,11,11,11,11,11,11,11,11,11,10,11,11,
+ 	10,10,10,10,10,11,10,10,10,11,10,11,11,11,11,10,
+ 	12,11,11,11,10,10,10,10,10,10,11,10,10,10,11,11,
+ 	12,11,11,11,11,11,11,11,11,11,10,10,10,11,10,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,10,
+ 	10,10,11,10,11,10,10,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,10,10,10,10,10,10,10,11,11,10,11,11,10,
+ 	11,11,10,11,11,11,10,11,11,
+ };
+ 
+ static float _vq_quantthresh__16u2_p8_1[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p8_1[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p8_1 = {
+ 	_vq_quantthresh__16u2_p8_1,
+ 	_vq_quantmap__16u2_p8_1,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _16u2_p8_1 = {
+ 	2, 441,
+ 	_vq_lengthlist__16u2_p8_1,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__16u2_p8_1,
+ 	NULL,
+ 	&_vq_auxt__16u2_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p9_0[] = {
+ 	5586,
+ 	4655,
+ 	6517,
+ 	3724,
+ 	7448,
+ 	2793,
+ 	8379,
+ 	1862,
+ 	9310,
+ 	931,
+ 	10241,
+ 	0,
+ 	11172,
+ 	5521,
+ 	5651,
+ };
+ 
+ static long _vq_lengthlist__16u2_p9_0[] = {
+ 	 1,10,10,10,10,10,10,10,10,10,10,10,10, 5, 4,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10, 4,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	 6, 6, 5,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 5,
+ 	 5,
+ };
+ 
+ static float _vq_quantthresh__16u2_p9_0[] = {
+ 	-5120.5, -4189.5, -3258.5, -2327.5, -1396.5, -498, -32.5, 32.5, 
+ 	498, 1396.5, 2327.5, 3258.5, 4189.5, 5120.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,   13,    0,
+ 	   14,    2,    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p9_0 = {
+ 	_vq_quantthresh__16u2_p9_0,
+ 	_vq_quantmap__16u2_p9_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _16u2_p9_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__16u2_p9_0,
+ 	1, -510275072, 1611661312, 14, 0,
+ 	_vq_quantlist__16u2_p9_0,
+ 	NULL,
+ 	&_vq_auxt__16u2_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p9_1[] = {
+ 	392,
+ 	343,
+ 	441,
+ 	294,
+ 	490,
+ 	245,
+ 	539,
+ 	196,
+ 	588,
+ 	147,
+ 	637,
+ 	98,
+ 	686,
+ 	49,
+ 	735,
+ 	0,
+ 	784,
+ 	388,
+ 	396,
+ };
+ 
+ static long _vq_lengthlist__16u2_p9_1[] = {
+ 	 1,12,10,12,10,12,10,12,11,12,12,12,12,12,12,12,
+ 	12, 5, 5, 9,10,12,11,11,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,10, 9, 9,11, 9,11,11,12,11,12,12,12,
+ 	12,12,12,12,12,12,12, 8, 8,10,11, 9,12,11,12,12,
+ 	12,12,12,12,12,12,12,12,12,12, 9, 8,10,11,12,11,
+ 	12,11,12,12,12,12,12,12,12,12,12,12,12, 8, 9,11,
+ 	11,10,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	 9,10,11,12,11,12,11,12,12,12,12,12,12,12,12,12,
+ 	12,12,12, 9, 9,11,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11, 5, 8, 9, 9, 8,11, 9,11,11,11,11,11,11,
+ 	11,11,11,11, 5, 5, 4, 8, 8, 8, 8,10, 9,10,10,11,
+ 	11,11,11,11,11,11,11, 5, 4,
+ };
+ 
+ static float _vq_quantthresh__16u2_p9_1[] = {
+ 	-367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, -26.5, 
+ 	-2, 2, 26.5, 73.5, 122.5, 171.5, 220.5, 269.5, 
+ 	318.5, 367.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p9_1[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	   17,    0,   18,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p9_1 = {
+ 	_vq_quantthresh__16u2_p9_1,
+ 	_vq_quantmap__16u2_p9_1,
+ 	19,
+ 	19
+ };
+ 
+ static static_codebook _16u2_p9_1 = {
+ 	2, 361,
+ 	_vq_lengthlist__16u2_p9_1,
+ 	1, -518488064, 1611661312, 10, 0,
+ 	_vq_quantlist__16u2_p9_1,
+ 	NULL,
+ 	&_vq_auxt__16u2_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__16u2_p9_2[] = {
+ 	24,
+ 	23,
+ 	25,
+ 	22,
+ 	26,
+ 	21,
+ 	27,
+ 	20,
+ 	28,
+ 	19,
+ 	29,
+ 	18,
+ 	30,
+ 	17,
+ 	31,
+ 	16,
+ 	32,
+ 	15,
+ 	33,
+ 	14,
+ 	34,
+ 	13,
+ 	35,
+ 	12,
+ 	36,
+ 	11,
+ 	37,
+ 	10,
+ 	38,
+ 	9,
+ 	39,
+ 	8,
+ 	40,
+ 	7,
+ 	41,
+ 	6,
+ 	42,
+ 	5,
+ 	43,
+ 	4,
+ 	44,
+ 	3,
+ 	45,
+ 	2,
+ 	46,
+ 	1,
+ 	47,
+ 	0,
+ 	48,
+ };
+ 
+ static long _vq_lengthlist__16u2_p9_2[] = {
+ 	 1, 3, 3, 4, 7, 7, 7, 8, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 9, 9, 8, 9, 9,
+ 	 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,12,12,10,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__16u2_p9_2[] = {
+ 	-23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, 
+ 	-15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, 
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ 	8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 
+ 	16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 
+ };
+ 
+ static long _vq_quantmap__16u2_p9_2[] = {
+ 	   47,   45,   43,   41,   39,   37,   35,   33,
+ 	   31,   29,   27,   25,   23,   21,   19,   17,
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,   18,   20,   22,   24,   26,   28,   30,
+ 	   32,   34,   36,   38,   40,   42,   44,   46,
+ 	   48,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__16u2_p9_2 = {
+ 	_vq_quantthresh__16u2_p9_2,
+ 	_vq_quantmap__16u2_p9_2,
+ 	49,
+ 	49
+ };
+ 
+ static static_codebook _16u2_p9_2 = {
+ 	1, 49,
+ 	_vq_lengthlist__16u2_p9_2,
+ 	1, -526909440, 1611661312, 6, 0,
+ 	_vq_quantlist__16u2_p9_2,
+ 	NULL,
+ 	&_vq_auxt__16u2_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u0__long[] = {
+ 	 3, 7,12,10,15,10, 9,18, 5, 2, 5, 6, 8, 7, 9,20,
+ 	10, 4, 4, 6, 6, 8,11,20, 9, 5, 6, 5, 7, 6, 9,20,
+ 	11, 7, 5, 7, 5, 7,10,20,10, 6, 7, 6, 6, 6, 8,17,
+ 	 9, 8,10, 7, 7, 5, 5,17,11,18,19,14,13, 9, 8,19,
+ };
+ 
+ static static_codebook _huff_book__44u0__long = {
+ 	2, 64,
+ 	_huff_lengthlist__44u0__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u0__p1_0[] = {
+ 	 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
+ 	10,11, 5, 8, 8, 8,10,10, 8,11,11, 4, 8, 8, 8,11,
+ 	11, 8,11,11, 8,11,11,11,13,14,11,13,14, 7,11,11,
+ 	10,14,12,11,13,14, 4, 8, 8, 8,11,11, 8,11,11, 8,
+ 	11,11,11,14,13,10,12,13, 8,11,12,11,14,14,11,14,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u0__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p1_0 = {
+ 	_vq_quantthresh__44u0__p1_0,
+ 	_vq_quantmap__44u0__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u0__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u0__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u0__p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u0__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u0__p2_0[] = {
+ 	 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 6, 7, 8, 8, 6,
+ 	 7, 8, 5, 6, 7, 6, 8, 7, 7, 8, 8, 5, 7, 7, 7, 8,
+ 	 8, 7, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
+ 	 7,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 8, 6,
+ 	 8, 8, 8,10,10, 7, 8,10, 6, 8, 8, 8,10,10, 8,10,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u0__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p2_0 = {
+ 	_vq_quantthresh__44u0__p2_0,
+ 	_vq_quantmap__44u0__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u0__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u0__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u0__p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u0__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u0__p3_0[] = {
+ 	 1, 5, 5, 8, 8, 5, 7, 7, 9, 9, 5, 7, 8, 9, 9, 8,
+ 	10, 9,12,11, 8, 9,10,11,12, 6, 8, 8,10,10, 8,10,
+ 	10,11,11, 8, 9,10,11,11,10,12,11,13,13,10,11,11,
+ 	13,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10,10,11,
+ 	11,10,11,11,13,13,10,11,11,13,13, 9,11,11,15,14,
+ 	10,12,11,15,14,10,12,11,15,14,12,14,13,16,15,12,
+ 	13,13,17,15, 9,11,11,14,14,10,11,12,14,15,10,11,
+ 	12,14,17,12,13,14,15,16,13,13,14,15,17, 5, 8, 8,
+ 	11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,15,
+ 	14,11,12,12,14,15, 8,10,10,13,12,10,12,12,13,13,
+ 	10,12,12,14,14,12,13,13,15,15,11,13,13,15,16, 7,
+ 	10,10,12,12, 9,12,11,14,13,10,12,12,13,14,12,13,
+ 	12,15,15,12,13,13,16,17,10,12,12,15,16,12,13,13,
+ 	17,15,11,13,13,17,16,15,15,15,17,17,13,15,16,18,
+ 	18, 9,12,12,15,17,11,13,12,16,16,11,13,13,16,18,
+ 	14,15,14,16,16,13,15,15,17,18, 5, 8, 8,11,11, 8,
+ 	10,10,12,12, 8,10,10,12,12,10,12,12,15,15,11,12,
+ 	12,14,15, 7,10,10,12,12,10,12,12,14,14, 9,11,12,
+ 	13,13,12,13,13,16,16,12,12,13,15,15, 8,10,10,12,
+ 	13,10,12,12,13,14,10,12,12,13,13,12,13,13,16,16,
+ 	12,13,13,15,15,10,12,12,15,16,11,13,13,17,16,11,
+ 	12,13,17,16,13,15,15,18,19,14,14,14,17,16,10,12,
+ 	12,15,15,11,13,13,15,16,11,13,13,15,17,13,15,15,
+ 	18,20,14,15,15,17,17, 8,11,11,15,16,10,13,12,17,
+ 	16,10,12,13,16,17,15,16,15,20,19,14,15,16,18,19,
+ 	 9,12,12,15,17,11,13,14,18,18,11,13,14,17,17,16,
+ 	17,18,19,19,15,16,18,19,20, 9,12,12,16,16,11,14,
+ 	12,17,17,11,13,13,16,19,15,16,15,20,19,15,15,15,
+ 	19,17,12,14,14,18,19,14,15,15,19,18,13,15,15,18,
+ 	17,17,18,19,20, 0,15,16,17,20, 0,12,15,14,17,18,
+ 	13,16,14,20,20,13,16,15,19,18,16,20,17,20,19,16,
+ 	17,16, 0,19, 8,11,11,15,15,10,12,12,17,17,10,12,
+ 	13,16,16,13,14,15,17,17,15,16,17,19,19, 9,12,12,
+ 	16,17,11,13,13,18,16,11,13,13,16,17,14,15,16,19,
+ 	18,15,16,17,17,18, 9,12,12,17,16,11,14,13,16,16,
+ 	12,14,13,17,18,14,16,15,18,19,17,17,17,19,18,12,
+ 	14,14,19,17,13,15,15,17, 0,13,14,16, 0, 0,15,16,
+ 	16,19, 0,16,16,19,19, 0,12,15,14,19,18,13,15,15,
+ 	19, 0,14,16,15, 0,19,15,17,17, 0,19,17,18,17, 0,
+ 	19,
+ };
+ 
+ static float _vq_quantthresh__44u0__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p3_0 = {
+ 	_vq_quantthresh__44u0__p3_0,
+ 	_vq_quantmap__44u0__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u0__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u0__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u0__p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u0__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u0__p4_0[] = {
+ 	 4, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 9,
+ 	 9, 9,11,11, 9, 9, 9,11,11, 5, 7, 7, 9, 9, 7, 8,
+ 	 8,10,10, 6, 7, 8, 9,10,10,10,10,11,12, 9,10,10,
+ 	11,12, 5, 7, 7, 9, 9, 6, 8, 7,10,10, 7, 8, 8,10,
+ 	10, 9,10,10,12,11,10,10,10,12,11, 9,10,10,12,12,
+ 	10,11,10,13,13, 9,10,10,13,13,12,12,12,14,14,11,
+ 	12,12,14,14, 9,10,10,12,12, 9,10,10,13,13,10,10,
+ 	10,12,13,11,12,12,14,14,12,13,12,14,14, 5, 7, 7,
+ 	10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,10,10,13,
+ 	12,10,10,10,12,12, 7, 8, 8,11,10, 8, 8, 9,10,11,
+ 	 8, 9, 9,11,11,10,10,11,12,13,10,11,11,13,14, 6,
+ 	 8, 8,10,10, 7, 9, 8,11,10, 8, 9, 9,11,11,10,11,
+ 	10,13,11,10,11,11,13,13,10,11,10,13,13,10,10,11,
+ 	13,14,10,11,11,14,13,12,11,13,12,14,12,13,13,15,
+ 	15, 9,10,10,13,13,10,11,10,13,13,10,11,11,13,14,
+ 	12,13,11,15,12,12,13,13,14,15, 5, 7, 7,10, 9, 7,
+ 	 8, 8,10,10, 7, 8, 8,10,10,10,10,10,12,12,10,10,
+ 	10,12,13, 6, 8, 8,10,10, 8, 9, 9,11,11, 7, 8, 9,
+ 	10,11,10,11,11,13,13,10,10,11,11,14, 7, 8, 8,10,
+ 	10, 8, 9, 9,11,11, 8, 9, 8,11,10,10,11,11,13,13,
+ 	10,11,10,13,11, 9,10,10,13,13,10,11,11,14,13,10,
+ 	10,11,12,13,13,13,13,15,14,12,11,13,12,15, 9,10,
+ 	11,13,13,10,11,11,13,14,10,11,10,13,13,12,13,13,
+ 	15,15,12,13,11,15,12, 8,10,10,13,12,10,11,11,13,
+ 	13, 9,10,11,13,13,13,13,13,15,15,12,13,13,15,15,
+ 	 9,10,10,13,13,10,11,11,13,14,10,11,11,14,13,13,
+ 	13,14,14,15,13,13,13,14,15, 9,10,10,13,13,10,11,
+ 	10,14,13,10,11,11,13,14,13,14,13,15,14,12,13,13,
+ 	14,15,11,13,13,15,14,11,11,13,14,15,12,14,13,15,
+ 	15,13,12,15,12,16,14,14,15,17,16,11,12,12,14,15,
+ 	11,13,11,15,14,12,13,13,15,15,14,14,12,17,13,14,
+ 	15,15,18,16, 8,10,10,13,12, 9,10,10,13,13,10,10,
+ 	11,13,13,12,13,13,14,14,12,13,13,15,15, 9,10,10,
+ 	13,13,10,11,11,14,13,10,10,11,13,14,12,13,13,17,
+ 	15,12,12,13,14,16, 9,10,10,13,13,10,11,11,13,13,
+ 	10,11,10,14,13,13,13,13,14,15,13,14,13,15,15,11,
+ 	13,12,14,14,12,13,13,16,14,11,12,13,15,15,14,15,
+ 	16,17,18,14,12,15,14,16,11,12,13,14,15,12,13,13,
+ 	15,16,11,13,11,15,14,14,16,14,16,17,14,15,12,16,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u0__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p4_0 = {
+ 	_vq_quantthresh__44u0__p4_0,
+ 	_vq_quantmap__44u0__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u0__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u0__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u0__p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u0__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u0__p5_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 9, 9, 4, 6, 5, 8, 8, 8, 8,
+ 	10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
+ 	 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8,
+ 	10, 9,10,11,12,12, 8, 8, 8, 9, 9,11,11,12,12, 9,
+ 	10,10,11,11,12,12,13,13, 9,10,10,11,11,12,12,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u0__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p5_0 = {
+ 	_vq_quantthresh__44u0__p5_0,
+ 	_vq_quantmap__44u0__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u0__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u0__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u0__p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u0__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u0__p6_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8,10, 9,10,10,14,14, 4, 6, 5,
+ 	 8, 8, 9, 9,10,10,11,11,14,14, 4, 5, 6, 8, 8, 9,
+ 	 9,10,10,11,11,14,14, 7, 8, 8, 9, 9,10,10,11,11,
+ 	12,12,15,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,14,
+ 	15, 9, 9, 9,10,10,11,11,12,11,12,12,15,16, 9, 9,
+ 	 9,10,10,11,11,11,11,12,12,15,15,10,10,10,11,11,
+ 	12,11,12,12,13,13,16,16,10,10,10,11,11,12,12,12,
+ 	12,13,13,16,17,11,11,12,12,12,13,13,14,13,14,14,
+ 	18,17,11,11,11,12,12,12,12,13,14,14,14,18,18,14,
+ 	14,14,15,15,15,16,16,16,17,17, 0,19,14,14,14,15,
+ 	15,16,17,16,17,17,17,19, 0,
+ };
+ 
+ static float _vq_quantthresh__44u0__p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p6_0 = {
+ 	_vq_quantthresh__44u0__p6_0,
+ 	_vq_quantmap__44u0__p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u0__p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u0__p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44u0__p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u0__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u0__p6_1[] = {
+ 	 2, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
+ 	 6, 6, 6, 6, 5, 6, 6, 6, 6,
+ };
+ 
+ static float _vq_quantthresh__44u0__p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p6_1 = {
+ 	_vq_quantthresh__44u0__p6_1,
+ 	_vq_quantmap__44u0__p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u0__p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44u0__p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u0__p6_1,
+ 	NULL,
+ 	&_vq_auxt__44u0__p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p7_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u0__p7_0[] = {
+ 	 1, 5, 5,11,11, 9,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11, 8,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11, 9,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11, 8,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44u0__p7_0[] = {
+ 	-253.5, -84.5, 84.5, 253.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p7_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p7_0 = {
+ 	_vq_quantthresh__44u0__p7_0,
+ 	_vq_quantmap__44u0__p7_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u0__p7_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u0__p7_0,
+ 	1, -518709248, 1626677248, 3, 0,
+ 	_vq_quantlist__44u0__p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u0__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p7_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u0__p7_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 4, 7, 7,
+ 	 8, 8, 8, 8, 9, 9,11,10,12,11, 4, 6, 7, 8, 8, 7,
+ 	 8, 9, 9,10,11,12,11, 7, 8, 8, 9, 9,10,10,11,11,
+ 	12,11,13,13, 7, 8, 8, 9,10,10,10,11,11,12,12,12,
+ 	13, 7, 8, 8,10,10,12,12,13,12,16,13,13,14, 7, 8,
+ 	 8,10,11,12,12,13,12,13,13,14,14, 8, 9,10,12,12,
+ 	14,13,16,15,16,16,16,15, 8,10,10,12,12,14,13,14,
+ 	15,16,16,15,16,10,11,12,14,14,14,14,16,13,16,15,
+ 	16,16,10,11,12,13,13,15,14,14,15,16,16,14,14,13,
+ 	14,13,15,16,16,16,15,15,16,16,16,16,11,15,14,16,
+ 	16,14,14,16,15,16,14,16,15,
+ };
+ 
+ static float _vq_quantthresh__44u0__p7_1[] = {
+ 	-71.5, -58.5, -45.5, -32.5, -19.5, -6.5, 6.5, 19.5, 
+ 	32.5, 45.5, 58.5, 71.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p7_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p7_1 = {
+ 	_vq_quantthresh__44u0__p7_1,
+ 	_vq_quantmap__44u0__p7_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u0__p7_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u0__p7_1,
+ 	1, -523010048, 1618608128, 4, 0,
+ 	_vq_quantlist__44u0__p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u0__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u0__p7_2[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u0__p7_2[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 5, 5, 6,
+ 	 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 5, 5, 5, 7, 7, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 7, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 6, 7, 7, 8, 7, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8,
+ 	 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 9, 9, 9, 9, 8, 9,
+ 	 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44u0__p7_2[] = {
+ 	-5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 
+ 	2.5, 3.5, 4.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44u0__p7_2[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u0__p7_2 = {
+ 	_vq_quantthresh__44u0__p7_2,
+ 	_vq_quantmap__44u0__p7_2,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u0__p7_2 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u0__p7_2,
+ 	1, -531103744, 1611661312, 4, 0,
+ 	_vq_quantlist__44u0__p7_2,
+ 	NULL,
+ 	&_vq_auxt__44u0__p7_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u0__short[] = {
+ 	 6,10,11,12,13,12,12,12, 4, 6, 6, 9, 9,10,11,13,
+ 	 3, 4, 3, 7, 6, 8,10,15, 5, 7, 7, 9, 8, 9,11,16,
+ 	 6, 7, 5, 8, 5, 7,10,16, 7, 8, 7, 9, 6, 7,10,16,
+ 	10, 6, 3, 5, 4, 5, 7,16,13, 8, 5, 7, 6, 7,10,15,
+ };
+ 
+ static static_codebook _huff_book__44u0__short = {
+ 	2, 64,
+ 	_huff_lengthlist__44u0__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u1__long[] = {
+ 	 4, 8,13,11,14,11,10,14, 6, 3, 5, 6, 8, 7, 9,14,
+ 	12, 4, 3, 6, 5, 7,10,18,11, 6, 6, 6, 6, 6, 8,16,
+ 	13, 7, 4, 6, 4, 6, 9,19,11, 6, 6, 5, 5, 5, 7,16,
+ 	10, 8, 9, 7, 9, 6, 4,12,11,16,18,19,18,10, 7,11,
+ };
+ 
+ static static_codebook _huff_book__44u1__long = {
+ 	2, 64,
+ 	_huff_lengthlist__44u1__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u1__p1_0[] = {
+ 	 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
+ 	10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
+ 	11, 8,11,11, 8,11,11,11,13,14,11,13,14, 8,11,11,
+ 	10,14,11,11,13,14, 4, 8, 8, 8,11,11, 8,11,11, 7,
+ 	11,11,11,14,13,10,12,13, 8,11,11,11,14,14,11,14,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u1__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p1_0 = {
+ 	_vq_quantthresh__44u1__p1_0,
+ 	_vq_quantmap__44u1__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u1__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u1__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u1__p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u1__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u1__p2_0[] = {
+ 	 2, 5, 5, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6,
+ 	 7, 8, 5, 6, 6, 6, 8, 7, 7, 8, 8, 5, 6, 6, 7, 8,
+ 	 8, 6, 8, 8, 7, 8, 8, 8, 9,10, 8, 9, 9, 6, 8, 8,
+ 	 7, 9, 8, 8, 9,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
+ 	 8, 8, 8,10, 9, 7, 8, 9, 7, 8, 8, 8, 9, 9, 8,10,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u1__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p2_0 = {
+ 	_vq_quantthresh__44u1__p2_0,
+ 	_vq_quantmap__44u1__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u1__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u1__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u1__p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u1__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u1__p3_0[] = {
+ 	 2, 5, 4, 7, 7, 5, 7, 7, 9, 8, 5, 7, 7, 8, 9, 8,
+ 	 9, 9,11,11, 8, 9, 9,11,11, 5, 7, 7,10,10, 7, 9,
+ 	 9,11,10, 7, 9, 9,10,10, 9,11,10,13,12, 9,10,10,
+ 	12,13, 5, 7, 7,10, 9, 7, 9, 9,11,10, 7, 9, 9,10,
+ 	11, 9,10,10,12,12,10,10,11,12,13, 8,10,10,14,13,
+ 	 9,11,11,15,13, 9,11,11,15,13,12,14,12,16,14,12,
+ 	13,12,15,14, 8,10,10,13,14, 9,11,11,13,14,10,11,
+ 	11,13,15,12,12,13,14,15,12,13,14,14,16, 5, 7, 7,
+ 	10,10, 7, 9, 9,11,11, 7, 9, 9,11,12,10,11,11,14,
+ 	14,10,11,11,14,14, 7, 9, 9,12,12, 9,11,11,13,12,
+ 	 9,11,11,13,13,12,12,12,14,14,11,12,13,15,15, 7,
+ 	 9, 9,12,11, 9,11,10,12,12, 9,11,11,12,13,11,12,
+ 	11,14,14,11,12,12,15,16, 9,11,11,15,15,11,12,12,
+ 	16,15,10,12,12,16,15,14,15,15,17,16,13,14,14,17,
+ 	17, 9,11,11,14,15,10,12,11,15,15,10,12,12,15,17,
+ 	13,14,13,16,15,13,14,15,17,17, 5, 7, 7,10,10, 7,
+ 	 9, 9,12,11, 7, 9, 9,11,12,10,11,11,14,14,10,11,
+ 	11,13,14, 7, 9, 9,11,12, 9,11,11,13,13, 9,10,11,
+ 	12,12,11,12,12,15,15,11,12,12,13,14, 7,10, 9,12,
+ 	12, 9,11,11,13,13, 9,11,11,12,12,11,12,12,16,15,
+ 	11,12,12,14,14, 9,11,11,15,14,10,12,12,16,15,10,
+ 	11,12,15,15,13,14,14,17,18,13,13,14,15,16, 9,11,
+ 	11,15,16,10,12,12,15,15,11,12,12,14,17,13,14,14,
+ 	17,17,14,14,14,16,18, 7,10,10,14,15,10,12,12,16,
+ 	15,10,11,12,16,16,14,16,15,18,17,13,15,14,17,19,
+ 	 9,11,12,16,15,11,13,13,17,16,10,13,13,16,16,15,
+ 	16,16,17,19,13,15,15,17,17, 8,11,11,15,15,10,13,
+ 	11,16,16,10,13,13,16,17,14,16,15,18,19,13,15,15,
+ 	17,17,12,14,14,18,18,13,14,15,18,19,12,14,15,17,
+ 	18,16,18,18,19, 0,14,15,16,18,18,11,14,13,17,18,
+ 	12,16,14,19,19,12,15,14, 0,18,15,17,16,18,17,14,
+ 	17,16,18,18, 7,10,10,15,14,10,12,11,16,16,10,11,
+ 	12,16,16,13,15,14,19,18,14,15,16,18,18, 8,11,11,
+ 	15,15,10,13,12,17,16,10,12,13,16,17,14,14,15,19,
+ 	18,14,15,16,18, 0, 9,11,11,16,15,11,13,12,15,16,
+ 	11,13,13,16,16,14,15,14, 0,17,15,16,16,19,18,11,
+ 	14,14,18,17,12,14,15,17,17,12,13,15, 0,17,14,15,
+ 	16,18,17,16,17,18,17,19,11,14,13,17,19,12,15,14,
+ 	18,19,13,16,14, 0,19,14,17,15, 0,18,15,18,16, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44u1__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p3_0 = {
+ 	_vq_quantthresh__44u1__p3_0,
+ 	_vq_quantmap__44u1__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u1__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u1__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u1__p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u1__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u1__p4_0[] = {
+ 	 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 9,
+ 	 9, 9,11,11, 9, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
+ 	 8,10,10, 6, 7, 8, 9,10,10,10,10,11,12, 9, 9,10,
+ 	11,12, 6, 7, 7, 9, 9, 6, 8, 7,10, 9, 7, 8, 8,10,
+ 	10, 9,10, 9,12,11,10,10,10,12,11, 9,10,10,12,12,
+ 	10,10,10,13,12, 9,10,10,12,12,12,12,12,14,14,11,
+ 	12,12,13,14, 9,10,10,12,12, 9,10,10,13,12,10,10,
+ 	10,12,13,12,12,12,14,13,12,12,12,14,14, 5, 7, 7,
+ 	 9, 9, 7, 8, 7,10,10, 7, 7, 8,10,10,10,10,10,12,
+ 	12,10,10,10,12,12, 7, 8, 8,10,10, 8, 8, 9,10,11,
+ 	 8, 8, 8,11,11,10,10,11,11,13,10,11,11,12,13, 6,
+ 	 7, 7,10,10, 7, 8, 8,11,10, 8, 8, 9,11,11,10,11,
+ 	10,13,11,10,11,11,13,12,10,11,10,13,12,10,10,11,
+ 	13,13,10,11,11,13,13,12,11,13,12,14,12,13,13,15,
+ 	15, 9,10,10,12,13,10,11,10,13,13,10,11,11,13,14,
+ 	12,13,11,14,12,12,13,13,14,15, 5, 7, 7, 9,10, 7,
+ 	 8, 7,10,10, 7, 7, 8,10,10,10,10,10,12,12,10,10,
+ 	10,12,12, 6, 7, 7,10,10, 8, 9, 8,11,11, 7, 8, 8,
+ 	10,11,10,11,11,12,13,10,10,11,11,13, 7, 8, 8,10,
+ 	10, 8, 8, 8,11,11, 8, 9, 8,11,10,10,11,10,13,12,
+ 	10,11,10,13,12, 9,10,10,13,12,10,11,11,13,13, 9,
+ 	10,10,12,13,13,13,13,15,14,12,11,13,12,15,10,10,
+ 	11,12,13,10,11,11,13,13,10,11,10,13,13,12,13,13,
+ 	15,15,12,13,11,14,12, 8,10, 9,12,12, 9,10,10,13,
+ 	13, 9,10,10,13,13,13,13,13,14,15,12,12,12,14,14,
+ 	 9,10,10,13,12,10,11,11,13,13,10,11,11,13,12,13,
+ 	13,14,14,16,12,13,13,15,14, 9,10,10,13,13,10,11,
+ 	10,13,13,10,11,11,13,13,13,14,12,15,14,12,13,13,
+ 	14,15,12,12,12,14,14,11,12,12,14,15,12,13,13,15,
+ 	14,14,12,15,12,16,14,14,15,17,16,11,12,12,14,14,
+ 	11,12,11,15,14,12,13,13,15,15,13,14,12,16,13,14,
+ 	14,15,17,16, 8,10,10,12,12, 9,10,10,13,12,10,10,
+ 	10,13,13,12,13,12,14,14,12,13,13,15,14, 9,10,10,
+ 	13,13,10,11,11,13,13,10,10,11,12,13,13,13,13,15,
+ 	15,12,12,13,14,15, 9,10,10,12,13,10,11,11,12,13,
+ 	10,11,10,13,13,12,13,13,14,15,13,14,13,15,14,11,
+ 	12,12,15,14,12,13,13,15,14,11,12,12,14,15,14,14,
+ 	14,17,15,13,12,15,13,16,12,12,12,14,15,12,13,13,
+ 	14,15,11,12,12,15,14,14,15,14,16,17,13,15,12,16,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u1__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p4_0 = {
+ 	_vq_quantthresh__44u1__p4_0,
+ 	_vq_quantmap__44u1__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u1__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u1__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u1__p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u1__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u1__p5_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8,10,10, 4, 6, 5, 8, 8, 8, 8,
+ 	10,10, 4, 5, 6, 8, 8, 8, 8,10,10, 7, 8, 7, 9, 9,
+ 	 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8,
+ 	 9, 9,10,11,12,12, 8, 8, 9, 9, 9,10,10,12,12,10,
+ 	10,10,11,11,12,12,13,13,10,10,10,11,11,12,12,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u1__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p5_0 = {
+ 	_vq_quantthresh__44u1__p5_0,
+ 	_vq_quantmap__44u1__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u1__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u1__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u1__p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u1__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u1__p6_0[] = {
+ 	 1, 4, 4, 7, 7, 9, 8,10, 9,11,10,14,13, 4, 5, 5,
+ 	 8, 8, 9, 9,11,11,11,11,14,14, 4, 5, 5, 8, 8, 9,
+ 	 9,10,11,11,11,14,14, 7, 8, 8, 9, 9,11,10,11,11,
+ 	12,12,16,15, 7, 8, 8, 9, 9,10,11,11,11,12,12,15,
+ 	15, 9,10,10,11,11,11,11,12,12,13,13,16,16, 9,10,
+ 	10,11,11,11,11,12,12,12,13,16,15,10,11,11,11,11,
+ 	12,12,13,13,13,13,16,17,10,11,11,11,11,12,12,12,
+ 	12,13,14,16,16,11,12,12,12,12,13,13,14,14,14,15,
+ 	18,17,11,12,12,12,12,13,13,13,14,14,15,18,18,15,
+ 	14,15,15,15,16,16,17,17,18,17,20,20,14,15,15,15,
+ 	15,16,17,17,16,18, 0,19, 0,
+ };
+ 
+ static float _vq_quantthresh__44u1__p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p6_0 = {
+ 	_vq_quantthresh__44u1__p6_0,
+ 	_vq_quantmap__44u1__p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u1__p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u1__p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44u1__p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u1__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u1__p6_1[] = {
+ 	 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
+ 	 6, 5, 6, 6, 5, 5, 6, 6, 6,
+ };
+ 
+ static float _vq_quantthresh__44u1__p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p6_1 = {
+ 	_vq_quantthresh__44u1__p6_1,
+ 	_vq_quantmap__44u1__p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u1__p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44u1__p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u1__p6_1,
+ 	NULL,
+ 	&_vq_auxt__44u1__p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p7_0[] = {
+ 	3,
+ 	2,
+ 	4,
+ 	1,
+ 	5,
+ 	0,
+ 	6,
+ };
+ 
+ static long _vq_lengthlist__44u1__p7_0[] = {
+ 	 1, 3, 3, 9, 9, 9, 9, 5, 7, 7, 9, 9, 9, 9, 5, 6,
+ 	 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44u1__p7_0[] = {
+ 	-422.5, -253.5, -84.5, 84.5, 253.5, 422.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p7_0[] = {
+ 	    5,    3,    1,    0,    2,    4,    6,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p7_0 = {
+ 	_vq_quantthresh__44u1__p7_0,
+ 	_vq_quantmap__44u1__p7_0,
+ 	7,
+ 	7
+ };
+ 
+ static static_codebook _44u1__p7_0 = {
+ 	2, 49,
+ 	_vq_lengthlist__44u1__p7_0,
+ 	1, -518017024, 1626677248, 3, 0,
+ 	_vq_quantlist__44u1__p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u1__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p7_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u1__p7_1[] = {
+ 	 1, 4, 4, 6, 6, 6, 7, 8, 8, 9, 9,11,10, 4, 7, 7,
+ 	 8, 8, 8, 8, 9, 9,11,10,12,11, 4, 6, 7, 8, 8, 8,
+ 	 8,10,10,10,11,12,11, 7, 8, 8, 9, 9,10,10,11,11,
+ 	12,12,13,13, 7, 8, 8, 9, 9,10,10,11,11,12,12,13,
+ 	13, 7, 8, 8,10,10,13,12,13,13,16,13,13,14, 7, 8,
+ 	 8,10,11,12,12,13,13,14,14,14,14, 8,10,10,13,12,
+ 	13,13,16,14,15,15,16,15, 8,10,11,12,13,13,13,13,
+ 	16,15,16,16,14,10,12,13,14,15,15,14,14,14,15,16,
+ 	15,16,10,11,12,13,13,15,15,16,16,16,14,16,16,12,
+ 	13,13,15,14,15,14,15,15,14,15,16,16,11,14,14,15,
+ 	14,16,15,16,14,15,16,14,15,
+ };
+ 
+ static float _vq_quantthresh__44u1__p7_1[] = {
+ 	-71.5, -58.5, -45.5, -32.5, -19.5, -6.5, 6.5, 19.5, 
+ 	32.5, 45.5, 58.5, 71.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p7_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p7_1 = {
+ 	_vq_quantthresh__44u1__p7_1,
+ 	_vq_quantmap__44u1__p7_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u1__p7_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u1__p7_1,
+ 	1, -523010048, 1618608128, 4, 0,
+ 	_vq_quantlist__44u1__p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u1__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u1__p7_2[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u1__p7_2[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 5, 6, 6,
+ 	 6, 7, 8, 7, 8, 8, 8, 9, 9, 9, 5, 6, 6, 7, 7, 8,
+ 	 8, 8, 8, 8, 8, 8, 9, 6, 7, 7, 7, 7, 8, 8, 8, 9,
+ 	 9, 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 7, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9, 7, 8,
+ 	 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 9, 9, 9,
+ 	 8, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 8, 9,
+ 	 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44u1__p7_2[] = {
+ 	-5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 
+ 	2.5, 3.5, 4.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44u1__p7_2[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u1__p7_2 = {
+ 	_vq_quantthresh__44u1__p7_2,
+ 	_vq_quantmap__44u1__p7_2,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u1__p7_2 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u1__p7_2,
+ 	1, -531103744, 1611661312, 4, 0,
+ 	_vq_quantlist__44u1__p7_2,
+ 	NULL,
+ 	&_vq_auxt__44u1__p7_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u1__short[] = {
+ 	 7,12,12,14,16,13,12,15, 6, 9,10,13,11,11,12,12,
+ 	 4, 5, 5, 8, 5, 7, 9,12, 6, 7, 8,10, 8, 9,11,16,
+ 	 5, 5, 4, 7, 4, 5, 7,15, 6, 5, 5, 8, 5, 5, 6,15,
+ 	 8, 7, 4, 7, 3, 4, 5,16,15,11, 6, 8, 5, 6, 8,16,
+ };
+ 
+ static static_codebook _huff_book__44u1__short = {
+ 	2, 64,
+ 	_huff_lengthlist__44u1__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u2__long[] = {
+ 	 8,14,15,15,17,15,12,13,13, 3, 4, 7, 8, 7, 8,11,
+ 	20, 4, 3, 6, 5, 7, 9,16,15, 6, 5, 6, 6, 6, 8,15,
+ 	20, 7, 4, 6, 4, 5, 8,18,16, 7, 6, 6, 5, 5, 6,14,
+ 	11, 7, 8, 7, 7, 5, 4,10,10,13,15,16,19,10, 6,10,
+ };
+ 
+ static static_codebook _huff_book__44u2__long = {
+ 	2, 64,
+ 	_huff_lengthlist__44u2__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u2__p1_0[] = {
+ 	 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
+ 	10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
+ 	11, 8,11,11, 8,11,11,11,13,14,11,13,13, 8,11,11,
+ 	10,13,12,11,13,14, 4, 8, 8, 8,11,11, 8,11,11, 7,
+ 	11,11,11,14,13,10,12,13, 8,11,11,11,14,13,11,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u2__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p1_0 = {
+ 	_vq_quantthresh__44u2__p1_0,
+ 	_vq_quantmap__44u2__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u2__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u2__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u2__p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u2__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u2__p2_0[] = {
+ 	 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
+ 	 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
+ 	 7, 6, 7, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 8, 8,
+ 	 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 8, 6, 7, 8, 6,
+ 	 8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u2__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p2_0 = {
+ 	_vq_quantthresh__44u2__p2_0,
+ 	_vq_quantmap__44u2__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u2__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u2__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u2__p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u2__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u2__p3_0[] = {
+ 	 2, 4, 4, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
+ 	 9, 9,12,12, 8, 9,10,11,12, 5, 7, 7,10,10, 7, 9,
+ 	 9,11,10, 7, 8, 9,10,11,10,11,10,14,13, 9,10,10,
+ 	12,13, 5, 7, 7,10,10, 7, 9, 8,11,10, 7, 9, 9,11,
+ 	11, 9,10,10,13,12,10,10,11,13,13, 8,10,10,15,13,
+ 	10,11,11,15,13, 9,11,11,14,13,13,14,13,17,15,12,
+ 	13,13,15,15, 8,10,10,13,14, 9,11,11,13,14,10,11,
+ 	12,13,16,12,13,13,15,15,13,13,14,15,17, 5, 7, 7,
+ 	10,10, 7, 9, 9,11,11, 7, 9, 9,11,12,10,11,11,14,
+ 	14,10,11,12,14,14, 7, 9, 9,12,12, 9,11,11,13,12,
+ 	 9,11,11,13,13,12,13,12,14,14,11,12,12,15,14, 7,
+ 	 9, 9,12,11, 9,11,10,13,11, 9,11,11,12,13,11,12,
+ 	11,14,13,11,12,12,15,15,10,12,12,16,15,11,13,13,
+ 	16,16,10,12,12,16,16,14,14,14,17,16,13,14,14,17,
+ 	18, 9,11,11,14,15,10,12,11,15,15,10,12,12,15,17,
+ 	13,15,13,17,16,13,14,15,17,19, 5, 7, 7,10,10, 7,
+ 	 9, 9,12,11, 7, 9, 9,11,11,10,11,11,15,14,10,11,
+ 	12,13,14, 7, 9, 9,12,12, 9,11,11,13,12, 8,10,11,
+ 	12,12,11,12,12,15,15,11,11,12,14,14, 7, 9, 9,12,
+ 	12, 9,11,11,13,13, 9,11,11,12,12,11,12,12,16,15,
+ 	11,12,13,14,14, 9,11,11,16,15,10,12,12,16,15,10,
+ 	11,12,14,14,13,14,15,18,17,13,13,14,16,16,10,12,
+ 	12,15,15,10,13,12,15,17,11,13,12,15,16,13,15,14,
+ 	17,18,14,15,14,15,17, 8,10,10,15,15,10,12,12,17,
+ 	15,10,12,12,17,16,14,16,15,17,17,13,14,15,16,16,
+ 	 9,11,12,16,16,11,13,13,16,17,11,13,13,16,16,15,
+ 	16,16, 0, 0,14,15,15,19,17, 9,11,11,17,16,10,13,
+ 	11,16,16,11,12,12,16,17,15,16,15,19,19,14,16,15,
+ 	 0,18,12,14,15, 0, 0,14,15,16,18,18,13,14,15,17,
+ 	17,16,18,18, 0, 0,15,16,16,19,18,11,14,13, 0,18,
+ 	13,16,13,17,17,13,15,14, 0, 0,17,17,15,19,18,14,
+ 	16,16,19, 0, 8,10,10,15,15,10,12,11,16,16,10,11,
+ 	12,17,16,14,15,15,17,18,15,15,16, 0, 0, 9,11,11,
+ 	15,15,11,13,12,16,18,10,12,13,17,17,13,15,15,17,
+ 	19,15,15,16,19,18, 9,12,11, 0,16,11,13,12,16,16,
+ 	11,13,13,16,17,14,16,15,19,19,15,15,16,18,18,12,
+ 	14,14,17,18,13,14,15,18, 0,13,14,15,18,19,15,17,
+ 	16, 0,19,16,15,18,17,19,12,14,14,19,19,13,15,15,
+ 	 0,18,13,17,15,18,18,15,16,17, 0,19,17,19,18,18,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44u2__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p3_0 = {
+ 	_vq_quantthresh__44u2__p3_0,
+ 	_vq_quantmap__44u2__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u2__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u2__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u2__p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u2__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u2__p4_0[] = {
+ 	 4, 5, 5, 9, 9, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 9,
+ 	10, 9,12,11, 9, 9,10,11,12, 6, 7, 7,10,10, 7, 8,
+ 	 7,10,10, 7, 7, 8,10,10,10,10,10,12,12, 9,10,10,
+ 	11,12, 6, 7, 7,10,10, 7, 8, 7,10,10, 7, 7, 7,10,
+ 	10, 9,10,10,12,11,10,10,10,12,12, 9,10,10,13,12,
+ 	10,10,10,13,13,10,10,10,13,12,12,12,12,14,14,12,
+ 	12,12,14,14, 9,10,10,12,13, 9,10,10,13,13,10,10,
+ 	10,13,13,12,12,12,15,14,12,13,12,14,14, 5, 7, 7,
+ 	10,10, 7, 8, 7,10,10, 7, 7, 8,10,10,10,10,10,12,
+ 	12,10,10,10,12,12, 7, 8, 8,10,10, 8, 8, 8,10,11,
+ 	 8, 8, 8,11,10,10,10,11,11,13,10,10,11,12,13, 6,
+ 	 7, 7,10,10, 7, 8, 7,11,10, 8, 8, 8,10,11,10,11,
+ 	10,13,11,10,10,10,13,12,10,11,10,13,13,10,10,10,
+ 	12,13,10,11,11,13,13,12,11,13,11,14,12,13,13,14,
+ 	14, 9,10,10,12,13,10,10,10,13,12,10,10,11,13,13,
+ 	12,13,11,14,12,13,13,13,15,14, 5, 7, 7,10,10, 7,
+ 	 7, 7,10,10, 7, 7, 8,10,10,10,10,10,12,12,10,10,
+ 	10,12,13, 6, 7, 7,10,10, 8, 8, 8,11,10, 7, 7, 8,
+ 	10,11,10,10,10,12,12,10,10,11,11,13, 7, 8, 8,10,
+ 	10, 7, 8, 8,10,11, 8, 8, 8,11,10,10,11,10,13,12,
+ 	10,11,10,13,11, 9,10,10,13,13,10,11,11,13,13,10,
+ 	10,10,12,13,13,13,13,14,14,12,11,13,12,14,10,10,
+ 	11,13,13,10,11,11,13,13,10,10,10,13,12,12,13,13,
+ 	14,14,12,13,11,15,12, 9,10,10,13,13,10,10,10,13,
+ 	13,10,10,10,13,13,13,13,13,15,15,12,13,13,14,14,
+ 	 9,10,10,13,13,10,10,11,13,13,10,11,10,13,12,13,
+ 	12,13,14,15,13,13,13,15,14, 9,10,10,13,13,10,10,
+ 	10,13,12,10,10,11,12,13,13,13,12,15,14,13,13,13,
+ 	14,14,12,13,12,15,14,12,11,12,14,14,12,13,12,15,
+ 	14,14,12,15,12,16,14,14,15,16,16,12,12,12,14,15,
+ 	11,12,11,15,14,12,13,13,14,15,14,14,12,16,13,14,
+ 	14,15,16,16, 9,10,10,13,13,10,10,10,13,13,10,10,
+ 	10,13,13,12,13,12,14,14,13,13,13,15,15, 9,10,10,
+ 	13,13,10,11,10,13,12,10,10,10,12,13,13,13,13,14,
+ 	14,12,12,13,14,15, 9,10,10,13,13,10,10,11,12,13,
+ 	10,11,10,13,13,13,13,13,14,15,13,13,13,15,14,12,
+ 	12,12,15,14,12,13,12,15,14,11,11,12,14,15,14,14,
+ 	14,17,16,14,12,14,13,17,12,12,13,14,16,13,13,13,
+ 	13,15,12,12,11,14,14,14,15,14,16,16,14,14,12,16,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u2__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p4_0 = {
+ 	_vq_quantthresh__44u2__p4_0,
+ 	_vq_quantmap__44u2__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u2__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u2__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u2__p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u2__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u2__p5_0[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 9, 9, 4, 5, 4, 7, 7, 8, 7,
+ 	 9, 9, 4, 4, 4, 7, 7, 7, 8, 9, 9, 6, 7, 7, 8, 8,
+ 	 8, 9,10,10, 6, 7, 7, 8, 8, 9, 8,10,10, 7, 8, 7,
+ 	 8, 9, 9,10,11,11, 7, 7, 8, 9, 9,10,10,11,11, 9,
+ 	 9, 9,10,10,11,11,12,12, 9, 9, 9,10,10,11,11,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u2__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p5_0 = {
+ 	_vq_quantthresh__44u2__p5_0,
+ 	_vq_quantmap__44u2__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u2__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u2__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u2__p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u2__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u2__p6_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 9,10,11,11,14,14, 4, 6, 5,
+ 	 8, 8, 9, 9,11,11,11,11,14,14, 4, 5, 5, 8, 8, 9,
+ 	 9,10,11,11,12,14,14, 7, 8, 8, 9, 9,11,10,11,11,
+ 	12,12,15,15, 7, 8, 8, 9, 9,11,11,11,11,12,12,15,
+ 	14, 9,10,10,11,11,11,11,12,12,13,12,16,16, 9,10,
+ 	10,11,11,11,11,12,12,13,13,15,16,10,11,11,11,11,
+ 	12,12,13,13,13,13,17,16,10,11,11,12,12,12,12,12,
+ 	13,14,14,16,16,11,12,12,12,12,13,13,14,14,14,14,
+ 	17,17,11,12,12,12,12,13,13,14,14,15,14,18,17,15,
+ 	14,15,15,15,16,16,17,18,19,17,19, 0,15,15,15,15,
+ 	15,16,17,16,16,18,17, 0, 0,
+ };
+ 
+ static float _vq_quantthresh__44u2__p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p6_0 = {
+ 	_vq_quantthresh__44u2__p6_0,
+ 	_vq_quantmap__44u2__p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u2__p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u2__p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44u2__p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u2__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u2__p6_1[] = {
+ 	 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 5, 5,
+ 	 6, 6, 6, 6, 5, 5, 6, 6, 6,
+ };
+ 
+ static float _vq_quantthresh__44u2__p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p6_1 = {
+ 	_vq_quantthresh__44u2__p6_1,
+ 	_vq_quantmap__44u2__p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u2__p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44u2__p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u2__p6_1,
+ 	NULL,
+ 	&_vq_auxt__44u2__p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p7_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u2__p7_0[] = {
+ 	 1, 3, 3,10,10,10,10,10,10, 4,10,10,10,10,10,10,
+ 	10,10, 4,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u2__p7_0[] = {
+ 	-591.5, -422.5, -253.5, -84.5, 84.5, 253.5, 422.5, 591.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p7_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p7_0 = {
+ 	_vq_quantthresh__44u2__p7_0,
+ 	_vq_quantmap__44u2__p7_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u2__p7_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u2__p7_0,
+ 	1, -516612096, 1626677248, 4, 0,
+ 	_vq_quantlist__44u2__p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u2__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p7_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u2__p7_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 8, 7, 9, 9,10,10, 4, 7, 6,
+ 	 8, 8, 8, 8,10, 9,11,10,12,12, 4, 6, 7, 8, 8, 8,
+ 	 8,10,10,11,11,12,12, 7, 8, 8,10, 9,10,10,12,11,
+ 	13,12,13,13, 7, 8, 8, 9, 9,10,10,11,11,13,13,14,
+ 	15, 7, 8, 9,10,10,12,11,14,13,13,14,14,15, 7, 8,
+ 	 9,10,10,11,12,13,13,15,14,14,15, 8,10,10,12,11,
+ 	13,13,15,15,15,17,15,15, 8,10,10,11,12,14,13,14,
+ 	15,17,15,15,15,10,11,11,14,13,14,14,15,15,17,17,
+ 	16,17,10,11,12,13,13,14,14,14,15,16,15,15,17,11,
+ 	12,13,14,13,16,16,16,14,17,16,17,17,11,12,13,15,
+ 	15,15,15,16,15,15,15,15,17,
+ };
+ 
+ static float _vq_quantthresh__44u2__p7_1[] = {
+ 	-71.5, -58.5, -45.5, -32.5, -19.5, -6.5, 6.5, 19.5, 
+ 	32.5, 45.5, 58.5, 71.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p7_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p7_1 = {
+ 	_vq_quantthresh__44u2__p7_1,
+ 	_vq_quantmap__44u2__p7_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u2__p7_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u2__p7_1,
+ 	1, -523010048, 1618608128, 4, 0,
+ 	_vq_quantlist__44u2__p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u2__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u2__p7_2[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u2__p7_2[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 5, 6, 6,
+ 	 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 5, 6, 6, 7, 7, 8,
+ 	 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 9, 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 7, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 7, 8,
+ 	 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44u2__p7_2[] = {
+ 	-5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 
+ 	2.5, 3.5, 4.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44u2__p7_2[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u2__p7_2 = {
+ 	_vq_quantthresh__44u2__p7_2,
+ 	_vq_quantmap__44u2__p7_2,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u2__p7_2 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u2__p7_2,
+ 	1, -531103744, 1611661312, 4, 0,
+ 	_vq_quantlist__44u2__p7_2,
+ 	NULL,
+ 	&_vq_auxt__44u2__p7_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u2__short[] = {
+ 	16,15,15,16,14,16,16,16,16, 9, 8,11,10,10,10,15,
+ 	16, 6, 3, 7, 5, 7, 9,16,16,11, 7,11, 9,10,12,16,
+ 	16, 9, 4, 8, 3, 5, 8,16,16,11, 6, 9, 4, 4, 7,16,
+ 	16,11, 5, 9, 3, 3, 5,12,16,15, 6,11, 5, 5, 6,14,
+ };
+ 
+ static static_codebook _huff_book__44u2__short = {
+ 	2, 64,
+ 	_huff_lengthlist__44u2__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u3__long[] = {
+ 	 7,11,14,13,14,12,12,12,12, 2, 5, 8, 9, 8, 9,11,
+ 	17, 4, 3, 6, 5, 7, 9,15,14, 6, 6, 7, 7, 7, 8,14,
+ 	17, 8, 5, 7, 4, 5, 7,15,13, 7, 6, 7, 5, 5, 6,14,
+ 	10, 8, 8, 7, 7, 5, 4, 9,10,12,15,14,16,10, 6, 9,
+ };
+ 
+ static static_codebook _huff_book__44u3__long = {
+ 	2, 64,
+ 	_huff_lengthlist__44u3__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u3__p1_0[] = {
+ 	 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
+ 	10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
+ 	11, 8,11,11, 8,11,11,11,13,14,11,13,14, 7,11,11,
+ 	10,13,11,11,13,14, 4, 8, 8, 8,11,11, 8,11,11, 8,
+ 	11,11,11,14,14,10,12,14, 8,11,11,11,14,13,11,14,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u3__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p1_0 = {
+ 	_vq_quantthresh__44u3__p1_0,
+ 	_vq_quantmap__44u3__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u3__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u3__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u3__p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u3__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u3__p2_0[] = {
+ 	 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
+ 	 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
+ 	 7, 6, 8, 8, 6, 8, 8, 8, 8, 9, 8, 9, 9, 6, 8, 7,
+ 	 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 8, 6, 8, 8, 6,
+ 	 8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44u3__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p2_0 = {
+ 	_vq_quantthresh__44u3__p2_0,
+ 	_vq_quantmap__44u3__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u3__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u3__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u3__p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u3__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u3__p3_0[] = {
+ 	 2, 4, 4, 8, 8, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
+ 	10, 9,12,12, 8, 9,10,12,12, 5, 7, 7,10,10, 7, 9,
+ 	 9,11,11, 7, 8, 9,10,11,10,11,10,14,13, 9,10,11,
+ 	13,13, 5, 7, 7,10,10, 7, 9, 8,11,10, 7, 9, 9,11,
+ 	11, 9,10,10,13,12,10,10,11,13,14, 8,10,10,14,13,
+ 	10,11,11,15,13, 9,11,11,14,13,13,14,13,17,15,12,
+ 	13,13,17,14, 8,10,10,14,14, 9,11,11,14,15,10,11,
+ 	12,14,16,12,13,13,14,17,13,13,14,14,17, 5, 7, 7,
+ 	10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,11,11,15,
+ 	14,10,11,11,15,14, 7, 9, 9,12,12, 9,11,11,13,13,
+ 	 9,11,11,13,13,11,12,12,15,14,11,12,12,15,16, 7,
+ 	 9, 9,12,11, 8,11,10,13,12, 9,11,11,12,13,11,12,
+ 	11,16,14,11,12,13,15,16,10,12,12,17,15,11,12,13,
+ 	16,15,11,12,12,16,16,15,15,15,16,16,13,14,15, 0,
+ 	17, 9,11,11,15,15,10,12,11,16,15,11,12,12,15,17,
+ 	13,15,13,16,15,13,15,14, 0,18, 5, 7, 7,10,10, 7,
+ 	 9, 9,12,11, 7, 9, 9,11,11,10,11,11,14,14,10,11,
+ 	11,14,15, 7, 9, 9,12,11, 9,11,11,13,12, 8,10,11,
+ 	11,12,11,12,12,16,15,11,11,12,13,14, 7, 9, 9,12,
+ 	12, 9,11,11,13,13, 9,11,11,13,13,11,12,12,16,15,
+ 	12,12,12,15,15, 9,11,11,17,15,11,12,12,17,16,10,
+ 	11,12,15,15,13,14,15,18,17,13,13,14,15,15, 9,12,
+ 	12,15,14,11,13,12,16,16,11,12,12,15,15,13,15,14,
+ 	 0, 0,14,15,14,16,18, 8,10,10,15,15,10,12,12,16,
+ 	14,10,11,11,16,16,15,16,16,18,16,13,15,14,17,18,
+ 	 9,11,11,16,15,11,12,13,17,17,11,13,13,16,15,15,
+ 	16,16,18,18,14,16,15,18,17, 9,11,11,16,16,10,13,
+ 	12,16,16,11,12,12,16,16,14,16,16,17, 0,14,15,15,
+ 	18,16,12,14,14, 0, 0,14,15,16, 0, 0,14,15,15, 0,
+ 	 0,17,17,16, 0, 0,15,16,18,17, 0,11,14,14,18, 0,
+ 	12,15,13, 0,18,13,15,14,18, 0,15,16,15, 0,18,15,
+ 	18,17, 0,18, 8,10,10,15,15,10,12,11,15,15,10,11,
+ 	12,15,15,13,14,15,17, 0,14,15,16,17, 0, 9,11,11,
+ 	15,15,11,12,12,17,15,10,12,13,16,15,13,15,15,18,
+ 	18,15,16,17,18,18, 9,12,11,16,16,11,13,13,16,16,
+ 	11,13,13,18,15,14,15,15,18, 0,16,16,17, 0,17,12,
+ 	13,13,18,18,13,14,14,17,18,13,14,15,18,17,17,18,
+ 	18, 0,18,16,16,18,16, 0,12,15,13,18,18,13,14,15,
+ 	18,18,13,16,14,17,18,15,17,16, 0,18,17, 0,17, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44u3__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p3_0 = {
+ 	_vq_quantthresh__44u3__p3_0,
+ 	_vq_quantmap__44u3__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u3__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u3__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u3__p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u3__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u3__p4_0[] = {
+ 	 4, 6, 6, 9, 9, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 9,
+ 	10, 9,12,11, 9, 9,10,11,12, 6, 7, 7, 9, 9, 7, 7,
+ 	 7,10,10, 6, 7, 7, 9,10,10,10,10,12,12, 9, 9,10,
+ 	11,12, 6, 7, 7, 9, 9, 7, 7, 7,10, 9, 7, 7, 7,10,
+ 	10, 9,10, 9,12,11,10,10,10,12,12, 9,10,10,12,12,
+ 	10,10,10,13,12, 9,10,10,12,12,12,12,12,14,14,12,
+ 	12,12,13,14, 9,10,10,12,12, 9,10,10,12,12,10,10,
+ 	10,12,13,11,12,12,14,13,12,12,12,14,14, 6, 7, 7,
+ 	10, 9, 7, 8, 7,10,10, 7, 7, 7,10,10,10,10,10,12,
+ 	12,10,10,10,12,12, 7, 8, 8,10,10, 8, 8, 8,10,10,
+ 	 7, 8, 8,10,10,10,10,11,11,13,10,10,11,12,13, 6,
+ 	 7, 7,10,10, 7, 8, 7,10,10, 8, 8, 8,10,10,10,11,
+ 	10,13,11,10,10,10,12,12,10,10,10,13,12,10,10,10,
+ 	12,13,10,10,10,13,12,12,11,13,12,14,12,12,13,14,
+ 	14, 9,10,10,12,13, 9,10,10,12,12,10,10,11,12,13,
+ 	12,12,11,14,12,12,12,13,14,14, 6, 7, 7, 9, 9, 7,
+ 	 7, 7,10,10, 7, 7, 8,10,10,10,10,10,12,12,10,10,
+ 	10,12,12, 6, 7, 7,10,10, 8, 8, 8,10,10, 7, 7, 8,
+ 	10,10,10,10,10,12,12,10,10,11,11,13, 7, 8, 8,10,
+ 	10, 7, 8, 8,10,10, 8, 8, 8,10,10,10,10,10,12,12,
+ 	10,11,10,13,11, 9,10,10,13,12,10,11,10,13,12, 9,
+ 	10,10,12,13,12,13,12,14,14,12,11,12,12,14,10,10,
+ 	10,12,13,10,10,11,12,13,10,10,10,12,12,12,13,12,
+ 	14,14,12,12,11,14,12, 9,10, 9,12,12,10,10,10,13,
+ 	13, 9,10,10,13,13,12,13,13,15,14,12,12,13,14,14,
+ 	 9,10,10,13,13,10,10,10,12,13,10,10,10,13,12,13,
+ 	12,13,14,15,12,13,13,15,14, 9,10,10,13,12,10,10,
+ 	10,13,12,10,10,10,12,13,12,13,12,14,14,13,12,12,
+ 	14,14,12,12,12,15,14,12,11,12,14,14,12,13,12,14,
+ 	14,14,12,14,12,16,14,14,14,16,16,11,12,12,14,14,
+ 	11,12,11,15,13,12,12,12,14,15,13,14,12,16,13,14,
+ 	14,15,16,16, 9,10,10,12,12, 9,10,10,13,12, 9,10,
+ 	10,13,13,12,12,12,14,14,12,13,13,14,15, 9,10,10,
+ 	13,12,10,11,10,13,12,10,10,10,12,13,12,13,12,14,
+ 	14,12,12,13,14,15, 9,10,10,13,13,10,10,10,12,13,
+ 	10,10,10,13,13,12,13,13,14,15,13,13,12,14,14,11,
+ 	12,12,14,14,12,13,12,15,14,11,11,12,14,15,14,14,
+ 	14,16,16,14,12,14,13,16,12,12,12,14,15,12,12,13,
+ 	14,15,12,12,11,14,14,14,14,14,16,16,14,14,12,16,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u3__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p4_0 = {
+ 	_vq_quantthresh__44u3__p4_0,
+ 	_vq_quantmap__44u3__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u3__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u3__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u3__p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u3__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u3__p5_0[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 9, 9, 4, 5, 4, 7, 6, 8, 8,
+ 	 9, 9, 4, 4, 4, 6, 7, 8, 8, 9, 9, 6, 7, 6, 8, 8,
+ 	 9, 9,10,10, 6, 6, 7, 8, 8, 9, 9,10,10, 8, 8, 8,
+ 	 9, 9,10,10,11,11, 8, 8, 8, 9, 9,10,10,11,11, 9,
+ 	 9, 9,10,10,11,11,12,12, 9, 9,10,10,10,11,11,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u3__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p5_0 = {
+ 	_vq_quantthresh__44u3__p5_0,
+ 	_vq_quantmap__44u3__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u3__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u3__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u3__p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u3__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u3__p6_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 9,10,10,11,13,14, 4, 6, 5,
+ 	 8, 8, 9, 9,10,10,11,11,14,14, 4, 5, 6, 8, 8, 9,
+ 	 9,10,10,11,11,14,14, 7, 8, 8, 9, 9,10,10,11,11,
+ 	12,12,15,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,14,
+ 	15, 8, 9, 9,10,10,11,11,12,12,13,12,16,16, 8, 9,
+ 	 9,10,10,11,11,12,12,12,12,16,16,10,11,10,11,11,
+ 	12,12,13,13,13,13,17,16,10,11,11,11,11,12,12,12,
+ 	12,13,13,17,17,11,11,12,12,12,13,13,13,14,14,14,
+ 	16,17,11,12,11,12,12,13,13,14,14,14,14,19,17,14,
+ 	14,14,16,15,16,16,16,17,17,17,20,19,14,15,15,15,
+ 	15,15,16,16,17,17,17,20,19,
+ };
+ 
+ static float _vq_quantthresh__44u3__p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p6_0 = {
+ 	_vq_quantthresh__44u3__p6_0,
+ 	_vq_quantmap__44u3__p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u3__p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u3__p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44u3__p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u3__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u3__p6_1[] = {
+ 	 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
+ 	 6, 5, 6, 6, 5, 5, 6, 6, 6,
+ };
+ 
+ static float _vq_quantthresh__44u3__p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p6_1 = {
+ 	_vq_quantthresh__44u3__p6_1,
+ 	_vq_quantmap__44u3__p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u3__p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44u3__p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u3__p6_1,
+ 	NULL,
+ 	&_vq_auxt__44u3__p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p7_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u3__p7_0[] = {
+ 	 1, 4, 4, 9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44u3__p7_0[] = {
+ 	-892.5, -637.5, -382.5, -127.5, 127.5, 382.5, 637.5, 892.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p7_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p7_0 = {
+ 	_vq_quantthresh__44u3__p7_0,
+ 	_vq_quantmap__44u3__p7_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u3__p7_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u3__p7_0,
+ 	1, -515907584, 1627381760, 4, 0,
+ 	_vq_quantlist__44u3__p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u3__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p7_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44u3__p7_1[] = {
+ 	 1, 4, 4, 6, 5, 7, 7, 9, 8,10,10,11,11,12,13, 4,
+ 	 7, 6, 7, 7, 9, 9,10,10,11,11,14,13,14,13, 4, 6,
+ 	 7, 7, 8, 9, 9,10,10,12,12,13,13,13,13, 6, 8, 8,
+ 	10, 9,11,11,12,12,13,13,14,14,15,14, 6, 8, 8, 9,
+ 	 9,11,11,12,12,14,14,14,15,15,15, 8, 9, 9,11,10,
+ 	13,12,14,14,14,14,15,16,15,15, 8, 9, 9,11,11,12,
+ 	12,14,14,15,14,15,15,14,17, 9,10,10,13,12,14,14,
+ 	15,14,14,17,15,15,16,15, 9,11,11,12,13,14,14,15,
+ 	15,15,16,15,17,16,17,11,12,12,14,14,15,14,16,16,
+ 	16,15,15,17,16,16,11,12,13,14,15,15,15,15,15,16,
+ 	16,17,17,16,17,12,13,13,15,14,15,15,15,15,16,16,
+ 	16,17,17,17,13,12,14,14,15,15,15,15,16,17,17,15,
+ 	17,17,17,12,14,14,16,15,17,16,17,16,17,16,17,17,
+ 	17,17,14,13,14,15,16,17,17,17,15,17,17,17,16,17,
+ 	16,
+ };
+ 
+ static float _vq_quantthresh__44u3__p7_1[] = {
+ 	-110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 
+ 	25.5, 42.5, 59.5, 76.5, 93.5, 110.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p7_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p7_1 = {
+ 	_vq_quantthresh__44u3__p7_1,
+ 	_vq_quantmap__44u3__p7_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44u3__p7_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__44u3__p7_1,
+ 	1, -522338304, 1620115456, 4, 0,
+ 	_vq_quantlist__44u3__p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u3__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u3__p7_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44u3__p7_2[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 5, 6, 6, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9,10, 9, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,10, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9,
+ 	 9, 9,10, 9,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
+ 	 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9,
+ 	 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
+ 	 9,10,10, 9,10, 9,10,10,10,10,10,10,10,10,10,10,
+ 	 9,10, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44u3__p7_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44u3__p7_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u3__p7_2 = {
+ 	_vq_quantthresh__44u3__p7_2,
+ 	_vq_quantmap__44u3__p7_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44u3__p7_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44u3__p7_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44u3__p7_2,
+ 	NULL,
+ 	&_vq_auxt__44u3__p7_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u3__short[] = {
+ 	17,17,17,17,17,17,16,16,16,12,11,13,11,12,11,15,
+ 	16, 9, 4, 8, 5, 7, 9,15,16,14, 9,12,10,10,12,16,
+ 	16,11, 4, 9, 3, 4, 8,16,16,12, 6,10, 3, 4, 7,16,
+ 	16,12, 6,11, 3, 3, 4,12,16,16, 7,13, 5, 5, 6,13,
+ };
+ 
+ static static_codebook _huff_book__44u3__short = {
+ 	2, 64,
+ 	_huff_lengthlist__44u3__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u4__long[] = {
+ 	 3, 7,11,11,12,11,11,12, 5, 3, 5, 7, 8, 8, 9,11,
+ 	 9, 4, 4, 6, 6, 7, 9,15,10, 6, 6, 7, 7, 7, 8,14,
+ 	12, 7, 5, 6, 4, 5, 7,15,10, 7, 6, 7, 5, 5, 6,13,
+ 	 9, 8, 8, 7, 7, 5, 4, 8,10,12,14,13,14,10, 5, 7,
+ };
+ 
+ static static_codebook _huff_book__44u4__long = {
+ 	2, 64,
+ 	_huff_lengthlist__44u4__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u4__p1_0[] = {
+ 	 1, 4, 4, 5, 8, 7, 5, 7, 8, 5, 8, 8, 8,11,11, 8,
+ 	10,11, 5, 8, 8, 8,11,10, 8,11,11, 4, 8, 8, 8,11,
+ 	11, 8,11,11, 8,11,11,11,13,14,11,14,14, 7,11,10,
+ 	10,14,12,11,14,14, 4, 8, 8, 8,11,11, 8,11,11, 8,
+ 	11,11,11,14,14,10,12,14, 8,11,11,11,14,14,11,14,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u4__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p1_0 = {
+ 	_vq_quantthresh__44u4__p1_0,
+ 	_vq_quantmap__44u4__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u4__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u4__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u4__p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u4__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u4__p2_0[] = {
+ 	 2, 5, 5, 5, 6, 6, 5, 6, 6, 5, 6, 6, 7, 8, 8, 6,
+ 	 7, 8, 5, 6, 6, 6, 8, 7, 7, 8, 8, 5, 6, 6, 7, 8,
+ 	 8, 6, 8, 8, 7, 8, 8, 8, 9,10, 8,10,10, 6, 8, 8,
+ 	 7, 9, 8, 8, 9,10, 5, 6, 6, 6, 8, 8, 7, 8, 8, 6,
+ 	 8, 8, 8,10, 9, 8, 8, 9, 6, 8, 8, 8,10,10, 8,10,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u4__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p2_0 = {
+ 	_vq_quantthresh__44u4__p2_0,
+ 	_vq_quantmap__44u4__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u4__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u4__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u4__p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u4__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u4__p3_0[] = {
+ 	 2, 4, 4, 7, 7, 5, 7, 7, 9, 9, 5, 7, 7, 9, 9, 8,
+ 	10, 9,12,12, 8, 9, 9,12,12, 5, 7, 7,10, 9, 7, 9,
+ 	 9,11,11, 7, 8, 9,10,11,10,11,11,13,13, 9,10,11,
+ 	13,13, 5, 7, 7, 9,10, 7, 9, 9,11,11, 7, 9, 9,11,
+ 	11, 9,11,10,13,12,10,11,11,13,13, 8,10,10,13,13,
+ 	10,11,11,15,13, 9,11,11,14,13,13,15,13,16,15,12,
+ 	13,13,15,15, 8,10,10,13,14, 9,11,11,14,14,10,11,
+ 	12,14,16,12,13,13,14,16,13,14,14,15,17, 5, 7, 7,
+ 	10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,11,11,15,
+ 	14,10,11,11,14,14, 7, 9, 9,12,12, 9,11,11,13,13,
+ 	 9,11,11,13,13,11,12,13,15,15,11,13,13,16,15, 7,
+ 	 9, 9,11,11, 9,11,10,13,12, 9,11,12,13,13,11,13,
+ 	12,16,14,11,13,13,15,16,10,12,12,18,15,11,12,13,
+ 	16,15,11,13,13,17,16,15,15,15,17,17,14,15,16,18,
+ 	19, 9,11,11,15,15,10,12,11,15,16,11,13,13,15,16,
+ 	13,15,13,18,15,14,15,15,17,19, 5, 7, 7,10,10, 7,
+ 	 9, 9,12,11, 7, 9, 9,11,12,10,12,11,14,14,10,11,
+ 	12,14,15, 7, 9, 9,11,11, 9,11,11,13,12, 9,10,11,
+ 	12,13,11,13,13,16,17,11,11,13,14,15, 7, 9, 9,12,
+ 	12, 9,11,11,13,13, 9,11,11,13,13,11,13,12,15,16,
+ 	11,13,13,16,15, 9,11,11,16,15,11,13,12,16,15,10,
+ 	12,12,16,15,14,15,16,19,17,13,14,15,15,16,10,11,
+ 	12,15,15,11,13,13,16,16,11,13,12,16,17,14,15,15,
+ 	18,17,14,16,14,16,19, 7,10,10,15,14,10,12,12,16,
+ 	15,10,11,11,16,15,14,16,16,19,18,13,15,14,17,17,
+ 	 9,11,11,17,16,11,13,14,18,17,11,13,13,16,16,15,
+ 	16,17,19, 0,14,15,18,16,19, 9,11,11,16,15,11,13,
+ 	12,18,16,11,13,13,17,16,14,16,16,17,19,15,16,15,
+ 	18, 0,12,14,15,18,19,13,15,16,19,17,14,16,15,18,
+ 	 0,17,16,19, 0,18,16,17,18, 0, 0,11,13,14,18,19,
+ 	13,15,13,19,19,14,15,15,17,17,15,17,15,19,17,16,
+ 	18,18,19, 0, 8,10,10,14,14,10,12,11,15,15,10,11,
+ 	12,15,17,13,15,15,17,16,14,15,15,18, 0, 9,11,11,
+ 	15,15,11,13,13,18,16,10,12,13,16,17,14,15,16,17,
+ 	18,14,15,17,19,19, 9,12,12,15,16,11,13,13,16,17,
+ 	11,14,13,19,16,14,16,15,18,19,15,16,18,19,18,12,
+ 	14,14,19,18,13,15,17,18,17,13,14,15,18, 0,16, 0,
+ 	 0,18,18,16,15, 0,17,19,12,15,14,17, 0,13,15,16,
+ 	19,18,13,16,15, 0,19,16,18,16,19,18,17,19,16, 0,
+ 	19,
+ };
+ 
+ static float _vq_quantthresh__44u4__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p3_0 = {
+ 	_vq_quantthresh__44u4__p3_0,
+ 	_vq_quantmap__44u4__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u4__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u4__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u4__p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u4__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u4__p4_0[] = {
+ 	 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 9,
+ 	 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
+ 	 8,10,10, 6, 7, 8, 9,10, 9,10,10,11,12, 9, 9,10,
+ 	11,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 8,10,
+ 	10, 9,10, 9,12,11, 9,10,10,12,11, 9, 9, 9,12,11,
+ 	 9,10,10,12,12, 9,10,10,12,12,11,12,12,13,14,11,
+ 	11,12,13,14, 9, 9, 9,11,12, 9,10,10,12,12, 9,10,
+ 	10,12,12,11,12,11,14,13,11,12,12,13,13, 5, 7, 7,
+ 	 9, 9, 7, 8, 8,10,10, 7, 7, 8,10,10, 9,10,10,12,
+ 	12, 9,10,10,12,12, 7, 8, 8,10,10, 8, 8, 9,10,11,
+ 	 8, 9, 9,11,11,10,10,11,11,13,10,10,11,12,13, 6,
+ 	 7, 8,10,10, 7, 9, 8,11,10, 8, 8, 9,10,11,10,11,
+ 	10,13,11,10,11,11,13,12, 9,10,10,12,12,10,10,11,
+ 	12,13,10,11,11,13,13,12,11,13,12,15,12,13,13,14,
+ 	14, 9,10,10,12,12, 9,11,10,13,12,10,11,11,13,13,
+ 	11,13,11,14,12,12,13,13,14,15, 5, 7, 7, 9, 9, 7,
+ 	 8, 7,10,10, 7, 8, 8,10,10, 9,10,10,12,12, 9,10,
+ 	10,12,12, 6, 8, 7,10,10, 8, 9, 8,11,10, 7, 8, 9,
+ 	10,11,10,11,11,12,13,10,10,11,11,13, 7, 8, 8,10,
+ 	10, 8, 9, 9,10,11, 8, 9, 8,11,10,10,11,11,13,12,
+ 	10,11,10,13,11, 9,10,10,13,12,10,11,11,13,13, 9,
+ 	10,10,12,13,12,13,13,15,14,11,11,13,12,14, 9,10,
+ 	10,12,12,10,11,11,13,13,10,11,10,13,12,12,13,13,
+ 	14,14,12,13,11,15,12, 8, 9, 9,12,12, 9,10,10,13,
+ 	12, 9,10,10,12,12,12,13,12,14,14,11,12,12,14,13,
+ 	 9,10,10,12,12,10,10,11,13,13,10,11,11,13,12,12,
+ 	13,13,14,15,12,13,13,15,14, 9,10,10,12,12, 9,11,
+ 	10,13,12,10,10,11,12,13,12,13,12,15,14,12,13,13,
+ 	14,14,11,12,12,14,13,11,11,12,13,14,12,13,13,15,
+ 	14,13,12,14,12,16,14,15,14,16,16,11,12,12,14,14,
+ 	11,12,11,15,13,12,13,13,14,15,13,14,12,16,13,14,
+ 	14,15,16,16, 8, 9, 9,12,12, 9,10,10,12,12, 9,10,
+ 	10,12,13,11,12,12,14,13,12,12,13,14,14, 9,10,10,
+ 	12,12,10,11,11,13,12,10,10,11,12,13,12,13,13,14,
+ 	14,12,12,13,14,15, 9,10,10,12,13,10,11,11,12,13,
+ 	10,11,10,13,13,12,13,13,14,15,12,13,13,15,14,11,
+ 	12,12,14,14,12,13,13,15,14,11,11,12,14,15,14,14,
+ 	14,17,16,13,12,14,13,16,11,12,12,13,15,12,13,13,
+ 	14,15,11,12,11,14,14,14,15,14,15,17,13,14,12,16,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u4__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p4_0 = {
+ 	_vq_quantthresh__44u4__p4_0,
+ 	_vq_quantmap__44u4__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u4__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u4__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u4__p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u4__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u4__p5_0[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 9, 9, 4, 5, 4, 7, 6, 8, 7,
+ 	10, 9, 4, 4, 5, 6, 7, 7, 8, 9, 9, 6, 7, 6, 8, 8,
+ 	 8, 8,10,10, 6, 6, 7, 8, 8, 8, 9,10,10, 7, 8, 7,
+ 	 9, 8,10,10,11,11, 7, 7, 8, 8, 9,10,10,11,11, 9,
+ 	10, 9,10,10,11,11,12,12, 9, 9,10,10,10,11,11,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u4__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p5_0 = {
+ 	_vq_quantthresh__44u4__p5_0,
+ 	_vq_quantmap__44u4__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u4__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u4__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u4__p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u4__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u4__p6_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 9,10,10,11,13,13, 4, 6, 5,
+ 	 8, 8, 9, 9,10,10,11,11,14,14, 4, 5, 6, 8, 8, 9,
+ 	 9,10,10,11,11,14,14, 7, 8, 8, 9, 9,10,10,11,11,
+ 	12,12,15,15, 7, 8, 8, 9, 9,10,10,11,11,12,12,15,
+ 	15, 8, 9, 9,10,10,11,11,12,12,13,13,16,16, 8, 9,
+ 	 9,10,10,11,11,12,12,13,13,16,16,10,10,10,11,11,
+ 	12,12,13,13,14,13,16,16,10,10,11,11,12,12,12,13,
+ 	13,13,14,16,17,11,12,11,12,12,13,13,13,14,14,14,
+ 	17,16,11,11,12,12,12,13,13,14,14,15,14,17,17,14,
+ 	14,14,15,15,16,16,17,17,17,19,19, 0,14,15,15,15,
+ 	15,16,16,16,17,17,19,20,20,
+ };
+ 
+ static float _vq_quantthresh__44u4__p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p6_0 = {
+ 	_vq_quantthresh__44u4__p6_0,
+ 	_vq_quantmap__44u4__p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u4__p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u4__p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44u4__p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u4__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u4__p6_1[] = {
+ 	 2, 4, 4, 5, 5, 4, 5, 5, 6, 5, 4, 5, 5, 5, 6, 5,
+ 	 6, 5, 6, 6, 5, 5, 6, 6, 6,
+ };
+ 
+ static float _vq_quantthresh__44u4__p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p6_1 = {
+ 	_vq_quantthresh__44u4__p6_1,
+ 	_vq_quantmap__44u4__p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u4__p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44u4__p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u4__p6_1,
+ 	NULL,
+ 	&_vq_auxt__44u4__p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u4__p7_0[] = {
+ 	 1, 3, 3,11,11,11,11,11,11,11,11,11,11, 4,10, 9,
+ 	11,11,11,11,11,11,11,11,11,11, 4,10,10,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44u4__p7_0[] = {
+ 	-1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 382.5, 
+ 	637.5, 892.5, 1147.5, 1402.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p7_0 = {
+ 	_vq_quantthresh__44u4__p7_0,
+ 	_vq_quantmap__44u4__p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u4__p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u4__p7_0,
+ 	1, -514332672, 1627381760, 4, 0,
+ 	_vq_quantlist__44u4__p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u4__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p7_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44u4__p7_1[] = {
+ 	 1, 4, 4, 6, 6, 7, 7, 9, 8,10,10,11,11,12,12, 4,
+ 	 7, 6, 8, 7, 9, 9,10,10,11,10,12,11,12,12, 4, 6,
+ 	 6, 7, 8, 9, 9,10,10,11,11,12,12,13,13, 6, 8, 8,
+ 	10, 9,11,10,11,11,12,12,14,13,13,13, 6, 8, 8, 9,
+ 	 9,11,11,12,12,12,12,13,14,13,14, 8, 9, 9,11,10,
+ 	12,12,13,12,13,14,14,14,14,14, 8, 9, 9,10,11,12,
+ 	11,12,13,13,14,14,13,14,14, 9,10,10,12,12,14,13,
+ 	14,14,15,15,16,15,15,15, 9,10,10,11,12,13,13,13,
+ 	14,15,15,18,16,17,15,10,12,12,13,13,15,14,15,14,
+ 	16,16,16,15,16,15,10,11,11,13,13,14,14,17,16,15,
+ 	16,18,16,15,16,11,12,13,14,13,15,14,15,16,17,15,
+ 	16,16,15,16,11,12,13,14,15,14,16,15,15,16,15,15,
+ 	17,17,17,12,13,13,14,14,14,15,16,14,15,15,16,16,
+ 	16,16,12,13,13,13,14,15,15,15,14,16,16,16,16,16,
+ 	17,
+ };
+ 
+ static float _vq_quantthresh__44u4__p7_1[] = {
+ 	-110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 
+ 	25.5, 42.5, 59.5, 76.5, 93.5, 110.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p7_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p7_1 = {
+ 	_vq_quantthresh__44u4__p7_1,
+ 	_vq_quantmap__44u4__p7_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44u4__p7_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__44u4__p7_1,
+ 	1, -522338304, 1620115456, 4, 0,
+ 	_vq_quantlist__44u4__p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u4__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u4__p7_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44u4__p7_2[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 5, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10,10,10,10, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10,10,10,10,10,10, 9, 9, 9, 9, 9,
+ 	 9, 9,10, 9, 9,10,10,10,10,10,10,10, 9, 9, 9, 9,
+ 	 9, 9,10, 9,10,10,10,10,10,10,10,10,10, 9, 9, 9,
+ 	 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9,
+ 	 9, 9, 9,10, 9,10,10,10,10,10,10,10,10,10,10, 9,
+ 	 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	 9, 9, 9,10, 9,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44u4__p7_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44u4__p7_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u4__p7_2 = {
+ 	_vq_quantthresh__44u4__p7_2,
+ 	_vq_quantmap__44u4__p7_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44u4__p7_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44u4__p7_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44u4__p7_2,
+ 	NULL,
+ 	&_vq_auxt__44u4__p7_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u4__short[] = {
+ 	 3, 9,14,12,17,13,13,13, 4, 7, 8, 9,12,10,11,12,
+ 	 6, 5, 4, 7, 6, 7, 9,14, 8, 8, 7, 9, 8, 9,10,13,
+ 	 9, 8, 5, 7, 3, 5, 8,15, 9, 9, 6, 8, 4, 5, 7,16,
+ 	11,10, 6, 9, 4, 3, 6,15,17,16, 8,11, 5, 5, 7,16,
+ };
+ 
+ static static_codebook _huff_book__44u4__short = {
+ 	2, 64,
+ 	_huff_lengthlist__44u4__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u5__long[] = {
+ 	 3, 8,13,12,14,13,16,11,12,13, 5, 4, 5, 6, 8, 9,
+ 	10, 9,12,12,10, 5, 4, 6, 6, 8, 9,10,14,16,10, 6,
+ 	 6, 6, 6, 7, 9, 8,12,13,13, 7, 5, 6, 4, 6, 6, 7,
+ 	11,16,10, 7, 7, 7, 6, 6, 7, 7,11,14,14, 9, 8, 8,
+ 	 5, 6, 6, 7,11,16, 9, 8, 8, 8, 6, 6, 6, 4, 7,12,
+ 	11,10,12,11,10, 9,10, 5, 6,10,10,13,15,15,15,15,
+ 	14, 8, 7, 9,
+ };
+ 
+ static static_codebook _huff_book__44u5__long = {
+ 	2, 100,
+ 	_huff_lengthlist__44u5__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u5__p1_0[] = {
+ 	 1, 4, 4, 5, 8, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
+ 	 9,10, 5, 8, 8, 7,10, 9, 8,10,10, 4, 8, 8, 8,11,
+ 	10, 8,10,10, 8,11,11,10,12,13,10,13,13, 7,10,10,
+ 	 9,13,11,10,13,13, 5, 8, 8, 8,10,10, 8,10,10, 7,
+ 	10,10,10,13,13,10,11,13, 8,10,11,10,13,13,10,13,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u5__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p1_0 = {
+ 	_vq_quantthresh__44u5__p1_0,
+ 	_vq_quantmap__44u5__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u5__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u5__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u5__p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u5__p2_0[] = {
+ 	 3, 4, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 8, 8, 6,
+ 	 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 8, 5, 6, 6, 6, 8,
+ 	 7, 6, 8, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 7, 8,
+ 	 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 8, 8, 6,
+ 	 8, 8, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u5__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p2_0 = {
+ 	_vq_quantthresh__44u5__p2_0,
+ 	_vq_quantmap__44u5__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u5__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u5__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u5__p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u5__p3_0[] = {
+ 	 2, 4, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
+ 	10, 9,12,12, 8, 9,10,12,13, 5, 7, 7,10, 9, 7, 9,
+ 	 9,11,11, 7, 8, 9,10,11,10,11,11,13,14, 9,10,11,
+ 	13,13, 5, 7, 7, 9, 9, 7, 9, 8,11,10, 7, 9, 9,11,
+ 	11, 9,11,10,14,13,10,11,11,13,14, 8,10,10,13,13,
+ 	10,11,11,15,14, 9,11,11,14,14,13,15,14,18,16,12,
+ 	13,14,16,16, 8,10,10,13,13, 9,11,11,14,14,10,11,
+ 	12,14,15,12,13,13,16,16,13,14,14,15,17, 5, 7, 7,
+ 	10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,11,11,15,
+ 	14,10,11,11,14,14, 7, 9, 9,12,11, 9,11,11,13,13,
+ 	 9,11,11,13,13,12,12,13,15,15,11,12,13,16,15, 6,
+ 	 9, 9,11,11, 8,11,10,13,12, 9,10,11,12,14,11,13,
+ 	11,16,14,11,13,13,15,16,10,11,11,15,15,11,12,13,
+ 	16,15,11,13,13,16,16,14,15,15,17,18,14,15,16,17,
+ 	18, 9,11,11,14,15,10,12,11,15,15,11,12,13,15,16,
+ 	13,15,13,17,15,14,15,16,18,19, 5, 7, 7,10,10, 7,
+ 	 9, 9,11,11, 7, 9, 9,11,11,10,11,11,15,14,10,11,
+ 	11,14,15, 6, 9, 9,11,11, 9,11,10,13,13, 8,10,11,
+ 	12,13,11,13,13,15,15,11,11,13,13,15, 7, 9, 9,11,
+ 	12, 9,11,11,13,13, 9,11,11,13,13,11,13,12,17,16,
+ 	11,13,12,16,15, 9,11,11,15,14,11,13,13,16,16,10,
+ 	11,12,15,15,14,15,15,17,17,13,13,15,15,17,10,11,
+ 	12,15,15,11,13,13,16,19,11,13,12,17,17,14,16,15,
+ 	19,17,14,15,15,18,18, 8,10,10,14,14,10,12,11,16,
+ 	15, 9,11,11,15,16,14,16,15,17,17,13,14,14,18,17,
+ 	 9,11,11,16,15,11,13,13,16,18,11,13,13,17,16,15,
+ 	16,17,18, 0,15,15,16, 0,18, 9,11,11,16,15,10,13,
+ 	12,17,15,11,13,13,16,17,14,18,15,19,18,15,16,16,
+ 	19,18,13,15,15,19,17,13,15,15,18,18,14,15,15,19,
+ 	 0,17,18, 0,19,19,16,17,17, 0,18,12,14,13,18,17,
+ 	13,15,13,19,18,14,15,15,19,19,16,17,15, 0,17,16,
+ 	19,17,19,18, 8,10,10,14,14,10,11,11,15,15,10,11,
+ 	11,16,16,13,15,15,17,16,14,15,15,18,19, 9,11,11,
+ 	16,15,11,13,13,19,16,10,12,13,15,17,15,15,15,19,
+ 	19,15,16,16,17, 0, 9,11,11,16,16,11,13,13,16,17,
+ 	11,13,13,18,18,14,16,15,18,18,15,17,16,19, 0,12,
+ 	14,14,17,18,13,16,16,18,18,13,14,15,17, 0,16,17,
+ 	17, 0, 0,16,15, 0,19,17,12,15,14,17,18,14,15,16,
+ 	 0,18,14,16,16,18, 0,16,17,17, 0, 0,17,19,17,19,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44u5__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p3_0 = {
+ 	_vq_quantthresh__44u5__p3_0,
+ 	_vq_quantmap__44u5__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u5__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u5__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u5__p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u5__p4_0[] = {
+ 	 4, 6, 6, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
+ 	 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
+ 	 8,10,10, 6, 7, 8, 9,10, 9,10,10,11,11, 9, 9,10,
+ 	11,12, 6, 7, 7, 9, 9, 6, 8, 7,10, 9, 7, 8, 8,10,
+ 	10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,12,11,
+ 	 9,10,10,12,12, 9,10,10,12,12,11,12,12,13,13,11,
+ 	11,12,12,13, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
+ 	10,12,12,11,12,11,13,13,11,12,12,14,13, 6, 7, 7,
+ 	 9, 9, 7, 8, 7,10,10, 7, 7, 8, 9,10, 9,10,10,12,
+ 	11, 9,10,10,11,11, 7, 8, 8,10,10, 8, 8, 9,10,11,
+ 	 8, 8, 8,11,10,10,10,11,11,12,10,10,11,12,12, 6,
+ 	 7, 7,10,10, 7, 8, 8,11,10, 8, 8, 9,10,11,10,11,
+ 	10,13,11,10,10,11,12,12, 9,10,10,12,12,10,10,10,
+ 	12,13,10,11,11,13,13,12,11,12,11,14,12,12,13,13,
+ 	14, 9,10,10,12,12, 9,10,10,12,12,10,10,11,12,13,
+ 	11,12,11,14,12,12,12,12,14,14, 6, 7, 7, 9, 9, 7,
+ 	 8, 7,10,10, 7, 7, 8,10,10, 9,10,10,11,11, 9,10,
+ 	10,12,12, 6, 7, 7,10,10, 8, 9, 8,11,10, 7, 8, 8,
+ 	10,11,10,10,11,12,12,10,10,11,11,13, 7, 8, 8,10,
+ 	10, 8, 8, 8,10,11, 8, 9, 8,11,10,10,11,10,12,12,
+ 	10,11,10,12,11, 9,10,10,12,12,10,11,11,13,12, 9,
+ 	10,10,12,12,12,12,12,14,14,11,11,12,12,14, 9,10,
+ 	10,12,12,10,11,11,12,12,10,10,10,12,12,12,13,12,
+ 	14,14,11,12,11,14,11, 8, 9, 9,11,11, 9,10,10,12,
+ 	12, 9,10,10,12,12,11,12,12,14,14,11,12,12,13,13,
+ 	 9,10,10,12,12,10,10,11,12,13,10,11,10,13,12,12,
+ 	12,13,14,14,12,12,12,14,13, 9,10,10,12,12, 9,10,
+ 	10,13,12,10,10,11,12,13,12,13,12,14,13,12,12,13,
+ 	13,14,11,12,11,14,13,11,11,12,13,14,12,13,12,14,
+ 	14,13,12,14,11,16,13,14,14,16,15,11,11,11,13,13,
+ 	11,12,11,14,13,12,12,13,14,15,12,14,12,16,12,14,
+ 	14,14,16,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
+ 	10,12,12,11,12,12,13,13,12,12,12,14,14, 9,10,10,
+ 	12,12,10,11,10,13,12, 9,10,10,12,13,12,12,12,14,
+ 	13,12,12,13,13,15, 9,10,10,12,12,10,10,11,12,13,
+ 	10,11,10,13,12,12,13,12,14,14,12,13,12,14,13,11,
+ 	11,11,13,13,12,13,12,14,14,11,11,12,13,14,13,14,
+ 	14,16,15,13,12,14,12,15,11,12,12,13,14,12,12,13,
+ 	14,14,11,12,11,14,13,13,14,14,15,16,13,14,11,16,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44u5__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p4_0 = {
+ 	_vq_quantthresh__44u5__p4_0,
+ 	_vq_quantmap__44u5__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u5__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u5__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u5__p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u5__p5_0[] = {
+ 	 2, 4, 3, 6, 6, 8, 7,10,10, 3, 5, 5, 8, 7, 8, 8,
+ 	11,11, 3, 5, 5, 7, 8, 8, 8,10,11, 6, 8, 7, 9, 9,
+ 	10, 9,12,11, 7, 7, 8, 9, 9, 9,10,11,12, 8, 8, 8,
+ 	10, 9,11,11,13,12, 8, 8, 8, 9,10,11,12,12,13,10,
+ 	11,10,12,11,13,12,14,14,10,10,11,11,12,12,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44u5__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p5_0 = {
+ 	_vq_quantthresh__44u5__p5_0,
+ 	_vq_quantmap__44u5__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u5__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u5__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u5__p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p6_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u5__p6_0[] = {
+ 	 3, 4, 4, 5, 6, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
+ 	 9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7,
+ 	 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 7, 7,
+ 	 8, 8, 9, 9,10,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9,
+ 	 9, 9,10,10,11,10,11,11, 9, 9, 9,10,10,11,11,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44u5__p6_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p6_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p6_0 = {
+ 	_vq_quantthresh__44u5__p6_0,
+ 	_vq_quantmap__44u5__p6_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u5__p6_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u5__p6_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u5__p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u5__p7_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 8,11,10, 7,
+ 	10,10, 5, 9, 9, 8,10,10, 8,10,11, 4, 9, 9, 9,11,
+ 	11, 9,12,11, 8,11,11,11,12,12,10,12,12, 7,11,11,
+ 	10,12,12,10,12,12, 4, 9, 9, 9,11,11, 9,11,11, 7,
+ 	11,11,10,12,12,10,11,12, 8,11,11,10,12,12,11,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u5__p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p7_0 = {
+ 	_vq_quantthresh__44u5__p7_0,
+ 	_vq_quantmap__44u5__p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u5__p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u5__p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44u5__p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u5__p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 7,
+ 	 8, 8, 9, 8, 9, 8, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9,
+ 	 9, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 6, 7, 7, 8,
+ 	 8, 8, 9, 9, 9, 9, 9, 8, 8, 8, 9, 8, 9, 9, 9, 9,
+ 	 9, 9, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 8, 9, 8,
+ 	 9, 9, 9, 9,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10,
+ 	10,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10, 8, 9,
+ 	 9, 9, 9, 9, 9,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44u5__p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p7_1 = {
+ 	_vq_quantthresh__44u5__p7_1,
+ 	_vq_quantmap__44u5__p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u5__p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u5__p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u5__p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u5__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p8_0[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u5__p8_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7,
+ 	 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11,
+ 	11, 6, 8, 8, 9, 9,10,10,12,11,13,12, 6, 7, 8, 9,
+ 	 9,10,10,11,11,12,12, 8, 9, 9,10,10,11,12,12,12,
+ 	14,13, 8, 9, 9,10,10,11,11,12,13,14,13,10,11,10,
+ 	12,12,13,13,14,13,15,14,10,11,11,12,12,12,13,13,
+ 	13,15,15,11,12,12,13,12,13,14,14,14,15,14,11,11,
+ 	12,13,13,13,14,14,14,15,15,
+ };
+ 
+ static float _vq_quantthresh__44u5__p8_0[] = {
+ 	-49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, 
+ 	38.5, 49.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p8_0[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p8_0 = {
+ 	_vq_quantthresh__44u5__p8_0,
+ 	_vq_quantmap__44u5__p8_0,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u5__p8_0 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u5__p8_0,
+ 	1, -524582912, 1618345984, 4, 0,
+ 	_vq_quantlist__44u5__p8_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p8_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u5__p8_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 6, 5, 6, 6,
+ 	 7, 7, 8, 8, 8, 8, 5, 6, 6, 6, 6, 7, 7, 8, 8, 8,
+ 	 8, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 7, 7,
+ 	 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44u5__p8_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p8_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p8_1 = {
+ 	_vq_quantthresh__44u5__p8_1,
+ 	_vq_quantmap__44u5__p8_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u5__p8_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u5__p8_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u5__p8_1,
+ 	NULL,
+ 	&_vq_auxt__44u5__p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p9_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u5__p9_0[] = {
+ 	 1, 3, 3,12,10,12,12,12,12,12,12,12,12, 3, 8, 9,
+ 	12,12,12,12,12,12,12,12,12,12, 4, 9, 9,12,12,12,
+ 	12,12,12,12,12,12,12,11,12,12,12,12,12,12,12,12,
+ 	12,12,12,12, 9,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,
+ };
+ 
+ static float _vq_quantthresh__44u5__p9_0[] = {
+ 	-1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 382.5, 
+ 	637.5, 892.5, 1147.5, 1402.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p9_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p9_0 = {
+ 	_vq_quantthresh__44u5__p9_0,
+ 	_vq_quantmap__44u5__p9_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u5__p9_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u5__p9_0,
+ 	1, -514332672, 1627381760, 4, 0,
+ 	_vq_quantlist__44u5__p9_0,
+ 	NULL,
+ 	&_vq_auxt__44u5__p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44u5__p9_1[] = {
+ 	 1, 4, 4, 7, 7, 8, 9, 7, 7, 8, 8, 9, 9,10,10, 5,
+ 	 6, 6, 9, 8,10,10, 9, 8, 9, 9,10, 9,11,10, 4, 6,
+ 	 6, 8, 9, 9,10, 8, 9, 9,10,10,10,11,10, 7, 8, 8,
+ 	10,10,11,11,10,10,11,11,11,11,11,11, 7, 8, 8,10,
+ 	10,11,11,10,10,11,11,11,11,11,12, 8, 9,10,11,10,
+ 	12,12,11,11,11,11,12,12,12,13, 8, 9, 9,11,11,11,
+ 	12,11,11,11,11,12,12,12,12, 8, 9, 9,10,10,11,11,
+ 	12,11,12,12,12,13,13,13, 8, 9, 9,10,10,11,11,12,
+ 	11,12,12,13,13,12,13, 9,10,10,11,11,12,11,12,13,
+ 	14,14,15,15,15,14, 9,10,10,11,11,12,12,12,12,13,
+ 	13,14,14,14,14, 9,10,11,12,11,12,13,14,13,14,13,
+ 	14,14,14,14, 9,11,11,11,11,12,13,13,13,14,13,15,
+ 	15,14,14,10,11,11,12,12,13,13,13,13,14,14,14,15,
+ 	15,15,10,11,11,12,12,12,13,13,13,15,14,15,14,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44u5__p9_1[] = {
+ 	-110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 
+ 	25.5, 42.5, 59.5, 76.5, 93.5, 110.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p9_1 = {
+ 	_vq_quantthresh__44u5__p9_1,
+ 	_vq_quantmap__44u5__p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44u5__p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__44u5__p9_1,
+ 	1, -522338304, 1620115456, 4, 0,
+ 	_vq_quantlist__44u5__p9_1,
+ 	NULL,
+ 	&_vq_auxt__44u5__p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u5__p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44u5__p9_2[] = {
+ 	 3, 5, 5, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10, 9, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10, 9, 9, 9, 9, 9,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10,10,10,10, 9,10,10,10,10, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,10,10, 9, 9, 9, 9,10,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9,10, 9, 9, 9,10,10, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u5__p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44u5__p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u5__p9_2 = {
+ 	_vq_quantthresh__44u5__p9_2,
+ 	_vq_quantmap__44u5__p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44u5__p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44u5__p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44u5__p9_2,
+ 	NULL,
+ 	&_vq_auxt__44u5__p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u5__short[] = {
+ 	 4,11,16,14,18,15,18,15,17,17, 4, 6, 9, 9,12, 9,
+ 	14,10,14,17, 6, 6, 5, 7, 6, 8,10,10,16,17, 7, 8,
+ 	 7, 9, 9,10,12,12,14,17, 8, 6, 5, 7, 4, 7, 5, 7,
+ 	14,17, 9, 9, 8, 9, 7,10, 8,10,14,17,11, 9, 7, 9,
+ 	 4, 7, 3, 6,15,17,11,10,10,10, 6, 9, 5, 6,14,17,
+ 	17,17,10,15, 4, 8, 3, 5,12,17,17,17,12,16, 7,11,
+ 	 6, 8,16,17,
+ };
+ 
+ static static_codebook _huff_book__44u5__short = {
+ 	2, 100,
+ 	_huff_lengthlist__44u5__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u6__long[] = {
+ 	 3, 9,14,13,15,13,16,12,12,12, 5, 4, 6, 7, 8, 9,
+ 	10,10,13,12,10, 5, 5, 6, 6, 9, 9,10,14,14,10, 6,
+ 	 6, 7, 6, 8, 9, 9,13,12,13, 7, 5, 6, 4, 6, 6, 7,
+ 	11,15,10, 8, 7, 7, 6, 7, 7, 7,11,13,16,10, 8, 8,
+ 	 5, 6, 4, 6,10,14, 9, 9, 9, 8, 6, 6, 5, 4, 7,11,
+ 	11,11,12,11,10, 9, 9, 5, 5, 9,10,13,14,14,14,14,
+ 	15, 8, 7, 8,
+ };
+ 
+ static static_codebook _huff_book__44u6__long = {
+ 	2, 100,
+ 	_huff_lengthlist__44u6__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u6__p1_0[] = {
+ 	 1, 4, 4, 4, 8, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
+ 	 9,10, 5, 8, 8, 7,10, 9, 8,10,10, 5, 8, 8, 8,11,
+ 	10, 8,10,10, 8,11,10,10,12,13,10,13,13, 7,10,10,
+ 	10,13,11,10,13,13, 5, 8, 8, 8,11,10, 8,10,10, 7,
+ 	10,10,10,13,13, 9,11,13, 8,10,11,10,13,13,10,13,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u6__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p1_0 = {
+ 	_vq_quantthresh__44u6__p1_0,
+ 	_vq_quantmap__44u6__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u6__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u6__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u6__p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u6__p2_0[] = {
+ 	 3, 5, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 7, 8, 6,
+ 	 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 6, 8,
+ 	 7, 6, 7, 8, 6, 8, 8, 8, 8, 9, 8, 9, 9, 6, 7, 7,
+ 	 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 7, 8, 6,
+ 	 7, 7, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44u6__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p2_0 = {
+ 	_vq_quantthresh__44u6__p2_0,
+ 	_vq_quantmap__44u6__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u6__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u6__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u6__p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u6__p3_0[] = {
+ 	 2, 4, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
+ 	10, 9,13,12, 8, 9,10,12,13, 5, 7, 7,10, 9, 7, 9,
+ 	 9,11,11, 7, 8, 9,10,11,10,11,11,13,14, 9,10,11,
+ 	13,13, 5, 7, 7, 9, 9, 7, 9, 8,11,10, 7, 9, 9,11,
+ 	11, 9,11,10,14,13,10,11,11,14,13, 8,10,10,14,13,
+ 	10,12,11,15,14, 9,11,11,15,14,13,15,14,20,16,13,
+ 	13,14,16,16, 8,10,10,13,14, 9,11,11,14,15,10,11,
+ 	12,14,15,13,13,14,16,16,13,14,14,16,17, 5, 7, 7,
+ 	10,10, 7, 9, 9,11,11, 7, 9, 9,11,11,10,11,11,15,
+ 	14,10,11,11,14,14, 7, 9, 9,12,11, 9,11,11,12,13,
+ 	 9,11,11,13,13,11,12,13,14,16,11,12,13,16,16, 6,
+ 	 9, 8,11,11, 8,11,10,13,12, 9,10,11,12,13,11,13,
+ 	11,15,14,11,13,13,15,15,10,12,11,15,14,11,12,13,
+ 	17,16,11,13,13,16,17,14,15,16,17,17,14,15,16,20,
+ 	 0, 9,11,11,14,15,10,13,12,16,16,11,13,13,17,17,
+ 	13,15,14,17,15,15,16,16, 0, 0, 5, 7, 7,10,10, 7,
+ 	 9, 9,11,11, 7, 8, 9,11,11,10,11,11,14,14,10,11,
+ 	11,14,14, 6, 9, 9,11,11, 9,11,11,14,12, 8,10,11,
+ 	12,13,11,13,13,16,16,11,11,13,14,16, 7, 9, 9,11,
+ 	12, 9,11,11,13,13, 9,11,11,13,12,11,13,12,16,16,
+ 	12,13,12,16,14, 9,11,11,16,15,11,13,13,17,15,10,
+ 	12,12,15,16,14,16,16, 0,17,13,14,15,15,17,10,11,
+ 	12,15,15,11,13,13,17,17,11,13,13,15,16,14,15,15,
+ 	19,18,14,15,15,19,16, 8,10,10,14,14,10,12,11,15,
+ 	16,10,11,11,15,17,13,16,15,19,19,13,15,14,17,17,
+ 	 9,11,12,15,16,11,13,13,18,19,11,13,13,16,17,16,
+ 	16,17, 0, 0,15,15,16, 0,19, 9,11,11,15,16,10,13,
+ 	12,17,15,11,13,13,16,17,14,17,15,18,17,15,16,15,
+ 	18, 0,13,14,15, 0,19,14,16,16, 0,17,15,16,16, 0,
+ 	17,16,17, 0, 0, 0,16,17,19, 0, 0,12,14,14,17,17,
+ 	13,15,13, 0,19,14,16,16,18,19,16,18,15,19,18,17,
+ 	18,17,19, 0, 8,10,10,14,13,10,11,11,16,15,10,11,
+ 	11,15,15,13,15,15,19,18,14,15,16, 0,18, 9,11,11,
+ 	15,14,11,13,13, 0,16,10,12,13,15,17,14,16,16, 0,
+ 	18,15,16,17,17, 0, 9,11,11,16,15,11,13,13,16,16,
+ 	11,14,13,18,18,15,17,15,18,17,15,16,18, 0, 0,12,
+ 	14,14,18,19,14,15,16, 0,18,13,14,15,18, 0,17,17,
+ 	17, 0, 0,16,15,18,17, 0,12,14,15,17,19,14,16,16,
+ 	19, 0,14,17,16, 0,18,17,19,17, 0, 0,16,18,17, 0,
+ 	17,
+ };
+ 
+ static float _vq_quantthresh__44u6__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p3_0 = {
+ 	_vq_quantthresh__44u6__p3_0,
+ 	_vq_quantmap__44u6__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u6__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u6__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u6__p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u6__p4_0[] = {
+ 	 4, 6, 6, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
+ 	 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
+ 	 8,10,10, 6, 7, 8, 9,10, 9,10,10,11,12, 9, 9,10,
+ 	11,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 8,10,
+ 	10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,11,11,
+ 	 9,10,10,12,12, 9, 9,10,12,12,11,12,12,13,13,11,
+ 	11,12,12,13, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
+ 	10,12,12,11,12,11,13,13,11,12,12,13,13, 6, 7, 7,
+ 	 9, 9, 7, 8, 7,10, 9, 7, 7, 8, 9,10, 9,10,10,12,
+ 	11, 9,10,10,11,12, 7, 8, 8,10,10, 8, 8, 9,10,10,
+ 	 8, 8, 8,10,10,10,10,11,12,12,10,10,11,12,12, 6,
+ 	 7, 7,10,10, 7, 8, 8,11,10, 8, 8, 9,10,11,10,11,
+ 	10,12,11,10,10,11,12,12, 9,10,10,12,12,10,10,11,
+ 	12,12,10,11,10,13,12,12,12,12,12,14,12,12,12,13,
+ 	14, 9,10,10,12,12, 9,10,10,12,12,10,10,11,12,13,
+ 	11,12,11,14,12,12,12,13,14,14, 6, 7, 7, 9, 9, 7,
+ 	 8, 7,10, 9, 7, 7, 8,10,10, 9,10,10,12,11, 9,10,
+ 	10,11,12, 6, 7, 7,10,10, 8, 9, 8,11,10, 7, 8, 8,
+ 	10,10,10,10,11,12,12,10,10,10,11,12, 7, 8, 8,10,
+ 	10, 8, 8, 8,10,10, 8, 8, 8,10,10,10,11,10,12,12,
+ 	10,11,10,12,11, 9,10,10,12,12,10,11,10,13,12, 9,
+ 	10,10,12,12,12,12,12,14,14,11,11,12,12,13, 9,10,
+ 	10,12,12,10,11,11,12,12,10,11,10,12,12,12,12,12,
+ 	14,14,12,12,12,14,12, 8, 9, 9,11,11, 9,10,10,12,
+ 	12, 9,10,10,12,12,11,12,12,13,13,11,12,12,13,13,
+ 	 9,10,10,12,12,10,10,11,12,13,10,11,10,12,12,12,
+ 	12,13,13,14,12,12,12,14,14, 9,10,10,12,12, 9,10,
+ 	10,12,12,10,10,10,12,12,12,12,12,14,13,12,12,12,
+ 	14,14,11,12,12,13,13,11,12,12,14,14,12,12,12,14,
+ 	14,13,12,14,12,15,13,14,14,15,15,11,11,11,13,13,
+ 	11,12,11,14,13,12,12,12,14,14,12,14,12,15,12,13,
+ 	14,14,15,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
+ 	10,12,12,11,12,12,13,13,11,12,12,13,14, 9,10,10,
+ 	12,12,10,11,10,13,12, 9,10,10,12,13,12,12,12,15,
+ 	14,12,12,13,13,14, 9,10,10,12,12,10,10,11,12,12,
+ 	10,11,10,12,12,12,13,12,14,14,12,13,12,14,13,11,
+ 	11,11,13,13,12,12,12,14,13,11,11,12,13,14,13,14,
+ 	14,15,15,12,12,14,12,15,11,12,12,13,14,12,12,12,
+ 	14,14,11,12,12,14,14,13,14,14,15,15,13,14,12,16,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u6__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p4_0 = {
+ 	_vq_quantthresh__44u6__p4_0,
+ 	_vq_quantmap__44u6__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u6__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u6__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u6__p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u6__p5_0[] = {
+ 	 2, 3, 3, 6, 6, 8, 8,10,10, 4, 5, 5, 8, 7, 8, 8,
+ 	11,11, 3, 5, 5, 7, 8, 8, 8,11,11, 6, 8, 7,10, 9,
+ 	10, 9,12,12, 6, 7, 8, 9,10, 9,10,12,12, 8, 8, 8,
+ 	10, 9,12,11,13,13, 8, 8, 8, 9,10,11,12,12,13,10,
+ 	11,11,12,11,13,12,14,14,10,10,11,11,12,13,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44u6__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p5_0 = {
+ 	_vq_quantthresh__44u6__p5_0,
+ 	_vq_quantmap__44u6__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u6__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u6__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u6__p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p6_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u6__p6_0[] = {
+ 	 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
+ 	 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
+ 	 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8,10,10, 7, 7, 7,
+ 	 8, 8, 9, 9,10,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9,
+ 	 9, 9,10,10,11,11,11,11, 9, 9, 9,10,10,10,11,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44u6__p6_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p6_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p6_0 = {
+ 	_vq_quantthresh__44u6__p6_0,
+ 	_vq_quantmap__44u6__p6_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u6__p6_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u6__p6_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u6__p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u6__p7_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 8,11,10, 8,
+ 	11,10, 5, 8, 9, 7,10,10, 8,10,11, 4, 9, 9, 9,12,
+ 	11, 9,11,12, 8,11,12,11,12,13,10,13,12, 7,12,11,
+ 	10,12,12,10,13,13, 4, 9, 9, 8,11,11, 9,11,12, 7,
+ 	12,12,10,13,13,10,12,13, 8,12,12,10,13,13,11,13,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u6__p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p7_0 = {
+ 	_vq_quantthresh__44u6__p7_0,
+ 	_vq_quantmap__44u6__p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u6__p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u6__p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44u6__p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u6__p7_1[] = {
+ 	 3, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 6, 6,
+ 	 8, 7, 8, 8, 8, 8, 4, 5, 5, 6, 6, 7, 8, 8, 8, 8,
+ 	 8, 6, 7, 6, 7, 7, 8, 8, 9, 9, 9, 9, 6, 6, 7, 7,
+ 	 7, 8, 8, 9, 9, 9, 9, 7, 8, 7, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9,10,10, 8, 8,
+ 	 8, 9, 9, 9, 9, 9, 9,10,10,
+ };
+ 
+ static float _vq_quantthresh__44u6__p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p7_1 = {
+ 	_vq_quantthresh__44u6__p7_1,
+ 	_vq_quantmap__44u6__p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u6__p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u6__p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u6__p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u6__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p8_0[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u6__p8_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7,
+ 	 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11,
+ 	11, 6, 8, 8, 9, 9,10,10,11,11,12,12, 6, 8, 8, 9,
+ 	 9,10,10,11,11,12,12, 8, 9, 9,10,10,11,11,12,12,
+ 	13,13, 8, 9, 9,10,10,11,11,12,12,13,13,10,10,10,
+ 	11,11,12,12,13,13,14,14,10,10,10,11,11,12,13,13,
+ 	13,14,14,11,12,12,13,13,13,13,14,14,15,14,11,11,
+ 	11,13,13,14,13,14,14,15,14,
+ };
+ 
+ static float _vq_quantthresh__44u6__p8_0[] = {
+ 	-49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, 
+ 	38.5, 49.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p8_0[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p8_0 = {
+ 	_vq_quantthresh__44u6__p8_0,
+ 	_vq_quantmap__44u6__p8_0,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u6__p8_0 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u6__p8_0,
+ 	1, -524582912, 1618345984, 4, 0,
+ 	_vq_quantlist__44u6__p8_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p8_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u6__p8_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 6, 6, 7, 6,
+ 	 7, 7, 7, 7, 8, 8, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8,
+ 	 8, 6, 7, 6, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 7, 7,
+ 	 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44u6__p8_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p8_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p8_1 = {
+ 	_vq_quantthresh__44u6__p8_1,
+ 	_vq_quantmap__44u6__p8_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u6__p8_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u6__p8_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u6__p8_1,
+ 	NULL,
+ 	&_vq_auxt__44u6__p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p9_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44u6__p9_0[] = {
+ 	 1, 3, 3,10,12,13,13,13,13,13,13,13,13,13,13, 3,
+ 	 9, 9,13,13,13,13,13,13,13,13,13,13,12,12, 4, 9,
+ 	 9,12,12,12,12,12,12,12,12,12,12,12,12, 9,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12, 9,11,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u6__p9_0[] = {
+ 	-1657.5, -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 
+ 	382.5, 637.5, 892.5, 1147.5, 1402.5, 1657.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p9_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p9_0 = {
+ 	_vq_quantthresh__44u6__p9_0,
+ 	_vq_quantmap__44u6__p9_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44u6__p9_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44u6__p9_0,
+ 	1, -514071552, 1627381760, 4, 0,
+ 	_vq_quantlist__44u6__p9_0,
+ 	NULL,
+ 	&_vq_auxt__44u6__p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44u6__p9_1[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 7, 7, 8, 8, 9, 9, 9, 9, 5,
+ 	 6, 6, 8, 8,10,10, 9, 9,10, 9,10, 9,10,10, 4, 6,
+ 	 6, 8, 9,10,10, 8, 9, 9,10,10,10,10,10, 7, 9, 8,
+ 	10,10,11,11,10,10,11,11,11,11,12,12, 7, 8, 8,10,
+ 	10,11,11,10,10,10,11,11,11,11,12, 8,10,10,11,11,
+ 	12,12,11,11,11,11,12,12,12,13, 8, 9, 9,11,11,12,
+ 	12,11,11,12,12,12,12,12,12, 8, 9, 9,10,10,11,11,
+ 	13,12,13,12,13,13,13,13, 8, 9, 9,10,10,11,11,12,
+ 	12,12,12,13,12,13,12, 9,10,10,11,11,12,12,13,13,
+ 	14,12,13,13,14,13, 9,10,10,11,11,12,12,12,12,13,
+ 	13,13,13,14,14, 9,11,10,11,11,12,13,13,12,13,13,
+ 	15,13,14,14, 9,10,10,11,12,12,13,13,13,13,13,14,
+ 	14,14,14,10,11,11,12,12,13,12,13,13,14,14,14,14,
+ 	14,15,10,11,11,11,12,13,13,13,13,14,14,14,14,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44u6__p9_1[] = {
+ 	-110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 
+ 	25.5, 42.5, 59.5, 76.5, 93.5, 110.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p9_1 = {
+ 	_vq_quantthresh__44u6__p9_1,
+ 	_vq_quantmap__44u6__p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44u6__p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__44u6__p9_1,
+ 	1, -522338304, 1620115456, 4, 0,
+ 	_vq_quantlist__44u6__p9_1,
+ 	NULL,
+ 	&_vq_auxt__44u6__p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u6__p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44u6__p9_2[] = {
+ 	 3, 5, 5, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9,10,10, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 9,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10, 9, 9, 9,10,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u6__p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44u6__p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u6__p9_2 = {
+ 	_vq_quantthresh__44u6__p9_2,
+ 	_vq_quantmap__44u6__p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44u6__p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__44u6__p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44u6__p9_2,
+ 	NULL,
+ 	&_vq_auxt__44u6__p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u6__short[] = {
+ 	 5,11,15,14,17,14,17,15,17,17, 4, 6, 9, 9,14, 9,
+ 	17,10,15,17, 6, 6, 5, 7, 7, 9,11,10,15,17, 6, 8,
+ 	 8,10, 9,11,14,13,16,17, 7, 6, 5, 7, 5, 7, 5, 8,
+ 	15,17, 9, 8, 8, 9, 8,10,10,11,14,17,10, 8, 7, 9,
+ 	 4, 7, 3, 5,11,17,10,10,10,10, 6, 9, 4, 5,11,17,
+ 	16,16,13,15, 5,10, 4, 3, 9,16,17,17,14,17, 7,11,
+ 	 6, 6,11,17,
+ };
+ 
+ static static_codebook _huff_book__44u6__short = {
+ 	2, 100,
+ 	_huff_lengthlist__44u6__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u7__long[] = {
+ 	 3, 9,15,13,16,13,16,12,12,12, 5, 5, 7, 8, 8,10,
+ 	11,10,13,13,10, 5, 5, 6, 6, 9, 9,10,14,14, 9, 6,
+ 	 6, 7, 6, 8, 9,10,13,12,13, 7, 5, 6, 4, 6, 6, 8,
+ 	12,13,11, 8, 7, 8, 6, 7, 7, 7,11,13,15,10, 8, 8,
+ 	 5, 6, 4, 5, 9,13, 9, 9, 8, 9, 7, 7, 4, 4, 6,11,
+ 	11,11,12,12,10,10, 8, 5, 5, 9,10,12,13,15,13,13,
+ 	12, 7, 6, 8,
+ };
+ 
+ static static_codebook _huff_book__44u7__long = {
+ 	2, 100,
+ 	_huff_lengthlist__44u7__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u7__p1_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 4, 7, 7, 5, 8, 8, 8,10,10, 7,
+ 	10,10, 5, 8, 8, 7,10, 9, 8,10,10, 5, 8, 8, 8,11,
+ 	10, 8,10,10, 8,11,10,10,12,13,11,13,13, 7,10,10,
+ 	10,13,11,11,13,13, 5, 8, 8, 8,11,10, 8,10,10, 7,
+ 	10,10,11,13,13,10,11,13, 8,11,11,10,13,13,10,13,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u7__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p1_0 = {
+ 	_vq_quantthresh__44u7__p1_0,
+ 	_vq_quantmap__44u7__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u7__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u7__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u7__p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u7__p2_0[] = {
+ 	 3, 5, 4, 5, 6, 6, 5, 6, 6, 5, 6, 6, 6, 7, 8, 6,
+ 	 7, 7, 5, 6, 6, 6, 7, 7, 6, 8, 8, 5, 6, 6, 6, 8,
+ 	 7, 6, 7, 8, 6, 8, 8, 8, 9, 9, 8, 9, 9, 6, 7, 7,
+ 	 7, 9, 8, 8, 9, 9, 5, 6, 6, 6, 8, 7, 6, 7, 8, 6,
+ 	 7, 7, 8, 9, 9, 7, 8, 9, 6, 8, 8, 8, 9, 9, 8, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u7__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p2_0 = {
+ 	_vq_quantthresh__44u7__p2_0,
+ 	_vq_quantmap__44u7__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u7__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u7__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u7__p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u7__p3_0[] = {
+ 	 2, 5, 5, 8, 8, 5, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
+ 	 9, 9,12,12, 8, 9, 9,12,12, 5, 7, 7,10, 9, 7, 9,
+ 	 9,11,11, 6, 8, 9,10,11,10,11,11,13,14, 9,10,11,
+ 	13,13, 5, 7, 7, 9, 9, 6, 9, 8,11,10, 7, 9, 9,11,
+ 	11, 9,11,10,13,13,10,11,11,14,13, 8,10,10,14,13,
+ 	10,11,11,16,14, 9,11,11,14,14,13,15,14,17,16,12,
+ 	13,14,16,15, 8, 9,10,13,14, 9,11,11,14,14,10,11,
+ 	11,14,15,13,13,14,17,17,13,14,15,16,17, 5, 7, 7,
+ 	10,10, 7, 9, 8,11,11, 7, 8, 9,11,11,10,11,11,14,
+ 	14,10,11,11,14,14, 7, 9, 9,11,11, 9,11,11,13,13,
+ 	 9,11,11,13,13,11,12,13,15,17,11,12,13,16,18, 6,
+ 	 8, 8,11,11, 8,10,10,13,12, 9,11,11,12,13,11,13,
+ 	11,16,14,11,13,12,16,16,10,11,11,15,15,11,13,13,
+ 	16,16,11,13,13,18,16,14,14,15,17,16,14,15,17,19,
+ 	 0, 9,11,11,14,15,10,12,12,15,17,11,13,13,15,17,
+ 	14,15,13, 0,15,15,17,16,18, 0, 5, 7, 7, 9,10, 7,
+ 	 9, 9,11,11, 7, 8, 9,11,11,10,11,11,14,14,10,11,
+ 	11,14,14, 6, 8, 9,11,11, 9,11,11,14,13, 8,10,10,
+ 	11,14,11,13,13,17,15,11,12,13,14,16, 7, 9, 9,11,
+ 	11, 9,11,11,13,12, 9,11,11,12,13,11,13,12,15,15,
+ 	11,13,12,16,15, 9,11,11,15,15,11,12,13,16,15,10,
+ 	11,12,16,15,15,16,16, 0, 0,14,13,15,16,19, 9,11,
+ 	12,15,15,11,13,13,17,16,11,13,12,15,17,14,16,16,
+ 	18, 0,15,15,16,18,17, 8,10,10,13,14,10,11,11,15,
+ 	16,10,11,11,15,16,14,15,15,17,19,14,14,15,19,19,
+ 	 9,11,11,16,15,11,13,13,17,17,11,13,13,17,17,15,
+ 	17,16, 0, 0,15,17,17, 0,17, 9,11,11,15,15,11,13,
+ 	12,16,16,11,13,13,18,17,15,16,15,19,19,14,16,18,
+ 	17,19,13,15,15, 0,18,14,16,17,17,18,14,16,16,19,
+ 	19,18,19,19, 0, 0,16,17,18,19, 0,12,14,14,16,18,
+ 	13,16,14, 0,19,14,16,17,19, 0,16,19,16,19,17,17,
+ 	18,18, 0, 0, 8,10,10,14,13, 9,11,11,15,14,10,11,
+ 	12,14,16,13,15,14,19,19,14,16,16,18,17, 9,11,11,
+ 	16,15,11,13,13, 0,17,10,12,13,15,16,15,18,16,19,
+ 	19,14,15,16,18,18, 9,11,12,15,15,11,13,13,17,19,
+ 	11,13,13,17,17,15,17,16,19,19,15,17,16, 0, 0,12,
+ 	14,14, 0,19,14,16,15, 0,19,13,14,16,19, 0,16,18,
+ 	18, 0, 0,16,16,17,17, 0,13,14,14,17, 0,14,17,16,
+ 	 0,19,14,16,16,19,18,17,19,17, 0, 0,18,18,17, 0,
+ 	 0,
+ };
+ 
+ static float _vq_quantthresh__44u7__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p3_0 = {
+ 	_vq_quantthresh__44u7__p3_0,
+ 	_vq_quantmap__44u7__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u7__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u7__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u7__p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u7__p4_0[] = {
+ 	 5, 6, 6, 8, 8, 6, 7, 6, 9, 9, 6, 6, 7, 9, 9, 8,
+ 	 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
+ 	 7,10,10, 6, 7, 8, 9,10, 9,10,10,11,12, 9, 9,10,
+ 	11,12, 6, 7, 7, 9, 9, 6, 7, 7,10, 9, 7, 7, 8,10,
+ 	10, 9,10, 9,12,11, 9,10,10,12,11, 8, 9, 9,11,11,
+ 	 9,10,10,12,12, 9,10,10,11,12,11,12,12,13,13,11,
+ 	11,12,12,13, 8, 9, 9,11,11, 9,10,10,12,11, 9,10,
+ 	10,12,12,11,12,11,13,12,11,12,12,13,14, 6, 7, 7,
+ 	 9, 9, 7, 8, 7,10, 9, 7, 7, 8, 9,10, 9,10,10,12,
+ 	11, 9,10,10,11,12, 7, 8, 8,10,10, 8, 8, 8,10,10,
+ 	 8, 8, 8,10,10,10,10,11,12,12,10,10,11,12,12, 6,
+ 	 7, 7,10,10, 7, 8, 8,10,10, 8, 8, 8,10,11, 9,10,
+ 	10,12,11,10,10,11,12,12, 9,10,10,12,12,10,10,10,
+ 	12,12,10,11,10,12,12,12,12,12,13,14,12,12,12,13,
+ 	14, 9,10,10,11,12, 9,10,10,12,12,10,10,11,12,12,
+ 	11,12,11,14,12,12,12,12,14,14, 6, 7, 7, 9, 9, 7,
+ 	 8, 7,10, 9, 7, 7, 8, 9,10, 9,10,10,12,11, 9,10,
+ 	10,11,12, 6, 7, 7,10,10, 8, 8, 8,11,10, 7, 8, 8,
+ 	10,10,10,10,10,12,12,10,10,10,11,12, 7, 8, 8,10,
+ 	10, 8, 8, 8,10,10, 8, 8, 8,10,10,10,11,10,12,12,
+ 	10,11,10,12,12, 9,10,10,12,12,10,11,10,13,12, 9,
+ 	10,10,12,12,12,12,12,14,14,11,11,12,12,14, 9,10,
+ 	10,12,12,10,10,10,12,12,10,11,10,12,12,12,12,12,
+ 	14,14,12,12,12,14,13, 8, 9, 9,11,11, 9,10,10,12,
+ 	12, 9,10,10,12,12,11,12,12,14,13,11,12,12,13,13,
+ 	 9,10,10,12,12,10,10,10,12,12,10,11,11,12,12,12,
+ 	12,13,14,14,12,12,12,14,14, 9,10, 9,12,12, 9,10,
+ 	10,12,12,10,10,11,12,12,12,12,11,14,13,12,12,12,
+ 	13,14,11,12,12,13,13,12,12,12,14,14,12,13,12,14,
+ 	14,13,13,14,13,15,14,14,14,15,15,11,11,11,13,13,
+ 	11,12,11,14,13,12,12,12,14,14,12,13,12,15,12,13,
+ 	14,14,15,15, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
+ 	10,12,12,11,12,12,13,13,11,12,12,13,14, 9,10,10,
+ 	12,11,10,10,10,12,12, 9,10,10,12,12,12,13,12,14,
+ 	13,11,12,12,13,14, 9,10,10,12,12,10,10,10,12,12,
+ 	10,11,11,12,12,12,12,12,14,14,12,13,12,14,13,11,
+ 	11,11,13,13,12,12,12,14,13,11,11,12,13,14,13,14,
+ 	14,15,15,13,12,13,12,15,11,12,12,13,14,12,12,12,
+ 	14,14,11,12,12,14,14,13,14,14,15,15,13,14,13,15,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u7__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p4_0 = {
+ 	_vq_quantthresh__44u7__p4_0,
+ 	_vq_quantmap__44u7__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u7__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u7__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u7__p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u7__p5_0[] = {
+ 	 2, 3, 3, 6, 6, 8, 8,10,10, 3, 5, 5, 8, 7, 8, 8,
+ 	11,11, 4, 5, 5, 7, 8, 8, 8,11,11, 6, 8, 7, 9, 9,
+ 	10, 9,12,12, 6, 7, 8, 9,10, 9,10,12,12, 8, 8, 8,
+ 	10, 9,12,11,13,13, 8, 8, 8, 9,10,11,12,13,13,10,
+ 	11,11,12,11,13,13,14,14,10,11,11,12,12,13,13,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44u7__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p5_0 = {
+ 	_vq_quantthresh__44u7__p5_0,
+ 	_vq_quantmap__44u7__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u7__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u7__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u7__p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p6_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u7__p6_0[] = {
+ 	 4, 4, 4, 5, 5, 7, 7, 9, 9, 4, 4, 4, 6, 6, 7, 7,
+ 	 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
+ 	 8, 8, 9, 9, 5, 6, 6, 6, 7, 8, 8, 9, 9, 7, 7, 7,
+ 	 8, 8, 9, 9,10,10, 7, 7, 7, 8, 8, 9, 9,10,10, 9,
+ 	 9, 9,10, 9,10,10,11,11, 9, 9, 9, 9,10,10,10,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44u7__p6_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p6_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p6_0 = {
+ 	_vq_quantthresh__44u7__p6_0,
+ 	_vq_quantmap__44u7__p6_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u7__p6_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u7__p6_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u7__p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u7__p7_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 8, 8,10,10, 8,
+ 	10,10, 5, 8, 9, 8,10,10, 8,10,10, 4, 9, 9, 9,11,
+ 	12, 8,12,11, 8,12,11,11,12,13,10,13,13, 7,12,11,
+ 	10,13,12,10,13,13, 4, 9, 9, 8,11,12, 9,11,12, 7,
+ 	11,12,10,13,13,10,12,13, 8,11,12,10,13,13,10,13,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u7__p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p7_0 = {
+ 	_vq_quantthresh__44u7__p7_0,
+ 	_vq_quantmap__44u7__p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u7__p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u7__p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44u7__p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u7__p7_1[] = {
+ 	 3, 5, 4, 6, 6, 7, 7, 8, 8, 8, 8, 5, 5, 5, 6, 6,
+ 	 7, 7, 8, 8, 8, 8, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8,
+ 	 8, 6, 6, 6, 7, 7, 8, 7, 8, 8, 8, 8, 6, 6, 6, 7,
+ 	 7, 7, 8, 8, 8, 8, 8, 7, 7, 7, 8, 7, 8, 8, 9, 9,
+ 	 9, 9, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 8,
+ 	 8, 8, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9,
+ 	 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__44u7__p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p7_1 = {
+ 	_vq_quantthresh__44u7__p7_1,
+ 	_vq_quantmap__44u7__p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u7__p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u7__p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u7__p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u7__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p8_0[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u7__p8_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8, 9, 9,10,10, 4, 6, 6, 7, 7,
+ 	 9, 9,10,10,11,11, 4, 6, 6, 7, 7, 9, 9,10,10,11,
+ 	11, 6, 8, 8, 9, 9,10,10,11,11,12,12, 6, 8, 8, 9,
+ 	 9,10,10,11,11,12,12, 8, 9, 9,10,10,11,11,12,12,
+ 	14,13, 8, 9, 9,10,10,11,11,12,12,13,13,10,10,10,
+ 	11,11,12,12,13,13,14,14,10,10,10,11,11,12,13,13,
+ 	13,14,14,11,12,11,13,12,13,14,14,14,15,15,11,11,
+ 	12,13,13,13,13,14,14,15,15,
+ };
+ 
+ static float _vq_quantthresh__44u7__p8_0[] = {
+ 	-49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, 
+ 	38.5, 49.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p8_0[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p8_0 = {
+ 	_vq_quantthresh__44u7__p8_0,
+ 	_vq_quantmap__44u7__p8_0,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u7__p8_0 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u7__p8_0,
+ 	1, -524582912, 1618345984, 4, 0,
+ 	_vq_quantlist__44u7__p8_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p8_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u7__p8_1[] = {
+ 	 3, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 6, 6, 7, 6,
+ 	 7, 7, 7, 7, 8, 8, 5, 6, 6, 6, 7, 7, 7, 7, 7, 8,
+ 	 8, 6, 7, 6, 7, 7, 7, 7, 8, 8, 8, 8, 6, 6, 7, 7,
+ 	 7, 7, 7, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44u7__p8_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p8_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p8_1 = {
+ 	_vq_quantthresh__44u7__p8_1,
+ 	_vq_quantmap__44u7__p8_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u7__p8_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u7__p8_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u7__p8_1,
+ 	NULL,
+ 	&_vq_auxt__44u7__p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p9_0[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u7__p9_0[] = {
+ 	 1, 4, 4, 9, 9, 9, 9, 9, 9, 9, 9, 5, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44u7__p9_0[] = {
+ 	-2866.5, -2229.5, -1592.5, -955.5, -318.5, 318.5, 955.5, 1592.5, 
+ 	2229.5, 2866.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p9_0[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p9_0 = {
+ 	_vq_quantthresh__44u7__p9_0,
+ 	_vq_quantmap__44u7__p9_0,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u7__p9_0 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u7__p9_0,
+ 	1, -512171520, 1630791680, 4, 0,
+ 	_vq_quantlist__44u7__p9_0,
+ 	NULL,
+ 	&_vq_auxt__44u7__p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p9_1[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u7__p9_1[] = {
+ 	 1, 4, 4, 5, 5, 7, 7,10, 9,11,11,12,12, 4, 7, 6,
+ 	 8, 8, 9, 9,11,10,13,12,13,13, 4, 6, 7, 8, 8, 9,
+ 	 9,10,11,13,13,12,13, 5, 8, 8,10, 9,12,11,12,12,
+ 	13,13,15,14, 6, 8, 8,10,10,11,11,13,12,13,14,14,
+ 	15, 8,10,10,12,11,13,13,14,15,15,16,15,16, 8, 9,
+ 	10,12,12,13,13,16,15,15,15,15,15,10,11,11,14,13,
+ 	14,14,16,16,15,16,16,16,10,12,12,12,14,14,14,15,
+ 	16,15,16,15,16,11,12,12,14,14,16,16,15,16,16,16,
+ 	16,16,12,12,13,13,15,15,14,15,16,16,16,16,16,12,
+ 	14,14,15,14,16,16,16,16,16,16,16,16,13,14,13,14,
+ 	15,16,15,16,16,16,16,16,16,
+ };
+ 
+ static float _vq_quantthresh__44u7__p9_1[] = {
+ 	-269.5, -220.5, -171.5, -122.5, -73.5, -24.5, 24.5, 73.5, 
+ 	122.5, 171.5, 220.5, 269.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p9_1[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p9_1 = {
+ 	_vq_quantthresh__44u7__p9_1,
+ 	_vq_quantmap__44u7__p9_1,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u7__p9_1 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u7__p9_1,
+ 	1, -518889472, 1622704128, 4, 0,
+ 	_vq_quantlist__44u7__p9_1,
+ 	NULL,
+ 	&_vq_auxt__44u7__p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u7__p9_2[] = {
+ 	24,
+ 	23,
+ 	25,
+ 	22,
+ 	26,
+ 	21,
+ 	27,
+ 	20,
+ 	28,
+ 	19,
+ 	29,
+ 	18,
+ 	30,
+ 	17,
+ 	31,
+ 	16,
+ 	32,
+ 	15,
+ 	33,
+ 	14,
+ 	34,
+ 	13,
+ 	35,
+ 	12,
+ 	36,
+ 	11,
+ 	37,
+ 	10,
+ 	38,
+ 	9,
+ 	39,
+ 	8,
+ 	40,
+ 	7,
+ 	41,
+ 	6,
+ 	42,
+ 	5,
+ 	43,
+ 	4,
+ 	44,
+ 	3,
+ 	45,
+ 	2,
+ 	46,
+ 	1,
+ 	47,
+ 	0,
+ 	48,
+ };
+ 
+ static long _vq_lengthlist__44u7__p9_2[] = {
+ 	 2, 4, 3, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44u7__p9_2[] = {
+ 	-23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, 
+ 	-15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, 
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ 	8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 
+ 	16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 
+ };
+ 
+ static long _vq_quantmap__44u7__p9_2[] = {
+ 	   47,   45,   43,   41,   39,   37,   35,   33,
+ 	   31,   29,   27,   25,   23,   21,   19,   17,
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,   18,   20,   22,   24,   26,   28,   30,
+ 	   32,   34,   36,   38,   40,   42,   44,   46,
+ 	   48,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u7__p9_2 = {
+ 	_vq_quantthresh__44u7__p9_2,
+ 	_vq_quantmap__44u7__p9_2,
+ 	49,
+ 	49
+ };
+ 
+ static static_codebook _44u7__p9_2 = {
+ 	1, 49,
+ 	_vq_lengthlist__44u7__p9_2,
+ 	1, -526909440, 1611661312, 6, 0,
+ 	_vq_quantlist__44u7__p9_2,
+ 	NULL,
+ 	&_vq_auxt__44u7__p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u7__short[] = {
+ 	 6,14,18,18,18,18,17,17,17,17, 4, 8,11,12,13,11,
+ 	13,11,16,17, 6, 7, 8, 9, 8, 9,12, 9,14,17, 6, 9,
+ 	11,12,12,12,15,12,17,17, 6, 6, 6, 8, 5, 7, 7, 8,
+ 	14,17, 7, 9, 9,11, 8,10,10,11,14,16, 8, 7, 7, 8,
+ 	 5, 7, 4, 5,11,17, 9, 8,10, 9, 7, 9, 4, 2, 9,16,
+ 	15,14,16,14, 8,14, 4, 3, 7,16,17,17,16,17, 9,15,
+ 	 6, 5,10,17,
+ };
+ 
+ static static_codebook _huff_book__44u7__short = {
+ 	2, 100,
+ 	_huff_lengthlist__44u7__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u8__long[] = {
+ 	 3, 9,13,13,14,13,13,13,13,14, 5, 4, 6, 8,10,12,
+ 	13,15,13,14, 9, 5, 3, 5, 8,10,12,14,13,13,11, 7,
+ 	 4, 3, 5, 7,10,11,12,14,11, 9, 7, 4, 4, 6, 8,10,
+ 	13,14,10,11, 9, 7, 6, 6, 7, 9,12,15,12,11,11, 8,
+ 	 7, 6, 6, 7,11,14,12,12,12,10, 8, 7, 6, 7, 9,13,
+ 	11,12,13,12,11, 8, 8, 7, 9,12,11,14,16,16,15,11,
+ 	10, 9, 9,11,
+ };
+ 
+ static static_codebook _huff_book__44u8__long = {
+ 	2, 100,
+ 	_huff_lengthlist__44u8__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u8__short[] = {
+ 	 7,15,18,18,18,18,18,18,18,18, 4, 6, 9,10,10,11,
+ 	16,15,18,18, 5, 6, 6, 6, 8,10,15,15,18,18, 5, 6,
+ 	 5, 4, 6, 9,12,15,17,18, 7, 6, 6, 5, 6, 5, 8,11,
+ 	15,18,10, 9, 9, 7, 4, 3, 6,10,16,17,13,12,12, 6,
+ 	 6, 4, 5, 9,14,16,16,17,13, 5, 5, 4, 5, 8,13,16,
+ 	17,17,14, 7, 7, 6, 7,10,15,17,17,17,17,11,12,12,
+ 	12,14,17,17,
+ };
+ 
+ static static_codebook _huff_book__44u8__short = {
+ 	2, 100,
+ 	_huff_lengthlist__44u8__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u8_p1_0[] = {
+ 	 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 8, 9, 9, 7,
+ 	 8, 9, 5, 7, 7, 7, 9, 8, 8, 9, 9, 5, 7, 7, 7, 9,
+ 	 9, 7, 9, 9, 8, 9, 9, 9,10,11, 9,10,10, 7, 9, 9,
+ 	 9,10, 9, 9,10,11, 5, 7, 7, 7, 9, 9, 8, 9, 9, 7,
+ 	 9, 9, 9,11,10, 9, 9,10, 8, 9, 9, 9,10,10, 9,11,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44u8_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p1_0 = {
+ 	_vq_quantthresh__44u8_p1_0,
+ 	_vq_quantmap__44u8_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u8_p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u8_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u8_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u8_p2_0[] = {
+ 	 4, 5, 5, 8, 8, 6, 7, 6, 9, 9, 5, 6, 7, 9, 9, 8,
+ 	 9, 9,11,11, 8, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 8,
+ 	 8,10,10, 7, 7, 8, 9,10, 9,10,10,12,12, 9, 9,10,
+ 	11,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 8,10,
+ 	10, 9,10, 9,12,11, 9,10,10,12,12, 8, 9, 9,11,11,
+ 	 9,10,10,12,12, 9,10,10,12,12,11,12,12,13,13,11,
+ 	11,12,13,13, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
+ 	10,12,12,11,12,11,13,13,11,12,12,14,13, 5, 7, 7,
+ 	 9, 9, 7, 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,
+ 	12, 9,10,10,11,12, 7, 8, 8,10,10, 8, 9, 9,11,11,
+ 	 8, 9, 9,10,11,10,11,11,12,12,10,10,11,12,13, 6,
+ 	 8, 8,10,10, 7, 8, 8,11,10, 8, 8, 9,10,11,10,11,
+ 	10,12,11,10,11,11,12,12, 9,10,10,12,12,10,11,11,
+ 	13,13,10,11,11,13,13,12,12,13,13,14,12,12,13,14,
+ 	14, 9,10,10,12,12, 9,10,10,12,12,10,11,11,12,13,
+ 	11,12,11,14,12,12,12,12,14,14, 5, 7, 7, 9, 9, 7,
+ 	 8, 8,10,10, 7, 8, 8,10,10, 9,10,10,12,11, 9,10,
+ 	10,12,12, 6, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 8,
+ 	10,11,10,11,11,13,12,10,10,11,11,13, 7, 8, 8,10,
+ 	10, 8, 9, 9,11,10, 8, 9, 9,11,11,10,11,10,13,12,
+ 	10,11,11,12,12, 9,10,10,12,12,10,11,11,13,12, 9,
+ 	10,10,12,12,12,13,13,14,14,11,11,12,12,14, 9,10,
+ 	10,12,12,10,11,11,13,13,10,11,11,13,12,12,13,12,
+ 	14,14,12,13,12,14,13, 8, 9, 9,11,11, 9,10,10,12,
+ 	12, 9,10,10,12,12,11,12,12,14,13,11,12,12,13,14,
+ 	 9,10,10,12,12,10,11,11,13,13,10,11,11,13,13,12,
+ 	13,13,14,15,12,12,13,14,14, 9,10,10,12,12, 9,11,
+ 	10,13,12,10,11,11,12,13,12,13,12,14,13,12,12,13,
+ 	14,14,11,12,12,14,14,12,12,12,14,14,12,13,13,14,
+ 	14,13,13,14,14,16,14,14,14,15,15,11,12,12,14,14,
+ 	11,12,11,14,13,12,12,13,14,14,13,14,12,15,13,14,
+ 	14,14,15,16, 8, 9, 9,11,11, 9,10,10,12,12, 9,10,
+ 	10,12,12,11,12,12,14,13,11,12,12,13,14, 9,10,10,
+ 	12,12,10,11,10,13,12, 9,10,11,12,13,12,13,12,14,
+ 	14,12,12,13,13,14, 9,10,10,12,12,10,11,11,13,13,
+ 	10,11,11,13,13,12,12,12,14,14,12,13,12,15,14,11,
+ 	12,11,14,13,12,13,12,14,14,11,11,12,13,14,13,14,
+ 	14,16,15,13,12,14,13,15,11,12,12,13,14,12,13,13,
+ 	14,14,12,13,12,14,14,14,14,14,15,16,13,14,13,15,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44u8_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p2_0 = {
+ 	_vq_quantthresh__44u8_p2_0,
+ 	_vq_quantmap__44u8_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u8_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u8_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u8_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p3_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u8_p3_0[] = {
+ 	 3, 4, 4, 5, 5, 7, 7, 9, 9, 4, 5, 4, 6, 6, 7, 7,
+ 	 9, 9, 4, 4, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 7,
+ 	 8, 8,10,10, 6, 6, 6, 7, 7, 8, 8, 9,10, 7, 7, 7,
+ 	 8, 8, 9, 9,11,10, 7, 7, 7, 8, 8, 9, 9,10,11, 9,
+ 	 9, 9,10,10,11,10,12,12, 9, 9, 9,10,10,10,11,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__44u8_p3_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p3_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p3_0 = {
+ 	_vq_quantthresh__44u8_p3_0,
+ 	_vq_quantmap__44u8_p3_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u8_p3_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u8_p3_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u8_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p4_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44u8_p4_0[] = {
+ 	 4, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8,10,10,11,11,11,
+ 	11, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,11,
+ 	12,12, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9,10,10,11,
+ 	11,11,12, 6, 6, 6, 7, 7, 8, 7, 9, 9, 9, 9,10,10,
+ 	11,11,12,12, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9,10,
+ 	10,11,11,12,12, 7, 7, 7, 8, 7, 9, 8, 9, 9,10, 9,
+ 	11,10,11,11,12,12, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9,
+ 	10,10,10,11,11,12,12, 8, 8, 8, 9, 9, 9, 9,10,10,
+ 	10,10,11,11,11,11,12,12, 8, 8, 8, 8, 9, 9, 9,10,
+ 	10,10,10,11,11,11,12,12,12, 9, 9, 9, 9, 9,10, 9,
+ 	10,10,11,10,11,11,12,12,12,12, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,11,11,11,11,12,12,12,13,10,10,10,10,10,
+ 	11,10,11,11,11,11,12,12,12,12,12,13,10,10,10,10,
+ 	10,10,11,11,11,11,11,12,12,12,12,13,12,11,11,11,
+ 	11,11,11,11,12,12,12,12,12,12,12,13,13,13,11,11,
+ 	11,11,11,11,11,12,12,12,12,12,12,13,12,13,13,11,
+ 	12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,
+ 	12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u8_p4_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p4_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p4_0 = {
+ 	_vq_quantthresh__44u8_p4_0,
+ 	_vq_quantmap__44u8_p4_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44u8_p4_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44u8_p4_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44u8_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p5_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u8_p5_0[] = {
+ 	 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 8, 7, 7, 8, 9, 7,
+ 	 9, 9, 5, 7, 8, 7, 9, 9, 7, 9, 8, 5, 7, 7, 8, 9,
+ 	 9, 7, 9, 9, 7, 9, 9, 8, 9,11, 9,11,11, 7, 9, 9,
+ 	 9,11,10, 9,11,11, 5, 7, 8, 7, 9, 9, 8, 9, 9, 7,
+ 	 9, 9, 9,11,11, 9,10,11, 7, 9, 9, 9,11,11, 8,11,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u8_p5_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p5_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p5_0 = {
+ 	_vq_quantthresh__44u8_p5_0,
+ 	_vq_quantmap__44u8_p5_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u8_p5_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u8_p5_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44u8_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p5_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u8_p5_1[] = {
+ 	 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 8, 5, 6, 6, 6, 6,
+ 	 7, 7, 7, 7, 8, 8, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8,
+ 	 8, 6, 6, 6, 7, 7, 7, 7, 8, 7, 8, 8, 6, 6, 6, 7,
+ 	 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8,
+ 	 8, 8, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 7, 7, 7,
+ 	 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44u8_p5_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p5_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p5_1 = {
+ 	_vq_quantthresh__44u8_p5_1,
+ 	_vq_quantmap__44u8_p5_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u8_p5_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u8_p5_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u8_p5_1,
+ 	NULL,
+ 	&_vq_auxt__44u8_p5_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u8_p6_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 8, 9,10,10,10, 5, 6, 6,
+ 	 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 6, 6, 7, 7, 8,
+ 	 9, 9, 9,10,10,11,11, 7, 7, 7, 8, 8, 9, 9,10,10,
+ 	11,11,11,11, 7, 7, 7, 8, 8, 9, 9,10,10,10,11,11,
+ 	11, 8, 9, 9, 9, 9,10,10,10,10,11,11,12,12, 8, 9,
+ 	 9, 9, 9,10,10,10,11,11,11,12,12, 8, 9, 9,10,10,
+ 	11,10,11,11,12,12,12,12, 9, 9, 9,10,10,11,11,11,
+ 	11,12,12,12,12,10,10,10,11,11,11,11,12,12,12,12,
+ 	13,13,10,10,10,11,11,11,11,12,12,12,12,13,13,11,
+ 	11,11,12,12,12,12,12,12,13,13,13,13,11,11,11,12,
+ 	12,12,12,12,12,13,13,13,13,
+ };
+ 
+ static float _vq_quantthresh__44u8_p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p6_0 = {
+ 	_vq_quantthresh__44u8_p6_0,
+ 	_vq_quantmap__44u8_p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u8_p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u8_p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44u8_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u8_p6_1[] = {
+ 	 3, 4, 4, 5, 5, 4, 5, 5, 5, 5, 4, 5, 5, 5, 5, 5,
+ 	 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44u8_p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p6_1 = {
+ 	_vq_quantthresh__44u8_p6_1,
+ 	_vq_quantmap__44u8_p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u8_p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44u8_p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u8_p6_1,
+ 	NULL,
+ 	&_vq_auxt__44u8_p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u8_p7_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 8, 9, 9,10,10, 4, 6, 6,
+ 	 8, 8, 9, 8, 9, 9,10,10,11,11, 4, 6, 6, 8, 8, 8,
+ 	 9, 9, 9,10,10,11,11, 7, 8, 8, 9, 9,10,10,10,10,
+ 	11,11,12,12, 7, 8, 8, 9, 9,10,10,10,10,11,11,12,
+ 	12, 8, 9, 9,10,10,10,10,11,11,12,12,13,13, 8, 9,
+ 	 9,10,10,10,11,11,11,12,13,13,13, 9, 9, 9,10,10,
+ 	11,11,12,12,13,13,14,14, 9, 9, 9,10,10,11,11,12,
+ 	12,13,13,14,14,10,10,10,11,11,12,12,13,13,14,14,
+ 	14,14,10,10,11,11,12,12,12,13,13,13,14,14,15,11,
+ 	11,11,12,12,13,13,14,14,14,14,16,15,11,11,11,12,
+ 	12,13,13,14,14,14,14,16,15,
+ };
+ 
+ static float _vq_quantthresh__44u8_p7_0[] = {
+ 	-60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 
+ 	27.5, 38.5, 49.5, 60.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p7_0 = {
+ 	_vq_quantthresh__44u8_p7_0,
+ 	_vq_quantmap__44u8_p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u8_p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u8_p7_0,
+ 	1, -523206656, 1618345984, 4, 0,
+ 	_vq_quantlist__44u8_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u8_p7_1[] = {
+ 	 4, 5, 5, 6, 6, 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 5, 6, 6, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 6, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8,
+ 	 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 7, 7, 7,
+ 	 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8,
+ 	 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7,
+ 	 7, 8, 8, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44u8_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p7_1 = {
+ 	_vq_quantthresh__44u8_p7_1,
+ 	_vq_quantmap__44u8_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u8_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u8_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u8_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u8_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p8_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44u8_p8_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 7, 9, 8,10,10,11,11, 4,
+ 	 6, 6, 8, 8,10,10, 9, 9,10,10,11,10,12,12, 4, 6,
+ 	 6, 8, 8, 9,10, 9, 9,10,10,11,11,11,12, 7, 8, 8,
+ 	10,10,11,11,11,10,11,11,13,12,13,12, 7, 8, 8,10,
+ 	10,11,11,10,11,11,11,12,12,13,13, 8,10, 9,11,11,
+ 	12,12,11,11,12,12,13,13,14,14, 8, 9, 9,11,11,12,
+ 	12,11,11,12,12,14,13,13,13, 8, 9, 9,11,10,12,11,
+ 	12,12,13,13,14,13,14,13, 8, 9, 9,11,11,11,12,12,
+ 	12,13,13,13,14,14,14, 9,10,10,12,11,12,12,13,13,
+ 	14,14,15,13,14,14, 9,10,10,11,12,12,12,13,13,14,
+ 	14,15,14,14,14,10,11,11,12,12,13,13,14,13,14,14,
+ 	15,14,15,15,10,11,11,12,12,13,13,13,14,14,14,14,
+ 	15,16,15,11,12,12,13,12,14,14,14,13,15,14,16,15,
+ 	16,15,11,12,12,13,13,13,14,14,15,15,15,15,16,15,
+ 	15,
+ };
+ 
+ static float _vq_quantthresh__44u8_p8_0[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p8_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p8_0 = {
+ 	_vq_quantthresh__44u8_p8_0,
+ 	_vq_quantmap__44u8_p8_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44u8_p8_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44u8_p8_0,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__44u8_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p8_1[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__44u8_p8_1[] = {
+ 	 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 7, 6, 7, 7, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7,
+ 	 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 8, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9,10, 9,10, 8, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10, 9,10,10, 9,10, 9,10, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9,10,10, 9,10,10, 9,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,
+ 	10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9,10, 9,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9,10, 9, 9,10,10,10,10,10,10,10,10,
+ 	10, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,
+ 	10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,
+ 	10,10, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9,
+ 	 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44u8_p8_1[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p8_1[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p8_1 = {
+ 	_vq_quantthresh__44u8_p8_1,
+ 	_vq_quantmap__44u8_p8_1,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _44u8_p8_1 = {
+ 	2, 441,
+ 	_vq_lengthlist__44u8_p8_1,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__44u8_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44u8_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p9_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u8_p9_0[] = {
+ 	 1, 4, 4, 9, 9, 9, 9, 9, 9, 5, 9, 9, 8, 8, 8, 8,
+ 	 8, 8, 4, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__44u8_p9_0[] = {
+ 	-3258.5, -2327.5, -1396.5, -465.5, 465.5, 1396.5, 2327.5, 3258.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p9_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p9_0 = {
+ 	_vq_quantthresh__44u8_p9_0,
+ 	_vq_quantmap__44u8_p9_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u8_p9_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u8_p9_0,
+ 	1, -511895552, 1631393792, 4, 0,
+ 	_vq_quantlist__44u8_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44u8_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p9_1[] = {
+ 	9,
+ 	8,
+ 	10,
+ 	7,
+ 	11,
+ 	6,
+ 	12,
+ 	5,
+ 	13,
+ 	4,
+ 	14,
+ 	3,
+ 	15,
+ 	2,
+ 	16,
+ 	1,
+ 	17,
+ 	0,
+ 	18,
+ };
+ 
+ static long _vq_lengthlist__44u8_p9_1[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 7, 8, 9, 9,10,10,11,11,12,
+ 	12,12,12, 4, 7, 6, 9, 9, 9, 9, 9, 8, 9, 9,11,10,
+ 	12,11,13,12,13,14, 4, 6, 6, 9, 9, 9, 9, 8, 9, 9,
+ 	10,10,11,12,12,12,12,13,12, 7, 9, 8,11,10,10,10,
+ 	10,10,11,11,12,11,14,12,13,14,14,13, 7, 8, 9,10,
+ 	10,10,10,10,10,11,11,12,13,13,13,14,15,15,13, 8,
+ 	 9, 9,11,11,11,11,11,12,13,12,14,14,14,14,14,14,
+ 	15,13, 8, 9, 9,10,11,11,11,12,12,13,12,13,14,13,
+ 	15,14,15,15,15, 8, 9, 9,10,10,12,11,13,12,13,13,
+ 	14,14,13,15,14,15,14,14, 8, 9, 9,10,11,12,12,13,
+ 	13,14,14,14,14,15,15,15,12,14,14, 9,11,10,11,11,
+ 	14,12,13,14,15,14,14,14,14,15,15,15,15,15, 9,10,
+ 	11,11,12,12,13,13,14,14,14,14,15,15,14,15,15,15,
+ 	15,10,11,11,12,12,14,14,13,14,14,15,15,15,15,15,
+ 	15,15,15,15,10,11,11,12,13,13,13,14,14,15,15,14,
+ 	14,15,15,15,15,14,15,11,12,13,15,13,14,15,15,15,
+ 	15,14,15,15,15,15,15,15,15,15,11,12,12,14,14,14,
+ 	13,14,15,15,14,15,15,15,15,15,15,15,15,13,13,14,
+ 	13,13,14,14,15,14,15,15,15,15,15,15,15,15,15,15,
+ 	11,14,13,14,14,15,14,14,15,15,15,15,15,15,15,15,
+ 	15,15,15,12,12,13,14,13,13,14,15,14,15,15,15,15,
+ 	15,15,15,15,15,15,13,13,14,14,13,15,14,14,15,15,
+ 	14,15,15,15,15,15,15,15,15,
+ };
+ 
+ static float _vq_quantthresh__44u8_p9_1[] = {
+ 	-416.5, -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, 
+ 	-24.5, 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, 
+ 	367.5, 416.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p9_1[] = {
+ 	   17,   15,   13,   11,    9,    7,    5,    3,
+ 	    1,    0,    2,    4,    6,    8,   10,   12,
+ 	   14,   16,   18,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p9_1 = {
+ 	_vq_quantthresh__44u8_p9_1,
+ 	_vq_quantmap__44u8_p9_1,
+ 	19,
+ 	19
+ };
+ 
+ static static_codebook _44u8_p9_1 = {
+ 	2, 361,
+ 	_vq_lengthlist__44u8_p9_1,
+ 	1, -518287360, 1622704128, 5, 0,
+ 	_vq_quantlist__44u8_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44u8_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u8_p9_2[] = {
+ 	24,
+ 	23,
+ 	25,
+ 	22,
+ 	26,
+ 	21,
+ 	27,
+ 	20,
+ 	28,
+ 	19,
+ 	29,
+ 	18,
+ 	30,
+ 	17,
+ 	31,
+ 	16,
+ 	32,
+ 	15,
+ 	33,
+ 	14,
+ 	34,
+ 	13,
+ 	35,
+ 	12,
+ 	36,
+ 	11,
+ 	37,
+ 	10,
+ 	38,
+ 	9,
+ 	39,
+ 	8,
+ 	40,
+ 	7,
+ 	41,
+ 	6,
+ 	42,
+ 	5,
+ 	43,
+ 	4,
+ 	44,
+ 	3,
+ 	45,
+ 	2,
+ 	46,
+ 	1,
+ 	47,
+ 	0,
+ 	48,
+ };
+ 
+ static long _vq_lengthlist__44u8_p9_2[] = {
+ 	 2, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__44u8_p9_2[] = {
+ 	-23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, 
+ 	-15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, 
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ 	8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 
+ 	16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 
+ };
+ 
+ static long _vq_quantmap__44u8_p9_2[] = {
+ 	   47,   45,   43,   41,   39,   37,   35,   33,
+ 	   31,   29,   27,   25,   23,   21,   19,   17,
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,   18,   20,   22,   24,   26,   28,   30,
+ 	   32,   34,   36,   38,   40,   42,   44,   46,
+ 	   48,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u8_p9_2 = {
+ 	_vq_quantthresh__44u8_p9_2,
+ 	_vq_quantmap__44u8_p9_2,
+ 	49,
+ 	49
+ };
+ 
+ static static_codebook _44u8_p9_2 = {
+ 	1, 49,
+ 	_vq_lengthlist__44u8_p9_2,
+ 	1, -526909440, 1611661312, 6, 0,
+ 	_vq_quantlist__44u8_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44u8_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u9__long[] = {
+ 	 3, 9,13,13,14,14,13,14,14,13, 5, 5, 9,10,12,13,
+ 	13,14,14,14, 9, 5, 6, 6, 8,11,12,14,14,14,11, 7,
+ 	 5, 3, 5, 8,10,12,13,12,12,10, 7, 4, 3, 5, 8,10,
+ 	12,13,10,12, 9, 7, 4, 4, 6, 8,11,13,12,12,11, 9,
+ 	 7, 5, 6, 7, 9,13,12,12,12,11, 8, 7, 6, 6, 8,12,
+ 	12,12,13,12,10, 9, 7, 7, 8,11,11,13,15,15,14,12,
+ 	10, 9, 9,10,
+ };
+ 
+ static static_codebook _huff_book__44u9__long = {
+ 	2, 100,
+ 	_huff_lengthlist__44u9__long,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__44u9__short[] = {
+ 	10,17,18,18,18,18,18,18,18,18, 5, 8,12,13,14,13,
+ 	16,17,16,17, 5, 6, 8, 8,10, 9,12,16,16,17, 5, 6,
+ 	 7, 5, 6, 9,12,15,16,16, 7, 6, 6, 4, 5, 7, 9,14,
+ 	15,17,10, 8, 8, 6, 6, 3, 5, 9,13,18,14,11,11,10,
+ 	 6, 3, 4, 7,13,17,15,16,16,10, 5, 6, 4, 4, 9,13,
+ 	18,18,18,11, 6, 8, 5, 6,10,15,18,18,18,14,10,11,
+ 	 9,10,16,18,
+ };
+ 
+ static static_codebook _huff_book__44u9__short = {
+ 	2, 100,
+ 	_huff_lengthlist__44u9__short,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u9_p1_0[] = {
+ 	 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 7, 7, 8, 9, 9, 7,
+ 	 9, 9, 5, 7, 7, 7, 9, 9, 7, 9, 9, 5, 7, 7, 7, 9,
+ 	 9, 7, 9, 9, 8, 9, 9, 9,10,11, 9,11,10, 7, 9, 9,
+ 	 9,11,10, 9,10,11, 5, 7, 7, 7, 9, 9, 7, 9, 9, 7,
+ 	 9, 9, 9,11,11, 9,10,11, 8, 9, 9, 9,10,10, 9,11,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__44u9_p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p1_0 = {
+ 	_vq_quantthresh__44u9_p1_0,
+ 	_vq_quantmap__44u9_p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u9_p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u9_p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__44u9_p1_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p2_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u9_p2_0[] = {
+ 	 3, 6, 5, 8, 8, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
+ 	 9, 9,11,10, 8, 9, 9,10,11, 6, 7, 7, 9, 9, 7, 8,
+ 	 8,10,10, 7, 8, 8, 9,10, 9,10,10,11,11, 9, 9,10,
+ 	11,11, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 8,10,
+ 	10, 9,10, 9,11,11, 9,10,10,11,11, 8, 9, 9,11,11,
+ 	 9,10,10,12,11, 9,10,10,11,11,11,12,12,13,13,11,
+ 	11,11,12,13, 8, 9, 9,11,11, 9,10,10,11,11, 9,10,
+ 	10,12,12,11,11,11,13,12,11,11,11,13,13, 6, 7, 7,
+ 	 9, 9, 7, 8, 8,10, 9, 7, 8, 8, 9,10, 9,10,10,11,
+ 	11, 9,10,10,11,11, 7, 8, 8,10,10, 8, 9, 9,10,10,
+ 	 8, 9, 9,10,10,10,10,10,12,12,10,10,10,11,12, 7,
+ 	 8, 8,10,10, 8, 9, 8,10,10, 8, 9, 9,10,10, 9,10,
+ 	10,12,11,10,10,10,12,12, 9,10,10,12,11,10,10,10,
+ 	12,12,10,10,10,12,12,12,12,12,12,13,11,12,12,13,
+ 	13, 9,10,10,11,11, 9,10,10,12,11,10,10,10,12,12,
+ 	11,12,11,13,12,12,12,12,13,13, 6, 7, 7, 9, 9, 7,
+ 	 8, 8,10, 9, 7, 8, 8, 9,10, 9,10,10,12,11, 9,10,
+ 	10,11,11, 7, 8, 8,10, 9, 8, 9, 9,11,10, 8, 8, 9,
+ 	10,10,10,10,10,12,12,10,10,10,11,12, 7, 8, 8,10,
+ 	10, 8, 9, 9,10,10, 8, 9, 9,10,10,10,10,10,12,12,
+ 	10,10,10,12,12, 9,10,10,11,11,10,11,10,12,12, 9,
+ 	10,10,11,12,11,12,12,13,13,11,11,12,11,13, 9,10,
+ 	10,11,12,10,10,10,12,12,10,10,10,12,12,11,12,12,
+ 	13,13,12,12,12,13,13, 8, 9, 9,11,11, 9,10,10,12,
+ 	11, 9,10,10,11,12,11,12,12,13,13,11,11,12,13,13,
+ 	 9,10,10,12,12,10,10,10,12,12,10,11,10,12,12,12,
+ 	12,12,13,13,12,12,12,13,13, 9,10,10,12,11,10,10,
+ 	10,12,11,10,10,10,12,12,11,12,12,13,13,12,12,12,
+ 	13,14,11,12,12,13,13,11,12,12,13,13,11,12,12,13,
+ 	13,13,13,14,13,15,13,13,13,14,14,11,11,11,13,13,
+ 	11,12,11,13,13,11,12,12,13,13,12,13,12,14,12,13,
+ 	13,13,15,14, 8, 9, 9,11,11, 9,10,10,11,11, 9,10,
+ 	10,11,12,11,12,11,13,13,11,12,12,13,13, 9,10,10,
+ 	11,11,10,11,10,12,12, 9,10,10,12,12,12,12,12,13,
+ 	13,11,11,12,12,13, 9,10,10,12,12,10,10,11,12,12,
+ 	10,11,10,12,12,11,12,12,13,13,12,12,12,13,13,11,
+ 	11,11,13,13,11,12,12,13,13,11,11,12,13,13,13,13,
+ 	13,14,14,12,12,13,12,14,11,11,12,13,13,12,12,12,
+ 	14,13,11,12,12,13,13,13,13,13,14,14,13,13,13,14,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__44u9_p2_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p2_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p2_0 = {
+ 	_vq_quantthresh__44u9_p2_0,
+ 	_vq_quantmap__44u9_p2_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u9_p2_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__44u9_p2_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u9_p2_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p3_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__44u9_p3_0[] = {
+ 	 3, 4, 4, 5, 5, 7, 7, 9, 8, 4, 5, 5, 6, 6, 7, 7,
+ 	 9, 9, 4, 5, 5, 6, 6, 7, 7, 9, 9, 5, 6, 6, 7, 6,
+ 	 8, 7, 9, 9, 5, 6, 6, 6, 7, 7, 8, 9, 9, 7, 7, 7,
+ 	 8, 7, 9, 8,10,10, 7, 7, 7, 7, 8, 8, 9,10,10, 9,
+ 	 9, 9, 9, 9,10,10,11,11, 9, 9, 9, 9, 9,10,10,11,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__44u9_p3_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p3_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p3_0 = {
+ 	_vq_quantthresh__44u9_p3_0,
+ 	_vq_quantmap__44u9_p3_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _44u9_p3_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__44u9_p3_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__44u9_p3_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p4_0[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__44u9_p4_0[] = {
+ 	 4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+ 	11, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8,10, 9,11,10,
+ 	12,11, 5, 5, 5, 6, 6, 7, 7, 8, 8, 8, 8, 9,10,10,
+ 	11,11,11, 6, 6, 6, 7, 6, 7, 7, 8, 8, 9, 9,10,10,
+ 	11,11,12,12, 6, 6, 6, 6, 7, 7, 7, 8, 8, 9, 9,10,
+ 	10,11,11,12,12, 7, 7, 7, 7, 7, 8, 8, 9, 8, 9, 9,
+ 	10,10,11,11,12,12, 7, 7, 7, 7, 7, 8, 8, 8, 9, 9,
+ 	 9,10,10,11,11,12,12, 8, 8, 8, 8, 8, 9, 8, 9, 9,
+ 	10,10,11,10,12,11,12,12, 8, 8, 8, 8, 8, 8, 9, 9,
+ 	 9,10,10,10,11,11,12,12,13, 8, 8, 8, 9, 9, 9, 9,
+ 	10,10,11,10,11,11,12,12,13,12, 8, 8, 9, 9, 9, 9,
+ 	 9,10,10,10,11,11,11,12,12,12,13, 9,10, 9,10,10,
+ 	10,10,11,10,11,11,12,11,13,12,13,13, 9, 9,10,10,
+ 	10,10,10,10,11,11,11,11,12,12,13,13,13,10,11,10,
+ 	11,11,11,11,12,11,12,12,13,12,13,13,14,13,10,10,
+ 	11,11,11,11,11,11,12,12,12,12,13,13,13,13,14,11,
+ 	12,11,12,12,12,12,12,12,13,13,13,13,14,13,14,14,
+ 	11,11,12,12,12,12,12,12,12,12,13,13,13,13,14,14,
+ 	14,
+ };
+ 
+ static float _vq_quantthresh__44u9_p4_0[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p4_0[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p4_0 = {
+ 	_vq_quantthresh__44u9_p4_0,
+ 	_vq_quantmap__44u9_p4_0,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _44u9_p4_0 = {
+ 	2, 289,
+ 	_vq_lengthlist__44u9_p4_0,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__44u9_p4_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p5_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__44u9_p5_0[] = {
+ 	 1, 5, 5, 5, 7, 7, 5, 7, 7, 5, 8, 7, 7, 8, 9, 7,
+ 	 8, 9, 5, 7, 8, 7, 9, 8, 7, 9, 8, 5, 8, 8, 8, 9,
+ 	 9, 7, 9, 9, 7, 9, 9, 8, 9,11, 9,11,10, 7, 9, 9,
+ 	 9,11, 9, 9,10,11, 5, 7, 8, 7, 9, 9, 8, 9, 9, 7,
+ 	 9, 9, 9,11,10, 9, 9,11, 7, 9, 9, 9,10,11, 8,11,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u9_p5_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p5_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p5_0 = {
+ 	_vq_quantthresh__44u9_p5_0,
+ 	_vq_quantmap__44u9_p5_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _44u9_p5_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__44u9_p5_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__44u9_p5_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p5_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u9_p5_1[] = {
+ 	 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6,
+ 	 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,
+ 	 7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8,
+ 	 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7,
+ 	 7, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 8, 8,
+ 	 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 7, 7,
+ 	 7, 7, 7, 8, 8, 8, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44u9_p5_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p5_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p5_1 = {
+ 	_vq_quantthresh__44u9_p5_1,
+ 	_vq_quantmap__44u9_p5_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u9_p5_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u9_p5_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u9_p5_1,
+ 	NULL,
+ 	&_vq_auxt__44u9_p5_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u9_p6_0[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 4, 5, 5,
+ 	 7, 7, 8, 8, 8, 8,10,10,11,11, 4, 5, 5, 7, 7, 8,
+ 	 8, 8, 8,10,10,11,11, 6, 7, 7, 8, 7, 8, 8, 9, 9,
+ 	10,10,11,11, 6, 7, 7, 8, 7, 8, 8, 9, 9,10,10,11,
+ 	11, 7, 8, 8, 8, 8, 9, 9, 9,10,11,11,12,12, 7, 8,
+ 	 8, 8, 8, 9, 9,10, 9,11,11,12,12, 8, 9, 8, 9, 9,
+ 	10,10,10,10,11,11,12,12, 8, 8, 8, 9, 9,10, 9,10,
+ 	10,11,11,12,12, 9,10,10,10,10,11,11,11,11,12,12,
+ 	13,13, 9,10,10,10,10,11,11,11,11,12,12,13,12,10,
+ 	11,11,11,11,12,12,12,12,12,12,13,13,10,11,11,11,
+ 	11,12,12,12,12,13,12,13,13,
+ };
+ 
+ static float _vq_quantthresh__44u9_p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p6_0 = {
+ 	_vq_quantthresh__44u9_p6_0,
+ 	_vq_quantmap__44u9_p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u9_p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u9_p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__44u9_p6_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__44u9_p6_1[] = {
+ 	 4, 4, 4, 5, 5, 4, 5, 4, 5, 5, 4, 4, 5, 5, 5, 5,
+ 	 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ };
+ 
+ static float _vq_quantthresh__44u9_p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p6_1 = {
+ 	_vq_quantthresh__44u9_p6_1,
+ 	_vq_quantmap__44u9_p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _44u9_p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__44u9_p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__44u9_p6_1,
+ 	NULL,
+ 	&_vq_auxt__44u9_p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p7_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__44u9_p7_0[] = {
+ 	 1, 5, 4, 6, 6, 7, 7, 8, 8, 9, 9,10,10, 5, 6, 6,
+ 	 7, 7, 8, 8, 9, 9,10,10,11,11, 5, 6, 6, 7, 7, 8,
+ 	 8, 9, 9,10,10,11,11, 6, 7, 7, 8, 8, 9, 9,10,10,
+ 	11,11,12,12, 7, 7, 7, 8, 8, 9, 9,10,10,11,11,12,
+ 	12, 8, 8, 8, 9, 9,10,10,11,10,12,12,13,12, 8, 8,
+ 	 8, 9, 9,10,10,11,11,12,12,12,13, 9, 9, 9,10,10,
+ 	11,11,12,11,13,13,13,14, 9, 9, 9,10,10,11,11,11,
+ 	12,13,12,13,13,10,10,10,11,11,12,12,13,12,13,13,
+ 	14,14,10,10,10,11,11,11,12,12,12,13,13,14,14,11,
+ 	11,11,12,12,13,13,13,13,14,14,15,14,11,11,11,12,
+ 	12,13,13,13,14,14,15,15,15,
+ };
+ 
+ static float _vq_quantthresh__44u9_p7_0[] = {
+ 	-60.5, -49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 
+ 	27.5, 38.5, 49.5, 60.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p7_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p7_0 = {
+ 	_vq_quantthresh__44u9_p7_0,
+ 	_vq_quantmap__44u9_p7_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _44u9_p7_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__44u9_p7_0,
+ 	1, -523206656, 1618345984, 4, 0,
+ 	_vq_quantlist__44u9_p7_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__44u9_p7_1[] = {
+ 	 5, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 8, 8, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 8, 8, 8,
+ };
+ 
+ static float _vq_quantthresh__44u9_p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p7_1 = {
+ 	_vq_quantthresh__44u9_p7_1,
+ 	_vq_quantmap__44u9_p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _44u9_p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__44u9_p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__44u9_p7_1,
+ 	NULL,
+ 	&_vq_auxt__44u9_p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p8_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44u9_p8_0[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 8, 7, 9, 9,10,10,11,11, 4,
+ 	 6, 6, 8, 8, 9, 9, 9, 9,10,10,11,10,12,11, 4, 6,
+ 	 6, 8, 8, 9,10, 9, 9,10,10,11,11,12,12, 7, 8, 8,
+ 	10,10,11,11,11,10,11,11,12,12,13,12, 7, 8, 8,10,
+ 	10,11,11,10,10,11,12,12,12,13,13, 8,10, 9,11,11,
+ 	12,12,11,12,12,12,13,13,14,14, 8, 9, 9,11,11,12,
+ 	12,11,12,12,13,13,13,14,14, 8, 9, 9,10,10,11,11,
+ 	13,12,13,13,14,14,15,14, 8, 9, 9,10,10,11,12,12,
+ 	13,13,13,14,14,14,15, 9,10,10,11,11,13,12,13,13,
+ 	14,14,15,15,15,15, 9,10,10,11,12,12,12,13,13,14,
+ 	15,14,15,15,15,10,11,11,12,12,13,13,14,14,15,15,
+ 	15,16,16,15,10,11,11,12,12,13,14,14,14,15,14,15,
+ 	16,16,17,11,12,12,13,13,14,14,15,14,16,15,15,16,
+ 	16,16,11,12,12,13,13,14,14,14,15,15,15,16,16,17,
+ 	16,
+ };
+ 
+ static float _vq_quantthresh__44u9_p8_0[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p8_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p8_0 = {
+ 	_vq_quantthresh__44u9_p8_0,
+ 	_vq_quantmap__44u9_p8_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44u9_p8_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44u9_p8_0,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__44u9_p8_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p8_1[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__44u9_p8_1[] = {
+ 	 4, 6, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 7, 7, 7, 7, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7,
+ 	 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9, 8, 8,
+ 	 8, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,
+ 	 9, 9, 9, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10, 9, 9,10,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9, 9,10,
+ 	10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	10,10,10, 9,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,10, 9,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,
+ 	10, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,10,10,10,10,
+ 	10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,
+ 	 9,10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	 9, 9, 9, 9, 9, 9, 9, 9,10,10, 9,10,10,10,10,10,
+ 	10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,
+ 	 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,
+ 	 9, 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10, 9, 9, 9, 9, 9, 9,10,10, 9,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__44u9_p8_1[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p8_1[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p8_1 = {
+ 	_vq_quantthresh__44u9_p8_1,
+ 	_vq_quantmap__44u9_p8_1,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _44u9_p8_1 = {
+ 	2, 441,
+ 	_vq_lengthlist__44u9_p8_1,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__44u9_p8_1,
+ 	NULL,
+ 	&_vq_auxt__44u9_p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p9_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__44u9_p9_0[] = {
+ 	 1, 5, 5,10,10,10,10,10,10,10,10,10,10,10,10, 5,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10, 5,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,
+ };
+ 
+ static float _vq_quantthresh__44u9_p9_0[] = {
+ 	-6051.5, -5120.5, -4189.5, -3258.5, -2327.5, -1396.5, -465.5, 465.5, 
+ 	1396.5, 2327.5, 3258.5, 4189.5, 5120.5, 6051.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p9_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p9_0 = {
+ 	_vq_quantthresh__44u9_p9_0,
+ 	_vq_quantmap__44u9_p9_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _44u9_p9_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__44u9_p9_0,
+ 	1, -510036736, 1631393792, 4, 0,
+ 	_vq_quantlist__44u9_p9_0,
+ 	NULL,
+ 	&_vq_auxt__44u9_p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p9_1[] = {
+ 	9,
+ 	8,
+ 	10,
+ 	7,
+ 	11,
+ 	6,
+ 	12,
+ 	5,
+ 	13,
+ 	4,
+ 	14,
+ 	3,
+ 	15,
+ 	2,
+ 	16,
+ 	1,
+ 	17,
+ 	0,
+ 	18,
+ };
+ 
+ static long _vq_lengthlist__44u9_p9_1[] = {
+ 	 1, 4, 4, 7, 7, 8, 8, 7, 7, 9, 9,10,10,12,11,12,
+ 	11,12,12, 4, 7, 6, 9, 9, 9, 9, 9, 9,10, 9,11, 9,
+ 	11,11,13,12,14,12, 4, 6, 6, 9, 9, 9, 9, 8, 9,10,
+ 	10,11,11,12,12,12,13,13,13, 7, 9, 8,11,11,11,11,
+ 	10,10,11,11,12,12,14,13,14,14,15,13, 7, 9, 9,10,
+ 	10,10,10,10,10,11,11,12,13,13,13,14,14,15,13, 8,
+ 	 9, 9,12,10,11,11,12,11,12,12,13,13,14,14,15,16,
+ 	15,14, 8, 9, 9,10,11,12,11,11,12,13,12,14,14,13,
+ 	15,16,15,14,16, 7, 9, 9,10,10,12,11,12,13,16,13,
+ 	14,16,14,15,15,15,15,15, 7, 9, 9,10,11,11,12,12,
+ 	13,14,16,14,14,16,16,14,14,14,15, 9,10,11,12,12,
+ 	12,13,13,13,16,15,16,15,14,15,15,15,16,16, 9,10,
+ 	11,12,13,13,14,13,14,15,14,14,16,16,16,16,16,16,
+ 	16,10,11,11,13,13,15,13,15,13,14,16,16,16,16,16,
+ 	16,15,14,16,11,11,12,12,13,13,15,13,15,14,15,16,
+ 	16,16,16,16,16,16,16,12,13,13,13,13,15,14,15,16,
+ 	16,16,16,14,16,16,16,16,16,16,13,12,12,14,14,13,
+ 	15,14,16,15,16,16,16,16,16,16,16,16,15,12,12,13,
+ 	13,14,16,15,16,15,16,16,16,16,16,16,16,16,16,16,
+ 	12,13,13,14,15,14,14,16,16,15,16,16,16,16,16,16,
+ 	15,16,16,13,14,14,13,14,14,15,16,15,16,16,16,16,
+ 	16,16,16,16,15,16,12,13,13,14,14,14,14,16,16,16,
+ 	16,16,16,15,16,16,16,16,16,
+ };
+ 
+ static float _vq_quantthresh__44u9_p9_1[] = {
+ 	-416.5, -367.5, -318.5, -269.5, -220.5, -171.5, -122.5, -73.5, 
+ 	-24.5, 24.5, 73.5, 122.5, 171.5, 220.5, 269.5, 318.5, 
+ 	367.5, 416.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p9_1[] = {
+ 	   17,   15,   13,   11,    9,    7,    5,    3,
+ 	    1,    0,    2,    4,    6,    8,   10,   12,
+ 	   14,   16,   18,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p9_1 = {
+ 	_vq_quantthresh__44u9_p9_1,
+ 	_vq_quantmap__44u9_p9_1,
+ 	19,
+ 	19
+ };
+ 
+ static static_codebook _44u9_p9_1 = {
+ 	2, 361,
+ 	_vq_lengthlist__44u9_p9_1,
+ 	1, -518287360, 1622704128, 5, 0,
+ 	_vq_quantlist__44u9_p9_1,
+ 	NULL,
+ 	&_vq_auxt__44u9_p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__44u9_p9_2[] = {
+ 	24,
+ 	23,
+ 	25,
+ 	22,
+ 	26,
+ 	21,
+ 	27,
+ 	20,
+ 	28,
+ 	19,
+ 	29,
+ 	18,
+ 	30,
+ 	17,
+ 	31,
+ 	16,
+ 	32,
+ 	15,
+ 	33,
+ 	14,
+ 	34,
+ 	13,
+ 	35,
+ 	12,
+ 	36,
+ 	11,
+ 	37,
+ 	10,
+ 	38,
+ 	9,
+ 	39,
+ 	8,
+ 	40,
+ 	7,
+ 	41,
+ 	6,
+ 	42,
+ 	5,
+ 	43,
+ 	4,
+ 	44,
+ 	3,
+ 	45,
+ 	2,
+ 	46,
+ 	1,
+ 	47,
+ 	0,
+ 	48,
+ };
+ 
+ static long _vq_lengthlist__44u9_p9_2[] = {
+ 	 2, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
+ 	 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__44u9_p9_2[] = {
+ 	-23.5, -22.5, -21.5, -20.5, -19.5, -18.5, -17.5, -16.5, 
+ 	-15.5, -14.5, -13.5, -12.5, -11.5, -10.5, -9.5, -8.5, 
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ 	8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 
+ 	16.5, 17.5, 18.5, 19.5, 20.5, 21.5, 22.5, 23.5, 
+ };
+ 
+ static long _vq_quantmap__44u9_p9_2[] = {
+ 	   47,   45,   43,   41,   39,   37,   35,   33,
+ 	   31,   29,   27,   25,   23,   21,   19,   17,
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,   18,   20,   22,   24,   26,   28,   30,
+ 	   32,   34,   36,   38,   40,   42,   44,   46,
+ 	   48,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__44u9_p9_2 = {
+ 	_vq_quantthresh__44u9_p9_2,
+ 	_vq_quantmap__44u9_p9_2,
+ 	49,
+ 	49
+ };
+ 
+ static static_codebook _44u9_p9_2 = {
+ 	1, 49,
+ 	_vq_lengthlist__44u9_p9_2,
+ 	1, -526909440, 1611661312, 6, 0,
+ 	_vq_quantlist__44u9_p9_2,
+ 	NULL,
+ 	&_vq_auxt__44u9_p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8u0__p1_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 8,10,10, 7,
+ 	10,10, 5, 8, 8, 7,10,10, 8,10,10, 4, 9, 8, 8,11,
+ 	11, 8,11,11, 7,11,11,10,11,13,10,13,13, 7,11,11,
+ 	10,13,12,10,13,13, 5, 9, 8, 8,11,11, 8,11,11, 7,
+ 	11,11, 9,13,13,10,12,13, 7,11,11,10,13,13,10,13,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__8u0__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p1_0 = {
+ 	_vq_quantthresh__8u0__p1_0,
+ 	_vq_quantmap__8u0__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8u0__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8u0__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__8u0__p1_0,
+ 	NULL,
+ 	&_vq_auxt__8u0__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8u0__p2_0[] = {
+ 	 2, 4, 4, 5, 6, 6, 5, 6, 6, 5, 7, 7, 6, 7, 8, 6,
+ 	 7, 8, 5, 7, 7, 6, 8, 8, 7, 9, 7, 5, 7, 7, 7, 9,
+ 	 9, 7, 8, 8, 6, 9, 8, 7, 7,10, 8,10,10, 6, 8, 8,
+ 	 8,10, 8, 8,10,10, 5, 7, 7, 7, 8, 8, 7, 8, 9, 6,
+ 	 8, 8, 8,10,10, 8, 8,10, 6, 8, 9, 8,10,10, 7,10,
+ 	 8,
+ };
+ 
+ static float _vq_quantthresh__8u0__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p2_0 = {
+ 	_vq_quantthresh__8u0__p2_0,
+ 	_vq_quantmap__8u0__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8u0__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8u0__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__8u0__p2_0,
+ 	NULL,
+ 	&_vq_auxt__8u0__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8u0__p3_0[] = {
+ 	 1, 5, 5, 7, 7, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
+ 	10, 9,11,11, 8, 9, 9,11,11, 6, 8, 8,10,10, 8,10,
+ 	10,11,11, 8,10,10,11,11,10,11,11,12,12,10,11,11,
+ 	12,13, 6, 8, 8,10,10, 8,10,10,11,11, 8,10,10,11,
+ 	11, 9,10,11,12,12,10,11,11,12,12, 8,11,11,14,13,
+ 	10,12,11,15,13,10,12,11,14,14,12,13,12,16,14,12,
+ 	14,12,16,15, 8,11,11,13,14,10,11,12,13,15,10,11,
+ 	12,13,15,11,12,13,14,15,12,12,14,14,16, 5, 8, 8,
+ 	11,11, 9,11,11,12,12, 8,10,11,12,12,11,12,12,15,
+ 	14,11,12,12,14,14, 7,11,10,13,12,10,11,12,13,14,
+ 	10,12,12,14,13,12,13,13,14,15,12,13,13,15,15, 7,
+ 	10,11,12,13,10,12,11,14,13,10,12,13,13,15,12,13,
+ 	12,14,14,11,13,13,15,16, 9,12,12,15,14,11,13,13,
+ 	15,16,11,13,13,16,16,13,14,15,15,15,12,14,15,17,
+ 	16, 9,12,12,14,15,11,13,13,15,16,11,13,13,16,18,
+ 	13,14,14,17,16,13,15,15,17,18, 5, 8, 9,11,11, 8,
+ 	11,11,12,12, 8,10,11,12,12,11,12,12,14,14,11,12,
+ 	12,14,15, 7,11,10,12,13,10,12,12,14,13,10,11,12,
+ 	13,14,11,13,13,15,14,12,13,13,14,15, 7,10,11,13,
+ 	13,10,12,12,13,14,10,12,12,13,13,11,13,13,16,16,
+ 	12,13,13,15,14, 9,12,12,16,15,10,13,13,15,15,11,
+ 	13,13,17,15,12,15,15,18,17,13,14,14,15,16, 9,12,
+ 	12,15,15,11,13,13,15,16,11,13,13,15,15,12,15,15,
+ 	16,16,13,15,14,17,15, 7,11,11,15,15,10,13,13,16,
+ 	15,10,13,13,15,16,14,15,15,17,19,13,15,14,15,18,
+ 	 9,12,12,16,16,11,13,14,17,16,11,13,13,17,16,15,
+ 	15,16,17,19,13,15,16, 0,18, 9,12,12,16,15,11,14,
+ 	13,17,17,11,13,14,16,16,15,16,16,19,18,13,15,15,
+ 	17,19,11,14,14,19,16,12,14,15, 0,18,12,16,15,18,
+ 	17,15,15,18,16,19,14,15,17,19,19,11,14,14,18,19,
+ 	13,15,14,19,19,12,16,15,18,17,15,17,15, 0,16,14,
+ 	17,16,19, 0, 7,11,11,14,14,10,12,12,15,15,10,13,
+ 	13,16,15,13,15,15,17, 0,14,15,15,16,19, 9,12,12,
+ 	16,16,11,14,14,16,16,11,13,13,16,16,14,17,16,19,
+ 	 0,14,18,17,17,19, 9,12,12,15,16,11,13,13,15,17,
+ 	12,14,13,19,16,13,15,15,17,19,15,17,16,17,19,11,
+ 	14,14,19,16,12,15,15,19,17,13,14,15,17,19,14,16,
+ 	17,19,19,16,15,16,17,19,11,15,14,16,16,12,15,15,
+ 	19, 0,12,14,15,19,19,14,16,16, 0,18,15,19,14,18,
+ 	16,
+ };
+ 
+ static float _vq_quantthresh__8u0__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p3_0 = {
+ 	_vq_quantthresh__8u0__p3_0,
+ 	_vq_quantmap__8u0__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8u0__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__8u0__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8u0__p3_0,
+ 	NULL,
+ 	&_vq_auxt__8u0__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8u0__p4_0[] = {
+ 	 3, 5, 5, 8, 8, 5, 6, 7, 9, 9, 6, 7, 6, 9, 9, 9,
+ 	 9, 9,10,11, 9, 9, 9,11,10, 6, 7, 7,10,10, 7, 7,
+ 	 8,10,10, 7, 8, 8,10,10,10,10,10,10,11, 9,10,10,
+ 	11,12, 6, 7, 7,10,10, 7, 8, 8,10,10, 7, 8, 7,10,
+ 	10, 9,10,10,12,11,10,10,10,11,10, 9,10,10,12,11,
+ 	10,10,10,13,11, 9,10,10,12,12,11,11,12,12,13,11,
+ 	11,11,12,13, 9,10,10,12,12,10,10,11,12,12,10,10,
+ 	11,12,12,11,11,11,13,13,11,12,12,13,13, 5, 7, 7,
+ 	10,10, 7, 8, 8,10,10, 7, 8, 8,10,10,10,11,11,12,
+ 	12,10,11,10,12,12, 7, 8, 8,11,11, 7, 8, 9,10,11,
+ 	 8, 9, 9,11,11,11,10,11,10,12,10,11,11,12,13, 7,
+ 	 8, 8,10,11, 8, 9, 8,12,10, 8, 9, 9,11,12,10,11,
+ 	10,13,11,10,11,11,13,12, 9,11,10,13,12,10,10,11,
+ 	12,12,10,11,11,13,13,12,10,13,11,14,11,12,12,15,
+ 	13, 9,11,11,13,13,10,11,11,13,12,10,11,11,12,14,
+ 	12,13,11,14,12,12,12,12,14,14, 5, 7, 7,10,10, 7,
+ 	 8, 8,10,10, 7, 8, 8,11,10,10,11,11,12,12,10,11,
+ 	10,12,12, 7, 8, 8,10,11, 8, 9, 9,12,11, 8, 8, 9,
+ 	10,11,10,11,11,12,13,11,10,11,11,13, 6, 8, 8,10,
+ 	11, 8, 9, 9,11,11, 7, 9, 7,11,10,10,11,11,12,12,
+ 	10,11,10,13,10, 9,11,10,13,12,10,12,11,13,13,10,
+ 	10,11,12,13,11,12,13,15,14,11,11,13,12,13, 9,10,
+ 	11,12,13,10,11,11,12,13,10,11,10,13,12,12,13,13,
+ 	13,14,12,12,11,14,11, 8,10,10,12,13,10,11,11,13,
+ 	13,10,11,10,13,13,12,13,14,15,14,12,12,12,14,13,
+ 	 9,10,10,13,12,10,10,12,13,13,10,11,11,15,12,12,
+ 	12,13,15,14,12,13,13,15,13, 9,10,11,12,13,10,12,
+ 	10,13,12,10,11,11,12,13,12,14,12,15,13,12,12,12,
+ 	15,14,11,12,11,14,13,11,11,12,14,14,12,13,13,14,
+ 	13,13,11,15,11,15,14,14,14,16,15,11,12,12,13,14,
+ 	11,13,11,14,14,12,12,13,14,15,12,14,12,15,12,13,
+ 	15,14,16,15, 8,10,10,12,12,10,10,10,12,13,10,11,
+ 	11,13,13,12,12,12,13,14,13,13,13,15,15, 9,10,10,
+ 	12,12,10,11,11,13,12,10,10,11,13,13,12,12,12,14,
+ 	14,12,12,13,15,14, 9,10,10,13,12,10,10,12,12,13,
+ 	10,11,10,13,13,12,13,13,14,14,12,13,12,14,13,11,
+ 	12,12,14,13,12,13,12,14,14,10,12,12,14,14,14,14,
+ 	14,16,14,13,12,14,12,15,10,12,12,14,15,12,13,13,
+ 	14,16,11,12,11,15,14,13,14,14,14,15,13,14,11,14,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__8u0__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p4_0 = {
+ 	_vq_quantthresh__8u0__p4_0,
+ 	_vq_quantmap__8u0__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8u0__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__8u0__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8u0__p4_0,
+ 	NULL,
+ 	&_vq_auxt__8u0__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__8u0__p5_0[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 6, 8, 7, 8, 8,
+ 	10,10, 4, 6, 6, 8, 8, 8, 8,10,10, 6, 8, 8, 9, 9,
+ 	 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 7, 8, 8,
+ 	 9, 9,10,10,12,11, 7, 8, 8, 9, 9,10,10,11,11, 9,
+ 	10,10,11,11,11,12,12,12, 9,10,10,11,11,12,12,12,
+ 	12,
+ };
+ 
+ static float _vq_quantthresh__8u0__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p5_0 = {
+ 	_vq_quantthresh__8u0__p5_0,
+ 	_vq_quantmap__8u0__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _8u0__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__8u0__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__8u0__p5_0,
+ 	NULL,
+ 	&_vq_auxt__8u0__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p6_0[] = {
+ 	6,
+ 	5,
+ 	7,
+ 	4,
+ 	8,
+ 	3,
+ 	9,
+ 	2,
+ 	10,
+ 	1,
+ 	11,
+ 	0,
+ 	12,
+ };
+ 
+ static long _vq_lengthlist__8u0__p6_0[] = {
+ 	 1, 4, 4, 7, 7, 9, 9,11,11,12,12,16,16, 3, 6, 6,
+ 	 9, 9,11,11,12,12,13,14,18,16, 3, 6, 7, 9, 9,11,
+ 	11,13,12,14,14,17,16, 7, 9, 9,11,11,12,12,14,14,
+ 	14,14,17,16, 7, 9, 9,11,11,13,12,13,13,14,14,17,
+ 	 0, 9,11,11,12,13,14,14,14,13,15,14,17,17, 9,11,
+ 	11,12,12,14,14,13,14,14,15, 0, 0,11,12,12,15,14,
+ 	15,14,15,14,15,16,17, 0,11,12,13,13,13,14,14,15,
+ 	14,15,15, 0, 0,12,14,14,15,15,14,16,15,15,17,16,
+ 	 0,18,13,14,14,15,14,15,14,15,16,17,16, 0, 0,17,
+ 	17,18, 0,16,18,16, 0, 0, 0,17, 0, 0,16, 0, 0,16,
+ 	16, 0,15, 0,17, 0, 0, 0, 0,
+ };
+ 
+ static float _vq_quantthresh__8u0__p6_0[] = {
+ 	-27.5, -22.5, -17.5, -12.5, -7.5, -2.5, 2.5, 7.5, 
+ 	12.5, 17.5, 22.5, 27.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p6_0[] = {
+ 	   11,    9,    7,    5,    3,    1,    0,    2,
+ 	    4,    6,    8,   10,   12,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p6_0 = {
+ 	_vq_quantthresh__8u0__p6_0,
+ 	_vq_quantmap__8u0__p6_0,
+ 	13,
+ 	13
+ };
+ 
+ static static_codebook _8u0__p6_0 = {
+ 	2, 169,
+ 	_vq_lengthlist__8u0__p6_0,
+ 	1, -526516224, 1616117760, 4, 0,
+ 	_vq_quantlist__8u0__p6_0,
+ 	NULL,
+ 	&_vq_auxt__8u0__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p6_1[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8u0__p6_1[] = {
+ 	 1, 4, 4, 6, 6, 4, 6, 5, 7, 7, 4, 5, 6, 7, 7, 6,
+ 	 7, 7, 7, 7, 6, 7, 7, 7, 7,
+ };
+ 
+ static float _vq_quantthresh__8u0__p6_1[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p6_1[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p6_1 = {
+ 	_vq_quantthresh__8u0__p6_1,
+ 	_vq_quantmap__8u0__p6_1,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8u0__p6_1 = {
+ 	2, 25,
+ 	_vq_lengthlist__8u0__p6_1,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8u0__p6_1,
+ 	NULL,
+ 	&_vq_auxt__8u0__p6_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8u0__p7_0[] = {
+ 	 1, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__8u0__p7_0[] = {
+ 	-157.5, 157.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p7_0 = {
+ 	_vq_quantthresh__8u0__p7_0,
+ 	_vq_quantmap__8u0__p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8u0__p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8u0__p7_0,
+ 	1, -518803456, 1628680192, 2, 0,
+ 	_vq_quantlist__8u0__p7_0,
+ 	NULL,
+ 	&_vq_auxt__8u0__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p7_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__8u0__p7_1[] = {
+ 	 1, 5, 5, 5, 5,10,10,11,11,11,11,11,11,11,11, 5,
+ 	 7, 6, 8, 8, 9,10,11,11,11,11,11,11,11,11, 6, 6,
+ 	 7, 9, 7,11,10,11,11,11,11,11,11,11,11, 5, 6, 6,
+ 	11, 8,11,11,11,11,11,11,11,11,11,11, 5, 6, 6, 9,
+ 	10,11,10,11,11,11,11,11,11,11,11, 7,10,10,11,11,
+ 	11,11,11,11,11,11,11,11,11,11, 7,11, 8,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8u0__p7_1[] = {
+ 	-136.5, -115.5, -94.5, -73.5, -52.5, -31.5, -10.5, 10.5, 
+ 	31.5, 52.5, 73.5, 94.5, 115.5, 136.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p7_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p7_1 = {
+ 	_vq_quantthresh__8u0__p7_1,
+ 	_vq_quantmap__8u0__p7_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _8u0__p7_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__8u0__p7_1,
+ 	1, -520986624, 1620377600, 4, 0,
+ 	_vq_quantlist__8u0__p7_1,
+ 	NULL,
+ 	&_vq_auxt__8u0__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u0__p7_2[] = {
+ 	10,
+ 	9,
+ 	11,
+ 	8,
+ 	12,
+ 	7,
+ 	13,
+ 	6,
+ 	14,
+ 	5,
+ 	15,
+ 	4,
+ 	16,
+ 	3,
+ 	17,
+ 	2,
+ 	18,
+ 	1,
+ 	19,
+ 	0,
+ 	20,
+ };
+ 
+ static long _vq_lengthlist__8u0__p7_2[] = {
+ 	 1, 6, 5, 7, 7, 9, 9, 9, 9,10,12,12,10,11,11,10,
+ 	11,11,11,10,11, 6, 8, 8, 9, 9,10,10, 9,10,11,11,
+ 	10,11,11,11,11,10,11,11,11,11, 6, 7, 8, 9, 9, 9,
+ 	10,11,10,11,12,11,10,11,11,11,11,11,11,12,10, 8,
+ 	 9, 9,10, 9,10,10, 9,10,10,10,10,10, 9,10,10,10,
+ 	10, 9,10,10, 9, 9, 9, 9,10,10, 9, 9,10,10,11,10,
+ 	 9,12,10,11,10, 9,10,10,10, 8, 9, 9,10, 9,10, 9,
+ 	 9,10,10, 9,10, 9,11,10,10,10,10,10, 9,10, 8, 8,
+ 	 9, 9,10, 9,11, 9, 8, 9, 9,10,11,10,10,10,11,12,
+ 	 9, 9,11, 8, 9, 8,11,10,11,10,10, 9,11,10,10,10,
+ 	10,10,10,10,11,11,11,11, 8, 9, 9, 9,10,10,10,11,
+ 	11,12,11,12,11,10,10,10,12,11,11,11,10, 8,10, 9,
+ 	11,10,10,11,12,10,11,12,11,11,12,11,12,12,10,11,
+ 	11,10, 9, 9,10,11,12,10,10,10,11,10,11,11,10,12,
+ 	12,10,11,10,11,12,10, 9,10,10,11,10,11,11,11,11,
+ 	11,12,11,11,11, 9,11,10,11,10,11,10, 9, 9,10,11,
+ 	11,11,10,10,11,12,12,11,12,11,11,11,12,12,12,12,
+ 	11, 9,11,11,12,10,11,11,11,11,11,11,12,11,11,12,
+ 	11,11,11,10,11,11, 9,11,10,11,11,11,10,10,10,11,
+ 	11,11,12,10,11,10,11,11,11,11,12, 9,11,10,11,11,
+ 	10,10,11,11, 9,11,11,12,10,10,10,10,10,11,11,10,
+ 	 9,10,11,11,12,11,10,10,12,11,11,12,11,12,11,11,
+ 	10,10,11,11,10,12,11,10,11,10,11,10,10,10,11,11,
+ 	10,10,11,11,11,11,10,10,10,12,11,11,11,11,10, 9,
+ 	10,11,11,11,12,11,11,11,12,10,11,11,11, 9,10,11,
+ 	11,11,11,11,11,10,10,11,11,12,11,10,11,12,11,10,
+ 	10,11, 9,10,11,11,11,11,11,10,11,11,10,12,11,11,
+ 	11,12,11,11,11,10,10,11,11,
+ };
+ 
+ static float _vq_quantthresh__8u0__p7_2[] = {
+ 	-9.5, -8.5, -7.5, -6.5, -5.5, -4.5, -3.5, -2.5, 
+ 	-1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
+ 	6.5, 7.5, 8.5, 9.5, 
+ };
+ 
+ static long _vq_quantmap__8u0__p7_2[] = {
+ 	   19,   17,   15,   13,   11,    9,    7,    5,
+ 	    3,    1,    0,    2,    4,    6,    8,   10,
+ 	   12,   14,   16,   18,   20,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u0__p7_2 = {
+ 	_vq_quantthresh__8u0__p7_2,
+ 	_vq_quantmap__8u0__p7_2,
+ 	21,
+ 	21
+ };
+ 
+ static static_codebook _8u0__p7_2 = {
+ 	2, 441,
+ 	_vq_lengthlist__8u0__p7_2,
+ 	1, -529268736, 1611661312, 5, 0,
+ 	_vq_quantlist__8u0__p7_2,
+ 	NULL,
+ 	&_vq_auxt__8u0__p7_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__8u0__single[] = {
+ 	 4, 7,11, 9,12, 8, 7,10, 6, 4, 5, 5, 7, 5, 6,16,
+ 	 9, 5, 5, 6, 7, 7, 9,16, 7, 4, 6, 5, 7, 5, 7,17,
+ 	10, 7, 7, 8, 7, 7, 8,18, 7, 5, 6, 4, 5, 4, 5,15,
+ 	 7, 6, 7, 5, 6, 4, 5,15,12,13,18,12,17,11, 9,17,
+ };
+ 
+ static static_codebook _huff_book__8u0__single = {
+ 	2, 64,
+ 	_huff_lengthlist__8u0__single,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p1_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8u1__p1_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 8, 8, 7, 9,10, 7,
+ 	 9, 9, 5, 8, 8, 7,10, 9, 7, 9, 9, 5, 8, 8, 8,10,
+ 	10, 8,10,10, 7,10,10, 9,10,12,10,12,12, 7,10,10,
+ 	 9,12,11,10,12,12, 5, 8, 8, 8,10,10, 8,10,10, 7,
+ 	10,10,10,12,12, 9,11,12, 7,10,10,10,12,12, 9,12,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8u1__p1_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p1_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p1_0 = {
+ 	_vq_quantthresh__8u1__p1_0,
+ 	_vq_quantmap__8u1__p1_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8u1__p1_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8u1__p1_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__8u1__p1_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p1_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p2_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8u1__p2_0[] = {
+ 	 3, 4, 5, 5, 6, 6, 5, 6, 6, 5, 7, 6, 6, 7, 8, 6,
+ 	 7, 8, 5, 6, 6, 6, 8, 7, 6, 8, 7, 5, 6, 6, 7, 8,
+ 	 8, 6, 7, 7, 6, 8, 7, 7, 7, 9, 8, 9, 9, 6, 7, 8,
+ 	 7, 9, 7, 8, 9, 9, 5, 6, 6, 6, 7, 7, 7, 8, 8, 6,
+ 	 8, 7, 8, 9, 9, 7, 7, 9, 6, 7, 8, 8, 9, 9, 7, 9,
+ 	 7,
+ };
+ 
+ static float _vq_quantthresh__8u1__p2_0[] = {
+ 	-0.5, 0.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p2_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p2_0 = {
+ 	_vq_quantthresh__8u1__p2_0,
+ 	_vq_quantmap__8u1__p2_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8u1__p2_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8u1__p2_0,
+ 	1, -535822336, 1611661312, 2, 0,
+ 	_vq_quantlist__8u1__p2_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p2_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p3_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8u1__p3_0[] = {
+ 	 1, 5, 5, 7, 7, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 8,
+ 	10, 9,11,11, 9, 9, 9,11,11, 6, 8, 8,10,10, 8,10,
+ 	10,11,11, 8, 9,10,11,11,10,11,11,12,12,10,11,11,
+ 	12,13, 6, 8, 8,10,10, 8,10, 9,11,11, 8,10, 9,11,
+ 	11,10,11,11,12,12,10,11,11,12,12, 9,11,11,14,13,
+ 	10,12,11,14,14,10,12,11,14,13,12,13,13,15,14,12,
+ 	13,13,15,14, 8,11,11,13,14,10,11,12,13,15,10,11,
+ 	12,14,14,12,13,13,14,15,12,13,13,14,15, 5, 8, 8,
+ 	11,11, 8,10,10,12,12, 8,10,10,12,12,11,12,12,14,
+ 	13,11,12,12,13,14, 8,10,10,12,12, 9,11,12,13,14,
+ 	10,12,12,13,13,12,12,13,14,14,11,13,13,15,15, 7,
+ 	10,10,12,12, 9,12,11,14,12,10,11,12,13,14,12,13,
+ 	12,14,14,12,13,13,15,16,10,12,12,15,14,11,12,13,
+ 	15,15,11,13,13,15,16,14,14,15,15,16,13,14,15,17,
+ 	15, 9,12,12,14,15,11,13,12,15,15,11,13,13,15,15,
+ 	13,14,13,15,14,13,14,14,17, 0, 5, 8, 8,11,11, 8,
+ 	10,10,12,12, 8,10,10,12,12,11,12,12,14,14,11,12,
+ 	12,14,14, 7,10,10,12,12,10,12,12,13,13, 9,11,12,
+ 	12,13,11,12,13,15,15,11,12,13,14,15, 8,10,10,12,
+ 	12,10,12,11,13,13,10,12,11,13,13,11,13,13,15,14,
+ 	12,13,12,15,13, 9,12,12,14,14,11,13,13,16,15,11,
+ 	12,13,16,15,13,14,15,16,16,13,13,15,15,16,10,12,
+ 	12,15,14,11,13,13,14,16,11,13,13,15,16,13,15,15,
+ 	16,17,13,15,14,16,15, 8,11,11,14,15,10,12,12,15,
+ 	15,10,12,12,15,16,14,15,15,16,17,13,14,14,16,16,
+ 	 9,12,12,15,15,11,13,14,15,17,11,13,13,15,16,14,
+ 	15,16,19,17,13,15,15, 0,17, 9,12,12,15,15,11,14,
+ 	13,16,15,11,13,13,15,16,15,15,15,18,17,13,15,15,
+ 	17,17,11,15,14,18,16,12,14,15,17,17,12,15,15,18,
+ 	18,15,15,16,15,19,14,16,16, 0, 0,11,14,14,16,17,
+ 	12,15,14,18,17,12,15,15,18,18,15,17,15,18,16,14,
+ 	16,16,18,18, 7,11,11,14,14,10,12,12,15,15,10,12,
+ 	13,15,15,13,14,15,16,16,14,15,15,18,18, 9,12,12,
+ 	15,15,11,13,13,16,15,11,12,13,16,16,14,15,15,17,
+ 	16,15,16,16,17,17, 9,12,12,15,15,11,13,13,15,17,
+ 	11,14,13,16,15,13,15,15,17,17,15,15,15,18,17,11,
+ 	14,14,17,15,12,14,15,17,18,13,13,15,17,17,14,16,
+ 	16,19,18,16,15,17,17, 0,11,14,14,17,17,12,15,15,
+ 	18, 0,12,15,14,18,16,14,17,17,19, 0,16,18,15, 0,
+ 	16,
+ };
+ 
+ static float _vq_quantthresh__8u1__p3_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p3_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p3_0 = {
+ 	_vq_quantthresh__8u1__p3_0,
+ 	_vq_quantmap__8u1__p3_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8u1__p3_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__8u1__p3_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8u1__p3_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p3_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p4_0[] = {
+ 	2,
+ 	1,
+ 	3,
+ 	0,
+ 	4,
+ };
+ 
+ static long _vq_lengthlist__8u1__p4_0[] = {
+ 	 4, 5, 5, 9, 9, 6, 7, 7, 9, 9, 6, 7, 7, 9, 9, 9,
+ 	 9, 9,11,11, 9, 9, 9,11,11, 6, 7, 7, 9, 9, 7, 7,
+ 	 8, 9,10, 7, 7, 8, 9,10, 9, 9,10,10,11, 9, 9,10,
+ 	10,12, 6, 7, 7, 9, 9, 7, 8, 7,10, 9, 7, 8, 7,10,
+ 	 9, 9,10, 9,12,11,10,10, 9,12,10, 9,10,10,12,11,
+ 	 9,10,10,12,11, 9,10,10,12,12,11,11,12,12,13,11,
+ 	11,12,12,13, 9, 9,10,12,11, 9,10,10,12,12,10,10,
+ 	10,12,12,11,12,11,13,12,11,12,11,13,12, 6, 7, 7,
+ 	 9, 9, 7, 8, 8,10,10, 7, 8, 7,10, 9,10,10,10,12,
+ 	12,10,10,10,12,11, 7, 8, 7,10,10, 7, 7, 9,10,11,
+ 	 8, 9, 9,11,10,10,10,11,10,12,10,10,11,12,12, 7,
+ 	 8, 8,10,10, 7, 9, 8,11,10, 8, 8, 9,11,11,10,11,
+ 	10,12,11,10,11,11,12,12, 9,10,10,12,12, 9,10,10,
+ 	12,12,10,11,11,13,12,11,10,12,10,14,12,12,12,13,
+ 	14, 9,10,10,12,12, 9,11,10,12,12,10,11,11,12,12,
+ 	11,12,11,14,12,12,12,12,14,14, 5, 7, 7, 9, 9, 7,
+ 	 7, 7, 9,10, 7, 8, 8,10,10,10,10,10,11,11,10,10,
+ 	10,12,12, 7, 8, 8,10,10, 8, 9, 8,11,10, 7, 8, 9,
+ 	10,11,10,10,10,11,12,10,10,11,11,13, 6, 7, 8,10,
+ 	10, 8, 9, 9,10,10, 7, 9, 7,11,10,10,11,10,12,12,
+ 	10,11,10,12,10, 9,10,10,12,12,10,11,11,13,12, 9,
+ 	10,10,12,12,12,12,12,14,13,11,11,12,11,14, 9,10,
+ 	10,11,12,10,11,11,12,13, 9,10,10,12,12,12,12,12,
+ 	14,13,11,12,10,14,11, 9, 9,10,11,12, 9,10,10,12,
+ 	12, 9,10,10,12,12,12,12,12,14,14,11,12,12,13,12,
+ 	 9,10, 9,12,12, 9,10,11,12,13,10,11,10,13,11,12,
+ 	12,13,13,14,12,12,12,13,13, 9,10,10,12,12,10,11,
+ 	10,13,12,10,10,11,12,13,12,13,12,14,13,12,12,12,
+ 	13,14,11,12,11,14,13,10,10,11,13,13,12,12,12,14,
+ 	13,12,10,14,10,15,13,14,14,14,14,11,11,12,13,14,
+ 	10,12,11,13,13,12,12,12,13,15,12,13,11,15,12,13,
+ 	13,14,14,14, 9,10, 9,12,12, 9,10,10,12,12,10,10,
+ 	10,12,12,11,11,12,12,13,12,12,12,14,14, 9,10,10,
+ 	12,12,10,11,10,13,12,10,10,11,12,13,12,12,12,14,
+ 	13,12,12,13,13,14, 9,10,10,12,13,10,10,11,11,12,
+ 	 9,11,10,13,12,12,12,12,13,14,12,13,12,14,13,11,
+ 	12,11,13,13,12,13,12,14,13,10,11,12,13,13,13,13,
+ 	13,14,15,12,11,14,12,14,11,11,12,12,13,12,12,12,
+ 	13,14,10,12,10,14,13,13,13,13,14,15,12,14,11,15,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8u1__p4_0[] = {
+ 	-1.5, -0.5, 0.5, 1.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p4_0[] = {
+ 	    3,    1,    0,    2,    4,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p4_0 = {
+ 	_vq_quantthresh__8u1__p4_0,
+ 	_vq_quantmap__8u1__p4_0,
+ 	5,
+ 	5
+ };
+ 
+ static static_codebook _8u1__p4_0 = {
+ 	4, 625,
+ 	_vq_lengthlist__8u1__p4_0,
+ 	1, -533725184, 1611661312, 3, 0,
+ 	_vq_quantlist__8u1__p4_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p4_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p5_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__8u1__p5_0[] = {
+ 	 1, 4, 4, 7, 7, 7, 7, 9, 9, 4, 6, 5, 8, 7, 8, 8,
+ 	10,10, 4, 6, 6, 8, 8, 8, 8,10,10, 7, 8, 8, 9, 9,
+ 	 9, 9,11,11, 7, 8, 8, 9, 9, 9, 9,11,11, 8, 8, 8,
+ 	 9, 9,10,10,12,11, 8, 8, 8, 9, 9,10,10,11,11, 9,
+ 	10,10,11,11,11,11,13,12, 9,10,10,11,11,12,12,12,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__8u1__p5_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p5_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p5_0 = {
+ 	_vq_quantthresh__8u1__p5_0,
+ 	_vq_quantmap__8u1__p5_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _8u1__p5_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__8u1__p5_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__8u1__p5_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p5_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p6_0[] = {
+ 	4,
+ 	3,
+ 	5,
+ 	2,
+ 	6,
+ 	1,
+ 	7,
+ 	0,
+ 	8,
+ };
+ 
+ static long _vq_lengthlist__8u1__p6_0[] = {
+ 	 3, 4, 4, 6, 6, 7, 7, 9, 9, 4, 4, 5, 6, 6, 7, 7,
+ 	 9, 9, 4, 4, 4, 6, 6, 7, 7, 9, 9, 6, 6, 6, 7, 7,
+ 	 8, 8, 9, 9, 6, 6, 6, 7, 7, 8, 8, 9, 9, 7, 7, 7,
+ 	 8, 8, 8, 9,10,10, 7, 7, 7, 8, 8, 9, 8,10,10, 9,
+ 	 9, 9, 9, 9,10,10,10,10, 9, 9, 9, 9, 9,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8u1__p6_0[] = {
+ 	-3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p6_0[] = {
+ 	    7,    5,    3,    1,    0,    2,    4,    6,
+ 	    8,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p6_0 = {
+ 	_vq_quantthresh__8u1__p6_0,
+ 	_vq_quantmap__8u1__p6_0,
+ 	9,
+ 	9
+ };
+ 
+ static static_codebook _8u1__p6_0 = {
+ 	2, 81,
+ 	_vq_lengthlist__8u1__p6_0,
+ 	1, -531628032, 1611661312, 4, 0,
+ 	_vq_quantlist__8u1__p6_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p6_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p7_0[] = {
+ 	1,
+ 	0,
+ 	2,
+ };
+ 
+ static long _vq_lengthlist__8u1__p7_0[] = {
+ 	 1, 4, 4, 5, 7, 7, 5, 7, 7, 5, 9, 9, 8,10,10, 8,
+ 	10,10, 5, 9, 9, 7,10,10, 8,10,10, 4,10,10, 9,12,
+ 	12, 9,11,11, 7,12,11,10,11,13,10,13,13, 7,12,12,
+ 	10,13,12,10,13,13, 4,10,10, 9,12,12, 9,12,12, 7,
+ 	12,12,10,13,13,10,12,13, 7,11,12,10,13,13,10,13,
+ 	11,
+ };
+ 
+ static float _vq_quantthresh__8u1__p7_0[] = {
+ 	-5.5, 5.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p7_0[] = {
+ 	    1,    0,    2,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p7_0 = {
+ 	_vq_quantthresh__8u1__p7_0,
+ 	_vq_quantmap__8u1__p7_0,
+ 	3,
+ 	3
+ };
+ 
+ static static_codebook _8u1__p7_0 = {
+ 	4, 81,
+ 	_vq_lengthlist__8u1__p7_0,
+ 	1, -529137664, 1618345984, 2, 0,
+ 	_vq_quantlist__8u1__p7_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p7_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p7_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__8u1__p7_1[] = {
+ 	 2, 4, 4, 6, 6, 7, 7, 8, 8, 8, 8, 4, 5, 5, 7, 7,
+ 	 8, 8, 9, 9, 9, 9, 4, 5, 5, 7, 7, 8, 8, 9, 9, 9,
+ 	 9, 6, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 6, 7, 7, 8,
+ 	 8, 8, 8, 9, 9, 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9,
+ 	 9, 9, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 8, 9, 9,
+ 	 9, 9, 9, 9,10,10,10,10, 8, 9, 9, 9, 9, 9, 9,10,
+ 	10,10,10, 8, 9, 9, 9, 9, 9, 9,10,10,10,10, 8, 9,
+ 	 9, 9, 9, 9, 9,10,10,10,10,
+ };
+ 
+ static float _vq_quantthresh__8u1__p7_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p7_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p7_1 = {
+ 	_vq_quantthresh__8u1__p7_1,
+ 	_vq_quantmap__8u1__p7_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _8u1__p7_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__8u1__p7_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__8u1__p7_1,
+ 	NULL,
+ 	&_vq_auxt__8u1__p7_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p8_0[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__8u1__p8_0[] = {
+ 	 1, 4, 4, 6, 6, 8, 8,10,10,11,11, 4, 6, 6, 7, 7,
+ 	 9, 9,11,11,13,12, 4, 6, 6, 7, 7, 9, 9,11,11,12,
+ 	12, 6, 7, 7, 9, 9,11,11,12,12,13,13, 6, 7, 7, 9,
+ 	 9,11,11,12,12,13,13, 8, 9, 9,11,11,12,12,13,13,
+ 	14,14, 8, 9, 9,11,11,12,12,13,13,14,14, 9,11,11,
+ 	12,12,13,13,14,14,15,15, 9,11,11,12,12,13,13,14,
+ 	14,15,14,11,12,12,13,13,14,14,15,15,16,16,11,12,
+ 	12,13,13,14,14,15,15,15,15,
+ };
+ 
+ static float _vq_quantthresh__8u1__p8_0[] = {
+ 	-49.5, -38.5, -27.5, -16.5, -5.5, 5.5, 16.5, 27.5, 
+ 	38.5, 49.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p8_0[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p8_0 = {
+ 	_vq_quantthresh__8u1__p8_0,
+ 	_vq_quantmap__8u1__p8_0,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _8u1__p8_0 = {
+ 	2, 121,
+ 	_vq_lengthlist__8u1__p8_0,
+ 	1, -524582912, 1618345984, 4, 0,
+ 	_vq_quantlist__8u1__p8_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p8_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p8_1[] = {
+ 	5,
+ 	4,
+ 	6,
+ 	3,
+ 	7,
+ 	2,
+ 	8,
+ 	1,
+ 	9,
+ 	0,
+ 	10,
+ };
+ 
+ static long _vq_lengthlist__8u1__p8_1[] = {
+ 	 2, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 5, 6, 6, 7, 7,
+ 	 7, 7, 8, 8, 8, 8, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8,
+ 	 8, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 6, 7, 7, 7,
+ 	 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 	 8, 8, 8, 8, 9, 8, 9, 9, 7, 8, 8, 8, 8, 8, 8, 9,
+ 	 8, 9, 9, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 8, 8,
+ 	 8, 8, 8, 8, 8, 9, 9, 9, 9,
+ };
+ 
+ static float _vq_quantthresh__8u1__p8_1[] = {
+ 	-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 
+ 	3.5, 4.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p8_1[] = {
+ 	    9,    7,    5,    3,    1,    0,    2,    4,
+ 	    6,    8,   10,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p8_1 = {
+ 	_vq_quantthresh__8u1__p8_1,
+ 	_vq_quantmap__8u1__p8_1,
+ 	11,
+ 	11
+ };
+ 
+ static static_codebook _8u1__p8_1 = {
+ 	2, 121,
+ 	_vq_lengthlist__8u1__p8_1,
+ 	1, -531365888, 1611661312, 4, 0,
+ 	_vq_quantlist__8u1__p8_1,
+ 	NULL,
+ 	&_vq_auxt__8u1__p8_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p9_0[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__8u1__p9_0[] = {
+ 	 1, 4, 4,11,11,11,11,11,11,11,11,11,11,11,11, 3,
+ 	11, 8,11,11,11,11,11,11,11,11,11,11,11,11, 3, 9,
+ 	 9,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 	11,11,11,11,11,11,11,11,11,11,10,10,10,10,10,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8u1__p9_0[] = {
+ 	-1657.5, -1402.5, -1147.5, -892.5, -637.5, -382.5, -127.5, 127.5, 
+ 	382.5, 637.5, 892.5, 1147.5, 1402.5, 1657.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p9_0[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p9_0 = {
+ 	_vq_quantthresh__8u1__p9_0,
+ 	_vq_quantmap__8u1__p9_0,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _8u1__p9_0 = {
+ 	2, 225,
+ 	_vq_lengthlist__8u1__p9_0,
+ 	1, -514071552, 1627381760, 4, 0,
+ 	_vq_quantlist__8u1__p9_0,
+ 	NULL,
+ 	&_vq_auxt__8u1__p9_0,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p9_1[] = {
+ 	7,
+ 	6,
+ 	8,
+ 	5,
+ 	9,
+ 	4,
+ 	10,
+ 	3,
+ 	11,
+ 	2,
+ 	12,
+ 	1,
+ 	13,
+ 	0,
+ 	14,
+ };
+ 
+ static long _vq_lengthlist__8u1__p9_1[] = {
+ 	 1, 4, 4, 7, 7, 9, 9, 7, 7, 8, 8,10,10,11,11, 4,
+ 	 7, 7, 9, 9,10,10, 8, 8,10,10,10,11,10,11, 4, 7,
+ 	 7, 9, 9,10,10, 8, 8,10, 9,11,11,11,11, 7, 9, 9,
+ 	12,12,11,12,10,10,11,10,12,11,11,11, 7, 9, 9,11,
+ 	11,13,12, 9, 9,11,10,11,11,12,11, 9,10,10,12,12,
+ 	14,14,10,10,11,12,12,11,11,11, 9,10,11,11,13,14,
+ 	13,10,11,11,11,12,11,12,12, 7, 8, 8,10, 9,11,10,
+ 	11,12,12,11,12,14,12,13, 7, 8, 8, 9,10,10,11,12,
+ 	12,12,11,12,12,12,13, 9, 9, 9,11,11,13,12,12,12,
+ 	12,11,12,12,13,12, 8,10,10,11,10,11,12,12,12,12,
+ 	12,12,14,12,12, 9,11,11,11,12,12,12,12,13,13,12,
+ 	12,13,13,12,10,11,11,12,11,12,12,12,11,12,13,12,
+ 	12,12,13,11,11,12,12,12,13,12,12,11,12,13,13,12,
+ 	12,13,12,11,12,12,13,13,12,13,12,13,13,13,13,14,
+ 	13,
+ };
+ 
+ static float _vq_quantthresh__8u1__p9_1[] = {
+ 	-110.5, -93.5, -76.5, -59.5, -42.5, -25.5, -8.5, 8.5, 
+ 	25.5, 42.5, 59.5, 76.5, 93.5, 110.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p9_1[] = {
+ 	   13,   11,    9,    7,    5,    3,    1,    0,
+ 	    2,    4,    6,    8,   10,   12,   14,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p9_1 = {
+ 	_vq_quantthresh__8u1__p9_1,
+ 	_vq_quantmap__8u1__p9_1,
+ 	15,
+ 	15
+ };
+ 
+ static static_codebook _8u1__p9_1 = {
+ 	2, 225,
+ 	_vq_lengthlist__8u1__p9_1,
+ 	1, -522338304, 1620115456, 4, 0,
+ 	_vq_quantlist__8u1__p9_1,
+ 	NULL,
+ 	&_vq_auxt__8u1__p9_1,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _vq_quantlist__8u1__p9_2[] = {
+ 	8,
+ 	7,
+ 	9,
+ 	6,
+ 	10,
+ 	5,
+ 	11,
+ 	4,
+ 	12,
+ 	3,
+ 	13,
+ 	2,
+ 	14,
+ 	1,
+ 	15,
+ 	0,
+ 	16,
+ };
+ 
+ static long _vq_lengthlist__8u1__p9_2[] = {
+ 	 2, 5, 4, 6, 6, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 5, 6, 6, 7, 7, 8, 8, 9, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 5, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9,
+ 	 9,10,10, 9, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9, 9,
+ 	 9, 9, 9,10,10, 8, 8, 8, 9, 9, 9, 9,10,10,10, 9,
+ 	10,10,10,10,10,10, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9,
+ 	10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,10,10,
+ 	10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,10,
+ 	10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9, 9,
+ 	 9,10,10,10,10,10,10,10,10,10,10,10,10, 9, 9, 9,
+ 	10,10,10,10,10,10,10,10,10,10,10,10,10,10, 9,10,
+ 	 9, 9, 9,10,10,10,10,10,10,10,10,10,10,10,10, 9,
+ 	10, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	 9, 9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+ 	10,
+ };
+ 
+ static float _vq_quantthresh__8u1__p9_2[] = {
+ 	-7.5, -6.5, -5.5, -4.5, -3.5, -2.5, -1.5, -0.5, 
+ 	0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 
+ };
+ 
+ static long _vq_quantmap__8u1__p9_2[] = {
+ 	   15,   13,   11,    9,    7,    5,    3,    1,
+ 	    0,    2,    4,    6,    8,   10,   12,   14,
+ 	   16,
+ };
+ 
+ static encode_aux_threshmatch _vq_auxt__8u1__p9_2 = {
+ 	_vq_quantthresh__8u1__p9_2,
+ 	_vq_quantmap__8u1__p9_2,
+ 	17,
+ 	17
+ };
+ 
+ static static_codebook _8u1__p9_2 = {
+ 	2, 289,
+ 	_vq_lengthlist__8u1__p9_2,
+ 	1, -529530880, 1611661312, 5, 0,
+ 	_vq_quantlist__8u1__p9_2,
+ 	NULL,
+ 	&_vq_auxt__8u1__p9_2,
+ 	NULL,
+ 	0
+ };
+ 
+ static long _huff_lengthlist__8u1__single[] = {
+ 	 4, 7,13, 9,15, 9,16, 8,10,13, 7, 5, 8, 6, 9, 7,
+ 	10, 7,10,11,11, 6, 7, 8, 8, 9, 9, 9,12,16, 8, 5,
+ 	 8, 6, 8, 6, 9, 7,10,12,11, 7, 7, 7, 6, 7, 7, 7,
+ 	11,15, 7, 5, 8, 6, 7, 5, 7, 6, 9,13,13, 9, 9, 8,
+ 	 6, 6, 5, 5, 9,14, 8, 6, 8, 6, 6, 4, 5, 3, 5,13,
+ 	 9, 9,11, 8,10, 7, 8, 4, 5,12,11,16,17,15,17,12,
+ 	13, 8, 8,15,
+ };
+ 
+ static static_codebook _huff_book__8u1__single = {
+ 	2, 100,
+ 	_huff_lengthlist__8u1__single,
+ 	0, 0, 0, 0, 0,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	NULL,
+ 	0
+ };
+ 
+ 
+ /***** residue backends *********************************************/
+ 
+ 
+ static vorbis_info_residue0 _residue_44_low_un={
+   0,-1, -1, 8,-1,
+   {0},
+   {-1},
+   {  .5,  1.5,  1.5,  2.5,  2.5,  4.5, 28.5},
+   {  -1,   25,   -1,   45,   -1,   -1,   -1}
+ };
+ 
+ static vorbis_info_residue0 _residue_44_mid_un={
+   0,-1, -1, 10,-1,
+   /*  0     1     2     3     4     5     6     7     8     9 */
+   {0},
+   {-1},
+   {  .5,  1.5,  1.5,  2.5,  2.5,  4.5,  4.5, 16.5, 60.5},
+   {  -1,   30,   -1,   50,   -1,   80,   -1,   -1,   -1}
+ };
+ 
+ static vorbis_info_residue0 _residue_44_hi_un={
+   0,-1, -1, 10,-1,
+   /*  0     1     2     3     4     5     6     7     8     9 */
+   {0},
+   {-1},
+   {  .5,  1.5,  2.5,  4.5,  8.5, 16.5, 32.5, 71.5,157.5},
+   {  -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1}
+ };
+ 
+ /* mapping conventions:
+    only one submap (this would change for efficient 5.1 support for example)*/
+ /* Four psychoacoustic profiles are used, one for each blocktype */
+ static vorbis_info_mapping0 _map_nominal_u[2]={
+   {1, {0,0}, {0}, {0}, 0,{0},{0}},
+   {1, {0,0}, {1}, {1}, 0,{0},{0}}
+ };
+ 
+ static static_bookblock _resbook_44u_0={
+   {
+     {0},
+     {0,0,&_44u0__p1_0},
+     {0,0,&_44u0__p2_0},
+     {0,0,&_44u0__p3_0},
+     {0,0,&_44u0__p4_0},
+     {0,0,&_44u0__p5_0},
+     {&_44u0__p6_0,&_44u0__p6_1},
+     {&_44u0__p7_0,&_44u0__p7_1,&_44u0__p7_2}
+    }
+ };
+ static static_bookblock _resbook_44u_1={
+   {
+     {0},
+     {0,0,&_44u1__p1_0},
+     {0,0,&_44u1__p2_0},
+     {0,0,&_44u1__p3_0},
+     {0,0,&_44u1__p4_0},
+     {0,0,&_44u1__p5_0},
+     {&_44u1__p6_0,&_44u1__p6_1},
+     {&_44u1__p7_0,&_44u1__p7_1,&_44u1__p7_2}
+    }
+ };
+ static static_bookblock _resbook_44u_2={
+   {
+     {0},
+     {0,0,&_44u2__p1_0},
+     {0,0,&_44u2__p2_0},
+     {0,0,&_44u2__p3_0},
+     {0,0,&_44u2__p4_0},
+     {0,0,&_44u2__p5_0},
+     {&_44u2__p6_0,&_44u2__p6_1},
+     {&_44u2__p7_0,&_44u2__p7_1,&_44u2__p7_2}
+    }
+ };
+ static static_bookblock _resbook_44u_3={
+   {
+     {0},
+     {0,0,&_44u3__p1_0},
+     {0,0,&_44u3__p2_0},
+     {0,0,&_44u3__p3_0},
+     {0,0,&_44u3__p4_0},
+     {0,0,&_44u3__p5_0},
+     {&_44u3__p6_0,&_44u3__p6_1},
+     {&_44u3__p7_0,&_44u3__p7_1,&_44u3__p7_2}
+    }
+ };
+ static static_bookblock _resbook_44u_4={
+   {
+     {0},
+     {0,0,&_44u4__p1_0},
+     {0,0,&_44u4__p2_0},
+     {0,0,&_44u4__p3_0},
+     {0,0,&_44u4__p4_0},
+     {0,0,&_44u4__p5_0},
+     {&_44u4__p6_0,&_44u4__p6_1},
+     {&_44u4__p7_0,&_44u4__p7_1,&_44u4__p7_2}
+    }
+ };
+ static static_bookblock _resbook_44u_5={
+   {
+     {0},
+     {0,0,&_44u5__p1_0},
+     {0,0,&_44u5__p2_0},
+     {0,0,&_44u5__p3_0},
+     {0,0,&_44u5__p4_0},
+     {0,0,&_44u5__p5_0},
+     {0,0,&_44u5__p6_0},
+     {&_44u5__p7_0,&_44u5__p7_1},
+     {&_44u5__p8_0,&_44u5__p8_1},
+     {&_44u5__p9_0,&_44u5__p9_1,&_44u5__p9_2}
+    }
+ };
+ static static_bookblock _resbook_44u_6={
+   {
+     {0},
+     {0,0,&_44u6__p1_0},
+     {0,0,&_44u6__p2_0},
+     {0,0,&_44u6__p3_0},
+     {0,0,&_44u6__p4_0},
+     {0,0,&_44u6__p5_0},
+     {0,0,&_44u6__p6_0},
+     {&_44u6__p7_0,&_44u6__p7_1},
+     {&_44u6__p8_0,&_44u6__p8_1},
+     {&_44u6__p9_0,&_44u6__p9_1,&_44u6__p9_2}
+    }
+ };
+ static static_bookblock _resbook_44u_7={
+   {
+     {0},
+     {0,0,&_44u7__p1_0},
+     {0,0,&_44u7__p2_0},
+     {0,0,&_44u7__p3_0},
+     {0,0,&_44u7__p4_0},
+     {0,0,&_44u7__p5_0},
+     {0,0,&_44u7__p6_0},
+     {&_44u7__p7_0,&_44u7__p7_1},
+     {&_44u7__p8_0,&_44u7__p8_1},
+     {&_44u7__p9_0,&_44u7__p9_1,&_44u7__p9_2}
+    }
+ };
+ static static_bookblock _resbook_44u_8={
+   {
+     {0},
+     {0,0,&_44u8_p1_0},
+     {0,0,&_44u8_p2_0},
+     {0,0,&_44u8_p3_0},
+     {0,0,&_44u8_p4_0},
+     {&_44u8_p5_0,&_44u8_p5_1},
+     {&_44u8_p6_0,&_44u8_p6_1},
+     {&_44u8_p7_0,&_44u8_p7_1},
+     {&_44u8_p8_0,&_44u8_p8_1},
+     {&_44u8_p9_0,&_44u8_p9_1,&_44u8_p9_2}
+    }
+ };
+ static static_bookblock _resbook_44u_9={
+   {
+     {0},
+     {0,0,&_44u9_p1_0},
+     {0,0,&_44u9_p2_0},
+     {0,0,&_44u9_p3_0},
+     {0,0,&_44u9_p4_0},
+     {&_44u9_p5_0,&_44u9_p5_1},
+     {&_44u9_p6_0,&_44u9_p6_1},
+     {&_44u9_p7_0,&_44u9_p7_1},
+     {&_44u9_p8_0,&_44u9_p8_1},
+     {&_44u9_p9_0,&_44u9_p9_1,&_44u9_p9_2}
+    }
+ };
+ 
+ static vorbis_residue_template _res_44u_0[]={
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u0__short,&_huff_book__44u0__short,
+    &_resbook_44u_0,&_resbook_44u_0},
+ 
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u0__long,&_huff_book__44u0__long,
+    &_resbook_44u_0,&_resbook_44u_0}
+ };
+ static vorbis_residue_template _res_44u_1[]={
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u1__short,&_huff_book__44u1__short,
+    &_resbook_44u_1,&_resbook_44u_1},
+ 
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u1__long,&_huff_book__44u1__long,
+    &_resbook_44u_1,&_resbook_44u_1}
+ };
+ static vorbis_residue_template _res_44u_2[]={
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u2__short,&_huff_book__44u2__short,
+    &_resbook_44u_2,&_resbook_44u_2},
+ 
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u2__long,&_huff_book__44u2__long,
+    &_resbook_44u_2,&_resbook_44u_2}
+ };
+ static vorbis_residue_template _res_44u_3[]={
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u3__short,&_huff_book__44u3__short,
+    &_resbook_44u_3,&_resbook_44u_3},
+ 
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u3__long,&_huff_book__44u3__long,
+    &_resbook_44u_3,&_resbook_44u_3}
+ };
+ static vorbis_residue_template _res_44u_4[]={
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u4__short,&_huff_book__44u4__short,
+    &_resbook_44u_4,&_resbook_44u_4},
+ 
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__44u4__long,&_huff_book__44u4__long,
+    &_resbook_44u_4,&_resbook_44u_4}
+ };
+ 
+ static vorbis_residue_template _res_44u_5[]={
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__44u5__short,&_huff_book__44u5__short,
+    &_resbook_44u_5,&_resbook_44u_5},
+ 
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__44u5__long,&_huff_book__44u5__long,
+    &_resbook_44u_5,&_resbook_44u_5}
+ };
+ 
+ static vorbis_residue_template _res_44u_6[]={
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__44u6__short,&_huff_book__44u6__short,
+    &_resbook_44u_6,&_resbook_44u_6},
+ 
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__44u6__long,&_huff_book__44u6__long,
+    &_resbook_44u_6,&_resbook_44u_6}
+ };
+ 
+ static vorbis_residue_template _res_44u_7[]={
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__44u7__short,&_huff_book__44u7__short,
+    &_resbook_44u_7,&_resbook_44u_7},
+ 
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__44u7__long,&_huff_book__44u7__long,
+    &_resbook_44u_7,&_resbook_44u_7}
+ };
+ 
+ static vorbis_residue_template _res_44u_8[]={
+   {1,0,  &_residue_44_hi_un,
+    &_huff_book__44u8__short,&_huff_book__44u8__short,
+    &_resbook_44u_8,&_resbook_44u_8},
+ 
+   {1,0,  &_residue_44_hi_un,
+    &_huff_book__44u8__long,&_huff_book__44u8__long,
+    &_resbook_44u_8,&_resbook_44u_8}
+ };
+ static vorbis_residue_template _res_44u_9[]={
+   {1,0,  &_residue_44_hi_un,
+    &_huff_book__44u9__short,&_huff_book__44u9__short,
+    &_resbook_44u_9,&_resbook_44u_9},
+ 
+   {1,0,  &_residue_44_hi_un,
+    &_huff_book__44u9__long,&_huff_book__44u9__long,
+    &_resbook_44u_9,&_resbook_44u_9}
+ };
+ 
+ static vorbis_mapping_template _mapres_template_44_uncoupled[]={
+   { _map_nominal_u, _res_44u_0 }, /* 0 */
+   { _map_nominal_u, _res_44u_1 }, /* 1 */
+   { _map_nominal_u, _res_44u_2 }, /* 2 */
+   { _map_nominal_u, _res_44u_3 }, /* 3 */
+   { _map_nominal_u, _res_44u_4 }, /* 4 */
+   { _map_nominal_u, _res_44u_5 }, /* 5 */
+   { _map_nominal_u, _res_44u_6 }, /* 6 */
+   { _map_nominal_u, _res_44u_7 }, /* 7 */
+   { _map_nominal_u, _res_44u_8 }, /* 8 */
+   { _map_nominal_u, _res_44u_9 }, /* 9 */
+ };
+ 
+ static double rate_mapping_44_un[11]={
+   48000.,60000.,70000.,80000.,86000.,
+   96000.,110000.,120000.,140000.,160000.,240001.
+ };
+ 
+ static double rate_mapping_44_un_low[2]={
+   32000.,48000.
+ };
+ 
+ ve_setup_data_template ve_setup_44_uncoupled={
+   10,
+   rate_mapping_44_un,
+   quality_mapping_44,
+   -1,
+   40000,
+   50000,
+   
+   blocksize_short_44,
+   blocksize_long_44,
+ 
+   _psy_tone_masteratt_44,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_impulse,
+   _psy_noisebias_padding,
+   _psy_noisebias_trans,
+   _psy_noisebias_long,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44,_noise_start_long_44},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_44,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   NULL,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44,
+   _floor_long_mapping_44,
+ 
+   _mapres_template_44_uncoupled
+ };
+ 
+ ve_setup_data_template ve_setup_44_uncoupled_low={
+   1,
+   rate_mapping_44_un_low,
+   quality_mapping_44_stereo_low,
+   -1,
+   40000,
+   50000,
+   
+   blocksize_short_44_low,
+   blocksize_long_44_low,
+ 
+   _psy_tone_masteratt_44_low,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_long_low,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44_low,_noise_start_long_44_low},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_44_low,
+ 
+   _psy_global_44,
+   _global_mapping_44_low,
+   NULL,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44_low,
+   _floor_long_mapping_44_low,
+ 
+   _mapres_template_44_uncoupled
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: toplevel settings for 32kHz
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static double rate_mapping_32[11]={
+   28000.,35000.,45000.,56000.,60000.,
+   75000.,90000.,100000.,115000.,150000.,190000.,
+ };
+ 
+ static double rate_mapping_32_un[11]={
+   42000.,52000.,64000.,72000.,78000.,
+   86000.,92000.,110000.,120000.,140000.,190000.,
+ };
+ 
+ static double rate_mapping_32_low[2]={
+   20000.,28000.
+ };
+ 
+ static double rate_mapping_32_un_low[2]={
+   24000.,42000.,
+ };
+ 
+ static double _psy_lowpass_32_low[2]={
+   13.,13.,
+ };
+ static double _psy_lowpass_32[11]={
+   13.,13.,14.,15.,99.,99.,99.,99.,99.,99.,99.
+ };
+ 
+ ve_setup_data_template ve_setup_32_stereo={
+   10,
+   rate_mapping_32,
+   quality_mapping_44,
+   2,
+   26000,
+   40000,
+   
+   blocksize_short_44,
+   blocksize_long_44,
+ 
+   _psy_tone_masteratt_44,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_impulse,
+   _psy_noisebias_padding,
+   _psy_noisebias_trans,
+   _psy_noisebias_long,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44,_noise_start_long_44},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_32,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   _psy_stereo_modes_44,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44,
+   _floor_long_mapping_44,
+ 
+   _mapres_template_44_stereo
+ };
+ 
+ ve_setup_data_template ve_setup_32_uncoupled={
+   10,
+   rate_mapping_32_un,
+   quality_mapping_44,
+   -1,
+   26000,
+   40000,
+   
+   blocksize_short_44,
+   blocksize_long_44,
+ 
+   _psy_tone_masteratt_44,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_impulse,
+   _psy_noisebias_padding,
+   _psy_noisebias_trans,
+   _psy_noisebias_long,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44,_noise_start_long_44},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_32,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   NULL,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44,
+   _floor_long_mapping_44,
+ 
+   _mapres_template_44_uncoupled
+ };
+ 
+ ve_setup_data_template ve_setup_32_stereo_low={
+   1,
+   rate_mapping_32_low,
+   quality_mapping_44_stereo_low,
+   2,
+   26000,
+   40000,
+   
+   blocksize_short_44_low,
+   blocksize_long_44_low,
+ 
+   _psy_tone_masteratt_44_low,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_long_low,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44_low,_noise_start_long_44_low},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_32_low,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   _psy_stereo_modes_44_low,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44_low,
+   _floor_long_mapping_44_low,
+ 
+   _mapres_template_44_stereo
+ };
+ 
+ 
+ ve_setup_data_template ve_setup_32_uncoupled_low={
+   1,
+   rate_mapping_32_un_low,
+   quality_mapping_44_stereo_low,
+   -1,
+   26000,
+   40000,
+   
+   blocksize_short_44_low,
+   blocksize_long_44_low,
+ 
+   _psy_tone_masteratt_44_low,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_long_low,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44_low,_noise_start_long_44_low},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_32_low,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   NULL,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44_low,
+   _floor_long_mapping_44_low,
+ 
+   _mapres_template_44_uncoupled
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: 8kHz settings 
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: 8kHz psychoacoustic settings 
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static att3 _psy_tone_masteratt_8[3]={
+   {{ 32,  25,  12},  0,   0},  /* 0 */
+   {{ 30,  25,  12},  0,   0},  /* 0 */
+   {{ 20,   0, -14},  0,   0}, /* 0 */
+ };
+ 
+ static vp_adjblock _vp_tonemask_adj_8[3]={
+   /* adjust for mode zero */
+   /* 63     125     250     500     1     2     4     8    16 */
+   {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0,10, 0, 0,99,99,99}}, /* 1 */
+   {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0,10, 0, 0,99,99,99}}, /* 1 */
+   {{-15,-15,-15,-15,-10,-10, -6, 0, 0, 0, 0, 0, 0, 0,99,99,99}}, /* 1 */
+ };
+ 
+ 
+ static noise3 _psy_noisebias_8[3]={
+   /*  63     125     250     500      1k       2k      4k      8k     16k*/
+   {{{-10,-10,-10,-10, -5, -5, -5,  0,  4,  8,  8,  8, 10, 10, 99, 99, 99},
+     {-10,-10,-10,-10, -5, -5, -5,  0,  0,  4,  4,  4,  4,  4, 99, 99, 99},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
+ 
+   {{{-10,-10,-10,-10, -5, -5, -5,  0,  4,  8,  8,  8, 10, 10, 99, 99, 99},
+     {-10,-10,-10,-10,-10,-10, -5, -5, -5,  0,  0,  0,  0,  0, 99, 99, 99},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
+ 
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5, 99, 99, 99},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10, 99, 99, 99},
+     {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24, 99, 99, 99}}},
+ };
+ 
+ /* stereo mode by base quality level */
+ static adj_stereo _psy_stereo_modes_8[3]={
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  */
+   {{  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
+    {  6,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
+    {  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   {{  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
+    {  6,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
+    {  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   {{  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
+    {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
+    {  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+ };
+ 
+ static noiseguard _psy_noiseguards_8[2]={
+   {10,10,-1},
+   {10,10,-1},
+ };
+ 
+ static compandblock _psy_compand_8[2]={
+   {{
+      0, 1, 2, 3, 4, 5, 6,  7,     /* 7dB */
+      8, 8, 9, 9,10,10,11, 11,     /* 15dB */
+     12,12,13,13,14,14,15, 15,     /* 23dB */
+     16,16,17,17,17,18,18, 19,     /* 31dB */
+     19,19,20,21,22,23,24, 25,     /* 39dB */
+   }},
+   {{
+      0, 1, 2, 3, 4, 5, 6,  6,     /* 7dB */
+      7, 7, 6, 6, 5, 5, 4,  4,     /* 15dB */
+      3, 3, 3, 4, 5, 6, 7,  8,     /* 23dB */
+      9,10,11,12,13,14,15, 16,     /* 31dB */
+     17,18,19,20,21,22,23, 24,     /* 39dB */
+   }},
+ };
+ 
+ static double _psy_lowpass_8[3]={3.,4.,4.};
+ static int _noise_start_8[2]={
+   64,64,
+ };
+ static int _noise_part_8[2]={
+   8,8,
+ };
+ 
+ static int _psy_ath_floater_8[3]={
+   -100,-100,-105,
+ };
+ 
+ static int _psy_ath_abs_8[3]={
+   -130,-130,-140,
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: toplevel residue templates 8/11kHz
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ 
+ /***** residue backends *********************************************/
+ 
+ static static_bookblock _resbook_8s_0={
+   {
+     {0},{0,0,&_8c0_s_p1_0},{0,0,&_8c0_s_p2_0},{0,0,&_8c0_s_p3_0},
+     {0,0,&_8c0_s_p4_0},{0,0,&_8c0_s_p5_0},{0,0,&_8c0_s_p6_0},
+     {&_8c0_s_p7_0,&_8c0_s_p7_1},{&_8c0_s_p8_0,&_8c0_s_p8_1},
+     {&_8c0_s_p9_0,&_8c0_s_p9_1,&_8c0_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_8s_1={
+   {
+     {0},{0,0,&_8c1_s_p1_0},{0,0,&_8c1_s_p2_0},{0,0,&_8c1_s_p3_0},
+     {0,0,&_8c1_s_p4_0},{0,0,&_8c1_s_p5_0},{0,0,&_8c1_s_p6_0},
+     {&_8c1_s_p7_0,&_8c1_s_p7_1},{&_8c1_s_p8_0,&_8c1_s_p8_1},
+     {&_8c1_s_p9_0,&_8c1_s_p9_1,&_8c1_s_p9_2}
+    }
+ };
+ 
+ static vorbis_residue_template _res_8s_0[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__8c0_s_single,&_huff_book__8c0_s_single,
+    &_resbook_8s_0,&_resbook_8s_0},
+ };
+ static vorbis_residue_template _res_8s_1[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__8c1_s_single,&_huff_book__8c1_s_single,
+    &_resbook_8s_1,&_resbook_8s_1},
+ };
+ 
+ static vorbis_mapping_template _mapres_template_8_stereo[2]={
+   { _map_nominal, _res_8s_0 }, /* 0 */
+   { _map_nominal, _res_8s_1 }, /* 1 */
+ };
+ 
+ static static_bookblock _resbook_8u_0={
+   {
+     {0},
+     {0,0,&_8u0__p1_0},
+     {0,0,&_8u0__p2_0},
+     {0,0,&_8u0__p3_0},
+     {0,0,&_8u0__p4_0},
+     {0,0,&_8u0__p5_0},
+     {&_8u0__p6_0,&_8u0__p6_1},
+     {&_8u0__p7_0,&_8u0__p7_1,&_8u0__p7_2}
+    }
+ };
+ static static_bookblock _resbook_8u_1={
+   {
+     {0},
+     {0,0,&_8u1__p1_0},
+     {0,0,&_8u1__p2_0},
+     {0,0,&_8u1__p3_0},
+     {0,0,&_8u1__p4_0},
+     {0,0,&_8u1__p5_0},
+     {0,0,&_8u1__p6_0},
+     {&_8u1__p7_0,&_8u1__p7_1},
+     {&_8u1__p8_0,&_8u1__p8_1},
+     {&_8u1__p9_0,&_8u1__p9_1,&_8u1__p9_2}
+    }
+ };
+ 
+ static vorbis_residue_template _res_8u_0[]={
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__8u0__single,&_huff_book__8u0__single,
+    &_resbook_8u_0,&_resbook_8u_0},
+ };
+ static vorbis_residue_template _res_8u_1[]={
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__8u1__single,&_huff_book__8u1__single,
+    &_resbook_8u_1,&_resbook_8u_1},
+ };
+ 
+ static vorbis_mapping_template _mapres_template_8_uncoupled[2]={
+   { _map_nominal_u, _res_8u_0 }, /* 0 */
+   { _map_nominal_u, _res_8u_1 }, /* 1 */
+ };
+ 
+ static int blocksize_8[2]={
+   512,512
+ };
+ 
+ static int _floor_mapping_8[2]={
+   1,1,
+ };
+ 
+ static double rate_mapping_8[3]={
+   6000.,9000.,32000.,
+ };
+ 
+ static double rate_mapping_8_uncoupled[3]={
+   8000.,14000.,42000.,
+ };
+ 
+ static double quality_mapping_8[3]={
+   -.1,.0,1.
+ };
+ 
+ static double _psy_compand_8_mapping[3]={ 0., 1., 1.};
+ 
+ static double _global_mapping_8[3]={ 1., 2., 3. };
+ 
+ ve_setup_data_template ve_setup_8_stereo={
+   2,
+   rate_mapping_8,
+   quality_mapping_8,
+   2,
+   8000,
+   9000,
+   
+   blocksize_8,
+   blocksize_8,
+ 
+   _psy_tone_masteratt_8,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_8,
+   NULL,
+   _vp_tonemask_adj_8,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_8,
+   _psy_noisebias_8,
+   NULL,
+   NULL,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_8_mapping,
+   NULL,
+ 
+   {_noise_start_8,_noise_start_8},
+   {_noise_part_8,_noise_part_8},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater_8,
+   _psy_ath_abs_8,
+   
+   _psy_lowpass_8,
+ 
+   _psy_global_44,
+   _global_mapping_8,
+   _psy_stereo_modes_8,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_8,
+   NULL,
+ 
+   _mapres_template_8_stereo
+ };
+ 
+ ve_setup_data_template ve_setup_8_uncoupled={
+   2,
+   rate_mapping_8_uncoupled,
+   quality_mapping_8,
+   -1,
+   8000,
+   9000,
+   
+   blocksize_8,
+   blocksize_8,
+ 
+   _psy_tone_masteratt_8,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_8,
+   NULL,
+   _vp_tonemask_adj_8,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_8,
+   _psy_noisebias_8,
+   NULL,
+   NULL,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_8_mapping,
+   NULL,
+ 
+   {_noise_start_8,_noise_start_8},
+   {_noise_part_8,_noise_part_8},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater_8,
+   _psy_ath_abs_8,
+   
+   _psy_lowpass_8,
+ 
+   _psy_global_44,
+   _global_mapping_8,
+   _psy_stereo_modes_8,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_8,
+   NULL,
+ 
+   _mapres_template_8_uncoupled
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: 11kHz settings 
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: 11kHz settings 
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static double _psy_lowpass_11[3]={4.5,5.5,30.,};
+ 
+ static att3 _psy_tone_masteratt_11[3]={
+   {{ 30,  25,  12},  0,   0},  /* 0 */
+   {{ 30,  25,  12},  0,   0},  /* 0 */
+   {{ 20,   0, -14},  0,  1.}, /* 0 */
+ };
+ 
+ static vp_adjblock _vp_tonemask_adj_11[3]={
+   /* adjust for mode zero */
+   /* 63     125     250     500     1     2     4     8    16 */
+   {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0,10, 2, 0,99,99,99}}, /* 0 */
+   {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 5, 0, 0,99,99,99}}, /* 1 */
+   {{-20,-20,-20,-20,-20,-16,-10, 0, 0, 0, 0, 0, 0, 0,99,99,99}}, /* 2 */
+ };
+ 
+ 
+ static noise3 _psy_noisebias_11[3]={
+   /*  63     125     250     500      1k       2k      4k      8k     16k*/
+   {{{-10,-10,-10,-10, -5, -5, -5,  0,  4, 10, 10, 12, 12, 12, 99, 99, 99},
+     {-15,-15,-15,-15,-10,-10, -5,  0,  0,  4,  4,  5,  5, 10, 99, 99, 99},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
+ 
+   {{{-10,-10,-10,-10, -5, -5, -5,  0,  4, 10, 10, 12, 12, 12, 99, 99, 99},
+     {-15,-15,-15,-15,-10,-10, -5, -5, -5,  0,  0,  0,  0,  0, 99, 99, 99},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, 99, 99, 99}}},
+ 
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5, 99, 99, 99},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10, 99, 99, 99},
+     {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24, 99, 99, 99}}},
+ };
+ 
+ static double _noise_thresh_11[3]={ .3,.5,.5 };
+ 
+ static int blocksize_11[2]={
+   512,512
+ };
+ 
+ static int _floor_mapping_11[2]={
+   1,1,
+ };
+ 
+ static double rate_mapping_11[3]={
+   8000.,13000.,44000.,
+ };
+ 
+ static double rate_mapping_11_uncoupled[3]={
+   12000.,20000.,50000.,
+ };
+ 
+ static double quality_mapping_11[3]={
+   -.1,.0,1.
+ };
+ 
+ ve_setup_data_template ve_setup_11_stereo={
+   2,
+   rate_mapping_11,
+   quality_mapping_11,
+   2,
+   9000,
+   15000,
+   
+   blocksize_11,
+   blocksize_11,
+ 
+   _psy_tone_masteratt_11,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_11,
+   NULL,
+   _vp_tonemask_adj_11,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_11,
+   _psy_noisebias_11,
+   NULL,
+   NULL,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_8_mapping,
+   NULL,
+ 
+   {_noise_start_8,_noise_start_8},
+   {_noise_part_8,_noise_part_8},
+   _noise_thresh_11,
+ 
+   _psy_ath_floater_8,
+   _psy_ath_abs_8,
+   
+   _psy_lowpass_11,
+ 
+   _psy_global_44,
+   _global_mapping_8,
+   _psy_stereo_modes_8,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_11,
+   NULL,
+ 
+   _mapres_template_8_stereo
+ };
+ 
+ ve_setup_data_template ve_setup_11_uncoupled={
+   2,
+   rate_mapping_11_uncoupled,
+   quality_mapping_11,
+   -1,
+   9000,
+   15000,
+   
+   blocksize_11,
+   blocksize_11,
+ 
+   _psy_tone_masteratt_11,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_11,
+   NULL,
+   _vp_tonemask_adj_11,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_11,
+   _psy_noisebias_11,
+   NULL,
+   NULL,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_8_mapping,
+   NULL,
+ 
+   {_noise_start_8,_noise_start_8},
+   {_noise_part_8,_noise_part_8},
+   _noise_thresh_11,
+ 
+   _psy_ath_floater_8,
+   _psy_ath_abs_8,
+   
+   _psy_lowpass_11,
+ 
+   _psy_global_44,
+   _global_mapping_8,
+   _psy_stereo_modes_8,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_11,
+   NULL,
+ 
+   _mapres_template_8_uncoupled
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: 16kHz settings 
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: 16kHz settings 
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* stereo mode by base quality level */
+ static adj_stereo _psy_stereo_modes_16[4]={
+   /*  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  */
+   {{  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
+    {  6,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
+    {  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  3,  4,  4},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   {{  4,  4,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
+    {  6,  5,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
+    {  2,  2,  2,  2,  2,  2,  2,  2,  2,  3,  4,  4,  4,  4,  4},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   {{  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
+    {  5,  4,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3},
+    {  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4,  4},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+   {{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
+    {  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8},
+    { 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99}},
+ };
+ 
+ static double _psy_lowpass_16[4]={6.5,8,30.,99.};
+ 
+ static att3 _psy_tone_masteratt_16[4]={
+   {{ 30,  25,  12},  0,   0},  /* 0 */
+   {{ 25,  22,  12},  0,   0},  /* 0 */
+   {{ 20,  12,   0},  0,   0},  /* 0 */
+   {{ 15,   0, -14},  0,   0}, /* 0 */
+ };
+ 
+ static vp_adjblock _vp_tonemask_adj_16[4]={
+   /* adjust for mode zero */
+   /* 63     125     250     500       1     2     4     8    16 */
+   {{-20,-20,-20,-20,-20,-16,-10,  0,  0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 0 */
+   {{-20,-20,-20,-20,-20,-16,-10,  0,  0, 0, 0,10, 0, 0, 0, 0, 0}}, /* 1 */
+   {{-20,-20,-20,-20,-20,-16,-10,  0,  0, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */
+   {{-30,-30,-30,-30,-30,-26,-20,-10, -5, 0, 0, 0, 0, 0, 0, 0, 0}}, /* 2 */
+ };
+ 
+ 
+ static noise3 _psy_noisebias_16_short[4]={
+   /*  63     125     250     500      1k       2k      4k      8k     16k*/
+   {{{-15,-15,-15,-15,-15,-10,-10,-5,   4, 10, 10, 10, 10, 12, 12, 14, 20},
+     {-15,-15,-15,-15,-15,-10,-10, -5,  0,  0,  4,  5,  5,  6,  8,  8, 15},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
+ 
+   {{{-15,-15,-15,-15,-15,-10,-10,-5,   4,  6,  6,  6,  6,  8, 10, 12, 20},
+     {-15,-15,-15,-15,-15,-15,-15,-10, -5, -5, -5,  4,  5,  6,  8,  8, 15},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10,-10,-10,-10,-10,-10,-10,-10,-10}}},
+ 
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8, 12},
+     {-20,-20,-20,-20,-16,-12,-20,-14,-10,-10, -8,  0,  0,  0,  0,  2,  5},
+     {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
+ 
+   {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5,  0,  0,  0,  6},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10,-10,-10, -6},
+     {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
+ };
+ 
+ static noise3 _psy_noisebias_16_impulse[4]={
+   /*  63     125     250     500      1k       2k      4k      8k     16k*/
+   {{{-15,-15,-15,-15,-15,-10,-10,-5,   4, 10, 10, 10, 10, 12, 12, 14, 20},
+     {-15,-15,-15,-15,-15,-10,-10, -5,  0,  0,  4,  5,  5,  6,  8,  8, 15},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
+ 
+   {{{-15,-15,-15,-15,-15,-10,-10,-5,   4,  4,  4,  4,  5,  5,  6,  8, 15},
+     {-15,-15,-15,-15,-15,-15,-15,-10, -5, -5, -5,  0,  0,  0,  0,  4, 10},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10,-10,-10,-10,-10,-10,-10,-10,-10}}},
+ 
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  0,  0,  0,  0,  0,  0,  4, 10},
+     {-20,-20,-20,-20,-16,-12,-20,-14,-10,-10,-10,-10,-10,-10,-10, -7, -5},
+     {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
+ 
+   {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5,  0,  0,  0,  6},
+     {-30,-30,-30,-30,-26,-22,-20,-18,-18,-18,-20,-20,-20,-20,-20,-20,-16},
+     {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
+ };
+ 
+ static noise3 _psy_noisebias_16[4]={
+   /*  63     125     250     500      1k       2k      4k      8k     16k*/
+   {{{-10,-10,-10,-10, -5, -5, -5,  0,  4,  6,  8,  8, 10, 10, 10, 14, 20},
+     {-10,-10,-10,-10,-10, -5, -2, -2,  0,  0,  0,  4,  5,  6,  8,  8, 15},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
+ 
+   {{{-10,-10,-10,-10, -5, -5, -5,  0,  4,  6,  6,  6,  6,  8, 10, 12, 20},
+     {-15,-15,-15,-15,-15,-10, -5, -5,  0,  0,  0,  4,  5,  6,  8,  8, 15},
+     {-30,-30,-30,-30,-30,-24,-20,-14,-10, -6, -8, -8, -6, -6, -6, -6, -6}}},
+ 
+   {{{-15,-15,-15,-15,-15,-12,-10, -8,  0,  2,  4,  4,  5,  5,  5,  8, 12},
+     {-20,-20,-20,-20,-16,-12,-20,-10, -5, -5,  0,  0,  0,  0,  0,  2,  5},
+     {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
+ 
+   {{{-15,-15,-15,-15,-15,-12,-10, -8, -5, -5, -5, -5, -5,  0,  0,  0,  6},
+     {-30,-30,-30,-30,-26,-22,-20,-14,-12,-12,-10,-10,-10,-10,-10,-10, -6},
+     {-30,-30,-30,-30,-26,-26,-26,-26,-26,-26,-26,-26,-26,-24,-20,-20,-20}}},
+ };
+ 
+ static double _noise_thresh_16[4]={ .3,.5,.5,.5 };
+ 
+ static int _noise_start_16[3]={ 256,256,9999 };
+ static int _noise_part_16[4]={ 8,8,8,8 };
+ 
+ static int _psy_ath_floater_16[4]={
+   -100,-100,-100,-105,
+ };
+ 
+ static int _psy_ath_abs_16[4]={
+   -130,-130,-130,-140,
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: toplevel residue templates 16/22kHz
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /***** residue backends *********************************************/
+ 
+ static static_bookblock _resbook_16s_0={
+   {
+     {0},
+     {0,0,&_16c0_s_p1_0},
+     {0,0,&_16c0_s_p2_0},
+     {0,0,&_16c0_s_p3_0},
+     {0,0,&_16c0_s_p4_0},
+     {0,0,&_16c0_s_p5_0},
+     {0,0,&_16c0_s_p6_0},
+     {&_16c0_s_p7_0,&_16c0_s_p7_1},
+     {&_16c0_s_p8_0,&_16c0_s_p8_1},
+     {&_16c0_s_p9_0,&_16c0_s_p9_1,&_16c0_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_16s_1={
+   {
+     {0},
+     {0,0,&_16c1_s_p1_0},
+     {0,0,&_16c1_s_p2_0},
+     {0,0,&_16c1_s_p3_0},
+     {0,0,&_16c1_s_p4_0},
+     {0,0,&_16c1_s_p5_0},
+     {0,0,&_16c1_s_p6_0},
+     {&_16c1_s_p7_0,&_16c1_s_p7_1},
+     {&_16c1_s_p8_0,&_16c1_s_p8_1},
+     {&_16c1_s_p9_0,&_16c1_s_p9_1,&_16c1_s_p9_2}
+    }
+ };
+ static static_bookblock _resbook_16s_2={
+   {
+     {0},
+     {0,0,&_16c2_s_p1_0},
+     {0,0,&_16c2_s_p2_0},
+     {0,0,&_16c2_s_p3_0},
+     {0,0,&_16c2_s_p4_0},
+     {&_16c2_s_p5_0,&_16c2_s_p5_1},
+     {&_16c2_s_p6_0,&_16c2_s_p6_1},
+     {&_16c2_s_p7_0,&_16c2_s_p7_1},
+     {&_16c2_s_p8_0,&_16c2_s_p8_1},
+     {&_16c2_s_p9_0,&_16c2_s_p9_1,&_16c2_s_p9_2}
+    }
+ };
+ 
+ static vorbis_residue_template _res_16s_0[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__16c0_s_single,&_huff_book__16c0_s_single,
+    &_resbook_16s_0,&_resbook_16s_0},
+ };
+ static vorbis_residue_template _res_16s_1[]={
+   {2,0,  &_residue_44_mid,
+    &_huff_book__16c1_s_short,&_huff_book__16c1_s_short,
+    &_resbook_16s_1,&_resbook_16s_1},
+   
+   {2,0,  &_residue_44_mid,
+    &_huff_book__16c1_s_long,&_huff_book__16c1_s_long,
+    &_resbook_16s_1,&_resbook_16s_1}
+ };
+ static vorbis_residue_template _res_16s_2[]={
+   {2,0,  &_residue_44_high,
+    &_huff_book__16c2_s_short,&_huff_book__16c2_s_short,
+    &_resbook_16s_2,&_resbook_16s_2},
+   
+   {2,0,  &_residue_44_high,
+    &_huff_book__16c2_s_long,&_huff_book__16c2_s_long,
+    &_resbook_16s_2,&_resbook_16s_2}
+ };
+ 
+ static vorbis_mapping_template _mapres_template_16_stereo[3]={
+   { _map_nominal, _res_16s_0 }, /* 0 */
+   { _map_nominal, _res_16s_1 }, /* 1 */
+   { _map_nominal, _res_16s_2 }, /* 2 */
+ };
+ 
+ static static_bookblock _resbook_16u_0={
+   {
+     {0},
+     {0,0,&_16u0__p1_0},
+     {0,0,&_16u0__p2_0},
+     {0,0,&_16u0__p3_0},
+     {0,0,&_16u0__p4_0},
+     {0,0,&_16u0__p5_0},
+     {&_16u0__p6_0,&_16u0__p6_1},
+     {&_16u0__p7_0,&_16u0__p7_1,&_16u0__p7_2}
+    }
+ };
+ static static_bookblock _resbook_16u_1={
+   {
+     {0},
+     {0,0,&_16u1__p1_0},
+     {0,0,&_16u1__p2_0},
+     {0,0,&_16u1__p3_0},
+     {0,0,&_16u1__p4_0},
+     {0,0,&_16u1__p5_0},
+     {0,0,&_16u1__p6_0},
+     {&_16u1__p7_0,&_16u1__p7_1},
+     {&_16u1__p8_0,&_16u1__p8_1},
+     {&_16u1__p9_0,&_16u1__p9_1,&_16u1__p9_2}
+    }
+ };
+ static static_bookblock _resbook_16u_2={
+   {
+     {0},
+     {0,0,&_16u2_p1_0},
+     {0,0,&_16u2_p2_0},
+     {0,0,&_16u2_p3_0},
+     {0,0,&_16u2_p4_0},
+     {&_16u2_p5_0,&_16u2_p5_1},
+     {&_16u2_p6_0,&_16u2_p6_1},
+     {&_16u2_p7_0,&_16u2_p7_1},
+     {&_16u2_p8_0,&_16u2_p8_1},
+     {&_16u2_p9_0,&_16u2_p9_1,&_16u2_p9_2}
+    }
+ };
+ 
+ static vorbis_residue_template _res_16u_0[]={
+   {1,0,  &_residue_44_low_un,
+    &_huff_book__16u0__single,&_huff_book__16u0__single,
+    &_resbook_16u_0,&_resbook_16u_0},
+ };
+ static vorbis_residue_template _res_16u_1[]={
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__16u1__short,&_huff_book__16u1__short,
+    &_resbook_16u_1,&_resbook_16u_1},
+   
+   {1,0,  &_residue_44_mid_un,
+    &_huff_book__16u1__long,&_huff_book__16u1__long,
+    &_resbook_16u_1,&_resbook_16u_1}
+ };
+ static vorbis_residue_template _res_16u_2[]={
+   {1,0,  &_residue_44_hi_un,
+    &_huff_book__16u2__short,&_huff_book__16u2__short,
+    &_resbook_16u_2,&_resbook_16u_2},
+   
+   {1,0,  &_residue_44_hi_un,
+    &_huff_book__16u2__long,&_huff_book__16u2__long,
+    &_resbook_16u_2,&_resbook_16u_2}
+ };
+ 
+ 
+ static vorbis_mapping_template _mapres_template_16_uncoupled[3]={
+   { _map_nominal_u, _res_16u_0 }, /* 0 */
+   { _map_nominal_u, _res_16u_1 }, /* 1 */
+   { _map_nominal_u, _res_16u_2 }, /* 2 */
+ };
+ 
+ static int blocksize_16_short[3]={
+   1024,512,512
+ };
+ static int blocksize_16_long[3]={
+   1024,1024,1024
+ };
+ 
+ static int _floor_mapping_16_short[3]={
+   9,3,3
+ };
+ static int _floor_mapping_16[3]={
+   9,9,9
+ };
+ 
+ static double rate_mapping_16[4]={
+   12000.,20000.,44000.,86000.
+ };
+ 
+ static double rate_mapping_16_uncoupled[4]={
+   16000.,28000.,64000.,100000.
+ };
+ 
+ static double _global_mapping_16[4]={ 1., 2., 3., 4. };
+ 
+ static double quality_mapping_16[4]={ -.1,.05,.5,1. };
+ 
+ static double _psy_compand_16_mapping[4]={ 0., .8, 1., 1.};
+ 
+ ve_setup_data_template ve_setup_16_stereo={
+   3,
+   rate_mapping_16,
+   quality_mapping_16,
+   2,
+   15000,
+   19000,
+   
+   blocksize_16_short,
+   blocksize_16_long,
+ 
+   _psy_tone_masteratt_16,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_16,
+   _vp_tonemask_adj_16,
+   _vp_tonemask_adj_16,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_16_impulse,
+   _psy_noisebias_16_short,
+   _psy_noisebias_16_short,
+   _psy_noisebias_16,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_16_mapping,
+   _psy_compand_16_mapping,
+ 
+   {_noise_start_16,_noise_start_16},
+   { _noise_part_16, _noise_part_16},
+   _noise_thresh_16,
+ 
+   _psy_ath_floater_16,
+   _psy_ath_abs_16,
+   
+   _psy_lowpass_16,
+ 
+   _psy_global_44,
+   _global_mapping_16,
+   _psy_stereo_modes_16,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_16_short,
+   _floor_mapping_16,
+ 
+   _mapres_template_16_stereo
+ };
+ 
+ ve_setup_data_template ve_setup_16_uncoupled={
+   3,
+   rate_mapping_16_uncoupled,
+   quality_mapping_16,
+   -1,
+   15000,
+   19000,
+   
+   blocksize_16_short,
+   blocksize_16_long,
+ 
+   _psy_tone_masteratt_16,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_16,
+   _vp_tonemask_adj_16,
+   _vp_tonemask_adj_16,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_16_impulse,
+   _psy_noisebias_16_short,
+   _psy_noisebias_16_short,
+   _psy_noisebias_16,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_16_mapping,
+   _psy_compand_16_mapping,
+ 
+   {_noise_start_16,_noise_start_16},
+   { _noise_part_16, _noise_part_16},
+   _noise_thresh_16,
+ 
+   _psy_ath_floater_16,
+   _psy_ath_abs_16,
+   
+   _psy_lowpass_16,
+ 
+   _psy_global_44,
+   _global_mapping_16,
+   _psy_stereo_modes_16,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_16_short,
+   _floor_mapping_16,
+ 
+   _mapres_template_16_uncoupled
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: 22kHz settings 
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static double rate_mapping_22[4]={
+   15000.,20000.,44000.,86000.
+ };
+ 
+ static double rate_mapping_22_uncoupled[4]={
+   16000.,28000.,50000.,90000.
+ };
+ 
+ static double _psy_lowpass_22[4]={9.5,11.,30.,99.};
+ 
+ ve_setup_data_template ve_setup_22_stereo={
+   3,
+   rate_mapping_22,
+   quality_mapping_16,
+   2,
+   19000,
+   26000,
+   
+   blocksize_16_short,
+   blocksize_16_long,
+ 
+   _psy_tone_masteratt_16,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_16,
+   _vp_tonemask_adj_16,
+   _vp_tonemask_adj_16,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_16_impulse,
+   _psy_noisebias_16_short,
+   _psy_noisebias_16_short,
+   _psy_noisebias_16,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_8_mapping,
+   _psy_compand_8_mapping,
+ 
+   {_noise_start_16,_noise_start_16},
+   { _noise_part_16, _noise_part_16},
+   _noise_thresh_16,
+ 
+   _psy_ath_floater_16,
+   _psy_ath_abs_16,
+   
+   _psy_lowpass_22,
+ 
+   _psy_global_44,
+   _global_mapping_16,
+   _psy_stereo_modes_16,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_16_short,
+   _floor_mapping_16,
+ 
+   _mapres_template_16_stereo
+ };
+ 
+ ve_setup_data_template ve_setup_22_uncoupled={
+   3,
+   rate_mapping_22_uncoupled,
+   quality_mapping_16,
+   -1,
+   19000,
+   26000,
+   
+   blocksize_16_short,
+   blocksize_16_long,
+ 
+   _psy_tone_masteratt_16,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_16,
+   _vp_tonemask_adj_16,
+   _vp_tonemask_adj_16,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_16_impulse,
+   _psy_noisebias_16_short,
+   _psy_noisebias_16_short,
+   _psy_noisebias_16,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_8_mapping,
+   _psy_compand_8_mapping,
+ 
+   {_noise_start_16,_noise_start_16},
+   { _noise_part_16, _noise_part_16},
+   _noise_thresh_16,
+ 
+   _psy_ath_floater_16,
+   _psy_ath_abs_16,
+   
+   _psy_lowpass_22,
+ 
+   _psy_global_44,
+   _global_mapping_16,
+   _psy_stereo_modes_16,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_16_short,
+   _floor_mapping_16,
+ 
+   _mapres_template_16_uncoupled
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: catch-all toplevel settings for q modes only
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static double rate_mapping_X[11]={
+   -1.,-1.,-1.,-1.,-1.,
+   -1.,-1.,-1.,-1.,-1.,-1.
+ };
+ 
+ ve_setup_data_template ve_setup_X_stereo={
+   10,
+   rate_mapping_X,
+   quality_mapping_44,
+   2,
+   50000,
+   200000,
+   
+   blocksize_short_44,
+   blocksize_long_44,
+ 
+   _psy_tone_masteratt_44,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_impulse,
+   _psy_noisebias_padding,
+   _psy_noisebias_trans,
+   _psy_noisebias_long,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44,_noise_start_long_44},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_44,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   _psy_stereo_modes_44,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44,
+   _floor_long_mapping_44,
+ 
+   _mapres_template_44_stereo
+ };
+ 
+ ve_setup_data_template ve_setup_X_uncoupled={
+   10,
+   rate_mapping_X,
+   quality_mapping_44,
+   -1,
+   50000,
+   200000,
+   
+   blocksize_short_44,
+   blocksize_long_44,
+ 
+   _psy_tone_masteratt_44,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_impulse,
+   _psy_noisebias_padding,
+   _psy_noisebias_trans,
+   _psy_noisebias_long,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44,_noise_start_long_44},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_44,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   NULL,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44,
+   _floor_long_mapping_44,
+ 
+   _mapres_template_44_uncoupled
+ };
+ 
+ ve_setup_data_template ve_setup_X_stereo_low={
+   1,
+   rate_mapping_X,
+   quality_mapping_44_stereo_low,
+   2,
+   50000,
+   200000,
+   
+   blocksize_short_44_low,
+   blocksize_long_44_low,
+ 
+   _psy_tone_masteratt_44_low,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_long_low,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44_low,_noise_start_long_44_low},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_44_low,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   _psy_stereo_modes_44_low,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44_low,
+   _floor_long_mapping_44_low,
+ 
+   _mapres_template_44_stereo
+ };
+ 
+ 
+ ve_setup_data_template ve_setup_X_uncoupled_low={
+   1,
+   rate_mapping_X,
+   quality_mapping_44_stereo_low,
+   -1,
+   50000,
+   200000,
+   
+   blocksize_short_44_low,
+   blocksize_long_44_low,
+ 
+   _psy_tone_masteratt_44_low,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_otherblock,
+   _vp_tonemask_adj_longblock,
+   _vp_tonemask_adj_otherblock,
+ 
+   _psy_noiseguards_44,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_trans_low,
+   _psy_noisebias_long_low,
+   _psy_noise_suppress,
+   
+   _psy_compand_44,
+   _psy_compand_short_mapping,
+   _psy_compand_long_mapping,
+ 
+   {_noise_start_short_44_low,_noise_start_long_44_low},
+   {_noise_part_short_44,_noise_part_long_44},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater,
+   _psy_ath_abs,
+   
+   _psy_lowpass_44_low,
+ 
+   _psy_global_44,
+   _global_mapping_44,
+   NULL,
+ 
+   _floor_books,
+   _floor,
+   _floor_short_mapping_44_low,
+   _floor_long_mapping_44_low,
+ 
+   _mapres_template_44_uncoupled
+ };
+ 
+ ve_setup_data_template ve_setup_XX_stereo={
+   2,
+   rate_mapping_X,
+   quality_mapping_8,
+   2,
+   0,
+   8000,
+   
+   blocksize_8,
+   blocksize_8,
+ 
+   _psy_tone_masteratt_8,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_8,
+   NULL,
+   _vp_tonemask_adj_8,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_8,
+   _psy_noisebias_8,
+   NULL,
+   NULL,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_8_mapping,
+   NULL,
+ 
+   {_noise_start_8,_noise_start_8},
+   {_noise_part_8,_noise_part_8},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater_8,
+   _psy_ath_abs_8,
+   
+   _psy_lowpass_8,
+ 
+   _psy_global_44,
+   _global_mapping_8,
+   _psy_stereo_modes_8,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_8,
+   NULL,
+ 
+   _mapres_template_8_stereo
+ };
+ 
+ ve_setup_data_template ve_setup_XX_uncoupled={
+   2,
+   rate_mapping_X,
+   quality_mapping_8,
+   -1,
+   0,
+   8000,
+   
+   blocksize_8,
+   blocksize_8,
+ 
+   _psy_tone_masteratt_8,
+   _psy_tone_0dB,
+   _psy_tone_suppress,
+ 
+   _vp_tonemask_adj_8,
+   NULL,
+   _vp_tonemask_adj_8,
+ 
+   _psy_noiseguards_8,
+   _psy_noisebias_8,
+   _psy_noisebias_8,
+   NULL,
+   NULL,
+   _psy_noise_suppress,
+   
+   _psy_compand_8,
+   _psy_compand_8_mapping,
+   NULL,
+ 
+   {_noise_start_8,_noise_start_8},
+   {_noise_part_8,_noise_part_8},
+   _noise_thresh_44_2,
+ 
+   _psy_ath_floater_8,
+   _psy_ath_abs_8,
+   
+   _psy_lowpass_8,
+ 
+   _psy_global_44,
+   _global_mapping_8,
+   _psy_stereo_modes_8,
+ 
+   _floor_books,
+   _floor,
+   _floor_mapping_8,
+   NULL,
+ 
+   _mapres_template_8_uncoupled
+ };
+ 
+ 
+ static ve_setup_data_template *setup_list[]={
+   &ve_setup_44_stereo,
+   &ve_setup_44_stereo_low,
+   &ve_setup_44_uncoupled,
+   &ve_setup_44_uncoupled_low,
+ 
+   &ve_setup_32_stereo,
+   &ve_setup_32_stereo_low,
+   &ve_setup_32_uncoupled,
+   &ve_setup_32_uncoupled_low,
+ 
+   &ve_setup_22_stereo,
+   &ve_setup_22_uncoupled,
+   &ve_setup_16_stereo,
+   &ve_setup_16_uncoupled,
+ 
+   &ve_setup_11_stereo,
+   &ve_setup_11_uncoupled,
+   &ve_setup_8_stereo,
+   &ve_setup_8_uncoupled,
+ 
+   &ve_setup_X_stereo,
+   &ve_setup_X_uncoupled,
+   &ve_setup_X_stereo_low,
+   &ve_setup_X_uncoupled_low,
+   &ve_setup_XX_stereo,
+   &ve_setup_XX_uncoupled,
+   0
+ };
+ 
+ static int vorbis_encode_toplevel_setup(vorbis_info *vi,int ch,long rate){
+   if(vi && vi->codec_setup){
+ 
+     vi->version=0;
+     vi->channels=ch;
+     vi->rate=rate;
+ 
+     return(0);
+   }
+   return(OV_EINVAL);
+ }
+ 
+ static void vorbis_encode_floor_setup(vorbis_info *vi,double s,int block,
+ 				     static_codebook    ***books, 
+ 				     vorbis_info_floor1 *in, 
+ 				     int *x){
+   int i,k,is=s;
+   vorbis_info_floor1 *f=_ogg_calloc(1,sizeof(*f));
+   codec_setup_info *ci=vi->codec_setup;
+ 
+   memcpy(f,in+x[is],sizeof(*f));
+   /* fill in the lowpass field, even if it's temporary */
+   f->n=ci->blocksizes[block]>>1;
+ 
+   /* books */
+   {
+     int partitions=f->partitions;
+     int maxclass=-1;
+     int maxbook=-1;
+     for(i=0;i<partitions;i++)
+       if(f->partitionclass[i]>maxclass)maxclass=f->partitionclass[i];
+     for(i=0;i<=maxclass;i++){
+       if(f->class_book[i]>maxbook)maxbook=f->class_book[i];
+       f->class_book[i]+=ci->books;
+       for(k=0;k<(1<<f->class_subs[i]);k++){
+ 	if(f->class_subbook[i][k]>maxbook)maxbook=f->class_subbook[i][k];
+ 	if(f->class_subbook[i][k]>=0)f->class_subbook[i][k]+=ci->books;
+       }
+     }
+ 
+     for(i=0;i<=maxbook;i++)
+       ci->book_param[ci->books++]=books[x[is]][i];
+   }
+ 
+   /* for now, we're only using floor 1 */
+   ci->floor_type[ci->floors]=1;
+   ci->floor_param[ci->floors]=f;
+   ci->floors++;
+ 
+   return;
+ }
+ 
+ static void vorbis_encode_global_psych_setup(vorbis_info *vi,double s,
+ 					    vorbis_info_psy_global *in, 
+ 					    double *x){
+   int i,is=s;
+   double ds=s-is;
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy_global *g=&ci->psy_g_param;
+   
+   memcpy(g,in+(int)x[is],sizeof(*g));
+   
+   ds=x[is]*(1.-ds)+x[is+1]*ds;
+   is=(int)ds;
+   ds-=is;
+   if(ds==0 && is>0){
+     is--;
+     ds=1.;
+   }
+   
+   /* interpolate the trigger threshholds */
+   for(i=0;i<4;i++){
+     g->preecho_thresh[i]=in[is].preecho_thresh[i]*(1.-ds)+in[is+1].preecho_thresh[i]*ds;
+     g->postecho_thresh[i]=in[is].postecho_thresh[i]*(1.-ds)+in[is+1].postecho_thresh[i]*ds;
+   }
+   g->ampmax_att_per_sec=ci->hi.amplitude_track_dBpersec;
+   return;
+ }
+ 
+ static void vorbis_encode_global_stereo(vorbis_info *vi,
+ 				       highlevel_encode_setup *hi,
+ 				       adj_stereo *p){
+   float s=hi->stereo_point_setting;
+   int i,is=s;
+   double ds=s-is;
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy_global *g=&ci->psy_g_param;
+ 
+   if(p){
+     memcpy(g->coupling_prepointamp,p[is].pre,sizeof(*p[is].pre)*PACKETBLOBS);
+     memcpy(g->coupling_postpointamp,p[is].post,sizeof(*p[is].post)*PACKETBLOBS);
+ 
+     if(hi->managed){
+       /* interpolate the kHz threshholds */
+       for(i=0;i<PACKETBLOBS;i++){
+ 	float kHz=p[is].kHz[i]*(1.-ds)+p[is+1].kHz[i]*ds;
+ 	g->coupling_pointlimit[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
+ 	g->coupling_pointlimit[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
+ 	g->coupling_pkHz[i]=kHz;
+ 	
+ 	kHz=p[is].lowpasskHz[i]*(1.-ds)+p[is+1].lowpasskHz[i]*ds;
+ 	g->sliding_lowpass[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
+ 	g->sliding_lowpass[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
+ 	
+       }
+     }else{
+       float kHz=p[is].kHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].kHz[PACKETBLOBS/2]*ds;
+       for(i=0;i<PACKETBLOBS;i++){
+ 	g->coupling_pointlimit[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
+ 	g->coupling_pointlimit[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
+ 	g->coupling_pkHz[i]=kHz;
+       }
+       
+       kHz=p[is].lowpasskHz[PACKETBLOBS/2]*(1.-ds)+p[is+1].lowpasskHz[PACKETBLOBS/2]*ds;
+       for(i=0;i<PACKETBLOBS;i++){
+ 	g->sliding_lowpass[0][i]=kHz*1000./vi->rate*ci->blocksizes[0];
+ 	g->sliding_lowpass[1][i]=kHz*1000./vi->rate*ci->blocksizes[1];
+       }
+     }
+   }else{
+     for(i=0;i<PACKETBLOBS;i++){
+       g->sliding_lowpass[0][i]=ci->blocksizes[0];
+       g->sliding_lowpass[1][i]=ci->blocksizes[1];
+     }
+   }
+   return;
+ }
+ 
+ static void vorbis_encode_psyset_setup(vorbis_info *vi,double s,
+ 				      int *nn_start,
+ 				      int *nn_partition,
+ 				      double *nn_thresh,
+ 				      int block){
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy *p=ci->psy_param[block];
+   highlevel_encode_setup *hi=&ci->hi;
+   int is=s;
+   
+   if(block>=ci->psys)
+     ci->psys=block+1;
+   if(!p){
+     p=_ogg_calloc(1,sizeof(*p));
+     ci->psy_param[block]=p;
+   }
+   
+   memcpy(p,&_psy_info_template,sizeof(*p));
+   p->blockflag=block>>1;
+ 
+   if(hi->noise_normalize_p){
+     p->normal_channel_p=1;
+     p->normal_point_p=1;
+     p->normal_start=nn_start[is];
+     p->normal_partition=nn_partition[is];
+     p->normal_thresh=nn_thresh[is];
+   }
+     
+   return;
+ }
+ 
+ static void vorbis_encode_tonemask_setup(vorbis_info *vi,double s,int block,
+ 					 att3 *att,
+ 					 int  *max,
+ 					 vp_adjblock *in){
+   int i,is=s;
+   double ds=s-is;
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy *p=ci->psy_param[block];
+ 
+   /* 0 and 2 are only used by bitmanagement, but there's no harm to always
+      filling the values in here */
+   p->tone_masteratt[0]=att[is].att[0]*(1.-ds)+att[is+1].att[0]*ds;
+   p->tone_masteratt[1]=att[is].att[1]*(1.-ds)+att[is+1].att[1]*ds;
+   p->tone_masteratt[2]=att[is].att[2]*(1.-ds)+att[is+1].att[2]*ds;
+   p->tone_centerboost=att[is].boost*(1.-ds)+att[is+1].boost*ds;
+   p->tone_decay=att[is].decay*(1.-ds)+att[is+1].decay*ds;
+ 
+   p->max_curve_dB=max[is]*(1.-ds)+max[is+1]*ds;
+ 
+   for(i=0;i<P_BANDS;i++)
+     p->toneatt[i]=in[is].block[i]*(1.-ds)+in[is+1].block[i]*ds;
+   return;
+ }
+ 
+ 
+ static void vorbis_encode_compand_setup(vorbis_info *vi,double s,int block,
+ 				       compandblock *in, double *x){
+   int i,is=s;
+   double ds=s-is;
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy *p=ci->psy_param[block];
+ 
+   ds=x[is]*(1.-ds)+x[is+1]*ds;
+   is=(int)ds;
+   ds-=is;
+   if(ds==0 && is>0){
+     is--;
+     ds=1.;
+   }
+ 
+   /* interpolate the compander settings */
+   for(i=0;i<NOISE_COMPAND_LEVELS;i++)
+     p->noisecompand[i]=in[is].data[i]*(1.-ds)+in[is+1].data[i]*ds;
+   return;
+ }
+ 
+ static void vorbis_encode_peak_setup(vorbis_info *vi,double s,int block,
+ 				    int *suppress){
+   int is=s;
+   double ds=s-is;
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy *p=ci->psy_param[block];
+ 
+   p->tone_abs_limit=suppress[is]*(1.-ds)+suppress[is+1]*ds;
+ 
+   return;
+ }
+ 
+ static void vorbis_encode_noisebias_setup(vorbis_info *vi,double s,int block,
+ 					 int *suppress,
+ 					 noise3 *in,
+ 					 noiseguard *guard,
+ 					 double userbias){
+   int i,is=s,j;
+   double ds=s-is;
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy *p=ci->psy_param[block];
+ 
+   p->noisemaxsupp=suppress[is]*(1.-ds)+suppress[is+1]*ds;
+   p->noisewindowlomin=guard[block].lo;
+   p->noisewindowhimin=guard[block].hi;
+   p->noisewindowfixed=guard[block].fixed;
+ 
+   for(j=0;j<P_NOISECURVES;j++)
+     for(i=0;i<P_BANDS;i++)
+       p->noiseoff[j][i]=in[is].data[j][i]*(1.-ds)+in[is+1].data[j][i]*ds;
+ 
+   /* impulse blocks may take a user specified bias to boost the
+      nominal/high noise encoding depth */
+   for(j=0;j<P_NOISECURVES;j++){
+     float min=p->noiseoff[j][0]+6; /* the lowest it can go */
+     for(i=0;i<P_BANDS;i++){
+       p->noiseoff[j][i]+=userbias;
+       if(p->noiseoff[j][i]<min)p->noiseoff[j][i]=min;
+     }
+   }
+ 
+   return;
+ }
+ 
+ static void vorbis_encode_ath_setup(vorbis_info *vi,int block){
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy *p=ci->psy_param[block];
+ 
+   p->ath_adjatt=ci->hi.ath_floating_dB;
+   p->ath_maxatt=ci->hi.ath_absolute_dB;
+   return;
+ }
+ 
+ 
+ static int book_dup_or_new(codec_setup_info *ci,static_codebook *book){
+   int i;
+   for(i=0;i<ci->books;i++)
+     if(ci->book_param[i]==book)return(i);
+   
+   return(ci->books++);
+ }
+ 
+ static void vorbis_encode_blocksize_setup(vorbis_info *vi,double s,
+ 					 int *shortb,int *longb){
+ 
+   codec_setup_info *ci=vi->codec_setup;
+   int is=s;
+   
+   int blockshort=shortb[is];
+   int blocklong=longb[is];
+   ci->blocksizes[0]=blockshort;
+   ci->blocksizes[1]=blocklong;
+ 
+ }
+ 
+ static void vorbis_encode_residue_setup(vorbis_info *vi,
+ 				       int number, int block,
+ 				       vorbis_residue_template *res){
+ 
+   codec_setup_info *ci=vi->codec_setup;
+   int i,n;
+   
+   vorbis_info_residue0 *r=ci->residue_param[number]=
+     _ogg_malloc(sizeof(*r));
+   
+   memcpy(r,res->res,sizeof(*r));
+   if(ci->residues<=number)ci->residues=number+1;
+ 
+   switch(ci->blocksizes[block]){
+   case 64:case 128:case 256:
+     r->grouping=16;
+     break;
+   default:
+     r->grouping=32;
+     break;
+   }
+   ci->residue_type[number]=res->res_type;
+ 
+   /* to be adjusted by lowpass/pointlimit later */
+   n=r->end=ci->blocksizes[block]>>1; 
+   if(res->res_type==2)
+     n=r->end*=vi->channels;
+   
+   /* fill in all the books */
+   {
+     int booklist=0,k;
+     
+     if(ci->hi.managed){
+       for(i=0;i<r->partitions;i++)
+ 	for(k=0;k<3;k++)
+ 	  if(res->books_base_managed->books[i][k])
+ 	    r->secondstages[i]|=(1<<k);
+ 
+       r->groupbook=book_dup_or_new(ci,res->book_aux_managed);
+       ci->book_param[r->groupbook]=res->book_aux_managed;      
+     
+       for(i=0;i<r->partitions;i++){
+ 	for(k=0;k<3;k++){
+ 	  if(res->books_base_managed->books[i][k]){
+ 	    int bookid=book_dup_or_new(ci,res->books_base_managed->books[i][k]);
+ 	    r->booklist[booklist++]=bookid;
+ 	    ci->book_param[bookid]=res->books_base_managed->books[i][k];
+ 	  }
+ 	}
+       }
+ 
+     }else{
+ 
+       for(i=0;i<r->partitions;i++)
+ 	for(k=0;k<3;k++)
+ 	  if(res->books_base->books[i][k])
+ 	    r->secondstages[i]|=(1<<k);
+   
+       r->groupbook=book_dup_or_new(ci,res->book_aux);
+       ci->book_param[r->groupbook]=res->book_aux;
+       
+       for(i=0;i<r->partitions;i++){
+ 	for(k=0;k<3;k++){
+ 	  if(res->books_base->books[i][k]){
+ 	    int bookid=book_dup_or_new(ci,res->books_base->books[i][k]);
+ 	    r->booklist[booklist++]=bookid;
+ 	    ci->book_param[bookid]=res->books_base->books[i][k];
+ 	  }
+ 	}
+       }
+     }
+   }
+   
+   /* lowpass setup/pointlimit */
+   {
+     double freq=ci->hi.lowpass_kHz*1000.;
+     vorbis_info_floor1 *f=ci->floor_param[block]; /* by convention */
+     double nyq=vi->rate/2.;
+     long blocksize=ci->blocksizes[block]>>1;
+ 
+     /* lowpass needs to be set in the floor and the residue. */    
+     if(freq>nyq)freq=nyq;
+     /* in the floor, the granularity can be very fine; it doesn't alter
+        the encoding structure, only the samples used to fit the floor
+        approximation */
+     f->n=freq/nyq*blocksize; 
+ 
+     /* this res may by limited by the maximum pointlimit of the mode,
+        not the lowpass. the floor is always lowpass limited. */
+     if(res->limit_type){
+       if(ci->hi.managed)
+ 	freq=ci->psy_g_param.coupling_pkHz[PACKETBLOBS-1]*1000.;
+       else
+ 	freq=ci->psy_g_param.coupling_pkHz[PACKETBLOBS/2]*1000.;
+       if(freq>nyq)freq=nyq;
+     }
+     
+     /* in the residue, we're constrained, physically, by partition
+        boundaries.  We still lowpass 'wherever', but we have to round up
+        here to next boundary, or the vorbis spec will round it *down* to
+        previous boundary in encode/decode */
+     if(ci->residue_type[block]==2)
+       r->end=(int)((freq/nyq*blocksize*2)/r->grouping+.9)* /* round up only if we're well past */
+ 	r->grouping;
+     else
+       r->end=(int)((freq/nyq*blocksize)/r->grouping+.9)* /* round up only if we're well past */
+ 	r->grouping;
+   }
+ }      
+ 
+ /* we assume two maps in this encoder */
+ static void vorbis_encode_map_n_res_setup(vorbis_info *vi,double s,
+ 					  vorbis_mapping_template *maps){
+ 
+   codec_setup_info *ci=vi->codec_setup;
+   int i,j,is=s,modes=2;
+   vorbis_info_mapping0 *map=maps[is].map;
+   vorbis_info_mode *mode=_mode_template;
+   vorbis_residue_template *res=maps[is].res;
+ 
+   if(ci->blocksizes[0]==ci->blocksizes[1])modes=1;
+ 
+   for(i=0;i<modes;i++){
+ 
+     ci->map_param[i]=_ogg_calloc(1,sizeof(*map));
+     ci->mode_param[i]=_ogg_calloc(1,sizeof(*mode));
+   
+     memcpy(ci->mode_param[i],mode+i,sizeof(*_mode_template));
+     if(i>=ci->modes)ci->modes=i+1;
+ 
+     ci->map_type[i]=0;
+     memcpy(ci->map_param[i],map+i,sizeof(*map));
+     if(i>=ci->maps)ci->maps=i+1;
+     
+     for(j=0;j<map[i].submaps;j++)
+       vorbis_encode_residue_setup(vi,map[i].residuesubmap[j],i
+ 				  ,res+map[i].residuesubmap[j]);
+   }
+ }
+ 
+ static double setting_to_approx_bitrate(vorbis_info *vi){
+   codec_setup_info *ci=vi->codec_setup;
+   highlevel_encode_setup *hi=&ci->hi;
+   ve_setup_data_template *setup=(ve_setup_data_template *)hi->setup;
+   int is=hi->base_setting;
+   double ds=hi->base_setting-is;
+   int ch=vi->channels;
+   double *r=setup->rate_mapping;
+ 
+   if(r==NULL)
+     return(-1);
+   
+   return((r[is]*(1.-ds)+r[is+1]*ds)*ch);  
+ }
+ 
+ static void get_setup_template(vorbis_info *vi,
+ 			       long ch,long srate,
+ 			       double req,int q_or_bitrate){
+   int i=0,j;
+   codec_setup_info *ci=vi->codec_setup;
+   highlevel_encode_setup *hi=&ci->hi;
+   if(q_or_bitrate)req/=ch;
+ 
+   while(setup_list[i]){
+     if(setup_list[i]->coupling_restriction==-1 ||
+        setup_list[i]->coupling_restriction==ch){
+       if(srate>=setup_list[i]->samplerate_min_restriction &&
+ 	 srate<=setup_list[i]->samplerate_max_restriction){
+ 	int mappings=setup_list[i]->mappings;
+ 	double *map=(q_or_bitrate?
+ 		     setup_list[i]->rate_mapping:
+ 		     setup_list[i]->quality_mapping);
+ 
+ 	/* the template matches.  Does the requested quality mode
+ 	   fall within this template's modes? */
+ 	if(req<map[0]){++i;continue;}
+ 	if(req>map[setup_list[i]->mappings]){++i;continue;}
+ 	for(j=0;j<mappings;j++)
+ 	  if(req>=map[j] && req<map[j+1])break;
+ 	/* an all-points match */
+ 	hi->setup=setup_list[i];
+ 	if(j==mappings)
+ 	  hi->base_setting=j-.001;
+ 	else{
+ 	  float low=map[j];
+ 	  float high=map[j+1];
+ 	  float del=(req-low)/(high-low);
+ 	  hi->base_setting=j+del;
+ 	}
+ 	return;
+       }
+     }
+     i++;
+   }
+   
+   hi->setup=NULL;
+ }
+ 
+ /* encoders will need to use vorbis_info_init beforehand and call
+    vorbis_info clear when all done */
+ 
+ /* two interfaces; this, more detailed one, and later a convenience
+    layer on top */
+ 
+ /* the final setup call */
+ int vorbis_encode_setup_init(vorbis_info *vi){
+   int i0=0,singleblock=0;
+   codec_setup_info *ci=vi->codec_setup;
+   ve_setup_data_template *setup=NULL;
+   highlevel_encode_setup *hi=&ci->hi;
+ 
+   if(ci==NULL)return(OV_EINVAL);
+   if(!hi->impulse_block_p)i0=1;
+ 
+   /* too low/high an ATH floater is nonsensical, but doesn't break anything */
+   if(hi->ath_floating_dB>-80)hi->ath_floating_dB=-80;
+   if(hi->ath_floating_dB<-200)hi->ath_floating_dB=-200;
+ 
+   /* again, bound this to avoid the app shooting itself int he foot
+      too badly */
+   if(hi->amplitude_track_dBpersec>0.)hi->amplitude_track_dBpersec=0.;
+   if(hi->amplitude_track_dBpersec<-99999.)hi->amplitude_track_dBpersec=-99999.;
+   
+   /* get the appropriate setup template; matches the fetch in previous
+      stages */
+   setup=(ve_setup_data_template *)hi->setup;
+   if(setup==NULL)return(OV_EINVAL);
+ 
+   hi->set_in_stone=1;
+   /* choose block sizes from configured sizes as well as paying
+      attention to long_block_p and short_block_p.  If the configured
+      short and long blocks are the same length, we set long_block_p
+      and unset short_block_p */
+   vorbis_encode_blocksize_setup(vi,hi->base_setting,
+ 				setup->blocksize_short,
+ 				setup->blocksize_long);
+   if(ci->blocksizes[0]==ci->blocksizes[1])singleblock=1;
+   
+   /* floor setup; choose proper floor params.  Allocated on the floor
+      stack in order; if we alloc only long floor, it's 0 */
+   vorbis_encode_floor_setup(vi,hi->short_setting,0,
+ 			    setup->floor_books,
+ 			    setup->floor_params,
+ 			    setup->floor_short_mapping);
+   if(!singleblock)
+     vorbis_encode_floor_setup(vi,hi->long_setting,1,
+ 			      setup->floor_books,
+ 			      setup->floor_params,
+ 			      setup->floor_long_mapping);
+   
+   /* setup of [mostly] short block detection and stereo*/
+   vorbis_encode_global_psych_setup(vi,hi->trigger_setting,
+ 				   setup->global_params,
+ 				   setup->global_mapping);
+   vorbis_encode_global_stereo(vi,hi,setup->stereo_modes);
+ 
+   /* basic psych setup and noise normalization */
+   vorbis_encode_psyset_setup(vi,hi->short_setting,
+ 			     setup->psy_noise_normal_start[0],
+ 			     setup->psy_noise_normal_partition[0],  
+ 			     setup->psy_noise_normal_thresh,  
+ 			     0);
+   vorbis_encode_psyset_setup(vi,hi->short_setting,
+ 			     setup->psy_noise_normal_start[0],
+ 			     setup->psy_noise_normal_partition[0],  
+ 			     setup->psy_noise_normal_thresh,  
+ 			     1);
+   if(!singleblock){
+     vorbis_encode_psyset_setup(vi,hi->long_setting,
+ 			       setup->psy_noise_normal_start[1],
+ 			       setup->psy_noise_normal_partition[1],  
+ 				    setup->psy_noise_normal_thresh,  
+ 			       2);
+     vorbis_encode_psyset_setup(vi,hi->long_setting,
+ 			       setup->psy_noise_normal_start[1],
+ 			       setup->psy_noise_normal_partition[1],  
+ 			       setup->psy_noise_normal_thresh,  
+ 			       3);
+   }
+ 
+   /* tone masking setup */
+   vorbis_encode_tonemask_setup(vi,hi->block[i0].tone_mask_setting,0,
+ 			       setup->psy_tone_masteratt,
+ 			       setup->psy_tone_0dB,
+ 			       setup->psy_tone_adj_impulse);
+   vorbis_encode_tonemask_setup(vi,hi->block[1].tone_mask_setting,1,
+ 			       setup->psy_tone_masteratt,
+ 			       setup->psy_tone_0dB,
+ 			       setup->psy_tone_adj_other);
+   if(!singleblock){
+     vorbis_encode_tonemask_setup(vi,hi->block[2].tone_mask_setting,2,
+ 				 setup->psy_tone_masteratt,
+ 				 setup->psy_tone_0dB,
+ 				 setup->psy_tone_adj_other);
+     vorbis_encode_tonemask_setup(vi,hi->block[3].tone_mask_setting,3,
+ 				 setup->psy_tone_masteratt,
+ 				 setup->psy_tone_0dB,
+ 				 setup->psy_tone_adj_long);
+   }
+ 
+   /* noise companding setup */
+   vorbis_encode_compand_setup(vi,hi->block[i0].noise_compand_setting,0,
+ 			      setup->psy_noise_compand,
+ 			      setup->psy_noise_compand_short_mapping);
+   vorbis_encode_compand_setup(vi,hi->block[1].noise_compand_setting,1,
+ 			      setup->psy_noise_compand,
+ 			      setup->psy_noise_compand_short_mapping);
+   if(!singleblock){
+     vorbis_encode_compand_setup(vi,hi->block[2].noise_compand_setting,2,
+ 				setup->psy_noise_compand,
+ 				setup->psy_noise_compand_long_mapping);
+     vorbis_encode_compand_setup(vi,hi->block[3].noise_compand_setting,3,
+ 				setup->psy_noise_compand,
+ 				setup->psy_noise_compand_long_mapping);
+   }
+ 
+   /* peak guarding setup  */
+   vorbis_encode_peak_setup(vi,hi->block[i0].tone_peaklimit_setting,0,
+ 			   setup->psy_tone_dBsuppress);
+   vorbis_encode_peak_setup(vi,hi->block[1].tone_peaklimit_setting,1,
+ 			   setup->psy_tone_dBsuppress);
+   if(!singleblock){
+     vorbis_encode_peak_setup(vi,hi->block[2].tone_peaklimit_setting,2,
+ 			     setup->psy_tone_dBsuppress);
+     vorbis_encode_peak_setup(vi,hi->block[3].tone_peaklimit_setting,3,
+ 			     setup->psy_tone_dBsuppress);
+   }
+ 
+   /* noise bias setup */
+   vorbis_encode_noisebias_setup(vi,hi->block[i0].noise_bias_setting,0,
+ 				setup->psy_noise_dBsuppress,
+ 				setup->psy_noise_bias_impulse,
+ 				setup->psy_noiseguards,
+ 				(i0==0?hi->impulse_noisetune:0.));
+   vorbis_encode_noisebias_setup(vi,hi->block[1].noise_bias_setting,1,
+ 				setup->psy_noise_dBsuppress,
+ 				setup->psy_noise_bias_padding,
+ 				setup->psy_noiseguards,0.);
+   if(!singleblock){
+     vorbis_encode_noisebias_setup(vi,hi->block[2].noise_bias_setting,2,
+ 				  setup->psy_noise_dBsuppress,
+ 				  setup->psy_noise_bias_trans,
+ 				  setup->psy_noiseguards,0.);
+     vorbis_encode_noisebias_setup(vi,hi->block[3].noise_bias_setting,3,
+ 				  setup->psy_noise_dBsuppress,
+ 				  setup->psy_noise_bias_long,
+ 				  setup->psy_noiseguards,0.);
+   }
+ 
+   vorbis_encode_ath_setup(vi,0);
+   vorbis_encode_ath_setup(vi,1);
+   if(!singleblock){
+     vorbis_encode_ath_setup(vi,2);
+     vorbis_encode_ath_setup(vi,3);
+   }
+ 
+   vorbis_encode_map_n_res_setup(vi,hi->base_setting,setup->maps);
+ 
+   /* set bitrate readonlies and management */
+   vi->bitrate_nominal=setting_to_approx_bitrate(vi);
+   vi->bitrate_lower=hi->bitrate_min;
+   vi->bitrate_upper=hi->bitrate_max;
+   vi->bitrate_window=hi->bitrate_limit_window;
+ 
+   if(hi->managed){
+     ci->bi.queue_avg_time=hi->bitrate_av_window;
+     ci->bi.queue_avg_center=hi->bitrate_av_window_center;
+     ci->bi.queue_minmax_time=hi->bitrate_limit_window;
+     ci->bi.queue_hardmin=hi->bitrate_min;
+     ci->bi.queue_hardmax=hi->bitrate_max;
+     ci->bi.queue_avgmin=hi->bitrate_av_lo;
+     ci->bi.queue_avgmax=hi->bitrate_av_hi;
+     ci->bi.avgfloat_downslew_max=-999999.f;
+     ci->bi.avgfloat_upslew_max=999999.f;
+   }
+ 
+   return(0);
+   
+ }
+ 
+ static int vorbis_encode_setup_setting(vorbis_info *vi,
+ 				       long  channels,
+ 				       long  rate){
+   int ret=0,i,is;
+   codec_setup_info *ci=vi->codec_setup;
+   highlevel_encode_setup *hi=&ci->hi;
+   ve_setup_data_template *setup=hi->setup;
+   double ds;
+ 
+   ret=vorbis_encode_toplevel_setup(vi,channels,rate);
+   if(ret)return(ret);
+ 
+   is=hi->base_setting;
+   ds=hi->base_setting-is;
+ 
+   hi->short_setting=hi->base_setting;
+   hi->long_setting=hi->base_setting;
+ 
+   hi->managed=0;
+ 
+   hi->impulse_block_p=1;
+   hi->noise_normalize_p=1;
+ 
+   hi->stereo_point_setting=hi->base_setting;
+   hi->lowpass_kHz=
+     setup->psy_lowpass[is]*(1.-ds)+setup->psy_lowpass[is+1]*ds;  
+   
+   hi->ath_floating_dB=setup->psy_ath_float[is]*(1.-ds)+
+     setup->psy_ath_float[is+1]*ds;
+   hi->ath_absolute_dB=setup->psy_ath_abs[is]*(1.-ds)+
+     setup->psy_ath_abs[is+1]*ds;
+ 
+   hi->amplitude_track_dBpersec=-6.;
+   hi->trigger_setting=hi->base_setting;
+ 
+   for(i=0;i<4;i++){
+     hi->block[i].tone_mask_setting=hi->base_setting;
+     hi->block[i].tone_peaklimit_setting=hi->base_setting;
+     hi->block[i].noise_bias_setting=hi->base_setting;
+     hi->block[i].noise_compand_setting=hi->base_setting;
+   }
+ 
+   return(ret);
+ }
+ 
+ int vorbis_encode_setup_vbr(vorbis_info *vi,
+ 			    long  channels,
+ 			    long  rate,			    
+ 			    float quality){
+   codec_setup_info *ci=vi->codec_setup;
+   highlevel_encode_setup *hi=&ci->hi;
+ 
+   quality+=.00001;
+   if(quality>=1.)quality=.9999;
+ 
+   get_setup_template(vi,channels,rate,quality,0);
+   if(!hi->setup)return OV_EIMPL;
+   
+   return vorbis_encode_setup_setting(vi,channels,rate);
+ }
+ 
+ int vorbis_encode_init_vbr(vorbis_info *vi,
+ 			   long channels,
+ 			   long rate,
+ 			   
+ 			   float base_quality /* 0. to 1. */
+ 			   ){
+   int ret=0;
+ 
+   ret=vorbis_encode_setup_vbr(vi,channels,rate,base_quality);
+   
+   if(ret){
+     vorbis_info_clear(vi);
+     return ret; 
+   }
+   ret=vorbis_encode_setup_init(vi);
+   if(ret)
+     vorbis_info_clear(vi);
+   return(ret);
+ }
+ 
+ int vorbis_encode_setup_managed(vorbis_info *vi,
+ 				long channels,
+ 				long rate,
+ 				
+ 				long max_bitrate,
+ 				long nominal_bitrate,
+ 				long min_bitrate){
+ 
+   codec_setup_info *ci=vi->codec_setup;
+   highlevel_encode_setup *hi=&ci->hi;
+   double tnominal=nominal_bitrate;
+   int ret=0;
+ 
+   if(nominal_bitrate<=0.){
+     if(max_bitrate>0.){
+       nominal_bitrate=max_bitrate*.875;
+     }else{
+       if(min_bitrate>0.){
+ 	nominal_bitrate=min_bitrate;
+       }else{
+ 	return(OV_EINVAL);
+       }
+     }
+   }
+ 
+   get_setup_template(vi,channels,rate,nominal_bitrate,1);
+   if(!hi->setup)return OV_EIMPL;
+   
+   ret=vorbis_encode_setup_setting(vi,channels,rate);
+   if(ret){
+     vorbis_info_clear(vi);
+     return ret; 
+   }
+ 
+   /* initialize management with sane defaults */
+       /* initialize management with sane defaults */
+   hi->managed=1;
+   hi->bitrate_av_window=4.;
+   hi->bitrate_av_window_center=.5;
+   hi->bitrate_limit_window=2.;
+   hi->bitrate_min=min_bitrate;
+   hi->bitrate_max=max_bitrate;
+   hi->bitrate_av_lo=tnominal;
+   hi->bitrate_av_hi=tnominal;
+ 
+   return(ret);
+ 
+ }
+ 
+ int vorbis_encode_init(vorbis_info *vi,
+ 		       long channels,
+ 		       long rate,
+ 
+ 		       long max_bitrate,
+ 		       long nominal_bitrate,
+ 		       long min_bitrate){
+ 
+   int ret=vorbis_encode_setup_managed(vi,channels,rate,
+ 				      max_bitrate,
+ 				      nominal_bitrate,
+ 				      min_bitrate);
+   if(ret){
+     vorbis_info_clear(vi);
+     return(ret);
+   }
+ 
+   ret=vorbis_encode_setup_init(vi);
+   if(ret)
+     vorbis_info_clear(vi);
+   return(ret);
+ }
+ 
+ int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg){
+   if(vi){
+     codec_setup_info *ci=vi->codec_setup;
+     highlevel_encode_setup *hi=&ci->hi;
+     int setp=(number&0xf); /* a read request has a low nibble of 0 */
+ 
+     if(setp && hi->set_in_stone)return(OV_EINVAL);
+ 
+     switch(number){
+     case OV_ECTL_RATEMANAGE_GET:
+       {
+ 	
+ 	struct ovectl_ratemanage_arg *ai=
+ 	  (struct ovectl_ratemanage_arg *)arg;
+ 	
+ 	ai->management_active=hi->managed;
+ 	ai->bitrate_av_window=hi->bitrate_av_window;
+ 	ai->bitrate_av_window_center=hi->bitrate_av_window_center;
+ 	ai->bitrate_hard_window=hi->bitrate_limit_window;
+ 	ai->bitrate_hard_min=hi->bitrate_min;
+ 	ai->bitrate_hard_max=hi->bitrate_max;
+ 	ai->bitrate_av_lo=hi->bitrate_av_lo;
+ 	ai->bitrate_av_hi=hi->bitrate_av_hi;
+ 	
+       }
+       return(0);
+     
+     case OV_ECTL_RATEMANAGE_SET:
+       {
+ 	struct ovectl_ratemanage_arg *ai=
+ 	  (struct ovectl_ratemanage_arg *)arg;
+ 	if(ai==NULL){
+ 	  hi->managed=0;
+ 	}else{
+ 	  hi->managed=ai->management_active;
+ 	  vorbis_encode_ctl(vi,OV_ECTL_RATEMANAGE_AVG,arg);
+ 	  vorbis_encode_ctl(vi,OV_ECTL_RATEMANAGE_HARD,arg);
+ 	}
+       }
+       return 0;
+ 
+     case OV_ECTL_RATEMANAGE_AVG:
+       {
+ 	struct ovectl_ratemanage_arg *ai=
+ 	  (struct ovectl_ratemanage_arg *)arg;
+ 	if(ai==NULL){
+ 	  hi->bitrate_av_lo=0;
+ 	  hi->bitrate_av_hi=0;
+ 	  hi->bitrate_av_window=0;
+ 	}else{
+ 	  hi->bitrate_av_window=ai->bitrate_av_window;
+ 	  hi->bitrate_av_window_center=ai->bitrate_av_window_center;
+ 	  hi->bitrate_av_lo=ai->bitrate_av_lo;
+ 	  hi->bitrate_av_hi=ai->bitrate_av_hi;
+ 	}
+ 
+ 	if(hi->bitrate_av_window<.25)hi->bitrate_av_window=.25;
+ 	if(hi->bitrate_av_window>10.)hi->bitrate_av_window=10.;
+ 	if(hi->bitrate_av_window_center<0.)hi->bitrate_av_window=0.;
+ 	if(hi->bitrate_av_window_center>1.)hi->bitrate_av_window=1.;
+ 	
+ 	if( ( (hi->bitrate_av_lo<=0 && hi->bitrate_av_hi<=0)||
+ 	      (hi->bitrate_av_window<=0) ) &&
+ 	    ( (hi->bitrate_min<=0 && hi->bitrate_max<=0)||
+ 	      (hi->bitrate_limit_window<=0) ))
+ 	  hi->managed=0;
+       }
+       return(0);
+     case OV_ECTL_RATEMANAGE_HARD:
+       {
+ 	struct ovectl_ratemanage_arg *ai=
+ 	  (struct ovectl_ratemanage_arg *)arg;
+ 	if(ai==NULL){
+ 	  hi->bitrate_min=0;
+ 	  hi->bitrate_max=0;
+ 	  hi->bitrate_limit_window=0;
+ 	}else{
+ 	  hi->bitrate_limit_window=ai->bitrate_hard_window;
+ 	  hi->bitrate_min=ai->bitrate_hard_min;
+ 	  hi->bitrate_max=ai->bitrate_hard_max;
+ 	}
+ 	if(hi->bitrate_limit_window<0.)hi->bitrate_limit_window=0.;
+ 	if(hi->bitrate_limit_window>10.)hi->bitrate_limit_window=10.;
+ 	
+ 	if( ( (hi->bitrate_av_lo<=0 && hi->bitrate_av_hi<=0)||
+ 	      (hi->bitrate_av_window<=0) ) &&
+ 	    ( (hi->bitrate_min<=0 && hi->bitrate_max<=0)||
+ 	      (hi->bitrate_limit_window<=0) ))
+ 	  hi->managed=0;
+       }
+       return(0);
+ 
+     case OV_ECTL_LOWPASS_GET:
+       {
+ 	double *farg=(double *)arg;
+ 	*farg=hi->lowpass_kHz;
+       }
+       return(0);
+     case OV_ECTL_LOWPASS_SET:
+       {
+ 	double *farg=(double *)arg;
+ 	hi->lowpass_kHz=*farg;
+ 
+ 	if(hi->lowpass_kHz<2.)hi->lowpass_kHz=2.;
+ 	if(hi->lowpass_kHz>99.)hi->lowpass_kHz=99.;
+       }
+       return(0);
+     case OV_ECTL_IBLOCK_GET:
+       {
+ 	double *farg=(double *)arg;
+ 	*farg=hi->impulse_noisetune;
+       }
+       return(0);
+     case OV_ECTL_IBLOCK_SET:
+       {
+ 	double *farg=(double *)arg;
+ 	hi->impulse_noisetune=*farg;
+ 
+ 	if(hi->impulse_noisetune>0.)hi->impulse_noisetune=0.;
+ 	if(hi->impulse_noisetune<-15.)hi->impulse_noisetune=-15.;
+       }
+       return(0);      
+     }
+ 
+ 
+     return(OV_EIMPL);
+   }
+   return(OV_EINVAL);
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: stdio-based convenience library for opening/seeking/decoding
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: stdio-based convenience library for opening/seeking/decoding
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _OV_FILE_H_
+ 
+ /* The function prototypes for the callbacks are basically the same as for
+  * the stdio functions fread, fseek, fclose, ftell. 
+  * The one difference is that the FILE * arguments have been replaced with
+  * a void * - this is to be used as a pointer to whatever internal data these
+  * functions might need. In the stdio case, it's just a FILE * cast to a void *
+  * 
+  * If you use other functions, check the docs for these functions and return
+  * the right values. For seek_func(), you *MUST* return -1 if the stream is
+  * unseekable
+  */
+ typedef struct {
+   size_t (*read_func)  (void *ptr, size_t size, size_t nmemb, void *datasource);
+   int    (*seek_func)  (void *datasource, ogg_int64_t offset, int whence);
+   int    (*close_func) (void *datasource);
+   long   (*tell_func)  (void *datasource);
+ } ov_callbacks;
+ 
+ #define  NOTOPEN   0
+ #define  PARTOPEN  1
+ #define  OPENED    2
+ #define  STREAMSET 3
+ #define  INITSET   4
+ 
+ typedef struct OggVorbis_File {
+   void            *datasource; /* Pointer to a FILE *, etc. */
+   int              seekable;
+   ogg_int64_t      offset;
+   ogg_int64_t      end;
+   ogg_sync_state   oy; 
+ 
+   /* If the FILE handle isn't seekable (eg, a pipe), only the current
+      stream appears */
+   int              links;
+   ogg_int64_t     *offsets;
+   ogg_int64_t     *dataoffsets;
+   long            *serialnos;
+   ogg_int64_t     *pcmlengths; /* overloaded to maintain binary
+ 				  compatability; x2 size, stores both
+ 				  beginning and end values */
+   vorbis_info     *vi;
+   vorbis_comment  *vc;
+ 
+   /* Decoding working state local storage */
+   ogg_int64_t      pcm_offset;
+   int              ready_state;
+   long             current_serialno;
+   int              current_link;
+ 
+   double           bittrack;
+   double           samptrack;
+ 
+   ogg_stream_state os; /* take physical pages, weld into a logical
+                           stream of packets */
+   vorbis_dsp_state vd; /* central working state for the packet->PCM decoder */
+   vorbis_block     vb; /* local working space for packet->PCM decode */
+ 
+   ov_callbacks callbacks;
+ 
+ } OggVorbis_File;
+ 
+ extern int ov_clear(OggVorbis_File *vf);
+ extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
+ extern int ov_open_callbacks(void *datasource, OggVorbis_File *vf,
+ 		char *initial, long ibytes, ov_callbacks callbacks);
+ 
+ extern int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes);
+ extern int ov_test_callbacks(void *datasource, OggVorbis_File *vf,
+ 		char *initial, long ibytes, ov_callbacks callbacks);
+ extern int ov_test_open(OggVorbis_File *vf);
+ 
+ extern long ov_bitrate(OggVorbis_File *vf,int i);
+ extern long ov_bitrate_instant(OggVorbis_File *vf);
+ extern long ov_streams(OggVorbis_File *vf);
+ extern long ov_seekable(OggVorbis_File *vf);
+ extern long ov_serialnumber(OggVorbis_File *vf,int i);
+ 
+ extern ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i);
+ extern ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i);
+ extern double ov_time_total(OggVorbis_File *vf,int i);
+ 
+ extern int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos);
+ extern int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos);
+ extern int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos);
+ extern int ov_time_seek(OggVorbis_File *vf,double pos);
+ extern int ov_time_seek_page(OggVorbis_File *vf,double pos);
+ 
+ extern int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
+ extern int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos);
+ extern int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos);
+ extern int ov_time_seek_lap(OggVorbis_File *vf,double pos);
+ extern int ov_time_seek_page_lap(OggVorbis_File *vf,double pos);
+ 
+ extern ogg_int64_t ov_raw_tell(OggVorbis_File *vf);
+ extern ogg_int64_t ov_pcm_tell(OggVorbis_File *vf);
+ extern double ov_time_tell(OggVorbis_File *vf);
+ 
+ extern vorbis_info *ov_info(OggVorbis_File *vf,int link);
+ extern vorbis_comment *ov_comment(OggVorbis_File *vf,int link);
+ 
+ extern long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int samples,
+ 			  int *bitstream);
+ extern long ov_read(OggVorbis_File *vf,char *buffer,int length,
+ 		    int bigendianp,int word,int sgned,int *bitstream);
+ extern int ov_crosslap(OggVorbis_File *vf1,OggVorbis_File *vf2);
+ 
+ extern int ov_halfrate(OggVorbis_File *vf,int flag);
+ extern int ov_halfrate_p(OggVorbis_File *vf);
+ 
+ /* A 'chained bitstream' is a Vorbis bitstream that contains more than
+    one logical bitstream arranged end to end (the only form of Ogg
+    multiplexing allowed in a Vorbis bitstream; grouping [parallel
+    multiplexing] is not allowed in Vorbis) */
+ 
+ /* A Vorbis file can be played beginning to end (streamed) without
+    worrying ahead of time about chaining (see decoder_example.c).  If
+    we have the whole file, however, and want random access
+    (seeking/scrubbing) or desire to know the total length/time of a
+    file, we need to account for the possibility of chaining. */
+ 
+ /* We can handle things a number of ways; we can determine the entire
+    bitstream structure right off the bat, or find pieces on demand.
+    This example determines and caches structure for the entire
+    bitstream, but builds a virtual decoder on the fly when moving
+    between links in the chain. */
+ 
+ /* There are also different ways to implement seeking.  Enough
+    information exists in an Ogg bitstream to seek to
+    sample-granularity positions in the output.  Or, one can seek by
+    picking some portion of the stream roughly in the desired area if
+    we only want coarse navigation through the stream. */
+ 
+ /*************************************************************************
+  * Many, many internal helpers.  The intention is not to be confusing; 
+  * rampant duplication and monolithic function implementation would be 
+  * harder to understand anyway.  The high level functions are last.  Begin
+  * grokking near the end of the file */
+ 
+ /* read a little more data from the file/pipe into the ogg_sync framer
+ */
+ #define CHUNKSIZE 8500 /* a shade over 8k; anyone using pages well
+                           over 8k gets what they deserve */
+ static long _get_data(OggVorbis_File *vf){
+   errno=0;
+   if(vf->datasource){
+     char *buffer=ogg_sync_buffer(&vf->oy,CHUNKSIZE);
+     long bytes=(vf->callbacks.read_func)(buffer,1,CHUNKSIZE,vf->datasource);
+     if(bytes>0)ogg_sync_wrote(&vf->oy,bytes);
+     if(bytes==0 && errno)return(-1);
+     return(bytes);
+   }else
+     return(0);
+ }
+ 
+ /* save a tiny smidge of verbosity to make the code more readable */
+ static void _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){
+   if(vf->datasource){ 
+     (vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET);
+     vf->offset=offset;
+     ogg_sync_reset(&vf->oy);
+   }else{
+     /* shouldn't happen unless someone writes a broken callback */
+     return;
+   }
+ }
+ 
+ /* The read/seek functions track absolute position within the stream */
+ 
+ /* from the head of the stream, get the next page.  boundary specifies
+    if the function is allowed to fetch more data from the stream (and
+    how much) or only use internally buffered data.
+ 
+    boundary: -1) unbounded search
+               0) read no additional data; use cached only
+ 	      n) search for a new page beginning for n bytes
+ 
+    return:   <0) did not find a page (OV_FALSE, OV_EOF, OV_EREAD)
+               n) found a page at absolute offset n */
+ 
+ static ogg_int64_t _get_next_page(OggVorbis_File *vf,ogg_page *og,
+ 				  ogg_int64_t boundary){
+   if(boundary>0)boundary+=vf->offset;
+   while(1){
+     long more;
+ 
+     if(boundary>0 && vf->offset>=boundary)return(OV_FALSE);
+     more=ogg_sync_pageseek(&vf->oy,og);
+     
+     if(more<0){
+       /* skipped n bytes */
+       vf->offset-=more;
+     }else{
+       if(more==0){
+ 	/* send more paramedics */
+ 	if(!boundary)return(OV_FALSE);
+ 	{
+ 	  long ret=_get_data(vf);
+ 	  if(ret==0)return(OV_EOF);
+ 	  if(ret<0)return(OV_EREAD);
+ 	}
+       }else{
+ 	/* got a page.  Return the offset at the page beginning,
+            advance the internal offset past the page end */
+ 	ogg_int64_t ret=vf->offset;
+ 	vf->offset+=more;
+ 	return(ret);
+ 	
+       }
+     }
+   }
+ }
+ 
+ /* find the latest page beginning before the current stream cursor
+    position. Much dirtier than the above as Ogg doesn't have any
+    backward search linkage.  no 'readp' as it will certainly have to
+    read. */
+ /* returns offset or OV_EREAD, OV_FAULT */
+ static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_page *og){
+   ogg_int64_t begin=vf->offset;
+   ogg_int64_t end=begin;
+   ogg_int64_t ret;
+   ogg_int64_t offset=-1;
+ 
+   while(offset==-1){
+     begin-=CHUNKSIZE;
+     if(begin<0)
+       begin=0;
+     _seek_helper(vf,begin);
+     while(vf->offset<end){
+       ret=_get_next_page(vf,og,end-vf->offset);
+       if(ret==OV_EREAD)return(OV_EREAD);
+       if(ret<0){
+ 	break;
+       }else{
+ 	offset=ret;
+       }
+     }
+   }
+ 
+   /* we have the offset.  Actually snork and hold the page now */
+   _seek_helper(vf,offset);
+   ret=_get_next_page(vf,og,CHUNKSIZE);
+   if(ret<0)
+     /* this shouldn't be possible */
+     return(OV_EFAULT);
+ 
+   return(offset);
+ }
+ 
+ /* finds each bitstream link one at a time using a bisection search
+    (has to begin by knowing the offset of the lb's initial page).
+    Recurses for each link so it can alloc the link storage after
+    finding them all, then unroll and fill the cache at the same time */
+ static int _bisect_forward_serialno(OggVorbis_File *vf,
+ 				    ogg_int64_t begin,
+ 				    ogg_int64_t searched,
+ 				    ogg_int64_t end,
+ 				    long currentno,
+ 				    long m){
+   ogg_int64_t endsearched=end;
+   ogg_int64_t next=end;
+   ogg_page og;
+   ogg_int64_t ret;
+   
+   /* the below guards against garbage seperating the last and
+      first pages of two links. */
+   while(searched<endsearched){
+     ogg_int64_t bisect;
+     
+     if(endsearched-searched<CHUNKSIZE){
+       bisect=searched;
+     }else{
+       bisect=(searched+endsearched)/2;
+     }
+     
+     _seek_helper(vf,bisect);
+     ret=_get_next_page(vf,&og,-1);
+     if(ret==OV_EREAD)return(OV_EREAD);
+     if(ret<0 || ogg_page_serialno(&og)!=currentno){
+       endsearched=bisect;
+       if(ret>=0)next=ret;
+     }else{
+       searched=ret+og.header_len+og.body_len;
+     }
+   }
+ 
+   _seek_helper(vf,next);
+   ret=_get_next_page(vf,&og,-1);
+   if(ret==OV_EREAD)return(OV_EREAD);
+   
+   if(searched>=end || ret<0){
+     vf->links=m+1;
+     vf->offsets=_ogg_malloc((vf->links+1)*sizeof(*vf->offsets));
+     vf->serialnos=_ogg_malloc(vf->links*sizeof(*vf->serialnos));
+     vf->offsets[m+1]=searched;
+   }else{
+     ret=_bisect_forward_serialno(vf,next,vf->offset,
+ 				 end,ogg_page_serialno(&og),m+1);
+     if(ret==OV_EREAD)return(OV_EREAD);
+   }
+   
+   vf->offsets[m]=begin;
+   vf->serialnos[m]=currentno;
+   return(0);
+ }
+ 
+ /* uses the local ogg_stream storage in vf; this is important for
+    non-streaming input sources */
+ static int _fetch_headers(OggVorbis_File *vf,vorbis_info *vi,vorbis_comment *vc,
+ 			  long *serialno,ogg_page *og_ptr){
+   ogg_page og;
+   ogg_packet op;
+   int i,ret;
+   
+   if(!og_ptr){
+     ogg_int64_t llret=_get_next_page(vf,&og,CHUNKSIZE);
+     if(llret==OV_EREAD)return(OV_EREAD);
+     if(llret<0)return OV_ENOTVORBIS;
+     og_ptr=&og;
+   }
+ 
+   ogg_stream_reset_serialno(&vf->os,ogg_page_serialno(og_ptr));
+   if(serialno)*serialno=vf->os.serialno;
+   vf->ready_state=STREAMSET;
+   
+   /* extract the initial header from the first page and verify that the
+      Ogg bitstream is in fact Vorbis data */
+   
+   vorbis_info_init(vi);
+   vorbis_comment_init(vc);
+   
+   i=0;
+   while(i<3){
+     ogg_stream_pagein(&vf->os,og_ptr);
+     while(i<3){
+       int result=ogg_stream_packetout(&vf->os,&op);
+       if(result==0)break;
+       if(result==-1){
+ 	ret=OV_EBADHEADER;
+ 	goto bail_header;
+       }
+       if((ret=vorbis_synthesis_headerin(vi,vc,&op))){
+ 	goto bail_header;
+       }
+       i++;
+     }
+     if(i<3)
+       if(_get_next_page(vf,og_ptr,CHUNKSIZE)<0){
+ 	ret=OV_EBADHEADER;
+ 	goto bail_header;
+       }
+   }
+   return 0; 
+ 
+  bail_header:
+   vorbis_info_clear(vi);
+   vorbis_comment_clear(vc);
+   vf->ready_state=OPENED;
+ 
+   return ret;
+ }
+ 
+ /* last step of the OggVorbis_File initialization; get all the
+    vorbis_info structs and PCM positions.  Only called by the seekable
+    initialization (local stream storage is hacked slightly; pay
+    attention to how that's done) */
+ 
+ /* this is void and does not propogate errors up because we want to be
+    able to open and use damaged bitstreams as well as we can.  Just
+    watch out for missing information for links in the OggVorbis_File
+    struct */
+ static void _prefetch_all_headers(OggVorbis_File *vf, ogg_int64_t dataoffset){
+   ogg_page og;
+   int i;
+   ogg_int64_t ret;
+   
+   vf->vi=_ogg_realloc(vf->vi,vf->links*sizeof(*vf->vi));
+   vf->vc=_ogg_realloc(vf->vc,vf->links*sizeof(*vf->vc));
+   vf->dataoffsets=_ogg_malloc(vf->links*sizeof(*vf->dataoffsets));
+   vf->pcmlengths=_ogg_malloc(vf->links*2*sizeof(*vf->pcmlengths));
+   
+   for(i=0;i<vf->links;i++){
+     if(i==0){
+       /* we already grabbed the initial header earlier.  Just set the offset */
+       vf->dataoffsets[i]=dataoffset;
+       _seek_helper(vf,dataoffset);
+ 
+     }else{
+ 
+       /* seek to the location of the initial header */
+ 
+       _seek_helper(vf,vf->offsets[i]);
+       if(_fetch_headers(vf,vf->vi+i,vf->vc+i,NULL,NULL)<0){
+     	vf->dataoffsets[i]=-1;
+       }else{
+ 	vf->dataoffsets[i]=vf->offset;
+       }
+     }
+ 
+     /* fetch beginning PCM offset */
+ 
+     if(vf->dataoffsets[i]!=-1){
+       ogg_int64_t accumulated=0;
+       long        lastblock=-1;
+       int         result;
+ 
+       ogg_stream_reset_serialno(&vf->os,vf->serialnos[i]);
+ 
+       while(1){
+ 	ogg_packet op;
+ 
+ 	ret=_get_next_page(vf,&og,-1);
+ 	if(ret<0)
+ 	  /* this should not be possible unless the file is
+              truncated/mangled */
+ 	  break;
+        
+ 	if(ogg_page_serialno(&og)!=vf->serialnos[i])
+ 	  break;
+ 	
+ 	/* count blocksizes of all frames in the page */
+ 	ogg_stream_pagein(&vf->os,&og);
+ 	while((result=ogg_stream_packetout(&vf->os,&op))){
+ 	  if(result>0){ /* ignore holes */
+ 	    long thisblock=vorbis_packet_blocksize(vf->vi+i,&op);
+ 	    if(lastblock!=-1)
+ 	      accumulated+=(lastblock+thisblock)>>2;
+ 	    lastblock=thisblock;
+ 	  }
+ 	}
+ 
+ 	if(ogg_page_granulepos(&og)!=-1){
+ 	  /* pcm offset of last packet on the first audio page */
+ 	  accumulated= ogg_page_granulepos(&og)-accumulated;
+ 	  break;
+ 	}
+       }
+ 
+       /* less than zero?  This is a stream with samples trimmed off
+          the beginning, a normal occurrence; set the offset to zero */
+       if(accumulated<0)accumulated=0;
+ 
+       vf->pcmlengths[i*2]=accumulated;
+     }
+ 
+     /* get the PCM length of this link. To do this,
+        get the last page of the stream */
+     {
+       ogg_int64_t end=vf->offsets[i+1];
+       _seek_helper(vf,end);
+ 
+       while(1){
+ 	ret=_get_prev_page(vf,&og);
+ 	if(ret<0){
+ 	  /* this should not be possible */
+ 	  vorbis_info_clear(vf->vi+i);
+ 	  vorbis_comment_clear(vf->vc+i);
+ 	  break;
+ 	}
+ 	if(ogg_page_granulepos(&og)!=-1){
+ 	  vf->pcmlengths[i*2+1]=ogg_page_granulepos(&og)-vf->pcmlengths[i*2];
+ 	  break;
+ 	}
+ 	vf->offset=ret;
+       }
+     }
+   }
+ }
+ 
+ static int _make_decode_ready(OggVorbis_File *vf){
+   if(vf->ready_state>STREAMSET)return 0;
+   if(vf->ready_state<STREAMSET)return OV_EFAULT;
+   if(vf->seekable){
+     if(vorbis_synthesis_init(&vf->vd,vf->vi+vf->current_link))
+       return OV_EBADLINK;
+   }else{
+     if(vorbis_synthesis_init(&vf->vd,vf->vi))
+       return OV_EBADLINK;
+   }    
+   vorbis_block_init(&vf->vd,&vf->vb);
+   vf->ready_state=INITSET;
+   vf->bittrack=0.f;
+   vf->samptrack=0.f;
+   return 0;
+ }
+ 
+ static int _open_seekable2(OggVorbis_File *vf){
+   long serialno=vf->current_serialno;
+   ogg_int64_t dataoffset=vf->offset, end;
+   ogg_page og;
+ 
+   /* we're partially open and have a first link header state in
+      storage in vf */
+   /* we can seek, so set out learning all about this file */
+   (vf->callbacks.seek_func)(vf->datasource,0,SEEK_END);
+   vf->offset=vf->end=(vf->callbacks.tell_func)(vf->datasource);
+   
+   /* We get the offset for the last page of the physical bitstream.
+      Most OggVorbis files will contain a single logical bitstream */
+   end=_get_prev_page(vf,&og);
+   if(end<0)return(end);
+ 
+   /* more than one logical bitstream? */
+   if(ogg_page_serialno(&og)!=serialno){
+ 
+     /* Chained bitstream. Bisect-search each logical bitstream
+        section.  Do so based on serial number only */
+     if(_bisect_forward_serialno(vf,0,0,end+1,serialno,0)<0)return(OV_EREAD);
+ 
+   }else{
+ 
+     /* Only one logical bitstream */
+     if(_bisect_forward_serialno(vf,0,end,end+1,serialno,0))return(OV_EREAD);
+ 
+   }
+ 
+   /* the initial header memory is referenced by vf after; don't free it */
+   _prefetch_all_headers(vf,dataoffset);
+   return(ov_raw_seek(vf,0));
+ }
+ 
+ /* clear out the current logical bitstream decoder */ 
+ static void _decode_clear(OggVorbis_File *vf){
+   vorbis_dsp_clear(&vf->vd);
+   vorbis_block_clear(&vf->vb);
+   vf->ready_state=OPENED;
+ }
+ 
+ /* fetch and process a packet.  Handles the case where we're at a
+    bitstream boundary and dumps the decoding machine.  If the decoding
+    machine is unloaded, it loads it.  It also keeps pcm_offset up to
+    date (seek and read both use this.  seek uses a special hack with
+    readp). 
+ 
+    return: <0) error, OV_HOLE (lost packet) or OV_EOF
+             0) need more data (only if readp==0)
+ 	    1) got a packet 
+ */
+ 
+ static int _fetch_and_process_packet(OggVorbis_File *vf,
+ 				     ogg_packet *op_in,
+ 				     int readp,
+ 				     int spanp){
+   ogg_page og;
+ 
+   /* handle one packet.  Try to fetch it from current stream state */
+   /* extract packets from page */
+   while(1){
+     
+     /* process a packet if we can.  If the machine isn't loaded,
+        neither is a page */
+     if(vf->ready_state==INITSET){
+       while(1) {
+       	ogg_packet op;
+       	ogg_packet *op_ptr=(op_in?op_in:&op);
+ 	int result=ogg_stream_packetout(&vf->os,op_ptr);
+ 	ogg_int64_t granulepos;
+ 
+ 	op_in=NULL;
+ 	if(result==-1)return(OV_HOLE); /* hole in the data. */
+ 	if(result>0){
+ 	  /* got a packet.  process it */
+ 	  granulepos=op_ptr->granulepos;
+ 	  if(!vorbis_synthesis(&vf->vb,op_ptr)){ /* lazy check for lazy
+ 						    header handling.  The
+ 						    header packets aren't
+ 						    audio, so if/when we
+ 						    submit them,
+ 						    vorbis_synthesis will
+ 						    reject them */
+ 
+ 	    /* suck in the synthesis data and track bitrate */
+ 	    {
+ 	      int oldsamples=vorbis_synthesis_pcmout(&vf->vd,NULL);
+ 	      /* for proper use of libvorbis within libvorbisfile,
+                  oldsamples will always be zero. */
+ 	      if(oldsamples)return(OV_EFAULT);
+ 	      
+ 	      vorbis_synthesis_blockin(&vf->vd,&vf->vb);
+ 	      vf->samptrack+=vorbis_synthesis_pcmout(&vf->vd,NULL)-oldsamples;
+ 	      vf->bittrack+=op_ptr->bytes*8;
+ 	    }
+ 	  
+ 	    /* update the pcm offset. */
+ 	    if(granulepos!=-1 && !op_ptr->e_o_s){
+ 	      int link=(vf->seekable?vf->current_link:0);
+ 	      int i,samples;
+ 	    
+ 	      /* this packet has a pcm_offset on it (the last packet
+ 	         completed on a page carries the offset) After processing
+ 	         (above), we know the pcm position of the *last* sample
+ 	         ready to be returned. Find the offset of the *first*
+ 
+ 	         As an aside, this trick is inaccurate if we begin
+ 	         reading anew right at the last page; the end-of-stream
+ 	         granulepos declares the last frame in the stream, and the
+ 	         last packet of the last page may be a partial frame.
+ 	         So, we need a previous granulepos from an in-sequence page
+ 	         to have a reference point.  Thus the !op_ptr->e_o_s clause
+ 	         above */
+ 
+ 	      if(vf->seekable && link>0)
+ 		granulepos-=vf->pcmlengths[link*2];
+ 	      if(granulepos<0)granulepos=0; /* actually, this
+ 					       shouldn't be possible
+ 					       here unless the stream
+ 					       is very broken */
+ 
+ 	      samples=vorbis_synthesis_pcmout(&vf->vd,NULL);
+ 	    
+ 	      granulepos-=samples;
+ 	      for(i=0;i<link;i++)
+ 	        granulepos+=vf->pcmlengths[i*2+1];
+ 	      vf->pcm_offset=granulepos;
+ 	    }
+ 	    return(1);
+ 	  }
+ 	}
+ 	else 
+ 	  break;
+       }
+     }
+ 
+     if(vf->ready_state>=OPENED){
+       int ret;
+       if(!readp)return(0);
+       if((ret=_get_next_page(vf,&og,-1))<0){
+ 	return(OV_EOF); /* eof. 
+ 			   leave unitialized */
+       }
+ 
+ 	/* bitrate tracking; add the header's bytes here, the body bytes
+ 	   are done by packet above */
+       vf->bittrack+=og.header_len*8;
+       
+       /* has our decoding just traversed a bitstream boundary? */
+       if(vf->ready_state==INITSET){
+ 	if(vf->current_serialno!=ogg_page_serialno(&og)){
+ 	  if(!spanp)
+ 	    return(OV_EOF);
+ 
+ 	  _decode_clear(vf);
+ 	  
+ 	  if(!vf->seekable){
+ 	    vorbis_info_clear(vf->vi);
+ 	    vorbis_comment_clear(vf->vc);
+ 	  }
+ 	}
+       }
+     }
+ 
+     /* Do we need to load a new machine before submitting the page? */
+     /* This is different in the seekable and non-seekable cases.  
+ 
+        In the seekable case, we already have all the header
+        information loaded and cached; we just initialize the machine
+        with it and continue on our merry way.
+ 
+        In the non-seekable (streaming) case, we'll only be at a
+        boundary if we just left the previous logical bitstream and
+        we're now nominally at the header of the next bitstream
+     */
+ 
+     if(vf->ready_state!=INITSET){ 
+       int link;
+ 
+       if(vf->ready_state<STREAMSET){
+ 	if(vf->seekable){
+ 	  vf->current_serialno=ogg_page_serialno(&og);
+ 	  
+ 	  /* match the serialno to bitstream section.  We use this rather than
+ 	     offset positions to avoid problems near logical bitstream
+ 	     boundaries */
+ 	  for(link=0;link<vf->links;link++)
+ 	    if(vf->serialnos[link]==vf->current_serialno)break;
+ 	  if(link==vf->links)return(OV_EBADLINK); /* sign of a bogus
+ 						     stream.  error out,
+ 						     leave machine
+ 						     uninitialized */
+ 	  
+ 	  vf->current_link=link;
+ 	  
+ 	  ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
+ 	  vf->ready_state=STREAMSET;
+ 	  
+ 	}else{
+ 	  /* we're streaming */
+ 	  /* fetch the three header packets, build the info struct */
+ 	  
+ 	  int ret=_fetch_headers(vf,vf->vi,vf->vc,&vf->current_serialno,&og);
+ 	  if(ret)return(ret);
+ 	  vf->current_link++;
+ 	  link=0;
+ 	}
+       }
+       
+       {
+ 	int ret=_make_decode_ready(vf);
+ 	if(ret<0)return ret;
+       }
+     }
+     ogg_stream_pagein(&vf->os,&og);
+   }
+ }
+ 
+ /* if, eg, 64 bit stdio is configured by default, this will build with
+    fseek64 */
+ static int _fseek64_wrap(FILE *f,ogg_int64_t off,int whence){
+   if(f==NULL)return(-1);
+   return fseek(f,off,whence);
+ }
+ 
+ static int _ov_open1(void *f,OggVorbis_File *vf,char *initial,
+ 		     long ibytes, ov_callbacks callbacks){
+   int offsettest=(f?callbacks.seek_func(f,0,SEEK_CUR):-1);
+   int ret;
+ 
+   memset(vf,0,sizeof(*vf));
+   vf->datasource=f;
+   vf->callbacks = callbacks;
+ 
+   /* init the framing state */
+   ogg_sync_init(&vf->oy);
+ 
+   /* perhaps some data was previously read into a buffer for testing
+      against other stream types.  Allow initialization from this
+      previously read data (as we may be reading from a non-seekable
+      stream) */
+   if(initial){
+     char *buffer=ogg_sync_buffer(&vf->oy,ibytes);
+     memcpy(buffer,initial,ibytes);
+     ogg_sync_wrote(&vf->oy,ibytes);
+   }
+ 
+   /* can we seek? Stevens suggests the seek test was portable */
+   if(offsettest!=-1)vf->seekable=1;
+ 
+   /* No seeking yet; Set up a 'single' (current) logical bitstream
+      entry for partial open */
+   vf->links=1;
+   vf->vi=_ogg_calloc(vf->links,sizeof(*vf->vi));
+   vf->vc=_ogg_calloc(vf->links,sizeof(*vf->vc));
+   ogg_stream_init(&vf->os,-1); /* fill in the serialno later */
+ 
+   /* Try to fetch the headers, maintaining all the storage */
+   if((ret=_fetch_headers(vf,vf->vi,vf->vc,&vf->current_serialno,NULL))<0){
+     vf->datasource=NULL;
+     ov_clear(vf);
+   }else 
+     vf->ready_state=PARTOPEN;
+   return(ret);
+ }
+ 
+ static int _ov_open2(OggVorbis_File *vf){
+   if(vf->ready_state != PARTOPEN) return OV_EINVAL;
+   vf->ready_state=OPENED;
+   if(vf->seekable){
+     int ret=_open_seekable2(vf);
+     if(ret){
+       vf->datasource=NULL;
+       ov_clear(vf);
+     }
+     return(ret);
+   }else
+     vf->ready_state=STREAMSET;
+ 
+   return 0;
+ }
+ 
+ 
+ /* clear out the OggVorbis_File struct */
+ int ov_clear(OggVorbis_File *vf){
+   if(vf){
+     vorbis_block_clear(&vf->vb);
+     vorbis_dsp_clear(&vf->vd);
+     ogg_stream_clear(&vf->os);
+     
+     if(vf->vi && vf->links){
+       int i;
+       for(i=0;i<vf->links;i++){
+ 	vorbis_info_clear(vf->vi+i);
+ 	vorbis_comment_clear(vf->vc+i);
+       }
+       _ogg_free(vf->vi);
+       _ogg_free(vf->vc);
+     }
+     if(vf->dataoffsets)_ogg_free(vf->dataoffsets);
+     if(vf->pcmlengths)_ogg_free(vf->pcmlengths);
+     if(vf->serialnos)_ogg_free(vf->serialnos);
+     if(vf->offsets)_ogg_free(vf->offsets);
+     ogg_sync_clear(&vf->oy);
+     if(vf->datasource)(vf->callbacks.close_func)(vf->datasource);
+     memset(vf,0,sizeof(*vf));
+   }
+ #ifdef DEBUG_LEAKS
+   _VDBG_dump();
+ #endif
+   return(0);
+ }
+ 
+ /* inspects the OggVorbis file and finds/documents all the logical
+    bitstreams contained in it.  Tries to be tolerant of logical
+    bitstream sections that are truncated/woogie. 
+ 
+    return: -1) error
+             0) OK
+ */
+ 
+ int ov_open_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes,
+     ov_callbacks callbacks){
+   int ret=_ov_open1(f,vf,initial,ibytes,callbacks);
+   if(ret)return ret;
+   return _ov_open2(vf);
+ }
+ 
+ int ov_open(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){
+   ov_callbacks callbacks = {
+     (size_t (*)(void *, size_t, size_t, void *))  fread,
+     (int (*)(void *, ogg_int64_t, int))              _fseek64_wrap,
+     (int (*)(void *))                             fclose,
+     (long (*)(void *))                            ftell
+   };
+ 
+   return ov_open_callbacks((void *)f, vf, initial, ibytes, callbacks);
+ }
+  
+ /* cheap hack for game usage where downsampling is desirable; there's
+    no need for SRC as we can just do it cheaply in libvorbis. */
+  
+ int ov_halfrate(OggVorbis_File *vf,int flag){
+   int i;
+   if(vf->vi==NULL)return OV_EINVAL;
+   if(!vf->seekable)return OV_EINVAL;
+   if(vf->ready_state>=STREAMSET)
+     _decode_clear(vf); /* clear out stream state; later on libvorbis
+                           will be able to swap this on the fly, but
+                           for now dumping the decode machine is needed
+                           to reinit the MDCT lookups.  1.1 libvorbis
+                           is planned to be able to switch on the fly */
+   
+   for(i=0;i<vf->links;i++){
+     if(vorbis_synthesis_halfrate(vf->vi+i,flag)){
+       ov_halfrate(vf,0);
+       return OV_EINVAL;
+     }
+   }
+   return 0;
+ }
+ 
+ int ov_halfrate_p(OggVorbis_File *vf){
+   if(vf->vi==NULL)return OV_EINVAL;
+   return vorbis_synthesis_halfrate_p(vf->vi);
+ }
+ 
+ /* Only partially open the vorbis file; test for Vorbisness, and load
+    the headers for the first chain.  Do not seek (although test for
+    seekability).  Use ov_test_open to finish opening the file, else
+    ov_clear to close/free it. Same return codes as open. */
+ 
+ int ov_test_callbacks(void *f,OggVorbis_File *vf,char *initial,long ibytes,
+     ov_callbacks callbacks)
+ {
+   return _ov_open1(f,vf,initial,ibytes,callbacks);
+ }
+ 
+ int ov_test(FILE *f,OggVorbis_File *vf,char *initial,long ibytes){
+   ov_callbacks callbacks = {
+     (size_t (*)(void *, size_t, size_t, void *))  fread,
+     (int (*)(void *, ogg_int64_t, int))              _fseek64_wrap,
+     (int (*)(void *))                             fclose,
+     (long (*)(void *))                            ftell
+   };
+ 
+   return ov_test_callbacks((void *)f, vf, initial, ibytes, callbacks);
+ }
+   
+ int ov_test_open(OggVorbis_File *vf){
+   if(vf->ready_state!=PARTOPEN)return(OV_EINVAL);
+   return _ov_open2(vf);
+ }
+ 
+ /* How many logical bitstreams in this physical bitstream? */
+ long ov_streams(OggVorbis_File *vf){
+   return vf->links;
+ }
+ 
+ /* Is the FILE * associated with vf seekable? */
+ long ov_seekable(OggVorbis_File *vf){
+   return vf->seekable;
+ }
+ 
+ /* returns the bitrate for a given logical bitstream or the entire
+    physical bitstream.  If the file is open for random access, it will
+    find the *actual* average bitrate.  If the file is streaming, it
+    returns the nominal bitrate (if set) else the average of the
+    upper/lower bounds (if set) else -1 (unset).
+ 
+    If you want the actual bitrate field settings, get them from the
+    vorbis_info structs */
+ 
+ long ov_bitrate(OggVorbis_File *vf,int i){
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(i>=vf->links)return(OV_EINVAL);
+   if(!vf->seekable && i!=0)return(ov_bitrate(vf,0));
+   if(i<0){
+     ogg_int64_t bits=0;
+     int i;
+     float br;
+     for(i=0;i<vf->links;i++)
+       bits+=(vf->offsets[i+1]-vf->dataoffsets[i])*8;
+     /* This once read: return(rint(bits/ov_time_total(vf,-1)));
+      * gcc 3.x on x86 miscompiled this at optimisation level 2 and above,
+      * so this is slightly transformed to make it work.
+      */
+     br = bits/ov_time_total(vf,-1);
+     return(rint(br));
+   }else{
+     if(vf->seekable){
+       /* return the actual bitrate */
+       return(rint((vf->offsets[i+1]-vf->dataoffsets[i])*8/ov_time_total(vf,i)));
+     }else{
+       /* return nominal if set */
+       if(vf->vi[i].bitrate_nominal>0){
+ 	return vf->vi[i].bitrate_nominal;
+       }else{
+ 	if(vf->vi[i].bitrate_upper>0){
+ 	  if(vf->vi[i].bitrate_lower>0){
+ 	    return (vf->vi[i].bitrate_upper+vf->vi[i].bitrate_lower)/2;
+ 	  }else{
+ 	    return vf->vi[i].bitrate_upper;
+ 	  }
+ 	}
+ 	return(OV_FALSE);
+       }
+     }
+   }
+ }
+ 
+ /* returns the actual bitrate since last call.  returns -1 if no
+    additional data to offer since last call (or at beginning of stream),
+    EINVAL if stream is only partially open 
+ */
+ long ov_bitrate_instant(OggVorbis_File *vf){
+   int link=(vf->seekable?vf->current_link:0);
+   long ret;
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(vf->samptrack==0)return(OV_FALSE);
+   ret=vf->bittrack/vf->samptrack*vf->vi[link].rate+.5;
+   vf->bittrack=0.f;
+   vf->samptrack=0.f;
+   return(ret);
+ }
+ 
+ /* Guess */
+ long ov_serialnumber(OggVorbis_File *vf,int i){
+   if(i>=vf->links)return(ov_serialnumber(vf,vf->links-1));
+   if(!vf->seekable && i>=0)return(ov_serialnumber(vf,-1));
+   if(i<0){
+     return(vf->current_serialno);
+   }else{
+     return(vf->serialnos[i]);
+   }
+ }
+ 
+ /* returns: total raw (compressed) length of content if i==-1
+             raw (compressed) length of that logical bitstream for i==0 to n
+ 	    OV_EINVAL if the stream is not seekable (we can't know the length)
+ 	    or if stream is only partially open
+ */
+ ogg_int64_t ov_raw_total(OggVorbis_File *vf,int i){
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
+   if(i<0){
+     ogg_int64_t acc=0;
+     int i;
+     for(i=0;i<vf->links;i++)
+       acc+=ov_raw_total(vf,i);
+     return(acc);
+   }else{
+     return(vf->offsets[i+1]-vf->offsets[i]);
+   }
+ }
+ 
+ /* returns: total PCM length (samples) of content if i==-1 PCM length
+ 	    (samples) of that logical bitstream for i==0 to n
+ 	    OV_EINVAL if the stream is not seekable (we can't know the
+ 	    length) or only partially open 
+ */
+ ogg_int64_t ov_pcm_total(OggVorbis_File *vf,int i){
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
+   if(i<0){
+     ogg_int64_t acc=0;
+     int i;
+     for(i=0;i<vf->links;i++)
+       acc+=ov_pcm_total(vf,i);
+     return(acc);
+   }else{
+     return(vf->pcmlengths[i*2+1]);
+   }
+ }
+ 
+ /* returns: total seconds of content if i==-1
+             seconds in that logical bitstream for i==0 to n
+ 	    OV_EINVAL if the stream is not seekable (we can't know the
+ 	    length) or only partially open 
+ */
+ double ov_time_total(OggVorbis_File *vf,int i){
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(!vf->seekable || i>=vf->links)return(OV_EINVAL);
+   if(i<0){
+     double acc=0;
+     int i;
+     for(i=0;i<vf->links;i++)
+       acc+=ov_time_total(vf,i);
+     return(acc);
+   }else{
+     return((double)(vf->pcmlengths[i*2+1])/vf->vi[i].rate);
+   }
+ }
+ 
+ /* seek to an offset relative to the *compressed* data. This also
+    scans packets to update the PCM cursor. It will cross a logical
+    bitstream boundary, but only if it can't get any packets out of the
+    tail of the bitstream we seek to (so no surprises).
+ 
+    returns zero on success, nonzero on failure */
+ 
+ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
+   ogg_stream_state work_os;
+ 
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(!vf->seekable)
+     return(OV_ENOSEEK); /* don't dump machine if we can't seek */
+ 
+   if(pos<0 || pos>vf->end)return(OV_EINVAL);
+ 
+   /* don't yet clear out decoding machine (if it's initialized), in
+      the case we're in the same link.  Restart the decode lapping, and
+      let _fetch_and_process_packet deal with a potential bitstream
+      boundary */
+   vf->pcm_offset=-1;
+   ogg_stream_reset_serialno(&vf->os,
+ 			    vf->current_serialno); /* must set serialno */
+   vorbis_synthesis_restart(&vf->vd);
+     
+   _seek_helper(vf,pos);
+ 
+   /* we need to make sure the pcm_offset is set, but we don't want to
+      advance the raw cursor past good packets just to get to the first
+      with a granulepos.  That's not equivalent behavior to beginning
+      decoding as immediately after the seek position as possible.
+ 
+      So, a hack.  We use two stream states; a local scratch state and
+      the shared vf->os stream state.  We use the local state to
+      scan, and the shared state as a buffer for later decode. 
+ 
+      Unfortuantely, on the last page we still advance to last packet
+      because the granulepos on the last page is not necessarily on a
+      packet boundary, and we need to make sure the granpos is
+      correct. 
+   */
+ 
+   {
+     ogg_page og;
+     ogg_packet op;
+     int lastblock=0;
+     int accblock=0;
+     int thisblock;
+     int eosflag;
+ 
+     ogg_stream_init(&work_os,vf->current_serialno); /* get the memory ready */
+     ogg_stream_reset(&work_os); /* eliminate the spurious OV_HOLE
+                                    return from not necessarily
+                                    starting from the beginning */
+ 
+     while(1){
+       if(vf->ready_state>=STREAMSET){
+ 	/* snarf/scan a packet if we can */
+ 	int result=ogg_stream_packetout(&work_os,&op);
+       
+ 	if(result>0){
+ 
+ 	  if(vf->vi[vf->current_link].codec_setup){
+ 	    thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op);
+ 	    if(thisblock<0){
+ 	      ogg_stream_packetout(&vf->os,NULL);
+ 	      thisblock=0;
+ 	    }else{
+ 	      
+ 	      if(eosflag)
+ 	      ogg_stream_packetout(&vf->os,NULL);
+ 	      else
+ 		if(lastblock)accblock+=(lastblock+thisblock)>>2;
+ 	    }	    
+ 
+ 	    if(op.granulepos!=-1){
+ 	      int i,link=vf->current_link;
+ 	      ogg_int64_t granulepos=op.granulepos-vf->pcmlengths[link*2];
+ 	      if(granulepos<0)granulepos=0;
+ 	      
+ 	      for(i=0;i<link;i++)
+ 		granulepos+=vf->pcmlengths[i*2+1];
+ 	      vf->pcm_offset=granulepos-accblock;
+ 	      break;
+ 	    }
+ 	    lastblock=thisblock;
+ 	    continue;
+ 	  }else
+ 	    ogg_stream_packetout(&vf->os,NULL);
+ 	}
+       }
+       
+       if(!lastblock){
+ 	if(_get_next_page(vf,&og,-1)<0){
+ 	  vf->pcm_offset=ov_pcm_total(vf,-1);
+ 	  break;
+ 	}
+       }else{
+ 	/* huh?  Bogus stream with packets but no granulepos */
+ 	vf->pcm_offset=-1;
+ 	break;
+       }
+       
+       /* has our decoding just traversed a bitstream boundary? */
+       if(vf->ready_state>=STREAMSET)
+ 	if(vf->current_serialno!=ogg_page_serialno(&og)){
+ 	  _decode_clear(vf); /* clear out stream state */
+ 	  ogg_stream_clear(&work_os);
+ 	}
+ 
+       if(vf->ready_state<STREAMSET){
+ 	int link;
+ 	
+ 	vf->current_serialno=ogg_page_serialno(&og);
+ 	for(link=0;link<vf->links;link++)
+ 	  if(vf->serialnos[link]==vf->current_serialno)break;
+ 	if(link==vf->links)goto seek_error; /* sign of a bogus stream.
+ 					       error out, leave
+ 					       machine uninitialized */
+ 	vf->current_link=link;
+ 	
+ 	ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
+ 	ogg_stream_reset_serialno(&work_os,vf->current_serialno); 
+ 	vf->ready_state=STREAMSET;
+ 	
+       }
+     
+       ogg_stream_pagein(&vf->os,&og);
+       ogg_stream_pagein(&work_os,&og);
+       eosflag=ogg_page_eos(&og);
+     }
+   }
+ 
+   ogg_stream_clear(&work_os);
+   vf->bittrack=0.f;
+   vf->samptrack=0.f;
+   return(0);
+ 
+  seek_error:
+   /* dump the machine so we're in a known state */
+   vf->pcm_offset=-1;
+   ogg_stream_clear(&work_os);
+   _decode_clear(vf);
+   return OV_EBADLINK;
+ }
+ 
+ /* Page granularity seek (faster than sample granularity because we
+    don't do the last bit of decode to find a specific sample).
+ 
+    Seek to the last [granule marked] page preceeding the specified pos
+    location, such that decoding past the returned point will quickly
+    arrive at the requested position. */
+ int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
+   int link=-1;
+   ogg_int64_t result=0;
+   ogg_int64_t total=ov_pcm_total(vf,-1);
+ 
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(!vf->seekable)return(OV_ENOSEEK);
+ 
+   if(pos<0 || pos>total)return(OV_EINVAL);
+  
+   /* which bitstream section does this pcm offset occur in? */
+   for(link=vf->links-1;link>=0;link--){
+     total-=vf->pcmlengths[link*2+1];
+     if(pos>=total)break;
+   }
+ 
+   /* search within the logical bitstream for the page with the highest
+      pcm_pos preceeding (or equal to) pos.  There is a danger here;
+      missing pages or incorrect frame number information in the
+      bitstream could make our task impossible.  Account for that (it
+      would be an error condition) */
+ 
+   /* new search algorithm by HB (Nicholas Vinen) */
+   {
+     ogg_int64_t end=vf->offsets[link+1];
+     ogg_int64_t begin=vf->offsets[link];
+     ogg_int64_t begintime = vf->pcmlengths[link*2];
+     ogg_int64_t endtime = vf->pcmlengths[link*2+1]+begintime;
+     ogg_int64_t target=pos-total+begintime;
+     ogg_int64_t best=begin;
+     
+     ogg_page og;
+     while(begin<end){
+       ogg_int64_t bisect;
+       
+       if(end-begin<CHUNKSIZE){
+ 	bisect=begin;
+       }else{
+ 	/* take a (pretty decent) guess. */
+ 	bisect=begin + 
+ 	  (target-begintime)*(end-begin)/(endtime-begintime) - CHUNKSIZE;
+ 	if(bisect<=begin)
+ 	  bisect=begin+1;
+       }
+       
+       _seek_helper(vf,bisect);
+     
+       while(begin<end){
+ 	result=_get_next_page(vf,&og,end-vf->offset);
+ 	if(result==OV_EREAD) goto seek_error;
+ 	if(result<0){
+ 	  if(bisect<=begin+1)
+ 	    end=begin; /* found it */
+ 	  else{
+ 	    if(bisect==0) goto seek_error;
+ 	    bisect-=CHUNKSIZE;
+ 	    if(bisect<=begin)bisect=begin+1;
+ 	    _seek_helper(vf,bisect);
+ 	  }
+ 	}else{
+ 	  ogg_int64_t granulepos=ogg_page_granulepos(&og);
+ 	  if(granulepos==-1)continue;
+ 	  if(granulepos<target){
+ 	    best=result;  /* raw offset of packet with granulepos */ 
+ 	    begin=vf->offset; /* raw offset of next page */
+ 	    begintime=granulepos;
+ 	    
+ 	    if(target-begintime>44100)break;
+ 	    bisect=begin; /* *not* begin + 1 */
+ 	  }else{
+ 	    if(bisect<=begin+1)
+ 	      end=begin;  /* found it */
+ 	    else{
+ 	      if(end==vf->offset){ /* we're pretty close - we'd be stuck in */
+ 		end=result;
+ 		bisect-=CHUNKSIZE; /* an endless loop otherwise. */
+ 		if(bisect<=begin)bisect=begin+1;
+ 		_seek_helper(vf,bisect);
+ 	      }else{
+ 		end=result;
+ 		endtime=granulepos;
+ 		break;
+ 	      }
+ 	    }
+ 	  }
+ 	}
+       }
+     }
+ 
+     /* found our page. seek to it, update pcm offset. Easier case than
+        raw_seek, don't keep packets preceeding granulepos. */
+     {
+       ogg_page og;
+       ogg_packet op;
+       
+       /* seek */
+       _seek_helper(vf,best);
+       vf->pcm_offset=-1;
+       
+       if(_get_next_page(vf,&og,-1)<0)return(OV_EOF); /* shouldn't happen */
+       
+       if(link!=vf->current_link){
+ 	/* Different link; dump entire decode machine */
+ 	_decode_clear(vf);  
+ 	
+ 	vf->current_link=link;
+ 	vf->current_serialno=ogg_page_serialno(&og);
+ 	vf->ready_state=STREAMSET;
+ 	
+       }else{
+ 	vorbis_synthesis_restart(&vf->vd);
+       }
+ 
+       ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
+       ogg_stream_pagein(&vf->os,&og);
+ 
+       /* pull out all but last packet; the one with granulepos */
+       while(1){
+ 	result=ogg_stream_packetpeek(&vf->os,&op);
+ 	if(result==0){
+ 	  /* !!! the packet finishing this page originated on a
+              preceeding page. Keep fetching previous pages until we
+              get one with a granulepos or without the 'continued' flag
+              set.  Then just use raw_seek for simplicity. */
+ 	  
+ 	  _seek_helper(vf,best);
+ 	  
+ 	  while(1){
+ 	    result=_get_prev_page(vf,&og);
+ 	    if(result<0) goto seek_error;
+ 	    if(ogg_page_granulepos(&og)>-1 ||
+ 	       !ogg_page_continued(&og)){
+ 	      return ov_raw_seek(vf,result);
+ 	    }
+ 	    vf->offset=result;
+ 	  }
+ 	}
+ 	if(result<0){
+ 	  result = OV_EBADPACKET; 
+ 	  goto seek_error;
+ 	}
+ 	if(op.granulepos!=-1){
+ 	  vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2];
+ 	  if(vf->pcm_offset<0)vf->pcm_offset=0;
+ 	  vf->pcm_offset+=total;
+ 	  break;
+ 	}else
+ 	  result=ogg_stream_packetout(&vf->os,NULL);
+       }
+     }
+   }
+   
+   /* verify result */
+   if(vf->pcm_offset>pos || pos>ov_pcm_total(vf,-1)){
+     result=OV_EFAULT;
+     goto seek_error;
+   }
+   vf->bittrack=0.f;
+   vf->samptrack=0.f;
+   return(0);
+   
+  seek_error:
+   /* dump machine so we're in a known state */
+   vf->pcm_offset=-1;
+   _decode_clear(vf);
+   return (int)result;
+ }
+ 
+ /* seek to a sample offset relative to the decompressed pcm stream 
+    returns zero on success, nonzero on failure */
+ 
+ int ov_pcm_seek(OggVorbis_File *vf,ogg_int64_t pos){
+   int thisblock,lastblock=0;
+   int ret=ov_pcm_seek_page(vf,pos);
+   if(ret<0)return(ret);
+   if((ret=_make_decode_ready(vf)))return ret;
+ 
+   /* discard leading packets we don't need for the lapping of the
+      position we want; don't decode them */
+ 
+   while(1){
+     ogg_packet op;
+     ogg_page og;
+ 
+     int ret=ogg_stream_packetpeek(&vf->os,&op);
+     if(ret>0){
+       thisblock=vorbis_packet_blocksize(vf->vi+vf->current_link,&op);
+       if(thisblock<0){
+ 	ogg_stream_packetout(&vf->os,NULL);
+ 	continue; /* non audio packet */
+       }
+       if(lastblock)vf->pcm_offset+=(lastblock+thisblock)>>2;
+       
+       if(vf->pcm_offset+((thisblock+
+ 			  vorbis_info_blocksize(vf->vi,1))>>2)>=pos)break;
+       
+       /* remove the packet from packet queue and track its granulepos */
+       ogg_stream_packetout(&vf->os,NULL);
+       vorbis_synthesis_trackonly(&vf->vb,&op);  /* set up a vb with
+                                                    only tracking, no
+                                                    pcm_decode */
+       vorbis_synthesis_blockin(&vf->vd,&vf->vb); 
+       
+       /* end of logical stream case is hard, especially with exact
+ 	 length positioning. */
+       
+       if(op.granulepos>-1){
+ 	int i;
+ 	/* always believe the stream markers */
+ 	vf->pcm_offset=op.granulepos-vf->pcmlengths[vf->current_link*2];
+ 	if(vf->pcm_offset<0)vf->pcm_offset=0;
+ 	for(i=0;i<vf->current_link;i++)
+ 	  vf->pcm_offset+=vf->pcmlengths[i*2+1];
+       }
+ 	
+       lastblock=thisblock;
+       
+     }else{
+       if(ret<0 && ret!=OV_HOLE)break;
+       
+       /* suck in a new page */
+       if(_get_next_page(vf,&og,-1)<0)break;
+       if(vf->current_serialno!=ogg_page_serialno(&og))_decode_clear(vf);
+       
+       if(vf->ready_state<STREAMSET){
+ 	int link;
+ 	
+ 	vf->current_serialno=ogg_page_serialno(&og);
+ 	for(link=0;link<vf->links;link++)
+ 	  if(vf->serialnos[link]==vf->current_serialno)break;
+ 	if(link==vf->links)return(OV_EBADLINK);
+ 	vf->current_link=link;
+ 	
+ 	ogg_stream_reset_serialno(&vf->os,vf->current_serialno); 
+ 	vf->ready_state=STREAMSET;      
+ 	ret=_make_decode_ready(vf);
+ 	if(ret)return ret;
+ 	lastblock=0;
+       }
+ 
+       ogg_stream_pagein(&vf->os,&og);
+     }
+   }
+ 
+   vf->bittrack=0.f;
+   vf->samptrack=0.f;
+   /* discard samples until we reach the desired position. Crossing a
+      logical bitstream boundary with abandon is OK. */
+   while(vf->pcm_offset<pos){
+     ogg_int64_t target=pos-vf->pcm_offset;
+     long samples=vorbis_synthesis_pcmout(&vf->vd,NULL);
+ 
+     if(samples>target)samples=target;
+     vorbis_synthesis_read(&vf->vd,samples);
+     vf->pcm_offset+=samples;
+     
+     if(samples<target)
+       if(_fetch_and_process_packet(vf,NULL,1,1)<=0)
+ 	vf->pcm_offset=ov_pcm_total(vf,-1); /* eof */
+   }
+   return 0;
+ }
+ 
+ /* seek to a playback time relative to the decompressed pcm stream 
+    returns zero on success, nonzero on failure */
+ int ov_time_seek(OggVorbis_File *vf,double seconds){
+   /* translate time to PCM position and call ov_pcm_seek */
+ 
+   int link=-1;
+   ogg_int64_t pcm_total=ov_pcm_total(vf,-1);
+   double time_total=ov_time_total(vf,-1);
+ 
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(!vf->seekable)return(OV_ENOSEEK);
+   if(seconds<0 || seconds>time_total)return(OV_EINVAL);
+   
+   /* which bitstream section does this time offset occur in? */
+   for(link=vf->links-1;link>=0;link--){
+     pcm_total-=vf->pcmlengths[link*2+1];
+     time_total-=ov_time_total(vf,link);
+     if(seconds>=time_total)break;
+   }
+ 
+   /* enough information to convert time offset to pcm offset */
+   {
+     ogg_int64_t target=pcm_total+(seconds-time_total)*vf->vi[link].rate;
+     return(ov_pcm_seek(vf,target));
+   }
+ }
+ 
+ /* page-granularity version of ov_time_seek 
+    returns zero on success, nonzero on failure */
+ int ov_time_seek_page(OggVorbis_File *vf,double seconds){
+   /* translate time to PCM position and call ov_pcm_seek */
+ 
+   int link=-1;
+   ogg_int64_t pcm_total=ov_pcm_total(vf,-1);
+   double time_total=ov_time_total(vf,-1);
+ 
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(!vf->seekable)return(OV_ENOSEEK);
+   if(seconds<0 || seconds>time_total)return(OV_EINVAL);
+   
+   /* which bitstream section does this time offset occur in? */
+   for(link=vf->links-1;link>=0;link--){
+     pcm_total-=vf->pcmlengths[link*2+1];
+     time_total-=ov_time_total(vf,link);
+     if(seconds>=time_total)break;
+   }
+ 
+   /* enough information to convert time offset to pcm offset */
+   {
+     ogg_int64_t target=pcm_total+(seconds-time_total)*vf->vi[link].rate;
+     return(ov_pcm_seek_page(vf,target));
+   }
+ }
+ 
+ /* tell the current stream offset cursor.  Note that seek followed by
+    tell will likely not give the set offset due to caching */
+ ogg_int64_t ov_raw_tell(OggVorbis_File *vf){
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   return(vf->offset);
+ }
+ 
+ /* return PCM offset (sample) of next PCM sample to be read */
+ ogg_int64_t ov_pcm_tell(OggVorbis_File *vf){
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   return(vf->pcm_offset);
+ }
+ 
+ /* return time offset (seconds) of next PCM sample to be read */
+ double ov_time_tell(OggVorbis_File *vf){
+   int link=0;
+   ogg_int64_t pcm_total=0;
+   double time_total=0.f;
+   
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   if(vf->seekable){
+     pcm_total=ov_pcm_total(vf,-1);
+     time_total=ov_time_total(vf,-1);
+   
+     /* which bitstream section does this time offset occur in? */
+     for(link=vf->links-1;link>=0;link--){
+       pcm_total-=vf->pcmlengths[link*2+1];
+       time_total-=ov_time_total(vf,link);
+       if(vf->pcm_offset>=pcm_total)break;
+     }
+   }
+ 
+   return((double)time_total+(double)(vf->pcm_offset-pcm_total)/vf->vi[link].rate);
+ }
+ 
+ /*  link:   -1) return the vorbis_info struct for the bitstream section
+                 currently being decoded
+            0-n) to request information for a specific bitstream section
+     
+     In the case of a non-seekable bitstream, any call returns the
+     current bitstream.  NULL in the case that the machine is not
+     initialized */
+ 
+ vorbis_info *ov_info(OggVorbis_File *vf,int link){
+   if(vf->seekable){
+     if(link<0)
+       if(vf->ready_state>=STREAMSET)
+ 	return vf->vi+vf->current_link;
+       else
+       return vf->vi;
+     else
+       if(link>=vf->links)
+ 	return NULL;
+       else
+ 	return vf->vi+link;
+   }else{
+     return vf->vi;
+   }
+ }
+ 
+ /* grr, strong typing, grr, no templates/inheritence, grr */
+ vorbis_comment *ov_comment(OggVorbis_File *vf,int link){
+   if(vf->seekable){
+     if(link<0)
+       if(vf->ready_state>=STREAMSET)
+ 	return vf->vc+vf->current_link;
+       else
+ 	return vf->vc;
+     else
+       if(link>=vf->links)
+ 	return NULL;
+       else
+ 	return vf->vc+link;
+   }else{
+     return vf->vc;
+   }
+ }
+ 
+ static int host_is_big_endian() {
+   ogg_int32_t pattern = 0xfeedface; /* deadbeef */
+   unsigned char *bytewise = (unsigned char *)&pattern;
+   if (bytewise[0] == 0xfe) return 1;
+   return 0;
+ }
+ 
+ /* up to this point, everything could more or less hide the multiple
+    logical bitstream nature of chaining from the toplevel application
+    if the toplevel application didn't particularly care.  However, at
+    the point that we actually read audio back, the multiple-section
+    nature must surface: Multiple bitstream sections do not necessarily
+    have to have the same number of channels or sampling rate.
+ 
+    ov_read returns the sequential logical bitstream number currently
+    being decoded along with the PCM data in order that the toplevel
+    application can take action on channel/sample rate changes.  This
+    number will be incremented even for streamed (non-seekable) streams
+    (for seekable streams, it represents the actual logical bitstream
+    index within the physical bitstream.  Note that the accessor
+    functions above are aware of this dichotomy).
+ 
+    input values: buffer) a buffer to hold packed PCM data for return
+ 		 length) the byte length requested to be placed into buffer
+ 		 bigendianp) should the data be packed LSB first (0) or
+ 		             MSB first (1)
+ 		 word) word size for output.  currently 1 (byte) or 
+ 		       2 (16 bit short)
+ 
+    return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL)
+                    0) EOF
+ 		   n) number of bytes of PCM actually returned.  The
+ 		   below works on a packet-by-packet basis, so the
+ 		   return length is not related to the 'length' passed
+ 		   in, just guaranteed to fit.
+ 
+ 	    *section) set to the logical bitstream number */
+ 
+ long ov_read(OggVorbis_File *vf,char *buffer,int length,
+ 		    int bigendianp,int word,int sgned,int *bitstream){
+   int i,j;
+   int host_endian = host_is_big_endian();
+ 
+   float **pcm;
+   long samples;
+ 
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+ 
+   while(1){
+     if(vf->ready_state==INITSET){
+       samples=vorbis_synthesis_pcmout(&vf->vd,&pcm);
+       if(samples)break;
+     }
+ 
+     /* suck in another packet */
+     {
+       int ret=_fetch_and_process_packet(vf,NULL,1,1);
+       if(ret==OV_EOF)
+ 	return(0);
+       if(ret<=0)
+ 	return(ret);
+     }
+ 
+   }
+ 
+   if(samples>0){
+   
+     /* yay! proceed to pack data into the byte buffer */
+     
+     long channels=ov_info(vf,-1)->channels;
+     long bytespersample=word * channels;
+     vorbis_fpu_control fpu;
+     if(samples>length/bytespersample)samples=length/bytespersample;
+ 
+     if(samples <= 0)
+       return OV_EINVAL;
+     
+     /* a tight loop to pack each size */
+     {
+       int val;
+       if(word==1){
+ 	int off=(sgned?0:128);
+ 	vorbis_fpu_setround(&fpu);
+ 	for(j=0;j<samples;j++)
+ 	  for(i=0;i<channels;i++){
+ 	    val=vorbis_ftoi(pcm[i][j]*128.f);
+ 	    if(val>127)val=127;
+ 	    else if(val<-128)val=-128;
+ 	    *buffer++=val+off;
+ 	  }
+ 	vorbis_fpu_restore(fpu);
+       }else{
+ 	int off=(sgned?0:32768);
+ 	
+ 	if(host_endian==bigendianp){
+ 	  if(sgned){
+ 	    
+ 	    vorbis_fpu_setround(&fpu);
+ 	    for(i=0;i<channels;i++) { /* It's faster in this order */
+ 	      float *src=pcm[i];
+ 	      short *dest=((short *)buffer)+i;
+ 	      for(j=0;j<samples;j++) {
+ 		val=vorbis_ftoi(src[j]*32768.f);
+ 		if(val>32767)val=32767;
+ 		else if(val<-32768)val=-32768;
+ 		*dest=val;
+ 		dest+=channels;
+ 	      }
+ 	    }
+ 	    vorbis_fpu_restore(fpu);
+ 	    
+ 	  }else{
+ 	    
+ 	    vorbis_fpu_setround(&fpu);
+ 	    for(i=0;i<channels;i++) {
+ 	      float *src=pcm[i];
+ 	      short *dest=((short *)buffer)+i;
+ 	      for(j=0;j<samples;j++) {
+ 		val=vorbis_ftoi(src[j]*32768.f);
+ 		if(val>32767)val=32767;
+ 		else if(val<-32768)val=-32768;
+ 		*dest=val+off;
+ 		dest+=channels;
+ 	      }
+ 	    }
+ 	    vorbis_fpu_restore(fpu);
+ 	    
+ 	  }
+ 	}else if(bigendianp){
+ 	  
+ 	  vorbis_fpu_setround(&fpu);
+ 	  for(j=0;j<samples;j++)
+ 	    for(i=0;i<channels;i++){
+ 	      val=vorbis_ftoi(pcm[i][j]*32768.f);
+ 	      if(val>32767)val=32767;
+ 	      else if(val<-32768)val=-32768;
+ 	      val+=off;
+ 	      *buffer++=(val>>8);
+ 	      *buffer++=(val&0xff);
+ 	    }
+ 	  vorbis_fpu_restore(fpu);
+ 	  
+ 	}else{
+ 	  int val;
+ 	  vorbis_fpu_setround(&fpu);
+ 	  for(j=0;j<samples;j++)
+ 	    for(i=0;i<channels;i++){
+ 	      val=vorbis_ftoi(pcm[i][j]*32768.f);
+ 	      if(val>32767)val=32767;
+ 	      else if(val<-32768)val=-32768;
+ 	      val+=off;
+ 	      *buffer++=(val&0xff);
+ 	      *buffer++=(val>>8);
+ 	  	}
+ 	  vorbis_fpu_restore(fpu);  
+ 	  
+ 	}
+       }
+     }
+     
+     vorbis_synthesis_read(&vf->vd,samples);
+     vf->pcm_offset+=samples;
+     if(bitstream)*bitstream=vf->current_link;
+     return(samples*bytespersample);
+   }else{
+     return(samples);
+   }
+ }
+ 
+ /* input values: pcm_channels) a float vector per channel of output
+ 		 length) the sample length being read by the app
+ 
+    return values: <0) error/hole in data (OV_HOLE), partial open (OV_EINVAL)
+                    0) EOF
+ 		   n) number of samples of PCM actually returned.  The
+ 		   below works on a packet-by-packet basis, so the
+ 		   return length is not related to the 'length' passed
+ 		   in, just guaranteed to fit.
+ 
+ 	    *section) set to the logical bitstream number */
+ 
+ 
+ 
+ long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int length,
+ 		   int *bitstream){
+ 
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+ 
+   while(1){
+     if(vf->ready_state==INITSET){
+       float **pcm;
+       long samples=vorbis_synthesis_pcmout(&vf->vd,&pcm);
+       if(samples){
+ 	if(pcm_channels)*pcm_channels=pcm;
+ 	if(samples>length)samples=length;
+ 	vorbis_synthesis_read(&vf->vd,samples);
+ 	vf->pcm_offset+=samples;
+ 	if(bitstream)*bitstream=vf->current_link;
+ 	return samples;
+ 
+       }
+     }
+ 
+     /* suck in another packet */
+     {
+       int ret=_fetch_and_process_packet(vf,NULL,1,1);
+       if(ret==OV_EOF)return(0);
+       if(ret<=0)return(ret);
+     }
+ 
+   }
+ }
+ 
+ extern float *vorbis_window(vorbis_dsp_state *v,int W);
+ extern void _analysis_output_always(char *base,int i,float *v,int n,int bark,int dB,
+ 			     ogg_int64_t off);
+ 
+ static void _ov_splice(float **pcm,float **lappcm,
+ 		       int n1, int n2,
+ 		       int ch1, int ch2,
+ 		       float *w1, float *w2){
+   int i,j;
+   float *w=w1;
+   int n=n1;
+ 
+   if(n1>n2){
+     n=n2;
+     w=w2;
+   }
+ 
+   /* splice */
+   for(j=0;j<ch1 && j<ch2;j++){
+     float *s=lappcm[j];
+     float *d=pcm[j];
+ 
+     for(i=0;i<n;i++){
+       float wd=w[i]*w[i];
+       float ws=1.-wd;
+       d[i]=d[i]*wd + s[i]*ws;
+     }
+   }
+   /* window from zero */
+   for(;j<ch2;j++){
+     float *d=pcm[j];
+     for(i=0;i<n;i++){
+       float wd=w[i]*w[i];
+       d[i]=d[i]*wd;
+     }
+   }
+ 
+ }
+ 		
+ /* make sure vf is INITSET */
+ static int _ov_initset(OggVorbis_File *vf){
+   while(1){
+     if(vf->ready_state==INITSET)break;
+     /* suck in another packet */
+     {
+       int ret=_fetch_and_process_packet(vf,NULL,1,0);
+       if(ret<0 && ret!=OV_HOLE)return(ret);
+     }
+   }
+   return 0;
+ }
+ 
+ /* make sure vf is INITSET and that we have a primed buffer; if
+    we're crosslapping at a stream section boundary, this also makes
+    sure we're sanity checking against the right stream information */
+ static int _ov_initprime(OggVorbis_File *vf){
+   vorbis_dsp_state *vd=&vf->vd;
+   while(1){
+     if(vf->ready_state==INITSET)
+       if(vorbis_synthesis_pcmout(vd,NULL))break;
+     
+     /* suck in another packet */
+     {
+       int ret=_fetch_and_process_packet(vf,NULL,1,0);
+       if(ret<0 && ret!=OV_HOLE)return(ret);
+     }
+   }  
+   return 0;
+ }
+ 
+ /* grab enough data for lapping from vf; this may be in the form of
+    unreturned, already-decoded pcm, remaining PCM we will need to
+    decode, or synthetic postextrapolation from last packets. */
+ static void _ov_getlap(OggVorbis_File *vf,vorbis_info *vi,vorbis_dsp_state *vd,
+ 		       float **lappcm,int lapsize){
+   int lapcount=0,i;
+   float **pcm;
+ 
+   /* try first to decode the lapping data */
+   while(lapcount<lapsize){
+     int samples=vorbis_synthesis_pcmout(vd,&pcm);
+     if(samples){
+       if(samples>lapsize-lapcount)samples=lapsize-lapcount;
+       for(i=0;i<vi->channels;i++)
+ 	memcpy(lappcm[i]+lapcount,pcm[i],sizeof(**pcm)*samples);
+       lapcount+=samples;
+       vorbis_synthesis_read(vd,samples);
+     }else{
+     /* suck in another packet */
+       int ret=_fetch_and_process_packet(vf,NULL,1,0); /* do *not* span */
+       if(ret==OV_EOF)break;
+     }
+   }
+   if(lapcount<lapsize){
+     /* failed to get lapping data from normal decode; pry it from the
+        postextrapolation buffering, or the second half of the MDCT
+        from the last packet */
+     int samples=vorbis_synthesis_lapout(&vf->vd,&pcm);
+     if(samples==0){
+       for(i=0;i<vi->channels;i++)
+ 	memset(lappcm[i]+lapcount,0,sizeof(**pcm)*lapsize-lapcount);
+       lapcount=lapsize;
+     }else{
+       if(samples>lapsize-lapcount)samples=lapsize-lapcount;
+       for(i=0;i<vi->channels;i++)
+ 	memcpy(lappcm[i]+lapcount,pcm[i],sizeof(**pcm)*samples);
+       lapcount+=samples;
+     }
+   }
+ }
+ 
+ /* this sets up crosslapping of a sample by using trailing data from
+    sample 1 and lapping it into the windowing buffer of sample 2 */
+ int ov_crosslap(OggVorbis_File *vf1, OggVorbis_File *vf2){
+   vorbis_info *vi1,*vi2;
+   float **lappcm;
+   float **pcm;
+   float *w1,*w2;
+   int n1,n2,i,ret,hs1,hs2;
+ 
+   if(vf1==vf2)return(0); /* degenerate case */
+   if(vf1->ready_state<OPENED)return(OV_EINVAL);
+   if(vf2->ready_state<OPENED)return(OV_EINVAL);
+ 
+   /* the relevant overlap buffers must be pre-checked and pre-primed
+      before looking at settings in the event that priming would cross
+      a bitstream boundary.  So, do it now */
+ 
+   ret=_ov_initset(vf1);
+   if(ret)return(ret);
+   ret=_ov_initprime(vf2);
+   if(ret)return(ret);
+ 
+   vi1=ov_info(vf1,-1);
+   vi2=ov_info(vf2,-1);
+   hs1=ov_halfrate_p(vf1);
+   hs2=ov_halfrate_p(vf2);
+ 
+   lappcm=alloca(sizeof(*lappcm)*vi1->channels);
+   n1=vorbis_info_blocksize(vi1,0)>>(1+hs1);
+   n2=vorbis_info_blocksize(vi2,0)>>(1+hs2);
+   w1=vorbis_window(&vf1->vd,0);
+   w2=vorbis_window(&vf2->vd,0);
+ 
+   for(i=0;i<vi1->channels;i++)
+     lappcm[i]=alloca(sizeof(**lappcm)*n1);
+ 
+   _ov_getlap(vf1,vi1,&vf1->vd,lappcm,n1);
+ 
+   /* have a lapping buffer from vf1; now to splice it into the lapping
+      buffer of vf2 */
+   /* consolidate and expose the buffer. */
+   vorbis_synthesis_lapout(&vf2->vd,&pcm);
+   _analysis_output_always("pcmL",0,pcm[0],n1*2,0,0,0);
+   _analysis_output_always("pcmR",0,pcm[1],n1*2,0,0,0);
+ 
+   /* splice */
+   _ov_splice(pcm,lappcm,n1,n2,vi1->channels,vi2->channels,w1,w2);
+   
+   /* done */
+   return(0);
+ }
+ 
+ static int _ov_64_seek_lap(OggVorbis_File *vf,ogg_int64_t pos,
+ 			   int (*localseek)(OggVorbis_File *,ogg_int64_t)){
+   vorbis_info *vi;
+   float **lappcm;
+   float **pcm;
+   float *w1,*w2;
+   int n1,n2,ch1,ch2,hs;
+   int i,ret;
+ 
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   ret=_ov_initset(vf);
+   if(ret)return(ret);
+   vi=ov_info(vf,-1);
+   hs=ov_halfrate_p(vf);
+   
+   ch1=vi->channels;
+   n1=vorbis_info_blocksize(vi,0)>>(1+hs);
+   w1=vorbis_window(&vf->vd,0);  /* window arrays from libvorbis are
+ 				   persistent; even if the decode state
+ 				   from this link gets dumped, this
+ 				   window array continues to exist */
+ 
+   lappcm=alloca(sizeof(*lappcm)*ch1);
+   for(i=0;i<ch1;i++)
+     lappcm[i]=alloca(sizeof(**lappcm)*n1);
+   _ov_getlap(vf,vi,&vf->vd,lappcm,n1);
+ 
+   /* have lapping data; seek and prime the buffer */
+   ret=localseek(vf,pos);
+   if(ret)return ret;
+   ret=_ov_initprime(vf);
+   if(ret)return(ret);
+ 
+  /* Guard against cross-link changes; they're perfectly legal */
+   vi=ov_info(vf,-1);
+   ch2=vi->channels;
+   n2=vorbis_info_blocksize(vi,0)>>(1+hs);
+   w2=vorbis_window(&vf->vd,0);
+ 
+   /* consolidate and expose the buffer. */
+   vorbis_synthesis_lapout(&vf->vd,&pcm);
+ 
+   /* splice */
+   _ov_splice(pcm,lappcm,n1,n2,ch1,ch2,w1,w2);
+ 
+   /* done */
+   return(0);
+ }
+ 
+ int ov_raw_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){
+   return _ov_64_seek_lap(vf,pos,ov_raw_seek);
+ }
+ 
+ int ov_pcm_seek_lap(OggVorbis_File *vf,ogg_int64_t pos){
+   return _ov_64_seek_lap(vf,pos,ov_pcm_seek);
+ }
+ 
+ int ov_pcm_seek_page_lap(OggVorbis_File *vf,ogg_int64_t pos){
+   return _ov_64_seek_lap(vf,pos,ov_pcm_seek_page);
+ }
+ 
+ static int _ov_d_seek_lap(OggVorbis_File *vf,double pos,
+ 			   int (*localseek)(OggVorbis_File *,double)){
+   vorbis_info *vi;
+   float **lappcm;
+   float **pcm;
+   float *w1,*w2;
+   int n1,n2,ch1,ch2,hs;
+   int i,ret;
+ 
+   if(vf->ready_state<OPENED)return(OV_EINVAL);
+   ret=_ov_initset(vf);
+   if(ret)return(ret);
+   vi=ov_info(vf,-1);
+   hs=ov_halfrate_p(vf);
+ 
+   ch1=vi->channels;
+   n1=vorbis_info_blocksize(vi,0)>>(1+hs);
+   w1=vorbis_window(&vf->vd,0);  /* window arrays from libvorbis are
+ 				   persistent; even if the decode state
+ 				   from this link gets dumped, this
+ 				   window array continues to exist */
+ 
+   lappcm=alloca(sizeof(*lappcm)*ch1);
+   for(i=0;i<ch1;i++)
+     lappcm[i]=alloca(sizeof(**lappcm)*n1);
+   _ov_getlap(vf,vi,&vf->vd,lappcm,n1);
+ 
+   /* have lapping data; seek and prime the buffer */
+   ret=localseek(vf,pos);
+   if(ret)return ret;
+   ret=_ov_initprime(vf);
+   if(ret)return(ret);
+ 
+  /* Guard against cross-link changes; they're perfectly legal */
+   vi=ov_info(vf,-1);
+   ch2=vi->channels;
+   n2=vorbis_info_blocksize(vi,0)>>(1+hs);
+   w2=vorbis_window(&vf->vd,0);
+ 
+   /* consolidate and expose the buffer. */
+   vorbis_synthesis_lapout(&vf->vd,&pcm);
+ 
+   /* splice */
+   _ov_splice(pcm,lappcm,n1,n2,ch1,ch2,w1,w2);
+ 
+   /* done */
+   return(0);
+ }
+ 
+ int ov_time_seek_lap(OggVorbis_File *vf,double pos){
+   return _ov_d_seek_lap(vf,pos,ov_time_seek);
+ }
+ 
+ int ov_time_seek_page_lap(OggVorbis_File *vf,double pos){
+   return _ov_d_seek_lap(vf,pos,ov_time_seek_page);
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2003             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: maintain the info structure, info <-> header packets
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* general handling of the header and the vorbis_info structure (and
+    substructures) */
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: registry for time, floor, res backends and channel mappings
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_REG_H_
+ 
+ #define VI_TRANSFORMB 1
+ #define VI_WINDOWB 1
+ #define VI_TIMEB 1
+ #define VI_FLOORB 2
+ #define VI_RESB 3
+ #define VI_MAPB 1
+ 
+ extern vorbis_func_floor     *_floor_P[];
+ extern vorbis_func_residue   *_residue_P[];
+ extern vorbis_func_mapping   *_mapping_P[];
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: window functions
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_WINDOW_
+ 
+ extern float *_vorbis_window_get(int n);
+ extern void _vorbis_apply_window(float *d,int *winno,long *blocksizes,
+                           int lW,int W,int nW);
+ 
+ 
+ /* helpers */
+ static int ilog2(unsigned int v){
+   int ret=0;
+   if(v)--v;
+   while(v){
+     ret++;
+     v>>=1;
+   }
+   return(ret);
+ }
+ 
+ static void _v_writestring(oggpack_buffer *o,char *s, int bytes){
+ 
+   while(bytes--){
+     oggpack_write(o,*s++,8);
+   }
+ }
+ 
+ static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
+   while(bytes--){
+     *buf++=oggpack_read(o,8);
+   }
+ }
+ 
+ void vorbis_comment_init(vorbis_comment *vc){
+   memset(vc,0,sizeof(*vc));
+ }
+ 
+ void vorbis_comment_add(vorbis_comment *vc,char *comment){
+   vc->user_comments=_ogg_realloc(vc->user_comments,
+ 			    (vc->comments+2)*sizeof(*vc->user_comments));
+   vc->comment_lengths=_ogg_realloc(vc->comment_lengths,
+       			    (vc->comments+2)*sizeof(*vc->comment_lengths));
+   vc->comment_lengths[vc->comments]=strlen(comment);
+   vc->user_comments[vc->comments]=_ogg_malloc(vc->comment_lengths[vc->comments]+1);
+   strcpy(vc->user_comments[vc->comments], comment);
+   vc->comments++;
+   vc->user_comments[vc->comments]=NULL;
+ }
+ 
+ void vorbis_comment_add_tag(vorbis_comment *vc, char *tag, char *contents){
+   char *comment=alloca(strlen(tag)+strlen(contents)+2); /* +2 for = and \0 */
+   strcpy(comment, tag);
+   strcat(comment, "=");
+   strcat(comment, contents);
+   vorbis_comment_add(vc, comment);
+ }
+ 
+ /* This is more or less the same as strncasecmp - but that doesn't exist
+  * everywhere, and this is a fairly trivial function, so we include it */
+ static int tagcompare(const char *s1, const char *s2, int n){
+   int c=0;
+   while(c < n){
+     if(toupper(s1[c]) != toupper(s2[c]))
+       return !0;
+     c++;
+   }
+   return 0;
+ }
+ 
+ char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count){
+   long i;
+   int found = 0;
+   int taglen = strlen(tag)+1; /* +1 for the = we append */
+   char *fulltag = alloca(taglen+ 1);
+ 
+   strcpy(fulltag, tag);
+   strcat(fulltag, "=");
+   
+   for(i=0;i<vc->comments;i++){
+     if(!tagcompare(vc->user_comments[i], fulltag, taglen)){
+       if(count == found)
+ 	/* We return a pointer to the data, not a copy */
+       	return vc->user_comments[i] + taglen;
+       else
+ 	found++;
+     }
+   }
+   return NULL; /* didn't find anything */
+ }
+ 
+ int vorbis_comment_query_count(vorbis_comment *vc, char *tag){
+   int i,count=0;
+   int taglen = strlen(tag)+1; /* +1 for the = we append */
+   char *fulltag = alloca(taglen+1);
+   strcpy(fulltag,tag);
+   strcat(fulltag, "=");
+ 
+   for(i=0;i<vc->comments;i++){
+     if(!tagcompare(vc->user_comments[i], fulltag, taglen))
+       count++;
+   }
+ 
+   return count;
+ }
+ 
+ void vorbis_comment_clear(vorbis_comment *vc){
+   if(vc){
+     long i;
+     for(i=0;i<vc->comments;i++)
+       if(vc->user_comments[i])_ogg_free(vc->user_comments[i]);
+     if(vc->user_comments)_ogg_free(vc->user_comments);
+ 	if(vc->comment_lengths)_ogg_free(vc->comment_lengths);
+     if(vc->vendor)_ogg_free(vc->vendor);
+   }
+   memset(vc,0,sizeof(*vc));
+ }
+ 
+ /* blocksize 0 is guaranteed to be short, 1 is guarantted to be long.
+    They may be equal, but short will never ge greater than long */
+ int vorbis_info_blocksize(vorbis_info *vi,int zo){
+   codec_setup_info *ci = vi->codec_setup;
+   return ci ? ci->blocksizes[zo] : -1;
+ }
+ 
+ /* used by synthesis, which has a full, alloced vi */
+ void vorbis_info_init(vorbis_info *vi){
+   memset(vi,0,sizeof(*vi));
+   vi->codec_setup=_ogg_calloc(1,sizeof(codec_setup_info));
+ }
+ 
+ void vorbis_info_clear(vorbis_info *vi){
+   codec_setup_info     *ci=vi->codec_setup;
+   int i;
+ 
+   if(ci){
+ 
+     for(i=0;i<ci->modes;i++)
+       if(ci->mode_param[i])_ogg_free(ci->mode_param[i]);
+ 
+     for(i=0;i<ci->maps;i++) /* unpack does the range checking */
+       _mapping_P[ci->map_type[i]]->free_info(ci->map_param[i]);
+ 
+     for(i=0;i<ci->floors;i++) /* unpack does the range checking */
+       _floor_P[ci->floor_type[i]]->free_info(ci->floor_param[i]);
+     
+     for(i=0;i<ci->residues;i++) /* unpack does the range checking */
+       _residue_P[ci->residue_type[i]]->free_info(ci->residue_param[i]);
+ 
+     for(i=0;i<ci->books;i++){
+       if(ci->book_param[i]){
+ 	/* knows if the book was not alloced */
+ 	vorbis_staticbook_destroy(ci->book_param[i]);
+       }
+       if(ci->fullbooks)
+ 	vorbis_book_clear(ci->fullbooks+i);
+     }
+     if(ci->fullbooks)
+ 	_ogg_free(ci->fullbooks);
+     
+     for(i=0;i<ci->psys;i++)
+       _vi_psy_free(ci->psy_param[i]);
+ 
+     _ogg_free(ci);
+   }
+ 
+   memset(vi,0,sizeof(*vi));
+ }
+ 
+ /* Header packing/unpacking ********************************************/
+ 
+ static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
+   codec_setup_info     *ci=vi->codec_setup;
+   if(!ci)return(OV_EFAULT);
+ 
+   vi->version=oggpack_read(opb,32);
+   if(vi->version!=0)return(OV_EVERSION);
+ 
+   vi->channels=oggpack_read(opb,8);
+   vi->rate=oggpack_read(opb,32);
+ 
+   vi->bitrate_upper=oggpack_read(opb,32);
+   vi->bitrate_nominal=oggpack_read(opb,32);
+   vi->bitrate_lower=oggpack_read(opb,32);
+ 
+   ci->blocksizes[0]=1<<oggpack_read(opb,4);
+   ci->blocksizes[1]=1<<oggpack_read(opb,4);
+   
+   if(vi->rate<1)goto err_out;
+   if(vi->channels<1)goto err_out;
+   if(ci->blocksizes[0]<8)goto err_out; 
+   if(ci->blocksizes[1]<ci->blocksizes[0])goto err_out;
+   
+   if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
+ 
+   return(0);
+  err_out:
+   vorbis_info_clear(vi);
+   return(OV_EBADHEADER);
+ }
+ 
+ static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
+   int i;
+   int vendorlen=oggpack_read(opb,32);
+   if(vendorlen<0)goto err_out;
+   vc->vendor=_ogg_calloc(vendorlen+1,1);
+   _v_readstring(opb,vc->vendor,vendorlen);
+   vc->comments=oggpack_read(opb,32);
+   if(vc->comments<0)goto err_out;
+   vc->user_comments=_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments));
+   vc->comment_lengths=_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths));
+ 	    
+   for(i=0;i<vc->comments;i++){
+     int len=oggpack_read(opb,32);
+     if(len<0)goto err_out;
+ 	vc->comment_lengths[i]=len;
+     vc->user_comments[i]=_ogg_calloc(len+1,1);
+     _v_readstring(opb,vc->user_comments[i],len);
+   }	  
+   if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */
+ 
+   return(0);
+  err_out:
+   vorbis_comment_clear(vc);
+   return(OV_EBADHEADER);
+ }
+ 
+ /* all of the real encoding details are here.  The modes, books,
+    everything */
+ static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){
+   codec_setup_info     *ci=vi->codec_setup;
+   int i;
+   if(!ci)return(OV_EFAULT);
+ 
+   /* codebooks */
+   ci->books=oggpack_read(opb,8)+1;
+   /*ci->book_param=_ogg_calloc(ci->books,sizeof(*ci->book_param));*/
+   for(i=0;i<ci->books;i++){
+     ci->book_param[i]=_ogg_calloc(1,sizeof(*ci->book_param[i]));
+     if(vorbis_staticbook_unpack(opb,ci->book_param[i]))goto err_out;
+   }
+ 
+   /* time backend settings; hooks are unused */
+   {
+     int times=oggpack_read(opb,6)+1;
+     for(i=0;i<times;i++){
+       int test=oggpack_read(opb,16);
+       if(test<0 || test>=VI_TIMEB)goto err_out;
+     }
+   }
+ 
+   /* floor backend settings */
+   ci->floors=oggpack_read(opb,6)+1;
+   /*ci->floor_type=_ogg_malloc(ci->floors*sizeof(*ci->floor_type));*/
+   /*ci->floor_param=_ogg_calloc(ci->floors,sizeof(void *));*/
+   for(i=0;i<ci->floors;i++){
+     ci->floor_type[i]=oggpack_read(opb,16);
+     if(ci->floor_type[i]<0 || ci->floor_type[i]>=VI_FLOORB)goto err_out;
+     ci->floor_param[i]=_floor_P[ci->floor_type[i]]->unpack(vi,opb);
+     if(!ci->floor_param[i])goto err_out;
+   }
+ 
+   /* residue backend settings */
+   ci->residues=oggpack_read(opb,6)+1;
+   /*ci->residue_type=_ogg_malloc(ci->residues*sizeof(*ci->residue_type));*/
+   /*ci->residue_param=_ogg_calloc(ci->residues,sizeof(void *));*/
+   for(i=0;i<ci->residues;i++){
+     ci->residue_type[i]=oggpack_read(opb,16);
+     if(ci->residue_type[i]<0 || ci->residue_type[i]>=VI_RESB)goto err_out;
+     ci->residue_param[i]=_residue_P[ci->residue_type[i]]->unpack(vi,opb);
+     if(!ci->residue_param[i])goto err_out;
+   }
+ 
+   /* map backend settings */
+   ci->maps=oggpack_read(opb,6)+1;
+   /*ci->map_type=_ogg_malloc(ci->maps*sizeof(*ci->map_type));*/
+   /*ci->map_param=_ogg_calloc(ci->maps,sizeof(void *));*/
+   for(i=0;i<ci->maps;i++){
+     ci->map_type[i]=oggpack_read(opb,16);
+     if(ci->map_type[i]<0 || ci->map_type[i]>=VI_MAPB)goto err_out;
+     ci->map_param[i]=_mapping_P[ci->map_type[i]]->unpack(vi,opb);
+     if(!ci->map_param[i])goto err_out;
+   }
+   
+   /* mode settings */
+   ci->modes=oggpack_read(opb,6)+1;
+   /*vi->mode_param=_ogg_calloc(vi->modes,sizeof(void *));*/
+   for(i=0;i<ci->modes;i++){
+     ci->mode_param[i]=_ogg_calloc(1,sizeof(*ci->mode_param[i]));
+     ci->mode_param[i]->blockflag=oggpack_read(opb,1);
+     ci->mode_param[i]->windowtype=oggpack_read(opb,16);
+     ci->mode_param[i]->transformtype=oggpack_read(opb,16);
+     ci->mode_param[i]->mapping=oggpack_read(opb,8);
+ 
+     if(ci->mode_param[i]->windowtype>=VI_WINDOWB)goto err_out;
+     if(ci->mode_param[i]->transformtype>=VI_WINDOWB)goto err_out;
+     if(ci->mode_param[i]->mapping>=ci->maps)goto err_out;
+   }
+   
+   if(oggpack_read(opb,1)!=1)goto err_out; /* top level EOP check */
+ 
+   return(0);
+  err_out:
+   vorbis_info_clear(vi);
+   return(OV_EBADHEADER);
+ }
+ 
+ /* The Vorbis header is in three packets; the initial small packet in
+    the first page that identifies basic parameters, a second packet
+    with bitstream comments and a third packet that holds the
+    codebook. */
+ 
+ int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op){
+   oggpack_buffer opb;
+   
+   if(op){
+     oggpack_readinit(&opb,op->packet,op->bytes);
+ 
+     /* Which of the three types of header is this? */
+     /* Also verify header-ness, vorbis */
+     {
+       char buffer[6];
+       int packtype=oggpack_read(&opb,8);
+       memset(buffer,0,6);
+       _v_readstring(&opb,buffer,6);
+       if(memcmp(buffer,"vorbis",6)){
+ 	/* not a vorbis header */
+ 	return(OV_ENOTVORBIS);
+       }
+       switch(packtype){
+       case 0x01: /* least significant *bit* is read first */
+ 	if(!op->b_o_s){
+ 	  /* Not the initial packet */
+ 	  return(OV_EBADHEADER);
+ 	}
+ 	if(vi->rate!=0){
+ 	  /* previously initialized info header */
+ 	  return(OV_EBADHEADER);
+ 	}
+ 
+ 	return(_vorbis_unpack_info(vi,&opb));
+ 
+       case 0x03: /* least significant *bit* is read first */
+ 	if(vi->rate==0){
+ 	  /* um... we didn't get the initial header */
+ 	  return(OV_EBADHEADER);
+ 	}
+ 
+ 	return(_vorbis_unpack_comment(vc,&opb));
+ 
+       case 0x05: /* least significant *bit* is read first */
+ 	if(vi->rate==0 || vc->vendor==NULL){
+ 	  /* um... we didn;t get the initial header or comments yet */
+ 	  return(OV_EBADHEADER);
+ 	}
+ 
+ 	return(_vorbis_unpack_books(vi,&opb));
+ 
+       default:
+ 	/* Not a valid vorbis header type */
+ 	return(OV_EBADHEADER);
+ 	break;
+       }
+     }
+   }
+   return(OV_EBADHEADER);
+ }
+ 
+ /* pack side **********************************************************/
+ 
+ static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){
+   codec_setup_info     *ci=vi->codec_setup;
+   if(!ci)return(OV_EFAULT);
+ 
+   /* preamble */  
+   oggpack_write(opb,0x01,8);
+   _v_writestring(opb,"vorbis", 6);
+ 
+   /* basic information about the stream */
+   oggpack_write(opb,0x00,32);
+   oggpack_write(opb,vi->channels,8);
+   oggpack_write(opb,vi->rate,32);
+ 
+   oggpack_write(opb,vi->bitrate_upper,32);
+   oggpack_write(opb,vi->bitrate_nominal,32);
+   oggpack_write(opb,vi->bitrate_lower,32);
+ 
+   oggpack_write(opb,ilog2(ci->blocksizes[0]),4);
+   oggpack_write(opb,ilog2(ci->blocksizes[1]),4);
+   oggpack_write(opb,1,1);
+ 
+   return(0);
+ }
+ 
+ static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc){
+   char temp[]="Xiph.Org libVorbis I 20030909";
+   int bytes = strlen(temp);
+ 
+   /* preamble */  
+   oggpack_write(opb,0x03,8);
+   _v_writestring(opb,"vorbis", 6);
+ 
+   /* vendor */
+   oggpack_write(opb,bytes,32);
+   _v_writestring(opb,temp, bytes);
+   
+   /* comments */
+ 
+   oggpack_write(opb,vc->comments,32);
+   if(vc->comments){
+     int i;
+     for(i=0;i<vc->comments;i++){
+       if(vc->user_comments[i]){
+ 	oggpack_write(opb,vc->comment_lengths[i],32);
+ 	_v_writestring(opb,vc->user_comments[i], vc->comment_lengths[i]);
+       }else{
+ 	oggpack_write(opb,0,32);
+       }
+     }
+   }
+   oggpack_write(opb,1,1);
+ 
+   return(0);
+ }
+  
+ static int _vorbis_pack_books(oggpack_buffer *opb,vorbis_info *vi){
+   codec_setup_info     *ci=vi->codec_setup;
+   int i;
+   if(!ci)return(OV_EFAULT);
+ 
+   oggpack_write(opb,0x05,8);
+   _v_writestring(opb,"vorbis", 6);
+ 
+   /* books */
+   oggpack_write(opb,ci->books-1,8);
+   for(i=0;i<ci->books;i++)
+     if(vorbis_staticbook_pack(ci->book_param[i],opb))goto err_out;
+ 
+   /* times; hook placeholders */
+   oggpack_write(opb,0,6);
+   oggpack_write(opb,0,16);
+ 
+   /* floors */
+   oggpack_write(opb,ci->floors-1,6);
+   for(i=0;i<ci->floors;i++){
+     oggpack_write(opb,ci->floor_type[i],16);
+     if(_floor_P[ci->floor_type[i]]->pack)
+       _floor_P[ci->floor_type[i]]->pack(ci->floor_param[i],opb);
+     else
+       goto err_out;
+   }
+ 
+   /* residues */
+   oggpack_write(opb,ci->residues-1,6);
+   for(i=0;i<ci->residues;i++){
+     oggpack_write(opb,ci->residue_type[i],16);
+     _residue_P[ci->residue_type[i]]->pack(ci->residue_param[i],opb);
+   }
+ 
+   /* maps */
+   oggpack_write(opb,ci->maps-1,6);
+   for(i=0;i<ci->maps;i++){
+     oggpack_write(opb,ci->map_type[i],16);
+     _mapping_P[ci->map_type[i]]->pack(vi,ci->map_param[i],opb);
+   }
+ 
+   /* modes */
+   oggpack_write(opb,ci->modes-1,6);
+   for(i=0;i<ci->modes;i++){
+     oggpack_write(opb,ci->mode_param[i]->blockflag,1);
+     oggpack_write(opb,ci->mode_param[i]->windowtype,16);
+     oggpack_write(opb,ci->mode_param[i]->transformtype,16);
+     oggpack_write(opb,ci->mode_param[i]->mapping,8);
+   }
+   oggpack_write(opb,1,1);
+ 
+   return(0);
+ err_out:
+   return(-1);
+ } 
+ 
+ int vorbis_commentheader_out(vorbis_comment *vc,
+     				      ogg_packet *op){
+ 
+   oggpack_buffer opb;
+ 
+   oggpack_writeinit(&opb);
+   if(_vorbis_pack_comment(&opb,vc)) return OV_EIMPL;
+ 
+   op->packet = _ogg_malloc(oggpack_bytes(&opb));
+   memcpy(op->packet, opb.buffer, oggpack_bytes(&opb));
+ 
+   op->bytes=oggpack_bytes(&opb);
+   op->b_o_s=0;
+   op->e_o_s=0;
+   op->granulepos=0;
+ 
+   return 0;
+ }
+ 
+ int vorbis_analysis_headerout(vorbis_dsp_state *v,
+ 			      vorbis_comment *vc,
+ 			      ogg_packet *op,
+ 			      ogg_packet *op_comm,
+ 			      ogg_packet *op_code){
+   int ret=OV_EIMPL;
+   vorbis_info *vi=v->vi;
+   oggpack_buffer opb;
+   private_state *b=v->backend_state;
+ 
+   if(!b){
+     ret=OV_EFAULT;
+     goto err_out;
+   }
+ 
+   /* first header packet **********************************************/
+ 
+   oggpack_writeinit(&opb);
+   if(_vorbis_pack_info(&opb,vi))goto err_out;
+ 
+   /* build the packet */
+   if(b->header)_ogg_free(b->header);
+   b->header=_ogg_malloc(oggpack_bytes(&opb));
+   memcpy(b->header,opb.buffer,oggpack_bytes(&opb));
+   op->packet=b->header;
+   op->bytes=oggpack_bytes(&opb);
+   op->b_o_s=1;
+   op->e_o_s=0;
+   op->granulepos=0;
+ 
+   /* second header packet (comments) **********************************/
+ 
+   oggpack_reset(&opb);
+   if(_vorbis_pack_comment(&opb,vc))goto err_out;
+ 
+   if(b->header1)_ogg_free(b->header1);
+   b->header1=_ogg_malloc(oggpack_bytes(&opb));
+   memcpy(b->header1,opb.buffer,oggpack_bytes(&opb));
+   op_comm->packet=b->header1;
+   op_comm->bytes=oggpack_bytes(&opb);
+   op_comm->b_o_s=0;
+   op_comm->e_o_s=0;
+   op_comm->granulepos=0;
+ 
+   /* third header packet (modes/codebooks) ****************************/
+ 
+   oggpack_reset(&opb);
+   if(_vorbis_pack_books(&opb,vi))goto err_out;
+ 
+   if(b->header2)_ogg_free(b->header2);
+   b->header2=_ogg_malloc(oggpack_bytes(&opb));
+   memcpy(b->header2,opb.buffer,oggpack_bytes(&opb));
+   op_code->packet=b->header2;
+   op_code->bytes=oggpack_bytes(&opb);
+   op_code->b_o_s=0;
+   op_code->e_o_s=0;
+   op_code->granulepos=0;
+ 
+   oggpack_writeclear(&opb);
+   return(0);
+  err_out:
+   oggpack_writeclear(&opb);
+   memset(op,0,sizeof(*op));
+   memset(op_comm,0,sizeof(*op_comm));
+   memset(op_code,0,sizeof(*op_code));
+ 
+   if(b->header)_ogg_free(b->header);
+   if(b->header1)_ogg_free(b->header1);
+   if(b->header2)_ogg_free(b->header2);
+   b->header=NULL;
+   b->header1=NULL;
+   b->header2=NULL;
+   return(ret);
+ }
+ 
+ double vorbis_granule_time(vorbis_dsp_state *v,ogg_int64_t granulepos){
+   if(granulepos>=0)
+     return((double)granulepos/v->vi->rate);
+   return(-1);
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2003             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: PCM data vector blocking, windowing and dis/reassembly
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  Handle windowing, overlap-add, etc of the PCM vectors.  This is made
+  more amusing by Vorbis' current two allowed block sizes.
+  
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+   function: LPC low level routines
+   last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_LPC_H_
+ 
+ 
+ /* simple linear scale LPC code */
+ extern float vorbis_lpc_from_data(float *data,float *lpc,int n,int m);
+ 
+ extern void vorbis_lpc_predict(float *coeff,float *prime,int m,
+ 			       float *data,long n);
+ 
+ /* pcm accumulator examples (not exhaustive):
+ 
+  <-------------- lW ---------------->
+                    <--------------- W ---------------->
+ :            .....|.....       _______________         |
+ :        .'''     |     '''_---      |       |\        |
+ :.....'''         |_____--- '''......|       | \_______|
+ :.................|__________________|_______|__|______|
+                   |<------ Sl ------>|      > Sr <     |endW
+                   |beginSl           |endSl  |  |endSr   
+                   |beginW            |endlW  |beginSr
+ 
+ 
+                       |< lW >|       
+                    <--------------- W ---------------->
+                   |   |  ..  ______________            |
+                   |   | '  `/        |     ---_        |
+                   |___.'___/`.       |         ---_____| 
+                   |_______|__|_______|_________________|
+                   |      >|Sl|<      |<------ Sr ----->|endW
+                   |       |  |endSl  |beginSr          |endSr
+                   |beginW |  |endlW                     
+                   mult[0] |beginSl                     mult[n]
+ 
+  <-------------- lW ----------------->
+                           |<--W-->|                               
+ :            ..............  ___  |   |                    
+ :        .'''             |`/   \ |   |                       
+ :.....'''                 |/`....\|...|                    
+ :.........................|___|___|___|                  
+                           |Sl |Sr |endW    
+                           |   |   |endSr
+                           |   |beginSr
+                           |   |endSl
+ 			  |beginSl
+ 			  |beginW
+ */
+ 
+ /* block abstraction setup *********************************************/
+ 
+ #ifndef WORD_ALIGN
+ #define WORD_ALIGN 8
+ #endif
+ 
+ int vorbis_block_init(vorbis_dsp_state *v, vorbis_block *vb){
+   memset(vb,0,sizeof(*vb));
+   vb->vd=v;
+   vb->localalloc=0;
+   vb->localstore=NULL;
+   if(v->analysisp){
+     vorbis_block_internal *vbi=
+       vb->internal=_ogg_calloc(1,sizeof(vorbis_block_internal));
+     oggpack_writeinit(&vb->opb);
+     vbi->ampmax=-9999;
+   }
+   
+   return(0);
+ }
+ 
+ void *_vorbis_block_alloc(vorbis_block *vb,long bytes){
+   bytes=(bytes+(WORD_ALIGN-1)) & ~(WORD_ALIGN-1);
+   if(bytes+vb->localtop>vb->localalloc){
+     /* can't just _ogg_realloc... there are outstanding pointers */
+     if(vb->localstore){
+       struct alloc_chain *link=_ogg_malloc(sizeof(*link));
+       vb->totaluse+=vb->localtop;
+       link->next=vb->reap;
+       link->ptr=vb->localstore;
+       vb->reap=link;
+     }
+     /* highly conservative */
+     vb->localalloc=bytes;
+     vb->localstore=_ogg_malloc(vb->localalloc);
+     vb->localtop=0;
+   }
+   {
+     void *ret=(void *)(((char *)vb->localstore)+vb->localtop);
+     vb->localtop+=bytes;
+     return ret;
+   }
+ }
+ 
+ /* reap the chain, pull the ripcord */
+ void _vorbis_block_ripcord(vorbis_block *vb){
+   /* reap the chain */
+   struct alloc_chain *reap=vb->reap;
+   while(reap){
+     struct alloc_chain *next=reap->next;
+     _ogg_free(reap->ptr);
+     memset(reap,0,sizeof(*reap));
+     _ogg_free(reap);
+     reap=next;
+   }
+   /* consolidate storage */
+   if(vb->totaluse){
+     vb->localstore=_ogg_realloc(vb->localstore,vb->totaluse+vb->localalloc);
+     vb->localalloc+=vb->totaluse;
+     vb->totaluse=0;
+   }
+ 
+   /* pull the ripcord */
+   vb->localtop=0;
+   vb->reap=NULL;
+ }
+ 
+ int vorbis_block_clear(vorbis_block *vb){
+   if(vb->vd)
+     if(vb->vd->analysisp)
+       oggpack_writeclear(&vb->opb);
+   _vorbis_block_ripcord(vb);
+   if(vb->localstore)_ogg_free(vb->localstore);
+ 
+   if(vb->internal)
+     _ogg_free(vb->internal);
+ 
+   memset(vb,0,sizeof(*vb));
+   return(0);
+ }
+ 
+ /* Analysis side code, but directly related to blocking.  Thus it's
+    here and not in analysis.c (which is for analysis transforms only).
+    The init is here because some of it is shared */
+ 
+ static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){
+   int i;
+   codec_setup_info *ci=vi->codec_setup;
+   private_state *b=NULL;
+   int hs;
+ 
+   if(ci==NULL) return 1;
+   hs=ci->halfrate_flag; 
+ 
+   memset(v,0,sizeof(*v));
+   b=v->backend_state=_ogg_calloc(1,sizeof(*b));
+ 
+   v->vi=vi;
+   b->modebits=ilog2(ci->modes);
+ 
+   b->transform[0]=_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[0]));
+   b->transform[1]=_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[1]));
+ 
+   /* MDCT is tranform 0 */
+ 
+   b->transform[0][0]=_ogg_calloc(1,sizeof(mdct_lookup));
+   b->transform[1][0]=_ogg_calloc(1,sizeof(mdct_lookup));
+   mdct_init(b->transform[0][0],ci->blocksizes[0]>>hs);
+   mdct_init(b->transform[1][0],ci->blocksizes[1]>>hs);
+ 
+   /* Vorbis I uses only window type 0 */
+   b->window[0]=ilog2(ci->blocksizes[0])-6;
+   b->window[1]=ilog2(ci->blocksizes[1])-6;
+ 
+   if(encp){ /* encode/decode differ here */
+ 
+     /* analysis always needs an fft */
+     drft_init(&b->fft_look[0],ci->blocksizes[0]);
+     drft_init(&b->fft_look[1],ci->blocksizes[1]);
+ 
+     /* finish the codebooks */
+     if(!ci->fullbooks){
+       ci->fullbooks=_ogg_calloc(ci->books,sizeof(*ci->fullbooks));
+       for(i=0;i<ci->books;i++)
+ 	vorbis_book_init_encode(ci->fullbooks+i,ci->book_param[i]);
+     }
+ 
+     b->psy=_ogg_calloc(ci->psys,sizeof(*b->psy));
+     for(i=0;i<ci->psys;i++){
+       _vp_psy_init(b->psy+i,
+ 		   ci->psy_param[i],
+ 		   &ci->psy_g_param,
+ 		   ci->blocksizes[ci->psy_param[i]->blockflag]/2,
+ 		   vi->rate);
+     }
+ 
+     v->analysisp=1;
+   }else{
+     /* finish the codebooks */
+     if(!ci->fullbooks){
+       ci->fullbooks=_ogg_calloc(ci->books,sizeof(*ci->fullbooks));
+       for(i=0;i<ci->books;i++){
+ 	vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]);
+ 	/* decode codebooks are now standalone after init */
+ 	vorbis_staticbook_destroy(ci->book_param[i]);
+ 	ci->book_param[i]=NULL;
+       }
+     }
+   }
+ 
+   /* initialize the storage vectors. blocksize[1] is small for encode,
+      but the correct size for decode */
+   v->pcm_storage=ci->blocksizes[1];
+   v->pcm=_ogg_malloc(vi->channels*sizeof(*v->pcm));
+   v->pcmret=_ogg_malloc(vi->channels*sizeof(*v->pcmret));
+   {
+     int i;
+     for(i=0;i<vi->channels;i++)
+       v->pcm[i]=_ogg_calloc(v->pcm_storage,sizeof(*v->pcm[i]));
+   }
+ 
+   /* all 1 (large block) or 0 (small block) */
+   /* explicitly set for the sake of clarity */
+   v->lW=0; /* previous window size */
+   v->W=0;  /* current window size */
+ 
+   /* all vector indexes */
+   v->centerW=ci->blocksizes[1]/2;
+ 
+   v->pcm_current=v->centerW;
+ 
+   /* initialize all the backend lookups */
+   b->flr=_ogg_calloc(ci->floors,sizeof(*b->flr));
+   b->residue=_ogg_calloc(ci->residues,sizeof(*b->residue));
+ 
+   for(i=0;i<ci->floors;i++)
+     b->flr[i]=_floor_P[ci->floor_type[i]]->
+       look(v,ci->floor_param[i]);
+ 
+   for(i=0;i<ci->residues;i++)
+     b->residue[i]=_residue_P[ci->residue_type[i]]->
+       look(v,ci->residue_param[i]);    
+ 
+   return 0;
+ }
+ 
+ /* arbitrary settings and spec-mandated numbers get filled in here */
+ int vorbis_analysis_init(vorbis_dsp_state *v,vorbis_info *vi){
+   private_state *b=NULL;
+ 
+   if(_vds_shared_init(v,vi,1))return 1;
+   b=v->backend_state;
+   b->psy_g_look=_vp_global_look(vi);
+ 
+   /* Initialize the envelope state storage */
+   b->ve=_ogg_calloc(1,sizeof(*b->ve));
+   _ve_envelope_init(b->ve,vi);
+ 
+   vorbis_bitrate_init(vi,&b->bms);
+ 
+   return(0);
+ }
+ 
+ void vorbis_dsp_clear(vorbis_dsp_state *v){
+   int i;
+   if(v){
+     vorbis_info *vi=v->vi;
+     codec_setup_info *ci=(vi?vi->codec_setup:NULL);
+     private_state *b=v->backend_state;
+ 
+     if(b){
+ 	
+       if(b->ve){
+ 	_ve_envelope_clear(b->ve);
+ 	_ogg_free(b->ve);
+       }
+ 
+       if(b->transform[0]){
+ 	mdct_clear(b->transform[0][0]);
+ 	_ogg_free(b->transform[0][0]);
+ 	_ogg_free(b->transform[0]);
+       }
+       if(b->transform[1]){
+ 	mdct_clear(b->transform[1][0]);
+ 	_ogg_free(b->transform[1][0]);
+ 	_ogg_free(b->transform[1]);
+       }
+ 
+       if(b->flr){
+ 	for(i=0;i<ci->floors;i++)
+ 	  _floor_P[ci->floor_type[i]]->
+ 	    free_look(b->flr[i]);
+ 	_ogg_free(b->flr);
+       }
+       if(b->residue){
+ 	for(i=0;i<ci->residues;i++)
+ 	  _residue_P[ci->residue_type[i]]->
+ 	    free_look(b->residue[i]);
+ 	_ogg_free(b->residue);
+       }
+       if(b->psy){
+ 	for(i=0;i<ci->psys;i++)
+ 	  _vp_psy_clear(b->psy+i);
+ 	_ogg_free(b->psy);
+       }
+ 
+       if(b->psy_g_look)_vp_global_free(b->psy_g_look);
+       vorbis_bitrate_clear(&b->bms);
+ 
+       drft_clear(&b->fft_look[0]);
+       drft_clear(&b->fft_look[1]);
+ 
+     }
+     
+     if(v->pcm){
+       for(i=0;i<vi->channels;i++)
+ 	if(v->pcm[i])_ogg_free(v->pcm[i]);
+       _ogg_free(v->pcm);
+       if(v->pcmret)_ogg_free(v->pcmret);
+     }
+ 
+     if(b){
+       /* free header, header1, header2 */
+       if(b->header)_ogg_free(b->header);
+       if(b->header1)_ogg_free(b->header1);
+       if(b->header2)_ogg_free(b->header2);
+       _ogg_free(b);
+     }
+     
+     memset(v,0,sizeof(*v));
+   }
+ }
+ 
+ float **vorbis_analysis_buffer(vorbis_dsp_state *v, int vals){
+   int i;
+   vorbis_info *vi=v->vi;
+   private_state *b=v->backend_state;
+ 
+   /* free header, header1, header2 */
+   if(b->header)_ogg_free(b->header);b->header=NULL;
+   if(b->header1)_ogg_free(b->header1);b->header1=NULL;
+   if(b->header2)_ogg_free(b->header2);b->header2=NULL;
+ 
+   /* Do we have enough storage space for the requested buffer? If not,
+      expand the PCM (and envelope) storage */
+     
+   if(v->pcm_current+vals>=v->pcm_storage){
+     v->pcm_storage=v->pcm_current+vals*2;
+    
+     for(i=0;i<vi->channels;i++){
+       v->pcm[i]=_ogg_realloc(v->pcm[i],v->pcm_storage*sizeof(*v->pcm[i]));
+     }
+   }
+ 
+   for(i=0;i<vi->channels;i++)
+     v->pcmret[i]=v->pcm[i]+v->pcm_current;
+     
+   return(v->pcmret);
+ }
+ 
+ static void _preextrapolate_helper(vorbis_dsp_state *v){
+   int i;
+   int order=32;
+   float *lpc=alloca(order*sizeof(*lpc));
+   float *work=alloca(v->pcm_current*sizeof(*work));
+   long j;
+   v->preextrapolate=1;
+ 
+   if(v->pcm_current-v->centerW>order*2){ /* safety */
+     for(i=0;i<v->vi->channels;i++){
+       /* need to run the extrapolation in reverse! */
+       for(j=0;j<v->pcm_current;j++)
+ 	work[j]=v->pcm[i][v->pcm_current-j-1];
+       
+       /* prime as above */
+       vorbis_lpc_from_data(work,lpc,v->pcm_current-v->centerW,order);
+       
+       /* run the predictor filter */
+       vorbis_lpc_predict(lpc,work+v->pcm_current-v->centerW-order,
+ 			 order,
+ 			 work+v->pcm_current-v->centerW,
+ 			 v->centerW);
+ 
+       for(j=0;j<v->pcm_current;j++)
+ 	v->pcm[i][v->pcm_current-j-1]=work[j];
+ 
+     }
+   }
+ }
+ 
+ 
+ /* call with val<=0 to set eof */
+ 
+ int vorbis_analysis_wrote(vorbis_dsp_state *v, int vals){
+   vorbis_info *vi=v->vi;
+   codec_setup_info *ci=vi->codec_setup;
+ 
+   if(vals<=0){
+     int order=32;
+     int i;
+     float *lpc=alloca(order*sizeof(*lpc));
+ 
+     /* if it wasn't done earlier (very short sample) */
+     if(!v->preextrapolate)
+       _preextrapolate_helper(v);
+ 
+     /* We're encoding the end of the stream.  Just make sure we have
+        [at least] a few full blocks of zeroes at the end. */
+     /* actually, we don't want zeroes; that could drop a large
+        amplitude off a cliff, creating spread spectrum noise that will
+        suck to encode.  Extrapolate for the sake of cleanliness. */
+ 
+     vorbis_analysis_buffer(v,ci->blocksizes[1]*3); 
+     v->eofflag=v->pcm_current;
+     v->pcm_current+=ci->blocksizes[1]*3;
+ 
+     for(i=0;i<vi->channels;i++){
+       if(v->eofflag>order*2){
+ 	/* extrapolate with LPC to fill in */
+ 	long n;
+ 
+ 	/* make a predictor filter */
+ 	n=v->eofflag;
+ 	if(n>ci->blocksizes[1])n=ci->blocksizes[1];
+ 	vorbis_lpc_from_data(v->pcm[i]+v->eofflag-n,lpc,n,order);
+ 
+ 	/* run the predictor filter */
+ 	vorbis_lpc_predict(lpc,v->pcm[i]+v->eofflag-order,order,
+ 			   v->pcm[i]+v->eofflag,v->pcm_current-v->eofflag);
+       }else{
+ 	/* not enough data to extrapolate (unlikely to happen due to
+            guarding the overlap, but bulletproof in case that
+            assumtion goes away). zeroes will do. */
+ 	memset(v->pcm[i]+v->eofflag,0,
+ 	       (v->pcm_current-v->eofflag)*sizeof(*v->pcm[i]));
+ 
+       }
+     }
+   }else{
+ 
+     if(v->pcm_current+vals>v->pcm_storage)
+       return(OV_EINVAL);
+ 
+     v->pcm_current+=vals;
+ 
+     /* we may want to reverse extrapolate the beginning of a stream
+        too... in case we're beginning on a cliff! */
+     /* clumsy, but simple.  It only runs once, so simple is good. */
+     if(!v->preextrapolate && v->pcm_current-v->centerW>ci->blocksizes[1])
+       _preextrapolate_helper(v);
+ 
+   }
+   return(0);
+ }
+ 
+ /* do the deltas, envelope shaping, pre-echo and determine the size of
+    the next block on which to continue analysis */
+ int vorbis_analysis_blockout(vorbis_dsp_state *v,vorbis_block *vb){
+   int i;
+   vorbis_info *vi=v->vi;
+   codec_setup_info *ci=vi->codec_setup;
+   private_state *b=v->backend_state;
+   vorbis_look_psy_global *g=b->psy_g_look;
+   long beginW=v->centerW-ci->blocksizes[v->W]/2,centerNext;
+   vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal;
+ 
+   /* check to see if we're started... */
+   if(!v->preextrapolate)return(0);
+ 
+   /* check to see if we're done... */
+   if(v->eofflag==-1)return(0);
+ 
+   /* By our invariant, we have lW, W and centerW set.  Search for
+      the next boundary so we can determine nW (the next window size)
+      which lets us compute the shape of the current block's window */
+ 
+   /* we do an envelope search even on a single blocksize; we may still
+      be throwing more bits at impulses, and envelope search handles
+      marking impulses too. */
+   {  
+     long bp=_ve_envelope_search(v);
+     if(bp==-1){
+ 
+       if(v->eofflag==0)return(0); /* not enough data currently to search for a
+ 				     full long block */
+       v->nW=0;
+     }else{
+ 
+       if(ci->blocksizes[0]==ci->blocksizes[1])
+ 	v->nW=0;
+       else
+ 	v->nW=bp;
+     }
+   }
+ 
+   centerNext=v->centerW+ci->blocksizes[v->W]/4+ci->blocksizes[v->nW]/4;
+ 
+   {
+     /* center of next block + next block maximum right side. */
+ 
+     long blockbound=centerNext+ci->blocksizes[v->nW]/2;
+     if(v->pcm_current<blockbound)return(0); /* not enough data yet;
+                                                although this check is
+                                                less strict that the
+                                                _ve_envelope_search,
+                                                the search is not run
+                                                if we only use one
+                                                block size */
+ 
+ 
+   }
+   
+   /* fill in the block.  Note that for a short window, lW and nW are *short*
+      regardless of actual settings in the stream */
+ 
+   _vorbis_block_ripcord(vb);
+   vb->lW=v->lW;
+   vb->W=v->W;
+   vb->nW=v->nW;
+ 
+   if(v->W){
+     if(!v->lW || !v->nW){
+       vbi->blocktype=BLOCKTYPE_TRANSITION;
+       /*fprintf(stderr,"-");*/
+     }else{
+       vbi->blocktype=BLOCKTYPE_LONG;
+       /*fprintf(stderr,"_");*/
+     }
+   }else{
+     if(_ve_envelope_mark(v)){
+       vbi->blocktype=BLOCKTYPE_IMPULSE;
+       /*fprintf(stderr,"|");*/
+ 
+     }else{
+       vbi->blocktype=BLOCKTYPE_PADDING;
+       /*fprintf(stderr,".");*/
+ 
+     }
+   }
+  
+   vb->vd=v;
+   vb->sequence=v->sequence++;
+   vb->granulepos=v->granulepos;
+   vb->pcmend=ci->blocksizes[v->W];
+   
+   /* copy the vectors; this uses the local storage in vb */
+ 
+   /* this tracks 'strongest peak' for later psychoacoustics */
+   /* moved to the global psy state; clean this mess up */
+   if(vbi->ampmax>g->ampmax)g->ampmax=vbi->ampmax;
+   g->ampmax=_vp_ampmax_decay(g->ampmax,v);
+   vbi->ampmax=g->ampmax;
+   
+   vb->pcm=_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);
+   vbi->pcmdelay=_vorbis_block_alloc(vb,sizeof(*vbi->pcmdelay)*vi->channels);
+   for(i=0;i<vi->channels;i++){
+     vbi->pcmdelay[i]=
+       _vorbis_block_alloc(vb,(vb->pcmend+beginW)*sizeof(*vbi->pcmdelay[i]));
+     memcpy(vbi->pcmdelay[i],v->pcm[i],(vb->pcmend+beginW)*sizeof(*vbi->pcmdelay[i]));
+     vb->pcm[i]=vbi->pcmdelay[i]+beginW;
+     
+     /* before we added the delay 
+        vb->pcm[i]=_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));
+        memcpy(vb->pcm[i],v->pcm[i]+beginW,ci->blocksizes[v->W]*sizeof(*vb->pcm[i]));
+     */
+     
+   }
+   
+   /* handle eof detection: eof==0 means that we've not yet received EOF
+                            eof>0  marks the last 'real' sample in pcm[]
+                            eof<0  'no more to do'; doesn't get here */
+ 
+   if(v->eofflag){
+     if(v->centerW>=v->eofflag){
+       v->eofflag=-1;
+       vb->eofflag=1;
+       return(1);
+     }
+   }
+ 
+   /* advance storage vectors and clean up */
+   {
+     int new_centerNext=ci->blocksizes[1]/2;
+     int movementW=centerNext-new_centerNext;
+ 
+     if(movementW>0){
+ 
+       _ve_envelope_shift(b->ve,movementW);
+       v->pcm_current-=movementW;
+       
+       for(i=0;i<vi->channels;i++)
+ 	memmove(v->pcm[i],v->pcm[i]+movementW,
+ 		v->pcm_current*sizeof(*v->pcm[i]));
+       
+       
+       v->lW=v->W;
+       v->W=v->nW;
+       v->centerW=new_centerNext;
+       
+       if(v->eofflag){
+ 	v->eofflag-=movementW;
+ 	if(v->eofflag<=0)v->eofflag=-1;
+ 	/* do not add padding to end of stream! */
+ 	if(v->centerW>=v->eofflag){
+ 	  v->granulepos+=movementW-(v->centerW-v->eofflag);
+ 	}else{
+ 	  v->granulepos+=movementW;
+ 	}
+       }else{
+ 	v->granulepos+=movementW;
+       }
+     }
+   }
+ 
+   /* done */
+   return(1);
+ }
+ 
+ int vorbis_synthesis_restart(vorbis_dsp_state *v){
+   vorbis_info *vi=v->vi;
+   codec_setup_info *ci;
+   int hs;
+ 
+   if(!v->backend_state)return -1;
+   if(!vi)return -1;
+   ci=vi->codec_setup;
+   if(!ci)return -1;
+   hs=ci->halfrate_flag; 
+ 
+   v->centerW=ci->blocksizes[1]>>(hs+1);
+   v->pcm_current=v->centerW>>hs;
+   
+   v->pcm_returned=-1;
+   v->granulepos=-1;
+   v->sequence=-1;
+   v->eofflag=0;
+   ((private_state *)(v->backend_state))->sample_count=-1;
+ 
+   return(0);
+ }
+ 
+ int vorbis_synthesis_init(vorbis_dsp_state *v,vorbis_info *vi){
+   if(_vds_shared_init(v,vi,0)) return 1;
+   vorbis_synthesis_restart(v);
+ 
+   return 0;
+ }
+ 
+ /* Unlike in analysis, the window is only partially applied for each
+    block.  The time domain envelope is not yet handled at the point of
+    calling (as it relies on the previous block). */
+ 
+ int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
+   vorbis_info *vi=v->vi;
+   codec_setup_info *ci=vi->codec_setup;
+   private_state *b=v->backend_state;
+   int hs=ci->halfrate_flag; 
+   int i,j;
+ 
+   if(!vb)return(OV_EINVAL);
+   if(v->pcm_current>v->pcm_returned  && v->pcm_returned!=-1)return(OV_EINVAL);
+     
+   v->lW=v->W;
+   v->W=vb->W;
+   v->nW=-1;
+   
+   if((v->sequence==-1)||
+      (v->sequence+1 != vb->sequence)){
+     v->granulepos=-1; /* out of sequence; lose count */
+     b->sample_count=-1;
+   }
+ 
+   v->sequence=vb->sequence;
+   
+   if(vb->pcm){  /* no pcm to process if vorbis_synthesis_trackonly 
+ 		   was called on block */
+     int n=ci->blocksizes[v->W]>>(hs+1);
+     int n0=ci->blocksizes[0]>>(hs+1);
+     int n1=ci->blocksizes[1]>>(hs+1);
+ 
+     int thisCenter;
+     int prevCenter;
+     
+     v->glue_bits+=vb->glue_bits;
+     v->time_bits+=vb->time_bits;
+     v->floor_bits+=vb->floor_bits;
+     v->res_bits+=vb->res_bits;
+     
+     if(v->centerW){
+       thisCenter=n1;
+       prevCenter=0;
+     }else{
+       thisCenter=0;
+       prevCenter=n1;
+     }
+     
+     /* v->pcm is now used like a two-stage double buffer.  We don't want
+        to have to constantly shift *or* adjust memory usage.  Don't
+        accept a new block until the old is shifted out */
+     
+     for(j=0;j<vi->channels;j++){
+       /* the overlap/add section */
+       if(v->lW){
+ 	if(v->W){
+ 	  /* large/large */
+ 	  float *w=_vorbis_window_get(b->window[1]-hs);
+ 	  float *pcm=v->pcm[j]+prevCenter;
+ 	  float *p=vb->pcm[j];
+ 	  for(i=0;i<n1;i++)
+ 	    pcm[i]=pcm[i]*w[n1-i-1] + p[i]*w[i];
+ 	}else{
+ 	  /* large/small */
+ 	  float *w=_vorbis_window_get(b->window[0]-hs);
+ 	  float *pcm=v->pcm[j]+prevCenter+n1/2-n0/2;
+ 	  float *p=vb->pcm[j];
+ 	  for(i=0;i<n0;i++)
+ 	    pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
+ 	}
+       }else{
+ 	if(v->W){
+ 	  /* small/large */
+ 	  float *w=_vorbis_window_get(b->window[0]-hs);
+ 	  float *pcm=v->pcm[j]+prevCenter;
+ 	  float *p=vb->pcm[j]+n1/2-n0/2;
+ 	  for(i=0;i<n0;i++)
+ 	    pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
+ 	  for(;i<n1/2+n0/2;i++)
+ 	    pcm[i]=p[i];
+ 	}else{
+ 	  /* small/small */
+ 	  float *w=_vorbis_window_get(b->window[0]-hs);
+ 	  float *pcm=v->pcm[j]+prevCenter;
+ 	  float *p=vb->pcm[j];
+ 	  for(i=0;i<n0;i++)
+ 	    pcm[i]=pcm[i]*w[n0-i-1] +p[i]*w[i];
+ 	}
+       }
+       
+       /* the copy section */
+       {
+ 	float *pcm=v->pcm[j]+thisCenter;
+ 	float *p=vb->pcm[j]+n;
+ 	for(i=0;i<n;i++)
+ 	  pcm[i]=p[i];
+       }
+     }
+     
+     if(v->centerW)
+       v->centerW=0;
+     else
+       v->centerW=n1;
+     
+     /* deal with initial packet state; we do this using the explicit
+        pcm_returned==-1 flag otherwise we're sensitive to first block
+        being short or long */
+     
+     if(v->pcm_returned==-1){
+       v->pcm_returned=thisCenter;
+       v->pcm_current=thisCenter;
+     }else{
+       v->pcm_returned=prevCenter;
+       v->pcm_current=prevCenter+
+ 	((ci->blocksizes[v->lW]/4+
+ 	ci->blocksizes[v->W]/4)>>hs);
+     }
+     
+   }
+ 
+   /* track the frame number... This is for convenience, but also
+      making sure our last packet doesn't end with added padding.  If
+      the last packet is partial, the number of samples we'll have to
+      return will be past the vb->granulepos.
+      
+      This is not foolproof!  It will be confused if we begin
+      decoding at the last page after a seek or hole.  In that case,
+      we don't have a starting point to judge where the last frame
+      is.  For this reason, vorbisfile will always try to make sure
+      it reads the last two marked pages in proper sequence */
+ 
+   if(b->sample_count==-1){
+     b->sample_count=0;
+   }else{
+     b->sample_count+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
+   }
+   
+   if(v->granulepos==-1){
+     if(vb->granulepos!=-1){ /* only set if we have a position to set to */
+ 
+       v->granulepos=vb->granulepos;
+ 
+       /* is this a short page? */
+       if(b->sample_count>v->granulepos){
+ 	/* corner case; if this is both the first and last audio page,
+ 	   then spec says the end is cut, not beginning */
+ 	if(vb->eofflag){
+ 	  /* trim the end */
+ 	  /* no preceeding granulepos; assume we started at zero (we'd
+ 	     have to in a short single-page stream) */
+ 	  /* granulepos could be -1 due to a seek, but that would result
+ 	     in a long count, not short count */
+ 	  
+ 	  v->pcm_current-=(b->sample_count-v->granulepos)>>hs;
+ 	}else{
+ 	  /* trim the beginning */
+ 	  v->pcm_returned+=(b->sample_count-v->granulepos)>>hs;
+ 	  if(v->pcm_returned>v->pcm_current)
+ 	    v->pcm_returned=v->pcm_current;
+ 	}
+ 
+       }
+ 
+     }
+   }else{
+     v->granulepos+=ci->blocksizes[v->lW]/4+ci->blocksizes[v->W]/4;
+     if(vb->granulepos!=-1 && v->granulepos!=vb->granulepos){
+       
+       if(v->granulepos>vb->granulepos){
+ 	long extra=v->granulepos-vb->granulepos;
+ 
+ 	if(extra)
+ 	  if(vb->eofflag){
+ 	    /* partial last frame.  Strip the extra samples off */
+ 	    v->pcm_current-=extra>>hs;
+ 	  } /* else {Shouldn't happen *unless* the bitstream is out of
+ 	       spec.  Either way, believe the bitstream } */
+       } /* else {Shouldn't happen *unless* the bitstream is out of
+ 	   spec.  Either way, believe the bitstream } */
+       v->granulepos=vb->granulepos;
+     }
+   }
+   
+   /* Update, cleanup */
+   
+   if(vb->eofflag)v->eofflag=1;
+   return(0);
+   
+ }
+ 
+ /* pcm==NULL indicates we just want the pending samples, no more */
+ int vorbis_synthesis_pcmout(vorbis_dsp_state *v,float ***pcm){
+   vorbis_info *vi=v->vi;
+ 
+   if(v->pcm_returned>-1 && v->pcm_returned<v->pcm_current){
+     if(pcm){
+       int i;
+       for(i=0;i<vi->channels;i++)
+ 	v->pcmret[i]=v->pcm[i]+v->pcm_returned;
+       *pcm=v->pcmret;
+     }
+     return(v->pcm_current-v->pcm_returned);
+   }
+   return(0);
+ }
+ 
+ int vorbis_synthesis_read(vorbis_dsp_state *v,int n){
+   if(n && v->pcm_returned+n>v->pcm_current)return(OV_EINVAL);
+   v->pcm_returned+=n;
+   return(0);
+ }
+ 
+ /* intended for use with a specific vorbisfile feature; we want access
+    to the [usually synthetic/postextrapolated] buffer and lapping at
+    the end of a decode cycle, specifically, a half-short-block worth.
+    This funtion works like pcmout above, except it will also expose
+    this implicit buffer data not normally decoded. */
+ int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm){
+   vorbis_info *vi=v->vi;
+   codec_setup_info *ci=vi->codec_setup;
+   int hs=ci->halfrate_flag; 
+   
+   int n=ci->blocksizes[v->W]>>(hs+1);
+   int n0=ci->blocksizes[0]>>(hs+1);
+   int n1=ci->blocksizes[1]>>(hs+1);
+   int i,j;
+ 
+   if(v->pcm_returned<0)return 0;
+ 
+   /* our returned data ends at pcm_returned; because the synthesis pcm
+      buffer is a two-fragment ring, that means our data block may be
+      fragmented by buffering, wrapping or a short block not filling
+      out a buffer.  To simplify things, we unfragment if it's at all
+      possibly needed. Otherwise, we'd need to call lapout more than
+      once as well as hold additional dsp state.  Opt for
+      simplicity. */
+ 
+   /* centerW was advanced by blockin; it would be the center of the
+      *next* block */
+   if(v->centerW==n1){
+     /* the data buffer wraps; swap the halves */
+     /* slow, sure, small */
+     for(j=0;j<vi->channels;j++){
+       float *p=v->pcm[j];
+       for(i=0;i<n1;i++){
+ 	float temp=p[i];
+ 	p[i]=p[i+n1];
+ 	p[i+n1]=temp;
+       }
+     }
+ 
+     v->pcm_current-=n1;
+     v->pcm_returned-=n1;
+     v->centerW=0;
+   }
+   
+   /* solidify buffer into contiguous space */
+   if((v->lW^v->W)==1){
+     /* long/short or short/long */
+     for(j=0;j<vi->channels;j++){
+       float *s=v->pcm[j];
+       float *d=v->pcm[j]+(n1-n0)/2;
+       for(i=(n1+n0)/2-1;i>=0;--i)
+ 	d[i]=s[i];
+     }
+     v->pcm_returned+=(n1-n0)/2;
+     v->pcm_current+=(n1-n0)/2;
+   }else{
+     if(v->lW==0){
+       /* short/short */
+       for(j=0;j<vi->channels;j++){
+ 	float *s=v->pcm[j];
+ 	float *d=v->pcm[j]+n1-n0;
+ 	for(i=n0-1;i>=0;--i)
+ 	  d[i]=s[i];
+       }
+       v->pcm_returned+=n1-n0;
+       v->pcm_current+=n1-n0;
+     }
+   }
+     
+   if(pcm){
+     int i;
+     for(i=0;i<vi->channels;i++)
+       v->pcmret[i]=v->pcm[i]+v->pcm_returned;
+     *pcm=v->pcmret;
+   }
+ 
+   return(n1+n-v->pcm_returned);
+ 
+ }
+ 
+ float *vorbis_window(vorbis_dsp_state *v,int W){
+   vorbis_info *vi=v->vi;
+   codec_setup_info *ci=vi->codec_setup;
+   int hs=ci->halfrate_flag; 
+   private_state *b=v->backend_state;
+ 
+   if(b->window[W]-1<0)return NULL;
+   return _vorbis_window_get(b->window[W]-hs);
+ }
+ 	
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: single-block PCM analysis mode dispatch
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: linear scale -> dB, Bark and Mel scales
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_SCALES_H_
+ 
+ /* 20log10(x) */
+ #define VORBIS_IEEE_FLOAT32 1
+ #ifdef VORBIS_IEEE_FLOAT32
+ 
+ static float unitnorm(float x){
+   ogg_uint32_t *ix=(ogg_uint32_t *)&x;
+   *ix=(*ix&0x80000000UL)|(0x3f800000UL);
+   return(x);
+ }
+ 
+ float FABS(float *x){
+   ogg_uint32_t *ix=(ogg_uint32_t *)x;
+   *ix&=0x7fffffffUL;
+   return(*x);
+ }
+ 
+ static float todB(const float *x){
+   float calc;
+   ogg_int32_t *i=(ogg_int32_t *)x;
+   calc = ((*i) & 0x7fffffff);
+   calc *= 7.1771144e-7f;
+   calc += -764.27118f;
+   return calc;
+ }
+ 
+ #define todB_nn(x) todB(x)
+ 
+ #else
+ 
+ static float unitnorm(float x){
+   if(x<0)return(-1.f);
+   return(1.f);
+ }
+ 
+ #define FABS(x) fabs(*(x))
+ 
+ #define todB(x)   (*(x)==0?-400.f:log(*(x)**(x))*4.34294480f)
+ #define todB_nn(x)   (*(x)==0.f?-400.f:log(*(x))*8.6858896f)
+ 
+ #endif 
+ 
+ #define fromdB(x) (exp((x)*.11512925f))  
+ 
+ /* The bark scale equations are approximations, since the original
+    table was somewhat hand rolled.  The below are chosen to have the
+    best possible fit to the rolled tables, thus their somewhat odd
+    appearance (these are more accurate and over a longer range than
+    the oft-quoted bark equations found in the texts I have).  The
+    approximations are valid from 0 - 30kHz (nyquist) or so.
+ 
+    all f in Hz, z in Bark */
+ 
+ #define toBARK(n)   (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n))
+ #define fromBARK(z) (102.f*(z)-2.f*pow(z,2.f)+.4f*pow(z,3.f)+pow(1.46f,z)-1.f)
+ #define toMEL(n)    (log(1.f+(n)*.001f)*1442.695f)
+ #define fromMEL(m)  (1000.f*exp((m)/1442.695f)-1000.f)
+ 
+ /* Frequency to octave.  We arbitrarily declare 63.5 Hz to be octave
+    0.0 */
+ 
+ #define toOC(n)     (log(n)*1.442695f-5.965784f)
+ #define fromOC(o)   (exp(((o)+5.965784f)*.693147f))
+ 
+ int analysis_noisy=1;
+ 
+ /* decides between modes, dispatches to the appropriate mapping. */
+ int vorbis_analysis(vorbis_block *vb, ogg_packet *op){
+   int                   ret;
+ 
+   vb->glue_bits=0;
+   vb->time_bits=0;
+   vb->floor_bits=0;
+   vb->res_bits=0;
+ 
+   /* first things first.  Make sure encode is ready */
+   oggpack_reset(&vb->opb);
+   
+   /* we only have one mapping type (0), and we let the mapping code
+      itself figure out what soft mode to use.  This allows easier
+      bitrate management */
+ 
+   if((ret=_mapping_P[0]->forward(vb)))
+     return(ret);
+ 
+   if(op){
+     if(vorbis_bitrate_managed(vb))
+       /* The app is using a bitmanaged mode... but not using the
+          bitrate management interface. */
+       return(OV_EINVAL);
+     
+     op->packet=oggpack_get_buffer(&vb->opb);
+     op->bytes=oggpack_bytes(&vb->opb);
+     op->b_o_s=0;
+     op->e_o_s=vb->eofflag;
+     op->granulepos=vb->granulepos;
+     op->packetno=vb->sequence; /* for sake of completeness */
+   }
+   return(0);
+ }
+ 
+ /* there was no great place to put this.... */
+ void _analysis_output_always(char *base,int i,float *v,int n,int bark,int dB,ogg_int64_t off){
+   int j;
+   FILE *of;
+   char buffer[80];
+ 
+   /*  if(i==5870){*/
+     sprintf(buffer,"%s_%d.m",base,i);
+     of=fopen(buffer,"w");
+     
+     if(!of)perror("failed to open data dump file");
+     
+     for(j=0;j<n;j++){
+       if(bark){
+ 	float b=toBARK((4000.f*j/n)+.25);
+ 	fprintf(of,"%f ",b);
+       }else
+ 	if(off!=0)
+ 	  fprintf(of,"%f ",(double)(j+off)/8000.);
+ 	else
+ 	  fprintf(of,"%f ",(double)j);
+       
+       if(dB){
+ 	float val;
+ 	if(v[j]==0.)
+ 	  val=-140.;
+ 	else
+ 	  val=todB(v+j);
+ 	fprintf(of,"%f\n",val);
+       }else{
+ 	fprintf(of,"%f\n",v[j]);
+       }
+     }
+     fclose(of);
+     /*  } */
+ }
+ 
+ void _analysis_output(char *base,int i,float *v,int n,int bark,int dB,
+ 		      ogg_int64_t off){
+   if(analysis_noisy)_analysis_output_always(base,i,v,n,bark,dB,off);
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: bitrate tracking and management
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ static long BINBYTES(bitrate_manager_state *bm,long pos,long bin){
+   int bins=bm->queue_bins;
+   return(bm->queue_binned[pos*bins+bin]);
+ }
+ 
+ #define LIMITBYTES(pos,bin) (bm->minmax_binstack[(pos)*bins*2+((bin)+bins)])
+ 
+ static long LACING_ADJUST(long bytes){
+   int addto=bytes/255+1;
+   return(bytes+addto);
+ }
+ 
+ static int floater_interpolate(bitrate_manager_state *bm,vorbis_info *vi,
+ 				  double desired_rate){
+   int bin=rint(bm->avgfloat);
+   double lobitrate,hibitrate;
+ 
+ 
+   lobitrate=(double)(bm->avg_binacc[bin]*8)/bm->avg_sampleacc*vi->rate;
+   while(lobitrate>desired_rate && bin>0){
+     bin--;
+     lobitrate=(double)(bm->avg_binacc[bin]*8)/bm->avg_sampleacc*vi->rate;
+   }
+ 
+   if(bin+1<bm->queue_bins){
+     hibitrate=(double)(bm->avg_binacc[bin+1]*8)/bm->avg_sampleacc*vi->rate;
+     if(fabs(hibitrate-desired_rate) < fabs(lobitrate-desired_rate))bin++;
+   }
+   return(bin);
+ }
+ 
+ /* try out a new limit */
+ static long limit_sum(bitrate_manager_state *bm,int limit){
+   int i=bm->minmax_stackptr;
+   long acc=bm->minmax_acctotal;
+   long bins=bm->queue_bins;
+   
+   acc-=LIMITBYTES(i,0);
+   acc+=LIMITBYTES(i,limit);
+ 
+   while(i-->0){
+     if(bm->minmax_limitstack[i]<=limit)break;
+     acc-=LIMITBYTES(i,bm->minmax_limitstack[i]);
+     acc+=LIMITBYTES(i,limit);
+   }
+   return(acc);
+ }
+ 
+ /* compute bitrate tracking setup, allocate circular packet size queue */
+ void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bm){
+   int i;
+   codec_setup_info *ci=vi->codec_setup;
+   bitrate_manager_info *bi=&ci->bi;
+   long maxlatency;
+ 
+   memset(bm,0,sizeof(*bm));
+   
+   if(bi){
+     
+     bm->avg_sampledesired=bi->queue_avg_time*vi->rate;
+     bm->avg_centerdesired=bi->queue_avg_time*vi->rate*bi->queue_avg_center;
+     bm->minmax_sampledesired=bi->queue_minmax_time*vi->rate;
+     
+     /* first find the max possible needed queue size */
+     maxlatency=max(bm->avg_sampledesired-bm->avg_centerdesired,
+ 		   bm->minmax_sampledesired)+bm->avg_centerdesired;
+     
+     if(maxlatency>0 &&
+        (bi->queue_avgmin>0 || bi->queue_avgmax>0 || bi->queue_hardmax>0 ||
+ 	bi->queue_hardmin>0)){
+       long maxpackets=maxlatency/(ci->blocksizes[0]>>1)+3;
+       long bins=PACKETBLOBS;
+       
+       bm->queue_size=maxpackets;
+       bm->queue_bins=bins;
+       bm->queue_binned=_ogg_calloc(maxpackets,bins*sizeof(*bm->queue_binned));
+       bm->queue_actual=_ogg_calloc(maxpackets,sizeof(*bm->queue_actual));
+       
+       if((bi->queue_avgmin>0 || bi->queue_avgmax>0) &&
+ 	 bi->queue_avg_time>0){
+ 	
+ 	bm->avg_binacc=_ogg_calloc(bins,sizeof(*bm->avg_binacc));
+ 	bm->avgfloat=PACKETBLOBS/2;
+ 	
+       }else{
+ 	bm->avg_tail= -1;
+       }
+       
+       if((bi->queue_hardmin>0 || bi->queue_hardmax>0) &&
+ 	 bi->queue_minmax_time>0){
+ 	
+ 	bm->minmax_binstack=_ogg_calloc((bins*2+1)*bins*2,
+ 					sizeof(*bm->minmax_binstack));
+ 	bm->minmax_posstack=_ogg_calloc((bins*2+1),
+ 				      sizeof(*bm->minmax_posstack));
+ 	bm->minmax_limitstack=_ogg_calloc((bins*2+1),
+ 					  sizeof(*bm->minmax_limitstack));
+       }else{
+ 	bm->minmax_tail= -1;
+       }
+       
+       /* space for the packet queueing */
+       bm->packetbuffers=_ogg_calloc(maxpackets,sizeof(*bm->packetbuffers));
+       bm->packets=_ogg_calloc(maxpackets,sizeof(*bm->packets));
+       for(i=0;i<maxpackets;i++)
+ 	oggpack_writeinit(bm->packetbuffers+i);
+       
+     }else{
+       bm->packetbuffers=_ogg_calloc(1,sizeof(*bm->packetbuffers));
+       bm->packets=_ogg_calloc(1,sizeof(*bm->packets));
+       oggpack_writeinit(bm->packetbuffers);
+ 
+     }      
+   }
+ }
+ 
+ void vorbis_bitrate_clear(bitrate_manager_state *bm){
+   int i;
+   if(bm){
+     if(bm->queue_binned)_ogg_free(bm->queue_binned);
+     if(bm->queue_actual)_ogg_free(bm->queue_actual);
+     if(bm->avg_binacc)_ogg_free(bm->avg_binacc);
+     if(bm->minmax_binstack)_ogg_free(bm->minmax_binstack);
+     if(bm->minmax_posstack)_ogg_free(bm->minmax_posstack);
+     if(bm->minmax_limitstack)_ogg_free(bm->minmax_limitstack);
+ 
+     if(bm->packetbuffers){
+       if(bm->queue_size==0){
+ 	oggpack_writeclear(bm->packetbuffers);
+       }else{
+ 	for(i=0;i<bm->queue_size;i++)
+ 	  oggpack_writeclear(bm->packetbuffers+i);	
+       }
+       _ogg_free(bm->packetbuffers);
+     }
+     if(bm->packets)_ogg_free(bm->packets);
+     
+     memset(bm,0,sizeof(*bm));
+   }
+ }
+ 
+ int vorbis_bitrate_managed(vorbis_block *vb){
+   vorbis_dsp_state      *vd=vb->vd;
+   private_state         *b=vd->backend_state; 
+   bitrate_manager_state *bm=&b->bms;
+ 
+   if(bm->queue_binned)return(1);
+   return(0);
+ }
+ 
+ /* finish taking in the block we just processed */
+ int vorbis_bitrate_addblock(vorbis_block *vb){
+   int i; 
+   vorbis_block_internal *vbi=vb->internal;
+   vorbis_dsp_state      *vd=vb->vd;
+   private_state         *b=vd->backend_state; 
+   bitrate_manager_state *bm=&b->bms;
+   vorbis_info           *vi=vd->vi;
+   codec_setup_info      *ci=vi->codec_setup;
+   bitrate_manager_info  *bi=&ci->bi;
+   int                    eofflag=vb->eofflag;
+   int                    head=bm->queue_head;
+   int                    next_head=head+1;
+   int                    bins=bm->queue_bins;
+   int                    minmax_head,new_minmax_head;
+   
+   ogg_uint32_t           *head_ptr;
+   oggpack_buffer          temp;
+ 
+   if(!bm->queue_binned){
+     oggpack_buffer temp;
+     /* not a bitrate managed stream, but for API simplicity, we'll
+        buffer one packet to keep the code path clean */
+     
+     if(bm->queue_head)return(-1); /* one has been submitted without
+                                      being claimed */
+     bm->queue_head++;
+ 
+     bm->packets[0].packet=oggpack_get_buffer(&vb->opb);
+     bm->packets[0].bytes=oggpack_bytes(&vb->opb);
+     bm->packets[0].b_o_s=0;
+     bm->packets[0].e_o_s=vb->eofflag;
+     bm->packets[0].granulepos=vb->granulepos;
+     bm->packets[0].packetno=vb->sequence; /* for sake of completeness */
+ 
+     memcpy(&temp,bm->packetbuffers,sizeof(vb->opb));
+     memcpy(bm->packetbuffers,&vb->opb,sizeof(vb->opb));
+     memcpy(&vb->opb,&temp,sizeof(vb->opb));
+ 
+     return(0);
+   }
+ 
+   /* add encoded packet to head */
+   if(next_head>=bm->queue_size)next_head=0;
+   head_ptr=bm->queue_binned+bins*head;
+ 
+   /* is there room to add a block? In proper use of the API, this will
+      never come up... but guard it anyway */
+   if(next_head==bm->avg_tail || next_head==bm->minmax_tail)return(-1);
+ 
+   /* add the block to the toplevel queue */
+   bm->queue_head=next_head;
+   bm->queue_actual[head]=(vb->W?0x80000000UL:0);
+ 
+   /* buffer packet fields */
+   bm->packets[head].packet=oggpack_get_buffer(&vb->opb);
+   bm->packets[head].bytes=oggpack_bytes(&vb->opb);
+   bm->packets[head].b_o_s=0;
+   bm->packets[head].e_o_s=vb->eofflag;
+   bm->packets[head].granulepos=vb->granulepos;
+   bm->packets[head].packetno=vb->sequence; /* for sake of completeness */
+ 
+   /* swap packet buffers */
+   memcpy(&temp,bm->packetbuffers+head,sizeof(vb->opb));
+   memcpy(bm->packetbuffers+head,&vb->opb,sizeof(vb->opb));
+   memcpy(&vb->opb,&temp,sizeof(vb->opb));
+ 
+   /* save markers */
+   head_ptr[0]=vbi->packetblob_markers[0];
+   for(i=1;i<PACKETBLOBS;i++){
+     head_ptr[i]=vbi->packetblob_markers[i]-vbi->packetblob_markers[i-1];
+   }
+ 
+   if(bm->avg_binacc)
+     new_minmax_head=minmax_head=bm->avg_center;
+   else
+     new_minmax_head=minmax_head=head;
+ 
+   /* the average tracking queue is updated first; its results (if it's
+      in use) are taken into account by the min/max limiter (if min/max
+      is in use) */
+   if(bm->avg_binacc){
+     unsigned long desired_center=bm->avg_centerdesired;
+     if(eofflag)desired_center=0;
+ 
+     /* update the avg head */
+     for(i=0;i<bins;i++)
+       bm->avg_binacc[i]+=LACING_ADJUST(head_ptr[i]);
+     bm->avg_sampleacc+=ci->blocksizes[vb->W]>>1;
+     bm->avg_centeracc+=ci->blocksizes[vb->W]>>1;
+ 
+     if(bm->avg_sampleacc>bm->avg_sampledesired || eofflag){
+ 
+       /* update the avg center */
+       if(bm->avg_centeracc>desired_center){
+ 	/* choose the new average floater */
+ 	int samples=ci->blocksizes[vb->W]>>1;
+ 	double upper=floater_interpolate(bm,vi,bi->queue_avgmax);
+ 	double lower=floater_interpolate(bm,vi,bi->queue_avgmin);
+ 	double new=PACKETBLOBS/2.,slew;
+ 	int bin;
+ 	
+ 	if(upper<new)new=upper;
+ 	if(lower>new)new=lower;
+ 	
+ 	slew=(new-bm->avgfloat)/samples*vi->rate;
+ 	
+ 	if(slew<bi->avgfloat_downslew_max)
+ 	  new=bm->avgfloat+bi->avgfloat_downslew_max/vi->rate*samples;
+ 	if(slew>bi->avgfloat_upslew_max)
+ 	  new=bm->avgfloat+bi->avgfloat_upslew_max/vi->rate*samples;
+ 	
+ 	bm->avgfloat=new;
+ 	/* apply the average floater to new blocks */
+ 	bin=rint(bm->avgfloat);
+ 
+ 	/*fprintf(stderr,"%d ",bin);*/
+ 	
+ 	while(bm->avg_centeracc>desired_center){
+ 	  samples=ci->blocksizes[bm->queue_actual[bm->avg_center]&
+ 				0x80000000UL?1:0]>>1;
+ 	  
+ 	  bm->queue_actual[bm->avg_center]|=bin;
+ 	  
+ 	  bm->avg_centeracc-=samples;
+ 	  bm->avg_center++;
+ 	  if(bm->avg_center>=bm->queue_size)bm->avg_center=0;
+ 	}
+ 	new_minmax_head=bm->avg_center;
+ 	
+       }
+       
+       /* update the avg tail if needed */
+       while(bm->avg_sampleacc>bm->avg_sampledesired){
+ 	int samples=
+ 	  ci->blocksizes[bm->queue_actual[bm->avg_tail]&0x80000000UL?1:0]>>1;
+ 	for(i=0;i<bm->queue_bins;i++)
+ 	  bm->avg_binacc[i]-=LACING_ADJUST(bm->queue_binned[bins*bm->avg_tail+i]);
+ 	bm->avg_sampleacc-=samples;
+ 	bm->avg_tail++;
+ 	if(bm->avg_tail>=bm->queue_size)bm->avg_tail=0;
+       }
+       
+       
+     }
+   }else{
+     /* if we're not using an average tracker, the 'float' is nailed to
+        the avgfloat_initial value.  It needs to be set for the min/max
+        to deal properly */
+     long bin=PACKETBLOBS/2;
+     bm->queue_actual[head]|=bin;
+     new_minmax_head=next_head;
+   }	
+   
+   /* update the min/max queues and enforce limits */
+   if(bm->minmax_binstack){
+     unsigned long sampledesired=eofflag?0:bm->minmax_sampledesired;
+     
+     /* add to stack recent */
+     while(minmax_head!=new_minmax_head){
+       unsigned int i;
+       int samples=ci->blocksizes[bm->queue_actual[minmax_head]&
+ 				0x80000000UL?1:0]>>1;
+       int actual=bm->queue_actual[minmax_head]&0x7fffffffUL;
+ 
+       for(i=0;i<(unsigned int)bins;i++){
+ 	bm->minmax_binstack[bm->minmax_stackptr*bins*2+bins+i]+=
+ 	  LACING_ADJUST(BINBYTES(bm,minmax_head,
+ 				actual>i?actual:i));
+ 	
+ 	bm->minmax_binstack[bm->minmax_stackptr*bins*2+i]+=
+ 	  LACING_ADJUST(BINBYTES(bm,minmax_head,
+ 				actual<i?actual:i));
+       }
+       
+       bm->minmax_posstack[bm->minmax_stackptr]=minmax_head; /* not one
+ 							       past
+ 							       like
+ 							       typical */
+       bm->minmax_limitstack[bm->minmax_stackptr]=0;
+       bm->minmax_sampleacc+=samples;
+       bm->minmax_acctotal+=
+ 	LACING_ADJUST(BINBYTES(bm,minmax_head,actual));
+       
+       minmax_head++;
+       if(minmax_head>=bm->queue_size)minmax_head=0;
+ 
+ 
+     }
+     
+     /* check limits, enforce changes */
+     if(bm->minmax_sampleacc>sampledesired){
+       double bitrate=(double)(bm->minmax_acctotal*8)/
+ 	bm->minmax_sampleacc*vi->rate;
+       int limit=0;
+       
+       if((bi->queue_hardmax>0 && bitrate>bi->queue_hardmax) || 
+ 	 (bi->queue_hardmin>0 && bitrate<bi->queue_hardmin)){
+ 	int newstack;
+ 	int stackctr;
+ 	long bitsum=bm->minmax_acctotal*8;
+ 
+ 	bitrate=(double)bitsum/bm->minmax_sampleacc*vi->rate;
+ 
+ 	/* we're off rate.  Iteratively try out new hard floater
+            limits until we find one that brings us inside.  Here's
+            where we see the whole point of the limit stacks.  */
+ 	if(bi->queue_hardmax>0 && bitrate>bi->queue_hardmax){
+ 	  for(limit=-1;limit>-bins+1;limit--){
+ 	    long bitsum=limit_sum(bm,limit)*8;
+ 	    bitrate=(double)bitsum/bm->minmax_sampleacc*vi->rate;
+ 	    if(bitrate<=bi->queue_hardmax)break;
+ 	  }
+ 	}else if(bitrate<bi->queue_hardmin){
+ 	  for(limit=1;limit<bins-1;limit++){
+ 	    long bitsum=limit_sum(bm,limit)*8;
+ 	    bitrate=(double)bitsum/bm->minmax_sampleacc*vi->rate;
+ 	    if(bitrate>=bi->queue_hardmin)break;
+ 	  }
+ 	  if(bitrate>bi->queue_hardmax)limit--;
+ 	}
+ 
+ 	/* trace the limit backward, stop when we see a lower limit */
+ 	newstack=bm->minmax_stackptr-1;
+ 	while(newstack>=0){
+ 	  if(bm->minmax_limitstack[newstack]<limit)break;
+ 	  newstack--;
+ 	}
+ 	
+ 	/* update bit counter with new limit and replace any stack
+            limits that have been replaced by our new lower limit */
+ 	stackctr=bm->minmax_stackptr;
+ 	while(stackctr>newstack){
+ 	  bm->minmax_acctotal-=
+ 	    LIMITBYTES(stackctr,bm->minmax_limitstack[stackctr]);
+ 	  bm->minmax_acctotal+=LIMITBYTES(stackctr,limit);
+ 	  
+ 	  if(stackctr<bm->minmax_stackptr)
+ 	    for(i=0;i<bins*2;i++)
+ 	      bm->minmax_binstack[stackctr*bins*2+i]+=
+ 		bm->minmax_binstack[(stackctr+1)*bins*2+i];
+ 
+ 	  stackctr--;
+ 	}
+ 	stackctr++;
+ 	bm->minmax_posstack[stackctr]=bm->minmax_posstack[bm->minmax_stackptr];
+ 	bm->minmax_limitstack[stackctr]=limit;
+ 
+ 	/* set up new blank stack entry */
+ 	stackctr++;
+ 	bm->minmax_stackptr=stackctr;
+ 	memset(&bm->minmax_binstack[stackctr*bins*2],
+ 	       0,
+ 	       sizeof(*bm->minmax_binstack)*bins*2);
+ 	bm->minmax_limitstack[stackctr]=0;
+ 	bm->minmax_posstack[stackctr]=-1;
+ 	
+       }
+     }
+     
+     /* remove from tail */
+     while(bm->minmax_sampleacc>sampledesired){
+       int samples=
+ 	ci->blocksizes[bm->queue_actual[bm->minmax_tail]&0x80000000UL?1:0]>>1;
+       int actual=bm->queue_actual[bm->minmax_tail]&0x7fffffffUL;
+ 
+       for(i=0;i<bins;i++){
+ 	bm->minmax_binstack[bins+i]-= /* always comes off the stack bottom */
+ 	  LACING_ADJUST(BINBYTES(bm,bm->minmax_tail,
+ 				actual>i?
+ 				actual:i));
+ 	bm->minmax_binstack[i]-= 
+ 	  LACING_ADJUST(BINBYTES(bm,bm->minmax_tail,
+ 				actual<i?
+ 				actual:i));
+       }
+ 
+       if(bm->minmax_limitstack[0]>actual)
+ 	actual=bm->minmax_limitstack[0];
+       if(bins+bm->minmax_limitstack[0]<actual)
+ 	actual=bins+bm->minmax_limitstack[0];
+       
+       bm->minmax_acctotal-=LACING_ADJUST(BINBYTES(bm,bm->minmax_tail,actual));
+       bm->minmax_sampleacc-=samples;
+ 
+       /* revise queue_actual to reflect the limit */
+       bm->queue_actual[bm->minmax_tail]&=0x80000000UL;
+       bm->queue_actual[bm->minmax_tail]|=actual;
+       
+       if(bm->minmax_tail==bm->minmax_posstack[0]){
+ 	/* the stack becomes a FIFO; the first data has fallen off */
+ 	memmove(bm->minmax_binstack,bm->minmax_binstack+bins*2,
+ 		sizeof(*bm->minmax_binstack)*bins*2*bm->minmax_stackptr);
+ 	memmove(bm->minmax_posstack,bm->minmax_posstack+1,
+ 		sizeof(*bm->minmax_posstack)*bm->minmax_stackptr);
+ 	memmove(bm->minmax_limitstack,bm->minmax_limitstack+1,
+ 		sizeof(*bm->minmax_limitstack)*bm->minmax_stackptr);
+ 	bm->minmax_stackptr--;
+       }
+       
+       bm->minmax_tail++;
+       if(bm->minmax_tail>=bm->queue_size)bm->minmax_tail=0;
+ 
+     }
+     
+     
+     bm->last_to_flush=bm->minmax_tail;
+   }else{
+     bm->last_to_flush=bm->avg_center;
+   }
+   if(eofflag)
+     bm->last_to_flush=bm->queue_head;
+   return(0);
+ }
+ 
+ int vorbis_bitrate_flushpacket(vorbis_dsp_state *vd,ogg_packet *op){
+   private_state         *b=vd->backend_state;
+   bitrate_manager_state *bm=&b->bms;
+ 
+   if(bm->queue_size==0){
+     if(bm->queue_head==0)return(0);
+ 
+     memcpy(op,bm->packets,sizeof(*op));
+     bm->queue_head=0;
+ 
+   }else{
+ 
+     if(bm->next_to_flush==bm->last_to_flush)return(0);
+ 
+     {
+       long bin=bm->queue_actual[bm->next_to_flush]&0x7fffffff,i;
+       long bins=bm->queue_bins;
+       ogg_uint32_t *markers=bm->queue_binned+bins*bm->next_to_flush;
+       long bytes=markers[bin];
+ 
+       memcpy(op,bm->packets+bm->next_to_flush,sizeof(*op));
+ 
+       /* we have [PACKETBLOBS] possible packets all squished together in
+ 	 the buffer, in sequence.  count in to number [bin] */
+       for(i=0;i<bin;i++)
+ 	op->packet+=markers[i];
+       op->bytes=bytes;
+ 	
+     }
+ 
+     bm->next_to_flush++;
+     if(bm->next_to_flush>=bm->queue_size)bm->next_to_flush=0;
+ 
+   }
+ 
+   return(1);
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: single-block PCM synthesis
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){
+   vorbis_dsp_state     *vd=vb->vd;
+   private_state        *b=vd->backend_state;
+   vorbis_info          *vi=vd->vi;
+   codec_setup_info     *ci=vi->codec_setup;
+   oggpack_buffer       *opb=&vb->opb;
+   int                   type,mode,i;
+  
+   /* first things first.  Make sure decode is ready */
+   _vorbis_block_ripcord(vb);
+   oggpack_readinit(opb,op->packet,op->bytes);
+ 
+   /* Check the packet type */
+   if(oggpack_read(opb,1)!=0){
+     /* Oops.  This is not an audio data packet */
+     return(OV_ENOTAUDIO);
+   }
+ 
+   /* read our mode and pre/post windowsize */
+   mode=oggpack_read(opb,b->modebits);
+   if(mode==-1)return(OV_EBADPACKET);
+   
+   vb->mode=mode;
+   vb->W=ci->mode_param[mode]->blockflag;
+   if(vb->W){
+ 
+     /* this doesn;t get mapped through mode selection as it's used
+        only for window selection */
+     vb->lW=oggpack_read(opb,1);
+     vb->nW=oggpack_read(opb,1);
+     if(vb->nW==-1)   return(OV_EBADPACKET);
+   }else{
+     vb->lW=0;
+     vb->nW=0;
+   }
+   
+   /* more setup */
+   vb->granulepos=op->granulepos;
+   vb->sequence=op->packetno;
+   vb->eofflag=op->e_o_s;
+ 
+   /* alloc pcm passback storage */
+   vb->pcmend=ci->blocksizes[vb->W];
+   vb->pcm=_vorbis_block_alloc(vb,sizeof(*vb->pcm)*vi->channels);
+   for(i=0;i<vi->channels;i++)
+     vb->pcm[i]=_vorbis_block_alloc(vb,vb->pcmend*sizeof(*vb->pcm[i]));
+ 
+   /* unpack_header enforces range checking */
+   type=ci->map_type[ci->mode_param[mode]->mapping];
+ 
+   return(_mapping_P[type]->inverse(vb,ci->map_param[ci->mode_param[mode]->
+ 						   mapping]));
+ }
+ 
+ /* used to track pcm position without actually performing decode.
+    Useful for sequential 'fast forward' */
+ int vorbis_synthesis_trackonly(vorbis_block *vb,ogg_packet *op){
+   vorbis_dsp_state     *vd=vb->vd;
+   private_state        *b=vd->backend_state;
+   vorbis_info          *vi=vd->vi;
+   codec_setup_info     *ci=vi->codec_setup;
+   oggpack_buffer       *opb=&vb->opb;
+   int                   mode;
+  
+   /* first things first.  Make sure decode is ready */
+   _vorbis_block_ripcord(vb);
+   oggpack_readinit(opb,op->packet,op->bytes);
+ 
+   /* Check the packet type */
+   if(oggpack_read(opb,1)!=0){
+     /* Oops.  This is not an audio data packet */
+     return(OV_ENOTAUDIO);
+   }
+ 
+   /* read our mode and pre/post windowsize */
+   mode=oggpack_read(opb,b->modebits);
+   if(mode==-1)return(OV_EBADPACKET);
+   
+   vb->mode=mode;
+   vb->W=ci->mode_param[mode]->blockflag;
+   if(vb->W){
+     vb->lW=oggpack_read(opb,1);
+     vb->nW=oggpack_read(opb,1);
+     if(vb->nW==-1)   return(OV_EBADPACKET);
+   }else{
+     vb->lW=0;
+     vb->nW=0;
+   }
+   
+   /* more setup */
+   vb->granulepos=op->granulepos;
+   vb->sequence=op->packetno;
+   vb->eofflag=op->e_o_s;
+ 
+   /* no pcm */
+   vb->pcmend=0;
+   vb->pcm=NULL;
+ 
+   return(0);
+ }
+ 
+ long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
+   codec_setup_info     *ci=vi->codec_setup;
+   oggpack_buffer       opb;
+   int                  mode;
+  
+   oggpack_readinit(&opb,op->packet,op->bytes);
+ 
+   /* Check the packet type */
+   if(oggpack_read(&opb,1)!=0){
+     /* Oops.  This is not an audio data packet */
+     return(OV_ENOTAUDIO);
+   }
+ 
+   {
+     int modebits=0;
+     int v=ci->modes;
+     while(v>1){
+       modebits++;
+       v>>=1;
+     }
+ 
+     /* read our mode and pre/post windowsize */
+     mode=oggpack_read(&opb,modebits);
+   }
+   if(mode==-1)return(OV_EBADPACKET);
+   return(ci->blocksizes[ci->mode_param[mode]->blockflag]);
+ }
+ 
+ int vorbis_synthesis_halfrate(vorbis_info *vi,int flag){
+   /* set / clear half-sample-rate mode */
+   codec_setup_info     *ci=vi->codec_setup;
+   
+   /* right now, our MDCT can't handle < 64 sample windows. */
+   if(ci->blocksizes[0]<=64 && flag)return -1;
+   ci->halfrate_flag=(flag?1:0);
+   return 0;
+ }
+ 
+ int vorbis_synthesis_halfrate_p(vorbis_info *vi){
+   codec_setup_info     *ci=vi->codec_setup;
+   return ci->halfrate_flag;
+ }
+ 
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: basic shared codebook operations
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ 
+ /**** pack/unpack helpers ******************************************/
+ int _ilog(unsigned int v){
+   int ret=0;
+   while(v){
+     ret++;
+     v>>=1;
+   }
+   return(ret);
+ }
+ 
+ /* 32 bit float (not IEEE; nonnormalized mantissa +
+    biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm 
+    Why not IEEE?  It's just not that important here. */
+ 
+ #define VQ_FEXP 10
+ #define VQ_FMAN 21
+ #define VQ_FEXP_BIAS 768 /* bias toward values smaller than 1. */
+ 
+ /* doesn't currently guard under/overflow */
+ long _float32_pack(float val){
+   int sign=0;
+   long exp;
+   long mant;
+   if(val<0){
+     sign=0x80000000;
+     val= -val;
+   }
+   exp= floor(log(val)/log(2.f));
+   mant=rint(ldexp(val,(VQ_FMAN-1)-exp));
+   exp=(exp+VQ_FEXP_BIAS)<<VQ_FMAN;
+ 
+   return(sign|exp|mant);
+ }
+ 
+ float _float32_unpack(long val){
+   double mant=val&0x1fffff;
+   int    sign=val&0x80000000;
+   long   exp =(val&0x7fe00000L)>>VQ_FMAN;
+   if(sign)mant= -mant;
+   return(ldexp(mant,exp-(VQ_FMAN-1)-VQ_FEXP_BIAS));
+ }
+ 
+ /* given a list of word lengths, generate a list of codewords.  Works
+    for length ordered or unordered, always assigns the lowest valued
+    codewords first.  Extended to handle unused entries (length 0) */
+ ogg_uint32_t *_make_words(long *l,long n,long sparsecount){
+   long i,j,count=0;
+   ogg_uint32_t marker[33];
+   ogg_uint32_t *r=_ogg_malloc((sparsecount?sparsecount:n)*sizeof(*r));
+   memset(marker,0,sizeof(marker));
+ 
+   for(i=0;i<n;i++){
+     long length=l[i];
+     if(length>0){
+       ogg_uint32_t entry=marker[length];
+       
+       /* when we claim a node for an entry, we also claim the nodes
+ 	 below it (pruning off the imagined tree that may have dangled
+ 	 from it) as well as blocking the use of any nodes directly
+ 	 above for leaves */
+       
+       /* update ourself */
+       if(length<32 && (entry>>length)){
+ 	/* error condition; the lengths must specify an overpopulated tree */
+ 	_ogg_free(r);
+ 	return(NULL);
+       }
+       r[count++]=entry;
+     
+       /* Look to see if the next shorter marker points to the node
+ 	 above. if so, update it and repeat.  */
+       {
+ 	for(j=length;j>0;j--){
+ 	  
+ 	  if(marker[j]&1){
+ 	    /* have to jump branches */
+ 	    if(j==1)
+ 	      marker[1]++;
+ 	    else
+ 	      marker[j]=marker[j-1]<<1;
+ 	    break; /* invariant says next upper marker would already
+ 		      have been moved if it was on the same path */
+ 	  }
+ 	  marker[j]++;
+ 	}
+       }
+       
+       /* prune the tree; the implicit invariant says all the longer
+ 	 markers were dangling from our just-taken node.  Dangle them
+ 	 from our *new* node. */
+       for(j=length+1;j<33;j++)
+ 	if((marker[j]>>1) == entry){
+ 	  entry=marker[j];
+ 	  marker[j]=marker[j-1]<<1;
+ 	}else
+ 	  break;
+     }else
+       if(sparsecount==0)count++;
+   }
+     
+   /* bitreverse the words because our bitwise packer/unpacker is LSb
+      endian */
+   for(i=0,count=0;i<n;i++){
+     ogg_uint32_t temp=0;
+     for(j=0;j<l[i];j++){
+       temp<<=1;
+       temp|=(r[count]>>j)&1;
+     }
+ 
+     if(sparsecount){
+       if(l[i])
+ 	r[count++]=temp;
+     }else
+       r[count++]=temp;
+   }
+ 
+   return(r);
+ }
+ 
+ /* there might be a straightforward one-line way to do the below
+    that's portable and totally safe against roundoff, but I haven't
+    thought of it.  Therefore, we opt on the side of caution */
+ long _book_maptype1_quantvals(const static_codebook *b){
+   long vals=floor(pow((float)b->entries,1.f/b->dim));
+ 
+   /* the above *should* be reliable, but we'll not assume that FP is
+      ever reliable when bitstream sync is at stake; verify via integer
+      means that vals really is the greatest value of dim for which
+      vals^b->bim <= b->entries */
+   /* treat the above as an initial guess */
+   while(1){
+     long acc=1;
+     long acc1=1;
+     int i;
+     for(i=0;i<b->dim;i++){
+       acc*=vals;
+       acc1*=vals+1;
+     }
+     if(acc<=b->entries && acc1>b->entries){
+       return(vals);
+     }else{
+       if(acc>b->entries){
+ 	vals--;
+       }else{
+ 	vals++;
+       }
+     }
+   }
+ }
+ 
+ /* unpack the quantized list of values for encode/decode ***********/
+ /* we need to deal with two map types: in map type 1, the values are
+    generated algorithmically (each column of the vector counts through
+    the values in the quant vector). in map type 2, all the values came
+    in in an explicit list.  Both value lists must be unpacked */
+ float *_book_unquantize(const static_codebook *b,int n,int *sparsemap){
+   long j,k,count=0;
+   if(b->maptype==1 || b->maptype==2){
+     int quantvals;
+     float mindel=_float32_unpack(b->q_min);
+     float delta=_float32_unpack(b->q_delta);
+     float *r=_ogg_calloc(n*b->dim,sizeof(*r));
+ 
+     /* maptype 1 and 2 both use a quantized value vector, but
+        different sizes */
+     switch(b->maptype){
+     case 1:
+       /* most of the time, entries%dimensions == 0, but we need to be
+ 	 well defined.  We define that the possible vales at each
+ 	 scalar is values == entries/dim.  If entries%dim != 0, we'll
+ 	 have 'too few' values (values*dim<entries), which means that
+ 	 we'll have 'left over' entries; left over entries use zeroed
+ 	 values (and are wasted).  So don't generate codebooks like
+ 	 that */
+       quantvals=_book_maptype1_quantvals(b);
+       for(j=0;j<b->entries;j++){
+ 	if((sparsemap && b->lengthlist[j]) || !sparsemap){
+ 	  float last=0.f;
+ 	  int indexdiv=1;
+ 	  for(k=0;k<b->dim;k++){
+ 	    int index= (j/indexdiv)%quantvals;
+ 	    float val=b->quantlist[index];
+ 	    val=fabs(val)*delta+mindel+last;
+ 	    if(b->q_sequencep)last=val;	  
+ 	    if(sparsemap)
+ 	      r[sparsemap[count]*b->dim+k]=val;
+ 	    else
+ 	      r[count*b->dim+k]=val;
+ 	    indexdiv*=quantvals;
+ 	  }
+ 	  count++;
+ 	}
+ 
+       }
+       break;
+     case 2:
+       for(j=0;j<b->entries;j++){
+ 	if((sparsemap && b->lengthlist[j]) || !sparsemap){
+ 	  float last=0.f;
+ 	  
+ 	  for(k=0;k<b->dim;k++){
+ 	    float val=b->quantlist[j*b->dim+k];
+ 	    val=fabs(val)*delta+mindel+last;
+ 	    if(b->q_sequencep)last=val;	  
+ 	    if(sparsemap)
+ 	      r[sparsemap[count]*b->dim+k]=val;
+ 	    else
+ 	      r[count*b->dim+k]=val;
+ 	  }
+ 	  count++;
+ 	}
+       }
+       break;
+     }
+ 
+     return(r);
+   }
+   return(NULL);
+ }
+ 
+ void vorbis_staticbook_clear(static_codebook *b){
+   if(b->allocedp){
+     if(b->quantlist)_ogg_free(b->quantlist);
+     if(b->lengthlist)_ogg_free(b->lengthlist);
+     if(b->nearest_tree){
+       _ogg_free(b->nearest_tree->ptr0);
+       _ogg_free(b->nearest_tree->ptr1);
+       _ogg_free(b->nearest_tree->p);
+       _ogg_free(b->nearest_tree->q);
+       memset(b->nearest_tree,0,sizeof(*b->nearest_tree));
+       _ogg_free(b->nearest_tree);
+     }
+     if(b->thresh_tree){
+       _ogg_free(b->thresh_tree->quantthresh);
+       _ogg_free(b->thresh_tree->quantmap);
+       memset(b->thresh_tree,0,sizeof(*b->thresh_tree));
+       _ogg_free(b->thresh_tree);
+     }
+ 
+     memset(b,0,sizeof(*b));
+   }
+ }
+ 
+ void vorbis_staticbook_destroy(static_codebook *b){
+   if(b->allocedp){
+     vorbis_staticbook_clear(b);
+     _ogg_free(b);
+   }
+ }
+ 
+ void vorbis_book_clear(codebook *b){
+   /* static book is not cleared; we're likely called on the lookup and
+      the static codebook belongs to the info struct */
+   if(b->valuelist)_ogg_free(b->valuelist);
+   if(b->codelist)_ogg_free(b->codelist);
+ 
+   if(b->dec_index)_ogg_free(b->dec_index);
+   if(b->dec_codelengths)_ogg_free(b->dec_codelengths);
+   if(b->dec_firsttable)_ogg_free(b->dec_firsttable);
+ 
+   memset(b,0,sizeof(*b));
+ }
+ 
+ int vorbis_book_init_encode(codebook *c,const static_codebook *s){
+ 
+   memset(c,0,sizeof(*c));
+   c->c=s;
+   c->entries=s->entries;
+   c->used_entries=s->entries;
+   c->dim=s->dim;
+   c->codelist=_make_words(s->lengthlist,s->entries,0);
+   c->valuelist=_book_unquantize(s,s->entries,NULL);
+ 
+   return(0);
+ }
+ 
+ static ogg_uint32_t bitreverse(ogg_uint32_t x){
+   x=    ((x>>16)&0x0000ffffUL) | ((x<<16)&0xffff0000UL);
+   x=    ((x>> 8)&0x00ff00ffUL) | ((x<< 8)&0xff00ff00UL);
+   x=    ((x>> 4)&0x0f0f0f0fUL) | ((x<< 4)&0xf0f0f0f0UL);
+   x=    ((x>> 2)&0x33333333UL) | ((x<< 2)&0xccccccccUL);
+   return((x>> 1)&0x55555555UL) | ((x<< 1)&0xaaaaaaaaUL);
+ }
+ 
+ static int sort32a(const void *a,const void *b){
+   return ( **(ogg_uint32_t **)a>**(ogg_uint32_t **)b)- 
+     ( **(ogg_uint32_t **)a<**(ogg_uint32_t **)b);
+ }
+ 
+ /* decode codebook arrangement is more heavily optimized than encode */
+ int vorbis_book_init_decode(codebook *c,const static_codebook *s){
+   int i,j,n=0,tabn;
+   int *sortindex;
+   memset(c,0,sizeof(*c));
+   
+   /* count actually used entries */
+   for(i=0;i<s->entries;i++)
+     if(s->lengthlist[i]>0)
+       n++;
+ 
+   c->entries=s->entries;
+   c->used_entries=n;
+   c->dim=s->dim;
+ 
+   /* two different remappings go on here.  
+ 
+      First, we collapse the likely sparse codebook down only to
+      actually represented values/words.  This collapsing needs to be
+      indexed as map-valueless books are used to encode original entry
+      positions as integers.
+ 
+      Second, we reorder all vectors, including the entry index above,
+      by sorted bitreversed codeword to allow treeless decode. */
+ 
+   {
+     /* perform sort */
+     ogg_uint32_t *codes=_make_words(s->lengthlist,s->entries,c->used_entries);
+     ogg_uint32_t **codep=alloca(sizeof(*codep)*n);
+     
+     if(codes==NULL)goto err_out;
+ 
+     for(i=0;i<n;i++){
+       codes[i]=bitreverse(codes[i]);
+       codep[i]=codes+i;
+     }
+ 
+     qsort(codep,n,sizeof(*codep),sort32a);
+ 
+     sortindex=alloca(n*sizeof(*sortindex));
+     c->codelist=_ogg_malloc(n*sizeof(*c->codelist));
+     /* the index is a reverse index */
+     for(i=0;i<n;i++){
+       int position=codep[i]-codes;
+       sortindex[position]=i;
+     }
+ 
+     for(i=0;i<n;i++)
+       c->codelist[sortindex[i]]=codes[i];
+     _ogg_free(codes);
+   }
+ 
+   c->valuelist=_book_unquantize(s,n,sortindex);
+   c->dec_index=_ogg_malloc(n*sizeof(*c->dec_index));
+ 
+   for(n=0,i=0;i<s->entries;i++)
+     if(s->lengthlist[i]>0)
+       c->dec_index[sortindex[n++]]=i;
+   
+   c->dec_codelengths=_ogg_malloc(n*sizeof(*c->dec_codelengths));
+   for(n=0,i=0;i<s->entries;i++)
+     if(s->lengthlist[i]>0)
+       c->dec_codelengths[sortindex[n++]]=s->lengthlist[i];
+ 
+   c->dec_firsttablen=_ilog(c->used_entries)-4; /* this is magic */
+   if(c->dec_firsttablen<5)c->dec_firsttablen=5;
+   if(c->dec_firsttablen>8)c->dec_firsttablen=8;
+ 
+   tabn=1<<c->dec_firsttablen;
+   c->dec_firsttable=_ogg_calloc(tabn,sizeof(*c->dec_firsttable));
+   c->dec_maxlength=0;
+ 
+   for(i=0;i<n;i++){
+     if(c->dec_maxlength<c->dec_codelengths[i])
+       c->dec_maxlength=c->dec_codelengths[i];
+     if(c->dec_codelengths[i]<=c->dec_firsttablen){
+       ogg_uint32_t orig=bitreverse(c->codelist[i]);
+       for(j=0;j<(1<<(c->dec_firsttablen-c->dec_codelengths[i]));j++)
+ 	c->dec_firsttable[orig|(j<<c->dec_codelengths[i])]=i+1;
+     }
+   }
+ 
+   /* now fill in 'unused' entries in the firsttable with hi/lo search
+      hints for the non-direct-hits */
+   {
+     ogg_uint32_t mask=0xfffffffeUL<<(31-c->dec_firsttablen);
+     long lo=0,hi=0;
+ 
+     for(i=0;i<tabn;i++){
+       ogg_uint32_t word=i<<(32-c->dec_firsttablen);
+       if(c->dec_firsttable[bitreverse(word)]==0){
+ 	while((lo+1)<n && c->codelist[lo+1]<=word)lo++;
+ 	while(    hi<n && word>=(c->codelist[hi]&mask))hi++;
+ 	
+ 	/* we only actually have 15 bits per hint to play with here.
+            In order to overflow gracefully (nothing breaks, efficiency
+            just drops), encode as the difference from the extremes. */
+ 	{
+ 	  unsigned long loval=lo;
+ 	  unsigned long hival=n-hi;
+ 
+ 	  if(loval>0x7fff)loval=0x7fff;
+ 	  if(hival>0x7fff)hival=0x7fff;
+ 	  c->dec_firsttable[bitreverse(word)]=
+ 	    0x80000000UL | (loval<<15) | hival;
+ 	}
+       }
+     }
+   }
+   
+ 
+   return(0);
+  err_out:
+   vorbis_book_clear(c);
+   return(-1);
+ }
+ 
+ static float _dist(int el,float *ref, float *b,int step){
+   int i;
+   float acc=0.f;
+   for(i=0;i<el;i++){
+     float val=(ref[i]-b[i*step]);
+     acc+=val*val;
+   }
+   return(acc);
+ }
+ 
+ int _best(codebook *book, float *a, int step){
+   encode_aux_threshmatch *tt=book->c->thresh_tree;
+ 
+ #if 0
+   encode_aux_nearestmatch *nt=book->c->nearest_tree;
+   encode_aux_pigeonhole *pt=book->c->pigeon_tree;
+ #endif
+   int dim=book->dim;
+   int k,o;
+   /*int savebest=-1;
+     float saverr;*/
+ 
+   /* do we have a threshhold encode hint? */
+   if(tt){
+     int index=0,i;
+     /* find the quant val of each scalar */
+     for(k=0,o=step*(dim-1);k<dim;k++,o-=step){
+ 
+       i=tt->threshvals>>1;
+       if(a[o]<tt->quantthresh[i]){
+ 
+ 	for(;i>0;i--)
+ 	  if(a[o]>=tt->quantthresh[i-1])
+ 	    break;
+ 	
+       }else{
+ 
+ 	for(i++;i<tt->threshvals-1;i++)
+ 	  if(a[o]<tt->quantthresh[i])break;
+ 
+       }
+ 
+       index=(index*tt->quantvals)+tt->quantmap[i];
+     }
+     /* regular lattices are easy :-) */
+     if(book->c->lengthlist[index]>0) /* is this unused?  If so, we'll
+ 					use a decision tree after all
+ 					and fall through*/
+       return(index);
+   }
+ 
+ #if 0
+   /* do we have a pigeonhole encode hint? */
+   if(pt){
+     const static_codebook *c=book->c;
+     int i,besti=-1;
+     float best=0.f;
+     int entry=0;
+ 
+     /* dealing with sequentialness is a pain in the ass */
+     if(c->q_sequencep){
+       int pv;
+       long mul=1;
+       float qlast=0;
+       for(k=0,o=0;k<dim;k++,o+=step){
+ 	pv=(int)((a[o]-qlast-pt->min)/pt->del);
+ 	if(pv<0 || pv>=pt->mapentries)break;
+ 	entry+=pt->pigeonmap[pv]*mul;
+ 	mul*=pt->quantvals;
+ 	qlast+=pv*pt->del+pt->min;
+       }
+     }else{
+       for(k=0,o=step*(dim-1);k<dim;k++,o-=step){
+ 	int pv=(int)((a[o]-pt->min)/pt->del);
+ 	if(pv<0 || pv>=pt->mapentries)break;
+ 	entry=entry*pt->quantvals+pt->pigeonmap[pv];
+       }
+     }
+ 
+     /* must be within the pigeonholable range; if we quant outside (or
+        in an entry that we define no list for), brute force it */
+     if(k==dim && pt->fitlength[entry]){
+       /* search the abbreviated list */
+       long *list=pt->fitlist+pt->fitmap[entry];
+       for(i=0;i<pt->fitlength[entry];i++){
+ 	float this=_dist(dim,book->valuelist+list[i]*dim,a,step);
+ 	if(besti==-1 || this<best){
+ 	  best=this;
+ 	  besti=list[i];
+ 	}
+       }
+ 
+       return(besti); 
+     }
+   }
+ 
+   if(nt){
+     /* optimized using the decision tree */
+     while(1){
+       float c=0.f;
+       float *p=book->valuelist+nt->p[ptr];
+       float *q=book->valuelist+nt->q[ptr];
+       
+       for(k=0,o=0;k<dim;k++,o+=step)
+ 	c+=(p[k]-q[k])*(a[o]-(p[k]+q[k])*.5);
+       
+       if(c>0.f) /* in A */
+ 	ptr= -nt->ptr0[ptr];
+       else     /* in B */
+ 	ptr= -nt->ptr1[ptr];
+       if(ptr<=0)break;
+     }
+     return(-ptr);
+   }
+ #endif 
+ 
+   /* brute force it! */
+   {
+     const static_codebook *c=book->c;
+     int i,besti=-1;
+     float best=0.f;
+     float *e=book->valuelist;
+     for(i=0;i<book->entries;i++){
+       if(c->lengthlist[i]>0){
+ 	float this=_dist(dim,e,a,step);
+ 	if(besti==-1 || this<best){
+ 	  best=this;
+ 	  besti=i;
+ 	}
+       }
+       e+=dim;
+     }
+ 
+     /*if(savebest!=-1 && savebest!=besti){
+       fprintf(stderr,"brute force/pigeonhole disagreement:\n"
+ 	      "original:");
+       for(i=0;i<dim*step;i+=step)fprintf(stderr,"%g,",a[i]);
+       fprintf(stderr,"\n"
+ 	      "pigeonhole (entry %d, err %g):",savebest,saverr);
+       for(i=0;i<dim;i++)fprintf(stderr,"%g,",
+ 				(book->valuelist+savebest*dim)[i]);
+       fprintf(stderr,"\n"
+ 	      "bruteforce (entry %d, err %g):",besti,best);
+       for(i=0;i<dim;i++)fprintf(stderr,"%g,",
+ 				(book->valuelist+besti*dim)[i]);
+       fprintf(stderr,"\n");
+       }*/
+     return(besti);
+   }
+ }
+ 
+ long vorbis_book_codeword(codebook *book,int entry){
+   if(book->c) /* only use with encode; decode optimizations are
+                  allowed to break this */
+     return book->codelist[entry];
+   return -1;
+ }
+ 
+ long vorbis_book_codelen(codebook *book,int entry){
+   if(book->c) /* only use with encode; decode optimizations are
+                  allowed to break this */
+     return book->c->lengthlist[entry];
+   return -1;
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: basic codebook pack/unpack/code/decode operations
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* packs the given codebook into the bitstream **************************/
+ 
+ int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *opb){
+   long i,j;
+   int ordered=0;
+ 
+   /* first the basic parameters */
+   oggpack_write(opb,0x564342,24);
+   oggpack_write(opb,c->dim,16);
+   oggpack_write(opb,c->entries,24);
+ 
+   /* pack the codewords.  There are two packings; length ordered and
+      length random.  Decide between the two now. */
+   
+   for(i=1;i<c->entries;i++)
+     if(c->lengthlist[i-1]==0 || c->lengthlist[i]<c->lengthlist[i-1])break;
+   if(i==c->entries)ordered=1;
+   
+   if(ordered){
+     /* length ordered.  We only need to say how many codewords of
+        each length.  The actual codewords are generated
+        deterministically */
+ 
+     long count=0;
+     oggpack_write(opb,1,1);  /* ordered */
+     oggpack_write(opb,c->lengthlist[0]-1,5); /* 1 to 32 */
+ 
+     for(i=1;i<c->entries;i++){
+       long this=c->lengthlist[i];
+       long last=c->lengthlist[i-1];
+       if(this>last){
+ 	for(j=last;j<this;j++){
+ 	  oggpack_write(opb,i-count,_ilog(c->entries-count));
+ 	  count=i;
+ 	}
+       }
+     }
+     oggpack_write(opb,i-count,_ilog(c->entries-count));
+     
+   }else{
+     /* length random.  Again, we don't code the codeword itself, just
+        the length.  This time, though, we have to encode each length */
+     oggpack_write(opb,0,1);   /* unordered */
+     
+     /* algortihmic mapping has use for 'unused entries', which we tag
+        here.  The algorithmic mapping happens as usual, but the unused
+        entry has no codeword. */
+     for(i=0;i<c->entries;i++)
+       if(c->lengthlist[i]==0)break;
+ 
+     if(i==c->entries){
+       oggpack_write(opb,0,1); /* no unused entries */
+       for(i=0;i<c->entries;i++)
+ 	oggpack_write(opb,c->lengthlist[i]-1,5);
+     }else{
+       oggpack_write(opb,1,1); /* we have unused entries; thus we tag */
+       for(i=0;i<c->entries;i++){
+ 	if(c->lengthlist[i]==0){
+ 	  oggpack_write(opb,0,1);
+ 	}else{
+ 	  oggpack_write(opb,1,1);
+ 	  oggpack_write(opb,c->lengthlist[i]-1,5);
+ 	}
+       }
+     }
+   }
+ 
+   /* is the entry number the desired return value, or do we have a
+      mapping? If we have a mapping, what type? */
+   oggpack_write(opb,c->maptype,4);
+   switch(c->maptype){
+   case 0:
+     /* no mapping */
+     break;
+   case 1:case 2:
+     /* implicitly populated value mapping */
+     /* explicitly populated value mapping */
+     
+     if(!c->quantlist){
+       /* no quantlist?  error */
+       return(-1);
+     }
+     
+     /* values that define the dequantization */
+     oggpack_write(opb,c->q_min,32);
+     oggpack_write(opb,c->q_delta,32);
+     oggpack_write(opb,c->q_quant-1,4);
+     oggpack_write(opb,c->q_sequencep,1);
+     
+     {
+       int quantvals;
+       switch(c->maptype){
+       case 1:
+ 	/* a single column of (c->entries/c->dim) quantized values for
+ 	   building a full value list algorithmically (square lattice) */
+ 	quantvals=_book_maptype1_quantvals(c);
+ 	break;
+       case 2:
+ 	/* every value (c->entries*c->dim total) specified explicitly */
+ 	quantvals=c->entries*c->dim;
+ 	break;
+       default: /* NOT_REACHABLE */
+ 	quantvals=-1;
+       }
+ 
+       /* quantized values */
+       for(i=0;i<quantvals;i++)
+ 	oggpack_write(opb,labs(c->quantlist[i]),c->q_quant);
+ 
+     }
+     break;
+   default:
+     /* error case; we don't have any other map types now */
+     return(-1);
+   }
+ 
+   return(0);
+ }
+ 
+ /* unpacks a codebook from the packet buffer into the codebook struct,
+    readies the codebook auxiliary structures for decode *************/
+ int vorbis_staticbook_unpack(oggpack_buffer *opb,static_codebook *s){
+   long i,j;
+   memset(s,0,sizeof(*s));
+   s->allocedp=1;
+ 
+   /* make sure alignment is correct */
+   if(oggpack_read(opb,24)!=0x564342)goto _eofout;
+ 
+   /* first the basic parameters */
+   s->dim=oggpack_read(opb,16);
+   s->entries=oggpack_read(opb,24);
+   if(s->entries==-1)goto _eofout;
+ 
+   /* codeword ordering.... length ordered or unordered? */
+   switch((int)oggpack_read(opb,1)){
+   case 0:
+     /* unordered */
+     s->lengthlist=_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
+ 
+     /* allocated but unused entries? */
+     if(oggpack_read(opb,1)){
+       /* yes, unused entries */
+ 
+       for(i=0;i<s->entries;i++){
+ 	if(oggpack_read(opb,1)){
+ 	  long num=oggpack_read(opb,5);
+ 	  if(num==-1)goto _eofout;
+ 	  s->lengthlist[i]=num+1;
+ 	}else
+ 	  s->lengthlist[i]=0;
+       }
+     }else{
+       /* all entries used; no tagging */
+       for(i=0;i<s->entries;i++){
+ 	long num=oggpack_read(opb,5);
+ 	if(num==-1)goto _eofout;
+ 	s->lengthlist[i]=num+1;
+       }
+     }
+     
+     break;
+   case 1:
+     /* ordered */
+     {
+       long length=oggpack_read(opb,5)+1;
+       s->lengthlist=_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
+ 
+       for(i=0;i<s->entries;){
+ 	long num=oggpack_read(opb,_ilog(s->entries-i));
+ 	if(num==-1)goto _eofout;
+ 	for(j=0;j<num && i<s->entries;j++,i++)
+ 	  s->lengthlist[i]=length;
+ 	length++;
+       }
+     }
+     break;
+   default:
+     /* EOF */
+     return(-1);
+   }
+   
+   /* Do we have a mapping to unpack? */
+   switch((s->maptype=oggpack_read(opb,4))){
+   case 0:
+     /* no mapping */
+     break;
+   case 1: case 2:
+     /* implicitly populated value mapping */
+     /* explicitly populated value mapping */
+ 
+     s->q_min=oggpack_read(opb,32);
+     s->q_delta=oggpack_read(opb,32);
+     s->q_quant=oggpack_read(opb,4)+1;
+     s->q_sequencep=oggpack_read(opb,1);
+ 
+     {
+       int quantvals=0;
+       switch(s->maptype){
+       case 1:
+ 	quantvals=_book_maptype1_quantvals(s);
+ 	break;
+       case 2:
+ 	quantvals=s->entries*s->dim;
+ 	break;
+       }
+       
+       /* quantized values */
+       s->quantlist=_ogg_malloc(sizeof(*s->quantlist)*quantvals);
+       for(i=0;i<quantvals;i++)
+ 	s->quantlist[i]=oggpack_read(opb,s->q_quant);
+       
+       if(quantvals&&s->quantlist[quantvals-1]==-1)goto _eofout;
+     }
+     break;
+   default:
+     goto _errout;
+   }
+ 
+   /* all set */
+   return(0);
+   
+  _errout:
+  _eofout:
+   vorbis_staticbook_clear(s);
+   return(-1); 
+ }
+ 
+ /* returns the number of bits ************************************************/
+ int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b){
+   oggpack_write(b,book->codelist[a],book->c->lengthlist[a]);
+   return(book->c->lengthlist[a]);
+ }
+ 
+ /* One the encode side, our vector writers are each designed for a
+ specific purpose, and the encoder is not flexible without modification:
+ 
+ The LSP vector coder uses a single stage nearest-match with no
+ interleave, so no step and no error return.  This is specced by floor0
+ and doesn't change.
+ 
+ Residue0 encoding interleaves, uses multiple stages, and each stage
+ peels of a specific amount of resolution from a lattice (thus we want
+ to match by threshold, not nearest match).  Residue doesn't *have* to
+ be encoded that way, but to change it, one will need to add more
+ infrastructure on the encode side (decode side is specced and simpler) */
+ 
+ /* floor0 LSP (single stage, non interleaved, nearest match) */
+ /* returns entry number and *modifies a* to the quantization value *****/
+ int vorbis_book_errorv(codebook *book,float *a){
+   int dim=book->dim,k;
+   int best=_best(book,a,1);
+   for(k=0;k<dim;k++)
+     a[k]=(book->valuelist+best*dim)[k];
+   return(best);
+ }
+ 
+ /* returns the number of bits and *modifies a* to the quantization value *****/
+ int vorbis_book_encodev(codebook *book,int best,float *a,oggpack_buffer *b){
+   int k,dim=book->dim;
+   for(k=0;k<dim;k++)
+     a[k]=(book->valuelist+best*dim)[k];
+   return(vorbis_book_encode(book,best,b));
+ }
+ 
+ /* the 'eliminate the decode tree' optimization actually requires the
+    codewords to be MSb first, not LSb.  This is an annoying inelegancy
+    (and one of the first places where carefully thought out design
+    turned out to be wrong; Vorbis II and future Ogg codecs should go
+    to an MSb bitpacker), but not actually the huge hit it appears to
+    be.  The first-stage decode table catches most words so that
+    bitreverse is not in the main execution path. */
+ 
+ STIN long decode_packed_entry_number(codebook *book, oggpack_buffer *b){
+   int  read=book->dec_maxlength;
+   long lo,hi;
+   long lok = oggpack_look(b,book->dec_firsttablen);
+  
+   if (lok >= 0) {
+     long entry = book->dec_firsttable[lok];
+     if(entry&0x80000000UL){
+       lo=(entry>>15)&0x7fff;
+       hi=book->used_entries-(entry&0x7fff);
+     }else{
+       oggpack_adv(b, book->dec_codelengths[entry-1]);
+       return(entry-1);
+     }
+   }else{
+     lo=0;
+     hi=book->used_entries;
+   }
+ 
+   lok = oggpack_look(b, read);
+ 
+   while(lok<0 && read>1)
+     lok = oggpack_look(b, --read);
+   if(lok<0)return -1;
+ 
+   /* bisect search for the codeword in the ordered list */
+   {
+     ogg_uint32_t testword=bitreverse((ogg_uint32_t)lok);
+ 
+     while(hi-lo>1){
+       long p=(hi-lo)>>1;
+       long test=book->codelist[lo+p]>testword;    
+       lo+=p&(test-1);
+       hi-=p&(-test);
+     }
+ 
+     if(book->dec_codelengths[lo]<=read){
+       oggpack_adv(b, book->dec_codelengths[lo]);
+       return(lo);
+     }
+   }
+   
+   oggpack_adv(b, read);
+   return(-1);
+ }
+ 
+ /* Decode side is specced and easier, because we don't need to find
+    matches using different criteria; we simply read and map.  There are
+    two things we need to do 'depending':
+    
+    We may need to support interleave.  We don't really, but it's
+    convenient to do it here rather than rebuild the vector later.
+ 
+    Cascades may be additive or multiplicitive; this is not inherent in
+    the codebook, but set in the code using the codebook.  Like
+    interleaving, it's easiest to do it here.  
+    addmul==0 -> declarative (set the value)
+    addmul==1 -> additive
+    addmul==2 -> multiplicitive */
+ 
+ /* returns the [original, not compacted] entry number or -1 on eof *********/
+ long vorbis_book_decode(codebook *book, oggpack_buffer *b){
+   long packed_entry=decode_packed_entry_number(book,b);
+   if(packed_entry>=0)
+     return(book->dec_index[packed_entry]);
+   
+   /* if there's no dec_index, the codebook unpacking isn't collapsed */
+   return(packed_entry);
+ }
+ 
+ /* returns 0 on OK or -1 on eof *************************************/
+ long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,int n){
+   int step=n/book->dim;
+   long *entry = alloca(sizeof(*entry)*step);
+   float **t = alloca(sizeof(*t)*step);
+   int i,j,o;
+ 
+   for (i = 0; i < step; i++) {
+     entry[i]=decode_packed_entry_number(book,b);
+     if(entry[i]==-1)return(-1);
+     t[i] = book->valuelist+entry[i]*book->dim;
+   }
+   for(i=0,o=0;i<book->dim;i++,o+=step)
+     for (j=0;j<step;j++)
+       a[o+j]+=t[j][i];
+   return(0);
+ }
+ 
+ long vorbis_book_decodev_add(codebook *book,float *a,oggpack_buffer *b,int n){
+   int i,j,entry;
+   float *t;
+ 
+   if(book->dim>8){
+     for(i=0;i<n;){
+       entry = decode_packed_entry_number(book,b);
+       if(entry==-1)return(-1);
+       t     = book->valuelist+entry*book->dim;
+       for (j=0;j<book->dim;)
+ 	a[i++]+=t[j++];
+     }
+   }else{
+     for(i=0;i<n;){
+       entry = decode_packed_entry_number(book,b);
+       if(entry==-1)return(-1);
+       t     = book->valuelist+entry*book->dim;
+       j=0;
+       switch((int)book->dim){
+       case 8:
+ 	a[i++]+=t[j++];
+       case 7:
+ 	a[i++]+=t[j++];
+       case 6:
+ 	a[i++]+=t[j++];
+       case 5:
+ 	a[i++]+=t[j++];
+       case 4:
+ 	a[i++]+=t[j++];
+       case 3:
+ 	a[i++]+=t[j++];
+       case 2:
+ 	a[i++]+=t[j++];
+       case 1:
+ 	a[i++]+=t[j++];
+       case 0:
+ 	break;
+       }
+     }
+   }    
+   return(0);
+ }
+ 
+ long vorbis_book_decodev_set(codebook *book,float *a,oggpack_buffer *b,int n){
+   int i,j,entry;
+   float *t;
+ 
+   for(i=0;i<n;){
+     entry = decode_packed_entry_number(book,b);
+     if(entry==-1)return(-1);
+     t     = book->valuelist+entry*book->dim;
+     for (j=0;j<book->dim;)
+       a[i++]=t[j++];
+   }
+   return(0);
+ }
+ 
+ long vorbis_book_decodevv_add(codebook *book,float **a,long offset,int ch,
+ 			      oggpack_buffer *b,int n){
+   long i,j,entry;
+   int chptr=0;
+ 
+   for(i=offset/ch;i<(offset+n)/ch;){
+     entry = decode_packed_entry_number(book,b);
+     if(entry==-1)return(-1);
+     {
+       const float *t = book->valuelist+entry*book->dim;
+       for (j=0;j<book->dim;j++){
+ 	a[chptr++][i]+=t[j];
+ 	if(chptr==ch){
+ 	  chptr=0;
+ 	  i++;
+ 	}
+       }
+     }
+   }
+   return(0);
+ }
+ 
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: registry for time, floor, res backends and channel mappings
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* seems like major overkill now; the backend numbers will grow into
+    the infrastructure soon enough */
+ 
+ extern vorbis_func_floor     floor0_exportbundle;
+ extern vorbis_func_floor     floor1_exportbundle;
+ extern vorbis_func_residue   residue0_exportbundle;
+ extern vorbis_func_residue   residue1_exportbundle;
+ extern vorbis_func_residue   residue2_exportbundle;
+ extern vorbis_func_mapping   mapping0_exportbundle;
+ 
+ vorbis_func_floor     *_floor_P[]={
+   &floor0_exportbundle,
+   &floor1_exportbundle,
+ };
+ 
+ vorbis_func_residue   *_residue_P[]={
+   &residue0_exportbundle,
+   &residue1_exportbundle,
+   &residue2_exportbundle,
+ };
+ 
+ vorbis_func_mapping   *_mapping_P[]={
+   &mapping0_exportbundle,
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: normalized modified discrete cosine transform
+            power of two length transform only [64 <= n ]
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  Original algorithm adapted long ago from _The use of multirate filter
+  banks for coding of high quality digital audio_, by T. Sporer,
+  K. Brandenburg and B. Edler, collection of the European Signal
+  Processing Conference (EUSIPCO), Amsterdam, June 1992, Vol.1, pp
+  211-214
+ 
+  The below code implements an algorithm that no longer looks much like
+  that presented in the paper, but the basic structure remains if you
+  dig deep enough to see it.
+ 
+  This module DOES NOT INCLUDE code to generate/apply the window
+  function.  Everybody has their own weird favorite including me... I
+  happen to like the properties of y=sin(.5PI*sin^2(x)), but others may
+  vehemently disagree.
+ 
+  ********************************************************************/
+ 
+ /* this can also be run as an integer transform by uncommenting a
+    define in mdct.h; the integerization is a first pass and although
+    it's likely stable for Vorbis, the dynamic range is constrained and
+    roundoff isn't done (so it's noisy).  Consider it functional, but
+    only a starting point.  There's no point on a machine with an FPU */
+ 
+ /* build lookups for trig functions; also pre-figure scaling and
+    some window function algebra. */
+ 
+ void mdct_init(mdct_lookup *lookup,int n){
+   int   *bitrev=_ogg_malloc(sizeof(*bitrev)*(n/4));
+   DATA_TYPE *T=_ogg_malloc(sizeof(*T)*(n+n/4));
+   
+   int i;
+   int n2=n>>1;
+   int log2n=lookup->log2n=rint(log((float)n)/log(2.f));
+   lookup->n=n;
+   lookup->trig=T;
+   lookup->bitrev=bitrev;
+ 
+ /* trig lookups... */
+ 
+   for(i=0;i<n/4;i++){
+     T[i*2]=FLOAT_CONV(cos((M_PI/n)*(4*i)));
+     T[i*2+1]=FLOAT_CONV(-sin((M_PI/n)*(4*i)));
+     T[n2+i*2]=FLOAT_CONV(cos((M_PI/(2*n))*(2*i+1)));
+     T[n2+i*2+1]=FLOAT_CONV(sin((M_PI/(2*n))*(2*i+1)));
+   }
+   for(i=0;i<n/8;i++){
+     T[n+i*2]=FLOAT_CONV(cos((M_PI/n)*(4*i+2))*.5);
+     T[n+i*2+1]=FLOAT_CONV(-sin((M_PI/n)*(4*i+2))*.5);
+   }
+ 
+   /* bitreverse lookup... */
+ 
+   {
+     int mask=(1<<(log2n-1))-1,i,j;
+     int msb=1<<(log2n-2);
+     for(i=0;i<n/8;i++){
+       int acc=0;
+       for(j=0;msb>>j;j++)
+ 	if((msb>>j)&i)acc|=1<<j;
+       bitrev[i*2]=((~acc)&mask)-1;
+       bitrev[i*2+1]=acc;
+ 
+     }
+   }
+   lookup->scale=FLOAT_CONV(4.f/n);
+ }
+ 
+ /* 8 point butterfly (in place, 4 register) */
+ STIN void mdct_butterfly_8(DATA_TYPE *x){
+   REG_TYPE r0   = x[6] + x[2];
+   REG_TYPE r1   = x[6] - x[2];
+   REG_TYPE r2   = x[4] + x[0];
+   REG_TYPE r3   = x[4] - x[0];
+ 
+ 	   x[6] = r0   + r2;
+ 	   x[4] = r0   - r2;
+ 	   
+ 	   r0   = x[5] - x[1];
+ 	   r2   = x[7] - x[3];
+ 	   x[0] = r1   + r0;
+ 	   x[2] = r1   - r0;
+ 	   
+ 	   r0   = x[5] + x[1];
+ 	   r1   = x[7] + x[3];
+ 	   x[3] = r2   + r3;
+ 	   x[1] = r2   - r3;
+ 	   x[7] = r1   + r0;
+ 	   x[5] = r1   - r0;
+ 	   
+ }
+ 
+ /* 16 point butterfly (in place, 4 register) */
+ STIN void mdct_butterfly_16(DATA_TYPE *x){
+   REG_TYPE r0     = x[1]  - x[9];
+   REG_TYPE r1     = x[0]  - x[8];
+ 
+            x[8]  += x[0];
+            x[9]  += x[1];
+            x[0]   = MULT_NORM((r0   + r1) * cPI2_8);
+            x[1]   = MULT_NORM((r0   - r1) * cPI2_8);
+ 
+            r0     = x[3]  - x[11];
+            r1     = x[10] - x[2];
+            x[10] += x[2];
+            x[11] += x[3];
+            x[2]   = r0;
+            x[3]   = r1;
+ 
+            r0     = x[12] - x[4];
+            r1     = x[13] - x[5];
+            x[12] += x[4];
+            x[13] += x[5];
+            x[4]   = MULT_NORM((r0   - r1) * cPI2_8);
+            x[5]   = MULT_NORM((r0   + r1) * cPI2_8);
+ 
+            r0     = x[14] - x[6];
+            r1     = x[15] - x[7];
+            x[14] += x[6];
+            x[15] += x[7];
+            x[6]  = r0;
+            x[7]  = r1;
+ 
+ 	   mdct_butterfly_8(x);
+ 	   mdct_butterfly_8(x+8);
+ }
+ 
+ /* 32 point butterfly (in place, 4 register) */
+ STIN void mdct_butterfly_32(DATA_TYPE *x){
+   REG_TYPE r0     = x[30] - x[14];
+   REG_TYPE r1     = x[31] - x[15];
+ 
+            x[30] +=         x[14];           
+ 	   x[31] +=         x[15];
+            x[14]  =         r0;              
+ 	   x[15]  =         r1;
+ 
+            r0     = x[28] - x[12];   
+ 	   r1     = x[29] - x[13];
+            x[28] +=         x[12];           
+ 	   x[29] +=         x[13];
+            x[12]  = MULT_NORM( r0 * cPI1_8  -  r1 * cPI3_8 );
+ 	   x[13]  = MULT_NORM( r0 * cPI3_8  +  r1 * cPI1_8 );
+ 
+            r0     = x[26] - x[10];
+ 	   r1     = x[27] - x[11];
+ 	   x[26] +=         x[10];
+ 	   x[27] +=         x[11];
+ 	   x[10]  = MULT_NORM(( r0  - r1 ) * cPI2_8);
+ 	   x[11]  = MULT_NORM(( r0  + r1 ) * cPI2_8);
+ 
+ 	   r0     = x[24] - x[8];
+ 	   r1     = x[25] - x[9];
+ 	   x[24] += x[8];
+ 	   x[25] += x[9];
+ 	   x[8]   = MULT_NORM( r0 * cPI3_8  -  r1 * cPI1_8 );
+ 	   x[9]   = MULT_NORM( r1 * cPI3_8  +  r0 * cPI1_8 );
+ 
+ 	   r0     = x[22] - x[6];
+ 	   r1     = x[7]  - x[23];
+ 	   x[22] += x[6];
+ 	   x[23] += x[7];
+ 	   x[6]   = r1;
+ 	   x[7]   = r0;
+ 
+ 	   r0     = x[4]  - x[20];
+ 	   r1     = x[5]  - x[21];
+ 	   x[20] += x[4];
+ 	   x[21] += x[5];
+ 	   x[4]   = MULT_NORM( r1 * cPI1_8  +  r0 * cPI3_8 );
+ 	   x[5]   = MULT_NORM( r1 * cPI3_8  -  r0 * cPI1_8 );
+ 
+ 	   r0     = x[2]  - x[18];
+ 	   r1     = x[3]  - x[19];
+ 	   x[18] += x[2];
+ 	   x[19] += x[3];
+ 	   x[2]   = MULT_NORM(( r1  + r0 ) * cPI2_8);
+ 	   x[3]   = MULT_NORM(( r1  - r0 ) * cPI2_8);
+ 
+ 	   r0     = x[0]  - x[16];
+ 	   r1     = x[1]  - x[17];
+ 	   x[16] += x[0];
+ 	   x[17] += x[1];
+ 	   x[0]   = MULT_NORM( r1 * cPI3_8  +  r0 * cPI1_8 );
+ 	   x[1]   = MULT_NORM( r1 * cPI1_8  -  r0 * cPI3_8 );
+ 
+ 	   mdct_butterfly_16(x);
+ 	   mdct_butterfly_16(x+16);
+ 
+ }
+ 
+ /* N point first stage butterfly (in place, 2 register) */
+ STIN void mdct_butterfly_first(DATA_TYPE *T,
+ 					DATA_TYPE *x,
+ 					int points){
+   
+   DATA_TYPE *x1        = x          + points      - 8;
+   DATA_TYPE *x2        = x          + (points>>1) - 8;
+   REG_TYPE   r0;
+   REG_TYPE   r1;
+ 
+   do{
+     
+                r0      = x1[6]      -  x2[6];
+ 	       r1      = x1[7]      -  x2[7];
+ 	       x1[6]  += x2[6];
+ 	       x1[7]  += x2[7];
+ 	       x2[6]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
+ 	       x2[7]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
+ 	       
+ 	       r0      = x1[4]      -  x2[4];
+ 	       r1      = x1[5]      -  x2[5];
+ 	       x1[4]  += x2[4];
+ 	       x1[5]  += x2[5];
+ 	       x2[4]   = MULT_NORM(r1 * T[5]  +  r0 * T[4]);
+ 	       x2[5]   = MULT_NORM(r1 * T[4]  -  r0 * T[5]);
+ 	       
+ 	       r0      = x1[2]      -  x2[2];
+ 	       r1      = x1[3]      -  x2[3];
+ 	       x1[2]  += x2[2];
+ 	       x1[3]  += x2[3];
+ 	       x2[2]   = MULT_NORM(r1 * T[9]  +  r0 * T[8]);
+ 	       x2[3]   = MULT_NORM(r1 * T[8]  -  r0 * T[9]);
+ 	       
+ 	       r0      = x1[0]      -  x2[0];
+ 	       r1      = x1[1]      -  x2[1];
+ 	       x1[0]  += x2[0];
+ 	       x1[1]  += x2[1];
+ 	       x2[0]   = MULT_NORM(r1 * T[13] +  r0 * T[12]);
+ 	       x2[1]   = MULT_NORM(r1 * T[12] -  r0 * T[13]);
+ 	       
+     x1-=8;
+     x2-=8;
+     T+=16;
+ 
+   }while(x2>=x);
+ }
+ 
+ /* N/stage point generic N stage butterfly (in place, 2 register) */
+ STIN void mdct_butterfly_generic(DATA_TYPE *T,
+ 					  DATA_TYPE *x,
+ 					  int points,
+ 					  int trigint){
+   
+   DATA_TYPE *x1        = x          + points      - 8;
+   DATA_TYPE *x2        = x          + (points>>1) - 8;
+   REG_TYPE   r0;
+   REG_TYPE   r1;
+ 
+   do{
+     
+                r0      = x1[6]      -  x2[6];
+ 	       r1      = x1[7]      -  x2[7];
+ 	       x1[6]  += x2[6];
+ 	       x1[7]  += x2[7];
+ 	       x2[6]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
+ 	       x2[7]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
+ 	       
+ 	       T+=trigint;
+ 	       
+ 	       r0      = x1[4]      -  x2[4];
+ 	       r1      = x1[5]      -  x2[5];
+ 	       x1[4]  += x2[4];
+ 	       x1[5]  += x2[5];
+ 	       x2[4]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
+ 	       x2[5]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
+ 	       
+ 	       T+=trigint;
+ 	       
+ 	       r0      = x1[2]      -  x2[2];
+ 	       r1      = x1[3]      -  x2[3];
+ 	       x1[2]  += x2[2];
+ 	       x1[3]  += x2[3];
+ 	       x2[2]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
+ 	       x2[3]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
+ 	       
+ 	       T+=trigint;
+ 	       
+ 	       r0      = x1[0]      -  x2[0];
+ 	       r1      = x1[1]      -  x2[1];
+ 	       x1[0]  += x2[0];
+ 	       x1[1]  += x2[1];
+ 	       x2[0]   = MULT_NORM(r1 * T[1]  +  r0 * T[0]);
+ 	       x2[1]   = MULT_NORM(r1 * T[0]  -  r0 * T[1]);
+ 
+ 	       T+=trigint;
+     x1-=8;
+     x2-=8;
+ 
+   }while(x2>=x);
+ }
+ 
+ STIN void mdct_butterflies(mdct_lookup *init,
+ 			     DATA_TYPE *x,
+ 			     int points){
+   
+   DATA_TYPE *T=init->trig;
+   int stages=init->log2n-5;
+   int i,j;
+   
+   if(--stages>0){
+     mdct_butterfly_first(T,x,points);
+   }
+ 
+   for(i=1;--stages>0;i++){
+     for(j=0;j<(1<<i);j++)
+       mdct_butterfly_generic(T,x+(points>>i)*j,points>>i,4<<i);
+   }
+ 
+   for(j=0;j<points;j+=32)
+     mdct_butterfly_32(x+j);
+ 
+ }
+ 
+ void mdct_clear(mdct_lookup *l){
+   if(l){
+     if(l->trig)_ogg_free(l->trig);
+     if(l->bitrev)_ogg_free(l->bitrev);
+     memset(l,0,sizeof(*l));
+   }
+ }
+ 
+ STIN void mdct_bitreverse(mdct_lookup *init, 
+ 			    DATA_TYPE *x){
+   int        n       = init->n;
+   int       *bit     = init->bitrev;
+   DATA_TYPE *w0      = x;
+   DATA_TYPE *w1      = x = w0+(n>>1);
+   DATA_TYPE *T       = init->trig+n;
+ 
+   do{
+     DATA_TYPE *x0    = x+bit[0];
+     DATA_TYPE *x1    = x+bit[1];
+ 
+     REG_TYPE  r0     = x0[1]  - x1[1];
+     REG_TYPE  r1     = x0[0]  + x1[0];
+     REG_TYPE  r2     = MULT_NORM(r1     * T[0]   + r0 * T[1]);
+     REG_TYPE  r3     = MULT_NORM(r1     * T[1]   - r0 * T[0]);
+ 
+ 	      w1    -= 4;
+ 
+               r0     = HALVE(x0[1] + x1[1]);
+               r1     = HALVE(x0[0] - x1[0]);
+       
+ 	      w0[0]  = r0     + r2;
+ 	      w1[2]  = r0     - r2;
+ 	      w0[1]  = r1     + r3;
+ 	      w1[3]  = r3     - r1;
+ 
+               x0     = x+bit[2];
+               x1     = x+bit[3];
+ 
+               r0     = x0[1]  - x1[1];
+               r1     = x0[0]  + x1[0];
+               r2     = MULT_NORM(r1     * T[2]   + r0 * T[3]);
+               r3     = MULT_NORM(r1     * T[3]   - r0 * T[2]);
+ 
+               r0     = HALVE(x0[1] + x1[1]);
+               r1     = HALVE(x0[0] - x1[0]);
+       
+ 	      w0[2]  = r0     + r2;
+ 	      w1[0]  = r0     - r2;
+ 	      w0[3]  = r1     + r3;
+ 	      w1[1]  = r3     - r1;
+ 
+ 	      T     += 4;
+ 	      bit   += 4;
+ 	      w0    += 4;
+ 
+   }while(w0<w1);
+ }
+ 
+ void mdct_backward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){
+   int n=init->n;
+   int n2=n>>1;
+   int n4=n>>2;
+ 
+   /* rotate */
+ 
+   DATA_TYPE *iX = in+n2-7;
+   DATA_TYPE *oX = out+n2+n4;
+   DATA_TYPE *T  = init->trig+n4;
+ 
+   do{
+     oX         -= 4;
+     oX[0]       = MULT_NORM(-iX[2] * T[3] - iX[0]  * T[2]);
+     oX[1]       = MULT_NORM (iX[0] * T[3] - iX[2]  * T[2]);
+     oX[2]       = MULT_NORM(-iX[6] * T[1] - iX[4]  * T[0]);
+     oX[3]       = MULT_NORM (iX[4] * T[1] - iX[6]  * T[0]);
+     iX         -= 8;
+     T          += 4;
+   }while(iX>=in);
+ 
+   iX            = in+n2-8;
+   oX            = out+n2+n4;
+   T             = init->trig+n4;
+ 
+   do{
+     T          -= 4;
+     oX[0]       =  MULT_NORM (iX[4] * T[3] + iX[6] * T[2]);
+     oX[1]       =  MULT_NORM (iX[4] * T[2] - iX[6] * T[3]);
+     oX[2]       =  MULT_NORM (iX[0] * T[1] + iX[2] * T[0]);
+     oX[3]       =  MULT_NORM (iX[0] * T[0] - iX[2] * T[1]);
+     iX         -= 8;
+     oX         += 4;
+   }while(iX>=in);
+ 
+   mdct_butterflies(init,out+n2,n2);
+   mdct_bitreverse(init,out);
+ 
+   /* roatate + window */
+ 
+   {
+     DATA_TYPE *oX1=out+n2+n4;
+     DATA_TYPE *oX2=out+n2+n4;
+     DATA_TYPE *iX =out;
+     T             =init->trig+n2;
+     
+     do{
+       oX1-=4;
+ 
+       oX1[3]  =  MULT_NORM (iX[0] * T[1] - iX[1] * T[0]);
+       oX2[0]  = -MULT_NORM (iX[0] * T[0] + iX[1] * T[1]);
+ 
+       oX1[2]  =  MULT_NORM (iX[2] * T[3] - iX[3] * T[2]);
+       oX2[1]  = -MULT_NORM (iX[2] * T[2] + iX[3] * T[3]);
+ 
+       oX1[1]  =  MULT_NORM (iX[4] * T[5] - iX[5] * T[4]);
+       oX2[2]  = -MULT_NORM (iX[4] * T[4] + iX[5] * T[5]);
+ 
+       oX1[0]  =  MULT_NORM (iX[6] * T[7] - iX[7] * T[6]);
+       oX2[3]  = -MULT_NORM (iX[6] * T[6] + iX[7] * T[7]);
+ 
+       oX2+=4;
+       iX    +=   8;
+       T     +=   8;
+     }while(iX<oX1);
+ 
+     iX=out+n2+n4;
+     oX1=out+n4;
+     oX2=oX1;
+ 
+     do{
+       oX1-=4;
+       iX-=4;
+ 
+       oX2[0] = -(oX1[3] = iX[3]);
+       oX2[1] = -(oX1[2] = iX[2]);
+       oX2[2] = -(oX1[1] = iX[1]);
+       oX2[3] = -(oX1[0] = iX[0]);
+ 
+       oX2+=4;
+     }while(oX2<iX);
+ 
+     iX=out+n2+n4;
+     oX1=out+n2+n4;
+     oX2=out+n2;
+     do{
+       oX1-=4;
+       oX1[0]= iX[3];
+       oX1[1]= iX[2];
+       oX1[2]= iX[1];
+       oX1[3]= iX[0];
+       iX+=4;
+     }while(oX1>oX2);
+   }
+ }
+ 
+ void mdct_forward(mdct_lookup *init, DATA_TYPE *in, DATA_TYPE *out){
+   int n=init->n;
+   int n2=n>>1;
+   int n4=n>>2;
+   int n8=n>>3;
+   DATA_TYPE *w=alloca(n*sizeof(*w)); /* forward needs working space */
+   DATA_TYPE *w2=w+n2;
+ 
+   /* rotate */
+ 
+   /* window + rotate + step 1 */
+   
+   REG_TYPE r0;
+   REG_TYPE r1;
+   DATA_TYPE *x0=in+n2+n4;
+   DATA_TYPE *x1=x0+1;
+   DATA_TYPE *T=init->trig+n2;
+   
+   int i=0;
+   
+   for(i=0;i<n8;i+=2){
+     x0 -=4;
+     T-=2;
+     r0= x0[2] + x1[0];
+     r1= x0[0] + x1[2];       
+     w2[i]=   MULT_NORM(r1*T[1] + r0*T[0]);
+     w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
+     x1 +=4;
+   }
+ 
+   x1=in+1;
+   
+   for(;i<n2-n8;i+=2){
+     T-=2;
+     x0 -=4;
+     r0= x0[2] - x1[0];
+     r1= x0[0] - x1[2];       
+     w2[i]=   MULT_NORM(r1*T[1] + r0*T[0]);
+     w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
+     x1 +=4;
+   }
+     
+   x0=in+n;
+ 
+   for(;i<n2;i+=2){
+     T-=2;
+     x0 -=4;
+     r0= -x0[2] - x1[0];
+     r1= -x0[0] - x1[2];       
+     w2[i]=   MULT_NORM(r1*T[1] + r0*T[0]);
+     w2[i+1]= MULT_NORM(r1*T[0] - r0*T[1]);
+     x1 +=4;
+   }
+ 
+ 
+   mdct_butterflies(init,w+n2,n2);
+   mdct_bitreverse(init,w);
+ 
+   /* roatate + window */
+ 
+   T=init->trig+n2;
+   x0=out+n2;
+ 
+   for(i=0;i<n4;i++){
+     x0--;
+     out[i] =MULT_NORM((w[0]*T[0]+w[1]*T[1])*init->scale);
+     x0[0]  =MULT_NORM((w[0]*T[1]-w[1]*T[0])*init->scale);
+     w+=2;
+     T+=2;
+   }
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: psychoacoustics not including preecho
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: masking curve data for psychoacoustics
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #define _V_MASKING_H_
+ 
+ /* more detailed ATH; the bass if flat to save stressing the floor
+    overly for only a bin or two of savings. */
+ 
+ #define MAX_ATH 88
+ static float ATH[]={
+   /*15*/  -51, -52, -53, -54, -55, -56, -57, -58,  
+   /*31*/  -59, -60, -61, -62, -63, -64, -65, -66,
+   /*63*/  -67, -68, -69, -70, -71, -72, -73, -74, 
+   /*125*/ -75, -76, -77, -78, -80, -81, -82, -83,
+   /*250*/ -84, -85, -86, -87, -88, -88, -89, -89, 
+   /*500*/ -90, -91, -91, -92, -93, -94, -95, -96,
+   /*1k*/  -96, -97, -98, -98, -99, -99,-100,-100,
+   /*2k*/ -101,-102,-103,-104,-106,-107,-107,-107,
+   /*4k*/ -107,-105,-103,-102,-101, -99, -98, -96,
+   /*8k*/  -95, -95, -96, -97, -96, -95, -93, -90,
+   /*16k*/ -80, -70, -50, -40, -30, -30, -30, -30
+ };
+ 
+ /* The tone masking curves from Ehmer's and Fielder's papers have been
+    replaced by an empirically collected data set.  The previously
+    published values were, far too often, simply on crack. */
+ 
+ #define EHMER_OFFSET 16
+ #define EHMER_MAX 56
+ 
+ /* masking tones from -50 to 0dB, 62.5 through 16kHz at half octaves
+    test tones from -2 octaves to +5 octaves sampled at eighth octaves */
+ /* (Vorbis 0dB, the loudest possible tone, is assumed to be ~100dB SPL
+    for collection of these curves) */
+ 
+ static float tonemasks[P_BANDS][6][EHMER_MAX]={
+   /* 62.5 Hz */
+   {{ -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60, 
+      -60,  -60,  -60,  -60,  -62,  -62,  -65,  -73, 
+      -69,  -68,  -68,  -67,  -70,  -70,  -72,  -74, 
+      -75,  -79,  -79,  -80,  -83,  -88,  -93, -100, 
+      -110, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    { -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48, 
+      -48,  -48,  -48,  -48,  -48,  -53,  -61,  -66, 
+      -66,  -68,  -67,  -70,  -76,  -76,  -72,  -73, 
+      -75,  -76,  -78,  -79,  -83,  -88,  -93, -100, 
+      -110, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    { -37,  -37,  -37,  -37,  -37,  -37,  -37,  -37, 
+      -38,  -40,  -42,  -46,  -48,  -53,  -55,  -62, 
+      -65,  -58,  -56,  -56,  -61,  -60,  -65,  -67, 
+      -69,  -71,  -77,  -77,  -78,  -80,  -82,  -84, 
+      -88,  -93,  -98, -106, -112, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    { -25,  -25,  -25,  -25,  -25,  -25,  -25,  -25, 
+      -25,  -26,  -27,  -29,  -32,  -38,  -48,  -52, 
+      -52,  -50,  -48,  -48,  -51,  -52,  -54,  -60, 
+      -67,  -67,  -66,  -68,  -69,  -73,  -73,  -76, 
+      -80,  -81,  -81,  -85,  -85,  -86,  -88,  -93, 
+      -100, -110, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    { -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16, 
+      -17,  -19,  -20,  -22,  -26,  -28,  -31,  -40, 
+      -47,  -39,  -39,  -40,  -42,  -43,  -47,  -51, 
+      -57,  -52,  -55,  -55,  -60,  -58,  -62,  -63, 
+      -70,  -67,  -69,  -72,  -73,  -77,  -80,  -82, 
+      -83,  -87,  -90,  -94,  -98, -104, -115, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    {  -8,   -8,   -8,   -8,   -8,   -8,   -8,   -8, 
+       -8,   -8,  -10,  -11,  -15,  -19,  -25,  -30, 
+       -34,  -31,  -30,  -31,  -29,  -32,  -35,  -42, 
+       -48,  -42,  -44,  -46,  -50,  -50,  -51,  -52, 
+       -59,  -54,  -55,  -55,  -58,  -62,  -63,  -66, 
+       -72,  -73,  -76,  -75,  -78,  -80,  -80,  -81, 
+       -84,  -88,  -90,  -94,  -98, -101, -106, -110}}, 
+   /* 88Hz */
+   {{ -66,  -66,  -66,  -66,  -66,  -66,  -66,  -66, 
+      -66,  -66,  -66,  -66,  -66,  -67,  -67,  -67, 
+      -76,  -72,  -71,  -74,  -76,  -76,  -75,  -78, 
+      -79,  -79,  -81,  -83,  -86,  -89,  -93,  -97, 
+      -100, -105, -110, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    { -47,  -47,  -47,  -47,  -47,  -47,  -47,  -47, 
+      -47,  -47,  -47,  -48,  -51,  -55,  -59,  -66, 
+      -66,  -66,  -67,  -66,  -68,  -69,  -70,  -74, 
+      -79,  -77,  -77,  -78,  -80,  -81,  -82,  -84, 
+      -86,  -88,  -91,  -95, -100, -108, -116, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999}, 
+    { -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
+      -36,  -37,  -37,  -41,  -44,  -48,  -51,  -58, 
+      -62,  -60,  -57,  -59,  -59,  -60,  -63,  -65, 
+      -72,  -71,  -70,  -72,  -74,  -77,  -76,  -78, 
+      -81,  -81,  -80,  -83,  -86,  -91,  -96, -100, 
+      -105, -110, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    { -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28, 
+      -28,  -30,  -32,  -32,  -33,  -35,  -41,  -49, 
+      -50,  -49,  -47,  -48,  -48,  -52,  -51,  -57, 
+      -65,  -61,  -59,  -61,  -64,  -69,  -70,  -74, 
+      -77,  -77,  -78,  -81,  -84,  -85,  -87,  -90, 
+      -92,  -96, -100, -107, -112, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    { -19,  -19,  -19,  -19,  -19,  -19,  -19,  -19, 
+      -20,  -21,  -23,  -27,  -30,  -35,  -36,  -41, 
+      -46,  -44,  -42,  -40,  -41,  -41,  -43,  -48, 
+      -55,  -53,  -52,  -53,  -56,  -59,  -58,  -60, 
+      -67,  -66,  -69,  -71,  -72,  -75,  -79,  -81, 
+      -84,  -87,  -90,  -93,  -97, -101, -107, -114, 
+      -999, -999, -999, -999, -999, -999, -999, -999},
+    {  -9,   -9,   -9,   -9,   -9,   -9,   -9,   -9, 
+       -11,  -12,  -12,  -15,  -16,  -20,  -23,  -30, 
+       -37,  -34,  -33,  -34,  -31,  -32,  -32,  -38, 
+       -47,  -44,  -41,  -40,  -47,  -49,  -46,  -46, 
+       -58,  -50,  -50,  -54,  -58,  -62,  -64,  -67, 
+       -67,  -70,  -72,  -76,  -79,  -83,  -87,  -91, 
+       -96, -100, -104, -110, -999, -999, -999, -999}}, 
+   /* 125 Hz */
+   {{ -62,  -62,  -62,  -62,  -62,  -62,  -62,  -62, 
+      -62,  -62,  -63,  -64,  -66,  -67,  -66,  -68, 
+      -75,  -72,  -76,  -75,  -76,  -78,  -79,  -82, 
+      -84,  -85,  -90,  -94, -101, -110, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999}, 
+    { -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59, 
+      -59,  -59,  -59,  -60,  -60,  -61,  -63,  -66, 
+      -71,  -68,  -70,  -70,  -71,  -72,  -72,  -75, 
+      -81,  -78,  -79,  -82,  -83,  -86,  -90,  -97, 
+      -103, -113, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999}, 
+    { -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53, 
+      -53,  -54,  -55,  -57,  -56,  -57,  -55,  -61, 
+      -65,  -60,  -60,  -62,  -63,  -63,  -66,  -68, 
+      -74,  -73,  -75,  -75,  -78,  -80,  -80,  -82, 
+      -85,  -90,  -96, -101, -108, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999}, 
+    { -46,  -46,  -46,  -46,  -46,  -46,  -46,  -46, 
+      -46,  -46,  -47,  -47,  -47,  -47,  -48,  -51, 
+      -57,  -51,  -49,  -50,  -51,  -53,  -54,  -59, 
+      -66,  -60,  -62,  -67,  -67,  -70,  -72,  -75, 
+      -76,  -78,  -81,  -85,  -88,  -94,  -97, -104, 
+      -112, -999, -999, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999}, 
+    { -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36, 
+      -39,  -41,  -42,  -42,  -39,  -38,  -41,  -43, 
+      -52,  -44,  -40,  -39,  -37,  -37,  -40,  -47, 
+      -54,  -50,  -48,  -50,  -55,  -61,  -59,  -62, 
+      -66,  -66,  -66,  -69,  -69,  -73,  -74,  -74, 
+      -75,  -77,  -79,  -82,  -87,  -91,  -95, -100, 
+      -108, -115, -999, -999, -999, -999, -999, -999}, 
+    { -28,  -26,  -24,  -22,  -20,  -20,  -23,  -29, 
+      -30,  -31,  -28,  -27,  -28,  -28,  -28,  -35, 
+      -40,  -33,  -32,  -29,  -30,  -30,  -30,  -37, 
+      -45,  -41,  -37,  -38,  -45,  -47,  -47,  -48, 
+      -53,  -49,  -48,  -50,  -49,  -49,  -51,  -52, 
+      -58,  -56,  -57,  -56,  -60,  -61,  -62,  -70, 
+      -72,  -74,  -78,  -83,  -88,  -93, -100, -106}}, 
+   /* 177 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -110, -105, -100,  -95,  -91,  -87,  -83, 
+     -80,  -78,  -76,  -78,  -78,  -81,  -83,  -85, 
+     -86,  -85,  -86,  -87,  -90,  -97, -107, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -110, -105, -100,  -95,  -90, 
+     -85,  -81,  -77,  -73,  -70,  -67,  -67,  -68, 
+     -75,  -73,  -70,  -69,  -70,  -72,  -75,  -79, 
+     -84,  -83,  -84,  -86,  -88,  -89,  -89,  -93, 
+     -98, -105, -112, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-105, -100,  -95,  -90,  -85,  -80,  -76,  -71, 
+     -68,  -68,  -65,  -63,  -63,  -62,  -62,  -64, 
+     -65,  -64,  -61,  -62,  -63,  -64,  -66,  -68, 
+     -73,  -73,  -74,  -75,  -76,  -81,  -83,  -85, 
+     -88,  -89,  -92,  -95, -100, -108, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    { -80,  -75,  -71,  -68,  -65,  -63,  -62,  -61, 
+      -61,  -61,  -61,  -59,  -56,  -57,  -53,  -50, 
+      -58,  -52,  -50,  -50,  -52,  -53,  -54,  -58, 
+      -67,  -63,  -67,  -68,  -72,  -75,  -78,  -80, 
+      -81,  -81,  -82,  -85,  -89,  -90,  -93,  -97, 
+      -101, -107, -114, -999, -999, -999, -999, -999, 
+      -999, -999, -999, -999, -999, -999, -999, -999}, 
+    { -65,  -61,  -59,  -57,  -56,  -55,  -55,  -56, 
+      -56,  -57,  -55,  -53,  -52,  -47,  -44,  -44, 
+      -50,  -44,  -41,  -39,  -39,  -42,  -40,  -46, 
+      -51,  -49,  -50,  -53,  -54,  -63,  -60,  -61, 
+      -62,  -66,  -66,  -66,  -70,  -73,  -74,  -75, 
+      -76,  -75,  -79,  -85,  -89,  -91,  -96, -102, 
+      -110, -999, -999, -999, -999, -999, -999, -999}, 
+    { -52,  -50,  -49,  -49,  -48,  -48,  -48,  -49, 
+      -50,  -50,  -49,  -46,  -43,  -39,  -35,  -33, 
+      -38,  -36,  -32,  -29,  -32,  -32,  -32,  -35, 
+      -44,  -39,  -38,  -38,  -46,  -50,  -45,  -46, 
+      -53,  -50,  -50,  -50,  -54,  -54,  -53,  -53, 
+      -56,  -57,  -59,  -66,  -70,  -72,  -74,  -79, 
+      -83,  -85,  -90, -97, -114, -999, -999, -999}}, 
+   /* 250 Hz */
+   {{-999, -999, -999, -999, -999, -999, -110, -105, 
+     -100,  -95,  -90,  -86,  -80,  -75,  -75,  -79, 
+     -80,  -79,  -80,  -81,  -82,  -88,  -95, -103, 
+     -110, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -108, -103,  -98,  -93, 
+     -88,  -83,  -79,  -78,  -75,  -71,  -67,  -68, 
+     -73,  -73,  -72,  -73,  -75,  -77,  -80,  -82, 
+     -88,  -93, -100, -107, -114, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -110, -105, -101,  -96,  -90, 
+     -86,  -81,  -77,  -73,  -69,  -66,  -61,  -62, 
+     -66,  -64,  -62,  -65,  -66,  -70,  -72,  -76, 
+     -81,  -80,  -84,  -90,  -95, -102, -110, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -107, -103,  -97,  -92,  -88, 
+     -83,  -79,  -74,  -70,  -66,  -59,  -53,  -58, 
+     -62,  -55,  -54,  -54,  -54,  -58,  -61,  -62, 
+     -72,  -70,  -72,  -75,  -78,  -80,  -81,  -80, 
+     -83,  -83,  -88,  -93, -100, -107, -115, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -105, -100,  -95,  -90,  -85, 
+     -80,  -75,  -70,  -66,  -62,  -56,  -48,  -44, 
+     -48,  -46,  -46,  -43,  -46,  -48,  -48,  -51, 
+     -58,  -58,  -59,  -60,  -62,  -62,  -61,  -61, 
+     -65,  -64,  -65,  -68,  -70,  -74,  -75,  -78, 
+     -81,  -86,  -95, -110, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999,  -999, -105, -100,  -95,  -90,  -85,  -80, 
+     -75,  -70,  -65,  -61,  -55,  -49,  -39,  -33, 
+     -40,  -35,  -32,  -38,  -40,  -33,  -35,  -37, 
+     -46,  -41,  -45,  -44,  -46,  -42,  -45,  -46, 
+     -52,  -50,  -50,  -50,  -54,  -54,  -55,  -57, 
+     -62,  -64,  -66,  -68,  -70,  -76,  -81,  -90, 
+     -100, -110, -999, -999, -999, -999, -999, -999}}, 
+   /* 354 hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -105,  -98,  -90,  -85,  -82,  -83,  -80,  -78, 
+     -84,  -79,  -80,  -83,  -87,  -89,  -91,  -93, 
+     -99, -106, -117, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -105,  -98,  -90,  -85,  -80,  -75,  -70,  -68, 
+     -74,  -72,  -74,  -77,  -80,  -82,  -85,  -87, 
+     -92,  -89,  -91,  -95, -100, -106, -112, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -105,  -98,  -90,  -83,  -75,  -71,  -63,  -64, 
+     -67,  -62,  -64,  -67,  -70,  -73,  -77,  -81, 
+     -84,  -83,  -85,  -89,  -90,  -93,  -98, -104, 
+     -109, -114, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -103,  -96,  -88,  -81,  -75,  -68,  -58,  -54, 
+     -56,  -54,  -56,  -56,  -58,  -60,  -63,  -66, 
+     -74,  -69,  -72,  -72,  -75,  -74,  -77,  -81, 
+     -81,  -82,  -84,  -87,  -93,  -96,  -99, -104, 
+     -110, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -108, -102,  -96, 
+     -91,  -85,  -80,  -74,  -68,  -60,  -51,  -46, 
+     -48,  -46,  -43,  -45,  -47,  -47,  -49,  -48, 
+     -56,  -53,  -55,  -58,  -57,  -63,  -58,  -60, 
+     -66,  -64,  -67,  -70,  -70,  -74,  -77,  -84, 
+     -86,  -89,  -91,  -93,  -94, -101, -109, -118, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -108, -103,  -98,  -93,  -88, 
+     -83,  -78,  -73,  -68,  -60,  -53,  -44,  -35, 
+     -38,  -38,  -34,  -34,  -36,  -40,  -41,  -44, 
+     -51,  -45,  -46,  -47,  -46,  -54,  -50,  -49, 
+     -50,  -50,  -50,  -51,  -54,  -57,  -58,  -60, 
+     -66,  -66,  -66,  -64,  -65,  -68,  -77,  -82, 
+     -87,  -95, -110, -999, -999, -999, -999, -999}}, 
+   /* 500 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -107, -102,  -97,  -92,  -87,  -83,  -78,  -75, 
+     -82,  -79,  -83,  -85,  -89,  -92,  -95,  -98, 
+     -101, -105, -109, -113, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -106, 
+     -100,  -95,  -90,  -86,  -81,  -78,  -74,  -69, 
+     -74,  -74,  -76,  -79,  -83,  -84,  -86,  -89, 
+     -92,  -97,  -93, -100, -103, -107, -110, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -106, -100, 
+     -95, -90, -87, -83, -80, -75, -69, -60, 
+     -66, -66, -68, -70, -74, -78, -79, -81, 
+     -81, -83, -84, -87, -93, -96, -99, -103, 
+     -107, -110, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -108, -103, -98, 
+     -93, -89, -85, -82, -78, -71, -62, -55, 
+     -58, -58, -54, -54, -55, -59, -61, -62, 
+     -70, -66, -66, -67, -70, -72, -75, -78, 
+     -84, -84, -84, -88, -91, -90, -95, -98, 
+     -102, -103, -106, -110, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -108, -103,  -98,  -94, 
+     -90,  -87,  -82,  -79,  -73,  -67,  -58,  -47, 
+     -50,  -45,  -41,  -45,  -48,  -44,  -44,  -49, 
+     -54,  -51,  -48,  -47,  -49,  -50,  -51,  -57, 
+     -58,  -60,  -63,  -69,  -70,  -69,  -71,  -74, 
+     -78,  -82,  -90,  -95, -101, -105, -110, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -105, -101, -97, -93, -90, 
+     -85, -80, -77, -72, -65, -56, -48, -37, 
+     -40, -36, -34, -40, -50, -47, -38, -41, 
+     -47, -38, -35, -39, -38, -43, -40, -45, 
+     -50, -45, -44, -47, -50, -55, -48, -48, 
+     -52, -66, -70, -76, -82, -90, -97, -105, 
+     -110, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 707 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -108, -103,  -98,  -93,  -86,  -79,  -76, 
+     -83,  -81,  -85,  -87,  -89,  -93,  -98, -102, 
+     -107, -112, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -108, -103,  -98,  -93,  -86,  -79,  -71, 
+     -77,  -74,  -77,  -79,  -81,  -84,  -85,  -90, 
+     -92,  -93,  -92,  -98, -101, -108, -112, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -108, -103,  -98,  -93,  -87,  -78,  -68,  -65, 
+     -66,  -62,  -65,  -67,  -70,  -73,  -75,  -78, 
+     -82,  -82,  -83,  -84,  -91,  -93,  -98, -102, 
+     -106, -110, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -105, -100, -95, -90, -82, -74, -62, -57, 
+     -58, -56, -51, -52, -52, -54, -54, -58, 
+     -66, -59, -60, -63, -66, -69, -73, -79, 
+     -83, -84, -80, -81, -81, -82, -88, -92, 
+     -98, -105, -113, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -107, 
+     -102,  -97,  -92,  -84,  -79,  -69,  -57,  -47, 
+     -52,  -47,  -44,  -45,  -50,  -52,  -42,  -42, 
+     -53,  -43,  -43,  -48,  -51,  -56,  -55,  -52, 
+     -57,  -59,  -61,  -62,  -67,  -71,  -78,  -83, 
+     -86,  -94,  -98, -103, -110, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -105, -100, 
+     -95,  -90,  -84,  -78,  -70,  -61,  -51,  -41, 
+     -40,  -38,  -40,  -46,  -52,  -51,  -41,  -40, 
+     -46,  -40,  -38,  -38,  -41,  -46,  -41,  -46, 
+     -47,  -43,  -43,  -45,  -41,  -45,  -56,  -67, 
+     -68,  -83,  -87,  -90,  -95, -102, -107, -113, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 1000 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -109, -105, -101,  -96,  -91,  -84,  -77, 
+     -82,  -82,  -85,  -89,  -94, -100, -106, -110, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -106, -103,  -98,  -92,  -85,  -80,  -71, 
+     -75,  -72,  -76,  -80,  -84,  -86,  -89,  -93, 
+     -100, -107, -113, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -107, 
+     -104, -101,  -97,  -92,  -88,  -84,  -80,  -64, 
+     -66,  -63,  -64,  -66,  -69,  -73,  -77,  -83, 
+     -83,  -86,  -91,  -98, -104, -111, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -107, 
+     -104, -101,  -97,  -92,  -90,  -84,  -74,  -57, 
+     -58,  -52,  -55,  -54,  -50,  -52,  -50,  -52, 
+     -63,  -62,  -69,  -76,  -77,  -78,  -78,  -79, 
+     -82,  -88,  -94, -100, -106, -111, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -106, -102, 
+     -98,  -95,  -90,  -85,  -83,  -78,  -70,  -50, 
+     -50,  -41,  -44,  -49,  -47,  -50,  -50,  -44, 
+     -55,  -46,  -47,  -48,  -48,  -54,  -49,  -49, 
+     -58,  -62,  -71,  -81,  -87,  -92,  -97, -102, 
+     -108, -114, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -106, -102, 
+     -98,  -95,  -90,  -85,  -83,  -78,  -70,  -45, 
+     -43,  -41,  -47,  -50,  -51,  -50,  -49,  -45, 
+     -47,  -41,  -44,  -41,  -39,  -43,  -38,  -37, 
+     -40,  -41,  -44,  -50,  -58,  -65,  -73,  -79, 
+     -85,  -92,  -97, -101, -105, -109, -113, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 1414 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -107, -100,  -95,  -87,  -81, 
+     -85,  -83,  -88,  -93, -100, -107, -114, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -107, -101,  -95,  -88,  -83,  -76, 
+     -73,  -72,  -79,  -84,  -90,  -95, -100, -105, 
+     -110, -115, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -104,  -98,  -92,  -87,  -81,  -70, 
+     -65,  -62,  -67,  -71,  -74,  -80,  -85,  -91, 
+     -95,  -99, -103, -108, -111, -114, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -103,  -97,  -90,  -85,  -76,  -60, 
+     -56,  -54,  -60,  -62,  -61,  -56,  -63,  -65, 
+     -73,  -74,  -77,  -75,  -78,  -81,  -86,  -87, 
+     -88,  -91,  -94,  -98, -103, -110, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -105, 
+     -100,  -97,  -92,  -86,  -81,  -79,  -70,  -57, 
+     -51,  -47,  -51,  -58,  -60,  -56,  -53,  -50, 
+     -58,  -52,  -50,  -50,  -53,  -55,  -64,  -69, 
+     -71,  -85,  -82,  -78,  -81,  -85,  -95, -102, 
+     -112, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -105, 
+     -100,  -97,  -92,  -85,  -83,  -79,  -72,  -49, 
+     -40,  -43,  -43,  -54,  -56,  -51,  -50,  -40, 
+     -43,  -38,  -36,  -35,  -37,  -38,  -37,  -44, 
+     -54,  -60,  -57,  -60,  -70,  -75,  -84,  -92, 
+     -103, -112, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 2000 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -110, -102,  -95,  -89,  -82, 
+     -83,  -84,  -90,  -92,  -99, -107, -113, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -107, -101,  -95,  -89,  -83,  -72, 
+     -74,  -78,  -85,  -88,  -88,  -90,  -92,  -98, 
+     -105, -111, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -109, -103, -97, -93, -87, -81, -70, 
+     -70, -67, -75, -73, -76, -79, -81, -83, 
+     -88, -89, -97, -103, -110, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -107, -100,  -94,  -88,  -83,  -75,  -63, 
+     -59,  -59,  -63,  -66,  -60,  -62,  -67,  -67, 
+     -77,  -76,  -81,  -88,  -86,  -92,  -96, -102, 
+     -109, -116, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -105,  -98,  -92,  -86,  -81,  -73,  -56, 
+     -52,  -47,  -55,  -60,  -58,  -52,  -51,  -45, 
+     -49,  -50,  -53,  -54,  -61,  -71,  -70,  -69, 
+     -78,  -79,  -87,  -90,  -96, -104, -112, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -103,  -96,  -90,  -86,  -78,  -70,  -51, 
+     -42,  -47,  -48,  -55,  -54,  -54,  -53,  -42, 
+     -35,  -28,  -33,  -38,  -37,  -44,  -47,  -49, 
+     -54,  -63,  -68,  -78,  -82,  -89,  -94,  -99, 
+     -104, -109, -114, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 2828 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -110, -100,  -90,  -79, 
+     -85,  -81,  -82,  -82,  -89,  -94,  -99, -103, 
+     -109, -115, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -105,  -97,  -85,  -72, 
+     -74,  -70,  -70,  -70,  -76,  -85,  -91,  -93, 
+     -97, -103, -109, -115, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -112,  -93,  -81,  -68, 
+     -62,  -60,  -60,  -57,  -63,  -70,  -77,  -82, 
+     -90,  -93,  -98, -104, -109, -113, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -113, -100,  -93,  -84,  -63, 
+     -58,  -48,  -53,  -54,  -52,  -52,  -57,  -64, 
+     -66,  -76,  -83,  -81,  -85,  -85,  -90,  -95, 
+     -98, -101, -103, -106, -108, -111, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -105,  -95,  -86,  -74,  -53, 
+     -50,  -38,  -43,  -49,  -43,  -42,  -39,  -39, 
+     -46,  -52,  -57,  -56,  -72,  -69,  -74,  -81, 
+     -87,  -92,  -94,  -97,  -99, -102, -105, -108, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -108,  -99,  -90,  -76,  -66,  -45, 
+     -43,  -41,  -44,  -47,  -43,  -47,  -40,  -30, 
+     -31,  -31,  -39,  -33,  -40,  -41,  -43,  -53, 
+     -59,  -70,  -73,  -77,  -79,  -82,  -84,  -87, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 4000 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -110,  -91,  -76, 
+     -75,  -85,  -93,  -98, -104, -110, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999},
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -110,  -91,  -70, 
+     -70,  -75,  -86,  -89,  -94,  -98, -101, -106, 
+     -110, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -110,  -95,  -80,  -60, 
+     -65,  -64,  -74,  -83,  -88,  -91,  -95,  -99, 
+     -103, -107, -110, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -110,  -95,  -80,  -58, 
+     -55,  -49,  -66,  -68,  -71,  -78,  -78,  -80, 
+     -88,  -85,  -89,  -97, -100, -105, -110, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -110,  -95,  -80,  -53, 
+     -52,  -41,  -59,  -59,  -49,  -58,  -56,  -63, 
+     -86,  -79,  -90,  -93,  -98, -103, -107, -112, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -110,  -97,  -91,  -73,  -45, 
+     -40,  -33,  -53,  -61,  -49,  -54,  -50,  -50, 
+     -60,  -52,  -67,  -74,  -81,  -92,  -96, -100, 
+     -105, -110, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 5657 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -113, -106,  -99,  -92,  -77, 
+     -80,  -88,  -97, -106, -115, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -116, -109, -102,  -95,  -89,  -74, 
+     -72,  -88,  -87,  -95, -102, -109, -116, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -116, -109, -102,  -95,  -89,  -75, 
+     -66,  -74,  -77,  -78,  -86,  -87,  -90,  -96, 
+     -105, -115, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -115, -108, -101,  -94,  -88,  -66, 
+     -56,  -61,  -70,  -65,  -78,  -72,  -83,  -84, 
+     -93,  -98, -105, -110, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -110, -105,  -95,  -89,  -82,  -57, 
+     -52,  -52,  -59,  -56,  -59,  -58,  -69,  -67, 
+     -88,  -82,  -82,  -89,  -94, -100, -108, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -110, -101,  -96,  -90,  -83,  -77,  -54, 
+     -43,  -38,  -50,  -48,  -52,  -48,  -42,  -42, 
+     -51,  -52,  -53,  -59,  -65,  -71,  -78,  -85, 
+     -95, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 8000 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -120, -105,  -86,  -68, 
+     -78,  -79,  -90, -100, -110, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -120, -105,  -86,  -66, 
+     -73,  -77,  -88,  -96, -105, -115, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -120, -105,  -92,  -80,  -61, 
+     -64,  -68,  -80,  -87,  -92, -100, -110, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -120, -104,  -91,  -79,  -52, 
+     -60,  -54,  -64,  -69,  -77,  -80,  -82,  -84, 
+     -85,  -87,  -88,  -90, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -118, -100,  -87,  -77,  -49, 
+     -50,  -44,  -58,  -61,  -61,  -67,  -65,  -62, 
+     -62,  -62,  -65,  -68, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -115,  -98,  -84,  -62,  -49, 
+     -44,  -38,  -46,  -49,  -49,  -46,  -39,  -37, 
+     -39,  -40,  -42,  -43, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 11314 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -110,  -88,  -74, 
+     -77,  -82,  -82,  -85,  -90,  -94,  -99, -104, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -110,  -88,  -66, 
+     -70,  -81,  -80,  -81,  -84,  -88,  -91,  -93, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -110,  -88,  -61, 
+     -63,  -70,  -71,  -74,  -77,  -80,  -83,  -85, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -110, -86, -62, 
+     -63,  -62,  -62,  -58,  -52,  -50,  -50,  -52, 
+     -54, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -118, -108,  -84,  -53, 
+     -50,  -50,  -50,  -55,  -47,  -45,  -40,  -40, 
+     -40, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -118, -100,  -73,  -43, 
+     -37,  -42,  -43,  -53,  -38,  -37,  -35,  -35, 
+     -38, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}, 
+   /* 16000 Hz */
+   {{-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -110, -100,  -91,  -84,  -74, 
+     -80,  -80,  -80,  -80,  -80, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -110, -100,  -91,  -84,  -74, 
+     -68,  -68,  -68,  -68,  -68, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -110, -100,  -86,  -78,  -70, 
+     -60,  -45,  -30,  -21, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -110, -100,  -87,  -78,  -67, 
+     -48,  -38,  -29,  -21, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -110, -100,  -86,  -69,  -56, 
+     -45,  -35,  -33,  -29, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}, 
+    {-999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -110, -100,  -83,  -71,  -48, 
+     -27,  -38,  -37,  -34, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999, 
+     -999, -999, -999, -999, -999, -999, -999, -999}}
+ }; 
+ 
+ #define NEGINF -9999.f
+ static double stereo_threshholds[]={0.0, .5, 1.0, 1.5, 2.5, 4.5, 8.5, 16.5, 9e10};
+ 
+ vorbis_look_psy_global *_vp_global_look(vorbis_info *vi){
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy_global *gi=&ci->psy_g_param;
+   vorbis_look_psy_global *look=_ogg_calloc(1,sizeof(*look));
+ 
+   look->channels=vi->channels;
+ 
+   look->ampmax=-9999.;
+   look->gi=gi;
+   return(look);
+ }
+ 
+ void _vp_global_free(vorbis_look_psy_global *look){
+   if(look){
+     memset(look,0,sizeof(*look));
+     _ogg_free(look);
+   }
+ }
+ 
+ void _vi_gpsy_free(vorbis_info_psy_global *i){
+   if(i){
+     memset(i,0,sizeof(*i));
+     _ogg_free(i);
+   }
+ }
+ 
+ void _vi_psy_free(vorbis_info_psy *i){
+   if(i){
+     memset(i,0,sizeof(*i));
+     _ogg_free(i);
+   }
+ }
+ 
+ static void min_curve(float *c,
+ 		       float *c2){
+   int i;  
+   for(i=0;i<EHMER_MAX;i++)if(c2[i]<c[i])c[i]=c2[i];
+ }
+ static void max_curve(float *c,
+ 		       float *c2){
+   int i;  
+   for(i=0;i<EHMER_MAX;i++)if(c2[i]>c[i])c[i]=c2[i];
+ }
+ 
+ static void attenuate_curve(float *c,float att){
+   int i;
+   for(i=0;i<EHMER_MAX;i++)
+     c[i]+=att;
+ }
+ 
+ static float ***setup_tone_curves(float curveatt_dB[P_BANDS],float binHz,int n,
+ 				  float center_boost, float center_decay_rate){
+   int i,j,k,m;
+   float ath[EHMER_MAX];
+   float workc[P_BANDS][P_LEVELS][EHMER_MAX];
+   float athc[P_LEVELS][EHMER_MAX];
+   float *brute_buffer=alloca(n*sizeof(*brute_buffer));
+ 
+   float ***ret=_ogg_malloc(sizeof(*ret)*P_BANDS);
+ 
+   memset(workc,0,sizeof(workc));
+ 
+   for(i=0;i<P_BANDS;i++){
+     /* we add back in the ATH to avoid low level curves falling off to
+        -infinity and unnecessarily cutting off high level curves in the
+        curve limiting (last step). */
+ 
+     /* A half-band's settings must be valid over the whole band, and
+        it's better to mask too little than too much */  
+     int ath_offset=i*4;
+     for(j=0;j<EHMER_MAX;j++){
+       float min=999.;
+       for(k=0;k<4;k++)
+ 	if(j+k+ath_offset<MAX_ATH){
+ 	  if(min>ATH[j+k+ath_offset])min=ATH[j+k+ath_offset];
+ 	}else{
+ 	  if(min>ATH[MAX_ATH-1])min=ATH[MAX_ATH-1];
+ 	}
+       ath[j]=min;
+     }
+ 
+     /* copy curves into working space, replicate the 50dB curve to 30
+        and 40, replicate the 100dB curve to 110 */
+     for(j=0;j<6;j++)
+       memcpy(workc[i][j+2],tonemasks[i][j],EHMER_MAX*sizeof(*tonemasks[i][j]));
+     memcpy(workc[i][0],tonemasks[i][0],EHMER_MAX*sizeof(*tonemasks[i][0]));
+     memcpy(workc[i][1],tonemasks[i][0],EHMER_MAX*sizeof(*tonemasks[i][0]));
+     
+     /* apply centered curve boost/decay */
+     for(j=0;j<P_LEVELS;j++){
+       for(k=0;k<EHMER_MAX;k++){
+ 	float adj=center_boost+abs(EHMER_OFFSET-k)*center_decay_rate;
+ 	if(adj<0. && center_boost>0)adj=0.;
+ 	if(adj>0. && center_boost<0)adj=0.;
+ 	workc[i][j][k]+=adj;
+       }
+     }
+ 
+     /* normalize curves so the driving amplitude is 0dB */
+     /* make temp curves with the ATH overlayed */
+     for(j=0;j<P_LEVELS;j++){
+       attenuate_curve(workc[i][j],curveatt_dB[i]+100.-(j<2?2:j)*10.-P_LEVEL_0);
+       memcpy(athc[j],ath,EHMER_MAX*sizeof(**athc));
+       attenuate_curve(athc[j],+100.-j*10.f-P_LEVEL_0);
+       max_curve(athc[j],workc[i][j]);
+     }
+ 
+     /* Now limit the louder curves.
+        
+        the idea is this: We don't know what the playback attenuation
+        will be; 0dB SL moves every time the user twiddles the volume
+        knob. So that means we have to use a single 'most pessimal' curve
+        for all masking amplitudes, right?  Wrong.  The *loudest* sound
+        can be in (we assume) a range of ...+100dB] SL.  However, sounds
+        20dB down will be in a range ...+80], 40dB down is from ...+60],
+        etc... */
+     
+     for(j=1;j<P_LEVELS;j++){
+       min_curve(athc[j],athc[j-1]);
+       min_curve(workc[i][j],athc[j]);
+     }
+   }
+ 
+   for(i=0;i<P_BANDS;i++){
+     int hi_curve,lo_curve,bin;
+     ret[i]=_ogg_malloc(sizeof(**ret)*P_LEVELS);
+ 
+     /* low frequency curves are measured with greater resolution than
+        the MDCT/FFT will actually give us; we want the curve applied
+        to the tone data to be pessimistic and thus apply the minimum
+        masking possible for a given bin.  That means that a single bin
+        could span more than one octave and that the curve will be a
+        composite of multiple octaves.  It also may mean that a single
+        bin may span > an eighth of an octave and that the eighth
+        octave values may also be composited. */
+     
+     /* which octave curves will we be compositing? */
+     bin=floor(fromOC(i*.5)/binHz);
+     lo_curve=  ceil(toOC(bin*binHz+1)*2);
+     hi_curve=  floor(toOC((bin+1)*binHz)*2);
+     if(lo_curve>i)lo_curve=i;
+     if(lo_curve<0)lo_curve=0;
+     if(hi_curve>=P_BANDS)hi_curve=P_BANDS-1;
+ 
+     for(m=0;m<P_LEVELS;m++){
+       ret[i][m]=_ogg_malloc(sizeof(***ret)*(EHMER_MAX+2));
+       
+       for(j=0;j<n;j++)brute_buffer[j]=999.;
+       
+       /* render the curve into bins, then pull values back into curve.
+ 	 The point is that any inherent subsampling aliasing results in
+ 	 a safe minimum */
+       for(k=lo_curve;k<=hi_curve;k++){
+ 	int l=0;
+ 
+ 	for(j=0;j<EHMER_MAX;j++){
+ 	  int lo_bin= fromOC(j*.125+k*.5-2.0625)/binHz;
+ 	  int hi_bin= fromOC(j*.125+k*.5-1.9375)/binHz+1;
+ 	  
+ 	  if(lo_bin<0)lo_bin=0;
+ 	  if(lo_bin>n)lo_bin=n;
+ 	  if(lo_bin<l)l=lo_bin;
+ 	  if(hi_bin<0)hi_bin=0;
+ 	  if(hi_bin>n)hi_bin=n;
+ 
+ 	  for(;l<hi_bin && l<n;l++)
+ 	    if(brute_buffer[l]>workc[k][m][j])
+ 	      brute_buffer[l]=workc[k][m][j];
+ 	}
+ 
+ 	for(;l<n;l++)
+ 	  if(brute_buffer[l]>workc[k][m][EHMER_MAX-1])
+ 	    brute_buffer[l]=workc[k][m][EHMER_MAX-1];
+ 
+       }
+ 
+       /* be equally paranoid about being valid up to next half ocatve */
+       if(i+1<P_BANDS){
+ 	int l=0;
+ 	k=i+1;
+ 	for(j=0;j<EHMER_MAX;j++){
+ 	  int lo_bin= fromOC(j*.125+i*.5-2.0625)/binHz;
+ 	  int hi_bin= fromOC(j*.125+i*.5-1.9375)/binHz+1;
+ 	  
+ 	  if(lo_bin<0)lo_bin=0;
+ 	  if(lo_bin>n)lo_bin=n;
+ 	  if(lo_bin<l)l=lo_bin;
+ 	  if(hi_bin<0)hi_bin=0;
+ 	  if(hi_bin>n)hi_bin=n;
+ 
+ 	  for(;l<hi_bin && l<n;l++)
+ 	    if(brute_buffer[l]>workc[k][m][j])
+ 	      brute_buffer[l]=workc[k][m][j];
+ 	}
+ 
+ 	for(;l<n;l++)
+ 	  if(brute_buffer[l]>workc[k][m][EHMER_MAX-1])
+ 	    brute_buffer[l]=workc[k][m][EHMER_MAX-1];
+ 
+       }
+ 
+ 
+       for(j=0;j<EHMER_MAX;j++){
+ 	int bin=fromOC(j*.125+i*.5-2.)/binHz;
+ 	if(bin<0){
+ 	  ret[i][m][j+2]=-999.;
+ 	}else{
+ 	  if(bin>=n){
+ 	    ret[i][m][j+2]=-999.;
+ 	  }else{
+ 	    ret[i][m][j+2]=brute_buffer[bin];
+ 	  }
+ 	}
+       }
+ 
+       /* add fenceposts */
+       for(j=0;j<EHMER_OFFSET;j++)
+ 	if(ret[i][m][j+2]>-200.f)break;  
+       ret[i][m][0]=j;
+       
+       for(j=EHMER_MAX-1;j>EHMER_OFFSET+1;j--)
+ 	if(ret[i][m][j+2]>-200.f)
+ 	  break;
+       ret[i][m][1]=j;
+ 
+     }
+   }
+ 
+   return(ret);
+ }
+ 
+ void _vp_psy_init(vorbis_look_psy *p,vorbis_info_psy *vi,
+ 		  vorbis_info_psy_global *gi,int n,long rate){
+   long i,j,lo=-99,hi=1;
+   long maxoc;
+   memset(p,0,sizeof(*p));
+ 
+   p->eighth_octave_lines=gi->eighth_octave_lines;
+   p->shiftoc=rint(log(gi->eighth_octave_lines*8.f)/log(2.f))-1;
+ 
+   p->firstoc=toOC(.25f*rate*.5/n)*(1<<(p->shiftoc+1))-gi->eighth_octave_lines;
+   maxoc=toOC((n+.25f)*rate*.5/n)*(1<<(p->shiftoc+1))+.5f;
+   p->total_octave_lines=maxoc-p->firstoc+1;
+   p->ath=_ogg_malloc(n*sizeof(*p->ath));
+ 
+   p->octave=_ogg_malloc(n*sizeof(*p->octave));
+   p->bark=_ogg_malloc(n*sizeof(*p->bark));
+   p->vi=vi;
+   p->n=n;
+   p->rate=rate;
+ 
+   /* set up the lookups for a given blocksize and sample rate */
+ 
+   for(i=0,j=0;i<MAX_ATH-1;i++){
+     int endpos=rint(fromOC((i+1)*.125-2.)*2*n/rate);
+     float base=ATH[i];
+     if(j<endpos){
+       float delta=(ATH[i+1]-base)/(endpos-j);
+       for(;j<endpos && j<n;j++){
+         p->ath[j]=base+100.;
+         base+=delta;
+       }
+     }
+   }
+ 
+   for(i=0;i<n;i++){
+     float bark=toBARK(rate/(2*n)*i); 
+ 
+     for(;lo+vi->noisewindowlomin<i && 
+ 	  toBARK(rate/(2*n)*lo)<(bark-vi->noisewindowlo);lo++);
+     
+     for(;hi<=n && (hi<i+vi->noisewindowhimin ||
+ 	  toBARK(rate/(2*n)*hi)<(bark+vi->noisewindowhi));hi++);
+     
+     p->bark[i]=((lo-1)<<16)+(hi-1);
+ 
+   }
+ 
+   for(i=0;i<n;i++)
+     p->octave[i]=toOC((i+.25f)*.5*rate/n)*(1<<(p->shiftoc+1))+.5f;
+ 
+   p->tonecurves=setup_tone_curves(vi->toneatt,rate*.5/n,n,
+ 				  vi->tone_centerboost,vi->tone_decay);
+   
+   /* set up rolling noise median */
+   p->noiseoffset=_ogg_malloc(P_NOISECURVES*sizeof(*p->noiseoffset));
+   for(i=0;i<P_NOISECURVES;i++)
+     p->noiseoffset[i]=_ogg_malloc(n*sizeof(**p->noiseoffset));
+   
+   for(i=0;i<n;i++){
+     float halfoc=toOC((i+.5)*rate/(2.*n))*2.;
+     int inthalfoc;
+     float del;
+     
+     if(halfoc<0)halfoc=0;
+     if(halfoc>=P_BANDS-1)halfoc=P_BANDS-1;
+     inthalfoc=(int)halfoc;
+     del=halfoc-inthalfoc;
+     
+     for(j=0;j<P_NOISECURVES;j++)
+       p->noiseoffset[j][i]=
+ 	p->vi->noiseoff[j][inthalfoc]*(1.-del) + 
+ 	p->vi->noiseoff[j][inthalfoc+1]*del;
+     
+   }
+ #if 0
+   {
+     static int ls=0;
+     _analysis_output_always("noiseoff0",ls,p->noiseoffset[0],n,1,0,0);
+     _analysis_output_always("noiseoff1",ls,p->noiseoffset[1],n,1,0,0);
+     _analysis_output_always("noiseoff2",ls++,p->noiseoffset[2],n,1,0,0);
+   }
+ #endif
+ }
+ 
+ void _vp_psy_clear(vorbis_look_psy *p){
+   int i,j;
+   if(p){
+     if(p->ath)_ogg_free(p->ath);
+     if(p->octave)_ogg_free(p->octave);
+     if(p->bark)_ogg_free(p->bark);
+     if(p->tonecurves){
+       for(i=0;i<P_BANDS;i++){
+ 	for(j=0;j<P_LEVELS;j++){
+ 	  _ogg_free(p->tonecurves[i][j]);
+ 	}
+ 	_ogg_free(p->tonecurves[i]);
+       }
+       _ogg_free(p->tonecurves);
+     }
+     if(p->noiseoffset){
+       for(i=0;i<P_NOISECURVES;i++){
+         _ogg_free(p->noiseoffset[i]);
+       }
+       _ogg_free(p->noiseoffset);
+     }
+     memset(p,0,sizeof(*p));
+   }
+ }
+ 
+ /* octave/(8*eighth_octave_lines) x scale and dB y scale */
+ static void seed_curve(float *seed,
+ 		       const float **curves,
+ 		       float amp,
+ 		       int oc, int n,
+ 		       int linesper,float dBoffset){
+   int i,post1;
+   int seedptr;
+   const float *posts,*curve;
+ 
+   int choice=(int)((amp+dBoffset-P_LEVEL_0)*.1f);
+   choice=max(choice,0);
+   choice=min(choice,P_LEVELS-1);
+   posts=curves[choice];
+   curve=posts+2;
+   post1=(int)posts[1];
+   seedptr=oc+(posts[0]-EHMER_OFFSET)*linesper-(linesper>>1);
+ 
+   for(i=posts[0];i<post1;i++){
+     if(seedptr>0){
+       float lin=amp+curve[i];
+       if(seed[seedptr]<lin)seed[seedptr]=lin;
+     }
+     seedptr+=linesper;
+     if(seedptr>=n)break;
+   }
+ }
+ 
+ static void seed_loop(vorbis_look_psy *p,
+ 		      const float ***curves,
+ 		      const float *f, 
+ 		      const float *flr,
+ 		      float *seed,
+ 		      float specmax){
+   vorbis_info_psy *vi=p->vi;
+   long n=p->n,i;
+   float dBoffset=vi->max_curve_dB-specmax;
+ 
+   /* prime the working vector with peak values */
+ 
+   for(i=0;i<n;i++){
+     float max=f[i];
+     long oc=p->octave[i];
+     while(i+1<n && p->octave[i+1]==oc){
+       i++;
+       if(f[i]>max)max=f[i];
+     }
+     
+     if(max+6.f>flr[i]){
+       oc=oc>>p->shiftoc;
+ 
+       if(oc>=P_BANDS)oc=P_BANDS-1;
+       if(oc<0)oc=0;
+ 
+       seed_curve(seed,
+ 		 curves[oc],
+ 		 max,
+ 		 p->octave[i]-p->firstoc,
+ 		 p->total_octave_lines,
+ 		 p->eighth_octave_lines,
+ 		 dBoffset);
+     }
+   }
+ }
+ 
+ static void seed_chase(float *seeds, int linesper, long n){
+   long  *posstack=alloca(n*sizeof(*posstack));
+   float *ampstack=alloca(n*sizeof(*ampstack));
+   long   stack=0;
+   long   pos=0;
+   long   i;
+ 
+   for(i=0;i<n;i++){
+     if(stack<2){
+       posstack[stack]=i;
+       ampstack[stack++]=seeds[i];
+     }else{
+       while(1){
+ 	if(seeds[i]<ampstack[stack-1]){
+ 	  posstack[stack]=i;
+ 	  ampstack[stack++]=seeds[i];
+ 	  break;
+ 	}else{
+ 	  if(i<posstack[stack-1]+linesper){
+ 	    if(stack>1 && ampstack[stack-1]<=ampstack[stack-2] &&
+ 	       i<posstack[stack-2]+linesper){
+ 	      /* we completely overlap, making stack-1 irrelevant.  pop it */
+ 	      stack--;
+ 	      continue;
+ 	    }
+ 	  }
+ 	  posstack[stack]=i;
+ 	  ampstack[stack++]=seeds[i];
+ 	  break;
+ 
+ 	}
+       }
+     }
+   }
+ 
+   /* the stack now contains only the positions that are relevant. Scan
+      'em straight through */
+ 
+   for(i=0;i<stack;i++){
+     long endpos;
+     if(i<stack-1 && ampstack[i+1]>ampstack[i]){
+       endpos=posstack[i+1];
+     }else{
+       endpos=posstack[i]+linesper+1; /* +1 is important, else bin 0 is
+ 					discarded in short frames */
+     }
+     if(endpos>n)endpos=n;
+     for(;pos<endpos;pos++)
+       seeds[pos]=ampstack[i];
+   }
+   
+   /* there.  Linear time.  I now remember this was on a problem set I
+      had in Grad Skool... I didn't solve it at the time ;-) */
+ 
+ }
+ 
+ /* bleaugh, this is more complicated than it needs to be */
+ static void max_seeds(vorbis_look_psy *p,
+ 		      float *seed,
+ 		      float *flr){
+   long   n=p->total_octave_lines;
+   int    linesper=p->eighth_octave_lines;
+   long   linpos=0;
+   long   pos;
+ 
+   seed_chase(seed,linesper,n); /* for masking */
+  
+   pos=p->octave[0]-p->firstoc-(linesper>>1);
+ 
+   while(linpos+1<p->n){
+     float minV=seed[pos];
+     long end=((p->octave[linpos]+p->octave[linpos+1])>>1)-p->firstoc;
+     if(minV>p->vi->tone_abs_limit)minV=p->vi->tone_abs_limit;
+     while(pos+1<=end){
+       pos++;
+       if((seed[pos]>NEGINF && seed[pos]<minV) || minV==NEGINF)
+ 	minV=seed[pos];
+     }
+     
+     end=pos+p->firstoc;
+     for(;linpos<p->n && p->octave[linpos]<=end;linpos++)
+       if(flr[linpos]<minV)flr[linpos]=minV;
+   }
+   
+   {
+     float minV=seed[p->total_octave_lines-1];
+     for(;linpos<p->n;linpos++)
+       if(flr[linpos]<minV)flr[linpos]=minV;
+   }
+   
+ }
+ 
+ static void bark_noise_hybridmp(int n,const long *b,
+                                 const float *f,
+                                 float *noise,
+                                 const float offset,
+                                 const int fixed){
+   
+   float *N=alloca(n*sizeof(*N));
+   float *X=alloca(n*sizeof(*N));
+   float *XX=alloca(n*sizeof(*N));
+   float *Y=alloca(n*sizeof(*N));
+   float *XY=alloca(n*sizeof(*N));
+ 
+   float tN, tX, tXX, tY, tXY;
+   int i;
+ 
+   int lo, hi;
+   float R, A, B, D;
+   float w, x, y;
+ 
+   tN = tX = tXX = tY = tXY = 0.f;
+ 
+   y = f[0] + offset;
+   if (y < 1.f) y = 1.f;
+ 
+   w = y * y * .5;
+     
+   tN += w;
+   tX += w;
+   tY += w * y;
+ 
+   N[0] = tN;
+   X[0] = tX;
+   XX[0] = tXX;
+   Y[0] = tY;
+   XY[0] = tXY;
+ 
+   for (i = 1, x = 1.f; i < n; i++, x += 1.f) {
+     
+     y = f[i] + offset;
+     if (y < 1.f) y = 1.f;
+ 
+     w = y * y;
+     
+     tN += w;
+     tX += w * x;
+     tXX += w * x * x;
+     tY += w * y;
+     tXY += w * x * y;
+ 
+     N[i] = tN;
+     X[i] = tX;
+     XX[i] = tXX;
+     Y[i] = tY;
+     XY[i] = tXY;
+   }
+   
+   for (i = 0, x = 0.f;; i++, x += 1.f) {
+     
+     lo = b[i] >> 16;
+     if( lo>=0 ) break;
+     hi = b[i] & 0xffff;
+     
+     tN = N[hi] + N[-lo];
+     tX = X[hi] - X[-lo];
+     tXX = XX[hi] + XX[-lo];
+     tY = Y[hi] + Y[-lo];    
+     tXY = XY[hi] - XY[-lo];
+     
+     A = tY * tXX - tX * tXY;
+     B = tN * tXY - tX * tY;
+     D = tN * tXX - tX * tX;
+     R = (A + x * B) / D;
+     if (R < 0.f)
+       R = 0.f;
+     
+     noise[i] = R - offset;
+   }
+   
+   for ( ;; i++, x += 1.f) {
+     
+     lo = b[i] >> 16;
+     hi = b[i] & 0xffff;
+     if(hi>=n)break;
+     
+     tN = N[hi] - N[lo];
+     tX = X[hi] - X[lo];
+     tXX = XX[hi] - XX[lo];
+     tY = Y[hi] - Y[lo];
+     tXY = XY[hi] - XY[lo];
+     
+     A = tY * tXX - tX * tXY;
+     B = tN * tXY - tX * tY;
+     D = tN * tXX - tX * tX;
+     R = (A + x * B) / D;
+     if (R < 0.f) R = 0.f;
+     
+     noise[i] = R - offset;
+   }
+   for ( ; i < n; i++, x += 1.f) {
+     
+     R = (A + x * B) / D;
+     if (R < 0.f) R = 0.f;
+     
+     noise[i] = R - offset;
+   }
+   
+   if (fixed <= 0) return;
+   
+   for (i = 0, x = 0.f;; i++, x += 1.f) {
+     hi = i + fixed / 2;
+     lo = hi - fixed;
+     if(lo>=0)break;
+ 
+     tN = N[hi] + N[-lo];
+     tX = X[hi] - X[-lo];
+     tXX = XX[hi] + XX[-lo];
+     tY = Y[hi] + Y[-lo];
+     tXY = XY[hi] - XY[-lo];
+     
+     
+     A = tY * tXX - tX * tXY;
+     B = tN * tXY - tX * tY;
+     D = tN * tXX - tX * tX;
+     R = (A + x * B) / D;
+ 
+     if (R - offset < noise[i]) noise[i] = R - offset;
+   }
+   for ( ;; i++, x += 1.f) {
+     
+     hi = i + fixed / 2;
+     lo = hi - fixed;
+     if(hi>=n)break;
+     
+     tN = N[hi] - N[lo];
+     tX = X[hi] - X[lo];
+     tXX = XX[hi] - XX[lo];
+     tY = Y[hi] - Y[lo];
+     tXY = XY[hi] - XY[lo];
+     
+     A = tY * tXX - tX * tXY;
+     B = tN * tXY - tX * tY;
+     D = tN * tXX - tX * tX;
+     R = (A + x * B) / D;
+     
+     if (R - offset < noise[i]) noise[i] = R - offset;
+   }
+   for ( ; i < n; i++, x += 1.f) {
+     R = (A + x * B) / D;
+     if (R - offset < noise[i]) noise[i] = R - offset;
+   }
+ }
+ 
+ static float FLOOR1_fromdB_INV_LOOKUP[256]={
+   0.F, 8.81683e+06F, 8.27882e+06F, 7.77365e+06F, 
+   7.29930e+06F, 6.85389e+06F, 6.43567e+06F, 6.04296e+06F, 
+   5.67422e+06F, 5.32798e+06F, 5.00286e+06F, 4.69759e+06F, 
+   4.41094e+06F, 4.14178e+06F, 3.88905e+06F, 3.65174e+06F, 
+   3.42891e+06F, 3.21968e+06F, 3.02321e+06F, 2.83873e+06F, 
+   2.66551e+06F, 2.50286e+06F, 2.35014e+06F, 2.20673e+06F, 
+   2.07208e+06F, 1.94564e+06F, 1.82692e+06F, 1.71544e+06F, 
+   1.61076e+06F, 1.51247e+06F, 1.42018e+06F, 1.33352e+06F, 
+   1.25215e+06F, 1.17574e+06F, 1.10400e+06F, 1.03663e+06F, 
+   973377.F, 913981.F, 858210.F, 805842.F, 
+   756669.F, 710497.F, 667142.F, 626433.F, 
+   588208.F, 552316.F, 518613.F, 486967.F, 
+   457252.F, 429351.F, 403152.F, 378551.F, 
+   355452.F, 333762.F, 313396.F, 294273.F, 
+   276316.F, 259455.F, 243623.F, 228757.F, 
+   214798.F, 201691.F, 189384.F, 177828.F, 
+   166977.F, 156788.F, 147221.F, 138237.F, 
+   129802.F, 121881.F, 114444.F, 107461.F, 
+   100903.F, 94746.3F, 88964.9F, 83536.2F, 
+   78438.8F, 73652.5F, 69158.2F, 64938.1F, 
+   60975.6F, 57254.9F, 53761.2F, 50480.6F, 
+   47400.3F, 44507.9F, 41792.0F, 39241.9F, 
+   36847.3F, 34598.9F, 32487.7F, 30505.3F, 
+   28643.8F, 26896.0F, 25254.8F, 23713.7F, 
+   22266.7F, 20908.0F, 19632.2F, 18434.2F, 
+   17309.4F, 16253.1F, 15261.4F, 14330.1F, 
+   13455.7F, 12634.6F, 11863.7F, 11139.7F, 
+   10460.0F, 9821.72F, 9222.39F, 8659.64F, 
+   8131.23F, 7635.06F, 7169.17F, 6731.70F, 
+   6320.93F, 5935.23F, 5573.06F, 5232.99F, 
+   4913.67F, 4613.84F, 4332.30F, 4067.94F, 
+   3819.72F, 3586.64F, 3367.78F, 3162.28F, 
+   2969.31F, 2788.13F, 2617.99F, 2458.24F, 
+   2308.24F, 2167.39F, 2035.14F, 1910.95F, 
+   1794.35F, 1684.85F, 1582.04F, 1485.51F, 
+   1394.86F, 1309.75F, 1229.83F, 1154.78F, 
+   1084.32F, 1018.15F, 956.024F, 897.687F, 
+   842.910F, 791.475F, 743.179F, 697.830F, 
+   655.249F, 615.265F, 577.722F, 542.469F, 
+   509.367F, 478.286F, 449.101F, 421.696F, 
+   395.964F, 371.803F, 349.115F, 327.812F, 
+   307.809F, 289.026F, 271.390F, 254.830F, 
+   239.280F, 224.679F, 210.969F, 198.096F, 
+   186.008F, 174.658F, 164.000F, 153.993F, 
+   144.596F, 135.773F, 127.488F, 119.708F, 
+   112.404F, 105.545F, 99.1046F, 93.0572F, 
+   87.3788F, 82.0469F, 77.0404F, 72.3394F, 
+   67.9252F, 63.7804F, 59.8885F, 56.2341F, 
+   52.8027F, 49.5807F, 46.5553F, 43.7144F, 
+   41.0470F, 38.5423F, 36.1904F, 33.9821F, 
+   31.9085F, 29.9614F, 28.1332F, 26.4165F, 
+   24.8045F, 23.2910F, 21.8697F, 20.5352F, 
+   19.2822F, 18.1056F, 17.0008F, 15.9634F, 
+   14.9893F, 14.0746F, 13.2158F, 12.4094F, 
+   11.6522F, 10.9411F, 10.2735F, 9.64662F, 
+   9.05798F, 8.50526F, 7.98626F, 7.49894F, 
+   7.04135F, 6.61169F, 6.20824F, 5.82941F, 
+   5.47370F, 5.13970F, 4.82607F, 4.53158F, 
+   4.25507F, 3.99542F, 3.75162F, 3.52269F, 
+   3.30774F, 3.10590F, 2.91638F, 2.73842F, 
+   2.57132F, 2.41442F, 2.26709F, 2.12875F, 
+   1.99885F, 1.87688F, 1.76236F, 1.65482F, 
+   1.55384F, 1.45902F, 1.36999F, 1.28640F, 
+   1.20790F, 1.13419F, 1.06499F, 1.F
+ };
+ 
+ void _vp_remove_floor(vorbis_look_psy *p,
+ 		      float *mdct,
+ 		      int *codedflr,
+ 		      float *residue,
+ 		      int sliding_lowpass){ 
+ 
+   int i,n=p->n;
+  
+   if(sliding_lowpass>n)sliding_lowpass=n;
+   
+   for(i=0;i<sliding_lowpass;i++){
+     residue[i]=
+       mdct[i]*FLOOR1_fromdB_INV_LOOKUP[codedflr[i]];
+   }
+ 
+   for(;i<n;i++)
+     residue[i]=0.;
+ }
+ 
+ void _vp_noisemask(vorbis_look_psy *p,
+ 		   float *logmdct, 
+ 		   float *logmask){
+ 
+   int i,n=p->n;
+   float *work=alloca(n*sizeof(*work));
+ 
+   bark_noise_hybridmp(n,p->bark,logmdct,logmask,
+ 		      140.,-1);
+ 
+   for(i=0;i<n;i++)work[i]=logmdct[i]-logmask[i];
+ 
+   bark_noise_hybridmp(n,p->bark,work,logmask,0.,
+ 		      p->vi->noisewindowfixed);
+ 
+   for(i=0;i<n;i++)work[i]=logmdct[i]-work[i];
+   
+ #if 0
+   {
+     static int seq=0;
+ 
+     float work2[n];
+     for(i=0;i<n;i++){
+       work2[i]=logmask[i]+work[i];
+     }
+     
+     if(seq&1)
+       _analysis_output("median2R",seq/2,work,n,1,0,0);
+     else
+       _analysis_output("median2L",seq/2,work,n,1,0,0);
+     
+     if(seq&1)
+       _analysis_output("envelope2R",seq/2,work2,n,1,0,0);
+     else
+       _analysis_output("envelope2L",seq/2,work2,n,1,0,0);
+     seq++;
+   }
+ #endif
+ 
+   for(i=0;i<n;i++){
+     int dB=logmask[i]+.5;
+     if(dB>=NOISE_COMPAND_LEVELS)dB=NOISE_COMPAND_LEVELS-1;
+     if(dB<0)dB=0;
+     logmask[i]= work[i]+p->vi->noisecompand[dB];
+   }
+ 
+ }
+ 
+ void _vp_tonemask(vorbis_look_psy *p,
+ 		  float *logfft,
+ 		  float *logmask,
+ 		  float global_specmax,
+ 		  float local_specmax){
+ 
+   int i,n=p->n;
+ 
+   float *seed=alloca(sizeof(*seed)*p->total_octave_lines);
+   float att=local_specmax+p->vi->ath_adjatt;
+   for(i=0;i<p->total_octave_lines;i++)seed[i]=NEGINF;
+   
+   /* set the ATH (floating below localmax, not global max by a
+      specified att) */
+   if(att<p->vi->ath_maxatt)att=p->vi->ath_maxatt;
+   
+   for(i=0;i<n;i++)
+     logmask[i]=p->ath[i]+att;
+ 
+   /* tone masking */
+   seed_loop(p,(const float ***)p->tonecurves,logfft,logmask,seed,global_specmax);
+   max_seeds(p,seed,logmask);
+ 
+ }
+ 
+ void _vp_offset_and_mix(vorbis_look_psy *p,
+ 			float *noise,
+ 			float *tone,
+ 			int offset_select,
+ 			float *logmask){
+   int i,n=p->n;
+   float toneatt=p->vi->tone_masteratt[offset_select];
+   
+   for(i=0;i<n;i++){
+     float val= noise[i]+p->noiseoffset[offset_select][i];
+     if(val>p->vi->noisemaxsupp)val=p->vi->noisemaxsupp;
+     logmask[i]=max(val,tone[i]+toneatt);
+   }
+ }
+ 
+ float _vp_ampmax_decay(float amp,vorbis_dsp_state *vd){
+   vorbis_info *vi=vd->vi;
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy_global *gi=&ci->psy_g_param;
+ 
+   int n=ci->blocksizes[vd->W]/2;
+   float secs=(float)n/vi->rate;
+ 
+   amp+=secs*gi->ampmax_att_per_sec;
+   if(amp<-9999)amp=-9999;
+   return(amp);
+ }
+ 
+ static void couple_lossless(float A, float B, 
+ 			    float *qA, float *qB){
+   int test1=fabs(*qA)>fabs(*qB);
+   test1-= fabs(*qA)<fabs(*qB);
+   
+   if(!test1)test1=((fabs(A)>fabs(B))<<1)-1;
+   if(test1==1){
+     *qB=(*qA>0.f?*qA-*qB:*qB-*qA);
+   }else{
+     float temp=*qB;  
+     *qB=(*qB>0.f?*qA-*qB:*qB-*qA);
+     *qA=temp;
+   }
+ 
+   if(*qB>fabs(*qA)*1.9999f){
+     *qB= -fabs(*qA)*2.f;
+     *qA= -*qA;
+   }
+ }
+ 
+ static float hypot_lookup[32]={
+   -0.009935, -0.011245, -0.012726, -0.014397, 
+   -0.016282, -0.018407, -0.020800, -0.023494, 
+   -0.026522, -0.029923, -0.033737, -0.038010, 
+   -0.042787, -0.048121, -0.054064, -0.060671, 
+   -0.068000, -0.076109, -0.085054, -0.094892, 
+   -0.105675, -0.117451, -0.130260, -0.144134, 
+   -0.159093, -0.175146, -0.192286, -0.210490, 
+   -0.229718, -0.249913, -0.271001, -0.292893};
+ 
+ static void precomputed_couple_point(float premag,
+ 				     int floorA,int floorB,
+ 				     float *mag, float *ang){
+   
+   int test=(floorA>floorB)-1;
+   int offset=31-abs(floorA-floorB);
+   float floormag=hypot_lookup[((offset<0)-1)&offset]+1.f;
+ 
+   floormag*=FLOOR1_fromdB_INV_LOOKUP[(floorB&test)|(floorA&(~test))];
+ 
+   *mag=premag*floormag;
+   *ang=0.f;
+ }
+ 
+ /* just like below, this is currently set up to only do
+    single-step-depth coupling.  Otherwise, we'd have to do more
+    copying (which will be inevitable later) */
+ 
+ /* doing the real circular magnitude calculation is audibly superior
+    to (A+B)/sqrt(2) */
+ static float dipole_hypot(float a, float b){
+   if(a>0.){
+     if(b>0.)return sqrt(a*a+b*b);
+     if(a>-b)return sqrt(a*a-b*b);
+     return -sqrt(b*b-a*a);
+   }
+   if(b<0.)return -sqrt(a*a+b*b);
+   if(-a>b)return -sqrt(a*a-b*b);
+   return sqrt(b*b-a*a);
+ }
+ static float round_hypot(float a, float b){
+   if(a>0.){
+     if(b>0.)return sqrt(a*a+b*b);
+     if(a>-b)return sqrt(a*a+b*b);
+     return -sqrt(b*b+a*a);
+   }
+   if(b<0.)return -sqrt(a*a+b*b);
+   if(-a>b)return -sqrt(a*a+b*b);
+   return sqrt(b*b+a*a);
+ }
+ 
+ /* revert to round hypot for now */
+ float **_vp_quantize_couple_memo(vorbis_block *vb,
+ 				 vorbis_info_psy_global *g,
+ 				 vorbis_look_psy *p,
+ 				 vorbis_info_mapping0 *vi,
+ 				 float **mdct){
+   
+   int i,j,n=p->n;
+   float **ret=_vorbis_block_alloc(vb,vi->coupling_steps*sizeof(*ret));
+   int limit=g->coupling_pointlimit[p->vi->blockflag][PACKETBLOBS/2];
+   
+   for(i=0;i<vi->coupling_steps;i++){
+     float *mdctM=mdct[vi->coupling_mag[i]];
+     float *mdctA=mdct[vi->coupling_ang[i]];
+     ret[i]=_vorbis_block_alloc(vb,n*sizeof(**ret));
+     for(j=0;j<limit;j++)
+       ret[i][j]=dipole_hypot(mdctM[j],mdctA[j]);
+     for(;j<n;j++)
+       ret[i][j]=round_hypot(mdctM[j],mdctA[j]);
+   }
+ 
+   return(ret);
+ }
+ 
+ /* this is for per-channel noise normalization */
+ static int apsort(const void *a, const void *b){
+   float f1=fabs(**(float**)a);
+   float f2=fabs(**(float**)b);
+   return (f1<f2)-(f1>f2);
+ }
+ 
+ int **_vp_quantize_couple_sort(vorbis_block *vb,
+ 			       vorbis_look_psy *p,
+ 			       vorbis_info_mapping0 *vi,
+ 			       float **mags){
+ 
+ 
+   if(p->vi->normal_point_p){
+     int i,j,k,n=p->n;
+     int **ret=_vorbis_block_alloc(vb,vi->coupling_steps*sizeof(*ret));
+     int partition=p->vi->normal_partition;
+     float **work=alloca(sizeof(*work)*partition);
+     
+     for(i=0;i<vi->coupling_steps;i++){
+       ret[i]=_vorbis_block_alloc(vb,n*sizeof(**ret));
+       
+       for(j=0;j<n;j+=partition){
+ 	for(k=0;k<partition;k++)work[k]=mags[i]+k+j;
+ 	qsort(work,partition,sizeof(*work),apsort);
+ 	for(k=0;k<partition;k++)ret[i][k+j]=work[k]-mags[i];
+       }
+     }
+     return(ret);
+   }
+   return(NULL);
+ }
+ 
+ void _vp_noise_normalize_sort(vorbis_look_psy *p,
+ 			      float *magnitudes,int *sortedindex){
+   int i,j,n=p->n;
+   vorbis_info_psy *vi=p->vi;
+   int partition=vi->normal_partition;
+   float **work=alloca(sizeof(*work)*partition);
+   int start=vi->normal_start;
+ 
+   for(j=start;j<n;j+=partition){
+     if(j+partition>n)partition=n-j;
+     for(i=0;i<partition;i++)work[i]=magnitudes+i+j;
+     qsort(work,partition,sizeof(*work),apsort);
+     for(i=0;i<partition;i++){
+       sortedindex[i+j-start]=work[i]-magnitudes;
+     }
+   }
+ }
+ 
+ void _vp_noise_normalize(vorbis_look_psy *p,
+ 			 float *in,float *out,int *sortedindex){
+   int flag=0,i,j=0,n=p->n;
+   vorbis_info_psy *vi=p->vi;
+   int partition=vi->normal_partition;
+   int start=vi->normal_start;
+ 
+   if(start>n)start=n;
+ 
+   if(vi->normal_channel_p){
+     for(;j<start;j++)
+       out[j]=rint(in[j]);
+     
+     for(;j+partition<=n;j+=partition){
+       float acc=0.;
+       int k;
+       
+       for(i=j;i<j+partition;i++)
+ 	acc+=in[i]*in[i];
+       
+       for(i=0;i<partition;i++){
+ 	k=sortedindex[i+j-start];
+ 	
+ 	if(in[k]*in[k]>=.25f){
+ 	  out[k]=rint(in[k]);
+ 	  acc-=in[k]*in[k];
+ 	  flag=1;
+ 	}else{
+ 	  if(acc<vi->normal_thresh)break;
+ 	  out[k]=unitnorm(in[k]);
+ 	  acc-=1.;
+ 	}
+       }
+       
+       for(;i<partition;i++){
+ 	k=sortedindex[i+j-start];
+ 	out[k]=0.;
+       }
+     }
+   }
+   
+   for(;j<n;j++)
+     out[j]=rint(in[j]);
+   
+ }
+ 
+ void _vp_couple(int blobno,
+ 		vorbis_info_psy_global *g,
+ 		vorbis_look_psy *p,
+ 		vorbis_info_mapping0 *vi,
+ 		float **res,
+ 		float **mag_memo,
+ 		int   **mag_sort,
+ 		int   **ifloor,
+ 		int   *nonzero,
+ 		int  sliding_lowpass){
+ 
+   int i,j,k,n=p->n;
+ 
+   /* perform any requested channel coupling */
+   /* point stereo can only be used in a first stage (in this encoder)
+      because of the dependency on floor lookups */
+   for(i=0;i<vi->coupling_steps;i++){
+ 
+     /* once we're doing multistage coupling in which a channel goes
+        through more than one coupling step, the floor vector
+        magnitudes will also have to be recalculated an propogated
+        along with PCM.  Right now, we're not (that will wait until 5.1
+        most likely), so the code isn't here yet. The memory management
+        here is all assuming single depth couplings anyway. */
+ 
+     /* make sure coupling a zero and a nonzero channel results in two
+        nonzero channels. */
+     if(nonzero[vi->coupling_mag[i]] ||
+        nonzero[vi->coupling_ang[i]]){
+      
+ 
+       float *rM=res[vi->coupling_mag[i]];
+       float *rA=res[vi->coupling_ang[i]];
+       float *qM=rM+n;
+       float *qA=rA+n;
+       int *floorM=ifloor[vi->coupling_mag[i]];
+       int *floorA=ifloor[vi->coupling_ang[i]];
+       float prepoint=stereo_threshholds[g->coupling_prepointamp[blobno]];
+       float postpoint=stereo_threshholds[g->coupling_postpointamp[blobno]];
+       int partition=(p->vi->normal_point_p?p->vi->normal_partition:p->n);
+       int limit=g->coupling_pointlimit[p->vi->blockflag][blobno];
+       int pointlimit=limit;
+ 
+       nonzero[vi->coupling_mag[i]]=1; 
+       nonzero[vi->coupling_ang[i]]=1; 
+ 
+       for(j=0;j<p->n;j+=partition){
+ 	float acc=0.f;
+ 
+ 	for(k=0;k<partition;k++){
+ 	  int l=k+j;
+ 
+ 	  if(l<sliding_lowpass){
+ 	    if((l>=limit && fabs(rM[l])<postpoint && fabs(rA[l])<postpoint) ||
+ 	       (fabs(rM[l])<prepoint && fabs(rA[l])<prepoint)){
+ 
+ 
+ 	      precomputed_couple_point(mag_memo[i][l],
+ 				       floorM[l],floorA[l],
+ 				       qM+l,qA+l);
+ 
+ 	      if(rint(qM[l])==0.f)acc+=qM[l]*qM[l];
+ 	    }else{
+ 	      couple_lossless(rM[l],rA[l],qM+l,qA+l);
+ 	    }
+ 	  }else{
+ 	    qM[l]=0.;
+ 	    qA[l]=0.;
+ 	  }
+ 	}
+ 	
+ 	if(p->vi->normal_point_p){
+ 	  for(k=0;k<partition && acc>=p->vi->normal_thresh;k++){
+ 	    int l=mag_sort[i][j+k];
+ 	    if(l<sliding_lowpass && l>=pointlimit && rint(qM[l])==0.f){
+ 	      qM[l]=unitnorm(qM[l]);
+ 	      acc-=1.f;
+ 	    }
+ 	  } 
+ 	}
+       }
+     }
+   }
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: *unnormalized* fft transform
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* FFT implementation from OggSquish, minus cosine transforms,
+  * minus all but radix 2/4 case.  In Vorbis we only need this
+  * cut-down version.
+  *
+  * To do more than just power-of-two sized vectors, see the full
+  * version I wrote for NetLib.
+  *
+  * Note that the packing is a little strange; rather than the FFT r/i
+  * packing following R_0, I_n, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1,
+  * it follows R_0, R_1, I_1, R_2, I_2 ... R_n-1, I_n-1, I_n like the
+  * FORTRAN version
+  */
+ 
+ 
+ static void drfti1(int n, float *wa, int *ifac){
+   static int ntryh[4] = { 4,2,3,5 };
+   static float tpi = 6.28318530717958648f;
+   float arg,argh,argld,fi;
+   int ntry=0,i,j=-1;
+   int k1, l1, l2, ib;
+   int ld, ii, ip, is, nq, nr;
+   int ido, ipm, nfm1;
+   int nl=n;
+   int nf=0;
+ 
+  L101:
+   j++;
+   if (j < 4)
+     ntry=ntryh[j];
+   else
+     ntry+=2;
+ 
+  L104:
+   nq=nl/ntry;
+   nr=nl-ntry*nq;
+   if (nr!=0) goto L101;
+ 
+   nf++;
+   ifac[nf+1]=ntry;
+   nl=nq;
+   if(ntry!=2)goto L107;
+   if(nf==1)goto L107;
+ 
+   for (i=1;i<nf;i++){
+     ib=nf-i+1;
+     ifac[ib+1]=ifac[ib];
+   }
+   ifac[2] = 2;
+ 
+  L107:
+   if(nl!=1)goto L104;
+   ifac[0]=n;
+   ifac[1]=nf;
+   argh=tpi/n;
+   is=0;
+   nfm1=nf-1;
+   l1=1;
+ 
+   if(nfm1==0)return;
+ 
+   for (k1=0;k1<nfm1;k1++){
+     ip=ifac[k1+2];
+     ld=0;
+     l2=l1*ip;
+     ido=n/l2;
+     ipm=ip-1;
+ 
+     for (j=0;j<ipm;j++){
+       ld+=l1;
+       i=is;
+       argld=(float)ld*argh;
+       fi=0.f;
+       for (ii=2;ii<ido;ii+=2){
+ 	fi+=1.f;
+ 	arg=fi*argld;
+ 	wa[i++]=cos(arg);
+ 	wa[i++]=sin(arg);
+       }
+       is+=ido;
+     }
+     l1=l2;
+   }
+ }
+ 
+ static void fdrffti(int n, float *wsave, int *ifac){
+ 
+   if (n == 1) return;
+   drfti1(n, wsave+n, ifac);
+ }
+ 
+ static void dradf2(int ido,int l1,float *cc,float *ch,float *wa1){
+   int i,k;
+   float ti2,tr2;
+   int t0,t1,t2,t3,t4,t5,t6;
+ 
+   t1=0;
+   t0=(t2=l1*ido);
+   t3=ido<<1;
+   for(k=0;k<l1;k++){
+     ch[t1<<1]=cc[t1]+cc[t2];
+     ch[(t1<<1)+t3-1]=cc[t1]-cc[t2];
+     t1+=ido;
+     t2+=ido;
+   }
+     
+   if(ido<2)return;
+   if(ido==2)goto L105;
+ 
+   t1=0;
+   t2=t0;
+   for(k=0;k<l1;k++){
+     t3=t2;
+     t4=(t1<<1)+(ido<<1);
+     t5=t1;
+     t6=t1+t1;
+     for(i=2;i<ido;i+=2){
+       t3+=2;
+       t4-=2;
+       t5+=2;
+       t6+=2;
+       tr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
+       ti2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
+       ch[t6]=cc[t5]+ti2;
+       ch[t4]=ti2-cc[t5];
+       ch[t6-1]=cc[t5-1]+tr2;
+       ch[t4-1]=cc[t5-1]-tr2;
+     }
+     t1+=ido;
+     t2+=ido;
+   }
+ 
+   if(ido%2==1)return;
+ 
+  L105:
+   t3=(t2=(t1=ido)-1);
+   t2+=t0;
+   for(k=0;k<l1;k++){
+     ch[t1]=-cc[t2];
+     ch[t1-1]=cc[t3];
+     t1+=ido<<1;
+     t2+=ido;
+     t3+=ido;
+   }
+ }
+ 
+ static void dradf4(int ido,int l1,float *cc,float *ch,float *wa1,
+ 	    float *wa2,float *wa3){
+   static float hsqt2 = .70710678118654752f;
+   int i,k,t0,t1,t2,t3,t4,t5,t6;
+   float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
+   t0=l1*ido;
+   
+   t1=t0;
+   t4=t1<<1;
+   t2=t1+(t1<<1);
+   t3=0;
+ 
+   for(k=0;k<l1;k++){
+     tr1=cc[t1]+cc[t2];
+     tr2=cc[t3]+cc[t4];
+ 
+     ch[t5=t3<<2]=tr1+tr2;
+     ch[(ido<<2)+t5-1]=tr2-tr1;
+     ch[(t5+=(ido<<1))-1]=cc[t3]-cc[t4];
+     ch[t5]=cc[t2]-cc[t1];
+ 
+     t1+=ido;
+     t2+=ido;
+     t3+=ido;
+     t4+=ido;
+   }
+ 
+   if(ido<2)return;
+   if(ido==2)goto L105;
+ 
+ 
+   t1=0;
+   for(k=0;k<l1;k++){
+     t2=t1;
+     t4=t1<<2;
+     t5=(t6=ido<<1)+t4;
+     for(i=2;i<ido;i+=2){
+       t3=(t2+=2);
+       t4+=2;
+       t5-=2;
+ 
+       t3+=t0;
+       cr2=wa1[i-2]*cc[t3-1]+wa1[i-1]*cc[t3];
+       ci2=wa1[i-2]*cc[t3]-wa1[i-1]*cc[t3-1];
+       t3+=t0;
+       cr3=wa2[i-2]*cc[t3-1]+wa2[i-1]*cc[t3];
+       ci3=wa2[i-2]*cc[t3]-wa2[i-1]*cc[t3-1];
+       t3+=t0;
+       cr4=wa3[i-2]*cc[t3-1]+wa3[i-1]*cc[t3];
+       ci4=wa3[i-2]*cc[t3]-wa3[i-1]*cc[t3-1];
+ 
+       tr1=cr2+cr4;
+       tr4=cr4-cr2;
+       ti1=ci2+ci4;
+       ti4=ci2-ci4;
+ 
+       ti2=cc[t2]+ci3;
+       ti3=cc[t2]-ci3;
+       tr2=cc[t2-1]+cr3;
+       tr3=cc[t2-1]-cr3;
+ 
+       ch[t4-1]=tr1+tr2;
+       ch[t4]=ti1+ti2;
+ 
+       ch[t5-1]=tr3-ti4;
+       ch[t5]=tr4-ti3;
+ 
+       ch[t4+t6-1]=ti4+tr3;
+       ch[t4+t6]=tr4+ti3;
+ 
+       ch[t5+t6-1]=tr2-tr1;
+       ch[t5+t6]=ti1-ti2;
+     }
+     t1+=ido;
+   }
+   if(ido&1)return;
+ 
+  L105:
+   
+   t2=(t1=t0+ido-1)+(t0<<1);
+   t3=ido<<2;
+   t4=ido;
+   t5=ido<<1;
+   t6=ido;
+ 
+   for(k=0;k<l1;k++){
+     ti1=-hsqt2*(cc[t1]+cc[t2]);
+     tr1=hsqt2*(cc[t1]-cc[t2]);
+ 
+     ch[t4-1]=tr1+cc[t6-1];
+     ch[t4+t5-1]=cc[t6-1]-tr1;
+ 
+     ch[t4]=ti1-cc[t1+t0];
+     ch[t4+t5]=ti1+cc[t1+t0];
+ 
+     t1+=ido;
+     t2+=ido;
+     t4+=t3;
+     t6+=ido;
+   }
+ }
+ 
+ static void dradfg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
+                           float *c2,float *ch,float *ch2,float *wa){
+ 
+   static float tpi=6.283185307179586f;
+   int idij,ipph,i,j,k,l,ic,ik,is;
+   int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
+   float dc2,ai1,ai2,ar1,ar2,ds2;
+   int nbd;
+   float dcp,arg,dsp,ar1h,ar2h;
+   int idp2,ipp2;
+   
+   arg=tpi/(float)ip;
+   dcp=cos(arg);
+   dsp=sin(arg);
+   ipph=(ip+1)>>1;
+   ipp2=ip;
+   idp2=ido;
+   nbd=(ido-1)>>1;
+   t0=l1*ido;
+   t10=ip*ido;
+ 
+   if(ido==1)goto L119;
+   for(ik=0;ik<idl1;ik++)ch2[ik]=c2[ik];
+ 
+   t1=0;
+   for(j=1;j<ip;j++){
+     t1+=t0;
+     t2=t1;
+     for(k=0;k<l1;k++){
+       ch[t2]=c1[t2];
+       t2+=ido;
+     }
+   }
+ 
+   is=-ido;
+   t1=0;
+   if(nbd>l1){
+     for(j=1;j<ip;j++){
+       t1+=t0;
+       is+=ido;
+       t2= -ido+t1;
+       for(k=0;k<l1;k++){
+         idij=is-1;
+         t2+=ido;
+         t3=t2;
+         for(i=2;i<ido;i+=2){
+           idij+=2;
+           t3+=2;
+           ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
+           ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
+         }
+       }
+     }
+   }else{
+ 
+     for(j=1;j<ip;j++){
+       is+=ido;
+       idij=is-1;
+       t1+=t0;
+       t2=t1;
+       for(i=2;i<ido;i+=2){
+         idij+=2;
+         t2+=2;
+         t3=t2;
+         for(k=0;k<l1;k++){
+           ch[t3-1]=wa[idij-1]*c1[t3-1]+wa[idij]*c1[t3];
+           ch[t3]=wa[idij-1]*c1[t3]-wa[idij]*c1[t3-1];
+           t3+=ido;
+         }
+       }
+     }
+   }
+ 
+   t1=0;
+   t2=ipp2*t0;
+   if(nbd<l1){
+     for(j=1;j<ipph;j++){
+       t1+=t0;
+       t2-=t0;
+       t3=t1;
+       t4=t2;
+       for(i=2;i<ido;i+=2){
+         t3+=2;
+         t4+=2;
+         t5=t3-ido;
+         t6=t4-ido;
+         for(k=0;k<l1;k++){
+           t5+=ido;
+           t6+=ido;
+           c1[t5-1]=ch[t5-1]+ch[t6-1];
+           c1[t6-1]=ch[t5]-ch[t6];
+           c1[t5]=ch[t5]+ch[t6];
+           c1[t6]=ch[t6-1]-ch[t5-1];
+         }
+       }
+     }
+   }else{
+     for(j=1;j<ipph;j++){
+       t1+=t0;
+       t2-=t0;
+       t3=t1;
+       t4=t2;
+       for(k=0;k<l1;k++){
+         t5=t3;
+         t6=t4;
+         for(i=2;i<ido;i+=2){
+           t5+=2;
+           t6+=2;
+           c1[t5-1]=ch[t5-1]+ch[t6-1];
+           c1[t6-1]=ch[t5]-ch[t6];
+           c1[t5]=ch[t5]+ch[t6];
+           c1[t6]=ch[t6-1]-ch[t5-1];
+         }
+         t3+=ido;
+         t4+=ido;
+       }
+     }
+   }
+ 
+ L119:
+   for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
+ 
+   t1=0;
+   t2=ipp2*idl1;
+   for(j=1;j<ipph;j++){
+     t1+=t0;
+     t2-=t0;
+     t3=t1-ido;
+     t4=t2-ido;
+     for(k=0;k<l1;k++){
+       t3+=ido;
+       t4+=ido;
+       c1[t3]=ch[t3]+ch[t4];
+       c1[t4]=ch[t4]-ch[t3];
+     }
+   }
+ 
+   ar1=1.f;
+   ai1=0.f;
+   t1=0;
+   t2=ipp2*idl1;
+   t3=(ip-1)*idl1;
+   for(l=1;l<ipph;l++){
+     t1+=idl1;
+     t2-=idl1;
+     ar1h=dcp*ar1-dsp*ai1;
+     ai1=dcp*ai1+dsp*ar1;
+     ar1=ar1h;
+     t4=t1;
+     t5=t2;
+     t6=t3;
+     t7=idl1;
+ 
+     for(ik=0;ik<idl1;ik++){
+       ch2[t4++]=c2[ik]+ar1*c2[t7++];
+       ch2[t5++]=ai1*c2[t6++];
+     }
+ 
+     dc2=ar1;
+     ds2=ai1;
+     ar2=ar1;
+     ai2=ai1;
+ 
+     t4=idl1;
+     t5=(ipp2-1)*idl1;
+     for(j=2;j<ipph;j++){
+       t4+=idl1;
+       t5-=idl1;
+ 
+       ar2h=dc2*ar2-ds2*ai2;
+       ai2=dc2*ai2+ds2*ar2;
+       ar2=ar2h;
+ 
+       t6=t1;
+       t7=t2;
+       t8=t4;
+       t9=t5;
+       for(ik=0;ik<idl1;ik++){
+         ch2[t6++]+=ar2*c2[t8++];
+         ch2[t7++]+=ai2*c2[t9++];
+       }
+     }
+   }
+ 
+   t1=0;
+   for(j=1;j<ipph;j++){
+     t1+=idl1;
+     t2=t1;
+     for(ik=0;ik<idl1;ik++)ch2[ik]+=c2[t2++];
+   }
+ 
+   if(ido<l1)goto L132;
+ 
+   t1=0;
+   t2=0;
+   for(k=0;k<l1;k++){
+     t3=t1;
+     t4=t2;
+     for(i=0;i<ido;i++)cc[t4++]=ch[t3++];
+     t1+=ido;
+     t2+=t10;
+   }
+ 
+   goto L135;
+ 
+  L132:
+   for(i=0;i<ido;i++){
+     t1=i;
+     t2=i;
+     for(k=0;k<l1;k++){
+       cc[t2]=ch[t1];
+       t1+=ido;
+       t2+=t10;
+     }
+   }
+ 
+  L135:
+   t1=0;
+   t2=ido<<1;
+   t3=0;
+   t4=ipp2*t0;
+   for(j=1;j<ipph;j++){
+ 
+     t1+=t2;
+     t3+=t0;
+     t4-=t0;
+ 
+     t5=t1;
+     t6=t3;
+     t7=t4;
+ 
+     for(k=0;k<l1;k++){
+       cc[t5-1]=ch[t6];
+       cc[t5]=ch[t7];
+       t5+=t10;
+       t6+=ido;
+       t7+=ido;
+     }
+   }
+ 
+   if(ido==1)return;
+   if(nbd<l1)goto L141;
+ 
+   t1=-ido;
+   t3=0;
+   t4=0;
+   t5=ipp2*t0;
+   for(j=1;j<ipph;j++){
+     t1+=t2;
+     t3+=t2;
+     t4+=t0;
+     t5-=t0;
+     t6=t1;
+     t7=t3;
+     t8=t4;
+     t9=t5;
+     for(k=0;k<l1;k++){
+       for(i=2;i<ido;i+=2){
+         ic=idp2-i;
+         cc[i+t7-1]=ch[i+t8-1]+ch[i+t9-1];
+         cc[ic+t6-1]=ch[i+t8-1]-ch[i+t9-1];
+         cc[i+t7]=ch[i+t8]+ch[i+t9];
+         cc[ic+t6]=ch[i+t9]-ch[i+t8];
+       }
+       t6+=t10;
+       t7+=t10;
+       t8+=ido;
+       t9+=ido;
+     }
+   }
+   return;
+ 
+  L141:
+ 
+   t1=-ido;
+   t3=0;
+   t4=0;
+   t5=ipp2*t0;
+   for(j=1;j<ipph;j++){
+     t1+=t2;
+     t3+=t2;
+     t4+=t0;
+     t5-=t0;
+     for(i=2;i<ido;i+=2){
+       t6=idp2+t1-i;
+       t7=i+t3;
+       t8=i+t4;
+       t9=i+t5;
+       for(k=0;k<l1;k++){
+         cc[t7-1]=ch[t8-1]+ch[t9-1];
+         cc[t6-1]=ch[t8-1]-ch[t9-1];
+         cc[t7]=ch[t8]+ch[t9];
+         cc[t6]=ch[t9]-ch[t8];
+         t6+=t10;
+         t7+=t10;
+         t8+=ido;
+         t9+=ido;
+       }
+     }
+   }
+ }
+ 
+ static void drftf1(int n,float *c,float *ch,float *wa,int *ifac){
+   int i,k1,l1,l2;
+   int na,kh,nf;
+   int ip,iw,ido,idl1,ix2,ix3;
+ 
+   nf=ifac[1];
+   na=1;
+   l2=n;
+   iw=n;
+ 
+   for(k1=0;k1<nf;k1++){
+     kh=nf-k1;
+     ip=ifac[kh+1];
+     l1=l2/ip;
+     ido=n/l2;
+     idl1=ido*l1;
+     iw-=(ip-1)*ido;
+     na=1-na;
+ 
+     if(ip!=4)goto L102;
+ 
+     ix2=iw+ido;
+     ix3=ix2+ido;
+     if(na!=0)
+       dradf4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
+     else
+       dradf4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
+     goto L110;
+ 
+  L102:
+     if(ip!=2)goto L104;
+     if(na!=0)goto L103;
+ 
+     dradf2(ido,l1,c,ch,wa+iw-1);
+     goto L110;
+ 
+   L103:
+     dradf2(ido,l1,ch,c,wa+iw-1);
+     goto L110;
+ 
+   L104:
+     if(ido==1)na=1-na;
+     if(na!=0)goto L109;
+ 
+     dradfg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
+     na=1;
+     goto L110;
+ 
+   L109:
+     dradfg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
+     na=0;
+ 
+   L110:
+     l2=l1;
+   }
+ 
+   if(na==1)return;
+ 
+   for(i=0;i<n;i++)c[i]=ch[i];
+ }
+ 
+ static void dradb2(int ido,int l1,float *cc,float *ch,float *wa1){
+   int i,k,t0,t1,t2,t3,t4,t5,t6;
+   float ti2,tr2;
+ 
+   t0=l1*ido;
+   
+   t1=0;
+   t2=0;
+   t3=(ido<<1)-1;
+   for(k=0;k<l1;k++){
+     ch[t1]=cc[t2]+cc[t3+t2];
+     ch[t1+t0]=cc[t2]-cc[t3+t2];
+     t2=(t1+=ido)<<1;
+   }
+ 
+   if(ido<2)return;
+   if(ido==2)goto L105;
+ 
+   t1=0;
+   t2=0;
+   for(k=0;k<l1;k++){
+     t3=t1;
+     t5=(t4=t2)+(ido<<1);
+     t6=t0+t1;
+     for(i=2;i<ido;i+=2){
+       t3+=2;
+       t4+=2;
+       t5-=2;
+       t6+=2;
+       ch[t3-1]=cc[t4-1]+cc[t5-1];
+       tr2=cc[t4-1]-cc[t5-1];
+       ch[t3]=cc[t4]-cc[t5];
+       ti2=cc[t4]+cc[t5];
+       ch[t6-1]=wa1[i-2]*tr2-wa1[i-1]*ti2;
+       ch[t6]=wa1[i-2]*ti2+wa1[i-1]*tr2;
+     }
+     t2=(t1+=ido)<<1;
+   }
+ 
+   if(ido%2==1)return;
+ 
+ L105:
+   t1=ido-1;
+   t2=ido-1;
+   for(k=0;k<l1;k++){
+     ch[t1]=cc[t2]+cc[t2];
+     ch[t1+t0]=-(cc[t2+1]+cc[t2+1]);
+     t1+=ido;
+     t2+=ido<<1;
+   }
+ }
+ 
+ static void dradb3(int ido,int l1,float *cc,float *ch,float *wa1,
+                           float *wa2){
+   static float taur = -.5f;
+   static float taui = .8660254037844386f;
+   int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
+   float ci2,ci3,di2,di3,cr2,cr3,dr2,dr3,ti2,tr2;
+   t0=l1*ido;
+ 
+   t1=0;
+   t2=t0<<1;
+   t3=ido<<1;
+   t4=ido+(ido<<1);
+   t5=0;
+   for(k=0;k<l1;k++){
+     tr2=cc[t3-1]+cc[t3-1];
+     cr2=cc[t5]+(taur*tr2);
+     ch[t1]=cc[t5]+tr2;
+     ci3=taui*(cc[t3]+cc[t3]);
+     ch[t1+t0]=cr2-ci3;
+     ch[t1+t2]=cr2+ci3;
+     t1+=ido;
+     t3+=t4;
+     t5+=t4;
+   }
+ 
+   if(ido==1)return;
+ 
+   t1=0;
+   t3=ido<<1;
+   for(k=0;k<l1;k++){
+     t7=t1+(t1<<1);
+     t6=(t5=t7+t3);
+     t8=t1;
+     t10=(t9=t1+t0)+t0;
+ 
+     for(i=2;i<ido;i+=2){
+       t5+=2;
+       t6-=2;
+       t7+=2;
+       t8+=2;
+       t9+=2;
+       t10+=2;
+       tr2=cc[t5-1]+cc[t6-1];
+       cr2=cc[t7-1]+(taur*tr2);
+       ch[t8-1]=cc[t7-1]+tr2;
+       ti2=cc[t5]-cc[t6];
+       ci2=cc[t7]+(taur*ti2);
+       ch[t8]=cc[t7]+ti2;
+       cr3=taui*(cc[t5-1]-cc[t6-1]);
+       ci3=taui*(cc[t5]+cc[t6]);
+       dr2=cr2-ci3;
+       dr3=cr2+ci3;
+       di2=ci2+cr3;
+       di3=ci2-cr3;
+       ch[t9-1]=wa1[i-2]*dr2-wa1[i-1]*di2;
+       ch[t9]=wa1[i-2]*di2+wa1[i-1]*dr2;
+       ch[t10-1]=wa2[i-2]*dr3-wa2[i-1]*di3;
+       ch[t10]=wa2[i-2]*di3+wa2[i-1]*dr3;
+     }
+     t1+=ido;
+   }
+ }
+ 
+ static void dradb4(int ido,int l1,float *cc,float *ch,float *wa1,
+ 			  float *wa2,float *wa3){
+   static float sqrt2=1.414213562373095f;
+   int i,k,t0,t1,t2,t3,t4,t5,t6,t7,t8;
+   float ci2,ci3,ci4,cr2,cr3,cr4,ti1,ti2,ti3,ti4,tr1,tr2,tr3,tr4;
+   t0=l1*ido;
+   
+   t1=0;
+   t2=ido<<2;
+   t3=0;
+   t6=ido<<1;
+   for(k=0;k<l1;k++){
+     t4=t3+t6;
+     t5=t1;
+     tr3=cc[t4-1]+cc[t4-1];
+     tr4=cc[t4]+cc[t4]; 
+     tr1=cc[t3]-cc[(t4+=t6)-1];
+     tr2=cc[t3]+cc[t4-1];
+     ch[t5]=tr2+tr3;
+     ch[t5+=t0]=tr1-tr4;
+     ch[t5+=t0]=tr2-tr3;
+     ch[t5+=t0]=tr1+tr4;
+     t1+=ido;
+     t3+=t2;
+   }
+ 
+   if(ido<2)return;
+   if(ido==2)goto L105;
+ 
+   t1=0;
+   for(k=0;k<l1;k++){
+     t5=(t4=(t3=(t2=t1<<2)+t6))+t6;
+     t7=t1;
+     for(i=2;i<ido;i+=2){
+       t2+=2;
+       t3+=2;
+       t4-=2;
+       t5-=2;
+       t7+=2;
+       ti1=cc[t2]+cc[t5];
+       ti2=cc[t2]-cc[t5];
+       ti3=cc[t3]-cc[t4];
+       tr4=cc[t3]+cc[t4];
+       tr1=cc[t2-1]-cc[t5-1];
+       tr2=cc[t2-1]+cc[t5-1];
+       ti4=cc[t3-1]-cc[t4-1];
+       tr3=cc[t3-1]+cc[t4-1];
+       ch[t7-1]=tr2+tr3;
+       cr3=tr2-tr3;
+       ch[t7]=ti2+ti3;
+       ci3=ti2-ti3;
+       cr2=tr1-tr4;
+       cr4=tr1+tr4;
+       ci2=ti1+ti4;
+       ci4=ti1-ti4;
+ 
+       ch[(t8=t7+t0)-1]=wa1[i-2]*cr2-wa1[i-1]*ci2;
+       ch[t8]=wa1[i-2]*ci2+wa1[i-1]*cr2;
+       ch[(t8+=t0)-1]=wa2[i-2]*cr3-wa2[i-1]*ci3;
+       ch[t8]=wa2[i-2]*ci3+wa2[i-1]*cr3;
+       ch[(t8+=t0)-1]=wa3[i-2]*cr4-wa3[i-1]*ci4;
+       ch[t8]=wa3[i-2]*ci4+wa3[i-1]*cr4;
+     }
+     t1+=ido;
+   }
+ 
+   if(ido%2 == 1)return;
+ 
+  L105:
+ 
+   t1=ido;
+   t2=ido<<2;
+   t3=ido-1;
+   t4=ido+(ido<<1);
+   for(k=0;k<l1;k++){
+     t5=t3;
+     ti1=cc[t1]+cc[t4];
+     ti2=cc[t4]-cc[t1];
+     tr1=cc[t1-1]-cc[t4-1];
+     tr2=cc[t1-1]+cc[t4-1];
+     ch[t5]=tr2+tr2;
+     ch[t5+=t0]=sqrt2*(tr1-ti1);
+     ch[t5+=t0]=ti2+ti2;
+     ch[t5+=t0]=-sqrt2*(tr1+ti1);
+ 
+     t3+=ido;
+     t1+=t2;
+     t4+=t2;
+   }
+ }
+ 
+ static void dradbg(int ido,int ip,int l1,int idl1,float *cc,float *c1,
+             float *c2,float *ch,float *ch2,float *wa){
+   static float tpi=6.283185307179586f;
+   int idij,ipph,i,j,k,l,ik,is,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,
+       t11,t12;
+   float dc2,ai1,ai2,ar1,ar2,ds2;
+   int nbd;
+   float dcp,arg,dsp,ar1h,ar2h;
+   int ipp2;
+ 
+   t10=ip*ido;
+   t0=l1*ido;
+   arg=tpi/(float)ip;
+   dcp=cos(arg);
+   dsp=sin(arg);
+   nbd=(ido-1)>>1;
+   ipp2=ip;
+   ipph=(ip+1)>>1;
+   if(ido<l1)goto L103;
+   
+   t1=0;
+   t2=0;
+   for(k=0;k<l1;k++){
+     t3=t1;
+     t4=t2;
+     for(i=0;i<ido;i++){
+       ch[t3]=cc[t4];
+       t3++;
+       t4++;
+     }
+     t1+=ido;
+     t2+=t10;
+   }
+   goto L106;
+ 
+  L103:
+   t1=0;
+   for(i=0;i<ido;i++){
+     t2=t1;
+     t3=t1;
+     for(k=0;k<l1;k++){
+       ch[t2]=cc[t3];
+       t2+=ido;
+       t3+=t10;
+     }
+     t1++;
+   }
+ 
+  L106:
+   t1=0;
+   t2=ipp2*t0;
+   t7=(t5=ido<<1);
+   for(j=1;j<ipph;j++){
+     t1+=t0;
+     t2-=t0;
+     t3=t1;
+     t4=t2;
+     t6=t5;
+     for(k=0;k<l1;k++){
+       ch[t3]=cc[t6-1]+cc[t6-1];
+       ch[t4]=cc[t6]+cc[t6];
+       t3+=ido;
+       t4+=ido;
+       t6+=t10;
+     }
+     t5+=t7;
+   }
+ 
+   if (ido == 1)goto L116;
+   if(nbd<l1)goto L112;
+ 
+   t1=0;
+   t2=ipp2*t0;
+   t7=0;
+   for(j=1;j<ipph;j++){
+     t1+=t0;
+     t2-=t0;
+     t3=t1;
+     t4=t2;
+ 
+     t7+=(ido<<1);
+     t8=t7;
+     for(k=0;k<l1;k++){
+       t5=t3;
+       t6=t4;
+       t9=t8;
+       t11=t8;
+       for(i=2;i<ido;i+=2){
+         t5+=2;
+         t6+=2;
+         t9+=2;
+         t11-=2;
+         ch[t5-1]=cc[t9-1]+cc[t11-1];
+         ch[t6-1]=cc[t9-1]-cc[t11-1];
+         ch[t5]=cc[t9]-cc[t11];
+         ch[t6]=cc[t9]+cc[t11];
+       }
+       t3+=ido;
+       t4+=ido;
+       t8+=t10;
+     }
+   }
+   goto L116;
+ 
+  L112:
+   t1=0;
+   t2=ipp2*t0;
+   t7=0;
+   for(j=1;j<ipph;j++){
+     t1+=t0;
+     t2-=t0;
+     t3=t1;
+     t4=t2;
+     t7+=(ido<<1);
+     t8=t7;
+     t9=t7;
+     for(i=2;i<ido;i+=2){
+       t3+=2;
+       t4+=2;
+       t8+=2;
+       t9-=2;
+       t5=t3;
+       t6=t4;
+       t11=t8;
+       t12=t9;
+       for(k=0;k<l1;k++){
+         ch[t5-1]=cc[t11-1]+cc[t12-1];
+         ch[t6-1]=cc[t11-1]-cc[t12-1];
+         ch[t5]=cc[t11]-cc[t12];
+         ch[t6]=cc[t11]+cc[t12];
+         t5+=ido;
+         t6+=ido;
+         t11+=t10;
+         t12+=t10;
+       }
+     }
+   }
+ 
+ L116:
+   ar1=1.f;
+   ai1=0.f;
+   t1=0;
+   t9=(t2=ipp2*idl1);
+   t3=(ip-1)*idl1;
+   for(l=1;l<ipph;l++){
+     t1+=idl1;
+     t2-=idl1;
+ 
+     ar1h=dcp*ar1-dsp*ai1;
+     ai1=dcp*ai1+dsp*ar1;
+     ar1=ar1h;
+     t4=t1;
+     t5=t2;
+     t6=0;
+     t7=idl1;
+     t8=t3;
+     for(ik=0;ik<idl1;ik++){
+       c2[t4++]=ch2[t6++]+ar1*ch2[t7++];
+       c2[t5++]=ai1*ch2[t8++];
+     }
+     dc2=ar1;
+     ds2=ai1;
+     ar2=ar1;
+     ai2=ai1;
+ 
+     t6=idl1;
+     t7=t9-idl1;
+     for(j=2;j<ipph;j++){
+       t6+=idl1;
+       t7-=idl1;
+       ar2h=dc2*ar2-ds2*ai2;
+       ai2=dc2*ai2+ds2*ar2;
+       ar2=ar2h;
+       t4=t1;
+       t5=t2;
+       t11=t6;
+       t12=t7;
+       for(ik=0;ik<idl1;ik++){
+         c2[t4++]+=ar2*ch2[t11++];
+         c2[t5++]+=ai2*ch2[t12++];
+       }
+     }
+   }
+ 
+   t1=0;
+   for(j=1;j<ipph;j++){
+     t1+=idl1;
+     t2=t1;
+     for(ik=0;ik<idl1;ik++)ch2[ik]+=ch2[t2++];
+   }
+ 
+   t1=0;
+   t2=ipp2*t0;
+   for(j=1;j<ipph;j++){
+     t1+=t0;
+     t2-=t0;
+     t3=t1;
+     t4=t2;
+     for(k=0;k<l1;k++){
+       ch[t3]=c1[t3]-c1[t4];
+       ch[t4]=c1[t3]+c1[t4];
+       t3+=ido;
+       t4+=ido;
+     }
+   }
+ 
+   if(ido==1)goto L132;
+   if(nbd<l1)goto L128;
+ 
+   t1=0;
+   t2=ipp2*t0;
+   for(j=1;j<ipph;j++){
+     t1+=t0;
+     t2-=t0;
+     t3=t1;
+     t4=t2;
+     for(k=0;k<l1;k++){
+       t5=t3;
+       t6=t4;
+       for(i=2;i<ido;i+=2){
+         t5+=2;
+         t6+=2;
+         ch[t5-1]=c1[t5-1]-c1[t6];
+         ch[t6-1]=c1[t5-1]+c1[t6];
+         ch[t5]=c1[t5]+c1[t6-1];
+         ch[t6]=c1[t5]-c1[t6-1];
+       }
+       t3+=ido;
+       t4+=ido;
+     }
+   }
+   goto L132;
+ 
+  L128:
+   t1=0;
+   t2=ipp2*t0;
+   for(j=1;j<ipph;j++){
+     t1+=t0;
+     t2-=t0;
+     t3=t1;
+     t4=t2;
+     for(i=2;i<ido;i+=2){
+       t3+=2;
+       t4+=2;
+       t5=t3;
+       t6=t4;
+       for(k=0;k<l1;k++){
+         ch[t5-1]=c1[t5-1]-c1[t6];
+         ch[t6-1]=c1[t5-1]+c1[t6];
+         ch[t5]=c1[t5]+c1[t6-1];
+         ch[t6]=c1[t5]-c1[t6-1];
+         t5+=ido;
+         t6+=ido;
+       }
+     }
+   }
+ 
+ L132:
+   if(ido==1)return;
+ 
+   for(ik=0;ik<idl1;ik++)c2[ik]=ch2[ik];
+ 
+   t1=0;
+   for(j=1;j<ip;j++){
+     t2=(t1+=t0);
+     for(k=0;k<l1;k++){
+       c1[t2]=ch[t2];
+       t2+=ido;
+     }
+   }
+ 
+   if(nbd>l1)goto L139;
+ 
+   is= -ido-1;
+   t1=0;
+   for(j=1;j<ip;j++){
+     is+=ido;
+     t1+=t0;
+     idij=is;
+     t2=t1;
+     for(i=2;i<ido;i+=2){
+       t2+=2;
+       idij+=2;
+       t3=t2;
+       for(k=0;k<l1;k++){
+         c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
+         c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
+         t3+=ido;
+       }
+     }
+   }
+   return;
+ 
+  L139:
+   is= -ido-1;
+   t1=0;
+   for(j=1;j<ip;j++){
+     is+=ido;
+     t1+=t0;
+     t2=t1;
+     for(k=0;k<l1;k++){
+       idij=is;
+       t3=t2;
+       for(i=2;i<ido;i+=2){
+         idij+=2;
+         t3+=2;
+         c1[t3-1]=wa[idij-1]*ch[t3-1]-wa[idij]*ch[t3];
+         c1[t3]=wa[idij-1]*ch[t3]+wa[idij]*ch[t3-1];
+       }
+       t2+=ido;
+     }
+   }
+ }
+ 
+ static void drftb1(int n, float *c, float *ch, float *wa, int *ifac){
+   int i,k1,l1,l2;
+   int na;
+   int nf,ip,iw,ix2,ix3,ido,idl1;
+ 
+   nf=ifac[1];
+   na=0;
+   l1=1;
+   iw=1;
+ 
+   for(k1=0;k1<nf;k1++){
+     ip=ifac[k1 + 2];
+     l2=ip*l1;
+     ido=n/l2;
+     idl1=ido*l1;
+     if(ip!=4)goto L103;
+     ix2=iw+ido;
+     ix3=ix2+ido;
+ 
+     if(na!=0)
+       dradb4(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1);
+     else
+       dradb4(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1);
+     na=1-na;
+     goto L115;
+ 
+   L103:
+     if(ip!=2)goto L106;
+ 
+     if(na!=0)
+       dradb2(ido,l1,ch,c,wa+iw-1);
+     else
+       dradb2(ido,l1,c,ch,wa+iw-1);
+     na=1-na;
+     goto L115;
+ 
+   L106:
+     if(ip!=3)goto L109;
+ 
+     ix2=iw+ido;
+     if(na!=0)
+       dradb3(ido,l1,ch,c,wa+iw-1,wa+ix2-1);
+     else
+       dradb3(ido,l1,c,ch,wa+iw-1,wa+ix2-1);
+     na=1-na;
+     goto L115;
+ 
+   L109:
+ /*    The radix five case can be translated later..... */
+ /*    if(ip!=5)goto L112;
+ 
+     ix2=iw+ido;
+     ix3=ix2+ido;
+     ix4=ix3+ido;
+     if(na!=0)
+       dradb5(ido,l1,ch,c,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
+     else
+       dradb5(ido,l1,c,ch,wa+iw-1,wa+ix2-1,wa+ix3-1,wa+ix4-1);
+     na=1-na;
+     goto L115;
+ 
+   L112:*/
+     if(na!=0)
+       dradbg(ido,ip,l1,idl1,ch,ch,ch,c,c,wa+iw-1);
+     else
+       dradbg(ido,ip,l1,idl1,c,c,c,ch,ch,wa+iw-1);
+     if(ido==1)na=1-na;
+ 
+   L115:
+     l1=l2;
+     iw+=(ip-1)*ido;
+   }
+ 
+   if(na==0)return;
+ 
+   for(i=0;i<n;i++)c[i]=ch[i];
+ }
+ 
+ void drft_forward(drft_lookup *l,float *data){
+   if(l->n==1)return;
+   drftf1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
+ }
+ 
+ void drft_backward(drft_lookup *l,float *data){
+   if (l->n==1)return;
+   drftb1(l->n,data,l->trigcache,l->trigcache+l->n,l->splitcache);
+ }
+ 
+ void drft_init(drft_lookup *l,int n){
+   l->n=n;
+   l->trigcache=_ogg_calloc(3*n,sizeof(*l->trigcache));
+   l->splitcache=_ogg_calloc(32,sizeof(*l->splitcache));
+   fdrffti(n, l->trigcache, l->splitcache);
+ }
+ 
+ void drft_clear(drft_lookup *l){
+   if(l){
+     if(l->trigcache)_ogg_free(l->trigcache);
+     if(l->splitcache)_ogg_free(l->splitcache);
+     memset(l,0,sizeof(*l));
+   }
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: PCM data envelope analysis 
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ void _ve_envelope_init(envelope_lookup *e,vorbis_info *vi){
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy_global *gi=&ci->psy_g_param;
+   int ch=vi->channels;
+   int i,j;
+   int n=e->winlength=128;
+   e->searchstep=64; /* not random */
+ 
+   e->minenergy=gi->preecho_minenergy;
+   e->ch=ch;
+   e->storage=128;
+   e->cursor=ci->blocksizes[1]/2;
+   e->mdct_win=_ogg_calloc(n,sizeof(*e->mdct_win));
+   mdct_init(&e->mdct,n);
+ 
+   for(i=0;i<n;i++){
+     e->mdct_win[i]=sin(i/(n-1.)*M_PI);
+     e->mdct_win[i]*=e->mdct_win[i];
+   }
+ 
+   /* magic follows */
+   e->band[0].begin=2;  e->band[0].end=4;
+   e->band[1].begin=4;  e->band[1].end=5;
+   e->band[2].begin=6;  e->band[2].end=6;
+   e->band[3].begin=9;  e->band[3].end=8;
+   e->band[4].begin=13;  e->band[4].end=8;
+   e->band[5].begin=17;  e->band[5].end=8;
+   e->band[6].begin=22;  e->band[6].end=8;
+ 
+   for(j=0;j<VE_BANDS;j++){
+     n=e->band[j].end;
+     e->band[j].window=_ogg_malloc(n*sizeof(*e->band[0].window));
+     for(i=0;i<n;i++){
+       e->band[j].window[i]=sin((i+.5)/n*M_PI);
+       e->band[j].total+=e->band[j].window[i];
+     }
+     e->band[j].total=1./e->band[j].total;
+   }
+   
+   e->filter=_ogg_calloc(VE_BANDS*ch,sizeof(*e->filter));
+   e->mark=_ogg_calloc(e->storage,sizeof(*e->mark));
+ 
+ }
+ 
+ void _ve_envelope_clear(envelope_lookup *e){
+   int i;
+   mdct_clear(&e->mdct);
+   for(i=0;i<VE_BANDS;i++)
+     _ogg_free(e->band[i].window);
+   _ogg_free(e->mdct_win);
+   _ogg_free(e->filter);
+   _ogg_free(e->mark);
+   memset(e,0,sizeof(*e));
+ }
+ 
+ /* fairly straight threshhold-by-band based until we find something
+    that works better and isn't patented. */
+ 
+ static int _ve_amp(envelope_lookup *ve,
+ 		   vorbis_info_psy_global *gi,
+ 		   float *data,
+ 		   envelope_band *bands,
+ 		   envelope_filter_state *filters,
+ 		   long pos){
+   long n=ve->winlength;
+   int ret=0;
+   long i,j;
+   float decay;
+ 
+   /* we want to have a 'minimum bar' for energy, else we're just
+      basing blocks on quantization noise that outweighs the signal
+      itself (for low power signals) */
+ 
+   float minV=ve->minenergy;
+   float *vec=alloca(n*sizeof(*vec));
+ 
+   /* stretch is used to gradually lengthen the number of windows
+      considered prevoius-to-potential-trigger */
+   int stretch=max(VE_MINSTRETCH,ve->stretch/2);
+   float penalty=gi->stretch_penalty-(ve->stretch/2-VE_MINSTRETCH);
+   if(penalty<0.f)penalty=0.f;
+   if(penalty>gi->stretch_penalty)penalty=gi->stretch_penalty;
+   
+   /*_analysis_output_always("lpcm",seq2,data,n,0,0,
+     totalshift+pos*ve->searchstep);*/
+   
+  /* window and transform */
+   for(i=0;i<n;i++)
+     vec[i]=data[i]*ve->mdct_win[i];
+   mdct_forward(&ve->mdct,vec,vec);
+   
+   /*_analysis_output_always("mdct",seq2,vec,n/2,0,1,0); */
+ 
+   /* near-DC spreading function; this has nothing to do with
+      psychoacoustics, just sidelobe leakage and window size */
+   {
+     float temp=vec[0]*vec[0]+.7*vec[1]*vec[1]+.2*vec[2]*vec[2];
+     int ptr=filters->nearptr;
+ 
+     /* the accumulation is regularly refreshed from scratch to avoid
+        floating point creep */
+     if(ptr==0){
+       decay=filters->nearDC_acc=filters->nearDC_partialacc+temp;
+       filters->nearDC_partialacc=temp;
+     }else{
+       decay=filters->nearDC_acc+=temp;
+       filters->nearDC_partialacc+=temp;
+     }
+     filters->nearDC_acc-=filters->nearDC[ptr];
+     filters->nearDC[ptr]=temp;
+ 
+     decay*=(1./(VE_NEARDC+1));
+     filters->nearptr++;
+     if(filters->nearptr>=VE_NEARDC)filters->nearptr=0;
+     decay=todB(&decay)*.5-15.f;
+   }
+   
+   /* perform spreading and limiting, also smooth the spectrum.  yes,
+      the MDCT results in all real coefficients, but it still *behaves*
+      like real/imaginary pairs */
+   for(i=0;i<n/2;i+=2){
+     float val=vec[i]*vec[i]+vec[i+1]*vec[i+1];
+     val=todB(&val)*.5f;
+     if(val<decay)val=decay;
+     if(val<minV)val=minV;
+     vec[i>>1]=val;
+     decay-=8.;
+   }
+ 
+   /*_analysis_output_always("spread",seq2++,vec,n/4,0,0,0);*/
+   
+   /* perform preecho/postecho triggering by band */
+   for(j=0;j<VE_BANDS;j++){
+     float acc=0.;
+     float valmax,valmin;
+ 
+     /* accumulate amplitude */
+     for(i=0;i<bands[j].end;i++)
+       acc+=vec[i+bands[j].begin]*bands[j].window[i];
+    
+     acc*=bands[j].total;
+ 
+     /* convert amplitude to delta */
+     {
+       int p,this=filters[j].ampptr;
+       float postmax,postmin,premax=-99999.f,premin=99999.f;
+       
+       p=this;
+       p--;
+       if(p<0)p+=VE_AMP;
+       postmax=max(acc,filters[j].ampbuf[p]);
+       postmin=min(acc,filters[j].ampbuf[p]);
+       
+       for(i=0;i<stretch;i++){
+ 	p--;
+ 	if(p<0)p+=VE_AMP;
+ 	premax=max(premax,filters[j].ampbuf[p]);
+ 	premin=min(premin,filters[j].ampbuf[p]);
+       }
+       
+       valmin=postmin-premin;
+       valmax=postmax-premax;
+ 
+       /*filters[j].markers[pos]=valmax;*/
+       filters[j].ampbuf[this]=acc;
+       filters[j].ampptr++;
+       if(filters[j].ampptr>=VE_AMP)filters[j].ampptr=0;
+     }
+ 
+     /* look at min/max, decide trigger */
+     if(valmax>gi->preecho_thresh[j]+penalty){
+       ret|=1;
+       ret|=4;
+     }
+     if(valmin<gi->postecho_thresh[j]-penalty)ret|=2;
+   }
+  
+   return(ret);
+ }
+ 
+ #if 0
+ static int seq=0;
+ static ogg_int64_t totalshift=-1024;
+ #endif
+ 
+ long _ve_envelope_search(vorbis_dsp_state *v){
+   vorbis_info *vi=v->vi;
+   codec_setup_info *ci=vi->codec_setup;
+   vorbis_info_psy_global *gi=&ci->psy_g_param;
+   envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
+   long i,j;
+ 
+   int first=ve->current/ve->searchstep;
+   int last=v->pcm_current/ve->searchstep-VE_WIN;
+   if(first<0)first=0;
+ 
+   /* make sure we have enough storage to match the PCM */
+   if(last+VE_WIN+VE_POST>ve->storage){
+     ve->storage=last+VE_WIN+VE_POST; /* be sure */
+     ve->mark=_ogg_realloc(ve->mark,ve->storage*sizeof(*ve->mark));
+   }
+ 
+   for(j=first;j<last;j++){
+     int ret=0;
+ 
+     ve->stretch++;
+     if(ve->stretch>VE_MAXSTRETCH*2)
+       ve->stretch=VE_MAXSTRETCH*2;
+     
+     for(i=0;i<ve->ch;i++){
+       float *pcm=v->pcm[i]+ve->searchstep*(j);
+       ret|=_ve_amp(ve,gi,pcm,ve->band,ve->filter+i*VE_BANDS,j);
+     }
+ 
+     ve->mark[j+VE_POST]=0;
+     if(ret&1){
+       ve->mark[j]=1;
+       ve->mark[j+1]=1;
+     }
+ 
+     if(ret&2){
+       ve->mark[j]=1;
+       if(j>0)ve->mark[j-1]=1;
+     }
+ 
+     if(ret&4)ve->stretch=-1;
+   }
+ 
+   ve->current=last*ve->searchstep;
+ 
+   {
+     long centerW=v->centerW;
+     long testW=
+       centerW+
+       ci->blocksizes[v->W]/4+
+       ci->blocksizes[1]/2+
+       ci->blocksizes[0]/4;
+     
+     j=ve->cursor;
+     
+     while(j<ve->current-(ve->searchstep)){/* account for postecho
+                                              working back one window */
+       if(j>=testW)return(1);
+  
+       ve->cursor=j;
+ 
+       if(ve->mark[j/ve->searchstep]){
+ 	if(j>centerW){
+ 
+ 	  #if 0
+ 	  if(j>ve->curmark){
+ 	    float *marker=alloca(v->pcm_current*sizeof(*marker));
+ 	    int l,m;
+ 	    memset(marker,0,sizeof(*marker)*v->pcm_current);
+ 	    fprintf(stderr,"mark! seq=%d, cursor:%fs time:%fs\n",
+ 		    seq,
+ 		    (totalshift+ve->cursor)/44100.,
+ 		    (totalshift+j)/44100.);
+ 	    _analysis_output_always("pcmL",seq,v->pcm[0],v->pcm_current,0,0,totalshift);
+ 	    _analysis_output_always("pcmR",seq,v->pcm[1],v->pcm_current,0,0,totalshift);
+ 
+ 	    _analysis_output_always("markL",seq,v->pcm[0],j,0,0,totalshift);
+ 	    _analysis_output_always("markR",seq,v->pcm[1],j,0,0,totalshift);
+ 	    
+ 	    for(m=0;m<VE_BANDS;m++){
+ 	      char buf[80];
+ 	      sprintf(buf,"delL%d",m);
+ 	      for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m].markers[l]*.1;
+ 	      _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
+ 	    }
+ 
+ 	    for(m=0;m<VE_BANDS;m++){
+ 	      char buf[80];
+ 	      sprintf(buf,"delR%d",m);
+ 	      for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->filter[m+VE_BANDS].markers[l]*.1;
+ 	      _analysis_output_always(buf,seq,marker,v->pcm_current,0,0,totalshift);
+ 	    }
+ 
+ 	    for(l=0;l<last;l++)marker[l*ve->searchstep]=ve->mark[l]*.4;
+ 	    _analysis_output_always("mark",seq,marker,v->pcm_current,0,0,totalshift);
+ 	   
+ 	    
+ 	    seq++;
+ 	    
+ 	  }
+ #endif
+ 
+ 	  ve->curmark=j;
+ 	  if(j>=testW)return(1);
+ 	  return(0);
+ 	}
+       }
+       j+=ve->searchstep;
+     }
+   }
+   
+   return(-1);
+ }
+ 
+ int _ve_envelope_mark(vorbis_dsp_state *v){
+   envelope_lookup *ve=((private_state *)(v->backend_state))->ve;
+   vorbis_info *vi=v->vi;
+   codec_setup_info *ci=vi->codec_setup;
+   long centerW=v->centerW;
+   long beginW=centerW-ci->blocksizes[v->W]/4;
+   long endW=centerW+ci->blocksizes[v->W]/4;
+   if(v->W){
+     beginW-=ci->blocksizes[v->lW]/4;
+     endW+=ci->blocksizes[v->nW]/4;
+   }else{
+     beginW-=ci->blocksizes[0]/4;
+     endW+=ci->blocksizes[0]/4;
+   }
+ 
+   if(ve->curmark>=beginW && ve->curmark<endW)return(1);
+   {
+     long first=beginW/ve->searchstep;
+     long last=endW/ve->searchstep;
+     long i;
+     for(i=first;i<last;i++)
+       if(ve->mark[i])return(1);
+   }
+   return(0);
+ }
+ 
+ void _ve_envelope_shift(envelope_lookup *e,long shift){
+   int smallsize=e->current/e->searchstep+VE_POST; /* adjust for placing marks
+ 						     ahead of ve->current */
+   int smallshift=shift/e->searchstep;
+ 
+   memmove(e->mark,e->mark+smallshift,(smallsize-smallshift)*sizeof(*e->mark));
+   
+   #if 0
+   for(i=0;i<VE_BANDS*e->ch;i++)
+     memmove(e->filter[i].markers,
+ 	    e->filter[i].markers+smallshift,
+ 	    (1024-smallshift)*sizeof(*(*e->filter).markers));
+   totalshift+=shift;
+   #endif 
+ 
+   e->current-=shift;
+   if(e->curmark>=0)
+     e->curmark-=shift;
+   e->cursor-=shift;
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+   function: LPC low level routines
+   last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* Some of these routines (autocorrelator, LPC coefficient estimator)
+    are derived from code written by Jutta Degener and Carsten Bormann;
+    thus we include their copyright below.  The entirety of this file
+    is freely redistributable on the condition that both of these
+    copyright notices are preserved without modification.  */
+ 
+ /* Preserved Copyright: *********************************************/
+ 
+ /* Copyright 1992, 1993, 1994 by Jutta Degener and Carsten Bormann,
+ Technische Universita"t Berlin
+ 
+ Any use of this software is permitted provided that this notice is not
+ removed and that neither the authors nor the Technische Universita"t
+ Berlin are deemed to have made any representations as to the
+ suitability of this software for any purpose nor are held responsible
+ for any defects of this software. THERE IS ABSOLUTELY NO WARRANTY FOR
+ THIS SOFTWARE.
+ 
+ As a matter of courtesy, the authors request to be informed about uses
+ this software has found, about bugs in this software, and about any
+ improvements that may be of general interest.
+ 
+ Berlin, 28.11.1994
+ Jutta Degener
+ Carsten Bormann
+ 
+ *********************************************************************/
+ 
+ /* Autocorrelation LPC coeff generation algorithm invented by
+    N. Levinson in 1947, modified by J. Durbin in 1959. */
+ 
+ /* Input : n elements of time doamin data
+    Output: m lpc coefficients, excitation energy */
+ 
+ float vorbis_lpc_from_data(float *data,float *lpci,int n,int m){
+   double *aut=alloca(sizeof(*aut)*(m+1));
+   double *lpc=alloca(sizeof(*lpc)*(m));
+   double error;
+   int i,j;
+ 
+   /* autocorrelation, p+1 lag coefficients */
+   j=m+1;
+   while(j--){
+     double d=0; /* double needed for accumulator depth */
+     for(i=j;i<n;i++)d+=(double)data[i]*data[i-j];
+     aut[j]=d;
+   }
+   
+   /* Generate lpc coefficients from autocorr values */
+ 
+   error=aut[0];
+   
+   for(i=0;i<m;i++){
+     double r= -aut[i+1];
+ 
+     if(error==0){
+       memset(lpci,0,m*sizeof(*lpci));
+       return 0;
+     }
+ 
+     /* Sum up this iteration's reflection coefficient; note that in
+        Vorbis we don't save it.  If anyone wants to recycle this code
+        and needs reflection coefficients, save the results of 'r' from
+        each iteration. */
+ 
+     for(j=0;j<i;j++)r-=lpc[j]*aut[i-j];
+     r/=error; 
+ 
+     /* Update LPC coefficients and total error */
+     
+     lpc[i]=r;
+     for(j=0;j<i/2;j++){
+       double tmp=lpc[j];
+ 
+       lpc[j]+=r*lpc[i-1-j];
+       lpc[i-1-j]+=r*tmp;
+     }
+     if(i%2)lpc[j]+=lpc[j]*r;
+ 
+     error*=1.f-r*r;
+   }
+ 
+   for(j=0;j<m;j++)lpci[j]=(float)lpc[j];
+ 
+   /* we need the error value to know how big an impulse to hit the
+      filter with later */
+   
+   return error;
+ }
+ 
+ void vorbis_lpc_predict(float *coeff,float *prime,int m,
+                      float *data,long n){
+ 
+   /* in: coeff[0...m-1] LPC coefficients 
+          prime[0...m-1] initial values (allocated size of n+m-1)
+     out: data[0...n-1] data samples */
+ 
+   long i,j,o,p;
+   float y;
+   float *work=alloca(sizeof(*work)*(m+n));
+ 
+   if(!prime)
+     for(i=0;i<m;i++)
+       work[i]=0.f;
+   else
+     for(i=0;i<m;i++)
+       work[i]=prime[i];
+ 
+   for(i=0;i<n;i++){
+     y=0;
+     o=i;
+     p=m;
+     for(j=0;j<m;j++)
+       y-=work[o++]*coeff[--p];
+     
+     data[i]=work[o]=y;
+   }
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: window functions
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ 
+ static float vwin64[32] = {
+   0.0009460463F, 0.0085006468F, 0.0235352254F, 0.0458950567F, 
+   0.0753351908F, 0.1115073077F, 0.1539457973F, 0.2020557475F, 
+   0.2551056759F, 0.3122276645F, 0.3724270287F, 0.4346027792F, 
+   0.4975789974F, 0.5601459521F, 0.6211085051F, 0.6793382689F, 
+   0.7338252629F, 0.7837245849F, 0.8283939355F, 0.8674186656F, 
+   0.9006222429F, 0.9280614787F, 0.9500073081F, 0.9669131782F, 
+   0.9793740220F, 0.9880792941F, 0.9937636139F, 0.9971582668F, 
+   0.9989462667F, 0.9997230082F, 0.9999638688F, 0.9999995525F, 
+ };
+ 
+ static float vwin128[64] = {
+   0.0002365472F, 0.0021280687F, 0.0059065254F, 0.0115626550F, 
+   0.0190823442F, 0.0284463735F, 0.0396300935F, 0.0526030430F, 
+   0.0673285281F, 0.0837631763F, 0.1018564887F, 0.1215504095F, 
+   0.1427789367F, 0.1654677960F, 0.1895342001F, 0.2148867160F, 
+   0.2414252576F, 0.2690412240F, 0.2976177952F, 0.3270303960F, 
+   0.3571473350F, 0.3878306189F, 0.4189369387F, 0.4503188188F, 
+   0.4818259135F, 0.5133064334F, 0.5446086751F, 0.5755826278F, 
+   0.6060816248F, 0.6359640047F, 0.6650947483F, 0.6933470543F, 
+   0.7206038179F, 0.7467589810F, 0.7717187213F, 0.7954024542F, 
+   0.8177436264F, 0.8386902831F, 0.8582053981F, 0.8762669622F, 
+   0.8928678298F, 0.9080153310F, 0.9217306608F, 0.9340480615F, 
+   0.9450138200F, 0.9546851041F, 0.9631286621F, 0.9704194171F, 
+   0.9766389810F, 0.9818741197F, 0.9862151938F, 0.9897546035F, 
+   0.9925852598F, 0.9947991032F, 0.9964856900F, 0.9977308602F, 
+   0.9986155015F, 0.9992144193F, 0.9995953200F, 0.9998179155F, 
+   0.9999331503F, 0.9999825563F, 0.9999977357F, 0.9999999720F, 
+ };
+ 
+ static float vwin256[128] = {
+   0.0000591390F, 0.0005321979F, 0.0014780301F, 0.0028960636F, 
+   0.0047854363F, 0.0071449926F, 0.0099732775F, 0.0132685298F, 
+   0.0170286741F, 0.0212513119F, 0.0259337111F, 0.0310727950F, 
+   0.0366651302F, 0.0427069140F, 0.0491939614F, 0.0561216907F, 
+   0.0634851102F, 0.0712788035F, 0.0794969160F, 0.0881331402F, 
+   0.0971807028F, 0.1066323515F, 0.1164803426F, 0.1267164297F, 
+   0.1373318534F, 0.1483173323F, 0.1596630553F, 0.1713586755F, 
+   0.1833933062F, 0.1957555184F, 0.2084333404F, 0.2214142599F, 
+   0.2346852280F, 0.2482326664F, 0.2620424757F, 0.2761000481F, 
+   0.2903902813F, 0.3048975959F, 0.3196059553F, 0.3344988887F, 
+   0.3495595160F, 0.3647705766F, 0.3801144597F, 0.3955732382F, 
+   0.4111287047F, 0.4267624093F, 0.4424557009F, 0.4581897696F, 
+   0.4739456913F, 0.4897044744F, 0.5054471075F, 0.5211546088F, 
+   0.5368080763F, 0.5523887395F, 0.5678780103F, 0.5832575361F, 
+   0.5985092508F, 0.6136154277F, 0.6285587300F, 0.6433222619F, 
+   0.6578896175F, 0.6722449294F, 0.6863729144F, 0.7002589187F, 
+   0.7138889597F, 0.7272497662F, 0.7403288154F, 0.7531143679F, 
+   0.7655954985F, 0.7777621249F, 0.7896050322F, 0.8011158947F, 
+   0.8122872932F, 0.8231127294F, 0.8335866365F, 0.8437043850F, 
+   0.8534622861F, 0.8628575905F, 0.8718884835F, 0.8805540765F, 
+   0.8888543947F, 0.8967903616F, 0.9043637797F, 0.9115773078F, 
+   0.9184344360F, 0.9249394562F, 0.9310974312F, 0.9369141608F, 
+   0.9423961446F, 0.9475505439F, 0.9523851406F, 0.9569082947F, 
+   0.9611289005F, 0.9650563408F, 0.9687004405F, 0.9720714191F, 
+   0.9751798427F, 0.9780365753F, 0.9806527301F, 0.9830396204F, 
+   0.9852087111F, 0.9871715701F, 0.9889398207F, 0.9905250941F, 
+   0.9919389832F, 0.9931929973F, 0.9942985174F, 0.9952667537F, 
+   0.9961087037F, 0.9968351119F, 0.9974564312F, 0.9979827858F, 
+   0.9984239359F, 0.9987892441F, 0.9990876435F, 0.9993276081F, 
+   0.9995171241F, 0.9996636648F, 0.9997741654F, 0.9998550016F, 
+   0.9999119692F, 0.9999502656F, 0.9999744742F, 0.9999885497F, 
+   0.9999958064F, 0.9999989077F, 0.9999998584F, 0.9999999983F, 
+ };
+ 
+ static float vwin512[256] = {
+   0.0000147849F, 0.0001330607F, 0.0003695946F, 0.0007243509F, 
+   0.0011972759F, 0.0017882983F, 0.0024973285F, 0.0033242588F, 
+   0.0042689632F, 0.0053312973F, 0.0065110982F, 0.0078081841F, 
+   0.0092223540F, 0.0107533880F, 0.0124010466F, 0.0141650703F, 
+   0.0160451800F, 0.0180410758F, 0.0201524373F, 0.0223789233F, 
+   0.0247201710F, 0.0271757958F, 0.0297453914F, 0.0324285286F, 
+   0.0352247556F, 0.0381335972F, 0.0411545545F, 0.0442871045F, 
+   0.0475306997F, 0.0508847676F, 0.0543487103F, 0.0579219038F, 
+   0.0616036982F, 0.0653934164F, 0.0692903546F, 0.0732937809F, 
+   0.0774029356F, 0.0816170305F, 0.0859352485F, 0.0903567428F, 
+   0.0948806375F, 0.0995060259F, 0.1042319712F, 0.1090575056F, 
+   0.1139816300F, 0.1190033137F, 0.1241214941F, 0.1293350764F, 
+   0.1346429333F, 0.1400439046F, 0.1455367974F, 0.1511203852F, 
+   0.1567934083F, 0.1625545735F, 0.1684025537F, 0.1743359881F, 
+   0.1803534820F, 0.1864536069F, 0.1926349000F, 0.1988958650F, 
+   0.2052349715F, 0.2116506555F, 0.2181413191F, 0.2247053313F, 
+   0.2313410275F, 0.2380467105F, 0.2448206500F, 0.2516610835F, 
+   0.2585662164F, 0.2655342226F, 0.2725632448F, 0.2796513950F, 
+   0.2867967551F, 0.2939973773F, 0.3012512852F, 0.3085564739F, 
+   0.3159109111F, 0.3233125375F, 0.3307592680F, 0.3382489922F, 
+   0.3457795756F, 0.3533488602F, 0.3609546657F, 0.3685947904F, 
+   0.3762670121F, 0.3839690896F, 0.3916987634F, 0.3994537572F, 
+   0.4072317788F, 0.4150305215F, 0.4228476653F, 0.4306808783F, 
+   0.4385278181F, 0.4463861329F, 0.4542534630F, 0.4621274424F, 
+   0.4700057001F, 0.4778858615F, 0.4857655502F, 0.4936423891F, 
+   0.5015140023F, 0.5093780165F, 0.5172320626F, 0.5250737772F, 
+   0.5329008043F, 0.5407107971F, 0.5485014192F, 0.5562703465F, 
+   0.5640152688F, 0.5717338914F, 0.5794239366F, 0.5870831457F, 
+   0.5947092801F, 0.6023001235F, 0.6098534829F, 0.6173671907F, 
+   0.6248391059F, 0.6322671161F, 0.6396491384F, 0.6469831217F, 
+   0.6542670475F, 0.6614989319F, 0.6686768267F, 0.6757988210F, 
+   0.6828630426F, 0.6898676592F, 0.6968108799F, 0.7036909564F, 
+   0.7105061843F, 0.7172549043F, 0.7239355032F, 0.7305464154F, 
+   0.7370861235F, 0.7435531598F, 0.7499461068F, 0.7562635986F, 
+   0.7625043214F, 0.7686670148F, 0.7747504721F, 0.7807535410F, 
+   0.7866751247F, 0.7925141825F, 0.7982697296F, 0.8039408387F, 
+   0.8095266395F, 0.8150263196F, 0.8204391248F, 0.8257643590F, 
+   0.8310013848F, 0.8361496236F, 0.8412085555F, 0.8461777194F, 
+   0.8510567129F, 0.8558451924F, 0.8605428730F, 0.8651495278F, 
+   0.8696649882F, 0.8740891432F, 0.8784219392F, 0.8826633797F, 
+   0.8868135244F, 0.8908724888F, 0.8948404441F, 0.8987176157F, 
+   0.9025042831F, 0.9062007791F, 0.9098074886F, 0.9133248482F, 
+   0.9167533451F, 0.9200935163F, 0.9233459472F, 0.9265112712F, 
+   0.9295901680F, 0.9325833632F, 0.9354916263F, 0.9383157705F, 
+   0.9410566504F, 0.9437151618F, 0.9462922398F, 0.9487888576F, 
+   0.9512060252F, 0.9535447882F, 0.9558062262F, 0.9579914516F, 
+   0.9601016078F, 0.9621378683F, 0.9641014348F, 0.9659935361F, 
+   0.9678154261F, 0.9695683830F, 0.9712537071F, 0.9728727198F, 
+   0.9744267618F, 0.9759171916F, 0.9773453842F, 0.9787127293F, 
+   0.9800206298F, 0.9812705006F, 0.9824637665F, 0.9836018613F, 
+   0.9846862258F, 0.9857183066F, 0.9866995544F, 0.9876314227F, 
+   0.9885153662F, 0.9893528393F, 0.9901452948F, 0.9908941823F, 
+   0.9916009470F, 0.9922670279F, 0.9928938570F, 0.9934828574F, 
+   0.9940354423F, 0.9945530133F, 0.9950369595F, 0.9954886562F, 
+   0.9959094633F, 0.9963007242F, 0.9966637649F, 0.9969998925F, 
+   0.9973103939F, 0.9975965351F, 0.9978595598F, 0.9981006885F, 
+   0.9983211172F, 0.9985220166F, 0.9987045311F, 0.9988697776F, 
+   0.9990188449F, 0.9991527924F, 0.9992726499F, 0.9993794157F, 
+   0.9994740570F, 0.9995575079F, 0.9996306699F, 0.9996944099F, 
+   0.9997495605F, 0.9997969190F, 0.9998372465F, 0.9998712678F, 
+   0.9998996704F, 0.9999231041F, 0.9999421807F, 0.9999574732F, 
+   0.9999695157F, 0.9999788026F, 0.9999857885F, 0.9999908879F, 
+   0.9999944746F, 0.9999968817F, 0.9999984010F, 0.9999992833F, 
+   0.9999997377F, 0.9999999317F, 0.9999999911F, 0.9999999999F, 
+ };
+ 
+ static float vwin1024[512] = {
+   0.0000036962F, 0.0000332659F, 0.0000924041F, 0.0001811086F, 
+   0.0002993761F, 0.0004472021F, 0.0006245811F, 0.0008315063F, 
+   0.0010679699F, 0.0013339631F, 0.0016294757F, 0.0019544965F, 
+   0.0023090133F, 0.0026930125F, 0.0031064797F, 0.0035493989F, 
+   0.0040217533F, 0.0045235250F, 0.0050546946F, 0.0056152418F, 
+   0.0062051451F, 0.0068243817F, 0.0074729278F, 0.0081507582F, 
+   0.0088578466F, 0.0095941655F, 0.0103596863F, 0.0111543789F, 
+   0.0119782122F, 0.0128311538F, 0.0137131701F, 0.0146242260F, 
+   0.0155642855F, 0.0165333111F, 0.0175312640F, 0.0185581042F, 
+   0.0196137903F, 0.0206982797F, 0.0218115284F, 0.0229534910F, 
+   0.0241241208F, 0.0253233698F, 0.0265511886F, 0.0278075263F, 
+   0.0290923308F, 0.0304055484F, 0.0317471241F, 0.0331170013F, 
+   0.0345151222F, 0.0359414274F, 0.0373958560F, 0.0388783456F, 
+   0.0403888325F, 0.0419272511F, 0.0434935347F, 0.0450876148F, 
+   0.0467094213F, 0.0483588828F, 0.0500359261F, 0.0517404765F, 
+   0.0534724575F, 0.0552317913F, 0.0570183983F, 0.0588321971F, 
+   0.0606731048F, 0.0625410369F, 0.0644359070F, 0.0663576272F, 
+   0.0683061077F, 0.0702812571F, 0.0722829821F, 0.0743111878F, 
+   0.0763657775F, 0.0784466526F, 0.0805537129F, 0.0826868561F, 
+   0.0848459782F, 0.0870309736F, 0.0892417345F, 0.0914781514F, 
+   0.0937401128F, 0.0960275056F, 0.0983402145F, 0.1006781223F, 
+   0.1030411101F, 0.1054290568F, 0.1078418397F, 0.1102793336F, 
+   0.1127414119F, 0.1152279457F, 0.1177388042F, 0.1202738544F, 
+   0.1228329618F, 0.1254159892F, 0.1280227980F, 0.1306532471F, 
+   0.1333071937F, 0.1359844927F, 0.1386849970F, 0.1414085575F, 
+   0.1441550230F, 0.1469242403F, 0.1497160539F, 0.1525303063F, 
+   0.1553668381F, 0.1582254875F, 0.1611060909F, 0.1640084822F, 
+   0.1669324936F, 0.1698779549F, 0.1728446939F, 0.1758325362F, 
+   0.1788413055F, 0.1818708232F, 0.1849209084F, 0.1879913785F, 
+   0.1910820485F, 0.1941927312F, 0.1973232376F, 0.2004733764F, 
+   0.2036429541F, 0.2068317752F, 0.2100396421F, 0.2132663552F, 
+   0.2165117125F, 0.2197755102F, 0.2230575422F, 0.2263576007F, 
+   0.2296754753F, 0.2330109540F, 0.2363638225F, 0.2397338646F, 
+   0.2431208619F, 0.2465245941F, 0.2499448389F, 0.2533813719F, 
+   0.2568339669F, 0.2603023956F, 0.2637864277F, 0.2672858312F, 
+   0.2708003718F, 0.2743298135F, 0.2778739186F, 0.2814324472F, 
+   0.2850051576F, 0.2885918065F, 0.2921921485F, 0.2958059366F, 
+   0.2994329219F, 0.3030728538F, 0.3067254799F, 0.3103905462F, 
+   0.3140677969F, 0.3177569747F, 0.3214578205F, 0.3251700736F, 
+   0.3288934718F, 0.3326277513F, 0.3363726468F, 0.3401278914F, 
+   0.3438932168F, 0.3476683533F, 0.3514530297F, 0.3552469734F, 
+   0.3590499106F, 0.3628615659F, 0.3666816630F, 0.3705099239F, 
+   0.3743460698F, 0.3781898204F, 0.3820408945F, 0.3858990095F, 
+   0.3897638820F, 0.3936352274F, 0.3975127601F, 0.4013961936F, 
+   0.4052852405F, 0.4091796123F, 0.4130790198F, 0.4169831732F, 
+   0.4208917815F, 0.4248045534F, 0.4287211965F, 0.4326414181F, 
+   0.4365649248F, 0.4404914225F, 0.4444206167F, 0.4483522125F, 
+   0.4522859146F, 0.4562214270F, 0.4601584538F, 0.4640966984F, 
+   0.4680358644F, 0.4719756548F, 0.4759157726F, 0.4798559209F, 
+   0.4837958024F, 0.4877351199F, 0.4916735765F, 0.4956108751F, 
+   0.4995467188F, 0.5034808109F, 0.5074128550F, 0.5113425550F, 
+   0.5152696149F, 0.5191937395F, 0.5231146336F, 0.5270320028F, 
+   0.5309455530F, 0.5348549910F, 0.5387600239F, 0.5426603597F, 
+   0.5465557070F, 0.5504457754F, 0.5543302752F, 0.5582089175F, 
+   0.5620814145F, 0.5659474793F, 0.5698068262F, 0.5736591704F, 
+   0.5775042283F, 0.5813417176F, 0.5851713571F, 0.5889928670F, 
+   0.5928059689F, 0.5966103856F, 0.6004058415F, 0.6041920626F, 
+   0.6079687761F, 0.6117357113F, 0.6154925986F, 0.6192391705F, 
+   0.6229751612F, 0.6267003064F, 0.6304143441F, 0.6341170137F, 
+   0.6378080569F, 0.6414872173F, 0.6451542405F, 0.6488088741F, 
+   0.6524508681F, 0.6560799742F, 0.6596959469F, 0.6632985424F, 
+   0.6668875197F, 0.6704626398F, 0.6740236662F, 0.6775703649F, 
+   0.6811025043F, 0.6846198554F, 0.6881221916F, 0.6916092892F, 
+   0.6950809269F, 0.6985368861F, 0.7019769510F, 0.7054009085F, 
+   0.7088085484F, 0.7121996632F, 0.7155740484F, 0.7189315023F, 
+   0.7222718263F, 0.7255948245F, 0.7289003043F, 0.7321880760F, 
+   0.7354579530F, 0.7387097518F, 0.7419432921F, 0.7451583966F, 
+   0.7483548915F, 0.7515326059F, 0.7546913723F, 0.7578310265F, 
+   0.7609514077F, 0.7640523581F, 0.7671337237F, 0.7701953535F, 
+   0.7732371001F, 0.7762588195F, 0.7792603711F, 0.7822416178F, 
+   0.7852024259F, 0.7881426654F, 0.7910622097F, 0.7939609356F, 
+   0.7968387237F, 0.7996954579F, 0.8025310261F, 0.8053453193F, 
+   0.8081382324F, 0.8109096638F, 0.8136595156F, 0.8163876936F, 
+   0.8190941071F, 0.8217786690F, 0.8244412960F, 0.8270819086F, 
+   0.8297004305F, 0.8322967896F, 0.8348709171F, 0.8374227481F, 
+   0.8399522213F, 0.8424592789F, 0.8449438672F, 0.8474059356F, 
+   0.8498454378F, 0.8522623306F, 0.8546565748F, 0.8570281348F, 
+   0.8593769787F, 0.8617030779F, 0.8640064080F, 0.8662869477F, 
+   0.8685446796F, 0.8707795899F, 0.8729916682F, 0.8751809079F, 
+   0.8773473059F, 0.8794908626F, 0.8816115819F, 0.8837094713F, 
+   0.8857845418F, 0.8878368079F, 0.8898662874F, 0.8918730019F, 
+   0.8938569760F, 0.8958182380F, 0.8977568194F, 0.8996727552F, 
+   0.9015660837F, 0.9034368465F, 0.9052850885F, 0.9071108577F, 
+   0.9089142057F, 0.9106951869F, 0.9124538591F, 0.9141902832F, 
+   0.9159045233F, 0.9175966464F, 0.9192667228F, 0.9209148257F, 
+   0.9225410313F, 0.9241454187F, 0.9257280701F, 0.9272890704F, 
+   0.9288285075F, 0.9303464720F, 0.9318430576F, 0.9333183603F, 
+   0.9347724792F, 0.9362055158F, 0.9376175745F, 0.9390087622F, 
+   0.9403791881F, 0.9417289644F, 0.9430582055F, 0.9443670283F, 
+   0.9456555521F, 0.9469238986F, 0.9481721917F, 0.9494005577F, 
+   0.9506091252F, 0.9517980248F, 0.9529673894F, 0.9541173540F, 
+   0.9552480557F, 0.9563596334F, 0.9574522282F, 0.9585259830F, 
+   0.9595810428F, 0.9606175542F, 0.9616356656F, 0.9626355274F, 
+   0.9636172915F, 0.9645811114F, 0.9655271425F, 0.9664555414F, 
+   0.9673664664F, 0.9682600774F, 0.9691365355F, 0.9699960034F, 
+   0.9708386448F, 0.9716646250F, 0.9724741103F, 0.9732672685F, 
+   0.9740442683F, 0.9748052795F, 0.9755504729F, 0.9762800205F, 
+   0.9769940950F, 0.9776928703F, 0.9783765210F, 0.9790452223F, 
+   0.9796991504F, 0.9803384823F, 0.9809633954F, 0.9815740679F, 
+   0.9821706784F, 0.9827534063F, 0.9833224312F, 0.9838779332F, 
+   0.9844200928F, 0.9849490910F, 0.9854651087F, 0.9859683274F, 
+   0.9864589286F, 0.9869370940F, 0.9874030054F, 0.9878568447F, 
+   0.9882987937F, 0.9887290343F, 0.9891477481F, 0.9895551169F, 
+   0.9899513220F, 0.9903365446F, 0.9907109658F, 0.9910747662F, 
+   0.9914281260F, 0.9917712252F, 0.9921042433F, 0.9924273593F, 
+   0.9927407516F, 0.9930445982F, 0.9933390763F, 0.9936243626F, 
+   0.9939006331F, 0.9941680631F, 0.9944268269F, 0.9946770982F, 
+   0.9949190498F, 0.9951528537F, 0.9953786808F, 0.9955967011F, 
+   0.9958070836F, 0.9960099963F, 0.9962056061F, 0.9963940787F, 
+   0.9965755786F, 0.9967502693F, 0.9969183129F, 0.9970798704F, 
+   0.9972351013F, 0.9973841640F, 0.9975272151F, 0.9976644103F, 
+   0.9977959036F, 0.9979218476F, 0.9980423932F, 0.9981576901F, 
+   0.9982678862F, 0.9983731278F, 0.9984735596F, 0.9985693247F, 
+   0.9986605645F, 0.9987474186F, 0.9988300248F, 0.9989085193F, 
+   0.9989830364F, 0.9990537085F, 0.9991206662F, 0.9991840382F, 
+   0.9992439513F, 0.9993005303F, 0.9993538982F, 0.9994041757F, 
+   0.9994514817F, 0.9994959330F, 0.9995376444F, 0.9995767286F, 
+   0.9996132960F, 0.9996474550F, 0.9996793121F, 0.9997089710F, 
+   0.9997365339F, 0.9997621003F, 0.9997857677F, 0.9998076311F, 
+   0.9998277836F, 0.9998463156F, 0.9998633155F, 0.9998788692F, 
+   0.9998930603F, 0.9999059701F, 0.9999176774F, 0.9999282586F, 
+   0.9999377880F, 0.9999463370F, 0.9999539749F, 0.9999607685F, 
+   0.9999667820F, 0.9999720773F, 0.9999767136F, 0.9999807479F, 
+   0.9999842344F, 0.9999872249F, 0.9999897688F, 0.9999919127F, 
+   0.9999937009F, 0.9999951749F, 0.9999963738F, 0.9999973342F, 
+   0.9999980900F, 0.9999986724F, 0.9999991103F, 0.9999994297F, 
+   0.9999996543F, 0.9999998049F, 0.9999999000F, 0.9999999552F, 
+   0.9999999836F, 0.9999999957F, 0.9999999994F, 1.0000000000F, 
+ };
+ 
+ static float vwin2048[1024] = {
+   0.0000009241F, 0.0000083165F, 0.0000231014F, 0.0000452785F, 
+   0.0000748476F, 0.0001118085F, 0.0001561608F, 0.0002079041F, 
+   0.0002670379F, 0.0003335617F, 0.0004074748F, 0.0004887765F, 
+   0.0005774661F, 0.0006735427F, 0.0007770054F, 0.0008878533F, 
+   0.0010060853F, 0.0011317002F, 0.0012646969F, 0.0014050742F, 
+   0.0015528307F, 0.0017079650F, 0.0018704756F, 0.0020403610F, 
+   0.0022176196F, 0.0024022497F, 0.0025942495F, 0.0027936173F, 
+   0.0030003511F, 0.0032144490F, 0.0034359088F, 0.0036647286F, 
+   0.0039009061F, 0.0041444391F, 0.0043953253F, 0.0046535621F, 
+   0.0049191472F, 0.0051920781F, 0.0054723520F, 0.0057599664F, 
+   0.0060549184F, 0.0063572052F, 0.0066668239F, 0.0069837715F, 
+   0.0073080449F, 0.0076396410F, 0.0079785566F, 0.0083247884F, 
+   0.0086783330F, 0.0090391871F, 0.0094073470F, 0.0097828092F, 
+   0.0101655700F, 0.0105556258F, 0.0109529726F, 0.0113576065F, 
+   0.0117695237F, 0.0121887200F, 0.0126151913F, 0.0130489335F, 
+   0.0134899422F, 0.0139382130F, 0.0143937415F, 0.0148565233F, 
+   0.0153265536F, 0.0158038279F, 0.0162883413F, 0.0167800889F, 
+   0.0172790660F, 0.0177852675F, 0.0182986882F, 0.0188193231F, 
+   0.0193471668F, 0.0198822141F, 0.0204244594F, 0.0209738974F, 
+   0.0215305225F, 0.0220943289F, 0.0226653109F, 0.0232434627F, 
+   0.0238287784F, 0.0244212519F, 0.0250208772F, 0.0256276481F, 
+   0.0262415582F, 0.0268626014F, 0.0274907711F, 0.0281260608F, 
+   0.0287684638F, 0.0294179736F, 0.0300745833F, 0.0307382859F, 
+   0.0314090747F, 0.0320869424F, 0.0327718819F, 0.0334638860F, 
+   0.0341629474F, 0.0348690586F, 0.0355822122F, 0.0363024004F, 
+   0.0370296157F, 0.0377638502F, 0.0385050960F, 0.0392533451F, 
+   0.0400085896F, 0.0407708211F, 0.0415400315F, 0.0423162123F, 
+   0.0430993552F, 0.0438894515F, 0.0446864926F, 0.0454904698F, 
+   0.0463013742F, 0.0471191969F, 0.0479439288F, 0.0487755607F, 
+   0.0496140836F, 0.0504594879F, 0.0513117642F, 0.0521709031F, 
+   0.0530368949F, 0.0539097297F, 0.0547893979F, 0.0556758894F, 
+   0.0565691941F, 0.0574693019F, 0.0583762026F, 0.0592898858F, 
+   0.0602103410F, 0.0611375576F, 0.0620715250F, 0.0630122324F, 
+   0.0639596688F, 0.0649138234F, 0.0658746848F, 0.0668422421F, 
+   0.0678164838F, 0.0687973985F, 0.0697849746F, 0.0707792005F, 
+   0.0717800645F, 0.0727875547F, 0.0738016591F, 0.0748223656F, 
+   0.0758496620F, 0.0768835359F, 0.0779239751F, 0.0789709668F, 
+   0.0800244985F, 0.0810845574F, 0.0821511306F, 0.0832242052F, 
+   0.0843037679F, 0.0853898056F, 0.0864823050F, 0.0875812525F, 
+   0.0886866347F, 0.0897984378F, 0.0909166480F, 0.0920412513F, 
+   0.0931722338F, 0.0943095813F, 0.0954532795F, 0.0966033140F, 
+   0.0977596702F, 0.0989223336F, 0.1000912894F, 0.1012665227F, 
+   0.1024480185F, 0.1036357616F, 0.1048297369F, 0.1060299290F, 
+   0.1072363224F, 0.1084489014F, 0.1096676504F, 0.1108925534F, 
+   0.1121235946F, 0.1133607577F, 0.1146040267F, 0.1158533850F, 
+   0.1171088163F, 0.1183703040F, 0.1196378312F, 0.1209113812F, 
+   0.1221909370F, 0.1234764815F, 0.1247679974F, 0.1260654674F, 
+   0.1273688740F, 0.1286781995F, 0.1299934263F, 0.1313145365F, 
+   0.1326415121F, 0.1339743349F, 0.1353129866F, 0.1366574490F, 
+   0.1380077035F, 0.1393637315F, 0.1407255141F, 0.1420930325F, 
+   0.1434662677F, 0.1448452004F, 0.1462298115F, 0.1476200814F, 
+   0.1490159906F, 0.1504175195F, 0.1518246482F, 0.1532373569F, 
+   0.1546556253F, 0.1560794333F, 0.1575087606F, 0.1589435866F, 
+   0.1603838909F, 0.1618296526F, 0.1632808509F, 0.1647374648F, 
+   0.1661994731F, 0.1676668546F, 0.1691395880F, 0.1706176516F, 
+   0.1721010238F, 0.1735896829F, 0.1750836068F, 0.1765827736F, 
+   0.1780871610F, 0.1795967468F, 0.1811115084F, 0.1826314234F, 
+   0.1841564689F, 0.1856866221F, 0.1872218600F, 0.1887621595F, 
+   0.1903074974F, 0.1918578503F, 0.1934131947F, 0.1949735068F, 
+   0.1965387630F, 0.1981089393F, 0.1996840117F, 0.2012639560F, 
+   0.2028487479F, 0.2044383630F, 0.2060327766F, 0.2076319642F, 
+   0.2092359007F, 0.2108445614F, 0.2124579211F, 0.2140759545F, 
+   0.2156986364F, 0.2173259411F, 0.2189578432F, 0.2205943168F, 
+   0.2222353361F, 0.2238808751F, 0.2255309076F, 0.2271854073F, 
+   0.2288443480F, 0.2305077030F, 0.2321754457F, 0.2338475493F, 
+   0.2355239869F, 0.2372047315F, 0.2388897560F, 0.2405790329F, 
+   0.2422725350F, 0.2439702347F, 0.2456721043F, 0.2473781159F, 
+   0.2490882418F, 0.2508024539F, 0.2525207240F, 0.2542430237F, 
+   0.2559693248F, 0.2576995986F, 0.2594338166F, 0.2611719498F, 
+   0.2629139695F, 0.2646598466F, 0.2664095520F, 0.2681630564F, 
+   0.2699203304F, 0.2716813445F, 0.2734460691F, 0.2752144744F, 
+   0.2769865307F, 0.2787622079F, 0.2805414760F, 0.2823243047F, 
+   0.2841106637F, 0.2859005227F, 0.2876938509F, 0.2894906179F, 
+   0.2912907928F, 0.2930943447F, 0.2949012426F, 0.2967114554F, 
+   0.2985249520F, 0.3003417009F, 0.3021616708F, 0.3039848301F, 
+   0.3058111471F, 0.3076405901F, 0.3094731273F, 0.3113087266F, 
+   0.3131473560F, 0.3149889833F, 0.3168335762F, 0.3186811024F, 
+   0.3205315294F, 0.3223848245F, 0.3242409552F, 0.3260998886F, 
+   0.3279615918F, 0.3298260319F, 0.3316931758F, 0.3335629903F, 
+   0.3354354423F, 0.3373104982F, 0.3391881247F, 0.3410682882F, 
+   0.3429509551F, 0.3448360917F, 0.3467236642F, 0.3486136387F, 
+   0.3505059811F, 0.3524006575F, 0.3542976336F, 0.3561968753F, 
+   0.3580983482F, 0.3600020179F, 0.3619078499F, 0.3638158096F, 
+   0.3657258625F, 0.3676379737F, 0.3695521086F, 0.3714682321F, 
+   0.3733863094F, 0.3753063055F, 0.3772281852F, 0.3791519134F, 
+   0.3810774548F, 0.3830047742F, 0.3849338362F, 0.3868646053F, 
+   0.3887970459F, 0.3907311227F, 0.3926667998F, 0.3946040417F, 
+   0.3965428125F, 0.3984830765F, 0.4004247978F, 0.4023679403F, 
+   0.4043124683F, 0.4062583455F, 0.4082055359F, 0.4101540034F, 
+   0.4121037117F, 0.4140546246F, 0.4160067058F, 0.4179599190F, 
+   0.4199142277F, 0.4218695956F, 0.4238259861F, 0.4257833627F, 
+   0.4277416888F, 0.4297009279F, 0.4316610433F, 0.4336219983F, 
+   0.4355837562F, 0.4375462803F, 0.4395095337F, 0.4414734797F, 
+   0.4434380815F, 0.4454033021F, 0.4473691046F, 0.4493354521F, 
+   0.4513023078F, 0.4532696345F, 0.4552373954F, 0.4572055533F, 
+   0.4591740713F, 0.4611429123F, 0.4631120393F, 0.4650814151F, 
+   0.4670510028F, 0.4690207650F, 0.4709906649F, 0.4729606651F, 
+   0.4749307287F, 0.4769008185F, 0.4788708972F, 0.4808409279F, 
+   0.4828108732F, 0.4847806962F, 0.4867503597F, 0.4887198264F, 
+   0.4906890593F, 0.4926580213F, 0.4946266753F, 0.4965949840F, 
+   0.4985629105F, 0.5005304176F, 0.5024974683F, 0.5044640255F, 
+   0.5064300522F, 0.5083955114F, 0.5103603659F, 0.5123245790F, 
+   0.5142881136F, 0.5162509328F, 0.5182129997F, 0.5201742774F, 
+   0.5221347290F, 0.5240943178F, 0.5260530070F, 0.5280107598F, 
+   0.5299675395F, 0.5319233095F, 0.5338780330F, 0.5358316736F, 
+   0.5377841946F, 0.5397355596F, 0.5416857320F, 0.5436346755F, 
+   0.5455823538F, 0.5475287304F, 0.5494737691F, 0.5514174337F, 
+   0.5533596881F, 0.5553004962F, 0.5572398218F, 0.5591776291F, 
+   0.5611138821F, 0.5630485449F, 0.5649815818F, 0.5669129570F, 
+   0.5688426349F, 0.5707705799F, 0.5726967564F, 0.5746211290F, 
+   0.5765436624F, 0.5784643212F, 0.5803830702F, 0.5822998743F, 
+   0.5842146984F, 0.5861275076F, 0.5880382669F, 0.5899469416F, 
+   0.5918534968F, 0.5937578981F, 0.5956601107F, 0.5975601004F, 
+   0.5994578326F, 0.6013532732F, 0.6032463880F, 0.6051371429F, 
+   0.6070255039F, 0.6089114372F, 0.6107949090F, 0.6126758856F, 
+   0.6145543334F, 0.6164302191F, 0.6183035092F, 0.6201741706F, 
+   0.6220421700F, 0.6239074745F, 0.6257700513F, 0.6276298674F, 
+   0.6294868903F, 0.6313410873F, 0.6331924262F, 0.6350408745F, 
+   0.6368864001F, 0.6387289710F, 0.6405685552F, 0.6424051209F, 
+   0.6442386364F, 0.6460690702F, 0.6478963910F, 0.6497205673F, 
+   0.6515415682F, 0.6533593625F, 0.6551739194F, 0.6569852082F, 
+   0.6587931984F, 0.6605978593F, 0.6623991609F, 0.6641970728F, 
+   0.6659915652F, 0.6677826081F, 0.6695701718F, 0.6713542268F, 
+   0.6731347437F, 0.6749116932F, 0.6766850461F, 0.6784547736F, 
+   0.6802208469F, 0.6819832374F, 0.6837419164F, 0.6854968559F, 
+   0.6872480275F, 0.6889954034F, 0.6907389556F, 0.6924786566F, 
+   0.6942144788F, 0.6959463950F, 0.6976743780F, 0.6993984008F, 
+   0.7011184365F, 0.7028344587F, 0.7045464407F, 0.7062543564F, 
+   0.7079581796F, 0.7096578844F, 0.7113534450F, 0.7130448359F, 
+   0.7147320316F, 0.7164150070F, 0.7180937371F, 0.7197681970F, 
+   0.7214383620F, 0.7231042077F, 0.7247657098F, 0.7264228443F, 
+   0.7280755871F, 0.7297239147F, 0.7313678035F, 0.7330072301F, 
+   0.7346421715F, 0.7362726046F, 0.7378985069F, 0.7395198556F, 
+   0.7411366285F, 0.7427488034F, 0.7443563584F, 0.7459592717F, 
+   0.7475575218F, 0.7491510873F, 0.7507399471F, 0.7523240803F, 
+   0.7539034661F, 0.7554780839F, 0.7570479136F, 0.7586129349F, 
+   0.7601731279F, 0.7617284730F, 0.7632789506F, 0.7648245416F, 
+   0.7663652267F, 0.7679009872F, 0.7694318044F, 0.7709576599F, 
+   0.7724785354F, 0.7739944130F, 0.7755052749F, 0.7770111035F, 
+   0.7785118815F, 0.7800075916F, 0.7814982170F, 0.7829837410F, 
+   0.7844641472F, 0.7859394191F, 0.7874095408F, 0.7888744965F, 
+   0.7903342706F, 0.7917888476F, 0.7932382124F, 0.7946823501F, 
+   0.7961212460F, 0.7975548855F, 0.7989832544F, 0.8004063386F, 
+   0.8018241244F, 0.8032365981F, 0.8046437463F, 0.8060455560F, 
+   0.8074420141F, 0.8088331080F, 0.8102188253F, 0.8115991536F, 
+   0.8129740810F, 0.8143435957F, 0.8157076861F, 0.8170663409F, 
+   0.8184195489F, 0.8197672994F, 0.8211095817F, 0.8224463853F, 
+   0.8237777001F, 0.8251035161F, 0.8264238235F, 0.8277386129F, 
+   0.8290478750F, 0.8303516008F, 0.8316497814F, 0.8329424083F, 
+   0.8342294731F, 0.8355109677F, 0.8367868841F, 0.8380572148F, 
+   0.8393219523F, 0.8405810893F, 0.8418346190F, 0.8430825345F, 
+   0.8443248294F, 0.8455614974F, 0.8467925323F, 0.8480179285F, 
+   0.8492376802F, 0.8504517822F, 0.8516602292F, 0.8528630164F, 
+   0.8540601391F, 0.8552515928F, 0.8564373733F, 0.8576174766F, 
+   0.8587918990F, 0.8599606368F, 0.8611236868F, 0.8622810460F, 
+   0.8634327113F, 0.8645786802F, 0.8657189504F, 0.8668535195F, 
+   0.8679823857F, 0.8691055472F, 0.8702230025F, 0.8713347503F, 
+   0.8724407896F, 0.8735411194F, 0.8746357394F, 0.8757246489F, 
+   0.8768078479F, 0.8778853364F, 0.8789571146F, 0.8800231832F, 
+   0.8810835427F, 0.8821381942F, 0.8831871387F, 0.8842303777F, 
+   0.8852679127F, 0.8862997456F, 0.8873258784F, 0.8883463132F, 
+   0.8893610527F, 0.8903700994F, 0.8913734562F, 0.8923711263F, 
+   0.8933631129F, 0.8943494196F, 0.8953300500F, 0.8963050083F, 
+   0.8972742985F, 0.8982379249F, 0.8991958922F, 0.9001482052F, 
+   0.9010948688F, 0.9020358883F, 0.9029712690F, 0.9039010165F, 
+   0.9048251367F, 0.9057436357F, 0.9066565195F, 0.9075637946F, 
+   0.9084654678F, 0.9093615456F, 0.9102520353F, 0.9111369440F, 
+   0.9120162792F, 0.9128900484F, 0.9137582595F, 0.9146209204F, 
+   0.9154780394F, 0.9163296248F, 0.9171756853F, 0.9180162296F, 
+   0.9188512667F, 0.9196808057F, 0.9205048559F, 0.9213234270F, 
+   0.9221365285F, 0.9229441704F, 0.9237463629F, 0.9245431160F, 
+   0.9253344404F, 0.9261203465F, 0.9269008453F, 0.9276759477F, 
+   0.9284456648F, 0.9292100080F, 0.9299689889F, 0.9307226190F, 
+   0.9314709103F, 0.9322138747F, 0.9329515245F, 0.9336838721F, 
+   0.9344109300F, 0.9351327108F, 0.9358492275F, 0.9365604931F, 
+   0.9372665208F, 0.9379673239F, 0.9386629160F, 0.9393533107F, 
+   0.9400385220F, 0.9407185637F, 0.9413934501F, 0.9420631954F, 
+   0.9427278141F, 0.9433873208F, 0.9440417304F, 0.9446910576F, 
+   0.9453353176F, 0.9459745255F, 0.9466086968F, 0.9472378469F, 
+   0.9478619915F, 0.9484811463F, 0.9490953274F, 0.9497045506F, 
+   0.9503088323F, 0.9509081888F, 0.9515026365F, 0.9520921921F, 
+   0.9526768723F, 0.9532566940F, 0.9538316742F, 0.9544018300F, 
+   0.9549671786F, 0.9555277375F, 0.9560835241F, 0.9566345562F, 
+   0.9571808513F, 0.9577224275F, 0.9582593027F, 0.9587914949F, 
+   0.9593190225F, 0.9598419038F, 0.9603601571F, 0.9608738012F, 
+   0.9613828546F, 0.9618873361F, 0.9623872646F, 0.9628826591F, 
+   0.9633735388F, 0.9638599227F, 0.9643418303F, 0.9648192808F, 
+   0.9652922939F, 0.9657608890F, 0.9662250860F, 0.9666849046F, 
+   0.9671403646F, 0.9675914861F, 0.9680382891F, 0.9684807937F, 
+   0.9689190202F, 0.9693529890F, 0.9697827203F, 0.9702082347F, 
+   0.9706295529F, 0.9710466953F, 0.9714596828F, 0.9718685362F, 
+   0.9722732762F, 0.9726739240F, 0.9730705005F, 0.9734630267F, 
+   0.9738515239F, 0.9742360134F, 0.9746165163F, 0.9749930540F, 
+   0.9753656481F, 0.9757343198F, 0.9760990909F, 0.9764599829F, 
+   0.9768170175F, 0.9771702164F, 0.9775196013F, 0.9778651941F, 
+   0.9782070167F, 0.9785450909F, 0.9788794388F, 0.9792100824F, 
+   0.9795370437F, 0.9798603449F, 0.9801800080F, 0.9804960554F, 
+   0.9808085092F, 0.9811173916F, 0.9814227251F, 0.9817245318F, 
+   0.9820228343F, 0.9823176549F, 0.9826090160F, 0.9828969402F, 
+   0.9831814498F, 0.9834625674F, 0.9837403156F, 0.9840147169F, 
+   0.9842857939F, 0.9845535692F, 0.9848180654F, 0.9850793052F, 
+   0.9853373113F, 0.9855921062F, 0.9858437127F, 0.9860921535F, 
+   0.9863374512F, 0.9865796287F, 0.9868187085F, 0.9870547136F, 
+   0.9872876664F, 0.9875175899F, 0.9877445067F, 0.9879684396F, 
+   0.9881894112F, 0.9884074444F, 0.9886225619F, 0.9888347863F, 
+   0.9890441404F, 0.9892506468F, 0.9894543284F, 0.9896552077F, 
+   0.9898533074F, 0.9900486502F, 0.9902412587F, 0.9904311555F, 
+   0.9906183633F, 0.9908029045F, 0.9909848019F, 0.9911640779F, 
+   0.9913407550F, 0.9915148557F, 0.9916864025F, 0.9918554179F, 
+   0.9920219241F, 0.9921859437F, 0.9923474989F, 0.9925066120F, 
+   0.9926633054F, 0.9928176012F, 0.9929695218F, 0.9931190891F, 
+   0.9932663254F, 0.9934112527F, 0.9935538932F, 0.9936942686F, 
+   0.9938324012F, 0.9939683126F, 0.9941020248F, 0.9942335597F, 
+   0.9943629388F, 0.9944901841F, 0.9946153170F, 0.9947383593F, 
+   0.9948593325F, 0.9949782579F, 0.9950951572F, 0.9952100516F, 
+   0.9953229625F, 0.9954339111F, 0.9955429186F, 0.9956500062F, 
+   0.9957551948F, 0.9958585056F, 0.9959599593F, 0.9960595769F, 
+   0.9961573792F, 0.9962533869F, 0.9963476206F, 0.9964401009F, 
+   0.9965308483F, 0.9966198833F, 0.9967072261F, 0.9967928971F, 
+   0.9968769164F, 0.9969593041F, 0.9970400804F, 0.9971192651F, 
+   0.9971968781F, 0.9972729391F, 0.9973474680F, 0.9974204842F, 
+   0.9974920074F, 0.9975620569F, 0.9976306521F, 0.9976978122F, 
+   0.9977635565F, 0.9978279039F, 0.9978908736F, 0.9979524842F, 
+   0.9980127547F, 0.9980717037F, 0.9981293499F, 0.9981857116F, 
+   0.9982408073F, 0.9982946554F, 0.9983472739F, 0.9983986810F, 
+   0.9984488947F, 0.9984979328F, 0.9985458132F, 0.9985925534F, 
+   0.9986381711F, 0.9986826838F, 0.9987261086F, 0.9987684630F, 
+   0.9988097640F, 0.9988500286F, 0.9988892738F, 0.9989275163F, 
+   0.9989647727F, 0.9990010597F, 0.9990363938F, 0.9990707911F, 
+   0.9991042679F, 0.9991368404F, 0.9991685244F, 0.9991993358F, 
+   0.9992292905F, 0.9992584038F, 0.9992866914F, 0.9993141686F, 
+   0.9993408506F, 0.9993667526F, 0.9993918895F, 0.9994162761F, 
+   0.9994399273F, 0.9994628576F, 0.9994850815F, 0.9995066133F, 
+   0.9995274672F, 0.9995476574F, 0.9995671978F, 0.9995861021F, 
+   0.9996043841F, 0.9996220573F, 0.9996391352F, 0.9996556310F, 
+   0.9996715579F, 0.9996869288F, 0.9997017568F, 0.9997160543F, 
+   0.9997298342F, 0.9997431088F, 0.9997558905F, 0.9997681914F, 
+   0.9997800236F, 0.9997913990F, 0.9998023292F, 0.9998128261F, 
+   0.9998229009F, 0.9998325650F, 0.9998418296F, 0.9998507058F, 
+   0.9998592044F, 0.9998673362F, 0.9998751117F, 0.9998825415F, 
+   0.9998896358F, 0.9998964047F, 0.9999028584F, 0.9999090066F, 
+   0.9999148590F, 0.9999204253F, 0.9999257148F, 0.9999307368F, 
+   0.9999355003F, 0.9999400144F, 0.9999442878F, 0.9999483293F, 
+   0.9999521472F, 0.9999557499F, 0.9999591457F, 0.9999623426F, 
+   0.9999653483F, 0.9999681708F, 0.9999708175F, 0.9999732959F, 
+   0.9999756132F, 0.9999777765F, 0.9999797928F, 0.9999816688F, 
+   0.9999834113F, 0.9999850266F, 0.9999865211F, 0.9999879009F, 
+   0.9999891721F, 0.9999903405F, 0.9999914118F, 0.9999923914F, 
+   0.9999932849F, 0.9999940972F, 0.9999948336F, 0.9999954989F, 
+   0.9999960978F, 0.9999966349F, 0.9999971146F, 0.9999975411F, 
+   0.9999979185F, 0.9999982507F, 0.9999985414F, 0.9999987944F, 
+   0.9999990129F, 0.9999992003F, 0.9999993596F, 0.9999994939F, 
+   0.9999996059F, 0.9999996981F, 0.9999997732F, 0.9999998333F, 
+   0.9999998805F, 0.9999999170F, 0.9999999444F, 0.9999999643F, 
+   0.9999999784F, 0.9999999878F, 0.9999999937F, 0.9999999972F, 
+   0.9999999990F, 0.9999999997F, 1.0000000000F, 1.0000000000F, 
+ };
+ 
+ static float vwin4096[2048] = {
+   0.0000002310F, 0.0000020791F, 0.0000057754F, 0.0000113197F, 
+   0.0000187121F, 0.0000279526F, 0.0000390412F, 0.0000519777F, 
+   0.0000667623F, 0.0000833949F, 0.0001018753F, 0.0001222036F, 
+   0.0001443798F, 0.0001684037F, 0.0001942754F, 0.0002219947F, 
+   0.0002515616F, 0.0002829761F, 0.0003162380F, 0.0003513472F, 
+   0.0003883038F, 0.0004271076F, 0.0004677584F, 0.0005102563F, 
+   0.0005546011F, 0.0006007928F, 0.0006488311F, 0.0006987160F, 
+   0.0007504474F, 0.0008040251F, 0.0008594490F, 0.0009167191F, 
+   0.0009758351F, 0.0010367969F, 0.0010996044F, 0.0011642574F, 
+   0.0012307558F, 0.0012990994F, 0.0013692880F, 0.0014413216F, 
+   0.0015151998F, 0.0015909226F, 0.0016684898F, 0.0017479011F, 
+   0.0018291565F, 0.0019122556F, 0.0019971983F, 0.0020839845F, 
+   0.0021726138F, 0.0022630861F, 0.0023554012F, 0.0024495588F, 
+   0.0025455588F, 0.0026434008F, 0.0027430847F, 0.0028446103F, 
+   0.0029479772F, 0.0030531853F, 0.0031602342F, 0.0032691238F, 
+   0.0033798538F, 0.0034924239F, 0.0036068338F, 0.0037230833F, 
+   0.0038411721F, 0.0039610999F, 0.0040828664F, 0.0042064714F, 
+   0.0043319145F, 0.0044591954F, 0.0045883139F, 0.0047192696F, 
+   0.0048520622F, 0.0049866914F, 0.0051231569F, 0.0052614583F, 
+   0.0054015953F, 0.0055435676F, 0.0056873748F, 0.0058330166F, 
+   0.0059804926F, 0.0061298026F, 0.0062809460F, 0.0064339226F, 
+   0.0065887320F, 0.0067453738F, 0.0069038476F, 0.0070641531F, 
+   0.0072262899F, 0.0073902575F, 0.0075560556F, 0.0077236838F, 
+   0.0078931417F, 0.0080644288F, 0.0082375447F, 0.0084124891F, 
+   0.0085892615F, 0.0087678614F, 0.0089482885F, 0.0091305422F, 
+   0.0093146223F, 0.0095005281F, 0.0096882592F, 0.0098778153F, 
+   0.0100691958F, 0.0102624002F, 0.0104574281F, 0.0106542791F, 
+   0.0108529525F, 0.0110534480F, 0.0112557651F, 0.0114599032F, 
+   0.0116658618F, 0.0118736405F, 0.0120832387F, 0.0122946560F, 
+   0.0125078917F, 0.0127229454F, 0.0129398166F, 0.0131585046F, 
+   0.0133790090F, 0.0136013292F, 0.0138254647F, 0.0140514149F, 
+   0.0142791792F, 0.0145087572F, 0.0147401481F, 0.0149733515F, 
+   0.0152083667F, 0.0154451932F, 0.0156838304F, 0.0159242777F, 
+   0.0161665345F, 0.0164106001F, 0.0166564741F, 0.0169041557F, 
+   0.0171536443F, 0.0174049393F, 0.0176580401F, 0.0179129461F, 
+   0.0181696565F, 0.0184281708F, 0.0186884883F, 0.0189506084F, 
+   0.0192145303F, 0.0194802535F, 0.0197477772F, 0.0200171008F, 
+   0.0202882236F, 0.0205611449F, 0.0208358639F, 0.0211123801F, 
+   0.0213906927F, 0.0216708011F, 0.0219527043F, 0.0222364019F, 
+   0.0225218930F, 0.0228091769F, 0.0230982529F, 0.0233891203F, 
+   0.0236817782F, 0.0239762259F, 0.0242724628F, 0.0245704880F, 
+   0.0248703007F, 0.0251719002F, 0.0254752858F, 0.0257804565F, 
+   0.0260874117F, 0.0263961506F, 0.0267066722F, 0.0270189760F, 
+   0.0273330609F, 0.0276489263F, 0.0279665712F, 0.0282859949F, 
+   0.0286071966F, 0.0289301753F, 0.0292549303F, 0.0295814607F, 
+   0.0299097656F, 0.0302398442F, 0.0305716957F, 0.0309053191F, 
+   0.0312407135F, 0.0315778782F, 0.0319168122F, 0.0322575145F, 
+   0.0325999844F, 0.0329442209F, 0.0332902231F, 0.0336379900F, 
+   0.0339875208F, 0.0343388146F, 0.0346918703F, 0.0350466871F, 
+   0.0354032640F, 0.0357616000F, 0.0361216943F, 0.0364835458F, 
+   0.0368471535F, 0.0372125166F, 0.0375796339F, 0.0379485046F, 
+   0.0383191276F, 0.0386915020F, 0.0390656267F, 0.0394415008F, 
+   0.0398191231F, 0.0401984927F, 0.0405796086F, 0.0409624698F, 
+   0.0413470751F, 0.0417334235F, 0.0421215141F, 0.0425113457F, 
+   0.0429029172F, 0.0432962277F, 0.0436912760F, 0.0440880610F, 
+   0.0444865817F, 0.0448868370F, 0.0452888257F, 0.0456925468F, 
+   0.0460979992F, 0.0465051816F, 0.0469140931F, 0.0473247325F, 
+   0.0477370986F, 0.0481511902F, 0.0485670064F, 0.0489845458F, 
+   0.0494038074F, 0.0498247899F, 0.0502474922F, 0.0506719131F, 
+   0.0510980514F, 0.0515259060F, 0.0519554756F, 0.0523867590F, 
+   0.0528197550F, 0.0532544624F, 0.0536908800F, 0.0541290066F, 
+   0.0545688408F, 0.0550103815F, 0.0554536274F, 0.0558985772F, 
+   0.0563452297F, 0.0567935837F, 0.0572436377F, 0.0576953907F, 
+   0.0581488412F, 0.0586039880F, 0.0590608297F, 0.0595193651F, 
+   0.0599795929F, 0.0604415117F, 0.0609051202F, 0.0613704170F, 
+   0.0618374009F, 0.0623060704F, 0.0627764243F, 0.0632484611F, 
+   0.0637221795F, 0.0641975781F, 0.0646746555F, 0.0651534104F, 
+   0.0656338413F, 0.0661159469F, 0.0665997257F, 0.0670851763F, 
+   0.0675722973F, 0.0680610873F, 0.0685515448F, 0.0690436684F, 
+   0.0695374567F, 0.0700329081F, 0.0705300213F, 0.0710287947F, 
+   0.0715292269F, 0.0720313163F, 0.0725350616F, 0.0730404612F, 
+   0.0735475136F, 0.0740562172F, 0.0745665707F, 0.0750785723F, 
+   0.0755922207F, 0.0761075143F, 0.0766244515F, 0.0771430307F, 
+   0.0776632505F, 0.0781851092F, 0.0787086052F, 0.0792337371F, 
+   0.0797605032F, 0.0802889018F, 0.0808189315F, 0.0813505905F, 
+   0.0818838773F, 0.0824187903F, 0.0829553277F, 0.0834934881F, 
+   0.0840332697F, 0.0845746708F, 0.0851176899F, 0.0856623252F, 
+   0.0862085751F, 0.0867564379F, 0.0873059119F, 0.0878569954F, 
+   0.0884096867F, 0.0889639840F, 0.0895198858F, 0.0900773902F, 
+   0.0906364955F, 0.0911972000F, 0.0917595019F, 0.0923233995F, 
+   0.0928888909F, 0.0934559745F, 0.0940246485F, 0.0945949110F, 
+   0.0951667604F, 0.0957401946F, 0.0963152121F, 0.0968918109F, 
+   0.0974699893F, 0.0980497454F, 0.0986310773F, 0.0992139832F, 
+   0.0997984614F, 0.1003845098F, 0.1009721267F, 0.1015613101F, 
+   0.1021520582F, 0.1027443692F, 0.1033382410F, 0.1039336718F, 
+   0.1045306597F, 0.1051292027F, 0.1057292990F, 0.1063309466F, 
+   0.1069341435F, 0.1075388878F, 0.1081451776F, 0.1087530108F, 
+   0.1093623856F, 0.1099732998F, 0.1105857516F, 0.1111997389F, 
+   0.1118152597F, 0.1124323121F, 0.1130508939F, 0.1136710032F, 
+   0.1142926379F, 0.1149157960F, 0.1155404755F, 0.1161666742F, 
+   0.1167943901F, 0.1174236211F, 0.1180543652F, 0.1186866202F, 
+   0.1193203841F, 0.1199556548F, 0.1205924300F, 0.1212307078F, 
+   0.1218704860F, 0.1225117624F, 0.1231545349F, 0.1237988013F, 
+   0.1244445596F, 0.1250918074F, 0.1257405427F, 0.1263907632F, 
+   0.1270424667F, 0.1276956512F, 0.1283503142F, 0.1290064537F, 
+   0.1296640674F, 0.1303231530F, 0.1309837084F, 0.1316457312F, 
+   0.1323092193F, 0.1329741703F, 0.1336405820F, 0.1343084520F, 
+   0.1349777782F, 0.1356485582F, 0.1363207897F, 0.1369944704F, 
+   0.1376695979F, 0.1383461700F, 0.1390241842F, 0.1397036384F, 
+   0.1403845300F, 0.1410668567F, 0.1417506162F, 0.1424358061F, 
+   0.1431224240F, 0.1438104674F, 0.1444999341F, 0.1451908216F, 
+   0.1458831274F, 0.1465768492F, 0.1472719844F, 0.1479685308F, 
+   0.1486664857F, 0.1493658468F, 0.1500666115F, 0.1507687775F, 
+   0.1514723422F, 0.1521773031F, 0.1528836577F, 0.1535914035F, 
+   0.1543005380F, 0.1550110587F, 0.1557229631F, 0.1564362485F, 
+   0.1571509124F, 0.1578669524F, 0.1585843657F, 0.1593031499F, 
+   0.1600233024F, 0.1607448205F, 0.1614677017F, 0.1621919433F, 
+   0.1629175428F, 0.1636444975F, 0.1643728047F, 0.1651024619F, 
+   0.1658334665F, 0.1665658156F, 0.1672995067F, 0.1680345371F, 
+   0.1687709041F, 0.1695086050F, 0.1702476372F, 0.1709879978F, 
+   0.1717296843F, 0.1724726938F, 0.1732170237F, 0.1739626711F, 
+   0.1747096335F, 0.1754579079F, 0.1762074916F, 0.1769583819F, 
+   0.1777105760F, 0.1784640710F, 0.1792188642F, 0.1799749529F, 
+   0.1807323340F, 0.1814910049F, 0.1822509628F, 0.1830122046F, 
+   0.1837747277F, 0.1845385292F, 0.1853036062F, 0.1860699558F, 
+   0.1868375751F, 0.1876064613F, 0.1883766114F, 0.1891480226F, 
+   0.1899206919F, 0.1906946164F, 0.1914697932F, 0.1922462194F, 
+   0.1930238919F, 0.1938028079F, 0.1945829643F, 0.1953643583F, 
+   0.1961469868F, 0.1969308468F, 0.1977159353F, 0.1985022494F, 
+   0.1992897859F, 0.2000785420F, 0.2008685145F, 0.2016597005F, 
+   0.2024520968F, 0.2032457005F, 0.2040405084F, 0.2048365175F, 
+   0.2056337247F, 0.2064321269F, 0.2072317211F, 0.2080325041F, 
+   0.2088344727F, 0.2096376240F, 0.2104419547F, 0.2112474618F, 
+   0.2120541420F, 0.2128619923F, 0.2136710094F, 0.2144811902F, 
+   0.2152925315F, 0.2161050301F, 0.2169186829F, 0.2177334866F, 
+   0.2185494381F, 0.2193665340F, 0.2201847712F, 0.2210041465F, 
+   0.2218246565F, 0.2226462981F, 0.2234690680F, 0.2242929629F, 
+   0.2251179796F, 0.2259441147F, 0.2267713650F, 0.2275997272F, 
+   0.2284291979F, 0.2292597739F, 0.2300914518F, 0.2309242283F, 
+   0.2317581001F, 0.2325930638F, 0.2334291160F, 0.2342662534F, 
+   0.2351044727F, 0.2359437703F, 0.2367841431F, 0.2376255875F, 
+   0.2384681001F, 0.2393116776F, 0.2401563165F, 0.2410020134F, 
+   0.2418487649F, 0.2426965675F, 0.2435454178F, 0.2443953122F, 
+   0.2452462474F, 0.2460982199F, 0.2469512262F, 0.2478052628F, 
+   0.2486603262F, 0.2495164129F, 0.2503735194F, 0.2512316421F, 
+   0.2520907776F, 0.2529509222F, 0.2538120726F, 0.2546742250F, 
+   0.2555373760F, 0.2564015219F, 0.2572666593F, 0.2581327845F, 
+   0.2589998939F, 0.2598679840F, 0.2607370510F, 0.2616070916F, 
+   0.2624781019F, 0.2633500783F, 0.2642230173F, 0.2650969152F, 
+   0.2659717684F, 0.2668475731F, 0.2677243257F, 0.2686020226F, 
+   0.2694806601F, 0.2703602344F, 0.2712407419F, 0.2721221789F, 
+   0.2730045417F, 0.2738878265F, 0.2747720297F, 0.2756571474F, 
+   0.2765431760F, 0.2774301117F, 0.2783179508F, 0.2792066895F, 
+   0.2800963240F, 0.2809868505F, 0.2818782654F, 0.2827705647F, 
+   0.2836637447F, 0.2845578016F, 0.2854527315F, 0.2863485307F, 
+   0.2872451953F, 0.2881427215F, 0.2890411055F, 0.2899403433F, 
+   0.2908404312F, 0.2917413654F, 0.2926431418F, 0.2935457567F, 
+   0.2944492061F, 0.2953534863F, 0.2962585932F, 0.2971645230F, 
+   0.2980712717F, 0.2989788356F, 0.2998872105F, 0.3007963927F, 
+   0.3017063781F, 0.3026171629F, 0.3035287430F, 0.3044411145F, 
+   0.3053542736F, 0.3062682161F, 0.3071829381F, 0.3080984356F, 
+   0.3090147047F, 0.3099317413F, 0.3108495414F, 0.3117681011F, 
+   0.3126874163F, 0.3136074830F, 0.3145282972F, 0.3154498548F, 
+   0.3163721517F, 0.3172951841F, 0.3182189477F, 0.3191434385F, 
+   0.3200686525F, 0.3209945856F, 0.3219212336F, 0.3228485927F, 
+   0.3237766585F, 0.3247054271F, 0.3256348943F, 0.3265650560F, 
+   0.3274959081F, 0.3284274465F, 0.3293596671F, 0.3302925657F, 
+   0.3312261382F, 0.3321603804F, 0.3330952882F, 0.3340308574F, 
+   0.3349670838F, 0.3359039634F, 0.3368414919F, 0.3377796651F, 
+   0.3387184789F, 0.3396579290F, 0.3405980113F, 0.3415387216F, 
+   0.3424800556F, 0.3434220091F, 0.3443645779F, 0.3453077578F, 
+   0.3462515446F, 0.3471959340F, 0.3481409217F, 0.3490865036F, 
+   0.3500326754F, 0.3509794328F, 0.3519267715F, 0.3528746873F, 
+   0.3538231759F, 0.3547722330F, 0.3557218544F, 0.3566720357F, 
+   0.3576227727F, 0.3585740610F, 0.3595258964F, 0.3604782745F, 
+   0.3614311910F, 0.3623846417F, 0.3633386221F, 0.3642931280F, 
+   0.3652481549F, 0.3662036987F, 0.3671597548F, 0.3681163191F, 
+   0.3690733870F, 0.3700309544F, 0.3709890167F, 0.3719475696F, 
+   0.3729066089F, 0.3738661299F, 0.3748261285F, 0.3757866002F, 
+   0.3767475406F, 0.3777089453F, 0.3786708100F, 0.3796331302F, 
+   0.3805959014F, 0.3815591194F, 0.3825227796F, 0.3834868777F, 
+   0.3844514093F, 0.3854163698F, 0.3863817549F, 0.3873475601F, 
+   0.3883137810F, 0.3892804131F, 0.3902474521F, 0.3912148933F, 
+   0.3921827325F, 0.3931509650F, 0.3941195865F, 0.3950885925F, 
+   0.3960579785F, 0.3970277400F, 0.3979978725F, 0.3989683716F, 
+   0.3999392328F, 0.4009104516F, 0.4018820234F, 0.4028539438F, 
+   0.4038262084F, 0.4047988125F, 0.4057717516F, 0.4067450214F, 
+   0.4077186172F, 0.4086925345F, 0.4096667688F, 0.4106413155F, 
+   0.4116161703F, 0.4125913284F, 0.4135667854F, 0.4145425368F, 
+   0.4155185780F, 0.4164949044F, 0.4174715116F, 0.4184483949F, 
+   0.4194255498F, 0.4204029718F, 0.4213806563F, 0.4223585987F, 
+   0.4233367946F, 0.4243152392F, 0.4252939281F, 0.4262728566F, 
+   0.4272520202F, 0.4282314144F, 0.4292110345F, 0.4301908760F, 
+   0.4311709343F, 0.4321512047F, 0.4331316828F, 0.4341123639F, 
+   0.4350932435F, 0.4360743168F, 0.4370555794F, 0.4380370267F, 
+   0.4390186540F, 0.4400004567F, 0.4409824303F, 0.4419645701F, 
+   0.4429468716F, 0.4439293300F, 0.4449119409F, 0.4458946996F, 
+   0.4468776014F, 0.4478606418F, 0.4488438162F, 0.4498271199F, 
+   0.4508105483F, 0.4517940967F, 0.4527777607F, 0.4537615355F, 
+   0.4547454165F, 0.4557293991F, 0.4567134786F, 0.4576976505F, 
+   0.4586819101F, 0.4596662527F, 0.4606506738F, 0.4616351687F, 
+   0.4626197328F, 0.4636043614F, 0.4645890499F, 0.4655737936F, 
+   0.4665585880F, 0.4675434284F, 0.4685283101F, 0.4695132286F, 
+   0.4704981791F, 0.4714831570F, 0.4724681577F, 0.4734531766F, 
+   0.4744382089F, 0.4754232501F, 0.4764082956F, 0.4773933406F, 
+   0.4783783806F, 0.4793634108F, 0.4803484267F, 0.4813334237F, 
+   0.4823183969F, 0.4833033419F, 0.4842882540F, 0.4852731285F, 
+   0.4862579608F, 0.4872427462F, 0.4882274802F, 0.4892121580F, 
+   0.4901967751F, 0.4911813267F, 0.4921658083F, 0.4931502151F, 
+   0.4941345427F, 0.4951187863F, 0.4961029412F, 0.4970870029F, 
+   0.4980709667F, 0.4990548280F, 0.5000385822F, 0.5010222245F, 
+   0.5020057505F, 0.5029891553F, 0.5039724345F, 0.5049555834F, 
+   0.5059385973F, 0.5069214716F, 0.5079042018F, 0.5088867831F, 
+   0.5098692110F, 0.5108514808F, 0.5118335879F, 0.5128155277F, 
+   0.5137972956F, 0.5147788869F, 0.5157602971F, 0.5167415215F, 
+   0.5177225555F, 0.5187033945F, 0.5196840339F, 0.5206644692F, 
+   0.5216446956F, 0.5226247086F, 0.5236045035F, 0.5245840759F, 
+   0.5255634211F, 0.5265425344F, 0.5275214114F, 0.5285000474F, 
+   0.5294784378F, 0.5304565781F, 0.5314344637F, 0.5324120899F, 
+   0.5333894522F, 0.5343665461F, 0.5353433670F, 0.5363199102F, 
+   0.5372961713F, 0.5382721457F, 0.5392478287F, 0.5402232159F, 
+   0.5411983027F, 0.5421730845F, 0.5431475569F, 0.5441217151F, 
+   0.5450955548F, 0.5460690714F, 0.5470422602F, 0.5480151169F, 
+   0.5489876368F, 0.5499598155F, 0.5509316484F, 0.5519031310F, 
+   0.5528742587F, 0.5538450271F, 0.5548154317F, 0.5557854680F, 
+   0.5567551314F, 0.5577244174F, 0.5586933216F, 0.5596618395F, 
+   0.5606299665F, 0.5615976983F, 0.5625650302F, 0.5635319580F, 
+   0.5644984770F, 0.5654645828F, 0.5664302709F, 0.5673955370F, 
+   0.5683603765F, 0.5693247850F, 0.5702887580F, 0.5712522912F, 
+   0.5722153800F, 0.5731780200F, 0.5741402069F, 0.5751019362F, 
+   0.5760632034F, 0.5770240042F, 0.5779843341F, 0.5789441889F, 
+   0.5799035639F, 0.5808624549F, 0.5818208575F, 0.5827787673F, 
+   0.5837361800F, 0.5846930910F, 0.5856494961F, 0.5866053910F, 
+   0.5875607712F, 0.5885156324F, 0.5894699703F, 0.5904237804F, 
+   0.5913770586F, 0.5923298004F, 0.5932820016F, 0.5942336578F, 
+   0.5951847646F, 0.5961353179F, 0.5970853132F, 0.5980347464F, 
+   0.5989836131F, 0.5999319090F, 0.6008796298F, 0.6018267713F, 
+   0.6027733292F, 0.6037192993F, 0.6046646773F, 0.6056094589F, 
+   0.6065536400F, 0.6074972162F, 0.6084401833F, 0.6093825372F, 
+   0.6103242736F, 0.6112653884F, 0.6122058772F, 0.6131457359F, 
+   0.6140849604F, 0.6150235464F, 0.6159614897F, 0.6168987862F, 
+   0.6178354318F, 0.6187714223F, 0.6197067535F, 0.6206414213F, 
+   0.6215754215F, 0.6225087501F, 0.6234414028F, 0.6243733757F, 
+   0.6253046646F, 0.6262352654F, 0.6271651739F, 0.6280943862F, 
+   0.6290228982F, 0.6299507057F, 0.6308778048F, 0.6318041913F, 
+   0.6327298612F, 0.6336548105F, 0.6345790352F, 0.6355025312F, 
+   0.6364252945F, 0.6373473211F, 0.6382686070F, 0.6391891483F, 
+   0.6401089409F, 0.6410279808F, 0.6419462642F, 0.6428637869F, 
+   0.6437805452F, 0.6446965350F, 0.6456117524F, 0.6465261935F, 
+   0.6474398544F, 0.6483527311F, 0.6492648197F, 0.6501761165F, 
+   0.6510866174F, 0.6519963186F, 0.6529052162F, 0.6538133064F, 
+   0.6547205854F, 0.6556270492F, 0.6565326941F, 0.6574375162F, 
+   0.6583415117F, 0.6592446769F, 0.6601470079F, 0.6610485009F, 
+   0.6619491521F, 0.6628489578F, 0.6637479143F, 0.6646460177F, 
+   0.6655432643F, 0.6664396505F, 0.6673351724F, 0.6682298264F, 
+   0.6691236087F, 0.6700165157F, 0.6709085436F, 0.6717996889F, 
+   0.6726899478F, 0.6735793167F, 0.6744677918F, 0.6753553697F, 
+   0.6762420466F, 0.6771278190F, 0.6780126832F, 0.6788966357F, 
+   0.6797796728F, 0.6806617909F, 0.6815429866F, 0.6824232562F, 
+   0.6833025961F, 0.6841810030F, 0.6850584731F, 0.6859350031F, 
+   0.6868105894F, 0.6876852284F, 0.6885589168F, 0.6894316510F, 
+   0.6903034275F, 0.6911742430F, 0.6920440939F, 0.6929129769F, 
+   0.6937808884F, 0.6946478251F, 0.6955137837F, 0.6963787606F, 
+   0.6972427525F, 0.6981057560F, 0.6989677678F, 0.6998287845F, 
+   0.7006888028F, 0.7015478194F, 0.7024058309F, 0.7032628340F, 
+   0.7041188254F, 0.7049738019F, 0.7058277601F, 0.7066806969F, 
+   0.7075326089F, 0.7083834929F, 0.7092333457F, 0.7100821640F, 
+   0.7109299447F, 0.7117766846F, 0.7126223804F, 0.7134670291F, 
+   0.7143106273F, 0.7151531721F, 0.7159946602F, 0.7168350885F, 
+   0.7176744539F, 0.7185127534F, 0.7193499837F, 0.7201861418F, 
+   0.7210212247F, 0.7218552293F, 0.7226881526F, 0.7235199914F, 
+   0.7243507428F, 0.7251804039F, 0.7260089715F, 0.7268364426F, 
+   0.7276628144F, 0.7284880839F, 0.7293122481F, 0.7301353040F, 
+   0.7309572487F, 0.7317780794F, 0.7325977930F, 0.7334163868F, 
+   0.7342338579F, 0.7350502033F, 0.7358654202F, 0.7366795059F, 
+   0.7374924573F, 0.7383042718F, 0.7391149465F, 0.7399244787F, 
+   0.7407328655F, 0.7415401041F, 0.7423461920F, 0.7431511261F, 
+   0.7439549040F, 0.7447575227F, 0.7455589797F, 0.7463592723F, 
+   0.7471583976F, 0.7479563532F, 0.7487531363F, 0.7495487443F, 
+   0.7503431745F, 0.7511364244F, 0.7519284913F, 0.7527193726F, 
+   0.7535090658F, 0.7542975683F, 0.7550848776F, 0.7558709910F, 
+   0.7566559062F, 0.7574396205F, 0.7582221314F, 0.7590034366F, 
+   0.7597835334F, 0.7605624194F, 0.7613400923F, 0.7621165495F, 
+   0.7628917886F, 0.7636658072F, 0.7644386030F, 0.7652101735F, 
+   0.7659805164F, 0.7667496292F, 0.7675175098F, 0.7682841556F, 
+   0.7690495645F, 0.7698137341F, 0.7705766622F, 0.7713383463F, 
+   0.7720987844F, 0.7728579741F, 0.7736159132F, 0.7743725994F, 
+   0.7751280306F, 0.7758822046F, 0.7766351192F, 0.7773867722F, 
+   0.7781371614F, 0.7788862848F, 0.7796341401F, 0.7803807253F, 
+   0.7811260383F, 0.7818700769F, 0.7826128392F, 0.7833543230F, 
+   0.7840945263F, 0.7848334471F, 0.7855710833F, 0.7863074330F, 
+   0.7870424941F, 0.7877762647F, 0.7885087428F, 0.7892399264F, 
+   0.7899698137F, 0.7906984026F, 0.7914256914F, 0.7921516780F, 
+   0.7928763607F, 0.7935997375F, 0.7943218065F, 0.7950425661F, 
+   0.7957620142F, 0.7964801492F, 0.7971969692F, 0.7979124724F, 
+   0.7986266570F, 0.7993395214F, 0.8000510638F, 0.8007612823F, 
+   0.8014701754F, 0.8021777413F, 0.8028839784F, 0.8035888849F, 
+   0.8042924592F, 0.8049946997F, 0.8056956048F, 0.8063951727F, 
+   0.8070934020F, 0.8077902910F, 0.8084858381F, 0.8091800419F, 
+   0.8098729007F, 0.8105644130F, 0.8112545774F, 0.8119433922F, 
+   0.8126308561F, 0.8133169676F, 0.8140017251F, 0.8146851272F, 
+   0.8153671726F, 0.8160478598F, 0.8167271874F, 0.8174051539F, 
+   0.8180817582F, 0.8187569986F, 0.8194308741F, 0.8201033831F, 
+   0.8207745244F, 0.8214442966F, 0.8221126986F, 0.8227797290F, 
+   0.8234453865F, 0.8241096700F, 0.8247725781F, 0.8254341097F, 
+   0.8260942636F, 0.8267530385F, 0.8274104334F, 0.8280664470F, 
+   0.8287210782F, 0.8293743259F, 0.8300261889F, 0.8306766662F, 
+   0.8313257566F, 0.8319734591F, 0.8326197727F, 0.8332646963F, 
+   0.8339082288F, 0.8345503692F, 0.8351911167F, 0.8358304700F, 
+   0.8364684284F, 0.8371049907F, 0.8377401562F, 0.8383739238F, 
+   0.8390062927F, 0.8396372618F, 0.8402668305F, 0.8408949977F, 
+   0.8415217626F, 0.8421471245F, 0.8427710823F, 0.8433936354F, 
+   0.8440147830F, 0.8446345242F, 0.8452528582F, 0.8458697844F, 
+   0.8464853020F, 0.8470994102F, 0.8477121084F, 0.8483233958F, 
+   0.8489332718F, 0.8495417356F, 0.8501487866F, 0.8507544243F, 
+   0.8513586479F, 0.8519614568F, 0.8525628505F, 0.8531628283F, 
+   0.8537613897F, 0.8543585341F, 0.8549542611F, 0.8555485699F, 
+   0.8561414603F, 0.8567329315F, 0.8573229832F, 0.8579116149F, 
+   0.8584988262F, 0.8590846165F, 0.8596689855F, 0.8602519327F, 
+   0.8608334577F, 0.8614135603F, 0.8619922399F, 0.8625694962F, 
+   0.8631453289F, 0.8637197377F, 0.8642927222F, 0.8648642821F, 
+   0.8654344172F, 0.8660031272F, 0.8665704118F, 0.8671362708F, 
+   0.8677007039F, 0.8682637109F, 0.8688252917F, 0.8693854460F, 
+   0.8699441737F, 0.8705014745F, 0.8710573485F, 0.8716117953F, 
+   0.8721648150F, 0.8727164073F, 0.8732665723F, 0.8738153098F, 
+   0.8743626197F, 0.8749085021F, 0.8754529569F, 0.8759959840F, 
+   0.8765375835F, 0.8770777553F, 0.8776164996F, 0.8781538162F, 
+   0.8786897054F, 0.8792241670F, 0.8797572013F, 0.8802888082F, 
+   0.8808189880F, 0.8813477407F, 0.8818750664F, 0.8824009653F, 
+   0.8829254375F, 0.8834484833F, 0.8839701028F, 0.8844902961F, 
+   0.8850090636F, 0.8855264054F, 0.8860423218F, 0.8865568131F, 
+   0.8870698794F, 0.8875815212F, 0.8880917386F, 0.8886005319F, 
+   0.8891079016F, 0.8896138479F, 0.8901183712F, 0.8906214719F, 
+   0.8911231503F, 0.8916234067F, 0.8921222417F, 0.8926196556F, 
+   0.8931156489F, 0.8936102219F, 0.8941033752F, 0.8945951092F, 
+   0.8950854244F, 0.8955743212F, 0.8960618003F, 0.8965478621F, 
+   0.8970325071F, 0.8975157359F, 0.8979975490F, 0.8984779471F, 
+   0.8989569307F, 0.8994345004F, 0.8999106568F, 0.9003854005F, 
+   0.9008587323F, 0.9013306526F, 0.9018011623F, 0.9022702619F, 
+   0.9027379521F, 0.9032042337F, 0.9036691074F, 0.9041325739F, 
+   0.9045946339F, 0.9050552882F, 0.9055145376F, 0.9059723828F, 
+   0.9064288246F, 0.9068838638F, 0.9073375013F, 0.9077897379F, 
+   0.9082405743F, 0.9086900115F, 0.9091380503F, 0.9095846917F, 
+   0.9100299364F, 0.9104737854F, 0.9109162397F, 0.9113573001F, 
+   0.9117969675F, 0.9122352430F, 0.9126721275F, 0.9131076219F, 
+   0.9135417273F, 0.9139744447F, 0.9144057750F, 0.9148357194F, 
+   0.9152642787F, 0.9156914542F, 0.9161172468F, 0.9165416576F, 
+   0.9169646877F, 0.9173863382F, 0.9178066102F, 0.9182255048F, 
+   0.9186430232F, 0.9190591665F, 0.9194739359F, 0.9198873324F, 
+   0.9202993574F, 0.9207100120F, 0.9211192973F, 0.9215272147F, 
+   0.9219337653F, 0.9223389504F, 0.9227427713F, 0.9231452290F, 
+   0.9235463251F, 0.9239460607F, 0.9243444371F, 0.9247414557F, 
+   0.9251371177F, 0.9255314245F, 0.9259243774F, 0.9263159778F, 
+   0.9267062270F, 0.9270951264F, 0.9274826774F, 0.9278688814F, 
+   0.9282537398F, 0.9286372540F, 0.9290194254F, 0.9294002555F, 
+   0.9297797458F, 0.9301578976F, 0.9305347125F, 0.9309101919F, 
+   0.9312843373F, 0.9316571503F, 0.9320286323F, 0.9323987849F, 
+   0.9327676097F, 0.9331351080F, 0.9335012816F, 0.9338661320F, 
+   0.9342296607F, 0.9345918694F, 0.9349527596F, 0.9353123330F, 
+   0.9356705911F, 0.9360275357F, 0.9363831683F, 0.9367374905F, 
+   0.9370905042F, 0.9374422108F, 0.9377926122F, 0.9381417099F, 
+   0.9384895057F, 0.9388360014F, 0.9391811985F, 0.9395250989F, 
+   0.9398677043F, 0.9402090165F, 0.9405490371F, 0.9408877680F, 
+   0.9412252110F, 0.9415613678F, 0.9418962402F, 0.9422298301F, 
+   0.9425621392F, 0.9428931695F, 0.9432229226F, 0.9435514005F, 
+   0.9438786050F, 0.9442045381F, 0.9445292014F, 0.9448525971F, 
+   0.9451747268F, 0.9454955926F, 0.9458151963F, 0.9461335399F, 
+   0.9464506253F, 0.9467664545F, 0.9470810293F, 0.9473943517F, 
+   0.9477064238F, 0.9480172474F, 0.9483268246F, 0.9486351573F, 
+   0.9489422475F, 0.9492480973F, 0.9495527087F, 0.9498560837F, 
+   0.9501582243F, 0.9504591325F, 0.9507588105F, 0.9510572603F, 
+   0.9513544839F, 0.9516504834F, 0.9519452609F, 0.9522388186F, 
+   0.9525311584F, 0.9528222826F, 0.9531121932F, 0.9534008923F, 
+   0.9536883821F, 0.9539746647F, 0.9542597424F, 0.9545436171F, 
+   0.9548262912F, 0.9551077667F, 0.9553880459F, 0.9556671309F, 
+   0.9559450239F, 0.9562217272F, 0.9564972429F, 0.9567715733F, 
+   0.9570447206F, 0.9573166871F, 0.9575874749F, 0.9578570863F, 
+   0.9581255236F, 0.9583927890F, 0.9586588849F, 0.9589238134F, 
+   0.9591875769F, 0.9594501777F, 0.9597116180F, 0.9599719003F, 
+   0.9602310267F, 0.9604889995F, 0.9607458213F, 0.9610014942F, 
+   0.9612560206F, 0.9615094028F, 0.9617616433F, 0.9620127443F, 
+   0.9622627083F, 0.9625115376F, 0.9627592345F, 0.9630058016F, 
+   0.9632512411F, 0.9634955555F, 0.9637387471F, 0.9639808185F, 
+   0.9642217720F, 0.9644616100F, 0.9647003349F, 0.9649379493F, 
+   0.9651744556F, 0.9654098561F, 0.9656441534F, 0.9658773499F, 
+   0.9661094480F, 0.9663404504F, 0.9665703593F, 0.9667991774F, 
+   0.9670269071F, 0.9672535509F, 0.9674791114F, 0.9677035909F, 
+   0.9679269921F, 0.9681493174F, 0.9683705694F, 0.9685907506F, 
+   0.9688098636F, 0.9690279108F, 0.9692448948F, 0.9694608182F, 
+   0.9696756836F, 0.9698894934F, 0.9701022503F, 0.9703139569F, 
+   0.9705246156F, 0.9707342291F, 0.9709428000F, 0.9711503309F, 
+   0.9713568243F, 0.9715622829F, 0.9717667093F, 0.9719701060F, 
+   0.9721724757F, 0.9723738210F, 0.9725741446F, 0.9727734490F, 
+   0.9729717369F, 0.9731690109F, 0.9733652737F, 0.9735605279F, 
+   0.9737547762F, 0.9739480212F, 0.9741402656F, 0.9743315120F, 
+   0.9745217631F, 0.9747110216F, 0.9748992901F, 0.9750865714F, 
+   0.9752728681F, 0.9754581829F, 0.9756425184F, 0.9758258775F, 
+   0.9760082627F, 0.9761896768F, 0.9763701224F, 0.9765496024F, 
+   0.9767281193F, 0.9769056760F, 0.9770822751F, 0.9772579193F, 
+   0.9774326114F, 0.9776063542F, 0.9777791502F, 0.9779510023F, 
+   0.9781219133F, 0.9782918858F, 0.9784609226F, 0.9786290264F, 
+   0.9787962000F, 0.9789624461F, 0.9791277676F, 0.9792921671F, 
+   0.9794556474F, 0.9796182113F, 0.9797798615F, 0.9799406009F, 
+   0.9801004321F, 0.9802593580F, 0.9804173813F, 0.9805745049F, 
+   0.9807307314F, 0.9808860637F, 0.9810405046F, 0.9811940568F, 
+   0.9813467232F, 0.9814985065F, 0.9816494095F, 0.9817994351F, 
+   0.9819485860F, 0.9820968650F, 0.9822442750F, 0.9823908186F, 
+   0.9825364988F, 0.9826813184F, 0.9828252801F, 0.9829683868F, 
+   0.9831106413F, 0.9832520463F, 0.9833926048F, 0.9835323195F, 
+   0.9836711932F, 0.9838092288F, 0.9839464291F, 0.9840827969F, 
+   0.9842183351F, 0.9843530464F, 0.9844869337F, 0.9846199998F, 
+   0.9847522475F, 0.9848836798F, 0.9850142993F, 0.9851441090F, 
+   0.9852731117F, 0.9854013101F, 0.9855287073F, 0.9856553058F, 
+   0.9857811087F, 0.9859061188F, 0.9860303388F, 0.9861537717F, 
+   0.9862764202F, 0.9863982872F, 0.9865193756F, 0.9866396882F, 
+   0.9867592277F, 0.9868779972F, 0.9869959993F, 0.9871132370F, 
+   0.9872297131F, 0.9873454304F, 0.9874603918F, 0.9875746001F, 
+   0.9876880581F, 0.9878007688F, 0.9879127348F, 0.9880239592F, 
+   0.9881344447F, 0.9882441941F, 0.9883532104F, 0.9884614962F, 
+   0.9885690546F, 0.9886758883F, 0.9887820001F, 0.9888873930F, 
+   0.9889920697F, 0.9890960331F, 0.9891992859F, 0.9893018312F, 
+   0.9894036716F, 0.9895048100F, 0.9896052493F, 0.9897049923F, 
+   0.9898040418F, 0.9899024006F, 0.9900000717F, 0.9900970577F, 
+   0.9901933616F, 0.9902889862F, 0.9903839343F, 0.9904782087F, 
+   0.9905718122F, 0.9906647477F, 0.9907570180F, 0.9908486259F, 
+   0.9909395742F, 0.9910298658F, 0.9911195034F, 0.9912084899F, 
+   0.9912968281F, 0.9913845208F, 0.9914715708F, 0.9915579810F, 
+   0.9916437540F, 0.9917288928F, 0.9918134001F, 0.9918972788F, 
+   0.9919805316F, 0.9920631613F, 0.9921451707F, 0.9922265626F, 
+   0.9923073399F, 0.9923875052F, 0.9924670615F, 0.9925460114F, 
+   0.9926243577F, 0.9927021033F, 0.9927792508F, 0.9928558032F, 
+   0.9929317631F, 0.9930071333F, 0.9930819167F, 0.9931561158F, 
+   0.9932297337F, 0.9933027728F, 0.9933752362F, 0.9934471264F, 
+   0.9935184462F, 0.9935891985F, 0.9936593859F, 0.9937290112F, 
+   0.9937980771F, 0.9938665864F, 0.9939345418F, 0.9940019460F, 
+   0.9940688018F, 0.9941351118F, 0.9942008789F, 0.9942661057F, 
+   0.9943307950F, 0.9943949494F, 0.9944585717F, 0.9945216645F, 
+   0.9945842307F, 0.9946462728F, 0.9947077936F, 0.9947687957F, 
+   0.9948292820F, 0.9948892550F, 0.9949487174F, 0.9950076719F, 
+   0.9950661212F, 0.9951240679F, 0.9951815148F, 0.9952384645F, 
+   0.9952949196F, 0.9953508828F, 0.9954063568F, 0.9954613442F, 
+   0.9955158476F, 0.9955698697F, 0.9956234132F, 0.9956764806F, 
+   0.9957290746F, 0.9957811978F, 0.9958328528F, 0.9958840423F, 
+   0.9959347688F, 0.9959850351F, 0.9960348435F, 0.9960841969F, 
+   0.9961330977F, 0.9961815486F, 0.9962295521F, 0.9962771108F, 
+   0.9963242274F, 0.9963709043F, 0.9964171441F, 0.9964629494F, 
+   0.9965083228F, 0.9965532668F, 0.9965977840F, 0.9966418768F, 
+   0.9966855479F, 0.9967287998F, 0.9967716350F, 0.9968140559F, 
+   0.9968560653F, 0.9968976655F, 0.9969388591F, 0.9969796485F, 
+   0.9970200363F, 0.9970600250F, 0.9970996170F, 0.9971388149F, 
+   0.9971776211F, 0.9972160380F, 0.9972540683F, 0.9972917142F, 
+   0.9973289783F, 0.9973658631F, 0.9974023709F, 0.9974385042F, 
+   0.9974742655F, 0.9975096571F, 0.9975446816F, 0.9975793413F, 
+   0.9976136386F, 0.9976475759F, 0.9976811557F, 0.9977143803F, 
+   0.9977472521F, 0.9977797736F, 0.9978119470F, 0.9978437748F, 
+   0.9978752593F, 0.9979064029F, 0.9979372079F, 0.9979676768F, 
+   0.9979978117F, 0.9980276151F, 0.9980570893F, 0.9980862367F, 
+   0.9981150595F, 0.9981435600F, 0.9981717406F, 0.9981996035F, 
+   0.9982271511F, 0.9982543856F, 0.9982813093F, 0.9983079246F, 
+   0.9983342336F, 0.9983602386F, 0.9983859418F, 0.9984113456F, 
+   0.9984364522F, 0.9984612638F, 0.9984857825F, 0.9985100108F, 
+   0.9985339507F, 0.9985576044F, 0.9985809743F, 0.9986040624F, 
+   0.9986268710F, 0.9986494022F, 0.9986716583F, 0.9986936413F, 
+   0.9987153535F, 0.9987367969F, 0.9987579738F, 0.9987788864F, 
+   0.9987995366F, 0.9988199267F, 0.9988400587F, 0.9988599348F, 
+   0.9988795572F, 0.9988989278F, 0.9989180487F, 0.9989369222F, 
+   0.9989555501F, 0.9989739347F, 0.9989920780F, 0.9990099820F, 
+   0.9990276487F, 0.9990450803F, 0.9990622787F, 0.9990792460F, 
+   0.9990959841F, 0.9991124952F, 0.9991287812F, 0.9991448440F, 
+   0.9991606858F, 0.9991763084F, 0.9991917139F, 0.9992069042F, 
+   0.9992218813F, 0.9992366471F, 0.9992512035F, 0.9992655525F, 
+   0.9992796961F, 0.9992936361F, 0.9993073744F, 0.9993209131F, 
+   0.9993342538F, 0.9993473987F, 0.9993603494F, 0.9993731080F, 
+   0.9993856762F, 0.9993980559F, 0.9994102490F, 0.9994222573F, 
+   0.9994340827F, 0.9994457269F, 0.9994571918F, 0.9994684793F, 
+   0.9994795910F, 0.9994905288F, 0.9995012945F, 0.9995118898F, 
+   0.9995223165F, 0.9995325765F, 0.9995426713F, 0.9995526029F, 
+   0.9995623728F, 0.9995719829F, 0.9995814349F, 0.9995907304F, 
+   0.9995998712F, 0.9996088590F, 0.9996176954F, 0.9996263821F, 
+   0.9996349208F, 0.9996433132F, 0.9996515609F, 0.9996596656F, 
+   0.9996676288F, 0.9996754522F, 0.9996831375F, 0.9996906862F, 
+   0.9996981000F, 0.9997053804F, 0.9997125290F, 0.9997195474F, 
+   0.9997264371F, 0.9997331998F, 0.9997398369F, 0.9997463500F, 
+   0.9997527406F, 0.9997590103F, 0.9997651606F, 0.9997711930F, 
+   0.9997771089F, 0.9997829098F, 0.9997885973F, 0.9997941728F, 
+   0.9997996378F, 0.9998049936F, 0.9998102419F, 0.9998153839F, 
+   0.9998204211F, 0.9998253550F, 0.9998301868F, 0.9998349182F, 
+   0.9998395503F, 0.9998440847F, 0.9998485226F, 0.9998528654F, 
+   0.9998571146F, 0.9998612713F, 0.9998653370F, 0.9998693130F, 
+   0.9998732007F, 0.9998770012F, 0.9998807159F, 0.9998843461F, 
+   0.9998878931F, 0.9998913581F, 0.9998947424F, 0.9998980473F, 
+   0.9999012740F, 0.9999044237F, 0.9999074976F, 0.9999104971F, 
+   0.9999134231F, 0.9999162771F, 0.9999190601F, 0.9999217733F, 
+   0.9999244179F, 0.9999269950F, 0.9999295058F, 0.9999319515F, 
+   0.9999343332F, 0.9999366519F, 0.9999389088F, 0.9999411050F, 
+   0.9999432416F, 0.9999453196F, 0.9999473402F, 0.9999493044F, 
+   0.9999512132F, 0.9999530677F, 0.9999548690F, 0.9999566180F, 
+   0.9999583157F, 0.9999599633F, 0.9999615616F, 0.9999631116F, 
+   0.9999646144F, 0.9999660709F, 0.9999674820F, 0.9999688487F, 
+   0.9999701719F, 0.9999714526F, 0.9999726917F, 0.9999738900F, 
+   0.9999750486F, 0.9999761682F, 0.9999772497F, 0.9999782941F, 
+   0.9999793021F, 0.9999802747F, 0.9999812126F, 0.9999821167F, 
+   0.9999829878F, 0.9999838268F, 0.9999846343F, 0.9999854113F, 
+   0.9999861584F, 0.9999868765F, 0.9999875664F, 0.9999882287F, 
+   0.9999888642F, 0.9999894736F, 0.9999900577F, 0.9999906172F, 
+   0.9999911528F, 0.9999916651F, 0.9999921548F, 0.9999926227F, 
+   0.9999930693F, 0.9999934954F, 0.9999939015F, 0.9999942883F, 
+   0.9999946564F, 0.9999950064F, 0.9999953390F, 0.9999956547F, 
+   0.9999959541F, 0.9999962377F, 0.9999965062F, 0.9999967601F, 
+   0.9999969998F, 0.9999972260F, 0.9999974392F, 0.9999976399F, 
+   0.9999978285F, 0.9999980056F, 0.9999981716F, 0.9999983271F, 
+   0.9999984724F, 0.9999986081F, 0.9999987345F, 0.9999988521F, 
+   0.9999989613F, 0.9999990625F, 0.9999991562F, 0.9999992426F, 
+   0.9999993223F, 0.9999993954F, 0.9999994625F, 0.9999995239F, 
+   0.9999995798F, 0.9999996307F, 0.9999996768F, 0.9999997184F, 
+   0.9999997559F, 0.9999997895F, 0.9999998195F, 0.9999998462F, 
+   0.9999998698F, 0.9999998906F, 0.9999999088F, 0.9999999246F, 
+   0.9999999383F, 0.9999999500F, 0.9999999600F, 0.9999999684F, 
+   0.9999999754F, 0.9999999811F, 0.9999999858F, 0.9999999896F, 
+   0.9999999925F, 0.9999999948F, 0.9999999965F, 0.9999999978F, 
+   0.9999999986F, 0.9999999992F, 0.9999999996F, 0.9999999998F, 
+   0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F, 
+ };
+ 
+ static float vwin8192[4096] = {
+   0.0000000578F, 0.0000005198F, 0.0000014438F, 0.0000028299F, 
+   0.0000046780F, 0.0000069882F, 0.0000097604F, 0.0000129945F, 
+   0.0000166908F, 0.0000208490F, 0.0000254692F, 0.0000305515F, 
+   0.0000360958F, 0.0000421021F, 0.0000485704F, 0.0000555006F, 
+   0.0000628929F, 0.0000707472F, 0.0000790635F, 0.0000878417F, 
+   0.0000970820F, 0.0001067842F, 0.0001169483F, 0.0001275744F, 
+   0.0001386625F, 0.0001502126F, 0.0001622245F, 0.0001746984F, 
+   0.0001876343F, 0.0002010320F, 0.0002148917F, 0.0002292132F, 
+   0.0002439967F, 0.0002592421F, 0.0002749493F, 0.0002911184F, 
+   0.0003077493F, 0.0003248421F, 0.0003423967F, 0.0003604132F, 
+   0.0003788915F, 0.0003978316F, 0.0004172335F, 0.0004370971F, 
+   0.0004574226F, 0.0004782098F, 0.0004994587F, 0.0005211694F, 
+   0.0005433418F, 0.0005659759F, 0.0005890717F, 0.0006126292F, 
+   0.0006366484F, 0.0006611292F, 0.0006860716F, 0.0007114757F, 
+   0.0007373414F, 0.0007636687F, 0.0007904576F, 0.0008177080F, 
+   0.0008454200F, 0.0008735935F, 0.0009022285F, 0.0009313250F, 
+   0.0009608830F, 0.0009909025F, 0.0010213834F, 0.0010523257F, 
+   0.0010837295F, 0.0011155946F, 0.0011479211F, 0.0011807090F, 
+   0.0012139582F, 0.0012476687F, 0.0012818405F, 0.0013164736F, 
+   0.0013515679F, 0.0013871235F, 0.0014231402F, 0.0014596182F, 
+   0.0014965573F, 0.0015339576F, 0.0015718190F, 0.0016101415F, 
+   0.0016489251F, 0.0016881698F, 0.0017278754F, 0.0017680421F, 
+   0.0018086698F, 0.0018497584F, 0.0018913080F, 0.0019333185F, 
+   0.0019757898F, 0.0020187221F, 0.0020621151F, 0.0021059690F, 
+   0.0021502837F, 0.0021950591F, 0.0022402953F, 0.0022859921F, 
+   0.0023321497F, 0.0023787679F, 0.0024258467F, 0.0024733861F, 
+   0.0025213861F, 0.0025698466F, 0.0026187676F, 0.0026681491F, 
+   0.0027179911F, 0.0027682935F, 0.0028190562F, 0.0028702794F, 
+   0.0029219628F, 0.0029741066F, 0.0030267107F, 0.0030797749F, 
+   0.0031332994F, 0.0031872841F, 0.0032417289F, 0.0032966338F, 
+   0.0033519988F, 0.0034078238F, 0.0034641089F, 0.0035208539F, 
+   0.0035780589F, 0.0036357237F, 0.0036938485F, 0.0037524331F, 
+   0.0038114775F, 0.0038709817F, 0.0039309456F, 0.0039913692F, 
+   0.0040522524F, 0.0041135953F, 0.0041753978F, 0.0042376599F, 
+   0.0043003814F, 0.0043635624F, 0.0044272029F, 0.0044913028F, 
+   0.0045558620F, 0.0046208806F, 0.0046863585F, 0.0047522955F, 
+   0.0048186919F, 0.0048855473F, 0.0049528619F, 0.0050206356F, 
+   0.0050888684F, 0.0051575601F, 0.0052267108F, 0.0052963204F, 
+   0.0053663890F, 0.0054369163F, 0.0055079025F, 0.0055793474F, 
+   0.0056512510F, 0.0057236133F, 0.0057964342F, 0.0058697137F, 
+   0.0059434517F, 0.0060176482F, 0.0060923032F, 0.0061674166F, 
+   0.0062429883F, 0.0063190183F, 0.0063955066F, 0.0064724532F, 
+   0.0065498579F, 0.0066277207F, 0.0067060416F, 0.0067848205F, 
+   0.0068640575F, 0.0069437523F, 0.0070239051F, 0.0071045157F, 
+   0.0071855840F, 0.0072671102F, 0.0073490940F, 0.0074315355F, 
+   0.0075144345F, 0.0075977911F, 0.0076816052F, 0.0077658768F, 
+   0.0078506057F, 0.0079357920F, 0.0080214355F, 0.0081075363F, 
+   0.0081940943F, 0.0082811094F, 0.0083685816F, 0.0084565108F, 
+   0.0085448970F, 0.0086337401F, 0.0087230401F, 0.0088127969F, 
+   0.0089030104F, 0.0089936807F, 0.0090848076F, 0.0091763911F, 
+   0.0092684311F, 0.0093609276F, 0.0094538805F, 0.0095472898F, 
+   0.0096411554F, 0.0097354772F, 0.0098302552F, 0.0099254894F, 
+   0.0100211796F, 0.0101173259F, 0.0102139281F, 0.0103109863F, 
+   0.0104085002F, 0.0105064700F, 0.0106048955F, 0.0107037766F, 
+   0.0108031133F, 0.0109029056F, 0.0110031534F, 0.0111038565F, 
+   0.0112050151F, 0.0113066289F, 0.0114086980F, 0.0115112222F, 
+   0.0116142015F, 0.0117176359F, 0.0118215252F, 0.0119258695F, 
+   0.0120306686F, 0.0121359225F, 0.0122416312F, 0.0123477944F, 
+   0.0124544123F, 0.0125614847F, 0.0126690116F, 0.0127769928F, 
+   0.0128854284F, 0.0129943182F, 0.0131036623F, 0.0132134604F, 
+   0.0133237126F, 0.0134344188F, 0.0135455790F, 0.0136571929F, 
+   0.0137692607F, 0.0138817821F, 0.0139947572F, 0.0141081859F, 
+   0.0142220681F, 0.0143364037F, 0.0144511927F, 0.0145664350F, 
+   0.0146821304F, 0.0147982791F, 0.0149148808F, 0.0150319355F, 
+   0.0151494431F, 0.0152674036F, 0.0153858168F, 0.0155046828F, 
+   0.0156240014F, 0.0157437726F, 0.0158639962F, 0.0159846723F, 
+   0.0161058007F, 0.0162273814F, 0.0163494142F, 0.0164718991F, 
+   0.0165948361F, 0.0167182250F, 0.0168420658F, 0.0169663584F, 
+   0.0170911027F, 0.0172162987F, 0.0173419462F, 0.0174680452F, 
+   0.0175945956F, 0.0177215974F, 0.0178490504F, 0.0179769545F, 
+   0.0181053098F, 0.0182341160F, 0.0183633732F, 0.0184930812F, 
+   0.0186232399F, 0.0187538494F, 0.0188849094F, 0.0190164200F, 
+   0.0191483809F, 0.0192807923F, 0.0194136539F, 0.0195469656F, 
+   0.0196807275F, 0.0198149394F, 0.0199496012F, 0.0200847128F, 
+   0.0202202742F, 0.0203562853F, 0.0204927460F, 0.0206296561F, 
+   0.0207670157F, 0.0209048245F, 0.0210430826F, 0.0211817899F, 
+   0.0213209462F, 0.0214605515F, 0.0216006057F, 0.0217411086F, 
+   0.0218820603F, 0.0220234605F, 0.0221653093F, 0.0223076066F, 
+   0.0224503521F, 0.0225935459F, 0.0227371879F, 0.0228812779F, 
+   0.0230258160F, 0.0231708018F, 0.0233162355F, 0.0234621169F, 
+   0.0236084459F, 0.0237552224F, 0.0239024462F, 0.0240501175F, 
+   0.0241982359F, 0.0243468015F, 0.0244958141F, 0.0246452736F, 
+   0.0247951800F, 0.0249455331F, 0.0250963329F, 0.0252475792F, 
+   0.0253992720F, 0.0255514111F, 0.0257039965F, 0.0258570281F, 
+   0.0260105057F, 0.0261644293F, 0.0263187987F, 0.0264736139F, 
+   0.0266288747F, 0.0267845811F, 0.0269407330F, 0.0270973302F, 
+   0.0272543727F, 0.0274118604F, 0.0275697930F, 0.0277281707F, 
+   0.0278869932F, 0.0280462604F, 0.0282059723F, 0.0283661287F, 
+   0.0285267295F, 0.0286877747F, 0.0288492641F, 0.0290111976F, 
+   0.0291735751F, 0.0293363965F, 0.0294996617F, 0.0296633706F, 
+   0.0298275231F, 0.0299921190F, 0.0301571583F, 0.0303226409F, 
+   0.0304885667F, 0.0306549354F, 0.0308217472F, 0.0309890017F, 
+   0.0311566989F, 0.0313248388F, 0.0314934211F, 0.0316624459F, 
+   0.0318319128F, 0.0320018220F, 0.0321721732F, 0.0323429663F, 
+   0.0325142013F, 0.0326858779F, 0.0328579962F, 0.0330305559F, 
+   0.0332035570F, 0.0333769994F, 0.0335508829F, 0.0337252074F, 
+   0.0338999728F, 0.0340751790F, 0.0342508259F, 0.0344269134F, 
+   0.0346034412F, 0.0347804094F, 0.0349578178F, 0.0351356663F, 
+   0.0353139548F, 0.0354926831F, 0.0356718511F, 0.0358514588F, 
+   0.0360315059F, 0.0362119924F, 0.0363929182F, 0.0365742831F, 
+   0.0367560870F, 0.0369383297F, 0.0371210113F, 0.0373041315F, 
+   0.0374876902F, 0.0376716873F, 0.0378561226F, 0.0380409961F, 
+   0.0382263077F, 0.0384120571F, 0.0385982443F, 0.0387848691F, 
+   0.0389719315F, 0.0391594313F, 0.0393473683F, 0.0395357425F, 
+   0.0397245537F, 0.0399138017F, 0.0401034866F, 0.0402936080F, 
+   0.0404841660F, 0.0406751603F, 0.0408665909F, 0.0410584576F, 
+   0.0412507603F, 0.0414434988F, 0.0416366731F, 0.0418302829F, 
+   0.0420243282F, 0.0422188088F, 0.0424137246F, 0.0426090755F, 
+   0.0428048613F, 0.0430010819F, 0.0431977371F, 0.0433948269F, 
+   0.0435923511F, 0.0437903095F, 0.0439887020F, 0.0441875285F, 
+   0.0443867889F, 0.0445864830F, 0.0447866106F, 0.0449871717F, 
+   0.0451881661F, 0.0453895936F, 0.0455914542F, 0.0457937477F, 
+   0.0459964738F, 0.0461996326F, 0.0464032239F, 0.0466072475F, 
+   0.0468117032F, 0.0470165910F, 0.0472219107F, 0.0474276622F, 
+   0.0476338452F, 0.0478404597F, 0.0480475056F, 0.0482549827F, 
+   0.0484628907F, 0.0486712297F, 0.0488799994F, 0.0490891998F, 
+   0.0492988306F, 0.0495088917F, 0.0497193830F, 0.0499303043F, 
+   0.0501416554F, 0.0503534363F, 0.0505656468F, 0.0507782867F, 
+   0.0509913559F, 0.0512048542F, 0.0514187815F, 0.0516331376F, 
+   0.0518479225F, 0.0520631358F, 0.0522787775F, 0.0524948475F, 
+   0.0527113455F, 0.0529282715F, 0.0531456252F, 0.0533634066F, 
+   0.0535816154F, 0.0538002515F, 0.0540193148F, 0.0542388051F, 
+   0.0544587222F, 0.0546790660F, 0.0548998364F, 0.0551210331F, 
+   0.0553426561F, 0.0555647051F, 0.0557871801F, 0.0560100807F, 
+   0.0562334070F, 0.0564571587F, 0.0566813357F, 0.0569059378F, 
+   0.0571309649F, 0.0573564168F, 0.0575822933F, 0.0578085942F, 
+   0.0580353195F, 0.0582624689F, 0.0584900423F, 0.0587180396F, 
+   0.0589464605F, 0.0591753049F, 0.0594045726F, 0.0596342635F, 
+   0.0598643774F, 0.0600949141F, 0.0603258735F, 0.0605572555F, 
+   0.0607890597F, 0.0610212862F, 0.0612539346F, 0.0614870049F, 
+   0.0617204968F, 0.0619544103F, 0.0621887451F, 0.0624235010F, 
+   0.0626586780F, 0.0628942758F, 0.0631302942F, 0.0633667331F, 
+   0.0636035923F, 0.0638408717F, 0.0640785710F, 0.0643166901F, 
+   0.0645552288F, 0.0647941870F, 0.0650335645F, 0.0652733610F, 
+   0.0655135765F, 0.0657542108F, 0.0659952636F, 0.0662367348F, 
+   0.0664786242F, 0.0667209316F, 0.0669636570F, 0.0672068000F, 
+   0.0674503605F, 0.0676943384F, 0.0679387334F, 0.0681835454F, 
+   0.0684287742F, 0.0686744196F, 0.0689204814F, 0.0691669595F, 
+   0.0694138536F, 0.0696611637F, 0.0699088894F, 0.0701570307F, 
+   0.0704055873F, 0.0706545590F, 0.0709039458F, 0.0711537473F, 
+   0.0714039634F, 0.0716545939F, 0.0719056387F, 0.0721570975F, 
+   0.0724089702F, 0.0726612565F, 0.0729139563F, 0.0731670694F, 
+   0.0734205956F, 0.0736745347F, 0.0739288866F, 0.0741836510F, 
+   0.0744388277F, 0.0746944166F, 0.0749504175F, 0.0752068301F, 
+   0.0754636543F, 0.0757208899F, 0.0759785367F, 0.0762365946F, 
+   0.0764950632F, 0.0767539424F, 0.0770132320F, 0.0772729319F, 
+   0.0775330418F, 0.0777935616F, 0.0780544909F, 0.0783158298F, 
+   0.0785775778F, 0.0788397349F, 0.0791023009F, 0.0793652755F, 
+   0.0796286585F, 0.0798924498F, 0.0801566492F, 0.0804212564F, 
+   0.0806862712F, 0.0809516935F, 0.0812175231F, 0.0814837597F, 
+   0.0817504031F, 0.0820174532F, 0.0822849097F, 0.0825527724F, 
+   0.0828210412F, 0.0830897158F, 0.0833587960F, 0.0836282816F, 
+   0.0838981724F, 0.0841684682F, 0.0844391688F, 0.0847102740F, 
+   0.0849817835F, 0.0852536973F, 0.0855260150F, 0.0857987364F, 
+   0.0860718614F, 0.0863453897F, 0.0866193211F, 0.0868936554F, 
+   0.0871683924F, 0.0874435319F, 0.0877190737F, 0.0879950175F, 
+   0.0882713632F, 0.0885481105F, 0.0888252592F, 0.0891028091F, 
+   0.0893807600F, 0.0896591117F, 0.0899378639F, 0.0902170165F, 
+   0.0904965692F, 0.0907765218F, 0.0910568740F, 0.0913376258F, 
+   0.0916187767F, 0.0919003268F, 0.0921822756F, 0.0924646230F, 
+   0.0927473687F, 0.0930305126F, 0.0933140545F, 0.0935979940F, 
+   0.0938823310F, 0.0941670653F, 0.0944521966F, 0.0947377247F, 
+   0.0950236494F, 0.0953099704F, 0.0955966876F, 0.0958838007F, 
+   0.0961713094F, 0.0964592136F, 0.0967475131F, 0.0970362075F, 
+   0.0973252967F, 0.0976147805F, 0.0979046585F, 0.0981949307F, 
+   0.0984855967F, 0.0987766563F, 0.0990681093F, 0.0993599555F, 
+   0.0996521945F, 0.0999448263F, 0.1002378506F, 0.1005312671F, 
+   0.1008250755F, 0.1011192757F, 0.1014138675F, 0.1017088505F, 
+   0.1020042246F, 0.1022999895F, 0.1025961450F, 0.1028926909F, 
+   0.1031896268F, 0.1034869526F, 0.1037846680F, 0.1040827729F, 
+   0.1043812668F, 0.1046801497F, 0.1049794213F, 0.1052790813F, 
+   0.1055791294F, 0.1058795656F, 0.1061803894F, 0.1064816006F, 
+   0.1067831991F, 0.1070851846F, 0.1073875568F, 0.1076903155F, 
+   0.1079934604F, 0.1082969913F, 0.1086009079F, 0.1089052101F, 
+   0.1092098975F, 0.1095149699F, 0.1098204270F, 0.1101262687F, 
+   0.1104324946F, 0.1107391045F, 0.1110460982F, 0.1113534754F, 
+   0.1116612359F, 0.1119693793F, 0.1122779055F, 0.1125868142F, 
+   0.1128961052F, 0.1132057781F, 0.1135158328F, 0.1138262690F, 
+   0.1141370863F, 0.1144482847F, 0.1147598638F, 0.1150718233F, 
+   0.1153841631F, 0.1156968828F, 0.1160099822F, 0.1163234610F, 
+   0.1166373190F, 0.1169515559F, 0.1172661714F, 0.1175811654F, 
+   0.1178965374F, 0.1182122874F, 0.1185284149F, 0.1188449198F, 
+   0.1191618018F, 0.1194790606F, 0.1197966960F, 0.1201147076F, 
+   0.1204330953F, 0.1207518587F, 0.1210709976F, 0.1213905118F, 
+   0.1217104009F, 0.1220306647F, 0.1223513029F, 0.1226723153F, 
+   0.1229937016F, 0.1233154615F, 0.1236375948F, 0.1239601011F, 
+   0.1242829803F, 0.1246062319F, 0.1249298559F, 0.1252538518F, 
+   0.1255782195F, 0.1259029586F, 0.1262280689F, 0.1265535501F, 
+   0.1268794019F, 0.1272056241F, 0.1275322163F, 0.1278591784F, 
+   0.1281865099F, 0.1285142108F, 0.1288422805F, 0.1291707190F, 
+   0.1294995259F, 0.1298287009F, 0.1301582437F, 0.1304881542F, 
+   0.1308184319F, 0.1311490766F, 0.1314800881F, 0.1318114660F, 
+   0.1321432100F, 0.1324753200F, 0.1328077955F, 0.1331406364F, 
+   0.1334738422F, 0.1338074129F, 0.1341413479F, 0.1344756472F, 
+   0.1348103103F, 0.1351453370F, 0.1354807270F, 0.1358164801F, 
+   0.1361525959F, 0.1364890741F, 0.1368259145F, 0.1371631167F, 
+   0.1375006805F, 0.1378386056F, 0.1381768917F, 0.1385155384F, 
+   0.1388545456F, 0.1391939129F, 0.1395336400F, 0.1398737266F, 
+   0.1402141724F, 0.1405549772F, 0.1408961406F, 0.1412376623F, 
+   0.1415795421F, 0.1419217797F, 0.1422643746F, 0.1426073268F, 
+   0.1429506358F, 0.1432943013F, 0.1436383231F, 0.1439827008F, 
+   0.1443274342F, 0.1446725229F, 0.1450179667F, 0.1453637652F, 
+   0.1457099181F, 0.1460564252F, 0.1464032861F, 0.1467505006F, 
+   0.1470980682F, 0.1474459888F, 0.1477942620F, 0.1481428875F, 
+   0.1484918651F, 0.1488411942F, 0.1491908748F, 0.1495409065F, 
+   0.1498912889F, 0.1502420218F, 0.1505931048F, 0.1509445376F, 
+   0.1512963200F, 0.1516484516F, 0.1520009321F, 0.1523537612F, 
+   0.1527069385F, 0.1530604638F, 0.1534143368F, 0.1537685571F, 
+   0.1541231244F, 0.1544780384F, 0.1548332987F, 0.1551889052F, 
+   0.1555448574F, 0.1559011550F, 0.1562577978F, 0.1566147853F, 
+   0.1569721173F, 0.1573297935F, 0.1576878135F, 0.1580461771F, 
+   0.1584048838F, 0.1587639334F, 0.1591233255F, 0.1594830599F, 
+   0.1598431361F, 0.1602035540F, 0.1605643131F, 0.1609254131F, 
+   0.1612868537F, 0.1616486346F, 0.1620107555F, 0.1623732160F, 
+   0.1627360158F, 0.1630991545F, 0.1634626319F, 0.1638264476F, 
+   0.1641906013F, 0.1645550926F, 0.1649199212F, 0.1652850869F, 
+   0.1656505892F, 0.1660164278F, 0.1663826024F, 0.1667491127F, 
+   0.1671159583F, 0.1674831388F, 0.1678506541F, 0.1682185036F, 
+   0.1685866872F, 0.1689552044F, 0.1693240549F, 0.1696932384F, 
+   0.1700627545F, 0.1704326029F, 0.1708027833F, 0.1711732952F, 
+   0.1715441385F, 0.1719153127F, 0.1722868175F, 0.1726586526F, 
+   0.1730308176F, 0.1734033121F, 0.1737761359F, 0.1741492886F, 
+   0.1745227698F, 0.1748965792F, 0.1752707164F, 0.1756451812F, 
+   0.1760199731F, 0.1763950918F, 0.1767705370F, 0.1771463083F, 
+   0.1775224054F, 0.1778988279F, 0.1782755754F, 0.1786526477F, 
+   0.1790300444F, 0.1794077651F, 0.1797858094F, 0.1801641771F, 
+   0.1805428677F, 0.1809218810F, 0.1813012165F, 0.1816808739F, 
+   0.1820608528F, 0.1824411530F, 0.1828217739F, 0.1832027154F, 
+   0.1835839770F, 0.1839655584F, 0.1843474592F, 0.1847296790F, 
+   0.1851122175F, 0.1854950744F, 0.1858782492F, 0.1862617417F, 
+   0.1866455514F, 0.1870296780F, 0.1874141211F, 0.1877988804F, 
+   0.1881839555F, 0.1885693461F, 0.1889550517F, 0.1893410721F, 
+   0.1897274068F, 0.1901140555F, 0.1905010178F, 0.1908882933F, 
+   0.1912758818F, 0.1916637828F, 0.1920519959F, 0.1924405208F, 
+   0.1928293571F, 0.1932185044F, 0.1936079625F, 0.1939977308F, 
+   0.1943878091F, 0.1947781969F, 0.1951688939F, 0.1955598998F, 
+   0.1959512141F, 0.1963428364F, 0.1967347665F, 0.1971270038F, 
+   0.1975195482F, 0.1979123990F, 0.1983055561F, 0.1986990190F, 
+   0.1990927873F, 0.1994868607F, 0.1998812388F, 0.2002759212F, 
+   0.2006709075F, 0.2010661974F, 0.2014617904F, 0.2018576862F, 
+   0.2022538844F, 0.2026503847F, 0.2030471865F, 0.2034442897F, 
+   0.2038416937F, 0.2042393982F, 0.2046374028F, 0.2050357071F, 
+   0.2054343107F, 0.2058332133F, 0.2062324145F, 0.2066319138F, 
+   0.2070317110F, 0.2074318055F, 0.2078321970F, 0.2082328852F, 
+   0.2086338696F, 0.2090351498F, 0.2094367255F, 0.2098385962F, 
+   0.2102407617F, 0.2106432213F, 0.2110459749F, 0.2114490220F, 
+   0.2118523621F, 0.2122559950F, 0.2126599202F, 0.2130641373F, 
+   0.2134686459F, 0.2138734456F, 0.2142785361F, 0.2146839168F, 
+   0.2150895875F, 0.2154955478F, 0.2159017972F, 0.2163083353F, 
+   0.2167151617F, 0.2171222761F, 0.2175296780F, 0.2179373670F, 
+   0.2183453428F, 0.2187536049F, 0.2191621529F, 0.2195709864F, 
+   0.2199801051F, 0.2203895085F, 0.2207991961F, 0.2212091677F, 
+   0.2216194228F, 0.2220299610F, 0.2224407818F, 0.2228518850F, 
+   0.2232632699F, 0.2236749364F, 0.2240868839F, 0.2244991121F, 
+   0.2249116204F, 0.2253244086F, 0.2257374763F, 0.2261508229F, 
+   0.2265644481F, 0.2269783514F, 0.2273925326F, 0.2278069911F, 
+   0.2282217265F, 0.2286367384F, 0.2290520265F, 0.2294675902F, 
+   0.2298834292F, 0.2302995431F, 0.2307159314F, 0.2311325937F, 
+   0.2315495297F, 0.2319667388F, 0.2323842207F, 0.2328019749F, 
+   0.2332200011F, 0.2336382988F, 0.2340568675F, 0.2344757070F, 
+   0.2348948166F, 0.2353141961F, 0.2357338450F, 0.2361537629F, 
+   0.2365739493F, 0.2369944038F, 0.2374151261F, 0.2378361156F, 
+   0.2382573720F, 0.2386788948F, 0.2391006836F, 0.2395227380F, 
+   0.2399450575F, 0.2403676417F, 0.2407904902F, 0.2412136026F, 
+   0.2416369783F, 0.2420606171F, 0.2424845185F, 0.2429086820F, 
+   0.2433331072F, 0.2437577936F, 0.2441827409F, 0.2446079486F, 
+   0.2450334163F, 0.2454591435F, 0.2458851298F, 0.2463113747F, 
+   0.2467378779F, 0.2471646389F, 0.2475916573F, 0.2480189325F, 
+   0.2484464643F, 0.2488742521F, 0.2493022955F, 0.2497305940F, 
+   0.2501591473F, 0.2505879549F, 0.2510170163F, 0.2514463311F, 
+   0.2518758989F, 0.2523057193F, 0.2527357916F, 0.2531661157F, 
+   0.2535966909F, 0.2540275169F, 0.2544585931F, 0.2548899193F, 
+   0.2553214948F, 0.2557533193F, 0.2561853924F, 0.2566177135F, 
+   0.2570502822F, 0.2574830981F, 0.2579161608F, 0.2583494697F, 
+   0.2587830245F, 0.2592168246F, 0.2596508697F, 0.2600851593F, 
+   0.2605196929F, 0.2609544701F, 0.2613894904F, 0.2618247534F, 
+   0.2622602586F, 0.2626960055F, 0.2631319938F, 0.2635682230F, 
+   0.2640046925F, 0.2644414021F, 0.2648783511F, 0.2653155391F, 
+   0.2657529657F, 0.2661906305F, 0.2666285329F, 0.2670666725F, 
+   0.2675050489F, 0.2679436616F, 0.2683825101F, 0.2688215940F, 
+   0.2692609127F, 0.2697004660F, 0.2701402532F, 0.2705802739F, 
+   0.2710205278F, 0.2714610142F, 0.2719017327F, 0.2723426830F, 
+   0.2727838644F, 0.2732252766F, 0.2736669191F, 0.2741087914F, 
+   0.2745508930F, 0.2749932235F, 0.2754357824F, 0.2758785693F, 
+   0.2763215837F, 0.2767648251F, 0.2772082930F, 0.2776519870F, 
+   0.2780959066F, 0.2785400513F, 0.2789844207F, 0.2794290143F, 
+   0.2798738316F, 0.2803188722F, 0.2807641355F, 0.2812096211F, 
+   0.2816553286F, 0.2821012574F, 0.2825474071F, 0.2829937773F, 
+   0.2834403673F, 0.2838871768F, 0.2843342053F, 0.2847814523F, 
+   0.2852289174F, 0.2856765999F, 0.2861244996F, 0.2865726159F, 
+   0.2870209482F, 0.2874694962F, 0.2879182594F, 0.2883672372F, 
+   0.2888164293F, 0.2892658350F, 0.2897154540F, 0.2901652858F, 
+   0.2906153298F, 0.2910655856F, 0.2915160527F, 0.2919667306F, 
+   0.2924176189F, 0.2928687171F, 0.2933200246F, 0.2937715409F, 
+   0.2942232657F, 0.2946751984F, 0.2951273386F, 0.2955796856F, 
+   0.2960322391F, 0.2964849986F, 0.2969379636F, 0.2973911335F, 
+   0.2978445080F, 0.2982980864F, 0.2987518684F, 0.2992058534F, 
+   0.2996600409F, 0.3001144305F, 0.3005690217F, 0.3010238139F, 
+   0.3014788067F, 0.3019339995F, 0.3023893920F, 0.3028449835F, 
+   0.3033007736F, 0.3037567618F, 0.3042129477F, 0.3046693306F, 
+   0.3051259102F, 0.3055826859F, 0.3060396572F, 0.3064968236F, 
+   0.3069541847F, 0.3074117399F, 0.3078694887F, 0.3083274307F, 
+   0.3087855653F, 0.3092438920F, 0.3097024104F, 0.3101611199F, 
+   0.3106200200F, 0.3110791103F, 0.3115383902F, 0.3119978592F, 
+   0.3124575169F, 0.3129173627F, 0.3133773961F, 0.3138376166F, 
+   0.3142980238F, 0.3147586170F, 0.3152193959F, 0.3156803598F, 
+   0.3161415084F, 0.3166028410F, 0.3170643573F, 0.3175260566F, 
+   0.3179879384F, 0.3184500023F, 0.3189122478F, 0.3193746743F, 
+   0.3198372814F, 0.3203000685F, 0.3207630351F, 0.3212261807F, 
+   0.3216895048F, 0.3221530069F, 0.3226166865F, 0.3230805430F, 
+   0.3235445760F, 0.3240087849F, 0.3244731693F, 0.3249377285F, 
+   0.3254024622F, 0.3258673698F, 0.3263324507F, 0.3267977045F, 
+   0.3272631306F, 0.3277287286F, 0.3281944978F, 0.3286604379F, 
+   0.3291265482F, 0.3295928284F, 0.3300592777F, 0.3305258958F, 
+   0.3309926821F, 0.3314596361F, 0.3319267573F, 0.3323940451F, 
+   0.3328614990F, 0.3333291186F, 0.3337969033F, 0.3342648525F, 
+   0.3347329658F, 0.3352012427F, 0.3356696825F, 0.3361382849F, 
+   0.3366070492F, 0.3370759749F, 0.3375450616F, 0.3380143087F, 
+   0.3384837156F, 0.3389532819F, 0.3394230071F, 0.3398928905F, 
+   0.3403629317F, 0.3408331302F, 0.3413034854F, 0.3417739967F, 
+   0.3422446638F, 0.3427154860F, 0.3431864628F, 0.3436575938F, 
+   0.3441288782F, 0.3446003158F, 0.3450719058F, 0.3455436478F, 
+   0.3460155412F, 0.3464875856F, 0.3469597804F, 0.3474321250F, 
+   0.3479046189F, 0.3483772617F, 0.3488500527F, 0.3493229914F, 
+   0.3497960774F, 0.3502693100F, 0.3507426887F, 0.3512162131F, 
+   0.3516898825F, 0.3521636965F, 0.3526376545F, 0.3531117559F, 
+   0.3535860003F, 0.3540603870F, 0.3545349157F, 0.3550095856F, 
+   0.3554843964F, 0.3559593474F, 0.3564344381F, 0.3569096680F, 
+   0.3573850366F, 0.3578605432F, 0.3583361875F, 0.3588119687F, 
+   0.3592878865F, 0.3597639402F, 0.3602401293F, 0.3607164533F, 
+   0.3611929117F, 0.3616695038F, 0.3621462292F, 0.3626230873F, 
+   0.3631000776F, 0.3635771995F, 0.3640544525F, 0.3645318360F, 
+   0.3650093496F, 0.3654869926F, 0.3659647645F, 0.3664426648F, 
+   0.3669206930F, 0.3673988484F, 0.3678771306F, 0.3683555390F, 
+   0.3688340731F, 0.3693127322F, 0.3697915160F, 0.3702704237F, 
+   0.3707494549F, 0.3712286091F, 0.3717078857F, 0.3721872840F, 
+   0.3726668037F, 0.3731464441F, 0.3736262047F, 0.3741060850F, 
+   0.3745860843F, 0.3750662023F, 0.3755464382F, 0.3760267915F, 
+   0.3765072618F, 0.3769878484F, 0.3774685509F, 0.3779493686F, 
+   0.3784303010F, 0.3789113475F, 0.3793925076F, 0.3798737809F, 
+   0.3803551666F, 0.3808366642F, 0.3813182733F, 0.3817999932F, 
+   0.3822818234F, 0.3827637633F, 0.3832458124F, 0.3837279702F, 
+   0.3842102360F, 0.3846926093F, 0.3851750897F, 0.3856576764F, 
+   0.3861403690F, 0.3866231670F, 0.3871060696F, 0.3875890765F, 
+   0.3880721870F, 0.3885554007F, 0.3890387168F, 0.3895221349F, 
+   0.3900056544F, 0.3904892748F, 0.3909729955F, 0.3914568160F, 
+   0.3919407356F, 0.3924247539F, 0.3929088702F, 0.3933930841F, 
+   0.3938773949F, 0.3943618021F, 0.3948463052F, 0.3953309035F, 
+   0.3958155966F, 0.3963003838F, 0.3967852646F, 0.3972702385F, 
+   0.3977553048F, 0.3982404631F, 0.3987257127F, 0.3992110531F, 
+   0.3996964838F, 0.4001820041F, 0.4006676136F, 0.4011533116F, 
+   0.4016390976F, 0.4021249710F, 0.4026109313F, 0.4030969779F, 
+   0.4035831102F, 0.4040693277F, 0.4045556299F, 0.4050420160F, 
+   0.4055284857F, 0.4060150383F, 0.4065016732F, 0.4069883899F, 
+   0.4074751879F, 0.4079620665F, 0.4084490252F, 0.4089360635F, 
+   0.4094231807F, 0.4099103763F, 0.4103976498F, 0.4108850005F, 
+   0.4113724280F, 0.4118599315F, 0.4123475107F, 0.4128351648F, 
+   0.4133228934F, 0.4138106959F, 0.4142985716F, 0.4147865201F, 
+   0.4152745408F, 0.4157626330F, 0.4162507963F, 0.4167390301F, 
+   0.4172273337F, 0.4177157067F, 0.4182041484F, 0.4186926583F, 
+   0.4191812359F, 0.4196698805F, 0.4201585915F, 0.4206473685F, 
+   0.4211362108F, 0.4216251179F, 0.4221140892F, 0.4226031241F, 
+   0.4230922221F, 0.4235813826F, 0.4240706050F, 0.4245598887F, 
+   0.4250492332F, 0.4255386379F, 0.4260281022F, 0.4265176256F, 
+   0.4270072075F, 0.4274968473F, 0.4279865445F, 0.4284762984F, 
+   0.4289661086F, 0.4294559743F, 0.4299458951F, 0.4304358704F, 
+   0.4309258996F, 0.4314159822F, 0.4319061175F, 0.4323963050F, 
+   0.4328865441F, 0.4333768342F, 0.4338671749F, 0.4343575654F, 
+   0.4348480052F, 0.4353384938F, 0.4358290306F, 0.4363196149F, 
+   0.4368102463F, 0.4373009241F, 0.4377916478F, 0.4382824168F, 
+   0.4387732305F, 0.4392640884F, 0.4397549899F, 0.4402459343F, 
+   0.4407369212F, 0.4412279499F, 0.4417190198F, 0.4422101305F, 
+   0.4427012813F, 0.4431924717F, 0.4436837010F, 0.4441749686F, 
+   0.4446662742F, 0.4451576169F, 0.4456489963F, 0.4461404118F, 
+   0.4466318628F, 0.4471233487F, 0.4476148690F, 0.4481064230F, 
+   0.4485980103F, 0.4490896302F, 0.4495812821F, 0.4500729654F, 
+   0.4505646797F, 0.4510564243F, 0.4515481986F, 0.4520400021F, 
+   0.4525318341F, 0.4530236942F, 0.4535155816F, 0.4540074959F, 
+   0.4544994365F, 0.4549914028F, 0.4554833941F, 0.4559754100F, 
+   0.4564674499F, 0.4569595131F, 0.4574515991F, 0.4579437074F, 
+   0.4584358372F, 0.4589279881F, 0.4594201595F, 0.4599123508F, 
+   0.4604045615F, 0.4608967908F, 0.4613890383F, 0.4618813034F, 
+   0.4623735855F, 0.4628658841F, 0.4633581984F, 0.4638505281F, 
+   0.4643428724F, 0.4648352308F, 0.4653276028F, 0.4658199877F, 
+   0.4663123849F, 0.4668047940F, 0.4672972143F, 0.4677896451F, 
+   0.4682820861F, 0.4687745365F, 0.4692669958F, 0.4697594634F, 
+   0.4702519387F, 0.4707444211F, 0.4712369102F, 0.4717294052F, 
+   0.4722219056F, 0.4727144109F, 0.4732069204F, 0.4736994336F, 
+   0.4741919498F, 0.4746844686F, 0.4751769893F, 0.4756695113F, 
+   0.4761620341F, 0.4766545571F, 0.4771470797F, 0.4776396013F, 
+   0.4781321213F, 0.4786246392F, 0.4791171544F, 0.4796096663F, 
+   0.4801021744F, 0.4805946779F, 0.4810871765F, 0.4815796694F, 
+   0.4820721561F, 0.4825646360F, 0.4830571086F, 0.4835495732F, 
+   0.4840420293F, 0.4845344763F, 0.4850269136F, 0.4855193407F, 
+   0.4860117569F, 0.4865041617F, 0.4869965545F, 0.4874889347F, 
+   0.4879813018F, 0.4884736551F, 0.4889659941F, 0.4894583182F, 
+   0.4899506268F, 0.4904429193F, 0.4909351952F, 0.4914274538F, 
+   0.4919196947F, 0.4924119172F, 0.4929041207F, 0.4933963046F, 
+   0.4938884685F, 0.4943806116F, 0.4948727335F, 0.4953648335F, 
+   0.4958569110F, 0.4963489656F, 0.4968409965F, 0.4973330032F, 
+   0.4978249852F, 0.4983169419F, 0.4988088726F, 0.4993007768F, 
+   0.4997926539F, 0.5002845034F, 0.5007763247F, 0.5012681171F, 
+   0.5017598801F, 0.5022516132F, 0.5027433157F, 0.5032349871F, 
+   0.5037266268F, 0.5042182341F, 0.5047098086F, 0.5052013497F, 
+   0.5056928567F, 0.5061843292F, 0.5066757664F, 0.5071671679F, 
+   0.5076585330F, 0.5081498613F, 0.5086411520F, 0.5091324047F, 
+   0.5096236187F, 0.5101147934F, 0.5106059284F, 0.5110970230F, 
+   0.5115880766F, 0.5120790887F, 0.5125700587F, 0.5130609860F, 
+   0.5135518700F, 0.5140427102F, 0.5145335059F, 0.5150242566F, 
+   0.5155149618F, 0.5160056208F, 0.5164962331F, 0.5169867980F, 
+   0.5174773151F, 0.5179677837F, 0.5184582033F, 0.5189485733F, 
+   0.5194388931F, 0.5199291621F, 0.5204193798F, 0.5209095455F, 
+   0.5213996588F, 0.5218897190F, 0.5223797256F, 0.5228696779F, 
+   0.5233595755F, 0.5238494177F, 0.5243392039F, 0.5248289337F, 
+   0.5253186063F, 0.5258082213F, 0.5262977781F, 0.5267872760F, 
+   0.5272767146F, 0.5277660932F, 0.5282554112F, 0.5287446682F, 
+   0.5292338635F, 0.5297229965F, 0.5302120667F, 0.5307010736F, 
+   0.5311900164F, 0.5316788947F, 0.5321677079F, 0.5326564554F, 
+   0.5331451366F, 0.5336337511F, 0.5341222981F, 0.5346107771F, 
+   0.5350991876F, 0.5355875290F, 0.5360758007F, 0.5365640021F, 
+   0.5370521327F, 0.5375401920F, 0.5380281792F, 0.5385160939F, 
+   0.5390039355F, 0.5394917034F, 0.5399793971F, 0.5404670159F, 
+   0.5409545594F, 0.5414420269F, 0.5419294179F, 0.5424167318F, 
+   0.5429039680F, 0.5433911261F, 0.5438782053F, 0.5443652051F, 
+   0.5448521250F, 0.5453389644F, 0.5458257228F, 0.5463123995F, 
+   0.5467989940F, 0.5472855057F, 0.5477719341F, 0.5482582786F, 
+   0.5487445387F, 0.5492307137F, 0.5497168031F, 0.5502028063F, 
+   0.5506887228F, 0.5511745520F, 0.5516602934F, 0.5521459463F, 
+   0.5526315103F, 0.5531169847F, 0.5536023690F, 0.5540876626F, 
+   0.5545728649F, 0.5550579755F, 0.5555429937F, 0.5560279189F, 
+   0.5565127507F, 0.5569974884F, 0.5574821315F, 0.5579666794F, 
+   0.5584511316F, 0.5589354875F, 0.5594197465F, 0.5599039080F, 
+   0.5603879716F, 0.5608719367F, 0.5613558026F, 0.5618395689F, 
+   0.5623232350F, 0.5628068002F, 0.5632902642F, 0.5637736262F, 
+   0.5642568858F, 0.5647400423F, 0.5652230953F, 0.5657060442F, 
+   0.5661888883F, 0.5666716272F, 0.5671542603F, 0.5676367870F, 
+   0.5681192069F, 0.5686015192F, 0.5690837235F, 0.5695658192F, 
+   0.5700478058F, 0.5705296827F, 0.5710114494F, 0.5714931052F, 
+   0.5719746497F, 0.5724560822F, 0.5729374023F, 0.5734186094F, 
+   0.5738997029F, 0.5743806823F, 0.5748615470F, 0.5753422965F, 
+   0.5758229301F, 0.5763034475F, 0.5767838480F, 0.5772641310F, 
+   0.5777442960F, 0.5782243426F, 0.5787042700F, 0.5791840778F, 
+   0.5796637654F, 0.5801433322F, 0.5806227778F, 0.5811021016F, 
+   0.5815813029F, 0.5820603814F, 0.5825393363F, 0.5830181673F, 
+   0.5834968737F, 0.5839754549F, 0.5844539105F, 0.5849322399F, 
+   0.5854104425F, 0.5858885179F, 0.5863664653F, 0.5868442844F, 
+   0.5873219746F, 0.5877995353F, 0.5882769660F, 0.5887542661F, 
+   0.5892314351F, 0.5897084724F, 0.5901853776F, 0.5906621500F, 
+   0.5911387892F, 0.5916152945F, 0.5920916655F, 0.5925679016F, 
+   0.5930440022F, 0.5935199669F, 0.5939957950F, 0.5944714861F, 
+   0.5949470396F, 0.5954224550F, 0.5958977317F, 0.5963728692F, 
+   0.5968478669F, 0.5973227244F, 0.5977974411F, 0.5982720163F, 
+   0.5987464497F, 0.5992207407F, 0.5996948887F, 0.6001688932F, 
+   0.6006427537F, 0.6011164696F, 0.6015900405F, 0.6020634657F, 
+   0.6025367447F, 0.6030098770F, 0.6034828621F, 0.6039556995F, 
+   0.6044283885F, 0.6049009288F, 0.6053733196F, 0.6058455606F, 
+   0.6063176512F, 0.6067895909F, 0.6072613790F, 0.6077330152F, 
+   0.6082044989F, 0.6086758295F, 0.6091470065F, 0.6096180294F, 
+   0.6100888977F, 0.6105596108F, 0.6110301682F, 0.6115005694F, 
+   0.6119708139F, 0.6124409011F, 0.6129108305F, 0.6133806017F, 
+   0.6138502139F, 0.6143196669F, 0.6147889599F, 0.6152580926F, 
+   0.6157270643F, 0.6161958746F, 0.6166645230F, 0.6171330088F, 
+   0.6176013317F, 0.6180694910F, 0.6185374863F, 0.6190053171F, 
+   0.6194729827F, 0.6199404828F, 0.6204078167F, 0.6208749841F, 
+   0.6213419842F, 0.6218088168F, 0.6222754811F, 0.6227419768F, 
+   0.6232083032F, 0.6236744600F, 0.6241404465F, 0.6246062622F, 
+   0.6250719067F, 0.6255373795F, 0.6260026799F, 0.6264678076F, 
+   0.6269327619F, 0.6273975425F, 0.6278621487F, 0.6283265800F, 
+   0.6287908361F, 0.6292549163F, 0.6297188201F, 0.6301825471F, 
+   0.6306460966F, 0.6311094683F, 0.6315726617F, 0.6320356761F, 
+   0.6324985111F, 0.6329611662F, 0.6334236410F, 0.6338859348F, 
+   0.6343480472F, 0.6348099777F, 0.6352717257F, 0.6357332909F, 
+   0.6361946726F, 0.6366558704F, 0.6371168837F, 0.6375777122F, 
+   0.6380383552F, 0.6384988123F, 0.6389590830F, 0.6394191668F, 
+   0.6398790631F, 0.6403387716F, 0.6407982916F, 0.6412576228F, 
+   0.6417167645F, 0.6421757163F, 0.6426344778F, 0.6430930483F, 
+   0.6435514275F, 0.6440096149F, 0.6444676098F, 0.6449254119F, 
+   0.6453830207F, 0.6458404356F, 0.6462976562F, 0.6467546820F, 
+   0.6472115125F, 0.6476681472F, 0.6481245856F, 0.6485808273F, 
+   0.6490368717F, 0.6494927183F, 0.6499483667F, 0.6504038164F, 
+   0.6508590670F, 0.6513141178F, 0.6517689684F, 0.6522236185F, 
+   0.6526780673F, 0.6531323146F, 0.6535863598F, 0.6540402024F, 
+   0.6544938419F, 0.6549472779F, 0.6554005099F, 0.6558535373F, 
+   0.6563063598F, 0.6567589769F, 0.6572113880F, 0.6576635927F, 
+   0.6581155906F, 0.6585673810F, 0.6590189637F, 0.6594703380F, 
+   0.6599215035F, 0.6603724598F, 0.6608232064F, 0.6612737427F, 
+   0.6617240684F, 0.6621741829F, 0.6626240859F, 0.6630737767F, 
+   0.6635232550F, 0.6639725202F, 0.6644215720F, 0.6648704098F, 
+   0.6653190332F, 0.6657674417F, 0.6662156348F, 0.6666636121F, 
+   0.6671113731F, 0.6675589174F, 0.6680062445F, 0.6684533538F, 
+   0.6689002450F, 0.6693469177F, 0.6697933712F, 0.6702396052F, 
+   0.6706856193F, 0.6711314129F, 0.6715769855F, 0.6720223369F, 
+   0.6724674664F, 0.6729123736F, 0.6733570581F, 0.6738015194F, 
+   0.6742457570F, 0.6746897706F, 0.6751335596F, 0.6755771236F, 
+   0.6760204621F, 0.6764635747F, 0.6769064609F, 0.6773491204F, 
+   0.6777915525F, 0.6782337570F, 0.6786757332F, 0.6791174809F, 
+   0.6795589995F, 0.6800002886F, 0.6804413477F, 0.6808821765F, 
+   0.6813227743F, 0.6817631409F, 0.6822032758F, 0.6826431785F, 
+   0.6830828485F, 0.6835222855F, 0.6839614890F, 0.6844004585F, 
+   0.6848391936F, 0.6852776939F, 0.6857159589F, 0.6861539883F, 
+   0.6865917815F, 0.6870293381F, 0.6874666576F, 0.6879037398F, 
+   0.6883405840F, 0.6887771899F, 0.6892135571F, 0.6896496850F, 
+   0.6900855733F, 0.6905212216F, 0.6909566294F, 0.6913917963F, 
+   0.6918267218F, 0.6922614055F, 0.6926958471F, 0.6931300459F, 
+   0.6935640018F, 0.6939977141F, 0.6944311825F, 0.6948644066F, 
+   0.6952973859F, 0.6957301200F, 0.6961626085F, 0.6965948510F, 
+   0.6970268470F, 0.6974585961F, 0.6978900980F, 0.6983213521F, 
+   0.6987523580F, 0.6991831154F, 0.6996136238F, 0.7000438828F, 
+   0.7004738921F, 0.7009036510F, 0.7013331594F, 0.7017624166F, 
+   0.7021914224F, 0.7026201763F, 0.7030486779F, 0.7034769268F, 
+   0.7039049226F, 0.7043326648F, 0.7047601531F, 0.7051873870F, 
+   0.7056143662F, 0.7060410902F, 0.7064675586F, 0.7068937711F, 
+   0.7073197271F, 0.7077454264F, 0.7081708684F, 0.7085960529F, 
+   0.7090209793F, 0.7094456474F, 0.7098700566F, 0.7102942066F, 
+   0.7107180970F, 0.7111417274F, 0.7115650974F, 0.7119882066F, 
+   0.7124110545F, 0.7128336409F, 0.7132559653F, 0.7136780272F, 
+   0.7140998264F, 0.7145213624F, 0.7149426348F, 0.7153636433F, 
+   0.7157843874F, 0.7162048668F, 0.7166250810F, 0.7170450296F, 
+   0.7174647124F, 0.7178841289F, 0.7183032786F, 0.7187221613F, 
+   0.7191407765F, 0.7195591239F, 0.7199772030F, 0.7203950135F, 
+   0.7208125550F, 0.7212298271F, 0.7216468294F, 0.7220635616F, 
+   0.7224800233F, 0.7228962140F, 0.7233121335F, 0.7237277813F, 
+   0.7241431571F, 0.7245582604F, 0.7249730910F, 0.7253876484F, 
+   0.7258019322F, 0.7262159422F, 0.7266296778F, 0.7270431388F, 
+   0.7274563247F, 0.7278692353F, 0.7282818700F, 0.7286942287F, 
+   0.7291063108F, 0.7295181160F, 0.7299296440F, 0.7303408944F, 
+   0.7307518669F, 0.7311625609F, 0.7315729763F, 0.7319831126F, 
+   0.7323929695F, 0.7328025466F, 0.7332118435F, 0.7336208600F, 
+   0.7340295955F, 0.7344380499F, 0.7348462226F, 0.7352541134F, 
+   0.7356617220F, 0.7360690478F, 0.7364760907F, 0.7368828502F, 
+   0.7372893259F, 0.7376955176F, 0.7381014249F, 0.7385070475F, 
+   0.7389123849F, 0.7393174368F, 0.7397222029F, 0.7401266829F, 
+   0.7405308763F, 0.7409347829F, 0.7413384023F, 0.7417417341F, 
+   0.7421447780F, 0.7425475338F, 0.7429500009F, 0.7433521791F, 
+   0.7437540681F, 0.7441556674F, 0.7445569769F, 0.7449579960F, 
+   0.7453587245F, 0.7457591621F, 0.7461593084F, 0.7465591631F, 
+   0.7469587259F, 0.7473579963F, 0.7477569741F, 0.7481556590F, 
+   0.7485540506F, 0.7489521486F, 0.7493499526F, 0.7497474623F, 
+   0.7501446775F, 0.7505415977F, 0.7509382227F, 0.7513345521F, 
+   0.7517305856F, 0.7521263229F, 0.7525217636F, 0.7529169074F, 
+   0.7533117541F, 0.7537063032F, 0.7541005545F, 0.7544945076F, 
+   0.7548881623F, 0.7552815182F, 0.7556745749F, 0.7560673323F, 
+   0.7564597899F, 0.7568519474F, 0.7572438046F, 0.7576353611F, 
+   0.7580266166F, 0.7584175708F, 0.7588082235F, 0.7591985741F, 
+   0.7595886226F, 0.7599783685F, 0.7603678116F, 0.7607569515F, 
+   0.7611457879F, 0.7615343206F, 0.7619225493F, 0.7623104735F, 
+   0.7626980931F, 0.7630854078F, 0.7634724171F, 0.7638591209F, 
+   0.7642455188F, 0.7646316106F, 0.7650173959F, 0.7654028744F, 
+   0.7657880459F, 0.7661729100F, 0.7665574664F, 0.7669417150F, 
+   0.7673256553F, 0.7677092871F, 0.7680926100F, 0.7684756239F, 
+   0.7688583284F, 0.7692407232F, 0.7696228080F, 0.7700045826F, 
+   0.7703860467F, 0.7707671999F, 0.7711480420F, 0.7715285728F, 
+   0.7719087918F, 0.7722886989F, 0.7726682938F, 0.7730475762F, 
+   0.7734265458F, 0.7738052023F, 0.7741835454F, 0.7745615750F, 
+   0.7749392906F, 0.7753166921F, 0.7756937791F, 0.7760705514F, 
+   0.7764470087F, 0.7768231508F, 0.7771989773F, 0.7775744880F, 
+   0.7779496827F, 0.7783245610F, 0.7786991227F, 0.7790733676F, 
+   0.7794472953F, 0.7798209056F, 0.7801941982F, 0.7805671729F, 
+   0.7809398294F, 0.7813121675F, 0.7816841869F, 0.7820558873F, 
+   0.7824272684F, 0.7827983301F, 0.7831690720F, 0.7835394940F, 
+   0.7839095957F, 0.7842793768F, 0.7846488373F, 0.7850179767F, 
+   0.7853867948F, 0.7857552914F, 0.7861234663F, 0.7864913191F, 
+   0.7868588497F, 0.7872260578F, 0.7875929431F, 0.7879595055F, 
+   0.7883257445F, 0.7886916601F, 0.7890572520F, 0.7894225198F, 
+   0.7897874635F, 0.7901520827F, 0.7905163772F, 0.7908803468F, 
+   0.7912439912F, 0.7916073102F, 0.7919703035F, 0.7923329710F, 
+   0.7926953124F, 0.7930573274F, 0.7934190158F, 0.7937803774F, 
+   0.7941414120F, 0.7945021193F, 0.7948624991F, 0.7952225511F, 
+   0.7955822752F, 0.7959416711F, 0.7963007387F, 0.7966594775F, 
+   0.7970178875F, 0.7973759685F, 0.7977337201F, 0.7980911422F, 
+   0.7984482346F, 0.7988049970F, 0.7991614292F, 0.7995175310F, 
+   0.7998733022F, 0.8002287426F, 0.8005838519F, 0.8009386299F, 
+   0.8012930765F, 0.8016471914F, 0.8020009744F, 0.8023544253F, 
+   0.8027075438F, 0.8030603298F, 0.8034127831F, 0.8037649035F, 
+   0.8041166906F, 0.8044681445F, 0.8048192647F, 0.8051700512F, 
+   0.8055205038F, 0.8058706222F, 0.8062204062F, 0.8065698556F, 
+   0.8069189702F, 0.8072677499F, 0.8076161944F, 0.8079643036F, 
+   0.8083120772F, 0.8086595151F, 0.8090066170F, 0.8093533827F, 
+   0.8096998122F, 0.8100459051F, 0.8103916613F, 0.8107370806F, 
+   0.8110821628F, 0.8114269077F, 0.8117713151F, 0.8121153849F, 
+   0.8124591169F, 0.8128025108F, 0.8131455666F, 0.8134882839F, 
+   0.8138306627F, 0.8141727027F, 0.8145144038F, 0.8148557658F, 
+   0.8151967886F, 0.8155374718F, 0.8158778154F, 0.8162178192F, 
+   0.8165574830F, 0.8168968067F, 0.8172357900F, 0.8175744328F, 
+   0.8179127349F, 0.8182506962F, 0.8185883164F, 0.8189255955F, 
+   0.8192625332F, 0.8195991295F, 0.8199353840F, 0.8202712967F, 
+   0.8206068673F, 0.8209420958F, 0.8212769820F, 0.8216115256F, 
+   0.8219457266F, 0.8222795848F, 0.8226131000F, 0.8229462721F, 
+   0.8232791009F, 0.8236115863F, 0.8239437280F, 0.8242755260F, 
+   0.8246069801F, 0.8249380901F, 0.8252688559F, 0.8255992774F, 
+   0.8259293544F, 0.8262590867F, 0.8265884741F, 0.8269175167F, 
+   0.8272462141F, 0.8275745663F, 0.8279025732F, 0.8282302344F, 
+   0.8285575501F, 0.8288845199F, 0.8292111437F, 0.8295374215F, 
+   0.8298633530F, 0.8301889382F, 0.8305141768F, 0.8308390688F, 
+   0.8311636141F, 0.8314878124F, 0.8318116637F, 0.8321351678F, 
+   0.8324583246F, 0.8327811340F, 0.8331035957F, 0.8334257098F, 
+   0.8337474761F, 0.8340688944F, 0.8343899647F, 0.8347106867F, 
+   0.8350310605F, 0.8353510857F, 0.8356707624F, 0.8359900904F, 
+   0.8363090696F, 0.8366276999F, 0.8369459811F, 0.8372639131F, 
+   0.8375814958F, 0.8378987292F, 0.8382156130F, 0.8385321472F, 
+   0.8388483316F, 0.8391641662F, 0.8394796508F, 0.8397947853F, 
+   0.8401095697F, 0.8404240037F, 0.8407380873F, 0.8410518204F, 
+   0.8413652029F, 0.8416782347F, 0.8419909156F, 0.8423032456F, 
+   0.8426152245F, 0.8429268523F, 0.8432381289F, 0.8435490541F, 
+   0.8438596279F, 0.8441698502F, 0.8444797208F, 0.8447892396F, 
+   0.8450984067F, 0.8454072218F, 0.8457156849F, 0.8460237959F, 
+   0.8463315547F, 0.8466389612F, 0.8469460154F, 0.8472527170F, 
+   0.8475590661F, 0.8478650625F, 0.8481707063F, 0.8484759971F, 
+   0.8487809351F, 0.8490855201F, 0.8493897521F, 0.8496936308F, 
+   0.8499971564F, 0.8503003286F, 0.8506031474F, 0.8509056128F, 
+   0.8512077246F, 0.8515094828F, 0.8518108872F, 0.8521119379F, 
+   0.8524126348F, 0.8527129777F, 0.8530129666F, 0.8533126015F, 
+   0.8536118822F, 0.8539108087F, 0.8542093809F, 0.8545075988F, 
+   0.8548054623F, 0.8551029712F, 0.8554001257F, 0.8556969255F, 
+   0.8559933707F, 0.8562894611F, 0.8565851968F, 0.8568805775F, 
+   0.8571756034F, 0.8574702743F, 0.8577645902F, 0.8580585509F, 
+   0.8583521566F, 0.8586454070F, 0.8589383021F, 0.8592308420F, 
+   0.8595230265F, 0.8598148556F, 0.8601063292F, 0.8603974473F, 
+   0.8606882098F, 0.8609786167F, 0.8612686680F, 0.8615583636F, 
+   0.8618477034F, 0.8621366874F, 0.8624253156F, 0.8627135878F, 
+   0.8630015042F, 0.8632890646F, 0.8635762690F, 0.8638631173F, 
+   0.8641496096F, 0.8644357457F, 0.8647215257F, 0.8650069495F, 
+   0.8652920171F, 0.8655767283F, 0.8658610833F, 0.8661450820F, 
+   0.8664287243F, 0.8667120102F, 0.8669949397F, 0.8672775127F, 
+   0.8675597293F, 0.8678415894F, 0.8681230929F, 0.8684042398F, 
+   0.8686850302F, 0.8689654640F, 0.8692455412F, 0.8695252617F, 
+   0.8698046255F, 0.8700836327F, 0.8703622831F, 0.8706405768F, 
+   0.8709185138F, 0.8711960940F, 0.8714733174F, 0.8717501840F, 
+   0.8720266939F, 0.8723028469F, 0.8725786430F, 0.8728540824F, 
+   0.8731291648F, 0.8734038905F, 0.8736782592F, 0.8739522711F, 
+   0.8742259261F, 0.8744992242F, 0.8747721653F, 0.8750447496F, 
+   0.8753169770F, 0.8755888475F, 0.8758603611F, 0.8761315177F, 
+   0.8764023175F, 0.8766727603F, 0.8769428462F, 0.8772125752F, 
+   0.8774819474F, 0.8777509626F, 0.8780196209F, 0.8782879224F, 
+   0.8785558669F, 0.8788234546F, 0.8790906854F, 0.8793575594F, 
+   0.8796240765F, 0.8798902368F, 0.8801560403F, 0.8804214870F, 
+   0.8806865768F, 0.8809513099F, 0.8812156863F, 0.8814797059F, 
+   0.8817433687F, 0.8820066749F, 0.8822696243F, 0.8825322171F, 
+   0.8827944532F, 0.8830563327F, 0.8833178556F, 0.8835790219F, 
+   0.8838398316F, 0.8841002848F, 0.8843603815F, 0.8846201217F, 
+   0.8848795054F, 0.8851385327F, 0.8853972036F, 0.8856555182F, 
+   0.8859134764F, 0.8861710783F, 0.8864283239F, 0.8866852133F, 
+   0.8869417464F, 0.8871979234F, 0.8874537443F, 0.8877092090F, 
+   0.8879643177F, 0.8882190704F, 0.8884734671F, 0.8887275078F, 
+   0.8889811927F, 0.8892345216F, 0.8894874948F, 0.8897401122F, 
+   0.8899923738F, 0.8902442798F, 0.8904958301F, 0.8907470248F, 
+   0.8909978640F, 0.8912483477F, 0.8914984759F, 0.8917482487F, 
+   0.8919976662F, 0.8922467284F, 0.8924954353F, 0.8927437871F, 
+   0.8929917837F, 0.8932394252F, 0.8934867118F, 0.8937336433F, 
+   0.8939802199F, 0.8942264417F, 0.8944723087F, 0.8947178210F, 
+   0.8949629785F, 0.8952077815F, 0.8954522299F, 0.8956963239F, 
+   0.8959400634F, 0.8961834486F, 0.8964264795F, 0.8966691561F, 
+   0.8969114786F, 0.8971534470F, 0.8973950614F, 0.8976363219F, 
+   0.8978772284F, 0.8981177812F, 0.8983579802F, 0.8985978256F, 
+   0.8988373174F, 0.8990764556F, 0.8993152405F, 0.8995536720F, 
+   0.8997917502F, 0.9000294751F, 0.9002668470F, 0.9005038658F, 
+   0.9007405317F, 0.9009768446F, 0.9012128048F, 0.9014484123F, 
+   0.9016836671F, 0.9019185693F, 0.9021531191F, 0.9023873165F, 
+   0.9026211616F, 0.9028546546F, 0.9030877954F, 0.9033205841F, 
+   0.9035530210F, 0.9037851059F, 0.9040168392F, 0.9042482207F, 
+   0.9044792507F, 0.9047099293F, 0.9049402564F, 0.9051702323F, 
+   0.9053998569F, 0.9056291305F, 0.9058580531F, 0.9060866248F, 
+   0.9063148457F, 0.9065427159F, 0.9067702355F, 0.9069974046F, 
+   0.9072242233F, 0.9074506917F, 0.9076768100F, 0.9079025782F, 
+   0.9081279964F, 0.9083530647F, 0.9085777833F, 0.9088021523F, 
+   0.9090261717F, 0.9092498417F, 0.9094731623F, 0.9096961338F, 
+   0.9099187561F, 0.9101410295F, 0.9103629540F, 0.9105845297F, 
+   0.9108057568F, 0.9110266354F, 0.9112471656F, 0.9114673475F, 
+   0.9116871812F, 0.9119066668F, 0.9121258046F, 0.9123445945F, 
+   0.9125630367F, 0.9127811314F, 0.9129988786F, 0.9132162785F, 
+   0.9134333312F, 0.9136500368F, 0.9138663954F, 0.9140824073F, 
+   0.9142980724F, 0.9145133910F, 0.9147283632F, 0.9149429890F, 
+   0.9151572687F, 0.9153712023F, 0.9155847900F, 0.9157980319F, 
+   0.9160109282F, 0.9162234790F, 0.9164356844F, 0.9166475445F, 
+   0.9168590595F, 0.9170702296F, 0.9172810548F, 0.9174915354F, 
+   0.9177016714F, 0.9179114629F, 0.9181209102F, 0.9183300134F, 
+   0.9185387726F, 0.9187471879F, 0.9189552595F, 0.9191629876F, 
+   0.9193703723F, 0.9195774136F, 0.9197841119F, 0.9199904672F, 
+   0.9201964797F, 0.9204021495F, 0.9206074767F, 0.9208124616F, 
+   0.9210171043F, 0.9212214049F, 0.9214253636F, 0.9216289805F, 
+   0.9218322558F, 0.9220351896F, 0.9222377821F, 0.9224400335F, 
+   0.9226419439F, 0.9228435134F, 0.9230447423F, 0.9232456307F, 
+   0.9234461787F, 0.9236463865F, 0.9238462543F, 0.9240457822F, 
+   0.9242449704F, 0.9244438190F, 0.9246423282F, 0.9248404983F, 
+   0.9250383293F, 0.9252358214F, 0.9254329747F, 0.9256297896F, 
+   0.9258262660F, 0.9260224042F, 0.9262182044F, 0.9264136667F, 
+   0.9266087913F, 0.9268035783F, 0.9269980280F, 0.9271921405F, 
+   0.9273859160F, 0.9275793546F, 0.9277724566F, 0.9279652221F, 
+   0.9281576513F, 0.9283497443F, 0.9285415014F, 0.9287329227F, 
+   0.9289240084F, 0.9291147586F, 0.9293051737F, 0.9294952536F, 
+   0.9296849987F, 0.9298744091F, 0.9300634850F, 0.9302522266F, 
+   0.9304406340F, 0.9306287074F, 0.9308164471F, 0.9310038532F, 
+   0.9311909259F, 0.9313776654F, 0.9315640719F, 0.9317501455F, 
+   0.9319358865F, 0.9321212951F, 0.9323063713F, 0.9324911155F, 
+   0.9326755279F, 0.9328596085F, 0.9330433577F, 0.9332267756F, 
+   0.9334098623F, 0.9335926182F, 0.9337750434F, 0.9339571380F, 
+   0.9341389023F, 0.9343203366F, 0.9345014409F, 0.9346822155F, 
+   0.9348626606F, 0.9350427763F, 0.9352225630F, 0.9354020207F, 
+   0.9355811498F, 0.9357599503F, 0.9359384226F, 0.9361165667F, 
+   0.9362943830F, 0.9364718716F, 0.9366490327F, 0.9368258666F, 
+   0.9370023733F, 0.9371785533F, 0.9373544066F, 0.9375299335F, 
+   0.9377051341F, 0.9378800087F, 0.9380545576F, 0.9382287809F, 
+   0.9384026787F, 0.9385762515F, 0.9387494993F, 0.9389224223F, 
+   0.9390950209F, 0.9392672951F, 0.9394392453F, 0.9396108716F, 
+   0.9397821743F, 0.9399531536F, 0.9401238096F, 0.9402941427F, 
+   0.9404641530F, 0.9406338407F, 0.9408032061F, 0.9409722495F, 
+   0.9411409709F, 0.9413093707F, 0.9414774491F, 0.9416452062F, 
+   0.9418126424F, 0.9419797579F, 0.9421465528F, 0.9423130274F, 
+   0.9424791819F, 0.9426450166F, 0.9428105317F, 0.9429757274F, 
+   0.9431406039F, 0.9433051616F, 0.9434694005F, 0.9436333209F, 
+   0.9437969232F, 0.9439602074F, 0.9441231739F, 0.9442858229F, 
+   0.9444481545F, 0.9446101691F, 0.9447718669F, 0.9449332481F, 
+   0.9450943129F, 0.9452550617F, 0.9454154945F, 0.9455756118F, 
+   0.9457354136F, 0.9458949003F, 0.9460540721F, 0.9462129292F, 
+   0.9463714719F, 0.9465297003F, 0.9466876149F, 0.9468452157F, 
+   0.9470025031F, 0.9471594772F, 0.9473161384F, 0.9474724869F, 
+   0.9476285229F, 0.9477842466F, 0.9479396584F, 0.9480947585F, 
+   0.9482495470F, 0.9484040243F, 0.9485581906F, 0.9487120462F, 
+   0.9488655913F, 0.9490188262F, 0.9491717511F, 0.9493243662F, 
+   0.9494766718F, 0.9496286683F, 0.9497803557F, 0.9499317345F, 
+   0.9500828047F, 0.9502335668F, 0.9503840209F, 0.9505341673F, 
+   0.9506840062F, 0.9508335380F, 0.9509827629F, 0.9511316810F, 
+   0.9512802928F, 0.9514285984F, 0.9515765982F, 0.9517242923F, 
+   0.9518716810F, 0.9520187646F, 0.9521655434F, 0.9523120176F, 
+   0.9524581875F, 0.9526040534F, 0.9527496154F, 0.9528948739F, 
+   0.9530398292F, 0.9531844814F, 0.9533288310F, 0.9534728780F, 
+   0.9536166229F, 0.9537600659F, 0.9539032071F, 0.9540460470F, 
+   0.9541885858F, 0.9543308237F, 0.9544727611F, 0.9546143981F, 
+   0.9547557351F, 0.9548967723F, 0.9550375100F, 0.9551779485F, 
+   0.9553180881F, 0.9554579290F, 0.9555974714F, 0.9557367158F, 
+   0.9558756623F, 0.9560143112F, 0.9561526628F, 0.9562907174F, 
+   0.9564284752F, 0.9565659366F, 0.9567031017F, 0.9568399710F, 
+   0.9569765446F, 0.9571128229F, 0.9572488061F, 0.9573844944F, 
+   0.9575198883F, 0.9576549879F, 0.9577897936F, 0.9579243056F, 
+   0.9580585242F, 0.9581924497F, 0.9583260824F, 0.9584594226F, 
+   0.9585924705F, 0.9587252264F, 0.9588576906F, 0.9589898634F, 
+   0.9591217452F, 0.9592533360F, 0.9593846364F, 0.9595156465F, 
+   0.9596463666F, 0.9597767971F, 0.9599069382F, 0.9600367901F, 
+   0.9601663533F, 0.9602956279F, 0.9604246143F, 0.9605533128F, 
+   0.9606817236F, 0.9608098471F, 0.9609376835F, 0.9610652332F, 
+   0.9611924963F, 0.9613194733F, 0.9614461644F, 0.9615725699F, 
+   0.9616986901F, 0.9618245253F, 0.9619500757F, 0.9620753418F, 
+   0.9622003238F, 0.9623250219F, 0.9624494365F, 0.9625735679F, 
+   0.9626974163F, 0.9628209821F, 0.9629442656F, 0.9630672671F, 
+   0.9631899868F, 0.9633124251F, 0.9634345822F, 0.9635564585F, 
+   0.9636780543F, 0.9637993699F, 0.9639204056F, 0.9640411616F, 
+   0.9641616383F, 0.9642818359F, 0.9644017549F, 0.9645213955F, 
+   0.9646407579F, 0.9647598426F, 0.9648786497F, 0.9649971797F, 
+   0.9651154328F, 0.9652334092F, 0.9653511095F, 0.9654685337F, 
+   0.9655856823F, 0.9657025556F, 0.9658191538F, 0.9659354773F, 
+   0.9660515263F, 0.9661673013F, 0.9662828024F, 0.9663980300F, 
+   0.9665129845F, 0.9666276660F, 0.9667420750F, 0.9668562118F, 
+   0.9669700766F, 0.9670836698F, 0.9671969917F, 0.9673100425F, 
+   0.9674228227F, 0.9675353325F, 0.9676475722F, 0.9677595422F, 
+   0.9678712428F, 0.9679826742F, 0.9680938368F, 0.9682047309F, 
+   0.9683153569F, 0.9684257150F, 0.9685358056F, 0.9686456289F, 
+   0.9687551853F, 0.9688644752F, 0.9689734987F, 0.9690822564F, 
+   0.9691907483F, 0.9692989750F, 0.9694069367F, 0.9695146337F, 
+   0.9696220663F, 0.9697292349F, 0.9698361398F, 0.9699427813F, 
+   0.9700491597F, 0.9701552754F, 0.9702611286F, 0.9703667197F, 
+   0.9704720490F, 0.9705771169F, 0.9706819236F, 0.9707864695F, 
+   0.9708907549F, 0.9709947802F, 0.9710985456F, 0.9712020514F, 
+   0.9713052981F, 0.9714082859F, 0.9715110151F, 0.9716134862F, 
+   0.9717156993F, 0.9718176549F, 0.9719193532F, 0.9720207946F, 
+   0.9721219794F, 0.9722229080F, 0.9723235806F, 0.9724239976F, 
+   0.9725241593F, 0.9726240661F, 0.9727237183F, 0.9728231161F, 
+   0.9729222601F, 0.9730211503F, 0.9731197873F, 0.9732181713F, 
+   0.9733163027F, 0.9734141817F, 0.9735118088F, 0.9736091842F, 
+   0.9737063083F, 0.9738031814F, 0.9738998039F, 0.9739961760F, 
+   0.9740922981F, 0.9741881706F, 0.9742837938F, 0.9743791680F, 
+   0.9744742935F, 0.9745691707F, 0.9746637999F, 0.9747581814F, 
+   0.9748523157F, 0.9749462029F, 0.9750398435F, 0.9751332378F, 
+   0.9752263861F, 0.9753192887F, 0.9754119461F, 0.9755043585F, 
+   0.9755965262F, 0.9756884496F, 0.9757801291F, 0.9758715650F, 
+   0.9759627575F, 0.9760537071F, 0.9761444141F, 0.9762348789F, 
+   0.9763251016F, 0.9764150828F, 0.9765048228F, 0.9765943218F, 
+   0.9766835802F, 0.9767725984F, 0.9768613767F, 0.9769499154F, 
+   0.9770382149F, 0.9771262755F, 0.9772140976F, 0.9773016815F, 
+   0.9773890275F, 0.9774761360F, 0.9775630073F, 0.9776496418F, 
+   0.9777360398F, 0.9778222016F, 0.9779081277F, 0.9779938182F, 
+   0.9780792736F, 0.9781644943F, 0.9782494805F, 0.9783342326F, 
+   0.9784187509F, 0.9785030359F, 0.9785870877F, 0.9786709069F, 
+   0.9787544936F, 0.9788378484F, 0.9789209714F, 0.9790038631F, 
+   0.9790865238F, 0.9791689538F, 0.9792511535F, 0.9793331232F, 
+   0.9794148633F, 0.9794963742F, 0.9795776561F, 0.9796587094F, 
+   0.9797395345F, 0.9798201316F, 0.9799005013F, 0.9799806437F, 
+   0.9800605593F, 0.9801402483F, 0.9802197112F, 0.9802989483F, 
+   0.9803779600F, 0.9804567465F, 0.9805353082F, 0.9806136455F, 
+   0.9806917587F, 0.9807696482F, 0.9808473143F, 0.9809247574F, 
+   0.9810019778F, 0.9810789759F, 0.9811557519F, 0.9812323064F, 
+   0.9813086395F, 0.9813847517F, 0.9814606433F, 0.9815363147F, 
+   0.9816117662F, 0.9816869981F, 0.9817620108F, 0.9818368047F, 
+   0.9819113801F, 0.9819857374F, 0.9820598769F, 0.9821337989F, 
+   0.9822075038F, 0.9822809920F, 0.9823542638F, 0.9824273195F, 
+   0.9825001596F, 0.9825727843F, 0.9826451940F, 0.9827173891F, 
+   0.9827893700F, 0.9828611368F, 0.9829326901F, 0.9830040302F, 
+   0.9830751574F, 0.9831460720F, 0.9832167745F, 0.9832872652F, 
+   0.9833575444F, 0.9834276124F, 0.9834974697F, 0.9835671166F, 
+   0.9836365535F, 0.9837057806F, 0.9837747983F, 0.9838436071F, 
+   0.9839122072F, 0.9839805990F, 0.9840487829F, 0.9841167591F, 
+   0.9841845282F, 0.9842520903F, 0.9843194459F, 0.9843865953F, 
+   0.9844535389F, 0.9845202771F, 0.9845868101F, 0.9846531383F, 
+   0.9847192622F, 0.9847851820F, 0.9848508980F, 0.9849164108F, 
+   0.9849817205F, 0.9850468276F, 0.9851117324F, 0.9851764352F, 
+   0.9852409365F, 0.9853052366F, 0.9853693358F, 0.9854332344F, 
+   0.9854969330F, 0.9855604317F, 0.9856237309F, 0.9856868310F, 
+   0.9857497325F, 0.9858124355F, 0.9858749404F, 0.9859372477F, 
+   0.9859993577F, 0.9860612707F, 0.9861229871F, 0.9861845072F, 
+   0.9862458315F, 0.9863069601F, 0.9863678936F, 0.9864286322F, 
+   0.9864891764F, 0.9865495264F, 0.9866096826F, 0.9866696454F, 
+   0.9867294152F, 0.9867889922F, 0.9868483769F, 0.9869075695F, 
+   0.9869665706F, 0.9870253803F, 0.9870839991F, 0.9871424273F, 
+   0.9872006653F, 0.9872587135F, 0.9873165721F, 0.9873742415F, 
+   0.9874317222F, 0.9874890144F, 0.9875461185F, 0.9876030348F, 
+   0.9876597638F, 0.9877163057F, 0.9877726610F, 0.9878288300F, 
+   0.9878848130F, 0.9879406104F, 0.9879962225F, 0.9880516497F, 
+   0.9881068924F, 0.9881619509F, 0.9882168256F, 0.9882715168F, 
+   0.9883260249F, 0.9883803502F, 0.9884344931F, 0.9884884539F, 
+   0.9885422331F, 0.9885958309F, 0.9886492477F, 0.9887024838F, 
+   0.9887555397F, 0.9888084157F, 0.9888611120F, 0.9889136292F, 
+   0.9889659675F, 0.9890181273F, 0.9890701089F, 0.9891219128F, 
+   0.9891735392F, 0.9892249885F, 0.9892762610F, 0.9893273572F, 
+   0.9893782774F, 0.9894290219F, 0.9894795911F, 0.9895299853F, 
+   0.9895802049F, 0.9896302502F, 0.9896801217F, 0.9897298196F, 
+   0.9897793443F, 0.9898286961F, 0.9898778755F, 0.9899268828F, 
+   0.9899757183F, 0.9900243823F, 0.9900728753F, 0.9901211976F, 
+   0.9901693495F, 0.9902173314F, 0.9902651436F, 0.9903127865F, 
+   0.9903602605F, 0.9904075659F, 0.9904547031F, 0.9905016723F, 
+   0.9905484740F, 0.9905951086F, 0.9906415763F, 0.9906878775F, 
+   0.9907340126F, 0.9907799819F, 0.9908257858F, 0.9908714247F, 
+   0.9909168988F, 0.9909622086F, 0.9910073543F, 0.9910523364F, 
+   0.9910971552F, 0.9911418110F, 0.9911863042F, 0.9912306351F, 
+   0.9912748042F, 0.9913188117F, 0.9913626580F, 0.9914063435F, 
+   0.9914498684F, 0.9914932333F, 0.9915364383F, 0.9915794839F, 
+   0.9916223703F, 0.9916650981F, 0.9917076674F, 0.9917500787F, 
+   0.9917923323F, 0.9918344286F, 0.9918763679F, 0.9919181505F, 
+   0.9919597769F, 0.9920012473F, 0.9920425621F, 0.9920837217F, 
+   0.9921247263F, 0.9921655765F, 0.9922062724F, 0.9922468145F, 
+   0.9922872030F, 0.9923274385F, 0.9923675211F, 0.9924074513F, 
+   0.9924472294F, 0.9924868557F, 0.9925263306F, 0.9925656544F, 
+   0.9926048275F, 0.9926438503F, 0.9926827230F, 0.9927214461F, 
+   0.9927600199F, 0.9927984446F, 0.9928367208F, 0.9928748486F, 
+   0.9929128285F, 0.9929506608F, 0.9929883459F, 0.9930258841F, 
+   0.9930632757F, 0.9931005211F, 0.9931376207F, 0.9931745747F, 
+   0.9932113836F, 0.9932480476F, 0.9932845671F, 0.9933209425F, 
+   0.9933571742F, 0.9933932623F, 0.9934292074F, 0.9934650097F, 
+   0.9935006696F, 0.9935361874F, 0.9935715635F, 0.9936067982F, 
+   0.9936418919F, 0.9936768448F, 0.9937116574F, 0.9937463300F, 
+   0.9937808629F, 0.9938152565F, 0.9938495111F, 0.9938836271F, 
+   0.9939176047F, 0.9939514444F, 0.9939851465F, 0.9940187112F, 
+   0.9940521391F, 0.9940854303F, 0.9941185853F, 0.9941516044F, 
+   0.9941844879F, 0.9942172361F, 0.9942498495F, 0.9942823283F, 
+   0.9943146729F, 0.9943468836F, 0.9943789608F, 0.9944109047F, 
+   0.9944427158F, 0.9944743944F, 0.9945059408F, 0.9945373553F, 
+   0.9945686384F, 0.9945997902F, 0.9946308112F, 0.9946617017F, 
+   0.9946924621F, 0.9947230926F, 0.9947535937F, 0.9947839656F, 
+   0.9948142086F, 0.9948443232F, 0.9948743097F, 0.9949041683F, 
+   0.9949338995F, 0.9949635035F, 0.9949929807F, 0.9950223315F, 
+   0.9950515561F, 0.9950806549F, 0.9951096282F, 0.9951384764F, 
+   0.9951671998F, 0.9951957987F, 0.9952242735F, 0.9952526245F, 
+   0.9952808520F, 0.9953089564F, 0.9953369380F, 0.9953647971F, 
+   0.9953925340F, 0.9954201491F, 0.9954476428F, 0.9954750153F, 
+   0.9955022670F, 0.9955293981F, 0.9955564092F, 0.9955833003F, 
+   0.9956100720F, 0.9956367245F, 0.9956632582F, 0.9956896733F, 
+   0.9957159703F, 0.9957421494F, 0.9957682110F, 0.9957941553F, 
+   0.9958199828F, 0.9958456937F, 0.9958712884F, 0.9958967672F, 
+   0.9959221305F, 0.9959473784F, 0.9959725115F, 0.9959975300F, 
+   0.9960224342F, 0.9960472244F, 0.9960719011F, 0.9960964644F, 
+   0.9961209148F, 0.9961452525F, 0.9961694779F, 0.9961935913F, 
+   0.9962175930F, 0.9962414834F, 0.9962652627F, 0.9962889313F, 
+   0.9963124895F, 0.9963359377F, 0.9963592761F, 0.9963825051F, 
+   0.9964056250F, 0.9964286361F, 0.9964515387F, 0.9964743332F, 
+   0.9964970198F, 0.9965195990F, 0.9965420709F, 0.9965644360F, 
+   0.9965866946F, 0.9966088469F, 0.9966308932F, 0.9966528340F, 
+   0.9966746695F, 0.9966964001F, 0.9967180260F, 0.9967395475F, 
+   0.9967609651F, 0.9967822789F, 0.9968034894F, 0.9968245968F, 
+   0.9968456014F, 0.9968665036F, 0.9968873037F, 0.9969080019F, 
+   0.9969285987F, 0.9969490942F, 0.9969694889F, 0.9969897830F, 
+   0.9970099769F, 0.9970300708F, 0.9970500651F, 0.9970699601F, 
+   0.9970897561F, 0.9971094533F, 0.9971290522F, 0.9971485531F, 
+   0.9971679561F, 0.9971872617F, 0.9972064702F, 0.9972255818F, 
+   0.9972445968F, 0.9972635157F, 0.9972823386F, 0.9973010659F, 
+   0.9973196980F, 0.9973382350F, 0.9973566773F, 0.9973750253F, 
+   0.9973932791F, 0.9974114392F, 0.9974295059F, 0.9974474793F, 
+   0.9974653599F, 0.9974831480F, 0.9975008438F, 0.9975184476F, 
+   0.9975359598F, 0.9975533806F, 0.9975707104F, 0.9975879495F, 
+   0.9976050981F, 0.9976221566F, 0.9976391252F, 0.9976560043F, 
+   0.9976727941F, 0.9976894950F, 0.9977061073F, 0.9977226312F, 
+   0.9977390671F, 0.9977554152F, 0.9977716759F, 0.9977878495F, 
+   0.9978039361F, 0.9978199363F, 0.9978358501F, 0.9978516780F, 
+   0.9978674202F, 0.9978830771F, 0.9978986488F, 0.9979141358F, 
+   0.9979295383F, 0.9979448566F, 0.9979600909F, 0.9979752417F, 
+   0.9979903091F, 0.9980052936F, 0.9980201952F, 0.9980350145F, 
+   0.9980497515F, 0.9980644067F, 0.9980789804F, 0.9980934727F, 
+   0.9981078841F, 0.9981222147F, 0.9981364649F, 0.9981506350F, 
+   0.9981647253F, 0.9981787360F, 0.9981926674F, 0.9982065199F, 
+   0.9982202936F, 0.9982339890F, 0.9982476062F, 0.9982611456F, 
+   0.9982746074F, 0.9982879920F, 0.9983012996F, 0.9983145304F, 
+   0.9983276849F, 0.9983407632F, 0.9983537657F, 0.9983666926F, 
+   0.9983795442F, 0.9983923208F, 0.9984050226F, 0.9984176501F, 
+   0.9984302033F, 0.9984426827F, 0.9984550884F, 0.9984674208F, 
+   0.9984796802F, 0.9984918667F, 0.9985039808F, 0.9985160227F, 
+   0.9985279926F, 0.9985398909F, 0.9985517177F, 0.9985634734F, 
+   0.9985751583F, 0.9985867727F, 0.9985983167F, 0.9986097907F, 
+   0.9986211949F, 0.9986325297F, 0.9986437953F, 0.9986549919F, 
+   0.9986661199F, 0.9986771795F, 0.9986881710F, 0.9986990946F, 
+   0.9987099507F, 0.9987207394F, 0.9987314611F, 0.9987421161F, 
+   0.9987527045F, 0.9987632267F, 0.9987736829F, 0.9987840734F, 
+   0.9987943985F, 0.9988046584F, 0.9988148534F, 0.9988249838F, 
+   0.9988350498F, 0.9988450516F, 0.9988549897F, 0.9988648641F, 
+   0.9988746753F, 0.9988844233F, 0.9988941086F, 0.9989037313F, 
+   0.9989132918F, 0.9989227902F, 0.9989322269F, 0.9989416021F, 
+   0.9989509160F, 0.9989601690F, 0.9989693613F, 0.9989784931F, 
+   0.9989875647F, 0.9989965763F, 0.9990055283F, 0.9990144208F, 
+   0.9990232541F, 0.9990320286F, 0.9990407443F, 0.9990494016F, 
+   0.9990580008F, 0.9990665421F, 0.9990750257F, 0.9990834519F, 
+   0.9990918209F, 0.9991001331F, 0.9991083886F, 0.9991165877F, 
+   0.9991247307F, 0.9991328177F, 0.9991408491F, 0.9991488251F, 
+   0.9991567460F, 0.9991646119F, 0.9991724232F, 0.9991801801F, 
+   0.9991878828F, 0.9991955316F, 0.9992031267F, 0.9992106684F, 
+   0.9992181569F, 0.9992255925F, 0.9992329753F, 0.9992403057F, 
+   0.9992475839F, 0.9992548101F, 0.9992619846F, 0.9992691076F, 
+   0.9992761793F, 0.9992832001F, 0.9992901701F, 0.9992970895F, 
+   0.9993039587F, 0.9993107777F, 0.9993175470F, 0.9993242667F, 
+   0.9993309371F, 0.9993375583F, 0.9993441307F, 0.9993506545F, 
+   0.9993571298F, 0.9993635570F, 0.9993699362F, 0.9993762678F, 
+   0.9993825519F, 0.9993887887F, 0.9993949785F, 0.9994011216F, 
+   0.9994072181F, 0.9994132683F, 0.9994192725F, 0.9994252307F, 
+   0.9994311434F, 0.9994370107F, 0.9994428327F, 0.9994486099F, 
+   0.9994543423F, 0.9994600303F, 0.9994656739F, 0.9994712736F, 
+   0.9994768294F, 0.9994823417F, 0.9994878105F, 0.9994932363F, 
+   0.9994986191F, 0.9995039592F, 0.9995092568F, 0.9995145122F, 
+   0.9995197256F, 0.9995248971F, 0.9995300270F, 0.9995351156F, 
+   0.9995401630F, 0.9995451695F, 0.9995501352F, 0.9995550604F, 
+   0.9995599454F, 0.9995647903F, 0.9995695953F, 0.9995743607F, 
+   0.9995790866F, 0.9995837734F, 0.9995884211F, 0.9995930300F, 
+   0.9995976004F, 0.9996021324F, 0.9996066263F, 0.9996110822F, 
+   0.9996155004F, 0.9996198810F, 0.9996242244F, 0.9996285306F, 
+   0.9996327999F, 0.9996370326F, 0.9996412287F, 0.9996453886F, 
+   0.9996495125F, 0.9996536004F, 0.9996576527F, 0.9996616696F, 
+   0.9996656512F, 0.9996695977F, 0.9996735094F, 0.9996773865F, 
+   0.9996812291F, 0.9996850374F, 0.9996888118F, 0.9996925523F, 
+   0.9996962591F, 0.9996999325F, 0.9997035727F, 0.9997071798F, 
+   0.9997107541F, 0.9997142957F, 0.9997178049F, 0.9997212818F, 
+   0.9997247266F, 0.9997281396F, 0.9997315209F, 0.9997348708F, 
+   0.9997381893F, 0.9997414767F, 0.9997447333F, 0.9997479591F, 
+   0.9997511544F, 0.9997543194F, 0.9997574542F, 0.9997605591F, 
+   0.9997636342F, 0.9997666797F, 0.9997696958F, 0.9997726828F, 
+   0.9997756407F, 0.9997785698F, 0.9997814703F, 0.9997843423F, 
+   0.9997871860F, 0.9997900016F, 0.9997927894F, 0.9997955494F, 
+   0.9997982818F, 0.9998009869F, 0.9998036648F, 0.9998063157F, 
+   0.9998089398F, 0.9998115373F, 0.9998141082F, 0.9998166529F, 
+   0.9998191715F, 0.9998216642F, 0.9998241311F, 0.9998265724F, 
+   0.9998289884F, 0.9998313790F, 0.9998337447F, 0.9998360854F, 
+   0.9998384015F, 0.9998406930F, 0.9998429602F, 0.9998452031F, 
+   0.9998474221F, 0.9998496171F, 0.9998517885F, 0.9998539364F, 
+   0.9998560610F, 0.9998581624F, 0.9998602407F, 0.9998622962F, 
+   0.9998643291F, 0.9998663394F, 0.9998683274F, 0.9998702932F, 
+   0.9998722370F, 0.9998741589F, 0.9998760591F, 0.9998779378F, 
+   0.9998797952F, 0.9998816313F, 0.9998834464F, 0.9998852406F, 
+   0.9998870141F, 0.9998887670F, 0.9998904995F, 0.9998922117F, 
+   0.9998939039F, 0.9998955761F, 0.9998972285F, 0.9998988613F, 
+   0.9999004746F, 0.9999020686F, 0.9999036434F, 0.9999051992F, 
+   0.9999067362F, 0.9999082544F, 0.9999097541F, 0.9999112354F, 
+   0.9999126984F, 0.9999141433F, 0.9999155703F, 0.9999169794F, 
+   0.9999183709F, 0.9999197449F, 0.9999211014F, 0.9999224408F, 
+   0.9999237631F, 0.9999250684F, 0.9999263570F, 0.9999276289F, 
+   0.9999288843F, 0.9999301233F, 0.9999313461F, 0.9999325529F, 
+   0.9999337437F, 0.9999349187F, 0.9999360780F, 0.9999372218F, 
+   0.9999383503F, 0.9999394635F, 0.9999405616F, 0.9999416447F, 
+   0.9999427129F, 0.9999437665F, 0.9999448055F, 0.9999458301F, 
+   0.9999468404F, 0.9999478365F, 0.9999488185F, 0.9999497867F, 
+   0.9999507411F, 0.9999516819F, 0.9999526091F, 0.9999535230F, 
+   0.9999544236F, 0.9999553111F, 0.9999561856F, 0.9999570472F, 
+   0.9999578960F, 0.9999587323F, 0.9999595560F, 0.9999603674F, 
+   0.9999611666F, 0.9999619536F, 0.9999627286F, 0.9999634917F, 
+   0.9999642431F, 0.9999649828F, 0.9999657110F, 0.9999664278F, 
+   0.9999671334F, 0.9999678278F, 0.9999685111F, 0.9999691835F, 
+   0.9999698451F, 0.9999704960F, 0.9999711364F, 0.9999717662F, 
+   0.9999723858F, 0.9999729950F, 0.9999735942F, 0.9999741834F, 
+   0.9999747626F, 0.9999753321F, 0.9999758919F, 0.9999764421F, 
+   0.9999769828F, 0.9999775143F, 0.9999780364F, 0.9999785495F, 
+   0.9999790535F, 0.9999795485F, 0.9999800348F, 0.9999805124F, 
+   0.9999809813F, 0.9999814417F, 0.9999818938F, 0.9999823375F, 
+   0.9999827731F, 0.9999832005F, 0.9999836200F, 0.9999840316F, 
+   0.9999844353F, 0.9999848314F, 0.9999852199F, 0.9999856008F, 
+   0.9999859744F, 0.9999863407F, 0.9999866997F, 0.9999870516F, 
+   0.9999873965F, 0.9999877345F, 0.9999880656F, 0.9999883900F, 
+   0.9999887078F, 0.9999890190F, 0.9999893237F, 0.9999896220F, 
+   0.9999899140F, 0.9999901999F, 0.9999904796F, 0.9999907533F, 
+   0.9999910211F, 0.9999912830F, 0.9999915391F, 0.9999917896F, 
+   0.9999920345F, 0.9999922738F, 0.9999925077F, 0.9999927363F, 
+   0.9999929596F, 0.9999931777F, 0.9999933907F, 0.9999935987F, 
+   0.9999938018F, 0.9999940000F, 0.9999941934F, 0.9999943820F, 
+   0.9999945661F, 0.9999947456F, 0.9999949206F, 0.9999950912F, 
+   0.9999952575F, 0.9999954195F, 0.9999955773F, 0.9999957311F, 
+   0.9999958807F, 0.9999960265F, 0.9999961683F, 0.9999963063F, 
+   0.9999964405F, 0.9999965710F, 0.9999966979F, 0.9999968213F, 
+   0.9999969412F, 0.9999970576F, 0.9999971707F, 0.9999972805F, 
+   0.9999973871F, 0.9999974905F, 0.9999975909F, 0.9999976881F, 
+   0.9999977824F, 0.9999978738F, 0.9999979624F, 0.9999980481F, 
+   0.9999981311F, 0.9999982115F, 0.9999982892F, 0.9999983644F, 
+   0.9999984370F, 0.9999985072F, 0.9999985750F, 0.9999986405F, 
+   0.9999987037F, 0.9999987647F, 0.9999988235F, 0.9999988802F, 
+   0.9999989348F, 0.9999989873F, 0.9999990379F, 0.9999990866F, 
+   0.9999991334F, 0.9999991784F, 0.9999992217F, 0.9999992632F, 
+   0.9999993030F, 0.9999993411F, 0.9999993777F, 0.9999994128F, 
+   0.9999994463F, 0.9999994784F, 0.9999995091F, 0.9999995384F, 
+   0.9999995663F, 0.9999995930F, 0.9999996184F, 0.9999996426F, 
+   0.9999996657F, 0.9999996876F, 0.9999997084F, 0.9999997282F, 
+   0.9999997469F, 0.9999997647F, 0.9999997815F, 0.9999997973F, 
+   0.9999998123F, 0.9999998265F, 0.9999998398F, 0.9999998524F, 
+   0.9999998642F, 0.9999998753F, 0.9999998857F, 0.9999998954F, 
+   0.9999999045F, 0.9999999130F, 0.9999999209F, 0.9999999282F, 
+   0.9999999351F, 0.9999999414F, 0.9999999472F, 0.9999999526F, 
+   0.9999999576F, 0.9999999622F, 0.9999999664F, 0.9999999702F, 
+   0.9999999737F, 0.9999999769F, 0.9999999798F, 0.9999999824F, 
+   0.9999999847F, 0.9999999868F, 0.9999999887F, 0.9999999904F, 
+   0.9999999919F, 0.9999999932F, 0.9999999943F, 0.9999999953F, 
+   0.9999999961F, 0.9999999969F, 0.9999999975F, 0.9999999980F, 
+   0.9999999985F, 0.9999999988F, 0.9999999991F, 0.9999999993F, 
+   0.9999999995F, 0.9999999997F, 0.9999999998F, 0.9999999999F, 
+   0.9999999999F, 1.0000000000F, 1.0000000000F, 1.0000000000F, 
+   1.0000000000F, 1.0000000000F, 1.0000000000F, 1.0000000000F, 
+ };
+ 
+ static float *vwin[8] = {
+   vwin64,
+   vwin128,
+   vwin256,
+   vwin512,
+   vwin1024,
+   vwin2048,
+   vwin4096,
+   vwin8192,
+ };
+ 
+ float *_vorbis_window_get(int n){
+   return vwin[n];
+ }
+ 
+ void _vorbis_apply_window(float *d,int *winno,long *blocksizes,
+ 			  int lW,int W,int nW){
+   lW=(W?lW:0);
+   nW=(W?nW:0);
+   
+   {
+     float *windowLW=vwin[winno[lW]];
+     float *windowNW=vwin[winno[nW]];
+ 
+     long n=blocksizes[W];
+     long ln=blocksizes[lW];
+     long rn=blocksizes[nW];
+     
+     long leftbegin=n/4-ln/4;
+     long leftend=leftbegin+ln/2;
+     
+     long rightbegin=n/2+n/4-rn/4;
+     long rightend=rightbegin+rn/2;
+     
+     int i,p;
+     
+     for(i=0;i<leftbegin;i++)
+       d[i]=0.f;
+     
+     for(p=0;i<leftend;i++,p++)
+       d[i]*=windowLW[p];
+     
+     for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--)
+       d[i]*=windowNW[p];
+     
+     for(;i<n;i++)
+       d[i]=0.f;
+   }
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: floor backend 0 implementation
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+   function: LSP (also called LSF) conversion routines
+   last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ 
+ #define _V_LSP_H_
+ 
+ extern int vorbis_lpc_to_lsp(float *lpc,float *lsp,int m);
+ 
+ extern void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,
+ 				float *lsp,int m,
+ 				float amp,float ampoffset);
+   
+ typedef struct {
+   int ln;
+   int  m;
+   int **linearmap;
+   int  n[2];
+ 
+   vorbis_info_floor0 *vi;
+ 
+   long bits;
+   long frames;
+ } vorbis_look_floor0;
+ 
+ 
+ /***********************************************/
+ 
+ static void floor0_free_info(vorbis_info_floor *i){
+   vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
+   if(info){
+     memset(info,0,sizeof(*info));
+     _ogg_free(info);
+   }
+ }
+ 
+ static void floor0_free_look(vorbis_look_floor *i){
+   vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
+   if(look){
+ 
+     if(look->linearmap){
+ 
+       if(look->linearmap[0])_ogg_free(look->linearmap[0]);
+       if(look->linearmap[1])_ogg_free(look->linearmap[1]);
+ 
+       _ogg_free(look->linearmap);
+     }
+     memset(look,0,sizeof(*look));
+     _ogg_free(look);
+   }
+ }
+ 
+ static vorbis_info_floor *floor0_unpack (vorbis_info *vi,oggpack_buffer *opb){
+   codec_setup_info     *ci=vi->codec_setup;
+   int j;
+ 
+   vorbis_info_floor0 *info=_ogg_malloc(sizeof(*info));
+   info->order=oggpack_read(opb,8);
+   info->rate=oggpack_read(opb,16);
+   info->barkmap=oggpack_read(opb,16);
+   info->ampbits=oggpack_read(opb,6);
+   info->ampdB=oggpack_read(opb,8);
+   info->numbooks=oggpack_read(opb,4)+1;
+   
+   if(info->order<1)goto err_out;
+   if(info->rate<1)goto err_out;
+   if(info->barkmap<1)goto err_out;
+   if(info->numbooks<1)goto err_out;
+     
+   for(j=0;j<info->numbooks;j++){
+     info->books[j]=oggpack_read(opb,8);
+     if(info->books[j]<0 || info->books[j]>=ci->books)goto err_out;
+   }
+   return(info);
+ 
+  err_out:
+   floor0_free_info(info);
+   return(NULL);
+ }
+ 
+ /* initialize Bark scale and normalization lookups.  We could do this
+    with static tables, but Vorbis allows a number of possible
+    combinations, so it's best to do it computationally.
+ 
+    The below is authoritative in terms of defining scale mapping.
+    Note that the scale depends on the sampling rate as well as the
+    linear block and mapping sizes */
+ 
+ static void floor0_map_lazy_init(vorbis_block      *vb,
+ 				 vorbis_info_floor *infoX,
+ 				 vorbis_look_floor0 *look){
+   if(!look->linearmap[vb->W]){
+     vorbis_dsp_state   *vd=vb->vd;
+     vorbis_info        *vi=vd->vi;
+     codec_setup_info   *ci=vi->codec_setup;
+     vorbis_info_floor0 *info=(vorbis_info_floor0 *)infoX;
+     int W=vb->W;
+     int n=ci->blocksizes[W]/2,j;
+ 
+     /* we choose a scaling constant so that:
+        floor(bark(rate/2-1)*C)=mapped-1
+      floor(bark(rate/2)*C)=mapped */
+     float scale=look->ln/toBARK(info->rate/2.f);
+     
+     /* the mapping from a linear scale to a smaller bark scale is
+        straightforward.  We do *not* make sure that the linear mapping
+        does not skip bark-scale bins; the decoder simply skips them and
+        the encoder may do what it wishes in filling them.  They're
+        necessary in some mapping combinations to keep the scale spacing
+        accurate */
+     look->linearmap[W]=_ogg_malloc((n+1)*sizeof(**look->linearmap));
+     for(j=0;j<n;j++){
+       int val=floor( toBARK((info->rate/2.f)/n*j) 
+ 		     *scale); /* bark numbers represent band edges */
+       if(val>=look->ln)val=look->ln-1; /* guard against the approximation */
+       look->linearmap[W][j]=val;
+     }
+     look->linearmap[W][j]=-1;
+     look->n[W]=n;
+   }
+ }
+ 
+ static vorbis_look_floor *floor0_look(vorbis_dsp_state *vd,
+ 				      vorbis_info_floor *i){
+   vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
+   vorbis_look_floor0 *look=_ogg_calloc(1,sizeof(*look));
+   look->m=info->order;
+   look->ln=info->barkmap;
+   look->vi=info;
+ 
+   look->linearmap=_ogg_calloc(2,sizeof(*look->linearmap));
+ 
+   return look;
+ }
+ 
+ static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){
+   vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
+   vorbis_info_floor0 *info=look->vi;
+   int j,k;
+ 
+   int ampraw=oggpack_read(&vb->opb,info->ampbits);
+   if(ampraw>0){ /* also handles the -1 out of data case */
+     long maxval=(1<<info->ampbits)-1;
+     float amp=(float)ampraw/maxval*info->ampdB;
+     int booknum=oggpack_read(&vb->opb,_ilog(info->numbooks));
+     
+     if(booknum!=-1 && booknum<info->numbooks){ /* be paranoid */
+       codec_setup_info  *ci=vb->vd->vi->codec_setup;
+       codebook *b=ci->fullbooks+info->books[booknum];
+       float last=0.f;
+ 
+       /* the additional b->dim is a guard against any possible stack
+          smash; b->dim is provably more than we can overflow the
+          vector */
+       float *lsp=_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+b->dim+1));
+             
+       for(j=0;j<look->m;j+=b->dim)
+ 	if(vorbis_book_decodev_set(b,lsp+j,&vb->opb,b->dim)==-1)goto eop;
+       for(j=0;j<look->m;){
+ 	for(k=0;k<b->dim;k++,j++)lsp[j]+=last;
+ 	last=lsp[j-1];
+       }
+       
+       lsp[look->m]=amp;
+       return(lsp);
+     }
+   }
+  eop:
+   return(NULL);
+ }
+ 
+ static int floor0_inverse2(vorbis_block *vb,vorbis_look_floor *i,
+ 			   void *memo,float *out){
+   vorbis_look_floor0 *look=(vorbis_look_floor0 *)i;
+   vorbis_info_floor0 *info=look->vi;
+   
+   floor0_map_lazy_init(vb,info,look);
+ 
+   if(memo){
+     float *lsp=(float *)memo;
+     float amp=lsp[look->m];
+ 
+     /* take the coefficients back to a spectral envelope curve */
+     vorbis_lsp_to_curve(out,
+ 			look->linearmap[vb->W],
+ 			look->n[vb->W],
+ 			look->ln,
+ 			lsp,look->m,amp,(float)info->ampdB);
+     return(1);
+   }
+   memset(out,0,sizeof(*out)*look->n[vb->W]);
+   return(0);
+ }
+ 
+ /* export hooks */
+ vorbis_func_floor floor0_exportbundle={
+   NULL,&floor0_unpack,&floor0_look,&floor0_free_info,
+   &floor0_free_look,&floor0_inverse1,&floor0_inverse2
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+   function: LSP (also called LSF) conversion routines
+   last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+   The LSP generation code is taken (with minimal modification and a
+   few bugfixes) from "On the Computation of the LSP Frequencies" by
+   Joseph Rothweiler (see http://www.rothweiler.us for contact info).
+   The paper is available at:
+ 
+   http://www.myown1.com/joe/lsf
+ 
+  ********************************************************************/
+ 
+ /* Note that the lpc-lsp conversion finds the roots of polynomial with
+    an iterative root polisher (CACM algorithm 283).  It *is* possible
+    to confuse this algorithm into not converging; that should only
+    happen with absurdly closely spaced roots (very sharp peaks in the
+    LPC f response) which in turn should be impossible in our use of
+    the code.  If this *does* happen anyway, it's a bug in the floor
+    finder; find the cause of the confusion (probably a single bin
+    spike or accidental near-float-limit resolution problems) and
+    correct it. */
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+   function: lookup based functions
+   last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #ifdef FLOAT_LOOKUP
+ extern float vorbis_coslook(float a);
+ extern float vorbis_invsqlook(float a);
+ extern float vorbis_invsq2explook(int a);
+ extern float vorbis_fromdBlook(float a);
+ #endif
+ #ifdef INT_LOOKUP
+ extern long vorbis_invsqlook_i(long a,long e);
+ extern long vorbis_coslook_i(long a);
+ extern float vorbis_fromdBlook_i(long a);
+ #endif 
+ 
+ /* three possible LSP to f curve functions; the exact computation
+    (float), a lookup based float implementation, and an integer
+    implementation.  The float lookup is likely the optimal choice on
+    any machine with an FPU.  The integer implementation is *not* fixed
+    point (due to the need for a large dynamic range and thus a
+    seperately tracked exponent) and thus much more complex than the
+    relatively simple float implementations. It's mostly for future
+    work on a fully fixed point implementation for processors like the
+    ARM family. */
+ 
+ /* undefine both for the 'old' but more precise implementation */
+ #define   FLOAT_LOOKUP
+ #undef    INT_LOOKUP
+ 
+ #ifdef FLOAT_LOOKUP
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+   function: lookup based functions
+   last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+   function: lookup data; generated by lookups.pl; edit there
+   last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ #ifdef FLOAT_LOOKUP
+ #define COS_LOOKUP_SZ 128
+ static float COS_LOOKUP[COS_LOOKUP_SZ+1]={
+ 	+1.0000000000000f,+0.9996988186962f,+0.9987954562052f,+0.9972904566787f,
+ 	+0.9951847266722f,+0.9924795345987f,+0.9891765099648f,+0.9852776423889f,
+ 	+0.9807852804032f,+0.9757021300385f,+0.9700312531945f,+0.9637760657954f,
+ 	+0.9569403357322f,+0.9495281805930f,+0.9415440651830f,+0.9329927988347f,
+ 	+0.9238795325113f,+0.9142097557035f,+0.9039892931234f,+0.8932243011955f,
+ 	+0.8819212643484f,+0.8700869911087f,+0.8577286100003f,+0.8448535652497f,
+ 	+0.8314696123025f,+0.8175848131516f,+0.8032075314806f,+0.7883464276266f,
+ 	+0.7730104533627f,+0.7572088465065f,+0.7409511253550f,+0.7242470829515f,
+ 	+0.7071067811865f,+0.6895405447371f,+0.6715589548470f,+0.6531728429538f,
+ 	+0.6343932841636f,+0.6152315905806f,+0.5956993044924f,+0.5758081914178f,
+ 	+0.5555702330196f,+0.5349976198871f,+0.5141027441932f,+0.4928981922298f,
+ 	+0.4713967368260f,+0.4496113296546f,+0.4275550934303f,+0.4052413140050f,
+ 	+0.3826834323651f,+0.3598950365350f,+0.3368898533922f,+0.3136817403989f,
+ 	+0.2902846772545f,+0.2667127574749f,+0.2429801799033f,+0.2191012401569f,
+ 	+0.1950903220161f,+0.1709618887603f,+0.1467304744554f,+0.1224106751992f,
+ 	+0.0980171403296f,+0.0735645635997f,+0.0490676743274f,+0.0245412285229f,
+ 	+0.0000000000000f,-0.0245412285229f,-0.0490676743274f,-0.0735645635997f,
+ 	-0.0980171403296f,-0.1224106751992f,-0.1467304744554f,-0.1709618887603f,
+ 	-0.1950903220161f,-0.2191012401569f,-0.2429801799033f,-0.2667127574749f,
+ 	-0.2902846772545f,-0.3136817403989f,-0.3368898533922f,-0.3598950365350f,
+ 	-0.3826834323651f,-0.4052413140050f,-0.4275550934303f,-0.4496113296546f,
+ 	-0.4713967368260f,-0.4928981922298f,-0.5141027441932f,-0.5349976198871f,
+ 	-0.5555702330196f,-0.5758081914178f,-0.5956993044924f,-0.6152315905806f,
+ 	-0.6343932841636f,-0.6531728429538f,-0.6715589548470f,-0.6895405447371f,
+ 	-0.7071067811865f,-0.7242470829515f,-0.7409511253550f,-0.7572088465065f,
+ 	-0.7730104533627f,-0.7883464276266f,-0.8032075314806f,-0.8175848131516f,
+ 	-0.8314696123025f,-0.8448535652497f,-0.8577286100003f,-0.8700869911087f,
+ 	-0.8819212643484f,-0.8932243011955f,-0.9039892931234f,-0.9142097557035f,
+ 	-0.9238795325113f,-0.9329927988347f,-0.9415440651830f,-0.9495281805930f,
+ 	-0.9569403357322f,-0.9637760657954f,-0.9700312531945f,-0.9757021300385f,
+ 	-0.9807852804032f,-0.9852776423889f,-0.9891765099648f,-0.9924795345987f,
+ 	-0.9951847266722f,-0.9972904566787f,-0.9987954562052f,-0.9996988186962f,
+ 	-1.0000000000000f,
+ };
+ 
+ #define INVSQ_LOOKUP_SZ 32
+ static float INVSQ_LOOKUP[INVSQ_LOOKUP_SZ+1]={
+ 	1.414213562373f,1.392621247646f,1.371988681140f,1.352246807566f,
+ 	1.333333333333f,1.315191898443f,1.297771369046f,1.281025230441f,
+ 	1.264911064067f,1.249390095109f,1.234426799697f,1.219988562661f,
+ 	1.206045378311f,1.192569588000f,1.179535649239f,1.166919931983f,
+ 	1.154700538379f,1.142857142857f,1.131370849898f,1.120224067222f,
+ 	1.109400392450f,1.098884511590f,1.088662107904f,1.078719779941f,
+ 	1.069044967650f,1.059625885652f,1.050451462878f,1.041511287847f,
+ 	1.032795558989f,1.024295039463f,1.016001016002f,1.007905261358f,
+ 	1.000000000000f,
+ };
+ 
+ #define INVSQ2EXP_LOOKUP_MIN (-32)
+ #define INVSQ2EXP_LOOKUP_MAX 32
+ static float INVSQ2EXP_LOOKUP[INVSQ2EXP_LOOKUP_MAX-\
+                               INVSQ2EXP_LOOKUP_MIN+1]={
+ 	         65536.f,    46340.95001f,         32768.f,    23170.47501f,
+ 	         16384.f,     11585.2375f,          8192.f,    5792.618751f,
+ 	          4096.f,    2896.309376f,          2048.f,    1448.154688f,
+ 	          1024.f,    724.0773439f,           512.f,     362.038672f,
+ 	           256.f,     181.019336f,           128.f,    90.50966799f,
+ 	            64.f,      45.254834f,            32.f,      22.627417f,
+ 	            16.f,     11.3137085f,             8.f,    5.656854249f,
+ 	             4.f,    2.828427125f,             2.f,    1.414213562f,
+ 	             1.f,   0.7071067812f,            0.5f,   0.3535533906f,
+ 	           0.25f,   0.1767766953f,          0.125f,  0.08838834765f,
+ 	         0.0625f,  0.04419417382f,        0.03125f,  0.02209708691f,
+ 	       0.015625f,  0.01104854346f,      0.0078125f, 0.005524271728f,
+ 	     0.00390625f, 0.002762135864f,    0.001953125f, 0.001381067932f,
+ 	   0.0009765625f, 0.000690533966f,  0.00048828125f, 0.000345266983f,
+ 	 0.000244140625f,0.0001726334915f,0.0001220703125f,8.631674575e-05f,
+ 	6.103515625e-05f,4.315837288e-05f,3.051757812e-05f,2.157918644e-05f,
+ 	1.525878906e-05f,
+ };
+ 
+ #endif
+ 
+ #define FROMdB_LOOKUP_SZ 35
+ #define FROMdB2_LOOKUP_SZ 32
+ #define FROMdB_SHIFT 5
+ #define FROMdB2_SHIFT 3
+ #define FROMdB2_MASK 31
+ static float FROMdB_LOOKUP[FROMdB_LOOKUP_SZ]={
+ 	             1.f,   0.6309573445f,   0.3981071706f,   0.2511886432f,
+ 	   0.1584893192f,            0.1f,  0.06309573445f,  0.03981071706f,
+ 	  0.02511886432f,  0.01584893192f,           0.01f, 0.006309573445f,
+ 	 0.003981071706f, 0.002511886432f, 0.001584893192f,          0.001f,
+ 	0.0006309573445f,0.0003981071706f,0.0002511886432f,0.0001584893192f,
+ 	         0.0001f,6.309573445e-05f,3.981071706e-05f,2.511886432e-05f,
+ 	1.584893192e-05f,          1e-05f,6.309573445e-06f,3.981071706e-06f,
+ 	2.511886432e-06f,1.584893192e-06f,          1e-06f,6.309573445e-07f,
+ 	3.981071706e-07f,2.511886432e-07f,1.584893192e-07f,
+ };
+ 
+ static float FROMdB2_LOOKUP[FROMdB2_LOOKUP_SZ]={
+ 	   0.9928302478f,   0.9786445908f,   0.9646616199f,   0.9508784391f,
+ 	   0.9372921937f,     0.92390007f,   0.9106992942f,   0.8976871324f,
+ 	   0.8848608897f,   0.8722179097f,   0.8597555737f,   0.8474713009f,
+ 	    0.835362547f,   0.8234268041f,   0.8116616003f,   0.8000644989f,
+ 	   0.7886330981f,   0.7773650302f,   0.7662579617f,    0.755309592f,
+ 	   0.7445176537f,   0.7338799116f,   0.7233941627f,   0.7130582353f,
+ 	   0.7028699885f,   0.6928273125f,   0.6829281272f,   0.6731703824f,
+ 	   0.6635520573f,   0.6540711597f,   0.6447257262f,   0.6355138211f,
+ };
+ 
+ #ifdef INT_LOOKUP
+ 
+ #define INVSQ_LOOKUP_I_SHIFT 10
+ #define INVSQ_LOOKUP_I_MASK 1023
+ static long INVSQ_LOOKUP_I[64+1]={
+ 	   92682l,   91966l,   91267l,   90583l,
+ 	   89915l,   89261l,   88621l,   87995l,
+ 	   87381l,   86781l,   86192l,   85616l,
+ 	   85051l,   84497l,   83953l,   83420l,
+ 	   82897l,   82384l,   81880l,   81385l,
+ 	   80899l,   80422l,   79953l,   79492l,
+ 	   79039l,   78594l,   78156l,   77726l,
+ 	   77302l,   76885l,   76475l,   76072l,
+ 	   75674l,   75283l,   74898l,   74519l,
+ 	   74146l,   73778l,   73415l,   73058l,
+ 	   72706l,   72359l,   72016l,   71679l,
+ 	   71347l,   71019l,   70695l,   70376l,
+ 	   70061l,   69750l,   69444l,   69141l,
+ 	   68842l,   68548l,   68256l,   67969l,
+ 	   67685l,   67405l,   67128l,   66855l,
+ 	   66585l,   66318l,   66054l,   65794l,
+ 	   65536l,
+ };
+ 
+ #define COS_LOOKUP_I_SHIFT 9
+ #define COS_LOOKUP_I_MASK 511
+ #define COS_LOOKUP_I_SZ 128
+ static long COS_LOOKUP_I[COS_LOOKUP_I_SZ+1]={
+ 	   16384l,   16379l,   16364l,   16340l,
+ 	   16305l,   16261l,   16207l,   16143l,
+ 	   16069l,   15986l,   15893l,   15791l,
+ 	   15679l,   15557l,   15426l,   15286l,
+ 	   15137l,   14978l,   14811l,   14635l,
+ 	   14449l,   14256l,   14053l,   13842l,
+ 	   13623l,   13395l,   13160l,   12916l,
+ 	   12665l,   12406l,   12140l,   11866l,
+ 	   11585l,   11297l,   11003l,   10702l,
+ 	   10394l,   10080l,    9760l,    9434l,
+ 	    9102l,    8765l,    8423l,    8076l,
+ 	    7723l,    7366l,    7005l,    6639l,
+ 	    6270l,    5897l,    5520l,    5139l,
+ 	    4756l,    4370l,    3981l,    3590l,
+ 	    3196l,    2801l,    2404l,    2006l,
+ 	    1606l,    1205l,     804l,     402l,
+ 	       0l,    -401l,    -803l,   -1204l,
+ 	   -1605l,   -2005l,   -2403l,   -2800l,
+ 	   -3195l,   -3589l,   -3980l,   -4369l,
+ 	   -4755l,   -5138l,   -5519l,   -5896l,
+ 	   -6269l,   -6638l,   -7004l,   -7365l,
+ 	   -7722l,   -8075l,   -8422l,   -8764l,
+ 	   -9101l,   -9433l,   -9759l,  -10079l,
+ 	  -10393l,  -10701l,  -11002l,  -11296l,
+ 	  -11584l,  -11865l,  -12139l,  -12405l,
+ 	  -12664l,  -12915l,  -13159l,  -13394l,
+ 	  -13622l,  -13841l,  -14052l,  -14255l,
+ 	  -14448l,  -14634l,  -14810l,  -14977l,
+ 	  -15136l,  -15285l,  -15425l,  -15556l,
+ 	  -15678l,  -15790l,  -15892l,  -15985l,
+ 	  -16068l,  -16142l,  -16206l,  -16260l,
+ 	  -16304l,  -16339l,  -16363l,  -16378l,
+ 	  -16383l,
+ };
+ 
+ #endif
+ 
+ #ifdef FLOAT_LOOKUP
+ 
+ /* interpolated lookup based cos function, domain 0 to PI only */
+ float vorbis_coslook(float a){
+   double d=a*(.31830989*(float)COS_LOOKUP_SZ);
+   int i=vorbis_ftoi(d-.5);
+ 
+   return COS_LOOKUP[i]+ (d-i)*(COS_LOOKUP[i+1]-COS_LOOKUP[i]);
+ }
+ 
+ /* interpolated 1./sqrt(p) where .5 <= p < 1. */
+ float vorbis_invsqlook(float a){
+   double d=a*(2.f*(float)INVSQ_LOOKUP_SZ)-(float)INVSQ_LOOKUP_SZ;
+   int i=vorbis_ftoi(d-.5f);
+   return INVSQ_LOOKUP[i]+ (d-i)*(INVSQ_LOOKUP[i+1]-INVSQ_LOOKUP[i]);
+ }
+ 
+ /* interpolated 1./sqrt(p) where .5 <= p < 1. */
+ float vorbis_invsq2explook(int a){
+   return INVSQ2EXP_LOOKUP[a-INVSQ2EXP_LOOKUP_MIN];
+ }
+ 
+ /* interpolated lookup based fromdB function, domain -140dB to 0dB only */
+ float vorbis_fromdBlook(float a){
+   int i=vorbis_ftoi(a*((float)(-(1<<FROMdB2_SHIFT)))-.5f);
+   return (i<0)?1.f:
+     ((i>=(FROMdB_LOOKUP_SZ<<FROMdB_SHIFT))?0.f:
+      FROMdB_LOOKUP[i>>FROMdB_SHIFT]*FROMdB2_LOOKUP[i&FROMdB2_MASK]);
+ }
+ 
+ #endif
+ 
+ #ifdef INT_LOOKUP
+ /* interpolated 1./sqrt(p) where .5 <= a < 1. (.100000... to .111111...) in
+    16.16 format 
+ 
+    returns in m.8 format */
+ long vorbis_invsqlook_i(long a,long e){
+   long i=(a&0x7fff)>>(INVSQ_LOOKUP_I_SHIFT-1); 
+   long d=(a&INVSQ_LOOKUP_I_MASK)<<(16-INVSQ_LOOKUP_I_SHIFT); /*  0.16 */
+   long val=INVSQ_LOOKUP_I[i]-                                /*  1.16 */
+     (((INVSQ_LOOKUP_I[i]-INVSQ_LOOKUP_I[i+1])*               /*  0.16 */
+       d)>>16);                                               /* result 1.16 */
+   
+   e+=32;
+   if(e&1)val=(val*5792)>>13; /* multiply val by 1/sqrt(2) */
+   e=(e>>1)-8;
+ 
+   return(val>>e);
+ }
+ 
+ /* interpolated lookup based fromdB function, domain -140dB to 0dB only */
+ /* a is in n.12 format */
+ float vorbis_fromdBlook_i(long a){
+   int i=(-a)>>(12-FROMdB2_SHIFT);
+   return (i<0)?1.f:
+     ((i>=(FROMdB_LOOKUP_SZ<<FROMdB_SHIFT))?0.f:
+      FROMdB_LOOKUP[i>>FROMdB_SHIFT]*FROMdB2_LOOKUP[i&FROMdB2_MASK]);
+ }
+ 
+ /* interpolated lookup based cos function, domain 0 to PI only */
+ /* a is in 0.16 format, where 0==0, 2^^16-1==PI, return 0.14 */
+ long vorbis_coslook_i(long a){
+   int i=a>>COS_LOOKUP_I_SHIFT;
+   int d=a&COS_LOOKUP_I_MASK;
+   return COS_LOOKUP_I[i]- ((d*(COS_LOOKUP_I[i]-COS_LOOKUP_I[i+1]))>>
+ 			   COS_LOOKUP_I_SHIFT);
+ }
+ 
+ #endif
+ 
+ /* side effect: changes *lsp to cosines of lsp */
+ void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
+ 			    float amp,float ampoffset){
+   int i;
+   float wdel=M_PI/ln;
+   vorbis_fpu_control fpu;
+   
+   vorbis_fpu_setround(&fpu);
+   for(i=0;i<m;i++)lsp[i]=vorbis_coslook(lsp[i]);
+ 
+   i=0;
+   while(i<n){
+     int k=map[i];
+     int qexp;
+     float p=.7071067812f;
+     float q=.7071067812f;
+     float w=vorbis_coslook(wdel*k);
+     float *ftmp=lsp;
+     int c=m>>1;
+ 
+     do{
+       q*=ftmp[0]-w;
+       p*=ftmp[1]-w;
+       ftmp+=2;
+     }while(--c);
+ 
+     if(m&1){
+       /* odd order filter; slightly assymetric */
+       /* the last coefficient */
+       q*=ftmp[0]-w;
+       q*=q;
+       p*=p*(1.f-w*w);
+     }else{
+       /* even order filter; still symmetric */
+       q*=q*(1.f+w);
+       p*=p*(1.f-w);
+     }
+ 
+     q=frexp(p+q,&qexp);
+     q=vorbis_fromdBlook(amp*             
+ 			vorbis_invsqlook(q)*
+ 			vorbis_invsq2explook(qexp+m)- 
+ 			ampoffset);
+ 
+     do{
+       curve[i++]*=q;
+     }while(map[i]==k);
+   }
+   vorbis_fpu_restore(fpu);
+ }
+ 
+ #else
+ 
+ #ifdef INT_LOOKUP
+ 
+ static int MLOOP_1[64]={
+    0,10,11,11, 12,12,12,12, 13,13,13,13, 13,13,13,13,
+   14,14,14,14, 14,14,14,14, 14,14,14,14, 14,14,14,14,
+   15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+   15,15,15,15, 15,15,15,15, 15,15,15,15, 15,15,15,15,
+ };
+ 
+ static int MLOOP_2[64]={
+   0,4,5,5, 6,6,6,6, 7,7,7,7, 7,7,7,7,
+   8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8,
+   9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9,
+   9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9,
+ };
+ 
+ static int MLOOP_3[8]={0,1,2,2,3,3,3,3};
+ 
+ 
+ /* side effect: changes *lsp to cosines of lsp */
+ void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
+ 			    float amp,float ampoffset){
+ 
+   /* 0 <= m < 256 */
+ 
+   /* set up for using all int later */
+   int i;
+   int ampoffseti=rint(ampoffset*4096.f);
+   int ampi=rint(amp*16.f);
+   long *ilsp=alloca(m*sizeof(*ilsp));
+   for(i=0;i<m;i++)ilsp[i]=vorbis_coslook_i(lsp[i]/M_PI*65536.f+.5f);
+ 
+   i=0;
+   while(i<n){
+     int j,k=map[i];
+     unsigned long pi=46341; /* 2**-.5 in 0.16 */
+     unsigned long qi=46341;
+     int qexp=0,shift;
+     long wi=vorbis_coslook_i(k*65536/ln);
+ 
+     qi*=labs(ilsp[0]-wi);
+     pi*=labs(ilsp[1]-wi);
+ 
+     for(j=3;j<m;j+=2){
+       if(!(shift=MLOOP_1[(pi|qi)>>25]))
+ 	if(!(shift=MLOOP_2[(pi|qi)>>19]))
+ 	  shift=MLOOP_3[(pi|qi)>>16];
+       qi=(qi>>shift)*labs(ilsp[j-1]-wi);
+       pi=(pi>>shift)*labs(ilsp[j]-wi);
+       qexp+=shift;
+     }
+     if(!(shift=MLOOP_1[(pi|qi)>>25]))
+       if(!(shift=MLOOP_2[(pi|qi)>>19]))
+ 	shift=MLOOP_3[(pi|qi)>>16];
+ 
+     /* pi,qi normalized collectively, both tracked using qexp */
+ 
+     if(m&1){
+       /* odd order filter; slightly assymetric */
+       /* the last coefficient */
+       qi=(qi>>shift)*labs(ilsp[j-1]-wi);
+       pi=(pi>>shift)<<14;
+       qexp+=shift;
+ 
+       if(!(shift=MLOOP_1[(pi|qi)>>25]))
+ 	if(!(shift=MLOOP_2[(pi|qi)>>19]))
+ 	  shift=MLOOP_3[(pi|qi)>>16];
+       
+       pi>>=shift;
+       qi>>=shift;
+       qexp+=shift-14*((m+1)>>1);
+ 
+       pi=((pi*pi)>>16);
+       qi=((qi*qi)>>16);
+       qexp=qexp*2+m;
+ 
+       pi*=(1<<14)-((wi*wi)>>14);
+       qi+=pi>>14;
+ 
+     }else{
+       /* even order filter; still symmetric */
+ 
+       /* p*=p(1-w), q*=q(1+w), let normalization drift because it isn't
+ 	 worth tracking step by step */
+       
+       pi>>=shift;
+       qi>>=shift;
+       qexp+=shift-7*m;
+ 
+       pi=((pi*pi)>>16);
+       qi=((qi*qi)>>16);
+       qexp=qexp*2+m;
+       
+       pi*=(1<<14)-wi;
+       qi*=(1<<14)+wi;
+       qi=(qi+pi)>>14;
+       
+     }
+     
+ 
+     /* we've let the normalization drift because it wasn't important;
+        however, for the lookup, things must be normalized again.  We
+        need at most one right shift or a number of left shifts */
+ 
+     if(qi&0xffff0000){ /* checks for 1.xxxxxxxxxxxxxxxx */
+       qi>>=1; qexp++; 
+     }else
+       while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/
+ 	qi<<=1; qexp--; 
+       }
+ 
+     amp=vorbis_fromdBlook_i(ampi*                     /*  n.4         */
+ 			    vorbis_invsqlook_i(qi,qexp)- 
+ 			                              /*  m.8, m+n<=8 */
+ 			    ampoffseti);              /*  8.12[0]     */
+ 
+     curve[i]*=amp;
+     while(map[++i]==k)curve[i]*=amp;
+   }
+ }
+ 
+ #else 
+ 
+ /* old, nonoptimized but simple version for any poor sap who needs to
+    figure out what the hell this code does, or wants the other
+    fraction of a dB precision */
+ 
+ /* side effect: changes *lsp to cosines of lsp */
+ void vorbis_lsp_to_curve(float *curve,int *map,int n,int ln,float *lsp,int m,
+ 			    float amp,float ampoffset){
+   int i;
+   float wdel=M_PI/ln;
+   for(i=0;i<m;i++)lsp[i]=2.f*cos(lsp[i]);
+ 
+   i=0;
+   while(i<n){
+     int j,k=map[i];
+     float p=.5f;
+     float q=.5f;
+     float w=2.f*cos(wdel*k);
+     for(j=1;j<m;j+=2){
+       q *= w-lsp[j-1];
+       p *= w-lsp[j];
+     }
+     if(j==m){
+       /* odd order filter; slightly assymetric */
+       /* the last coefficient */
+       q*=w-lsp[j-1];
+       p*=p*(4.f-w*w);
+       q*=q;
+     }else{
+       /* even order filter; still symmetric */
+       p*=p*(2.f-w);
+       q*=q*(2.f+w);
+     }
+ 
+     q=fromdB(amp/sqrt(p+q)-ampoffset);
+ 
+     curve[i]*=q;
+     while(map[++i]==k)curve[i]*=q;
+   }
+ }
+ 
+ #endif
+ #endif
+ 
+ static void cheby(float *g, int ord) {
+   int i, j;
+ 
+   g[0] *= .5f;
+   for(i=2; i<= ord; i++) {
+     for(j=ord; j >= i; j--) {
+       g[j-2] -= g[j];
+       g[j] += g[j]; 
+     }
+   }
+ }
+ 
+ static int comp(const void *a,const void *b){
+   return (*(float *)a<*(float *)b)-(*(float *)a>*(float *)b);
+ }
+ 
+ /* Newton-Raphson-Maehly actually functioned as a decent root finder,
+    but there are root sets for which it gets into limit cycles
+    (exacerbated by zero suppression) and fails.  We can't afford to
+    fail, even if the failure is 1 in 100,000,000, so we now use
+    Laguerre and later polish with Newton-Raphson (which can then
+    afford to fail) */
+ 
+ #define EPSILON 10e-7
+ static int Laguerre_With_Deflation(float *a,int ord,float *r){
+   int i,m;
+   double lastdelta=0.f;
+   double *defl=alloca(sizeof(*defl)*(ord+1));
+   for(i=0;i<=ord;i++)defl[i]=a[i];
+ 
+   for(m=ord;m>0;m--){
+     double new=0.f,delta;
+ 
+     /* iterate a root */
+     while(1){
+       double p=defl[m],pp=0.f,ppp=0.f,denom;
+       
+       /* eval the polynomial and its first two derivatives */
+       for(i=m;i>0;i--){
+ 	ppp = new*ppp + pp;
+ 	pp  = new*pp  + p;
+ 	p   = new*p   + defl[i-1];
+       }
+       
+       /* Laguerre's method */
+       denom=(m-1) * ((m-1)*pp*pp - m*p*ppp);
+       if(denom<0)
+ 	return(-1);  /* complex root!  The LPC generator handed us a bad filter */
+ 
+       if(pp>0){
+ 	denom = pp + sqrt(denom);
+ 	if(denom<EPSILON)denom=EPSILON;
+       }else{
+ 	denom = pp - sqrt(denom);
+ 	if(denom>-(EPSILON))denom=-(EPSILON);
+       }
+ 
+       delta  = m*p/denom;
+       new   -= delta;
+ 
+       if(delta<0.f)delta*=-1;
+ 
+       if(fabs(delta/new)<10e-12)break; 
+       lastdelta=delta;
+     }
+ 
+     r[m-1]=new;
+ 
+     /* forward deflation */
+     
+     for(i=m;i>0;i--)
+       defl[i-1]+=new*defl[i];
+     defl++;
+ 
+   }
+   return(0);
+ }
+ 
+ 
+ /* for spit-and-polish only */
+ static int Newton_Raphson(float *a,int ord,float *r){
+   int i, k, count=0;
+   double error=1.f;
+   double *root=alloca(ord*sizeof(*root));
+ 
+   for(i=0; i<ord;i++) root[i] = r[i];
+   
+   while(error>1e-20){
+     error=0;
+     
+     for(i=0; i<ord; i++) { /* Update each point. */
+       double pp=0.,delta;
+       double rooti=root[i];
+       double p=a[ord];
+       for(k=ord-1; k>= 0; k--) {
+ 
+ 	pp= pp* rooti + p;
+ 	p = p * rooti + a[k];
+       }
+ 
+       delta = p/pp;
+       root[i] -= delta;
+       error+= delta*delta;
+     }
+     
+     if(count>40)return(-1);
+      
+     count++;
+   }
+ 
+   /* Replaced the original bubble sort with a real sort.  With your
+      help, we can eliminate the bubble sort in our lifetime. --Monty */
+ 
+   for(i=0; i<ord;i++) r[i] = root[i];
+   return(0);
+ }
+ 
+ 
+ /* Convert lpc coefficients to lsp coefficients */
+ int vorbis_lpc_to_lsp(float *lpc,float *lsp,int m){
+   int order2=(m+1)>>1;
+   int g1_order,g2_order;
+   float *g1=alloca(sizeof(*g1)*(order2+1));
+   float *g2=alloca(sizeof(*g2)*(order2+1));
+   float *g1r=alloca(sizeof(*g1r)*(order2+1));
+   float *g2r=alloca(sizeof(*g2r)*(order2+1));
+   int i;
+ 
+   /* even and odd are slightly different base cases */
+   g1_order=(m+1)>>1;
+   g2_order=(m)  >>1;
+ 
+   /* Compute the lengths of the x polynomials. */
+   /* Compute the first half of K & R F1 & F2 polynomials. */
+   /* Compute half of the symmetric and antisymmetric polynomials. */
+   /* Remove the roots at +1 and -1. */
+   
+   g1[g1_order] = 1.f;
+   for(i=1;i<=g1_order;i++) g1[g1_order-i] = lpc[i-1]+lpc[m-i];
+   g2[g2_order] = 1.f;
+   for(i=1;i<=g2_order;i++) g2[g2_order-i] = lpc[i-1]-lpc[m-i];
+   
+   if(g1_order>g2_order){
+     for(i=2; i<=g2_order;i++) g2[g2_order-i] += g2[g2_order-i+2];
+   }else{
+     for(i=1; i<=g1_order;i++) g1[g1_order-i] -= g1[g1_order-i+1];
+     for(i=1; i<=g2_order;i++) g2[g2_order-i] += g2[g2_order-i+1];
+   }
+ 
+   /* Convert into polynomials in cos(alpha) */
+   cheby(g1,g1_order);
+   cheby(g2,g2_order);
+ 
+   /* Find the roots of the 2 even polynomials.*/
+   if(Laguerre_With_Deflation(g1,g1_order,g1r) ||
+      Laguerre_With_Deflation(g2,g2_order,g2r))
+     return(-1);
+ 
+   Newton_Raphson(g1,g1_order,g1r); /* if it fails, it leaves g1r alone */
+   Newton_Raphson(g2,g2_order,g2r); /* if it fails, it leaves g2r alone */
+ 
+   qsort(g1r,g1_order,sizeof(*g1r),comp);
+   qsort(g2r,g2_order,sizeof(*g2r),comp);
+ 
+   for(i=0;i<g1_order;i++)
+     lsp[i*2] = acos(g1r[i]);
+ 
+   for(i=0;i<g2_order;i++)
+     lsp[i*2+1] = acos(g2r[i]);
+   return(0);
+ }
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: floor backend 1 implementation
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ 
+ #define floor1_rangedB 140 /* floor 1 fixed at -140dB to 0dB range */
+ 
+ typedef struct {
+   int sorted_index[VIF_POSIT+2];
+   int forward_index[VIF_POSIT+2];
+   int reverse_index[VIF_POSIT+2];
+   
+   int hineighbor[VIF_POSIT];
+   int loneighbor[VIF_POSIT];
+   int posts;
+ 
+   int n;
+   int quant_q;
+   vorbis_info_floor1 *vi;
+ 
+   long phrasebits;
+   long postbits;
+   long frames;
+ } vorbis_look_floor1;
+ 
+ typedef struct lsfit_acc{
+   long x0;
+   long x1;
+ 
+   long xa;
+   long ya;
+   long x2a;
+   long y2a;
+   long xya; 
+   long an;
+ } lsfit_acc;
+ 
+ /***********************************************/
+  
+ static void floor1_free_info(vorbis_info_floor *i){
+   vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
+   if(info){
+     memset(info,0,sizeof(*info));
+     _ogg_free(info);
+   }
+ }
+ 
+ static void floor1_free_look(vorbis_look_floor *i){
+   vorbis_look_floor1 *look=(vorbis_look_floor1 *)i;
+   if(look){
+     /*fprintf(stderr,"floor 1 bit usage %f:%f (%f total)\n",
+ 	    (float)look->phrasebits/look->frames,
+ 	    (float)look->postbits/look->frames,
+ 	    (float)(look->postbits+look->phrasebits)/look->frames);*/
+ 
+     memset(look,0,sizeof(*look));
+     _ogg_free(look);
+   }
+ }
+ 
+ static int ilog(unsigned int v){
+   int ret=0;
+   while(v){
+     ret++;
+     v>>=1;
+   }
+   return(ret);
+ }
+ 
+ static void floor1_pack (vorbis_info_floor *i,oggpack_buffer *opb){
+   vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
+   int j,k;
+   int count=0;
+   int rangebits;
+   int maxposit=info->postlist[1];
+   int maxclass=-1;
+ 
+   /* save out partitions */
+   oggpack_write(opb,info->partitions,5); /* only 0 to 31 legal */
+   for(j=0;j<info->partitions;j++){
+     oggpack_write(opb,info->partitionclass[j],4); /* only 0 to 15 legal */
+     if(maxclass<info->partitionclass[j])maxclass=info->partitionclass[j];
+   }
+ 
+   /* save out partition classes */
+   for(j=0;j<maxclass+1;j++){
+     oggpack_write(opb,info->class_dim[j]-1,3); /* 1 to 8 */
+     oggpack_write(opb,info->class_subs[j],2); /* 0 to 3 */
+     if(info->class_subs[j])oggpack_write(opb,info->class_book[j],8);
+     for(k=0;k<(1<<info->class_subs[j]);k++)
+       oggpack_write(opb,info->class_subbook[j][k]+1,8);
+   }
+ 
+   /* save out the post list */
+   oggpack_write(opb,info->mult-1,2);     /* only 1,2,3,4 legal now */ 
+   oggpack_write(opb,ilog2(maxposit),4);
+   rangebits=ilog2(maxposit);
+ 
+   for(j=0,k=0;j<info->partitions;j++){
+     count+=info->class_dim[info->partitionclass[j]]; 
+     for(;k<count;k++)
+       oggpack_write(opb,info->postlist[k+2],rangebits);
+   }
+ }
+ 
+ 
+ static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){
+   codec_setup_info     *ci=vi->codec_setup;
+   int j,k,count=0,maxclass=-1,rangebits;
+ 
+   vorbis_info_floor1 *info=_ogg_calloc(1,sizeof(*info));
+   /* read partitions */
+   info->partitions=oggpack_read(opb,5); /* only 0 to 31 legal */
+   for(j=0;j<info->partitions;j++){
+     info->partitionclass[j]=oggpack_read(opb,4); /* only 0 to 15 legal */
+     if(maxclass<info->partitionclass[j])maxclass=info->partitionclass[j];
+   }
+ 
+   /* read partition classes */
+   for(j=0;j<maxclass+1;j++){
+     info->class_dim[j]=oggpack_read(opb,3)+1; /* 1 to 8 */
+     info->class_subs[j]=oggpack_read(opb,2); /* 0,1,2,3 bits */
+     if(info->class_subs[j]<0)
+       goto err_out;
+     if(info->class_subs[j])info->class_book[j]=oggpack_read(opb,8);
+     if(info->class_book[j]<0 || info->class_book[j]>=ci->books)
+       goto err_out;
+     for(k=0;k<(1<<info->class_subs[j]);k++){
+       info->class_subbook[j][k]=oggpack_read(opb,8)-1;
+       if(info->class_subbook[j][k]<-1 || info->class_subbook[j][k]>=ci->books)
+ 	goto err_out;
+     }
+   }
+ 
+   /* read the post list */
+   info->mult=oggpack_read(opb,2)+1;     /* only 1,2,3,4 legal now */ 
+   rangebits=oggpack_read(opb,4);
+ 
+   for(j=0,k=0;j<info->partitions;j++){
+     count+=info->class_dim[info->partitionclass[j]]; 
+     for(;k<count;k++){
+       int t=info->postlist[k+2]=oggpack_read(opb,rangebits);
+       if(t<0 || t>=(1<<rangebits))
+ 	goto err_out;
+     }
+   }
+   info->postlist[0]=0;
+   info->postlist[1]=1<<rangebits;
+ 
+   return(info);
+   
+  err_out:
+   floor1_free_info(info);
+   return(NULL);
+ }
+ 
+ static int icomp(const void *a,const void *b){
+   return(**(int **)a-**(int **)b);
+ }
+ 
+ static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,
+ 				      vorbis_info_floor *in){
+ 
+   int *sortpointer[VIF_POSIT+2];
+   vorbis_info_floor1 *info=(vorbis_info_floor1 *)in;
+   vorbis_look_floor1 *look=_ogg_calloc(1,sizeof(*look));
+   int i,j,n=0;
+ 
+   look->vi=info;
+   look->n=info->postlist[1];
+  
+   /* we drop each position value in-between already decoded values,
+      and use linear interpolation to predict each new value past the
+      edges.  The positions are read in the order of the position
+      list... we precompute the bounding positions in the lookup.  Of
+      course, the neighbors can change (if a position is declined), but
+      this is an initial mapping */
+ 
+   for(i=0;i<info->partitions;i++)n+=info->class_dim[info->partitionclass[i]];
+   n+=2;
+   look->posts=n;
+ 
+   /* also store a sorted position index */
+   for(i=0;i<n;i++)sortpointer[i]=info->postlist+i;
+   qsort(sortpointer,n,sizeof(*sortpointer),icomp);
+ 
+   /* points from sort order back to range number */
+   for(i=0;i<n;i++)look->forward_index[i]=sortpointer[i]-info->postlist;
+   /* points from range order to sorted position */
+   for(i=0;i<n;i++)look->reverse_index[look->forward_index[i]]=i;
+   /* we actually need the post values too */
+   for(i=0;i<n;i++)look->sorted_index[i]=info->postlist[look->forward_index[i]];
+   
+   /* quantize values to multiplier spec */
+   switch(info->mult){
+   case 1: /* 1024 -> 256 */
+     look->quant_q=256;
+     break;
+   case 2: /* 1024 -> 128 */
+     look->quant_q=128;
+     break;
+   case 3: /* 1024 -> 86 */
+     look->quant_q=86;
+     break;
+   case 4: /* 1024 -> 64 */
+     look->quant_q=64;
+     break;
+   }
+ 
+   /* discover our neighbors for decode where we don't use fit flags
+      (that would push the neighbors outward) */
+   for(i=0;i<n-2;i++){
+     int lo=0;
+     int hi=1;
+     int lx=0;
+     int hx=look->n;
+     int currentx=info->postlist[i+2];
+     for(j=0;j<i+2;j++){
+       int x=info->postlist[j];
+       if(x>lx && x<currentx){
+ 	lo=j;
+ 	lx=x;
+       }
+       if(x<hx && x>currentx){
+ 	hi=j;
+ 	hx=x;
+       }
+     }
+     look->loneighbor[i]=lo;
+     look->hineighbor[i]=hi;
+   }
+ 
+   return(look);
+ }
+ 
+ static int render_point(int x0,int x1,int y0,int y1,int x){
+   y0&=0x7fff; /* mask off flag */
+   y1&=0x7fff;
+     
+   {
+     int dy=y1-y0;
+     int adx=x1-x0;
+     int ady=abs(dy);
+     int err=ady*(x-x0);
+     
+     int off=err/adx;
+     if(dy<0)return(y0-off);
+     return(y0+off);
+   }
+ }
+ 
+ static int vorbis_dBquant(const float *x){
+   int i= *x*7.3142857f+1023.5f;
+   if(i>1023)return(1023);
+   if(i<0)return(0);
+   return i;
+ }
+ 
+ static float FLOOR1_fromdB_LOOKUP[256]={
+   1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F, 
+   1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F, 
+   1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F, 
+   2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F, 
+   2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F, 
+   3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F, 
+   4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F, 
+   6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F, 
+   7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F, 
+   1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F, 
+   1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F, 
+   1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F, 
+   2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F, 
+   2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F, 
+   3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F, 
+   4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F, 
+   5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F, 
+   7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F, 
+   9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F, 
+   1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F, 
+   1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F, 
+   2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F, 
+   2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F, 
+   3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F, 
+   4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F, 
+   5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F, 
+   7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F, 
+   9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F, 
+   0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F, 
+   0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F, 
+   0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F, 
+   0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F, 
+   0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F, 
+   0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F, 
+   0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F, 
+   0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F, 
+   0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F, 
+   0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F, 
+   0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F, 
+   0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F, 
+   0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F, 
+   0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F, 
+   0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F, 
+   0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F, 
+   0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F, 
+   0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F, 
+   0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F, 
+   0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F, 
+   0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F, 
+   0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F, 
+   0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F, 
+   0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F, 
+   0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F, 
+   0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F, 
+   0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F, 
+   0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F, 
+   0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F, 
+   0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F, 
+   0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F, 
+   0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F, 
+   0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F, 
+   0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F, 
+   0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F, 
+   0.82788260F, 0.88168307F, 0.9389798F, 1.F, 
+ };
+ 
+ static void render_line(int x0,int x1,int y0,int y1,float *d){
+   int dy=y1-y0;
+   int adx=x1-x0;
+   int ady=abs(dy);
+   int base=dy/adx;
+   int sy=(dy<0?base-1:base+1);
+   int x=x0;
+   int y=y0;
+   int err=0;
+ 
+   ady-=abs(base*adx);
+ 
+   d[x]*=FLOOR1_fromdB_LOOKUP[y];
+   while(++x<x1){
+     err=err+ady;
+     if(err>=adx){
+       err-=adx;
+       y+=sy;
+     }else{
+       y+=base;
+     }
+     d[x]*=FLOOR1_fromdB_LOOKUP[y];
+   }
+ }
+ 
+ static void render_line0(int x0,int x1,int y0,int y1,int *d){
+   int dy=y1-y0;
+   int adx=x1-x0;
+   int ady=abs(dy);
+   int base=dy/adx;
+   int sy=(dy<0?base-1:base+1);
+   int x=x0;
+   int y=y0;
+   int err=0;
+ 
+   ady-=abs(base*adx);
+ 
+   d[x]=y;
+   while(++x<x1){
+     err=err+ady;
+     if(err>=adx){
+       err-=adx;
+       y+=sy;
+     }else{
+       y+=base;
+     }
+     d[x]=y;
+   }
+ }
+ 
+ /* the floor has already been filtered to only include relevant sections */
+ static int accumulate_fit(const float *flr,const float *mdct,
+ 			  int x0, int x1,lsfit_acc *a,
+ 			  int n,vorbis_info_floor1 *info){
+   long i;
+ 
+   long xa=0,ya=0,x2a=0,y2a=0,xya=0,na=0, xb=0,yb=0,x2b=0,y2b=0,xyb=0,nb=0;
+ 
+   memset(a,0,sizeof(*a));
+   a->x0=x0;
+   a->x1=x1;
+   if(x1>=n)x1=n-1;
+ 
+   for(i=x0;i<=x1;i++){
+     int quantized=vorbis_dBquant(flr+i);
+     if(quantized){
+       if(mdct[i]+info->twofitatten>=flr[i]){
+ 	xa  += i;
+ 	ya  += quantized;
+ 	x2a += i*i;
+ 	y2a += quantized*quantized;
+ 	xya += i*quantized;
+ 	na++;
+       }else{
+ 	xb  += i;
+ 	yb  += quantized;
+ 	x2b += i*i;
+ 	y2b += quantized*quantized;
+ 	xyb += i*quantized;
+ 	nb++;
+       }
+     }
+   }
+ 
+   xb+=xa;
+   yb+=ya;
+   x2b+=x2a;
+   y2b+=y2a;
+   xyb+=xya;
+   nb+=na;
+ 
+   /* weight toward the actually used frequencies if we meet the threshhold */
+   {
+     int weight=nb*info->twofitweight/(na+1);
+ 
+     a->xa=xa*weight+xb;
+     a->ya=ya*weight+yb;
+     a->x2a=x2a*weight+x2b;
+     a->y2a=y2a*weight+y2b;
+     a->xya=xya*weight+xyb;
+     a->an=na*weight+nb;
+   }
+ 
+   return(na);
+ }
+ 
+ static void fit_line(lsfit_acc *a,int fits,int *y0,int *y1){
+   long x=0,y=0,x2=0,y2=0,xy=0,an=0,i;
+   long x0=a[0].x0;
+   long x1=a[fits-1].x1;
+ 
+   for(i=0;i<fits;i++){
+     x+=a[i].xa;
+     y+=a[i].ya;
+     x2+=a[i].x2a;
+     y2+=a[i].y2a;
+     xy+=a[i].xya;
+     an+=a[i].an;
+   }
+ 
+   if(*y0>=0){
+     x+=   x0;
+     y+=  *y0;
+     x2+=  x0 *  x0;
+     y2+= *y0 * *y0;
+     xy+= *y0 *  x0;
+     an++;
+   }
+ 
+   if(*y1>=0){
+     x+=   x1;
+     y+=  *y1;
+     x2+=  x1 *  x1;
+     y2+= *y1 * *y1;
+     xy+= *y1 *  x1;
+     an++;
+   }
+   
+   if(an){
+     /* need 64 bit multiplies, which C doesn't give portably as int */
+     double fx=x;
+     double fy=y;
+     double fx2=x2;
+     double fxy=xy;
+     double denom=1./(an*fx2-fx*fx);
+     double a=(fy*fx2-fxy*fx)*denom;
+     double b=(an*fxy-fx*fy)*denom;
+     *y0=rint(a+b*x0);
+     *y1=rint(a+b*x1);
+     
+     /* limit to our range! */
+     if(*y0>1023)*y0=1023;
+     if(*y1>1023)*y1=1023;
+     if(*y0<0)*y0=0;
+     if(*y1<0)*y1=0;
+     
+   }else{
+     *y0=0;
+     *y1=0;
+   }
+ }
+ 
+ /*static void fit_line_point(lsfit_acc *a,int fits,int *y0,int *y1){
+   long y=0;
+   int i;
+ 
+   for(i=0;i<fits && y==0;i++)
+     y+=a[i].ya;
+   
+   *y0=*y1=y;
+   }*/
+ 
+ static int inspect_error(int x0,int x1,int y0,int y1,const float *mask,
+ 			 const float *mdct,
+ 			 vorbis_info_floor1 *info){
+   int dy=y1-y0;
+   int adx=x1-x0;
+   int ady=abs(dy);
+   int base=dy/adx;
+   int sy=(dy<0?base-1:base+1);
+   int x=x0;
+   int y=y0;
+   int err=0;
+   int val=vorbis_dBquant(mask+x);
+   int mse=0;
+   int n=0;
+ 
+   ady-=abs(base*adx);
+   
+   mse=(y-val);
+   mse*=mse;
+   n++;
+   if(mdct[x]+info->twofitatten>=mask[x]){
+     if(y+info->maxover<val)return(1);
+     if(y-info->maxunder>val)return(1);
+   }
+ 
+   while(++x<x1){
+     err=err+ady;
+     if(err>=adx){
+       err-=adx;
+       y+=sy;
+     }else{
+       y+=base;
+     }
+ 
+     val=vorbis_dBquant(mask+x);
+     mse+=((y-val)*(y-val));
+     n++;
+     if(mdct[x]+info->twofitatten>=mask[x]){
+       if(val){
+ 	if(y+info->maxover<val)return(1);
+ 	if(y-info->maxunder>val)return(1);
+       }
+     }
+   }
+   
+   if(info->maxover*info->maxover/n>info->maxerr)return(0);
+   if(info->maxunder*info->maxunder/n>info->maxerr)return(0);
+   if(mse/n>info->maxerr)return(1);
+   return(0);
+ }
+ 
+ static int post_Y(int *A,int *B,int pos){
+   if(A[pos]<0)
+     return B[pos];
+   if(B[pos]<0)
+     return A[pos];
+ 
+   return (A[pos]+B[pos])>>1;
+ }
+ 
+ int *floor1_fit(vorbis_block *vb,vorbis_look_floor1 *look,
+ 			  const float *logmdct,   /* in */
+ 			  const float *logmask){
+   long i,j;
+   vorbis_info_floor1 *info=look->vi;
+   long n=look->n;
+   long posts=look->posts;
+   long nonzero=0;
+   lsfit_acc fits[VIF_POSIT+1];
+   int fit_valueA[VIF_POSIT+2]; /* index by range list position */
+   int fit_valueB[VIF_POSIT+2]; /* index by range list position */
+ 
+   int loneighbor[VIF_POSIT+2]; /* sorted index of range list position (+2) */
+   int hineighbor[VIF_POSIT+2]; 
+   int *output=NULL;
+   int memo[VIF_POSIT+2];
+ 
+   for(i=0;i<posts;i++)fit_valueA[i]=-200; /* mark all unused */
+   for(i=0;i<posts;i++)fit_valueB[i]=-200; /* mark all unused */
+   for(i=0;i<posts;i++)loneighbor[i]=0; /* 0 for the implicit 0 post */
+   for(i=0;i<posts;i++)hineighbor[i]=1; /* 1 for the implicit post at n */
+   for(i=0;i<posts;i++)memo[i]=-1;      /* no neighbor yet */
+ 
+   /* quantize the relevant floor points and collect them into line fit
+      structures (one per minimal division) at the same time */
+   if(posts==0){
+     nonzero+=accumulate_fit(logmask,logmdct,0,n,fits,n,info);
+   }else{
+     for(i=0;i<posts-1;i++)
+       nonzero+=accumulate_fit(logmask,logmdct,look->sorted_index[i],
+ 			      look->sorted_index[i+1],fits+i,
+ 			      n,info);
+   }
+   
+   if(nonzero){
+     /* start by fitting the implicit base case.... */
+     int y0=-200;
+     int y1=-200;
+     fit_line(fits,posts-1,&y0,&y1);
+ 
+     fit_valueA[0]=y0;
+     fit_valueB[0]=y0;
+     fit_valueB[1]=y1;
+     fit_valueA[1]=y1;
+ 
+     /* Non degenerate case */
+     /* start progressive splitting.  This is a greedy, non-optimal
+        algorithm, but simple and close enough to the best
+        answer. */
+     for(i=2;i<posts;i++){
+       int sortpos=look->reverse_index[i];
+       int ln=loneighbor[sortpos];
+       int hn=hineighbor[sortpos];
+       
+       /* eliminate repeat searches of a particular range with a memo */
+       if(memo[ln]!=hn){
+ 	/* haven't performed this error search yet */
+ 	int lsortpos=look->reverse_index[ln];
+ 	int hsortpos=look->reverse_index[hn];
+ 	memo[ln]=hn;
+ 		
+ 	{
+ 	  /* A note: we want to bound/minimize *local*, not global, error */
+ 	  int lx=info->postlist[ln];
+ 	  int hx=info->postlist[hn];	  
+ 	  int ly=post_Y(fit_valueA,fit_valueB,ln);
+ 	  int hy=post_Y(fit_valueA,fit_valueB,hn);
+ 	  
+ 	  if(ly==-1 || hy==-1){
+ 	    exit(1);
+ 	  }
+ 
+ 	  if(inspect_error(lx,hx,ly,hy,logmask,logmdct,info)){
+ 	    /* outside error bounds/begin search area.  Split it. */
+ 	    int ly0=-200;
+ 	    int ly1=-200;
+ 	    int hy0=-200;
+ 	    int hy1=-200;
+ 	    fit_line(fits+lsortpos,sortpos-lsortpos,&ly0,&ly1);
+ 	    fit_line(fits+sortpos,hsortpos-sortpos,&hy0,&hy1);
+ 	    
+ 	    /* store new edge values */
+ 	    fit_valueB[ln]=ly0;
+ 	    if(ln==0)fit_valueA[ln]=ly0;
+ 	    fit_valueA[i]=ly1;
+ 	    fit_valueB[i]=hy0;
+ 	    fit_valueA[hn]=hy1;
+ 	    if(hn==1)fit_valueB[hn]=hy1;
+ 	    
+ 	    if(ly1>=0 || hy0>=0){
+ 	      /* store new neighbor values */
+ 	      for(j=sortpos-1;j>=0;j--)
+ 		if(hineighbor[j]==hn)
+ 		  hineighbor[j]=i;
+ 		else
+ 		  break;
+ 	      for(j=sortpos+1;j<posts;j++)
+ 		if(loneighbor[j]==ln)
+ 		  loneighbor[j]=i;
+ 		else
+ 		  break;
+ 	      
+ 	    }
+ 	  }else{
+ 	    
+ 	    fit_valueA[i]=-200;
+ 	    fit_valueB[i]=-200;
+ 	  }
+ 	}
+       }
+     }
+   
+     output=_vorbis_block_alloc(vb,sizeof(*output)*posts);
+     
+     output[0]=post_Y(fit_valueA,fit_valueB,0);
+     output[1]=post_Y(fit_valueA,fit_valueB,1);
+     
+     /* fill in posts marked as not using a fit; we will zero
+        back out to 'unused' when encoding them so long as curve
+        interpolation doesn't force them into use */
+     for(i=2;i<posts;i++){
+       int ln=look->loneighbor[i-2];
+       int hn=look->hineighbor[i-2];
+       int x0=info->postlist[ln];
+       int x1=info->postlist[hn];
+       int y0=output[ln];
+       int y1=output[hn];
+       
+       int predicted=render_point(x0,x1,y0,y1,info->postlist[i]);
+       int vx=post_Y(fit_valueA,fit_valueB,i);
+       
+       if(vx>=0 && predicted!=vx){ 
+ 	output[i]=vx;
+       }else{
+ 	output[i]= predicted|0x8000;
+       }
+     }
+   }
+ 
+   return(output);
+   
+ }
+ 		
+ int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
+ 			  int *A,int *B,
+ 			  int del){
+ 
+   long i;
+   long posts=look->posts;
+   int *output=NULL;
+   
+   if(A && B){
+     output=_vorbis_block_alloc(vb,sizeof(*output)*posts);
+     
+     for(i=0;i<posts;i++){
+       output[i]=((65536-del)*(A[i]&0x7fff)+del*(B[i]&0x7fff)+32768)>>16;
+       if(A[i]&0x8000 && B[i]&0x8000)output[i]|=0x8000;
+     }
+   }
+ 
+   return(output);
+ }
+ 
+ 
+ int floor1_encode(vorbis_block *vb,vorbis_look_floor1 *look,
+ 		  int *post,int *ilogmask){
+ 
+   long i,j;
+   vorbis_info_floor1 *info=look->vi;
+   long posts=look->posts;
+   codec_setup_info *ci=vb->vd->vi->codec_setup;
+   int out[VIF_POSIT+2];
+   static_codebook **sbooks=ci->book_param;
+   codebook *books=ci->fullbooks;
+   static long seq=0; 
+ 
+   /* quantize values to multiplier spec */
+   if(post){
+     for(i=0;i<posts;i++){
+       int val=post[i]&0x7fff;
+       switch(info->mult){
+       case 1: /* 1024 -> 256 */
+ 	val>>=2;
+ 	break;
+       case 2: /* 1024 -> 128 */
+ 	val>>=3;
+ 	break;
+       case 3: /* 1024 -> 86 */
+ 	val/=12;
+ 	break;
+       case 4: /* 1024 -> 64 */
+ 	val>>=4;
+ 	break;
+       }
+       post[i]=val | (post[i]&0x8000);
+     }
+ 
+     out[0]=post[0];
+     out[1]=post[1];
+ 
+     /* find prediction values for each post and subtract them */
+     for(i=2;i<posts;i++){
+       int ln=look->loneighbor[i-2];
+       int hn=look->hineighbor[i-2];
+       int x0=info->postlist[ln];
+       int x1=info->postlist[hn];
+       int y0=post[ln];
+       int y1=post[hn];
+       
+       int predicted=render_point(x0,x1,y0,y1,info->postlist[i]);
+       
+       if((post[i]&0x8000) || (predicted==post[i])){
+ 	post[i]=predicted|0x8000; /* in case there was roundoff jitter
+ 				     in interpolation */
+ 	out[i]=0;
+       }else{
+ 	int headroom=(look->quant_q-predicted<predicted?
+ 		      look->quant_q-predicted:predicted);
+ 	
+ 	int val=post[i]-predicted;
+ 	
+ 	/* at this point the 'deviation' value is in the range +/- max
+ 	   range, but the real, unique range can always be mapped to
+ 	   only [0-maxrange).  So we want to wrap the deviation into
+ 	   this limited range, but do it in the way that least screws
+ 	   an essentially gaussian probability distribution. */
+ 	
+ 	if(val<0)
+ 	  if(val<-headroom)
+ 	    val=headroom-val-1;
+ 	  else
+ 	    val=-1-(val<<1);
+ 	else
+ 	  if(val>=headroom)
+ 	    val= val+headroom;
+ 	  else
+ 	    val<<=1;
+ 	
+ 	out[i]=val;
+ 	post[ln]&=0x7fff;
+ 	post[hn]&=0x7fff;
+       }
+     }
+     
+     /* we have everything we need. pack it out */
+     /* mark nontrivial floor */
+     oggpack_write(&vb->opb,1,1);
+       
+     /* beginning/end post */
+     look->frames++;
+     look->postbits+=ilog(look->quant_q-1)*2;
+     oggpack_write(&vb->opb,out[0],ilog(look->quant_q-1));
+     oggpack_write(&vb->opb,out[1],ilog(look->quant_q-1));
+       
+       
+     /* partition by partition */
+     for(i=0,j=2;i<info->partitions;i++){
+       int class=info->partitionclass[i];
+       int cdim=info->class_dim[class];
+       int csubbits=info->class_subs[class];
+       int csub=1<<csubbits;
+       int bookas[8]={0,0,0,0,0,0,0,0};
+       int cval=0;
+       int cshift=0;
+       int k,l;
+ 
+       /* generate the partition's first stage cascade value */
+       if(csubbits){
+ 	int maxval[8];
+ 	for(k=0;k<csub;k++){
+ 	  int booknum=info->class_subbook[class][k];
+ 	  if(booknum<0){
+ 	    maxval[k]=1;
+ 	  }else{
+ 	    maxval[k]=sbooks[info->class_subbook[class][k]]->entries;
+ 	  }
+ 	}
+ 	for(k=0;k<cdim;k++){
+ 	  for(l=0;l<csub;l++){
+ 	    int val=out[j+k];
+ 	    if(val<maxval[l]){
+ 	      bookas[k]=l;
+ 	      break;
+ 	    }
+ 	  }
+ 	  cval|= bookas[k]<<cshift;
+ 	  cshift+=csubbits;
+ 	}
+ 	/* write it */
+ 	look->phrasebits+=
+ 	  vorbis_book_encode(books+info->class_book[class],cval,&vb->opb);
+ 	
+ #ifdef TRAIN_FLOOR1
+ 	{
+ 	  FILE *of;
+ 	  char buffer[80];
+ 	  sprintf(buffer,"line_%dx%ld_class%d.vqd",
+ 		  vb->pcmend/2,posts-2,class);
+ 	  of=fopen(buffer,"a");
+ 	  fprintf(of,"%d\n",cval);
+ 	  fclose(of);
+ 	}
+ #endif
+       }
+ 	
+       /* write post values */
+       for(k=0;k<cdim;k++){
+ 	int book=info->class_subbook[class][bookas[k]];
+ 	if(book>=0){
+ 	  /* hack to allow training with 'bad' books */
+ 	  if(out[j+k]<(books+book)->entries)
+ 	    look->postbits+=vorbis_book_encode(books+book,
+ 					       out[j+k],&vb->opb);
+ 	  /*else
+ 	    fprintf(stderr,"+!");*/
+ 	  
+ #ifdef TRAIN_FLOOR1
+ 	  {
+ 	    FILE *of;
+ 	    char buffer[80];
+ 	    sprintf(buffer,"line_%dx%ld_%dsub%d.vqd",
+ 		    vb->pcmend/2,posts-2,class,bookas[k]);
+ 	    of=fopen(buffer,"a");
+ 	    fprintf(of,"%d\n",out[j+k]);
+ 	    fclose(of);
+ 	  }
+ #endif
+ 	}
+       }
+       j+=cdim;
+     }
+     
+     {
+       /* generate quantized floor equivalent to what we'd unpack in decode */
+       /* render the lines */
+       int hx=0;
+       int lx=0;
+       int ly=post[0]*info->mult;
+       for(j=1;j<look->posts;j++){
+ 	int current=look->forward_index[j];
+ 	int hy=post[current]&0x7fff;
+ 	if(hy==post[current]){
+ 	  
+ 	  hy*=info->mult;
+ 	  hx=info->postlist[current];
+ 	
+ 	  render_line0(lx,hx,ly,hy,ilogmask);
+ 	
+ 	  lx=hx;
+ 	  ly=hy;
+ 	}
+       }
+       for(j=hx;j<vb->pcmend/2;j++)ilogmask[j]=ly; /* be certain */    
+       seq++;
+       return(1);
+     }
+   }else{
+     oggpack_write(&vb->opb,0,1);
+     memset(ilogmask,0,vb->pcmend/2*sizeof(*ilogmask));
+     seq++;
+     return(0);
+   }
+ }
+ 
+ static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){
+   vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;
+   vorbis_info_floor1 *info=look->vi;
+   codec_setup_info   *ci=vb->vd->vi->codec_setup;
+   
+   int i,j,k;
+   codebook *books=ci->fullbooks;   
+ 
+   /* unpack wrapped/predicted values from stream */
+   if(oggpack_read(&vb->opb,1)==1){
+     int *fit_value=_vorbis_block_alloc(vb,(look->posts)*sizeof(*fit_value));
+ 
+     fit_value[0]=oggpack_read(&vb->opb,ilog(look->quant_q-1));
+     fit_value[1]=oggpack_read(&vb->opb,ilog(look->quant_q-1));
+ 
+     /* partition by partition */
+     for(i=0,j=2;i<info->partitions;i++){
+       int class=info->partitionclass[i];
+       int cdim=info->class_dim[class];
+       int csubbits=info->class_subs[class];
+       int csub=1<<csubbits;
+       int cval=0;
+ 
+       /* decode the partition's first stage cascade value */
+       if(csubbits){
+ 	cval=vorbis_book_decode(books+info->class_book[class],&vb->opb);
+ 
+ 	if(cval==-1)goto eop;
+       }
+ 
+       for(k=0;k<cdim;k++){
+ 	int book=info->class_subbook[class][cval&(csub-1)];
+ 	cval>>=csubbits;
+ 	if(book>=0){
+ 	  if((fit_value[j+k]=vorbis_book_decode(books+book,&vb->opb))==-1)
+ 	    goto eop;
+ 	}else{
+ 	  fit_value[j+k]=0;
+ 	}
+       }
+       j+=cdim;
+     }
+ 
+     /* unwrap positive values and reconsitute via linear interpolation */
+     for(i=2;i<look->posts;i++){
+       int predicted=render_point(info->postlist[look->loneighbor[i-2]],
+ 				 info->postlist[look->hineighbor[i-2]],
+ 				 fit_value[look->loneighbor[i-2]],
+ 				 fit_value[look->hineighbor[i-2]],
+ 				 info->postlist[i]);
+       int hiroom=look->quant_q-predicted;
+       int loroom=predicted;
+       int room=(hiroom<loroom?hiroom:loroom)<<1;
+       int val=fit_value[i];
+ 
+       if(val){
+ 	if(val>=room){
+ 	  if(hiroom>loroom){
+ 	    val = val-loroom;
+ 	  }else{
+ 	    val = -1-(val-hiroom);
+ 	  }
+ 	}else{
+ 	  if(val&1){
+ 	    val= -((val+1)>>1);
+ 	  }else{
+ 	    val>>=1;
+ 	  }
+ 	}
+ 
+ 	fit_value[i]=val+predicted;
+ 	fit_value[look->loneighbor[i-2]]&=0x7fff;
+ 	fit_value[look->hineighbor[i-2]]&=0x7fff;
+ 
+       }else{
+ 	fit_value[i]=predicted|0x8000;
+       }
+ 	
+     }
+ 
+     return(fit_value);
+   }
+  eop:
+   return(NULL);
+ }
+ 
+ static int floor1_inverse2(vorbis_block *vb,vorbis_look_floor *in,void *memo,
+ 			  float *out){
+   vorbis_look_floor1 *look=(vorbis_look_floor1 *)in;
+   vorbis_info_floor1 *info=look->vi;
+ 
+   codec_setup_info   *ci=vb->vd->vi->codec_setup;
+   int                  n=ci->blocksizes[vb->W]/2;
+   int j;
+ 
+   if(memo){
+     /* render the lines */
+     int *fit_value=(int *)memo;
+     int hx=0;
+     int lx=0;
+     int ly=fit_value[0]*info->mult;
+     for(j=1;j<look->posts;j++){
+       int current=look->forward_index[j];
+       int hy=fit_value[current]&0x7fff;
+       if(hy==fit_value[current]){
+ 	
+ 	hy*=info->mult;
+ 	hx=info->postlist[current];
+ 	
+ 	render_line(lx,hx,ly,hy,out);
+ 	
+ 	lx=hx;
+ 	ly=hy;
+       }
+     }
+     for(j=hx;j<n;j++)out[j]*=FLOOR1_fromdB_LOOKUP[ly]; /* be certain */    
+     return(1);
+   }
+   memset(out,0,sizeof(*out)*n);
+   return(0);
+ }
+ 
+ /* export hooks */
+ vorbis_func_floor floor1_exportbundle={
+   &floor1_pack,&floor1_unpack,&floor1_look,&floor1_free_info,
+   &floor1_free_look,&floor1_inverse1,&floor1_inverse2
+ };
+ 
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: residue backend 0, 1 and 2 implementation
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* Slow, slow, slow, simpleminded and did I mention it was slow?  The
+    encode/decode loops are coded for clarity and performance is not
+    yet even a nagging little idea lurking in the shadows.  Oh and BTW,
+    it's slow. */
+ 
+ 
+ #ifdef TRAIN_RES
+ #endif 
+ 
+ typedef struct {
+   vorbis_info_residue0 *info;
+   
+   int         parts;
+   int         stages;
+   codebook   *fullbooks;
+   codebook   *phrasebook;
+   codebook ***partbooks;
+ 
+   int         partvals;
+   int       **decodemap;
+ 
+   long      postbits;
+   long      phrasebits;
+   long      frames;
+ 
+ #ifdef TRAIN_RES
+   int        train_seq;
+   long      *training_data[8][64];
+   float      training_max[8][64];
+   float      training_min[8][64];
+   float     tmin;
+   float     tmax;
+ #endif
+ 
+ } vorbis_look_residue0;
+ 
+ void res0_free_info(vorbis_info_residue *i){
+   vorbis_info_residue0 *info=(vorbis_info_residue0 *)i;
+   if(info){
+     memset(info,0,sizeof(*info));
+     _ogg_free(info);
+   }
+ }
+ 
+ void res0_free_look(vorbis_look_residue *i){
+   int j;
+   if(i){
+ 
+     vorbis_look_residue0 *look=(vorbis_look_residue0 *)i;
+ 
+ #ifdef TRAIN_RES
+     {
+       int j,k,l;
+       for(j=0;j<look->parts;j++){
+ 	/*fprintf(stderr,"partition %d: ",j);*/
+ 	for(k=0;k<8;k++)
+ 	  if(look->training_data[k][j]){
+ 	    char buffer[80];
+ 	    FILE *of;
+ 	    codebook *statebook=look->partbooks[j][k];
+ 	    
+ 	    /* long and short into the same bucket by current convention */
+ 	    sprintf(buffer,"res_part%d_pass%d.vqd",j,k);
+ 	    of=fopen(buffer,"a");
+ 
+ 	    for(l=0;l<statebook->entries;l++)
+ 	      fprintf(of,"%d:%ld\n",l,look->training_data[k][j][l]);
+ 	    
+ 	    fclose(of);
+ 	    
+ 	    /*fprintf(stderr,"%d(%.2f|%.2f) ",k,
+ 	      look->training_min[k][j],look->training_max[k][j]);*/
+ 
+ 	    _ogg_free(look->training_data[k][j]);
+ 	  }
+ 	/*fprintf(stderr,"\n");*/
+       }
+     }
+     fprintf(stderr,"min/max residue: %g::%g\n",look->tmin,look->tmax);
+ 
+     /*fprintf(stderr,"residue bit usage %f:%f (%f total)\n",
+ 	    (float)look->phrasebits/look->frames,
+ 	    (float)look->postbits/look->frames,
+ 	    (float)(look->postbits+look->phrasebits)/look->frames);*/
+ #endif
+ 
+ 
+     /*vorbis_info_residue0 *info=look->info;
+ 
+     fprintf(stderr,
+ 	    "%ld frames encoded in %ld phrasebits and %ld residue bits "
+ 	    "(%g/frame) \n",look->frames,look->phrasebits,
+ 	    look->resbitsflat,
+ 	    (look->phrasebits+look->resbitsflat)/(float)look->frames);
+     
+     for(j=0;j<look->parts;j++){
+       long acc=0;
+       fprintf(stderr,"\t[%d] == ",j);
+       for(k=0;k<look->stages;k++)
+ 	if((info->secondstages[j]>>k)&1){
+ 	  fprintf(stderr,"%ld,",look->resbits[j][k]);
+ 	  acc+=look->resbits[j][k];
+ 	}
+ 
+       fprintf(stderr,":: (%ld vals) %1.2fbits/sample\n",look->resvals[j],
+ 	      acc?(float)acc/(look->resvals[j]*info->grouping):0);
+     }
+     fprintf(stderr,"\n");*/
+ 
+     for(j=0;j<look->parts;j++)
+       if(look->partbooks[j])_ogg_free(look->partbooks[j]);
+     _ogg_free(look->partbooks);
+     for(j=0;j<look->partvals;j++)
+       _ogg_free(look->decodemap[j]);
+     _ogg_free(look->decodemap);
+ 
+     memset(look,0,sizeof(*look));
+     _ogg_free(look);
+   }
+ }
+ 
+ static int icount(unsigned int v){
+   int ret=0;
+   while(v){
+     ret+=v&1;
+     v>>=1;
+   }
+   return(ret);
+ }
+ 
+ 
+ void res0_pack(vorbis_info_residue *vr,oggpack_buffer *opb){
+   vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr;
+   int j,acc=0;
+   oggpack_write(opb,info->begin,24);
+   oggpack_write(opb,info->end,24);
+ 
+   oggpack_write(opb,info->grouping-1,24);  /* residue vectors to group and 
+ 					     code with a partitioned book */
+   oggpack_write(opb,info->partitions-1,6); /* possible partition choices */
+   oggpack_write(opb,info->groupbook,8);  /* group huffman book */
+ 
+   /* secondstages is a bitmask; as encoding progresses pass by pass, a
+      bitmask of one indicates this partition class has bits to write
+      this pass */
+   for(j=0;j<info->partitions;j++){
+     if(ilog(info->secondstages[j])>3){
+       /* yes, this is a minor hack due to not thinking ahead */
+       oggpack_write(opb,info->secondstages[j],3); 
+       oggpack_write(opb,1,1);
+       oggpack_write(opb,info->secondstages[j]>>3,5); 
+     }else
+       oggpack_write(opb,info->secondstages[j],4); /* trailing zero */
+     acc+=icount(info->secondstages[j]);
+   }
+   for(j=0;j<acc;j++)
+     oggpack_write(opb,info->booklist[j],8);
+ 
+ }
+ 
+ /* vorbis_info is for range checking */
+ vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){
+   int j,acc=0;
+   vorbis_info_residue0 *info=_ogg_calloc(1,sizeof(*info));
+   codec_setup_info     *ci=vi->codec_setup;
+ 
+   info->begin=oggpack_read(opb,24);
+   info->end=oggpack_read(opb,24);
+   info->grouping=oggpack_read(opb,24)+1;
+   info->partitions=oggpack_read(opb,6)+1;
+   info->groupbook=oggpack_read(opb,8);
+ 
+   for(j=0;j<info->partitions;j++){
+     int cascade=oggpack_read(opb,3);
+     if(oggpack_read(opb,1))
+       cascade|=(oggpack_read(opb,5)<<3);
+     info->secondstages[j]=cascade;
+ 
+     acc+=icount(cascade);
+   }
+   for(j=0;j<acc;j++)
+     info->booklist[j]=oggpack_read(opb,8);
+ 
+   if(info->groupbook>=ci->books)goto errout;
+   for(j=0;j<acc;j++)
+     if(info->booklist[j]>=ci->books)goto errout;
+ 
+   return(info);
+  errout:
+   res0_free_info(info);
+   return(NULL);
+ }
+ 
+ vorbis_look_residue *res0_look(vorbis_dsp_state *vd,
+ 			       vorbis_info_residue *vr){
+   vorbis_info_residue0 *info=(vorbis_info_residue0 *)vr;
+   vorbis_look_residue0 *look=_ogg_calloc(1,sizeof(*look));
+   codec_setup_info     *ci=vd->vi->codec_setup;
+ 
+   int j,k,acc=0;
+   int dim;
+   int maxstage=0;
+   look->info=info;
+ 
+   look->parts=info->partitions;
+   look->fullbooks=ci->fullbooks;
+   look->phrasebook=ci->fullbooks+info->groupbook;
+   dim=look->phrasebook->dim;
+ 
+   look->partbooks=_ogg_calloc(look->parts,sizeof(*look->partbooks));
+ 
+   for(j=0;j<look->parts;j++){
+     int stages=ilog(info->secondstages[j]);
+     if(stages){
+       if(stages>maxstage)maxstage=stages;
+       look->partbooks[j]=_ogg_calloc(stages,sizeof(*look->partbooks[j]));
+       for(k=0;k<stages;k++)
+ 	if(info->secondstages[j]&(1<<k)){
+ 	  look->partbooks[j][k]=ci->fullbooks+info->booklist[acc++];
+ #ifdef TRAIN_RES
+ 	  look->training_data[k][j]=calloc(look->partbooks[j][k]->entries,
+ 					   sizeof(***look->training_data));
+ #endif
+ 	}
+     }
+   }
+ 
+   look->partvals=rint(pow((float)look->parts,(float)dim));
+   look->stages=maxstage;
+   look->decodemap=_ogg_malloc(look->partvals*sizeof(*look->decodemap));
+   for(j=0;j<look->partvals;j++){
+     long val=j;
+     long mult=look->partvals/look->parts;
+     look->decodemap[j]=_ogg_malloc(dim*sizeof(*look->decodemap[j]));
+     for(k=0;k<dim;k++){
+       long deco=val/mult;
+       val-=deco*mult;
+       mult/=look->parts;
+       look->decodemap[j][k]=deco;
+     }
+   }
+ #ifdef TRAIN_RES
+   {
+     static int train_seq=0;
+     look->train_seq=train_seq++;
+   }
+ #endif
+   return(look);
+ }
+ 
+ /* break an abstraction and copy some code for performance purposes */
+ static int local_book_besterror(codebook *book,float *a){
+   int dim=book->dim,i,k,o;
+   int best=0;
+   encode_aux_threshmatch *tt=book->c->thresh_tree;
+ 
+   /* find the quant val of each scalar */
+   for(k=0,o=dim;k<dim;++k){
+     float val=a[--o];
+     i=tt->threshvals>>1;
+ 
+     if(val<tt->quantthresh[i]){      
+       if(val<tt->quantthresh[i-1]){
+ 	for(--i;i>0;--i)
+ 	  if(val>=tt->quantthresh[i-1])
+ 	    break;
+       }
+     }else{
+       
+       for(++i;i<tt->threshvals-1;++i)
+ 	if(val<tt->quantthresh[i])break;
+       
+     }
+     
+     best=(best*tt->quantvals)+tt->quantmap[i];
+   }
+   /* regular lattices are easy :-) */
+   
+   if(book->c->lengthlist[best]<=0){
+     const static_codebook *c=book->c;
+     int i,j;
+     float bestf=0.f;
+     float *e=book->valuelist;
+     best=-1;
+     for(i=0;i<book->entries;i++){
+       if(c->lengthlist[i]>0){
+ 	float this=0.f;
+ 	for(j=0;j<dim;j++){
+ 	  float val=(e[j]-a[j]);
+ 	  this+=val*val;
+ 	}
+ 	if(best==-1 || this<bestf){
+ 	  bestf=this;
+ 	  best=i;
+ 	}
+       }
+       e+=dim;
+     }
+   }
+ 
+   {
+     float *ptr=book->valuelist+best*dim;
+     for(i=0;i<dim;i++)
+       *a++ -= *ptr++;
+   }
+ 
+   return(best);
+ }
+ 
+ static int _encodepart(oggpack_buffer *opb,float *vec, int n,
+ 		       codebook *book,long *acc){
+   int i,bits=0;
+   int dim=book->dim;
+   int step=n/dim;
+ 
+   for(i=0;i<step;i++){
+     int entry=local_book_besterror(book,vec+i*dim);
+ 
+ #ifdef TRAIN_RES
+     acc[entry]++;
+ #endif
+ 
+     bits+=vorbis_book_encode(book,entry,opb);
+   }
+ 
+   return(bits);
+ }
+ 
+ static long **_01class(vorbis_block *vb,vorbis_look_residue *vl,
+ 		       float **in,int ch){
+   long i,j,k;
+   vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
+   vorbis_info_residue0 *info=look->info;
+ 
+   /* move all this setup out later */
+   int samples_per_partition=info->grouping;
+   int possible_partitions=info->partitions;
+   int n=info->end-info->begin;
+   
+   int partvals=n/samples_per_partition;
+   long **partword=_vorbis_block_alloc(vb,ch*sizeof(*partword));
+   float scale=100./samples_per_partition;
+ 
+   /* we find the partition type for each partition of each
+      channel.  We'll go back and do the interleaved encoding in a
+      bit.  For now, clarity */
+  
+   for(i=0;i<ch;i++){
+     partword[i]=_vorbis_block_alloc(vb,n/samples_per_partition*sizeof(*partword[i]));
+     memset(partword[i],0,n/samples_per_partition*sizeof(*partword[i]));
+   }
+   
+   for(i=0;i<partvals;i++){
+     int offset=i*samples_per_partition+info->begin;
+     for(j=0;j<ch;j++){
+       float max=0.;
+       float ent=0.;
+       for(k=0;k<samples_per_partition;k++){
+ 	if(fabs(in[j][offset+k])>max)max=fabs(in[j][offset+k]);
+ 	ent+=fabs(rint(in[j][offset+k]));
+       }
+       ent*=scale;
+       
+       for(k=0;k<possible_partitions-1;k++)
+ 	if(max<=info->classmetric1[k] &&
+ 	   (info->classmetric2[k]<0 || (int)ent<info->classmetric2[k]))
+ 	  break;
+       
+       partword[j][i]=k;  
+     }
+   }
+ 
+ #ifdef TRAIN_RESAUX
+   {
+     FILE *of;
+     char buffer[80];
+   
+     for(i=0;i<ch;i++){
+       sprintf(buffer,"resaux_%d.vqd",look->train_seq);
+       of=fopen(buffer,"a");
+       for(j=0;j<partvals;j++)
+ 	fprintf(of,"%ld, ",partword[i][j]);
+       fprintf(of,"\n");
+       fclose(of);
+     }
+   }
+ #endif
+   look->frames++;
+ 
+   return(partword);
+ }
+ 
+ /* designed for stereo or other modes where the partition size is an
+    integer multiple of the number of channels encoded in the current
+    submap */
+ static long **_2class(vorbis_block *vb,vorbis_look_residue *vl,float **in,
+ 		      int ch){
+   long i,j,k,l;
+   vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
+   vorbis_info_residue0 *info=look->info;
+ 
+   /* move all this setup out later */
+   int samples_per_partition=info->grouping;
+   int possible_partitions=info->partitions;
+   int n=info->end-info->begin;
+ 
+   int partvals=n/samples_per_partition;
+   long **partword=_vorbis_block_alloc(vb,sizeof(*partword));
+ 
+ #ifdef TRAIN_RES
+   FILE *of;
+   char buffer[80];
+ #endif
+   
+   partword[0]=_vorbis_block_alloc(vb,n*ch/samples_per_partition*sizeof(*partword[0]));
+   memset(partword[0],0,n*ch/samples_per_partition*sizeof(*partword[0]));
+ 
+   for(i=0,l=info->begin/ch;i<partvals;i++){
+     float magmax=0.f;
+     float angmax=0.f;
+     for(j=0;j<samples_per_partition;j+=ch){
+       if(fabs(in[0][l])>magmax)magmax=fabs(in[0][l]);
+       for(k=1;k<ch;k++)
+ 	if(fabs(in[k][l])>angmax)angmax=fabs(in[k][l]);
+       l++;
+     }
+ 
+     for(j=0;j<possible_partitions-1;j++)
+       if(magmax<=info->classmetric1[j] &&
+ 	 angmax<=info->classmetric2[j])
+ 	break;
+ 
+     partword[0][i]=j;
+ 
+   }  
+   
+ #ifdef TRAIN_RESAUX
+   sprintf(buffer,"resaux_%d.vqd",look->train_seq);
+   of=fopen(buffer,"a");
+   for(i=0;i<partvals;i++)
+     fprintf(of,"%ld, ",partword[0][i]);
+   fprintf(of,"\n");
+   fclose(of);
+ #endif
+ 
+   look->frames++;
+ 
+   return(partword);
+ }
+ 
+ static int _01forward(vorbis_block *vb,vorbis_look_residue *vl,
+ 		      float **in,int ch,
+ 		      long **partword,
+ 		      int (*encode)(oggpack_buffer *,float *,int,
+ 				    codebook *,long *)){
+   long i,j,k,s;
+   vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
+   vorbis_info_residue0 *info=look->info;
+ 
+   /* move all this setup out later */
+   int samples_per_partition=info->grouping;
+   int possible_partitions=info->partitions;
+   int partitions_per_word=look->phrasebook->dim;
+   int n=info->end-info->begin;
+ 
+   int partvals=n/samples_per_partition;
+   long resbits[128];
+   long resvals[128];
+ 
+ #ifdef TRAIN_RES
+   for(i=0;i<ch;i++)
+     for(j=info->begin;j<info->end;j++){
+       if(in[i][j]>look->tmax)look->tmax=in[i][j];
+       if(in[i][j]<look->tmin)look->tmin=in[i][j];
+     }
+ #endif
+ 
+   memset(resbits,0,sizeof(resbits));
+   memset(resvals,0,sizeof(resvals));
+   
+   /* we code the partition words for each channel, then the residual
+      words for a partition per channel until we've written all the
+      residual words for that partition word.  Then write the next
+      partition channel words... */
+ 
+   for(s=0;s<look->stages;s++){
+ 
+     for(i=0;i<partvals;){
+ 
+       /* first we encode a partition codeword for each channel */
+       if(s==0){
+ 	for(j=0;j<ch;j++){
+ 	  long val=partword[j][i];
+ 	  for(k=1;k<partitions_per_word;k++){
+ 	    val*=possible_partitions;
+ 	    if(i+k<partvals)
+ 	      val+=partword[j][i+k];
+ 	  }	
+ 
+ 	  /* training hack */
+ 	  if(val<look->phrasebook->entries)
+ 	    look->phrasebits+=vorbis_book_encode(look->phrasebook,val,&vb->opb);
+ #if 0 /*def TRAIN_RES*/
+ 	  else
+ 	    fprintf(stderr,"!");
+ #endif
+ 	
+ 	}
+       }
+       
+       /* now we encode interleaved residual values for the partitions */
+       for(k=0;k<partitions_per_word && i<partvals;k++,i++){
+ 	long offset=i*samples_per_partition+info->begin;
+ 	
+ 	for(j=0;j<ch;j++){
+ 	  if(s==0)resvals[partword[j][i]]+=samples_per_partition;
+ 	  if(info->secondstages[partword[j][i]]&(1<<s)){
+ 	    codebook *statebook=look->partbooks[partword[j][i]][s];
+ 	    if(statebook){
+ 	      int ret;
+ 	      long *accumulator=NULL;
+ 
+ #ifdef TRAIN_RES
+ 	      accumulator=look->training_data[s][partword[j][i]];
+ 	      {
+ 		int l;
+ 		float *samples=in[j]+offset;
+ 		for(l=0;l<samples_per_partition;l++){
+ 		  if(samples[l]<look->training_min[s][partword[j][i]])
+ 		    look->training_min[s][partword[j][i]]=samples[l];
+ 		  if(samples[l]>look->training_max[s][partword[j][i]])
+ 		    look->training_max[s][partword[j][i]]=samples[l];
+ 		}
+ 	      }
+ #endif
+ 	      
+ 	      ret=encode(&vb->opb,in[j]+offset,samples_per_partition,
+ 			 statebook,accumulator);
+ 
+ 	      look->postbits+=ret;
+ 	      resbits[partword[j][i]]+=ret;
+ 	    }
+ 	  }
+ 	}
+       }
+     }
+   }
+ 
+   /*{
+     long total=0;
+     long totalbits=0;
+     fprintf(stderr,"%d :: ",vb->mode);
+     for(k=0;k<possible_partitions;k++){
+       fprintf(stderr,"%ld/%1.2g, ",resvals[k],(float)resbits[k]/resvals[k]);
+       total+=resvals[k];
+       totalbits+=resbits[k];
+       }
+     
+     fprintf(stderr,":: %ld:%1.2g\n",total,(double)totalbits/total);
+     }*/
+   return(0);
+ }
+ 
+ /* a truncated packet here just means 'stop working'; it's not an error */
+ static int _01inverse(vorbis_block *vb,vorbis_look_residue *vl,
+ 		      float **in,int ch,
+ 		      long (*decodepart)(codebook *, float *, 
+ 					 oggpack_buffer *,int)){
+ 
+   long i,j,k,l,s;
+   vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
+   vorbis_info_residue0 *info=look->info;
+ 
+   /* move all this setup out later */
+   int samples_per_partition=info->grouping;
+   int partitions_per_word=look->phrasebook->dim;
+   int n=info->end-info->begin;
+   
+   int partvals=n/samples_per_partition;
+   int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
+   int ***partword=alloca(ch*sizeof(*partword));
+ 
+   for(j=0;j<ch;j++)
+     partword[j]=_vorbis_block_alloc(vb,partwords*sizeof(*partword[j]));
+ 
+   for(s=0;s<look->stages;s++){
+ 
+     /* each loop decodes on partition codeword containing 
+        partitions_pre_word partitions */
+     for(i=0,l=0;i<partvals;l++){
+       if(s==0){
+ 	/* fetch the partition word for each channel */
+ 	for(j=0;j<ch;j++){
+ 	  int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
+ 	  if(temp==-1)goto eopbreak;
+ 	  partword[j][l]=look->decodemap[temp];
+ 	  if(partword[j][l]==NULL)goto errout;
+ 	}
+       }
+       
+       /* now we decode residual values for the partitions */
+       for(k=0;k<partitions_per_word && i<partvals;k++,i++)
+ 	for(j=0;j<ch;j++){
+ 	  long offset=info->begin+i*samples_per_partition;
+ 	  if(info->secondstages[partword[j][l][k]]&(1<<s)){
+ 	    codebook *stagebook=look->partbooks[partword[j][l][k]][s];
+ 	    if(stagebook){
+ 	      if(decodepart(stagebook,in[j]+offset,&vb->opb,
+ 			    samples_per_partition)==-1)goto eopbreak;
+ 	    }
+ 	  }
+ 	}
+     } 
+   }
+   
+  errout:
+  eopbreak:
+   return(0);
+ }
+ 
+ #if 0
+ /* residue 0 and 1 are just slight variants of one another. 0 is
+    interleaved, 1 is not */
+ long **res0_class(vorbis_block *vb,vorbis_look_residue *vl,
+ 		  float **in,int *nonzero,int ch){
+   /* we encode only the nonzero parts of a bundle */
+   int i,used=0;
+   for(i=0;i<ch;i++)
+     if(nonzero[i])
+       in[used++]=in[i];
+   if(used)
+     /*return(_01class(vb,vl,in,used,_interleaved_testhack));*/
+     return(_01class(vb,vl,in,used));
+   else
+     return(0);
+ }
+ 
+ int res0_forward(vorbis_block *vb,vorbis_look_residue *vl,
+ 		 float **in,float **out,int *nonzero,int ch,
+ 		 long **partword){
+   /* we encode only the nonzero parts of a bundle */
+   int i,j,used=0,n=vb->pcmend/2;
+   for(i=0;i<ch;i++)
+     if(nonzero[i]){
+       if(out)
+ 	for(j=0;j<n;j++)
+ 	  out[i][j]+=in[i][j];
+       in[used++]=in[i];
+     }
+   if(used){
+     int ret=_01forward(vb,vl,in,used,partword,
+ 		      _interleaved_encodepart);
+     if(out){
+       used=0;
+       for(i=0;i<ch;i++)
+ 	if(nonzero[i]){
+ 	  for(j=0;j<n;j++)
+ 	    out[i][j]-=in[used][j];
+ 	  used++;
+ 	}
+     }
+     return(ret);
+   }else{
+     return(0);
+   }
+ }
+ #endif
+ 
+ int res0_inverse(vorbis_block *vb,vorbis_look_residue *vl,
+ 		 float **in,int *nonzero,int ch){
+   int i,used=0;
+   for(i=0;i<ch;i++)
+     if(nonzero[i])
+       in[used++]=in[i];
+   if(used)
+     return(_01inverse(vb,vl,in,used,vorbis_book_decodevs_add));
+   else
+     return(0);
+ }
+ 
+ int res1_forward(vorbis_block *vb,vorbis_look_residue *vl,
+ 		 float **in,float **out,int *nonzero,int ch,
+ 		 long **partword){
+   int i,j,used=0,n=vb->pcmend/2;
+   for(i=0;i<ch;i++)
+     if(nonzero[i]){
+       if(out)
+ 	for(j=0;j<n;j++)
+ 	  out[i][j]+=in[i][j];
+       in[used++]=in[i];
+     }
+ 
+   if(used){
+     int ret=_01forward(vb,vl,in,used,partword,_encodepart);
+     if(out){
+       used=0;
+       for(i=0;i<ch;i++)
+ 	if(nonzero[i]){
+ 	  for(j=0;j<n;j++)
+ 	    out[i][j]-=in[used][j];
+ 	  used++;
+ 	}
+     }
+     return(ret);
+   }else{
+     return(0);
+   }
+ }
+ 
+ long **res1_class(vorbis_block *vb,vorbis_look_residue *vl,
+ 		  float **in,int *nonzero,int ch){
+   int i,used=0;
+   for(i=0;i<ch;i++)
+     if(nonzero[i])
+       in[used++]=in[i];
+   if(used)
+     return(_01class(vb,vl,in,used));
+   else
+     return(0);
+ }
+ 
+ int res1_inverse(vorbis_block *vb,vorbis_look_residue *vl,
+ 		 float **in,int *nonzero,int ch){
+   int i,used=0;
+   for(i=0;i<ch;i++)
+     if(nonzero[i])
+       in[used++]=in[i];
+   if(used)
+     return(_01inverse(vb,vl,in,used,vorbis_book_decodev_add));
+   else
+     return(0);
+ }
+ 
+ long **res2_class(vorbis_block *vb,vorbis_look_residue *vl,
+ 		  float **in,int *nonzero,int ch){
+   int i,used=0;
+   for(i=0;i<ch;i++)
+     if(nonzero[i])used++;
+   if(used)
+     return(_2class(vb,vl,in,ch));
+   else
+     return(0);
+ }
+ 
+ /* res2 is slightly more different; all the channels are interleaved
+    into a single vector and encoded. */
+ 
+ int res2_forward(vorbis_block *vb,vorbis_look_residue *vl,
+ 		 float **in,float **out,int *nonzero,int ch,
+ 		 long **partword){
+   long i,j,k,n=vb->pcmend/2,used=0;
+ 
+   /* don't duplicate the code; use a working vector hack for now and
+      reshape ourselves into a single channel res1 */
+   /* ugly; reallocs for each coupling pass :-( */
+   float *work=_vorbis_block_alloc(vb,ch*n*sizeof(*work));
+   for(i=0;i<ch;i++){
+     float *pcm=in[i];
+     if(nonzero[i])used++;
+     for(j=0,k=i;j<n;j++,k+=ch)
+       work[k]=pcm[j];
+   }
+   
+   if(used){
+     int ret=_01forward(vb,vl,&work,1,partword,_encodepart);
+     /* update the sofar vector */
+     if(out){
+       for(i=0;i<ch;i++){
+ 	float *pcm=in[i];
+ 	float *sofar=out[i];
+ 	for(j=0,k=i;j<n;j++,k+=ch)
+ 	  sofar[j]+=pcm[j]-work[k];
+ 	
+       }
+     }
+     return(ret);
+   }else{
+     return(0);
+   }
+ }
+ 
+ /* duplicate code here as speed is somewhat more important */
+ int res2_inverse(vorbis_block *vb,vorbis_look_residue *vl,
+ 		 float **in,int *nonzero,int ch){
+   long i,k,l,s;
+   vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
+   vorbis_info_residue0 *info=look->info;
+ 
+   /* move all this setup out later */
+   int samples_per_partition=info->grouping;
+   int partitions_per_word=look->phrasebook->dim;
+   int n=info->end-info->begin;
+ 
+   int partvals=n/samples_per_partition;
+   int partwords=(partvals+partitions_per_word-1)/partitions_per_word;
+   int **partword=_vorbis_block_alloc(vb,partwords*sizeof(*partword));
+ 
+   for(i=0;i<ch;i++)if(nonzero[i])break;
+   if(i==ch)return(0); /* no nonzero vectors */
+ 
+   for(s=0;s<look->stages;s++){
+     for(i=0,l=0;i<partvals;l++){
+ 
+       if(s==0){
+ 	/* fetch the partition word */
+ 	int temp=vorbis_book_decode(look->phrasebook,&vb->opb);
+ 	if(temp==-1)goto eopbreak;
+ 	partword[l]=look->decodemap[temp];
+ 	if(partword[l]==NULL)goto errout;
+       }
+ 
+       /* now we decode residual values for the partitions */
+       for(k=0;k<partitions_per_word && i<partvals;k++,i++)
+ 	if(info->secondstages[partword[l][k]]&(1<<s)){
+ 	  codebook *stagebook=look->partbooks[partword[l][k]][s];
+ 	  
+ 	  if(stagebook){
+ 	    if(vorbis_book_decodevv_add(stagebook,in,
+ 					i*samples_per_partition+info->begin,ch,
+ 					&vb->opb,samples_per_partition)==-1)
+ 	      goto eopbreak;
+ 	  }
+ 	}
+     } 
+   }
+   
+  errout:
+  eopbreak:
+   return(0);
+ }
+ 
+ 
+ vorbis_func_residue residue0_exportbundle={
+   NULL,
+   &res0_unpack,
+   &res0_look,
+   &res0_free_info,
+   &res0_free_look,
+   NULL,
+   NULL,
+   &res0_inverse
+ };
+ 
+ vorbis_func_residue residue1_exportbundle={
+   &res0_pack,
+   &res0_unpack,
+   &res0_look,
+   &res0_free_info,
+   &res0_free_look,
+   &res1_class,
+   &res1_forward,
+   &res1_inverse
+ };
+ 
+ vorbis_func_residue residue2_exportbundle={
+   &res0_pack,
+   &res0_unpack,
+   &res0_look,
+   &res0_free_info,
+   &res0_free_look,
+   &res2_class,
+   &res2_forward,
+   &res2_inverse
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the XIPHOPHORUS Company http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: channel mapping 0 implementation
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* simplistic, wasteful way of doing this (unique lookup for each
+    mode/submapping); there should be a central repository for
+    identical lookups.  That will require minor work, so I'm putting it
+    off as low priority.
+ 
+    Why a lookup for each backend in a given mode?  Because the
+    blocksize is set by the mode, and low backend lookups may require
+    parameters from other areas of the mode/mapping */
+ 
+ static void mapping0_free_info(vorbis_info_mapping *i){
+   vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)i;
+   if(info){
+     memset(info,0,sizeof(*info));
+     _ogg_free(info);
+   }
+ }
+ 
+ static void mapping0_pack(vorbis_info *vi,vorbis_info_mapping *vm,
+ 			  oggpack_buffer *opb){
+   int i;
+   vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)vm;
+ 
+   /* another 'we meant to do it this way' hack...  up to beta 4, we
+      packed 4 binary zeros here to signify one submapping in use.  We
+      now redefine that to mean four bitflags that indicate use of
+      deeper features; bit0:submappings, bit1:coupling,
+      bit2,3:reserved. This is backward compatable with all actual uses
+      of the beta code. */
+ 
+   if(info->submaps>1){
+     oggpack_write(opb,1,1);
+     oggpack_write(opb,info->submaps-1,4);
+   }else
+     oggpack_write(opb,0,1);
+ 
+   if(info->coupling_steps>0){
+     oggpack_write(opb,1,1);
+     oggpack_write(opb,info->coupling_steps-1,8);
+     
+     for(i=0;i<info->coupling_steps;i++){
+       oggpack_write(opb,info->coupling_mag[i],ilog(vi->channels));
+       oggpack_write(opb,info->coupling_ang[i],ilog(vi->channels));
+     }
+   }else
+     oggpack_write(opb,0,1);
+   
+   oggpack_write(opb,0,2); /* 2,3:reserved */
+ 
+   /* we don't write the channel submappings if we only have one... */
+   if(info->submaps>1){
+     for(i=0;i<vi->channels;i++)
+       oggpack_write(opb,info->chmuxlist[i],4);
+   }
+   for(i=0;i<info->submaps;i++){
+     oggpack_write(opb,0,8); /* time submap unused */
+     oggpack_write(opb,info->floorsubmap[i],8);
+     oggpack_write(opb,info->residuesubmap[i],8);
+   }
+ }
+ 
+ /* also responsible for range checking */
+ static vorbis_info_mapping *mapping0_unpack(vorbis_info *vi,oggpack_buffer *opb){
+   int i;
+   vorbis_info_mapping0 *info=_ogg_calloc(1,sizeof(*info));
+   codec_setup_info     *ci=vi->codec_setup;
+   memset(info,0,sizeof(*info));
+ 
+   if(oggpack_read(opb,1))
+     info->submaps=oggpack_read(opb,4)+1;
+   else
+     info->submaps=1;
+ 
+   if(oggpack_read(opb,1)){
+     info->coupling_steps=oggpack_read(opb,8)+1;
+ 
+     for(i=0;i<info->coupling_steps;i++){
+       int testM=info->coupling_mag[i]=oggpack_read(opb,ilog(vi->channels));
+       int testA=info->coupling_ang[i]=oggpack_read(opb,ilog(vi->channels));
+ 
+       if(testM<0 || 
+ 	 testA<0 || 
+ 	 testM==testA || 
+ 	 testM>=vi->channels ||
+ 	 testA>=vi->channels) goto err_out;
+     }
+ 
+   }
+ 
+   if(oggpack_read(opb,2)>0)goto err_out; /* 2,3:reserved */
+     
+   if(info->submaps>1){
+     for(i=0;i<vi->channels;i++){
+       info->chmuxlist[i]=oggpack_read(opb,4);
+       if(info->chmuxlist[i]>=info->submaps)goto err_out;
+     }
+   }
+   for(i=0;i<info->submaps;i++){
+     oggpack_read(opb,8); /* time submap unused */
+     info->floorsubmap[i]=oggpack_read(opb,8);
+     if(info->floorsubmap[i]>=ci->floors)goto err_out;
+     info->residuesubmap[i]=oggpack_read(opb,8);
+     if(info->residuesubmap[i]>=ci->residues)goto err_out;
+   }
+ 
+   return info;
+ 
+  err_out:
+   mapping0_free_info(info);
+   return(NULL);
+ }
+ 
+ #if 0
+ static long seq=0;
+ static ogg_int64_t total=0;
+ static float FLOOR1_fromdB_LOOKUP[256]={
+   1.0649863e-07F, 1.1341951e-07F, 1.2079015e-07F, 1.2863978e-07F, 
+   1.3699951e-07F, 1.4590251e-07F, 1.5538408e-07F, 1.6548181e-07F, 
+   1.7623575e-07F, 1.8768855e-07F, 1.9988561e-07F, 2.128753e-07F, 
+   2.2670913e-07F, 2.4144197e-07F, 2.5713223e-07F, 2.7384213e-07F, 
+   2.9163793e-07F, 3.1059021e-07F, 3.3077411e-07F, 3.5226968e-07F, 
+   3.7516214e-07F, 3.9954229e-07F, 4.2550680e-07F, 4.5315863e-07F, 
+   4.8260743e-07F, 5.1396998e-07F, 5.4737065e-07F, 5.8294187e-07F, 
+   6.2082472e-07F, 6.6116941e-07F, 7.0413592e-07F, 7.4989464e-07F, 
+   7.9862701e-07F, 8.5052630e-07F, 9.0579828e-07F, 9.6466216e-07F, 
+   1.0273513e-06F, 1.0941144e-06F, 1.1652161e-06F, 1.2409384e-06F, 
+   1.3215816e-06F, 1.4074654e-06F, 1.4989305e-06F, 1.5963394e-06F, 
+   1.7000785e-06F, 1.8105592e-06F, 1.9282195e-06F, 2.0535261e-06F, 
+   2.1869758e-06F, 2.3290978e-06F, 2.4804557e-06F, 2.6416497e-06F, 
+   2.8133190e-06F, 2.9961443e-06F, 3.1908506e-06F, 3.3982101e-06F, 
+   3.6190449e-06F, 3.8542308e-06F, 4.1047004e-06F, 4.3714470e-06F, 
+   4.6555282e-06F, 4.9580707e-06F, 5.2802740e-06F, 5.6234160e-06F, 
+   5.9888572e-06F, 6.3780469e-06F, 6.7925283e-06F, 7.2339451e-06F, 
+   7.7040476e-06F, 8.2047000e-06F, 8.7378876e-06F, 9.3057248e-06F, 
+   9.9104632e-06F, 1.0554501e-05F, 1.1240392e-05F, 1.1970856e-05F, 
+   1.2748789e-05F, 1.3577278e-05F, 1.4459606e-05F, 1.5399272e-05F, 
+   1.6400004e-05F, 1.7465768e-05F, 1.8600792e-05F, 1.9809576e-05F, 
+   2.1096914e-05F, 2.2467911e-05F, 2.3928002e-05F, 2.5482978e-05F, 
+   2.7139006e-05F, 2.8902651e-05F, 3.0780908e-05F, 3.2781225e-05F, 
+   3.4911534e-05F, 3.7180282e-05F, 3.9596466e-05F, 4.2169667e-05F, 
+   4.4910090e-05F, 4.7828601e-05F, 5.0936773e-05F, 5.4246931e-05F, 
+   5.7772202e-05F, 6.1526565e-05F, 6.5524908e-05F, 6.9783085e-05F, 
+   7.4317983e-05F, 7.9147585e-05F, 8.4291040e-05F, 8.9768747e-05F, 
+   9.5602426e-05F, 0.00010181521F, 0.00010843174F, 0.00011547824F, 
+   0.00012298267F, 0.00013097477F, 0.00013948625F, 0.00014855085F, 
+   0.00015820453F, 0.00016848555F, 0.00017943469F, 0.00019109536F, 
+   0.00020351382F, 0.00021673929F, 0.00023082423F, 0.00024582449F, 
+   0.00026179955F, 0.00027881276F, 0.00029693158F, 0.00031622787F, 
+   0.00033677814F, 0.00035866388F, 0.00038197188F, 0.00040679456F, 
+   0.00043323036F, 0.00046138411F, 0.00049136745F, 0.00052329927F, 
+   0.00055730621F, 0.00059352311F, 0.00063209358F, 0.00067317058F, 
+   0.00071691700F, 0.00076350630F, 0.00081312324F, 0.00086596457F, 
+   0.00092223983F, 0.00098217216F, 0.0010459992F, 0.0011139742F, 
+   0.0011863665F, 0.0012634633F, 0.0013455702F, 0.0014330129F, 
+   0.0015261382F, 0.0016253153F, 0.0017309374F, 0.0018434235F, 
+   0.0019632195F, 0.0020908006F, 0.0022266726F, 0.0023713743F, 
+   0.0025254795F, 0.0026895994F, 0.0028643847F, 0.0030505286F, 
+   0.0032487691F, 0.0034598925F, 0.0036847358F, 0.0039241906F, 
+   0.0041792066F, 0.0044507950F, 0.0047400328F, 0.0050480668F, 
+   0.0053761186F, 0.0057254891F, 0.0060975636F, 0.0064938176F, 
+   0.0069158225F, 0.0073652516F, 0.0078438871F, 0.0083536271F, 
+   0.0088964928F, 0.009474637F, 0.010090352F, 0.010746080F, 
+   0.011444421F, 0.012188144F, 0.012980198F, 0.013823725F, 
+   0.014722068F, 0.015678791F, 0.016697687F, 0.017782797F, 
+   0.018938423F, 0.020169149F, 0.021479854F, 0.022875735F, 
+   0.024362330F, 0.025945531F, 0.027631618F, 0.029427276F, 
+   0.031339626F, 0.033376252F, 0.035545228F, 0.037855157F, 
+   0.040315199F, 0.042935108F, 0.045725273F, 0.048696758F, 
+   0.051861348F, 0.055231591F, 0.058820850F, 0.062643361F, 
+   0.066714279F, 0.071049749F, 0.075666962F, 0.080584227F, 
+   0.085821044F, 0.091398179F, 0.097337747F, 0.10366330F, 
+   0.11039993F, 0.11757434F, 0.12521498F, 0.13335215F, 
+   0.14201813F, 0.15124727F, 0.16107617F, 0.17154380F, 
+   0.18269168F, 0.19456402F, 0.20720788F, 0.22067342F, 
+   0.23501402F, 0.25028656F, 0.26655159F, 0.28387361F, 
+   0.30232132F, 0.32196786F, 0.34289114F, 0.36517414F, 
+   0.38890521F, 0.41417847F, 0.44109412F, 0.46975890F, 
+   0.50028648F, 0.53279791F, 0.56742212F, 0.60429640F, 
+   0.64356699F, 0.68538959F, 0.72993007F, 0.77736504F, 
+   0.82788260F, 0.88168307F, 0.9389798F, 1.F, 
+ };
+ 
+ #endif 
+ 
+ void oggpack_writealign(oggpack_buffer *b);
+ 
+ static int mapping0_forward(vorbis_block *vb){
+   vorbis_dsp_state      *vd=vb->vd;
+   vorbis_info           *vi=vd->vi;
+   codec_setup_info      *ci=vi->codec_setup;
+   private_state         *b=vb->vd->backend_state;
+   vorbis_block_internal *vbi=(vorbis_block_internal *)vb->internal;
+   int                    n=vb->pcmend;
+   int i,j,k;
+ 
+   int    *nonzero    = alloca(sizeof(*nonzero)*vi->channels);
+   float  **gmdct     = _vorbis_block_alloc(vb,vi->channels*sizeof(*gmdct));
+   int    **ilogmaskch= _vorbis_block_alloc(vb,vi->channels*sizeof(*ilogmaskch));
+   int ***floor_posts = _vorbis_block_alloc(vb,vi->channels*sizeof(*floor_posts));
+   
+   float global_ampmax=vbi->ampmax;
+   float *local_ampmax=alloca(sizeof(*local_ampmax)*vi->channels);
+   int blocktype=vbi->blocktype;
+ 
+   int modenumber=vb->W;
+   vorbis_info_mapping0 *info=ci->map_param[modenumber];
+   vorbis_look_psy *psy_look=
+     b->psy+blocktype+(vb->W?2:0);
+ 
+   vb->mode=modenumber;
+ 
+   for(i=0;i<vi->channels;i++){
+     float scale=4.f/n;
+     float scale_dB;
+ 
+     float *pcm     =vb->pcm[i]; 
+     float *logfft  =pcm;
+ 
+     gmdct[i]=_vorbis_block_alloc(vb,n/2*sizeof(**gmdct));
+ 
+     scale_dB=todB(&scale);
+ 
+ #if 0
+     if(vi->channels==2)
+       if(i==0)
+ 	_analysis_output("pcmL",seq,pcm,n,0,0,total-n/2);
+       else
+ 	_analysis_output("pcmR",seq,pcm,n,0,0,total-n/2);
+ #endif
+   
+     /* window the PCM data */
+     _vorbis_apply_window(pcm,b->window,ci->blocksizes,vb->lW,vb->W,vb->nW);
+ 
+ #if 0
+     if(vi->channels==2)
+       if(i==0)
+ 	_analysis_output("windowedL",seq,pcm,n,0,0,total-n/2);
+       else
+ 	_analysis_output("windowedR",seq,pcm,n,0,0,total-n/2);
+ #endif
+ 
+     /* transform the PCM data */
+     /* only MDCT right now.... */
+     mdct_forward(b->transform[vb->W][0],pcm,gmdct[i]);
+     
+     /* FFT yields more accurate tonal estimation (not phase sensitive) */
+     drft_forward(&b->fft_look[vb->W],pcm);
+     logfft[0]=scale_dB+todB(pcm);
+     local_ampmax[i]=logfft[0];
+     for(j=1;j<n-1;j+=2){
+       float temp=pcm[j]*pcm[j]+pcm[j+1]*pcm[j+1];
+       temp=logfft[(j+1)>>1]=scale_dB+.5f*todB(&temp);
+       if(temp>local_ampmax[i])local_ampmax[i]=temp;
+     }
+ 
+     if(local_ampmax[i]>0.f)local_ampmax[i]=0.f;
+     if(local_ampmax[i]>global_ampmax)global_ampmax=local_ampmax[i];
+ 
+ #if 0
+     if(vi->channels==2)
+       if(i==0)
+ 	_analysis_output("fftL",seq,logfft,n/2,1,0,0);
+       else
+ 	_analysis_output("fftR",seq,logfft,n/2,1,0,0);
+ #endif
+ 
+   }
+   
+   {
+     float   *noise        = _vorbis_block_alloc(vb,n/2*sizeof(*noise));
+     float   *tone         = _vorbis_block_alloc(vb,n/2*sizeof(*tone));
+     
+     for(i=0;i<vi->channels;i++){
+       /* the encoder setup assumes that all the modes used by any
+ 	 specific bitrate tweaking use the same floor */
+       
+       int submap=info->chmuxlist[i];
+       
+       /* the following makes things clearer to *me* anyway */
+       float *mdct    =gmdct[i];
+       float *logfft  =vb->pcm[i];
+       
+       float *logmdct =logfft+n/2;
+       float *logmask =logfft;
+ 
+       vb->mode=modenumber;
+ 
+       floor_posts[i]=_vorbis_block_alloc(vb,PACKETBLOBS*sizeof(**floor_posts));
+       memset(floor_posts[i],0,sizeof(**floor_posts)*PACKETBLOBS);
+       
+       for(j=0;j<n/2;j++)
+ 	logmdct[j]=todB(mdct+j);
+ 
+ #if 0
+       if(vi->channels==2){
+ 	if(i==0)
+ 	  _analysis_output("mdctL",seq,logmdct,n/2,1,0,0);
+ 	else
+ 	  _analysis_output("mdctR",seq,logmdct,n/2,1,0,0);
+       }else{
+ 	_analysis_output("mdct",seq,logmdct,n/2,1,0,0);
+       }
+ #endif 
+       
+       /* first step; noise masking.  Not only does 'noise masking'
+          give us curves from which we can decide how much resolution
+          to give noise parts of the spectrum, it also implicitly hands
+          us a tonality estimate (the larger the value in the
+          'noise_depth' vector, the more tonal that area is) */
+ 
+       _vp_noisemask(psy_look,
+ 		    logmdct,
+ 		    noise); /* noise does not have by-frequency offset
+                                bias applied yet */
+ #if 0
+       if(vi->channels==2){
+ 	if(i==0)
+ 	  _analysis_output("noiseL",seq,noise,n/2,1,0,0);
+ 	else
+ 	  _analysis_output("noiseR",seq,noise,n/2,1,0,0);
+       }
+ #endif
+ 
+       /* second step: 'all the other crap'; all the stuff that isn't
+          computed/fit for bitrate management goes in the second psy
+          vector.  This includes tone masking, peak limiting and ATH */
+ 
+       _vp_tonemask(psy_look,
+ 		   logfft,
+ 		   tone,
+ 		   global_ampmax,
+ 		   local_ampmax[i]);
+ 
+ #if 0
+       if(vi->channels==2){
+ 	if(i==0)
+ 	  _analysis_output("toneL",seq,tone,n/2,1,0,0);
+ 	else
+ 	  _analysis_output("toneR",seq,tone,n/2,1,0,0);
+       }
+ #endif
+ 
+       /* third step; we offset the noise vectors, overlay tone
+ 	 masking.  We then do a floor1-specific line fit.  If we're
+ 	 performing bitrate management, the line fit is performed
+ 	 multiple times for up/down tweakage on demand. */
+       
+       _vp_offset_and_mix(psy_look,
+ 			 noise,
+ 			 tone,
+ 			 1,
+ 			 logmask);
+ 
+ #if 0
+       if(vi->channels==2){
+ 	if(i==0)
+ 	  _analysis_output("mask1L",seq,logmask,n/2,1,0,0);
+ 	else
+ 	  _analysis_output("mask1R",seq,logmask,n/2,1,0,0);
+       }
+ #endif
+ 
+       /* this algorithm is hardwired to floor 1 for now; abort out if
+          we're *not* floor1.  This won't happen unless someone has
+          broken the encode setup lib.  Guard it anyway. */
+       if(ci->floor_type[info->floorsubmap[submap]]!=1)return(-1);
+ 
+       floor_posts[i][PACKETBLOBS/2]=
+ 	floor1_fit(vb,b->flr[info->floorsubmap[submap]],
+ 		   logmdct,
+ 		   logmask);
+       
+       /* are we managing bitrate?  If so, perform two more fits for
+          later rate tweaking (fits represent hi/lo) */
+       if(vorbis_bitrate_managed(vb) && floor_posts[i][PACKETBLOBS/2]){
+ 	/* higher rate by way of lower noise curve */
+ 
+ 	_vp_offset_and_mix(psy_look,
+ 			   noise,
+ 			   tone,
+ 			   2,
+ 			   logmask);
+ 
+ #if 0
+ 	if(vi->channels==2){
+ 	  if(i==0)
+ 	    _analysis_output("mask2L",seq,logmask,n/2,1,0,0);
+ 	  else
+ 	    _analysis_output("mask2R",seq,logmask,n/2,1,0,0);
+ 	}
+ #endif
+ 	
+ 	floor_posts[i][PACKETBLOBS-1]=
+ 	  floor1_fit(vb,b->flr[info->floorsubmap[submap]],
+ 		     logmdct,
+ 		     logmask);
+       
+ 	/* lower rate by way of higher noise curve */
+ 	_vp_offset_and_mix(psy_look,
+ 			   noise,
+ 			   tone,
+ 			   0,
+ 			   logmask);
+ 
+ #if 0
+ 	if(vi->channels==2)
+ 	  if(i==0)
+ 	    _analysis_output("mask0L",seq,logmask,n/2,1,0,0);
+ 	  else
+ 	    _analysis_output("mask0R",seq,logmask,n/2,1,0,0);
+ #endif
+ 
+ 	floor_posts[i][0]=
+ 	  floor1_fit(vb,b->flr[info->floorsubmap[submap]],
+ 		     logmdct,
+ 		     logmask);
+ 	
+ 	/* we also interpolate a range of intermediate curves for
+            intermediate rates */
+ 	for(k=1;k<PACKETBLOBS/2;k++)
+ 	  floor_posts[i][k]=
+ 	    floor1_interpolate_fit(vb,b->flr[info->floorsubmap[submap]],
+ 				   floor_posts[i][0],
+ 				   floor_posts[i][PACKETBLOBS/2],
+ 				   k*65536/(PACKETBLOBS/2));
+ 	for(k=PACKETBLOBS/2+1;k<PACKETBLOBS-1;k++)
+ 	  floor_posts[i][k]=
+ 	    floor1_interpolate_fit(vb,b->flr[info->floorsubmap[submap]],
+ 				   floor_posts[i][PACKETBLOBS/2],
+ 				   floor_posts[i][PACKETBLOBS-1],
+ 				   (k-PACKETBLOBS/2)*65536/(PACKETBLOBS/2));
+       }
+     }
+   }
+   vbi->ampmax=global_ampmax;
+ 
+   /*
+     the next phases are performed once for vbr-only and PACKETBLOB
+     times for bitrate managed modes.
+     
+     1) encode actual mode being used
+     2) encode the floor for each channel, compute coded mask curve/res
+     3) normalize and couple.
+     4) encode residue
+     5) save packet bytes to the packetblob vector
+     
+   */
+ 
+   /* iterate over the many masking curve fits we've created */
+ 
+   {
+     float **res_bundle=alloca(sizeof(*res_bundle)*vi->channels);
+     float **couple_bundle=alloca(sizeof(*couple_bundle)*vi->channels);
+     int *zerobundle=alloca(sizeof(*zerobundle)*vi->channels);
+     int **sortindex=alloca(sizeof(*sortindex)*vi->channels);
+     float **mag_memo;
+     int **mag_sort;
+ 
+     if(info->coupling_steps){
+       mag_memo=_vp_quantize_couple_memo(vb,
+ 					&ci->psy_g_param,
+ 					psy_look,
+ 					info,
+ 					gmdct);    
+       
+       mag_sort=_vp_quantize_couple_sort(vb,
+ 					psy_look,
+ 					info,
+ 					mag_memo);    
+     }
+ 
+     memset(sortindex,0,sizeof(*sortindex)*vi->channels);
+     if(psy_look->vi->normal_channel_p){
+       for(i=0;i<vi->channels;i++){
+ 	float *mdct    =gmdct[i];
+ 	sortindex[i]=alloca(sizeof(**sortindex)*n/2);
+ 	_vp_noise_normalize_sort(psy_look,mdct,sortindex[i]);
+       }
+     }
+ 
+     for(k=(vorbis_bitrate_managed(vb)?0:PACKETBLOBS/2);
+ 	k<=(vorbis_bitrate_managed(vb)?PACKETBLOBS-1:PACKETBLOBS/2);
+ 	k++){
+ 
+       /* start out our new packet blob with packet type and mode */
+       /* Encode the packet type */
+       oggpack_write(&vb->opb,0,1);
+       /* Encode the modenumber */
+       /* Encode frame mode, pre,post windowsize, then dispatch */
+       oggpack_write(&vb->opb,modenumber,b->modebits);
+       if(vb->W){
+ 	oggpack_write(&vb->opb,vb->lW,1);
+ 	oggpack_write(&vb->opb,vb->nW,1);
+       }
+ 
+       /* encode floor, compute masking curve, sep out residue */
+       for(i=0;i<vi->channels;i++){
+ 	int submap=info->chmuxlist[i];
+ 	float *mdct    =gmdct[i];
+ 	float *res     =vb->pcm[i];
+ 	int   *ilogmask=ilogmaskch[i]=
+ 	  _vorbis_block_alloc(vb,n/2*sizeof(**gmdct));
+       
+ 	nonzero[i]=floor1_encode(vb,b->flr[info->floorsubmap[submap]],
+ 				 floor_posts[i][k],
+ 				 ilogmask);
+ #if 0
+ 	{
+ 	  char buf[80];
+ 	  sprintf(buf,"maskI%c%d",i?'R':'L',k);
+ 	  float work[n/2];
+ 	  for(j=0;j<n/2;j++)
+ 	    work[j]=FLOOR1_fromdB_LOOKUP[ilogmask[j]];
+ 	  _analysis_output(buf,seq,work,n/2,1,1,0);
+ 	}
+ #endif
+ 	_vp_remove_floor(psy_look,
+ 			 mdct,
+ 			 ilogmask,
+ 			 res,
+ 			 ci->psy_g_param.sliding_lowpass[vb->W][k]);
+ 
+ 	_vp_noise_normalize(psy_look,res,res+n/2,sortindex[i]);
+ 
+ 	
+ #if 0
+ 	{
+ 	  char buf[80];
+ 	  float work[n/2];
+ 	  for(j=0;j<n/2;j++)
+ 	    work[j]=FLOOR1_fromdB_LOOKUP[ilogmask[j]]*(res+n/2)[j];
+ 	  sprintf(buf,"resI%c%d",i?'R':'L',k);
+ 	  _analysis_output(buf,seq,work,n/2,1,1,0);
+ 
+ 	}
+ #endif
+       }
+       
+       /* our iteration is now based on masking curve, not prequant and
+ 	 coupling.  Only one prequant/coupling step */
+       
+       /* quantize/couple */
+       /* incomplete implementation that assumes the tree is all depth
+          one, or no tree at all */
+       if(info->coupling_steps){
+ 	_vp_couple(k,
+ 		   &ci->psy_g_param,
+ 		   psy_look,
+ 		   info,
+ 		   vb->pcm,
+ 		   mag_memo,
+ 		   mag_sort,
+ 		   ilogmaskch,
+ 		   nonzero,
+ 		   ci->psy_g_param.sliding_lowpass[vb->W][k]);
+       }
+       
+       /* classify and encode by submap */
+       for(i=0;i<info->submaps;i++){
+ 	int ch_in_bundle=0;
+ 	long **classifications;
+ 	int resnum=info->residuesubmap[i];
+ 
+ 	for(j=0;j<vi->channels;j++){
+ 	  if(info->chmuxlist[j]==i){
+ 	    zerobundle[ch_in_bundle]=0;
+ 	    if(nonzero[j])zerobundle[ch_in_bundle]=1;
+ 	    res_bundle[ch_in_bundle]=vb->pcm[j];
+ 	    couple_bundle[ch_in_bundle++]=vb->pcm[j]+n/2;
+ 	  }
+ 	}
+ 	
+ 	classifications=_residue_P[ci->residue_type[resnum]]->
+ 	  class(vb,b->residue[resnum],couple_bundle,zerobundle,ch_in_bundle);
+ 	
+ 	_residue_P[ci->residue_type[resnum]]->
+ 	  forward(vb,b->residue[resnum],
+ 		  couple_bundle,NULL,zerobundle,ch_in_bundle,classifications);
+       }
+       
+       /* ok, done encoding.  Mark this protopacket and prepare next. */
+       oggpack_writealign(&vb->opb);
+       vbi->packetblob_markers[k]=oggpack_bytes(&vb->opb);
+       
+     }
+     
+   }
+ 
+ #if 0
+   seq++;
+   total+=ci->blocksizes[vb->W]/4+ci->blocksizes[vb->nW]/4;
+ #endif
+   return(0);
+ }
+ 
+ static int mapping0_inverse(vorbis_block *vb,vorbis_info_mapping *l){
+   vorbis_dsp_state     *vd=vb->vd;
+   vorbis_info          *vi=vd->vi;
+   codec_setup_info     *ci=vi->codec_setup;
+   private_state        *b=vd->backend_state;
+   vorbis_info_mapping0 *info=(vorbis_info_mapping0 *)l;
+ 
+   int                   i,j;
+   long                  n=vb->pcmend=ci->blocksizes[vb->W];
+ 
+   float **pcmbundle=alloca(sizeof(*pcmbundle)*vi->channels);
+   int    *zerobundle=alloca(sizeof(*zerobundle)*vi->channels);
+ 
+   int   *nonzero  =alloca(sizeof(*nonzero)*vi->channels);
+   void **floormemo=alloca(sizeof(*floormemo)*vi->channels);
+   
+   /* recover the spectral envelope; store it in the PCM vector for now */
+   for(i=0;i<vi->channels;i++){
+     int submap=info->chmuxlist[i];
+     floormemo[i]=_floor_P[ci->floor_type[info->floorsubmap[submap]]]->
+       inverse1(vb,b->flr[info->floorsubmap[submap]]);
+     if(floormemo[i])
+       nonzero[i]=1;
+     else
+       nonzero[i]=0;      
+     memset(vb->pcm[i],0,sizeof(*vb->pcm[i])*n/2);
+   }
+ 
+   /* channel coupling can 'dirty' the nonzero listing */
+   for(i=0;i<info->coupling_steps;i++){
+     if(nonzero[info->coupling_mag[i]] ||
+        nonzero[info->coupling_ang[i]]){
+       nonzero[info->coupling_mag[i]]=1; 
+       nonzero[info->coupling_ang[i]]=1; 
+     }
+   }
+ 
+   /* recover the residue into our working vectors */
+   for(i=0;i<info->submaps;i++){
+     int ch_in_bundle=0;
+     for(j=0;j<vi->channels;j++){
+       if(info->chmuxlist[j]==i){
+ 	if(nonzero[j])
+ 	  zerobundle[ch_in_bundle]=1;
+ 	else
+ 	  zerobundle[ch_in_bundle]=0;
+ 	pcmbundle[ch_in_bundle++]=vb->pcm[j];
+       }
+     }
+ 
+     _residue_P[ci->residue_type[info->residuesubmap[i]]]->
+       inverse(vb,b->residue[info->residuesubmap[i]],
+ 	      pcmbundle,zerobundle,ch_in_bundle);
+   }
+ 
+   /* channel coupling */
+   for(i=info->coupling_steps-1;i>=0;i--){
+     float *pcmM=vb->pcm[info->coupling_mag[i]];
+     float *pcmA=vb->pcm[info->coupling_ang[i]];
+ 
+     for(j=0;j<n/2;j++){
+       float mag=pcmM[j];
+       float ang=pcmA[j];
+ 
+       if(mag>0)
+ 	if(ang>0){
+ 	  pcmM[j]=mag;
+ 	  pcmA[j]=mag-ang;
+ 	}else{
+ 	  pcmA[j]=mag;
+ 	  pcmM[j]=mag+ang;
+ 	}
+       else
+ 	if(ang>0){
+ 	  pcmM[j]=mag;
+ 	  pcmA[j]=mag+ang;
+ 	}else{
+ 	  pcmA[j]=mag;
+ 	  pcmM[j]=mag-ang;
+ 	}
+     }
+   }
+ 
+   /* compute and apply spectral envelope */
+   for(i=0;i<vi->channels;i++){
+     float *pcm=vb->pcm[i];
+     int submap=info->chmuxlist[i];
+     _floor_P[ci->floor_type[info->floorsubmap[submap]]]->
+       inverse2(vb,b->flr[info->floorsubmap[submap]],
+ 	       floormemo[i],pcm);
+   }
+ 
+   /* transform the PCM data; takes PCM vector, vb; modifies PCM vector */
+   /* only MDCT right now.... */
+   for(i=0;i<vi->channels;i++){
+     float *pcm=vb->pcm[i];
+     mdct_backward(b->transform[vb->W][0],pcm,pcm);
+   }
+ 
+   /* all done! */
+   return(0);
+ }
+ 
+ /* export hooks */
+ vorbis_func_mapping mapping0_exportbundle={
+   &mapping0_pack,
+   &mapping0_unpack,
+   &mapping0_free_info,
+   &mapping0_forward,
+   &mapping0_inverse
+ };
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the Xiph.Org Foundation http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+   function: packing variable sized words into an octet stream
+   last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  ********************************************************************/
+ 
+ /* We're 'LSb' endian; if we write a word but read individual bits,
+    then we'll read the lsb first */
+ 
+ 
+ #define BUFFER_INCREMENT 256
+ 
+ static unsigned long mask[]=
+ {0x00000000,0x00000001,0x00000003,0x00000007,0x0000000f,
+  0x0000001f,0x0000003f,0x0000007f,0x000000ff,0x000001ff,
+  0x000003ff,0x000007ff,0x00000fff,0x00001fff,0x00003fff,
+  0x00007fff,0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff,
+  0x000fffff,0x001fffff,0x003fffff,0x007fffff,0x00ffffff,
+  0x01ffffff,0x03ffffff,0x07ffffff,0x0fffffff,0x1fffffff,
+  0x3fffffff,0x7fffffff,0xffffffff };
+ 
+ static unsigned int mask8B[]=
+ {0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
+ 
+ void oggpack_writeinit(oggpack_buffer *b){
+   memset(b,0,sizeof(*b));
+   b->ptr=b->buffer=_ogg_malloc(BUFFER_INCREMENT);
+   b->buffer[0]='\0';
+   b->storage=BUFFER_INCREMENT;
+ }
+ 
+ void oggpackB_writeinit(oggpack_buffer *b){
+   oggpack_writeinit(b);
+ }
+ 
+ void oggpack_writetrunc(oggpack_buffer *b,long bits){
+   long bytes=bits>>3;
+   bits-=bytes*8;
+   b->ptr=b->buffer+bytes;
+   b->endbit=bits;
+   b->endbyte=bytes;
+   *b->ptr&=mask[bits];
+ }
+ 
+ void oggpackB_writetrunc(oggpack_buffer *b,long bits){
+   long bytes=bits>>3;
+   bits-=bytes*8;
+   b->ptr=b->buffer+bytes;
+   b->endbit=bits;
+   b->endbyte=bytes;
+   *b->ptr&=mask8B[bits];
+ }
+ 
+ /* Takes only up to 32 bits. */
+ void oggpack_write(oggpack_buffer *b,unsigned long value,int bits){
+   if(b->endbyte+4>=b->storage){
+     b->buffer=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
+     b->storage+=BUFFER_INCREMENT;
+     b->ptr=b->buffer+b->endbyte;
+   }
+ 
+   value&=mask[bits]; 
+   bits+=b->endbit;
+ 
+   b->ptr[0]|=value<<b->endbit;  
+   
+   if(bits>=8){
+     b->ptr[1]=value>>(8-b->endbit);  
+     if(bits>=16){
+       b->ptr[2]=value>>(16-b->endbit);  
+       if(bits>=24){
+ 	b->ptr[3]=value>>(24-b->endbit);  
+ 	if(bits>=32){
+ 	  if(b->endbit)
+ 	    b->ptr[4]=value>>(32-b->endbit);
+ 	  else
+ 	    b->ptr[4]=0;
+ 	}
+       }
+     }
+   }
+ 
+   b->endbyte+=bits/8;
+   b->ptr+=bits/8;
+   b->endbit=bits&7;
+ }
+ 
+ /* Takes only up to 32 bits. */
+ void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits){
+   if(b->endbyte+4>=b->storage){
+     b->buffer=_ogg_realloc(b->buffer,b->storage+BUFFER_INCREMENT);
+     b->storage+=BUFFER_INCREMENT;
+     b->ptr=b->buffer+b->endbyte;
+   }
+ 
+   value=(value&mask[bits])<<(32-bits); 
+   bits+=b->endbit;
+ 
+   b->ptr[0]|=value>>(24+b->endbit);  
+   
+   if(bits>=8){
+     b->ptr[1]=value>>(16+b->endbit);  
+     if(bits>=16){
+       b->ptr[2]=value>>(8+b->endbit);  
+       if(bits>=24){
+ 	b->ptr[3]=value>>(b->endbit);  
+ 	if(bits>=32){
+ 	  if(b->endbit)
+ 	    b->ptr[4]=value<<(8-b->endbit);
+ 	  else
+ 	    b->ptr[4]=0;
+ 	}
+       }
+     }
+   }
+ 
+   b->endbyte+=bits/8;
+   b->ptr+=bits/8;
+   b->endbit=bits&7;
+ }
+ 
+ void oggpack_writealign(oggpack_buffer *b){
+   int bits=8-b->endbit;
+   if(bits<8)
+     oggpack_write(b,0,bits);
+ }
+ 
+ void oggpackB_writealign(oggpack_buffer *b){
+   int bits=8-b->endbit;
+   if(bits<8)
+     oggpackB_write(b,0,bits);
+ }
+ 
+ static void oggpack_writecopy_helper(oggpack_buffer *b,
+ 				     void *source,
+ 				     long bits,
+ 				     void (*w)(oggpack_buffer *,
+ 					       unsigned long,
+ 					       int),
+ 				     int msb){
+   unsigned char *ptr=(unsigned char *)source;
+ 
+   long bytes=bits/8;
+   bits-=bytes*8;
+ 
+   if(b->endbit){
+     int i;
+     /* unaligned copy.  Do it the hard way. */
+     for(i=0;i<bytes;i++)
+       w(b,(unsigned long)(ptr[i]),8);    
+   }else{
+     /* aligned block copy */
+     if(b->endbyte+bytes+1>=b->storage){
+       b->storage=b->endbyte+bytes+BUFFER_INCREMENT;
+       b->buffer=_ogg_realloc(b->buffer,b->storage);
+       b->ptr=b->buffer+b->endbyte;
+     }
+ 
+     memmove(b->ptr,source,bytes);
+     b->ptr+=bytes;
+     b->buffer+=bytes;
+     *b->ptr=0;
+ 
+   }
+   if(bits){
+     if(msb)
+       w(b,(unsigned long)(ptr[bytes]>>(8-bits)),bits);    
+     else
+       w(b,(unsigned long)(ptr[bytes]),bits);    
+   }
+ }
+ 
+ void oggpack_writecopy(oggpack_buffer *b,void *source,long bits){
+   oggpack_writecopy_helper(b,source,bits,oggpack_write,0);
+ }
+ 
+ void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits){
+   oggpack_writecopy_helper(b,source,bits,oggpackB_write,1);
+ }
+ 
+ void oggpack_reset(oggpack_buffer *b){
+   b->ptr=b->buffer;
+   b->buffer[0]=0;
+   b->endbit=b->endbyte=0;
+ }
+ 
+ void oggpackB_reset(oggpack_buffer *b){
+   oggpack_reset(b);
+ }
+ 
+ void oggpack_writeclear(oggpack_buffer *b){
+   _ogg_free(b->buffer);
+   memset(b,0,sizeof(*b));
+ }
+ 
+ void oggpackB_writeclear(oggpack_buffer *b){
+   oggpack_writeclear(b);
+ }
+ 
+ void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
+   memset(b,0,sizeof(*b));
+   b->buffer=b->ptr=buf;
+   b->storage=bytes;
+ }
+ 
+ void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes){
+   oggpack_readinit(b,buf,bytes);
+ }
+ 
+ /* Read in bits without advancing the bitptr; bits <= 32 */
+ long oggpack_look(oggpack_buffer *b,int bits){
+   unsigned long ret;
+   unsigned long m=mask[bits];
+ 
+   bits+=b->endbit;
+ 
+   if(b->endbyte+4>=b->storage){
+     /* not the main path */
+     if(b->endbyte*8+bits>b->storage*8)return(-1);
+   }
+   
+   ret=b->ptr[0]>>b->endbit;
+   if(bits>8){
+     ret|=b->ptr[1]<<(8-b->endbit);  
+     if(bits>16){
+       ret|=b->ptr[2]<<(16-b->endbit);  
+       if(bits>24){
+ 	ret|=b->ptr[3]<<(24-b->endbit);  
+ 	if(bits>32 && b->endbit)
+ 	  ret|=b->ptr[4]<<(32-b->endbit);
+       }
+     }
+   }
+   return(m&ret);
+ }
+ 
+ /* Read in bits without advancing the bitptr; bits <= 32 */
+ long oggpackB_look(oggpack_buffer *b,int bits){
+   unsigned long ret;
+   int m=32-bits;
+ 
+   bits+=b->endbit;
+ 
+   if(b->endbyte+4>=b->storage){
+     /* not the main path */
+     if(b->endbyte*8+bits>b->storage*8)return(-1);
+   }
+   
+   ret=b->ptr[0]<<(24+b->endbit);
+   if(bits>8){
+     ret|=b->ptr[1]<<(16+b->endbit);  
+     if(bits>16){
+       ret|=b->ptr[2]<<(8+b->endbit);  
+       if(bits>24){
+ 	ret|=b->ptr[3]<<(b->endbit);  
+ 	if(bits>32 && b->endbit)
+ 	  ret|=b->ptr[4]>>(8-b->endbit);
+       }
+     }
+   }
+   return (ret>>(m>>1))>>((m+1)>>1);
+ }
+ 
+ long oggpack_look1(oggpack_buffer *b){
+   if(b->endbyte>=b->storage)return(-1);
+   return((b->ptr[0]>>b->endbit)&1);
+ }
+ 
+ long oggpackB_look1(oggpack_buffer *b){
+   if(b->endbyte>=b->storage)return(-1);
+   return((b->ptr[0]>>(7-b->endbit))&1);
+ }
+ 
+ void oggpack_adv(oggpack_buffer *b,int bits){
+   bits+=b->endbit;
+   b->ptr+=bits/8;
+   b->endbyte+=bits/8;
+   b->endbit=bits&7;
+ }
+ 
+ void oggpackB_adv(oggpack_buffer *b,int bits){
+   oggpack_adv(b,bits);
+ }
+ 
+ void oggpack_adv1(oggpack_buffer *b){
+   if(++(b->endbit)>7){
+     b->endbit=0;
+     b->ptr++;
+     b->endbyte++;
+   }
+ }
+ 
+ void oggpackB_adv1(oggpack_buffer *b){
+   oggpack_adv1(b);
+ }
+ 
+ /* bits <= 32 */
+ long oggpack_read(oggpack_buffer *b,int bits){
+   unsigned long ret;
+   unsigned long m=mask[bits];
+ 
+   bits+=b->endbit;
+ 
+   if(b->endbyte+4>=b->storage){
+     /* not the main path */
+     ret=-1UL;
+     if(b->endbyte*8+bits>b->storage*8)goto overflow;
+   }
+   
+   ret=b->ptr[0]>>b->endbit;
+   if(bits>8){
+     ret|=b->ptr[1]<<(8-b->endbit);  
+     if(bits>16){
+       ret|=b->ptr[2]<<(16-b->endbit);  
+       if(bits>24){
+ 	ret|=b->ptr[3]<<(24-b->endbit);  
+ 	if(bits>32 && b->endbit){
+ 	  ret|=b->ptr[4]<<(32-b->endbit);
+ 	}
+       }
+     }
+   }
+   ret&=m;
+   
+  overflow:
+ 
+   b->ptr+=bits/8;
+   b->endbyte+=bits/8;
+   b->endbit=bits&7;
+   return(ret);
+ }
+ 
+ /* bits <= 32 */
+ long oggpackB_read(oggpack_buffer *b,int bits){
+   unsigned long ret;
+   long m=32-bits;
+   
+   bits+=b->endbit;
+ 
+   if(b->endbyte+4>=b->storage){
+     /* not the main path */
+     ret=-1UL;
+     if(b->endbyte*8+bits>b->storage*8)goto overflow;
+   }
+   
+   ret=b->ptr[0]<<(24+b->endbit);
+   if(bits>8){
+     ret|=b->ptr[1]<<(16+b->endbit);  
+     if(bits>16){
+       ret|=b->ptr[2]<<(8+b->endbit);  
+       if(bits>24){
+ 	ret|=b->ptr[3]<<(b->endbit);  
+ 	if(bits>32 && b->endbit)
+ 	  ret|=b->ptr[4]>>(8-b->endbit);
+       }
+     }
+   }
+   ret=(ret>>(m>>1))>>((m+1)>>1);
+   
+  overflow:
+ 
+   b->ptr+=bits/8;
+   b->endbyte+=bits/8;
+   b->endbit=bits&7;
+   return(ret);
+ }
+ 
+ long oggpack_read1(oggpack_buffer *b){
+   unsigned long ret;
+   
+   if(b->endbyte>=b->storage){
+     /* not the main path */
+     ret=-1UL;
+     goto overflow;
+   }
+ 
+   ret=(b->ptr[0]>>b->endbit)&1;
+   
+  overflow:
+ 
+   b->endbit++;
+   if(b->endbit>7){
+     b->endbit=0;
+     b->ptr++;
+     b->endbyte++;
+   }
+   return(ret);
+ }
+ 
+ long oggpackB_read1(oggpack_buffer *b){
+   unsigned long ret;
+   
+   if(b->endbyte>=b->storage){
+     /* not the main path */
+     ret=-1UL;
+     goto overflow;
+   }
+ 
+   ret=(b->ptr[0]>>(7-b->endbit))&1;
+   
+  overflow:
+ 
+   b->endbit++;
+   if(b->endbit>7){
+     b->endbit=0;
+     b->ptr++;
+     b->endbyte++;
+   }
+   return(ret);
+ }
+ 
+ long oggpack_bytes(oggpack_buffer *b){
+   return(b->endbyte+(b->endbit+7)/8);
+ }
+ 
+ long oggpack_bits(oggpack_buffer *b){
+   return(b->endbyte*8+b->endbit);
+ }
+ 
+ long oggpackB_bytes(oggpack_buffer *b){
+   return oggpack_bytes(b);
+ }
+ 
+ long oggpackB_bits(oggpack_buffer *b){
+   return oggpack_bits(b);
+ }
+   
+ unsigned char *oggpack_get_buffer(oggpack_buffer *b){
+   return(b->buffer);
+ }
+ 
+ unsigned char *oggpackB_get_buffer(oggpack_buffer *b){
+   return oggpack_get_buffer(b);
+ }
+ 
+ #undef BUFFER_INCREMENT
+ 
+ /********************************************************************
+  *                                                                  *
+  * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+  *                                                                  *
+  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+  * by the Xiph.Org Foundation http://www.xiph.org/                  *
+  *                                                                  *
+  ********************************************************************
+ 
+  function: code raw [Vorbis] packets into framed OggSquish stream and
+            decode Ogg streams back into raw packets
+  last mod: $Id: oggenc.c,v 1.1 2006/01/21 14:50:01 duraid Exp $
+ 
+  note: The CRC code is directly derived from public domain code by
+  Ross Williams (ross at guest.adelaide.edu.au).  See docs/framing.html
+  for details.
+ 
+  ********************************************************************/
+ 
+ 
+ /* A complete description of Ogg framing exists in docs/framing.html */
+ 
+ int ogg_page_version(ogg_page *og){
+   return((int)(og->header[4]));
+ }
+ 
+ int ogg_page_continued(ogg_page *og){
+   return((int)(og->header[5]&0x01));
+ }
+ 
+ int ogg_page_bos(ogg_page *og){
+   return((int)(og->header[5]&0x02));
+ }
+ 
+ int ogg_page_eos(ogg_page *og){
+   return((int)(og->header[5]&0x04));
+ }
+ 
+ ogg_int64_t ogg_page_granulepos(ogg_page *og){
+   unsigned char *page=og->header;
+   ogg_int64_t granulepos=page[13]&(0xff);
+   granulepos= (granulepos<<8)|(page[12]&0xff);
+   granulepos= (granulepos<<8)|(page[11]&0xff);
+   granulepos= (granulepos<<8)|(page[10]&0xff);
+   granulepos= (granulepos<<8)|(page[9]&0xff);
+   granulepos= (granulepos<<8)|(page[8]&0xff);
+   granulepos= (granulepos<<8)|(page[7]&0xff);
+   granulepos= (granulepos<<8)|(page[6]&0xff);
+   return(granulepos);
+ }
+ 
+ int ogg_page_serialno(ogg_page *og){
+   return(og->header[14] |
+ 	 (og->header[15]<<8) |
+ 	 (og->header[16]<<16) |
+ 	 (og->header[17]<<24));
+ }
+  
+ long ogg_page_pageno(ogg_page *og){
+   return(og->header[18] |
+ 	 (og->header[19]<<8) |
+ 	 (og->header[20]<<16) |
+ 	 (og->header[21]<<24));
+ }
+ 
+ 
+ 
+ /* returns the number of packets that are completed on this page (if
+    the leading packet is begun on a previous page, but ends on this
+    page, it's counted */
+ 
+ /* NOTE:
+ If a page consists of a packet begun on a previous page, and a new
+ packet begun (but not completed) on this page, the return will be:
+   ogg_page_packets(page)   ==1, 
+   ogg_page_continued(page) !=0
+ 
+ If a page happens to be a single packet that was begun on a
+ previous page, and spans to the next page (in the case of a three or
+ more page packet), the return will be: 
+   ogg_page_packets(page)   ==0, 
+   ogg_page_continued(page) !=0
+ */
+ 
+ int ogg_page_packets(ogg_page *og){
+   int i,n=og->header[26],count=0;
+   for(i=0;i<n;i++)
+     if(og->header[27+i]<255)count++;
+   return(count);
+ }
+ 
+ 
+ #if 0
+ /* helper to initialize lookup for direct-table CRC (illustrative; we
+    use the static init below) */
+ 
+ static ogg_uint32_t _ogg_crc_entry(unsigned long index){
+   int           i;
+   unsigned long r;
+ 
+   r = index << 24;
+   for (i=0; i<8; i++)
+     if (r & 0x80000000UL)
+       r = (r << 1) ^ 0x04c11db7; /* The same as the ethernet generator
+ 				    polynomial, although we use an
+ 				    unreflected alg and an init/final
+ 				    of 0, not 0xffffffff */
+     else
+        r<<=1;
+  return (r & 0xffffffffUL);
+ }
+ #endif
+ 
+ static ogg_uint32_t crc_lookup[256]={
+   0x00000000,0x04c11db7,0x09823b6e,0x0d4326d9,
+   0x130476dc,0x17c56b6b,0x1a864db2,0x1e475005,
+   0x2608edb8,0x22c9f00f,0x2f8ad6d6,0x2b4bcb61,
+   0x350c9b64,0x31cd86d3,0x3c8ea00a,0x384fbdbd,
+   0x4c11db70,0x48d0c6c7,0x4593e01e,0x4152fda9,
+   0x5f15adac,0x5bd4b01b,0x569796c2,0x52568b75,
+   0x6a1936c8,0x6ed82b7f,0x639b0da6,0x675a1011,
+   0x791d4014,0x7ddc5da3,0x709f7b7a,0x745e66cd,
+   0x9823b6e0,0x9ce2ab57,0x91a18d8e,0x95609039,
+   0x8b27c03c,0x8fe6dd8b,0x82a5fb52,0x8664e6e5,
+   0xbe2b5b58,0xbaea46ef,0xb7a96036,0xb3687d81,
+   0xad2f2d84,0xa9ee3033,0xa4ad16ea,0xa06c0b5d,
+   0xd4326d90,0xd0f37027,0xddb056fe,0xd9714b49,
+   0xc7361b4c,0xc3f706fb,0xceb42022,0xca753d95,
+   0xf23a8028,0xf6fb9d9f,0xfbb8bb46,0xff79a6f1,
+   0xe13ef6f4,0xe5ffeb43,0xe8bccd9a,0xec7dd02d,
+   0x34867077,0x30476dc0,0x3d044b19,0x39c556ae,
+   0x278206ab,0x23431b1c,0x2e003dc5,0x2ac12072,
+   0x128e9dcf,0x164f8078,0x1b0ca6a1,0x1fcdbb16,
+   0x018aeb13,0x054bf6a4,0x0808d07d,0x0cc9cdca,
+   0x7897ab07,0x7c56b6b0,0x71159069,0x75d48dde,
+   0x6b93dddb,0x6f52c06c,0x6211e6b5,0x66d0fb02,
+   0x5e9f46bf,0x5a5e5b08,0x571d7dd1,0x53dc6066,
+   0x4d9b3063,0x495a2dd4,0x44190b0d,0x40d816ba,
+   0xaca5c697,0xa864db20,0xa527fdf9,0xa1e6e04e,
+   0xbfa1b04b,0xbb60adfc,0xb6238b25,0xb2e29692,
+   0x8aad2b2f,0x8e6c3698,0x832f1041,0x87ee0df6,
+   0x99a95df3,0x9d684044,0x902b669d,0x94ea7b2a,
+   0xe0b41de7,0xe4750050,0xe9362689,0xedf73b3e,
+   0xf3b06b3b,0xf771768c,0xfa325055,0xfef34de2,
+   0xc6bcf05f,0xc27dede8,0xcf3ecb31,0xcbffd686,
+   0xd5b88683,0xd1799b34,0xdc3abded,0xd8fba05a,
+   0x690ce0ee,0x6dcdfd59,0x608edb80,0x644fc637,
+   0x7a089632,0x7ec98b85,0x738aad5c,0x774bb0eb,
+   0x4f040d56,0x4bc510e1,0x46863638,0x42472b8f,
+   0x5c007b8a,0x58c1663d,0x558240e4,0x51435d53,
+   0x251d3b9e,0x21dc2629,0x2c9f00f0,0x285e1d47,
+   0x36194d42,0x32d850f5,0x3f9b762c,0x3b5a6b9b,
+   0x0315d626,0x07d4cb91,0x0a97ed48,0x0e56f0ff,
+   0x1011a0fa,0x14d0bd4d,0x19939b94,0x1d528623,
+   0xf12f560e,0xf5ee4bb9,0xf8ad6d60,0xfc6c70d7,
+   0xe22b20d2,0xe6ea3d65,0xeba91bbc,0xef68060b,
+   0xd727bbb6,0xd3e6a601,0xdea580d8,0xda649d6f,
+   0xc423cd6a,0xc0e2d0dd,0xcda1f604,0xc960ebb3,
+   0xbd3e8d7e,0xb9ff90c9,0xb4bcb610,0xb07daba7,
+   0xae3afba2,0xaafbe615,0xa7b8c0cc,0xa379dd7b,
+   0x9b3660c6,0x9ff77d71,0x92b45ba8,0x9675461f,
+   0x8832161a,0x8cf30bad,0x81b02d74,0x857130c3,
+   0x5d8a9099,0x594b8d2e,0x5408abf7,0x50c9b640,
+   0x4e8ee645,0x4a4ffbf2,0x470cdd2b,0x43cdc09c,
+   0x7b827d21,0x7f436096,0x7200464f,0x76c15bf8,
+   0x68860bfd,0x6c47164a,0x61043093,0x65c52d24,
+   0x119b4be9,0x155a565e,0x18197087,0x1cd86d30,
+   0x029f3d35,0x065e2082,0x0b1d065b,0x0fdc1bec,
+   0x3793a651,0x3352bbe6,0x3e119d3f,0x3ad08088,
+   0x2497d08d,0x2056cd3a,0x2d15ebe3,0x29d4f654,
+   0xc5a92679,0xc1683bce,0xcc2b1d17,0xc8ea00a0,
+   0xd6ad50a5,0xd26c4d12,0xdf2f6bcb,0xdbee767c,
+   0xe3a1cbc1,0xe760d676,0xea23f0af,0xeee2ed18,
+   0xf0a5bd1d,0xf464a0aa,0xf9278673,0xfde69bc4,
+   0x89b8fd09,0x8d79e0be,0x803ac667,0x84fbdbd0,
+   0x9abc8bd5,0x9e7d9662,0x933eb0bb,0x97ffad0c,
+   0xafb010b1,0xab710d06,0xa6322bdf,0xa2f33668,
+   0xbcb4666d,0xb8757bda,0xb5365d03,0xb1f740b4};
+ 
+ /* init the encode/decode logical stream state */
+ 
+ int ogg_stream_init(ogg_stream_state *os,int serialno){
+   if(os){
+     memset(os,0,sizeof(*os));
+     os->body_storage=16*1024;
+     os->body_data=_ogg_malloc(os->body_storage*sizeof(*os->body_data));
+ 
+     os->lacing_storage=1024;
+     os->lacing_vals=_ogg_malloc(os->lacing_storage*sizeof(*os->lacing_vals));
+     os->granule_vals=_ogg_malloc(os->lacing_storage*sizeof(*os->granule_vals));
+ 
+     os->serialno=serialno;
+ 
+     return(0);
+   }
+   return(-1);
+ } 
+ 
+ /* _clear does not free os, only the non-flat storage within */
+ int ogg_stream_clear(ogg_stream_state *os){
+   if(os){
+     if(os->body_data)_ogg_free(os->body_data);
+     if(os->lacing_vals)_ogg_free(os->lacing_vals);
+     if(os->granule_vals)_ogg_free(os->granule_vals);
+ 
+     memset(os,0,sizeof(*os));    
+   }
+   return(0);
+ } 
+ 
+ int ogg_stream_destroy(ogg_stream_state *os){
+   if(os){
+     ogg_stream_clear(os);
+     _ogg_free(os);
+   }
+   return(0);
+ } 
+ 
+ /* Helpers for ogg_stream_encode; this keeps the structure and
+    what's happening fairly clear */
+ 
+ static void _os_body_expand(ogg_stream_state *os,int needed){
+   if(os->body_storage<=os->body_fill+needed){
+     os->body_storage+=(needed+1024);
+     os->body_data=_ogg_realloc(os->body_data,os->body_storage*sizeof(*os->body_data));
+   }
+ }
+ 
+ static void _os_lacing_expand(ogg_stream_state *os,int needed){
+   if(os->lacing_storage<=os->lacing_fill+needed){
+     os->lacing_storage+=(needed+32);
+     os->lacing_vals=_ogg_realloc(os->lacing_vals,os->lacing_storage*sizeof(*os->lacing_vals));
+     os->granule_vals=_ogg_realloc(os->granule_vals,os->lacing_storage*sizeof(*os->granule_vals));
+   }
+ }
+ 
+ /* checksum the page */
+ /* Direct table CRC; note that this will be faster in the future if we
+    perform the checksum silmultaneously with other copies */
+ 
+ void ogg_page_checksum_set(ogg_page *og){
+   if(og){
+     ogg_uint32_t crc_reg=0;
+     int i;
+ 
+     /* safety; needed for API behavior, but not framing code */
+     og->header[22]=0;
+     og->header[23]=0;
+     og->header[24]=0;
+     og->header[25]=0;
+     
+     for(i=0;i<og->header_len;i++)
+       crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->header[i]];
+     for(i=0;i<og->body_len;i++)
+       crc_reg=(crc_reg<<8)^crc_lookup[((crc_reg >> 24)&0xff)^og->body[i]];
+     
+     og->header[22]=crc_reg&0xff;
+     og->header[23]=(crc_reg>>8)&0xff;
+     og->header[24]=(crc_reg>>16)&0xff;
+     og->header[25]=(crc_reg>>24)&0xff;
+   }
+ }
+ 
+ /* submit data to the internal buffer of the framing engine */
+ int ogg_stream_packetin(ogg_stream_state *os,ogg_packet *op){
+   int lacing_vals=op->bytes/255+1,i;
+ 
+   if(os->body_returned){
+     /* advance packet data according to the body_returned pointer. We
+        had to keep it around to return a pointer into the buffer last
+        call */
+     
+     os->body_fill-=os->body_returned;
+     if(os->body_fill)
+       memmove(os->body_data,os->body_data+os->body_returned,
+ 	      os->body_fill);
+     os->body_returned=0;
+   }
+  
+   /* make sure we have the buffer storage */
+   _os_body_expand(os,op->bytes);
+   _os_lacing_expand(os,lacing_vals);
+ 
+   /* Copy in the submitted packet.  Yes, the copy is a waste; this is
+      the liability of overly clean abstraction for the time being.  It
+      will actually be fairly easy to eliminate the extra copy in the
+      future */
+ 
+   memcpy(os->body_data+os->body_fill,op->packet,op->bytes);
+   os->body_fill+=op->bytes;
+ 
+   /* Store lacing vals for this packet */
+   for(i=0;i<lacing_vals-1;i++){
+     os->lacing_vals[os->lacing_fill+i]=255;
+     os->granule_vals[os->lacing_fill+i]=os->granulepos;
+   }
+   os->lacing_vals[os->lacing_fill+i]=(op->bytes)%255;
+   os->granulepos=os->granule_vals[os->lacing_fill+i]=op->granulepos;
+ 
+   /* flag the first segment as the beginning of the packet */
+   os->lacing_vals[os->lacing_fill]|= 0x100;
+ 
+   os->lacing_fill+=lacing_vals;
+ 
+   /* for the sake of completeness */
+   os->packetno++;
+ 
+   if(op->e_o_s)os->e_o_s=1;
+ 
+   return(0);
+ }
+ 
+ /* This will flush remaining packets into a page (returning nonzero),
+    even if there is not enough data to trigger a flush normally
+    (undersized page). If there are no packets or partial packets to
+    flush, ogg_stream_flush returns 0.  Note that ogg_stream_flush will
+    try to flush a normal sized page like ogg_stream_pageout; a call to
+    ogg_stream_flush does not guarantee that all packets have flushed.
+    Only a return value of 0 from ogg_stream_flush indicates all packet
+    data is flushed into pages.
+ 
+    since ogg_stream_flush will flush the last page in a stream even if
+    it's undersized, you almost certainly want to use ogg_stream_pageout
+    (and *not* ogg_stream_flush) unless you specifically need to flush 
+    an page regardless of size in the middle of a stream. */
+ 
+ int ogg_stream_flush(ogg_stream_state *os,ogg_page *og){
+   int i;
+   int vals=0;
+   int maxvals=(os->lacing_fill>255?255:os->lacing_fill);
+   int bytes=0;
+   long acc=0;
+   ogg_int64_t granule_pos=os->granule_vals[0];
+ 
+   if(maxvals==0)return(0);
+   
+   /* construct a page */
+   /* decide how many segments to include */
+   
+   /* If this is the initial header case, the first page must only include
+      the initial header packet */
+   if(os->b_o_s==0){  /* 'initial header page' case */
+     granule_pos=0;
+     for(vals=0;vals<maxvals;vals++){
+       if((os->lacing_vals[vals]&0x0ff)<255){
+ 	vals++;
+ 	break;
+       }
+     }
+   }else{
+     for(vals=0;vals<maxvals;vals++){
+       if(acc>4096)break;
+       acc+=os->lacing_vals[vals]&0x0ff;
+       granule_pos=os->granule_vals[vals];
+     }
+   }
+   
+   /* construct the header in temp storage */
+   memcpy(os->header,"OggS",4);
+   
+   /* stream structure version */
+   os->header[4]=0x00;
+   
+   /* continued packet flag? */
+   os->header[5]=0x00;
+   if((os->lacing_vals[0]&0x100)==0)os->header[5]|=0x01;
+   /* first page flag? */
+   if(os->b_o_s==0)os->header[5]|=0x02;
+   /* last page flag? */
+   if(os->e_o_s && os->lacing_fill==vals)os->header[5]|=0x04;
+   os->b_o_s=1;
+ 
+   /* 64 bits of PCM position */
+   for(i=6;i<14;i++){
+     os->header[i]=(granule_pos&0xff);
+     granule_pos>>=8;
+   }
+ 
+   /* 32 bits of stream serial number */
+   {
+     long serialno=os->serialno;
+     for(i=14;i<18;i++){
+       os->header[i]=(serialno&0xff);
+       serialno>>=8;
+     }
+   }
+ 
+   /* 32 bits of page counter (we have both counter and page header
+      because this val can roll over) */
+   if(os->pageno==-1)os->pageno=0; /* because someone called
+ 				     stream_reset; this would be a
+ 				     strange thing to do in an
+ 				     encode stream, but it has
+ 				     plausible uses */
+   {
+     long pageno=os->pageno++;
+     for(i=18;i<22;i++){
+       os->header[i]=(pageno&0xff);
+       pageno>>=8;
+     }
+   }
+   
+   /* zero for computation; filled in later */
+   os->header[22]=0;
+   os->header[23]=0;
+   os->header[24]=0;
+   os->header[25]=0;
+   
+   /* segment table */
+   os->header[26]=vals&0xff;
+   for(i=0;i<vals;i++)
+     bytes+=os->header[i+27]=(os->lacing_vals[i]&0xff);
+   
+   /* set pointers in the ogg_page struct */
+   og->header=os->header;
+   og->header_len=os->header_fill=vals+27;
+   og->body=os->body_data+os->body_returned;
+   og->body_len=bytes;
+   
+   /* advance the lacing data and set the body_returned pointer */
+   
+   os->lacing_fill-=vals;
+   memmove(os->lacing_vals,os->lacing_vals+vals,os->lacing_fill*sizeof(*os->lacing_vals));
+   memmove(os->granule_vals,os->granule_vals+vals,os->lacing_fill*sizeof(*os->granule_vals));
+   os->body_returned+=bytes;
+   
+   /* calculate the checksum */
+   
+   ogg_page_checksum_set(og);
+ 
+   /* done */
+   return(1);
+ }
+ 
+ 
+ /* This constructs pages from buffered packet segments.  The pointers
+ returned are to static buffers; do not free. The returned buffers are
+ good only until the next call (using the same ogg_stream_state) */
+ 
+ int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og){
+ 
+   if((os->e_o_s&&os->lacing_fill) ||          /* 'were done, now flush' case */
+      os->body_fill-os->body_returned > 4096 ||/* 'page nominal size' case */
+      os->lacing_fill>=255 ||                  /* 'segment table full' case */
+      (os->lacing_fill&&!os->b_o_s)){          /* 'initial header page' case */
+         
+     return(ogg_stream_flush(os,og));
+   }
+   
+   /* not enough data to construct a page and not end of stream */
+   return(0);
+ }
+ 
+ int ogg_stream_eos(ogg_stream_state *os){
+   return os->e_o_s;
+ }
+ 
+ /* DECODING PRIMITIVES: packet streaming layer **********************/
+ 
+ /* This has two layers to place more of the multi-serialno and paging
+    control in the application's hands.  First, we expose a data buffer
+    using ogg_sync_buffer().  The app either copies into the
+    buffer, or passes it directly to read(), etc.  We then call
+    ogg_sync_wrote() to tell how many bytes we just added.
+ 
+    Pages are returned (pointers into the buffer in ogg_sync_state)
+    by ogg_sync_pageout().  The page is then submitted to
+    ogg_stream_pagein() along with the appropriate
+    ogg_stream_state* (ie, matching serialno).  We then get raw
+    packets out calling ogg_stream_packetout() with a
+    ogg_stream_state.  See the 'frame-prog.txt' docs for details and
+    example code. */
+ 
+ /* initialize the struct to a known state */
+ int ogg_sync_init(ogg_sync_state *oy){
+   if(oy){
+     memset(oy,0,sizeof(*oy));
+   }
+   return(0);
+ }
+ 
+ /* clear non-flat storage within */
+ int ogg_sync_clear(ogg_sync_state *oy){
+   if(oy){
+     if(oy->data)_ogg_free(oy->data);
+     ogg_sync_init(oy);
+   }
+   return(0);
+ }
+ 
+ int ogg_sync_destroy(ogg_sync_state *oy){
+   if(oy){
+     ogg_sync_clear(oy);
+     _ogg_free(oy);
+   }
+   return(0);
+ }
+ 
+ char *ogg_sync_buffer(ogg_sync_state *oy, long size){
+ 
+   /* first, clear out any space that has been previously returned */
+   if(oy->returned){
+     oy->fill-=oy->returned;
+     if(oy->fill>0)
+       memmove(oy->data,oy->data+oy->returned,oy->fill);
+     oy->returned=0;
+   }
+ 
+   if(size>oy->storage-oy->fill){
+     /* We need to extend the internal buffer */
+     long newsize=size+oy->fill+4096; /* an extra page to be nice */
+ 
+     if(oy->data)
+       oy->data=_ogg_realloc(oy->data,newsize);
+     else
+       oy->data=_ogg_malloc(newsize);
+     oy->storage=newsize;
+   }
+ 
+   /* expose a segment at least as large as requested at the fill mark */
+   return((char *)oy->data+oy->fill);
+ }
+ 
+ int ogg_sync_wrote(ogg_sync_state *oy, long bytes){
+   if(oy->fill+bytes>oy->storage)return(-1);
+   oy->fill+=bytes;
+   return(0);
+ }
+ 
+ /* sync the stream.  This is meant to be useful for finding page
+    boundaries.
+ 
+    return values for this:
+   -n) skipped n bytes
+    0) page not ready; more data (no bytes skipped)
+    n) page synced at current location; page length n bytes
+    
+ */
+ 
+ long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og){
+   unsigned char *page=oy->data+oy->returned;
+   unsigned char *next;
+   long bytes=oy->fill-oy->returned;
+   
+   if(oy->headerbytes==0){
+     int headerbytes,i;
+     if(bytes<27)return(0); /* not enough for a header */
+     
+     /* verify capture pattern */
+     if(memcmp(page,"OggS",4))goto sync_fail;
+     
+     headerbytes=page[26]+27;
+     if(bytes<headerbytes)return(0); /* not enough for header + seg table */
+     
+     /* count up body length in the segment table */
+     
+     for(i=0;i<page[26];i++)
+       oy->bodybytes+=page[27+i];
+     oy->headerbytes=headerbytes;
+   }
+   
+   if(oy->bodybytes+oy->headerbytes>bytes)return(0);
+   
+   /* The whole test page is buffered.  Verify the checksum */
+   {
+     /* Grab the checksum bytes, set the header field to zero */
+     char chksum[4];
+     ogg_page log;
+     
+     memcpy(chksum,page+22,4);
+     memset(page+22,0,4);
+     
+     /* set up a temp page struct and recompute the checksum */
+     log.header=page;
+     log.header_len=oy->headerbytes;
+     log.body=page+oy->headerbytes;
+     log.body_len=oy->bodybytes;
+     ogg_page_checksum_set(&log);
+     
+     /* Compare */
+     if(memcmp(chksum,page+22,4)){
+       /* D'oh.  Mismatch! Corrupt page (or miscapture and not a page
+ 	 at all) */
+       /* replace the computed checksum with the one actually read in */
+       memcpy(page+22,chksum,4);
+       
+       /* Bad checksum. Lose sync */
+       goto sync_fail;
+     }
+   }
+   
+   /* yes, have a whole page all ready to go */
+   {
+     unsigned char *page=oy->data+oy->returned;
+     long bytes;
+ 
+     if(og){
+       og->header=page;
+       og->header_len=oy->headerbytes;
+       og->body=page+oy->headerbytes;
+       og->body_len=oy->bodybytes;
+     }
+ 
+     oy->unsynced=0;
+     oy->returned+=(bytes=oy->headerbytes+oy->bodybytes);
+     oy->headerbytes=0;
+     oy->bodybytes=0;
+     return(bytes);
+   }
+   
+  sync_fail:
+   
+   oy->headerbytes=0;
+   oy->bodybytes=0;
+   
+   /* search for possible capture */
+   next=memchr(page+1,'O',bytes-1);
+   if(!next)
+     next=oy->data+oy->fill;
+ 
+   oy->returned=next-oy->data;
+   return(-(next-page));
+ }
+ 
+ /* sync the stream and get a page.  Keep trying until we find a page.
+    Supress 'sync errors' after reporting the first.
+ 
+    return values:
+    -1) recapture (hole in data)
+     0) need more data
+     1) page returned
+ 
+    Returns pointers into buffered data; invalidated by next call to
+    _stream, _clear, _init, or _buffer */
+ 
+ int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og){
+ 
+   /* all we need to do is verify a page at the head of the stream
+      buffer.  If it doesn't verify, we look for the next potential
+      frame */
+ 
+   while(1){
+     long ret=ogg_sync_pageseek(oy,og);
+     if(ret>0){
+       /* have a page */
+       return(1);
+     }
+     if(ret==0){
+       /* need more data */
+       return(0);
+     }
+     
+     /* head did not start a synced page... skipped some bytes */
+     if(!oy->unsynced){
+       oy->unsynced=1;
+       return(-1);
+     }
+ 
+     /* loop. keep looking */
+ 
+   }
+ }
+ 
+ /* add the incoming page to the stream state; we decompose the page
+    into packet segments here as well. */
+ 
+ int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){
+   unsigned char *header=og->header;
+   unsigned char *body=og->body;
+   long           bodysize=og->body_len;
+   int            segptr=0;
+ 
+   int version=ogg_page_version(og);
+   int continued=ogg_page_continued(og);
+   int bos=ogg_page_bos(og);
+   int eos=ogg_page_eos(og);
+   ogg_int64_t granulepos=ogg_page_granulepos(og);
+   int serialno=ogg_page_serialno(og);
+   long pageno=ogg_page_pageno(og);
+   int segments=header[26];
+   
+   /* clean up 'returned data' */
+   {
+     long lr=os->lacing_returned;
+     long br=os->body_returned;
+ 
+     /* body data */
+     if(br){
+       os->body_fill-=br;
+       if(os->body_fill)
+ 	memmove(os->body_data,os->body_data+br,os->body_fill);
+       os->body_returned=0;
+     }
+ 
+     if(lr){
+       /* segment table */
+       if(os->lacing_fill-lr){
+ 	memmove(os->lacing_vals,os->lacing_vals+lr,
+ 		(os->lacing_fill-lr)*sizeof(*os->lacing_vals));
+ 	memmove(os->granule_vals,os->granule_vals+lr,
+ 		(os->lacing_fill-lr)*sizeof(*os->granule_vals));
+       }
+       os->lacing_fill-=lr;
+       os->lacing_packet-=lr;
+       os->lacing_returned=0;
+     }
+   }
+ 
+   /* check the serial number */
+   if(serialno!=os->serialno)return(-1);
+   if(version>0)return(-1);
+ 
+   _os_lacing_expand(os,segments+1);
+ 
+   /* are we in sequence? */
+   if(pageno!=os->pageno){
+     int i;
+ 
+     /* unroll previous partial packet (if any) */
+     for(i=os->lacing_packet;i<os->lacing_fill;i++)
+       os->body_fill-=os->lacing_vals[i]&0xff;
+     os->lacing_fill=os->lacing_packet;
+ 
+     /* make a note of dropped data in segment table */
+     if(os->pageno!=-1){
+       os->lacing_vals[os->lacing_fill++]=0x400;
+       os->lacing_packet++;
+     }
+ 
+     /* are we a 'continued packet' page?  If so, we'll need to skip
+        some segments */
+     if(continued){
+       bos=0;
+       for(;segptr<segments;segptr++){
+ 	int val=header[27+segptr];
+ 	body+=val;
+ 	bodysize-=val;
+ 	if(val<255){
+ 	  segptr++;
+ 	  break;
+ 	}
+       }
+     }
+   }
+   
+   if(bodysize){
+     _os_body_expand(os,bodysize);
+     memcpy(os->body_data+os->body_fill,body,bodysize);
+     os->body_fill+=bodysize;
+   }
+ 
+   {
+     int saved=-1;
+     while(segptr<segments){
+       int val=header[27+segptr];
+       os->lacing_vals[os->lacing_fill]=val;
+       os->granule_vals[os->lacing_fill]=-1;
+       
+       if(bos){
+ 	os->lacing_vals[os->lacing_fill]|=0x100;
+ 	bos=0;
+       }
+       
+       if(val<255)saved=os->lacing_fill;
+       
+       os->lacing_fill++;
+       segptr++;
+       
+       if(val<255)os->lacing_packet=os->lacing_fill;
+     }
+   
+     /* set the granulepos on the last granuleval of the last full packet */
+     if(saved!=-1){
+       os->granule_vals[saved]=granulepos;
+     }
+ 
+   }
+ 
+   if(eos){
+     os->e_o_s=1;
+     if(os->lacing_fill>0)
+       os->lacing_vals[os->lacing_fill-1]|=0x200;
+   }
+ 
+   os->pageno=pageno+1;
+ 
+   return(0);
+ }
+ 
+ /* clear things to an initial state.  Good to call, eg, before seeking */
+ int ogg_sync_reset(ogg_sync_state *oy){
+   oy->fill=0;
+   oy->returned=0;
+   oy->unsynced=0;
+   oy->headerbytes=0;
+   oy->bodybytes=0;
+   return(0);
+ }
+ 
+ int ogg_stream_reset(ogg_stream_state *os){
+   os->body_fill=0;
+   os->body_returned=0;
+ 
+   os->lacing_fill=0;
+   os->lacing_packet=0;
+   os->lacing_returned=0;
+ 
+   os->header_fill=0;
+ 
+   os->e_o_s=0;
+   os->b_o_s=0;
+   os->pageno=-1;
+   os->packetno=0;
+   os->granulepos=0;
+ 
+   return(0);
+ }
+ 
+ int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno){
+   ogg_stream_reset(os);
+   os->serialno=serialno;
+   return(0);
+ }
+ 
+ static int _packetout(ogg_stream_state *os,ogg_packet *op,int adv){
+ 
+   /* The last part of decode. We have the stream broken into packet
+      segments.  Now we need to group them into packets (or return the
+      out of sync markers) */
+ 
+   int ptr=os->lacing_returned;
+ 
+   if(os->lacing_packet<=ptr)return(0);
+ 
+   if(os->lacing_vals[ptr]&0x400){
+     /* we need to tell the codec there's a gap; it might need to
+        handle previous packet dependencies. */
+     os->lacing_returned++;
+     os->packetno++;
+     return(-1);
+   }
+ 
+   if(!op && !adv)return(1); /* just using peek as an inexpensive way
+                                to ask if there's a whole packet
+                                waiting */
+ 
+   /* Gather the whole packet. We'll have no holes or a partial packet */
+   {
+     int size=os->lacing_vals[ptr]&0xff;
+     int bytes=size;
+     int eos=os->lacing_vals[ptr]&0x200; /* last packet of the stream? */
+     int bos=os->lacing_vals[ptr]&0x100; /* first packet of the stream? */
+ 
+     while(size==255){
+       int val=os->lacing_vals[++ptr];
+       size=val&0xff;
+       if(val&0x200)eos=0x200;
+       bytes+=size;
+     }
+ 
+     if(op){
+       op->e_o_s=eos;
+       op->b_o_s=bos;
+       op->packet=os->body_data+os->body_returned;
+       op->packetno=os->packetno;
+       op->granulepos=os->granule_vals[ptr];
+       op->bytes=bytes;
+     }
+ 
+     if(adv){
+       os->body_returned+=bytes;
+       os->lacing_returned=ptr+1;
+       os->packetno++;
+     }
+   }
+   return(1);
+ }
+ 
+ int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op){
+   return _packetout(os,op,1);
+ }
+ 
+ int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op){
+   return _packetout(os,op,0);
+ }
+ 
+ void ogg_packet_clear(ogg_packet *op) {
+   _ogg_free(op->packet);
+   memset(op, 0, sizeof(*op));
+ }
+ 
+ 
+ 
+ 
+ 






More information about the llvm-commits mailing list