*BSD News Article 9844


Return to BSD News archive

Received: by minnie.vk1xwt.ampr.org with NNTP
	id AA6643 ; Mon, 11 Jan 93 19:03:53 EST
Newsgroups: comp.unix.bsd
Path: sserve!manuel.anu.edu.au!dubhe.anu.edu.au!csis!munnari.oz.au!spool.mu.edu!caen!hellgate.utah.edu!fcom.cc.utah.edu!cs.weber.edu!terry
From: terry@cs.weber.edu (A Wizard of Earth C)
Subject: Re: 386BSD install problem -- can't mount /
Message-ID: <1993Jan13.042201.28353@fcom.cc.utah.edu>
Sender: news@fcom.cc.utah.edu
Organization: Weber State University  (Ogden, UT)
References: <1993Jan11.022758.10164@cs.wright.edu> <1993Jan11.224035.2823@fcom.cc.utah.edu> <1993Jan12.005906.13693@Princeton.EDU>
Date: Wed, 13 Jan 93 04:22:01 GMT
Lines: 762

In article <1993Jan12.005906.13693@Princeton.EDU> bkc@ernie.Princeton.EDU (Bruce Caruthers) writes:
>In article <1993Jan11.224035.2823@fcom.cc.utah.edu> terry@cs.weber.edu (A Wizard of Earth C) writes:
>>
>>386BSD asks the controller about the drive geometry instead of believing
>>the CMOS settings.  If your CMOS settings don't match what the controller
>>says, you have "translated drive" problems.
>
>Is there any way to tell 386BSD what the drive is set for?  The settings
>for my drive are significantly different (manually configured long ago)
>from what Seagate reports when you call their number.  It does, however,
>still fit a "type" listed in the BIOS (42, if I remember correctly).  I
>am fairly certain that the current settings are *not* what the IDE
>controller reports.  If I were to change the settings, it would require a
>lot of work re-doing the DOS partition and such.
>
>Thanks for any help (at least I know what is probably the problem, now, and can
>change it if I get desperate enough),


OK... I am going to put ide_conf.exe on ref.tfs.com; in the meanwhile, for
those of you who can't wait, I am reposting the original article by Frank
Maclachlan (Message-ID: <1992Oct18.153007.28120@crash>)


