[MPlayer-dev-eng] [PATCH] nsv demuxer

Compn tempn at twmi.rr.com
Wed Mar 31 00:24:23 CEST 2004


#hey, i'm relaying this for timebomb, who couldnt get his sendmail to
#work :) i know nothing about this, so dont cc me :)
#can whoever added codecs.conf info for vp5vfw please upload the
#dll to mplayerhq.hu or put it online somewhere for the rest of us?
#its impossible to find at on2.com or anywhere....
#pasted and attached patch, dunno how to post here...

hi,

i attached the backport of the nsv demuxer(with quite some changes) to

this mail.

pcm audio needs extra parsing of another header in each audio chunk.

according to: http://home.pcisys.net/~melanson/codecs/nsv-format.txt

anyway i tested it with standard nsv files and shoutcast streams. 

they use vp3 vp5 vp6 for video and mp3 faad for audio so make sure you

got faad and the vp dlls when you try it. 

oh and one more thing the search routine to look for the header in a

shoutcast stream is very very very simple thus not as efficient as it

could be. feel free to optimize it!

thanks to Compn and another friend of mine for helping me test this.



oh and many thanks to you Gabucino for banning me right away and then

changing your nick ... really appreciate that!!

Cheers



 

Reza Jelveh



diff -uNr MPlayer-20040329/libmpdemux/Makefile MPlayer-20040329-nsv2/libmpdemux/Makefile

--- MPlayer-20040329/libmpdemux/Makefile	2004-03-09 15:46:34.000000000 +0100

+++ MPlayer-20040329-nsv2/libmpdemux/Makefile	2004-03-30 08:06:47.000000000 +0200

@@ -3,7 +3,7 @@

 

 include ../config.mak

 

-SRCS = mp3_hdr.c video.c mpeg_hdr.c cache2.c asfheader.c aviheader.c aviprint.c muxer.c muxer_avi.c muxer_mpeg.c demux_asf.c demux_avi.c demux_mov.c parse_mp4.c demux_mpg.c demux_ty.c demux_ty_osd.c 
demux_pva.c demux_viv.c demuxer.c dvdnav_stream.c open.c parse_es.c stream.c stream_file.c stream_netstream.c stream_vcd.c stream_null.c stream_ftp.c tv.c tvi_dummy.c tvi_v4l.c tvi_v4l2.c tvi_bsdbt848.c frequencies.c 
demux_fli.c demux_real.c demux_y4m.c yuv4mpeg.c yuv4mpeg_ratio.c demux_nuv.c demux_film.c demux_roq.c mf.c demux_mf.c demux_audio.c demux_demuxers.c demux_ogg.c demux_bmp.c cdda.c demux_rawaudio.c 
demux_rawvideo.c cddb.c cdinfo.c demux_rawdv.c ai_alsa.c ai_alsa1x.c ai_oss.c audio_in.c demux_smjpeg.c demux_lmlm4.c cue_read.c extension.c demux_gif.c demux_ts.c demux_realaud.c url.c muxer_rawvideo.c

+SRCS = mp3_hdr.c video.c mpeg_hdr.c cache2.c asfheader.c aviheader.c aviprint.c muxer.c muxer_avi.c muxer_mpeg.c demux_asf.c demux_avi.c demux_mov.c parse_mp4.c demux_mpg.c demux_ty.c demux_ty_osd.c 
demux_pva.c demux_viv.c demuxer.c dvdnav_stream.c open.c parse_es.c stream.c stream_file.c stream_netstream.c stream_vcd.c stream_null.c stream_ftp.c tv.c tvi_dummy.c tvi_v4l.c tvi_v4l2.c tvi_bsdbt848.c frequencies.c 
demux_fli.c demux_real.c demux_y4m.c yuv4mpeg.c yuv4mpeg_ratio.c demux_nsv.c demux_nuv.c demux_film.c demux_roq.c mf.c demux_mf.c demux_audio.c demux_demuxers.c demux_ogg.c demux_bmp.c cdda.c 
demux_rawaudio.c demux_rawvideo.c cddb.c cdinfo.c demux_rawdv.c ai_alsa.c ai_alsa1x.c ai_oss.c audio_in.c demux_smjpeg.c demux_lmlm4.c cue_read.c extension.c demux_gif.c demux_ts.c demux_realaud.c url.c 
muxer_rawvideo.c

 ifeq ($(XMMS_PLUGINS),yes)

 SRCS += demux_xmms.c

 endif 

diff -uNr MPlayer-20040329/libmpdemux/demux_nsv.c MPlayer-20040329-nsv2/libmpdemux/demux_nsv.c

--- MPlayer-20040329/libmpdemux/demux_nsv.c	1970-01-01 01:00:00.000000000 +0100

+++ MPlayer-20040329-nsv2/libmpdemux/demux_nsv.c	2004-03-30 08:57:40.000000000 +0200

@@ -0,0 +1,323 @@

+/*

+ * Nullsoft Streaming Video demuxer

+ * for MPlayer

+ * by Reza Jelveh <reza.jelveh at tuhh.de>

+ * seeking and PCM audio not yet supported

+ * PCM needs extra audio chunk "miniheader" parsing

+ * Based on a'rpis g2 work

+ */

+

+#include <stdio.h>

+#include <stdlib.h>

+#include <unistd.h>

+

+#include "config.h"

+#include "mp_msg.h"

+#include "help_mp.h"

+#include "stream.h"

+#include "demuxer.h"

+#include "stheader.h"

+

+

+/**

+ * Seeking still to be implemented

+ */

+void demux_seek_nsv ( demuxer_t *demuxer, float rel_seek_secs, int flags )

+{

+// seeking is not yet implemented

+}

+

+

+int demux_nsv_fill_buffer ( demuxer_t *demuxer )

+{  

+	unsigned char hdr[17];

+	// len1 = audio chunk length, len2 = video chunk length

+	int len1,len2; 

+	

+	sh_video_t *sh_video = NULL;

+	sh_audio_t *sh_audio = NULL;

+

+	sh_video = demuxer->video->sh ;

+

+	// if the audio/video chunk has no new header the first 2 bytes will be discarded 0xBEEF 

+	// or rather 0xEF 0xBE

+	stream_read(demuxer->stream,hdr,7);

+	if(stream_eof(demuxer->stream)) return 0;

+    // sometimes instead of 0xBEEF as described for the next audio/video chunk we get

+	// a whole new header

+	if(hdr[0]==0x4E && hdr[1]==0x53 && hdr[2]==0x56){

+	// NSV header!

+	if(hdr[3]==0x73){

+	    // NSVs

+	    // get the header since there is no more metaheader after the first one 

+		// there is no more need to skip that

+		stream_read(demuxer->stream,hdr+7,17-7);

+	

+		

+		// theoretically u could have new codecs or other audio for new audio/video chunks     

+		// 	 bytes 4-7    video codec fourcc

+		sh_video->format=mmioFOURCC(hdr[4],hdr[5],hdr[6],hdr[7]);

+    	

+		// 	 bytes 8-11   audio codec fourcc

+		// PCM fourcc needs extra parsing for every audio chunk, yet to implement

+//		if( strncmp(hdr+8,"NULL", 4)){

+//			sh_audio = demuxer->audio->sh;

+//			sh_audio->format=mmioFOURCC(hdr[8],hdr[9],hdr[10],hdr[11]);

+//		}

+//		else 

+//			demuxer->audio= NULL;

+			

+		// new video stream! parse header

+		

+		sh_video->bih=(BITMAPINFOHEADER*)calloc(1,sizeof(BITMAPINFOHEADER));

+		sh_video->bih->biSize=sizeof(BITMAPINFOHEADER);

+		sh_video->bih->biPlanes=1; 

+		sh_video->bih->biBitCount=24;

+		sh_video->bih->biWidth=hdr[12]|(hdr[13]<<8);

+		sh_video->bih->biHeight=hdr[14]|(hdr[15]<<8);

+		memcpy(&sh_video->bih->biCompression,hdr+4,4);

+		sh_video->bih->biSizeImage=sh_video->bih->biWidth*sh_video->bih->biHeight*3;

+		

+		sh_video->disp_w = sh_video->bih->biWidth;

+  		sh_video->disp_h = sh_video->bih->biHeight;

+		

+		

+		// set the framerate

+		// if the msb of byte 16 is one we have a and standard fractional framerate

+		switch(hdr[16]){

+		case 0x81:

+			sh_video->fps = (float)30000.0/1001.0;

+			sh_video->frametime = 1.0 / sh_video->fps;

+			break;

+		case 0x85:

+			sh_video->fps = (float)15000.0/1001.0;

+			sh_video->frametime = 1.0 / sh_video->fps;

+			break;

+			

+		default:

+		    sh_video->fps = (float)hdr[16];

+			sh_video->frametime = 1.0 / sh_video->fps;

+			

+		

+		}

+		

+		stream_read(demuxer->stream,hdr,7);

+

+	}	

+	}	

+	demuxer->filepos=stream_tell(demuxer->stream);

+	

+	

+	

+	mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: %08X: %02X %02X | %02X %02X %02X | %02X %02X  \n",

+	(int)demuxer->filepos, hdr[0],hdr[1],hdr[2],hdr[3],hdr[4],hdr[5],hdr[6]);

+    // read video:

+    len1=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC);

+    if(len1){

+	if(demuxer->video)

+	    ds_read_packet(demuxer->video,demuxer->stream,len1,0,demuxer->filepos,0);

+	else

+	    stream_skip(demuxer->stream,len1);

+    }

+    // read audio:

+    len2=(hdr[5])|(hdr[6]<<8);

+    if(len2){

+	if(demuxer->audio)

+	    ds_read_packet(demuxer->audio,demuxer->stream,len2,0,demuxer->filepos+len1,0);

+	else

+	    stream_skip(demuxer->stream,len2);

+    }	    

+

+    return 1;

+	

+}

+

+

+demuxer_t* demux_open_nsv ( demuxer_t* demuxer )

+{

+    // last 2 bytes 17 and 18 are unknown but right after that comes the length

+	unsigned char hdr[17];

+    int len1,len2;

+	sh_video_t *sh_video = NULL;

+	sh_audio_t *sh_audio = NULL;

+    

+	

+	/* Create a new video stream header */

+	sh_video = new_sh_video ( demuxer, 0 );

+

+	/* Make sure the demuxer knows about the new video stream header

+	 * (even though new_sh_video() ought to take care of it)

+	 */

+	demuxer->video->sh = sh_video;

+

+	/* Make sure that the video demuxer stream header knows about its

+	 * parent video demuxer stream (this is getting wacky), or else

+	 * video_read_properties() will choke

+         */

+	sh_video->ds = demuxer->video;

+        

+	  /* disable seeking yet to be fixed*/

+	demuxer->seekable = 0;

+		

+    stream_read(demuxer->stream,hdr,4);

+    if(stream_eof(demuxer->stream)) return 0;

+	

+	/*** if we detected the file to be nsv and there was neither eof nor a header

+	**** that means that its most likely a shoutcast stream so we will need to seek

+	**** to the first occurance of the NSVs header 				 		****/

+	if(!(hdr[0]==0x4E && hdr[1]==0x53 && hdr[2]==0x56)){

+		while(1){

+			stream_read(demuxer->stream,hdr,1);

+			//mp_msg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: Unknown FPS id: %s\n",hdr);

+			if(stream_eof(demuxer->stream)) 

+				return 0;

+			if(hdr[0]!=0x4E)

+				continue;

+				

+			stream_read(demuxer->stream,hdr+1,1);

+			

+			if(stream_eof(demuxer->stream)) 

+				return 0;

+			if(hdr[1]!=0x53)

+				continue;

+				

+			stream_read(demuxer->stream,hdr+2,1);

+			

+			if(stream_eof(demuxer->stream)) 

+				return 0;

+			if(hdr[2]!=0x56)

+				continue;

+				

+			stream_read(demuxer->stream,hdr+3,1);

+			

+			if(stream_eof(demuxer->stream)) 

+				return 0;

+			if(hdr[3]!=0x73)

+				continue;

+			//mp_msg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: Unknown FPS id: %s\n",hdr);

+			

+			break;

+		}

+	}

+	if(hdr[0]==0x4E && hdr[1]==0x53 && hdr[2]==0x56){

+		// NSV header!

+		if(hdr[3]==0x73){

+			// NSVs

+			stream_read(demuxer->stream,hdr+4,17-4);

+			

+		}

+		

+		if(hdr[3]==0x66){

+			// NSVf

+			int len=stream_read_dword_le(demuxer->stream);

+			// TODO: parse out metadata!!!!

+			stream_skip(demuxer->stream,len-8);

+				

+			// NSVs

+			//stream_read(demuxer->stream,hdr,4);

+			stream_read(demuxer->stream,hdr,17);

+		

+		}

+		// 	 bytes 4-7    video codec fourcc

+		sh_video->format=mmioFOURCC(hdr[4],hdr[5],hdr[6],hdr[7]);

+		

+		// 	 bytes 8-11   audio codec fourcc

+		// PCM fourcc needs extra parsing for every audio chunk, yet to implement

+		if( strncmp(hdr+8,"NULL", 4)){

+			sh_audio = new_sh_audio ( demuxer, 0 );

+			demuxer->audio->sh = sh_audio;

+			sh_audio->format=mmioFOURCC(hdr[8],hdr[9],hdr[10],hdr[11]);

+			sh_audio->ds = demuxer->audio;

+		}

+		else 

+		// better set this in any case

+			demuxer->audio = NULL; 

+		

+			

+		// dummy debug message

+		mp_msg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: Unknown FPS id: %s\n",hdr);

+		

+		// new video stream! parse header

+		sh_video->bih=(BITMAPINFOHEADER*)calloc(1,sizeof(BITMAPINFOHEADER));

+		sh_video->bih->biSize=sizeof(BITMAPINFOHEADER);

+		sh_video->bih->biPlanes=1; 

+		sh_video->bih->biBitCount=24;

+		sh_video->bih->biWidth=hdr[12]|(hdr[13]<<8);

+		sh_video->bih->biHeight=hdr[14]|(hdr[15]<<8);

+		memcpy(&sh_video->bih->biCompression,hdr+4,4);

+		//sh_video->bih->biSizeImage=sh_video->bih->biWidth*sh_video->bih->biHeight*3;

+

+		sh_video->disp_w = sh_video->bih->biWidth;

+		sh_video->disp_h = sh_video->bih->biHeight;

+		

+		// if the msb of byte 16 is one we have a and standard fractional framerate

+		switch(hdr[16]){

+		case 0x81:

+			sh_video->fps=(float)30000.0/1001.0;

+			sh_video->frametime = (float)1.0 / (float)sh_video->fps;

+			break;

+		case 0x85:

+			sh_video->fps=(float)15000.0/1001.0;

+			sh_video->frametime = (float)1.0 / (float)sh_video->fps;

+			break;

+		default:

+		    sh_video->fps = (float)hdr[16];

+			sh_video->frametime = 1.0 / sh_video->fps;

+		}		

+

+	}   

+

+	

+	

+	//discard byte 17 and 18 the next 5 are the size of audio/video chunk 

+	

+    stream_read(demuxer->stream,hdr,7);

+	demuxer->filepos=stream_tell(demuxer->stream);

+	

+    mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: %08X: %02X %02X | %02X %02X %02X | %02X %02X  \n",

+	(int)demuxer->filepos, hdr[0],hdr[1],hdr[2],hdr[3],hdr[4],hdr[5],hdr[6]);

