[xiph-commits] r13469 - in trunk/vorbis-java: . org org/xiph org/xiph/libogg org/xiph/libshout org/xiph/libvorbis org/xiph/libvorbis/books org/xiph/libvorbis/books/coupled org/xiph/libvorbis/books/coupled/resbook_44 org/xiph/libvorbis/books/floor org/xiph/libvorbis/modes org/xiph/libvorbis/vorbis_constants

bcohee at svn.xiph.org bcohee at svn.xiph.org
Wed Aug 8 16:16:46 PDT 2007


Author: bcohee
Date: 2007-08-08 16:16:42 -0700 (Wed, 08 Aug 2007)
New Revision: 13469

Added:
   trunk/vorbis-java/.classpath
   trunk/vorbis-java/.project
   trunk/vorbis-java/Jheader.ogg
   trunk/vorbis-java/Todo.txt
   trunk/vorbis-java/VorbisEncoder.java
   trunk/vorbis-java/jvorbis_debug.rtf
   trunk/vorbis-java/log4j.properties
   trunk/vorbis-java/org/
   trunk/vorbis-java/org/xiph/
   trunk/vorbis-java/org/xiph/libogg/
   trunk/vorbis-java/org/xiph/libogg/ogg_packet.java
   trunk/vorbis-java/org/xiph/libogg/ogg_page.java
   trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java
   trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java
   trunk/vorbis-java/org/xiph/libshout/
   trunk/vorbis-java/org/xiph/libshout/Base64EncoderDecoder.java
   trunk/vorbis-java/org/xiph/libshout/ShoutClient.java
   trunk/vorbis-java/org/xiph/libvorbis/
   trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java
   trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java
   trunk/vorbis-java/org/xiph/libvorbis/att3.java
   trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java
   trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java
   trunk/vorbis-java/org/xiph/libvorbis/books/
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_1.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_2.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_3.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_4.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_5.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_6.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_7.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_8.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_9.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_n1.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44sm_0.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44sm_1.java
   trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44sm_n1.java
   trunk/vorbis-java/org/xiph/libvorbis/books/floor/
   trunk/vorbis-java/org/xiph/libvorbis/books/floor/floor_books.java
   trunk/vorbis-java/org/xiph/libvorbis/codebook.java
   trunk/vorbis-java/org/xiph/libvorbis/codec_setup_info.java
   trunk/vorbis-java/org/xiph/libvorbis/compandblock.java
   trunk/vorbis-java/org/xiph/libvorbis/drft_lookup.java
   trunk/vorbis-java/org/xiph/libvorbis/encode_aux_nearestmatch.java
   trunk/vorbis-java/org/xiph/libvorbis/encode_aux_pigeonhole.java
   trunk/vorbis-java/org/xiph/libvorbis/encode_aux_threshmatch.java
   trunk/vorbis-java/org/xiph/libvorbis/envelope_band.java
   trunk/vorbis-java/org/xiph/libvorbis/envelope_filter_state.java
   trunk/vorbis-java/org/xiph/libvorbis/envelope_lookup.java
   trunk/vorbis-java/org/xiph/libvorbis/highlevel_byblocktype.java
   trunk/vorbis-java/org/xiph/libvorbis/highlevel_encode_setup.java
   trunk/vorbis-java/org/xiph/libvorbis/lsfit_acc.java
   trunk/vorbis-java/org/xiph/libvorbis/mdct_lookup.java
   trunk/vorbis-java/org/xiph/libvorbis/modes/
   trunk/vorbis-java/org/xiph/libvorbis/modes/setup_44.java
   trunk/vorbis-java/org/xiph/libvorbis/noise3.java
   trunk/vorbis-java/org/xiph/libvorbis/noiseguard.java
   trunk/vorbis-java/org/xiph/libvorbis/oggpack_buffer.java
   trunk/vorbis-java/org/xiph/libvorbis/ovectl_ratemanage2_arg.java
   trunk/vorbis-java/org/xiph/libvorbis/private_state.java
   trunk/vorbis-java/org/xiph/libvorbis/static_bookblock.java
   trunk/vorbis-java/org/xiph/libvorbis/static_codebook.java
   trunk/vorbis-java/org/xiph/libvorbis/ve_setup_data_template.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_block.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_block_internal.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_comment.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_constants/
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_constants/integer_constants.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_dsp_state.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_info.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_floor1.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_mapping0.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_mode.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_psy.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_psy_global.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_info_residue0.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_floor1.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_psy.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_psy_arrays.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_psy_global.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_look_residue0.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_mapping_template.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_residue_template.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbis_window.java
   trunk/vorbis-java/org/xiph/libvorbis/vorbisenc.java
   trunk/vorbis-java/org/xiph/libvorbis/vp_adjblock.java
   trunk/vorbis-java/output.log.1
   trunk/vorbis-java/test.wav
   trunk/vorbis-java/test_original.wav
Log:
Initial import.

Added: trunk/vorbis-java/.classpath
===================================================================
--- trunk/vorbis-java/.classpath	                        (rev 0)
+++ trunk/vorbis-java/.classpath	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path=""/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

Added: trunk/vorbis-java/.project
===================================================================
--- trunk/vorbis-java/.project	                        (rev 0)
+++ trunk/vorbis-java/.project	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>JVorbis</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

Added: trunk/vorbis-java/Jheader.ogg
===================================================================
(Binary files differ)


Property changes on: trunk/vorbis-java/Jheader.ogg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/vorbis-java/Todo.txt
===================================================================
--- trunk/vorbis-java/Todo.txt	                        (rev 0)
+++ trunk/vorbis-java/Todo.txt	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,104 @@
+
+JVorbis Todo Checklist
+----------------------
+
+package management
+----------------------
+cutback on mass imports - have every instance complete class paths
+log4j - figure out best way make this deployable within the .jar library
+
+
+libvorbis
+----------------------
+// DONE - Vorbis Comment support added into header
+
+vorbis_encode_init_vbr( vi, 2, 44100, .4f )) - quality should be able to be increased/decresed but not tested yet
+finish support for managed bitrate options
+
+Optimize
+
+manual memory cleanup - _vorbis_pull_ripcord, saves values from a mock vorbis_block_alloc to track localstorage offsets and keep memory footprint down
+
+Check multiple loops to combine throughout the main loop
+
+rewrite to let the java garbage collector manage memory more in main loop - ByteStreams or ArrayLists etc
+
+	System.arraycopy everywhere instead of memcpy, memmove
+	Arrays.fill instead of memsets and hardloops
+
+
+add low quality support from aoTuV - http://www.geocities.jp/aoyoume/aotuv/
+
+OOP classes
+
+merge same classes into combined packages : http://jarticles.com/package/package_eng.html
+
+Get rid of floor1_func, res0_func, map0_func
+		_floor_P
+		_residue_P
+		_map_P
+
+Abstract as j-ogg, jcraft
+
+	(may only be needed for decode or encode other than 2 channels 44100 rate .4f quality)
+	_floor_P	(currently only supports floor1)
+	_residue_P	(currently only supports res0)
+	_mapping_P	(currently only supports mapping0)
+
+	add floor1 (info, look and functions)
+		vorbis_info_floor1.java, vorbis_look_floor1.java, oggpack_buffer.java
+
+	add residue0 (info, look) and create residue type 0,1,2 [functions]
+		vorbis_info_residue0.java, vorbis_look_residue0.java, oggpack_buffer.java
+
+
+	add mapping0 (info, look and functions) - *** ilog is actually ilog2 function - see mapping0.c
+		vorbis_info_mapping0.java, < no look function >, oggpack_buffer.java
+
+Java signed (>>) to unsigned (>>>) bit shift changes
+These all need inteligent checks
+vorbisenc.java		4
+vorbis_dsp_state	2
+mdct_lookup		17
+drft_lookup		4
+codebook		4
+bitrate_manager_state	1
+
+
+libshout
+----------------------
+total system state managment
+error exception flow
+reconnecting, buffering
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+References
+----------
+
+
+http://xiph.org/vorbis/doc/Vorbis_I_spec.html
+
+http://xiph.org/vorbis/doc/
+


