; ************************************************
; *
; * Install-ADPro
; *
; * $VER: Install-ADPro 2.5.1 (28.2.94)
; *
; * This is the installation script for ASDG's Art Department Professional
; * version 2.5.1.
; *
; * Copyright  1990-1994 ASDG, Incorporated
; * All Rights Reserved
; *
; ************************************************


; ****************************
; * Set up some global variables.
; ****************************
;
(set ProductName	"Art Department Professional")	; product name
(set ProductBaseName	"ADPro")			; product base name
(set ADProLiteName	"MorphPlus")			; ADProLite name
(set VersionNum		"2.5.1")			; product version number

(set OSVersion		(/ (getversion) 65536))
(set TotalFiles		0)
(set AccumFiles		0)
(set PctDone		0)
(set DisplayReadMe	0)

(set CPUOpts		0)			; 0=68000,68010; 1=68020,68030,68040
(set FPUNameIEEE	"IEEE")			; IEEE basename suffix
(set FPUNameM68881	"M68881")		; M68881 basename suffix
(set FPUName		FPUNameIEEE)		; default FPU basename suffix

(set Disk1Name			"ADPro_D1")	; actual name of disk 1
(set Disk2Name			"ADPro_D2")	; actual name of disk 2
(set Disk3Name			"ADPro_D3")	; actual name of disk 3
(set Disk4Name			"ADPro_D4")	; actual name of disk 4

(set DiskInstall		Disk1Name)	; installation (main) disk
(set DiskADProPgm		Disk1Name)	; ADPro program disk
(set DiskRelNotes		Disk1Name)	; ADPro release notes disk
(set DiskLoaders		Disk1Name)	; common loaders disk
(set DiskLoadersDot		Disk1Name)	; dot loaders disk
(set DiskLoadersIEEE		Disk1Name)	; IEEE-compiled loaders disk
(set DiskLoadersM68881		Disk1Name)	; M68881-compiled loaders disk
(set DiskLoadersFPU		DiskLoadersIEEE); default FPU loaders disk
(set DiskSavers			Disk1Name)	; common savers disk
(set DiskSaversDot		Disk1Name)	; dot savers disk

(set DiskSaversIEEE		Disk2Name)	; IEEE-compiled savers disk
(set DiskSaversM68881		Disk2Name)	; M68881-compiled savers disk
(set DiskSaversFPU		DiskSaversIEEE)	; default FPU savers disk
(set DiskOperators		Disk2Name)	; common operators disk
(set DiskOperatorsDot		Disk2Name)	; dot operators disk
(set DiskOperatorsIEEE		Disk2Name)	; IEEE-compiled operators disk
(set DiskOperatorsM68881	Disk2Name)	; M68881-compiled operators disk
(set DiskOperatorsFPU		DiskOperatorsIEEE)	; default FPU operators disk
(set DiskLoadersExpans		Disk2Name)	; expansion loaders disk
(set DiskConvolutions		Disk2Name)	; Convolution matrices disk
(set DiskPatterns		Disk2Name)	; Patterns disk
(set DiskDisplays		Disk2Name)	; common displays disk

(set DiskSaversExpans		Disk3Name)	; expansion savers disk
(set DiskOperatorsExpans	Disk3Name)	; expansion operators disk
(set DiskLoadersPseudo		Disk3Name)	; pseudo loaders disk
(set DiskLoadersIndep		Disk3Name)	; 3rd party loaders disk
(set DiskSaversPseudo		Disk3Name)	; pseudo savers disk
(set DiskSaversIndep		Disk3Name)	; 3rd party savers disk
(set DiskOperatorsPseudo	Disk3Name)	; pseudo operators disk
(set DiskOperatorsIndep		Disk3Name)	; 3rd party operators disk
(set DiskF2KIters		Disk3Name)	; sample FRACTAL2000 iterations disk
(set DiskFREDPgm		Disk3Name)	; FRED program disk
(set DiskAnimOps		Disk3Name)	; FRED AnimOps disk
(set DiskADProScripts		Disk3Name)	; ADPro ARexx scripts disk
(set DiskFREDScripts		Disk3Name)	; FRED ARexx scripts disk
(set DiskSplitzJoinz		Disk3Name)	; Splitz & Joinz disk
(set DiskZapDPI			Disk3Name)	; ZapDDPI disk
(set DiskSentry			Disk3Name)	; File Sentry disk
(set DiskView			Disk3Name)	; View disk
(set DiskTutorials		Disk4Name)	; Tutorials disk

(set InstallDCTVLib		0)		; 1 = install, 0 = don't install

						; Maximum memory requirements (in MB)
(set MaxMemReqI			"310 K")	; ProductBaseName
(set MaxMemReqII		"1.6 MB")	; Standard Modules
(set MaxMemReqIII		"247 K")	; Expansion Modules
(set MaxMemReqIV		"129 K")	; Third-Party Modules
(set MaxMemReqV			" 41 K")	; Pseudo Modules
(set MaxMemReqVI		"210 K")	; FRED
(set MaxMemReqVII		"496 K")	; ARexx Scripts
(set MaxMemReqVIII		"197 K")	; Splitz & Joinz
(set MaxMemReqIX		"  9 K")	; ZapDPI
(set MaxMemReqX			" 43 K")	; Sentry
(set MaxMemReqXI		"119 K")	; View
(set MaxMemReqXII		"660 K")	; Tutorials
(set MaxMemReqXIII		"  6 K")	; ReadMe




(procedure setPkgOpts
;
; ****************************
; * Ask the user which parts of the package should be installed.
; ****************************
;
	(
	(set PkgOpts
		(askoptions
			(prompt
				("Select the parts of the %s package you want to install " ProductName)
				"at this time."
			)
			(help
				"This part of the installation procedure lets you select the "
				("parts of the %s package you want to install at this time.\n" ProductName)
				"\n"
				("*** %s\n" ProductBaseName)
				("(Max. required: %s)\n" MaxMemReqI)
				"This option lets you install the main program.\n"
				"\n"
				"*** Standard Modules\n"
				("(Max. required: %s)\n" MaxMemReqII)
				"This option lets you install all of the standard modules "
				"that are supplied and supported by ASDG.\n"
				"\n"
				"*** Expansion Modules\n"
				("(Max. required: %s)\n" MaxMemReqIII)
				"This option lets you install all the expansion modules "
				"that control and operate on expansion hardware, such as "
				"framegrabbers, digitizers, and display boards.  These modules "
				"are supplied and supported by ASDG.\n"
				"\n"
				"*** Third-Party Modules\n"
				("(Max. required: %s)\n" MaxMemReqIV)
				("This option lets you install %s modules which have been developed " ProductBaseName)
				("by third-party %s developers through our %s Developer Program.  " ProductBaseName ProductBaseName)
				"THESE MODULES ARE NOT SUPPORTED BY ASDG.\n"
				"\n"
				"*** Pseudo Modules\n"
				("(Max. required: %s)\n" MaxMemReqV)
				"This option lets you install the pseudo loader, saver and operator modules "
				"that are supplied and supported by ASDG.  These modules require that you have ARexx installed and running.\n"
				"\n"
				"*** FRED\n"
				("(Max. required: %s)\n" MaxMemReqVI)
				("This option lets you install the %s/%s FRame EDitor and its AnimOps. " ProductBaseName ADProLiteName)
				"FRED is a visually-oriented list organizer that allows you to "
				"assemble a sequence of images and batch process them through the "
				"use of ARexx scripts.\n"
				"\n"
				("NOTE: If you currently own %s 2.1.0 or above " ProductBaseName)
				("or %s 1.0.0 or above and had previously " ADProLiteName)
				"installed the FRED that came with those versions, "
				"you should select this option--the FRED that will "
				"be installed is a newer version, with more features, "
				"more keyboard shortcuts, and a revised Compositor AnimOp that "
				"completely supersedes the old Compositor and "
				"Alpha_Compositor AnimOps, while adding many more "
				"features and controls.\n"
				"\n"
				"*** ARexx Scripts\n"
				("(Max. required: %s)\n" MaxMemReqVII)
				"This option lets you install some ARexx scripts for both "
				("%s and FRED. These may come in handy if you " ProductBaseName)
				"plan to control the programs through ARexx. This option will "
				"also install the pre-written FRED Invoke ADPro scripts which "
				"we have created for your convenience.\n"
				"\n"
				"*** Splitz & Joinz\n"
				("(Max. required: %s)\n" MaxMemReqVIII)
				"This option lets you install a set of utilities that make it "
				"possible to transfer larger-than-disk size files between "
				"computers and platforms. We have included versions of "
				"Splitz & Joinz for the Amiga, Macintosh, PC/MS-DOS, and "
				"PC/MS-Windows.\n"
				"\n"
				"*** ZapDPI\n"
				("(Max. required: %s)\n" MaxMemReqIX)
				"This option lets you install a utility and ARexx scripts to "
				"remove, replace, and check for the existence of DPI chunk-embedded "
				"information within IFF-ILBM files. This is to make it compatible "
				"with older versions of Gold Disk's ProPage.\n"
				"\n"
				"*** Sentry\n"
				("(Max. required: %s)\n" MaxMemReqX)
				"This option lets you install the ADPro File Sentry. This "
				"utility lets you launch CLI commands or ARexx scripts upon files in a "
				"directory, at the time they are added to or modified within the "
				"directory.\n"
				"\n"
				"*** View\n"
				("(Max. required: %s)\n" MaxMemReqXI)
				"This option lets you install View 3.6, an IFF/ANIM "
				"viewer that is compatible with the ANIM-8 format "
				"which this package's ANIM saver is capable of producing.\n"
				"\n"
				"This View utility is included for your convenience.  All "
				"correspondences should be directed to Michael Hartman at "
				"the address provided in the View documentation.\n"
				"\n"
				"*** Tutorials\n"
				("(Max. required: %s)\n" MaxMemReqXII)
				"This option lets you install the images and other files "
				"used for the tutorials in the User Manual.\n"
				"\n"
				"*** ReadMe\n"
				("(Max. required: %s)\n" MaxMemReqXIII)
				"This option lets you install the ReadMe file from disk 1 "
				"onto your floppy or hard disk to use as a reference.\n"
				"\n"
				@askoptions-help
			)
			(choices
				; bit position 0 -- todo & 1
				;
				("%s" ProductBaseName)

				; bit position 1 -- todo & 2
				;
				"Standard Modules"

				; bit position 2 -- todo & 4
				;
				"Expansion Modules"

				; bit position 3 -- todo & 8
				;
				"Third-Party Modules"

				; bit position 4 -- todo & 16
				;
				"Pseudo Modules"

				; bit position 5 -- todo & 32
				;
				"FRED"

				; bit position 6 -- todo & 64
				;
				"ARexx Scripts"

				; bit position 7 -- todo & 128
				;
				"Splitz & Joinz"

				; bit position 8 -- todo & 256
				;
				"ZapDPI"

				; bit position 9 -- todo & 512
				;
				"Sentry"

				; bit position 10 -- todo & 1024
				;
				"View"

				; bit position 11 -- todo & 2048
				;
				"Tutorials"

				; bit position 12 -- todo & 4096
				;
				"ReadMe"
			)
		)
	)
	)
)


