home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / comp / unix / bsd / 11192 < prev    next >
Encoding:
Text File  |  1993-01-12  |  31.0 KB  |  774 lines

  1. Newsgroups: comp.unix.bsd
  2. Path: sparky!uunet!zaphod.mps.ohio-state.edu!malgudi.oar.net!caen!hellgate.utah.edu!fcom.cc.utah.edu!cs.weber.edu!terry
  3. From: terry@cs.weber.edu (A Wizard of Earth C)
  4. Subject: Re: 386BSD install problem -- can't mount /
  5. Message-ID: <1993Jan13.042201.28353@fcom.cc.utah.edu>
  6. Sender: news@fcom.cc.utah.edu
  7. Organization: Weber State University  (Ogden, UT)
  8. References: <1993Jan11.022758.10164@cs.wright.edu> <1993Jan11.224035.2823@fcom.cc.utah.edu> <1993Jan12.005906.13693@Princeton.EDU>
  9. Date: Wed, 13 Jan 93 04:22:01 GMT
  10. Lines: 762
  11.  
  12. In article <1993Jan12.005906.13693@Princeton.EDU> bkc@ernie.Princeton.EDU (Bruce Caruthers) writes:
  13. >In article <1993Jan11.224035.2823@fcom.cc.utah.edu> terry@cs.weber.edu (A Wizard of Earth C) writes:
  14. >>
  15. >>386BSD asks the controller about the drive geometry instead of believing
  16. >>the CMOS settings.  If your CMOS settings don't match what the controller
  17. >>says, you have "translated drive" problems.
  18. >
  19. >Is there any way to tell 386BSD what the drive is set for?  The settings
  20. >for my drive are significantly different (manually configured long ago)
  21. >from what Seagate reports when you call their number.  It does, however,
  22. >still fit a "type" listed in the BIOS (42, if I remember correctly).  I
  23. >am fairly certain that the current settings are *not* what the IDE
  24. >controller reports.  If I were to change the settings, it would require a
  25. >lot of work re-doing the DOS partition and such.
  26. >
  27. >Thanks for any help (at least I know what is probably the problem, now, and can
  28. >change it if I get desperate enough),
  29.  
  30.  
  31. OK... I am going to put ide_conf.exe on ref.tfs.com; in the meanwhile, for
  32. those of you who can't wait, I am reposting the original article by Frank
  33. Maclachlan (Message-ID: <1992Oct18.153007.28120@crash>)
  34.  
  35.  
  36. > Given the numerous inquiries about untranslated geometry on various
  37. > IDE hard drives, I wrote a quickie program which can be used under
  38. > MSDOS to report the "default" drive geometry.  The command used to
  39. > query the drive (identify drive, 0xec) is the same command used by
  40. > the 386BSD 0.1 wd.c driver.
  41. > The program does the following:
  42. > 1.  Reports the drive configuration as reported by the system ROM BIOS.
  43. > 2.  Queries the drive for its configuration and prints the geometry
  44. >     given by the configuration.
  45. > 3.  Resets the drive/controller and delays approximately 1 second.
  46. > 4.  Again queries the drive for its configuration and prints the
  47. >     geometry given by the configuration.
  48. > 5.  Asks user to reboot system since translation may have changed.
  49. > Steps 3 and 4 were added because I wanted to know if the identify
  50. > drive command would return the sames values after the controller/drive
  51. > was reset.  I tested the program on a Fujitsu M2612ET IDE drive (90 mb,
  52. > 1334 cyls, 4 hds, 33 sec/trk) and found that the "default" geometry
  53. > was 667 cyls, 8 hds, 33 sec/trk.  Note that some (albeit simple) trans-
  54. > lation occurs on this drive in the "default" state; this was no doubt
  55. > done to avoid exceeding the 1024 cylinder limit imposed by the system
  56. > BIOS.  Also, the "default" geometry didn't change after a reset (it
  57. > really shouldn't); the drive's translation mode, however, did change
  58. > after a reset (see below).
  59. > I noticed some other things while playing with the Fujitsu drive.
  60. > The drive is installed in a system w/ an old Mylex 386/20 MB.
  61. > The AMI BIOS does not support a type 47 user configurable drive
  62. > type, so I chose a drive type having 1024 cyls, 9 hds, 17 sec/trk.
  63. > I didn't really believe that the translation was performed in
  64. > software (most IDE interface boards don't have an on-board ROM),
  65. > so I wrote a program which scanned the disk by talking directly
  66. > to the controller registers.  The drive looked like it had 9 heads,
  67. > 17 secs/trk and 1150 cyls.  The drive's notion of its geometry
  68. > (translation) is determined by the 'Initialize Drive Parameters'
  69. > command (0x91).  This command sets the number of sectors from the
  70. > sector count register and the number of heads from the head
  71. > address field in the SDH register.  The drive then computes how
  72. > many translated cylinders it can support with the specified head
  73. > and sector count (that's why I could read 1150 cyls even though the
  74. > BIOS configuration indicated 1024 cyls).  The translation was cleared
  75. > after a controller/drive reset; the drive then behaved as though it
  76. > had 667 cyls, 8 hds, 33 secs/trk.
  77. > Also, data transfers from this drive averaged about 300 kb/sec when
  78. > the drive was set up in translated mode and about 660 kb/sec when
  79. > set up in its "default" mode.  This was probably partially caused
  80. > by the use of 17 secs/trk rather than the native 33 secs/trk; the
  81. > 80C31 microprocessor has to work harder to translate addresses.
  82. > For those IDE drive users with a modern BIOS supporting user configurable
  83. > drive types (type 47 on an AMI BIOS), I suggest configuring the drive
  84. > or drives to the default geometry given by step 4 above.  This results
  85. > in the geometry remaining constant throughout the 386BSD's handling of
  86. > an IDE drive and possibly better performance.
  87. > I am enclosing the program (a .c file and a .h file) and an .exe file
  88. > (for those of you who don't have an MSDOS C compiler) in a shell archive.
  89. > Hope this helps!
  90. #!/bin/sh
  91. # shar:    Shell Archiver  (v1.22)
  92. #
  93. #    Run the following text with /bin/sh to create:
  94. #      ide_conf.c
  95. #      wddefs.h
  96. #      ide_conf.exe
  97. #
  98. sed 's/^X//' << 'SHAR_EOF' > ide_conf.c &&
  99. X/*------------------------------------------------------+
  100. X|                            |
  101. X|  Name:                        |
  102. X|    ide_conf                        |
  103. X|                            |
  104. X|  Usage:                        |
  105. X|    ide_conf [drive number]                |
  106. X|                            |
  107. X|  Description:                        |
  108. X|    Displays IDE drive configuration under MSDOS.    |
  109. X|    Optional drive parameter selects drive for query.    |
  110. X|    Legal values are 0..3 where 0 and 1 are drives 0    |
  111. X|    and 1 attached to a primary controller while 2 and    |
  112. X|    3 are drives 0 and 1 attached to a controller at    |
  113. X|    the alternate controller address (0x170 - has not    |
  114. X|    been tested).  If omitted, drive 0 is checked.    |
  115. X|                            |
  116. X|  Author:                        |
  117. X|    Frank P. MacLachlan                |
  118. X|                            |
  119. X|  Date:                        |
  120. X|    18-Oct-92                        |
  121. X|                            |
  122. X|  Compilation using MSC 6.0:                |
  123. X|    cl ide_conf.c                    |
  124. X|                            |
  125. X+------------------------------------------------------*/
  126. X
  127. X#include <stdio.h>
  128. X#include <sys/types.h>
  129. X#include "wddefs.h"
  130. X
  131. X#define    TPS    18        /* ticks/second (really 18.2) */
  132. X
  133. Xtypedef    unsigned long    ulong;
  134. Xtypedef unsigned int    uint;
  135. Xtypedef unsigned short    ushort;
  136. Xtypedef unsigned char    uchar;
  137. X
  138. X/*
  139. X**  The following structure corresponds to the ROM BIOS
  140. X**  disk parameter table:
  141. X*/
  142. X#pragma    pack(1)
  143. Xtypedef struct parms {
  144. X    uint    ncyls;
  145. X    uchar    nheads;
  146. X    uint    res0;
  147. X    uint    wpc;
  148. X    uchar    ebl;
  149. X    uchar    ctlb;
  150. X    uchar    res1[3];
  151. X    uint    lzc;
  152. X    uchar    nsecs;
  153. X    uchar    res2;
  154. X} BIOS_PARMS;
  155. X#pragma    pack()
  156. X
  157. X/*
  158. X**  The following structure corresponds to the values as returned
  159. X**  by the ESDI/IDE identify drive command.
  160. X*/
  161. Xtypedef struct {
  162. X    ushort    gcfg;    /* general configuration */
  163. X    ushort    fcyl;    /* number of fixed cyls */
  164. X    ushort    rcyl;    /* number of removable cyls */
  165. X    ushort    hds;    /* number of heads */
  166. X    ushort    bpt;    /* bytes/track */
  167. X    ushort    bps;    /* bytes/sector */
  168. X    ushort    spt;    /* sectors/track */
  169. X    ushort    isg;    /* inter-sector gap */
  170. X    ushort    plo;    /* PLO sync field */
  171. X    ushort    vsw;    /* vendor status word */
  172. X} ID_PARMS;
  173. X
  174. X/*
  175. X**  Used to manipulate identify drive data.
  176. X*/
  177. Xunion {
  178. X    ID_PARMS    id_parms;
  179. X    unsigned short    id_data[256];
  180. X} id_buf;
  181. X
  182. X/* pointer to low word of system time value at 0040:006c */
  183. Xushort    far *TimePtr = (ushort far *)0x0040006cL;
  184. X
  185. Xint    drive = 0;        /* drive number */
  186. Xint    wd_base = WDP_BASE0;    /* base I/O port addr of HDC */
  187. Xchar    *my_name;
  188. X
  189. Xvoid    reboot(void);
  190. Xvoid    chk_drv(void);
  191. Xvoid    dsp_bios_cfg(void);
  192. Xvoid    dsp_hw_cfg(void);
  193. Xvoid    reset_hdc(void);
  194. Xvoid    delay(int);
  195. Xvoid    sel_drv(uint, uint);
  196. Xvoid    bsy_chk(void);
  197. Xvoid    usage(void);
  198. Xvoid    io_delay(void);
  199. Xvoid    test_hdc(uint, uint, uint);
  200. X
  201. X
  202. X/*-----------------------------------------------
  203. X |
  204. X |  Main program
  205. X |
  206. X +----------------------------------------------*/
  207. Xmain(argc, argv)
  208. Xint argc;
  209. Xchar *argv[];
  210. X{
  211. X    my_name = argv[0];
  212. X    if (argc > 1) {
  213. X        if (   sscanf(argv[1], "%d", &drive) < 1
  214. X            || drive < 0
  215. X            || drive > 3)
  216. X            usage();
  217. X        if (drive > 1) {
  218. X            drive &= 1;
  219. X            wd_base = WDP_BASE1;
  220. X        }
  221. X    }
  222. X    chk_drv();        /* make sure controller, drive present */
  223. X    dsp_bios_cfg();        /* display BIOS drive config */
  224. X    dsp_hw_cfg();        /* display H/W drive config */
  225. X    reset_hdc();        /* reset the controller */
  226. X    dsp_hw_cfg();        /* display H/W drive config */
  227. X    reboot();        /* ask user to reboot system */
  228. X}
  229. X
  230. X/*-----------------------------------------------
  231. X |
  232. X |  Ask user to reboot system.
  233. X |
  234. X +----------------------------------------------*/
  235. Xvoid reboot()
  236. X{
  237. X    fprintf(stderr, "Please reboot system!\n");
  238. X    while (1)
  239. X        ;
  240. X}
  241. X
  242. X/*-----------------------------------------------
  243. X |
  244. X |  Check if controller, drive present.
  245. X |
  246. X +----------------------------------------------*/
  247. Xvoid chk_drv()
  248. X{
  249. X#define    MASK    (WDM_BSY|WDM_RDY|WDM_WTF|WDM_SKC)
  250. X#define    EXP    (WDM_RDY|WDM_SKC)
  251. X
  252. X    test_hdc(wd_base+WDP_CL, 0x55, 0xff);
  253. X    test_hdc(wd_base+WDP_CL, 0xaa, 0xff);
  254. X    test_hdc(wd_base+WDP_CH, 0x55, 0x01);
  255. X    test_hdc(wd_base+WDP_CH, 0xaa, 0x01);
  256. X    sel_drv(drive, 0);
  257. X    if ((inp(wd_base+WDP_CSR) & MASK) != EXP) {
  258. X        fprintf(stderr, "Drive missing or status hosed\n");
  259. X        exit(2);
  260. X    }
  261. X}
  262. X
  263. X/*-----------------------------------------------
  264. X |
  265. X |  Display BIOS configuration info for this drive.
  266. X |
  267. X +----------------------------------------------*/
  268. Xvoid dsp_bios_cfg()
  269. X{
  270. X    /*
  271. X     * Array of pointers to HD parameter table entries indexed
  272. X     * by drive number
  273. X     */
  274. X    static BIOS_PARMS far * far *dskptr[2] = {
  275. X        (BIOS_PARMS far * far *)(4*0x41L),
  276. X        (BIOS_PARMS far * far *)(4*0x46L)
  277. X    };
  278. X    BIOS_PARMS far *bpp = *dskptr[drive];
  279. X
  280. X    printf("BIOS reports drive has %u cyls, %u hds, %u secs/trk\n\n",
  281. X        bpp->ncyls, bpp->nheads, bpp->nsecs);
  282. X}
  283. X
  284. X
  285. X/*-----------------------------------------------
  286. X |
  287. X |  Ask the drive to identify itself.
  288. X |
  289. X +----------------------------------------------*/
  290. Xvoid dsp_hw_cfg()
  291. X{
  292. X    int n;
  293. X
  294. X    /* select drive */
  295. X    sel_drv(drive, 0);
  296. X
  297. X    /* Issue Get Drive Parameters cmd */
  298. X    outp(wd_base+WDP_CSR, WDC_GDP);
  299. X
  300. X    /* Wait for Busy status to be asserted */
  301. X    for (n = 1000; n > 0 && (inp(wd_base+WDP_CSR) & WDM_BSY) == 0; n--)
  302. X        ;
  303. X
  304. X    /* Now wait for Busy status to be negated */
  305. X    bsy_chk();
  306. X
  307. X    /* Print error msg and bail out if error */
  308. X    if ((n = inp(wd_base+WDP_CSR)) & WDM_HER) {
  309. X        fprintf(stderr,
  310. X            "Identify drive cmd failed: csr=0x%02x, err=0x%02x\n",
  311. X            n, inp(wd_base+WDP_ERR) );
  312. X        reboot();
  313. X    }
  314. X
  315. X    /* Wait for Data request to be asserted */
  316. X    while ((inp(wd_base+WDP_CSR) & WDM_DRQ) == 0)
  317. X        ;
  318. X
  319. X    /* Input parameter info from controller */
  320. X    for (n = 0; n < sizeof(id_buf.id_data)/sizeof(id_buf.id_data[0]); n++)
  321. X        id_buf.id_data[n] = inpw(wd_base+WDP_DAT);
  322. X
  323. X    /* Print parameter info */
  324. X    printf("Controller reports drive has %u cyls, %u hds, %u secs/trk\n\n",
  325. X        id_buf.id_parms.fcyl, id_buf.id_parms.hds, id_buf.id_parms.spt);
  326. X}
  327. X
  328. X/*-----------------------------------------------
  329. X |
  330. X |  Reset hard disk controller (or drive if IDE).
  331. X |
  332. X +----------------------------------------------*/
  333. Xvoid reset_hdc()
  334. X{
  335. X    printf("Resetting controller/drive\n\n");
  336. X    outp(wd_base+WDP_DCR, WDM_RSTGO);
  337. X    delay(2);
  338. X    outp(wd_base+WDP_DCR, WDM_RSTNO|WDM_HS3);
  339. X    delay(1*TPS);
  340. X}
  341. X
  342. X/*-----------------------------------------------
  343. X |
  344. X |  Delay n system timer ticks.  18.2 ticks = 1 sec.
  345. X |
  346. X +----------------------------------------------*/
  347. Xvoid delay(n)
  348. Xint n;
  349. X{
  350. X    int cur_lsb = *TimePtr & 1;
  351. X
  352. X    while (n-- > 0) {
  353. X        while ((*TimePtr & 1) == cur_lsb)
  354. X            ;
  355. X        cur_lsb = 1 - cur_lsb;
  356. X    }
  357. X}
  358. X
  359. X/*-----------------------------------------------
  360. X |
  361. X |  Select drive.
  362. X |
  363. X +----------------------------------------------*/
  364. Xvoid sel_drv(drv, head)
  365. Xuint drv, head;
  366. X{
  367. X    outp(wd_base+WDP_SDH, WDM_ECC|WDM_512|(drv<<4)|head);
  368. X    bsy_chk();
  369. X}
  370. X
  371. X/*-----------------------------------------------
  372. X |
  373. X |  Wait for Busy status to be reset.
  374. X |
  375. X +----------------------------------------------*/
  376. Xvoid bsy_chk()
  377. X{
  378. X    while (inp(wd_base+WDP_CSR) & WDM_BSY)
  379. X        ;
  380. X}
  381. X
  382. X/*-----------------------------------------------
  383. X |
  384. X |  Display usage message, abort.
  385. X |
  386. X +----------------------------------------------*/
  387. Xvoid usage()
  388. X{
  389. X    static char msg[] =
  390. X        "Usage: %s [drive]\n"
  391. X        "Drive may be 0..3 (2,3 => drives on alternate controller)\n"
  392. X        "Default is 0\n";
  393. X
  394. X    fprintf(stderr, msg, my_name);
  395. X    exit(2);
  396. X}
  397. X
  398. X/*-----------------------------------------------
  399. X |
  400. X |  Delay a bit between back to back I/O operations.
  401. X |  The delay results from the call/return overhead.
  402. X |
  403. X +----------------------------------------------*/
  404. Xvoid io_delay()
  405. X{
  406. X}
  407. X
  408. X/*-----------------------------------------------
  409. X |
  410. X |  Check if hard disk controller is present and
  411. X |  probably register compatible with the standard
  412. X |  AT controller.  Abort if not.
  413. X |
  414. X +----------------------------------------------*/
  415. Xvoid test_hdc(reg, pat, msk)
  416. Xuint reg;
  417. Xuint pat;
  418. Xuint msk;
  419. X{
  420. X    outp(reg, pat);
  421. X    io_delay();
  422. X    io_delay();
  423. X    io_delay();
  424. X    io_delay();
  425. X    io_delay();
  426. X    io_delay();
  427. X    if ((inp(reg)&msk) != (pat&msk)) {
  428. X        fprintf(stderr,
  429. X            "Non-compatible or missing Hard Disk Controller!\n");
  430. X        exit(2);
  431. X    }
  432. X}
  433. SHAR_EOF
  434. chmod 0644 ide_conf.c || echo "restore of ide_conf.c fails"
  435. sed 's/^X//' << 'SHAR_EOF' > wddefs.h &&
  436. X/*------------------------------------------------------+
  437. X |    Definitions for WD100x hard disk controllers    |
  438. X +------------------------------------------------------*/
  439. X
  440. X/*
  441. X**  Port definitions:
  442. X*/
  443. X#define    WDP_BASE0  0x1f0    /* base address of primary controller */
  444. X#define    WDP_BASE1  0x170    /* base address of alternate controller */
  445. X#define    WDP_DAT       0        /* offset to data reg (R/W) */
  446. X#define    WDP_ERR       1        /* offset to error reg (R) */
  447. X#define    WDP_WPC       1        /* offset to write precompensation reg (W) */
  448. X#define    WDP_SC       2        /* offset to sector count reg (R/W) */
  449. X#define    WDP_SEC       3        /* offset to sector address reg (R/W) */
  450. X#define    WDP_CL       4        /* offset to cyl addr reg - low byte (R/W) */
  451. X#define    WDP_CH       5        /* offset to cyl addr reg - high byte (R/W) */
  452. X#define    WDP_SDH       6        /* offset to size/drive/head reg (R/W) */
  453. X#define    WDP_CSR       7        /* offset to control/status reg (R/W) */
  454. X#define    WDP_ASR       0x206    /* offset to alternate status reg (R) */
  455. X#define    WDP_DCR       0x206    /* offset to device control reg (W) */
  456. X#define    WDP_DAR       0x207    /* offset to device addr reg (R) */
  457. X
  458. X/*
  459. X**  Controller command definitions:
  460. X*/
  461. X#define    WDC_HOM       0x10        /* restore drv to trk 0 */
  462. X#define    WDC_SEK       0x70        /* seek */
  463. X#define    WDC_RD       0x20        /* read sectors */
  464. X#define    WDC_WRT       0x30        /* write sectors */
  465. X#define    WDC_RVS       0x40        /* read verify sectors */
  466. X#define    WDC_FMT       0x50        /* format track */
  467. X#define    WDC_TST       0x90        /* perform self test */
  468. X#define    WDC_IDP       0x91        /* init drive parms */
  469. X#define    WDC_GDP       0xec        /* get drive parameters */
  470. X#define    WDC_SDP       0x91        /* set drive parameters */
  471. X
  472. X/*
  473. X**  SDH register mask definitions:
  474. X*/
  475. X#define    WDM_ECC       0x80        /* enable ECC */
  476. X#define    WDM_128       0x60        /* 128 bytes/sector */
  477. X#define    WDM_256       0x00        /* 256 bytes/sector */
  478. X#define    WDM_512       0x20        /* 512 bytes/sector */
  479. X#define    WDM_1024   0x40        /* 1024 bytes/sector */
  480. X
  481. X/*
  482. X**  Command/status register mask definitions:
  483. X*/
  484. X#define    WDM_HER       0x01        /* hard error (R) */
  485. X#define    WDM_IDX       0x02        /* index pulse status from drive (R) */
  486. X#define    WDM_CER       0x04        /* corrected error (R) */
  487. X#define    WDM_DRQ       0x08        /* data request (R) */
  488. X#define    WDM_SKC       0x10        /* seek complete (R) */
  489. X#define    WDM_WTF       0x20        /* write fault (R) */
  490. X#define    WDM_RDY       0x40        /* ready (R) */
  491. X#define    WDM_BSY       0x80        /* busy (R) */
  492. X#define    WDM_DRT       0x01        /* disable retries (W) */
  493. X
  494. X/*
  495. X**  Error register mask definitions:
  496. X*/
  497. X#define    WDM_DAE       0x01        /* data address mark not found */
  498. X#define    WDM_T0E       0x02        /* track 0 error */
  499. X#define    WDM_CAE       0x04        /* aborted command */
  500. X#define    WDM_NIE       0x10        /* ID not found */
  501. X#define    WDM_ICE       0x20        /* CRC error - ID field */
  502. X#define    WDM_DCE       0x40        /* CRC error - data field */
  503. X#define    WDM_BBE       0x80        /* bad block detected */
  504. X
  505. X#define    WDM_HS3    0x08        /* use reduced write current line for HS3 */
  506. X#define    WDM_RSTGO  0x04        /* start controller reset */
  507. X#define    WDM_RSTNO  0x00        /* end controller reset */
  508. X#define    WDM_IEN       0x02        /* interrupt enable */
  509. X
  510. SHAR_EOF
  511. chmod 0644 wddefs.h || echo "restore of wddefs.h fails"
  512. sed 's/^X//' << 'SHAR_EOF' > s2_temp_.tmp &&
  513. Xbegin 600 ide_conf.exe
  514. XM35K!`10`!0`@`,(`__^>`@`(^\MB`P``'@````$`#@!,`G`#``!)!`````#X
  515. XM`?\!_0$`````````````````````````````````````````````````````
  516. XM````````````````````````````````````````````````````````````
  517. XM````````````````````````````````````````````````````````````
  518. XM````````````````````````````````````````````````````````````
  519. XM````````````````````````````````````````````````````````````
  520. XM````````````````````````````````````````````````````````````
  521. XM````````````````````````````````````````````````````````````
  522. XM````````````````````````````````````````````````````````````
  523. XM````````````````````````````````````````````````````````````
  524. XM````````````````````````````````````````````````````````````
  525. XM````````````````````````````````````````````58OL,\#H^`6+7@:+
  526. XM!Z-`"(-^!`%^.+A*`%"Y0@!1_W<"Z#X>B^4]`0!\#H,^2@``?`>#/DH``WX#
  527. XMZ)P"@SY*``%^"X,F2@`!QP9,`'`!Z"D`Z+X`Z/4`Z+P!Z.\`Z`0`B^5=PS/`
  528. XMZ)<%N$X`4+AX`E#HK`B#Q`3K_I`SP.B!!;C_`%"Y50!1BQ9,`(/"!%+H;@*#
  529. XMQ`:X_P!0N*H`4(L.3`"#P011Z%@"@\0&N`$`4+E5`%&+#DP`@\$%4>A"`H/$
  530. XM!K@!`%"XJ@!0H4P`!04`4.@M`H/$!BO`4/\V2@#HN`&#Q`2A3``%!P!0Z*\=
  531. XM@\0")?``/5``=!BX90!0N'@"4.@="(/$!+@"`%#H_0.#Q`+#D%6+[+@$`.CE
  532. XM!(L>2@#1X]'CQ)^Z`":+!R:+5P*.PHO8)HI/#BKM42:*3P)1)O\WN(0`4.@.
  533. XM"(OE7<-5B^RX`@#HJP0KP%#_-DH`Z#D!@\0$N.P`4*%,``4'`%#H.AV#Q`3'
  534. XM1O[H`^L#_T[^@W[^`'X1H4P`!0<`4.@/'8/$`JB`=.;H*0&A3``%!P!0Z/L<
  535. XM@\0"B4;^J`%T(*%,`$!0Z.D<@\0"4/]V_KC"`%"X>`)0Z%L'@\0(Z)G^H4P`
  536. XM!0<`4.C''(/$`J@(=._'1OX``/\V3`#H_AR#Q`*+7O[1XXF'0`;_1OZ!?OX`
  537. XM`7+C_S9,!O\V1@;_-D(&N/4`4.A%!XOE7<.0,\#HY0.X,0%0Z#0'@\0"N`0`
  538. XM4*%,``4&`E#H=QR#Q`2X`@!0Z!\`@\0"N`@`4*%,``4&`E#H7!R#Q`2X$@!0
  539. XMZ`0`@\0"PU6+[+@$`.B;`\0>1@`FB@<E`0#K%I#$'D8`)HH')0$`.T;^=/&X
  540. XM`0`K1OZ)1OZ+1@3_3@0+P'_>B^5=PU6+[#/`Z&`#L02+1@0,"M/@"T8&4*%,
  541. XM``4&`%#H\QN+Y>@$`(OE7<,SP.@[`Z%,``4'`%#HS1N#Q`*H@'7OPY`SP.@C
  542. XM`_\V0`BX3@%0N'@"4.@T!H/$!K@"`%#H%`*#Q`+#,\#H`0/#58OL,\#H^`+_
  543. XM=@;_=@3HF1N+Y>CD_^CA_^C>_^C;_^C8_^C5__]V!.AQ&XOE(T8(BTX((TX&
  544. XM.\%T%+BH`5"X>`)0Z-L%B^6X`@!0Z+P!B^5=P[0PS2$\`G,%,\`&4,N_^0&+
  545. XM-@(`*_>!_@`0<@.^`!#ZCM>!Q$X*^W,0%A_H6@(SP%#HZP2X_TS-(8O&L033
  546. XMX$@VH]X!N^`!-HP7@^3^-HEG!+C^_U`VB6<*]]!0-HEG!C:)9P@VB2;:`0/W
  547. XMB38"`(S#*][WV[1*S2$VC!X:`A8'_+\R!KE0"BO/,\#SJA8?BPXP!>,"_]'H
  548. XMW`/H2P(S[>A(`!8?_S8[`O\V.0+_-C<"Z/O[4.@!`<,NH4D$CMBX`P`VQP;<
  549. XM`1H%4.B\`>A0!#:!/C(%UM9U!UA0-O\6-@6X_P!0_Q;<`?D!`+@`-<TAB1X&
  550. XM`HP&"`(.'[@`);H:!,TA%A^#/D(%`'0VC`Y$!8P.3`6.!AH")HLV+`#%!D8%
  551. XMC-HSVS;_'D(%<P46'^EY`3;%!DH%C-J[`P`V_QY"!18?C@8:`B:+#BP`XSZ.
  552. XMP3/_)H`]`'0TN0T`OO@!\Z9T"[G_?S/`\JYU(>OE!AX''XOWOR,"L02L+$%R
  553. XM#=+@DJPL07(%"L*JZ^X6'[L$`("G(P*_N`!$S2%R"O;"@'0%@(\C`D!+>>>^
  554. XM3@6_3@7HQP"^3@6_3@7HKP##58OL,\GK&E6+[+D!`.L258OL5E>Y``'K"%6+
  555. XM[%97N0$!40K)=1Z^.@:_.@;H?P"^3@6_4`7H=@"!/C(%UM9U!/\6.`6^4`6_
  556. XM4`7H80"^4`6_4`7H9P#HM0`+P'016`KD4'4+@WX$`'4%QT8$_P#H$`!8"N1U
  557. XM!XM&!+1,S2%?7EW#BPY$!>,'NP(`_QY"!1[%%@8"N``ES2$?@#Y$`@!T#1Z@
  558. XM10+%%D8"M"7-(1_#._=S"D]/BPWC]O_1Z_+#._=S#H/O!(L%"T4"=/+_'>ON
  559. XMPU6+[+C\`%#HC0*#/DH"`'0$_Q9*`KC_`%#H>P*+Y5W#N`(`Z1K^68O<*]AR
  560. XM"CL>3@)R!(OC_^%1,\#I`_X`5C/VN4(`,N3\K#+@XON`]%5T#>BL_[@!`%#H
  561. XM/`*X`0!>PX\&4`*T,,TAHQP"N@$`/`)T*8X&&@(FC@8L`(P&/P(SP)FY`(`S
  562. XM__*NKG7[1T>)/CT"N?__\J[WT8O1OP$`OH$`CAX:`JP\('3[/`ET]SP-=&\*
  563. XMP'1K1TZL/"!TZ#P)=.0\#71<"L!T6#PB="0\7'0#0NOD,\E!K#Q<=/H\(G0$
  564. XM`]'KTXO!T>D3T:@!=<KK`4ZL/`UT*PK`="<\(G2Z/%QT`T+K[#/)0:P\7'3Z
  565. XM/")T!`/1Z]N+P='I$]&H`772ZY<6'XD^-P(#UT?1YP/70H#B_BOBB\2C.0*+
  566. XMV`/[%@<VB3]#0\4V/0*LJ@K`=?HVCAX:`KZ!`.L#,\"JK#P@=/L\"73W/`UT
  567. XM?`K`='@VB3]#0TZL/"!TX3P)=-T\#71B"L!T7CPB="<\7'0#JNOD,\E!K#Q<
  568. XM=/H\(G0&L%SSJNO1L%S1Z?.J<P:P(JKKQ4ZL/`UT+@K`="H\(G2W/%QT`ZKK
  569. XM[#/)0:P\7'3Z/")T!K!<\ZKKV;!<T>GSJG.6L"*JZ\TSP*H6'\<'``#_)E`"
  570. XM58OL'HX&&@(FBQXL`([#,\`S]C/_N?__"]MT#B:`/@```'0&\JY&KG7ZB\=`
  571. XM)/Y&B_[1YKD)`.BD`%"+QNB>`*,[`@8>!Q^+SXO8,_9?2>,FBP0V.P;X`740
  572. XM4597O_@!N08`\Z=?7EET!2:)/T-#K*H*P'7ZXMHFB0\?7<,`58OL5E<>!XM6
  573. XM!+Y8!:T[PG000)9T#)<SP+G___*NB_?KZY9?7HOE7<("`%6+[%?_=@3HR_\+
  574. XMP'0@DHOZ,\"Y___RKO?12;L"`($^,@76UG4$_Q8T!;1`S2%?B^5=P@(`4P91
  575. XMN0`$APX:!%%0Z,D36X\&&@19C-H+P'0#!UO#B\'I4?L`<A4SP(OE7<-S^%#H
  576. XM&@!8,N2+Y5W#<P?H#@"X__^9B^5=PS+DZ`$`PZ(?`@KD=2*`/AP"`W(,/")S
  577. XM##P@<@2P!>L&/!-V`K`3NU("UYBC%`+#BL3K]P!5B^R#[`175HMV!%;H&0*#
  578. XMQ`*+^(U&"%#_=@96Z%4+@\0&B4;\5E?H;P*#Q`2+1OQ>7XOE7<-5B^R#[`17
  579. XM5KYP`E;HXP&#Q`*+^(U&!E#_=@2X<`)0Z!P+@\0&B4;\N'`"4%?H,P*#Q`2+
  580. XM1OQ>7XOE7<-5B^Q65XMV!(I$!JB#=%BH0'54J`)U00P!B$0&B_Z![V@"@<<(
  581. XM`Z@,=0KV!0%U!5;H00%8BT0$B03_=0)0,]N*7`=3Z&P0@\0&"\!T$3W__W4:
  582. XM@$P&(.L*@$P&(.L)@$P&$,=$`@``N/__ZR2*OR,"@.>"@/^"=0N*?`;VQX)U
  583. XM`X`-($B)1`*+'#/`B@=#B1Q?7EW#58OL5E>+=@:*1`:H@G1HJ$!U9,=$`@``
  584. XMJ`%T"Z@0=%>+3`2)#"3^#`(D[XA$!HO^@>]H`H''"`,SVXI<!Z@(=4RH!'4>
  585. XM]@4!=4.!_G`"=`R!_G@"=`:!_H@"=23VAR,"0'0=N0$`48U^!%=3Z)D0@\0&
  586. XMN0$`ZSZX__^`3`8@ZUQ35NA;`%M;]D0&"'36BPR+5`0KRD*)%(M5`DJ)5`+C
  587. XM(%%1_W0$4^A?$(/$!EF+?`2+5@2(%3O!=;XSP(I&!.L<,\#VAR,"('3DN0(`
  588. XM45!04^C1#H/$"#/`B\CKT5]>7<-5B^Q6BW8$N``"4.AJ$5F+WH'K:`*!PP@#
  589. XM"\!T"X!,!@C'1P(``NL,@$P&!,='`@$`C4<!B02)1`3'1`(``%Y=PP!5B^Q6
  590. XM5XMV!+NJ`X'^<`)T$KNL`X'^>`)T";NN`X'^B`)U2(O^@>]H`H''"`/V1`8,
  591. XM=3CV!0%U,XL'"\!T&XE$!(D$QT0"``+'10(``H!,!@+&!1&X`0#K%%.X``)0
  592. XMZ-406UL+P'0$B0?KTS/`7UY=PU6+[%97BW8&B_Z![V@"@<<(`_8%$'0C,]N*
  593. XM7`?VAR,"0'075N@8`%B#?@0`=`PSP(@%B44"B02)1`1?7EW#`%6+[(/L`E=6
  594. XM*_\Y?@1U"2O`4.AE`.M5D(MV!(I$!HO()`,\`G4Z]L$(=0V+WH'K:`+VAP@#
  595. XM`70HBP0K1`2)1OX+P'X<4/]T!(I,!RKM4>CE#H/$!CE&_G0'@$P&(+___XM$
  596. XM!(D$QT0"``"+QUY?B^5=P[@!`%#H`0##58OL@^P"5U:^:`(K_XE^_NL(QT;^
  597. XM__^#Q@@Y-J@#<A3V1`:#=/%6Z%S_@\0"0'3B1^ODD(-^!`%U!(O'ZP.+1OY>
  598. XM7XOE7<("`)!5B^RXK@'H._E75L9&N@`KP(E&ZHE&R(M>!H`_`'4#Z08'BA\J
  599. XM__:'+P0(="7_3NJ-1NI0_W8$Z&P'4/]V!.A-!_]&!HM>!HH?*O_VAR\$"'7O
  600. XMBUX&@#\E=`/IIP;&1L(`*L"(1L"(1KB(1O2(1OB(1O"(AE3^*\")1NR)1KR)
  601. XM1OZ)1L:)1L3K8Y#_1@:+7@:*!RKDB_CVA2\$!'0;_T:\BT;^B\C1X-'@`\'1
  602. XMX`/'+3``B4;^ZS60/6P`=!AW*3Q,=`]_&RPJ=!$L''4;_D;`ZQK^1OC^1OCK
  603. XM$OY&\.L-D"Q.=`@L&G0$_H94_H"^5/X`=)>`?O``=2J`?L``=!6+7@B#1@@$
  604. XMBP>+5P*)1OJ)5OSK$)"+7@B#1@@"BP>)1OJ,7OS&AE3^`(M>!HH'#"`JY(OX
  605. XM@_]N="&#_V-T$8/_>W0,C4;J4/]V!.A:!NL)_T;J_W8$Z`T&B_"#?KP`=`F#
  606. XM?OX`=0/I*06+Q^E-!9"#?KP`=0;_1KS_1O['1KZV`^L=D,=&OK`#ZQ60_T8&
  607. XMBUX&B5Z^@#]>=0F-1P&)1K[^3KBX(`!0*\!0C4;*4.A-$(/$!H/_>W0#Z:P`
  608. XMBUZ^@#]==`/IH0#&1L)=_T:^QD;5(.F3`)"*!XA&]O]&OCPM=0Z`?L(`=`B+
  609. XM7KZ`/UUU(HI>]HA>PK`!BLN`X0>+T8K*TN"Q`]+K*O^-3LH#V0@'ZU;_1KZ*
  610. XM!XA&]CI&PG8%B$;RZPR*1L*(1O**1O:(1L**1L*(1O;K((I>]K`!BLN`X0>+
  611. XMT8K*TN"Q`]+K*O^-3LH#V0@'_D;VBD;RF(I.]BKM.\%]TXANPHM>OH`_770#
  612. XMZ6/_@#\`=0/IKP2#_WMU!8O#B48&BT;ZBU;\B896_HF66/Z#?KP`=`J+1O[_
  613. XM3OX+P'1+@_[_=$:+WK$#T_N-1LH#V(H',D:XF+H!`(O.B]F`X0?3XH7"="6`
  614. XM?O``=0V+QL1>^O]&^B:(!^L$_X96_O]&ZO]V!.A]!(OPZZ:0_T[J5O]V!.B8
  615. XM!(M&^HM6_#F&5OYU"3F66/YU`^D=!(!^\`!T`^GH`_]&R(/_8W4#Z=T#CL*+
  616. XMV";&!P#IT@._9`"#_BUU!OY&].L&D(/^*W4<_T[^=0R#?KP`=`;^AE3^ZPO_
  617. XM1NK_=@3H#02+\(/^,'0#Z3T!_T;J_W8$Z/H#B_`\>'0$/%AU$O]&ZO]V!.CG
  618. XM`XOPOW@`Z1D!D/]&[(/_>'0&OV\`Z0H!_T[J5O]V!.CP`[XP`.GZ`(!^^`!T
  619. XM`[]&`(/^+74&_D;TZPF0@_XK=`/IW@#_3OYT`^F1`(-^O`!U`^F(`/Z&5/[I
  620. XMQ@"#_WAT"H/_<'0%@_]&=7_VA"\$@'04L`10C4;$4.B:#E;H2@.+\.LWD)"#
  621. XM_T9U+(-^[`!T)H/^.G4<BT;$B4;N*\")1L:)1L3'1NS__[]P`+XP`.L*D,=&
  622. XM[```_H94_H"^5/X`=5;_1NR-1-"9`4;$$5;&@WZ\`'0(_T[^=0/I>/__1NK_
  623. XM=@3H`@.+\.LX]H0O!`1TQH/_;W42@_XX?;RP`U"-1L10Z!$.Z[20N`H`F5)0
  624. XMC4;$4.CA#>NDD/].ZE;_=@3H\`*`OE3^`'4#Z3#_@_]P=0^`?O@`=`F+1NZ+
  625. XM3L2)1L:`?O0`=`KW7L2#5L8`]U[&@_]&=07'1NP``(-^[`!U`^E)`H!^\`!T
  626. XM`^D4`O]&R(!^^`!T$XM&Q(M6QL1>^B:)!R:)5P+I^`&+1L3$7OHFB0?I[`&+
  627. XM1NJ9B4;$B5;&Z\^-AEK^B4:^@_XM=0[&AEK^+8V&6_Z)1K[K!8/^*W4._T[^
  628. XM_T;J_W8$Z!T"B_"#?KP`=`>!?OY=`7XJQT;^70'K(Y"+1O[_3OX+P'0?_T;L
  629. XMB\:+7K[_1KZ(!_]&ZO]V!.CF`8OP]H0O!`1UUX/^+G4_BT;^_T[^"\!T-8M>
  630. XMOO]&OL8'+NL8D(M&_O]._@O`=!__1NR+QHM>OO]&OH@'_T;J_W8$Z*(!B_#V
  631. XMA"\$!'77@W[L`'1VB\8\970$/$5U;(M&_O]._@O`=&*+7K[_1K[&!V7_1NK_
  632. XM=@3H;0&+\(/^+74,BUZ^_T:^Q@<MZP:0@_XK=3&+1O[_3OX+P'4<_T;^ZR*+
  633. XM1O[_3OX+P'0?_T;LB\:+7K[_1KZ(!_]&ZO]V!.@F`8OP]H0O!`1UU_].ZE;_
  634. XM=@3H/0&#?NP`=0/IS@"`?O``=`/IF0#_1LB+7K[&!P"-AEK^4/]V_/]V^HI&
  635. XM^)A0_Q8@!(/$".MWD(M>!HH'*N0[QG0-_T[J5O]V!.CS`.F*`/Y.NH!^\`!U
  636. XM58!^P`!T!X-N"`3K29"#;@@"ZT(M8P`]&`!WQ-'@DR[_IY83.@YY$.@1Z!'H
  637. XM$5(3]@]2$U(34A-2$]P1>1!P$%(34A-.#E(3>1!2$U(3^0]2$U(35@[^1KK_
  638. XM1@;K'/]&ZO]V!.A7`(OPBUX&_T8&B@<JY#OP=`/I<?^#_O]T`^GO^(/^_W4,
  639. XM@W[(`'4&@'ZZ`'0%BT;(ZP*+QEY?B^5=PU6+[(M>!/:'+P0$=`6+P^L(D(O#
  640. XM)-\M!P!=P@(`D%6+[(/L`E:+=@3_3`)X#8L$_P2+V(H'*N3K")!6Z%+U@\0"
  641. XM7HOE7<("`%6+[(-^!O]T"?]V!/]V!N@.!8OE7<($`%6+[%=6BW8&_P3_=@3H
  642. XMKO^+^/:%+P0(=>]>7XOE7<($`)#Z%`45&15-%7D5@16J%=P558OLN'$!Z&/Q
  643. XM5E<SP(E&^(A&^XMV!JR)=@:(1OX*P'0&@W[X`'T&BT;XZ:($N[@#+"`\6'<%
  644. XMUR0/ZP*P`+$#TN`"1OO7_L'2Z(A&^YB+V-'C+O^GE!2*5OZY`0#H(P3KLC/`
  645. XMB4;PB4;VB4;NB4;\2(E&].N>BD;^/"UU!H!._`3KD3PK=0:`3OP!ZX<\('4'
  646. XM@$[\`NE\_SPC=0>`3OR`Z7'_@$[\".EJ_XI._H#Y*G4/Z%8#"\!Y%_?8@$[\
  647. XM!.L/@.DP,NV+1O:["@#WXP/!B4;VZ3[_QT;T``#I-O^*3OZ`^2IU#.@B`PO`
  648. XM>12X___K#X#I,#+MBT;TNPH`]^,#P8E&].D-_XI&_CQL=0:`3OP0ZR(\1G4&
  649. XM@$[\(.L8/$YU!H!._1#K#CQ,=0:`3OT$ZP2`3OT(Z=O^BD;^/&1U`^F.`3QI
  650. XM=0/IAP$\=74#Z80!/%AU`^F#`3QX=0/I@@$\;W4#Z9P!/&-T&CQS="<\;G11
  651. XM/'!T8#Q%=`<\1W0#Z;L`Z;4`Z(0"C;Z/_A8'JD^Y`0#IZP'HAP(+_W42C,`+
  652. XMP'4,'@>_$02+#A<$Z=(!5XM.].,',L#RKG4!3UDK^8?/Z;T!Z%D"BT;XJ_9&
  653. XM_!!T`S/`J^D^_O9&_#!U!>@L`NLYZ"\"]D;]&'4PQD;_![D0`!8'4C/2C;Z7
  654. XM_KX$`.B?`KD0`(V^DOY8,]*^!`#HCP+&AI/^.KD)`.L8QD;_![D0`!8',]*-
  655. XMOI+^O@0`Z'`"N00`C;Z/_NE'`?]&[H!._$"*1OX,()B+\(-^]`!_$W0'QT;T
  656. XM!@#K"CUG`'4%QT;T`0"-OH_^_W;N_W;T5E?_=@CV1OT$=`K_%B8$@T8("NL(
  657. XM_Q8<!(-&"`B#Q`KV1OR`=`Z#?O0`=0A7_Q8B!(/$`H/^9W4/]T;\@`!U"%?_
  658. XM%AX$@\0"%@<F@#TM=05'@$[]`;G__U>P`/*N3UDK^8?/Z:\`@$[\0,9&^@KK
  659. XM-<9&_P?K!,9&_R?V1OR`=!''1O`"`,9&\C"R40)6_XA6\\9&^A#K#O9&_(!T
  660. XM!(!._0+&1OH(]D;\$'0%Z/H`ZP[H[0#V1OQ`=`.9ZP(STO9&_$!T#PO2?0N`
  661. XM3OT!]]B#T@#WVH-^]`!]!\=&]`$`ZP2`9OSWB]@+VG4%QT;P``"-?NL6!XI.
  662. XM^C+MBW;TZ#4!]D;]`G0.XP8F@#TP=`9/)L8%,$'K`/9&_$!T,?9&_0%T"\9&
  663. XM\BW'1O`!`.L@]D;\`70+QD;R*\=&\`$`ZP_V1OP"=`G&1O(@QT;P`0"+1O8K
  664. XMP2M&\'T",\`&5U'V1OP,=0>+R+(@Z+``4!8'C7[RBT[PZ(8`6/9&_`AT#?9&
  665. XM_`1U!XO(LC#HD`!97P=0Z&L`6/9&_`1T!XO(LB#H>P#I"?R+=@BMB78(PXMV
  666. XM"*V+T*V2B78(P_9&_"!T".CK_X["B_C#Z-O_B_@+P'4#CL##'@?#F%>+7@3_
  667. XM3P)X"HL__P>(!3/`7\,&45)34.@[\8/$!%I9!SW__W7IZ^GC&XOW`4[X5S/_
  668. XM)JSHR/\+^.+W"_]?=`7'1OC__\/C&0%.^%<S_XK"Z*S_"_CB]PO_7W0%QT;X
  669. XM___#_5>3"_9_"@O;=08+TG4"ZQJ2,]+W\9/W\9*'TP0P/#EV`P)&_ZJ+PD[K
  670. XMV%DKST?\PU]>B^5=PP!5B^Q75HMV!(M^!H/^_W02]D4&`742]D4&@'0&]D4&
  671. XM`G0&N/__ZS*0@WT$`'4'5^AJ\8/$`HL%.44$=0B#?0(`=>#_!?]%`HO&_PV+
  672. XM'8@'@&4&[X!-!@$JY%Y?B^5=PY!5B^R#[`2+7@0['B$"<@6X``GK*O=&"`"`
  673. XM=$B#?@H`=!HSR8O1N`%"S2%R2_=&"@(`=0X#1@835@AY*+@`%OGK-HE6_HE&
  674. XM_(O1N`)"S2$#1@835@AY#8M._HM6_+@`0LTAZ]B+5@:+3@B*1@JT0LTA<@6`
  675. XMIR,"_>F;[E6+[(/L`HM>!#L>(0)R!OFX``GK:#/`BTX(XV'VAR,"`G5:@3XR
  676. XM!=;6=03_%C0%BTX(BU8&M#_-(7,$M`GK/O:'(P*`=#>`IR,"^U97_(ORB_J+
  677. XMR.,EM`V`/`IU!8"/(P($K#K$=!D\&G4'@(\C`@+K!8@%1^+KB\<KPE]>Z1ON
  678. XM@_D!=`>`/`ITZ^OF]H<C`D!T&+@`1,TA]\(@`'4)C5;_M#_-(7+4L`KK+,9&
  679. XM_P"-5O^T/\TA<L,+P'09@WX(`70?N?__B]&X`4+-(;D!`(!^_PIT![`-BU8&
  680. XMZY:+5@;KE(!^_PIUV^N^`%6+[(/L"(M>!#L>(0)R![@`"?GIF^V!/C(%UM9U
  681. XM!/\6-`7VAR,"('0+N`)",\F+T<TA<M_VAR,"@'1NBU8&'@<SP(E&_HE&_/Q7
  682. XM5HOZB_*)9OB+3@CC.+`*\JYU2NC>`#VH`'9&@^P"B]RZ``(]*`)S`[J``"OB
  683. XMB]2+^A8'BTX(K#P*=`P[^W09JN+TZ"(`ZVJP#3O[=0/H%P"JL`K_1OSKX^@,
  684. XM`.OB7E_K7KC\_^@AZE!348O/*\KC$E&+7@2T0,TA67(-`4;^.\AW!EE;6(OZ
  685. XMPY^#Q`B#?OX`=1^><P2T">L>]H<C`D!T"XM>!H`_&G4#^.L,^;@`'.L&BT;^
  686. XM*T;\BV;X7E_IJ.R+3@@+R74%B\'IG.R+5@:T0,TA<P2T">OD"\!UX/:'(P)`
  687. XM=`J+VH`_&G4#^.O/^;@`'.O)`%FA3@([Q',&*\3WV/_A,\#K^NDB``!5B^Q6
  688. XMBUX$ON`!.5P&<PU+2X`/`3E<"'8#B5P(7HOE7<-5B^Q65XM.!(/YZ'<2N^`!
  689. XMZ!8`<P_HC0!R!>@,`',%,\"9ZP!?7EW#`$&`X?Y3_(MW"(M?"C/_ZR.+PUNH
  690. XM`75"4XMW!HM?"#O>=#9+,__K#)"-5/X[TW/A`_!R(ZVH`73PB_Y(.\%S(P/P
  691. XM<A.+T*VH`73>`\(%`@"+]XE$_NODB\!;BT<&B4<(^>L96XE,_G0)`_DKP4B)
  692. XM!2OY`_F)?PB+QHS:^,-15_9'`@%T8^C2`(O^BP2H`70#*\A)04&+=P0+]G1,
  693. XM`\YS"3/`NO#_XS#K/Q8')J$:!#T`('06N@"`.]!R!M'J=?CK(H/Z"'(=T>*+
  694. XMPDB+T`/!<P(SP/?2(\)2Z"X`6G,-@_KP=`6X$`#KXOGK&XO0*U<$B4<$B7\(
  695. XMBW<*2HD40@/RQP3^_XEW"E]9PXO0]D<"!'0/2HMW!$X[UG(%.5?^<S9"4U&,
  696. XMWH[&L033Z'4#N``0]D<"!'0*`\:+'AH"*\..PXO8M$K-(5E;<A"+PO9'`@1T
  697. XM!$J)5_[XZP'YPU>+=P@[=PIU`XMW!JT]_O]T"(O^)/X#\.OR3T^+]U_#`%6+
  698. XM[(O7C-B.P(M^!#/`N?__\J[WT4F1B_I=PP!5B^R#[`175HMV!,8&.`9)B38V
  699. XM!K\R!HDU5NC'_X/$`J,T!HU&"%#_=@:X,@90Z"GN@\0&7E^+Y5W#58OLBU8$
  700. XM[#+DB^5=PP!5B^R+5@2*1@;NM`!=PU6+[(O7C-B.P(M^!(O?BTX(XQ6*1@:*
  701. XMX/?'`0!T`JI)T>GSJQ/)\ZJ+^I-=PP!5B^R+5@3M7<,`58OLBT8&BTX*"\B+
  702. XM3@AU"8M&!/?A7<((`%/WX8O8BT8$]V8*`]B+1@3WX0/36UW""``R[>,&T>#1
  703. XMTN+ZPP!5B^Q3BUX$_W8(_W8&_W<"_S?HK?^)!XE7`EM=P@8``%6+[%.+7@2+
  704. XM!XM7`HM.!NC"_XD'B5<"6UW"!`````````#Y`0``````````````````````
  705. XM``````!-4R!2=6XM5&EM92!,:6)R87)Y("T@0V]P>7)I9VAT("AC*2`Q.3DP
  706. XM+"!-:6-R;W-O9G0@0V]R<!@`)60``&P`0````/`!4&QE87-E(')E8F]O="!S
  707. XM>7-T96TA"@!$<FEV92!M:7-S:6YG(&]R('-T871U<R!H;W-E9`H`0DE/4R!R
  708. XM97!O<G1S(&1R:79E(&AA<R`E=2!C>6QS+"`E=2!H9',L("5U('-E8W,O=')K
  709. XM"@H`!`$``!@!``!)9&5N=&EF>2!D<FEV92!C;60@9F%I;&5D.B!C<W(],'@E
  710. XM,#)X+"!E<G(],'@E,#)X"@!#;VYT<F]L;&5R(')E<&]R=',@9')I=F4@:&%S
  711. XM("5U(&-Y;',L("5U(&AD<RP@)74@<V5C<R]T<FL*"@!297-E='1I;F<@8V]N
  712. XM=')O;&QE<B]D<FEV90H*`%5S86=E.B`E<R!;9')I=F5="D1R:79E(&UA>2!B
  713. XM92`P+BXS("@R+#,@/3X@9')I=F5S(&]N(&%L=&5R;F%T92!C;VYT<F]L;&5R
  714. XM*0I$969A=6QT(&ES(#`*`$YO;BUC;VUP871I8FQE(&]R(&UI<W-I;F<@2&%R
  715. XM9"!$:7-K($-O;G1R;VQL97(A"@`````A!0`````%````````````````````
  716. XM````````7T-?1DE,15])3D9//0``````````````````````````````````
  717. XM```4`(&!@0$!````````````````````````````00+Y`0``````````````
  718. XM__]0"P```!8"`A@-"0P,#`<(%A;_`@T2`O\``$((``!""`$``````````@$`
  719. XM```````"`@```````(0#`````````@0`````````````````````````````
  720. XM````````````````````````````````````````````````````````````
  721. XM````````````````````````````````````````````````````````````
  722. XM```````````!```"````````````````````````````````````````````
  723. XM````````````````````````````````````````````````````````````
  724. XM````````````````````````````````````````````````````````````
  725. XM``````````````````````````````````````````````,````````@"2T-
  726. XM70!=``8```8``0``$``#!@`&`A`$145%!04%!04U,`!0`````"`@,%!8!P@`
  727. XM,#`P5U`'```@(```````"&!@8&!@8```<'!X>'AX"`<(```'``@("```"``(
  728. XM```(*&YU;&PI!@```"`*!@H&"@8*!@H&"@8`````````("`@("`@("`@*"@H
  729. XM*"@@("`@("`@("`@("`@("`@("!($!`0$!`0$!`0$!`0$!`0A(2$A(2$A(2$
  730. XMA!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!`0$!`0$!`0$!`1`0$!`0$(*"@H*"
  731. XM@@("`@("`@("`@("`@("`@("`@("$!`0$"``````````````````````````
  732. XM````````````````````````````````````````````````````````````
  733. XM````````````````````````````````````````````````````````````
  734. XM````````````````````````````````&009!!D$`````/@!````````````
  735. XM``````!Z##P\3DU31SX^``!2-C`P,`T*+2!S=&%C:R!O=F5R9FQO=PT*``,`
  736. XM4C8P,#,-"BT@:6YT96=E<B!D:79I9&4@8GD@,`T*``D`4C8P,#D-"BT@;F]T
  737. XM(&5N;W5G:"!S<&%C92!F;W(@96YV:7)O;FUE;G0-"@#\``T*`/\`<G5N+71I
  738. XM;64@97)R;W(@``(`4C8P,#(-"BT@9FQO871I;F<M<&]I;G0@<W5P<&]R="!N
  739. XM;W0@;&]A9&5D#0H``0!2-C`P,0T*+2!N=6QL('!O:6YT97(@87-S:6=N;65N
  740. X'=`T*`/___V5D
  741. X`
  742. Xend
  743. SHAR_EOF
  744. uudecode < s2_temp_.tmp && rm -f s2_temp_.tmp &&
  745. chmod 0644 ide_conf.exe || echo "restore of ide_conf.exe fails"
  746. exit 0
  747. > --
  748. > UUCP: {hplabs!hp-sdd ucsd nosc}!crash!fpm
  749. > ARPA: crash!fpm@nosc.mil
  750. > INET: fpm@crash.cts.com
  751.  
  752.  
  753.  
  754.                     Terry Lambert
  755.                     terry@icarus.weber.edu
  756.                     terry_lambert@novell.com
  757. ---
  758. Any opinions in this posting are my own and not those of my present
  759. or previous employers.
  760. -- 
  761. -------------------------------------------------------------------------------
  762.                                         "I have an 8 user poetic license" - me
  763.  Get the 386bsd FAQ from agate.berkeley.edu:/pub/386BSD/386bsd-0.1/unofficial
  764. -------------------------------------------------------------------------------
  765.