Property changes on: trunk/vorbis-java/Todo.txt
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/VorbisEncoder.java
===================================================================
--- trunk/vorbis-java/VorbisEncoder.java	                        (rev 0)
+++ trunk/vorbis-java/VorbisEncoder.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,198 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+import java.io.*;
+import org.xiph.libvorbis.*;
+import org.xiph.libogg.*;
+
+public class VorbisEncoder {
+
+	static vorbisenc 			encoder;
+
+	static ogg_stream_state 	os;	// take physical pages, weld into a logical stream of packets
+
+	static ogg_page				og;	// one Ogg bitstream page.  Vorbis packets are inside
+	static ogg_packet			op;	// one raw packet of data for decode
+  
+	static vorbis_info			vi;	// struct that stores all the static vorbis bitstream settings
+
+	static vorbis_comment		vc;	// struct that stores all the user comments
+
+	static vorbis_dsp_state		vd;	// central working state for the packet->PCM decoder
+	static vorbis_block			vb;	// local working space for packet->PCM decode
+	
+	static int READ = 1024;
+	static byte[] readbuffer = new byte[READ*4+44];
+	
+	static int page_count = 0;
+	static int block_count = 0;
+	
+	/**
+	 * VorbisEncoder.java
+	 *  
+	 * Usage:
+	 * java -cp VorbisEncoder <Input File[.wav]> <Output File[.ogg]>
+	 * 
+	 */
+	public static void main( String[] args ) {
+		
+		// Output Java System Properties
+		/*
+		java.util.Properties prop = System.getProperties();
+		java.util.Enumeration propNames = prop.propertyNames();
+		
+		while ( propNames.hasMoreElements() ) {
+			String key = (String) propNames.nextElement();
+		} 
+		*/
+		
+		if ( args.length < 2 ) {
+			System.out.println( "Usage:");
+			System.out.println( "java -cp VorbisEncoder <Input File[.wav]> <Output File[.ogg]>");
+			System.exit(0);
+		}
+		
+		boolean eos = false;
+
+		vi = new vorbis_info();
+
+		encoder = new vorbisenc();
+
+		if ( !encoder.vorbis_encode_init_vbr( vi, 2, 44100, .3f ) ) {
+			System.out.println( "Failed to Initialize vorbisenc" );
+			return;
+		}
+		
+		vc = new vorbis_comment();
+		vc.vorbis_comment_add_tag( "ENCODER", "Java Vorbis Encoder" );
+
+		vd = new vorbis_dsp_state();
+
+		if ( !vd.vorbis_analysis_init( vi ) ) {
+			System.out.println( "Failed to Initialize vorbis_dsp_state" );
+			return;
+		}
+
+		vb = new vorbis_block( vd );
+
+		java.util.Random generator = new java.util.Random();  // need to randomize seed
+		os = new ogg_stream_state( generator.nextInt(256) );
+		
+		System.out.print( "Writing header." );
+		ogg_packet header = new ogg_packet();
+		ogg_packet header_comm = new ogg_packet();
+		ogg_packet header_code = new ogg_packet();
+		
+		vd.vorbis_analysis_headerout( vc, header, header_comm, header_code );
+		
+		os.ogg_stream_packetin( header); // automatically placed in its own page
+		os.ogg_stream_packetin( header_comm );
+		os.ogg_stream_packetin( header_code );
+		
+		og = new ogg_page();
+		op = new ogg_packet();
+		
+		try {
+			
+			FileOutputStream fos = new FileOutputStream( args[1] );
+			
+			while( !eos ) {
+				
+				if ( !os.ogg_stream_flush( og ) )
+					break;
+				
+				fos.write( og.header, 0, og.header_len );
+				fos.write( og.body, 0, og.body_len );
+				System.out.print( "." );
+			}
+			System.out.print(  "Done.\n" );
+			
+			FileInputStream fin = new FileInputStream( args[0] );
+			
+			System.out.print( "Encoding." );
+			while ( !eos ) {
+				
+				int i;
+				int bytes = fin.read( readbuffer, 0, READ*4 ); // stereo hardwired here
+				
+				int break_count = 0;
+				
+				if ( bytes==0 ) {
+					
+					// end of file.  this can be done implicitly in the mainline,
+					// but it's easier to see here in non-clever fashion.
+					// Tell the library we're at end of stream so that it can handle
+					// the last frame and mark end of stream in the output properly
+					
+					vd.vorbis_analysis_wrote( 0 );
+					
+				} else {
+					
+					// data to encode
+					
+					// expose the buffer to submit data
+					float[][] buffer = vd.vorbis_analysis_buffer( READ );
+					
+					// uninterleave samples
+					for ( i=0; i < bytes/4; i++ ) {
+						buffer[0][vd.pcm_current + i] = ( (readbuffer[i*4+1]<<8) | (0x00ff&(int)readbuffer[i*4]) ) / 32768.f;
+						buffer[1][vd.pcm_current + i] = ( (readbuffer[i*4+3]<<8) | (0x00ff&(int)readbuffer[i*4+2]) ) / 32768.f;
+					}
+					
+					// tell the library how much we actually submitted
+					vd.vorbis_analysis_wrote( i );
+				}
+
+				// vorbis does some data preanalysis, then divvies up blocks for more involved 
+				// (potentially parallel) processing.  Get a single block for encoding now
+
+				while ( vb.vorbis_analysis_blockout( vd ) ) {
+	
+					// analysis, assume we want to use bitrate management
+					
+					vb.vorbis_analysis( null );
+					vb.vorbis_bitrate_addblock();
+					
+					while ( vd.vorbis_bitrate_flushpacket( op ) ) {
+						
+						// weld the packet into the bitstream
+						os.ogg_stream_packetin( op );
+						
+						// write out pages (if any)
+						while ( !eos ) {
+							
+							if ( !os.ogg_stream_pageout( og ) ) {
+								break_count++;
+								break;
+							}
+							
+							fos.write( og.header, 0, og.header_len );
+							fos.write( og.body, 0, og.body_len );
+							
+							// this could be set above, but for illustrative purposes, I do
+							// it here (to show that vorbis does know where the stream ends)
+							if ( og.ogg_page_eos() > 0 )
+								eos = true;
+						}
+					}
+				}
+				System.out.print( "." );
+			}
+			
+			fin.close();
+			fos.close();
+			
+			System.out.print( "Done.\n" );
+			
+		} catch (Exception e) { System.out.println( "\n" + e ); e.printStackTrace(System.out); }
+	}
+}