(procedure setCPUOpts
;
; ****************************
; * Ask the user which version of the package should be installed.
; ****************************
;
	(
	(set CPUStr (database "cpu"))
	(if (OR (= CPUStr "68020") (= CPUStr "68030"))
		(set CPUOpts	1)
		(set CPUOpts	0)
	)

	(if (= CPUStr "68040")
		(
		(set fpu040check	(run ("%s:c/fpu68040check" DiskInstall)))
		(if (<> fpu040check 0)
			(
			(if (BITAND fpu040check 32)
				(
				(message
					"Your machine is missing a math coprocessor.\n"
					"\n"
					"If you want to install the 68020/030/040 versions of \n"
					("the %s modules, you must have the FPU properly\n" ProductBaseName)
					"activated.                                           \n"
					"\n"
					"To determine if it is, open up a Shell window and    \n"
					"type the 'CPU' command on a line by itself. You      \n"
					"should see either 68881 or 68882 listed after        \n"
					"'System: CPU 68040'. If neither is listed, contact   \n"
					"the manufacturer of your 68040 board for instructions\n"
					"on how to activate the math coprocessor.             \n"
					"\n"
					"The 68000/68010 versions will be installed instead.  \n")
				(if (BITAND fpu040check 4)
					(message
						"Upon further inspection, the command to run the      \n"
						"SetPatch program, which maybe required to properly   \n"
						"activate the math coprocessor, is missing from your  \n"
						"s:startup-sequence file.                             \n")
					(if (BITAND fpu040check 8)
						(message
							"Upon further inspection, the 68040.library file is   \n"
							"also missing from your LIBS: directory.              \n")
					)
				)
				)
			)
			(set CPUOpts	0)
			)
		)
		(set CPUOpts	1)
		)
		(
		(set fpucheck	(run ("%s:c/fpucheck" DiskInstall)))
		(if (= fpucheck 0)
			(set CPUOpts	0)
			(set CPUOpts	1)
		)
		)
	)

	(if (OR (IN PkgOpts 1) (IN PkgOpts 2))
		(set CPUOpts
			(askchoice
				(prompt	"Select the version of the programs you wish to install, based upon the CPU/FPU combination installed in your Amiga.")
				(help
					("If you are installing the %s package onto " ProductName)
					"an accelerated Amiga, then there are special versions of "
					"many of the files which you should install.\n"
					"\n"
					"If you are unsure about which choice to select,\n"
					"use the following as a guide:\n"
					"\n"
					"A500/A600/A1000/A1200/A2000:\n"
					"   Stock              68000/68010 CPU or No FPU\n"
					"   Accelerated        68020/68030/68040 CPU with FPU\n"
					"\n"
					"A2500/A3000/A4000:\n"
					"   Stock/Accelerated  68020/68030/68040 CPU with FPU\n"
					"\n"
					"NOTE: If you are installing the 68020/030/040 "
					"version, then you MUST have a math coprocessor "
					"properly activated.  Otherwise, the FPU-specific "
					"modules will likely not work at all.  The stock "
					"A1200, for example, has a 68020 but no FPU, so "
					"you should install the 68000/68010 CPU version.\n"
					"\n"
					@askchoice-help
				)
				(choices
					; bit position 0 -- todo & 1
					"68000/68010 CPU or No Floating Point Unit (FPU)"

					; bit position 1 -- todo & 2
					"68020/68030/68040 CPU with FPU"
				)
				(default CPUOpts)
			)
		)
	)

	(if (= CPUOpts 0)
		(
		(set FPUName		FPUNameIEEE)
		(set DiskLoadersFPU	DiskLoadersIEEE)
		(set DiskSaversFPU	DiskSaversIEEE)
		(set DiskOperatorsFPU	DiskOperatorsIEEE)
		)
		(
		(set FPUName		FPUNameM68881)
		(set DiskLoadersFPU	DiskLoadersM68881)
		(set DiskSaversFPU	DiskSaversM68881)
		(set DiskOperatorsFPU	DiskOperatorsM68881)
		)
	)
	)
)


(procedure calcBitMaskAllOn
;
; ****************************
; * Calculate the decimal value of a bit mask with all bits on (= 1).
; ****************************
;
; these variables must be defined before calling this procedure:
;    numBits
;
; this procedure returns the calculated value in BitMaskValue
;
	(
	(set currBit 1)
	(set BitMaskValue 1)
	(while (<= currBit numBits)
		(
		(set BitMaskValue (* BitMaskValue 2))
		(set currBit (+ currBit 1))
		)
	)
	(set BitMaskValue (- BitMaskValue 1))
	)
)


(procedure setDirPath
;
; ****************************
; * Ask the user for a directory name.
; ****************************
;
; these variables must be defined before calling this procedure:
;    setDirPathWhy
;    setDirPathHelp
;    DirPath
;
; this procedure returns the selected directory in DirPath
;
	(
	(set moveon	FALSE)
	(while (NOT moveon)
		(
		(set DirPath
			(askdir
				(prompt	("Please select the directory %s" setDirPathWhy)
				)
				(help	setDirPathHelp
					"\n"
					"NOTE: If you will using the Installer program's "
					"function to create a new directory (using \"Make New Drawer...\"), "
					"it is highly recommended that you DO NOT include "
					"spaces in the drawer name.  Following this advice "
					"will avoid any problems accessing the directory, "
					"especially from ARexx scripts.\n"
					"\n"
					@askdir-help
				)
				(default DirPath)
			)
		)

		(if (= (exists DirPath) 0)
			(makedir DirPath)
			(set moveon	TRUE)
		)
		)
	)
	)
)


(procedure copyLibFile
;
; ****************************
; * Copy the specific library file to the LIBS: directory.
; ****************************
;
; these variables must be defined before calling this procedure:
;
;    copyLibFileName
;    copyLibFileHelp
;    DirPath
;
	(
	(if (= (exists (tackon DirPath copyLibFileName)) 1)
		(
		(protect (tackon DirPath copyLibFileName) "+rwed")
		)
	)
	(copylib
		(prompt	("Copying %s to %s" copyLibFileName DirPath))
		(help	copyLibFileHelp
			"\n"
			"If you already have a copy of this library in the selected destination directory, the library "
			"included on the distribution disk will be compared to the one you "
			"already have. If your current library is an old version, the newer "
			"version will be installed.\n"
			"\n"
			@copylib-help
		)
		(source copyLibFileName)
		(dest DirPath)
		(confirm)
	)
	)
)


(procedure deleteIfExists
;
; ****************************
; * Delete the given file, if it exists.
; ****************************
;
; these variables must be defined before calling this procedure:
;
;    deleteFileName
;
	(
	(if (= (exists deleteFileName) 1)
		(
		(protect deleteFileName "+rwed")
		(delete deleteFileName)
		)
	)
	)
)


(procedure extractLZFile2Dir
;
; ****************************
; * Extract a single file from an LZ-extractable archive file.
; ****************************
;
;    workingMsg
;    arcFileName
;    srcFileName
;    destDirName
;
	(
	(working workingMsg)
	(set lzrc	(run ("RAM:lhex -qfw=%s x %s \"%s\"" destDirName arcFileName srcFileName)))
	(if (<> lzrc 0)
		(message
			("Error decompressing %s from %s into the %s directory.\n" srcFileName arcFileName destDirName)
			"\n"
			"Be sure that the directory you have specified as the destination exists and has enough free space in it "
			"to accept new files. Also be sure that if the file to be copied already exists, that the existing file "
			"isn't protected from being overwritten or deleted.")
	)
	(if (= 0 (exists (tackon destDirName srcFileName)))
		(abort ("An error occurred during the copying of %s" srcFileName))
	)
	)
)


(procedure dumpLZFile2Dir
;
; ****************************
; * Extract (dump) all files from an LZ-extractable archive file.
; ****************************
;
;    workingMsg
;    arcFileName
;    destDirName
;
	(
	(working workingMsg)
	(set lzrc	(run ("RAM:lhex -qfw=%s x %s" destDirName arcFileName)))
	(if (<> lzrc 0)
		(message
			("Error decompressing %s's files into the %s directory." arcFileName destDirName)
			"\n"
			"Be sure that the directory you have specified as the destination exists and has enough free space in it "
			"to accept new files. Also be sure that if the file to be copied already exists, that the existing file "
			"isn't protected from being overwritten or deleted.")
	)
	)
)


(procedure incrementMeter
;
; ****************************
; * Increment the progress meter indicator.
; ****************************
;
;    addToMeter
;
	(
	(set PctDone	(/ (* AccumFiles 100) TotalFiles))
	(set AccumFiles	(+ AccumFiles addToMeter))
	(complete PctDone)
	)
)


(procedure addToUserStartup
;
; ****************************
; * Assigns a name to a particular directory.  Optionally adds it to the
; * S:user-startup file, if requested.
; ****************************
;
;    userStartupAppName
;    userStartupAssignName
;    userStartupAssignToName
;    userStartupHelp
;
	(
	(startup
		(userStartupAppName)
		(prompt ("Add %s: assignment to \"S:user-startup\"?" userStartupAssignName))
		(help	userStartupHelp
			"\n"
			("Select the Proceed button to add an %s: assignment to the S:user-startup file.\n" userStartupAssignName)
			"\n"
			@startup-help)
		(command ("assign %s: \"%s\"" userStartupAssignName userStartupAssignToName))
	)
	(makeassign userStartupAssignName userStartupAssignToName)
	)
)


; ****************************
; * ADPro Module Installation routine
; ****************************
;
(procedure installADProModule
;
; This procedure does the work of de-arcing and copying files.
; It requires initialization of variables:
;    moduleArcName
;    moduleFileName
;    moduleType
;    moduleDestDir
;    modulesToDo
;    moduleCurrN
;
	(
	(set addToMeter	1)
	(incrementMeter)

	(if (IN modulesToDo moduleCurrN)
		(
		(set deleteFileName	(tackon moduleDestDir moduleFileName))
		(deleteIfExists)

		(set workingMsg		("Installing %s %s..." moduleFileName moduleType))
		(set arcFileName	moduleArcName)
		(set srcFileName	moduleFileName)
		(set destDirName	moduleDestDir)
		(extractLZFile2Dir)
		)
	)
	)
)


