[comp.sys.amiga] Convert Amiga IFF files to Atari ST DEGAS files

holloway@drivax.UUCP (Bruce Holloway) (08/27/87)

"iff" is a  set of programs that convert images from IFF format (often used
on  the  Amiga)  to  DEGAS  format  (mode  0). They run on UNIX !ONLY!  I'm
working on a version that will work on the ST,  but  there  are some rather
large  problems (usually 1.9-7.6(!) megs  of  disk  space  needed  for  the
intermediate file,  and  the  associated  high  disk  I/O  cost  make  this
particularly tedious - but it wouldn't fit in memory...) 

As near as I can tell, this can convert all  Amiga  pictures, including HAM
pictures and high-resolution  pictures.  At a cost to detail and color, but
in most  cases  it's difficult to tell unless you've seen the same image on
an Amiga. 

#--------------------------------------------------------------------------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	iff.doc
#	Makefile
#	iff.c
#	make320x200.c
#	pick16.c
#	beach.uue
# This archive created: Thu Aug 27 10:12:58 1987
# By:	Bruce Holloway (Compact (was DRI))
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'iff.doc'" '(3387 characters)'
if test -f 'iff.doc'
then
	echo shar: "will not over-write existing file 'iff.doc'"
else
sed 's/^	X//' << \SHAR_EOF > 'iff.doc'
	XIntro: 
	X
	X    "iff"  is a set of programs that convert images from IFF format  (often
	X    used on  the  Amiga)  to DEGAS format (mode 0). They run on UNIX !ONLY!
	X    I'm working  on  a version that will work on the ST, but there are some
	X    rather  large  problems  (usually  1.9-7.6(!) megs of disk space needed
	X    for the intermediate  file,  and the associated high disk I/O cost make
	X    this particularly tedious - but it wouldn't fit in memory...) 
	X    
	X    As near as I can tell,  this  can convert all Amiga pictures, including
	X    HAM pictures and high-resolution  pictures.  At  a  cost  to detail and
	X    color,  but in most cases it's difficult to tell unless you've seen the
	X    same image on an Amiga. 
	X    
	XUsage: 
	X
	X    iff <file> 
	X    
	X        Where <file> is an  unARCed  IFF file. Creates an intermediate file
	X        named <file>.ami which is  simply  a  width,  a  height,  and every
	X        pixel in the IFF file described as three  bytes,  one each for Red,
	X        Blue, and Green. 
	X        
	X        If the image is larger than 320x200, "iff" automatically  chains to
	X        "make320x200", otherwise it chains directly to "pick16". 
	X        
	X    make320x200 <file> 
	X    
	X        Shrinks an  "ami"  file  (such as the output from "iff") to 320x200
	X        by averaging  the  colors  vertically  and  horizontally  (whatever
	X        seems  to  be  called  for).  It  overwrites the original file, and
	X        calls "pick16" automatically when done. 
	X        
	X    pick16 <file> 
	X    
	X        Reads an intermediate file (as created by "iff" and  "make320x200")
	X        into memory, creates a weighted  array  of  colors  as  used by the
	X        picture,  shrinks  the  array  by  combining  adjacent  (or  nearly
	X        adjacent) colors into one (based upon their weighting)  until there
	X        are only sixteen left,  then creates a DEGAS low-resolution picture
	X        from this info. This takes a LONG time with hundreds of colors,  as
	X        with HAM mode pictures,  but  only  seconds  with  regular 32 color
	X        pictures. 
	X        
	X        "pick16"  writes  a  file with the same name as the  original,  but
	X        with ".pi1" as  an  extension (it overwrites an existing extension,
	X        or adds it on if there isn't one to begin with). 
	X        
	X    Use DEGAS, Picswitch, or one  of  the  other utilities to display these
	X    after downloading them to the ST. 
	X    
	XCompiling: 
	X
	X    These utilities  should work on both Berkeley Unix systems and the AT&T
	X    System V  Unix systems. Just type "make all" to make all the utilities.
	X    I've included a sample Amiga picture; uudecode this,  unARC it, and run
	X    it through the utility by typing "iff beach". 
	X    
	X    You'll  need  to  uncomment  the "System V" line (and comment  out  the
	X    "BSD" line) in the Makefile if you're on System V. 
	X    
	XBugs: 
	X
	X    "iff" decides  that  a  picture is in HAM (Hold and Modify) mode if the
	X    bit image is in six planes. This might not  be  the case if the picture
	X    uses the  extra  "Half-Bright"  plane. Few pictures do; I've never seen
	X    any that do. If  I  find  one,  I'll change "iff" so that it can handle
	X    them. 
	X    
	X    Color Cycling is not supported,  and  probably  won't  be.  But few IFF
	X    readers for the Amiga support it, either... 
	X    
	X
	X- Bruce
	X
	XBruce Holloway - Terminal Netnews Addict    {seismo,sun}!amdahl!drivax!holloway
SHAR_EOF
if test 3387 -ne "`wc -c < 'iff.doc'`"
then
	echo shar: "error transmitting 'iff.doc'" '(should have been 3387 characters)'
fi
fi
echo shar: "extracting 'Makefile'" '(372 characters)'
if test -f 'Makefile'
then
	echo shar: "will not over-write existing file 'Makefile'"
else
sed 's/^	X//' << \SHAR_EOF > 'Makefile'
	X#	Makefile for "iff" et.al.
	X
	X# Uncomment the next line if you're on a BSD system.
	X
	XCFLAGS = -O -DBSD
	X
	X# Uncomment the next line if you're on a System V system.
	X
	X#CFLAGS = -O -DSYSV
	X
	Xall:	iff make320x200 pick16
	X
	Xiff:	iff.c
	X	cc -o iff $(CFLAGS) iff.c
	X
	Xmake320x200:	make320x200.c
	X	cc -o make320x200 $(CFLAGS) make320x200.c
	X
	Xpick16:	pick16.c
	X	cc -o pick16 $(CFLAGS) pick16.c
	X
SHAR_EOF
if test 372 -ne "`wc -c < 'Makefile'`"
then
	echo shar: "error transmitting 'Makefile'" '(should have been 372 characters)'
fi
fi
echo shar: "extracting 'iff.c'" '(9687 characters)'
if test -f 'iff.c'
then
	echo shar: "will not over-write existing file 'iff.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'iff.c'
	X/* program reads IFF files, and prints out relevant stats. */
	X
	X#include <stdio.h>
	X
	X#ifdef BSD
	X#include <sys/file.h>
	X#endif
	X
	X#ifdef SYSV
	X#include <fcntl.h>
	X#endif
	X
	X#define	SWAPW(w)	w = (((w) >> 8) & 0xFF) | ((w) << 8)
	X#define	SWAPL(l)	l = ((l>>24)&0xFF)|((l>>16)&0xFF)|((l>>8)&0xFF)|(l&0xFF)
	X
	Xextern char *malloc();
	X
	Xtypedef unsigned long ID;
	X
	Xtypedef unsigned short UWORD;
	Xtypedef unsigned char UBYTE;
	Xtypedef short WORD;
	Xtypedef char BYTE;
	Xtypedef unsigned long ULONG;
	Xtypedef long LONG;
	X
	X#define	MAKEID(a,b,c,d)	((a<<24) | (b<<16) | (c<<8) | d)
	X
	X#define	ID_ILBM	MAKEID('I','L','B','M')
	X#define	ID_BMHD	MAKEID('B','M','H','D')
	X#define	ID_CMAP	MAKEID('C','M','A','P')
	X#define	ID_GRAB	MAKEID('G','R','A','B')
	X#define	ID_DEST	MAKEID('D','E','S','T')
	X#define	ID_SPRT	MAKEID('S','P','R','T')
	X#define	ID_CAMG	MAKEID('C','A','M','G')
	X#define	ID_BODY	MAKEID('B','O','D','Y')
	X#define	ID_CRNG	MAKEID('C','R','N','G')
	X
	X#define	FORM	MAKEID('F','O','R','M')
	X#define	PROP	MAKEID('P','R','O','P')
	X#define	LIST	MAKEID('L','I','S','T')
	X#define	CAT	MAKEID('C','A','T',' ')
	X#define	FILLER	MAKEID(' ',' ',' ',' ')
	X
	Xtypedef struct {			/* Group Header */
	X    ID ckid;
	X    LONG cksize;
	X    ID grpsubid;
	X    } GroupHeader;
	X
	Xtypedef struct {
	X    ID ckid;
	X    LONG cksize;
	X    } ChunkHeader;
	X
	Xtypedef struct {
	X    ID ckid;
	X    LONG cksize;
	X    UBYTE ckdata[1];
	X    } Chunk;
	X
	Xtypedef struct {			/* BMHD */
	X    ID id;
	X    LONG len;
	X    UWORD w, h;
	X    WORD x, y;
	X    UBYTE nplanes;
	X    UBYTE masking;
	X    UBYTE compression;
	X    UBYTE pad1;
	X    UWORD transparentcolor;
	X    UBYTE xaspect, yaspect;
	X    WORD pagewidth, pageheight;
	X    } BitMapHeader;
	X
	Xtypedef struct {			/* CAMG */
	X    ID id;
	X    LONG len;
	X    LONG mode;
	X    } ViewPortMode;
	X
	Xtypedef struct {			/* CMAP */
	X    ID id;
	X    LONG len;
	X    UBYTE colors[1];
	X    } ColorRegister;
	X
	Xtypedef struct {			/* DEST */
	X    ID id;
	X    LONG len;
	X    UBYTE depth;
	X    UBYTE pad1;
	X    UWORD planepick;
	X    UWORD planeonoff;
	X    UWORD planemask;
	X    } DestMerge;
	X
	Xtypedef struct {			/* CNRG */
	X    ID id;
	X    LONG len;
	X    WORD pad1;
	X    WORD rate;
	X    WORD active;
	X    UBYTE low, high;
	X    } CRange;
	X
	XBitMapHeader *bmhd;
	XViewPortMode *camg;
	XColorRegister *cmap;
	XDestMerge *dest;
	XCRange *crng;
	XChunk *body;
	X
	XChunk *GetChunk();
	X
	Xmain(acnt,avar)
	Xint acnt;
	Xchar *avar[];
	X{
	X    if(acnt != 2){
	X	fprintf(stderr,"usage: readout file\n");
	X	return;
	X	}
	X    readout(avar[1]);
	X}
	X
	Xreadout(fname)
	Xchar *fname;
	X{
	X    char ofname[128];
	X    Chunk *chunk;
	X    GroupHeader gh;
	X    ChunkHeader ch;
	X    int fd, ofd;
	X    long size;
	X
	X    bmhd = 0;
	X    cmap = 0;
	X    body = 0;
	X    dest = 0;
	X    crng = 0;
	X    camg = 0;
	X
	X    fprintf(stderr,"\nReading file \"%s\".\n",fname);
	X    fd = open(fname,O_RDONLY,0666);
	X    if(fd < 0){
	X	fprintf(stderr,"Couldn't open \"%s\".\n",fname);
	X	return;
	X	}
	X    GetGroupHeader(fd,&gh);
	X    PrintGroupHeader(&gh);
	X    size = gh.cksize - sizeof(ID);
	X    while(size > 0){
	X	chunk = GetChunk(fd);
	X	size -= chunk->cksize + sizeof(ChunkHeader);
	X	fprintf(stderr,"Chunk is type "); PrintID(chunk->ckid); fprintf(stderr,"\n");
	X
	X	if(chunk->ckid == ID_BMHD){
	X	    bmhd = (BitMapHeader *)chunk;
	X	    fixBMHD();
	X	    PrintBMHD();
	X	    }
	X	else if(chunk->ckid == ID_CAMG){
	X	    camg = (ViewPortMode *)chunk;
	X	    SWAPL(camg->mode);
	X	    PrintCAMG();
	X	    }
	X	else if(chunk->ckid == ID_CMAP){
	X	    cmap = (ColorRegister *)chunk;
	X	    PrintCMAP();
	X	    }
	X	else if(chunk->ckid == ID_DEST){
	X	    dest = (DestMerge *)chunk;
	X	    PrintDEST();
	X	    }
	X	else if(chunk->ckid == ID_CRNG){
	X	    crng = (CRange *)chunk;
	X	    fixCRNG();
	X	    PrintCRNG();
	X	    }
	X	else if(chunk->ckid == ID_BODY){
	X	    body = chunk;
	X	    strcpy(ofname,fname);
	X	    strcat(ofname,".ami");
	X	    ofd = open(ofname,O_WRONLY+O_CREAT,0666);
	X	    if(ofd < 0){
	X		fprintf(stderr,"Couldn't open \"%s\" for output.\n",ofname);
	X		}
	X	    else{
	X		PrintBODY(ofd);
	X		close(ofd);
	X		if((bmhd->w != 320) || (bmhd->h != 200)){
	X		    fprintf(stderr,"Calling make320x200.\n");
	X		    execl("make320x200","make320x200",ofname,(char *)0);
	X		    }
	X		else{
	X		    fprintf(stderr,"Calling pick16.\n");
	X		    execl("pick16","pick16",ofname,(char *)0);
	X		    }
	X		}
	X	    }
	X	else{
	X	    fprintf(stderr,"*** Unhandled Chunk \"");
	X	    PrintID(chunk->ckid);
	X	    fprintf(stderr,"\" - %ld bytes. ***\n",chunk->cksize);
	X	    }
	X	if(chunk->ckid == ID_BODY) break;
	X	}
	X    close(fd);
	X}
	X
	XPrintCAMG(){
	X    fprintf(stderr,"\tViewPortMode = %08lx\n",camg->mode);
	X}
	X
	XfixBMHD(){
	X    SWAPW(bmhd->w);
	X    SWAPW(bmhd->h);
	X    SWAPW(bmhd->x);
	X    SWAPW(bmhd->y);
	X    SWAPW(bmhd->transparentcolor);
	X    SWAPW(bmhd->pagewidth);
	X    SWAPW(bmhd->pageheight);
	X}
	X
	Xchar *masktype[] = {
	X    "No Masking",
	X    "Has Mask",
	X    "Has Transparent Color",
	X    "Lasso",
	X    "Unknown"
	X    };
	X
	Xchar *comptype[] = {
	X    "No Compression",
	X    "Byte Run 1",
	X    "Unknown"
	X    };
	X
	XPrintBMHD(){
	X    fprintf(stderr,"\tWidth and Height = (%d,%d)\n",bmhd->w,bmhd->h);
	X    fprintf(stderr,"\tX and Y of Upper Left Corner = (%d,%d)\n",bmhd->x,bmhd->y);
	X    fprintf(stderr,"\tNumber of Planes = %d\n",bmhd->nplanes);
	X    fprintf(stderr,"\tMasking = %s\n",masktype[bmhd->masking]);
	X    fprintf(stderr,"\tCompression = %s\n",comptype[bmhd->compression]);
	X    fprintf(stderr,"\tTransparent Color = %d\n",bmhd->transparentcolor);
	X    fprintf(stderr,"\tX and Y aspects = (%d,%d)\n",bmhd->xaspect,bmhd->yaspect);
	X    fprintf(stderr,"\tPage width and height = (%d,%d)\n",bmhd->pagewidth,bmhd->pageheight);
	X}
	X
	XPrintCMAP(){
	X    int ncolors;
	X    int i;
	X
	X    ncolors = cmap->len / 3;
	X    fprintf(stderr,"\t%d colors.\n",ncolors);
	X    for(i=0; i<ncolors; ++i){
	X	fprintf(stderr,"\t%2d %3d %3d %3d\n",i,
	X	    cmap->colors[3*i],cmap->colors[3*i+1],cmap->colors[3*i+2]);
	X	}
	X}
	X
	XPrintDEST(){}
	X
	XfixCRNG(){
	X    SWAPW(crng->rate);
	X    SWAPW(crng->active);
	X}
	X
	XPrintCRNG(){
	X    fprintf(stderr,"\t%sCycle %d to %d, rate=%d steps/second.\n",
	X	(crng->active)?"":"Don't ",
	X	crng->low,crng->high,
	X	(crng->rate * 60)/16384);
	X}
	X
	XGetGroupHeader(fd,gh)
	Xint fd;
	XGroupHeader *gh;
	X{
	X    GetID(fd,&(gh->ckid));
	X    GetLong(fd,&(gh->cksize));
	X    GetID(fd,&(gh->grpsubid));
	X}
	X
	XPrintGroupHeader(gh)
	XGroupHeader *gh;
	X{
	X    if(gh->ckid == LIST) fprintf(stderr,"List of ");
	X    if(gh->ckid == PROP) fprintf(stderr,"Properties associated with ");
	X    if(gh->ckid == LIST || gh->ckid == FORM || gh->ckid == PROP)
	X	fprintf(stderr,"Form type ");
	X    else if(gh->ckid == CAT) fprintf(stderr,"Concatenation of ");
	X    else{
	X	PrintID(gh->ckid);
	X	fprintf(stderr," of ");
	X	}
	X    PrintID(gh->grpsubid);
	X    fprintf(stderr," (%ld bytes)\n",gh->cksize);
	X}
	X
	X#define	MBUFSIZ	32767
	X
	Xint initted = 0;
	Xchar *ibuf;
	Xint buflen;
	X
	Xxwrite(fd,buf,siz)
	Xint fd, siz;
	Xchar *buf;
	X{
	X    if(!initted){
	X	ibuf = malloc(MBUFSIZ);
	X	if(!ibuf){
	X	    fprintf(stderr,"Couldn't allocate output buffer.\n");
	X	    exit(3);
	X	    }
	X	buflen = 0;
	X	initted = 1;
	X	}
	X    while(siz--){
	X	*(ibuf+buflen++) = *buf++;
	X	if(buflen == MBUFSIZ) xflush(fd);
	X	}
	X}
	X
	Xxflush(fd)
	Xint fd;
	X{
	X    if(!initted) return;
	X    write(fd,ibuf,buflen);
	X    buflen = 0;
	X}
	X
	XPrintBODY(fd)
	Xint fd;
	X{
	X    register int k, i, j;
	X    register unsigned char com;
	X    register unsigned bm, nplanes;
	X    int x, y, rowoff, coloff;
	X    int ax, ay, ham;
	X    char *ts1, *ts2, ts3;
	X    long len, plsize;
	X    unsigned char *planes[6], *mplane;
	X    long rowsize;
	X    struct { char r, g, b; } color;
	X
	X    if(!bmhd || !body) return;
	X    x = bmhd->w; y = bmhd->h;
	X
	X    nplanes = bmhd->nplanes;
	X    ham = (nplanes == 6);
	X
	X    rowsize = x/8;
	X    plsize = (x * y)/8;
	X
	X    if(!(mplane = (unsigned char *)malloc(nplanes * plsize))){
	X	fprintf(stderr,"No memory for plane image.\n");
	X	return;
	X	}
	X
	X    for(i=0; i<6; ++i) planes[i] = mplane + i*rowsize;
	X
	X    xwrite(fd,&x,sizeof(int));
	X    xwrite(fd,&y,sizeof(int));
	X
	X    ts2 = (char *)mplane;
	X    ts1 = (char *)(body->ckdata);
	X    len = body->cksize;
	X
	X    if(bmhd->compression) while(len-- > 0){
	X	i = (int)(*ts1++);
	X	if(i >= 0){
	X	    ++i;
	X	    len -= i;
	X	    while(i-- > 0){ *ts2++ = *ts1++; }
	X	    }
	X	else if(i != -128){
	X	    i = -i + 1;
	X	    while(i--){ *ts2++ = *ts1; }
	X	    ++ts1; --len;
	X	    }
	X	}
	X    else while(len--){ *ts2++ = *ts1++; }
	X
	X    free(body); body = (Chunk *) mplane;
	X
	X    for(ay=rowoff=0; ay<y; ++ay){
	X	rowoff = ay * nplanes * rowsize;
	X	for(ax=0, bm=0x100; ax<x; ++ax){
	X	    if(!(bm >>= 1)){
	X		bm = 0x80;
	X		++rowoff;
	X		}
	X	    for(com=0, k=nplanes; k--;){
	X		com <<= 1;
	X		if(*(planes[k]+rowoff) & (unsigned char)bm) ++com;
	X		}
	X	    if(ham){
	X		unsigned char c, *s;
	X
	X		c = com & 0xF;
	X		switch(com & 0x30){
	X		    case 0x00:
	X			s = &cmap->colors[c * 3];
	X			color.r = *s++;
	X			color.g = *s++;
	X			color.b = *s;
	X			break;
	X		    case 0x20:
	X			color.r = c << 4;
	X			break;
	X		    case 0x30:
	X			color.g = c << 4;
	X			break;
	X		    case 0x10:
	X			color.b = c << 4;
	X			break;
	X		    }
	X		xwrite(fd,&color,3);
	X		}
	X	    else xwrite(fd,&cmap->colors[com * 3],3);
	X	    }
	X	}
	X    xflush(fd);
	X}
	X
	XPrintID(id)
	XID id;
	X{
	X    int i;
	X
	X    for(i=0; i<4; ++i){
	X	fprintf(stderr,"%c",(id >> 24) & 0xFF);
	X	id <<= 8;
	X	}
	X}
	X
	XGetID(fd,id)
	Xint fd;
	XID *id;
	X{
	X    UBYTE temp[sizeof(ID)];
	X    int i;
	X
	X    read(fd,temp,sizeof(ID));
	X
	X    for(i=0; i<sizeof(ID); ++i){
	X	*id <<= 8;
	X	*id |= temp[i];
	X	}
	X}
	X
	XGetLong(fd,id)
	Xint fd;
	XLONG *id;
	X{
	X    UBYTE temp[sizeof(LONG)];
	X    int i;
	X
	X    read(fd,temp,sizeof(LONG));
	X
	X    for(i=0; i<sizeof(LONG); ++i){
	X	*id <<= 8;
	X	*id |= temp[i];
	X	}
	X}
	X
	XChunk *GetChunk(fd)
	Xint fd;
	X{
	X    ChunkHeader ch;
	X    Chunk *c;
	X    int i;
	X
	X    GetID(fd,&ch.ckid);
	X    GetLong(fd,&ch.cksize);
	X    c = (Chunk *)malloc(i = ch.cksize + sizeof(ChunkHeader));
	X    if(!c){
	X	fprintf(stderr,stderr,"Couldn't allocate %d bytes for a ",i);
	X	PrintID(ch.ckid);
	X	fprintf(stderr,stderr," chunk.\n");
	X	}
	X    c->ckid = ch.ckid;
	X    c->cksize = ch.cksize;
	X    read(fd,c->ckdata,c->cksize);
	X    return((Chunk *)c);
	X}
	X
SHAR_EOF
if test 9687 -ne "`wc -c < 'iff.c'`"
then
	echo shar: "error transmitting 'iff.c'" '(should have been 9687 characters)'
fi
fi
echo shar: "extracting 'make320x200.c'" '(2511 characters)'
if test -f 'make320x200.c'
then
	echo shar: "will not over-write existing file 'make320x200.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'make320x200.c'
	X#include <stdio.h>
	X
	X#ifdef BSD
	X#include <sys/file.h>
	X#endif
	X
	X#ifdef SYSV
	X#include <fcntl.h>
	X#endif
	X
	X#define	MAXX	320
	X#define	MAXY	200
	X
	Xunsigned curx, cury;
	Xunsigned dubx, duby;
	X
	Xtypedef struct {
	X    unsigned char r, g, b;
	X    } COLOR;
	X
	Xextern char *malloc();
	X
	XCOLOR *ipic;
	X
	Xmain(acnt,avar)
	Xint acnt;
	Xchar *avar[];
	X{
	X    int fd;
	X    unsigned len;
	X    unsigned x, y, i1, i2;
	X    unsigned tr, tg, tb, td;
	X
	X    if(acnt != 2){
	X	fprintf(stderr,"usage: make320x200 <pic file>\n");
	X	return;
	X	}
	X
	X    fd = open(avar[1],O_RDONLY,0666);
	X    if(fd < 0){
	X	fprintf(stderr,"Couldn't open %s for reading.\n",avar[1]);
	X	return;
	X	}
	X
	X    read(fd,&curx,(sizeof curx));
	X    read(fd,&cury,(sizeof cury));
	X    dubx = (curx == 640);
	X    duby = (cury == 400);
	X
	X    fprintf(stderr,"Current picture size is %dx%d.\n",curx,cury);
	X
	X    if(dubx || duby){
	X	len = sizeof(COLOR) * curx * cury;
	X	ipic = (COLOR *)malloc(len);
	X	if(!ipic){
	X	    fprintf(stderr,"Couldn't allocate %d bytes for temp buffer.\n",len);
	X	    return;
	X	    }
	X	read(fd,(char *)ipic,len);
	X	fprintf(stderr,"Picture in memory.\nWriting output.\n");
	X	close(fd);
	X	unlink(avar[1]);
	X	fd = open(avar[1],O_WRONLY+O_CREAT,0666);
	X	if(fd < 0){
	X	    fprintf(stderr,"Couldn't open %s for writing.\n",avar[1]);
	X	    return;
	X	    }
	X	td = 2 * (dubx + duby);
	X	for(y=0; y<MAXY; ++y){
	X	    for(x=0; x<MAXX; ++x){
	X		i1 = MAXX * y + x;
	X		i2 = 2 * curx * y + ((dubx) ? (2 * x) : x);
	X		switch((duby << 1) + dubx){
	X		    case 0: break;		/* Can't happen */
	X		    case 1:			/* dubx */
	X			tr = (ipic+i2)->r + (ipic+i2+1)->r;
	X			tg = (ipic+i2)->g + (ipic+i2+1)->g;
	X			tb = (ipic+i2)->b + (ipic+i2+1)->b;
	X			break;
	X		    case 2:			/* duby */
	X			tr = (ipic+i2)->r + (ipic+i2+MAXX)->r;
	X			tg = (ipic+i2)->g + (ipic+i2+MAXX)->g;
	X			tb = (ipic+i2)->b + (ipic+i2+MAXX)->b;
	X			break;
	X		    case 3:			/* dubx & duby */
	X			tr = (ipic+i2)->r + (ipic+i2+1)->r;
	X			tg = (ipic+i2)->g + (ipic+i2+1)->g;
	X			tb = (ipic+i2)->b + (ipic+i2+1)->b;
	X			tr += (ipic+i2+curx)->r + (ipic+i2+curx+1)->r;
	X			tg += (ipic+i2+curx)->g + (ipic+i2+curx+1)->g;
	X			tb += (ipic+i2+curx)->b + (ipic+i2+curx+1)->b;
	X			break;
	X		    }
	X		(ipic+i1)->r = tr/td;
	X		(ipic+i1)->g = tg/td;
	X		(ipic+i1)->b = tb/td;
	X		}
	X	    }
	X	len = sizeof(COLOR) * MAXX * MAXY;
	X	fprintf(stderr,"Writing out screen\n");
	X	curx = MAXX; cury = MAXY;
	X	write(fd,&curx,(sizeof curx));
	X	write(fd,&cury,(sizeof cury));
	X	write(fd,(char *)ipic,len);
	X	close(fd);
	X	fprintf(stderr,"Done.\n");
	X	fprintf(stderr,"Calling pick16.\n");
	X	execl("pick16","pick16",avar[1],(char *)0);
	X	}
	X}
SHAR_EOF
if test 2511 -ne "`wc -c < 'make320x200.c'`"
then
	echo shar: "error transmitting 'make320x200.c'" '(should have been 2511 characters)'
fi
fi
echo shar: "extracting 'pick16.c'" '(5076 characters)'
if test -f 'pick16.c'
then
	echo shar: "will not over-write existing file 'pick16.c'"
else
sed 's/^	X//' << \SHAR_EOF > 'pick16.c'
	X#include <stdio.h>
	X
	X#ifdef BSD
	X#include <sys/file.h>
	X#endif
	X
	X#ifdef SYSV
	X#include <fcntl.h>
	X#define	rindex	strrchr
	X#endif
	X
	Xextern char *rindex();
	Xextern char *calloc();
	X
	Xchar *s;
	Xchar fname[128];
	X
	Xunsigned char xscreen[32000];
	Xunsigned screen[16000];
	Xunsigned entry[512];
	Xint indirect[512], inx;
	Xunsigned palette[16];
	X
	Xunsigned numentries = 0;
	Xunsigned xmax, ymax;
	Xunsigned r, g, b, r1, g1, b1, r2, g2, b2, w1, w2, w, w12;
	Xstruct points { unsigned char br, bg, bb; } color;
	X
	Xstruct points *pp;
	X
	Xint dist, dist2;
	Xint dr1, dg1, db1, dr2, dg2, db2;
	Xunsigned besti, bestj, tr;
	X
	Xint fd;
	X
	Xmain(acnt,avar)
	Xint acnt;
	Xchar *avar[];
	X{
	X    int i, j;
	X    struct points *tpp;
	X
	X    if(acnt < 1) return(1);
	X    strcpy(fname,avar[1]);
	X    fd = open(fname,O_RDONLY,0666);
	X    if(fd < 0){
	X	fprintf(stderr,"Couldn't open \"%s\" for reading.\n",fname);
	X	return(2);
	X	}
	X
	X    fprintf(stderr,"Clearing entry[]\n");
	X    for(i=0; i<512;) entry[i++] = 0;
	X    read(fd,&xmax,sizeof(unsigned));
	X    read(fd,&ymax,sizeof(unsigned));
	X
	X    if(ymax > 200) ymax = 200;
	X
	X    fprintf(stderr,"xmax=%u ymax=%u\n",xmax,ymax);
	X
	X    pp = (struct points *)calloc(xmax*ymax,sizeof(struct points));
	X    if(!pp){
	X	fprintf(stderr,"Couldn't allocate screen.\n");
	X	return(5);
	X	}
	X    read(fd,pp,xmax*ymax*sizeof(struct points));
	X    close(fd);
	X
	X    tpp = pp;
	X
	X    for(i=0; i<xmax; ++i){
	X	if(!(i % 75)) fprintf(stderr,"\n.");
	X	else fprintf(stderr,".");
	X	for(j=0; j<ymax; ++j, ++tpp){
	X#ifdef DEBUG
	X	fprintf(stderr,"Reading (%u,%u)...",i,j);
	X#endif
	X	r = tpp->br; g = tpp->bg; b = tpp->bb;
	X/*
	X	read(fd,&color,(sizeof color));
	X	r = color.br; g = color.bg; b = color.bb;
	X*/
	X#ifdef DEBUG
	X	fprintf(stderr,"r=%u g=%u b=%u\n",r,g,b);
	X#endif
	X	r = (r+16)/32;
	X	g = (g+16)/32;
	X	b = (b+16)/32;
	X	if(r > 7) r = 7;
	X	if(g > 7) g = 7;
	X	if(b > 7) b = 7;
	X	r = 64*r + 8*g + b;
	X	if(!entry[r]) ++numentries;
	X	++entry[r];
	X	}}
	X    fprintf(stderr,"\n");
	X    fprintf(stderr,"%u color entries.\n",numentries);
	X    while(numentries > 16){
	X#ifdef DEBUG
	X	fprintf(stderr,"%u color entries.\n",numentries);
	X#endif
	X	dist = 9999;
	X	for(i=1; i<512; ++i){
	X	    if(!entry[i]) continue;
	X	    dr1 = (i/64);
	X	    dg1 = ((i/8) & 7);
	X	    db1 = (i & 7);
	X	    for(j=1; j<512; ++j){
	X		if(!entry[j] || i == j) continue;
	X		dr2 = (j/64) - dr1;
	X		dg2 = ((j/8) & 7) - dg1;
	X		db2 = (j & 7) - db1;
	X		dist2 = (dr2*dr2 + dg2*dg2 + db2*db2);
	X		if(dist2 < dist){
	X		    besti = i;
	X		    bestj = j;
	X		    dist = dist2;
	X		    }
	X		}
	X	    }
	X	w1 = entry[besti];
	X	w2 = entry[bestj];
	X	w = w1+w2; w12 = w/2;
	X	r1 = besti/64 * w1; r2 = bestj/64 * w2;
	X	g1 = ((besti/8) & 7) * w1; g2 = ((bestj/8) & 7) * w2;
	X	b1 = (besti & 7) * w1; b2 = (bestj & 7) * w2;
	X	entry[besti] = entry[bestj] = 0;
	X	numentries -= 2;
	X	r = (r1+r2+w12)/w;
	X	g = (g1+g2+w12)/w;
	X	b = (b1+b2+w12)/w;
	X	i = r*64 + g*8 + b;
	X	if(!entry[i]) ++numentries;
	X	entry[i] += w;
	X	indirect[besti] = indirect[bestj] = i;
	X	}
	X    for(i=inx=0; i<512; ++i){
	X	if(entry[i]){
	X	    r = i/64;
	X	    g = (i/8) & 7;
	X	    b = i & 7;
	X	    indirect[i] = -(inx+1);
	X	    palette[inx] = r * 256 + g * 16 + b;
	X	    fprintf(stderr,"%d%d%d ",r,g,b);
	X	    ++inx;
	X	    }
	X	}
	X    while(numentries++ < 16){
	X	fprintf(stderr,"777 ");
	X	palette[inx++] = 0x777;
	X	}
	X    fprintf(stderr,"\n");
	X    fprintf(stderr,"Clearing screen\n");
	X    for(i=0; i<16384; ) screen[i++] = 0;
	X
	X    fprintf(stderr,"Making picture.\n");
	X
	X    tpp = pp;
	X
	X    for(j=0; j<ymax; ++j){
	X	if(!(j % 75)) fprintf(stderr,"\n.");
	X	else fprintf(stderr,".");
	X	for(i=0; i<xmax; ++i, ++tpp){
	X#ifdef DEBUG
	X	fprintf(stderr,"Reading (%u,%u)...",i,j);
	X#endif
	X	r = tpp->br; g = tpp->bg; b = tpp->bb;
	X/*
	X	read(fd,&color,(sizeof color));
	X	r = color.br; g = color.bg; b = color.bb;
	X*/
	X#ifdef DEBUG
	X	fprintf(stderr,"r=%u g=%u b=%u\n",r,g,b);
	X#endif
	X	r = (r+16)/32;
	X	g = (g+16)/32;
	X	b = (b+16)/32;
	X	if(r > 7) r = 7;
	X	if(g > 7) g = 7;
	X	if(b > 7) b = 7;
	X	inx = 64*r + 8*g + b;
	X
	X	while(indirect[inx] >= 0){
	X	    if(indirect[inx] == inx){
	X		fprintf(stderr,"Indirection error!\n");
	X		return(4);
	X		}
	X	    inx = indirect[inx];
	X	    }
	X	inx = -indirect[inx] - 1;
	X	pixel(i,j,inx);
	X	}}
	X    fprintf(stderr,"\n");
	X
	X    fprintf(stderr,"Writing screen.\n");
	X
	X    s = rindex(fname,'.');
	X    if(!s) s = fname + strlen(fname);
	X    strcpy(s,".pi1");
	X
	X    fd = open(fname,O_WRONLY+O_CREAT,0666);
	X    if(fd < 0){
	X	fprintf(stderr,"Whoops - couldn't open \"%s\".\n",fname);
	X	return(3);
	X	}
	X
	X    outword(0);
	X    for(i=0; i<16; ++i) outword(palette[i]);
	X    convscreen();
	X    write(fd,xscreen,32000);
	X    close(fd);
	X
	X    fprintf(stderr,"Screen written.\n");
	X
	X    return(0);
	X}
	X
	Xpixel(x,y,pix)
	Xunsigned x, y, pix;
	X{
	X    unsigned bmask, indx, pmask, i;
	X
	X    if(x > 319 || y > 199) return;
	X
	X    indx = 80 * y + (x/16) * 4;
	X    bmask = ((unsigned)0x8000 >> (x%16));
	X    pmask = 1;
	X    for(i=0; i<4; ++i, ++indx){
	X	if(pix & pmask) screen[indx] |= bmask;
	X	pmask <<= 1;
	X	}
	X}
	X
	Xoutword(wrd)
	Xunsigned wrd;
	X{
	X    char tw[2];
	X
	X    tw[0] = (char)(wrd >> 8);
	X    tw[1] = (char)wrd;
	X    write(fd,tw,2);
	X}
	X
	Xconvscreen(){
	X    unsigned i, j, w;
	X
	X    for(i=j=0; i<16000;){
	X	w = screen[i++];
	X	xscreen[j++] = (unsigned char)(w >> 8);
	X	xscreen[j++] = (unsigned char)w;
	X	}
	X}
SHAR_EOF
if test 5076 -ne "`wc -c < 'pick16.c'`"
then
	echo shar: "error transmitting 'pick16.c'" '(should have been 5076 characters)'
fi
fi
echo shar: "extracting 'beach.uue'" '(19738 characters)'
if test -f 'beach.uue'
then
	echo shar: "will not over-write existing file 'beach.uue'"
else
sed 's/^	X//' << \SHAR_EOF > 'beach.uue'
	Xbegin 644 beach.arc
	XM&@AB96%C: #_?QCK_W\7330  !H/(7FT<HIW   ,1IY(:0( P!U!29@(:;(0
	XM"1$ D 90"  D *2"D @4 !  HL0%%"T"&-(D"!2/8#P" P,%&APPT #! 7<1
	XM$#Q8%^$! P4/&BQPP("!@P8-WE"CX(P6'0H+'CP 10$ >YH3@$T ,[&" P"3
	XM*S0 4("!%0L$%H"R &"8A0$* (BV("X"@'!1R!,B60K6 1?@QS]_!?_T^R> 
	XM'X #_/X5> K +R##!![\!3!@W[]_ /)AYJ>OX(/!5CMSU'QO<[W \?[=*SB 
	XMW+]LA#_\ ]8/0($ EP%7O@Q @&1PD ?P#F 9<V-]F/WE P :W'+2R4\#^)!Z
	XM-4?7L'W_ PX@\F5  "P3V'K@'[Q]W?_\ _\GL?$/FD,7_. /,[SE /X@MX<9
	XMD#W/J?V77SFO$28</H;==IE8[?U# #Z4_<,/>@3(MM4'[A5T0'S B'9 ?0#P
	XM@]\'^V$&C( #!%C0#P1FA]N$W?EU86($  ; 9126]]0 &5(6'SBB!3 8?@^4
	XM"  XIZDX78N$Y?</A9)!>(!X[,T6W#\0ACA9?/C@]P>('6IH)#[2_2#//P(>
	XMP.0 C5G9G7"&$>?@A5A2.!D G]WY W(AC@@B/D$:R8]T!YR)XIK3F8?>/Q&M
	XMF%@!$$JV7IQ^V3A ?38^H!E^!X &2&?(U?,//8'-\\]IB);G#X6.'?:H;KD9
	XM)H!LP!C6F(T!Q/=I04(F)]H/EHEJE70!F"K='^842$"$;A;PFZ/_=!3 H[;J
	XM:.L M1V'F7, \,E/M@\$NZT\K/$GW0?)PD8 >)?Q(ZNUMJDW6WXTBG4@>E99
	XMRN=]*_()C(U38O8'?P# $\^*I4GW0+J$;2688EMQ)&&"N&W7&(VV_H4O./A^
	XM )J(\WF+JV73$<S/P90ES!K# CR%X9P%:1PCEG@6UYMZCQ4$CVCT)<>I9MDV
	XMB"?!_CRE,D<L1_KJBI-V5YYANQ$@EHRV LJKIZ(-P*&-+Q\F+" H_X#/J(&=
	XM4Z  NE&9*'<$X&:C>$]%::MR@8$()*_QP0-P8AP)"P[*#XQ-ZG1F9X>9G 3$
	XMK6AZZUWLH&&J9DPDB/SF)S*O? ,@K,&L">Y9X?\(QQZ-$,+)ZKP/+"W<;+7A
	XMMNMA((*L+0#^9/O#8!T-O!G* 7A.&>C"B?5RC1(_V=VS41?_K<1A<C3D?$"S
	XMAGMCHCXU]CP  &]>S;SQ5JMM.@:66 !B#088;OR"UKRF)AI67T</" M,V)IA
	XMWQ@Z!1Y(F7@,FI>@_JYJF.-XA27\_(!R'OJ1:*+E-?N@##[_L-\#\ <; (IG
	XM*Y62U8NR=2G"N(QO?"G@?$#DCZSEC6<=.8"P_ &X^O&*@@Z2$+06DR@WN2U!
	XMY:%9U_CQ(B*I#U^YPHS5*-.1 =##1.0ZC&:2^(-T*.M.J2,,A'H6)_4L2HIX
	XMXIL_W,:IQ'2&2T&2EJF2N*%_',R)ZE(/:Q(C *4I!CQMRAD!_ (YRT2$4WP"
	XM1-"\M1S,I&98K-',.P+#C@+UY4X/*TP :1A'R$@F;8S2&FOVM4>?W0@ ?X0'
	XML03IF4+"I@"M.LQ@T+9(6]$*,JKBB!W9]+H >,MV?**;<?YPIA!M\A^#I(PG
	XM8[.>VA0@A[I96J*^1X#5J3*2\N%(+&VWJ4OFIY;^(!4G.;++6;&.5^_;'V^T
	XMP[:*%6254GG./[(%P3ZN*#72_(<[ %#-4S+N<&K[#62\&1YD D.<^8+>/\S9
	XMF#\"XC2:66=^VG$VR1#3+_!TD%@D<YX;10L\X+QG9DR4*5UUQC@_^",PCH4<
	XM@?Z H-F19W=DDU"I'69QEQ' Z)#)K:UYQJ+.I(Z).*K.%8&4,"*MT'#X=]*&
	XMIG2EC6HI15_:GXO.1Z,T]>A-N0D9D@("<>1!*6& RB9N66Y;%2UJ3/^(I,!T
	XM=#Y+S:FD( HS'5U1I?1BJ9?X!(ZLRN<]7$TJ6 NZ'4=^IY[CZ2F%<);6H*X5
	XMJT1]ZU&W)=?IA+6NQ[OK!?7*.*H>Z:]'<NNNX$I8K];4L'1EVUCQ&M6&$H"O
	XM#?*K92,;V,D.]DB%_<!A-:O8LB[NLXT+;54AV];2&G4Z<;6L0%6;6;LV;K%F
	XM;6Q?9SO:VN()II1%K6[G&E+$>N>WKO4L:!,CVJN2]KA:36Y7K[K;U?J6K'D-
	XM+FP=:U7] !:[@L5M9;G+7,*4A[70#>]KIZO6XDKVMC)5+GLQFYWWHK*U\L7'
	XM7N?U ^H2U[K&+:-4\)M;;77W;/ B0 [!^Y3R")AQ4S-PP2"K-PUQZ+8/R&29
	XMOHJGI49X=12.T(7G2& -5\Z\!0/8AYT98ON,^+(/,+'_;+,Z!I%.Q:<3GHL-
	XMR"=\R-A$(/XCF?IUV0,L]4 46U!:'Q0A&+%X1LCL$I,!8.1 ;NNV!U#RN4CL
	XMY+/=RZ$"R/#C)+:JD5HLBHW2\NSX@2L%.C/,I@G990>PU!<-&(,T.I_,O$,>
	XM#<N.1,FI\Y>=F:+HZ%F@ >BSA$Z'9>(Y%$K;XQ$R#[W,B1;LMHVFG<)('.FS
	XMW:C-.HV;S7@C1PMS1,-TPVXEN7S; ,#C5&+Z1SL L%0G85I*:E,/,0&8F/K\
	XMK#\VVI,0.P.86ULE3<C9=7[<D3\GM5J&49O:CA5DJ]O]1:L^&BJ>O,5LU)@(
	XM1=%>$;4KV"9BONB8B4O4BN_4J6\OV,LQSC7MRMU/^PC(E;KVS+I#ERC/(O+'
	XMDD)/ -23;$S9)TA<JHUF^%UC+I\FW8<9.)NB-.#Y4.NDB!6 8UHGG#_A<WG3
	XMR2-Z /;'007&,M(>@,9/BFI:48:-NK%;;;3SO>F0D,C),27)@+%R7OW1'V6"
	XM.:\&OJP>)^A9CI/6QWMZ+?7Q;.+2LP]Z;)<:A5F&'0!@.KNP]*X=OT\L/#US
	XM?OXD&O;=^U9"W+J&-)JFKZ_H'04J0/^PM'/<((C'EP&T@R#D-GQYF\OX4O#=
	XM8)<<]%2KEN#XM]VG@_?L/*7 "HT9JM6CZN%8T3/^4O2&F6,\ V[N-)-_0.6Q
	XM&,4"V IG=JUCYOW2\P.\<K2R.V#[,L,:8;G<<6"GS.I)&37PN+-MDT&<R\B.
	XM-V1O.=8/^)-ALJ0[46LH,<$/P/!+JCCIQA9C-#?,'>US7]:0</J>^=J_$[..
	XMP-RZ@M]?L^G<O%#5!;YUUJ4SOIO7JR/5)DL#(#_G,ACMUQCO%SH6\P'B43QR
	XM]"QR$@#@41_X!T&S5EZ#41NKX3>D0H#S<8#"L2,\Q7G_0S-9)$ /$P#G@U[_
	XM GI"-"*6@8( 8!T_0##X0"X!@!L%>  >*$.<U2;&\R()0E(?9!]%]".UP4<L
	XM6##6\0$F S@%.  '2 !0Q$:1XBGG\WFP)7O2PB7XTB#XH36JH2'5 P#J4#!Y
	XM%TK>IDB(H1A9<GR/I$VS1&X:8G7-9QT!:"('4X;]EAW')R_P!AXY14\VTQC-
	XMM';;(D[_X3=Y.%C]M6,2!F 55B<8YCC&X7:O$WTMR&0"4GWXL(B'D1K9<68I
	XMI68$$">#9B$E:!P*UCP=1#LCLA\K0C2>& "@2!A^-C,NLVK&\X@[TB-@.'K/
	XM,VYHDGYF! #I@$FFAH51<AC!YB;%1(+%YFER]B5(EFMI(C_D<HR-<2;LYAA7
	XM C6+Y1?P$&6F9#ZXYR</-TG#2!F;DXV>P8T$9R'S="=PDRA6]B57<R>(YHJ>
	XM$3N!LHX!X'ON2!GPN'$HU2B. REX\AV4,DZT T6%6&_R$2H <$16@3WH4"K5
	XM)AE6UBJM!SF7,8Z](1MZQ!%N@V^O@RWIF!_!$AB;@Y&>82KLIBJG QZ:1GP@
	XM4I+6U'/TT7S)-"W]87@MF1\6"0BD<@Z!<43JPBQR9'/U)'40XQF()4JC)5%L
	XM14Y#:2;;\A_E,!_\L91.9QM0]S)0Z7H:LF.4 4N'V"V; 2Y#^0&UQ ]<62[*
	XM4CS<\4L6\VH/54^8(0#PXCQZ]EB6Y9:XIE[_00X \)4.,G9_YY?FD2TH&"UH
	XMEWEJ!P@ LR] )Q4 0S+^ 2 F8AV T)6-41KYH0V+Z5#NTAL?F" (Y6,P4YGZ
	XM8A^9F6"<*2 5!PZ@*9H?0)I_8)H0^)"R F6V05*NF5>W:!5'F(FS8UR[\6QS
	XMMRVY.1^\:9IZYR2]I)K,YRR!-V5/<9RT\7+*N8\=IDU2D2:99!W ()H/0)H_
	XM0)U[]YT"()QX:3&8%V_>:3LD(V?B:2E#9Y[V@9[JR9[N:9WPT'?9N3J"1V7W
	XMZ1GY^8I"Q)_G]IQ<!J :(J"*L7?X8*!_5P (ZC@**C-2D2T!PV4.RF4C$Z&?
	XM*$04>A@66IWRLCP"X'<C2)\_5G@%\9WDJ9]%=J+E*:'XL*('T*)[5SN] 82 
	XM1Z.#QV;X@J-RTB>!V67'U*.4H61 :J%I9H@&FIH<NIWU27@@^CTDPVD/RBO]
	XMR1I4>J.B&:28T9Z$P2 26*03<Z0)ZJ5M)A6&$:8E"J5->B)FJJ)H6J%K:II7
	XM2HU9.J-SJJ0W>J>;D:<\RJ=3ZJ=2D:96ZJ8.&:-QNJ5(^J%U"J:+^J2-BB)G
	XM&JF VAB"2JGY9*E:VJ%=BJAV*CZ=FG)C&J6.&FH_^J<L&JAMFA_FB*J&ZJ%9
	XM\J6.]ZK[J*=E^J@3:JMJ2JHF.!C5*3%:6C$)FC%URC$K\C$EJG]1&GE]&B+6
	XM 0ZB.0"D^0&"ZC#,RAA&JB"9*JT;@R]YXJ2P&B(\JJW&R@_=^JWA.JZ-P:Q9
	XM<JX5,X2EJ'GK.H>O6B2;$:^@NAGURAKW*D#>5@"X,FEHYJ\98SQ' D36FH3+
	XM0S+R&FKT6A#>JK"8(:X,&XTV"EO^:B,XXK&= 1K0UVD:^V]'E[ <L; MXZ%B
	XM<6H#UGF'\WF?MB(_1U2U03+P\&^W9AWP@)BD^0""ZJ\1,VA^$2DV(P"PIS,\
	XM\[-*Y)!I53!$&X8%@[28H;18-#S4MXNR 6RG27M5XR'!J&"6"2T69X96D27X
	XM@)CY,3:'(:AN9):-E%BR9U)H6Q!#I)+)](LK.$!+EA\:);=T*S:8<0""*GM]
	XMZ8U.@VV+)8\% 3)8@V_&M4/'PE59P@]T^P%V.P"""DGK,DSS>#[U6+9SXR5@
	XM G'D=WV.UF\%DR7^0+>!<SBEJTTF]1N+TBCB$2EQRH]P)YA<8BE:="Y*9KMT
	XM>P!V&P"":ASU*%Y\59\@R8/[U(^RB7NUP3>%67'\\*MT.P!V"P"F*3I3)B40
	XMRV)"IABP<DVNXR&QDYE$FJ_1LAX'2SM>&IJ\,C:YLPT(2(KOBVE;D3P5DZ',
	XM$R3!2($"BQL;989>"@R(Z;^- <#"L17ATCV[QXO?M)=V(VC<0H?H59(^=[_;
	XME5']L1RX 0YT^P>:T1$?8,&9%H+;!D!1)  .DSGH8T (Y&&+=B/HHS!<I<+F
	XM$;HOC"<R;"OA*#/G*B]#6# ]-$*^@F\[XQDO0BR91,2@2U1%!,!2R#6/,D7M
	XM4D7&DU)N1#M<)+ A\D7+QBMN,S@#4$M:YC;->\0! ,"'!!AL!#F/PAB2ZQV0
	XM=$?J6#"S)DO%B"<KU$?_0+=!A!D O).^5#&0U)<Y94SUU"C\%SW3T4S><S!'
	XMI,A2@9B:@5'<X%[.M5G )8GC-5R"B6!']E;;\D!?<U';TL+(\1ZE')^2.(H>
	XM:HI6AHIPQB9RIFSPJKFTS&4H<X='<LQSJV>JF,LE*QNYJ,%6\5^]B$S0I\DP
	XM5L6\432:DX[=C+NWS"NY[&N3:[8FI1YW^6ZZ^FW'IIF!R1D/Z<<FPVR+K(Z 
	XM4<IL\K?(]S8.LGQ6=B<J^;H^.9X#$$OV+!6 0S0)G9Z\@AS)U@T$QW&,XW&*
	XM81B2\CTB=YT!\$B9&!\H1\R L')"E,Q?0])<UL*6 3 2S28T27\W1Q@Y9R([
	XM9U"F9+7$[ _=-G0HS4*\(C\]O;@KS2L2O2P5\SW:&3%1!(% Z;!G*9+.4XV;
	XM')3Y6#!;AX>!03 -I3[J:1FVXPVG&2O8*9*@)&4-DE=J1XW[%EC-TS.(1WJT
	XM$S8T>-6TDZ9>S2M@C</MS$C\RJ7@A[/S(;0<9&>404+HL2^#PX2-QY8%DY''
	XMU';AX$'302--BVI/RSU].;7">%U!1*)PG3,_0BA?8Q@_XMA>.!_BP'I3]\=/
	XMP[O:QAV'<7OYQ\/;0MIYQHZU[6G\X-@O\X6I34H!<[K'=Y+*5W"VTMEM.SO0
	XM1SG3UQ__MCG-;17:&$74-PZ$45(8?)!LDKX+F9KC=UWLPRFQ$]U=Y7ODK8V:
	XMUH;6+0#Q%8DKUBJ89Y83AG_;_,HIZ2G_9V,NV1_YW=B!,1A9\@#6'3Q3!C6G
	XMB#KVMQWX1\S8VMG\UQS]_7L_X#<1SML SAH#/B_#(VB[B#P+6#'+TQ$Y+7%K
	XM^3']C73SX7LG[M@JN:\9CL&Z6,V3RQ@O&(& !</:C)G_#5A'\P 665NE@90E
	XMO!H97F%J$W@CF"68-ZBX0W@CS#5%9D O""&DV9F'<2:]$X/]80X<41[6\0>N
	XMH3_9YB1D#4!KJ->8QRM7"\^;K:/&09J.BF<% >>BR;4_$.8T@SC]DYJH:B.)
	XM)'A2D4(N11E(^*[  .?Y>^@F(IH_((-XKL0P4RD*%Z?U4;-= P]%>%X YZX$
	XMJX1;N:WP0)H?BR=+Z!I2^'J/@D$,R69/%Y*3+429[G_@2;R=_J.?SA%4NBV2
	XM.A^FSH/QO7PV]!<S>L8\%&Z$O"(D$VNVA[#^9G3,7C#VZAF]GFQ]7$/<L7 Z
	XM;1L'7((ALH7V@966%-O//K3.SJWV$>UX,NT634,D]7<+)T/H>L9;-!K?GFMX
	XME!RDJ4G(2#OY+IH!8!T/H.ZOKI DE9KO?E;R[NU<QD'(<>_\+D1)@N]"Y._6
	XM<0 "WWIB+.P<\7EFS.WSWMD(K$S9*^X/_[8Q._&\4O$73X4EC)P;OXOJ@=$O
	XM2.]<]GJ6\870\;9%*T1(JR$KSWHYV3I8&//<H_!_QY(C#X:DN60[G](QZ/,Q
	XME"DLCXDA^O(#)O,,!/([G?0YS_2JP?-/?Q@_WT9X B9"#_,R%#!&O_4X__4Z
	XM[_;-K/)1[QE3;_96SSA:2/-'#RQ<#_>GT?1Q#_5?3/= 3]-WGX7,F/5<PO9>
	XMMO1_#_<]+_9S7X)D3_7@</97G_AK']A][_AFN/21;_&3?\-5.%0'C_>:K_>&
	XMEQAM[_F '_IC7_KY=OJ(K_:J3_BM#_&?#_9R_UE[PWH?<X5HG_<@CR^:EOMO
	XM#_IA+_JP);N5S[+GXQ>G [G2"$2LW_BZ__K+;^IJ%-.5_RAP],=TE/B8 48[
	XM/KA=W[F0O_T.TOU J4BM=[-_+!O@R!L@_2N9&VZD^7M_4!V;$?FM$2V5LN-J
	XM6.U["\APJ-MME_]!M/_JO_^1WQJ*$4H>(].+U(;.F$J[$8=3+$I2'42DB>+]
	XM1IJW&_8!X!K65)(%0%+!Y+[SX8S&)"=Q.,51'4X319HHWF^D>;MA'P"N <G8
	XMQ$"[0<G.)8B\08C9VQR(6)@RQ1^(>9@XY5P(!6]B$5P_E5;O48BZ-WI792Z>
	XMR1^(>9BFS#83UH,6-F!J]AXPU?+#;"16CF<$P[^;2"".2=9'S=WSQ[ZO7HDS
	XMQGCNJFP$,ZL!LNB)N2($HLL7EE+1BJ@ZA<$]HGA98[6(1C#R2HMHHNN).1\$
	XM@JJG,\V8D;(<K&G&\8OI,_($J]41K]5=:9L$(@"7EECH7"7#!HU;HIQJW3S+
	XM3H-E8B@HGR8$PB93^XSUGU?B2([5BDB%[M953.AH<ML/8"B;T96'$H_.=9)X
	XM!=![92GF^*[+O1G_2#32$<=HDAQ=^6\$8I KUOWQ+;Q-L]$EF<<^S"GY_P?B
	XM,CA_8"S_T)6H0G OS6+@L89.O3K9OI/=)GJMQ+*_(BZ Q!'&LN6:$QC)TG0+
	XMTNH1@WEEF27^)3U;QBU%!NY^0T;FLBU<?B[)<KJ7T9CP4NG%:2^2F$\D7SG$
	XM7+@C6GV<,YJG8A]<KC#),JA@ AB\*J>^RJH]E^9B:J)DNJ9-"*B^Q^72,0#)
	XM8NF4#; S [7;I-E5W/+*KLU\\P!$8S2GDAQ<3BS)\OWNRS375O]^.Y5#U'\I
	XM.>A=HT+]$3:"TQ](.3A_8#;$QU.6BWS2^\\+>?2QIGO&&[L!U#>Q[!F"LRU(
	XMF=AFP]X='&\6-F#@8;T@)SG:Z]GYU[W&(2R=V#FC(D1(.3@'8#8$;KT14G/S
	XM$MS%4Z );'[A_@.:G"<B3C36,RK)@92#$P!F<\&8[5 RSL%/:>.DM<++D?^6
	XM2$[9] %?@S(N'$']D9'V\P?X(^8T7.8D>.: _E0B5+Q5O.:+]P<IM#D/5#_V
	XMD9$2A#^G[JHTA% Y<T-BZ>I=@P]1C">> D0GI"%%5)1)Q#ZU! C'F$1_X$2#
	XM3_FRWV6T3_1J_Q><DI^V[:32(L=PK!G.A@_MQQ@'L Z*@8:CQ,=L.!_.^(:[
	XMT2@I661JR8^S),>WA'=<!G:Y= "%M)/NPT#%MY#=Q!N7S"82I2M<P\GGU!\ 
	XMI4[]L6L"]0<$Y9CP!5Z=-6#D15OEIUU)M2V[]F"Z3-9'S=WS=V6OWBB50\Q0
	XM^HMW4XEB]FA"M&L"56:H^F<>*FBHQE !U"AB2CNBQ\W;BN+"2&VTLVN01E "
	XM -BIAMD.)>,<K&F-DLU8N\VU=FNCIFL!MVL$)0#F[!WH7"7#!HWN[,/Y-#M6
	XMTVS.G6L$917K)&U_0&UL,K7/6/]^NVWL[&TY:4+BUNGR[.=TIXX$)17K)&T_
	XM0&W[[(SO!E7R9B>98CY2_8L)AM"T<TZW#G $=23K)&T?0&UL8KG]W,'Q)AN;
	XM9QR]8C>PFV_TSF_YI>_19A_K)&T/0&UL(LUVXN<(E[+OSC4.U[-Z3^(4)V9L
	XM25!<MD[2=@#49I KUOWQ+;Q-L]$EF<<?+42S-M*TXZ/' G-"M$[2=@#49I K
	XMUOTO(]](WALCQQ$E]]%M&9@C33L2RO\PMQGK%'/49I =V3@?"7(B:4TY<VJO
	XM"F,HU^DC33O;RO\PMQGK%'/4YM+KVRIKZ-0YQ.?N9(CN"F/U>] F4G3&BN*-
	XM 7/)L4[2%@#4YM).VSAKZ-2KD^T[V6U6"V/UN^E$1SOECN*- 7/)L4[2%@#4
	XMYM).VS@W.=.RXD[%&VLPENW^4G2X/KM\3U"TLT[2%@#4YM(';I,X5]B&SW,W
	XM'>XPENV-P=.T4^XHWA@PEQSK)&T!0&TN?>#V@G.%O2TU[28M'VLY+70F4G2X
	XM/KM\3U"TLT[2%@#4YM(';B\X5]CUSG,W'>XY;2L9+!5%A^NSR_<$13OK)&T!
	XM0&TN?>#V@G.%7>\\=]/AGM.VDL%2472X/KM\3U"TLT[2%@#4YM(';B\X5]A"
	XM5--NTO*QEM/5PM.T4^XHWA@PEQSK)&T!0&TN?>#V@G.%+40U[28M'VLY72T\
	XM33OECN*- 7/)L4[2%@#4YM(';B\X5]A"5--NTO*QEM/5PM.T4^XHWA@PEQSK
	XM)&T!0&TNG;(Z92\X5]AMV1LV/1_!F-/7PM/,L>\HWA@PEQSK)&T!0&TNG;(Z
	XM)1;OKQN@T6$\5XXCG]/LRC=$QQS[CN*- 7/)L4[2%@#4YM(IJU-B\?ZZ$?R]
	XM(5)X$HPY;?P@)'='=RXPEQSK)&T!0&ULLCH48G/O'TR3P52>$8PYW1D@)'='
	XM=RXPEQSK)&T!0&ULLCH4XI0SKVG-*E)X$HP_@'7V6[',88;G\G4U!7;4UG2K
	XMKE,W._--K=13*9&O\P-8-QW-(7>(6Y@*^ ^%M$Y@1VU-M^K:>;,-4I99XE]J
	XM_#H_@'6BM"URA[B%J8#_4$CK!';4UG0+TNH10Y9ZJ;=_*;AMC75IJ77,<4[?
	XM^W4U!7;49M1(+I9YN8:_&;5_V7^+!T'R 1I;?5I6GL&%9!6#%'Q_@'=&'9)E
	XM5Z :\C[@99.2"!I5/,*BH=87!B[^5'?_4$A6,4C!]P=X=[IC/-:L:=:4#61U
	XMLQEM-V,M?V$<1'<:\G4F,DC!]P-XYZ+?L7/R*2DY_,_.:GB>DGB$3?4P\GJ0
	XMAR)?MRV#%'P?@'=Z_3#-VM?I"K"<7_7&OGBMV&:_\N.2]P^%="2#%'P?@'=H
	XM3K*#QGFO;FDI"ZN0>4+YB![+89'Z_G7V,4C!IWJ2/3R,@85EB]DWTS2;7:#2
	XMN!R>0MK$^+9I54A<-DC!=P!X]_T7S30-F/8\];<DCW(PEGM@0MJ]=]N85T@A
	XM,DC!-P!XIX91>WPE!V]T M5@J);$Z]8B"2$KI##8EQR#E'UX1TIZOI#4BDS!
	XMV]W'/>CEI"'CS64K(BK2H6GK@$L T'YXQ]XI9F$#!A[6"W)Q8EWCR;99,QCH
	XMA\C]<1KLUQ]/48!_<&L$;KT14G/S$MQVN>"70_,2!>%<UGLS-1\$:")/48 _
	XM<&L7/!T?ONH<_( VGD\XCK7;["56^/2;,SC4N [V\10%^ "W]H&\6R5E3H(W
	XM3*[1DH*6F"E1SODP^.4T:(,X*$1/D8.W!B<=G%>2[JP)XL2O#L7&;ER;+CN=
	XM'NI>N3N>L0Z;\11/>&N#3_E35!]DC/ >O_D-KV_^4/&BPCOJL#UE>&ME#4>)
	XMQ,>*P1@D:5>3C'MME_]!9(=?DX?]X8G]STO?DTV( XC.)8B\08@CK]9"E8BQ
	XM3(:Q3(:#Y9@B^8CM#623B'F5"%-EKYS*MHDTF(<E38;/J<LKILZ]C*@ZA<$]
	XMHGA98[6()B"*'==DF!RSF!H" -BIAMD.)>./2'@]TMGI V[+;IM?DXW],9"T
	XM1'!3^XCU[[?;QL[>YN>%KGL]2^CKJ,SPD(WV,9 /<"9L8KG]W,'Q)AN;9QR]
	XM N7A3O5T XM]DQS9F!P#&0!G8I KUOTO(]](WALCQQ$EY\-?V!RB\0<M^>,8
	XMN2TP.1VFXM(IJU/V@G-I"5@\5XZ>QG\:N_5E8BK*E2S*Q>73(2I&O2"MKM3C
	XM\U3"])="LF7EE>R$>2[0Q)7),9<<P1^G.\9CS9IF3=E 5A#)?=#;NYR;Z=R>
	XM>21?3B!'LAJA6QJ#"B: P:MRZJNLVG-I+J8F2J8H2JLR2"#'VKRE4;/U"4>#
	XMQGFO;FD\6\6&2.LNV^RXCN^>02#\#@",7!ID+[:!0;8T$]S@\;>T)K#OG-QI
	XM[O5Q"_5Q"P#C$!ACHX;"Q-J4"S.6N\95G9(_ L:WW?_; H"N<200,@[S,3;$
	XMIS;#G7RKRWS$J]:9'+L!9'VT"P_[ZAJU"P#CX!EC0TIZOI#4BDS!V]VMZ[-K
	XM>;QK-+OYA0_[ZAI<!B'CH"%CP][PUGT#!A[6&WXQ,SG;FW^XXKU"O!D0$A&N
	XM$2(0,@Z=<]W@I;[OW3@OX]0HUCKK(;_*"6/U>X+X*Z'^X.1_0"#Z"P#CT+\(
	XMN%+_.G_L6X).W6.MLQY9,[_/9SNX@[_;Z@]._@<$HK\ , []&\"]'"$U-R_!
	XM73P%FL#F%^X_H,EYXL!;Z^1W3C/BP&4![*$<3L"\6SP([, *//(,+$KW^\"W
	XMYN1W3C/BP&4(6&D<3L"\^U2YT3K;H< C#T'Y%-4K_/A6H<+3X1I6L1SB$!B:
	XM<<'3\>&K3FC'])MONL++D?\0Y/*XLQWJ;Q4J/!VN817+(0Z!H1D7S#U&O>H<
	XM_)0VGD\KO!SY;XE!\S[;H?Y6H<+3X1I6L1SB$!B:<<&8[5 RSL%/:>.DM<++
	XMD?^62$[OLQWJ;Q4J/!VN817+(0Z!H1D7C-D.U:H<_)1B03D@O!PB['8XBHDK
	XM7"8:I<+3X1KA! #BL"*:<<&8[5"MBI>,T2#D\Y F*C$A+-5NAZ,?8L)EHE$J
	XM/!VN$4X ( XKHAD7C-D.U:IXR1@-0CX/6<PKO!PB['8XVD$K7"8:I<+3X1KA
	XM! #BL"*:<<&8[5"MBI>,T2#D\Y"T \++(<)NQZ3OLQUEHE$J/!VN$4X ( XK
	XMHAD7C-D.U:IXR1@-0CX/23L@O!PB['9,^C[;428:I<+3X1KA! #BL"*:<<&8
	XM[5"MBI>,T2#D\Y"T \++(<)NQZ3OLQUEHE$J/!VN$4X ( XKHAD?B-D.U:IX
	XMR1@-0CX/23N"ECY2[79,^C[F428:I<+I;B++(0XKHAD?B-D.U:IXR1@-0CZD
	XM)VCI(]5N]SWO8QYEHE$JG.XFLASBL"*:\8'<<[H+@D/;DU;D0WJ*)#$O1M J
	XM&)R7$<3G9"(JG.XFLASBL"*:\8'<<[H+@D/;DU9,OI<[7#=2[79$]_)!?$XF
	XMHL+I;B++(0XKHAD?F/BGNR XM#UIQ>22*3$O1M JJ'!^$<3G9"(JG.XFLASB
	XML"*:\8&)?[I(#GA^S$8,@CO=:1ZN^\-N1W0<(1E!?%H2!3^N$4X ( XKHAD?
	XMF/BGB^2 UX9LQ""X8XHO9C<)9"(*)QQ!?%H2!3^N$4X ( XKHAD?R+M54N8D
	XM>,/D&BV"]F(]O.;4>H/WJ^]X,L0<D>YK*0[Z).8T7.8D>.: _E0B5+Q5O.:+
	XM]P=^)\1KF4*N(9CBH$_ZH^=.TI@OHL<C:R)^1]NT9LPKXG>$,L0<(?F"*0[Z
	XM9$&1KO&HRD&5_L0AI)\D9$(K^0%^A\7;FT*N,7KB0%2G[JIYA5"3GNW:N3U=
	XM@P]1/!V# ;L]>Q@O0BI9S!&4X1JC)PY$-?@)">S7_B511C-1U.U_X4/; D3F
	XM3T1_D=ARK,+7D8GBX,.#3_FR7UNT3_1J_Q><HK&V[:1NDT0?8)$@(RVNX:3B
	XMX&7-KY?P_RCRWS0Z5?^"3.B&/]L.%3:^9TZNX:3BX&5E#4?U!MQ3=WRI)">-
	XMTDJRG=.@# A)I,RR%!@$PH_BT'P[Z3X,M!N4[%R":$_B1$Z<C-6?[$QWGKWA
	XM,%%,E5CQU5EG15ZT57Z\\3<IGEV\KE7A8%F.2=9'S=WSQ[ZOWBB50\Q02KC'
	XMS#D-=&^5Z!KW%@Y,AJI_YJ&"AFK/LH:-(J:T(WIWPQLG\].+9ARML6CAH&<"
	XM -BIAMD.)>./2'BP1B0YWL;=_!3"8C7&$0"N06L $ ZYQB93^XBEPU-4H^V^
	XM;C[@MHI0OAD)#3:QN!G\]@<$LL8 $ [JN,_.>))X!=!V8BGF(]6=;= (_9 *
	XM[1D,33LK0B!K'0X//=&JW/WQ+;Q-L]$EF<<?+42S-M(/B<QB2-4 XQI6@1X1
	XM\P>6X=).VS@W.=.RXD[%&VLPENW^TM.\ ]2TPRNN(17H$3%\;]0+TNH10Y9/
	XM-75_*;AMK2O&#QI;C=7YH=5RUQ@$8M5'PJ!AK?&Z3-:M.64%+(F&N-8J6+5Q
	XM!]<^W1ASS1R\0B!O'3$!@^;Z2D#/ZNK#HZZ<O_!4G#6&S=CX,#@/0#2'K2'X
	XM0SOH$3%R8NDTPAA86+;<<[J:W>D%*HVNVQ^V73"BW1^D[1GX(^/?X*IJ*$RL
	XM3;DP8[F$GARS=FAV8]O6A]M'0MHOE-O?8-'$QU.^>R/ FZ0<>=R#7DX:,MY<
	XM-E/?'"+HUQA.%"*&\0UK=-W@I;[OW3@O8Y8H1M\[ZL.#B]]<IOOY\37_IR'X
	XMX_+>L.,$7I^P4G,6$]S%@\ B'DNB%\)"=.+G(BP(O*_XL_  X T">\&8[5"M
	XMBI>,T2#D\Y FRA%3K9:C9[\FJN4*8Y%=MAIF8Z( T T:4A]B3L,;ZG=K-++]
	XM(>CBMNR>_:Z @.@2"@@R2"!6H0V!<>JNFE<(->G97@!"^.I<%NN7S]@MJZ*W
	XM3HN0^@$$PF7:H"&#3_E35!]DC/!%K_>&T? ^[/I<*_K9\/)Z3!A\')5[JU.3
	XMK-L\D_]!M/_J;X?8,9+760 D%4SN.Q_.:$QR$H=3'-7A-%&DB>+]9AT!@!V]
	XM8=,S4U* Z%P50U8858AJ75XEHKS#B!V]X5^3&U]1M6+"1HGZE$QN/<Q&8N5X
	XMMHDMTAOP@J[%63KK2WNO7HDSQGCNJFP$,ZM*PB*O@9T7EE+1BJ@ZA<$]HGA9
	XM8[6(1C#R2HOK^ $M J?WF("!5CR85F&^2-B]0B1&TE5*\@$M J<UMST*J,$Y
	XMDFD]TMGI,_($J]41;YLMTAN G6K<<[JK_HB$UR.=_6(YZ2%&HN_/M(X/T"*]
	XM<6F)A<Y5,FS0N"7*J=;-L^PT6":&HB$MTAOF_(CHW#]W"2<[#AA<0MO+K(XT
	XM>"Z&HB$M0AG6]E^EPU-4H^T\^#!^'N4^^\,'C2:Z/QV&HB$M0AG6]E^EPU-4
	XMH^V^;H[6-<QVDS5C<BZ&HB$M0AG6]HV\J^IDS<[>YN>%[M953.AH<ML/8"BL
	XMT2*4L;?/6/]Y)8[D.!_F.-M2W+.$CB:W_0"&PAHM0AE[^XSUGU?B2([S88ZS
	XM+<4]2^AH<ML/8"BLT2*4L;?/&"=+;'#EB$B%[M953.AH<ML/8"BLT2*4L;?/
	XM&"=+;'!<8XZS+<4]*_(FHS"&PAHM0AE[^XQQLL0&QS7F.-M2W+,B;S(*8RBL
	XMT2*4L;?/&"=+;'!<8XZS+<4]*_(FHS"&PAHM0AE[^XQQLL0&QS7F.-M2W+,B
	XM;S(*8RBLT2*4L;?/&"=+;'!<8XZS+<4]*_(FHS"&PAHM0AGM]HWPINH&QS7F
	XM.&?HV+,B;S(*8RBLT2*4T6[?"&^J/F^98HYSAHZT]M!H<MN%LHX#T"*4T6[?
	XM"&^J/F^98HYSAHZT]M!H<MN%LHX#T"*4T6[?"&]T,F^98HYSAHZT]M!H<MN%
	XMLHX#T"*4T6[S&">KJ\KT9HYS-CEM+/(F0RB&PAHM0AEMTDWT^,_V:">68H[O
	XMNMR;\8]$(QUQ#) M0AEKD[H='&^RL7G&T2M0'NY43S=&@N(<82B\TB*447!V
	XMXN<(E[+OWG!0%$N<\CQ&$DT 8"B\TB*4L9#>-T/"VS2'9* 0.?(2N2NA0C;Y
	XM82P T"*4L9 KUOTO(]](WALCQQ$EY\-?V!RB\0?BDMC& @ M0ADGU9&-LX;R
	XM?1F-Z4YKAY)9 QI#Q/=?0RC&$ACI0ADT1R$V=Y,SO?"]8=,CY)/\QS<7UACB
	XM(A6#<P!'5";ITAU,V>HWVR!ER1@B1976997U/AWB(A5)] #FLB+ITAUVB4-Y
	XMJ6F_&;5_*22!65[(09B*F)B%B2ZOT1UCQ^>K:1NM.64%+(GY1.C;NYR;*3!:
	XM_4 ]GBZVL7<%"J<;JJHU^J6$Z=GO2JQK2H,HHZ:$DBZ](7B"MGG;L^$Q0[%W
	XMP[)$XK(A*XLI7Y@!D"Z],44TPAA86+:)?[J:/41Y\L[)+30JM#UU2S;ITAM\
	XM[+Y,<VWUGU>6N\95G9(_ L:8H<Q@,Q^^\P>%TQNF*SS.)8C_O)!''VNZ9[RQ
	XM&T!]$\N>X3L?4#B](;W_?%(K5KW@ET.2H[V>G7_=:QS"THF=0S:'43@10HH&
	XM7G.H\^'WE\#F%^X_H,D>PT SF!S60S8<43@1 N,.PH#6W,&_"28@O!SY;XFV
	XMDTT?\#4HX\(1%!@4I&*N3>9)[OR +C'#W,-KOG@,I$(.I$\21$'=P8-GK>H_
	XMJ/':N3U=@P]1/!V# ;L]>QA%=$0M] _D0D'I\?O/7["'3_1J_Q><$J:V[:32
	XM$I=PK!F,,0#K\!JV$4IY MQ3=WRI)">-TDJRG=/\1$NW'42Y- ">U!LV/3,E
	XMM5!2]9L1A4^%:XFWA<)245@?]1J] 2^86IP[HLJTYSB-4CG$/)ZKF&3Z[6">
	XM 5)P>H^9*FBHQE !U"AB2CNBQ\W;BN+""&D@U1N [1V==[K"=B6$!VM$HBO)
	XM5F2UYFQ6ONS2]@?K1AG6]HV\J^IDS<X>8V\I^2.9(H=^SE7H%G#3L6Z4L3:I
	XMV\'Q)AN;9QR]8C>PFV_TSF_YI>\8]P#K1AD+N6+=_S+RO2"R,G)=;F]:!M)J
	XM:15%EZ*V!)XQMVZ407,UZ?TS[?([>=/A#F/9CO12472X/KM\+VT!L&[=P92M
	XM'C&85Y99XE]9ETP0I+;;(G>(6Y@*^ ]@MV[=43PBZ9@%JKV_J39G!AI5/,*B
	XMH=87!B[^5'?_$'Q_4'D<(1;U$9S9F='<Z:R&-Q@))-54#R.&07>L,7D_4'F]
	XM0:X72D#/ZM=K!MC3,72#_<.MV&:_\N.2]P_!]P&5UQL)"D>#QGFO;FDI^Z[)
	XMW=E5'-7HX26G5T_!IWJOT1M,6S<44K:8?3--L]G&!?++X2FDG>*ZGU;!=P"5
	XMUQMN1&7F[!U]"QY_2_((#-*NNWN<XGME@GVL47F]D;?)UC2/6/]^.Y7+3CNS
	XMEGMV0]H_?=LO$WP#4'F]0?T;/6R3$35T M5@J);$Z]8B"2$KI##8QRN5UQM]
	XM:WS.6'+PMGQ0_8O)G=.38Q_HEQ]$HS#8QRN5UQNF:WS.=9)XI3A'C]Q0'NY4
	XM_W?41S2$@GV\4GF]8;K"XUR"^,\+>?0.SC6%2/5_I^2B0BCL!P"5UQNFNU#;
	XM\;ML$KS=?=R#7DX:,MY<MB*B(AV:UGZ5UQO8O9#4BDS<S9'B]XN;&Y'CS64I
	XM7IB:UGZ5UQO8O9 ^A9!G+;S>_8O&%=X:,MY<EN*%J6GM5WF]@=T+Z5,(>=;J
	XMF^W?;5SAK2'GQV4I7IA V7Z5UQO8O9 ^A9!GK;[9_MW&%=X:<GY<EN*%"93M
	XM5WF]@=T+Z5,(>=;JF^W?;5SAK2'GQV4I7IA V7Z5UQO8O9 ^A9!GK;[9_MW&
	XM%=X:<GY<EN*%"93M5WF]@=T+Z5,(>=;JF^W?;5SAK2'GQV4I7IA V7Z5UQO8
	XMO9 ^A9!GK;[9_MW&%=X:<GY<EN*%"93M5WF]@=T+Z5,(>=;JF^W?;5SAK2'G
	XMQV4I7IA V7Z5UQO8O9 ^A9 -D@#JZP\&( -8L!7?;5SAK2'UX; &( -8L!5M
	XM*"K$PGX 4'F]@=T+Z7VNF@#JZP\)H 10  0>\2-9)=[NFP!*  5 P&4I7IA 
	XMV7Z5UQO8O9#>MU() )+^P !*  5 X!$_4GZ%[;X,H 10  1<EN+.C3G_4(!_
	XM\'Z]P7T+Z7W@@7D) )+^8 !*  5 X!%Y4WZ%[;X&H 10  1<1HS.J9<%^ ?O
	XMUQO2^\\GM6+5FQ@)<+T#H 10  0>D3?VG36#44Q*  5 P&7$"$CLYWZOT1OM
	XM?5(K5KV)D0#7FP!*( 5 P!'6-9YLFS6#00 )H 12  1<1HR Q'[N]QJ]$5_J
	XM^]Z-\S()\+Z&, />L!6YLZ,^_).#00"&, />L!59HD+]<2P<F!_O%R$K167S
	XMQ[XEZ-0]1M\[NG\*;/A9HD(S5:W_4( _\'X14IP&7G.H\^'WQQ%S)GH2!>%<
	XMUGLS-1\<:("O$2$"'"&H]BS!73P(+.*Q)'HA+$3_]]/K56\%^ 'O%R$7\N&K
	XM3FC'])MOBN-8"V,6Z) 9N"T;^ \%^ 'O%R$P3LU('3YI13X/::(<,=5J.7KV
	XM:Z)/OSF#\R'_4( /\'X18N1AC5A;VH9LQ""X$R=/_J12'BV&\>4T:(/"D8/O
	XMIV+PUC^-^2)Z/+(F(NCBMNSNNH^''HN[LR)/^'[=P8-GK>H_J/$%((2OSF6Q
	XM?OF,W;*0JMAQK2$%:&NOT1WZ6.T%3\8([_$*7Z#JZ/#^ /"BPCME^'X5K9?P
	XM_RCRWS0Z1?WW7ZW@IO2]UQ^>V/^OT1LC]Y#$-W7'ET/'%(=3G)8F(D[6$9!8
	XMK8<HG TC@012, 6\D@!HD 9R4 9S  (PH !L$ 9C4 8@$ ,*8 8P  (*8 9A
	XM  (*8 9B  (*8 9C  (*8 9D  (*@ =MD 9N  (*@ =M$ 9X  (*D =MD 9N
	XM  (*D =M$ 9X  (*H =MD 9N  (*H =M$ 9X  (*@ =VD 9E< =P\ 9IX 9T
	XM  (*H =VD 9E< =P\ 9IX 9T  (*, 9OT 9M4 9N0 <Q  (*, 9OT 9M4 9N
	XM0 <R  (*, 9OT 9M4 9N0 <S  (*, =AT 9PP 9IX 9G\ 5R$ 9T4 8@  ,*
	XM, =C$ 9LD 9N< 9?@ 9ED 9G@ 9T  (T  ,Y4 ,*@ =T( =AX 9SP 9A0 =E
	XM  (PH !Y0 =R$ 9N, =L$ 9T4 8@  ,*, =C$ 9LD 9N< 8@  ,*< 9R$ 9D
	XMD 9EX 9T  (PH !P4 9R, =P4 9C0 =I8 =E  (QH !HD 9D0 9EX 9?P 9I
	XMX 9E, <@$ ,*\ 9V4 9R  =L\ 9T  (PH !DD 9M4 9N, =I\ 9N, <@, ,*
	XM4 9N0 8*   :"&)E86-H+F1O8P#_?Q=9 P  &@\:>1>2(@4   P@("E 4D1*
	XMDR)38LAP$43*D( #4(@04B;,&#0B6( @:!#A"1!&ZK@90R?-&S<@L"1)DD*!
	XM@H *J*!),P<$31!A0-@I(R</B#EIVL!A4P8$G#!IW)1T<\8%"!!)0*!Y Z=H
	XM5#1A=H(8$P8.G3IRRI !00=-F9>0"K!)<P8-'1 GR9H%(:;B19QNQI8M*H9-
	XMG3)SG(*0R;=BG9)FZK"AZQ<P7#-RBP8I<Z:B&[0%IE04G.0MG3=OUH!H4W3.
	XM&](E29-] Z+RVS1OP]3,"2=-F3%%WT#.V:;.73%L*\O!2P:SG#![AZ>1$Y:H
	XMG3!*?]81H^8V'1=H%11QH^9-GA N Y)HT0*$"A#D,6?/\J;.Z# ^R="D(R>-
	XMF,-%R]ZL31)L43-AE<&&3Y^!($053#!1!!5).&'@$PT1,05.<K27%V9[;64A
	XM?3Y!-U888E08!AF"(?'&'67L)(=&03B1!0A05"$$$TD,$02#3SCXA!$;%730
	XM%!\948430^#H(&93%)0$0D:ET5]8-;TQ7(LO/D$%1R!4D20(.PY&4!,@/2$%
	XMC%+LF 05&H451QW+.189")C=41\==)2!4E5RM$$34''I]F88<I0TQW7904&4
	XM;$4M44014'B9Q(1$//&0$4DH")435 11) AWF(52'NV!4,=0;XSX)G]?A84=
	XM3(2%16%1;4A96!B'I9'88F.<]!E8->6J)U.BPK&J0$Q4I)5JO $V1QB5P872
	XM5'>  *I[:ZT!JT]W2+D&=MEM(449I+51EQPZ<%K444F])89/:[5UW5,RU3&'
	XM1M..QI9;4F65'VLCJB&O9V9AUBZ^?DX[W!QC!(B2A]*V-UR%IX%@AI1T ?86
	XME(K1$=A34<E;1QAL#$@66)<%5$"&$+<!PL :/[9;7G19)-JH.(G1WELVM("#
	XMQ&64X1EK=M@6;8:H^N="%R^%)Q!'/X*  A1E4$44"$PDM49+V4V1Q11/0*&1
	XM"DWD"$(0322A0G8HX!###"FTD ,.-;1P@PTRT) =%6$(%89&1C A9A)$!*&T
	XM M^"#((3>9=1;A!E02<;GS4=X=02@&J,W!LUI84"$G;B!L(4[:V%0@@IM!10
	XI!7#7#<(0((L%6!I0S<$&PT34MQ-:%>"M-]],@#####;,<(-&6@H.&@ I
	X 
	Xend
SHAR_EOF
if test 19738 -ne "`wc -c < 'beach.uue'`"
then
	echo shar: "error transmitting 'beach.uue'" '(should have been 19738 characters)'
fi
fi
exit 0
#	End of shell archive
-- 
Bruce Holloway - Terminal Netnews Addict    {seismo,sun}!amdahl!drivax!holloway
ALBATROSS, ATARI*TROS @ Plink                                ALBATROSS @ Delphi
                                >>> HI, KARL! <<<