Property changes on: trunk/vorbis-java/VorbisEncoder.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/jvorbis_debug.rtf
===================================================================
--- trunk/vorbis-java/jvorbis_debug.rtf	                        (rev 0)
+++ trunk/vorbis-java/jvorbis_debug.rtf	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,79 @@
+{\rtf1\mac\ansicpg10000\cocoartf824\cocoasubrtf420
+{\fonttbl\f0\fswiss\fcharset77 Helvetica;\f1\fswiss\fcharset77 ArialMT;}
+{\colortbl;\red255\green255\blue255;}
+\margl1440\margr1440\vieww9000\viewh8400\viewkind0
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
+
+\f0\fs24 \cf0 vorbis_block._01forward\
+vorbis_block.res2_forward - end 9 & 3 (2x) run (1st is 19 & 0)\
+vorbis_block.mapping0_forward\
+vorbis_block.vorbis_analysis\
+\
+\
+opb_local\
+endbyte = 45\
+endbit = 4\
+\
+ret = encode\
+\
+java\
+endbyte = 46\
+endbit = 7\
+\
+c\
+endbyte = 47\
+endbut = 2\
+\
+\
+\
+\
+error - 2nd step of _encodepart (when endbyte = 45 & endbit = 4 !!!! float * vec is off)\
+entry = local_book_besterror\
+\
+work*** is off in res2_forward\
+\
+.decimals are off just enough to throw the below and above -.5 flags for local_book_besterror\
+\
+\
+\pard\pardeftab720\ql\qnatural
+
+\f1\fs25\fsmilli12800 \cf0 pcm[0][223]\
+236\
+205 - way fuckin off\
+200\
+190\
+\
+\
+int _vp_couple ifloor[1][62] = 131 for C\'ca\'ca\'ca\'ca\'ca\'ca 132 for java\
+\
+ilogmaskch[i] = ilogmask\
+\
+when i == 1\
+\
+\
+floor_posts[1][7][8] = 511 for C\'ca\'ca\'ca\'ca\'ca\'ca 512 for java \
+mapping0_forward()- > floor1_fit( b.flr[info.floorsubmap[submap]], logmdct, logfft );\
+\
+\
+00037\
+\
+flr[90] through flr[105] are minor off, sync back exact at 105\
+\
+mdct[96] = -84.474411\
++ 18\
+>= flr[96] = - 66.474052\
+\
+530.76220590436471582\
+\
+\
+float flr[] is off on accum fit - very min amount\
+\
+logmask = logfft in mapping0_forward\
+\
+logfft is just vorbis_block.pcm[i]\
+\
+^^^^^\
+when page_count == 5\
+vorbis_analysis() to next\
+vorbis_analysis() [step into]\
+mapping0_forward()}
\ No newline at end of file

Added: trunk/vorbis-java/log4j.properties
===================================================================
--- trunk/vorbis-java/log4j.properties	                        (rev 0)
+++ trunk/vorbis-java/log4j.properties	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,19 @@
+log4j.rootLogger=ALL, stdout, R
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
+
+log4j.appender.R=org.apache.log4j.RollingFileAppender
+log4j.appender.R.File=output.log
+
+log4j.appender.R.MaxFileSize=100KB
+# Keep one backup file
+log4j.appender.R.MaxBackupIndex=1
+
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=%n[%d{DATE}] - %5p [%t] (%F:%L) - %m%n
+
+log4j.logger.Test=INFO
\ No newline at end of file

Added: trunk/vorbis-java/org/xiph/libogg/ogg_packet.java
===================================================================
--- trunk/vorbis-java/org/xiph/libogg/ogg_packet.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libogg/ogg_packet.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +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-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libogg;
+
+public class ogg_packet {
+
+	public byte[] packet;	// unsigned char *packet;
+	public int bytes;	// long
+	public int b_o_s;	// long
+	public int e_o_s;	// long
+
+	public int granulepos;	// ogg_int64_t  
+  
+	public int packetno;	// ogg_int64_t  
+
+	// sequence number for decode; the framing knows where there's a hole in the data, but we need 
+	// coupling so that the codec (which is in a seperate abstraction layer) also knows about the gap
+
+
+	public ogg_packet() {}
+
+}
\ No newline at end of file


Property changes on: trunk/vorbis-java/org/xiph/libogg/ogg_packet.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libogg/ogg_page.java
===================================================================
--- trunk/vorbis-java/org/xiph/libogg/ogg_page.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libogg/ogg_page.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,80 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libogg;
+
+public class ogg_page {
+
+	public byte[] header;		// unsigned char
+	public int header_len;		// long
+	public byte[] body;			// unsigned char
+	public int body_len;		// long
+	
+	// static ogg_uint32_t crc_lookup[256]={
+	private static int[] crc_lookup = new int[256];
+	
+	static {
+		for ( int i=0; i < crc_lookup.length; i++ ) {
+			crc_lookup[i] = crc_entry(i);
+		}
+	}
+	
+	private static int crc_entry( int index ) {
+		
+		int r = index << 24;
+		for ( int i=0; i < 8; i++ ) {
+			
+			if ( (r & 0x80000000) != 0 ) {
+				r = (r << 1)^0x04c11db7;
+				/* The same as the ethernet generator
+				 * polynomial, although we use an
+				 * unreflected alg and an init/final
+				 * of 0, not 0xffffffff */
+			} else {
+				r <<= 1;
+			}
+		}
+		return (r & 0xffffffff);
+	}
+
+	public ogg_page() {}
+	
+	public int ogg_page_eos() {
+		
+		  return((int)(header[5]&0x04));
+	}
+	
+	public void ogg_page_checksum_set() {
+		
+		// ogg_uint32_t crc_reg=0;
+		int crc_reg = 0;
+		int i;
+		
+		// safety; needed for API behavior, but not framing code
+		header[22] = 0;
+		header[23] = 0;
+		header[24] = 0;
+		header[25] = 0;
+		
+		for ( i=0; i < header_len; i++ ) {
+			crc_reg = (crc_reg<<8)^crc_lookup[((crc_reg>>>24)&0xff)^(header[i]&0xff)];
+		}
+		for ( i=0; i < body_len; i++ ) {
+			crc_reg = (crc_reg<<8)^crc_lookup[((crc_reg>>>24)&0xff)^(body[i]&0xff)];
+		}
+		
+	    header[22] = (byte)crc_reg /*&0xff*/;
+	    header[23] = (byte)(crc_reg>>>8) /*&0xff*/;
+	    header[24] = (byte)(crc_reg>>>16) /*&0xff*/;
+	    header[25] = (byte)(crc_reg>>>24) /*&0xff*/;
+	}
+}
\ No newline at end of file


Property changes on: trunk/vorbis-java/org/xiph/libogg/ogg_page.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java
===================================================================
--- trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,323 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libogg;
+
+public class ogg_stream_state {
+	
+	byte[] body_data;	// unsigned char // bytes from packet bodies
+	int body_storage;	// long //storage elements allocated
+	int body_fill;		// long //elements stored; fill mark
+	int body_returned;	// long //elements of fill returned
+	
+	int[] lacing_vals;		// The values that will go to the segment table
+	long[] granule_vals;	// ogg_int64_t //granulepos values for headers. Not compact this way, but it is simple coupled to the lacing fifo
+	int lacing_storage;		// long
+	int lacing_fill;		// long
+	int lacing_packet;		// long
+	int lacing_returned;	// long
+
+	byte[] header;		// unsigned char    header[282];      //working space for header encode
+	int header_fill;
+
+	int e_o_s;		//set when we have buffered the last packet in the logical bitstream
+	int b_o_s;		//set after we've written the initial page of a logical bitstream
+	int serialno;	// long
+	int pageno;		// long
+	long packetno;	// ogg_int64_t  // sequence number for decode; the framing knows where there's a hole in the data, but we need coupling so
+					// that the codec (which is in a seperate abstraction layer) also knows about the gap
+
+	long granulepos;		// ogg_int64_t   
+
+
+	public ogg_stream_state () {
+
+		header = new byte[ 282 ];
+	}
+
+	public ogg_stream_state( int _serialno ) {
+		
+		header = new byte[ 282 ];
+		
+		body_storage = 16*1024;
+
+		// body_data = _ogg_malloc(os->body_storage*sizeof(*os->body_data));
+		body_data = new byte[ body_storage ];
+
+		lacing_storage = 1024;
+		lacing_vals = new int[ lacing_storage ];
+		granule_vals = new long[ lacing_storage ];
+
+		serialno = _serialno;
+	}
+	
+	public int getSerialNo() {
+		return serialno;
+	}
+
+	// Helpers for ogg_stream_encode; this keeps the structure and what's happening fairly clear
+	
+	public void _os_body_expand( int needed ) {
+		
+		if ( body_storage <= body_fill + needed ) {
+			
+			body_storage += (needed+1024);
+			
+			// body_data = _ogg_realloc(os->body_data,os->body_storage*sizeof(*os->body_data));
+			byte[] temp = new byte[ body_storage ];
+    		System.arraycopy( body_data, 0, temp, 0, body_data.length );
+    		body_data = temp;
+		}
+	}
+
+	public void _os_lacing_expand( int needed ) {
+		
+		if ( lacing_storage <= lacing_fill + needed ) {
+			
+			lacing_storage += (needed+32);
+			
+			// lacing_vals = _ogg_realloc(os->lacing_vals,os->lacing_storage*sizeof(*os->lacing_vals));
+			int[] temp = new int[ lacing_storage ];
+    		System.arraycopy( lacing_vals, 0, temp, 0, lacing_vals.length );
+    		lacing_vals = temp;
+    		
+			// granule_vals = _ogg_realloc(os->granule_vals,os->lacing_storage*sizeof(*os->granule_vals));
+    		long[] temp2 = new long[ lacing_storage ];
+    		System.arraycopy( granule_vals, 0, temp, 0, granule_vals.length );
+    		granule_vals = temp2;
+	  }
+	}
+	
+	public boolean ogg_stream_packetin( ogg_packet op ) {
+		
+// OOP varaible lacing_vals renamed lacing_vals_local
+		int lacing_vals_local = op.bytes/255+1;
+		int i;
+		
+		if ( body_returned > 0 ) {
+			
+			/* advance packet data according to the body_returned pointer. We
+			 * had to keep it around to return a pointer into the buffer last call */
+			
+			body_fill -= body_returned;
+			if ( body_fill > 0 ) {
+				// memmove( body_data, body_data + body_returned, body_fill );
+	    		System.arraycopy( body_data, body_returned, body_data, 0, body_fill );
+			}
+			body_returned = 0;
+		}
+		
+		// make sure we have the buffer storage
+		_os_body_expand( op.bytes );
+		_os_lacing_expand( lacing_vals_local );
+		
+		/* Copy in the submitted packet.  Yes, the copy is a waste; this is
+		 * the liability of overly clean abstraction for the time being.  It
+		 * will actually be fairly easy to eliminate the extra copy in the future */
+		
+		// memcpy( body_data + body_fill, op.packet, op.bytes );
+		System.arraycopy( op.packet, 0, body_data, body_fill, op.bytes );
+		body_fill += op.bytes;
+		
+		// Store lacing vals for this packet
+		for ( i=0; i < lacing_vals_local-1; i++ ) {
+			lacing_vals[ lacing_fill+i ] = 255;
+			granule_vals[ lacing_fill+i ] = granulepos;
+		}
+		
+		lacing_vals[ lacing_fill+i ] = (op.bytes)%255;
+		granulepos = granule_vals[ lacing_fill+i] = op.granulepos;
+		
+		// flag the first segment as the beginning of the packet
+		lacing_vals[ lacing_fill ] |= 0x100;
+		lacing_fill += lacing_vals_local;
+		
+		// for the sake of completeness
+		packetno++;
+		
+		if ( op.e_o_s > 0 )
+			e_o_s = 1;
+		
+		return true;
+	}
+	
+	/* This will flush remaining packets into a page (returning nonzero),
+	 * even if there is not enough data to trigger a flush normally
+	 * (undersized page). If there are no packets or partial packets to
+	 * flush, ogg_stream_flush returns 0.  Note that ogg_stream_flush will
+	 * try to flush a normal sized page like ogg_stream_pageout; a call to
+	 * ogg_stream_flush does not guarantee that all packets have flushed.
+	 * Only a return value of 0 from ogg_stream_flush indicates all packet
+	 * data is flushed into pages.
+	 * 
+	 * since ogg_stream_flush will flush the last page in a stream even if
+	 * it's undersized, you almost certainly want to use ogg_stream_pageout
+	 * (and *not* ogg_stream_flush) unless you specifically need to flush 
+	 * an page regardless of size in the middle of a stream. */
+	
+	public boolean ogg_stream_flush( ogg_page og ) {
+		
+		int maxvals = (lacing_fill>255?255:lacing_fill);
+		if ( maxvals == 0 )
+			return false;
+		
+		int i;
+		int vals=0;
+		int bytes=0;
+		int acc=0;
+		// ogg_int64_t granule_pos=os->granule_vals[0];
+		long granule_pos = granule_vals[0];
+
+
+		// construct a page
+		// decide how many segments to include
+		
+		// If this is the initial header case, the first page must only include the initial header packet
+		if ( b_o_s == 0 ) {  // 'initial header page' case
+			granule_pos=0;
+			for ( vals=0; vals < maxvals; vals++ ) {
+				if ( (lacing_vals[vals]&0x0ff) < 255 ) {
+					vals++;
+					break;
+				}
+			}
+		} else {
+			for ( vals=0; vals < maxvals; vals++ ) {
+				if ( acc > 4096 )
+					break;
+				acc += lacing_vals[vals]&0x0ff;
+				granule_pos = granule_vals[vals];
+			}
+		}
+		
+		// construct the header in temp storage
+		// memcpy(os->header,"OggS",4);
+		// header[0] = 'O';
+		// header[1] = 'g';
+		// header[2] = 'g';
+		// header[3] = 'S';
+		System.arraycopy( "OggS".getBytes(), 0, header, 0, 4 );
+		
+		// stream structure version
+		header[4] = 0x00;
+		
+		// continued packet flag?
+		header[5] = 0x00;
+		if ( (lacing_vals[0]&0x100) == 0 )
+			header[5] |= 0x01;
+		// first page flag?
+		if ( b_o_s == 0 )
+			header[5] |= 0x02;
+		// last page flag?
+		if ( (e_o_s > 0) && (lacing_fill == vals) )
+			header[5] |= 0x04;
+		b_o_s = 1;
+		
+		// 64 bits of PCM position
+		for ( i=6; i < 14; i++ ) {
+			header[i] = (byte)(granule_pos);
+			granule_pos >>>= 8;
+		}
+		
+		// 32 bits of stream serial number
+// local OOP varname serialno to serialno_local
+		int serialno_local = serialno;
+		for ( i=14; i <18; i++ ) {
+			header[i] = (byte)(serialno_local);
+			serialno_local >>>= 8;
+		}
+		
+		// 32 bits of page counter (we have both counter and page header because this val can roll over)
+		if ( pageno == -1)
+			pageno = 0; 
+		
+		/* because someone called stream_reset; this would be a strange thing to do in an
+		 * encode stream, but it has plausible uses */
+		
+// local OOP varname serialno to serialno_local
+		int pageno_local = pageno++;
+		for ( i=18; i < 22; i++ ) {
+			header[i] = (byte)(pageno_local);
+			pageno_local >>>= 8;
+		}
+		
+		// zero for computation; filled in later
+		header[22] = 0;
+		header[23] = 0;
+		header[24] = 0;
+		header[25] = 0;
+		
+		// segment table
+		header[26] = (byte)(vals);
+		for ( i=0; i < vals; i++ ) {
+			header[i+27] = (byte)(lacing_vals[i]);
+			bytes += (header[i+27] & 0xff);
+		}
+			
+		
+// this has been hacked together
+// do not know if pointers (offsets) are ok
+// or if actual data needs to be copied to ogg_page
+		
+		// set pointers in the ogg_page struct
+		og.header = header;
+		og.header_len = header_fill = vals+27;
+		// og.body = body_data + body_returned;
+		og.body = new byte[ body_data.length - body_returned ];
+		System.arraycopy( body_data, body_returned, og.body, 0, body_data.length - body_returned );
+		og.body_len = bytes;
+		
+		// advance the lacing data and set the body_returned pointer
+		lacing_fill -= vals;
+		
+		// memmove(os->lacing_vals, os->lacing_vals+vals, os->lacing_fill*sizeof(*os->lacing_vals));
+		// int[] temp = new int[ lacing_fill ];
+		// System.arraycopy( lacing_vals, vals, temp, 0, lacing_fill );
+		// lacing_vals = temp;
+		// System.arraycopy( lacing_vals, vals, lacing_vals, 0, lacing_fill*4 );
+		System.arraycopy( lacing_vals, vals, lacing_vals, 0, lacing_fill );
+		
+		
+		// memmove(os->granule_vals, os->granule_vals+vals, os->lacing_fill*sizeof(*os->granule_vals));
+		// long[] temp2 = new long[ lacing_fill ];
+		// System.arraycopy( granule_vals, vals, temp2, 0, lacing_fill );
+		// granule_vals= temp2;
+		// System.arraycopy( granule_vals, vals, granule_vals, 0, lacing_fill*8 );
+		System.arraycopy( granule_vals, vals, granule_vals, 0, lacing_fill );
+		
+		body_returned += bytes;
+		
+		// calculate the checksum
+		og.ogg_page_checksum_set();
+		
+		return true;
+	}
+	
+	/* This constructs pages from buffered packet segments.  The pointers
+	 * returned are to static buffers; do not free. The returned buffers are
+	 * good only until the next call (using the same ogg_stream_state) */
+
+	public boolean ogg_stream_pageout( ogg_page og ) {
+		
+		if ( (e_o_s > 0 && lacing_fill > 0 ) ||		// 'were done, now flush' case
+			body_fill-body_returned > 4096 ||		// 'page nominal size' case
+			lacing_fill >= 255 ||					// 'segment table full' case
+			(lacing_fill > 0 && b_o_s <= 0) ) {		// 'initial header page' case
+	        
+	    return ogg_stream_flush(og);
+	  }
+	  
+	  // not enough data to construct a page and not end of stream
+	  return false;
+	}
+	
+}
\ No newline at end of file


Property changes on: trunk/vorbis-java/org/xiph/libogg/ogg_stream_state.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java
===================================================================
--- trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,27 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libogg;
+
+public class ogg_sync_state {
+
+	byte[] data;		// unsigned char
+	int storage;
+	int fill;
+	int returned;
+
+	int unsynced;
+	int headerbytes;
+	int bodybytes;
+
+	public ogg_sync_state() {}
+}
\ No newline at end of file


Property changes on: trunk/vorbis-java/org/xiph/libogg/ogg_sync_state.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libshout/Base64EncoderDecoder.java
===================================================================
--- trunk/vorbis-java/org/xiph/libshout/Base64EncoderDecoder.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libshout/Base64EncoderDecoder.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,68 @@
+/********************************************************************
+ *                                                                  *
+ * Utility class that encodes and decodes byte arrays in Base64     *
+ * representation.                                                  *
+ *                                                                  *
+ * Should be thread safe.                                           *
+ * Credit: markefarr                                                *
+ * http://forum.java.sun.com/thread.jspa?threadID=477461            *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libshout;
+
+public class Base64EncoderDecoder extends java.util.prefs.AbstractPreferences {
+	   private java.util.Hashtable encodedStore = new java.util.Hashtable();
+	 
+	public Base64EncoderDecoder(java.util.prefs.AbstractPreferences prefs, java.lang.String string) {
+	   super(prefs, string);
+	}
+	 
+	public java.lang.String encodeBase64(java.lang.String raw)
+	                                         throws java.io.UnsupportedEncodingException{
+	   byte[] rawUTF8 = raw.getBytes("UTF8");
+	   this.putByteArray(raw, rawUTF8);
+	   return (java.lang.String)this.encodedStore.get(raw);
+	}
+	 
+	public java.lang.String encodeBase64(java.lang.String key, java.lang.String raw)
+	                                         throws java.io.UnsupportedEncodingException{
+	   byte[] rawUTF8 = raw.getBytes("UTF8"); 
+	   this.putByteArray(key, rawUTF8);
+	   return (java.lang.String)this.encodedStore.get(key);
+	} 
+	 
+	@SuppressWarnings("unchecked")
+	public java.lang.String decodeBase64(java.lang.String key, java.lang.String base64String)
+	                                         throws java.io.UnsupportedEncodingException, java.io.IOException{
+	   byte[] def = {(byte)'D',(byte)'E',(byte)'F'};//placeholder
+	   this.encodedStore.put(key,base64String);
+	   byte[] byteResults = this.getByteArray(key, def);
+	   return new java.lang.String(byteResults, "UTF8");
+	}
+	 
+	public String get(String key, String def) {
+	   return (java.lang.String)this.encodedStore.get(key);
+	}
+	 
+	 
+	@SuppressWarnings("unchecked")
+	public void put(String key, String value){
+	   this.encodedStore.put(key, value);
+	}
+	 
+	 
+//	dummy implementation as AbstractPreferences is extended to access methods above
+	protected java.util.prefs.AbstractPreferences childSpi(String name) {return null;}
+	protected String[] childrenNamesSpi() throws java.util.prefs.BackingStoreException {return null;}
+	protected void flushSpi() throws java.util.prefs.BackingStoreException {}
+	protected String getSpi(String key) {return null;}
+	protected String[] keysSpi() throws java.util.prefs.BackingStoreException {return null;}
+	protected void putSpi(String key, String value) {}
+	protected void removeNodeSpi() throws java.util.prefs.BackingStoreException {}
+	protected void removeSpi(String key) {}
+	protected void syncSpi() throws java.util.prefs.BackingStoreException {}
+}

Added: trunk/vorbis-java/org/xiph/libshout/ShoutClient.java
===================================================================
--- trunk/vorbis-java/org/xiph/libshout/ShoutClient.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libshout/ShoutClient.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,249 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libshout;
+
+import java.io.*;
+import java.net.*;
+
+public class ShoutClient {
+
+	private Socket socket = null;
+	private OutputStream socketOutputStream = null;
+	
+	private boolean connected = false;
+	
+	private String mount = null;
+	private String host = null;
+	private int port = 0;
+	private String username = null;
+	private String password = null;
+	
+	private String url = null;
+	private String genre = null;
+	private String title = null;
+	private String desc = null;
+	
+	private char[] base64table = new char[] {
+	    'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
+	    'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
+	    'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
+	    'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/',
+	};
+	
+	public ShoutClient() {
+		
+		connected = false;
+	}
+
+	public ShoutClient( String host, int port, String mount, String user, String password ) {
+		
+		this.host = host;
+		this.port = port;
+		this.mount = mount;
+		this.username = user;
+		this.password = password;
+		
+		connected = false;
+	}
+	
+	public boolean connect( String host, int port, String mount, String user, String password ) {
+		
+		this.host = host;
+		this.port = port;
+		this.mount = mount;
+		this.username = user;
+		this.password = password;
+		
+		return connect();
+	}
+	
+	public boolean connect() {
+		
+		if ( !isConnected() ) {
+			try {
+				socket = new Socket( host, port );
+				// socket.connect( new InetSocketAddress( host, port ), 1000 ); // no timeout for now
+				
+				socketOutputStream = socket.getOutputStream();
+				socket.setTcpNoDelay( true );
+				writeHeader();
+			}
+			catch ( UnknownHostException e ) {
+				connected = false;
+				System.out.println( "Unknown host: " + host );
+			}
+			catch ( IOException e ) {
+				connected = false;
+				System.out.println( "Socket Connection Error: http://" + host + ":" + port );
+				System.out.println( e + "\n" );
+			}
+		}
+		
+		return connected;
+	}
+	
+	public boolean isConnected() {
+		return connected;	
+	}
+	
+	public String getHost() {
+		return this.host;
+	}
+	
+	public void setHost( String host ) {
+		this.host = host;
+	}
+	
+	public int getPort() {
+		return this.port;
+	}
+	
+	public void setPort( int port ) {
+		this.port = port;
+	}
+	
+	public String getMount() {
+		return this.mount;
+	}
+	
+	public void setMount( String mount ) {
+		this.mount = mount;
+	}
+	
+	public String getUser() {
+		return this.username;
+	}
+	
+	public void setUser( String user ) {
+		this.username = user;
+	}
+	
+	public String getPassword() {
+		return this.password;
+	}
+	
+	public void setPassword( String password ) {
+		this.password = password;
+	}
+	
+	public String getURL() {
+		return this.url;
+	}
+	
+	public void setURL( String url ) {
+		this.url = url;
+	}
+	
+	public String getGenre() {
+		return this.genre;
+	}
+	
+	public void setGenre( String genre ) {
+		this.genre = genre;
+	}
+	
+	public String getTitle() {
+		return this.title;
+	}
+	
+	public void setTitle( String title ) {
+		this.title = title;
+	}
+	
+	public String getDescription() {
+		return this.desc;
+	}
+	
+	public void setDescription( String desc ) {
+		this.desc = desc;
+	}
+	
+	public void writeHeader() throws IOException {
+		
+		socketOutputStream.write( new String("SOURCE " + mount + " HTTP/1.0" + "\r\n").getBytes() );
+		
+		Base64EncoderDecoder base64Encode = new Base64EncoderDecoder( null, "" );
+		String rawAuth = username + ":" + password;
+		String encodedAuth = base64Encode.encodeBase64( base64table.toString(), rawAuth );
+		socketOutputStream.write( new String("Authorization: Basic " + encodedAuth + "\r\n").getBytes() );
+
+		socketOutputStream.write( new String("User-Agent: libshout/" + "\r\n").getBytes() );
+		socketOutputStream.write( new String("Content-Type: application/ogg" + "\r\n").getBytes() );
+		
+		socketOutputStream.write( new String("ice-url: " + url + "\r\n").getBytes() );
+		socketOutputStream.write( new String("ice-public: 1" + "\r\n").getBytes() );
+		socketOutputStream.write( new String("ice-genre: " + genre + "\r\n").getBytes() );
+		socketOutputStream.write( new String("ice-name: " + title + "\r\n").getBytes() );
+		socketOutputStream.write( new String("ice-description: " + desc + "\r\n").getBytes() );
+		// socketOutputStream.write( new String("ice-audio-info: 1" + "\r\n").getBytes() );
+
+		socketOutputStream.write( new String("\r\n").getBytes() );
+		socketOutputStream.flush();
+		System.out.println( "OggCast Header Sent" );
+		
+		if ( readHeaderResponse() ) {
+			connected = true;
+		}
+		else {
+			connected = false;
+		}
+	}
+	
+	public boolean readHeaderResponse() throws IOException {
+		
+		InputStream socketInputStream = socket.getInputStream();
+		InputStreamReader isr = new InputStreamReader( socketInputStream );
+		BufferedReader br = new BufferedReader( isr );
+		
+		String responseHeader = br.readLine();
+		System.out.println( responseHeader );
+		
+		int responseCodeIndex = responseHeader.indexOf( ' ' );
+		int responseCode = Integer.parseInt( responseHeader.substring( responseCodeIndex+1, responseCodeIndex+4 ) );
+		
+		if ( responseCode >= 200 && responseCode < 300 )
+			return true;
+		
+		return false;
+	}
+
+	public void write( byte[] foo, int foostart, int foolength, byte[] bar, int barstart, int barlength ) {
+		
+		try {
+			socketOutputStream.write( foo, foostart, foolength );
+			socketOutputStream.write( bar, barstart, barlength );
+			socketOutputStream.flush();
+		}
+		catch ( IOException e ) {
+			connected = false;
+			System.out.println( "Socket Connection Error: http://" + host + ":" + port );
+			System.out.println( e );
+		}
+	}
+
+	public void close() {
+		try {
+			connected = false;
+			socket.shutdownOutput();
+			socketOutputStream.close();
+			socket.close();
+			socketOutputStream = null;
+			socket = null;
+		}
+		catch ( Exception e ) {
+			System.out.println( "Socket Connection Error: http://" + host + ":" + port );
+			System.out.println( e );
+		}
+		System.out.println( "Disconnected from: http://" + host + ":" + port );
+	}
+}

Added: trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,44 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+import static org.xiph.libvorbis.vorbis_constants.integer_constants.*;
+
+public class adj_stereo {
+
+	int[] pre;
+	int[] post;
+	float[] kHz;
+	float[] lowpasskHz;
+
+
+	public adj_stereo( int[] _pre, int[] _post, float[] _kHz, float[] _lowpasskHz ) {
+
+		pre = new int[ PACKETBLOBS ];
+		System.arraycopy( _pre, 0, pre, 0, _pre.length );
+
+		post = new int[ PACKETBLOBS ];
+		System.arraycopy( _post, 0, post, 0, _post.length );
+
+		kHz = new float[ PACKETBLOBS ];
+		System.arraycopy( _kHz, 0, kHz, 0, _kHz.length );
+
+		lowpasskHz = new float[ PACKETBLOBS ];
+		System.arraycopy( _lowpasskHz, 0, lowpasskHz, 0, _lowpasskHz.length );
+	}
+
+	public adj_stereo( adj_stereo src ) {
+
+		this( src.pre, src.post, src.kHz, src.lowpasskHz );
+	}
+}
\ No newline at end of file


Property changes on: trunk/vorbis-java/org/xiph/libvorbis/adj_stereo.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +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-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+class alloc_chain {
+	
+		Object[] ptr;
+
+		alloc_chain next;
+
+
+		public alloc_chain() {}
+}


Property changes on: trunk/vorbis-java/org/xiph/libvorbis/alloc_chain.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libvorbis/att3.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/att3.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/att3.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,37 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+import static org.xiph.libvorbis.vorbis_constants.integer_constants.*;
+
+public class att3 {
+
+	int[] att;		// att[P_NOISECURVES]
+	float boost;
+	float decay;
+
+
+	public att3( int[] _att, float _boost, float _decay ) {
+
+		att = new int[ P_NOISECURVES ];
+		System.arraycopy( _att, 0, att, 0, _att.length );
+
+		boost = _boost;
+		decay = _decay;
+	}
+
+	public att3( att3 src ) {
+
+		this( src.att, src.boost, src.decay );
+	}
+}


Property changes on: trunk/vorbis-java/org/xiph/libvorbis/att3.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,52 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+// NOTE - rewritten in Vorbislib 1.1.2
+
+class bitrate_manager_info {	// detailed bitrate management setup
+
+	int avg_rate;			// long avg_rate
+	int min_rate;			// long min_rate
+	int max_rate;			// long max_rate
+	int reservoir_bits;		// long reservoir_bits
+	float reservoir_bias;	// double reservoir_bias
+	
+	float slew_damp;		// double slew_damp
+	
+	/*
+	float queue_avg_time;
+	float queue_avg_center;
+	float queue_minmax_time;
+	float queue_hardmin;
+	float queue_hardmax;
+	float queue_avgmin;
+	float queue_avgmax;
+
+	float avgfloat_downslew_max;
+	float avgfloat_upslew_max;
+	*/
+
+	public bitrate_manager_info() {}
+	
+	public bitrate_manager_info( int _avg_rate, int _min_rate, int _max_rate, int _reservoir_bits, float _reservoir_bias, float _slew_damp ) {
+		
+		avg_rate = _avg_rate;
+		min_rate = _min_rate;
+		max_rate = _max_rate;
+		reservoir_bits = _reservoir_bits;
+		reservoir_bias = _reservoir_bias;
+		
+		slew_damp = _slew_damp;
+	}
+}