; ****************************
; * ADPro Installation routine
; ****************************
;
(procedure ADProInstall
	(
	; ****************************
	; * copy adpro.library to the ADPRO: directory.
	; ****************************
	;
	(set addToMeter	1)
	(incrementMeter)

	(set copyLibFileName	"RAM:adpro.library")
	(set copyLibFileHelp	("This library is required to run the %s programs.\n" ProductBaseName))
	(set DirPath		ADProDir)
	(copyLibFile)


	; ****************************
	; * Install the Program
	; ****************************
	;
	(makeassign "ADPROINSTALL" ADProDir)

	(set addToMeter	2)
	(incrementMeter)

	(set deleteFileName	(tackon "ADPROINSTALL:" "ADPro"))
	(deleteIfExists)
	(set deleteFileName	(tackon "ADPROINSTALL:" "ADPro.info"))
	(deleteIfExists)

	(set workingMsg		("Installing %s..." ProductBaseName))
	(set arcFileName	("%s:ADPro.lha" DiskADProPgm))
	(set destDirName	"ADPROINSTALL:")
	(dumpLZFile2Dir)

	(tooltype
		(prompt		"")
		(help		"")
		(dest		("ADPROINSTALL:%s" ProductBaseName))
		(settooltype	"MAXMEM" ("%ld" maxmemvalue))
		(noposition)
	)

	(set deleteFileName	(tackon "ADPROINSTALL:" "ADProDefaults"))
	(deleteIfExists)


	; ****************************
	; * delete adpro.library from the LIBS: directory, if it exists
	; * and if ADPRO:adpro.library exists as well.
	; ****************************
	;
	(if (= (exists (tackon ADProDir "adpro.library")) 1)
		(
		(set deleteFileName	"LIBS:adpro.library")
		(deleteIfExists)
		)
	)


	; ****************************
	; * Install the default AppScript.  Update the icon to point to it.
	; ****************************
	;
	(set addToMeter	1)
	(incrementMeter)

	(set AppScriptDir	(tackon ADProDir "AppScripts"))

	(onerror
		(abort	("The %s directory could not be created. " AppScriptDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected.  This installation "
			"cannot continue."
		)
	)
	(if (= (exists AppScriptDir) 0)
		(makedir AppScriptDir)
	)
	(onerror
		(cleanUp)
	)

	(makeassign "ADPROINSTALL" AppScriptDir)

	(copyfiles
		(prompt	"")
		(help	"")
		(source	("%s:DisplayImage.adproapp" DiskInstall))
		(dest	"ADPROINSTALL:")
	)

	(tooltype
		(prompt		"")
		(help		"")
		(dest		(tackon ADProDir ProductBaseName))
		(settooltype	"APPSCRIPT" ("%s" (tackon AppScriptDir "DisplayImage.adproapp")))
		(noposition)
	)


	; ****************************
	; * copy req.library to the LIBS: directory.
	; ****************************
	;
	(set addToMeter	1)
	(incrementMeter)

	(set copyLibFileName	"RAM:req.library")
	(set copyLibFileHelp	("This library is required to run the %s programs.\n" ProductBaseName))
	(set DirPath		"LIBS:")
	(copyLibFile)


	; ****************************
	; * Install the Release Notes program and text file
	; ****************************
	;
	(makeassign "ADPROINSTALL" ADProDir)

	(set addToMeter	3)
	(incrementMeter)

	(set workingMsg		("Installing %s Release Notes and Viewer..." ProductBaseName))
	(set arcFileName	("%s:ReleaseNotes.lha" DiskRelNotes))
	(set destDirName	"ADPROINSTALL:")
	(dumpLZFile2Dir)

	(copyfiles
		(prompt	"")
		(help	"")
		(source	("%s:%s.notes" DiskInstall ProductBaseName))
		(dest	"ADPROINSTALL:")
	)


	; ****************************
	; * Create the program directories in ENVARC: and ENV:
	; ****************************
	;
	(if (<> (getassign "ENVARC" "a") "")
		(
		(set ENVDir	("ENVARC:%s" ProductBaseName))
		(onerror
			(abort	("The %s directory could not be created. " ENVDir)
				"This might be because your destination disk or drawer "
				"has no room or is write protected.  This installation "
				"cannot continue."
			)
		)
		(if (= (exists ENVDir) 0)
			(makedir ENVDir)
		)
		(onerror
			(cleanUp)
		)
		)
	)

	(if (<> (getassign "ENV" "a") "")
		(
		(set ENVDir	("ENV:%s" ProductBaseName))
		(onerror
			(abort	("The %s directory could not be created. " ENVDir)
				"This might be because your destination disk or drawer "
				"has no room or is write protected.  This installation "
				"cannot continue."
			)
		)
		(if (= (exists ENVDir) 0)
			(makedir ENVDir)
		)
		(onerror
			(cleanUp)
		)
		)
	)
	)
)


; ****************************
; * ADProStdModules Installation routine
; ****************************
;
(procedure ADProStdModulesInstall
	(
	(makeassign "ADPROINSTALL" ADProDir)


	; ****************************
	; * copy dctv.library to the LIBS: directory, if needed.
	; ****************************
	;
	(if (= InstallDCTVLib 1)
		(
		(set addToMeter	1)
		(incrementMeter)

		(set copyLibFileName	"RAM:dctv.library")
		(set copyLibFileHelp	"This library is required to use the DCTV Operator.\n")
		(set DirPath		"LIBS:")
		(copyLibFile)
		)
	)


	; ****************************
	; * Install the Selected Loaders
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProLoadersDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProLoadersDir) 0)
		(makedir ADProLoadersDir)
	)
	(makeassign "ADPROINSTALL" ADProLoadersDir)
	(onerror
		(cleanUp)
	)

	(if (OR (<> ADProLoadersSet1 0)
		(<> ADProLoadersSet2 0))
		(
		(set moduleArcName	("%s:Loaders.lha" DiskLoaders))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:Loaders.lha"))
			(set moduleArcName	"RAM:Loaders.lha")
		)
		)
	)

	(if (<> ADProLoadersSet1 0)
		(
		(set moduleCurrN	0)
		(set moduleType		"Loader")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProLoadersSet1)
		(while (set moduleFileName (select moduleCurrN
				"ALPHA"
				"ANIM"
				"BACKDROP"
				"BACKLINE"
				"BMP"
				"CLIPBOARD"
				"DPAINT"
				"DV21"
				"GIF"
				"IFF"
				"IMPULSE"
				"MACPAINT"
				"PCX"
				"POINTER"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(if (<> ADProLoadersSet2 0)
		(
		(set moduleCurrN	0)
		(set moduleType		"Loader")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProLoadersSet2)
		(while (set moduleFileName (select moduleCurrN
				"QRT"
				"SCREEN"
				"SCULPT"
				"TEMP"
				"UNIVERSAL"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	; ****************************
	; * Remove the old DPIIE loader, since it's been absorbed by IFF
	; ****************************
	;
	(set deleteFileName	"ADPROINSTALL:DPIIE")
	(deleteIfExists)

	(set deleteFileName	"RAM:Loaders.lha")
	(deleteIfExists)


	; ****************************
	; * Install the dot Loaders
	; ****************************
	;
	(if (<> ADProLoadersDot1 0)
		(
		(set moduleArcName	("%s:LoadersDot.lha" DiskLoadersDot))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:LoadersDot.lha"))
			(set moduleArcName	"RAM:LoadersDot.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Loader")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProLoadersDot1)
		(while (set moduleFileName (select moduleCurrN
				".ALPHA"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:LoadersDot.lha")
	(deleteIfExists)


	; ****************************
	; * Install the FPU-compiled Loaders
	; ****************************
	;
	(if (<> ADProLoadersSet3 0)
		(
		(set moduleArcName	("%s:Loaders%s.lha" DiskLoadersFPU FPUName))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists ("RAM:Loaders%s.lha" FPUName)))
			(set moduleArcName	("RAM:Loaders%s.lha" FPUName))
		)

		(set moduleCurrN	0)
		(set moduleType		"Loader")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProLoadersSet3)
		(while (set moduleFileName (select moduleCurrN
				"FRAMESTORE"
				"JPEG"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	("RAM:Loaders%s.lha" FPUName))
	(deleteIfExists)


	; ****************************
	; * Install the Selected Savers
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProSaversDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProSaversDir) 0)
		(makedir ADProSaversDir)
	)
	(makeassign "ADPROINSTALL" ADProSaversDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProSaversSet1 0)
		(
		(set moduleArcName	("%s:Savers.lha" DiskSavers))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:Savers.lha"))
			(set moduleArcName	"RAM:Savers.lha")
		)
		)
	)

	(if (<> ADProSaversSet1 0)
		(
		(set moduleCurrN	0)
		(set moduleType		"Saver")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProSaversSet1)
		(while (set moduleFileName (select moduleCurrN
				"ANIM"
				"BMP"
				"CLIPBOARD"
				"DPAINT"
				"DPIIE"
				"GIF"
				"IFF"
				"IMPULSE"
				"PCX"
				"POSTSCRIPT"
				"PREFPRINTER"
				"QRT"
				"SCULPT"
				"TEMP"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:Savers.lha")
	(deleteIfExists)


	; ****************************
	; * Install the dot Savers
	; ****************************
	;


	; ****************************
	; * Install the FPU-compiled Savers
	; ****************************
	;
	(if (<> ADProSaversSet2 0)
		(
		(set moduleArcName	("%s:Savers%s.lha" DiskSaversFPU FPUName))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists ("RAM:Savers%s.lha" FPUName)))
			(set moduleArcName	("RAM:Savers%s.lha" FPUName))
		)

		(set moduleCurrN	0)
		(set moduleType		"Saver")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProSaversSet2)
		(while (set moduleFileName (select moduleCurrN
				"FRAMESTORE"
				"JPEG"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	("RAM:Savers%s.lha" FPUName))
	(deleteIfExists)


	; ****************************
	; * Install the Selected Operators
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProOperatorsDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProOperatorsDir) 0)
		(makedir ADProOperatorsDir)
	)
	(makeassign "ADPROINSTALL" ADProOperatorsDir)
	(onerror
		(cleanUp)
	)

	(set deleteFileName	(tackon "ADPROINSTALL:" "Set_Pxl_Aspect"))
	(deleteIfExists)

	(if (OR	(<> ADProOperatorsSet1 0)
		(<> ADProOperatorsSet2 0)
		(<> ADProOperatorsSet3 0))
		(
		(set moduleArcName	("%s:Operators.lha" DiskOperators))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:Operators.lha"))
			(set moduleArcName	"RAM:Operators.lha")
		)
		)
	)

	(if (<> ADProOperatorsSet1 0)
		(
		(set moduleCurrN	0)
		(set moduleType		"Operator")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProOperatorsSet1)
		(while (set moduleFileName (select moduleCurrN
				"Antique"
				"Apply_Map"
				"Blur"
				"Broadcast_Limit"
				"Color_To_Gray"
				"Colorize"
				"Convolve"
				"Crop_Image"
				"Crop_Visual"
				"Define_Pxl_Aspect"
				"DeInterlace"
				"Displace_Pixel"
				"Dynamic_Range"
				"Gray_To_Color"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)
	(if (<> ADProOperatorsSet2 0)
		(
		(set moduleCurrN	0)
		(set moduleType		"Operator")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProOperatorsSet2)
		(while (set moduleFileName (select moduleCurrN
				"Halve"
				"Horizontal_Flip"
				"Interlace"
				"KillTemp"
				"Line_Art"
				"Median_Filter"
				"Mosaic"
				"Negative"
				"Pattern"
				"Rectangle"
				"Rectangle_Visual"
				"Rem_Isolated_Pxls"
				"Rendered_To_Raw"
				"Roll"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)
	(if (<> ADProOperatorsSet3 0)
		(
		(set moduleCurrN	0)
		(set moduleType		"Operator")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProOperatorsSet3)
		(while (set moduleFileName (select moduleCurrN
				"Saturation"
				"Sim_Print"
				"Text_Visual"
				"Tile"
				"Tile_Visual"
				"Vertical_Flip"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:Operators.lha")
	(deleteIfExists)


	; ****************************
	; * Install the dot Operators
	; ****************************
	;
	(if (<> ADProOperatorsDot1 0)
		(
		(set moduleArcName	("%s:OperatorsDot.lha" DiskOperatorsDot))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:OperatorsDot.lha"))
			(set moduleArcName	"RAM:OperatorsDot.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Operator")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProOperatorsDot1)
		(while (set moduleFileName (select moduleCurrN
				".Edit_Palette"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:OperatorsDot.lha")
	(deleteIfExists)


	; ****************************
	; * Install the FPU-compiled Operators
	; ****************************
	;
	(if (<> ADProOperatorsSet4 0)
		(
		(set moduleArcName	("%s:Operators%s.lha" DiskOperatorsFPU FPUName))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists ("RAM:Operators%s.lha" FPUName)))
			(set moduleArcName	("RAM:Operators%s.lha" FPUName))
		)

		(set moduleCurrN	0)
		(set moduleType		"Operator")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProOperatorsSet4)
		(while (set moduleFileName (select moduleCurrN
				"Collapse"
				"Hist_Equalization"
				"Polar_Mosaic"
				"Rotate"
				"Twirl"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	("RAM:Operators%s.lha" FPUName))
	(deleteIfExists)

							; Convolve's matrices
	(if (= 1 InstallConvolutions)
		(
		(if (= (exists ConvolutionsDir) 0)
			(makedir ConvolutionsDir)
		)
		(makeassign "ADPROINSTALL" ConvolutionsDir)
		(onerror
			(cleanUp)
		)

		(set addToMeter 28)			; 28
		(incrementMeter)

		(set workingMsg		"Installing Convolution matrices...")
		(set arcFileName	("%s:Convolutions.lha" DiskConvolutions))
		(set destDirName	"ADPROINSTALL:")
		(dumpLZFile2Dir)
		)
	)

							; Pattern files
	(if (= 1 InstallPatterns)
		(
		(if (= (exists PatternsDir) 0)
			(makedir PatternsDir)
		)
		(makeassign "ADPROINSTALL" PatternsDir)
		(onerror
			(cleanUp)
		)

		(set addToMeter 1)			; 1
		(incrementMeter)

		(set workingMsg		"Installing Pattern operator patterns...")
		(set arcFileName	("%s:Patterns.lha" DiskPatterns))
		(set destDirName	"ADPROINSTALL:")
		(dumpLZFile2Dir)
		)
	)


	; ****************************
	; * Install the Selected Displays
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProDisplaysDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProDisplaysDir) 0)
		(makedir ADProDisplaysDir)
	)
	(makeassign "ADPROINSTALL" ADProDisplaysDir)
	(onerror
		(cleanUp)
	)

	(set moduleArcName	("%s:Displays.lha" DiskDisplays))
	(copyfiles
		(prompt "")
		(help "")
		(source moduleArcName)
		(dest "RAM:")
	)
	(if (= 1 (exists "RAM:Displays.lha"))
		(set moduleArcName	"RAM:Displays.lha")
	)

	(set moduleType		"Display")
	(set moduleDestDir	"ADPROINSTALL:")
	(set moduleCurrN	0)

	; Install the Amiga and Window display modules first.
	;
	(set modulesToDo	1)
	(set moduleFileName	"Amiga")
	(installADProModule)

	(set modulesToDo	1)
	(set moduleFileName	"Window")
	(installADProModule)

	(if (<> ADProDisplaysSet1 0)
		(
		(set modulesToDo	ADProDisplaysSet1)
		(while (set moduleFileName (select moduleCurrN
				"EGS"
				"FC24"
				"OpalVision"
				"Picasso"
				"Retina"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:Displays.lha")
	(deleteIfExists)


	; ****************************
	; * Install the dot Displays
	; ****************************
	;


	; ****************************
	; * Install the Selected Commands
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProCommandsDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProCommandsDir) 0)
		(makedir ADProCommandsDir)
	)
	(makeassign "ADPROINSTALL" ADProCommandsDir)
	(onerror
		(cleanUp)
	)


	; ****************************
	; * Install the dot User Commands
	; ****************************
	;
	)
)


; ****************************
; * ADPro Expansion Modules Installation routine
; ****************************
;
(procedure ADProExpansModulesInstall
	(
	(if (= (exists ADProDir) 0)
		(makedir ADProDir)
	)
	(makeassign "ADPROINSTALL" ADProDir)
	(onerror
		(cleanUp)
	)


	; ****************************
	; * Install the Expansion Loaders
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProLoadersDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProLoadersDir) 0)
		(makedir ADProLoadersDir)
	)
	(makeassign "ADPROINSTALL" ADProLoadersDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProLoadersExpansSet1 0)
		(
		(set moduleArcName	("%s:LoadersExpans.lha" DiskLoadersExpans))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:LoadersExpans.lha"))
			(set moduleArcName	"RAM:LoadersExpans.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Expansion Loader")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProLoadersExpansSet1)
		(while (set moduleFileName (select moduleCurrN
				"CDXL"
				"FC24"
				"FRAMEGRABBER"
				"HAME"
				"IV24"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:LoadersExpans.lha")
	(deleteIfExists)


	; ****************************
	; * Install the Expansion Savers
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProSaversDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProSaversDir) 0)
		(makedir ADProSaversDir)
	)
	(makeassign "ADPROINSTALL" ADProSaversDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProSaversExpansSet1 0)
		(
		(set moduleArcName	("%s:SaversExpans.lha" DiskSaversExpans))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:SaversExpans.lha"))
			(set moduleArcName	"RAM:SaversExpans.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Expansion Saver")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProSaversExpansSet1)
		(while (set moduleFileName (select moduleCurrN
				"A2410"
				"CDXL"
				"FC24"
				"HAME"
				"HARLEQUIN"
				"IV24"
				"RESOLVER"
				"VT_BUFFER"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:SaversExpans.lha")
	(deleteIfExists)


	; ****************************
	; * Install the Expansion Operators
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProOperatorsDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProOperatorsDir) 0)
		(makedir ADProOperatorsDir)
	)
	(makeassign "ADPROINSTALL" ADProOperatorsDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProOperatorsExpansSet1 0)
		(
		(set moduleArcName	("%s:OperatorsExpans.lha" DiskOperatorsExpans))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:OperatorsExpans.lha"))
			(set moduleArcName	"RAM:OperatorsExpans.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Expansion Operator")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProOperatorsExpansSet1)
		(while (set moduleFileName (select moduleCurrN
				"DCTV"
				"TPort_Controller"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:OperatorsExpans.lha")
	(deleteIfExists)
	)
)


; ****************************
; * ADPro Independent (Third-Party) Modules Installation routine
; ****************************
;
(procedure ADProIndepModulesInstall
	(
	(if (= (exists ADProDir) 0)
		(makedir ADProDir)
	)
	(makeassign "ADPROINSTALL" ADProDir)
	(onerror
		(cleanUp)
	)


	; ****************************
	; * Install the Independent (Third-Party) Loaders
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProLoadersDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProLoadersDir) 0)
		(makedir ADProLoadersDir)
	)
	(makeassign "ADPROINSTALL" ADProLoadersDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProLoadersIndepSet1 0)
		(
		(set moduleArcName	("%s:LoadersIndep.lha" DiskLoadersIndep))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:LoadersIndep.lha"))
			(set moduleArcName	"RAM:LoadersIndep.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Third-Party Loader")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProLoadersIndepSet1)
		(while (set moduleFileName (select moduleCurrN
				"FLC"
				"FRACTAL2000"
				"ICO"
				"ICON"
				"PAR_PEG"
				"VLAB"
				"YUVN"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:LoadersIndep.lha")
	(deleteIfExists)

							; FRACTAL 2000 iteration files
	(if (= 1 InstallF2KIters)
		(
		(if (= (exists F2KItersDir) 0)
			(makedir F2KItersDir)
		)
		(makeassign "ADPROINSTALL" F2KItersDir)
		(onerror
			(cleanUp)
		)

		(set addToMeter 1)			; 1
		(incrementMeter)

		(set workingMsg		"Installing sample FRACTAL2000 iteration files...")
		(set arcFileName	("%s:F2KIters.lha" DiskF2KIters))
		(set destDirName	"ADPROINSTALL:")
		(dumpLZFile2Dir)
		)
	)


	; ****************************
	; * Install the Independent (Third-Party) Savers
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProSaversDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProSaversDir) 0)
		(makedir ADProSaversDir)
	)
	(makeassign "ADPROINSTALL" ADProSaversDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProSaversIndepSet1 0)
		(
		(set moduleArcName	("%s:SaversIndep.lha" DiskSaversIndep))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:SaversIndep.lha"))
			(set moduleArcName	"RAM:SaversIndep.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Third-Party Saver")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProSaversIndepSet1)
		(while (set moduleFileName (select moduleCurrN
				"ICON"
				"OPALVISION"
				"PICASSO"
				"RETINA"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:SaversIndep.lha")
	(deleteIfExists)


	; ****************************
	; * Install the Independent (Third-Party) Operators
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProOperatorsDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProOperatorsDir) 0)
		(makedir ADProOperatorsDir)
	)
	(makeassign "ADPROINSTALL" ADProOperatorsDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProOperatorsIndepSet1 0)
		(
		(set moduleArcName	("%s:OperatorsIndep.lha" DiskOperatorsIndep))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:OperatorsIndep.lha"))
			(set moduleArcName	"RAM:OperatorsIndep.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Third-Party Operator")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProOperatorsIndepSet1)
		(while (set moduleFileName (select moduleCurrN
				"Intensity_Range"
				"OpalPaint"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:OperatorsIndep.lha")
	(deleteIfExists)
	)
)


; ****************************
; * ADPro Pseudo Modules Installation routine
; ****************************
;
(procedure ADProPseudoModulesInstall
	(
	(if (= (exists ADProDir) 0)
		(makedir ADProDir)
	)
	(makeassign "ADPROINSTALL" ADProDir)
	(onerror
		(cleanUp)
	)


	; ****************************
	; * Install the Pseudo Loaders
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProLoadersDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProLoadersDir) 0)
		(makedir ADProLoadersDir)
	)
	(makeassign "ADPROINSTALL" ADProLoadersDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProLoadersPseudoSet1 0)
		(
		(set moduleArcName	("%s:LoadersPseudo.lha" DiskLoadersPseudo))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:LoadersPseudo.lha"))
			(set moduleArcName	"RAM:LoadersPseudo.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Pseudo Loader")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProLoadersPseudoSet1)
		(while (set moduleFileName (select moduleCurrN
				"_LoadNShowFC24"
				"_LoadNShowOV"
				"_LoadNShowPICASSO"
				"_LoadNShowRETINA"
				"_VT_Grab"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:LoadersPseudo.lha")
	(deleteIfExists)


	; ****************************
	; * Install the Pseudo Savers
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProSaversDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProSaversDir) 0)
		(makedir ADProSaversDir)
	)
	(makeassign "ADPROINSTALL" ADProSaversDir)
	(onerror
		(cleanUp)
	)

	(if (<> ADProSaversPseudoSet1 0)
		(
		(set moduleArcName	("%s:SaversPseudo.lha" DiskSaversPseudo))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:SaversPseudo.lha"))
			(set moduleArcName	"RAM:SaversPseudo.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Pseudo Saver")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProSaversPseudoSet1)
		(while (set moduleFileName (select moduleCurrN
				"_MultiCopyPREFPRINTER"
				"_SCULPTWithDimen"
				"_VT_Display"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:SaversPseudo.lha")
	(deleteIfExists)


	; ****************************
	; * Install the Pseudo Operators
	; ****************************
	;
	(onerror
		(abort	("The directory %s could not be created. " ADProOperatorsDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProOperatorsDir) 0)
		(makedir ADProOperatorsDir)
	)
	(makeassign "ADPROINSTALL" ADProOperatorsDir)
	(onerror
		(cleanUp)
	)

	(set deleteFileName	(tackon "ADPROINSTALL:" "_ScaleToAspect"))
	(deleteIfExists)

	(if (<> ADProOperatorsPseudoSet1 0)
		(
		(set moduleArcName	("%s:OperatorsPseudo.lha" DiskOperatorsPseudo))
		(copyfiles
			(prompt "")
			(help "")
			(source moduleArcName)
			(dest "RAM:")
		)
		(if (= 1 (exists "RAM:OperatorsPseudo.lha"))
			(set moduleArcName	"RAM:OperatorsPseudo.lha")
		)

		(set moduleCurrN	0)
		(set moduleType		"Pseudo Operator")
		(set moduleDestDir	"ADPROINSTALL:")
		(set modulesToDo	ADProOperatorsPseudoSet1)
		(while (set moduleFileName (select moduleCurrN
				"_ColorCharcoal"
				"_DoubleSize"
				"_Emboss"
				"_Fresco"
				"_Highlight"
				"_Mirror"
				"_OilPaint"
				"_RemapNRerender"
				"_RotateImage"
				"_ScaleToPixelAspect"
				"_Solarize"
				""))
			(installADProModule)
			(set moduleCurrN	(+ moduleCurrN 1))
		)
		)
	)

	(set deleteFileName	"RAM:OperatorsPseudo.lha")
	(deleteIfExists)
	)
)


; ****************************
; * FRED Installation routine
; ****************************
;
(procedure FREDInstall
	(
	(if (= (exists FREDDir) 0)
		(makedir FREDDir)
	)
	(makeassign "ADPROINSTALL" FREDDir)
	(onerror
		(cleanUp)
	)

	(set deleteFileName	(tackon "ADPROINSTALL:" "FredDefaults"))
	(deleteIfExists)

	(set AnimOpsDir	(tackon FREDDir "AnimOps"))
	(if (= (exists AnimOpsDir) 0)
		(makedir AnimOpsDir)
		(
		(set deleteFileName	(tackon AnimOpsDir "TimeStretch"))
		(deleteIfExists)
		)
	)

	(set addToMeter	2)
	(incrementMeter)

	(set workingMsg		"Installing FRED...")
	(set arcFileName	("%s:FRED.lha" DiskFREDPgm))
	(set destDirName	"ADPROINSTALL:")
	(dumpLZFile2Dir)

	(set addToMeter	3)
	(incrementMeter)

	(if (= (exists AnimOpsDir) 0)
		(makedir AnimOpsDir)
	)
	(makeassign "ADPROINSTALL" AnimOpsDir)
	(onerror
		(cleanUp)
	)
	(set workingMsg		"Installing AnimOps...")
	(set arcFileName	("%s:AnimOps.lha" DiskAnimOps))
	(set destDirName	"ADPROINSTALL:")
	(dumpLZFile2Dir)

	(if (= (exists (tackon FREDDir "Sequences")) 0)
		(makedir (tackon FREDDir "Sequences"))
	)

	(if (= (exists (tackon FREDDir "Projects")) 0)
		(makedir (tackon FREDDir "Projects"))
	)
	)
)


; ****************************
; * ARexxScript Installation routine
; ****************************
;
(procedure ARexxScriptInstall
	(
	(onerror
		(abort	("The directory %s could not be created. " ADProScriptDir)
			"This might be because your destination disk or drawer "
			"has no room or is write protected. This installation "
			"cannot continue."
		)
	)
	(if (= (exists ADProScriptDir) 0)
		(makedir ADProScriptDir)
	)
	(makeassign "ADPROINSTALL" ADProScriptDir)
	(onerror
		(cleanUp)
	)

	(set deleteFileName	(tackon "ADPROINSTALL:" "ScaleToAspect.adpro"))
	(deleteIfExists)

	(set addToMeter	1)				; 1 operation
	(incrementMeter)

	(set workingMsg		("Installing %s ARexx Scripts..." ProductBaseName))
	(set arcFileName	("%s:ADProScripts.lha" DiskADProScripts))
	(set destDirName	"ADPROINSTALL:")
	(dumpLZFile2Dir)

	(if (<> (exists (tackon ADProDir ("%s.info" ProductBaseName))) 0)
		(
		(tooltype
			(prompt		"")
			(help		"")
			(dest		(tackon ADProDir ProductBaseName))
			(settooltype	"REXXDIR" "ADPROSCRIPTS:")
			(noposition)
		)
		)
	)

	(makeassign "ADPROINSTALL" FREDScriptDir)

	(set addToMeter	1)				; 1 operation
	(incrementMeter)

	(set workingMsg		"Installing FRED ARexx Scripts...")
	(set arcFileName	("%s:FREDScripts.lha" DiskFREDScripts))
	(set destDirName	"ADPROINSTALL:")
	(dumpLZFile2Dir)
	)
)


; ****************************
; * Splitz & Joinz Installation routine
; ****************************
;
(procedure SplitzJoinzInstall
	(
	(if (IN SJOpts 0)				; Amiga version
		(
		(makeassign "ADPROINSTALL" SJAmigaDir)

		(set addToMeter	4)
		(incrementMeter)

		(set workingMsg		"Installing Amiga Splitz & Joinz...")
		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"splitz")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"splitz.info")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"joinz")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"joinz.info")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)
		)
	)

	(if (IN SJOpts 1)				; Macintosh version
		(
		(makeassign "ADPROINSTALL" SJMacDir)

		(set addToMeter	2)
		(incrementMeter)

		(set workingMsg		"Installing Macintosh Splitz & Joinz...")
		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"macsplit.hqx")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"macreadme.hqx")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)
		)
	)

	(if (IN SJOpts 2)				; PC/MS-DOS version
		(
		(makeassign "ADPROINSTALL" SJDOSDir)

		(set addToMeter	2)
		(incrementMeter)

		(set workingMsg		"Installing PC/MS-DOS Splitz & Joinz...")
		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"splitz.exe")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"joinz.exe")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)
		)
	)

	(if (IN SJOpts 3)				; PC/MS-Windows version
		(
		(makeassign "ADPROINSTALL" SJWindowsDir)

		(set addToMeter	3)
		(incrementMeter)

		(set workingMsg		"Installing PC/MS-Windows Splitz & Joinz...")
		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"wsplitz.exe")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"wjoinz.exe")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:S_J.lha" DiskSplitzJoinz))
		(set srcFileName	"wininst.txt")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)
		)
	)
	)
)


; ****************************
; * ZapDPI Installation routine
; ****************************
;
(procedure ZapDPIInstall
	(
	(if (IN ZapDPIOpts 0)				; ZapDPI Program
		(
		(makeassign "ADPROINSTALL" ZapDPIPgmDir)

		(set addToMeter	2)
		(incrementMeter)

		(set workingMsg		"Installing ZapDPI utility...")
		(set arcFileName	("%s:ZapDPI.lha" DiskZapDPI))
		(set srcFileName	"ZapDPI")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:ZapDPI.lha" DiskZapDPI))
		(set srcFileName	"ZapDPI.info")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)
		)
	)

	(if (IN ZapDPIOpts 1)				; ZapDPI Scripts
		(
		(makeassign "ADPROINSTALL" ZapDPIScriptsDir)

		(set addToMeter	3)
		(incrementMeter)

		(set workingMsg		"Installing ZapDPI ARexx scripts...")
		(set arcFileName	("%s:ZapDPI.lha" DiskZapDPI))
		(set srcFileName	"ZapDPI.adpro")
		(set destDirName	"ADPROINSTALL:")
		(extractLZFile2Dir)

		(set arcFileName	("%s:~6#w{ؚKר;oxqV'1o]U!*8î1w);*IQsZˉljF/ŮQeG޼,]S`mπOIzh)fELGyGobGڞ)OGS}iqk5DL֮e~=AYgOCY{N!>ԀXlZ9"yEX\]<_uki`3#}ԟ1=ȩW諺2I&nMOatyyFj/tg+﷨q7(ϗ_P[LLKT &n^ E[*2H53湀Myx<YM;MD6E$wl)'Q)g̹z_\a-" &3sT(**:Ar!Qa,dDɛR;ꞍfR޽?z&'N~Zcd@AƮkĶhC 2n
74еd6U2#j^]
kT}:^:qY+*}ii=7}]JM;Sc*ܵl vН.˛cU'j:~rq+}*nsEfuxё@}VA޳+|>{Kg9{|p<mW)'QQZ?RhfXI1LePʅMQRFFEʍҏYE%Ej1c(%J93A)4jiԹSSSSS驼SOAOMOMRKKU8U*U*ӪU«^zIW|	WW5V2e+VzEu
+WWKiKke2)oB[q-oeon[[~fZ-KjJ{-zQUP=ZTE[^z/̳=Ҍ^3ޢ*8]7}+Xsߎ诌%ݾ]ϞH%
2R$-_,0IRr{Us޿6f{_:ߠ6i{?7:=F_T=!r(ͫ
e&OVgu#`|D͟?6o='P={	wMe;w }	}s ;Urɳ:ψjMr,fQ1.r^R%vσxq$;jL٧#ގ?u!R
8'
?7=?7@;Aw^=H?5=--ǱjAqߚx⤙|\(SjGLS~i~8~+G쳣 fNݽg4%v-YS:vpz5ݞ4nWPZBڏvL/_n=ӿ5I߈wq8>]aU3
~6֏}g77@o 9obGz- ы!w]QkN"1!	$̍XiU8{}HW ~C| I#`{w@)6+t촪} SC1b 4e!<  	08=kψ=!	Oޏ{W7+{cJ܆4G\X+I._+]ϱ;Ua.`Qۭh1/X`Qz|| ˦>Sg90QYPe}NU^*BaN]\_\l`ݣaޫU+3Hu?mtPQPLP}^Qlb_#rz8ϬbiA`)5Z+ r˦-<o{^`ۿcYE	Ha:nCE..KW"1խ-%	"}s>#kVs|'ә:\Q6Zt$X{z:s)nI#fNQD+ҟOo"&S$SE;|0!;V̾C#- .kGukf{	#5&f82.3]nlBoDRw߇)z8z<`Dv^3S2˞1czf]{X>nqNLA3wa`x"j[("ݬ^3"S閂<A{m0iJh^OݾWP1c0BwY/ M}mG_;ea%#e̴{WٞwL=w3ynnC>S{Qy"ǕE>y4OLTvPY]][J%MT=qԵIԦ7rCzcyכ(3p`D Ftϑ'o6eiƟpH.<pՉ&(P2D/`nIA9:徟,J$u	($fn#*_$bgazN;Lh;XxySZUn|f9`#2jd;z$ӷ'o9sC809wH7KɣŔtDa*Qco7Ӄ'?e#cHXRNug9}G=FRe"|A;iӷv߹ |Z)k3'^8m{QϚ⃯UFVyn;ykw!ڄf.B3r>%ƕҜIG&[;ORdpnrmIz@x7%ɽ!}4{b=V B}n|H~H;s~m7Z]Ykpؼ֍_&L3L?ObkS2Ybŵ)ISA;[H-27wg~;Y+y~&g*[D<#ϋ;&aL+_#;'|&Z9;GcJlՐy\4W8o>irgMW&~LXIwqg4~2wx'vOd;!y̅e1ly. cad&aTs\%6f=H,RlALI+-	lhC5ab}k4P4Ol [r0Ɂa[i*jyZ1`?vi[.нΆڊ;*㧅ejrt7c<-F^Ku
`mّKh&ԍGfɫ\X<
',B1ެѱ	fԄY:a ۴Z亃^ͯKl1Ӗˊpfn:UV>mazZO]"҉ D{禮.T(^?dgDi929Vz\`	~铵RYht}'dxyr='~NmRStdd߾JjvekE,"[egR$h[a[b_l~ƚsZ+_'U0:ƒpXHZ&2K,dܒj+_W`^Q^s+YJ{+ܻܺ
Y|q\6Ya59hf90r#'4@X.FF!gQ:A<fP{5%``	)2⺤
B	.,K~ٍdUxC(@<=ۗgF,顩Ӌ6vً6Ջ5f$XϢ?!]㿟Ěɮ0j=%WR>:c6}{Ȑih#XV!Wlᩬ+1 2/傲Gǜ7#UO:QXTz5+ +b,+LhU*
1_/L.0j3ͬU
3k+MDeaS><]SbF LksX=piVbp~U0LRiT>F$@6?4a53pʍ =JgyX=T2@3Iȍ?zCUvajX}7O\qN\MC^1 I|5@3Y8)ܥ6(B/(Iag4>+oEyoE->_1G;_CYjMwEb=FikD3jmur[
M-UmޕaZ0lEY鬁ǜ@=lW>,o~[u9.$%oT8l57p՟w۟߭CWB0k'ĳBgOcmD{W^'}J*o~7Up@_ㆆT`6vMR_<VsQfUkkV0y22BZQ d&^\4[+	rKNQX'§7_fxySIĔy]讝Юڝ5kJ8b||q|T.tDd^w>ğ^IϔII`L\y`C/I-`[?k50{ȝENYx<MBr{@ӫ DQ:h|9ao{&H;+IskW7TR	Fc%kAElU;XF6(9?ZG{rsőJKד꥓2MJ$BԩoǬK>vF)gҿ{v>N1;pҗ
vCURE yS/O؉o͇B}%@>,
0&GH4߱.cE2\_2;j{Nx,'T*wo=SJ-ZeĎJ_r9x3e;+L¿uc!H)wlMrcd#8>hA- &-%Z$I l-T{؀N0McyNX&-4w&ⷅNK
*-H;"'
E7Mc[g&$9>v$`!2o/uB,VtmiѽV7!0hU:!LH	*oKgwo::_.&̒ DPs!Y y,z~_u,vI4Δg.;ig4wl{p`Ijg랛ksx3RSvwo?ivy4B1/m `X* `XnVsWrOQ-
k{(|WDT
 ~.|W%
I Nb(k٭?,G4e257@܎k|~s_TY~n/su[*{H/۟Fvݿ%<ak?4IΥ0{i,?jwg쉃c>dl|Э4rfZɎ?Ț!fDNuKRljnT ZgǷv ;CNQZ~cX'#I3z$׫z͗*Vڦq 3H7*V?]v~bK?}m?ajER3WDJ{<Vd/*3?e]䎻N<m|!_oS\5..?.?9qY'f\q,Wxy%:«X*x2B1hh>V?#zL#HoY7yG $#w#R?}(xܑqPhq;o7|W`tn'<ѿ#nrdw7h0ο9_7a~pݦe
"D9dnL]_S%8whE2\E秩椓وF=Srz!;~ F$3"i(돾^{ #Tw|l
 ~6<+Z{zvϔۙv	֣RdTٌdeɉauQoڙ-:0Aoℑb)w(u0g"-O6
``e~ّ<FS6=<ŕ2y:+,?~ٿn2f}4}akxJ,,_@yۏ<lTƄ8Q|/hv-6C>
Vld9llk~͑`o/ :\0W\揾B49-=gۍ[Ejrﷱ|:ZG:3>c<iDMv}qjGô|t6?ࢅh҈`Pu۾.LpO%]y`O/{<yksKpU,>Pli#۶>we?b>Z,	^|	oa'ݸ&%;1vxg.I˼e]F>b5o[n,ZQXqShy}1NvM]ݦ2A
@`'&~1tL-Ǿ2Ԏs{ӂ~3:zqZa'kt)l>Ȧ]
PExܙ=.ϧeן/>_&ky6=/ۓџ'8t'I3/imt	߳ïJ8:\]g,D$xLӈJŎ;/Uԍ=C[<O3)i><iS3XhH3vCln(ɋIEO5	gxf}yGQ7n @!s{!hD,~Ϫ|w%S,HKoxD׽ٴ۟$B8㎺(mpB40c"eq"s:D3<49x1κ)^Μ=#
}I0	Y{}KwwvFBˏm^M_aĂ!_iWWPWc=偖qMCn		bfX۾{S#iJ"c697*Q*gLMfIt+l%LF[;Rd/ڍI6
:R]/n8ۅ#F2yk16ͺRWf9xR7.JaRd-_`o=	7>.s|ß2H)y.Qbʩ?]y(_)MhDpREx+\Qz7("VxVޞGr=/9=90i}^"R$;6 x9rHߴN|)K)\eͱHם$0JWDvń3h1kUQ&@zxWeLY;.$K@5؏P;Gkz{z.Qz
UNN|2}*{{(|'M;1:``sYIOm))OVj<WѫtvP

Mo6m^g2dngݗ0wHʐMQjˡ#O-9&yz+P^Fq? xj2P[FQc=BRTJ~2NnժFww'ֶkG#a})LDyKJS6()-m*z]|_0YV|2eX0īX!jJ#ǧ׍a>,u^lT熥R%ڗ|Ի`vyESU+d`T܁| V% w'Ǹ_:Ŀ'U10T?}=&)OväΘ$]eJ h	j`;$#I=\M( _9:Bf ӬÞlԥ[<-cbZL,S0FF@12~<7?TDUKl3%b}WnH}:n.n^+	R[pY(Ce"[.lgFKt<Rj/X_(f~8o&FÿQߠ30S|iG鴷߹8~	$XgLˎ|VEu-}^OSm@;myڠ}G9oLeSX g1,EXnGDIK8M<
}RouZc#i,4HrOzHI|qvW%)+֥|TDuݼ[M`AJ/>ꆄ6tyH"%pQ~8cWG<i^@Xٱz)_*8YeR)M'@<N&8)e<L6{Sin[FzDr?ӃB޳)~)@ӤЁNIhmUjÍNLNdktʵj1:TT|`kYWkroK݌@{yuo!b9bUMS2MDNd+r²76^s\W53C^b<WF>j  _Cw 0=V1zOVIuRk6N#::@ZM0w
kfSR	̵$2-4< qéҴS||dwL۔FλHxw6|)ʩѩ?[<O䳑ESj̻d/t풔2%ϳ{?A<PꋲvsqOe#oK|:gKI),OMWa:j mDl%Рl<7f8nCϼMDQyQ?8;S?x̀H!='^Uf`omJ͆ZH:cajEzENwk} Pu.c\empF)8~.ɳ1_V.yƥU9%(?}ǲ+Us?24#I&d4=+Dw̏N?},zw4lٹs$#	x0_IM ޙ^νTPrs;R0zx5ΜixU뎎;LAY̯$ZUB h#ų\B͝p7FC? -ާ<:X2R;vN hڐpز0J~E&t6/*g/,E͞ޤ?wqh_*,&Cf|mU|ʴze9.w"9+~WpʸX="X#7XP?dÂXЃ=xCSl܄g̑2,nsChs!\sA/9.m{op[ǌ}>v-oOkL[L񀕙4n8 :`Nތ>n98j}sVbæp
wJCgLEK.T6\<?-ҊSwE߽#5e(LQӶ%)TQ2F(ygP9#ڴ>[pwTCP9@Oٞ}OcN)jIw1>aLM+.{?\xL
*.:%sTPrJIKtQ%]Eho5fg@jsҴ''dsRNC*%+m/*Inw<}\qc/SO>C>
dhU&Ydj$d/T=%{8%@7|'+Útn\	R<޹U:9PR0*jM͇o ^1 ]yyNܼ]R=ye旕'S&K/++Nt^|KrFq=9P?}/:.	yKֶ/?rW926G/>-9yi/9;'п/?{x^~Լ̋o/3>emɶ4c==OPMa~̼&r}OCenvSƺZĎ|ؗJi*Қ/<+w$Mt欴Aw=\9K|Yk_x;!B^ c@Ҹ#̷%72X##ne^@LcR0M,>agGփQ2]!2]TG0\
ί]Z._Gԑ Dɱ8esLNo-FI1c[\-[	MX%c2|.'N(ca
}UZzR3l4oϘ=pq
f=He\24459,!gN1&5ů/ւYSO!O8MY|9A=s6:f20T!(83ZfyzX3y(30>>TcύHk\2w97T;W8ǄjdMP(rbHqj0Gd>ُ9#\|`(Ne c?Ć8T~!%}镛^{K!~`PmA?O̲skKa,+AM{=Ld =XMp=4"/F]R!)dѻ=<'x2>Fm/ג7KWA2EI.1"1 z ۭ!n6t:ز|L=ATy| v0
; EPnpGJyKX	9#3JyhœqHkK-)0^tQpʝ<ڎ&w5ַ3.I_-y\ikXm0Ma#.vI2q쎱sw|k[A	W4O΁w<HQS$Bqοnc㎊x;h#wY:7V%"JRZrPc9޵g؆1l'$.bX=-c974Ƌ<:ek;F4
IwɘrЙa0R)^P
X1vEMiʚZeNzz:MnZTOu]]C?ꖻybT{4ugO},<1p-	w3EbNdղ'Rn׆t}hHZjɺVTbswy.iq}y\?^w%\]4,N_<@\D-F#]˺~]"茴U
:s!U ]L`T!kzҦHX
|8:9,H^6 8yWS>s_]j&6uAD[G9fnu2'I~\qJ{T{8QlQ)la1t栴\JW-ߢWw`nN:NN)U9ckjkذe"/ʲ/?.4/@uUn`T׷I+Ϡ3DzV5nL<NƸ?$H(}Ey
Mf}:*~WO# x~t

$ހ\X6B4ۖ,mm3i蕞,Nz̛ȉh%L6/,-W}Ű	)&ȻC<ܡ26rCq>麶JLt>!=UflA=\Kw%xylEdp
(HtBf5|Lol쁞4yzלIsfi-3͉u6ҰZ-["d-XC
gI۵bUє$JM_Mw]y<ڛMFKi'?8[.tC6{>]upwG7j'y~I0'`Ohyd{{.*]өw{U.ީwR]ةwRz x*]锻RB -D=̏oZzD4R1ٖD%϶6{b>я軨b>a_t=s">>͏Ŝ{CH{>>Ș޸gG٣4OY?}gl#M<}@WݩOuL>y¸2< Nz{XgY{LOE8ޠ}u#u0QZ,}v>Џ]`YP3}Q~>kӽzSԍ//6F3ΈjCh|v+&>_ӻx`D*ۏuBɸ|ѣXڿ(i`3'(9AF _Տ ھ	q~p}31\{an^
n@FS^Pe;~'oG??,o><jCJG3ЂNmff3Qm@W_ ?6~8^4i|>@~-hAǐFf+AP)\.5/c'$%M'o\5pL5ҡ#GСA`VPEsv}&>xixk{B>*x э}gY32R2X4fJ}Tf5dWpȆYD}C2ġݏM".$a2r7R0\͉zKऐ_E	a15V))MK	QY_ţ,ɿ/ȗ'I+%gRJT,
reF~@x%8di`@p1iaa3*$6b|EDpV_DBf/{HpWynk6+x>vςojId|_"UEۛR 0VCG#)Fybԣ}E(4oKvtGw/*<_T!?('%敟~Tz>vTbUۢlj81dŢ\
78YL|>,jeLTHEl* Ug*ǞbLbEFQxH`>iYFx{&Ƣ1DޢIUӣ tqQF.6lH,oiRyQ)G~_Ģg~U
(TQTQIèKEQQ?GbtWCFIZ2qT\EQT"**.t(G֒?Q%_ub{K˻B9|nG؅px{-w=kv;-_aVjup4z'ZE>w9Le9mӆy<CECA>u6HMLKJ1`rf&?>qu8sG?мQwH;X}VRT̨eܟ?L{N.}yS(܋~Sr`wb8^Kaz/K`eþm4`f>qr܅BuAdƳu@MQ<p9HI=WXF}#͚>XyXvdŨuK<3e}6Yu[HwDy(. R'X5,=55jMS҈b3;A4޷홥(zw@]jdyR<l4lVm!N׉1pY64]$AvЬ|C*^Λ.)v+ ;)g;|Pw0vOxˆxqS	=y]'B 	_v,$I<͐hB_s|ZiF^7C0PP^s~iZQ0W"}UU^wwCTs9&YV)v?[05nLƳͩgxiy2pQ#8QH+a:>se`dC-I$ޞ;\`矝(h5FDzJ727!>_?XDzW?e{P٭tY1խ޽^&UĒWf/N'ap"-E"|gZ\$Uȏ+
oH9wz0feFgfOX$w6<רfo5؟*!ٖ?v@2::ꩄ<T"Խ7nSqDH;wKLA k
>=>%?yԽr}~Ħq䷾n>*L;W'~+yѴw>OrX=?>}0S7o.0E--ԙU3S7bpǎmƉ'4dU]EUΡg"RT(ޭ3OAͷz\\6eo޽A[7,#O
?^?;K+$geb$ukup8u4Ukŝ\nJ
'm<i,8SV%
5u>MWO9$[盽\$',L0F؂7>H6䮪Bu@d,|=XÉ~P)|[e0uc~0g>؄e"0)	61zoM"'.K#2&@ &#=ȟ
+6	؊&^ųXȢDQwGtSE;Wn_nΊ-AEӸ>p5:қF, 7\z_A%O?pfr~D	|el{`?7OSb0w*mQJT5{^6w`K2 {*av==CͷC;RHBx`Bau/ֹ':9Mȝpsx O`;<|~HN	k4`Foc,,~r=j/:IU9p<5,Y矼.7 $L;GDhYhO422nUrӹNafsakQPN0O듘Е_W:5/RsJ_pIQ6Xp;əҲlmsVQWuWH#N
{)J)©!/0ƨgP;r-U2zB[`Z̩j5ȕF)ۛCժ+u@KǵGDi.BqJJuњ9˨rbiq󝦤TTseӸ6hM@:#ђU|(=j{F#e/Q6-[^42j%^Ct)/j^f|d䓟rvxu&an'i]-úP,Jkl>kC|{rwDnԜgZH-=-ۨYcTW=Sin|ʻȡ%%J'BJ'ı%QvuTLWIꮺ=y~TȩMU38
(OpS}2Zi<ux=R׸th1o7mRdU-K%;zkhzvOӲ5',S7\7;	IÙw9A{欱'ˎ7v7b2s)p43\&*l&}ٶkؒd738MmĉA{? Lω m$H:%̃cv/su"P?]tbqݱfԂblB?ޘԘuVnRSɕPz`_UA)+κC~zXNDW/ADl`>"[u،〟޻zb_o,Ort񋸣4vՓeṭmݹmScM
R[qq3p~Lp'3с{YɌa)VNcr˪IFMvapdtZ0?`Mx)bF-2bq1?kRi
EYtcO3q;yYυƾ]-n͒.~Km_C23X+jw~sN]!,MaϦX}7z8i[(wGڬ|47[Uˌ:x716bmIOï!:;*s8-UPO	M͙|6s\7|_-ՙ
zCL>,#9Mbr%^o\]WD8cf7/4"~G?8~]kaW> >些4^NF܍"G8OP[FTtɻȿ&uVݾFq/Dq7A6v]I')q@a/ldE}~ٯ&Bw0cJۊGUB',qc؉ʟMZyR^
tHD,,ZU?VVYWó8e^V@SҲ(s;
jpgTZʷ`|=W/f#,b#2F7@|[U4Xr@Pg[۪dHp.;ZZf35F{YD$F<AY
(@*pܺ_OJ:8]@UoѦh2FrLxpN:	u[+'T-X|maFC	K ?7柒ƌ_Aǲf7)jHRec))60ߞۙ.SgX
Ǘ.lmi"cFk/RUCM#^E2C{_dh2Qs1zaI܇qX"͈3~vhv	ᾟ9I$D*ذr]k+DF׶󙎼_gT"zZ` iM{Ot0:&I={SbzGynúWuI&W`^)oA+N!Ga:'@_Y_bПXB$ssf_4֜TWfy^]+ůSF-Lm-ɔyvm`8)bٮpHk\vk0>^3m; <Nϻ'1xj߿7v?8
\^p=oSp<8T_NL>ToM'I'ao}s}oەCBxcJ)O#eC\GR*Ĩ9e \~Mq d.Bԛ"Dw\E8;ޭLG< /:A!RΙϝ(oͧy/BMN6ı{1/r7/x˖`ܿ]~ϼ_~P_bbPoC/a_ߨ_&>~/S,TM$p0]҆?#"GC/.Y8њ=h+o>`E |0PA/ ~? Bw=Qb.MirvL~q#0I=SR'? ̜Q,=OViW/վwg[O+4cZۙjN@ ϕ֘[Sp\ 00N"חP4zzPU"ΓLSuєwy;7h(ӪrԘ]<ҿ&jbd	0LPrKj7]MgLw7EqɠNf`>퉫NVj6`K5wJԟڣd\Dm$Q㠺[AӰ+kCSk
jn?,X9CˋnKzQ92Ă/ړ{A3,~PKQ8E{S>{»0du	ʌՇz<zC1yB%@i"Y;ו.>k1vNMN֧(pnJ+	!28ߍd4֮wpV˚\љcJ';8egLA$ѯGͯT#-ʇmֻ-]<@	n<!pPUvp[*&>"*K>N-9"ǐq깏@>x5rDr/TFܵm,ªVыC3#NQtk[JJoF (JJ>/c]6cfv mz?Y 5e6EڧxB-#΀pjW3%KfG⏎k>MScqq/{XM>-ͶsϥZCb]	5<LvZƽ`Y$eJzSNt:52C<SW]p:鳜P=X$[U߫mdۣ{Ͻk4y}/^x*o[@3|[I޳5'm] <),<ӏ<qӻwRYY#Oe#X⿤z7fDI</-DQ1떓 3"=F$Vh%(8W ]ܛ.-x;Ҙt3.U=5U⏶ڵʮ
	ѮcF\a%duc81囦Nk	hė~`l&?S)<hg)xX5.¤Oüx,ւ恩Fw]DG)XkǺ֟ :F#ܲ@"=7hw/@3Ȣ;ļIy`LCKwv
qEhFW_MnZ;8oqݹ,56#Vy1,f4-͊-FdQjz$9|1)4ٙA#GfTSqJ
<Z%Tp #ۚ+Ky\;ruGtHXrn*D}7/d@Ŀrn8\BL['t6=Lb,MwxV	&3~pl7zu[*U)3㽮RЩ6"9,pl{,C4$VE	N
)1/}n](:hjJwzAK!lhmrM eLSӾ'y&Ceqܗ6L*uS=kbe$1,][)KQWVIFS`շOu"[cLW@DfoP/n'f9Q{BBDF!3~S^7ؙq)6*啑F뎠3	cp_'35ligȴzRyR|3"Z<TVnE&ow2p,BŘْVaOdz4Y۽$m,vhub8WdEۚ%KC.:RK$wp!CeR(йY
,vR径, LӉ̇kX][YW9&wqZ@fh03ct ~W>IHb%yWV"grY-ȿ=ͮeiIt5\2zV:OQXs  A,7>YrH>
qҴ1ȍ,AK-}[Wld&>g!wB,jЇƒϡ'˼6uƗlե0WE
JS
z
'uN--1?an Քz:6hDK?")2ضgkIi]YKK%[	`}4+};malqp*:_*Try5zYG@|NLq'=[lQ^N;dg2sdz2c+|̭ĭi+1?c#ϛF=GdLmYe,-_j"mkȢ֨ƻ$:dggmuf1MJ0Xs$kʆ.;ڿ<-<wKNEdpYwy5r]xط$3#ثVX}3܌o t䖼I5c.7;+sԗ&Y.<"zt8z;H峉8`Ht`Zv].{T:[|Pi3mRq-;^7SC\Ғ&pZOQZSV!SoiKNE7s`A^Y!]&VhF(69'+) a@a'VF/X1_%ya?-n*a;߇+Ǽ\t]W\ZXNЀG>Uv#KXEzЦq(pFmHKE[7Ub)ܟA[AM.r^^Hy~ ROẞ \8SAZnoAndOkxU:5:ӣMFM5yx~Ӹm4R`mhDKrun陒Rq鬋v25򅬾5ׂcnR=KS8)E-%dW~E1|H@By;Npbp_KBαe'H9#unD0HV[nxPAB(Xu˨WXPމ&3>y "f\\ ' ?T̉¡fk=DaXǀƁ93֛PSOy,Z@U=!?j4;".䲔w@qd$0iD1MZOupY&f^RԊvaf6f6XLH#z=:96(BmA\˷8w;vveۙf+[o_.N=^CqjTYϙ|/3uWϚn}(˥rRTchu1W*n5|3M:ɚV%]nb8Ąe%?\aV}&13] pDպ1<$!w:i8X">q4$ئ?qe_ڒtDyn.mԭƌkޥu彑J.Z05l&bЄb
Fkoble3e%ch4kcf֔Qo<VvKZmCK;}t&U|RDm.AUX{("-yXe|+e:fzc}e uLU)l̯]4Sstc=2Ҽ48{*IϋwM {]i\,KT[L6zP'Z|^؉EfH	&~YlK[z$$hmߙ̪i֣$[T'"į<͘gW>'RP[=\4CńkqÔk$Rhپno7N9=r!yW>iBgӇTw'zL4ե8!xi"Y1s @SQdLyT	ߧKՕ>NUz'~旹`<_[$qewKy;rޑA	Oz^x.mPú:<EV8Â^)P {RqN-L>3A,2xhZnBTեX<ڙ+Q~s|عgoϱ+zQN9<xDԞV*&`K]Yii"X~ݕ^͓)b"1YckZڧuZ?bTWZgf])G"aj-֛5?E&.v*K.@{k,vVđ~!!Y
|!?Cae{/F)ϦeJWRIhOVva:8޾{y6mZd0*K"o
ϴ)߳,odf~MnѨF	펱eǨVoP;@rzsk_>O-Gܱ$ڝaN{,Kg}>2z~/uXLn<0%QDp.-Zy/?=1/'e,Q|%VrAfDJS;D9SJ~`Żw?bFzr̀BxF>hsŐab8ȨZԭ<tqd]aJ>]l<Y̶'
7$M 98M=˱^
3Sp67Q CB7@Zwyd*ȷC	gWHGQz:Pu朅@Zh}u=$'3;JfY:l<*F,*",oc9Fׂ7zEgaW_fSW7 ev-%NX_k-o=]N0ř:~h`0/)_{c{,*0;<;m-HX:TɀZ-f\sU2,]"3y,67#x6]wgIwo]wBQ'	;;dD
@dpՐ.F&7f:߷}3giHt#oyvZo֎Q@p_jIųB\KANjW~g;(]fv;BeMVʹ9_j:=1/6VHs1DW6}b3'lG:̒N.׻v]וV	̻N=Q+<kv֑gӠOϘ g#·4 /*6ӄO>u'f8O`w0FLfv88a#%b]B:EhH@/^drrءesE{'&T0dZoﲭ7<~3Sy"r&WYQVĸw]` ;{7wCܧ{nj	F~A	,q_> Q^(,d؜ vG)5q[8	a6!{%Q;m!^zPD|EW:1*v^+_zjweN'OpO`3	9?Qo->, RnS-רvMaCnGCb0{q>wAFXCm\JR5̧Y}QC{h48TyMf@XmkN3?Qhm6B9(/s"|8	KVjekR2&T;(,|P/)Qo56#thk󄨝DfRf@]و=bc11ujNγ.zdKtu3t[
Ra8[UZi}#WϛA3~ws71LM&ϬivrPerkB#>o!.:rP@vί?#ϯOt1uuxs"fo%_8y\Ai̬nʼX7Y54_Zy8HJ$QoYQo՚R+<D_z-cO6Ѳ޻wƯ2ԕVB^"{~#S+ˇ@SƮYz9㮳&R^>]nX'&W5yp4	ط1iz᱙G}8Ճ#T!N^Mg{h!c@D)QfTyB0ʄQhbP(*&Ge2ҮF7`X6'kCAg:c|bϠB8;KU2pW^=OkZn.9} OUw =<xm?F1Ⱦ`gW,}jYjE4pwp"MgkwJ/Yp;\BUpX#AO`;ԃphzNu%}:O%bu7"
[	>cv좳N7&b&fc!h'2%}L#G3-NNiޝ
rbemDird?f/O=އE=4ڸC(jt˺-)Kb'sQ}/	/.jP$y\  u乞a<w^f
C͹Q>]x(|͝f1OP;^aDjsbvt- ^;D/}X	؉>Ψ98\o8O{!g.Tg*D_v{q5r5%C'&.tMϽ.]7>`\nnC=sD-{Z.}\.wpBz{k}诵#/6-k{ QJ9)eghb4Aegqfr[3BBAj2}a_H>?%_:W^W-I6D"'4hJKH7ҳիJ6рq\4qWmq:/{I,Ggek憞xq>g˓aA~e;D!;aX6o>qJ$?J1[fK'(TI?TUv KI*:2JPiq2>ى/7ɺ䉬@3WC)ppjǊYw0_"qxXLA-_;ZLX=@eR	N]ۘ~Mø*柂AP,Qep:w16L8O dpM9 X'C;c4_w7_]Ĭ\EGT18YK8E1D{Rq>na.O'W+S?C%Č׿RZk< KԘr&wGމ5'^Jc&t1%Ce(gL!NOidY$JAY5̂yC;Uj"޵fdPfeVȭVjd,SG݋J5vuy}xYeJ'f;Y]bB v/MR_Y|r}jOU,pO [=q2Ĳ7BT@~'88-WUR?oލAhB'AwLN{Q.9/a96eozo ͍$p}GH8y84e[ۗ?1%Y<u7w3m:jQPۚux3|Oh/|o88KI3pś8׮y}
xS1YH=Xj?RMlׂ1@FE/ǌg<XYyY2s\;szk-:h>pM6T?3(2=Xa?S
w
zzqOz}!O> ?)+<%E?O
|0MPyܬ^Pڽܥ,+Z3=x+<w;wrHvqP?(wJ,CC9CG(w>	CG(w@>ݗ(wXwy{Ku:qr\fPW(u\Ps(uJq(u\u}mqȴ*XqNׅW;̨̋hOwi$_6ou'7$B
\LƬ@I=1/0ǊW'x»210W,KnqLCiz~(Foian&ՠA*`1;^ub?`苔ᵊSF{ewբ	̉j?dpe=B;pL\e,Mle5{D:\!Mo'uҫ^D4(q"D/pr{ބ6Rmtpw{=a7"K_}
yϙ?2s@%"1)I&=ňy&6JQ>6{pt4kÅ;h%R&_`2X?ˇr.?/hSGI%9'${9
9g^j4^t3/5;W/:T{Dll>yyE暠oZ2>+ϗ^toaݩyNH|biy".֜]ҜEDϦ/),1З;ᑼ{m!х">. J\hXnz'n,ʧ	 N% nzoߌӛN{l$
{_ӾH_/`H;g	gQov,WpQB"CQ$#e!e9{*%A``.h3$0|QsIc0iI$},>)rC%Q6TN27àWepHSg@6Ԑ&4xFzڝa8UK~/o?SKcs4?鸺mk5IA_J""9RRQ-5%S9tᢴo8!='I4:G	u."[Rxً+:lOcj;b<ʾc!r_zsSٲJjl3+by=;K֙RxF]̬wS'!FdgBSa=_I81:PO,K5E{vG>l.i~`(s!T]sӅbN	#i@fnk[軐nV,bmTKv764{'$Yz,6VqFZڋYm?nh6mQ_x4c"O+W2>ǜvܼO?Y$~h~wsСQnop.o.od[B[,OO#|쑏&ށ/$OZ==~c[Pw;N):{JuƄi>y=KHhbp1dI׽~%L0w՞ѐ,Wb?]~jmsO2$N}@Wlw[{cWb^8Î1L}#yKu_CtZUňKŪyuv/wL^ȇW;بx"qTyGrv|7x<xDW_-^}@C>[Re._8bk|gEPg7D6sp^K~xn:gU`Q$_?3D2ܿ;tWKEw8b$J^<UR6K[{8m(h)AFIWi#1"V\xg',@OQSTꓐVݑX
>cLXNI^lqVT8FTgGnI|G4ܯ:+YhDCI<_PB<sBl;55HfŬ6$ڨxփ5TPORPyDM]h~*>CC F]; Ӽ}Jj1E远4)	ĉӉTm^W\ba/"/'Q#Qty&6))q>'%ا'TF(~`<.3*D\1>s:oMXQZc	O.{IMG9 15=#mF03JO5jzRcDk|
WQoԷF+\BK&d$H1I=ap#ֻY6Kw1&O+YEx^@Z۩jpG2ækb>y!N*i LszV;o{C..=b$;	oa*U?=ҰDμܝ%%&9t?XDwAuԩkη]OgA;ɺdi4^Vؓ:?tğA/Hc gp,t42Ts!CǤrǠTj2Ⅎ:۫oQdΊjN>~V>pl2ƒ+rHY9, V!3̐w)j|녓䭏*ސhb\
Z?	̅YPnx1N
7l;SsW-fѕغ=baJB0׼']y,HG_J}cY%GQ$SfN\q};)DNDlEI"V	>ehY8z?	gkAl^9#Y%Qo/q?5~#>\=ER\rpTD?v(;Z>)Jxa;Z_:g9+2J&D<Oy2[qh79/,E^NDBFؗыW{[q=M)8F}}<m`6Omb:ϼ셱-Qݫl}z/7GZXlEQMI剡ihq6BH=bsɹ!䠿(W;ٚondsPo,T94eĀU8Vo/e.-y2&U{C!:V#E٢	fAEAl
v|Ӻ:h;mj
-lHqS ~@-gMq.Ҍx4xy04/{z4j)#Sp6E%<kSV)RyQ1` )F<)vJP>bu:&ړ1e
)(yQYOfj8DE0ǝJa>ϲөv<RX))h))DM1簧<)8joҞꩺb#&IkRmr:b`hx~`|AF9t"ȿb_(^o?O,d%G@,f[>M|~۞7+ @OKfd`3;±U Qn/yG*CIe3J^12vhsi?^BH=`}df	F^&KnEJ9ڇ@`gA##x:,ۿ$igou>|mj1ۈz]WWYvX*0AN[<\}(˸O7F/FX\@	$nX$BY:bh(+FIO[X=/Tmʷ8|a70k!x:h6!XAӏ4҂,ۖLzޟ͔<),Gi335A
yDqjYXs1YH&=| Wi+KOWO6%M3O+ہ7vOOcZ`aԤ|6lxq؂$ģDo9IWS,WL^n!TX]Ҙ_9z7.6oy4$ǔG)ҎD-c-֙:{Z1wS+8?)Q f'/)!7^ʹznI܎IF#ڑvIbi&ڍ$I7#	ɴ4BI6ܳa0ӭ4m44t)nie-Mˠ[BׅBH[&],_|ۀZRgvvvgwfv}'x}߀}_wuImԲL2eG^ڪp5; >16!p>>oM j9oxGa>t[\6դ|	,Zt.j7᛾xkUyP>3$,<-&O+W{BN5<Jpތ|hMNkG6}v>6;;Rejq~KKW|ppuniUNȧҟi]HORbv+yсu{gQ88>v'0H q?sĥg!7X6O8Y6SnJ={w?3{87ZbysYэcn>uYڗ?{x%nE{ƹ+p̮ҬHw4YkDK-zi=r9]/hFwSG諷>}R>r;5,=}s(-t1lponA3i7؉WGУKѫ3kjzl^X3*ީ|݄oQ?[N:ں=R=hI*歛>vLtg𤅦Qy#\d~Dx0l@qzjGXl09hkH,Gq<ۏYizQ܏zQAMwM2էBBDdg1kM(*p~5u1c:A0͎GZ>;= qpէ1}z&7wp,Lnu{N@)f @OzڌXz ~ |@"{)ľ؏G[=/ݏi?@|~-GNHs;as+	IѯǎcckLh|z4Q@؃&Hc
$[vcBsFn`$9r$^?,ܾܯz?L2}0`/$9Ǡox=GA;@ႛ1~S=<!AAwC.1	r<b'F{)p}$ێ}vN }d#O Lmus @?~0 Dz@w|=6wù#҃bF}D=1E܋vG/G o>?<d5XzQloGvg>EwPy>-ހFt	e u;ۂl9Z0Ʒr
_r@w pE{0Q{0{ 5/``z W?cf6h*G֎/}g,zXuau`#:$Gڰ`Ԃ[	FRa B=  Ӂ'^8w (?+b;bkAތr="@!  7,`
Ev4B ;}pm /r8" pCx0(Jx ."pB?wdBT,2JB
}gm%|;WYϯD<>n=g׻{	QNG	ӋGDt`[.0=:1.0N`уz?ƕ_Rj"TJ0LH1FeHEfx#]L=޸?0%Ven*S)Ap/ZnV,.BK__efsyk݌~q:'Uކɧ@/W6ye
#nQ"D꺡6_,0]F6a}ffq,imD4LD4A36\Ce.pț1"3,ٙ9D4N-01Zqkl3g͜(g1IŹ3˜\2#<̶yFs3k40ト	8IlT(.pUD̉qtAyq2"e.7y32&d؇N̉:qqrN.] hÒ38amUg>*ys6W33/2pì^e˝;1A` 8tȅ"A8] tq
D2' XN@9Zr#G1'9lsJJNs4}=MMMeeeuuven7Ç<x87Mp|>=|.ϳNӴG#|_#</z#Th{ӆOBX+ΜƂ^S9Mͪ>wgl_,olVvoi37mBt->n~J



s
	
w	
W


wতHH	ϤRz@z@@I$C-	.l((c:sISI0LR<ÌE%ˋ"<(Ǜ"V.
"%
\x2VTXg QKPfK<m옽!dQ,$J>DXdKdoh9k/Xr8(ߢbn]ѡ_kK7ktfGz2~y7!k՛_[Hl­7Mϛt]5^owFaИwneQx]7Ceο`հo+1~{pfaNs.XjNdn6?a^;G\ۯHܟPos^Wx$/o,1}FWHGa['
fyx$ʴp|N5W1Hճm~pB
]c̛`#I2Ŕ~{F[[S;)HS)qț}Ȓs͙4Y^$hp|/ccH9ڒË/Kn7>92[}}\8PH_9
/`b))B5QxCI<r,X_ΤJ4sKH50ǎAp\	 ;cb]T yV$dƅr|KFOB aZFy# 勹yp4CcewR'd4O4І\Ԕv)y.`Eƅ+FGu&.4`a&ʎys%5% Amʘp<(aٖ'`YIn&2Q"Rܡ\oɋ.bm+@ȕa%+{z#yIT;Kt (oD#:^.2f)MrTIR(&,o2n,Sm7^=%#nX<dJKiC4ZQ 9J!~҈")ːp4h4׻{B1UژmQMh=xyt0u./>%T gohw 1a:LL7^D~{AI6A
d"VT(J7& dU
I@	L\8TQ	opᖕSEwKiҶY"),ijL8Ð:at/S)H2pgB[AOd>zn%R=,2t&GkV_L5I7<~
vq=}3L盗˥j&o<e|DXm7κC+4$HBzoDo\UEROF!Mc*%PXc-D
Ke{%ULepI-0Ԓk,T0Иs!OpC"K"K(*N3I<)&:\$j1R.$?Vྙp]=IpRsKA7}%bB,TPftݸ{;v[:7>m܌C˧ЂdD}?|}`KC["$vхȈ4:~Z2?uz2bs:Pr-V̂6z:TED弶8s_Q;yR9 X;T`(=G~{B+˰yb&@ZF4d$.JYs$	+HsoSTzu[!VWa>zRcrUzS=m4!{ ȿ
FWh.OmS1v[,kegB䧂ߺRaa=	!F٢Z0Tq3gਈrd{L~ռ|BN:6V)X b ;E+j>TUjjwO:!gi=|a8~~!$˪).ld|prDKU-oTh7aWj+Q\&3IrBJ&* QPiih6@/Pޒ8zePߡ2"{T|FKT xoTj;r>C5gIzsQYG)4"t03Ϧ_5!zrԒhdUR¡?"
Np1ТFSE,[*ȱY%DE1k>)Dhk5(@xdfIŘ|`,r?*Diu8j~b9!S笖YYo7{y-1LaoW+hs#= wVEҬ2'ƫb+3%u	[,&5U<u]#H3FGKO=HdMWS^*ʀJYFY3[mؾĚ\.)U!j G.U#jjcYz8B +/XŲlP@β$LhToʉo(NآdShu/B>n8b.Idd/dJ$m@\QYץtS4>oe)Lt[+<b{#

Y+"{U`W=2z1hLAA-X0$y|ݣA)ewf*FQ8($Kq}oREU_5pXQn6
fXVd0E)/I-6d0m֬NI7:DsW&gew02O@*Uq*\=E
m_St|>*)His4㡑j5B-ķھ-XWqC͵}gP5}.RyY*3uUYKТ+UMF7å*@v32W{7iV>/rۡοkKqla3@q.NK똬}u9#1t6}ϵoQ8?3վgoϷ.(E3ƽE}]yy14!2FGB7n.U+`<U{a5HQʟ	RtC솋x]Ja5z۽h]h2_[o2BS[Zr}oo[xwZ9n8i8_G4SyB`O($qI2dDƁ ZQ#siyc'ht5[L}	
O~X1B2D{ُCy=g 45Hhdi*5V+)[HLE118C8p<b(-(CO܉w5OڏB5}	ՅqʿMiS}l*Ce.~{{'{IozT\˾KcvZ_/'TYX|=^ƷoM7Ӯ?e{2_W_^Mdx6ۦzk2\*;?qFoЎ6.9)7V7^ĸm},~>+<]]G=7=\z?Lw#eQyX}FX{8B?4?Z>|oÁ}iCG|y#s;q?i'ϗ5OccWB9JǛ]܊/6pK45w|d59GL%$?b1h+ȩVY2	`0{*dPn#26V^Ȃ&jSL18]~~߁I6\l]cmr3(/><ܤR,ح^lÉN|)tvإfqG7K4#o`Q06](I') 8*$ۚ
>x aJZUJm,A]ngT%LG-j+1`T><AYz9	͵Y,j6vWDƫDm~U^oki.Da
 1{%HL\ZrO@NTs;mxڏ6(Zg:ca$iLR^bh4}V-is)Z^^(Ɖ%#IwܢIzǌ_e8CrlC4Z5;,]͛wIa=G>V#ݕ}/b$Bv" ę7i)U̩e-Uj4@|Num6C3Q"W[uSB@[K6|If$F66YVֈdkn/~%<@nNzxtYR$,PdDQx-\ѻk)H/=	_ ^˾Y^BC}I_e.dAaE@=<ds%m	ԃ2_iBҲ#txh!M5yYIA|ɞl3T73JJ$ m`%|{x.Nl\v>=
UL(gz[dZ*kb5I|_yࡿsg7WSOT	d>j2 (DTч(IN!i3x  5R0P|bI3/Gj튷7ϗxx"p3xӞZ6>YЋ2{7o؛utht?ްn`y5f'a{ns6F&釗Mtaכy]Ѱcs>;X}-&śT^!kfs5ul.zu/o߼a+F\m}~ˬV$?mMa+oc~0u6Fv7'h?ו	?~K_6oap0luFb=(#H[&(&"ǸN-7Q.ǿWgFFcB1lC>0Aۍybe"cY< ; ͖csbl/tdU
Y="ZۼMWe|=t^#<FJ(GATB8	W#7b7`HHdi,SLׄ
`ҋl'd"/Ɍ0QIe*:,f	#dd66A%AA78Ӭ	[Шp^8Pw{׏~Z鯇;@BeL'|PK'"19'h@|)ȚrW#Mj=|ٽ4޷	`@su~Qcm;@~dWQ+MP}
>6րV.4T:OM"#E8a'0I'\6˖ą<scêіli~~oSk1u%quGTQeH>+`penm@)7珽=t>CGpx)H
Ze<{AIFj-
P@|\ChʳOC3G"B&ZfeJÚSGmRW=FI̬ʽ_^ŏ#"9-0֘	&>C9iXi01)%s"8,Ɋ	y|dJ.ݔ]iM됸zH>Jp)b3д1.ވ7]]vI|@n߀ݭ`}"hC~;ۻ3wZ|XT.CN@3>]4nLǭOG_z5x?M2^\ܿo ^ng/5~g@&Ҟ޿n7n^lF/~뫁.|Tޣ/B8zH@T~ܹyW&Bn_ j53Iܕl-/իzjZ]e )ø]7u^4G͠4sP-E{ƈV*`\9Bh(i 쵀ˈ;NnI>h#V%r)"A#_8oG*p8wr6I$RMeЪ	E^ݚ,]돠iZ
t0wUJ9b҂b)`gI 9p!8w떍[Т|KeGQۛP۠/HAmQip庵^!WG(@g^e^ɳү9/O^Z``nv3*qg/oO?Ez~
vkb=*ӮO#-[qڮwj񱇵^߂5}vz}r>{~zؽ??z~:6@RNSP4zvׂov<
/m%}%}_/O_7/O/O1zqz~E}o2~5t1+{jZ ~UC+5rkb DKkEam+P+ӌ<~{unۻ^lmw*W^WsCS۽^ۯ%_TbE%d\"|boDPL&Җsɛ.7}Sr8-墭.B>QQ\{aQrM AA>|;[x3v5ʀwA
;A+Ƭ'Qfa(5U7؈EHɧiZI*ٛk7}^4&\v5zLvY[W}%w	;e&;_nރ1y;÷t4hTwNnORgŭO.M d"oE6etY	D?Xl#:p"*쨾7RR(.?t=QW3CUg{{&rGA7CWI<gpƮ:)k-N3"H}_GrGg	K%B)B
Ǜ@BWNPN%MK{v$qS6ϝvR .עha D2cGoQ^$X|Z\Za	gDA~ƭe+ dPYf!9"<1]P`s\}Za4qND
CH)V?RT30I(MG1j~X UDnUW ۘB2[)D'XDLJLƓBZ Z	wCC'ѳZ9i;JMWSTM:CR0sWl8a,]^إ
lB&#(&fiJRTPRypb`Y(paJ+wXLiFglll#,8q3nlt^JM	0b=|]!Q	E
˟*Y2Sfj!*BO#ףnAמ$Jm	װEq̤ʙBS00Z),Ss~/Ԍ!uS=,ZݔoտLurƑEs\g,Vj