+    // read video:

+    len1=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC);

+    if(len1){

+	if(demuxer->video)

+	    ds_read_packet(demuxer->video,demuxer->stream,len1,0,demuxer->filepos,0);

+	else

+	    stream_skip(demuxer->stream,len1);

+    }

+    // read audio:

+    len2=(hdr[5])|(hdr[6]<<8);

+    if(len2){

+	if(demuxer->audio)

+ 	    ds_read_packet(demuxer->audio,demuxer->stream,len2,0,demuxer->filepos+len1,0);

+	else

+	    stream_skip(demuxer->stream,len2);

+    }	    

+

+

+    return demuxer;

+}

+

+int nsv_check_file ( demuxer_t* demuxer )

+{

+	unsigned int id;

+

+	/* Store original position */

+	off_t orig_pos = stream_tell(demuxer->stream);

+

+	mp_msg ( MSGT_DEMUX, MSGL_V, "Checking for Nullsoft Streaming Video\n" );

+   

+	//---- check NSVx header:

+	id=stream_read_dword_le(demuxer->stream);

+	if(id!=mmioFOURCC('N','S','V','f') &&

+	id!=mmioFOURCC('N','S','V','s')) return 0; // not an NSV file

+    

+	stream_reset(demuxer->stream); // clear EOF

+	stream_seek(demuxer->stream,demuxer->stream->start_pos);

+

+    

+	return 1;

+}

+

+void demux_close_nsv(demuxer_t* demuxer) {

+

+}

diff -uNr MPlayer-20040329/libmpdemux/demux_nsv.c~ MPlayer-20040329-nsv2/libmpdemux/demux_nsv.c~

--- MPlayer-20040329/libmpdemux/demux_nsv.c~	1970-01-01 01:00:00.000000000 +0100

+++ MPlayer-20040329-nsv2/libmpdemux/demux_nsv.c~	2004-03-30 08:57:24.000000000 +0200

@@ -0,0 +1,323 @@

+/*

+ * Nullsoft Streaming Video demuxer

+ * for MPlayer

+ * by Reza Jelveh <reza.jelveh at tuhh.de>

+ * seeking and PCM audio not yet supported

+ * 

+ * Based on a'rpis g2 work

+ */

+

+#include <stdio.h>

+#include <stdlib.h>

+#include <unistd.h>

+

+#include "config.h"

+#include "mp_msg.h"

+#include "help_mp.h"

+#include "stream.h"

+#include "demuxer.h"

+#include "stheader.h"

+

+

+/**

+ * Seeking still to be implemented

+ */

+void demux_seek_nsv ( demuxer_t *demuxer, float rel_seek_secs, int flags )

+{

+// seeking is not yet implemented

+}

+

+

+int demux_nsv_fill_buffer ( demuxer_t *demuxer )

+{  

+	unsigned char hdr[17];

+	// len1 = audio chunk length, len2 = video chunk length

+	int len1,len2; 

+	

+	sh_video_t *sh_video = NULL;

+	sh_audio_t *sh_audio = NULL;

+

+	sh_video = demuxer->video->sh ;

+

+	// if the audio/video chunk has no new header the first 2 bytes will be discarded 0xBEEF 

+	// or rather 0xEF 0xBE

+	stream_read(demuxer->stream,hdr,7);

+	if(stream_eof(demuxer->stream)) return 0;

+    // sometimes instead of 0xBEEF as described for the next audio/video chunk we get

+	// a whole new header

+	if(hdr[0]==0x4E && hdr[1]==0x53 && hdr[2]==0x56){

+	// NSV header!

+	if(hdr[3]==0x73){

+	    // NSVs

+	    // get the header since there is no more metaheader after the first one 

+		// there is no more need to skip that

+		stream_read(demuxer->stream,hdr+7,17-7);

+	

+		

+		// theoretically u could have new codecs or other audio for new audio/video chunks     

+		// 	 bytes 4-7    video codec fourcc

+		sh_video->format=mmioFOURCC(hdr[4],hdr[5],hdr[6],hdr[7]);

+    	

+		// 	 bytes 8-11   audio codec fourcc

+		// PCM fourcc needs extra parsing for every audio chunk, yet to implement

+//		if( strncmp(hdr+8,"NULL", 4)){

+//			sh_audio = demuxer->audio->sh;

+//			sh_audio->format=mmioFOURCC(hdr[8],hdr[9],hdr[10],hdr[11]);

+//		}

+//		else 

+//			demuxer->audio= NULL;

+			

+		// new video stream! parse header

+		

+		sh_video->bih=(BITMAPINFOHEADER*)calloc(1,sizeof(BITMAPINFOHEADER));

+		sh_video->bih->biSize=sizeof(BITMAPINFOHEADER);

+		sh_video->bih->biPlanes=1; 

+		sh_video->bih->biBitCount=24;

+		sh_video->bih->biWidth=hdr[12]|(hdr[13]<<8);

+		sh_video->bih->biHeight=hdr[14]|(hdr[15]<<8);

+		memcpy(&sh_video->bih->biCompression,hdr+4,4);

+		sh_video->bih->biSizeImage=sh_video->bih->biWidth*sh_video->bih->biHeight*3;

+		

+		sh_video->disp_w = sh_video->bih->biWidth;

+  		sh_video->disp_h = sh_video->bih->biHeight;

+		

+		

+		// set the framerate

+		// if the msb of byte 16 is one we have a and standard fractional framerate

+		switch(hdr[16]){

+		case 0x81:

+			sh_video->fps = (float)30000.0/1001.0;

+			sh_video->frametime = 1.0 / sh_video->fps;

+			break;

+		case 0x85:

+			sh_video->fps = (float)15000.0/1001.0;

+			sh_video->frametime = 1.0 / sh_video->fps;

+			break;

+			

+		default:

+		    sh_video->fps = (float)hdr[16];

+			sh_video->frametime = 1.0 / sh_video->fps;

+			

+		

+		}

+		

+		stream_read(demuxer->stream,hdr,7);

+

+	}	

+	}	

+	demuxer->filepos=stream_tell(demuxer->stream);

+	

+	

+	

+	mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: %08X: %02X %02X | %02X %02X %02X | %02X %02X  \n",

+	(int)demuxer->filepos, hdr[0],hdr[1],hdr[2],hdr[3],hdr[4],hdr[5],hdr[6]);

+    // read video:

+    len1=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC);

+    if(len1){

+	if(demuxer->video)

+	    ds_read_packet(demuxer->video,demuxer->stream,len1,0,demuxer->filepos,0);

+	else

+	    stream_skip(demuxer->stream,len1);

+    }

+    // read audio:

+    len2=(hdr[5])|(hdr[6]<<8);

+    if(len2){

+	if(demuxer->audio)

+	    ds_read_packet(demuxer->audio,demuxer->stream,len2,0,demuxer->filepos+len1,0);

+	else

+	    stream_skip(demuxer->stream,len2);

+    }	    

+

+    return 1;

+	

+}

+

+

+demuxer_t* demux_open_nsv ( demuxer_t* demuxer )

+{

+    // last 2 bytes 17 and 18 are unknown but right after that comes the length

+	unsigned char hdr[17];

+    int len1,len2;

+	sh_video_t *sh_video = NULL;

+	sh_audio_t *sh_audio = NULL;

+    

+	

+	/* Create a new video stream header */

+	sh_video = new_sh_video ( demuxer, 0 );

+

+	/* Make sure the demuxer knows about the new video stream header

+	 * (even though new_sh_video() ought to take care of it)

+	 */

+	demuxer->video->sh = sh_video;

+

+	/* Make sure that the video demuxer stream header knows about its

+	 * parent video demuxer stream (this is getting wacky), or else

+	 * video_read_properties() will choke

+         */

+	sh_video->ds = demuxer->video;

+        

+	  /* disable seeking yet to be fixed*/

+	demuxer->seekable = 0;

+		

+    stream_read(demuxer->stream,hdr,4);

+    if(stream_eof(demuxer->stream)) return 0;

+	

+	/*** if we detected the file to be nsv and there was neither eof nor a header

+	**** that means that its most likely a shoutcast stream so we will need to seek

+	**** to the first occurance of the NSVs header 				 		****/

+	if(!(hdr[0]==0x4E && hdr[1]==0x53 && hdr[2]==0x56)){

+		while(1){

+			stream_read(demuxer->stream,hdr,1);

+			//mp_msg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: Unknown FPS id: %s\n",hdr);

+			if(stream_eof(demuxer->stream)) 

+				return 0;

+			if(hdr[0]!=0x4E)

+				continue;

+				

+			stream_read(demuxer->stream,hdr+1,1);

+			

+			if(stream_eof(demuxer->stream)) 

+				return 0;

+			if(hdr[1]!=0x53)

+				continue;

+				

+			stream_read(demuxer->stream,hdr+2,1);

+			

+			if(stream_eof(demuxer->stream)) 

+				return 0;

+			if(hdr[2]!=0x56)

+				continue;

+				

+			stream_read(demuxer->stream,hdr+3,1);

+			

+			if(stream_eof(demuxer->stream)) 

+				return 0;

+			if(hdr[3]!=0x73)

+				continue;

+			//mp_msg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: Unknown FPS id: %s\n",hdr);

+			

+			break;

+		}

+	}

+	if(hdr[0]==0x4E && hdr[1]==0x53 && hdr[2]==0x56){

+		// NSV header!

+		if(hdr[3]==0x73){

+			// NSVs

+			stream_read(demuxer->stream,hdr+4,17-4);

+			

+		}

+		

+		if(hdr[3]==0x66){

+			// NSVf

+			int len=stream_read_dword_le(demuxer->stream);

+			// TODO: parse out metadata!!!!

+			stream_skip(demuxer->stream,len-8);

+				

+			// NSVs

+			//stream_read(demuxer->stream,hdr,4);

+			stream_read(demuxer->stream,hdr,17);

+		

+		}

+		// 	 bytes 4-7    video codec fourcc

+		sh_video->format=mmioFOURCC(hdr[4],hdr[5],hdr[6],hdr[7]);

+		

+		// 	 bytes 8-11   audio codec fourcc

+		// PCM fourcc needs extra parsing for every audio chunk, yet to implement

+		if( strncmp(hdr+8,"NULL", 4)){

+			sh_audio = new_sh_audio ( demuxer, 0 );

+			demuxer->audio->sh = sh_audio;

+			sh_audio->format=mmioFOURCC(hdr[8],hdr[9],hdr[10],hdr[11]);

+			sh_audio->ds = demuxer->audio;

+		}

+		else 

+		// better set this in any case

+			demuxer->audio = NULL; 

+		

+			

+		// dummy debug message

+		mp_msg(MSGT_DEMUX,MSGL_WARN,"demux_nsv: Unknown FPS id: %s\n",hdr);

+		

+		// new video stream! parse header

+		sh_video->bih=(BITMAPINFOHEADER*)calloc(1,sizeof(BITMAPINFOHEADER));

+		sh_video->bih->biSize=sizeof(BITMAPINFOHEADER);

+		sh_video->bih->biPlanes=1; 

+		sh_video->bih->biBitCount=24;

+		sh_video->bih->biWidth=hdr[12]|(hdr[13]<<8);

+		sh_video->bih->biHeight=hdr[14]|(hdr[15]<<8);

+		memcpy(&sh_video->bih->biCompression,hdr+4,4);

+		//sh_video->bih->biSizeImage=sh_video->bih->biWidth*sh_video->bih->biHeight*3;

+

+		sh_video->disp_w = sh_video->bih->biWidth;

+		sh_video->disp_h = sh_video->bih->biHeight;

+		

+		// if the msb of byte 16 is one we have a and standard fractional framerate

+		switch(hdr[16]){

+		case 0x81:

+			sh_video->fps=(float)30000.0/1001.0;

+			sh_video->frametime = (float)1.0 / (float)sh_video->fps;

+			break;

+		case 0x85:

+			sh_video->fps=(float)15000.0/1001.0;

+			sh_video->frametime = (float)1.0 / (float)sh_video->fps;

+			break;

+		default:

+		    sh_video->fps = (float)hdr[16];

+			sh_video->frametime = 1.0 / sh_video->fps;

+		}		

+

+	}   

+

+	

+	

+	//discard byte 17 and 18 the next 5 are the size of audio/video chunk 

+	

+    stream_read(demuxer->stream,hdr,7);

+	demuxer->filepos=stream_tell(demuxer->stream);

+	

+    mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_nsv: %08X: %02X %02X | %02X %02X %02X | %02X %02X  \n",

+	(int)demuxer->filepos, hdr[0],hdr[1],hdr[2],hdr[3],hdr[4],hdr[5],hdr[6]);

+    // read video:

+    len1=(hdr[2]>>4)|(hdr[3]<<4)|(hdr[4]<<0xC);

+    if(len1){

+	if(demuxer->video)

+	    ds_read_packet(demuxer->video,demuxer->stream,len1,0,demuxer->filepos,0);

+	else

+	    stream_skip(demuxer->stream,len1);

+    }

+    // read audio:

+    len2=(hdr[5])|(hdr[6]<<8);

+    if(len2){

+	if(demuxer->audio)

+ 	    ds_read_packet(demuxer->audio,demuxer->stream,len2,0,demuxer->filepos+len1,0);

+	else

+	    stream_skip(demuxer->stream,len2);

+    }	    

+

+

+    return demuxer;

+}

+

+int nsv_check_file ( demuxer_t* demuxer )

+{

+	unsigned int id;

+

+	/* Store original position */

+	off_t orig_pos = stream_tell(demuxer->stream);

+

+	mp_msg ( MSGT_DEMUX, MSGL_V, "Checking for Nullsoft Streaming Video\n" );

+   

+	//---- check NSVx header:

+	id=stream_read_dword_le(demuxer->stream);

+	if(id!=mmioFOURCC('N','S','V','f') &&

+	id!=mmioFOURCC('N','S','V','s')) return 0; // not an NSV file

+    

+	stream_reset(demuxer->stream); // clear EOF

+	stream_seek(demuxer->stream,demuxer->stream->start_pos);

+

+    

+	return 1;

+}

+

+void demux_close_nsv(demuxer_t* demuxer) {

+

+}