> Given the numerous inquiries about untranslated geometry on various
> IDE hard drives, I wrote a quickie program which can be used under
> MSDOS to report the "default" drive geometry.  The command used to
> query the drive (identify drive, 0xec) is the same command used by
> the 386BSD 0.1 wd.c driver.
> 
> The program does the following:
> 
> 1.  Reports the drive configuration as reported by the system ROM BIOS.
> 2.  Queries the drive for its configuration and prints the geometry
>     given by the configuration.
> 3.  Resets the drive/controller and delays approximately 1 second.
> 4.  Again queries the drive for its configuration and prints the
>     geometry given by the configuration.
> 5.  Asks user to reboot system since translation may have changed.
> 
> Steps 3 and 4 were added because I wanted to know if the identify
> drive command would return the sames values after the controller/drive
> was reset.  I tested the program on a Fujitsu M2612ET IDE drive (90 mb,
> 1334 cyls, 4 hds, 33 sec/trk) and found that the "default" geometry
> was 667 cyls, 8 hds, 33 sec/trk.  Note that some (albeit simple) trans-
> lation occurs on this drive in the "default" state; this was no doubt
> done to avoid exceeding the 1024 cylinder limit imposed by the system
> BIOS.  Also, the "default" geometry didn't change after a reset (it
> really shouldn't); the drive's translation mode, however, did change
> after a reset (see below).
> 
> I noticed some other things while playing with the Fujitsu drive.
> The drive is installed in a system w/ an old Mylex 386/20 MB.
> The AMI BIOS does not support a type 47 user configurable drive
> type, so I chose a drive type having 1024 cyls, 9 hds, 17 sec/trk.
> I didn't really believe that the translation was performed in
> software (most IDE interface boards don't have an on-board ROM),
> so I wrote a program which scanned the disk by talking directly
> to the controller registers.  The drive looked like it had 9 heads,
> 17 secs/trk and 1150 cyls.  The drive's notion of its geometry
> (translation) is determined by the 'Initialize Drive Parameters'
> command (0x91).  This command sets the number of sectors from the
> sector count register and the number of heads from the head
> address field in the SDH register.  The drive then computes how
> many translated cylinders it can support with the specified head
> and sector count (that's why I could read 1150 cyls even though the
> BIOS configuration indicated 1024 cyls).  The translation was cleared
> after a controller/drive reset; the drive then behaved as though it
> had 667 cyls, 8 hds, 33 secs/trk.
> 
> Also, data transfers from this drive averaged about 300 kb/sec when
> the drive was set up in translated mode and about 660 kb/sec when
> set up in its "default" mode.  This was probably partially caused
> by the use of 17 secs/trk rather than the native 33 secs/trk; the
> 80C31 microprocessor has to work harder to translate addresses.
> 
> For those IDE drive users with a modern BIOS supporting user configurable
> drive types (type 47 on an AMI BIOS), I suggest configuring the drive
> or drives to the default geometry given by step 4 above.  This results
> in the geometry remaining constant throughout the 386BSD's handling of
> an IDE drive and possibly better performance.
> 
> I am enclosing the program (a .c file and a .h file) and an .exe file
> (for those of you who don't have an MSDOS C compiler) in a shell archive.
> 
> Hope this helps!
> 
#!/bin/sh
# shar:	Shell Archiver  (v1.22)
#
#	Run the following text with /bin/sh to create:
#	  ide_conf.c
#	  wddefs.h
#	  ide_conf.exe
#
sed 's/^X//' << 'SHAR_EOF' > ide_conf.c &&
X/*------------------------------------------------------+
X|							|
X|  Name:						|
X|    ide_conf						|
X|							|
X|  Usage:						|
X|    ide_conf [drive number]				|
X|							|
X|  Description:						|
X|    Displays IDE drive configuration under MSDOS.	|
X|    Optional drive parameter selects drive for query.	|
X|    Legal values are 0..3 where 0 and 1 are drives 0	|
X|    and 1 attached to a primary controller while 2 and	|
X|    3 are drives 0 and 1 attached to a controller at	|
X|    the alternate controller address (0x170 - has not	|
X|    been tested).  If omitted, drive 0 is checked.	|
X|							|
X|  Author:						|
X|    Frank P. MacLachlan				|
X|							|
X|  Date:						|
X|    18-Oct-92						|
X|							|
X|  Compilation using MSC 6.0:				|
X|    cl ide_conf.c					|
X|							|
X+------------------------------------------------------*/
X
X#include <stdio.h>
X#include <sys/types.h>
X#include "wddefs.h"
X
X#define	TPS	18		/* ticks/second (really 18.2) */
X
Xtypedef	unsigned long	ulong;
Xtypedef unsigned int	uint;
Xtypedef unsigned short	ushort;
Xtypedef unsigned char	uchar;
X
X/*
X**  The following structure corresponds to the ROM BIOS
X**  disk parameter table:
X*/
X#pragma	pack(1)
Xtypedef struct parms {
X	uint	ncyls;
X	uchar	nheads;
X	uint	res0;
X	uint	wpc;
X	uchar	ebl;
X	uchar	ctlb;
X	uchar	res1[3];
X	uint	lzc;
X	uchar	nsecs;
X	uchar	res2;
X} BIOS_PARMS;
X#pragma	pack()
X
X/*
X**  The following structure corresponds to the values as returned
X**  by the ESDI/IDE identify drive command.
X*/
Xtypedef struct {
X	ushort	gcfg;	/* general configuration */
X	ushort	fcyl;	/* number of fixed cyls */
X	ushort	rcyl;	/* number of removable cyls */
X	ushort	hds;	/* number of heads */
X	ushort	bpt;	/* bytes/track */
X	ushort	bps;	/* bytes/sector */
X	ushort	spt;	/* sectors/track */
X	ushort	isg;	/* inter-sector gap */
X	ushort	plo;	/* PLO sync field */
X	ushort	vsw;	/* vendor status word */
X} ID_PARMS;
X
X/*
X**  Used to manipulate identify drive data.
X*/
Xunion {
X	ID_PARMS	id_parms;
X	unsigned short	id_data[256];
X} id_buf;
X
X/* pointer to low word of system time value at 0040:006c */
Xushort	far *TimePtr = (ushort far *)0x0040006cL;
X
Xint	drive = 0;		/* drive number */
Xint	wd_base = WDP_BASE0;	/* base I/O port addr of HDC */
Xchar	*my_name;
X
Xvoid	reboot(void);
Xvoid	chk_drv(void);
Xvoid	dsp_bios_cfg(void);
Xvoid	dsp_hw_cfg(void);
Xvoid	reset_hdc(void);
Xvoid	delay(int);
Xvoid	sel_drv(uint, uint);
Xvoid	bsy_chk(void);
Xvoid	usage(void);
Xvoid	io_delay(void);
Xvoid	test_hdc(uint, uint, uint);
X
X
X/*-----------------------------------------------
X |
X |  Main program
X |
X +----------------------------------------------*/
Xmain(argc, argv)
Xint argc;
Xchar *argv[];
X{
X	my_name = argv[0];
X	if (argc > 1) {
X		if (   sscanf(argv[1], "%d", &drive) < 1
X		    || drive < 0
X		    || drive > 3)
X			usage();
X		if (drive > 1) {
X			drive &= 1;
X			wd_base = WDP_BASE1;
X		}
X	}
X	chk_drv();		/* make sure controller, drive present */
X	dsp_bios_cfg();		/* display BIOS drive config */
X	dsp_hw_cfg();		/* display H/W drive config */
X	reset_hdc();		/* reset the controller */
X	dsp_hw_cfg();		/* display H/W drive config */
X	reboot();		/* ask user to reboot system */
X}
X
X/*-----------------------------------------------
X |
X |  Ask user to reboot system.
X |
X +----------------------------------------------*/
Xvoid reboot()
X{
X	fprintf(stderr, "Please reboot system!\n");
X	while (1)
X		;
X}
X
X/*-----------------------------------------------
X |
X |  Check if controller, drive present.
X |
X +----------------------------------------------*/
Xvoid chk_drv()
X{
X#define	MASK	(WDM_BSY|WDM_RDY|WDM_WTF|WDM_SKC)
X#define	EXP	(WDM_RDY|WDM_SKC)
X
X	test_hdc(wd_base+WDP_CL, 0x55, 0xff);
X	test_hdc(wd_base+WDP_CL, 0xaa, 0xff);
X	test_hdc(wd_base+WDP_CH, 0x55, 0x01);
X	test_hdc(wd_base+WDP_CH, 0xaa, 0x01);
X	sel_drv(drive, 0);
X	if ((inp(wd_base+WDP_CSR) & MASK) != EXP) {
X		fprintf(stderr, "Drive missing or status hosed\n");
X		exit(2);
X	}
X}
X
X/*-----------------------------------------------
X |
X |  Display BIOS configuration info for this drive.
X |
X +----------------------------------------------*/
Xvoid dsp_bios_cfg()
X{
X	/*
X	 * Array of pointers to HD parameter table entries indexed
X	 * by drive number
X	 */
X	static BIOS_PARMS far * far *dskptr[2] = {
X		(BIOS_PARMS far * far *)(4*0x41L),
X		(BIOS_PARMS far * far *)(4*0x46L)
X	};
X	BIOS_PARMS far *bpp = *dskptr[drive];
X
X	printf("BIOS reports drive has %u cyls, %u hds, %u secs/trk\n\n",
X		bpp->ncyls, bpp->nheads, bpp->nsecs);
X}
X
X
X/*-----------------------------------------------
X |
X |  Ask the drive to identify itself.
X |
X +----------------------------------------------*/
Xvoid dsp_hw_cfg()
X{
X	int n;
X
X	/* select drive */
X	sel_drv(drive, 0);
X
X	/* Issue Get Drive Parameters cmd */
X	outp(wd_base+WDP_CSR, WDC_GDP);
X
X	/* Wait for Busy status to be asserted */
X	for (n = 1000; n > 0 && (inp(wd_base+WDP_CSR) & WDM_BSY) == 0; n--)
X		;
X
X	/* Now wait for Busy status to be negated */
X	bsy_chk();
X
X	/* Print error msg and bail out if error */
X	if ((n = inp(wd_base+WDP_CSR)) & WDM_HER) {
X		fprintf(stderr,
X			"Identify drive cmd failed: csr=0x%02x, err=0x%02x\n",
X			n, inp(wd_base+WDP_ERR) );
X		reboot();
X	}
X
X	/* Wait for Data request to be asserted */
X	while ((inp(wd_base+WDP_CSR) & WDM_DRQ) == 0)
X		;
X
X	/* Input parameter info from controller */
X	for (n = 0; n < sizeof(id_buf.id_data)/sizeof(id_buf.id_data[0]); n++)
X		id_buf.id_data[n] = inpw(wd_base+WDP_DAT);
X
X	/* Print parameter info */
X	printf("Controller reports drive has %u cyls, %u hds, %u secs/trk\n\n",
X		id_buf.id_parms.fcyl, id_buf.id_parms.hds, id_buf.id_parms.spt);
X}
X
X/*-----------------------------------------------
X |
X |  Reset hard disk controller (or drive if IDE).
X |
X +----------------------------------------------*/
Xvoid reset_hdc()
X{
X	printf("Resetting controller/drive\n\n");
X	outp(wd_base+WDP_DCR, WDM_RSTGO);
X	delay(2);
X	outp(wd_base+WDP_DCR, WDM_RSTNO|WDM_HS3);
X	delay(1*TPS);
X}
X
X/*-----------------------------------------------
X |
X |  Delay n system timer ticks.  18.2 ticks = 1 sec.
X |
X +----------------------------------------------*/
Xvoid delay(n)
Xint n;
X{
X	int cur_lsb = *TimePtr & 1;
X
X	while (n-- > 0) {
X		while ((*TimePtr & 1) == cur_lsb)
X			;
X		cur_lsb = 1 - cur_lsb;
X	}
X}
X
X/*-----------------------------------------------
X |
X |  Select drive.
X |
X +----------------------------------------------*/
Xvoid sel_drv(drv, head)
Xuint drv, head;
X{
X	outp(wd_base+WDP_SDH, WDM_ECC|WDM_512|(drv<<4)|head);
X	bsy_chk();
X}
X
X/*-----------------------------------------------
X |
X |  Wait for Busy status to be reset.
X |
X +----------------------------------------------*/
Xvoid bsy_chk()
X{
X	while (inp(wd_base+WDP_CSR) & WDM_BSY)
X		;
X}
X
X/*-----------------------------------------------
X |
X |  Display usage message, abort.
X |
X +----------------------------------------------*/
Xvoid usage()
X{
X	static char msg[] =
X		"Usage: %s [drive]\n"
X		"Drive may be 0..3 (2,3 => drives on alternate controller)\n"
X		"Default is 0\n";
X
X	fprintf(stderr, msg, my_name);
X	exit(2);
X}
X
X/*-----------------------------------------------
X |
X |  Delay a bit between back to back I/O operations.
X |  The delay results from the call/return overhead.
X |
X +----------------------------------------------*/
Xvoid io_delay()
X{
X}
X
X/*-----------------------------------------------
X |
X |  Check if hard disk controller is present and
X |  probably register compatible with the standard
X |  AT controller.  Abort if not.
X |
X +----------------------------------------------*/
Xvoid test_hdc(reg, pat, msk)
Xuint reg;
Xuint pat;
Xuint msk;
X{
X	outp(reg, pat);
X	io_delay();
X	io_delay();
X	io_delay();
X	io_delay();
X	io_delay();
X	io_delay();
X	if ((inp(reg)&msk) != (pat&msk)) {
X		fprintf(stderr,
X			"Non-compatible or missing Hard Disk Controller!\n");
X		exit(2);
X	}
X}
SHAR_EOF
chmod 0644 ide_conf.c || echo "restore of ide_conf.c fails"
sed 's/^X//' << 'SHAR_EOF' > wddefs.h &&
X/*------------------------------------------------------+
X |	Definitions for WD100x hard disk controllers	|
X +------------------------------------------------------*/
X
X/*
X**  Port definitions:
X*/
X#define	WDP_BASE0  0x1f0	/* base address of primary controller */
X#define	WDP_BASE1  0x170	/* base address of alternate controller */
X#define	WDP_DAT	   0		/* offset to data reg (R/W) */
X#define	WDP_ERR	   1		/* offset to error reg (R) */
X#define	WDP_WPC	   1		/* offset to write precompensation reg (W) */
X#define	WDP_SC	   2		/* offset to sector count reg (R/W) */
X#define	WDP_SEC	   3		/* offset to sector address reg (R/W) */
X#define	WDP_CL	   4		/* offset to cyl addr reg - low byte (R/W) */
X#define	WDP_CH	   5		/* offset to cyl addr reg - high byte (R/W) */
X#define	WDP_SDH	   6		/* offset to size/drive/head reg (R/W) */
X#define	WDP_CSR	   7		/* offset to control/status reg (R/W) */
X#define	WDP_ASR	   0x206	/* offset to alternate status reg (R) */
X#define	WDP_DCR	   0x206	/* offset to device control reg (W) */
X#define	WDP_DAR	   0x207	/* offset to device addr reg (R) */
X
X/*
X**  Controller command definitions:
X*/
X#define	WDC_HOM	   0x10		/* restore drv to trk 0 */
X#define	WDC_SEK	   0x70		/* seek */
X#define	WDC_RD	   0x20		/* read sectors */
X#define	WDC_WRT	   0x30		/* write sectors */
X#define	WDC_RVS	   0x40		/* read verify sectors */
X#define	WDC_FMT	   0x50		/* format track */
X#define	WDC_TST	   0x90		/* perform self test */
X#define	WDC_IDP	   0x91		/* init drive parms */
X#define	WDC_GDP	   0xec		/* get drive parameters */
X#define	WDC_SDP	   0x91		/* set drive parameters */
X
X/*
X**  SDH register mask definitions:
X*/
X#define	WDM_ECC	   0x80		/* enable ECC */
X#define	WDM_128	   0x60		/* 128 bytes/sector */
X#define	WDM_256	   0x00		/* 256 bytes/sector */
X#define	WDM_512	   0x20		/* 512 bytes/sector */
X#define	WDM_1024   0x40		/* 1024 bytes/sector */
X
X/*
X**  Command/status register mask definitions:
X*/
X#define	WDM_HER	   0x01		/* hard error (R) */
X#define	WDM_IDX	   0x02		/* index pulse status from drive (R) */
X#define	WDM_CER	   0x04		/* corrected error (R) */
X#define	WDM_DRQ	   0x08		/* data request (R) */
X#define	WDM_SKC	   0x10		/* seek complete (R) */
X#define	WDM_WTF	   0x20		/* write fault (R) */
X#define	WDM_RDY	   0x40		/* ready (R) */
X#define	WDM_BSY	   0x80		/* busy (R) */
X#define	WDM_DRT	   0x01		/* disable retries (W) */
X
X/*
X**  Error register mask definitions:
X*/
X#define	WDM_DAE	   0x01		/* data address mark not found */
X#define	WDM_T0E	   0x02		/* track 0 error */
X#define	WDM_CAE	   0x04		/* aborted command */
X#define	WDM_NIE	   0x10		/* ID not found */
X#define	WDM_ICE	   0x20		/* CRC error - ID field */
X#define	WDM_DCE	   0x40		/* CRC error - data field */
X#define	WDM_BBE	   0x80		/* bad block detected */
X
X#define	WDM_HS3    0x08		/* use reduced write current line for HS3 */
X#define	WDM_RSTGO  0x04		/* start controller reset */
X#define	WDM_RSTNO  0x00		/* end controller reset */
X#define	WDM_IEN	   0x02		/* interrupt enable */
X
SHAR_EOF
chmod 0644 wddefs.h || echo "restore of wddefs.h fails"
sed 's/^X//' << 'SHAR_EOF' > s2_temp_.tmp &&
Xbegin 600 ide_conf.exe
XM35K!`10`!0`@`,(`__^>`@`(^\MB`P``'@````$`#@!,`G`#``!)!`````#X
XM`?\!_0$`````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````58OL,\#H^`6+7@:+
XM!Z-`"(-^!`%^.+A*`%"Y0@!1_W<"Z#X>B^4]`0!\#H,^2@``?`>#/DH``WX#
XMZ)P"@SY*``%^"X,F2@`!QP9,`'`!Z"D`Z+X`Z/4`Z+P!Z.\`Z`0`B^5=PS/`
XMZ)<%N$X`4+AX`E#HK`B#Q`3K_I`SP.B!!;C_`%"Y50!1BQ9,`(/"!%+H;@*#
XMQ`:X_P!0N*H`4(L.3`"#P011Z%@"@\0&N`$`4+E5`%&+#DP`@\$%4>A"`H/$
XM!K@!`%"XJ@!0H4P`!04`4.@M`H/$!BO`4/\V2@#HN`&#Q`2A3``%!P!0Z*\=
XM@\0")?``/5``=!BX90!0N'@"4.@="(/$!+@"`%#H_0.#Q`+#D%6+[+@$`.CE
XM!(L>2@#1X]'CQ)^Z`":+!R:+5P*.PHO8)HI/#BKM42:*3P)1)O\WN(0`4.@.
XM"(OE7<-5B^RX`@#HJP0KP%#_-DH`Z#D!@\0$N.P`4*%,``4'`%#H.AV#Q`3'
XM1O[H`^L#_T[^@W[^`'X1H4P`!0<`4.@/'8/$`JB`=.;H*0&A3``%!P!0Z/L<
XM@\0"B4;^J`%T(*%,`$!0Z.D<@\0"4/]V_KC"`%"X>`)0Z%L'@\0(Z)G^H4P`
XM!0<`4.C''(/$`J@(=._'1OX``/\V3`#H_AR#Q`*+7O[1XXF'0`;_1OZ!?OX`
XM`7+C_S9,!O\V1@;_-D(&N/4`4.A%!XOE7<.0,\#HY0.X,0%0Z#0'@\0"N`0`
XM4*%,``4&`E#H=QR#Q`2X`@!0Z!\`@\0"N`@`4*%,``4&`E#H7!R#Q`2X$@!0
XMZ`0`@\0"PU6+[+@$`.B;`\0>1@`FB@<E`0#K%I#$'D8`)HH')0$`.T;^=/&X
XM`0`K1OZ)1OZ+1@3_3@0+P'_>B^5=PU6+[#/`Z&`#L02+1@0,"M/@"T8&4*%,
XM``4&`%#H\QN+Y>@$`(OE7<,SP.@[`Z%,``4'`%#HS1N#Q`*H@'7OPY`SP.@C
XM`_\V0`BX3@%0N'@"4.@T!H/$!K@"`%#H%`*#Q`+#,\#H`0/#58OL,\#H^`+_
XM=@;_=@3HF1N+Y>CD_^CA_^C>_^C;_^C8_^C5__]V!.AQ&XOE(T8(BTX((TX&
XM.\%T%+BH`5"X>`)0Z-L%B^6X`@!0Z+P!B^5=P[0PS2$\`G,%,\`&4,N_^0&+
XM-@(`*_>!_@`0<@.^`!#ZCM>!Q$X*^W,0%A_H6@(SP%#HZP2X_TS-(8O&L033
XMX$@VH]X!N^`!-HP7@^3^-HEG!+C^_U`VB6<*]]!0-HEG!C:)9P@VB2;:`0/W
XMB38"`(S#*][WV[1*S2$VC!X:`A8'_+\R!KE0"BO/,\#SJA8?BPXP!>,"_]'H
XMW`/H2P(S[>A(`!8?_S8[`O\V.0+_-C<"Z/O[4.@!`<,NH4D$CMBX`P`VQP;<
XM`1H%4.B\`>A0!#:!/C(%UM9U!UA0-O\6-@6X_P!0_Q;<`?D!`+@`-<TAB1X&
XM`HP&"`(.'[@`);H:!,TA%A^#/D(%`'0VC`Y$!8P.3`6.!AH")HLV+`#%!D8%
XMC-HSVS;_'D(%<P46'^EY`3;%!DH%C-J[`P`V_QY"!18?C@8:`B:+#BP`XSZ.
XMP3/_)H`]`'0TN0T`OO@!\Z9T"[G_?S/`\JYU(>OE!AX''XOWOR,"L02L+$%R
XM#=+@DJPL07(%"L*JZ^X6'[L$`("G(P*_N`!$S2%R"O;"@'0%@(\C`D!+>>>^
XM3@6_3@7HQP"^3@6_3@7HKP##58OL,\GK&E6+[+D!`.L258OL5E>Y``'K"%6+
XM[%97N0$!40K)=1Z^.@:_.@;H?P"^3@6_4`7H=@"!/C(%UM9U!/\6.`6^4`6_
XM4`7H80"^4`6_4`7H9P#HM0`+P'016`KD4'4+@WX$`'4%QT8$_P#H$`!8"N1U
XM!XM&!+1,S2%?7EW#BPY$!>,'NP(`_QY"!1[%%@8"N``ES2$?@#Y$`@!T#1Z@
XM10+%%D8"M"7-(1_#._=S"D]/BPWC]O_1Z_+#._=S#H/O!(L%"T4"=/+_'>ON
XMPU6+[+C\`%#HC0*#/DH"`'0$_Q9*`KC_`%#H>P*+Y5W#N`(`Z1K^68O<*]AR
XM"CL>3@)R!(OC_^%1,\#I`_X`5C/VN4(`,N3\K#+@XON`]%5T#>BL_[@!`%#H
XM/`*X`0!>PX\&4`*T,,TAHQP"N@$`/`)T*8X&&@(FC@8L`(P&/P(SP)FY`(`S
XM__*NKG7[1T>)/CT"N?__\J[WT8O1OP$`OH$`CAX:`JP\('3[/`ET]SP-=&\*
XMP'1K1TZL/"!TZ#P)=.0\#71<"L!T6#PB="0\7'0#0NOD,\E!K#Q<=/H\(G0$
XM`]'KTXO!T>D3T:@!=<KK`4ZL/`UT*PK`="<\(G2Z/%QT`T+K[#/)0:P\7'3Z
XM/")T!`/1Z]N+P='I$]&H`772ZY<6'XD^-P(#UT?1YP/70H#B_BOBB\2C.0*+
XMV`/[%@<VB3]#0\4V/0*LJ@K`=?HVCAX:`KZ!`.L#,\"JK#P@=/L\"73W/`UT
XM?`K`='@VB3]#0TZL/"!TX3P)=-T\#71B"L!T7CPB="<\7'0#JNOD,\E!K#Q<
XM=/H\(G0&L%SSJNO1L%S1Z?.J<P:P(JKKQ4ZL/`UT+@K`="H\(G2W/%QT`ZKK
XM[#/)0:P\7'3Z/")T!K!<\ZKKV;!<T>GSJG.6L"*JZ\TSP*H6'\<'``#_)E`"
XM58OL'HX&&@(FBQXL`([#,\`S]C/_N?__"]MT#B:`/@```'0&\JY&KG7ZB\=`
XM)/Y&B_[1YKD)`.BD`%"+QNB>`*,[`@8>!Q^+SXO8,_9?2>,FBP0V.P;X`740
XM4597O_@!N08`\Z=?7EET!2:)/T-#K*H*P'7ZXMHFB0\?7<,`58OL5E<>!XM6
XM!+Y8!:T[PG000)9T#)<SP+G___*NB_?KZY9?7HOE7<("`%6+[%?_=@3HR_\+
XMP'0@DHOZ,\"Y___RKO?12;L"`($^,@76UG4$_Q8T!;1`S2%?B^5=P@(`4P91
XMN0`$APX:!%%0Z,D36X\&&@19C-H+P'0#!UO#B\'I4?L`<A4SP(OE7<-S^%#H
XM&@!8,N2+Y5W#<P?H#@"X__^9B^5=PS+DZ`$`PZ(?`@KD=2*`/AP"`W(,/")S
XM##P@<@2P!>L&/!-V`K`3NU("UYBC%`+#BL3K]P!5B^R#[`175HMV!%;H&0*#
XMQ`*+^(U&"%#_=@96Z%4+@\0&B4;\5E?H;P*#Q`2+1OQ>7XOE7<-5B^R#[`17
XM5KYP`E;HXP&#Q`*+^(U&!E#_=@2X<`)0Z!P+@\0&B4;\N'`"4%?H,P*#Q`2+
XM1OQ>7XOE7<-5B^Q65XMV!(I$!JB#=%BH0'54J`)U00P!B$0&B_Z![V@"@<<(
XM`Z@,=0KV!0%U!5;H00%8BT0$B03_=0)0,]N*7`=3Z&P0@\0&"\!T$3W__W4:
XM@$P&(.L*@$P&(.L)@$P&$,=$`@``N/__ZR2*OR,"@.>"@/^"=0N*?`;VQX)U
XM`X`-($B)1`*+'#/`B@=#B1Q?7EW#58OL5E>+=@:*1`:H@G1HJ$!U9,=$`@``
XMJ`%T"Z@0=%>+3`2)#"3^#`(D[XA$!HO^@>]H`H''"`,SVXI<!Z@(=4RH!'4>
XM]@4!=4.!_G`"=`R!_G@"=`:!_H@"=23VAR,"0'0=N0$`48U^!%=3Z)D0@\0&
XMN0$`ZSZX__^`3`8@ZUQ35NA;`%M;]D0&"'36BPR+5`0KRD*)%(M5`DJ)5`+C
XM(%%1_W0$4^A?$(/$!EF+?`2+5@2(%3O!=;XSP(I&!.L<,\#VAR,"('3DN0(`
XM45!04^C1#H/$"#/`B\CKT5]>7<-5B^Q6BW8$N``"4.AJ$5F+WH'K:`*!PP@#
XM"\!T"X!,!@C'1P(``NL,@$P&!,='`@$`C4<!B02)1`3'1`(``%Y=PP!5B^Q6
XM5XMV!+NJ`X'^<`)T$KNL`X'^>`)T";NN`X'^B`)U2(O^@>]H`H''"`/V1`8,
XM=3CV!0%U,XL'"\!T&XE$!(D$QT0"``+'10(``H!,!@+&!1&X`0#K%%.X``)0
XMZ-406UL+P'0$B0?KTS/`7UY=PU6+[%97BW8&B_Z![V@"@<<(`_8%$'0C,]N*
XM7`?VAR,"0'075N@8`%B#?@0`=`PSP(@%B44"B02)1`1?7EW#`%6+[(/L`E=6
XM*_\Y?@1U"2O`4.AE`.M5D(MV!(I$!HO()`,\`G4Z]L$(=0V+WH'K:`+VAP@#
XM`70HBP0K1`2)1OX+P'X<4/]T!(I,!RKM4>CE#H/$!CE&_G0'@$P&(+___XM$
XM!(D$QT0"``"+QUY?B^5=P[@!`%#H`0##58OL@^P"5U:^:`(K_XE^_NL(QT;^
XM__^#Q@@Y-J@#<A3V1`:#=/%6Z%S_@\0"0'3B1^ODD(-^!`%U!(O'ZP.+1OY>
XM7XOE7<("`)!5B^RXK@'H._E75L9&N@`KP(E&ZHE&R(M>!H`_`'4#Z08'BA\J
XM__:'+P0(="7_3NJ-1NI0_W8$Z&P'4/]V!.A-!_]&!HM>!HH?*O_VAR\$"'7O
XMBUX&@#\E=`/IIP;&1L(`*L"(1L"(1KB(1O2(1OB(1O"(AE3^*\")1NR)1KR)
XM1OZ)1L:)1L3K8Y#_1@:+7@:*!RKDB_CVA2\$!'0;_T:\BT;^B\C1X-'@`\'1
XMX`/'+3``B4;^ZS60/6P`=!AW*3Q,=`]_&RPJ=!$L''4;_D;`ZQK^1OC^1OCK
XM$OY&\.L-D"Q.=`@L&G0$_H94_H"^5/X`=)>`?O``=2J`?L``=!6+7@B#1@@$
XMBP>+5P*)1OJ)5OSK$)"+7@B#1@@"BP>)1OJ,7OS&AE3^`(M>!HH'#"`JY(OX
XM@_]N="&#_V-T$8/_>W0,C4;J4/]V!.A:!NL)_T;J_W8$Z`T&B_"#?KP`=`F#
XM?OX`=0/I*06+Q^E-!9"#?KP`=0;_1KS_1O['1KZV`^L=D,=&OK`#ZQ60_T8&
XMBUX&B5Z^@#]>=0F-1P&)1K[^3KBX(`!0*\!0C4;*4.A-$(/$!H/_>W0#Z:P`
XMBUZ^@#]==`/IH0#&1L)=_T:^QD;5(.F3`)"*!XA&]O]&OCPM=0Z`?L(`=`B+
XM7KZ`/UUU(HI>]HA>PK`!BLN`X0>+T8K*TN"Q`]+K*O^-3LH#V0@'ZU;_1KZ*
XM!XA&]CI&PG8%B$;RZPR*1L*(1O**1O:(1L**1L*(1O;K((I>]K`!BLN`X0>+
XMT8K*TN"Q`]+K*O^-3LH#V0@'_D;VBD;RF(I.]BKM.\%]TXANPHM>OH`_770#
XMZ6/_@#\`=0/IKP2#_WMU!8O#B48&BT;ZBU;\B896_HF66/Z#?KP`=`J+1O[_
XM3OX+P'1+@_[_=$:+WK$#T_N-1LH#V(H',D:XF+H!`(O.B]F`X0?3XH7"="6`
XM?O``=0V+QL1>^O]&^B:(!^L$_X96_O]&ZO]V!.A]!(OPZZ:0_T[J5O]V!.B8
XM!(M&^HM6_#F&5OYU"3F66/YU`^D=!(!^\`!T`^GH`_]&R(/_8W4#Z=T#CL*+
XMV";&!P#IT@._9`"#_BUU!OY&].L&D(/^*W4<_T[^=0R#?KP`=`;^AE3^ZPO_
XM1NK_=@3H#02+\(/^,'0#Z3T!_T;J_W8$Z/H#B_`\>'0$/%AU$O]&ZO]V!.CG
XM`XOPOW@`Z1D!D/]&[(/_>'0&OV\`Z0H!_T[J5O]V!.CP`[XP`.GZ`(!^^`!T
XM`[]&`(/^+74&_D;TZPF0@_XK=`/IW@#_3OYT`^F1`(-^O`!U`^F(`/Z&5/[I
XMQ@"#_WAT"H/_<'0%@_]&=7_VA"\$@'04L`10C4;$4.B:#E;H2@.+\.LWD)"#
XM_T9U+(-^[`!T)H/^.G4<BT;$B4;N*\")1L:)1L3'1NS__[]P`+XP`.L*D,=&
XM[```_H94_H"^5/X`=5;_1NR-1-"9`4;$$5;&@WZ\`'0(_T[^=0/I>/__1NK_
XM=@3H`@.+\.LX]H0O!`1TQH/_;W42@_XX?;RP`U"-1L10Z!$.Z[20N`H`F5)0
XMC4;$4.CA#>NDD/].ZE;_=@3H\`*`OE3^`'4#Z3#_@_]P=0^`?O@`=`F+1NZ+
XM3L2)1L:`?O0`=`KW7L2#5L8`]U[&@_]&=07'1NP``(-^[`!U`^E)`H!^\`!T
XM`^D4`O]&R(!^^`!T$XM&Q(M6QL1>^B:)!R:)5P+I^`&+1L3$7OHFB0?I[`&+
XM1NJ9B4;$B5;&Z\^-AEK^B4:^@_XM=0[&AEK^+8V&6_Z)1K[K!8/^*W4._T[^
XM_T;J_W8$Z!T"B_"#?KP`=`>!?OY=`7XJQT;^70'K(Y"+1O[_3OX+P'0?_T;L
XMB\:+7K[_1KZ(!_]&ZO]V!.CF`8OP]H0O!`1UUX/^+G4_BT;^_T[^"\!T-8M>
XMOO]&OL8'+NL8D(M&_O]._@O`=!__1NR+QHM>OO]&OH@'_T;J_W8$Z*(!B_#V
XMA"\$!'77@W[L`'1VB\8\970$/$5U;(M&_O]._@O`=&*+7K[_1K[&!V7_1NK_
XM=@3H;0&+\(/^+74,BUZ^_T:^Q@<MZP:0@_XK=3&+1O[_3OX+P'4<_T;^ZR*+
XM1O[_3OX+P'0?_T;LB\:+7K[_1KZ(!_]&ZO]V!.@F`8OP]H0O!`1UU_].ZE;_
XM=@3H/0&#?NP`=0/IS@"`?O``=`/IF0#_1LB+7K[&!P"-AEK^4/]V_/]V^HI&
XM^)A0_Q8@!(/$".MWD(M>!HH'*N0[QG0-_T[J5O]V!.CS`.F*`/Y.NH!^\`!U
XM58!^P`!T!X-N"`3K29"#;@@"ZT(M8P`]&`!WQ-'@DR[_IY83.@YY$.@1Z!'H
XM$5(3]@]2$U(34A-2$]P1>1!P$%(34A-.#E(3>1!2$U(3^0]2$U(35@[^1KK_
XM1@;K'/]&ZO]V!.A7`(OPBUX&_T8&B@<JY#OP=`/I<?^#_O]T`^GO^(/^_W4,
XM@W[(`'4&@'ZZ`'0%BT;(ZP*+QEY?B^5=PU6+[(M>!/:'+P0$=`6+P^L(D(O#
XM)-\M!P!=P@(`D%6+[(/L`E:+=@3_3`)X#8L$_P2+V(H'*N3K")!6Z%+U@\0"
XM7HOE7<("`%6+[(-^!O]T"?]V!/]V!N@.!8OE7<($`%6+[%=6BW8&_P3_=@3H
XMKO^+^/:%+P0(=>]>7XOE7<($`)#Z%`45&15-%7D5@16J%=P558OLN'$!Z&/Q
XM5E<SP(E&^(A&^XMV!JR)=@:(1OX*P'0&@W[X`'T&BT;XZ:($N[@#+"`\6'<%
XMUR0/ZP*P`+$#TN`"1OO7_L'2Z(A&^YB+V-'C+O^GE!2*5OZY`0#H(P3KLC/`
XMB4;PB4;VB4;NB4;\2(E&].N>BD;^/"UU!H!._`3KD3PK=0:`3OP!ZX<\('4'
XM@$[\`NE\_SPC=0>`3OR`Z7'_@$[\".EJ_XI._H#Y*G4/Z%8#"\!Y%_?8@$[\
XM!.L/@.DP,NV+1O:["@#WXP/!B4;VZ3[_QT;T``#I-O^*3OZ`^2IU#.@B`PO`
XM>12X___K#X#I,#+MBT;TNPH`]^,#P8E&].D-_XI&_CQL=0:`3OP0ZR(\1G4&
XM@$[\(.L8/$YU!H!._1#K#CQ,=0:`3OT$ZP2`3OT(Z=O^BD;^/&1U`^F.`3QI
XM=0/IAP$\=74#Z80!/%AU`^F#`3QX=0/I@@$\;W4#Z9P!/&-T&CQS="<\;G11
XM/'!T8#Q%=`<\1W0#Z;L`Z;4`Z(0"C;Z/_A8'JD^Y`0#IZP'HAP(+_W42C,`+
XMP'4,'@>_$02+#A<$Z=(!5XM.].,',L#RKG4!3UDK^8?/Z;T!Z%D"BT;XJ_9&
XM_!!T`S/`J^D^_O9&_#!U!>@L`NLYZ"\"]D;]&'4PQD;_![D0`!8'4C/2C;Z7
XM_KX$`.B?`KD0`(V^DOY8,]*^!`#HCP+&AI/^.KD)`.L8QD;_![D0`!8',]*-
XMOI+^O@0`Z'`"N00`C;Z/_NE'`?]&[H!._$"*1OX,()B+\(-^]`!_$W0'QT;T
XM!@#K"CUG`'4%QT;T`0"-OH_^_W;N_W;T5E?_=@CV1OT$=`K_%B8$@T8("NL(
XM_Q8<!(-&"`B#Q`KV1OR`=`Z#?O0`=0A7_Q8B!(/$`H/^9W4/]T;\@`!U"%?_
XM%AX$@\0"%@<F@#TM=05'@$[]`;G__U>P`/*N3UDK^8?/Z:\`@$[\0,9&^@KK
XM-<9&_P?K!,9&_R?V1OR`=!''1O`"`,9&\C"R40)6_XA6\\9&^A#K#O9&_(!T
XM!(!._0+&1OH(]D;\$'0%Z/H`ZP[H[0#V1OQ`=`.9ZP(STO9&_$!T#PO2?0N`
XM3OT!]]B#T@#WVH-^]`!]!\=&]`$`ZP2`9OSWB]@+VG4%QT;P``"-?NL6!XI.
XM^C+MBW;TZ#4!]D;]`G0.XP8F@#TP=`9/)L8%,$'K`/9&_$!T,?9&_0%T"\9&
XM\BW'1O`!`.L@]D;\`70+QD;R*\=&\`$`ZP_V1OP"=`G&1O(@QT;P`0"+1O8K
XMP2M&\'T",\`&5U'V1OP,=0>+R+(@Z+``4!8'C7[RBT[PZ(8`6/9&_`AT#?9&
XM_`1U!XO(LC#HD`!97P=0Z&L`6/9&_`1T!XO(LB#H>P#I"?R+=@BMB78(PXMV
XM"*V+T*V2B78(P_9&_"!T".CK_X["B_C#Z-O_B_@+P'4#CL##'@?#F%>+7@3_
XM3P)X"HL__P>(!3/`7\,&45)34.@[\8/$!%I9!SW__W7IZ^GC&XOW`4[X5S/_
XM)JSHR/\+^.+W"_]?=`7'1OC__\/C&0%.^%<S_XK"Z*S_"_CB]PO_7W0%QT;X
XM___#_5>3"_9_"@O;=08+TG4"ZQJ2,]+W\9/W\9*'TP0P/#EV`P)&_ZJ+PD[K
XMV%DKST?\PU]>B^5=PP!5B^Q75HMV!(M^!H/^_W02]D4&`742]D4&@'0&]D4&
XM`G0&N/__ZS*0@WT$`'4'5^AJ\8/$`HL%.44$=0B#?0(`=>#_!?]%`HO&_PV+
XM'8@'@&4&[X!-!@$JY%Y?B^5=PY!5B^R#[`2+7@0['B$"<@6X``GK*O=&"`"`
XM=$B#?@H`=!HSR8O1N`%"S2%R2_=&"@(`=0X#1@835@AY*+@`%OGK-HE6_HE&
XM_(O1N`)"S2$#1@835@AY#8M._HM6_+@`0LTAZ]B+5@:+3@B*1@JT0LTA<@6`
XMIR,"_>F;[E6+[(/L`HM>!#L>(0)R!OFX``GK:#/`BTX(XV'VAR,"`G5:@3XR
XM!=;6=03_%C0%BTX(BU8&M#_-(7,$M`GK/O:'(P*`=#>`IR,"^U97_(ORB_J+
XMR.,EM`V`/`IU!8"/(P($K#K$=!D\&G4'@(\C`@+K!8@%1^+KB\<KPE]>Z1ON
XM@_D!=`>`/`ITZ^OF]H<C`D!T&+@`1,TA]\(@`'4)C5;_M#_-(7+4L`KK+,9&
XM_P"-5O^T/\TA<L,+P'09@WX(`70?N?__B]&X`4+-(;D!`(!^_PIT![`-BU8&
XMZY:+5@;KE(!^_PIUV^N^`%6+[(/L"(M>!#L>(0)R![@`"?GIF^V!/C(%UM9U
XM!/\6-`7VAR,"('0+N`)",\F+T<TA<M_VAR,"@'1NBU8&'@<SP(E&_HE&_/Q7
XM5HOZB_*)9OB+3@CC.+`*\JYU2NC>`#VH`'9&@^P"B]RZ``(]*`)S`[J``"OB
XMB]2+^A8'BTX(K#P*=`P[^W09JN+TZ"(`ZVJP#3O[=0/H%P"JL`K_1OSKX^@,
XM`.OB7E_K7KC\_^@AZE!348O/*\KC$E&+7@2T0,TA67(-`4;^.\AW!EE;6(OZ
XMPY^#Q`B#?OX`=1^><P2T">L>]H<C`D!T"XM>!H`_&G4#^.L,^;@`'.L&BT;^
XM*T;\BV;X7E_IJ.R+3@@+R74%B\'IG.R+5@:T0,TA<P2T">OD"\!UX/:'(P)`
XM=`J+VH`_&G4#^.O/^;@`'.O)`%FA3@([Q',&*\3WV/_A,\#K^NDB``!5B^Q6
XMBUX$ON`!.5P&<PU+2X`/`3E<"'8#B5P(7HOE7<-5B^Q65XM.!(/YZ'<2N^`!
XMZ!8`<P_HC0!R!>@,`',%,\"9ZP!?7EW#`$&`X?Y3_(MW"(M?"C/_ZR.+PUNH
XM`75"4XMW!HM?"#O>=#9+,__K#)"-5/X[TW/A`_!R(ZVH`73PB_Y(.\%S(P/P
XM<A.+T*VH`73>`\(%`@"+]XE$_NODB\!;BT<&B4<(^>L96XE,_G0)`_DKP4B)
XM!2OY`_F)?PB+QHS:^,-15_9'`@%T8^C2`(O^BP2H`70#*\A)04&+=P0+]G1,
XM`\YS"3/`NO#_XS#K/Q8')J$:!#T`('06N@"`.]!R!M'J=?CK(H/Z"'(=T>*+
XMPDB+T`/!<P(SP/?2(\)2Z"X`6G,-@_KP=`6X$`#KXOGK&XO0*U<$B4<$B7\(
XMBW<*2HD40@/RQP3^_XEW"E]9PXO0]D<"!'0/2HMW!$X[UG(%.5?^<S9"4U&,
XMWH[&L033Z'4#N``0]D<"!'0*`\:+'AH"*\..PXO8M$K-(5E;<A"+PO9'`@1T
XM!$J)5_[XZP'YPU>+=P@[=PIU`XMW!JT]_O]T"(O^)/X#\.OR3T^+]U_#`%6+
XM[(O7C-B.P(M^!#/`N?__\J[WT4F1B_I=PP!5B^R#[`175HMV!,8&.`9)B38V
XM!K\R!HDU5NC'_X/$`J,T!HU&"%#_=@:X,@90Z"GN@\0&7E^+Y5W#58OLBU8$
XM[#+DB^5=PP!5B^R+5@2*1@;NM`!=PU6+[(O7C-B.P(M^!(O?BTX(XQ6*1@:*
XMX/?'`0!T`JI)T>GSJQ/)\ZJ+^I-=PP!5B^R+5@3M7<,`58OLBT8&BTX*"\B+
XM3@AU"8M&!/?A7<((`%/WX8O8BT8$]V8*`]B+1@3WX0/36UW""``R[>,&T>#1
XMTN+ZPP!5B^Q3BUX$_W8(_W8&_W<"_S?HK?^)!XE7`EM=P@8``%6+[%.+7@2+
XM!XM7`HM.!NC"_XD'B5<"6UW"!`````````#Y`0``````````````````````
XM``````!-4R!2=6XM5&EM92!,:6)R87)Y("T@0V]P>7)I9VAT("AC*2`Q.3DP
XM+"!-:6-R;W-O9G0@0V]R<!@`)60``&P`0````/`!4&QE87-E(')E8F]O="!S
XM>7-T96TA"@!$<FEV92!M:7-S:6YG(&]R('-T871U<R!H;W-E9`H`0DE/4R!R
XM97!O<G1S(&1R:79E(&AA<R`E=2!C>6QS+"`E=2!H9',L("5U('-E8W,O=')K
XM"@H`!`$``!@!``!)9&5N=&EF>2!D<FEV92!C;60@9F%I;&5D.B!C<W(],'@E
XM,#)X+"!E<G(],'@E,#)X"@!#;VYT<F]L;&5R(')E<&]R=',@9')I=F4@:&%S
XM("5U(&-Y;',L("5U(&AD<RP@)74@<V5C<R]T<FL*"@!297-E='1I;F<@8V]N
XM=')O;&QE<B]D<FEV90H*`%5S86=E.B`E<R!;9')I=F5="D1R:79E(&UA>2!B
XM92`P+BXS("@R+#,@/3X@9')I=F5S(&]N(&%L=&5R;F%T92!C;VYT<F]L;&5R
XM*0I$969A=6QT(&ES(#`*`$YO;BUC;VUP871I8FQE(&]R(&UI<W-I;F<@2&%R
XM9"!$:7-K($-O;G1R;VQL97(A"@`````A!0`````%````````````````````
XM````````7T-?1DE,15])3D9//0``````````````````````````````````
XM```4`(&!@0$!````````````````````````````00+Y`0``````````````
XM__]0"P```!8"`A@-"0P,#`<(%A;_`@T2`O\``$((``!""`$``````````@$`
XM```````"`@```````(0#`````````@0`````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM```````````!```"````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM``````````````````````````````````````````````,````````@"2T-
XM70!=``8```8``0``$``#!@`&`A`$145%!04%!04U,`!0`````"`@,%!8!P@`
XM,#`P5U`'```@(```````"&!@8&!@8```<'!X>'AX"`<(```'``@("```"``(
XM```(*&YU;&PI!@```"`*!@H&"@8*!@H&"@8`````````("`@("`@("`@*"@H
XM*"@@("`@("`@("`@("`@("`@("!($!`0$!`0$!`0$!`0$!`0A(2$A(2$A(2$
XMA!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!`0$!`0$!`0$!`1`0$!`0$(*"@H*"
XM@@("`@("`@("`@("`@("`@("`@("$!`0$"``````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````````````````````````````````
XM````````````````````````````````&009!!D$`````/@!````````````
XM``````!Z##P\3DU31SX^``!2-C`P,`T*+2!S=&%C:R!O=F5R9FQO=PT*``,`
XM4C8P,#,-"BT@:6YT96=E<B!D:79I9&4@8GD@,`T*``D`4C8P,#D-"BT@;F]T
XM(&5N;W5G:"!S<&%C92!F;W(@96YV:7)O;FUE;G0-"@#\``T*`/\`<G5N+71I
XM;64@97)R;W(@``(`4C8P,#(-"BT@9FQO871I;F<M<&]I;G0@<W5P<&]R="!N
XM;W0@;&]A9&5D#0H``0!2-C`P,0T*+2!N=6QL('!O:6YT97(@87-S:6=N;65N
X'=`T*`/___V5D
X`
Xend
SHAR_EOF
uudecode < s2_temp_.tmp && rm -f s2_temp_.tmp &&
chmod 0644 ide_conf.exe || echo "restore of ide_conf.exe fails"
exit 0
> --
> UUCP: {hplabs!hp-sdd ucsd nosc}!crash!fpm
> ARPA: crash!fpm@nosc.mil
> INET: fpm@crash.cts.com



					Terry Lambert
					terry@icarus.weber.edu
					terry_lambert@novell.com
---
Any opinions in this posting are my own and not those of my present
or previous employers.
-- 
-------------------------------------------------------------------------------
                                        "I have an 8 user poetic license" - me
 Get the 386bsd FAQ from agate.berkeley.edu:/pub/386BSD/386bsd-0.1/unofficial
-------------------------------------------------------------------------------