Bug 501279. Update libvorbis to r16335.
authorMatthew Gregan <kinetik@flim.org>
Fri, 31 Jul 2009 17:24:16 +1200
changeset 31034 c6692a8f3f2725faadef43edd3142e533b452e62
parent 31033 fe042972f59643029814de9d2529c87e3f8106f8
child 31035 682ac215c2e2c2c7ea165d8fd60a8db3884bcbba
push idunknown
push userunknown
push dateunknown
bugs501279
milestone1.9.2a1pre
Bug 501279. Update libvorbis to r16335.
media/libvorbis/bug481601.patch
media/libvorbis/bug487519.patch
media/libvorbis/bug498855.patch
media/libvorbis/include/vorbis/codec.h
media/libvorbis/lib/backends.h
media/libvorbis/lib/bitrate.h
media/libvorbis/lib/codebook.h
media/libvorbis/lib/codec_internal.h
media/libvorbis/lib/envelope.h
media/libvorbis/lib/highlevel.h
media/libvorbis/lib/lookup.h
media/libvorbis/lib/lookup_data.h
media/libvorbis/lib/lpc.h
media/libvorbis/lib/lsp.h
media/libvorbis/lib/masking.h
media/libvorbis/lib/mdct.h
media/libvorbis/lib/misc.h
media/libvorbis/lib/os.h
media/libvorbis/lib/psy.h
media/libvorbis/lib/registry.h
media/libvorbis/lib/scales.h
media/libvorbis/lib/smallft.h
media/libvorbis/lib/vorbis_analysis.c
media/libvorbis/lib/vorbis_bitrate.c
media/libvorbis/lib/vorbis_block.c
media/libvorbis/lib/vorbis_codebook.c
media/libvorbis/lib/vorbis_envelope.c
media/libvorbis/lib/vorbis_floor0.c
media/libvorbis/lib/vorbis_floor1.c
media/libvorbis/lib/vorbis_info.c
media/libvorbis/lib/vorbis_lookup.c
media/libvorbis/lib/vorbis_lpc.c
media/libvorbis/lib/vorbis_lsp.c
media/libvorbis/lib/vorbis_mapping0.c
media/libvorbis/lib/vorbis_mdct.c
media/libvorbis/lib/vorbis_psy.c
media/libvorbis/lib/vorbis_registry.c
media/libvorbis/lib/vorbis_res0.c
media/libvorbis/lib/vorbis_sharedbook.c
media/libvorbis/lib/vorbis_smallft.c
media/libvorbis/lib/vorbis_synthesis.c
media/libvorbis/lib/vorbis_window.c
media/libvorbis/lib/window.h
--- a/media/libvorbis/bug481601.patch
+++ b/media/libvorbis/bug481601.patch
@@ -1,25 +1,27 @@
 diff --git a/media/libvorbis/include/vorbis/codec.h b/media/libvorbis/include/vorbis/codec.h
 index b23fe0a..c62b2d5 100644
 --- a/media/libvorbis/include/vorbis/codec.h
 +++ b/media/libvorbis/include/vorbis/codec.h
-@@ -170,16 +170,17 @@ extern void     vorbis_comment_add(vorbis_comment *vc, char *comment);
+@@ -170,18 +170,19 @@ 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);
+                                        const char *tag, const char *contents);
+ extern char    *vorbis_comment_query(vorbis_comment *vc, const char *tag, int count);
+ extern int      vorbis_comment_query_count(vorbis_comment *vc, const 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_init(vorbis_dsp_state *v);
  extern void     vorbis_dsp_clear(vorbis_dsp_state *v);
  extern double   vorbis_granule_time(vorbis_dsp_state *v,
- 				    ogg_int64_t granulepos);
+                                     ogg_int64_t granulepos);
+ 
+ extern const char *vorbis_version_string(void);
  
  /* 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);
 diff --git a/media/libvorbis/lib/vorbis_block.c b/media/libvorbis/lib/vorbis_block.c
 index 3b6f456..d7f5974 100644
 --- a/media/libvorbis/lib/vorbis_block.c
--- a/media/libvorbis/bug487519.patch
+++ b/media/libvorbis/bug487519.patch
@@ -5,16 +5,16 @@ index 8872f57..b7b2399 100644
 @@ -43,9 +43,14 @@ int vorbis_synthesis(vorbis_block *vb,ogg_packet *op){
  
    /* read our mode and pre/post windowsize */
    mode=oggpack_read(opb,b->modebits);
 -  if(mode==-1)return(OV_EBADPACKET);
 +  if(mode==-1) {
 +    return(OV_EBADPACKET);
 +  }