diff -uNr MPlayer-20040329/libmpdemux/demuxer.c MPlayer-20040329-nsv2/libmpdemux/demuxer.c

--- MPlayer-20040329/libmpdemux/demuxer.c	2004-02-22 07:20:48.000000000 +0100

+++ MPlayer-20040329-nsv2/libmpdemux/demuxer.c	2004-03-30 08:40:04.000000000 +0200

@@ -123,6 +123,7 @@

 extern void demux_close_film(demuxer_t* demuxer);

 extern void demux_close_bmp(demuxer_t* demuxer);

 extern void demux_close_fli(demuxer_t* demuxer);

+extern void demux_close_nsv(demuxer_t* demuxer);

 extern void demux_close_nuv(demuxer_t* demuxer);

 extern void demux_close_audio(demuxer_t* demuxer);

 extern void demux_close_ogg(demuxer_t* demuxer);

@@ -174,6 +175,8 @@

       demux_close_bmp(demuxer); break;

     case DEMUXER_TYPE_FLI:

       demux_close_fli(demuxer); break;

+    case DEMUXER_TYPE_NSV:

+      demux_close_nsv(demuxer); break;

     case DEMUXER_TYPE_NUV:

       demux_close_nuv(demuxer); break;

     case DEMUXER_TYPE_MPEG_TY:

@@ -295,6 +298,7 @@

 int demux_mov_fill_buffer(demuxer_t *demux,demux_stream_t* ds);

 int demux_vivo_fill_buffer(demuxer_t *demux);

 int demux_real_fill_buffer(demuxer_t *demuxer);

+int demux_nsv_fill_buffer(demuxer_t *demux);

 int demux_nuv_fill_buffer(demuxer_t *demux);

 int demux_rtp_fill_buffer(demuxer_t *demux, demux_stream_t* ds);

 int demux_rawdv_fill_buffer(demuxer_t *demuxer);

@@ -339,6 +343,7 @@

     case DEMUXER_TYPE_RAWDV: return demux_rawdv_fill_buffer(demux);

 #endif

     case DEMUXER_TYPE_REAL: return demux_real_fill_buffer(demux);

+    case DEMUXER_TYPE_NSV: return demux_nsv_fill_buffer(demux);

     case DEMUXER_TYPE_NUV: return demux_nuv_fill_buffer(demux);

 #ifdef USE_TV

     case DEMUXER_TYPE_TV: return demux_tv_fill_buffer(demux, ds);

@@ -590,7 +595,9 @@

 extern demuxer_t * demux_open_pva(demuxer_t * demuxer);

 extern int real_check_file(demuxer_t *demuxer);

 extern void demux_open_real(demuxer_t *demuxer);

+extern int nsv_check_file(demuxer_t *demuxer);

 extern int nuv_check_file(demuxer_t *demuxer);

+extern void demux_open_nsv(demuxer_t *demuxer);

 extern void demux_open_nuv(demuxer_t *demuxer);

 extern int demux_audio_open(demuxer_t* demuxer);

 extern int demux_ogg_open(demuxer_t* demuxer);

@@ -705,6 +712,17 @@

       demuxer = NULL;

   }

 }

+//=============== Try to open as NSV file: =================

+if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_NSV){

+  demuxer=new_demuxer(stream,DEMUXER_TYPE_NSV,audio_id,video_id,dvdsub_id);

+  if(file_format==DEMUXER_TYPE_NSV||nsv_check_file(demuxer)){

+      mp_msg(MSGT_DEMUXER,MSGL_INFO,MSGTR_Detected_XXX_FileFormat,"Nullsoft Streaming Video");

+      file_format=DEMUXER_TYPE_NSV;

+  } else {

+      free_demuxer(demuxer);

+      demuxer = NULL;

+  }

+}

 //=============== Try to open as NUV file: =================

 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_NUV){

   demuxer=new_demuxer(stream,DEMUXER_TYPE_NUV,audio_id,video_id,dvdsub_id);

@@ -1169,6 +1187,10 @@

    return demuxer;

 //  break;

  }

+ case DEMUXER_TYPE_NSV: {

+  demux_open_nsv(demuxer);

+  break;

+ }

  case DEMUXER_TYPE_NUV: {

   demux_open_nuv(demuxer);

   break;

diff -uNr MPlayer-20040329/libmpdemux/demuxer.h MPlayer-20040329-nsv2/libmpdemux/demuxer.h

--- MPlayer-20040329/libmpdemux/demuxer.h	2003-12-08 20:33:38.000000000 +0100

+++ MPlayer-20040329-nsv2/libmpdemux/demuxer.h	2004-03-30 08:08:19.000000000 +0200

@@ -43,11 +43,12 @@

 #define DEMUXER_TYPE_REALAUDIO 32

 #define DEMUXER_TYPE_MPEG_TY 33

 #define DEMUXER_TYPE_LMLM4 34

+#define DEMUXER_TYPE_NSV 35

 

 // This should always match the higest demuxer type number.

 // Unless you want to disallow users to force the demuxer to some types

 #define DEMUXER_TYPE_MIN 0

-#define DEMUXER_TYPE_MAX 34

+#define DEMUXER_TYPE_MAX 35

 

 #define DEMUXER_TYPE_DEMUXERS (1<<16)

 // A virtual demuxer type for the network code

diff -uNr MPlayer-20040329/libmpdemux/network.c MPlayer-20040329-nsv2/libmpdemux/network.c

--- MPlayer-20040329/libmpdemux/network.c	2004-03-13 17:10:02.000000000 +0100

+++ MPlayer-20040329-nsv2/libmpdemux/network.c	2004-03-30 08:21:32.000000000 +0200

@@ -92,7 +92,9 @@

 	// Real Media

 	{ "audio/x-pn-realaudio", DEMUXER_TYPE_REAL },

 	// OGG Streaming

-	{ "application/x-ogg", DEMUXER_TYPE_OGG }

+	{ "application/x-ogg", DEMUXER_TYPE_OGG },

+	// NullSoft Streaming Video

+	{ "video/nsv", DEMUXER_TYPE_NSV}

 

 };

 

@@ -778,8 +780,14 @@

 							mp_msg(MSGT_NETWORK,MSGL_INFO,"Public : %s\n", atoi(field_data)?"yes":"no"); field_data = NULL;

 						if( (field_data = http_get_field(http_hdr, "icy-br")) != NULL )

 							mp_msg(MSGT_NETWORK,MSGL_INFO,"Bitrate: %skbit/s\n", field_data); field_data = NULL;

-						// Ok, we have detected an mp3 stream

-						*file_format = DEMUXER_TYPE_AUDIO;

+						

+						// If content-type == video/nsv we most likely have a winamp video stream 

+						// otherwise it should be mp3. if there are more types consider adding mime type 

+						// handling like later

+						if( !strcmp((field_data = http_get_field(http_hdr, "content-type")),"video/nsv"))

+							*file_format = DEMUXER_TYPE_NSV;

+						else

+							*file_format = DEMUXER_TYPE_AUDIO;

 						return 0;

 					}

 					case 400: // Server Full

@@ -1248,6 +1256,7 @@

 		case DEMUXER_TYPE_OGG:

 		case DEMUXER_TYPE_PLAYLIST:

 		case DEMUXER_TYPE_UNKNOWN:

+		case DEMUXER_TYPE_NSV: 

 			// Generic start, doesn't need to filter

 			// the network stream, it's a raw stream

 			ret = nop_streaming_start( stream );