Property changes on: trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_info.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,61 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libvorbis;
+
+import static org.xiph.libvorbis.vorbis_constants.integer_constants.*;
+
+class bitrate_manager_state {
+	
+	int managed;
+	
+	int avg_reservoir;		// long
+	int minmax_reservoir;	// long
+	int avg_bitsper;		// long
+	int min_bitsper;		// long
+	int max_bitsper;		// long
+	
+	int short_per_long;		// long
+	float avgfloat;			// double
+	
+	vorbis_block vb;
+	int choice;
+
+	
+	public bitrate_manager_state( vorbis_info vi ) {
+
+		codec_setup_info ci = vi.codec_setup;
+		bitrate_manager_info bi = ci.bi;
+		
+		if ( bi.reservoir_bits > 0 ) {
+			
+			int ratesamples = vi.rate;
+			int halfsamples = ci.blocksizes[0]>>1;
+			
+			short_per_long = ci.blocksizes[1]/ci.blocksizes[0];
+			managed=1;
+			
+			avg_bitsper = new Double( Math.rint(1.*bi.avg_rate*halfsamples/ratesamples) ).intValue();
+			min_bitsper = new Double( Math.rint(1.*bi.min_rate*halfsamples/ratesamples) ).intValue();
+			max_bitsper = new Double( Math.rint(1.*bi.max_rate*halfsamples/ratesamples) ).intValue();
+			
+			avgfloat = PACKETBLOBS/2;    
+			
+			// not a necessary fix, but one that leads to a more balanced typical initialization
+			{
+				int desired_fill = new Float(bi.reservoir_bits*bi.reservoir_bias).intValue();	// long
+				minmax_reservoir = desired_fill;
+				avg_reservoir = desired_fill;	
+			}
+		}    	
+	}
+}
\ No newline at end of file


