F.G.H. 3/28/85 LispCourse #17: Files and Directories Part 3 LispCourse #17: Files and Directories Part 3 The FileBrowser Package The FileBrowser is a window/mouse-based interface to the manipulation of files. To start a file browser, use the function call: (FB FileNamePattern) where FileNamePattern is a wildcarded file name of the form allowed by FILDIR and DIR (See LispCourse #16, p. 6). Example: (FB '{phylum}lisp>*.dcom) will open a file browser on all of the DCOM files in the {phylum}lisp> directory. FB will first prompt you for the region in which to place the window. The result: """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" //,,,,,,,,,,,,,,,,//H(`($> ` ! H #p p9H(d $H D`($ ' |`$ $ @Hd!$H DH(`>#p8g`(`HH(`(@< `@BH%%ãÇ@`$$$$&H@BDHI HF$d$d@$HBBDLI"H(%ä#ç@<8@ q|A>H$H"@!$"D@ D  "@ H($H"@!$"DA@ D>, "@!@ `(x!$ DB@,p>8!`@HH(`(`LJ<@>8p@p`8A>H$B"& D "D H($B"&D> ,"@!B `($B<%Bp  @ 2q x @@`'(%@@ʏ | D@H$$%@   DAH($"%F@   D B`("B|p> p >8!`HH(`(`À88q@Cp8>H!"D@ "D H"D H(!"DA@ L>@@<I&@!2`(! DB@ p8 `@HH(`(`'Ϟ"Dq"p @Cp8>HC!"d!H60 H"D H(C!"d H6Pa>@@ "@&@  `(B"T @H*$ @@ "p*x `B"T @H*x$@ʑ|*D HBa"L H*> @ 2D H(Ba"L!H*0 A "D! `(!Dq"p|p>p8 `H H(`(`"|Oxp HBB$@HD`H(BB(@QDa`(CB8xQ D`BB$@!DHBB$@!DH(BB"@!HD`(C"|!Oxp!`HH(`(`|0@@ q8>H "P@ F"D H("Pa>A@,J&D! `( B@2q*8 !`"BG"|*D@ H" C"2D H("  @@2"D! `( >@,pτ8!`HH(`(`Gxp >8p@Cp`>@>HB$HD` D 0@H(B$HDa D>B P!A@`(B$HD<p C"q < B@`B$HD"B'ȟ | "B@HB$HD  @  CH(B$HD"@ B " " @@`(AÇxp!|p>p |!@`HH(`(`H//?{//;{{w߻{~߷/߻{~߸/߻{~߿߻{~߷߻9{߷/߻;߸/)`(`DDDDFDDDDDDDDDDH""""""""&b""""" @H)ӿ]$^qÀB%À`(ꈈH" 2$@B&$@`DDDDFGddFDDDDD">rAD'H""""""&&&b"""""" @AD$H)55uS!"2$@@$@`(̫ʈpÀ@À`DDDDDDDDdDDDDDDH"""""""#""""""H)`( DDDDGDDDDDDDF $@?DDDDDTDDDDDDDDDH""""&""""""""F @ """""2"f"""""""H)9F% :9SՑ`(̈)FDL@ "FάDDDDLD~\DDDD)D$G@?BDDDDDDFDddDDDDDH""""*&"f2"""")D$D@ 2B"""""~bf&&"""""H)53U$DH@ "FWU55`(̜#3@ :̈DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDH""""""""""""""""""""""""""""""H/"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" The FileBrowser display consists of the following 5 divisions from top to bottom: 1) Prompt window the place where the FileBrowser prints messages and gets input from you. 2) Command menu these are commands that can be applied to the selected file(s). 3) Title bar shows the FileNamePattern for this FileBrowser. 4) Files listing a scrollable listing of the names and attributes of files matching FileNamePattern. 5) Info Options menu a menu of the file attributes to be displayed in the Files listing. The Files Listing and Selecting Files The files listing can be scrolled like any window; just roll out the left side of a window to get the scroll bar. One or more files in the files listing can be selected at any given time. To select a file, point to the left end of any line and click a mouse button. When the cursor nears the left edge of the window, it turns into a right pointing arrow (-->). The mouse buttons are interpreted as follows: LEFT selects the file and unselects all other files (i.e., makes the file the ONLY selection). MIDDLE inverts the selection of the file, i.e., if the file was selected then it unselects the file otherwise it selects the file. All other selections are unaffected. (This button is used for selecting several files that are not contiguous.) RIGHT extends a selection, i.e., selects the file and all files between this file and the nearest selected file. Exceptions: Has no affect if the file is already selected. Has no affect if the chosen file is BEWTEEN two already selected files. Note: The LEFT and MIDDLE buttons can actually be clicked when the cursor is anywhere in the line. The RIGHT button must be clicked when the cursor is at the left edge of the line. Selecting a file inverts the line: """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " "` "` "` "` "` "` "` "` "` "` "` "` "` "` "` "` "` " "@ "@  $@@@@@@@"@@/qKG8 "@~#$"D@LHȒ$D @!$>GHHO|@!$ DHHH@"@@#$"D@HHȒ$D "@#q3GG8 "@ "@@ ? H "@ .!. :\H "@? 1!1#" !"F2bI !!!!> !B"BI !!!! !2B"BI"@ 1#!#" !"F"bI "@?.!?:"\H !@ @"@ "@ ~A "@ A\8  "@ A"bD̑" @~>B>@A Bd "@A"BD " "@AB: "@ "@   "@\:9#:8x "@bFDMFDĈ BB!B@PBBd&HB@P"@bFD$HFD  "@|\::g#:8x  @ @" " ?UUUUUUUUUUUUUUUUUUUUUVo?"}>? "}_w?UUUUUUUUUUUUUUUUUUUUUV ={~}p~?o_wgUUUUUUUUUUUUUUUUUUUUUV{}o~og__vwV"}}owooogm> "s~wߎpp߿ooouUUUUUUUUUUUUUUUUUUUUUV ׷}n{oovouUUUUUUUUUUUUUUUUUUUUUV׷}owoowvo{~"}﷭}ooogo>y{~ "}=m}o&0op{`?yUUUUUUUUUUUUUUUUUUUUUV UUUUUUUUUUUUUUUUUUUUUV"~7? "@ "_ "_q<çi_ ~ջ~;vopՃ~ ۻnvþ "_nտ~ۻnvo߻ "_nջ~;nlvoݻ pܼr_"_ "_ " "@ Dq @|xq"@"D! &  @E@H0DB "@"D! &  8qE@q`HP! DB  |  %B  Ex #D`B D  %@!<`@>@HB xB"@"D  %@ !D@@@ @B "@"D B %FA"D@H!!@B DpC>B@~w{pßwﺈ"@n~nwnv}w "@n~{nw}nw{vw xx|xpÎ{`~>`"@ "@ @ Ï88x"@& a$HEDH"D DB "@& d8qE Dq@"L!2 DB %B!⧏ EDT!S DB%@!H<`@>D@TR xB"@%@!$@D@D@d @B "@%F!$HDDH D!!@B BÇ8 @B"@ "@ wǎx?}x? "@vݻvOw^{ݻnw "@vݻvO{w]{ǎnw ^ݿv{x~wvxެ>^^ݿv?v{pßww\nﺈ"@nݻvvnw_mnw "@v{ݻv{w{nw{w߻nw ww{ǎ|pÎ{wx>"@ "@ `q݃{pßwﺈ"@x?n~mw "@nw{vow pÎ{}x>q"@ "@ "8Ç8!Àx8xq"@"D$HDa$@EDED DB "@"D$H @8qE DpE(! DB "@$8!C ED8!D`B"@$!@<`@>DIxB"@"D$H @D@DO@B "@"DB$HD!@DDAD!@B 8CÇ88 @pB"@ "@ " " " " {{{"߻ "߻ ߻߻"{ " " "H DDDDDDDDDDDDDD@""""2""""""""" ~@"Q3A@ @ "H興A"G. DDDDTUuggTDDDD@~"DGH"1"""""2?##"2"""" AGD! !>"Q113AD$A  !  "HADH$"1" DDDD_e]^TDDDD@~3N."""""""#""""""  "Q0  "H""""""""""""""" DDDDDDDDDDDDDD@"""">""&"&"""" 1""Q11"DDDDDFdDDDDDDF "HȬϸ1-\p""""#b7>.""""" DDDDDuVdDDDDD@J5""b0S115""""b#~"""" J!">Br"QQ15QJ!" BDDDDGVeedDDDDF "Ȟ!""B0""""&22##"""""" DDDD^d|tDDDD@!Bpѱ1"""""""""""""" "QDDDDDDDDDDDDDDF " """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" The Command Menu Most of the commands in the command menu carry out an operation on the selected files. The commands work as follows: Edit Starts up an editor (TEdit or DEdit) on each of the selected files. If the command is selected using the LEFT mouse button, DEdit is called on Lisp symbolic files and TEdit on all other files. If the command is selected using the MIDDLE mouse button, you will be asked to choose the editor to use from a menu. Delete Marks the selected files for deletion but does not actually delete them. An expunge command is required to do the actually deletion. Files marked for deletion have a line drawn thru them. H@OꪪO?UUUUUUUUUUUUUUUUUUUUU`O|UUUUUUUUUUUUUUUUUUUUU`~߫ꪪv}k==ꪪO{vk[UUUUUUUUUUUUUUUUUUUUU`Owv}mgUUUUUUUUUUUUUUUUUUUUU`~vߎmoꪪz}onꪪOz�}~{UUUUUUUUUUUUUUUUUUUUU`O{}y|={oUUUUUUUUUUUUUUUUUUUUU`} & ?==?{ꪪꪪOUUUUUUUUUUUUUUUUUUUUU@O@@K@Ko}_`n98㧖?]t8@ q|A>@H$H"@!$"D@ D  "@ `$H"@!$"DA@ D>, "@!@ `x!$ DB@,p>8!@H@@H@@`HLJ<@>8p@p`8A>@H$B"& D "D @$B"&D> ,"@!B @$B<%Bp  @ 2q x @@@H}vڿwxsx5p߃v@H$$%@   DA@$"%F@   D B@"B|p> p >8!@H@H@@@HÀ88q@Cp8>@H!"D@ "D H"D `!"DA@ L>@@<I&@!2`! DB@ p8 @H@@H@@@H'Ϟ"Dq"p @Cp8>@HC!"d!H60 H"D @C!"d H6Pa>@@ "@&@  @B"T @H*$ @@ "p*x @H^ݫ߿wxsx5nwջ@HBa"L H*> @ 2D @Ba"L!H*0 A "D! @!Dq"p|p>p8 @H@H @@@H"|Oxp @HBB$@HD`@BB(@QDa@CB8xQ D@Hۿ~~_@HBB$@!D@BB"@!HD@C"|!Oxp!@H@H@@@H|0@@ q8>@H "P@ F"D @"Pa>A@,J&D! @ B@2q*8 !@H"BG"|*D@ @H" C"2D @"  @@2"D! @ >@,pτ8!@H@H@@@HGxp >8p@Cp`>@>@HB$HD` D 0@@B$HDa D>B P!A@@B$HD<p C"q < B@@HB$HD"B'ȟ | "B@@HB$HD  @  C@B$HD"@ B " " @@@AÇxp!|p>p |!@@H@H@@@H@OOO?{;O{{wO߻{~߷߻{~߸߻{~߿O߻{~߷O߻9{߷߻;߸OO@@LDDDDFDDDDDDDDDD@J""""""""&b""""" @@ӿ]$^qÀB%À@ Undelete Removes the deletion marks (if any) from the selected files so that they will not be deleted in the next expunge. Expunge Actually deletes all of the files that have been marked for deletion and them updates the files listing. Not this command ignores the selected files. It operates on the marked files instead. Load Applies LOAD to the selected files. Compile Compiles the selected files. Copy Copies the selected files using a COPYFILE for each file. You will be prompted for the destination of the COPYFILEs in the FileBrowser's prompt window. If there is a single selected file, you will be asked for a destination file name. If there is more than one file selected, you will be asked for a destination path name (i.e., a directory). In the latter case, each of the selected files will be copied to the specified directory retaining their old file name. Rename Like Copy, except does a RENAMEFILE for each selected file. See For each selected file, opens a separate window (prompting for a region) and prints the contents of the file in the window. The windows are scrollable but not editable. Update Updates the files listing. Updates are necessary if a change is made to the listed directory. Except following the Expunge command, the FileBrowser does not automatically update the files listing when changes are made to the files. The Update command must be used to insure that the file listing reflects the true state of the files listed. If this command is selected using the LEFT mouse button, a file listing is made using the current FileNamePattern. If the MIDDLE mouse button is used, you are given the a choice of using the current FileNamePattern or specifying a new FileNamePattern for the file listing. If the new FileNamePattern option is chosen, you will be promptyed for the new pattern in the prompt window. Hardcopy Applies LISTFILES (See LispCourse #16, p. 13) to the selected files. The Info Options Menu The Info Options menu can be used to set what attributes of a file get displayed in the file listing. Each item in the menu represents one of the attribute of a file (e.g., Length, CreationDate, Author, etc.). Clicking the mouse in the item inverts the selectedness of the item. Selected items are shaded. When the file listing is updated (e.g., using the Update command) the line for each file will include the selected attributes. Example: Only Length attribute selected. "0 " Q!1"(j&$ "0 #r!!DB$Q " !!|B$Q "  !1B$$!"0.A$ "0  0"?"?UUUUUUUUUUUUUUUUUUUUU ϼπ"?{W_UUUUUUUUUUUUUUUUUUUUU"?}CF?~<8}:ߏ>?{8{UUUUUUUUUUUUUUUUUUUUU|=9}{߽W=_纷ժ}~{{mϪ"<~{ߝ?;kÀUUUUUUUUUUUUUUUUUUUUU"?}~{~}ݻkUUUUUUUUUUUUUUUUUUUUU}~{{ݻߪ|~{ϼ{?ߪ"?}~{ L8:{?{~UUUUUUUUUUUUUUUUUUUUU"?}UUUUUUUUUUUUUUUUUUUUU}"0"7"7rqO,:"7_n߻6\5`߃v o߿v "7n߻vۿ"75qw/; "7"0"0"0DÈ<8q>|qDHDB$H"D@"0DHDB$H"D@ "0G(B$H"@Px %(B$H"@PDx@䈑(B$H"DP@"0$HB$H"DQD"0$GAÏ<8q8p"0"0Ï>xÈ|p$H D$M" "0$H D$M(  "0HD!È> "0"0<8q8pB"DD"0B"D(@"0B"@Px"@PD "DPD "0"DQD "0<8q>8p "0 "0 OD㈟@H"&"0P"& "0p%B HB%@HB"%@"0DB"%F "0DBB "0 "0 8`D"0(D "08 D! D!"0D@ "0>8@ "0 "0 ㈎"@|pH"&@"0H"&(@ "0H>%Bx H"%@D H"%@@"0H"%FD "0"B>8 "0 "0 "? "? >"? "?s{o"?w>wp "? "1 "8 DDDDDDDDLDDDDD""""&"""*"""""@"1_H>8ãK "8̈D$dHLH DDDDDGLLDDDDDE|'O""""&&*jj"""""E @$$H"1YYٕB D$dH H "8Ό >8ӣ DDDDDDDLDDDDDDD """""""'"""""" "0 "0@ @H~ @@A "0 8sK_A8tP뇋 "0 D#RHA"DPHM |9!RH~>HH@!RHA dHH"0HD#!HA"DHH "08t!FgA:tthG "? """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Using the FileBrowser You can simultaneously open as many FileBrowsers as you like. Beware of the order in which files are listed in the FileBrowser. Each device appears in a different order. In particular, you should be careful to observe the order in which the several versions of a file are listed. On some devices, versions will be in ascending order, on other devices in descending order, on still other devices in lexical or even random order. Dealing with Devices In general, you deal with files and directories and NOT directly with the devices these files and directories are stored. However, there are several properties of devices that are important to the user: 1. Amount of available space on the device Each device can store only a limited amount of data. Often you want to know how much of this space is left. The following functions provide that information for various devices: Local Disk the function (DISKFREEPAGES DeviceName) returns the number of pages (512 bytes) still availabel on the named local disk partition. Example: 77_(DISKFREEPAGES 'DSK5) 8341 78_ File Servers There is no Interlisp interface to finding out the amount of space left on a directory on a file server. For the IFSs, you can CHAT to the IFS and then CONNECT to the directory and issue the DSKSTAT command. Example: Phylum IFS 1.38.1L Executive ... @login (user) halasz (password) @connect (to directory) notecards @dskstat 35373 pages used out of 40000 in directory . 495072 pages used, 28872 left in the system. @quit Floppy To find out the amount of space left on a floppy disk, use the (FLOPPY.FREE.PAGES) function call. Example: 79_(FLOPPY.FREE.PAGES) 345 80_ Core Devices The concept of space is not relevant here since these are "simulated" devices. In general, there is only about 5000 pages available for COREDEVICE files in an Interlisp virtualmem. 2. Random access versus No random access Some device allow programs to access the contents of a file in a random order. Other devices allow access to a file in a strict sequential order from start to finish. Some programs require random access devices. Lafite, in particular, require mail files to be stored on random access devices. All devices we have discussed allow random access EXCEPT the NS file servers. Therefore many programs including Lafite cannot be used with NS file servers. 3. Location of your virtual memory file The function call (DISKPARTITION) returns the number (on Dolphin/Dorado) or name (on DLion) of the local disk partition from which the currently running Lisp has been started, i.e., the partition with the currently active virtual memory file. On Dolphin/Dorados, this will also be the partition number of the {DSK} partition. Using Floppies on the Dlion On the whole, floppies on the DLion can be treated like any other device. You can COPYFILE to a from a floppy, RENAMEFILE files on a floppy, etc. There are some special procedures for dealing with floppies. The Physical Floppy Insertion Write Enable Tab Floppy Modes There are three modes for writing on floppies. The modes are defined as follows: PILOT This is the normal mode. In PILOT mode, each floppy can contain many files. No file can be bigger than the amount of information that can fit on one floppy (about 2200 pages). HUGEPILOT In HUGEPILOT mode, there is exactly one file per floppy AND each file can spread across several floppies. HUGEPILOT is generally used for files that are bigger than a single floppy. SYSOUT SYSOUT mode is like HUGEPILOT mode. It is used for Lisp sysouts, which are always large files that take up more than one floppy. Note: That the floppy mode is a property of each floppy in the sense that any given floppy can be written on in only one of these modes. You cannot write on a floppy in HUGEPILOT mode once and then PILOT mode the next time. (FLOPPY.MODE Mode) is the function to change the current floppy mode. Mode must be one of the three modes described above. The value returned is the previous floppy mode. (FLOPPY.MODE) just returns the current floppy mode. When reading from a floppy (e.g., COPYFILEing from a floppy to another device), the system will detect what mode is appropriate a read the file from the floppy in the correct mode. When writing to a floppy (e.g., COPYFILEing from a file server to a floppy), you must set the floppy mode as appropriate. If you are in HUGEPILOT or SYSOUT mode, the system will prompt you for another floppy whenever it needs one. Example: Copying a sysout from phylum to floppy. 8_ (FLOPPY.MODE 'PILOT) PILOT 9_ (COPYFILE '{PHYLUM}Init '{FLOPPY}INIT) {FLOPPY}INIT;1 10_ (FLOPPY.MODE 'SYSOUT) PILOT 11_ (COPYFILE '{phylum}new.sysout '{floppy}lisp.sysout) Please insert floppy for Lisp Sysout #1 Please insert floppy for Lisp Sysout #2 Please insert floppy for Lisp Sysout #3 {floppy}lisp.sysout;1 12_ (FLOPPY.MODE 'PILOT) SYSOUT Formatting, Compacting, Scavenging (FLOPPY.FORMAT Name) Before being used, every new floppy must be formatted. Formatting gives the floppy a name and sets up the floppy so Interlisp can write on it. The Name of a floppy is any arbitrary atom. Formatting a floppy erases the information already on the floppy which can be good or bad, depending on whether you intended to erase the information or not. (FLOPPY.COMPACT) files on a floppy need to take up contiguous space. Sometimes you may have enough free space on your floppy for a file, but the file still won't fit because the free space is not contiguous but spread out between existing files. (FLOPPY.COMPACT) will compact the free space on a floppy so that all free space is contiguous. For example, if you create three files and then delete the middle one, you will have some discontiguous free space (i.e., the space previously taken up by the deleted file between the two existing files and the free space after the third file). The space between the two files cannot be used by large files. (FLOPPY.COMPACT) will move the last file so that all the free space is in one block at the end of the floppy, thus making it possible for all of the free space to be used by large files. (FLOPPY.SCAVENGE) tries to fix up a floppy that has gotten messed up for some reason or another. FLOPPY.SCAVENGE will also retrieve files that have been accidentally deleted, providing the space used by those files has not already been overwritten by another file. In particular, if you accidentally delete a file and run FLOPPY.SCAVENGE before writing another files on the disk, you will always get back your deleted files. Storing and Retrieving Floppy Images Sometimes its convenient to treat each floppy as one giant file, no matter how many files are actually stored on the floppy. For example, you might want to copy a floppy containing several files to a file server and then make a copy of the floppy from the file server. One procedure would be to do the copies file by file using COPYFILE. A quicker procedure, however, would be to treat the floppies as one giant file and copy that one file back and forth to the file server. The functions FLOPPY.TO.FILE and FLOPPY.FROM.FILE allow you to treat a whole floppy as a single giant file. (FLOPPY.TO.FILE FileName) will copy a whole floppy (treated as a single file) to the file named by FileName. (FLOPPY.FROM.FILE FileName) will copy the file named by FileName to a whole floppy (treated as a single file). Example: 10_ (FLOPPY.TO.FILE '{PHYLUM}WHOLEFLOPPY) {PHYLUM}WHOLEFLOPPY;1 <> 11_ (FLOPPY.FROM.FILE '{PHYLUM}WHOLEFLOPPY) {PHYLUM}WHOLEFLOPPY;1 <> 12_ (FLOPPY.FROM.FILE '{PHYLUM}WHOLEFLOPPY) {PHYLUM}WHOLEFLOPPY;1 Documentation Can be found on {eris}harmony>doc>floppy.tty. Opening and Closing Files Before a program to read from or write to a file, the file must be opened by Interlisp. The file remains open as long as the program is reading from or writing on the file. When the program is finished, it closes the file. If one program is writing on an open file, no other program can open that file. The second program will get a "File won't open" error when it tries to access the file. Two programs can read from the same file at the same time. Ordinarily, opening and closing of files is done automatically. Sometimes, however, a program bombs without properly closing its files. In this case, the files remain open and can prevent orther programs from accessing the files. When this happens, the user has to close the open files by hand. The following function are used for closing files: (OPENP) returns a list of all the open files. (CLOSEALL) closes all open files (CLOSEF FullFileName) closes the file specified by FullFileName. Example: 10_ (TEDIT '{phylum}test.ted) File won't open {phylum}test.ted;1 11_ (OPENP) ({phylum}test.ted;1) 12_ (CLOSEALL) ({phylum}test.ted;1) 13_ (TEDIT '{phylum}test.ted) {process}#6.23456 14_ References There is no FileBrowser documentation Floppy documentation is on {eris}harmony>doc>floppy.tty. Opening and closing files is covered in Section 6.1 of the IRM (LIST ((PAGE NIL NIL (0 0 612 792) ((HEADING NIL (HEADINGTYPE YYY) (19050 26670 2540 1270) NIL) (TEXT NIL NIL (2540 2540 16510 22860) NIL))) (PAGE NIL NIL (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD RIGHT) CHARLOOKS (SUPERSCRIPT 0 SIZE 12 FAMILY TIMESROMAN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF SLOPE REGULAR WEIGHT MEDIUM)) (16510 26670 2540 1270) NIL) (HEADING NIL (HEADINGTYPE XXX) (2540 26670 2540 1270) NIL) (TEXT NIL NIL (2540 2540 16510 22860) NIL))) (PAGE NIL NIL (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD RIGHT) CHARLOOKS (SUPERSCRIPT 0 SIZE 12 FAMILY TIMESROMAN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF SLOPE REGULAR WEIGHT MEDIUM)) (16510 26670 2540 1270) NIL) (HEADING NIL (HEADINGTYPE XXX) (2540 26670 2540 1270) NIL) (TEXT NIL NIL (2540 2540 16510 22860) NIL)))))H PAGEHEADINGYYY TIMESROMAN  PAGEHEADINGXXX) TIMESROMAN  TIMESROMAN  TIMESROMAN NILNIL0 TIMESROMANNILNIL TIMESROMAN$$NILNILP TIMESROMAN $$NILNIL4 TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN \ TIMESROMAN HHNILNIL TIMESROMAN ! TIMESROMAN , TIMESROMAN  TIMESROMAN TIMESROMAN  TIMESROMAN T TIMESROMAN HHNILNIL TIMESROMAN $$NILNIL@J BMOBJ.GETFN2 TIMESROMAN  TIMESROMAN $$NILNILR TIMESROMAN HHNILNIL TIMESROMAN S TIMESROMAN HHNILNILR TIMESROMAN HHNILNIL? TIMESROMAN HHNILNILg TIMESROMAN HHNILNIL[ TIMESROMAN $$NILNIL& TIMESROMAN $$ NILNILq TIMESROMAN  TIMESROMAN $$NILNIL TIMESROMAN $$NILNIL. TIMESROMAN HHNILNILc TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN $$ NILNIL TIMESROMAN $$ NILNIL# TIMESROMAN $$ NILNILB  BMOBJ.GETFN2 TIMESROMAN  TIMESROMAN $$NILNIL TIMESROMAN $$NILNILv TIMESROMAN HH NILNIL TIMESROMAN ; TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN HH NILNIL# BMOBJ.GETFN2 TIMESROMAN  TIMESROMAN HH NILNIL TIMESROMAN v TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN HH NILNIL TIMESROMAN ( TIMESROMAN HH NILNIL TIMESROMAN ! TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN TIMESROMAN P TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN HH NILNIL TIMESROMAN ? TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN HH NILNIL TIMESROMAN \ TIMESROMAN llNILNIL TIMESROMAN HH NILNIL TIMESROMAN H TIMESROMAN $$NILNIL TIMESROMAN $$NILNIL TIMESROMAN $$NILNILa TIMESROMAN $$NILNIL TIMESROMAN HHNILNIL* TIMESROMAN $$NILNIL.r BMOBJ.GETFN2 TIMESROMAN  TIMESROMAN $$NILNIL TIMESROMAN $$NILNIL> TIMESROMAN $$NILNILq TIMESROMAN NILNIL TIMESROMAN$$NILNIL TIMESROMAN $$NILNIL, TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN  TIMESROMAN TIMESROMAN Q TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN llNILNIL TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN HHNILNIL TIMESROMAN  TIMESROMAN llNILNIL TIMESROMAN NILNIL! TIMESROMAN NILNIL! TIMESROMAN NILNIL" TIMESROMAN NILNIL TIMESROMAN NILNIL8 TIMESROMAN NILNIL- TIMESROMAN NILNIL TIMESROMAN HHNILNIL TIMESROMAN e TIMESROMAN llNILNIL TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN HHNILNIL TIMESROMAN  TIMESROMAN $$ NILNIL* TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN $$NILNIL( TIMESROMAN HHNILNIL TIMESROMAN HHNILNILS TIMESROMAN NILNIL TIMESROMAN$$NILNIL TIMESROMAN $$NILNIL= TIMESROMAN $$NILNIL TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN $$NILNIL TIMESROMAN HHNILNILQ TIMESROMAN  TIMESROMAN llNILNIL TIMESROMAN  TIMESROMAN TIMESROMAN llNILNIL TIMESROMAN  TIMESROMAN llNILNIL TIMESROMAN  TIMESROMAN  TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN  TIMESROMAN  TIMESROMAN 4 TIMESROMAN  TIMESROMAN 1 TIMESROMAN ? TIMESROMAN ' TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN llNILNIL1 TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN NILNIL3 TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN NILNIL@ TIMESROMAN  TIMESROMAN NILNIL( TIMESROMAN NILNIL TIMESROMAN NILNIL( TIMESROMAN NILNIL TIMESROMAN NILNIL( TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN NILNIL TIMESROMAN $$NILNIL# TIMESROMAN HHNILNIL TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN 7 TIMESROMAN ` TIMESROMAN  TIMESROMAN  TIMESROMAN # TIMESROMAN llNILNIL TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN ] TIMESROMAN  TIMESROMAN llNILNIL TIMESROMAN > TIMESROMAN HH NILNIL TIMESROMAN Q TIMESROMAN llNILNILI TIMESROMAN $$NILNIL% TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN D TIMESROMAN TIMESROMAN k TIMESROMAN HH NILNILl TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN  TIMESROMAN L TIMESROMAN TIMESROMAN  TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN - TIMESROMAN  TIMESROMAN  TIMESROMAN HH NILNIL TIMESROMAN llNILNIL2 TIMESROMAN llNILNIL TIMESROMAN llNILNIL TIMESROMAN llNILNIL4 TIMESROMAN llNILNIL TIMESROMAN llNILNIL TIMESROMAN llNILNIL4 TIMESROMAN llNILNIL TIMESROMAN $$NILNIL TIMESROMAN HHNILNIL TIMESROMAN " TIMESROMAN  TIMESROMAN NILNIL TIMESROMAN$$ NILNILI TIMESROMAN TIMESROMAN $$NILNIL TIMESROMAN $$NILNIL; TIMESROMAN $$NILNIL+ TIMESROMAN $$ NILNIL3 TIMESROMAN HH NILNIL TIMESROMAN ) TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN HH NILNIL TIMESROMAN  TIMESROMAN  TIMESROMAN  TIMESROMAN TIMESROMAN TIMESROMAN  TIMESROMAN $$ NILNIL TIMESROMAN HHNILNIL& TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL& TIMESROMAN HHNILNIL TIMESROMAN HHNILNIL TIMESROMAN NILNIL TIMESROMANHHNILNIL& TIMESROMAN HHNILNIL TIMESROMAN " TIMESROMAN  TIMESROMAN HHNILNIL? TIMESROMAN HHNILNIL TIMESROMAN<z