begin 600 nsvpatch.diff
M9&EF9B`M=4YR($U0;&%Y97(M,C`P-#`S,CDO;&EB;7!D96UU>"]-86ME9FEL
M92!-4&QA>65R+3(P,#0P,S(Y+6YS=C(O;&EB;7!D96UU>"]-86ME9FEL90HM
M+2T at 35!L87EE<BTR,#`T,#,R.2]L:6)M<&1E;75X+TUA:V5F:6QE"3(P,#0M
M,#,M,#D@,34Z-#8Z,S0N,#`P,#`P,#`P("LP,3`P"BLK*R!-4&QA>65R+3(P
M,#0P,S(Y+6YS=C(O;&EB;7!D96UU>"]-86ME9FEL90DR,#`T+3`S+3,P(#`X
M.C`V.C0W+C`P,#`P,#`P,"`K,#(P,`I`0"`M,RPW("LS+#<@0$`*(`H@:6YC
M;'5D92`N+B]C;VYF:6<N;6%K"B`*+5-20U,@/2!M<#-?:&1R+F,@=FED96\N
M8R!M<&5G7VAD<BYC(&-A8VAE,BYC(&%S9FAE861E<BYC(&%V:6AE861E<BYC
M(&%V:7!R:6YT+F,@;75X97(N8R!M=7AE<E]A=FDN8R!M=7AE<E]M<&5G+F,@
M9&5M=7A?87-F+F, at 9&5M=7A?879I+F, at 9&5M=7A?;6]V+F,@<&%R<V5?;7`T
M+F, at 9&5M=7A?;7!G+F, at 9&5M=7A?='DN8R!D96UU>%]T>5]O<V0N8R!D96UU
M>%]P=F$N8R!D96UU>%]V:78N8R!D96UU>&5R+F, at 9'9D;F%V7W-T<F5A;2YC
M(&]P96XN8R!P87)S95]E<RYC('-T<F5A;2YC('-T<F5A;5]F:6QE+F,@<W1R
M96%M7VYE='-T<F5A;2YC('-T<F5A;5]V8V0N8R!S=')E86U?;G5L;"YC('-T
M<F5A;5]F='`N8R!T=BYC('1V:5]D=6UM>2YC('1V:5]V-&PN8R!T=FE?=C1L
M,BYC('1V:5]B<V1B=#@T."YC(&9R97%U96YC:65S+F, at 9&5M=7A?9FQI+F,@
M9&5M=7A?<F5A;"YC(&1E;75X7WDT;2YC('EU=C1M<&5G+F,@>75V-&UP96=?
M<F%T:6\N8R!D96UU>%]N=78N8R!D96UU>%]F:6QM+F, at 9&5M=7A?<F]Q+F,@
M;68N8R!D96UU>%]M9BYC(&1E;75X7V%U9&EO+F, at 9&5M=7A?9&5M=7AE<G,N
M8R!D96UU>%]O9V<N8R!D96UU>%]B;7`N8R!C9&1A+F, at 9&5M=7A?<F%W875D
M:6\N8R!D96UU>%]R87=V:61E;RYC(&-D9&(N8R!C9&EN9F\N8R!D96UU>%]R
M87=D=BYC(&%I7V%L<V$N8R!A:5]A;'-A,7 at N8R!A:5]O<W,N8R!A=61I;U]I
M;BYC(&1E;75X7W-M:G!E9RYC(&1E;75X7VQM;&TT+F, at 8W5E7W)E860N8R!E
M>'1E;G-I;VXN8R!D96UU>%]G:68N8R!D96UU>%]T<RYC(&1E;75X7W)E86QA
M=60N8R!U<FPN8R!M=7AE<E]R87=V:61E;RYC"BM34D-3(#T@;7`S7VAD<BYC
M('9I9&5O+F,@;7!E9U]H9'(N8R!C86-H93(N8R!A<V9H96%D97(N8R!A=FEH
M96%D97(N8R!A=FEP<FEN="YC(&UU>&5R+F,@;75X97)?879I+F,@;75X97)?
M;7!E9RYC(&1E;75X7V%S9BYC(&1E;75X7V%V:2YC(&1E;75X7VUO=BYC('!A
M<G-E7VUP-"YC(&1E;75X7VUP9RYC(&1E;75X7W1Y+F, at 9&5M=7A?='E?;W-D
M+F, at 9&5M=7A?<'9A+F, at 9&5M=7A?=FEV+F, at 9&5M=7AE<BYC(&1V9&YA=E]S
M=')E86TN8R!O<&5N+F,@<&%R<V5?97,N8R!S=')E86TN8R!S=')E86U?9FEL
M92YC('-T<F5A;5]N971S=')E86TN8R!S=')E86U?=F-D+F,@<W1R96%M7VYU
M;&PN8R!S=')E86U?9G1P+F,@='8N8R!T=FE?9'5M;7DN8R!T=FE?=C1L+F,@
M='9I7W8T;#(N8R!T=FE?8G-D8G0X-#@N8R!F<F5Q=65N8VEE<RYC(&1E;75X
M7V9L:2YC(&1E;75X7W)E86PN8R!D96UU>%]Y-&TN8R!Y=78T;7!E9RYC('EU
M=C1M<&5G7W)A=&EO+F, at 9&5M=7A?;G-V+F, at 9&5M=7A?;G5V+F, at 9&5M=7A?
M9FEL;2YC(&1E;75X7W)O<2YC(&UF+F, at 9&5M=7A?;68N8R!D96UU>%]A=61I
M;RYC(&1E;75X7V1E;75X97)S+F, at 9&5M=7A?;V=G+F, at 9&5M=7A?8FUP+F,@
M8V1D82YC(&1E;75X7W)A=V%U9&EO+F, at 9&5M=7A?<F%W=FED96\N8R!C9&1B
M+F, at 8V1I;F9O+F, at 9&5M=7A?<F%W9'8N8R!A:5]A;'-A+F, at 86E?86QS83%X
M+F, at 86E?;W-S+F, at 875D:6]?:6XN8R!D96UU>%]S;6IP96<N8R!D96UU>%]L
M;6QM-"YC(&-U95]R96%D+F, at 97AT96YS:6]N+F, at 9&5M=7A?9VEF+F, at 9&5M
M=7A?=',N8R!D96UU>%]R96%L875D+F,@=7)L+F,@;75X97)?<F%W=FED96\N
M8PH@:69E<2`H)"A834U37U!,54=)3E,I+'EE<RD*(%-20U,@*ST at 9&5M=7A?
M>&UM<RYC"B!E;F1I9B`*9&EF9B`M=4YR($U0;&%Y97(M,C`P-#`S,CDO;&EB
M;7!D96UU>"]D96UU>%]N<W8N8R!-4&QA>65R+3(P,#0P,S(Y+6YS=C(O;&EB
M;7!D96UU>"]D96UU>%]N<W8N8PHM+2T at 35!L87EE<BTR,#`T,#,R.2]L:6)M
M<&1E;75X+V1E;75X7VYS=BYC"3$Y-S`M,#$M,#$@,#$Z,#`Z,#`N,#`P,#`P
M,#`P("LP,3`P"BLK*R!-4&QA>65R+3(P,#0P,S(Y+6YS=C(O;&EB;7!D96UU
M>"]D96UU>%]N<W8N8PDR,#`T+3`S+3,P(#`X.C4W.C0P+C`P,#`P,#`P,"`K
M,#(P,`I`0"`M,"PP("LQ+#,R,R!`0`HK+RH**R`J($YU;&QS;V9T(%-T<F5A
M;6EN9R!6:61E;R!D96UU>&5R"BL@*B!F;W(@35!L87EE<@HK("H at 8GD@4F5Z
M82!*96QV96@@/')E>F$N:F5L=F5H0'1U:&@N9&4^"BL@*B!S965K:6YG(&%N
M9"!00TT at 875D:6\@;F]T('EE="!S=7!P;W)T960**R`J(%!#32!N965D<R!E
M>'1R82!A=61I;R!C:'5N:R`B;6EN:6AE861E<B(@<&%R<VEN9PHK("H at 0F%S
M960@;VX at 82=R<&ES(&<R('=O<FL**R`J+PHK"BLC:6YC;'5D92`\<W1D:6\N
M:#X**R-I;F-L=61E(#QS=&1L:6(N:#X**R-I;F-L=61E(#QU;FES=&0N:#X*
M*PHK(VEN8VQU9&4@(F-O;F9I9RYH(@HK(VEN8VQU9&4@(FUP7VUS9RYH(@HK
M(VEN8VQU9&4@(FAE;'!?;7`N:"(**R-I;F-L=61E(")S=')E86TN:"(**R-I
M;F-L=61E(")D96UU>&5R+F at B"BLC:6YC;'5D92`B<W1H96%D97(N:"(**PHK
M"BLO*BH**R`J(%-E96MI;F<@<W1I;&P@=&\@8F4@:6UP;&5M96YT960**R`J
M+PHK=F]I9"!D96UU>%]S965K7VYS=B`H(&1E;75X97)?="`J9&5M=7AE<BP@
M9FQO870@<F5L7W-E96M?<V5C<RP@:6YT(&9L86=S("D**WL**R\O('-E96MI
M;F<@:7,@;F]T('EE="!I;7!L96UE;G1E9`HK?0HK"BL**VEN="!D96UU>%]N
M<W9?9FEL;%]B=69F97(@*"!D96UU>&5R7W0@*F1E;75X97(@*0HK>R`@"BL)
M=6YS:6=N960 at 8VAA<B!H9');,3==.PHK"2\O(&QE;C$@/2!A=61I;R!C:'5N
M:R!L96YG=&@L(&QE;C(@/2!V:61E;R!C:'5N:R!L96YG=&@**PEI;G0@;&5N
M,2QL96XR.R`**PD**PES:%]V:61E;U]T("IS:%]V:61E;R`]($Y53$P["BL)
M<VA?875D:6]?="`J<VA?875D:6\@/2!.54Q,.PHK"BL)<VA?=FED96\@/2!D
M96UU>&5R+3YV:61E;RT^<V@@.PHK"BL)+R\@:68@=&AE(&%U9&EO+W9I9&5O
M(&-H=6YK(&AA<R!N;R!N97<@:&5A9&5R('1H92!F:7)S="`R(&)Y=&5S('=I
M;&P at 8F4@9&ES8V%R9&5D(#!X0D5%1B`**PDO+R!O<B!R871H97(@,'A%1B`P
M>$)%"BL)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M+&AD<BPW*3L**PEI
M9BAS=')E86U?96]F*&1E;75X97(M/G-T<F5A;2DI(')E='5R;B`P.PHK("`@
M("\O('-O;65T:6UE<R!I;G-T96%D(&]F(#!X0D5%1B!A<R!D97-C<FEB960@
M9F]R('1H92!N97AT(&%U9&EO+W9I9&5O(&-H=6YK('=E(&=E=`HK"2\O(&$@
M=VAO;&4@;F5W(&AE861E<@HK"6EF*&AD<ELP73T],'@T12`F)B!H9');,5T]
M/3!X-3,@)B8@:&1R6S)=/3TP>#4V*7L**PDO+R!.4U8@:&5A9&5R(0HK"6EF
M*&AD<ELS73T],'@W,RE["BL)("`@("\O($Y35G,**PD@("`@+R\@9V5T('1H
M92!H96%D97(@<VEN8V4@=&AE<F4@:7,@;F\@;6]R92!M971A:&5A9&5R(&%F
M=&5R('1H92!F:7)S="!O;F4@"BL)"2\O('1H97)E(&ES(&YO(&UO<F4@;F5E
M9"!T;R!S:VEP('1H870**PD)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M
M+&AD<BLW+#$W+3<I.PHK"0HK"0D**PD)+R\@=&AE;W)E=&EC86QL>2!U(&-O
M=6QD(&AA=F4@;F5W(&-O9&5C<R!O<B!O=&AE<B!A=61I;R!F;W(@;F5W(&%U
M9&EO+W9I9&5O(&-H=6YK<R`@("`@"BL)"2\O(`D at 8GET97, at -"TW("`@('9I
M9&5O(&-O9&5C(&9O=7)C8PHK"0ES:%]V:61E;RT^9F]R;6%T/6UM:6]&3U52
M0T,H:&1R6S1=+&AD<ELU72QH9');-ETL:&1R6S==*3L**R`@("`)"BL)"2\O
M(`D at 8GET97, at ."TQ,2`@(&%U9&EO(&-O9&5C(&9O=7)C8PHK"0DO+R!00TT@
M9F]U<F-C(&YE961S(&5X=')A('!A<G-I;F<@9F]R(&5V97)Y(&%U9&EO(&-H
M=6YK+"!Y970@=&\@:6UP;&5M96YT"BLO+PD):68H('-T<FYC;7`H:&1R*S at L
M(DY53$PB+"`T*2E["BLO+PD)"7-H7V%U9&EO(#T at 9&5M=7AE<BT^875D:6\M
M/G-H.PHK+R\)"0ES:%]A=61I;RT^9F]R;6%T/6UM:6]&3U520T,H:&1R6SA=
M+&AD<ELY72QH9');,3!=+&AD<ELQ,5TI.PHK+R\)"7T**R\O"0EE;'-E(`HK
M+R\)"0ED96UU>&5R+3YA=61I;ST at 3E5,3#L**PD)"0HK"0DO+R!N97<@=FED
M96\@<W1R96%M(2!P87)S92!H96%D97(**PD)"BL)"7-H7W9I9&5O+3YB:6@]
M*$))5$U!4$E.1D](14%$15(J*6-A;&QO8R at Q+'-I>F5O9BA"251-05!)3D9/
M2$5!1$52*2D["BL)"7-H7W9I9&5O+3YB:6 at M/F)I4VEZ93US:7IE;V8H0DE4
M34%024Y&3TA%041%4BD["BL)"7-H7W9I9&5O+3YB:6 at M/F)I4&QA;F5S/3$[
M(`HK"0ES:%]V:61E;RT^8FEH+3YB:4)I=$-O=6YT/3(T.PHK"0ES:%]V:61E
M;RT^8FEH+3YB:5=I9'1H/6AD<ELQ,EU\*&AD<ELQ,UT\/#@I.PHK"0ES:%]V
M:61E;RT^8FEH+3YB:4AE:6=H=#UH9');,31=?"AH9');,35=/#PX*3L**PD)
M;65M8W!Y*"9S:%]V:61E;RT^8FEH+3YB:4-O;7!R97-S:6]N+&AD<BLT+#0I
M.PHK"0ES:%]V:61E;RT^8FEH+3YB:5-I>F5);6%G93US:%]V:61E;RT^8FEH
M+3YB:5=I9'1H*G-H7W9I9&5O+3YB:6 at M/F)I2&5I9VAT*C,["BL)"0HK"0ES
M:%]V:61E;RT^9&ES<%]W(#T@<VA?=FED96\M/F)I:"T^8FE7:61T:#L**R`@
M"0ES:%]V:61E;RT^9&ES<%]H(#T@<VA?=FED96\M/F)I:"T^8FE(96EG:'0[
M"BL)"0HK"0D**PD)+R\@<V5T('1H92!F<F%M97)A=&4**PD)+R\@:68@=&AE
M(&US8B!O9B!B>71E(#$V(&ES(&]N92!W92!H879E(&$@86YD('-T86YD87)D
M(&9R86-T:6]N86P at 9G)A;65R871E"BL)"7-W:71C:"AH9');,39=*7L**PD)
M8V%S92`P>#@Q. at HK"0D)<VA?=FED96\M/F9P<R`]("AF;&]A="DS,#`P,"XP
M+S$P,#$N,#L**PD)"7-H7W9I9&5O+3YF<F%M971I;64@/2`Q+C`@+R!S:%]V
M:61E;RT^9G!S.PHK"0D)8G)E86L["BL)"6-A<V4@,'@X-3H**PD)"7-H7W9I
M9&5O+3YF<',@/2`H9FQO870I,34P,#`N,"\Q,#`Q+C`["BL)"0ES:%]V:61E
M;RT^9G)A;65T:6UE(#T@,2XP("\@<VA?=FED96\M/F9P<SL**PD)"6)R96%K
M.PHK"0D)"BL)"61E9F%U;'0Z"BL)"2`@("!S:%]V:61E;RT^9G!S(#T@*&9L
M;V%T*6AD<ELQ-ET["BL)"0ES:%]V:61E;RT^9G)A;65T:6UE(#T@,2XP("\@
M<VA?=FED96\M/F9P<SL**PD)"0HK"0D**PD)?0HK"0D**PD)<W1R96%M7W)E
M860H9&5M=7AE<BT^<W1R96%M+&AD<BPW*3L**PHK"7T)"BL)?0D**PED96UU
M>&5R+3YF:6QE<&]S/7-T<F5A;5]T96QL*&1E;75X97(M/G-T<F5A;2D["BL)
M"BL)"BL)"BL);7!?;7-G*$U31U1?1$5-55 at L35-'3%]$0D<R+")D96UU>%]N
M<W8Z("4P.%@Z("4P,E@@)3`R6"!\("4P,E@@)3`R6"`E,#)8('P@)3`R6"`E
M,#)8("!<;B(L"BL)*&EN="ED96UU>&5R+3YF:6QE<&]S+"!H9');,%TL:&1R
M6S%=+&AD<ELR72QH9');,UTL:&1R6S1=+&AD<ELU72QH9');-ETI.PHK("`@
M("\O(')E860@=FED96\Z"BL@("`@;&5N,3TH:&1R6S)=/CXT*7PH:&1R6S-=
M/#PT*7PH:&1R6S1=/#PP>$,I.PHK("`@(&EF*&QE;C$I>PHK"6EF*&1E;75X
M97(M/G9I9&5O*0HK"2`@("!D<U]R96%D7W!A8VME="AD96UU>&5R+3YV:61E
M;RQD96UU>&5R+3YS=')E86TL;&5N,2PP+&1E;75X97(M/F9I;&5P;W,L,"D[
M"BL)96QS90HK"2`@("!S=')E86U?<VMI<"AD96UU>&5R+3YS=')E86TL;&5N
M,2D["BL@("`@?0HK("`@("\O(')E860 at 875D:6\Z"BL@("`@;&5N,CTH:&1R
M6S5=*7PH:&1R6S9=/#PX*3L**R`@("!I9BAL96XR*7L**PEI9BAD96UU>&5R
M+3YA=61I;RD**PD@("`@9'-?<F5A9%]P86-K970H9&5M=7AE<BT^875D:6\L
M9&5M=7AE<BT^<W1R96%M+&QE;C(L,"QD96UU>&5R+3YF:6QE<&]S*VQE;C$L
M,"D["BL)96QS90HK"2`@("!S=')E86U?<VMI<"AD96UU>&5R+3YS=')E86TL
M;&5N,BD["BL@("`@?0D@("`@"BL**R`@("!R971U<FX@,3L**PD**WT**PHK
M"BMD96UU>&5R7W0J(&1E;75X7V]P96Y?;G-V("@@9&5M=7AE<E]T*B!D96UU
M>&5R("D**WL**R`@("`O+R!L87-T(#(@8GET97,@,3<@86YD(#$X(&%R92!U
M;FMN;W=N(&)U="!R:6=H="!A9G1E<B!T:&%T(&-O;65S('1H92!L96YG=&@*
M*PEU;G-I9VYE9"!C:&%R(&AD<ELQ-UT["BL@("`@:6YT(&QE;C$L;&5N,CL*
M*PES:%]V:61E;U]T("IS:%]V:61E;R`]($Y53$P["BL)<VA?875D:6]?="`J
M<VA?875D:6\@/2!.54Q,.PHK("`@(`HK"0HK"2\J($-R96%T92!A(&YE=R!V
M:61E;R!S=')E86T@:&5A9&5R("HO"BL)<VA?=FED96\@/2!N97=?<VA?=FED
M96\@*"!D96UU>&5R+"`P("D["BL**PDO*B!-86ME('-U<F4@=&AE(&1E;75X
M97(@:VYO=W, at 86)O=70@=&AE(&YE=R!V:61E;R!S=')E86T@:&5A9&5R"BL)
M("H@*&5V96X@=&AO=6=H(&YE=U]S:%]V:61E;R at I(&]U9VAT('1O('1A:V4@
M8V%R92!O9B!I="D**PD@*B\**PED96UU>&5R+3YV:61E;RT^<V@@/2!S:%]V
M:61E;SL**PHK"2\J($UA:V4@<W5R92!T:&%T('1H92!V:61E;R!D96UU>&5R
M('-T<F5A;2!H96%D97(@:VYO=W, at 86)O=70@:71S"BL)("H@<&%R96YT('9I
M9&5O(&1E;75X97(@<W1R96%M("AT:&ES(&ES(&=E='1I;F<@=V%C:WDI+"!O
M<B!E;'-E"BL)("H@=FED96]?<F5A9%]P<F]P97)T:65S*"D@=VEL;"!C:&]K
M90HK("`@("`@("`@*B\**PES:%]V:61E;RT^9',@/2!D96UU>&5R+3YV:61E
M;SL**R`@("`@("`@"BL)("`O*B!D:7-A8FQE('-E96MI;F<@>65T('1O(&)E
M(&9I>&5D*B\**PED96UU>&5R+3YS965K86)L92`](#`["BL)"0HK("`@('-T
M<F5A;5]R96%D*&1E;75X97(M/G-T<F5A;2QH9'(L-"D["BL@("`@:68H<W1R
M96%M7V5O9BAD96UU>&5R+3YS=')E86TI*2!R971U<FX@,#L**PD**PDO*BHJ
M(&EF('=E(&1E=&5C=&5D('1H92!F:6QE('1O(&)E(&YS=B!A;F0@=&AE<F4@
M=V%S(&YE:71H97(@96]F(&YO<B!A(&AE861E<@HK"2HJ*BH@=&AA="!M96%N
M<R!T:&%T(&ET<R!M;W-T(&QI:V5L>2!A('-H;W5T8V%S="!S=')E86T@<V\@
M=V4@=VEL;"!N965D('1O('-E96L**PDJ*BHJ('1O('1H92!F:7)S="!O8V-U
M<F%N8V4@;V8@=&AE($Y35G,@:&5A9&5R(`D)"0D@"0DJ*BHJ+PHK"6EF*"$H
M:&1R6S!=/3TP>#1%("8F(&AD<ELQ73T],'@U,R`F)B!H9');,ET]/3!X-38I
M*7L**PD)=VAI;&4H,2E["BL)"0ES=')E86U?<F5A9"AD96UU>&5R+3YS=')E
M86TL:&1R+#$I.PHK"0D)+R]M<%]M<V<H35-'5%]$14U56"Q-4T=,7U=!4DXL
M(F1E;75X7VYS=CH at 56YK;F]W;B!&4%,@:60Z("5S7&XB+&AD<BD["BL)"0EI
M9BAS=')E86U?96]F*&1E;75X97(M/G-T<F5A;2DI(`HK"0D)"7)E='5R;B`P
M.PHK"0D):68H:&1R6S!=(3TP>#1%*0HK"0D)"6-O;G1I;G5E.PHK"0D)"0HK
M"0D)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M+&AD<BLQ+#$I.PHK"0D)
M"BL)"0EI9BAS=')E86U?96]F*&1E;75X97(M/G-T<F5A;2DI(`HK"0D)"7)E
M='5R;B`P.PHK"0D):68H:&1R6S%=(3TP>#4S*0HK"0D)"6-O;G1I;G5E.PHK
M"0D)"0HK"0D)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M+&AD<BLR+#$I
M.PHK"0D)"BL)"0EI9BAS=')E86U?96]F*&1E;75X97(M/G-T<F5A;2DI(`HK
M"0D)"7)E='5R;B`P.PHK"0D):68H:&1R6S)=(3TP>#4V*0HK"0D)"6-O;G1I
M;G5E.PHK"0D)"0HK"0D)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M+&AD
M<BLS+#$I.PHK"0D)"BL)"0EI9BAS=')E86U?96]F*&1E;75X97(M/G-T<F5A
M;2DI(`HK"0D)"7)E='5R;B`P.PHK"0D):68H:&1R6S-=(3TP>#<S*0HK"0D)
M"6-O;G1I;G5E.PHK"0D)+R]M<%]M<V<H35-'5%]$14U56"Q-4T=,7U=!4DXL
M(F1E;75X7VYS=CH at 56YK;F]W;B!&4%,@:60Z("5S7&XB+&AD<BD["BL)"0D*
M*PD)"6)R96%K.PHK"0E]"BL)?0HK"6EF*&AD<ELP73T],'@T12`F)B!H9');
M,5T]/3!X-3,@)B8@:&1R6S)=/3TP>#4V*7L**PD)+R\@3E-6(&AE861E<B$*
M*PD):68H:&1R6S-=/3TP>#<S*7L**PD)"2\O($Y35G,**PD)"7-T<F5A;5]R
M96%D*&1E;75X97(M/G-T<F5A;2QH9'(K-"PQ-RTT*3L**PD)"0HK"0E]"BL)
M"0HK"0EI9BAH9');,UT]/3!X-C8I>PHK"0D)+R\@3E-69 at HK"0D):6YT(&QE
M;CUS=')E86U?<F5A9%]D=V]R9%]L92AD96UU>&5R+3YS=')E86TI.PHK"0D)
M+R\@5$]$3SH@<&%R<V4@;W5T(&UE=&%D871A(2$A(0HK"0D)<W1R96%M7W-K
M:7`H9&5M=7AE<BT^<W1R96%M+&QE;BTX*3L**PD)"0D**PD)"2\O($Y35G,*
M*PD)"2\O<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M+&AD<BPT*3L**PD)
M"7-T<F5A;5]R96%D*&1E;75X97(M/G-T<F5A;2QH9'(L,3<I.PHK"0D**PD)
M?0HK"0DO+R`)(&)Y=&5S(#0M-R`@("!V:61E;R!C;V1E8R!F;W5R8V,**PD)
M<VA?=FED96\M/F9O<FUA=#UM;6EO1D]54D-#*&AD<ELT72QH9');-5TL:&1R
M6S9=+&AD<ELW72D["BL)"0HK"0DO+R`)(&)Y=&5S(#@M,3$@("!A=61I;R!C
M;V1E8R!F;W5R8V,**PD)+R\@4$--(&9O=7)C8R!N965D<R!E>'1R82!P87)S
M:6YG(&9O<B!E=F5R>2!A=61I;R!C:'5N:RP@>65T('1O(&EM<&QE;65N=`HK
M"0EI9B@@<W1R;F-M<"AH9'(K."PB3E5,3"(L(#0I*7L**PD)"7-H7V%U9&EO
M(#T@;F5W7W-H7V%U9&EO("@@9&5M=7AE<BP@,"`I.PHK"0D)9&5M=7AE<BT^
M875D:6\M/G-H(#T@<VA?875D:6\["BL)"0ES:%]A=61I;RT^9F]R;6%T/6UM
M:6]&3U520T,H:&1R6SA=+&AD<ELY72QH9');,3!=+&AD<ELQ,5TI.PHK"0D)
M<VA?875D:6\M/F1S(#T at 9&5M=7AE<BT^875D:6\["BL)"7T**PD)96QS92`*
M*PD)+R\@8F5T=&5R('-E="!T:&ES(&EN(&%N>2!C87-E"BL)"0ED96UU>&5R
M+3YA=61I;R`]($Y53$P[(`HK"0D**PD)"0HK"0DO+R!D=6UM>2!D96)U9R!M
M97-S86=E"BL)"6UP7VUS9RA-4T=47T1%3558+$U31TQ?5T%23BPB9&5M=7A?
M;G-V.B!5;FMN;W=N($904R!I9#H@)7-<;B(L:&1R*3L**PD)"BL)"2\O(&YE
M=R!V:61E;R!S=')E86TA('!A<G-E(&AE861E<@HK"0ES:%]V:61E;RT^8FEH
M/2A"251-05!)3D9/2$5!1$52*BEC86QL;V,H,2QS:7IE;V8H0DE434%024Y&
M3TA%041%4BDI.PHK"0ES:%]V:61E;RT^8FEH+3YB:5-I>F4]<VEZ96]F*$))
M5$U!4$E.1D](14%$15(I.PHK"0ES:%]V:61E;RT^8FEH+3YB:5!L86YE<STQ
M.R`**PD)<VA?=FED96\M/F)I:"T^8FE":71#;W5N=#TR-#L**PD)<VA?=FED
M96\M/F)I:"T^8FE7:61T:#UH9');,3)=?"AH9');,3-=/#PX*3L**PD)<VA?
M=FED96\M/F)I:"T^8FE(96EG:'0]:&1R6S$T77PH:&1R6S$U73P\."D["BL)
M"6UE;6-P>2 at F<VA?=FED96\M/F)I:"T^8FE#;VUP<F5S<VEO;BQH9'(K-"PT
M*3L**PD)+R]S:%]V:61E;RT^8FEH+3YB:5-I>F5);6%G93US:%]V:61E;RT^
M8FEH+3YB:5=I9'1H*G-H7W9I9&5O+3YB:6 at M/F)I2&5I9VAT*C,["BL**PD)
M<VA?=FED96\M/F1I<W!?=R`]('-H7W9I9&5O+3YB:6 at M/F)I5VED=&@["BL)
M"7-H7W9I9&5O+3YD:7-P7V@@/2!S:%]V:61E;RT^8FEH+3YB:4AE:6=H=#L*
M*PD)"BL)"2\O(&EF('1H92!M<V(@;V8 at 8GET92`Q-B!I<R!O;F4@=V4@:&%V
M92!A(&%N9"!S=&%N9&%R9"!F<F%C=&EO;F%L(&9R86UE<F%T90HK"0ES=VET
M8V at H:&1R6S$V72E["BL)"6-A<V4@,'@X,3H**PD)"7-H7W9I9&5O+3YF<',]
M*&9L;V%T*3,P,#`P+C`O,3`P,2XP.PHK"0D)<VA?=FED96\M/F9R86UE=&EM
M92`]("AF;&]A="DQ+C`@+R`H9FQO870I<VA?=FED96\M/F9P<SL**PD)"6)R
M96%K.PHK"0EC87-E(#!X.#4Z"BL)"0ES:%]V:61E;RT^9G!S/2AF;&]A="DQ
M-3`P,"XP+S$P,#$N,#L**PD)"7-H7W9I9&5O+3YF<F%M971I;64@/2`H9FQO
M870I,2XP("\@*&9L;V%T*7-H7W9I9&5O+3YF<',["BL)"0EB<F5A:SL**PD)
M9&5F875L=#H**PD)("`@('-H7W9I9&5O+3YF<',@/2`H9FQO870I:&1R6S$V
M73L**PD)"7-H7W9I9&5O+3YF<F%M971I;64@/2`Q+C`@+R!S:%]V:61E;RT^
M9G!S.PHK"0E]"0D**PHK"7T@("`**PHK"0HK"0HK"2\O9&ES8V%R9"!B>71E
M(#$W(&%N9"`Q."!T:&4@;F5X="`U(&%R92!T:&4@<VEZ92!O9B!A=61I;R]V
M:61E;R!C:'5N:R`**PD**R`@("!S=')E86U?<F5A9"AD96UU>&5R+3YS=')E
M86TL:&1R+#<I.PHK"61E;75X97(M/F9I;&5P;W,]<W1R96%M7W1E;&PH9&5M
M=7AE<BT^<W1R96%M*3L**PD**R`@("!M<%]M<V<H35-'5%]$14U56"Q-4T=,
M7T1"1S(L(F1E;75X7VYS=CH@)3`X6#H@)3`R6"`E,#)8('P@)3`R6"`E,#)8
M("4P,E@@?"`E,#)8("4P,E@@(%QN(BP**PDH:6YT*61E;75X97(M/F9I;&5P
M;W,L(&AD<ELP72QH9');,5TL:&1R6S)=+&AD<ELS72QH9');-%TL:&1R6S5=
M+&AD<ELV72D["BL@("`@+R\@<F5A9"!V:61E;SH**R`@("!L96XQ/2AH9');
M,ET^/C0I?"AH9');,UT\/#0I?"AH9');-%T\/#!X0RD["BL@("`@:68H;&5N
M,2E["BL):68H9&5M=7AE<BT^=FED96\I"BL)("`@(&1S7W)E861?<&%C:V5T
M*&1E;75X97(M/G9I9&5O+&1E;75X97(M/G-T<F5A;2QL96XQ+#`L9&5M=7AE
M<BT^9FEL97!O<RPP*3L**PEE;'-E"BL)("`@('-T<F5A;5]S:VEP*&1E;75X
M97(M/G-T<F5A;2QL96XQ*3L**R`@("!]"BL@("`@+R\@<F5A9"!A=61I;SH*
M*R`@("!L96XR/2AH9');-5TI?"AH9');-ET\/#@I.PHK("`@(&EF*&QE;C(I
M>PHK"6EF*&1E;75X97(M/F%U9&EO*0HK(`D@("`@9'-?<F5A9%]P86-K970H
M9&5M=7AE<BT^875D:6\L9&5M=7AE<BT^<W1R96%M+&QE;C(L,"QD96UU>&5R
M+3YF:6QE<&]S*VQE;C$L,"D["BL)96QS90HK"2`@("!S=')E86U?<VMI<"AD
M96UU>&5R+3YS=')E86TL;&5N,BD["BL@("`@?0D@("`@"BL**PHK("`@(')E
M='5R;B!D96UU>&5R.PHK?0HK"BMI;G0@;G-V7V-H96-K7V9I;&4@*"!D96UU
M>&5R7W0J(&1E;75X97(@*0HK>PHK"75N<VEG;F5D(&EN="!I9#L**PHK"2\J
M(%-T;W)E(&]R:6=I;F%L('!O<VET:6]N("HO"BL);V9F7W0@;W)I9U]P;W,@
M/2!S=')E86U?=&5L;"AD96UU>&5R+3YS=')E86TI.PHK"BL);7!?;7-G("@@
M35-'5%]$14U56"P at 35-'3%]6+"`B0VAE8VMI;F<@9F]R($YU;&QS;V9T(%-T
M<F5A;6EN9R!6:61E;UQN(B`I.PHK("`@"BL)+R\M+2TM(&-H96-K($Y35G@@
M:&5A9&5R. at HK"6ED/7-T<F5A;5]R96%D7V1W;W)D7VQE*&1E;75X97(M/G-T
M<F5A;2D["BL):68H:60A/6UM:6]&3U520T,H)TXG+"=3)RPG5B<L)V8G*2`F
M)@HK"6ED(3UM;6EO1D]54D-#*"=.)RPG4R<L)U8G+"=S)RDI(')E='5R;B`P
M.R`O+R!N;W0 at 86X@3E-6(&9I;&4**R`@("`**PES=')E86U?<F5S970H9&5M
M=7AE<BT^<W1R96%M*3L at +R\@8VQE87(@14]&"BL)<W1R96%M7W-E96LH9&5M
M=7AE<BT^<W1R96%M+&1E;75X97(M/G-T<F5A;2T^<W1A<G1?<&]S*3L**PHK
M("`@(`HK"7)E='5R;B`Q.PHK?0HK"BMV;VED(&1E;75X7V-L;W-E7VYS=BAD
M96UU>&5R7W0J(&1E;75X97(I('L**PHK?0ID:69F("UU3G(@35!L87EE<BTR
M,#`T,#,R.2]L:6)M<&1E;75X+V1E;75X7VYS=BYC?B!-4&QA>65R+3(P,#0P
M,S(Y+6YS=C(O;&EB;7!D96UU>"]D96UU>%]N<W8N8WX*+2TM($U0;&%Y97(M
M,C`P-#`S,CDO;&EB;7!D96UU>"]D96UU>%]N<W8N8WX),3DW,"TP,2TP,2`P
M,3HP,#HP,"XP,#`P,#`P,#`@*S`Q,#`**RLK($U0;&%Y97(M,C`P-#`S,CDM
M;G-V,B]L:6)M<&1E;75X+V1E;75X7VYS=BYC?@DR,#`T+3`S+3,P(#`X.C4W
M.C(T+C`P,#`P,#`P,"`K,#(P,`I`0"`M,"PP("LQ+#,R,R!`0`HK+RH**R`J
M($YU;&QS;V9T(%-T<F5A;6EN9R!6:61E;R!D96UU>&5R"BL@*B!F;W(@35!L
M87EE<@HK("H at 8GD@4F5Z82!*96QV96@@/')E>F$N:F5L=F5H0'1U:&@N9&4^
M"BL@*B!S965K:6YG(&%N9"!00TT at 875D:6\@;F]T('EE="!S=7!P;W)T960*
M*R`J(`HK("H at 0F%S960@;VX at 82=R<&ES(&<R('=O<FL**R`J+PHK"BLC:6YC
M;'5D92`\<W1D:6\N:#X**R-I;F-L=61E(#QS=&1L:6(N:#X**R-I;F-L=61E
M(#QU;FES=&0N:#X**PHK(VEN8VQU9&4@(F-O;F9I9RYH(@HK(VEN8VQU9&4@
M(FUP7VUS9RYH(@HK(VEN8VQU9&4@(FAE;'!?;7`N:"(**R-I;F-L=61E(")S
M=')E86TN:"(**R-I;F-L=61E(")D96UU>&5R+F at B"BLC:6YC;'5D92`B<W1H
M96%D97(N:"(**PHK"BLO*BH**R`J(%-E96MI;F<@<W1I;&P@=&\@8F4@:6UP
M;&5M96YT960**R`J+PHK=F]I9"!D96UU>%]S965K7VYS=B`H(&1E;75X97)?
M="`J9&5M=7AE<BP at 9FQO870@<F5L7W-E96M?<V5C<RP@:6YT(&9L86=S("D*
M*WL**R\O('-E96MI;F<@:7,@;F]T('EE="!I;7!L96UE;G1E9`HK?0HK"BL*
M*VEN="!D96UU>%]N<W9?9FEL;%]B=69F97(@*"!D96UU>&5R7W0@*F1E;75X
M97(@*0HK>R`@"BL)=6YS:6=N960 at 8VAA<B!H9');,3==.PHK"2\O(&QE;C$@
M/2!A=61I;R!C:'5N:R!L96YG=&@L(&QE;C(@/2!V:61E;R!C:'5N:R!L96YG
M=&@**PEI;G0@;&5N,2QL96XR.R`**PD**PES:%]V:61E;U]T("IS:%]V:61E
M;R`]($Y53$P["BL)<VA?875D:6]?="`J<VA?875D:6\@/2!.54Q,.PHK"BL)
M<VA?=FED96\@/2!D96UU>&5R+3YV:61E;RT^<V@@.PHK"BL)+R\@:68@=&AE
M(&%U9&EO+W9I9&5O(&-H=6YK(&AA<R!N;R!N97<@:&5A9&5R('1H92!F:7)S
M="`R(&)Y=&5S('=I;&P at 8F4@9&ES8V%R9&5D(#!X0D5%1B`**PDO+R!O<B!R
M871H97(@,'A%1B`P>$)%"BL)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M
M+&AD<BPW*3L**PEI9BAS=')E86U?96]F*&1E;75X97(M/G-T<F5A;2DI(')E
M='5R;B`P.PHK("`@("\O('-O;65T:6UE<R!I;G-T96%D(&]F(#!X0D5%1B!A
M<R!D97-C<FEB960 at 9F]R('1H92!N97AT(&%U9&EO+W9I9&5O(&-H=6YK('=E
M(&=E=`HK"2\O(&$@=VAO;&4@;F5W(&AE861E<@HK"6EF*&AD<ELP73T],'@T
M12`F)B!H9');,5T]/3!X-3,@)B8@:&1R6S)=/3TP>#4V*7L**PDO+R!.4U8@
M:&5A9&5R(0HK"6EF*&AD<ELS73T],'@W,RE["BL)("`@("\O($Y35G,**PD@
M("`@+R\@9V5T('1H92!H96%D97(@<VEN8V4@=&AE<F4@:7,@;F\@;6]R92!M
M971A:&5A9&5R(&%F=&5R('1H92!F:7)S="!O;F4@"BL)"2\O('1H97)E(&ES
M(&YO(&UO<F4@;F5E9"!T;R!S:VEP('1H870**PD)<W1R96%M7W)E860H9&5M
M=7AE<BT^<W1R96%M+&AD<BLW+#$W+3<I.PHK"0HK"0D**PD)+R\@=&AE;W)E
M=&EC86QL>2!U(&-O=6QD(&AA=F4@;F5W(&-O9&5C<R!O<B!O=&AE<B!A=61I
M;R!F;W(@;F5W(&%U9&EO+W9I9&5O(&-H=6YK<R`@("`@"BL)"2\O(`D at 8GET
M97, at -"TW("`@('9I9&5O(&-O9&5C(&9O=7)C8PHK"0ES:%]V:61E;RT^9F]R
M;6%T/6UM:6]&3U520T,H:&1R6S1=+&AD<ELU72QH9');-ETL:&1R6S==*3L*
M*R`@("`)"BL)"2\O(`D at 8GET97, at ."TQ,2`@(&%U9&EO(&-O9&5C(&9O=7)C
M8PHK"0DO+R!00TT at 9F]U<F-C(&YE961S(&5X=')A('!A<G-I;F<@9F]R(&5V
M97)Y(&%U9&EO(&-H=6YK+"!Y970@=&\@:6UP;&5M96YT"BLO+PD):68H('-T
M<FYC;7`H:&1R*S at L(DY53$PB+"`T*2E["BLO+PD)"7-H7V%U9&EO(#T at 9&5M
M=7AE<BT^875D:6\M/G-H.PHK+R\)"0ES:%]A=61I;RT^9F]R;6%T/6UM:6]&
M3U520T,H:&1R6SA=+&AD<ELY72QH9');,3!=+&AD<ELQ,5TI.PHK+R\)"7T*
M*R\O"0EE;'-E(`HK+R\)"0ED96UU>&5R+3YA=61I;ST at 3E5,3#L**PD)"0HK
M"0DO+R!N97<@=FED96\@<W1R96%M(2!P87)S92!H96%D97(**PD)"BL)"7-H
M7W9I9&5O+3YB:6@]*$))5$U!4$E.1D](14%$15(J*6-A;&QO8R at Q+'-I>F5O
M9BA"251-05!)3D9/2$5!1$52*2D["BL)"7-H7W9I9&5O+3YB:6 at M/F)I4VEZ
M93US:7IE;V8H0DE434%024Y&3TA%041%4BD["BL)"7-H7W9I9&5O+3YB:6 at M
M/F)I4&QA;F5S/3$[(`HK"0ES:%]V:61E;RT^8FEH+3YB:4)I=$-O=6YT/3(T
M.PHK"0ES:%]V:61E;RT^8FEH+3YB:5=I9'1H/6AD<ELQ,EU\*&AD<ELQ,UT\
M/#@I.PHK"0ES:%]V:61E;RT^8FEH+3YB:4AE:6=H=#UH9');,31=?"AH9');
M,35=/#PX*3L**PD);65M8W!Y*"9S:%]V:61E;RT^8FEH+3YB:4-O;7!R97-S
M:6]N+&AD<BLT+#0I.PHK"0ES:%]V:61E;RT^8FEH+3YB:5-I>F5);6%G93US
M:%]V:61E;RT^8FEH+3YB:5=I9'1H*G-H7W9I9&5O+3YB:6 at M/F)I2&5I9VAT
M*C,["BL)"0HK"0ES:%]V:61E;RT^9&ES<%]W(#T@<VA?=FED96\M/F)I:"T^
M8FE7:61T:#L**R`@"0ES:%]V:61E;RT^9&ES<%]H(#T@<VA?=FED96\M/F)I
M:"T^8FE(96EG:'0["BL)"0HK"0D**PD)+R\@<V5T('1H92!F<F%M97)A=&4*
M*PD)+R\@:68@=&AE(&US8B!O9B!B>71E(#$V(&ES(&]N92!W92!H879E(&$@
M86YD('-T86YD87)D(&9R86-T:6]N86P at 9G)A;65R871E"BL)"7-W:71C:"AH
M9');,39=*7L**PD)8V%S92`P>#@Q. at HK"0D)<VA?=FED96\M/F9P<R`]("AF
M;&]A="DS,#`P,"XP+S$P,#$N,#L**PD)"7-H7W9I9&5O+3YF<F%M971I;64@
M/2`Q+C`@+R!S:%]V:61E;RT^9G!S.PHK"0D)8G)E86L["BL)"6-A<V4@,'@X
M-3H**PD)"7-H7W9I9&5O+3YF<',@/2`H9FQO870I,34P,#`N,"\Q,#`Q+C`[
M"BL)"0ES:%]V:61E;RT^9G)A;65T:6UE(#T@,2XP("\@<VA?=FED96\M/F9P
M<SL**PD)"6)R96%K.PHK"0D)"BL)"61E9F%U;'0Z"BL)"2`@("!S:%]V:61E
M;RT^9G!S(#T@*&9L;V%T*6AD<ELQ-ET["BL)"0ES:%]V:61E;RT^9G)A;65T
M:6UE(#T@,2XP("\@<VA?=FED96\M/F9P<SL**PD)"0HK"0D**PD)?0HK"0D*
M*PD)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M+&AD<BPW*3L**PHK"7T)
M"BL)?0D**PED96UU>&5R+3YF:6QE<&]S/7-T<F5A;5]T96QL*&1E;75X97(M
M/G-T<F5A;2D["BL)"BL)"BL)"BL);7!?;7-G*$U31U1?1$5-55 at L35-'3%]$
M0D<R+")D96UU>%]N<W8Z("4P.%@Z("4P,E@@)3`R6"!\("4P,E@@)3`R6"`E
M,#)8('P@)3`R6"`E,#)8("!<;B(L"BL)*&EN="ED96UU>&5R+3YF:6QE<&]S
M+"!H9');,%TL:&1R6S%=+&AD<ELR72QH9');,UTL:&1R6S1=+&AD<ELU72QH
M9');-ETI.PHK("`@("\O(')E860@=FED96\Z"BL@("`@;&5N,3TH:&1R6S)=
M/CXT*7PH:&1R6S-=/#PT*7PH:&1R6S1=/#PP>$,I.PHK("`@(&EF*&QE;C$I
M>PHK"6EF*&1E;75X97(M/G9I9&5O*0HK"2`@("!D<U]R96%D7W!A8VME="AD
M96UU>&5R+3YV:61E;RQD96UU>&5R+3YS=')E86TL;&5N,2PP+&1E;75X97(M
M/F9I;&5P;W,L,"D["BL)96QS90HK"2`@("!S=')E86U?<VMI<"AD96UU>&5R
M+3YS=')E86TL;&5N,2D["BL@("`@?0HK("`@("\O(')E860 at 875D:6\Z"BL@
M("`@;&5N,CTH:&1R6S5=*7PH:&1R6S9=/#PX*3L**R`@("!I9BAL96XR*7L*
M*PEI9BAD96UU>&5R+3YA=61I;RD**PD@("`@9'-?<F5A9%]P86-K970H9&5M
M=7AE<BT^875D:6\L9&5M=7AE<BT^<W1R96%M+&QE;C(L,"QD96UU>&5R+3YF
M:6QE<&]S*VQE;C$L,"D["BL)96QS90HK"2`@("!S=')E86U?<VMI<"AD96UU
M>&5R+3YS=')E86TL;&5N,BD["BL@("`@?0D@("`@"BL**R`@("!R971U<FX@
M,3L**PD**WT**PHK"BMD96UU>&5R7W0J(&1E;75X7V]P96Y?;G-V("@@9&5M
M=7AE<E]T*B!D96UU>&5R("D**WL**R`@("`O+R!L87-T(#(@8GET97,@,3<@
M86YD(#$X(&%R92!U;FMN;W=N(&)U="!R:6=H="!A9G1E<B!T:&%T(&-O;65S
M('1H92!L96YG=&@**PEU;G-I9VYE9"!C:&%R(&AD<ELQ-UT["BL@("`@:6YT
M(&QE;C$L;&5N,CL**PES:%]V:61E;U]T("IS:%]V:61E;R`]($Y53$P["BL)
M<VA?875D:6]?="`J<VA?875D:6\@/2!.54Q,.PHK("`@(`HK"0HK"2\J($-R
M96%T92!A(&YE=R!V:61E;R!S=')E86T@:&5A9&5R("HO"BL)<VA?=FED96\@
M/2!N97=?<VA?=FED96\@*"!D96UU>&5R+"`P("D["BL**PDO*B!-86ME('-U
M<F4@=&AE(&1E;75X97(@:VYO=W, at 86)O=70@=&AE(&YE=R!V:61E;R!S=')E
M86T@:&5A9&5R"BL)("H@*&5V96X@=&AO=6=H(&YE=U]S:%]V:61E;R at I(&]U
M9VAT('1O('1A:V4 at 8V%R92!O9B!I="D**PD@*B\**PED96UU>&5R+3YV:61E
M;RT^<V@@/2!S:%]V:61E;SL**PHK"2\J($UA:V4@<W5R92!T:&%T('1H92!V
M:61E;R!D96UU>&5R('-T<F5A;2!H96%D97(@:VYO=W, at 86)O=70@:71S"BL)
M("H@<&%R96YT('9I9&5O(&1E;75X97(@<W1R96%M("AT:&ES(&ES(&=E='1I
M;F<@=V%C:WDI+"!O<B!E;'-E"BL)("H@=FED96]?<F5A9%]P<F]P97)T:65S
M*"D@=VEL;"!C:&]K90HK("`@("`@("`@*B\**PES:%]V:61E;RT^9',@/2!D
M96UU>&5R+3YV:61E;SL**R`@("`@("`@"BL)("`O*B!D:7-A8FQE('-E96MI
M;F<@>65T('1O(&)E(&9I>&5D*B\**PED96UU>&5R+3YS965K86)L92`](#`[
M"BL)"0HK("`@('-T<F5A;5]R96%D*&1E;75X97(M/G-T<F5A;2QH9'(L-"D[
M"BL@("`@:68H<W1R96%M7V5O9BAD96UU>&5R+3YS=')E86TI*2!R971U<FX@
M,#L**PD**PDO*BHJ(&EF('=E(&1E=&5C=&5D('1H92!F:6QE('1O(&)E(&YS
M=B!A;F0@=&AE<F4@=V%S(&YE:71H97(@96]F(&YO<B!A(&AE861E<@HK"2HJ
M*BH@=&AA="!M96%N<R!T:&%T(&ET<R!M;W-T(&QI:V5L>2!A('-H;W5T8V%S
M="!S=')E86T@<V\@=V4@=VEL;"!N965D('1O('-E96L**PDJ*BHJ('1O('1H
M92!F:7)S="!O8V-U<F%N8V4@;V8@=&AE($Y35G,@:&5A9&5R(`D)"0D@"0DJ
M*BHJ+PHK"6EF*"$H:&1R6S!=/3TP>#1%("8F(&AD<ELQ73T],'@U,R`F)B!H
M9');,ET]/3!X-38I*7L**PD)=VAI;&4H,2E["BL)"0ES=')E86U?<F5A9"AD
M96UU>&5R+3YS=')E86TL:&1R+#$I.PHK"0D)+R]M<%]M<V<H35-'5%]$14U5
M6"Q-4T=,7U=!4DXL(F1E;75X7VYS=CH at 56YK;F]W;B!&4%,@:60Z("5S7&XB
M+&AD<BD["BL)"0EI9BAS=')E86U?96]F*&1E;75X97(M/G-T<F5A;2DI(`HK
M"0D)"7)E='5R;B`P.PHK"0D):68H:&1R6S!=(3TP>#1%*0HK"0D)"6-O;G1I
M;G5E.PHK"0D)"0HK"0D)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M+&AD
M<BLQ+#$I.PHK"0D)"BL)"0EI9BAS=')E86U?96]F*&1E;75X97(M/G-T<F5A
M;2DI(`HK"0D)"7)E='5R;B`P.PHK"0D):68H:&1R6S%=(3TP>#4S*0HK"0D)
M"6-O;G1I;G5E.PHK"0D)"0HK"0D)<W1R96%M7W)E860H9&5M=7AE<BT^<W1R
M96%M+&AD<BLR+#$I.PHK"0D)"BL)"0EI9BAS=')E86U?96]F*&1E;75X97(M
M/G-T<F5A;2DI(`HK"0D)"7)E='5R;B`P.PHK"0D):68H:&1R6S)=(3TP>#4V
M*0HK"0D)"6-O;G1I;G5E.PHK"0D)"0HK"0D)<W1R96%M7W)E860H9&5M=7AE
M<BT^<W1R96%M+&AD<BLS+#$I.PHK"0D)"BL)"0EI9BAS=')E86U?96]F*&1E
M;75X97(M/G-T<F5A;2DI(`HK"0D)"7)E='5R;B`P.PHK"0D):68H:&1R6S-=
M(3TP>#<S*0HK"0D)"6-O;G1I;G5E.PHK"0D)+R]M<%]M<V<H35-'5%]$14U5
M6"Q-4T=,7U=!4DXL(F1E;75X7VYS=CH at 56YK;F]W;B!&4%,@:60Z("5S7&XB
M+&AD<BD["BL)"0D**PD)"6)R96%K.PHK"0E]"BL)?0HK"6EF*&AD<ELP73T]
M,'@T12`F)B!H9');,5T]/3!X-3,@)B8@:&1R6S)=/3TP>#4V*7L**PD)+R\@
M3E-6(&AE861E<B$**PD):68H:&1R6S-=/3TP>#<S*7L**PD)"2\O($Y35G,*
M*PD)"7-T<F5A;5]R96%D*&1E;75X97(M/G-T<F5A;2QH9'(K-"PQ-RTT*3L*
M*PD)"0HK"0E]"BL)"0HK"0EI9BAH9');,UT]/3!X-C8I>PHK"0D)+R\@3E-6
M9 at HK"0D):6YT(&QE;CUS=')E86U?<F5A9%]D=V]R9%]L92AD96UU>&5R+3YS
M=')E86TI.PHK"0D)+R\@5$]$3SH@<&%R<V4@;W5T(&UE=&%D871A(2$A(0HK
M"0D)<W1R96%M7W-K:7`H9&5M=7AE<BT^<W1R96%M+&QE;BTX*3L**PD)"0D*
M*PD)"2\O($Y35G,**PD)"2\O<W1R96%M7W)E860H9&5M=7AE<BT^<W1R96%M
M+&AD<BPT*3L**PD)"7-T<F5A;5]R96%D*&1E;75X97(M/G-T<F5A;2QH9'(L
M,3<I.PHK"0D**PD)?0HK"0DO+R`)(&)Y=&5S(#0M-R`@("!V:61E;R!C;V1E
M8R!F;W5R8V,**PD)<VA?=FED96\M/F9O<FUA=#UM;6EO1D]54D-#*&AD<ELT
M72QH9');-5TL:&1R6S9=+&AD<ELW72D["BL)"0HK"0DO+R`)(&)Y=&5S(#@M
M,3$@("!A=61I;R!C;V1E8R!F;W5R8V,**PD)+R\@4$--(&9O=7)C8R!N965D
M<R!E>'1R82!P87)S:6YG(&9O<B!E=F5R>2!A=61I;R!C:'5N:RP@>65T('1O
M(&EM<&QE;65N=`HK"0EI9B@@<W1R;F-M<"AH9'(K."PB3E5,3"(L(#0I*7L*
M*PD)"7-H7V%U9&EO(#T@;F5W7W-H7V%U9&EO("@@9&5M=7AE<BP@,"`I.PHK
M"0D)9&5M=7AE<BT^875D:6\M/G-H(#T@<VA?875D:6\["BL)"0ES:%]A=61I
M;RT^9F]R;6%T/6UM:6]&3U520T,H:&1R6SA=+&AD<ELY72QH9');,3!=+&AD
M<ELQ,5TI.PHK"0D)<VA?875D:6\M/F1S(#T at 9&5M=7AE<BT^875D:6\["BL)
M"7T**PD)96QS92`**PD)+R\@8F5T=&5R('-E="!T:&ES(&EN(&%N>2!C87-E
M"BL)"0ED96UU>&5R+3YA=61I;R`]($Y53$P[(`HK"0D**PD)"0HK"0DO+R!D
M=6UM>2!D96)U9R!M97-S86=E"BL)"6UP7VUS9RA-4T=47T1%3558+$U31TQ?
M5T%23BPB9&5M=7A?;G-V.B!5;FMN;W=N($904R!I9#H@)7-<;B(L:&1R*3L*
M*PD)"BL)"2\O(&YE=R!V:61E;R!S=')E86TA('!A<G-E(&AE861E<@HK"0ES
M:%]V:61E;RT^8FEH/2A"251-05!)3D9/2$5!1$52*BEC86QL;V,H,2QS:7IE
M;V8H0DE434%024Y&3TA%041%4BDI.PHK"0ES:%]V:61E;RT^8FEH+3YB:5-I
M>F4]<VEZ96]F*$))5$U!4$E.1D](14%$15(I.PHK"0ES:%]V:61E;RT^8FEH
M+3YB:5!L86YE<STQ.R`**PD)<VA?=FED96\M/F)I:"T^8FE":71#;W5N=#TR
M-#L**PD)<VA?=FED96\M/F)I:"T^8FE7:61T:#UH9');,3)=?"AH9');,3-=
M/#PX*3L**PD)<VA?=FED96\M/F)I:"T^8FE(96EG:'0]:&1R6S$T77PH:&1R
M6S$U73P\."D["BL)"6UE;6-P>2 at F<VA?=FED96\M/F)I:"T^8FE#;VUP<F5S
M<VEO;BQH9'(K-"PT*3L**PD)+R]S:%]V:61E;RT^8FEH+3YB:5-I>F5);6%G
M93US:%]V:61E;RT^8FEH+3YB:5=I9'1H*G-H7W9I9&5O+3YB:6 at M/F)I2&5I
M9VAT*C,["BL**PD)<VA?=FED96\M/F1I<W!?=R`]('-H7W9I9&5O+3YB:6 at M
M/F)I5VED=&@["BL)"7-H7W9I9&5O+3YD:7-P7V@@/2!S:%]V:61E;RT^8FEH
M+3YB:4AE:6=H=#L**PD)"BL)"2\O(&EF('1H92!M<V(@;V8 at 8GET92`Q-B!I
M<R!O;F4@=V4@:&%V92!A(&%N9"!S=&%N9&%R9"!F<F%C=&EO;F%L(&9R86UE
M<F%T90HK"0ES=VET8V at H:&1R6S$V72E["BL)"6-A<V4@,'@X,3H**PD)"7-H
M7W9I9&5O+3YF<',]*&9L;V%T*3,P,#`P+C`O,3`P,2XP.PHK"0D)<VA?=FED
M96\M/F9R86UE=&EM92`]("AF;&]A="DQ+C`@+R`H9FQO870I<VA?=FED96\M
M/F9P<SL**PD)"6)R96%K.PHK"0EC87-E(#!X.#4Z"BL)"0ES:%]V:61E;RT^
M9G!S/2AF;&]A="DQ-3`P,"XP+S$P,#$N,#L**PD)"7-H7W9I9&5O+3YF<F%M
M971I;64@/2`H9FQO870I,2XP("\@*&9L;V%T*7-H7W9I9&5O+3YF<',["BL)
M"0EB<F5A:SL**PD)9&5F875L=#H**PD)("`@('-H7W9I9&5O+3YF<',@/2`H
M9FQO870I:&1R6S$V73L**PD)"7-H7W9I9&5O+3YF<F%M971I;64@/2`Q+C`@
M+R!S:%]V:61E;RT^9G!S.PHK"0E]"0D**PHK"7T@("`**PHK"0HK"0HK"2\O
M9&ES8V%R9"!B>71E(#$W(&%N9"`Q."!T:&4@;F5X="`U(&%R92!T:&4@<VEZ
M92!O9B!A=61I;R]V:61E;R!C:'5N:R`**PD**R`@("!S=')E86U?<F5A9"AD
M96UU>&5R+3YS=')E86TL:&1R+#<I.PHK"61E;75X97(M/F9I;&5P;W,]<W1R
M96%M7W1E;&PH9&5M=7AE<BT^<W1R96%M*3L**PD**R`@("!M<%]M<V<H35-'
M5%]$14U56"Q-4T=,7T1"1S(L(F1E;75X7VYS=CH@)3`X6#H@)3`R6"`E,#)8
M('P@)3`R6"`E,#)8("4P,E@@?"`E,#)8("4P,E@@(%QN(BP**PDH:6YT*61E
M;75X97(M/F9I;&5P;W,L(&AD<ELP72QH9');,5TL:&1R6S)=+&AD<ELS72QH
M9');-%TL:&1R6S5=+&AD<ELV72D["BL@("`@+R\@<F5A9"!V:61E;SH**R`@
M("!L96XQ/2AH9');,ET^/C0I?"AH9');,UT\/#0I?"AH9');-%T\/#!X0RD[
M"BL@("`@:68H;&5N,2E["BL):68H9&5M=7AE<BT^=FED96\I"BL)("`@(&1S
M7W)E861?<&%C:V5T*&1E;75X97(M/G9I9&5O+&1E;75X97(M/G-T<F5A;2QL
M96XQ+#`L9&5M=7AE<BT^9FEL97!O<RPP*3L**PEE;'-E"BL)("`@('-T<F5A
M;5]S:VEP*&1E;75X97(M/G-T<F5A;2QL96XQ*3L**R`@("!]"BL@("`@+R\@
M<F5A9"!A=61I;SH**R`@("!L96XR/2AH9');-5TI?"AH9');-ET\/#@I.PHK
M("`@(&EF*&QE;C(I>PHK"6EF*&1E;75X97(M/F%U9&EO*0HK(`D@("`@9'-?
M<F5A9%]P86-K970H9&5M=7AE<BT^875D:6\L9&5M=7AE<BT^<W1R96%M+&QE
M;C(L,"QD96UU>&5R+3YF:6QE<&]S*VQE;C$L,"D["BL)96QS90HK"2`@("!S
M=')E86U?<VMI<"AD96UU>&5R+3YS=')E86TL;&5N,BD["BL@("`@?0D@("`@
M"BL**PHK("`@(')E='5R;B!D96UU>&5R.PHK?0HK"BMI;G0@;G-V7V-H96-K
M7V9I;&4@*"!D96UU>&5R7W0J(&1E;75X97(@*0HK>PHK"75N<VEG;F5D(&EN
M="!I9#L**PHK"2\J(%-T;W)E(&]R:6=I;F%L('!O<VET:6]N("HO"BL);V9F
M7W0@;W)I9U]P;W,@/2!S=')E86U?=&5L;"AD96UU>&5R+3YS=')E86TI.PHK
M"BL);7!?;7-G("@@35-'5%]$14U56"P at 35-'3%]6+"`B0VAE8VMI;F<@9F]R
M($YU;&QS;V9T(%-T<F5A;6EN9R!6:61E;UQN(B`I.PHK("`@"BL)+R\M+2TM
M(&-H96-K($Y35G@@:&5A9&5R. at HK"6ED/7-T<F5A;5]R96%D7V1W;W)D7VQE
M*&1E;75X97(M/G-T<F5A;2D["BL):68H:60A/6UM:6]&3U520T,H)TXG+"=3
M)RPG5B<L)V8G*2`F)@HK"6ED(3UM;6EO1D]54D-#*"=.)RPG4R<L)U8G+"=S
M)RDI(')E='5R;B`P.R`O+R!N;W0 at 86X@3E-6(&9I;&4**R`@("`**PES=')E
M86U?<F5S970H9&5M=7AE<BT^<W1R96%M*3L at +R\@8VQE87(@14]&"BL)<W1R
M96%M7W-E96LH9&5M=7AE<BT^<W1R96%M+&1E;75X97(M/G-T<F5A;2T^<W1A
M<G1?<&]S*3L**PHK("`@(`HK"7)E='5R;B`Q.PHK?0HK"BMV;VED(&1E;75X
M7V-L;W-E7VYS=BAD96UU>&5R7W0J(&1E;75X97(I('L**PHK?0ID:69F("UU
M3G(@35!L87EE<BTR,#`T,#,R.2]L:6)M<&1E;75X+V1E;75X97(N8R!-4&QA
M>65R+3(P,#0P,S(Y+6YS=C(O;&EB;7!D96UU>"]D96UU>&5R+F,*+2TM($U0
M;&%Y97(M,C`P-#`S,CDO;&EB;7!D96UU>"]D96UU>&5R+F,),C`P-"TP,BTR
M,B`P-SHR,#HT."XP,#`P,#`P,#`@*S`Q,#`**RLK($U0;&%Y97(M,C`P-#`S
M,CDM;G-V,B]L:6)M<&1E;75X+V1E;75X97(N8PDR,#`T+3`S+3,P(#`X.C0P
M.C`T+C`P,#`P,#`P,"`K,#(P,`I`0"`M,3(S+#8@*S$R,RPW($!`"B!E>'1E
M<FX@=F]I9"!D96UU>%]C;&]S95]F:6QM*&1E;75X97)?="H at 9&5M=7AE<BD[
M"B!E>'1E<FX@=F]I9"!D96UU>%]C;&]S95]B;7`H9&5M=7AE<E]T*B!D96UU
M>&5R*3L*(&5X=&5R;B!V;VED(&1E;75X7V-L;W-E7V9L:2AD96UU>&5R7W0J
M(&1E;75X97(I.PHK97AT97)N('9O:60 at 9&5M=7A?8VQO<V5?;G-V*&1E;75X
M97)?="H at 9&5M=7AE<BD["B!E>'1E<FX@=F]I9"!D96UU>%]C;&]S95]N=78H
M9&5M=7AE<E]T*B!D96UU>&5R*3L*(&5X=&5R;B!V;VED(&1E;75X7V-L;W-E
M7V%U9&EO*&1E;75X97)?="H at 9&5M=7AE<BD["B!E>'1E<FX@=F]I9"!D96UU
M>%]C;&]S95]O9V<H9&5M=7AE<E]T*B!D96UU>&5R*3L*0$`@+3$W-"PV("LQ
M-S4L."!`0`H@("`@("`@9&5M=7A?8VQO<V5?8FUP*&1E;75X97(I.R!B<F5A
M:SL*("`@("!C87-E($1%355815)?5%E015]&3$DZ"B`@("`@("!D96UU>%]C
M;&]S95]F;&DH9&5M=7AE<BD[(&)R96%K.PHK("`@(&-A<V4 at 1$5-55A%4E]4
M65!%7TY35CH**R`@("`@(&1E;75X7V-L;W-E7VYS=BAD96UU>&5R*3L at 8G)E
M86L["B`@("`@8V%S92!$14U56$527U194$5?3E56. at H@("`@("`@9&5M=7A?
M8VQO<V5?;G5V*&1E;75X97(I.R!B<F5A:SL*("`@("!C87-E($1%355815)?
M5%E015]-4$5'7U19. at I`0"`M,CDU+#8@*S(Y."PW($!`"B!I;G0 at 9&5M=7A?
M;6]V7V9I;&Q?8G5F9F5R*&1E;75X97)?="`J9&5M=7 at L9&5M=7A?<W1R96%M
M7W0J(&1S*3L*(&EN="!D96UU>%]V:79O7V9I;&Q?8G5F9F5R*&1E;75X97)?
M="`J9&5M=7 at I.PH@:6YT(&1E;75X7W)E86Q?9FEL;%]B=69F97(H9&5M=7AE
M<E]T("ID96UU>&5R*3L**VEN="!D96UU>%]N<W9?9FEL;%]B=69F97(H9&5M
M=7AE<E]T("ID96UU>"D["B!I;G0 at 9&5M=7A?;G5V7V9I;&Q?8G5F9F5R*&1E
M;75X97)?="`J9&5M=7 at I.PH@:6YT(&1E;75X7W)T<%]F:6QL7V)U9F9E<BAD
M96UU>&5R7W0@*F1E;75X+"!D96UU>%]S=')E86U?="H at 9',I.PH@:6YT(&1E
M;75X7W)A=V1V7V9I;&Q?8G5F9F5R*&1E;75X97)?="`J9&5M=7AE<BD["D!`
M("TS,SDL-B`K,S0S+#<@0$`*("`@("!C87-E($1%355815)?5%E015]205=$
M5CH@<F5T=7)N(&1E;75X7W)A=V1V7V9I;&Q?8G5F9F5R*&1E;75X*3L*("-E
M;F1I9 at H@("`@(&-A<V4 at 1$5-55A%4E]465!%7U)%04PZ(')E='5R;B!D96UU
M>%]R96%L7V9I;&Q?8G5F9F5R*&1E;75X*3L**R`@("!C87-E($1%355815)?
M5%E015].4U8Z(')E='5R;B!D96UU>%]N<W9?9FEL;%]B=69F97(H9&5M=7 at I
M.PH@("`@(&-A<V4 at 1$5-55A%4E]465!%7TY55CH@<F5T=7)N(&1E;75X7VYU
M=E]F:6QL7V)U9F9E<BAD96UU>"D["B`C:69D968 at 55-%7U16"B`@("`@8V%S
M92!$14U56$527U194$5?5%8Z(')E='5R;B!D96UU>%]T=E]F:6QL7V)U9F9E
M<BAD96UU>"P at 9',I.PI`0"`M-3DP+#<@*S4Y-2PY($!`"B!E>'1E<FX at 9&5M
M=7AE<E]T("H at 9&5M=7A?;W!E;E]P=F$H9&5M=7AE<E]T("H at 9&5M=7AE<BD[
M"B!E>'1E<FX@:6YT(')E86Q?8VAE8VM?9FEL92AD96UU>&5R7W0@*F1E;75X
M97(I.PH at 97AT97)N('9O:60 at 9&5M=7A?;W!E;E]R96%L*&1E;75X97)?="`J
M9&5M=7AE<BD["BME>'1E<FX@:6YT(&YS=E]C:&5C:U]F:6QE*&1E;75X97)?
M="`J9&5M=7AE<BD["B!E>'1E<FX@:6YT(&YU=E]C:&5C:U]F:6QE*&1E;75X
M97)?="`J9&5M=7AE<BD["BME>'1E<FX@=F]I9"!D96UU>%]O<&5N7VYS=BAD
M96UU>&5R7W0@*F1E;75X97(I.PH at 97AT97)N('9O:60 at 9&5M=7A?;W!E;E]N
M=78H9&5M=7AE<E]T("ID96UU>&5R*3L*(&5X=&5R;B!I;G0 at 9&5M=7A?875D
M:6]?;W!E;BAD96UU>&5R7W0J(&1E;75X97(I.PH at 97AT97)N(&EN="!D96UU
M>%]O9V=?;W!E;BAD96UU>&5R7W0J(&1E;75X97(I.PI`0"`M-S`U+#8@*S<Q
M,BPQ-R!`0`H@("`@("`@9&5M=7AE<B`]($Y53$P["B`@('T*('T**R\O/3T]
M/3T]/3T]/3T]/3T](%1R>2!T;R!O<&5N(&%S($Y35B!F:6QE.B`]/3T]/3T]
M/3T]/3T]/3T]/0HK:68H9FEL95]F;W)M870]/41%355815)?5%E015]53DM.
M3U=.('Q\(&9I;&5?9F]R;6%T/3U$14U56$527U194$5?3E-6*7L**R`@9&5M
M=7AE<CUN97=?9&5M=7AE<BAS=')E86TL1$5-55A%4E]465!%7TY35BQA=61I
M;U]I9"QV:61E;U]I9"QD=F1S=6)?:60I.PHK("!I9BAF:6QE7V9O<FUA=#T]
M1$5-55A%4E]465!%7TY35GQ\;G-V7V-H96-K7V9I;&4H9&5M=7AE<BDI>PHK
M("`@("`@;7!?;7-G*$U31U1?1$5-55A%4BQ-4T=,7TE.1D\L35-'5%)?1&5T
M96-T961?6%A87T9I;&5&;W)M870L(DYU;&QS;V9T(%-T<F5A;6EN9R!6:61E
M;R(I.PHK("`@("`@9FEL95]F;W)M870]1$5-55A%4E]465!%7TY35CL**R`@
M?2!E;'-E('L**R`@("`@(&9R965?9&5M=7AE<BAD96UU>&5R*3L**R`@("`@
M(&1E;75X97(@/2!.54Q,.PHK("!]"BM]"B`O+ST]/3T]/3T]/3T]/3T]/2!4
M<GD@=&\@;W!E;B!A<R!.558 at 9FEL93H@/3T]/3T]/3T]/3T]/3T]/3T*(&EF
M*&9I;&5?9F]R;6%T/3U$14U56$527U194$5?54Y+3D]73B!\?"!F:6QE7V9O
M<FUA=#T]1$5-55A%4E]465!%7TY55BE["B`@(&1E;75X97(];F5W7V1E;75X
M97(H<W1R96%M+$1%355815)?5%E015].558L875D:6]?:60L=FED96]?:60L
M9'9D<W5B7VED*3L*0$`@+3$Q-CDL-B`K,3$X-RPQ,"!`0`H@("`@<F5T=7)N
M(&1E;75X97(["B`O+R`@8G)E86L["B`@?0HK(&-A<V4 at 1$5-55A%4E]465!%
M7TY35CH@>PHK("!D96UU>%]O<&5N7VYS=BAD96UU>&5R*3L**R`@8G)E86L[
M"BL@?0H@(&-A<V4 at 1$5-55A%4E]465!%7TY55CH@>PH@("!D96UU>%]O<&5N
M7VYU=BAD96UU>&5R*3L*("`@8G)E86L["F1I9F8 at +75.<B!-4&QA>65R+3(P
M,#0P,S(Y+VQI8FUP9&5M=7 at O9&5M=7AE<BYH($U0;&%Y97(M,C`P-#`S,CDM
M;G-V,B]L:6)M<&1E;75X+V1E;75X97(N:`HM+2T at 35!L87EE<BTR,#`T,#,R
M.2]L:6)M<&1E;75X+V1E;75X97(N:`DR,#`S+3$R+3`X(#(P.C,S.C,X+C`P
M,#`P,#`P,"`K,#$P,`HK*RL at 35!L87EE<BTR,#`T,#,R.2UN<W8R+VQI8FUP
M9&5M=7 at O9&5M=7AE<BYH"3(P,#0M,#,M,S`@,#@Z,#@Z,3DN,#`P,#`P,#`P
M("LP,C`P"D!`("TT,RPQ,2`K-#,L,3(@0$`*("-D969I;F4 at 1$5-55A%4E]4
M65!%7U)%04Q!541)3R`S, at H@(V1E9FEN92!$14U56$527U194$5?35!%1U]4
M62`S,PH@(V1E9FEN92!$14U56$527U194$5?3$U,330@,S0**R-D969I;F4@
M1$5-55A%4E]465!%7TY35B`S-0H@"B`O+R!4:&ES('-H;W5L9"!A;'=A>7,@
M;6%T8V@@=&AE(&AI9V5S="!D96UU>&5R('1Y<&4@;G5M8F5R+ at H@+R\@56YL
M97-S('EO=2!W86YT('1O(&1I<V%L;&]W('5S97)S('1O(&9O<F-E('1H92!D
M96UU>&5R('1O('-O;64@='EP97,*("-D969I;F4 at 1$5-55A%4E]465!%7TU)
M3B`P"BTC9&5F:6YE($1%355815)?5%E015]-05@@,S0**R-D969I;F4 at 1$5-
M55A%4E]465!%7TU!6"`S-0H@"B`C9&5F:6YE($1%355815)?5%E015]$14U5
M6$524R`H,3P\,38I"B`O+R!!('9I<G1U86P at 9&5M=7AE<B!T>7!E(&9O<B!T
M:&4@;F5T=V]R:R!C;V1E"F1I9F8 at +75.<B!-4&QA>65R+3(P,#0P,S(Y+VQI
M8FUP9&5M=7 at O;F5T=V]R:RYC($U0;&%Y97(M,C`P-#`S,CDM;G-V,B]L:6)M
M<&1E;75X+VYE='=O<FLN8PHM+2T at 35!L87EE<BTR,#`T,#,R.2]L:6)M<&1E
M;75X+VYE='=O<FLN8PDR,#`T+3`S+3$S(#$W.C$P.C`R+C`P,#`P,#`P,"`K
M,#$P,`HK*RL at 35!L87EE<BTR,#`T,#,R.2UN<W8R+VQI8FUP9&5M=7 at O;F5T
M=V]R:RYC"3(P,#0M,#,M,S`@,#@Z,C$Z,S(N,#`P,#`P,#`P("LP,C`P"D!`
M("TY,BPW("LY,BPY($!`"B`)+R\@4F5A;"!-961I80H@"7L@(F%U9&EO+W at M
M<&XM<F5A;&%U9&EO(BP at 1$5-55A%4E]465!%7U)%04P@?2P*(`DO+R!/1T<@
M4W1R96%M:6YG"BT)>R`B87!P;&EC871I;VXO>"UO9V<B+"!$14U56$527U19
M4$5?3T='('T**PE[(")A<'!L:6-A=&EO;B]X+6]G9R(L($1%355815)?5%E0
M15]/1T<@?2P**PDO+R!.=6QL4V]F="!3=')E86UI;F<@5FED96\**PE[(")V
M:61E;R]N<W8B+"!$14U56$527U194$5?3E-6?0H@"B!].PH@"D!`("TW-S at L
M."`K-S at P+#$T($!`"B`)"0D)"0D);7!?;7-G*$U31U1?3D545T]22RQ-4T=,
M7TE.1D\L(E!U8FQI8R`Z("5S7&XB+"!A=&]I*&9I96QD7V1A=&$I/R)Y97,B
M.B)N;R(I.R!F:65L9%]D871A(#T at 3E5,3#L*(`D)"0D)"6EF*"`H9FEE;&1?
M9&%T82`](&AT='!?9V5T7V9I96QD*&AT='!?:&1R+"`B:6-Y+6)R(BDI("$]
M($Y53$P@*0H@"0D)"0D)"6UP7VUS9RA-4T=47TY%5%=/4DLL35-'3%])3D9/
M+")":71R871E.B`E<VMB:70O<UQN(BP at 9FEE;&1?9&%T82D[(&9I96QD7V1A
M=&$@/2!.54Q,.PHM"0D)"0D)+R\@3VLL('=E(&AA=F4 at 9&5T96-T960 at 86X@
M;7`S('-T<F5A;0HM"0D)"0D)*F9I;&5?9F]R;6%T(#T at 1$5-55A%4E]465!%
M7T%51$E/.PHK"0D)"0D)"BL)"0D)"0DO+R!)9B!C;VYT96YT+71Y<&4@/3T@
M=FED96\O;G-V('=E(&UO<W0@;&EK96QY(&AA=F4 at 82!W:6YA;7`@=FED96\@
M<W1R96%M(`HK"0D)"0D)+R\@;W1H97)W:7-E(&ET('-H;W5L9"!B92!M<#,N
M(&EF('1H97)E(&%R92!M;W)E('1Y<&5S(&-O;G-I9&5R(&%D9&EN9R!M:6UE
M('1Y<&4@"BL)"0D)"0DO+R!H86YD;&EN9R!L:6ME(&QA=&5R"BL)"0D)"0EI
M9B@@(7-T<F-M<"@H9FEE;&1?9&%T82`](&AT='!?9V5T7V9I96QD*&AT='!?
M:&1R+"`B8V]N=&5N="UT>7!E(BDI+")V:61E;R]N<W8B*2D**PD)"0D)"0DJ
M9FEL95]F;W)M870@/2!$14U56$527U194$5?3E-6.PHK"0D)"0D)96QS90HK
M"0D)"0D)"2IF:6QE7V9O<FUA="`]($1%355815)?5%E015]!541)3SL*(`D)
M"0D)"7)E='5R;B`P.PH@"0D)"0E]"B`)"0D)"6-A<V4 at -#`P.B`O+R!397)V
M97(@1G5L;`I`0"`M,3(T."PV("LQ,C4V+#<@0$`*(`D)8V%S92!$14U56$52
M7U194$5?3T='. at H@"0EC87-E($1%355815)?5%E015]03$%93$E35#H*(`D)
M8V%S92!$14U56$527U194$5?54Y+3D]73CH**PD)8V%S92!$14U56$527U19
M4$5?3E-6.B`*(`D)"2\O($=E;F5R:6,@<W1A<G0L(&1O97-N)W0@;F5E9"!T
M;R!F:6QT97(*(`D)"2\O('1H92!N971W;W)K('-T<F5A;2P@:70G<R!A(')A
M=R!S=')E86T*(`D)"7)E="`](&YO<%]S=')E86UI;F=?<W1A<G0H('-T<F5A
%;2`I.PI
`
end




More information about the MPlayer-dev-eng mailing list