Property changes on: trunk/vorbis-java/org/xiph/libvorbis/bitrate_manager_state.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,139 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libvorbis.books.coupled.resbook_44;
+
+import org.xiph.libvorbis.*;
+
+public class res_books_stereo {
+
+	public vorbis_mapping_template[] _mapres_template_44_stereo;
+
+
+	public res_books_stereo() {
+
+		vorbis_info_mapping0[] _map_nominal = new vorbis_info_mapping0[] { new vorbis_info_mapping0( 1, new int[]{0,0}, new int[]{0}, new int[]{0}, 1, new int[]{0}, new int[]{1} ), 
+																			new vorbis_info_mapping0( 1, new int[]{0,0}, new int[]{1}, new int[]{1}, 1, new int[]{0}, new int[]{1} ) };
+		
+		vorbis_info_residue0 _residue_44_low = new vorbis_info_residue0( 0, -1, -1, 9, -1, new int[]{0}, new int[]{-1},
+																		new float[] {  .5f,  1.5f,  2.5f,  2.5f,  4.5f,  8.5f,  16.5f, 32.5f },
+																		new float[] {  .5f,   .5f,   .5f,  999.f, 4.5f,  8.5f,  16.5f, 32.5f } );
+
+		vorbis_info_residue0 _residue_44_mid = new vorbis_info_residue0( 0,-1, -1, 10,-1, new int[]{0}, new int[]{-1},
+																		new float[] {  .5f,  1.5f,  1.5f,  2.5f,  2.5f,  4.5f,  8.5f,  16.5f, 32.5f },
+																		new float[] {  .5f,   .5f, 999.f,   .5f,  999.f, 4.5f,  8.5f,  16.5f, 32.5f } );
+
+		vorbis_info_residue0 _residue_44_high = new vorbis_info_residue0( 0,-1, -1, 10,-1, new int[]{0}, new int[]{-1},
+																		new float[] {  .5f,  1.5f,  2.5f,  4.5f,  8.5f, 16.5f, 32.5f, 71.5f, 157.5f },
+																		new float[] {  .5f,  1.5f,  2.5f,  3.5f,  4.5f,  8.5f, 16.5f, 71.5f, 157.5f } );
+		
+		
+		resbook_44s_n1 _resbook_44s_n1 = new resbook_44s_n1();
+		resbook_44sm_n1 _resbook_44sm_n1 = new resbook_44sm_n1();
+		
+		resbook_44s_0 _resbook_44s_0 = new resbook_44s_0();
+		resbook_44sm_0 _resbook_44sm_0 = new resbook_44sm_0();
+		
+		resbook_44s_1 _resbook_44s_1 = new resbook_44s_1();
+		resbook_44sm_1 _resbook_44sm_1 = new resbook_44sm_1 ();
+		
+		resbook_44s_2 _resbook_44s_2 = new resbook_44s_2();
+		resbook_44s_3 _resbook_44s_3 = new resbook_44s_3();
+		resbook_44s_4 _resbook_44s_4 = new resbook_44s_4();
+		resbook_44s_5 _resbook_44s_5 = new resbook_44s_5();
+		resbook_44s_6 _resbook_44s_6 = new resbook_44s_6();
+		resbook_44s_7 _resbook_44s_7 = new resbook_44s_7();
+		resbook_44s_8 _resbook_44s_8 = new resbook_44s_8();
+		resbook_44s_9 _resbook_44s_9 = new resbook_44s_9();
+
+
+		_mapres_template_44_stereo = new vorbis_mapping_template[] {
+				
+			// _res_44s_n1
+			new vorbis_mapping_template( _map_nominal, 
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_n1._huff_book__44cn1_s_short, _resbook_44sm_n1._huff_book__44cn1_sm_short, _resbook_44s_n1.books, _resbook_44sm_n1.books ),
+					new vorbis_residue_template( 2, 0,  _residue_44_low, _resbook_44s_n1._huff_book__44cn1_s_long, _resbook_44sm_n1._huff_book__44cn1_sm_long, _resbook_44s_n1.books, _resbook_44sm_n1.books ) 
+				} ),
+
+			// _res_44s_0
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_0._huff_book__44c0_s_short, _resbook_44sm_0._huff_book__44c0_sm_short, _resbook_44s_0.books, _resbook_44sm_0.books ),
+					new vorbis_residue_template( 2, 0,  _residue_44_low, _resbook_44s_0._huff_book__44c0_s_long, _resbook_44sm_0._huff_book__44c0_sm_long, _resbook_44s_0.books, _resbook_44sm_0.books ) 
+				} ),
+
+			// _res_44s_1
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_1._huff_book__44c1_s_short, _resbook_44sm_1._huff_book__44c1_sm_short, _resbook_44s_1.books, _resbook_44sm_1.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_low, _resbook_44s_1._huff_book__44c1_s_long,  _resbook_44sm_1._huff_book__44c1_sm_long, _resbook_44s_1.books, _resbook_44sm_1.books ) 
+				} ),
+
+			// _res_44s_2
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_2._huff_book__44c2_s_short, _resbook_44s_2._huff_book__44c2_s_short, _resbook_44s_2.books, _resbook_44s_2.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_2._huff_book__44c2_s_long, _resbook_44s_2._huff_book__44c2_s_long, _resbook_44s_2.books, _resbook_44s_2.books )
+				} ),
+
+			// _res_44s_3
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_3._huff_book__44c3_s_short, _resbook_44s_3._huff_book__44c3_s_short, _resbook_44s_3.books, _resbook_44s_3.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_3._huff_book__44c3_s_long, _resbook_44s_3._huff_book__44c3_s_long, _resbook_44s_3.books, _resbook_44s_3.books )
+				} ),
+
+			// _res_44s_4
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_4._huff_book__44c4_s_short, _resbook_44s_4._huff_book__44c4_s_short, _resbook_44s_4.books, _resbook_44s_4.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_4._huff_book__44c4_s_long, _resbook_44s_4._huff_book__44c4_s_long, _resbook_44s_4.books, _resbook_44s_4.books )
+				} ),
+
+			// _res_44s_5
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_5._huff_book__44c5_s_short, _resbook_44s_5._huff_book__44c5_s_short, _resbook_44s_5.books, _resbook_44s_5.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_mid, _resbook_44s_5._huff_book__44c5_s_long, _resbook_44s_5._huff_book__44c5_s_long, _resbook_44s_5.books, _resbook_44s_5.books )
+				} ),
+
+			// _res_44s_6
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_6._huff_book__44c6_s_short, _resbook_44s_6._huff_book__44c6_s_short, _resbook_44s_6.books, _resbook_44s_6.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_6._huff_book__44c6_s_long, _resbook_44s_6._huff_book__44c6_s_long, _resbook_44s_6.books, _resbook_44s_6.books )
+				} ),
+
+			// _res_44s_7
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_7._huff_book__44c7_s_short, _resbook_44s_7._huff_book__44c7_s_short, _resbook_44s_7.books, _resbook_44s_7.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_7._huff_book__44c7_s_long, _resbook_44s_7._huff_book__44c7_s_long, _resbook_44s_7.books, _resbook_44s_7.books )
+				} ),
+
+			// _res_44s_8
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_8._huff_book__44c8_s_short, _resbook_44s_8._huff_book__44c8_s_short, _resbook_44s_8.books, _resbook_44s_8.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_8._huff_book__44c8_s_long, _resbook_44s_8._huff_book__44c8_s_long, _resbook_44s_8.books, _resbook_44s_8.books )
+				} ),
+
+			// _res_44s_9
+			new vorbis_mapping_template( _map_nominal,
+				new vorbis_residue_template[] { 
+					new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_9._huff_book__44c9_s_short, _resbook_44s_9._huff_book__44c9_s_short, _resbook_44s_9.books, _resbook_44s_9.books ),
+					new vorbis_residue_template( 2, 0, _residue_44_high, _resbook_44s_9._huff_book__44c9_s_long, _resbook_44s_9._huff_book__44c9_s_long, _resbook_44s_9.books, _resbook_44s_9.books )
+				} ),
+		};
+	}
+}