-   
+ 
    vb->mode=mode;
 +  if(!ci->mode_param[mode]) {
 +    return(OV_EBADPACKET); 
 +  }
    vb->W=ci->mode_param[mode]->blockflag;
    if(vb->W){
  
--- a/media/libvorbis/bug498855.patch
+++ b/media/libvorbis/bug498855.patch
@@ -21,16 +21,16 @@ index b7b2399..05774fd 100644
 +  vorbis_info          *vi= vd ? vd->vi : 0;
 +  codec_setup_info     *ci= vi ? vi->codec_setup : 0;
 +  oggpack_buffer       *opb=vb ? &vb->opb : 0;
    int                   type,mode,i;
 +
 +  if (!vd || !b || !vi || !ci || !opb) {
 +    return OV_EBADPACKET;
 +  }
-  
+ 
    /* 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 */
--- a/media/libvorbis/include/vorbis/codec.h
+++ b/media/libvorbis/include/vorbis/codec.h
@@ -6,17 +6,17 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
 
  ********************************************************************
 
  function: libvorbis codec headers
- last mod: $Id$
+ last mod: $Id: codec.h 16037 2009-05-26 21:10:58Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _vorbis_codec_h_
 #define _vorbis_codec_h_
 
 #ifdef __cplusplus
 extern "C"
--- a/media/libvorbis/lib/backends.h
+++ b/media/libvorbis/lib/backends.h
@@ -1,23 +1,23 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
- function: libvorbis backend and mapping structures; needed for 
+ function: libvorbis backend and mapping structures; needed for
            static mode headers
- last mod: $Id$
+ last mod: $Id: backends.h 16326 2009-07-24 00:06:53Z xiphmont $
 
  ********************************************************************/
 
 /* 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 */
 
 #ifndef _vorbis_backend_h_
@@ -63,26 +63,26 @@ typedef struct{
   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 */ 
+  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 maxover;
+  float maxunder;
+  float maxerr;
 
-  float twofitweight;  
+  float twofitweight;
   float twofitatten;
 
   int   n;
 
 } vorbis_info_floor1;
 
 /* Residue backend generic *****************************************/
 typedef struct{
@@ -106,40 +106,38 @@ typedef struct vorbis_info_residue0{
   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 */
+  int    booklist[512];    /* list of second stage books */
 
-  const float classmetric1[64];  
-  const float classmetric2[64];  
+  const float classmetric1[64];
+  const 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;
 
 #endif
-
-
--- a/media/libvorbis/lib/bitrate.h
+++ b/media/libvorbis/lib/bitrate.h
@@ -6,17 +6,17 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: bitrate tracking and management
- last mod: $Id$
+ last mod: $Id: bitrate.h 13293 2007-07-24 00:09:47Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_BITRATE_H_
 #define _V_BITRATE_H_
 
 #include "vorbis/codec.h"
 #include "codec_internal.h"
--- a/media/libvorbis/lib/codebook.h
+++ b/media/libvorbis/lib/codebook.h
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: basic shared codebook operations
- last mod: $Id$
+ last mod: $Id: codebook.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_CODEBOOK_H_
 #define _V_CODEBOOK_H_
 
 #include <ogg/ogg.h>
 
@@ -35,17 +35,17 @@
 
 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 
+                            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 */
 
@@ -66,25 +66,25 @@ typedef struct static_codebook{
 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;       
+  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; 
+  int     quantvals;
+  int     threshvals;
 } encode_aux_threshmatch;
 
 typedef struct encode_aux_pigeonhole{
   float min;
   float del;
 
   int  mapentries;
   int  quantvals;
@@ -100,17 +100,17 @@ 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 */  
+  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;
 
@@ -136,25 +136,25 @@ extern long vorbis_book_codelen(codebook
 
 
 
 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, 
+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, 
+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, 
+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, 
+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, 
+                                     long off,int ch,
                                     oggpack_buffer *b,int n);
 
 
 
 #endif
--- a/media/libvorbis/lib/codec_internal.h
+++ b/media/libvorbis/lib/codec_internal.h
@@ -1,46 +1,46 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: libvorbis codec headers
- last mod: $Id$
+ last mod: $Id: codec_internal.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_CODECI_H_
 #define _V_CODECI_H_
 
 #include "envelope.h"
 #include "codebook.h"
 
 #define BLOCKTYPE_IMPULSE    0
 #define BLOCKTYPE_PADDING    1
-#define BLOCKTYPE_TRANSITION 0 
+#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  **pcmdelay;  /* this is a pointer into local storage */
   float  ampmax;
   int    blocktype;
 
-  oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed; 
+  oggpack_buffer *packetblob[PACKETBLOBS]; /* initialized, must be freed;
                                               blob [PACKETBLOBS/2] points to
-                                              the oggpack_buffer in the 
+                                              the oggpack_buffer in the
                                               main vorbis_block */
 } vorbis_block_internal;
 
 typedef void vorbis_look_floor;
 typedef void vorbis_look_residue;
 typedef void vorbis_look_transform;
 
 /* mode ************************************************************/
@@ -55,17 +55,17 @@ typedef void vorbis_info_floor;
 typedef void vorbis_info_residue;
 typedef void vorbis_info_mapping;
 
 #include "psy.h"
 #include "bitrate.h"
 
 typedef struct private_state {
   /* local lookup storage */
-  envelope_lookup        *ve; /* envelope lookup */    
+  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;
@@ -82,17 +82,17 @@ typedef struct private_state {
   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).  
+   etc).
 *********************************************************************/
 
 #include "highlevel.h"
 typedef struct codec_setup_info {
 
   /* Vorbis supports only short and long blocks, but allows the
      encoder to choose the sizes */
 
@@ -122,29 +122,29 @@ typedef struct codec_setup_info {
 
   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 */  
+  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);
 
 
 
 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;
 
@@ -160,9 +160,8 @@ extern int *floor1_fit(vorbis_block *vb,
                           const float *logmask);
 extern int *floor1_interpolate_fit(vorbis_block *vb,vorbis_look_floor1 *look,
                           int *A,int *B,
                           int del);
 extern int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
                   vorbis_look_floor1 *look,
                   int *post,int *ilogmask);
 #endif
-
--- a/media/libvorbis/lib/envelope.h
+++ b/media/libvorbis/lib/envelope.h
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: PCM data envelope analysis and manipulation
- last mod: $Id$
+ last mod: $Id: envelope.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_ENVELOPE_
 #define _V_ENVELOPE_
 
 #include "mdct.h"
 
@@ -73,9 +73,8 @@ typedef struct {
 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);
 
 
 #endif
-
--- a/media/libvorbis/lib/highlevel.h
+++ b/media/libvorbis/lib/highlevel.h
@@ -1,57 +1,56 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: highlevel encoder setup struct seperated out for vorbisenc clarity
- last mod: $Id$
+ last mod: $Id: highlevel.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 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 {
   const 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;
   double bitrate_av_damp;
   long   bitrate_max;
   long   bitrate_reservoir;
   double bitrate_reservoir_bias;
-  
+
   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;
-
--- a/media/libvorbis/lib/lookup.h
+++ b/media/libvorbis/lib/lookup.h
@@ -1,32 +1,32 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
   function: lookup based functions
-  last mod: $Id$
+  last mod: $Id: lookup.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_LOOKUP_H_
 
 #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 
+#endif
 
 #endif
--- a/media/libvorbis/lib/lookup_data.h
+++ b/media/libvorbis/lib/lookup_data.h
@@ -6,17 +6,17 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
   function: lookup data; generated by lookups.pl; edit there
-  last mod: $Id$
+  last mod: $Id: lookup_data.h 16037 2009-05-26 21:10:58Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_LOOKUP_DATA_H_
 
 #ifdef FLOAT_LOOKUP
 #define COS_LOOKUP_SZ 128
 static const float COS_LOOKUP[COS_LOOKUP_SZ+1]={
--- a/media/libvorbis/lib/lpc.h
+++ b/media/libvorbis/lib/lpc.h
@@ -6,17 +6,17 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
   function: LPC low level routines
-  last mod: $Id$
+  last mod: $Id: lpc.h 16037 2009-05-26 21:10:58Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_LPC_H_
 #define _V_LPC_H_
 
 #include "vorbis/codec.h"
 
--- a/media/libvorbis/lib/lsp.h
+++ b/media/libvorbis/lib/lsp.h
@@ -1,28 +1,28 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
   function: LSP (also called LSF) conversion routines
-  last mod: $Id$
+  last mod: $Id: lsp.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 
 #ifndef _V_LSP_H_
 #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);
-  
+
 #endif
--- a/media/libvorbis/lib/masking.h
+++ b/media/libvorbis/lib/masking.h
@@ -1,38 +1,38 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: masking curve data for psychoacoustics
- last mod: $Id$
+ last mod: $Id: masking.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_MASKING_H_
 #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 const float ATH[]={
-  /*15*/  -51, -52, -53, -54, -55, -56, -57, -58,  
+  /*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, 
+  /*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, 
+  /*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
 };
 
@@ -45,741 +45,741 @@ static const float ATH[]={
 
 /* 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 const 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, 
+  {{ -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, 
+   { -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, 
+   { -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, 
+   { -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, 
+   { -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}}, 
+   {  -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, 
+  {{ -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, 
+   { -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, 
+   { -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, 
+   { -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}}, 
+   {  -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}}, 
+  {{ -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}}, 
+  {{-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}}, 
+  {{-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}}, 
+  {{-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}}, 
+  {{-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}}, 
+  {{-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}}, 
+  {{-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}}, 
+  {{-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}}, 
+  {{-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}}, 
+  {{-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, -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, -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}}, 
+   {-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}}, 
+  {{-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}}, 
+  {{-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}}, 
+  {{-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,
+    -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}}
-}; 
+};
 
 #endif
--- a/media/libvorbis/lib/mdct.h
+++ b/media/libvorbis/lib/mdct.h
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: modified discrete cosine transform prototypes
- last mod: $Id$
+ last mod: $Id: mdct.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _OGG_mdct_H_
 #define _OGG_mdct_H_
 
 #include "vorbis/codec.h"
 
@@ -51,33 +51,21 @@
 #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);
 
 #endif
-
-
-
-
-
-
-
-
-
-
-
-
--- a/media/libvorbis/lib/misc.h
+++ b/media/libvorbis/lib/misc.h
@@ -1,44 +1,48 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: miscellaneous prototypes
- last mod: $Id$
+ last mod: $Id: misc.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_RANDOM_H_
 #define _V_RANDOM_H_
 #include "vorbis/codec.h"
 
-extern int analysis_noisy;
-
 extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
 extern void _vorbis_block_ripcord(vorbis_block *vb);
+
+#ifdef ANALYSIS
+extern int analysis_noisy;
 extern void _analysis_output(char *base,int i,float *v,int n,int bark,int dB,
                              ogg_int64_t off);
+extern void _analysis_output_always(char *base,int i,float *v,int n,int bark,int dB,
+                             ogg_int64_t off);
+#endif
 
 #ifdef DEBUG_MALLOC
 
 #define _VDBG_GRAPHFILE "malloc.m"
 #undef _VDBG_GRAPHFILE
-extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line); 
-extern void _VDBG_free(void *ptr,char *file,long line); 
+extern void *_VDBG_malloc(void *ptr,long bytes,char *file,long line);
+extern void _VDBG_free(void *ptr,char *file,long line);
 
-#ifndef MISC_C 
+#ifndef MISC_C
 #undef _ogg_malloc
 #undef _ogg_calloc
 #undef _ogg_realloc
 #undef _ogg_free
 
 #define _ogg_malloc(x) _VDBG_malloc(NULL,(x),__FILE__,__LINE__)
 #define _ogg_calloc(x,y) _VDBG_malloc(NULL,(x)*(y),__FILE__,__LINE__)
 #define _ogg_realloc(x,y) _VDBG_malloc((x),(y),__FILE__,__LINE__)
--- a/media/libvorbis/lib/os.h
+++ b/media/libvorbis/lib/os.h
@@ -2,23 +2,23 @@
 #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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: #ifdef jail to whip a few platforms into the UNIX ideal.
- last mod: $Id$
+ last mod: $Id: os.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
 #include <math.h>
@@ -46,17 +46,17 @@
 #endif
 
 #ifndef M_PI
 #  define M_PI (3.1415926536f)
 #endif
 
 #if defined(_WIN32) && !defined(__SYMBIAN32__)
 #  include <malloc.h>
-#  define rint(x)   (floor((x)+0.5f)) 
+#  define rint(x)   (floor((x)+0.5f))
 #  define NO_FLOAT_MATH_LIB
 #  define FAST_HYPOT(a, b) sqrt((a)*(a) + (b)*(b))
 #endif
 
 #if defined(__SYMBIAN32__) && defined(__WINS__)
 void *_alloca(size_t size);
 #  define alloca _alloca
 #endif
@@ -96,17 +96,17 @@ void *_alloca(size_t size);
 
 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"
+          "andw $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));
 }
--- a/media/libvorbis/lib/psy.h
+++ b/media/libvorbis/lib/psy.h
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: random psychoacoustics (not including preecho)
- last mod: $Id$
+ last mod: $Id: psy.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_PSY_H_
 #define _V_PSY_H_
 #include "smallft.h"
 
 #include "backends.h"
@@ -71,30 +71,30 @@ typedef struct{
   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];  
+  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];  
+  int   coupling_pointlimit[2][P_NOISECURVES];
 } vorbis_look_psy_global;
 
 
 typedef struct {
   int n;
   struct vorbis_info_psy *vi;
 
   float ***tonecurves;
@@ -102,17 +102,17 @@ typedef struct {
 
   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;  
+  int   total_octave_lines;
   long  rate; /* cache it */
 
   float m_val; /* Masking compensation value */
 
 } 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);
@@ -124,17 +124,17 @@ extern vorbis_info_psy *_vi_psy_copy(vor
 
 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 *logmdct,
                           float *logmask);
 
 extern void _vp_tonemask(vorbis_look_psy *p,
                          float *logfft,
                          float *logmask,
                          float global_specmax,
                          float local_specmax);
 
@@ -178,9 +178,8 @@ extern int **_vp_quantize_couple_sort(vo
 
 extern void hf_reduction(vorbis_info_psy_global *g,
                          vorbis_look_psy *p,
                          vorbis_info_mapping0 *vi,
                          float **mdct);
 
 
 #endif
-
--- a/media/libvorbis/lib/registry.h
+++ b/media/libvorbis/lib/registry.h
@@ -6,17 +6,17 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: registry for time, floor, res backends and channel mappings
- last mod: $Id$
+ last mod: $Id: registry.h 15531 2008-11-24 23:50:06Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_REG_H_
 #define _V_REG_H_
 
 #define VI_TRANSFORMB 1
 #define VI_WINDOWB 1
--- a/media/libvorbis/lib/scales.h
+++ b/media/libvorbis/lib/scales.h
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: linear scale -> dB, Bark and Mel scales
- last mod: $Id$
+ last mod: $Id: scales.h 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_SCALES_H_
 #define _V_SCALES_H_
 
 #include <math.h>
 #include "os.h"
@@ -58,19 +58,19 @@ static inline float todB(const float *x)
 static float unitnorm(float x){
   if(x<0)return(-1.f);
   return(1.f);
 }
 
 #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 
+#endif
 
-#define fromdB(x) (exp((x)*.11512925f))  
+#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.
 
@@ -83,9 +83,8 @@ static float unitnorm(float x){
 
 /* 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))
 
 #endif
-
--- a/media/libvorbis/lib/smallft.h
+++ b/media/libvorbis/lib/smallft.h
@@ -6,17 +6,17 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: fft transform
- last mod: $Id$
+ last mod: $Id: smallft.h 13293 2007-07-24 00:09:47Z xiphmont $
 
  ********************************************************************/
 
 #ifndef _V_SMFT_H_
 #define _V_SMFT_H_
 
 #include "vorbis/codec.h"
 
--- a/media/libvorbis/lib/vorbis_analysis.c
+++ b/media/libvorbis/lib/vorbis_analysis.c
@@ -6,118 +6,115 @@
  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
  *                                                                  *
  * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: single-block PCM analysis mode dispatch
- last mod: $Id$
+ last mod: $Id: analysis.c 16226 2009-07-08 06:43:49Z xiphmont $
 
  ********************************************************************/
 
 #include <stdio.h>
 #include <string.h>
 #include <math.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
 #include "codec_internal.h"
 #include "registry.h"
 #include "scales.h"
 #include "os.h"
 #include "misc.h"
 
-int analysis_noisy=1;
-
 /* decides between modes, dispatches to the appropriate mapping. */
 int vorbis_analysis(vorbis_block *vb, ogg_packet *op){
   int ret,i;
   vorbis_block_internal *vbi=vb->internal;
 
   vb->glue_bits=0;
   vb->time_bits=0;
   vb->floor_bits=0;
   vb->res_bits=0;
 
   /* first things first.  Make sure encode is ready */
   for(i=0;i<PACKETBLOBS;i++)
     oggpack_reset(vbi->packetblob[i]);
-  
+
   /* 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);
 }
 
+#ifdef ANALYSIS
+int analysis_noisy=1;
+
 /* 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){
-#if 0
   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]);
-      }
+  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);
-    /*  } */
-#endif
+  }
+  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);
 }
 
+#endif
+
 
 
 
 
 
 
 
 
 
 
-
-
--- a/media/libvorbis/lib/vorbis_bitrate.c
+++ b/media/libvorbis/lib/vorbis_bitrate.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: bitrate tracking and management
- last mod: $Id$
+ last mod: $Id: bitrate.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
@@ -26,83 +26,83 @@
 #include "bitrate.h"
 
 /* compute bitrate tracking setup  */
 void vorbis_bitrate_init(vorbis_info *vi,bitrate_manager_state *bm){
   codec_setup_info *ci=vi->codec_setup;
   bitrate_manager_info *bi=&ci->bi;
 
   memset(bm,0,sizeof(*bm));
-  
+
   if(bi && (bi->reservoir_bits>0)){
     long ratesamples=vi->rate;
     int  halfsamples=ci->blocksizes[0]>>1;
 
     bm->short_per_long=ci->blocksizes[1]/ci->blocksizes[0];
     bm->managed=1;
 
     bm->avg_bitsper= rint(1.*bi->avg_rate*halfsamples/ratesamples);
     bm->min_bitsper= rint(1.*bi->min_rate*halfsamples/ratesamples);
     bm->max_bitsper= rint(1.*bi->max_rate*halfsamples/ratesamples);
-    
-    bm->avgfloat=PACKETBLOBS/2;    
+
+    bm->avgfloat=PACKETBLOBS/2;
 
     /* not a necessary fix, but one that leads to a more balanced
        typical initialization */
     {
       long desired_fill=bi->reservoir_bits*bi->reservoir_bias;
       bm->minmax_reservoir=desired_fill;
       bm->avg_reservoir=desired_fill;
     }
 
-  }    
+  }
 }
 
 void vorbis_bitrate_clear(bitrate_manager_state *bm){
   memset(bm,0,sizeof(*bm));
   return;
 }
 
 int vorbis_bitrate_managed(vorbis_block *vb){
   vorbis_dsp_state      *vd=vb->vd;
-  private_state         *b=vd->backend_state; 
+  private_state         *b=vd->backend_state;
   bitrate_manager_state *bm=&b->bms;
 
   if(bm && bm->managed)return(1);
   return(0);
 }
 
 /* finish taking in the block we just processed */
 int vorbis_bitrate_addblock(vorbis_block *vb){
   vorbis_block_internal *vbi=vb->internal;
   vorbis_dsp_state      *vd=vb->vd;
-  private_state         *b=vd->backend_state; 
+  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  choice=rint(bm->avgfloat);
   long this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
   long min_target_bits=(vb->W?bm->min_bitsper*bm->short_per_long:bm->min_bitsper);
   long max_target_bits=(vb->W?bm->max_bitsper*bm->short_per_long:bm->max_bitsper);
   int  samples=ci->blocksizes[vb->W]>>1;
   long desired_fill=bi->reservoir_bits*bi->reservoir_bias;
   if(!bm->managed){
     /* not a bitrate managed stream, but for API simplicity, we'll
        buffer the packet to keep the code path clean */
-    
+
     if(bm->vb)return(-1); /* one has been submitted without
                              being claimed */
     bm->vb=vb;
     return(0);
   }
 
   bm->vb=vb;
-  
+
   /* look ahead for avg floater */
   if(bm->avg_bitsper>0){
     double slew=0.;
     long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper);
     double slewlimit= 15./bi->slew_damp;
 
     /* choosing a new floater:
        if we're over target, we slew down
@@ -144,17 +144,17 @@ int vorbis_bitrate_addblock(vorbis_block
     if(this_bits<min_target_bits){
       while(bm->minmax_reservoir-(min_target_bits-this_bits)<0){
         choice++;
         if(choice>=PACKETBLOBS)break;
         this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
       }
     }
   }
-  
+
   /* enforce max (if used) on the current floater (if used) */
   if(bm->max_bitsper>0){
     /* do we need to force the bitrate down? */
     if(this_bits>max_target_bits){
       while(bm->minmax_reservoir+(this_bits-max_target_bits)>bi->reservoir_bits){
         choice--;
         if(choice<0)break;
         this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
@@ -165,19 +165,19 @@ int vorbis_bitrate_addblock(vorbis_block
   /* Choice of packetblobs now made based on floater, and min/max
      requirements. Now boundary check extreme choices */
 
   if(choice<0){
     /* choosing a smaller packetblob is insufficient to trim bitrate.
        frame will need to be truncated */
     long maxsize=(max_target_bits+(bi->reservoir_bits-bm->minmax_reservoir))/8;
     bm->choice=choice=0;
-    
+
     if(oggpack_bytes(vbi->packetblob[choice])>maxsize){
-      
+
       oggpack_writetrunc(vbi->packetblob[choice],maxsize*8);
       this_bits=oggpack_bytes(vbi->packetblob[choice])*8;
     }
   }else{
     long minsize=(min_target_bits-bm->minmax_reservoir+7)/8;
     if(choice>=PACKETBLOBS)
       choice=PACKETBLOBS-1;
 
@@ -215,39 +215,39 @@ int vorbis_bitrate_addblock(vorbis_block
           bm->minmax_reservoir=desired_fill;
         }
       }
     }
   }
 
   /* avg reservoir */
   if(bm->avg_bitsper>0){
-    long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper);    
+    long avg_target_bits=(vb->W?bm->avg_bitsper*bm->short_per_long:bm->avg_bitsper);
     bm->avg_reservoir+=this_bits-avg_target_bits;
   }
 
   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;
   vorbis_block          *vb=bm->vb;
   int                    choice=PACKETBLOBS/2;
   if(!vb)return 0;
 
   if(op){
     vorbis_block_internal *vbi=vb->internal;
-    
+
     if(vorbis_bitrate_managed(vb))
       choice=bm->choice;
 
     op->packet=oggpack_get_buffer(vbi->packetblob[choice]);
     op->bytes=oggpack_bytes(vbi->packetblob[choice]);
     op->b_o_s=0;
     op->e_o_s=vb->eofflag;
     op->granulepos=vb->granulepos;
     op->packetno=vb->sequence; /* for sake of completeness */
   }
-  
+
   bm->vb=0;
   return(1);
 }
--- a/media/libvorbis/lib/vorbis_block.c
+++ b/media/libvorbis/lib/vorbis_block.c
@@ -1,26 +1,26 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: PCM data vector blocking, windowing and dis/reassembly
- last mod: $Id$
+ last mod: $Id: block.c 16330 2009-07-24 01:58:50Z xiphmont $
 
  Handle windowing, overlap-add, etc of the PCM vectors.  This is made
  more amusing by Vorbis' current two allowed block sizes.
- 
+
  ********************************************************************/
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
 #include "codec_internal.h"
@@ -45,38 +45,38 @@ static int ilog2(unsigned int v){
 
  <-------------- lW ---------------->
                    <--------------- W ---------------->
 :            .....|.....       _______________         |
 :        .'''     |     '''_---      |       |\        |
 :.....'''         |_____--- '''......|       | \_______|
 :.................|__________________|_______|__|______|
                   |<------ Sl ------>|      > Sr <     |endW
-                  |beginSl           |endSl  |  |endSr   
+                  |beginSl           |endSl  |  |endSr
                   |beginW            |endlW  |beginSr
 
 
-                      |< lW >|       
+                      |< lW >|
                    <--------------- W ---------------->
                   |   |  ..  ______________            |
                   |   | '  `/        |     ---_        |
-                  |___.'___/`.       |         ---_____| 
+                  |___.'___/`.       |         ---_____|
                   |_______|__|_______|_________________|
                   |      >|Sl|<      |<------ Sr ----->|endW
                   |       |  |endSl  |beginSr          |endSr
-                  |beginW |  |endlW                     
+                  |beginW |  |endlW
                   mult[0] |beginSl                     mult[n]
 
  <-------------- lW ----------------->
-                          |<--W-->|                               
-:            ..............  ___  |   |                    
-:        .'''             |`/   \ |   |                       
-:.....'''                 |/`....\|...|                    
-:.........................|___|___|___|                  
-                          |Sl |Sr |endW    
+                          |<--W-->|
+:            ..............  ___  |   |
+:        .'''             |`/   \ |   |
+:.....'''                 |/`....\|...|
+:.........................|___|___|___|
+                          |Sl |Sr |endW
                           |   |   |endSr
                           |   |beginSr
                           |   |endSl
                           |beginSl
                           |beginW
 */
 
 /* block abstraction setup *********************************************/
@@ -97,17 +97,17 @@ int vorbis_block_init(vorbis_dsp_state *
     for(i=0;i<PACKETBLOBS;i++){
       if(i==PACKETBLOBS/2){
         vbi->packetblob[i]=&vb->opb;
       }else{
         vbi->packetblob[i]=
           _ogg_calloc(1,sizeof(oggpack_buffer));
       }
       oggpack_writeinit(vbi->packetblob[i]);
-    }    
+    }
   }
 
   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){
@@ -178,17 +178,17 @@ int vorbis_block_clear(vorbis_block *vb)
 
 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; 
+  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]));
@@ -225,25 +225,26 @@ static int _vds_shared_init(vorbis_dsp_s
                    &ci->psy_g_param,
                    ci->blocksizes[ci->psy_param[i]->blockflag]/2,
                    vi->rate);
     }
 
     v->analysisp=1;
   }else{
     /* finish the codebooks */
-    if(!ci->fullbooks){
+    if(!ci->fullbooks)
       ci->fullbooks=_ogg_calloc(ci->books,sizeof(*ci->fullbooks));
-      for(i=0;i<ci->books;i++){
-        if(vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]))
-          return -1;
+    for(i=0;i<ci->books;i++){
+      if(ci->book_param[i]==NULL)
+        goto abort_books;
+      if(vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]))
+        goto abort_books;
         /* decode codebooks are now standalone after init */
-        vorbis_staticbook_destroy(ci->book_param[i]);
-        ci->book_param[i]=NULL;
-      }
+      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));
@@ -268,19 +269,28 @@ static int _vds_shared_init(vorbis_dsp_s
   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]);    
+      look(v,ci->residue_param[i]);
 
   return 0;
+ abort_books:
+  for(i=0;i<ci->books;i++){
+    if(ci->book_param[i]!=NULL){
+      vorbis_staticbook_destroy(ci->book_param[i]);
+      ci->book_param[i]=NULL;
+    }
+  }
+  vorbis_dsp_clear(v);
+  return -1;
 }
 
 /* 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;
@@ -306,17 +316,17 @@ void vorbis_dsp_init(vorbis_dsp_state *v
 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]);
@@ -351,92 +361,92 @@ void vorbis_dsp_clear(vorbis_dsp_state *
 
       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){
       if(vi)
         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=16;
   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);
 
 #if 0
       if(v->vi->channels==2){
         if(i==0)
           _analysis_output("predataL",0,work,v->pcm_current-v->centerW,0,0,0);
         else
           _analysis_output("predataR",0,work,v->pcm_current-v->centerW,0,0,0);
       }else{
         _analysis_output("predata",0,work,v->pcm_current-v->centerW,0,0,0);
       }
-#endif 
- 
+#endif
+
       /* 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];
@@ -462,17 +472,17 @@ int vorbis_analysis_wrote(vorbis_dsp_sta
       _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); 
+    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;
 
@@ -529,17 +539,17 @@ int vorbis_analysis_blockout(vorbis_dsp_
 
   /* 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{
 
@@ -561,17 +571,17 @@ int vorbis_analysis_blockout(vorbis_dsp_
                                                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;
 
@@ -589,45 +599,45 @@ int vorbis_analysis_blockout(vorbis_dsp_
       /*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 
+
+    /* 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;
@@ -639,26 +649,26 @@ int vorbis_analysis_blockout(vorbis_dsp_
   {
     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;
@@ -677,21 +687,21 @@ int vorbis_synthesis_restart(vorbis_dsp_
   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; 
+  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);
 }
@@ -708,60 +718,60 @@ int vorbis_synthesis_init(vorbis_dsp_sta
 /* 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 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 
+
+  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];
@@ -789,115 +799,115 @@ int vorbis_synthesis_blockin(vorbis_dsp_
           /* 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){
@@ -920,18 +930,18 @@ int vorbis_synthesis_read(vorbis_dsp_sta
 /* 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 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
@@ -955,17 +965,17 @@ int vorbis_synthesis_lapout(vorbis_dsp_s
         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];
@@ -980,30 +990,29 @@ int vorbis_synthesis_lapout(vorbis_dsp_s
         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; 
+  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);
 }
-        
--- a/media/libvorbis/lib/vorbis_codebook.c
+++ b/media/libvorbis/lib/vorbis_codebook.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: basic codebook pack/unpack/code/decode operations
- last mod: $Id$
+ last mod: $Id: codebook.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
@@ -33,21 +33,21 @@ int vorbis_staticbook_pack(const static_
 
   /* 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 */
@@ -58,22 +58,22 @@ int vorbis_staticbook_pack(const static_
       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 */
@@ -97,28 +97,28 @@ int vorbis_staticbook_pack(const static_
   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;
@@ -182,17 +182,17 @@ int vorbis_staticbook_unpack(oggpack_buf
     }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;){
@@ -203,61 +203,62 @@ int vorbis_staticbook_unpack(oggpack_buf
         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);
+    if(s->q_sequencep==-1)goto _eofout;
 
     {
       int quantvals=0;
       switch(s->maptype){
       case 1:
         quantvals=(s->dim==0?0:_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); 
+  return(-1);
 }
 
 /* returns the number of bits ************************************************/
 int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b){
   if(a<0 || a>=book->c->entries)return(0);
   oggpack_write(b,book->codelist[a],book->c->lengthlist[a]);
   return(book->c->lengthlist[a]);
 }
@@ -308,69 +309,69 @@ static ogg_uint32_t bitreverse(ogg_uint3
   x=    ((x>> 2)&0x33333333) | ((x<< 2)&0xcccccccc);
   return((x>> 1)&0x55555555) | ((x<< 1)&0xaaaaaaaa);
 }
 
 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;    
+      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.  
+   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){
   if(book->used_entries>0){
     long packed_entry=decode_packed_entry_number(book,b);
@@ -384,34 +385,34 @@ long vorbis_book_decode(codebook *book, 
 
 /* returns 0 on OK or -1 on eof *************************************/
 long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,int n){
   if(book->used_entries>0){
     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){
   if(book->used_entries>0){
     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++];
       }
@@ -437,36 +438,36 @@ long vorbis_book_decodev_add(codebook *b
         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){
   if(book->used_entries>0){
     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++];
     }
   }else{
     int i,j;
-    
+
     for(i=0;i<n;){
       for (j=0;j<book->dim;)
         a[i++]=0.f;
     }
   }
   return(0);
 }
 
@@ -568,17 +569,17 @@ static_codebook *testlist[]={&_vq_book_l
                              &_vq_book_res0a_13,NULL};
 float   *testvec[]={test1,test3};
 
 int main(){
   oggpack_buffer write;
   oggpack_buffer read;
   long ptr=0,i;
   oggpack_writeinit(&write);
-  
+
   fprintf(stderr,"Testing codebook abstraction...:\n");
 
   while(testlist[ptr]){
     codebook c;
     static_codebook s;
     float *qv=alloca(sizeof(*qv)*TESTSIZE);
     float *iv=alloca(sizeof(*iv)*TESTSIZE);
     memcpy(qv,testvec[ptr],sizeof(*qv)*TESTSIZE);
@@ -592,17 +593,17 @@ int main(){
                                                   we can write */
     vorbis_staticbook_pack(testlist[ptr],&write);
     fprintf(stderr,"Codebook size %ld bytes... ",oggpack_bytes(&write));
     for(i=0;i<TESTSIZE;i+=c.dim){
       int best=_best(&c,qv+i,1);
       vorbis_book_encodev(&c,best,qv+i,&write);
     }
     vorbis_book_clear(&c);
-    
+
     fprintf(stderr,"OK.\n");
     fprintf(stderr,"\tunpacking/decoding %ld... ",ptr);
 
     /* transfer the write data to a read buffer and unpack/read */
     oggpack_readinit(&read,oggpack_get_buffer(&write),oggpack_bytes(&write));
     if(vorbis_staticbook_unpack(&read,&s)){
       fprintf(stderr,"Error unpacking codebook.\n");
       exit(1);
@@ -618,17 +619,17 @@ int main(){
         exit(1);
       }
     for(i=0;i<TESTSIZE;i++)
       if(fabs(qv[i]-iv[i])>.000001){
         fprintf(stderr,"read (%g) != written (%g) at position (%ld)\n",
                 iv[i],qv[i],i);
         exit(1);
       }
-          
+
     fprintf(stderr,"OK\n");
     ptr++;
   }
 
   /* The above is the trivial stuff; now try unquantizing a log scale codebook */
 
   exit(0);
 }
--- a/media/libvorbis/lib/vorbis_envelope.c
+++ b/media/libvorbis/lib/vorbis_envelope.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
- function: PCM data envelope analysis 
- last mod: $Id$
+ function: PCM data envelope analysis
+ last mod: $Id: envelope.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <string.h>
 #include <stdio.h>
 #include <math.h>
 #include <ogg/ogg.h>
@@ -62,17 +62,17 @@ void _ve_envelope_init(envelope_lookup *
     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);
@@ -105,25 +105,25 @@ static int _ve_amp(envelope_lookup *ve,
   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;
 
@@ -139,77 +139,77 @@ static int _ve_amp(envelope_lookup *ve,
     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
 
@@ -231,17 +231,17 @@ long _ve_envelope_search(vorbis_dsp_stat
   }
 
   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);
     }
 
     ve->mark[j+VE_POST]=0;
     if(ret&1){
       ve->mark[j]=1;
@@ -260,23 +260,23 @@ long _ve_envelope_search(vorbis_dsp_stat
 
   {
     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));
@@ -286,49 +286,49 @@ long _ve_envelope_search(vorbis_dsp_stat
                     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;
@@ -354,28 +354,22 @@ int _ve_envelope_mark(vorbis_dsp_state *
 }
 
 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 
+#endif
 
   e->current-=shift;
   if(e->curmark>=0)
     e->curmark-=shift;
   e->cursor-=shift;
 }
-
-
-
-
-
-
--- a/media/libvorbis/lib/vorbis_floor0.c
+++ b/media/libvorbis/lib/vorbis_floor0.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: floor backend 0 implementation
- last mod: $Id$
+ last mod: $Id: floor0.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
@@ -77,22 +77,22 @@ static vorbis_info_floor *floor0_unpack 
 
   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);
@@ -117,26 +117,26 @@ static void floor0_map_lazy_init(vorbis_
     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) 
+      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;
   }
 }
@@ -159,47 +159,47 @@ static void *floor0_inverse1(vorbis_bloc
   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,
@@ -213,11 +213,8 @@ static int floor0_inverse2(vorbis_block 
   return(0);
 }
 
 /* export hooks */
 const vorbis_func_floor floor0_exportbundle={
   NULL,&floor0_unpack,&floor0_look,&floor0_free_info,
   &floor0_free_look,&floor0_inverse1,&floor0_inverse2
 };
-
-
-
--- a/media/libvorbis/lib/vorbis_floor1.c
+++ b/media/libvorbis/lib/vorbis_floor1.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: floor backend 1 implementation
- last mod: $Id$
+ last mod: $Id: floor1.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
@@ -33,22 +33,22 @@
 typedef struct lsfit_acc{
   long x0;
   long x1;
 
   long xa;
   long ya;
   long x2a;
   long y2a;
-  long xya; 
+  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);
   }
 }
 
@@ -104,22 +104,22 @@ static void floor1_pack (vorbis_info_flo
     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,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]]; 
+    count+=info->class_dim[info->partitionclass[j]];
     for(;k<count;k++)
       oggpack_write(opb,info->postlist[k+2],rangebits);
   }
 }
 
 static int icomp(const void *a,const void *b){
   return(**(int **)a-**(int **)b);
 }
@@ -128,16 +128,17 @@ static vorbis_info_floor *floor1_unpack 
   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(info->partitionclass[j]<0)goto err_out;
     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)
@@ -148,21 +149,22 @@ static vorbis_info_floor *floor1_unpack 
     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 */ 
+  info->mult=oggpack_read(opb,2)+1;     /* only 1,2,3,4 legal now */
   rangebits=oggpack_read(opb,4);
+  if(rangebits<0)goto err_out;
 
   for(j=0,k=0;j<info->partitions;j++){
-    count+=info->class_dim[info->partitionclass[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;
@@ -190,17 +192,17 @@ static vorbis_look_floor *floor1_look(vo
 
   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]];
@@ -279,80 +281,80 @@ static int render_point(int x0,int x1,in
 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 const 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, 
+  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 n, 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);
@@ -507,17 +509,17 @@ static int fit_line(lsfit_acc *a,int fit
       *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;
-      
+
       return 0;
     }else{
       *y0=0;
       *y1=0;
       return 1;
     }
   }
 }
@@ -600,17 +602,17 @@ int *floor1_fit(vorbis_block *vb,vorbis_
   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 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 */
@@ -620,17 +622,17 @@ int *floor1_fit(vorbis_block *vb,vorbis_
   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;
@@ -647,21 +649,21 @@ int *floor1_fit(vorbis_block *vb,vorbis_
       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 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)){
@@ -688,17 +690,17 @@ int *floor1_fit(vorbis_block *vb,vorbis_
             }else{
               /* 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++)
@@ -730,28 +732,28 @@ int *floor1_fit(vorbis_block *vb,vorbis_
       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){ 
+      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;
 
@@ -818,36 +820,36 @@ int floor1_encode(oggpack_buffer *opb,vo
 
       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 */
@@ -891,30 +893,30 @@ int floor1_encode(oggpack_buffer *opb,vo
             }
           }
           cval|= bookas[k]<<cshift;
           cshift+=csubbits;
         }
         /* write it */
         look->phrasebits+=
           vorbis_book_encode(books+info->class_book[class],cval,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],opb);
@@ -945,19 +947,19 @@ int floor1_encode(oggpack_buffer *opb,vo
       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 */
       return(1);
     }
   }else{
@@ -1039,17 +1041,17 @@ static void *floor1_inverse1(vorbis_bloc
 
         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);
 }
 
@@ -1067,22 +1069,22 @@ static int floor1_inverse2(vorbis_block 
     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(n,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);
--- a/media/libvorbis/lib/vorbis_info.c
+++ b/media/libvorbis/lib/vorbis_info.c
@@ -1,44 +1,43 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: maintain the info structure, info <-> header packets
- last mod: $Id$
+ last mod: $Id: info.c 16243 2009-07-10 02:49:31Z xiphmont $
 
  ********************************************************************/
 
 /* general handling of the header and the vorbis_info structure (and
    substructures) */
 
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
-#include <limits.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
 #include "codec_internal.h"
 #include "codebook.h"
 #include "registry.h"
 #include "window.h"
 #include "psy.h"
 #include "misc.h"
 #include "os.h"
 
-#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.2.2"
-#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20090624"
+#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.2.3"
+#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20090709"
 
 /* helpers */
 static int ilog2(unsigned int v){
   int ret=0;
   if(v)--v;
   while(v){
     ret++;
     v>>=1;
@@ -98,17 +97,17 @@ static int tagcompare(const char *s1, co
 char *vorbis_comment_query(vorbis_comment *vc, const 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++;
     }
@@ -173,34 +172,34 @@ void vorbis_info_clear(vorbis_info *vi){
                               cannot be trusted */
         _mapping_P[ci->map_type[i]]->free_info(ci->map_param[i]);
 
     for(i=0;i<ci->floors;i++) /* unpack does the range checking */
       if(ci->floor_param[i]) /* this may be cleaning up an aborted
                                 unpack, in which case the below type
                                 cannot be trusted */
         _floor_P[ci->floor_type[i]]->free_info(ci->floor_param[i]);
-    
+
     for(i=0;i<ci->residues;i++) /* unpack does the range checking */
       if(ci->residue_param[i]) /* this may be cleaning up an aborted
                                   unpack, in which case the below type
                                   cannot be trusted */
         _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));
 }
@@ -218,53 +217,53 @@ static int _vorbis_unpack_info(vorbis_in
   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]<64)goto err_out; 
+  if(ci->blocksizes[0]<64)goto err_out;
   if(ci->blocksizes[1]<ci->blocksizes[0])goto err_out;
   if(ci->blocksizes[1]>8192)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;
-  if(vendorlen+8>opb->storage)goto err_out;
+  if(vendorlen>opb->storage-8)goto err_out;
   vc->vendor=_ogg_calloc(vendorlen+1,1);
   _v_readstring(opb,vc->vendor,vendorlen);
   i=oggpack_read(opb,32);
   if(i<0)goto err_out;
-  if(4*i+oggpack_bytes(opb)>opb->storage)goto err_out;
+  if(i>((opb->storage-oggpack_bytes(opb))>>2))goto err_out;
   vc->comments=i;
   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;
-    if(len+oggpack_bytes(opb)>opb->storage)goto err_out;
+    if(len>opb->storage-oggpack_bytes(opb))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);
 }
 
@@ -272,79 +271,78 @@ static int _vorbis_unpack_comment(vorbis
    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));*/
+  if(ci->books<=0)goto err_out;
   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;
+    if(times<=0)goto err_out;
     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 *));*/
+  if(ci->floors<=0)goto err_out;
   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 *));*/
+  if(ci->residues<=0)goto err_out;
   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 *));*/
+  if(ci->maps<=0)goto err_out;
   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 *));*/
+  if(ci->modes<=0)goto err_out;
   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(ci->mode_param[i]->mapping<0)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);
 }
 
@@ -375,17 +373,17 @@ int vorbis_synthesis_idheader(ogg_packet
 
 /* 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);
@@ -435,17 +433,17 @@ int vorbis_synthesis_headerin(vorbis_inf
 }
 
 /* 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 */  
+  /* 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);
 
@@ -458,17 +456,17 @@ static int _vorbis_pack_info(oggpack_buf
   oggpack_write(opb,1,1);
 
   return(0);
 }
 
 static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc){
   int bytes = strlen(ENCODE_VENDOR_STRING);
 
-  /* preamble */  
+  /* preamble */
   oggpack_write(opb,0x03,8);
   _v_writestring(opb,"vorbis", 6);
 
   /* vendor */
   oggpack_write(opb,bytes,32);
   _v_writestring(opb,ENCODE_VENDOR_STRING, bytes);
 
   /* comments */
@@ -484,17 +482,17 @@ static int _vorbis_pack_comment(oggpack_
         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);
 
@@ -539,17 +537,17 @@ static int _vorbis_pack_books(oggpack_bu
     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;
--- a/media/libvorbis/lib/vorbis_lookup.c
+++ b/media/libvorbis/lib/vorbis_lookup.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
   function: lookup based functions
-  last mod: $Id$
+  last mod: $Id: lookup.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <math.h>
 #include "lookup.h"
 #include "lookup_data.h"
 #include "os.h"
 #include "misc.h"
@@ -51,26 +51,26 @@ float vorbis_fromdBlook(float a){
     ((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 
+   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 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/media/libvorbis/lib/vorbis_lpc.c
+++ b/media/libvorbis/lib/vorbis_lpc.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
   function: LPC low level routines
-  last mod: $Id$
+  last mod: $Id: lpc.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 /* 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.  */
@@ -67,17 +67,17 @@ float vorbis_lpc_from_data(float *data,f
 
   /* 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 */
 
   /* set our noise floor to about -100dB */
   error=aut[0] * (1. + 1e-10);
   epsilon=1e-9*aut[0]+1e-10;
 
   for(i=0;i<m;i++){
     double r= -aut[i+1];
@@ -88,57 +88,57 @@ float vorbis_lpc_from_data(float *data,f
     }
 
     /* 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; 
+    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&1)lpc[j]+=lpc[j]*r;
 
     error*=1.-r*r;
 
   }
 
  done:
-   
-  /* slightly damp the filter */ 
+
+  /* slightly damp the filter */
   {
     double g = .99;
     double damp = g;
     for(j=0;j<m;j++){
       lpc[j]*=damp;
       damp*=g;
     }
   }
 
   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 
+  /* 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)
@@ -149,17 +149,12 @@ void vorbis_lpc_predict(float *coeff,flo
       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;
   }
 }
-
-
-
-
-
--- a/media/libvorbis/lib/vorbis_lsp.c
+++ b/media/libvorbis/lib/vorbis_lsp.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
   function: LSP (also called LSF) conversion routines
-  last mod: $Id$
+  last mod: $Id: lsp.c 16227 2009-07-08 06:58:46Z xiphmont $
 
   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
 
@@ -46,32 +46,33 @@
    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
+/* define either of these (preferably FLOAT_LOOKUP) to have faster
+   but less precise implementation. */
+#undef FLOAT_LOOKUP
+#undef INT_LOOKUP
 
 #ifdef FLOAT_LOOKUP
 #include "vorbis_lookup.c" /* catch this in the build system; we #include for
                        compilers (like gcc) that can't inline across
                        modules */
 
 /* 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;
@@ -94,19 +95,19 @@ void vorbis_lsp_to_curve(float *curve,in
       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*             
+    q=vorbis_fromdBlook(amp*
                         vorbis_invsqlook(q)*
-                        vorbis_invsq2explook(qexp+m)- 
+                        vorbis_invsq2explook(qexp+m)-
                         ampoffset);
 
     do{
       curve[i++]*=q;
     }while(map[i]==k);
   }
   vorbis_fpu_restore(fpu);
 }
@@ -178,71 +179,71 @@ void vorbis_lsp_to_curve(float *curve,in
       /* 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++; 
+      qi>>=1; qexp++;
     }else
       while(qi && !(qi&0x8000)){ /* checks for 0.0xxxxxxxxxxxxxxx or less*/
-        qi<<=1; qexp--; 
+        qi<<=1; qexp--;
       }
 
     amp=vorbis_fromdBlook_i(ampi*                     /*  n.4         */
-                            vorbis_invsqlook_i(qi,qexp)- 
+                            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 
+#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){
@@ -284,17 +285,17 @@ void vorbis_lsp_to_curve(float *curve,in
 
 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]; 
+      g[j] += g[j];
     }
   }
 }
 
 static int comp(const void *a,const void *b){
   return (*(float *)a<*(float *)b)-(*(float *)a>*(float *)b);
 }
 
@@ -313,24 +314,24 @@ static int Laguerre_With_Deflation(float
   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;
@@ -339,61 +340,61 @@ static int Laguerre_With_Deflation(float
         if(denom>-(EPSILON))denom=-(EPSILON);
       }
 
       delta  = m*p/denom;
       new   -= delta;
 
       if(delta<0.f)delta*=-1;
 
-      if(fabs(delta/new)<10e-12)break; 
+      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);
@@ -413,22 +414,22 @@ int vorbis_lpc_to_lsp(float *lpc,float *
   /* 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) */
--- a/media/libvorbis/lib/vorbis_mapping0.c
+++ b/media/libvorbis/lib/vorbis_mapping0.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: channel mapping 0 implementation
- last mod: $Id$
+ last mod: $Id: mapping0.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <math.h>
 #include <ogg/ogg.h>
@@ -71,80 +71,85 @@ static void mapping0_pack(vorbis_info *v
     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;
+  int i,b;
   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))
+  b=oggpack_read(opb,1);
+  if(b<0)goto err_out;
+  if(b){
     info->submaps=oggpack_read(opb,4)+1;
-  else
+    if(info->submaps<=0)goto err_out;
+  }else
     info->submaps=1;
 
-  if(oggpack_read(opb,1)){
+  b=oggpack_read(opb,1);
+  if(b<0)goto err_out;
+  if(b){
     info->coupling_steps=oggpack_read(opb,8)+1;
-
+    if(info->coupling_steps<=0)goto err_out;
     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 || 
+      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(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;
+      if(info->chmuxlist[i]>=info->submaps || info->chmuxlist[i]<0)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;
+    if(info->floorsubmap[i]>=ci->floors || info->floorsubmap[i]<0)goto err_out;
     info->residuesubmap[i]=oggpack_read(opb,8);
-    if(info->residuesubmap[i]>=ci->residues)goto err_out;
+    if(info->residuesubmap[i]>=ci->residues || info->residuesubmap[i]<0)goto err_out;
   }
 
   return info;
 
  err_out:
   mapping0_free_info(info);
   return(NULL);
 }
@@ -156,115 +161,115 @@ static vorbis_info_mapping *mapping0_unp
 #include "mdct.h"
 #include "psy.h"
 #include "scales.h"
 
 #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, 
+  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 
+#endif
 
 
 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 *pcm     =vb->pcm[i];
     float *logfft  =pcm;
 
     gmdct[i]=_vorbis_block_alloc(vb,n/2*sizeof(**gmdct));
 
     scale_dB=todB(&scale) + .345; /* + .345 is a hack; the original
                                      todB estimation used on IEEE 754
                                      compliant machines had a bug that
                                      returned dB values about a third
@@ -284,17 +289,17 @@ static int mapping0_forward(vorbis_block
       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);
     }else{
       _analysis_output("pcm",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
@@ -302,17 +307,17 @@ static int mapping0_forward(vorbis_block
     }else{
       _analysis_output("windowed",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)  + .345; /* + .345 is a hack; the
                                      original todB estimation used on
                                      IEEE 754 compliant machines had a
                                      bug that returned dB values about
                                      a third of a decibel too high.
                                      The bug was harmless because
@@ -356,39 +361,39 @@ static int mapping0_forward(vorbis_block
         _analysis_output("fftR",seq,logfft,n/2,1,0,0);
       }
     }else{
       _analysis_output("fft",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)  + .345; /* + .345 is a hack; the original
                                      todB estimation used on IEEE 754
                                      compliant machines had a bug that
                                      returned dB values about a third
                                      of a decibel too high.  The bug
                                      was harmless because tunings
                                      implicitly took that into
@@ -404,18 +409,18 @@ static int mapping0_forward(vorbis_block
       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 
-      
+#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,
@@ -465,17 +470,17 @@ static int mapping0_forward(vorbis_block
 
         _vp_offset_and_mix(psy_look,
                            noise,
                            tone,
                            1,
                            logmask,
                            mdct,
                            logmdct);
-        
+
 #if 0
         if(vi->channels==2){
           if(i==0)
             _analysis_output("aotuvM1_L",seq,aotuv,psy_look->n,1,1,0);
           else
             _analysis_output("aotuvM1_R",seq,aotuv,psy_look->n,1,1,0);
         }else{
           _analysis_output("aotuvM1",seq,aotuv,psy_look->n,1,1,0);
@@ -499,17 +504,17 @@ static int mapping0_forward(vorbis_block
          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,
@@ -523,22 +528,22 @@ static int mapping0_forward(vorbis_block
           if(i==0)
             _analysis_output("mask2L",seq,logmask,n/2,1,0,0);
           else
             _analysis_output("mask2R",seq,logmask,n/2,1,0,0);
         }else{
           _analysis_output("mask2",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,
                            mdct,
                            logmdct);
@@ -553,17 +558,17 @@ static int mapping0_forward(vorbis_block
           _analysis_output("mask0",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));
@@ -576,23 +581,23 @@ static int mapping0_forward(vorbis_block
       }
     }
   }
   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);
@@ -600,22 +605,22 @@ static int mapping0_forward(vorbis_block
     float **mag_memo=NULL;
     int **mag_sort=NULL;
 
     if(info->coupling_steps){
       mag_memo=_vp_quantize_couple_memo(vb,
                                         &ci->psy_g_param,
                                         psy_look,
                                         info,
-                                        gmdct);    
-      
+                                        gmdct);
+
       mag_sort=_vp_quantize_couple_sort(vb,
                                         psy_look,
                                         info,
-                                        mag_memo);    
+                                        mag_memo);
 
       hf_reduction(&ci->psy_g_param,
                    psy_look,
                    info,
                    mag_memo);
     }
 
     memset(sortindex,0,sizeof(*sortindex)*vi->channels);
@@ -645,17 +650,17 @@ static int mapping0_forward(vorbis_block
 
       /* 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(opb,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];
@@ -667,83 +672,83 @@ static int mapping0_forward(vorbis_block
         _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);
 
         /* couple_bundle is destructively overwritten by
            the class function if some but not all of the channels are
            marked as silence; build a fresh copy */
-        ch_in_bundle=0;        
+        ch_in_bundle=0;
         for(j=0;j<vi->channels;j++)
           if(info->chmuxlist[j]==i)
             couple_bundle[ch_in_bundle++]=vb->pcm[j]+n/2;
 
         _residue_P[ci->residue_type[resnum]]->
           forward(opb,vb,b->residue[resnum],
                   couple_bundle,NULL,zerobundle,ch_in_bundle,classifications);
       }
-      
+
       /* ok, done encoding.  Next protopacket. */
     }
-    
+
   }
 
 #if 0
   seq++;
   total+=ci->blocksizes[vb->W]/4+ci->blocksizes[vb->nW]/4;
 #endif
   return(0);
 }
@@ -758,35 +763,35 @@ static int mapping0_inverse(vorbis_block
   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;      
+      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; 
+      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){
@@ -854,9 +859,8 @@ static int mapping0_inverse(vorbis_block
 /* export hooks */
 const vorbis_func_mapping mapping0_exportbundle={
   &mapping0_pack,
   &mapping0_unpack,
   &mapping0_free_info,
   &mapping0_forward,
   &mapping0_inverse
 };
-
--- a/media/libvorbis/lib/vorbis_mdct.c
+++ b/media/libvorbis/lib/vorbis_mdct.c
@@ -1,23 +1,23 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: normalized modified discrete cosine transform
            power of two length transform only [64 <= n ]
- last mod: $Id$
+ last mod: $Id: mdct.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  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
@@ -47,17 +47,17 @@
 #include "misc.h"
 
 /* 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... */
@@ -94,29 +94,29 @@ void mdct_init(mdct_lookup *lookup,int n
 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];
@@ -149,24 +149,24 @@ STIN void mdct_butterfly_16(DATA_TYPE *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[30] +=         x[14];
            x[31] +=         x[15];
-           x[14]  =         r0;              
+           x[14]  =         r0;
            x[15]  =         r1;
 
-           r0     = x[28] - x[12];   
+           r0     = x[28] - x[12];
            r1     = x[29] - x[13];
-           x[28] +=         x[12];           
+           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];
@@ -212,99 +212,99 @@ STIN void mdct_butterfly_32(DATA_TYPE *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;
@@ -312,21 +312,21 @@ STIN void mdct_butterfly_generic(DATA_TY
     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);
   }
@@ -339,17 +339,17 @@ STIN void mdct_butterflies(mdct_lookup *
 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, 
+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{
@@ -360,33 +360,33 @@ STIN void mdct_bitreverse(mdct_lookup *i
     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;
@@ -434,17 +434,17 @@ void mdct_backward(mdct_lookup *init, DA
 
   /* 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]);
@@ -496,54 +496,54 @@ void mdct_forward(mdct_lookup *init, DAT
   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];       
+    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];       
+    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];       
+    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);
@@ -556,9 +556,8 @@ void mdct_forward(mdct_lookup *init, DAT
   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;
   }
 }
-
--- a/media/libvorbis/lib/vorbis_psy.c
+++ b/media/libvorbis/lib/vorbis_psy.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: psychoacoustics not including preecho
- last mod: $Id$
+ last mod: $Id: psy.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
 #include "vorbis/codec.h"
 #include "codec_internal.h"
@@ -63,22 +63,22 @@ 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;  
+  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;  
+  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;
 }
@@ -96,17 +96,17 @@ static float ***setup_tone_curves(float 
   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 */  
+       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];
@@ -115,17 +115,17 @@ static float ***setup_tone_curves(float 
     }
 
     /* 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;
       }
@@ -136,25 +136,25 @@ static float ***setup_tone_curves(float 
     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;
@@ -163,40 +163,40 @@ static float ***setup_tone_curves(float 
     /* 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])
@@ -211,17 +211,17 @@ static float ***setup_tone_curves(float 
 
       /* 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])
@@ -245,19 +245,19 @@ static float ***setup_tone_curves(float 
           }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;  
+        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;
 
     }
   }
 
@@ -284,17 +284,17 @@ void _vp_psy_init(vorbis_look_psy *p,vor
   p->n=n;
   p->rate=rate;
 
   /* AoTuV HF weighting */
   p->m_val = 1.;
   if(rate < 26000) p->m_val = 0;
   else if(rate < 38000) p->m_val = .94;   /* 32kHz */
   else if(rate > 46000) p->m_val = 1.275; /* 48kHz */
-  
+
   /* 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++){
@@ -304,54 +304,54 @@ void _vp_psy_init(vorbis_look_psy *p,vor
     }
   }
 
   for(;j<n;j++){
     p->ath[j]=p->ath[j-1];
   }
 
   for(i=0;i<n;i++){
-    float bark=toBARK(rate/(2*n)*i); 
+    float bark=toBARK(rate/(2*n)*i);
 
-    for(;lo+vi->noisewindowlomin<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) +
         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);
   }
@@ -408,34 +408,34 @@ static void seed_curve(float *seed,
     }
     seedptr+=linesper;
     if(seedptr>=n)break;
   }
 }
 
 static void seed_loop(vorbis_look_psy *p,
                       const float ***curves,
-                      const float *f, 
+                      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],
@@ -493,65 +493,65 @@ static void seed_chase(float *seeds, int
     }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 */
 #include<stdio.h>
 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;
@@ -564,260 +564,260 @@ static void bark_noise_hybridmp(int n,co
   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];    
+    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 const 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, 
+  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 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 *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
 
@@ -836,21 +836,21 @@ void _vp_tonemask(vorbis_look_psy *p,
                   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);
 
 }
@@ -862,58 +862,58 @@ void _vp_offset_and_mix(vorbis_look_psy 
                         float *logmask,
                         float *mdct,
                         float *logmdct){
   int i,n=p->n;
   float de, coeffi, cx;/* AoTuV */
   float toneatt=p->vi->tone_masteratt[offset_select];
 
   cx = p->m_val;
-  
+
   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);
 
 
     /* AoTuV */
     /** @ M1 **
-        The following codes improve a noise problem.  
+        The following codes improve a noise problem.
         A fundamental idea uses the value of masking and carries out
-        the relative compensation of the MDCT. 
-        However, this code is not perfect and all noise problems cannot be solved. 
+        the relative compensation of the MDCT.
+        However, this code is not perfect and all noise problems cannot be solved.
         by Aoyumi @ 2004/04/18
     */
 
     if(offset_select == 1) {
       coeffi = -17.2;       /* coeffi is a -17.2dB threshold */
       val = val - logmdct[i];  /* val == mdct line value relative to floor in dB */
-      
+
       if(val > coeffi){
         /* mdct value is > -17.2 dB below floor */
-        
+
         de = 1.0-((val-coeffi)*0.005*cx);
         /* pro-rated attenuation:
-           -0.00 dB boost if mdct value is -17.2dB (relative to floor) 
-           -0.77 dB boost if mdct value is 0dB (relative to floor) 
-           -1.64 dB boost if mdct value is +17.2dB (relative to floor) 
+           -0.00 dB boost if mdct value is -17.2dB (relative to floor)
+           -0.77 dB boost if mdct value is 0dB (relative to floor)
+           -1.64 dB boost if mdct value is +17.2dB (relative to floor)
            etc... */
-        
+
         if(de < 0) de = 0.0001;
       }else
         /* mdct value is <= -17.2 dB below floor */
-        
+
         de = 1.0-((val-coeffi)*0.0003*cx);
       /* pro-rated attenuation:
-         +0.00 dB atten if mdct value is -17.2dB (relative to floor) 
-         +0.45 dB atten if mdct value is -34.4dB (relative to floor) 
+         +0.00 dB atten if mdct value is -17.2dB (relative to floor)
+         +0.45 dB atten if mdct value is -34.4dB (relative to floor)
          etc... */
-      
+
       mdct[i] *= de;
-      
+
     }
   }
 }
 
 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;
@@ -921,50 +921,50 @@ float _vp_ampmax_decay(float amp,vorbis_
   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, 
+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;  
+    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 const 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.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;
@@ -998,21 +998,21 @@ static float round_hypot(float a, float 
 }
 
 /* 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]);
@@ -1034,20 +1034,20 @@ int **_vp_quantize_couple_sort(vorbis_bl
                                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);
   }
@@ -1079,48 +1079,48 @@ void _vp_noise_normalize(vorbis_look_psy
   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,
@@ -1142,37 +1142,37 @@ void _vp_couple(int blobno,
        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; 
+      nonzero[vi->coupling_mag[i]]=1;
+      nonzero[vi->coupling_ang[i]]=1;
 
        /* The threshold of a stereo is changed with the size of n */
        if(n > 1000)
-         postpoint=stereo_threshholds_limited[g->coupling_postpointamp[blobno]]; 
- 
+         postpoint=stereo_threshholds_limited[g->coupling_postpointamp[blobno]];
+
       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) ||
@@ -1187,44 +1187,44 @@ void _vp_couple(int blobno,
             }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;
             }
-          } 
+          }
         }
       }
     }
   }
 }
 
 /* AoTuV */
 /** @ M2 **
-   The boost problem by the combination of noise normalization and point stereo is eased. 
-   However, this is a temporary patch. 
+   The boost problem by the combination of noise normalization and point stereo is eased.
+   However, this is a temporary patch.
    by Aoyumi @ 2004/04/18
 */
 
 void hf_reduction(vorbis_info_psy_global *g,
-                      vorbis_look_psy *p, 
+                      vorbis_look_psy *p,
                       vorbis_info_mapping0 *vi,
                       float **mdct){
- 
+
   int i,j,n=p->n, de=0.3*p->m_val;
   int limit=g->coupling_pointlimit[p->vi->blockflag][PACKETBLOBS/2];
-  
+
   for(i=0; i<vi->coupling_steps; i++){
     /* for(j=start; j<limit; j++){} // ???*/
-    for(j=limit; j<n; j++) 
+    for(j=limit; j<n; j++)
       mdct[i][j] *= (1.0 - de*((float)(j-limit) / (float)(n-limit)));
   }
 }
--- a/media/libvorbis/lib/vorbis_registry.c
+++ b/media/libvorbis/lib/vorbis_registry.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: registry for time, floor, res backends and channel mappings
- last mod: $Id$
+ last mod: $Id: registry.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include "vorbis/codec.h"
 #include "codec_internal.h"
 #include "registry.h"
 #include "misc.h"
 /* seems like major overkill now; the backend numbers will grow into
@@ -38,9 +38,8 @@ const vorbis_func_residue   *const _resi
   &residue0_exportbundle,
   &residue1_exportbundle,
   &residue2_exportbundle,
 };
 
 const vorbis_func_mapping   *const _mapping_P[]={
   &mapping0_exportbundle,
 };
-
--- a/media/libvorbis/lib/vorbis_res0.c
+++ b/media/libvorbis/lib/vorbis_res0.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: residue backend 0, 1 and 2 implementation
- last mod: $Id$
+ last mod: $Id: res0.c 16327 2009-07-24 00:49:25Z xiphmont $
 
  ********************************************************************/
 
 /* 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. */
 
@@ -28,21 +28,21 @@
 #include "codec_internal.h"
 #include "registry.h"
 #include "codebook.h"
 #include "misc.h"
 #include "os.h"
 
 #if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
 #include <stdio.h>
-#endif 
+#endif
 
 typedef struct {
   vorbis_info_residue0 *info;
-  
+
   int         parts;
   int         stages;
   codebook   *fullbooks;
   codebook   *phrasebook;
   codebook ***partbooks;
 
   int         partvals;
   int       **decodemap;
@@ -81,26 +81,26 @@ void res0_free_look(vorbis_look_residue 
       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]);
             look->training_data[k][j]=NULL;
           }
         /*fprintf(stderr,"\n");*/
       }
@@ -116,17 +116,17 @@ void res0_free_look(vorbis_look_residue 
 
     /*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];
         }
@@ -168,30 +168,30 @@ static int icount(unsigned int v){
 
 
 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 
+  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,info->secondstages[j],3);
       oggpack_write(opb,1,1);
-      oggpack_write(opb,info->secondstages[j]>>3,5); 
+      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);
 
 }
@@ -203,26 +203,37 @@ vorbis_info_residue *res0_unpack(vorbis_
   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);
 
+  /* check for premature EOP */
+  if(info->groupbook<0)goto errout;
+
   for(j=0;j<info->partitions;j++){
     int cascade=oggpack_read(opb,3);
-    if(oggpack_read(opb,1))
-      cascade|=(oggpack_read(opb,5)<<3);
+    int cflag=oggpack_read(opb,1);
+    if(cflag<0) goto errout;
+    if(cflag){
+      int c=oggpack_read(opb,5);
+      if(c<0) goto errout;
+      cascade|=(c<<3);
+    }
     info->secondstages[j]=cascade;
 
     acc+=icount(cascade);
   }
-  for(j=0;j<acc;j++)
-    info->booklist[j]=oggpack_read(opb,8);
+  for(j=0;j<acc;j++){
+    int book=oggpack_read(opb,8);
+    if(book<0) goto errout;
+    info->booklist[j]=book;
+  }
 
   if(info->groupbook>=ci->books)goto errout;
   for(j=0;j<acc;j++){
     if(info->booklist[j]>=ci->books)goto errout;
     if(ci->book_param[info->booklist[j]]->maptype==0)goto errout;
   }
 
   /* verify the phrasebook is not specifying an impossible or
@@ -231,16 +242,17 @@ vorbis_info_residue *res0_unpack(vorbis_
     int entries = ci->book_param[info->groupbook]->entries;
     int dim = ci->book_param[info->groupbook]->dim;
     int partvals = 1;
     while(dim>0){
       partvals *= info->partitions;
       if(partvals > entries) goto errout;
       dim--;
     }
+    if(partvals < entries) goto errout;
   }
 
   return(info);
  errout:
   res0_free_info(info);
   return(NULL);
 }
 
@@ -310,33 +322,33 @@ static int local_book_besterror(codebook
   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]){
       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){
@@ -371,85 +383,85 @@ static int _encodepart(oggpack_buffer *o
 
   for(i=0;i<step;i++){
     int entry=local_book_besterror(book,vec+i*dim);
 
 #ifdef TRAIN_RES
     if(entry>0)
       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;  
+
+      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){
@@ -459,55 +471,55 @@ static long **_2class(vorbis_block *vb,v
 
   /* 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));
-  
+
 #if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
   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(oggpack_buffer *opb,
                       vorbis_block *vb,vorbis_look_residue *vl,
                       float **in,int ch,
                       long **partword,
                       int (*encode)(oggpack_buffer *,float *,int,
@@ -520,166 +532,166 @@ static int _01forward(oggpack_buffer *op
   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<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,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(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 *, 
+                      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 max=vb->pcmend>>1;
   int end=(info->end<max?info->end:max);
   int n=end-info->begin;
-  
+
   if(n>0){
     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 
+
+      /* each loop decodes on partition codeword containing
          partitions_per_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
@@ -820,27 +832,27 @@ int res2_forward(oggpack_buffer *opb,
   /* 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(opb,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);
   }
 }
 
@@ -857,44 +869,44 @@ int res2_inverse(vorbis_block *vb,vorbis
   int max=(vb->pcmend*ch)>>1;
   int end=(info->end<max?info->end:max);
   int n=end-info->begin;
 
   if(n>0){
     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);
 }
 
 
@@ -925,9 +937,8 @@ const vorbis_func_residue residue2_expor
   &res0_unpack,
   &res0_look,
   &res0_free_info,
   &res0_free_look,
   &res2_class,
   &res2_forward,
   &res2_inverse
 };
-
--- a/media/libvorbis/lib/vorbis_sharedbook.c
+++ b/media/libvorbis/lib/vorbis_sharedbook.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: basic shared codebook operations
- last mod: $Id$
+ last mod: $Id: sharedbook.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
 #include <ogg/ogg.h>
 #include "os.h"
@@ -31,17 +31,17 @@ int _ilog(unsigned int v){
   while(v){
     ret++;
     v>>=1;
   }
   return(ret);
 }
 
 /* 32 bit float (not IEEE; nonnormalized mantissa +
-   biased exponent) : neeeeeee eeemmmmm mmmmmmmm mmmmmmmm 
+   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){
@@ -75,61 +75,61 @@ ogg_uint32_t *_make_words(long *l,long n
   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++;
   }
-  
+
   /* sanity check the huffman tree; an underpopulated tree must be
      rejected. The only exception is the one-node pseudo-nil tree,
      which appears to be underpopulated because the tree doesn't
      really exist; there's only one possible 'codeword' or zero bits,
      but the above tree-gen code doesn't mark that. */
   if(sparsecount != 1){
     for(i=1;i<33;i++)
       if(marker[i] & (0xffffffffUL>>(32-i))){
@@ -216,37 +216,37 @@ float *_book_unquantize(const static_cod
       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(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(b->q_sequencep)last=val;
             if(sparsemap)
               r[sparsemap[count]*b->dim+k]=val;
             else
               r[count*b->dim+k]=val;
           }
           count++;
         }
       }
@@ -318,122 +318,122 @@ static ogg_uint32_t bitreverse(ogg_uint3
   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)- 
+  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;
 
   if(n>0){
-    
-    /* two different remappings go on here.  
-       
+
+    /* 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;
           }
         }
       }
     }
@@ -474,17 +474,17 @@ int _best(codebook *book, float *a, int 
     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];
@@ -532,39 +532,39 @@ int _best(codebook *book, float *a, int 
       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); 
+      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 
+#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++){
@@ -637,17 +637,17 @@ static_codebook test1={
   NULL,
   0,
   0,0,0,0,
   NULL,
   NULL,NULL,NULL,
   0
 };
 static float *test1_result=NULL;
-  
+
 /* linear, full mapping, nonsequential */
 static_codebook test2={
   4,3,
   NULL,
   2,
   -533200896,1611661312,4,0,
   full_quantlist1,
   NULL,NULL,NULL,
@@ -674,17 +674,17 @@ static_codebook test4={
   1,
   -533200896,1611661312,4,0,
   partial_quantlist1,
   NULL,NULL,NULL,
   0
 };
 static float test4_result[]={-3,-3,-3, 4,-3,-3, -1,-3,-3,
                               -3, 4,-3, 4, 4,-3, -1, 4,-3,
-                              -3,-1,-3, 4,-1,-3, -1,-1,-3, 
+                              -3,-1,-3, 4,-1,-3, -1,-1,-3,
                               -3,-3, 4, 4,-3, 4, -1,-3, 4,
                               -3, 4, 4, 4, 4, 4, -1, 4, 4,
                               -3,-1, 4, 4,-1, 4, -1,-1, 4,
                               -3,-3,-1, 4,-3,-1, -1,-3,-1,
                               -3, 4,-1, 4, 4,-1, -1, 4,-1,
                               -3,-1,-1, 4,-1,-1, -1,-1,-1};
 
 /* linear, algorithmic mapping, sequential */
@@ -694,17 +694,17 @@ static_codebook test5={
   1,
   -533200896,1611661312,4,1,
   partial_quantlist1,
   NULL,NULL,NULL,
   0
 };
 static float test5_result[]={-3,-6,-9, 4, 1,-2, -1,-4,-7,
                               -3, 1,-2, 4, 8, 5, -1, 3, 0,
-                              -3,-4,-7, 4, 3, 0, -1,-2,-5, 
+                              -3,-4,-7, 4, 3, 0, -1,-2,-5,
                               -3,-6,-2, 4, 1, 5, -1,-4, 0,
                               -3, 1, 5, 4, 8,12, -1, 3, 7,
                               -3,-4, 0, 4, 3, 7, -1,-2, 2,
                               -3,-6,-7, 4, 1, 0, -1,-4,-5,
                               -3, 1, 0, 4, 8, 7, -1, 3, 2,
                               -3,-4,-5, 4, 3, 2, -1,-2,-3};
 
 void run_test(static_codebook *b,float *comp){
@@ -741,13 +741,13 @@ int main(){
   run_test(&test2,test2_result);
   fprintf(stderr,"OK\nDequant test 3... ");
   run_test(&test3,test3_result);
   fprintf(stderr,"OK\nDequant test 4... ");
   run_test(&test4,test4_result);
   fprintf(stderr,"OK\nDequant test 5... ");
   run_test(&test5,test5_result);
   fprintf(stderr,"OK\n\n");
-  
+
   return(0);
 }
 
 #endif
--- a/media/libvorbis/lib/vorbis_smallft.c
+++ b/media/libvorbis/lib/vorbis_smallft.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: *unnormalized* fft transform
- last mod: $Id$
+ last mod: $Id: smallft.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 /* 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
@@ -120,17 +120,17 @@ static void dradf2(int ido,int l1,float 
   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);
@@ -167,17 +167,17 @@ static void dradf2(int ido,int l1,float 
 }
 
 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];
@@ -239,17 +239,17 @@ static void dradf4(int ido,int l1,float 
       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]);
@@ -273,17 +273,17 @@ static void dradfg(int ido,int ip,int l1
 
   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;
@@ -631,17 +631,17 @@ static void drftf1(int n,float *c,float 
   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;
   }
@@ -747,26 +747,26 @@ static void dradb3(int ido,int l1,float 
 }
 
 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]; 
+    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;
@@ -851,17 +851,17 @@ static void dradbg(int ido,int ip,int l1
   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++;
--- a/media/libvorbis/lib/vorbis_synthesis.c
+++ b/media/libvorbis/lib/vorbis_synthesis.c
@@ -1,22 +1,22 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: single-block PCM synthesis
- last mod: $Id$
+ last mod: $Id: synthesis.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdio.h>
 #include <ogg/ogg.h>
 #include "vorbis/codec.h"
 #include "codec_internal.h"
 #include "registry.h"
@@ -29,50 +29,50 @@ int vorbis_synthesis(vorbis_block *vb,og
   vorbis_info          *vi= vd ? vd->vi : 0;
   codec_setup_info     *ci= vi ? vi->codec_setup : 0;
   oggpack_buffer       *opb=vb ? &vb->opb : 0;
   int                   type,mode,i;
 
   if (!vd || !b || !vi || !ci || !opb) {
     return OV_EBADPACKET;
   }
- 
+
   /* 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;
   if(!ci->mode_param[mode]) {
     return(OV_EBADPACKET); 
   }
   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);
@@ -90,59 +90,59 @@ int vorbis_synthesis(vorbis_block *vb,og
    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);
   }
 
@@ -159,21 +159,19 @@ long vorbis_packet_blocksize(vorbis_info
   }
   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;
 }
-
-
--- a/media/libvorbis/lib/vorbis_window.c
+++ b/media/libvorbis/lib/vorbis_window.c
@@ -1,2092 +1,2092 @@
 /********************************************************************
  *                                                                  *
  * 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-2007             *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009             *
  * by the Xiph.Org Foundation http://www.xiph.org/                  *
  *                                                                  *
  ********************************************************************
 
  function: window functions
- last mod: $Id$
+ last mod: $Id: window.c 16227 2009-07-08 06:58:46Z xiphmont $
 
  ********************************************************************/
 
 #include <stdlib.h>
 #include <math.h>
 #include "os.h"
 #include "misc.h"
 
 static const 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, 
+  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 const 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, 
+  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 const 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, 
+  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 const 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, 
+  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 const 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, 
+  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 const 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, 
+  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,