Property changes on: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/res_books_stereo.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,1170 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libvorbis.books.coupled.resbook_44;
+
+import org.xiph.libvorbis.*;
+
+class resbook_44s_0 {
+	
+	static int _vq_quantlist__44c0_s_p1_0[] = {
+		1,
+		0,
+		2,
+	};
+
+	static int _vq_lengthlist__44c0_s_p1_0[] = {
+		 1, 5, 5, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+		 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 5, 8, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+		 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+		 0, 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 7, 7, 0, 0, 0, 0,
+		 0, 0, 8,10, 9, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0, 0,
+		 0, 0, 0, 9,10,11, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+		 0, 0, 0, 0, 9,11, 9, 0, 0, 0, 0, 0, 0, 9,10,11,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 9, 9, 0, 0,
+		 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 7, 9, 9, 0, 0, 0, 0, 0, 0, 9,11,10, 0,
+		 0, 0, 0, 0, 0, 9, 9,11, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 7, 9,10, 0, 0, 0, 0, 0, 0, 9,10,11,
+		 0, 0, 0, 0, 0, 0, 9,11,10, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0,
+	};
+
+	static float _vq_quantthresh__44c0_s_p1_0[] = {
+		-0.5f, 0.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p1_0[] = {
+		    1,    0,    2,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p1_0 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p1_0,
+		_vq_quantmap__44c0_s_p1_0,
+		3,
+		3
+	);
+
+	static static_codebook _44c0_s_p1_0 = new static_codebook(
+		8, 6561,
+		_vq_lengthlist__44c0_s_p1_0,
+		1, -535822336, 1611661312, 2, 0,
+		_vq_quantlist__44c0_s_p1_0,
+		null,
+		_vq_auxt__44c0_s_p1_0,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p2_0[] = {
+		2,
+		1,
+		3,
+		0,
+		4,
+	};
+
+	static int _vq_lengthlist__44c0_s_p2_0[] = {
+		 1, 4, 4, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 5, 7, 6, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 4, 5, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 7, 9, 9,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 6, 7, 7, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0,
+	};
+
+	static float _vq_quantthresh__44c0_s_p2_0[] = {
+		-1.5f, -0.5f, 0.5f, 1.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p2_0[] = {
+		    3,    1,    0,    2,    4,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p2_0 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p2_0,
+		_vq_quantmap__44c0_s_p2_0,
+		5,
+		5
+	);
+
+	static static_codebook _44c0_s_p2_0 = new static_codebook(
+		4, 625,
+		_vq_lengthlist__44c0_s_p2_0,
+		1, -533725184, 1611661312, 3, 0,
+		_vq_quantlist__44c0_s_p2_0,
+		null,
+		_vq_auxt__44c0_s_p2_0,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p3_0[] = {
+		4,
+		3,
+		5,
+		2,
+		6,
+		1,
+		7,
+		0,
+		8,
+	};
+
+	static int _vq_lengthlist__44c0_s_p3_0[] = {
+		 1, 3, 2, 8, 7, 0, 0, 0, 0, 0, 0, 0, 6, 6, 0, 0,
+		 0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 7, 7,
+		 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, 0, 0, 0, 0,
+		 8, 8, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0,
+		 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0,
+	};
+
+	static float _vq_quantthresh__44c0_s_p3_0[] = {
+		-3.5f, -2.5f, -1.5f, -0.5f, 0.5f, 1.5f, 2.5f, 3.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p3_0[] = {
+		    7,    5,    3,    1,    0,    2,    4,    6,
+		    8,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p3_0 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p3_0,
+		_vq_quantmap__44c0_s_p3_0,
+		9,
+		9
+	);
+
+	static static_codebook _44c0_s_p3_0 = new static_codebook(
+		2, 81,
+		_vq_lengthlist__44c0_s_p3_0,
+		1, -531628032, 1611661312, 4, 0,
+		_vq_quantlist__44c0_s_p3_0,
+		null,
+		_vq_auxt__44c0_s_p3_0,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p4_0[] = {
+		4,
+		3,
+		5,
+		2,
+		6,
+		1,
+		7,
+		0,
+		8,
+	};
+
+	static int _vq_lengthlist__44c0_s_p4_0[] = {
+		 1, 3, 3, 6, 6, 6, 6, 8, 8, 0, 0, 0, 7, 7, 7, 7,
+		 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0, 7, 7,
+		 7, 8, 9, 9, 0, 0, 0, 7, 7, 7, 7, 9, 9, 0, 0, 0,
+		 9, 9, 8, 8,10,10, 0, 0, 0, 8, 9, 8, 8,10,10, 0,
+		 0, 0,10,10, 9, 9,10,10, 0, 0, 0, 0, 0, 9, 9,10,
+		10,
+	};
+
+	static float _vq_quantthresh__44c0_s_p4_0[] = {
+		-3.5f, -2.5f, -1.5f, -0.5f, 0.5f, 1.5f, 2.5f, 3.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p4_0[] = {
+		    7,    5,    3,    1,    0,    2,    4,    6,
+		    8,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p4_0 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p4_0,
+		_vq_quantmap__44c0_s_p4_0,
+		9,
+		9
+	);
+
+	static static_codebook _44c0_s_p4_0 = new static_codebook(
+		2, 81,
+		_vq_lengthlist__44c0_s_p4_0,
+		1, -531628032, 1611661312, 4, 0,
+		_vq_quantlist__44c0_s_p4_0,
+		null,
+		_vq_auxt__44c0_s_p4_0,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p5_0[] = {
+		8,
+		7,
+		9,
+		6,
+		10,
+		5,
+		11,
+		4,
+		12,
+		3,
+		13,
+		2,
+		14,
+		1,
+		15,
+		0,
+		16,
+	};
+
+	static int _vq_lengthlist__44c0_s_p5_0[] = {
+		 1, 4, 3, 6, 6, 8, 7, 8, 8, 8, 8, 9, 9,10,10,11,
+		11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9, 9,10,10,10,
+		11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,10,
+		10,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,10,
+		11,11,11,11, 0, 0, 0, 7, 7, 8, 8, 9, 9, 9, 9,10,
+		10,11,11,11,11, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,10,
+		10,10,11,11,12,12, 0, 0, 0, 8, 8, 9, 9, 9, 9,10,
+		10,10,10,11,11,12,12, 0, 0, 0, 9, 9, 9, 9,10,10,
+		10,10,11,11,11,12,12,12, 0, 0, 0, 0, 0, 9, 9,10,
+		10,10,10,11,11,11,11,12,12, 0, 0, 0, 0, 0, 9, 9,
+		10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0, 9,
+		 9,10,10,10,10,11,11,12,12,13,13, 0, 0, 0, 0, 0,
+		10,10,11,11,11,11,11,12,12,12,13,13, 0, 0, 0, 0,
+		 0, 0, 0,11,10,11,11,11,11,12,12,13,13, 0, 0, 0,
+		 0, 0, 0, 0,11,11,12,11,12,12,12,12,13,13, 0, 0,
+		 0, 0, 0, 0, 0,11,11,11,12,12,12,12,13,13,13, 0,
+		 0, 0, 0, 0, 0, 0,12,12,12,12,12,13,13,13,14,14,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0,12,12,12,12,13,13,14,
+		14,
+	};
+
+	static float _vq_quantthresh__44c0_s_p5_0[] = {
+		-7.5f, -6.5f, -5.5f, -4.5f, -3.5f, -2.5f, -1.5f, -0.5f, 
+		0.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 7.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p5_0[] = {
+		   15,   13,   11,    9,    7,    5,    3,    1,
+		    0,    2,    4,    6,    8,   10,   12,   14,
+		   16,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p5_0 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p5_0,
+		_vq_quantmap__44c0_s_p5_0,
+		17,
+		17
+	);
+
+	static static_codebook _44c0_s_p5_0 = new static_codebook(
+		2, 289,
+		_vq_lengthlist__44c0_s_p5_0,
+		1, -529530880, 1611661312, 5, 0,
+		_vq_quantlist__44c0_s_p5_0,
+		null,
+		_vq_auxt__44c0_s_p5_0,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p6_0[] = {
+		1,
+		0,
+		2,
+	};
+
+	static int _vq_lengthlist__44c0_s_p6_0[] = {
+		 1, 4, 4, 7, 6, 6, 7, 6, 6, 4, 7, 7,10, 9, 9,10,
+		 9, 9, 4, 6, 7,10, 9, 9,11, 9, 9, 7,10,10,11,11,
+		11,12,10,11, 6, 9, 9,11,10,11,11,10,10, 6, 9, 9,
+		11,10,11,11,10,10, 7,11,10,12,11,11,11,11,11, 7,
+		 9, 9,10,10,10,11,11,10, 6, 9, 9,11,10,10,11,10,
+		10,
+	};
+
+	static float _vq_quantthresh__44c0_s_p6_0[] = {
+		-5.5f, 5.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p6_0[] = {
+		    1,    0,    2,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p6_0 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p6_0,
+		_vq_quantmap__44c0_s_p6_0,
+		3,
+		3
+	);
+
+	static static_codebook _44c0_s_p6_0 = new static_codebook(
+		4, 81,
+		_vq_lengthlist__44c0_s_p6_0,
+		1, -529137664, 1618345984, 2, 0,
+		_vq_quantlist__44c0_s_p6_0,
+		null,
+		_vq_auxt__44c0_s_p6_0,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p6_1[] = {
+		5,
+		4,
+		6,
+		3,
+		7,
+		2,
+		8,
+		1,
+		9,
+		0,
+		10,
+	};
+
+	static int _vq_lengthlist__44c0_s_p6_1[] = {
+		 2, 3, 3, 6, 6, 7, 7, 7, 7, 7, 8,10,10,10, 6, 6,
+		 7, 7, 8, 8, 8, 8,10,10,10, 6, 6, 7, 7, 8, 8, 8,
+		 8,10,10,10, 7, 7, 7, 7, 8, 8, 8, 8,10,10,10, 7,
+		 7, 7, 7, 8, 8, 8, 8,10,10,10, 8, 7, 8, 8, 8, 8,
+		 8, 8,10,10,10, 7, 7, 8, 8, 8, 8, 8, 8,10,10,10,
+		 8, 8, 8, 8, 8, 8, 8, 8,10,10,10,10,10, 8, 8, 8,
+		 8, 8, 8,10,10,10,10,10, 9, 9, 8, 8, 8, 8,10,10,
+		10,10,10, 8, 8, 8, 8, 8, 8,
+	};
+
+	static float _vq_quantthresh__44c0_s_p6_1[] = {
+		-4.5f, -3.5f, -2.5f, -1.5f, -0.5f, 0.5f, 1.5f, 2.5f, 
+		3.5f, 4.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p6_1[] = {
+		    9,    7,    5,    3,    1,    0,    2,    4,
+		    6,    8,   10,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p6_1 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p6_1,
+		_vq_quantmap__44c0_s_p6_1,
+		11,
+		11
+	);
+
+	static static_codebook _44c0_s_p6_1 = new static_codebook(
+		2, 121,
+		_vq_lengthlist__44c0_s_p6_1,
+		1, -531365888, 1611661312, 4, 0,
+		_vq_quantlist__44c0_s_p6_1,
+		null,
+		_vq_auxt__44c0_s_p6_1,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p7_0[] = {
+		6,
+		5,
+		7,
+		4,
+		8,
+		3,
+		9,
+		2,
+		10,
+		1,
+		11,
+		0,
+		12,
+	};
+
+	static int _vq_lengthlist__44c0_s_p7_0[] = {
+		 1, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 7, 5, 5,
+		 7, 7, 8, 8, 8, 8, 9, 9,10,10, 7, 5, 6, 7, 7, 8,
+		 8, 8, 8, 9, 9,10,10, 0, 8, 8, 8, 8, 9, 9, 9, 9,
+		10,10,11,11, 0, 8, 8, 8, 8, 9, 9, 9, 9,10,10,11,
+		11, 0,12,12, 9, 9,10,10,10,10,11,11,11,11, 0,13,
+		13, 9, 9, 9, 9,10,10,11,11,11,12, 0, 0, 0,10,10,
+		10,10,11,11,11,11,12,12, 0, 0, 0,10,10, 9, 9,11,
+		11,11,12,12,12, 0, 0, 0,13,13,10,10,11,11,12,12,
+		13,13, 0, 0, 0,14,14,10,10,11,11,12,12,13,13, 0,
+		 0, 0, 0, 0,11,11,11,11,13,12,13,13, 0, 0, 0, 0,
+		 0,12,12,11,11,12,12,13,13,
+	};
+
+	static float _vq_quantthresh__44c0_s_p7_0[] = {
+		-27.5f, -22.5f, -17.5f, -12.5f, -7.5f, -2.5f, 2.5f, 7.5f, 
+		12.5f, 17.5f, 22.5f, 27.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p7_0[] = {
+		   11,    9,    7,    5,    3,    1,    0,    2,
+		    4,    6,    8,   10,   12,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p7_0 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p7_0,
+		_vq_quantmap__44c0_s_p7_0,
+		13,
+		13
+	);
+
+	static static_codebook _44c0_s_p7_0 = new static_codebook(
+		2, 169,
+		_vq_lengthlist__44c0_s_p7_0,
+		1, -526516224, 1616117760, 4, 0,
+		_vq_quantlist__44c0_s_p7_0,
+		null,
+		_vq_auxt__44c0_s_p7_0,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p7_1[] = {
+		2,
+		1,
+		3,
+		0,
+		4,
+	};
+
+	static int _vq_lengthlist__44c0_s_p7_1[] = {
+		 2, 3, 3, 5, 5, 6, 6, 6, 5, 5, 6, 6, 6, 5, 5, 6,
+		 6, 6, 5, 5, 6, 6, 6, 5, 5,
+	};
+
+	static float _vq_quantthresh__44c0_s_p7_1[] = {
+		-1.5f, -0.5f, 0.5f, 1.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p7_1[] = {
+		    3,    1,    0,    2,    4,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p7_1 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p7_1,
+		_vq_quantmap__44c0_s_p7_1,
+		5,
+		5
+	);
+
+	static static_codebook _44c0_s_p7_1 = new static_codebook(
+		2, 25,
+		_vq_lengthlist__44c0_s_p7_1,
+		1, -533725184, 1611661312, 3, 0,
+		_vq_quantlist__44c0_s_p7_1,
+		null,
+		_vq_auxt__44c0_s_p7_1,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p8_0[] = {
+		2,
+		1,
+		3,
+		0,
+		4,
+	};
+
+	static int _vq_lengthlist__44c0_s_p8_0[] = {
+		 1, 5, 5,10,10, 6, 9, 8,10,10, 6,10, 9,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10, 8,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+		10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,10,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+		11,
+	};
+
+	static float _vq_quantthresh__44c0_s_p8_0[] = {
+		-331.5f, -110.5f, 110.5f, 331.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p8_0[] = {
+		    3,    1,    0,    2,    4,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p8_0 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p8_0,
+		_vq_quantmap__44c0_s_p8_0,
+		5,
+		5
+	);
+
+	static static_codebook _44c0_s_p8_0 = new static_codebook(
+		4, 625,
+		_vq_lengthlist__44c0_s_p8_0,
+		1, -518283264, 1627103232, 3, 0,
+		_vq_quantlist__44c0_s_p8_0,
+		null,
+		_vq_auxt__44c0_s_p8_0,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p8_1[] = {
+		6,
+		5,
+		7,
+		4,
+		8,
+		3,
+		9,
+		2,
+		10,
+		1,
+		11,
+		0,
+		12,
+	};
+
+	static int _vq_lengthlist__44c0_s_p8_1[] = {
+		 1, 4, 4, 6, 6, 7, 7, 9, 9,11,12,13,12, 6, 5, 5,
+		 7, 7, 8, 8,10, 9,12,12,12,12, 6, 5, 5, 7, 7, 8,
+		 8,10, 9,12,11,11,13,16, 7, 7, 8, 8, 9, 9,10,10,
+		12,12,13,12,16, 7, 7, 8, 7, 9, 9,10,10,11,12,12,
+		13,16,10,10, 8, 8,10,10,11,12,12,12,13,13,16,11,
+		10, 8, 7,11,10,11,11,12,11,13,13,16,16,16,10,10,
+		10,10,11,11,13,12,13,13,16,16,16,11, 9,11, 9,15,
+		13,12,13,13,13,16,16,16,15,13,11,11,12,13,12,12,
+		14,13,16,16,16,14,13,11,11,13,12,14,13,13,13,16,
+		16,16,16,16,13,13,13,12,14,13,14,14,16,16,16,16,
+		16,13,13,12,12,14,14,15,13,
+	};
+
+	static float _vq_quantthresh__44c0_s_p8_1[] = {
+		-93.5f, -76.5f, -59.5f, -42.5f, -25.5f, -8.5f, 8.5f, 25.5f, 
+		42.5f, 59.5f, 76.5f, 93.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p8_1[] = {
+		   11,    9,    7,    5,    3,    1,    0,    2,
+		    4,    6,    8,   10,   12,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p8_1 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p8_1,
+		_vq_quantmap__44c0_s_p8_1,
+		13,
+		13
+	);
+
+	static static_codebook _44c0_s_p8_1 = new static_codebook(
+		2, 169,
+		_vq_lengthlist__44c0_s_p8_1,
+		1, -522616832, 1620115456, 4, 0,
+		_vq_quantlist__44c0_s_p8_1,
+		null,
+		_vq_auxt__44c0_s_p8_1,
+		null,
+		0
+	);
+
+	static int _vq_quantlist__44c0_s_p8_2[] = {
+		8,
+		7,
+		9,
+		6,
+		10,
+		5,
+		11,
+		4,
+		12,
+		3,
+		13,
+		2,
+		14,
+		1,
+		15,
+		0,
+		16,
+	};
+
+	static int _vq_lengthlist__44c0_s_p8_2[] = {
+		 2, 4, 4, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8,
+		 8,10,10,10, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9,
+		 9, 9,10,10,10, 7, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9,
+		 9, 9, 9,10,10,10, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,
+		 9,10, 9, 9,10,10,10, 7, 7, 8, 8, 9, 8, 9, 9, 9,
+		 9,10, 9, 9,10,10,10,10, 8, 8, 8, 8, 9, 8, 9, 9,
+		 9, 9, 9,10, 9,10,10,10,10, 7, 7, 8, 8, 9, 9, 9,
+		 9, 9, 9,10, 9,10,10,10,10,10, 8, 8, 8, 9, 9, 9,
+		 9, 9, 9, 9,10,10,10, 9,11,10,10,10,10, 8, 8, 9,
+		 9, 9, 9, 9,10, 9, 9, 9,10,10,10,10,11,11, 9, 9,
+		 9, 9, 9, 9, 9, 9,10, 9, 9,10,11,10,10,11,11, 9,
+		 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,11,10,11,11,
+		 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10, 9,11,10,10,11,
+		11,11,11, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,10,10,10,
+		11,11,11,11, 9,10, 9,10, 9, 9, 9, 9,10, 9,10,11,
+		10,11,10,10,10,10,10, 9, 9, 9,10, 9, 9, 9,10,11,
+		11,10,11,11,10,11,10,10,10, 9, 9, 9, 9,10, 9, 9,
+		10,11,10,11,11,11,11,10,11,10,10, 9,10, 9, 9, 9,
+		10,
+	};
+
+	static float _vq_quantthresh__44c0_s_p8_2[] = {
+		-7.5f, -6.5f, -5.5f, -4.5f, -3.5f, -2.5f, -1.5f, -0.5f, 
+		0.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 7.5f, 
+	};
+
+	static int _vq_quantmap__44c0_s_p8_2[] = {
+		   15,   13,   11,    9,    7,    5,    3,    1,
+		    0,    2,    4,    6,    8,   10,   12,   14,
+		   16,
+	};
+
+	static encode_aux_threshmatch _vq_auxt__44c0_s_p8_2 = new encode_aux_threshmatch(
+		_vq_quantthresh__44c0_s_p8_2,
+		_vq_quantmap__44c0_s_p8_2,
+		17,
+		17
+	);
+
+	static static_codebook _44c0_s_p8_2 = new static_codebook(
+		2, 289,
+		_vq_lengthlist__44c0_s_p8_2,
+		1, -529530880, 1611661312, 5, 0,
+		_vq_quantlist__44c0_s_p8_2,
+		null,
+		_vq_auxt__44c0_s_p8_2,
+		null,
+		0
+	);
+	
+	
+	static int _huff_lengthlist__44c0_s_short[] = {
+		 9, 8,12,11,12,13,14,14,16, 6, 1, 5, 6, 6, 9,12,
+		14,17, 9, 4, 5, 9, 7, 9,13,15,16, 8, 5, 8, 6, 8,
+		10,13,17,17, 9, 6, 7, 7, 8, 9,13,15,17,11, 8, 9,
+		 9, 9,10,12,16,16,13, 7, 8, 7, 7, 9,12,14,15,13,
+		 6, 7, 5, 5, 7,10,13,13,14, 7, 8, 5, 6, 7, 9,10,
+		12,
+	};
+
+	static int _huff_lengthlist__44c0_s_long[] = {
+		 5, 4, 8, 9, 8, 9,10,12,15, 4, 1, 5, 5, 6, 8,11,
+		12,12, 8, 5, 8, 9, 9,11,13,12,12, 9, 5, 8, 5, 7,
+		 9,12,13,13, 8, 6, 8, 7, 7, 9,11,11,11, 9, 7, 9,
+		 7, 7, 7, 7,10,12,10,10,11, 9, 8, 7, 7, 9,11,11,
+		12,13,12,11, 9, 8, 9,11,13,16,16,15,15,12,10,11,
+		12,
+	};
+
+
+	static_codebook zero = null;
+	
+	public static_bookblock books;
+	public static_codebook _huff_book__44c0_s_short;
+	public static_codebook _huff_book__44c0_s_long;
+
+
+	public resbook_44s_0() {
+		
+		_huff_book__44c0_s_short = new static_codebook(
+			2, 81,
+			_huff_lengthlist__44c0_s_short,
+			0, 0, 0, 0, 0,
+			null,
+			null,
+			null,
+			null,
+			0
+		);
+		
+		_huff_book__44c0_s_long = new static_codebook(
+			2, 81,
+			_huff_lengthlist__44c0_s_long,
+			0, 0, 0, 0, 0,
+			null,
+			null,
+			null,
+			null,
+			0
+		);
+
+		books = new static_bookblock( new static_codebook[][] {
+
+			{ zero },
+			{ zero, zero, _44c0_s_p1_0 },
+			{ zero, zero, _44c0_s_p2_0 },
+			{ zero, zero, _44c0_s_p3_0 },
+			{ zero, zero, _44c0_s_p4_0 },
+			{ zero, zero, _44c0_s_p5_0 },
+			{ _44c0_s_p6_0, _44c0_s_p6_1 },
+			{ _44c0_s_p7_0, _44c0_s_p7_1 },
+			{ _44c0_s_p8_0, _44c0_s_p8_1, _44c0_s_p8_2 },
+		} );
+	}
+}


Property changes on: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_0.java
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_1.java
===================================================================
--- trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_1.java	                        (rev 0)
+++ trunk/vorbis-java/org/xiph/libvorbis/books/coupled/resbook_44/resbook_44s_1.java	2007-08-08 23:16:42 UTC (rev 13469)
@@ -0,0 +1,1151 @@
+/********************************************************************
+ *                                                                  *
+ * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE.   *
+ * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
+ * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
+ * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
+ *                                                                  *
+ * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2002             *
+ * by the Xiph.Org Foundation http://www.xiph.org/                  *
+ *                                                                  *
+ ********************************************************************/
+
+package org.xiph.libvorbis.books.coupled.resbook_44;
+
+import org.xiph.libvorbis.*;
+
+class resbook_44s_1 {
+	
+	static int _vq_quantlist__44c1_s_p1_0[] = {
+		1,
+		0,
+		2,
+	};
+
+	static int _vq_lengthlist__44c1_s_p1_0[] = {
+		 2, 4, 4, 0, 0, 0, 0, 0, 0, 5, 7, 6, 0, 0, 0, 0,
+		 0, 0, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+		 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 5, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+		 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 7, 7, 0, 0, 0, 0,
+		 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0, 0,
+		 0, 0, 0, 8, 9,10, 0, 0, 0, 0, 0, 0, 8, 9, 9, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 8, 8, 0, 0,
+		 0, 0, 0, 0, 8, 9, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 4, 7, 7, 0, 0, 0, 0, 0, 0, 7, 8, 8, 0, 0,
+		 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 6, 8, 8, 0, 0, 0, 0, 0, 0, 8,10, 9, 0,
+		 0, 0, 0, 0, 0, 8, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 7, 8, 8, 0, 0, 0, 0, 0, 0, 8, 9, 9,
+		 0, 0, 0, 0, 0, 0, 8, 9, 9, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+		 0, 0,